react-instantsearch 7.39.1 → 7.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,9 +3,17 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "EXPERIMENTAL_Autocomplete", {
7
- enumerable: true,
8
- get: function() {
6
+ function _export(target, all) {
7
+ for(var name in all)Object.defineProperty(target, name, {
8
+ enumerable: true,
9
+ get: Object.getOwnPropertyDescriptor(all, name).get
10
+ });
11
+ }
12
+ _export(exports, {
13
+ get Autocomplete () {
14
+ return Autocomplete;
15
+ },
16
+ get EXPERIMENTAL_Autocomplete () {
9
17
  return EXPERIMENTAL_Autocomplete;
10
18
  }
11
19
  });
@@ -18,13 +26,13 @@ var _to_consumable_array = require("@swc/helpers/_/_to_consumable_array");
18
26
  var _type_of = require("@swc/helpers/_/_type_of");
19
27
  var _instantsearchuicomponents = require("instantsearch-ui-components");
20
28
  var _chat = require("instantsearch.js/cjs/lib/chat");
21
- require("instantsearch.js/cjs/lib/utils");
29
+ var _utils = require("instantsearch.js/cjs/lib/utils");
22
30
  var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
23
31
  var _reactinstantsearchcore = require("react-instantsearch-core");
24
32
  var _AutocompleteSearch = require("../components/AutocompleteSearch");
25
33
  var _Highlight = require("./Highlight");
26
34
  var _ReverseHighlight = require("./ReverseHighlight");
27
- var Autocomplete = (0, _instantsearchuicomponents.createAutocompleteComponent)({
35
+ var AutocompleteUiComponent = (0, _instantsearchuicomponents.createAutocompleteComponent)({
28
36
  createElement: _react.createElement,
29
37
  Fragment: _react.Fragment
30
38
  });
@@ -210,19 +218,20 @@ function getMediaQueryList(mediaQuery) {
210
218
  setIsModalOpen: setIsModalOpen
211
219
  };
212
220
  }
213
- function EXPERIMENTAL_Autocomplete(props) {
221
+ function Autocomplete(props) {
214
222
  var _showRecent_classNames, _showRecent_classNames1, _showRecent_classNames2, _showRecent_classNames3;
215
223
  var indices = 'indices' in props ? props.indices : undefined;
216
224
  var feeds = 'feeds' in props ? props.feeds : undefined;
217
225
  var isFeedsMode = feeds !== undefined;
218
- var showQuerySuggestions = props.showQuerySuggestions, showPromptSuggestions = props.showPromptSuggestions, showRecent = props.showRecent, userSearchParameters = props.searchParameters, detachedMediaQuery = props.detachedMediaQuery, tmp = props.translations, userTranslations = tmp === void 0 ? {} : tmp, transformItems = props.transformItems, restProps = _object_without_properties._(props, [
226
+ var showQuerySuggestions = props.showQuerySuggestions, showPromptSuggestions = props.showPromptSuggestions, showRecent = props.showRecent, userSearchParameters = props.searchParameters, detachedMediaQuery = props.detachedMediaQuery, tmp = props.translations, userTranslations = tmp === void 0 ? {} : tmp, transformItems = props.transformItems, _props_requiresSearch = props.requiresSearch, requiresSearch = _props_requiresSearch === void 0 ? true : _props_requiresSearch, restProps = _object_without_properties._(props, [
219
227
  "showQuerySuggestions",
220
228
  "showPromptSuggestions",
221
229
  "showRecent",
222
230
  "searchParameters",
223
231
  "detachedMediaQuery",
224
232
  "translations",
225
- "transformItems"
233
+ "transformItems",
234
+ "requiresSearch"
226
235
  ]);
227
236
  var autoFocus = restProps.autoFocus, placeholder = restProps.placeholder, classNames = restProps.classNames;
228
237
  // Eager-mount only when `autoFocus` is set — otherwise wait for first focus
@@ -231,19 +240,21 @@ function EXPERIMENTAL_Autocomplete(props) {
231
240
  var translations = _object_spread._({}, DEFAULT_TRANSLATIONS, userTranslations);
232
241
  var _useInstantSearch = (0, _reactinstantsearchcore.useInstantSearch)(), indexUiState = _useInstantSearch.indexUiState, indexRenderState = _useInstantSearch.indexRenderState, status = _useInstantSearch.status;
233
242
  var compositionID = (0, _reactinstantsearchcore.useInstantSearchContext)().compositionID;
243
+ var dependsOn = requiresSearch ? 'search' : 'none';
234
244
  var refine = (0, _reactinstantsearchcore.useSearchBox)({}, _object_spread._({
235
245
  $$type: 'ais.autocomplete',
236
- $$widgetType: 'ais.autocomplete'
246
+ $$widgetType: 'ais.autocomplete',
247
+ dependsOn: dependsOn
237
248
  }, props.aiMode ? {
238
249
  opensChat: true
239
250
  } : {})).refine;
240
251
  var domId = useAutocompleteId();
241
252
  var instanceKey = domId.replace(/:/g, '');
242
253
  if (isFeedsMode && indices !== undefined) {
243
- throw new Error('EXPERIMENTAL_Autocomplete: `feeds` and `indices` are mutually exclusive.');
254
+ throw new Error('Autocomplete: `feeds` and `indices` are mutually exclusive.');
244
255
  }
245
256
  if (isFeedsMode && !compositionID) {
246
- throw new Error('EXPERIMENTAL_Autocomplete in feeds-mode requires a composition-based <InstantSearch> (compositionID must be set).');
257
+ throw new Error('Autocomplete in feeds-mode requires a composition-based <InstantSearch> (compositionID must be set).');
247
258
  }
248
259
  var isSearchStalled = status === 'stalled';
249
260
  var searchParameters = _object_spread._({
@@ -458,7 +469,7 @@ function EXPERIMENTAL_Autocomplete(props) {
458
469
  }
459
470
  setActivated(true);
460
471
  };
461
- return /*#__PURE__*/ _react.default.createElement(Autocomplete, _object_spread_props._(_object_spread._({}, shellRootProps), {
472
+ return /*#__PURE__*/ _react.default.createElement(AutocompleteUiComponent, _object_spread_props._(_object_spread._({}, shellRootProps), {
462
473
  classNames: classNames
463
474
  }), isDetached ? /*#__PURE__*/ _react.default.createElement(AutocompleteDetachedSearchButton, {
464
475
  query: (_indexUiState_query = indexUiState.query) !== null && _indexUiState_query !== void 0 ? _indexUiState_query : '',
@@ -501,7 +512,7 @@ function EXPERIMENTAL_Autocomplete(props) {
501
512
  }));
502
513
  if (isFeedsMode) {
503
514
  return /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Index, {
504
- EXPERIMENTAL_isolated: true,
515
+ isolated: true,
505
516
  indexName: compositionID,
506
517
  indexId: "ais-autocomplete-".concat(instanceKey)
507
518
  }, /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Configure, searchParameters), /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Feeds, {
@@ -512,7 +523,7 @@ function EXPERIMENTAL_Autocomplete(props) {
512
523
  }), innerAutocomplete);
513
524
  }
514
525
  return /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Index, {
515
- EXPERIMENTAL_isolated: true,
526
+ isolated: true,
516
527
  indexId: "ais-autocomplete-".concat(instanceKey)
517
528
  }, /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Configure, searchParameters), indicesConfig.map(function(index) {
518
529
  return /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Index, {
@@ -522,6 +533,7 @@ function EXPERIMENTAL_Autocomplete(props) {
522
533
  }, /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Configure, index.searchParameters));
523
534
  }), innerAutocomplete);
524
535
  }
536
+ var EXPERIMENTAL_Autocomplete = (0, _utils.deprecate)(Autocomplete, 'EXPERIMENTAL_Autocomplete is no longer experimental. Please use Autocomplete instead.');
525
537
  function InnerAutocomplete(_0) {
526
538
  var indicesConfig = _0.indicesConfig, refineSearchBox = _0.refineSearchBox, isSearchStalled = _0.isSearchStalled, getSearchPageURL = _0.getSearchPageURL, userOnSelect = _0.onSelect, indexUiState = _0.indexUiState, isSearchPage = _0.isSearchPage, PanelComponent = _0.panelComponent, showRecent = _0.showRecent, recentSearchConfig = _0.recentSearchConfig, showQuerySuggestions = _0.showQuerySuggestions, showPromptSuggestions = _0.showPromptSuggestions, chatRenderState = _0.chatRenderState, transformItems = _0.transformItems, placeholder = _0.placeholder, autoFocus = _0.autoFocus, translations = _0.translations, classNames = _0.classNames, aiMode = _0.aiMode, domId = _0.domId, detached = _0.detached, props = _object_without_properties._(_0, [
527
539
  "indicesConfig",
@@ -807,7 +819,7 @@ function InnerAutocomplete(_0) {
807
819
  "ref"
808
820
  ]);
809
821
  if (isDetached) {
810
- return /*#__PURE__*/ _react.default.createElement(Autocomplete, _object_spread_props._(_object_spread._({}, props, rootProps), {
822
+ return /*#__PURE__*/ _react.default.createElement(AutocompleteUiComponent, _object_spread_props._(_object_spread._({}, props, rootProps), {
811
823
  rootRef: rootRef,
812
824
  classNames: classNames
813
825
  }), /*#__PURE__*/ _react.default.createElement(AutocompleteDetachedSearchButton, {
@@ -833,7 +845,7 @@ function InnerAutocomplete(_0) {
833
845
  }, searchBoxContent), panelContent)));
834
846
  }
835
847
  // Normal (non-detached) rendering
836
- return /*#__PURE__*/ _react.default.createElement(Autocomplete, _object_spread_props._(_object_spread._({}, props, rootProps), {
848
+ return /*#__PURE__*/ _react.default.createElement(AutocompleteUiComponent, _object_spread_props._(_object_spread._({}, props, rootProps), {
837
849
  rootRef: rootRef,
838
850
  classNames: classNames
839
851
  }), searchBoxContent, panelContent);
@@ -52,7 +52,7 @@ var _SearchIndexTool = require("./chat/tools/SearchIndexTool");
52
52
  var ChatUiComponent = (0, _instantsearchuicomponents.createChatComponent)({
53
53
  createElement: _react.createElement,
54
54
  Fragment: _react.Fragment,
55
- memo: _react.memo,
55
+ useMemo: _react.useMemo,
56
56
  useState: _react.useState
57
57
  });
58
58
  function createDefaultTools(itemComponent, getSearchPageURL) {
@@ -10,98 +10,26 @@ Object.defineProperty(exports, "createCarouselTool", {
10
10
  }
11
11
  });
12
12
  var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
- var _object_spread = require("@swc/helpers/_/_object_spread");
14
13
  var _instantsearchuicomponents = require("instantsearch-ui-components");
15
- var _utils = require("instantsearch.js/cjs/lib/utils");
16
14
  var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
17
- var _components = require("../../../components");
18
15
  function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
19
- var Button = (0, _instantsearchuicomponents.createButtonComponent)({
20
- createElement: _react.createElement
16
+ var SearchLayoutUIComponent = (0, _instantsearchuicomponents.createCarouselToolComponent)({
17
+ createElement: _react.createElement,
18
+ Fragment: _react.Fragment,
19
+ useMemo: _react.useMemo,
20
+ useRef: _react.useRef,
21
+ useState: _react.useState
21
22
  });
22
- function SearchLayoutComponent(param) {
23
- var message = param.message, applyFilters = param.applyFilters, onClose = param.onClose, sendEvent = param.sendEvent;
24
- var _ref;
25
- var _output_hits;
26
- var input = message === null || message === void 0 ? void 0 : message.input;
27
- var output = message === null || message === void 0 ? void 0 : message.output;
28
- var hitsWithAbsolutePosition = (0, _utils.addAbsolutePosition)((output === null || output === void 0 ? void 0 : output.hits) || [], 0, ((_ref = input === null || input === void 0 ? void 0 : input.number_of_results) !== null && _ref !== void 0 ? _ref : output === null || output === void 0 ? void 0 : (_output_hits = output.hits) === null || _output_hits === void 0 ? void 0 : _output_hits.length) || 5);
29
- var items = (0, _utils.addQueryID)(hitsWithAbsolutePosition, output === null || output === void 0 ? void 0 : output.queryID);
30
- var MemoedHeaderComponent = _react.default.useMemo(function() {
31
- return function(props) {
32
- return /*#__PURE__*/ _react.default.createElement(HeaderComponent, _object_spread._({
33
- nbHits: output === null || output === void 0 ? void 0 : output.nbHits,
34
- input: input,
35
- hitsPerPage: items.length,
36
- onClose: onClose,
37
- applyFilters: applyFilters
38
- }, props));
39
- };
40
- }, [
41
- items.length,
42
- input,
43
- output === null || output === void 0 ? void 0 : output.nbHits,
44
- applyFilters,
45
- onClose
46
- ]);
47
- return /*#__PURE__*/ _react.default.createElement(_components.Carousel, {
48
- items: items,
23
+ var SearchLayoutComponent = function SearchLayoutComponent(toolProps) {
24
+ return /*#__PURE__*/ _react.default.createElement(SearchLayoutUIComponent, {
25
+ getSearchPageURL: getSearchPageURL,
26
+ headerProps: {
27
+ showViewAll: showViewAll
28
+ },
49
29
  itemComponent: itemComponent,
50
- sendEvent: sendEvent,
51
- showNavigation: false,
52
- headerComponent: MemoedHeaderComponent
30
+ toolProps: toolProps
53
31
  });
54
- }
55
- function HeaderComponent(param) {
56
- var canScrollLeft = param.canScrollLeft, canScrollRight = param.canScrollRight, scrollLeft = param.scrollLeft, scrollRight = param.scrollRight, nbHits = param.nbHits, input = param.input, hitsPerPage = param.hitsPerPage, applyFilters = param.applyFilters, onClose = param.onClose;
57
- if ((hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0) < 1) {
58
- return null;
59
- }
60
- return /*#__PURE__*/ _react.default.createElement("div", {
61
- className: "ais-ChatToolSearchIndexCarouselHeader"
62
- }, /*#__PURE__*/ _react.default.createElement("div", {
63
- className: "ais-ChatToolSearchIndexCarouselHeaderResults"
64
- }, nbHits && /*#__PURE__*/ _react.default.createElement("div", {
65
- className: "ais-ChatToolSearchIndexCarouselHeaderCount"
66
- }, hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0, " of ", nbHits.toLocaleString(), " result", nbHits > 1 ? 's' : ''), showViewAll && /*#__PURE__*/ _react.default.createElement(Button, {
67
- variant: "ghost",
68
- size: "sm",
69
- onClick: function onClick() {
70
- if (!input || !applyFilters) return;
71
- var params = applyFilters({
72
- query: input.query,
73
- facetFilters: (0, _instantsearchuicomponents.getFacetFiltersFromToolInput)(input)
74
- });
75
- if (getSearchPageURL && new URL(getSearchPageURL(params)).pathname !== window.location.pathname) {
76
- window.location.href = getSearchPageURL(params);
77
- }
78
- onClose();
79
- },
80
- className: "ais-ChatToolSearchIndexCarouselHeaderViewAll"
81
- }, "View all", /*#__PURE__*/ _react.default.createElement(_instantsearchuicomponents.ArrowRightIcon, {
82
- createElement: _react.createElement
83
- }))), (hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0) > 2 && /*#__PURE__*/ _react.default.createElement("div", {
84
- className: "ais-ChatToolSearchIndexCarouselHeaderScrollButtons"
85
- }, /*#__PURE__*/ _react.default.createElement(Button, {
86
- variant: "outline",
87
- size: "sm",
88
- iconOnly: true,
89
- onClick: scrollLeft,
90
- disabled: !canScrollLeft,
91
- className: "ais-ChatToolSearchIndexCarouselHeaderScrollButton"
92
- }, /*#__PURE__*/ _react.default.createElement(_instantsearchuicomponents.ChevronLeftIcon, {
93
- createElement: _react.createElement
94
- })), /*#__PURE__*/ _react.default.createElement(Button, {
95
- variant: "outline",
96
- size: "sm",
97
- iconOnly: true,
98
- onClick: scrollRight,
99
- disabled: !canScrollRight,
100
- className: "ais-ChatToolSearchIndexCarouselHeaderScrollButton"
101
- }, /*#__PURE__*/ _react.default.createElement(_instantsearchuicomponents.ChevronRightIcon, {
102
- createElement: _react.createElement
103
- }))));
104
- }
32
+ };
105
33
  return {
106
34
  layoutComponent: SearchLayoutComponent
107
35
  };
package/dist/es/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from 'react-instantsearch-core';
2
2
  export { useStickToBottom } from './lib/useStickToBottom.js';
3
- export { EXPERIMENTAL_Autocomplete } from './widgets/Autocomplete.js';
3
+ export { Autocomplete, EXPERIMENTAL_Autocomplete } from './widgets/Autocomplete.js';
4
4
  export { Breadcrumb } from './widgets/Breadcrumb.js';
5
5
  export { DisplayResultsToolType, MemorizeToolType, MemorySearchToolType, PonderToolType, RecommendToolType, SearchIndexToolType } from 'instantsearch.js/es/lib/chat/index.js';
6
6
  export { Chat, createDefaultTools } from './widgets/Chat.js';
@@ -92,6 +92,13 @@ type AutocompleteCommonProps<TItem extends BaseHit> = ComponentProps<'div'> & {
92
92
  getSearchPageURL?: (nextUiState: IndexUiState) => string;
93
93
  onSelect?: AutocompleteIndexConfig<TItem>['onSelect'];
94
94
  transformItems?: (indices: TransformItemsIndicesConfig[]) => TransformItemsIndicesConfig[];
95
+ /**
96
+ * Whether this widget should make InstantSearch require a main search request.
97
+ * If this is the only widget, and you mark `requiresSearch: false`, no search request will happen.
98
+ *
99
+ * @default true
100
+ */
101
+ requiresSearch?: boolean;
95
102
  panelComponent?: (props: {
96
103
  elements: PanelElements;
97
104
  indices: ReturnType<typeof useAutocomplete>['indices'];
@@ -135,5 +142,7 @@ export type AutocompleteFeedsProps<TItem extends BaseHit> = AutocompleteCommonPr
135
142
  showPromptSuggestions?: FeedsShowPromptSuggestionsConfig;
136
143
  };
137
144
  export type AutocompleteProps<TItem extends BaseHit> = AutocompleteIndicesProps<TItem> | AutocompleteFeedsProps<TItem>;
138
- export declare function EXPERIMENTAL_Autocomplete<TItem extends BaseHit = BaseHit>(props: AutocompleteProps<TItem>): React.JSX.Element;
145
+ export declare function Autocomplete<TItem extends BaseHit = BaseHit>(props: AutocompleteProps<TItem>): React.JSX.Element;
146
+ /** @deprecated use Autocomplete instead */
147
+ export declare const EXPERIMENTAL_Autocomplete: typeof Autocomplete;
139
148
  export {};
@@ -6,14 +6,14 @@ import { _ as _$3 } from '@swc/helpers/esm/_to_consumable_array.js';
6
6
  import { _ as _$5 } from '@swc/helpers/esm/_type_of.js';
7
7
  import { createAutocompleteComponent, createAutocompletePanelComponent, createAutocompleteIndexComponent, createAutocompleteSuggestionComponent, createAutocompletePromptSuggestionComponent, createAutocompleteRecentSearchComponent, createAutocompleteDetachedContainerComponent, createAutocompleteDetachedOverlayComponent, createAutocompleteDetachedFormContainerComponent, createAutocompleteDetachedSearchButtonComponent, createAutocompletePropGetters, createAutocompleteStorage, cx, getPromptSuggestionHits, isPromptSuggestion } from 'instantsearch-ui-components';
8
8
  import { openChat, isChatBusy } from 'instantsearch.js/es/lib/chat/index.js';
9
- import 'instantsearch.js/es/lib/utils/index.js';
9
+ import { deprecate } from 'instantsearch.js/es/lib/utils/index.js';
10
10
  import React, { createElement, Fragment, useEffect, useMemo, useRef, useState, useLayoutEffect } from 'react';
11
11
  import { useInstantSearch, useInstantSearchContext, useSearchBox, Index, Configure, Feeds, useAutocomplete } from 'react-instantsearch-core';
12
12
  import { AutocompleteSearch } from '../components/AutocompleteSearch.js';
13
13
  import { Highlight } from './Highlight.js';
14
14
  import { ReverseHighlight } from './ReverseHighlight.js';
15
15
 
16
- var Autocomplete = createAutocompleteComponent({
16
+ var AutocompleteUiComponent = createAutocompleteComponent({
17
17
  createElement: createElement,
18
18
  Fragment: Fragment
19
19
  });
@@ -199,19 +199,20 @@ function getMediaQueryList(mediaQuery) {
199
199
  setIsModalOpen: setIsModalOpen
200
200
  };
201
201
  }
202
- function EXPERIMENTAL_Autocomplete(props) {
202
+ function Autocomplete(props) {
203
203
  var _showRecent_classNames, _showRecent_classNames1, _showRecent_classNames2, _showRecent_classNames3;
204
204
  var indices = 'indices' in props ? props.indices : undefined;
205
205
  var feeds = 'feeds' in props ? props.feeds : undefined;
206
206
  var isFeedsMode = feeds !== undefined;
207
- var showQuerySuggestions = props.showQuerySuggestions, showPromptSuggestions = props.showPromptSuggestions, showRecent = props.showRecent, userSearchParameters = props.searchParameters, detachedMediaQuery = props.detachedMediaQuery, tmp = props.translations, userTranslations = tmp === void 0 ? {} : tmp, transformItems = props.transformItems, restProps = _(props, [
207
+ var showQuerySuggestions = props.showQuerySuggestions, showPromptSuggestions = props.showPromptSuggestions, showRecent = props.showRecent, userSearchParameters = props.searchParameters, detachedMediaQuery = props.detachedMediaQuery, tmp = props.translations, userTranslations = tmp === void 0 ? {} : tmp, transformItems = props.transformItems, _props_requiresSearch = props.requiresSearch, requiresSearch = _props_requiresSearch === void 0 ? true : _props_requiresSearch, restProps = _(props, [
208
208
  "showQuerySuggestions",
209
209
  "showPromptSuggestions",
210
210
  "showRecent",
211
211
  "searchParameters",
212
212
  "detachedMediaQuery",
213
213
  "translations",
214
- "transformItems"
214
+ "transformItems",
215
+ "requiresSearch"
215
216
  ]);
216
217
  var autoFocus = restProps.autoFocus, placeholder = restProps.placeholder, classNames = restProps.classNames;
217
218
  // Eager-mount only when `autoFocus` is set — otherwise wait for first focus
@@ -220,19 +221,21 @@ function EXPERIMENTAL_Autocomplete(props) {
220
221
  var translations = _$2({}, DEFAULT_TRANSLATIONS, userTranslations);
221
222
  var _useInstantSearch = useInstantSearch(), indexUiState = _useInstantSearch.indexUiState, indexRenderState = _useInstantSearch.indexRenderState, status = _useInstantSearch.status;
222
223
  var compositionID = useInstantSearchContext().compositionID;
224
+ var dependsOn = requiresSearch ? 'search' : 'none';
223
225
  var refine = useSearchBox({}, _$2({
224
226
  $$type: 'ais.autocomplete',
225
- $$widgetType: 'ais.autocomplete'
227
+ $$widgetType: 'ais.autocomplete',
228
+ dependsOn: dependsOn
226
229
  }, props.aiMode ? {
227
230
  opensChat: true
228
231
  } : {})).refine;
229
232
  var domId = useAutocompleteId();
230
233
  var instanceKey = domId.replace(/:/g, '');
231
234
  if (isFeedsMode && indices !== undefined) {
232
- throw new Error('EXPERIMENTAL_Autocomplete: `feeds` and `indices` are mutually exclusive.');
235
+ throw new Error('Autocomplete: `feeds` and `indices` are mutually exclusive.');
233
236
  }
234
237
  if (isFeedsMode && !compositionID) {
235
- throw new Error('EXPERIMENTAL_Autocomplete in feeds-mode requires a composition-based <InstantSearch> (compositionID must be set).');
238
+ throw new Error('Autocomplete in feeds-mode requires a composition-based <InstantSearch> (compositionID must be set).');
236
239
  }
237
240
  var isSearchStalled = status === 'stalled';
238
241
  var searchParameters = _$2({
@@ -447,7 +450,7 @@ function EXPERIMENTAL_Autocomplete(props) {
447
450
  }
448
451
  setActivated(true);
449
452
  };
450
- return /*#__PURE__*/ React.createElement(Autocomplete, _$4(_$2({}, shellRootProps), {
453
+ return /*#__PURE__*/ React.createElement(AutocompleteUiComponent, _$4(_$2({}, shellRootProps), {
451
454
  classNames: classNames
452
455
  }), isDetached ? /*#__PURE__*/ React.createElement(AutocompleteDetachedSearchButton, {
453
456
  query: (_indexUiState_query = indexUiState.query) !== null && _indexUiState_query !== void 0 ? _indexUiState_query : '',
@@ -490,7 +493,7 @@ function EXPERIMENTAL_Autocomplete(props) {
490
493
  }));
491
494
  if (isFeedsMode) {
492
495
  return /*#__PURE__*/ React.createElement(Index, {
493
- EXPERIMENTAL_isolated: true,
496
+ isolated: true,
494
497
  indexName: compositionID,
495
498
  indexId: "ais-autocomplete-".concat(instanceKey)
496
499
  }, /*#__PURE__*/ React.createElement(Configure, searchParameters), /*#__PURE__*/ React.createElement(Feeds, {
@@ -501,7 +504,7 @@ function EXPERIMENTAL_Autocomplete(props) {
501
504
  }), innerAutocomplete);
502
505
  }
503
506
  return /*#__PURE__*/ React.createElement(Index, {
504
- EXPERIMENTAL_isolated: true,
507
+ isolated: true,
505
508
  indexId: "ais-autocomplete-".concat(instanceKey)
506
509
  }, /*#__PURE__*/ React.createElement(Configure, searchParameters), indicesConfig.map(function(index) {
507
510
  return /*#__PURE__*/ React.createElement(Index, {
@@ -511,6 +514,7 @@ function EXPERIMENTAL_Autocomplete(props) {
511
514
  }, /*#__PURE__*/ React.createElement(Configure, index.searchParameters));
512
515
  }), innerAutocomplete);
513
516
  }
517
+ /** @deprecated use Autocomplete instead */ var EXPERIMENTAL_Autocomplete = deprecate(Autocomplete, 'EXPERIMENTAL_Autocomplete is no longer experimental. Please use Autocomplete instead.');
514
518
  function InnerAutocomplete(_0) {
515
519
  var indicesConfig = _0.indicesConfig, refineSearchBox = _0.refineSearchBox, isSearchStalled = _0.isSearchStalled, getSearchPageURL = _0.getSearchPageURL, userOnSelect = _0.onSelect, indexUiState = _0.indexUiState, isSearchPage = _0.isSearchPage, PanelComponent = _0.panelComponent, showRecent = _0.showRecent, recentSearchConfig = _0.recentSearchConfig, showQuerySuggestions = _0.showQuerySuggestions, showPromptSuggestions = _0.showPromptSuggestions, chatRenderState = _0.chatRenderState, transformItems = _0.transformItems, placeholder = _0.placeholder, autoFocus = _0.autoFocus, translations = _0.translations, classNames = _0.classNames, aiMode = _0.aiMode, domId = _0.domId, detached = _0.detached, props = _(_0, [
516
520
  "indicesConfig",
@@ -796,7 +800,7 @@ function InnerAutocomplete(_0) {
796
800
  "ref"
797
801
  ]);
798
802
  if (isDetached) {
799
- return /*#__PURE__*/ React.createElement(Autocomplete, _$4(_$2({}, props, rootProps), {
803
+ return /*#__PURE__*/ React.createElement(AutocompleteUiComponent, _$4(_$2({}, props, rootProps), {
800
804
  rootRef: rootRef,
801
805
  classNames: classNames
802
806
  }), /*#__PURE__*/ React.createElement(AutocompleteDetachedSearchButton, {
@@ -822,7 +826,7 @@ function InnerAutocomplete(_0) {
822
826
  }, searchBoxContent), panelContent)));
823
827
  }
824
828
  // Normal (non-detached) rendering
825
- return /*#__PURE__*/ React.createElement(Autocomplete, _$4(_$2({}, props, rootProps), {
829
+ return /*#__PURE__*/ React.createElement(AutocompleteUiComponent, _$4(_$2({}, props, rootProps), {
826
830
  rootRef: rootRef,
827
831
  classNames: classNames
828
832
  }), searchBoxContent, panelContent);
@@ -852,4 +856,4 @@ function ConditionalHighlight(param) {
852
856
  });
853
857
  }
854
858
 
855
- export { EXPERIMENTAL_Autocomplete };
859
+ export { Autocomplete, EXPERIMENTAL_Autocomplete };
@@ -7,7 +7,7 @@ import { _ as _$1 } from '@swc/helpers/esm/_to_array.js';
7
7
  import { createChatComponent } from 'instantsearch-ui-components';
8
8
  import { SearchIndexToolType, RecommendToolType, DisplayResultsToolType, MemorizeToolType, MemorySearchToolType, PonderToolType } from 'instantsearch.js/es/lib/chat/index.js';
9
9
  export { DisplayResultsToolType, MemorizeToolType, MemorySearchToolType, PonderToolType, RecommendToolType, SearchIndexToolType } from 'instantsearch.js/es/lib/chat/index.js';
10
- import React, { createElement, Fragment, memo, useState, useRef, useMemo, useImperativeHandle, useEffect } from 'react';
10
+ import React, { createElement, Fragment, useMemo, useState, useRef, useImperativeHandle, useEffect } from 'react';
11
11
  import { useInstantSearch, useChat } from 'react-instantsearch-core';
12
12
  import { useStickToBottom } from '../lib/useStickToBottom.js';
13
13
  import { createDisplayResultsTool } from './chat/tools/DisplayResultsTool.js';
@@ -16,7 +16,7 @@ import { createCarouselTool } from './chat/tools/SearchIndexTool.js';
16
16
  var ChatUiComponent = createChatComponent({
17
17
  createElement: createElement,
18
18
  Fragment: Fragment,
19
- memo: memo,
19
+ useMemo: useMemo,
20
20
  useState: useState
21
21
  });
22
22
  function createDefaultTools(itemComponent, getSearchPageURL) {
@@ -1,96 +1,24 @@
1
- import { _ } from '@swc/helpers/esm/_object_spread.js';
2
- import { createButtonComponent, getFacetFiltersFromToolInput, ArrowRightIcon, ChevronLeftIcon, ChevronRightIcon } from 'instantsearch-ui-components';
3
- import { addAbsolutePosition, addQueryID } from 'instantsearch.js/es/lib/utils/index.js';
4
- import React, { createElement } from 'react';
5
- import { Carousel } from '../../../components/Carousel.js';
1
+ import { createCarouselToolComponent } from 'instantsearch-ui-components';
2
+ import React, { createElement, Fragment, useMemo, useRef, useState } from 'react';
6
3
 
7
4
  function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
8
- var Button = createButtonComponent({
9
- createElement: createElement
5
+ var SearchLayoutUIComponent = createCarouselToolComponent({
6
+ createElement: createElement,
7
+ Fragment: Fragment,
8
+ useMemo: useMemo,
9
+ useRef: useRef,
10
+ useState: useState
10
11
  });
11
- function SearchLayoutComponent(param) {
12
- var message = param.message, applyFilters = param.applyFilters, onClose = param.onClose, sendEvent = param.sendEvent;
13
- var _ref;
14
- var _output_hits;
15
- var input = message === null || message === void 0 ? void 0 : message.input;
16
- var output = message === null || message === void 0 ? void 0 : message.output;
17
- var hitsWithAbsolutePosition = addAbsolutePosition((output === null || output === void 0 ? void 0 : output.hits) || [], 0, ((_ref = input === null || input === void 0 ? void 0 : input.number_of_results) !== null && _ref !== void 0 ? _ref : output === null || output === void 0 ? void 0 : (_output_hits = output.hits) === null || _output_hits === void 0 ? void 0 : _output_hits.length) || 5);
18
- var items = addQueryID(hitsWithAbsolutePosition, output === null || output === void 0 ? void 0 : output.queryID);
19
- var MemoedHeaderComponent = React.useMemo(function() {
20
- return function(props) {
21
- return /*#__PURE__*/ React.createElement(HeaderComponent, _({
22
- nbHits: output === null || output === void 0 ? void 0 : output.nbHits,
23
- input: input,
24
- hitsPerPage: items.length,
25
- onClose: onClose,
26
- applyFilters: applyFilters
27
- }, props));
28
- };
29
- }, [
30
- items.length,
31
- input,
32
- output === null || output === void 0 ? void 0 : output.nbHits,
33
- applyFilters,
34
- onClose
35
- ]);
36
- return /*#__PURE__*/ React.createElement(Carousel, {
37
- items: items,
12
+ var SearchLayoutComponent = function SearchLayoutComponent(toolProps) {
13
+ return /*#__PURE__*/ React.createElement(SearchLayoutUIComponent, {
14
+ getSearchPageURL: getSearchPageURL,
15
+ headerProps: {
16
+ showViewAll: showViewAll
17
+ },
38
18
  itemComponent: itemComponent,
39
- sendEvent: sendEvent,
40
- showNavigation: false,
41
- headerComponent: MemoedHeaderComponent
19
+ toolProps: toolProps
42
20
  });
43
- }
44
- function HeaderComponent(param) {
45
- var canScrollLeft = param.canScrollLeft, canScrollRight = param.canScrollRight, scrollLeft = param.scrollLeft, scrollRight = param.scrollRight, nbHits = param.nbHits, input = param.input, hitsPerPage = param.hitsPerPage, applyFilters = param.applyFilters, onClose = param.onClose;
46
- if ((hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0) < 1) {
47
- return null;
48
- }
49
- return /*#__PURE__*/ React.createElement("div", {
50
- className: "ais-ChatToolSearchIndexCarouselHeader"
51
- }, /*#__PURE__*/ React.createElement("div", {
52
- className: "ais-ChatToolSearchIndexCarouselHeaderResults"
53
- }, nbHits && /*#__PURE__*/ React.createElement("div", {
54
- className: "ais-ChatToolSearchIndexCarouselHeaderCount"
55
- }, hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0, " of ", nbHits.toLocaleString(), " result", nbHits > 1 ? 's' : ''), showViewAll && /*#__PURE__*/ React.createElement(Button, {
56
- variant: "ghost",
57
- size: "sm",
58
- onClick: function onClick() {
59
- if (!input || !applyFilters) return;
60
- var params = applyFilters({
61
- query: input.query,
62
- facetFilters: getFacetFiltersFromToolInput(input)
63
- });
64
- if (getSearchPageURL && new URL(getSearchPageURL(params)).pathname !== window.location.pathname) {
65
- window.location.href = getSearchPageURL(params);
66
- }
67
- onClose();
68
- },
69
- className: "ais-ChatToolSearchIndexCarouselHeaderViewAll"
70
- }, "View all", /*#__PURE__*/ React.createElement(ArrowRightIcon, {
71
- createElement: createElement
72
- }))), (hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0) > 2 && /*#__PURE__*/ React.createElement("div", {
73
- className: "ais-ChatToolSearchIndexCarouselHeaderScrollButtons"
74
- }, /*#__PURE__*/ React.createElement(Button, {
75
- variant: "outline",
76
- size: "sm",
77
- iconOnly: true,
78
- onClick: scrollLeft,
79
- disabled: !canScrollLeft,
80
- className: "ais-ChatToolSearchIndexCarouselHeaderScrollButton"
81
- }, /*#__PURE__*/ React.createElement(ChevronLeftIcon, {
82
- createElement: createElement
83
- })), /*#__PURE__*/ React.createElement(Button, {
84
- variant: "outline",
85
- size: "sm",
86
- iconOnly: true,
87
- onClick: scrollRight,
88
- disabled: !canScrollRight,
89
- className: "ais-ChatToolSearchIndexCarouselHeaderScrollButton"
90
- }, /*#__PURE__*/ React.createElement(ChevronRightIcon, {
91
- createElement: createElement
92
- }))));
93
- }
21
+ };
94
22
  return {
95
23
  layoutComponent: SearchLayoutComponent
96
24
  };
@@ -1,4 +1,4 @@
1
- export { EXPERIMENTAL_Autocomplete } from './Autocomplete.js';
1
+ export { Autocomplete, EXPERIMENTAL_Autocomplete } from './Autocomplete.js';
2
2
  export { Breadcrumb } from './Breadcrumb.js';
3
3
  export { Chat, createDefaultTools } from './Chat.js';
4
4
  export { ChatTrigger } from './ChatTrigger.js';