Port or introduce an InstantSearch widget or connector-driven feature across this monorepo's JavaScript, React, and Vue flavors. Use when the task is to add a missing wrapper around an existing connector, bring a widget from one flavor to another, or implement a new shared widget end-to-end in `instantsearch.js`, `react-instantsearch`, and `vue-instantsearch`. Triggers include requests like "port X to vue", "add Y to react-instantsearch", "make Z available in all flavors", or "implement the missing InstantSearch wrapper for this connector".
python3 scripts/audit_widget_coverage.py <widget-kebab-name> from this skill folder before editing.--repo /path/to/instantsearch if your current working directory is not inside the InstantSearch repo.packages/vue-instantsearch/src/__tests__/common-widgets.test.js or common-connectors.test.js as evidence that the connector exists but the Vue wrapper still needs work.packages/instantsearch.js/src/connectors/<widget>/connect<Pascal>.tspackages/instantsearch.js/src/widgets/<widget>/<widget>.tsxpackages/react-instantsearch-core/src/connectors/use<Pascal>.tspackages/react-instantsearch/src/widgets/<Pascal>.tsxpackages/react-instantsearch/src/ui/<Pascal>.tsxpackages/vue-instantsearch/src/components/<Pascal>.vue or .jstests/common/widgets/<widget>/tests/common/connectors/<widget>/Some widgets reuse another widget's connector with different defaults or UI. For example, menuSelect uses connectMenu/useMenu (not a dedicated connectMenuSelect). The audit will show no for connector and hook rows — this is expected. The $$widgetType still differs (ais.menuSelect vs ais.menu). When porting a variant widget, skip connector/hook creation and reuse the existing hook directly in the widget file.
Known variants: menuSelect → connectMenu/useMenu.
$$widgetType.instantsearch.js, then update every flavor and both common test suites.Hits.js, Highlighter.js, DynamicWidgets.js, and util/vue-compat.js before designing the wrapper.$$widgetType, and test style.packages/instantsearch.js/src/connectors/index.ts.packages/instantsearch.js/src/widgets/index.ts.packages/react-instantsearch-core/src/index.ts.packages/react-instantsearch/src/widgets/index.ts; packages/react-instantsearch/src/index.ts already re-exports widgets.packages/vue-instantsearch/src/widgets.js; src/instantsearch.js and the plugin re-export and register from there automatically.instantsearch-ui-components when the markup can be shared.src/ui/<Pascal>.tsx whenever the widget has no shared factory in instantsearch-ui-components. This includes simple widgets like MenuSelect (a plain <select>) — src/ui/ is for all React-rendered markup, not only complex cases..vue SFCs for slot-heavy markup and .js render functions with renderCompat when reusing instantsearch-ui-components.tests/common/widgets/<widget>/ whenever the wrapper behavior changes.tests/common/connectors/<widget>/ whenever connector params or render state change.common-widgets.test.* and common-connectors.test.*.throw new Error('X is not supported in ...') placeholder with real setup code in the target flavor's common-widgets.test.*.skippedTests entry in testOptions for that widget.packages/react-instantsearch/src/widgets/__tests__/__utils__/all-widgets.tsx with the required minimum props.examples/*/e-commerce only when the widget fits the shared storefront UX or existing Playwright coverage.$$widgetType aligned across flavors.createWidgetMixin, createSuitMixin, scoped slots, and renderCompat.chat is now available in UMD; no special exclusions apply.