react-instantsearch 7.28.1 → 7.30.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.
Files changed (46) hide show
  1. package/dist/cjs/components/AutocompleteSearch.js +3 -3
  2. package/dist/cjs/components/ChatGreeting.js +16 -0
  3. package/dist/cjs/components/ChatInlineLayout.js +17 -0
  4. package/dist/cjs/components/ChatOverlayLayout.js +17 -0
  5. package/dist/cjs/components/ChatSidePanelLayout.js +17 -0
  6. package/dist/cjs/components/index.js +4 -0
  7. package/dist/cjs/ui/SearchBox.js +38 -2
  8. package/dist/cjs/widgets/Autocomplete.js +24 -8
  9. package/dist/cjs/widgets/Chat.js +30 -4
  10. package/dist/cjs/widgets/SearchBox.js +18 -2
  11. package/dist/cjs/widgets/TrendingFacets.js +55 -0
  12. package/dist/cjs/widgets/chat/tools/SearchIndexTool.js +7 -3
  13. package/dist/cjs/widgets/index.js +1 -0
  14. package/dist/es/components/AutocompleteSearch.d.ts +2 -2
  15. package/dist/es/components/AutocompleteSearch.js +3 -3
  16. package/dist/es/components/ChatGreeting.d.ts +1 -0
  17. package/dist/es/components/ChatGreeting.js +8 -0
  18. package/dist/es/components/ChatInlineLayout.d.ts +1 -0
  19. package/dist/es/components/ChatInlineLayout.js +9 -0
  20. package/dist/es/components/ChatOverlayLayout.d.ts +1 -0
  21. package/dist/es/components/ChatOverlayLayout.js +9 -0
  22. package/dist/es/components/ChatSidePanelLayout.d.ts +1 -0
  23. package/dist/es/components/ChatSidePanelLayout.js +9 -0
  24. package/dist/es/components/index.d.ts +4 -0
  25. package/dist/es/components/index.js +4 -0
  26. package/dist/es/index.js +5 -0
  27. package/dist/es/ui/SearchBox.d.ts +15 -1
  28. package/dist/es/ui/SearchBox.js +38 -2
  29. package/dist/es/widgets/Autocomplete.d.ts +6 -0
  30. package/dist/es/widgets/Autocomplete.js +24 -8
  31. package/dist/es/widgets/Chat.d.ts +15 -4
  32. package/dist/es/widgets/Chat.js +44 -18
  33. package/dist/es/widgets/RefinementList.d.ts +3 -2
  34. package/dist/es/widgets/SearchBox.d.ts +8 -2
  35. package/dist/es/widgets/SearchBox.js +19 -3
  36. package/dist/es/widgets/TrendingFacets.d.ts +11 -0
  37. package/dist/es/widgets/TrendingFacets.js +46 -0
  38. package/dist/es/widgets/chat/tools/SearchIndexTool.js +7 -3
  39. package/dist/es/widgets/index.d.ts +1 -0
  40. package/dist/es/widgets/index.js +1 -0
  41. package/dist/umd/ReactInstantSearch.js +1019 -181
  42. package/dist/umd/ReactInstantSearch.min.js +3 -3
  43. package/package.json +5 -5
  44. package/dist/cjs/widgets/index.umd.js +0 -69
  45. package/dist/es/widgets/index.umd.d.ts +0 -32
  46. package/dist/es/widgets/index.umd.js +0 -37
@@ -1,4 +1,4 @@
1
- /*! React InstantSearch 7.28.1 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
1
+ /*! React InstantSearch 7.30.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
4
4
  typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
@@ -24,7 +24,7 @@
24
24
 
25
25
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
26
26
 
27
- var version$2 = '7.28.1';
27
+ var version$2 = '7.30.0';
28
28
 
29
29
  function _define_property(obj, key, value) {
30
30
  if (key in obj) {
@@ -5938,7 +5938,7 @@
5938
5938
  }
5939
5939
  }
5940
5940
 
5941
- var withUsage$s = createDocumentationMessageGenerator({
5941
+ var withUsage$t = createDocumentationMessageGenerator({
5942
5942
  name: 'configure',
5943
5943
  connector: true
5944
5944
  });
@@ -5954,7 +5954,7 @@
5954
5954
  var renderFn = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : noop, unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
5955
5955
  return function(widgetParams) {
5956
5956
  if (!widgetParams || !isPlainObject(widgetParams.searchParameters)) {
5957
- throw new Error(withUsage$s('The `searchParameters` option expects an object.'));
5957
+ throw new Error(withUsage$t('The `searchParameters` option expects an object.'));
5958
5958
  }
5959
5959
  var connectorState = {};
5960
5960
  function refine(helper) {
@@ -6499,13 +6499,13 @@
6499
6499
  }
6500
6500
  }
6501
6501
 
6502
- var withUsage$r = createDocumentationMessageGenerator({
6502
+ var withUsage$s = createDocumentationMessageGenerator({
6503
6503
  name: 'dynamic-widgets',
6504
6504
  connector: true
6505
6505
  });
6506
6506
  var connectDynamicWidgets = function connectDynamicWidgets(renderFn) {
6507
6507
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
6508
- checkRendering(renderFn, withUsage$r());
6508
+ checkRendering(renderFn, withUsage$s());
6509
6509
  return function(widgetParams) {
6510
6510
  var widgets = widgetParams.widgets, _widgetParams_maxValuesPerFacet = widgetParams.maxValuesPerFacet, maxValuesPerFacet = _widgetParams_maxValuesPerFacet === void 0 ? 20 : _widgetParams_maxValuesPerFacet, _widgetParams_facets = widgetParams.facets, facets = _widgetParams_facets === void 0 ? [
6511
6511
  '*'
@@ -6515,10 +6515,10 @@
6515
6515
  if (!(widgets && Array.isArray(widgets) && widgets.every(function(widget) {
6516
6516
  return (typeof widget === "undefined" ? "undefined" : _type_of(widget)) === 'object';
6517
6517
  }))) {
6518
- throw new Error(withUsage$r('The `widgets` option expects an array of widgets.'));
6518
+ throw new Error(withUsage$s('The `widgets` option expects an array of widgets.'));
6519
6519
  }
6520
6520
  if (!Array.isArray(facets)) {
6521
- throw new Error(withUsage$r("The `facets` option only accepts an array of facets, you passed ".concat(JSON.stringify(facets))));
6521
+ throw new Error(withUsage$s("The `facets` option only accepts an array of facets, you passed ".concat(JSON.stringify(facets))));
6522
6522
  }
6523
6523
  var localWidgets = new Map();
6524
6524
  return {
@@ -6620,7 +6620,7 @@
6620
6620
  results: results
6621
6621
  });
6622
6622
  if (!Array.isArray(attributesToRender)) {
6623
- throw new Error(withUsage$r('The `transformItems` option expects a function that returns an Array.'));
6623
+ throw new Error(withUsage$s('The `transformItems` option expects a function that returns an Array.'));
6624
6624
  }
6625
6625
  return {
6626
6626
  attributesToRender: attributesToRender,
@@ -6801,7 +6801,7 @@
6801
6801
  };
6802
6802
  }
6803
6803
 
6804
- var withUsage$q = createDocumentationMessageGenerator({
6804
+ var withUsage$r = createDocumentationMessageGenerator({
6805
6805
  name: 'index-widget'
6806
6806
  });
6807
6807
  /**
@@ -6895,7 +6895,7 @@
6895
6895
  }
6896
6896
  var index = function index(widgetParams) {
6897
6897
  if (widgetParams === undefined || widgetParams.indexName === undefined && !widgetParams.EXPERIMENTAL_isolated) {
6898
- throw new Error(withUsage$q('The `indexName` option is required.'));
6898
+ throw new Error(withUsage$r('The `indexName` option is required.'));
6899
6899
  }
6900
6900
  // When isolated=true, we use an empty string as the default indexName.
6901
6901
  // This is intentional: isolated indices do not require a real index name.
@@ -6985,7 +6985,7 @@
6985
6985
  addWidgets: function addWidgets(widgets) {
6986
6986
  var _this = this;
6987
6987
  if (!Array.isArray(widgets)) {
6988
- throw new Error(withUsage$q('The `addWidgets` method expects an array of widgets.'));
6988
+ throw new Error(withUsage$r('The `addWidgets` method expects an array of widgets.'));
6989
6989
  }
6990
6990
  var flatWidgets = widgets.reduce(function(acc, w) {
6991
6991
  return acc.concat(Array.isArray(w) ? w : [
@@ -6995,7 +6995,7 @@
6995
6995
  if (flatWidgets.some(function(widget) {
6996
6996
  return typeof widget.init !== 'function' && typeof widget.render !== 'function';
6997
6997
  })) {
6998
- throw new Error(withUsage$q('The widget definition expects a `render` and/or an `init` method.'));
6998
+ throw new Error(withUsage$r('The widget definition expects a `render` and/or an `init` method.'));
6999
6999
  }
7000
7000
  flatWidgets.forEach(function(widget) {
7001
7001
  widget.parent = _this;
@@ -7055,7 +7055,7 @@
7055
7055
  removeWidgets: function removeWidgets(widgets) {
7056
7056
  var _this = this;
7057
7057
  if (!Array.isArray(widgets)) {
7058
- throw new Error(withUsage$q('The `removeWidgets` method expects an array of widgets.'));
7058
+ throw new Error(withUsage$r('The `removeWidgets` method expects an array of widgets.'));
7059
7059
  }
7060
7060
  var flatWidgets = widgets.reduce(function(acc, w) {
7061
7061
  return acc.concat(Array.isArray(w) ? w : [
@@ -7065,7 +7065,7 @@
7065
7065
  if (flatWidgets.some(function(widget) {
7066
7066
  return typeof widget.dispose !== 'function';
7067
7067
  })) {
7068
- throw new Error(withUsage$q('The widget definition expects a `dispose` method.'));
7068
+ throw new Error(withUsage$r('The widget definition expects a `dispose` method.'));
7069
7069
  }
7070
7070
  localWidgets = localWidgets.filter(function(widget) {
7071
7071
  return flatWidgets.indexOf(widget) === -1;
@@ -9684,7 +9684,7 @@
9684
9684
  };
9685
9685
  }
9686
9686
 
9687
- var version = '4.92.1';
9687
+ var version = '4.94.0';
9688
9688
 
9689
9689
  function hydrateSearchClient(client, results) {
9690
9690
  if (!results) {
@@ -9819,7 +9819,7 @@
9819
9819
  });
9820
9820
  }
9821
9821
 
9822
- var withUsage$p = createDocumentationMessageGenerator({
9822
+ var withUsage$q = createDocumentationMessageGenerator({
9823
9823
  name: 'instantsearch'
9824
9824
  });
9825
9825
  function defaultCreateURL() {
@@ -9875,7 +9875,7 @@
9875
9875
  _this.setMaxListeners(100);
9876
9876
  var _options_indexName = options.indexName, indexName = _options_indexName === void 0 ? '' : _options_indexName, compositionID = options.compositionID, numberLocale = options.numberLocale, _options_initialUiState = options.initialUiState, initialUiState = _options_initialUiState === void 0 ? {} : _options_initialUiState, _options_routing = options.routing, routing = _options_routing === void 0 ? null : _options_routing, _options_insights = options.insights, insights = _options_insights === void 0 ? undefined : _options_insights, searchFunction = options.searchFunction, _options_stalledSearchDelay = options.stalledSearchDelay, stalledSearchDelay = _options_stalledSearchDelay === void 0 ? 200 : _options_stalledSearchDelay, _options_searchClient = options.searchClient, searchClient = _options_searchClient === void 0 ? null : _options_searchClient, _options_insightsClient = options.insightsClient, insightsClient = _options_insightsClient === void 0 ? null : _options_insightsClient, _options_onStateChange = options.onStateChange, onStateChange = _options_onStateChange === void 0 ? null : _options_onStateChange, _options_future1 = options.future, future = _options_future1 === void 0 ? _object_spread({}, INSTANTSEARCH_FUTURE_DEFAULTS, options.future || {}) : _options_future1;
9877
9877
  if (searchClient === null) {
9878
- throw new Error(withUsage$p('The `searchClient` option is required.'));
9878
+ throw new Error(withUsage$q('The `searchClient` option is required.'));
9879
9879
  }
9880
9880
  if (typeof searchClient.search !== 'function') {
9881
9881
  throw new Error("The `searchClient` must implement a `search` method.\n\nSee: https://www.algolia.com/doc/guides/building-search-ui/going-further/backend-search/in-depth/backend-instantsearch/js/");
@@ -9884,7 +9884,7 @@
9884
9884
  searchClient.addAlgoliaAgent("instantsearch.js (".concat(version, ")"));
9885
9885
  }
9886
9886
  if (insightsClient && typeof insightsClient !== 'function') {
9887
- throw new Error(withUsage$p('The `insightsClient` option should be a function.'));
9887
+ throw new Error(withUsage$q('The `insightsClient` option should be a function.'));
9888
9888
  }
9889
9889
  _this.client = searchClient;
9890
9890
  _this.future = future;
@@ -10032,12 +10032,12 @@
10032
10032
  * @param widgets The array of widgets to add to InstantSearch.
10033
10033
  */ function addWidgets(widgets) {
10034
10034
  if (!Array.isArray(widgets)) {
10035
- throw new Error(withUsage$p('The `addWidgets` method expects an array of widgets. Please use `addWidget`.'));
10035
+ throw new Error(withUsage$q('The `addWidgets` method expects an array of widgets. Please use `addWidget`.'));
10036
10036
  }
10037
10037
  if (this.compositionID && widgets.some(function(w) {
10038
10038
  return !Array.isArray(w) && isIndexWidget(w) && !w._isolated;
10039
10039
  })) {
10040
- throw new Error(withUsage$p('The `index` widget cannot be used with a composition-based InstantSearch implementation.'));
10040
+ throw new Error(withUsage$q('The `index` widget cannot be used with a composition-based InstantSearch implementation.'));
10041
10041
  }
10042
10042
  this.mainIndex.addWidgets(widgets);
10043
10043
  return this;
@@ -10066,7 +10066,7 @@
10066
10066
  * The widgets must implement a `dispose()` method to clear their states.
10067
10067
  */ function removeWidgets(widgets) {
10068
10068
  if (!Array.isArray(widgets)) {
10069
- throw new Error(withUsage$p('The `removeWidgets` method expects an array of widgets. Please use `removeWidget`.'));
10069
+ throw new Error(withUsage$q('The `removeWidgets` method expects an array of widgets. Please use `removeWidget`.'));
10070
10070
  }
10071
10071
  this.mainIndex.removeWidgets(widgets);
10072
10072
  return this;
@@ -10080,7 +10080,7 @@
10080
10080
  */ function start() {
10081
10081
  var _this = this;
10082
10082
  if (this.started) {
10083
- throw new Error(withUsage$p('The `start` method has already been called once.'));
10083
+ throw new Error(withUsage$q('The `start` method has already been called once.'));
10084
10084
  }
10085
10085
  // This Helper is used for the queries, we don't care about its state. The
10086
10086
  // states are managed at the `index` level. We use this Helper to create
@@ -10282,7 +10282,7 @@
10282
10282
  var _this = this;
10283
10283
  var callOnStateChange = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
10284
10284
  if (!this.mainHelper) {
10285
- throw new Error(withUsage$p('The `start` method needs to be called before `setUiState`.'));
10285
+ throw new Error(withUsage$q('The `start` method needs to be called before `setUiState`.'));
10286
10286
  }
10287
10287
  // We refresh the index UI state to update the local UI state that the
10288
10288
  // main index passes to the function form of `setUiState`.
@@ -10319,7 +10319,7 @@
10319
10319
  value: function createURL() {
10320
10320
  var nextState = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
10321
10321
  if (!this.started) {
10322
- throw new Error(withUsage$p('The `start` method needs to be called before `createURL`.'));
10322
+ throw new Error(withUsage$q('The `start` method needs to be called before `createURL`.'));
10323
10323
  }
10324
10324
  return this._createURL(nextState);
10325
10325
  }
@@ -10328,7 +10328,7 @@
10328
10328
  key: "refresh",
10329
10329
  value: function refresh() {
10330
10330
  if (!this.mainHelper) {
10331
- throw new Error(withUsage$p('The `start` method needs to be called before `refresh`.'));
10331
+ throw new Error(withUsage$q('The `start` method needs to be called before `refresh`.'));
10332
10332
  }
10333
10333
  this.mainHelper.clearCache().search();
10334
10334
  }
@@ -10990,17 +10990,17 @@
10990
10990
  return bindEventForHits;
10991
10991
  }
10992
10992
 
10993
- var withUsage$o = createDocumentationMessageGenerator({
10993
+ var withUsage$p = createDocumentationMessageGenerator({
10994
10994
  name: 'autocomplete',
10995
10995
  connector: true
10996
10996
  });
10997
10997
  var connectAutocomplete = function connectAutocomplete(renderFn) {
10998
10998
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
10999
- checkRendering(renderFn, withUsage$o());
10999
+ checkRendering(renderFn, withUsage$p());
11000
11000
  return function(widgetParams) {
11001
11001
  var _ref = widgetParams || {}, _ref_escapeHTML = _ref.escapeHTML, escapeHTML = _ref_escapeHTML === void 0 ? true : _ref_escapeHTML, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(indices) {
11002
11002
  return indices;
11003
- } : _ref_transformItems;
11003
+ } : _ref_transformItems, tmp = _ref.future, _ref1 = tmp === void 0 ? {} : tmp, _ref_undefinedEmptyQuery = _ref1.undefinedEmptyQuery, undefinedEmptyQuery = _ref_undefinedEmptyQuery === void 0 ? false : _ref_undefinedEmptyQuery;
11004
11004
  var connectorState = {};
11005
11005
  return {
11006
11006
  $$type: 'ais.autocomplete',
@@ -11055,7 +11055,7 @@
11055
11055
  };
11056
11056
  });
11057
11057
  return {
11058
- currentRefinement: state.query || '',
11058
+ currentRefinement: undefinedEmptyQuery ? state.query : state.query || '',
11059
11059
  indices: transformItems(indices).map(function(transformedIndex) {
11060
11060
  return _object_spread_props(_object_spread({}, transformedIndex), {
11061
11061
  sendEvent: sendEventMap[transformedIndex.indexId]
@@ -11067,8 +11067,8 @@
11067
11067
  },
11068
11068
  getWidgetUiState: function getWidgetUiState(uiState, param) {
11069
11069
  var searchParameters = param.searchParameters;
11070
- var query = searchParameters.query || '';
11071
- if (query === '' || uiState && uiState.query === query) {
11070
+ var query = undefinedEmptyQuery ? searchParameters.query : searchParameters.query || '';
11071
+ if (!query || query === '' || uiState && uiState.query === query) {
11072
11072
  return uiState;
11073
11073
  }
11074
11074
  return _object_spread_props(_object_spread({}, uiState), {
@@ -11078,7 +11078,7 @@
11078
11078
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, param) {
11079
11079
  var uiState = param.uiState;
11080
11080
  var parameters = {
11081
- query: uiState.query || ''
11081
+ query: undefinedEmptyQuery ? uiState.query : uiState.query || ''
11082
11082
  };
11083
11083
  if (!escapeHTML) {
11084
11084
  return searchParameters.setQueryParameters(parameters);
@@ -11104,20 +11104,20 @@
11104
11104
  return useConnector(connectAutocomplete, props, additionalWidgetProperties);
11105
11105
  }
11106
11106
 
11107
- var withUsage$n = createDocumentationMessageGenerator({
11107
+ var withUsage$o = createDocumentationMessageGenerator({
11108
11108
  name: 'breadcrumb',
11109
11109
  connector: true
11110
11110
  });
11111
11111
  var connectBreadcrumb = function connectBreadcrumb(renderFn) {
11112
11112
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
11113
- checkRendering(renderFn, withUsage$n());
11113
+ checkRendering(renderFn, withUsage$o());
11114
11114
  var connectorState = {};
11115
11115
  return function(widgetParams) {
11116
11116
  var _ref = widgetParams || {}, attributes = _ref.attributes, _ref_separator = _ref.separator, separator = _ref_separator === void 0 ? ' > ' : _ref_separator, _ref_rootPath = _ref.rootPath, rootPath = _ref_rootPath === void 0 ? null : _ref_rootPath, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
11117
11117
  return items;
11118
11118
  } : _ref_transformItems;
11119
11119
  if (!attributes || !Array.isArray(attributes) || attributes.length === 0) {
11120
- throw new Error(withUsage$n('The `attributes` option expects an array of strings.'));
11120
+ throw new Error(withUsage$o('The `attributes` option expects an array of strings.'));
11121
11121
  }
11122
11122
  var _attributes = _sliced_to_array(attributes, 1), hierarchicalFacetName = _attributes[0];
11123
11123
  function getRefinedState(state, facetValue) {
@@ -12578,6 +12578,30 @@
12578
12578
  return DefaultChatTransport;
12579
12579
  }(HttpChatTransport);
12580
12580
 
12581
+ function sendChatMessageFeedback(param) {
12582
+ var agentId = param.agentId, vote = param.vote, messageId = param.messageId, appId = param.appId, apiKey = param.apiKey;
12583
+ return fetch("https://".concat(appId, ".algolia.net/agent-studio/1/feedback"), {
12584
+ method: 'POST',
12585
+ body: JSON.stringify({
12586
+ messageId: messageId,
12587
+ agentId: agentId,
12588
+ vote: vote
12589
+ }),
12590
+ headers: {
12591
+ 'x-algolia-application-id': appId,
12592
+ 'x-algolia-api-key': apiKey,
12593
+ 'content-type': 'application/json'
12594
+ }
12595
+ }).then(function(response) {
12596
+ if (response.status >= 300) {
12597
+ return response.json().then(function(data) {
12598
+ throw new Error("Feedback request failed with status ".concat(response.status, ": ").concat(data.message));
12599
+ });
12600
+ }
12601
+ return response.json();
12602
+ });
12603
+ }
12604
+
12581
12605
  /**
12582
12606
  * Clears the refinements of a SearchParameters object based on rules provided.
12583
12607
  * The included attributes list is applied before the excluded attributes list. If the list
@@ -12730,7 +12754,7 @@
12730
12754
  return refinements;
12731
12755
  }
12732
12756
 
12733
- var withUsage$m = createDocumentationMessageGenerator({
12757
+ var withUsage$n = createDocumentationMessageGenerator({
12734
12758
  name: 'chat',
12735
12759
  connector: true
12736
12760
  });
@@ -12781,12 +12805,14 @@
12781
12805
  }
12782
12806
  var connectChat = function connectChat(renderFn) {
12783
12807
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
12784
- checkRendering(renderFn, withUsage$m());
12808
+ checkRendering(renderFn, withUsage$n());
12785
12809
  return function(widgetParams) {
12786
- var _ref = widgetParams || {}, _ref_resume = _ref.resume, resume = _ref_resume === void 0 ? false : _ref_resume, _ref_tools = _ref.tools, tools = _ref_tools === void 0 ? {} : _ref_tools, _ref_type = _ref.type, type = _ref_type === void 0 ? 'chat' : _ref_type, options = _object_without_properties(_ref, [
12810
+ var _ref = widgetParams || {}, _ref_resume = _ref.resume, resume = _ref_resume === void 0 ? false : _ref_resume, _ref_tools = _ref.tools, tools = _ref_tools === void 0 ? {} : _ref_tools, _ref_type = _ref.type, type = _ref_type === void 0 ? 'chat' : _ref_type, context = _ref.context, initialUserMessage = _ref.initialUserMessage, options = _object_without_properties(_ref, [
12787
12811
  "resume",
12788
12812
  "tools",
12789
- "type"
12813
+ "type",
12814
+ "context",
12815
+ "initialUserMessage"
12790
12816
  ]);
12791
12817
  var _chatInstance;
12792
12818
  var input = '';
@@ -12797,7 +12823,11 @@
12797
12823
  var setOpen;
12798
12824
  var focusInput;
12799
12825
  var setIsClearing;
12826
+ var setFeedbackState;
12800
12827
  var agentId = 'agentId' in options ? options.agentId : undefined;
12828
+ var feedbackState = {};
12829
+ var _sendChatMessageFeedback;
12830
+ var feedbackAbortController;
12801
12831
  // Extract suggestions from the last assistant message's data-suggestions part
12802
12832
  var getSuggestionsFromMessages = function getSuggestionsFromMessages(messages) {
12803
12833
  // Find the last assistant message (iterate from end)
@@ -12824,11 +12854,16 @@
12824
12854
  if (!_chatInstance.messages || _chatInstance.messages.length === 0) {
12825
12855
  return;
12826
12856
  }
12857
+ var status = _chatInstance.status;
12858
+ if (status === 'submitted' || status === 'streaming') {
12859
+ _chatInstance.stop();
12860
+ }
12827
12861
  setIsClearing(true);
12828
12862
  };
12829
12863
  var onClearTransitionEnd = function onClearTransitionEnd() {
12830
12864
  setMessages([]);
12831
12865
  _chatInstance.clearError();
12866
+ feedbackState = {};
12832
12867
  setIsClearing(false);
12833
12868
  };
12834
12869
  var makeChatInstance = function makeChatInstance(instantSearchInstance) {
@@ -12872,7 +12907,7 @@
12872
12907
  }
12873
12908
  if ('agentId' in options && options.agentId) {
12874
12909
  if (!appId || !apiKey) {
12875
- throw new Error(withUsage$m('Could not extract Algolia credentials from the search client.'));
12910
+ throw new Error(withUsage$n('Could not extract Algolia credentials from the search client.'));
12876
12911
  }
12877
12912
  var baseApi = "https://".concat(appId, ".algolia.net/agent-studio/1/agents/").concat(agentId, "/completions?compatibilityMode=ai-sdk-5");
12878
12913
  transport = new DefaultChatTransport({
@@ -12898,7 +12933,7 @@
12898
12933
  });
12899
12934
  }
12900
12935
  if (!transport) {
12901
- throw new Error(withUsage$m('You need to provide either an `agentId` or a `transport`.'));
12936
+ throw new Error(withUsage$n('You need to provide either an `agentId` or a `transport`.'));
12902
12937
  }
12903
12938
  if ('chat' in options) {
12904
12939
  return options.chat;
@@ -12963,12 +12998,44 @@
12963
12998
  isClearing = value;
12964
12999
  render();
12965
13000
  };
13001
+ setFeedbackState = function setFeedbackState(messageId, state) {
13002
+ feedbackState = _object_spread_props(_object_spread({}, feedbackState), _define_property({}, messageId, state));
13003
+ render();
13004
+ };
13005
+ var feedback = 'feedback' in options ? options.feedback : undefined;
13006
+ if (agentId && feedback) {
13007
+ var _getAppIdAndApiKey = _sliced_to_array(getAppIdAndApiKey(initOptions.instantSearchInstance.client), 2), appId = _getAppIdAndApiKey[0], apiKey = _getAppIdAndApiKey[1];
13008
+ if (!appId || !apiKey) {
13009
+ throw new Error(withUsage$n('Could not extract Algolia credentials from the search client.'));
13010
+ }
13011
+ feedbackAbortController = new AbortController();
13012
+ _sendChatMessageFeedback = function _sendChatMessageFeedback(messageId, vote) {
13013
+ if (feedbackState[messageId] !== undefined) {
13014
+ return;
13015
+ }
13016
+ setFeedbackState(messageId, 'sending');
13017
+ sendChatMessageFeedback({
13018
+ agentId: agentId,
13019
+ vote: vote,
13020
+ messageId: messageId,
13021
+ appId: appId,
13022
+ apiKey: apiKey
13023
+ }).finally(function() {
13024
+ setFeedbackState(messageId, vote);
13025
+ });
13026
+ };
13027
+ }
12966
13028
  _chatInstance['~registerErrorCallback'](render);
12967
13029
  _chatInstance['~registerMessagesCallback'](render);
12968
13030
  _chatInstance['~registerStatusCallback'](render);
12969
13031
  if (resume) {
12970
13032
  _chatInstance.resumeStream();
12971
13033
  }
13034
+ if (initialUserMessage && !resume && _chatInstance.messages.length === 0) {
13035
+ _chatInstance.sendMessage({
13036
+ text: initialUserMessage
13037
+ });
13038
+ }
12972
13039
  renderFn(_object_spread_props(_object_spread({}, this.getWidgetRenderState(initOptions)), {
12973
13040
  instantSearchInstance: instantSearchInstance
12974
13041
  }), true);
@@ -13004,10 +13071,65 @@
13004
13071
  var _param = _sliced_to_array(param, 2), key = _param[0], tool = _param[1];
13005
13072
  var toolWithAddToolResult = _object_spread_props(_object_spread({}, tool), {
13006
13073
  addToolResult: _chatInstance.addToolResult,
13007
- applyFilters: applyFilters
13074
+ applyFilters: applyFilters,
13075
+ sendEvent: sendEvent
13008
13076
  });
13009
13077
  toolsWithAddToolResult[key] = toolWithAddToolResult;
13010
13078
  });
13079
+ var sendMessageWithContext = function sendMessageWithContext(message) {
13080
+ for(var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
13081
+ rest[_key - 1] = arguments[_key];
13082
+ }
13083
+ var _chatInstance1;
13084
+ if (!context || !message) {
13085
+ var _chatInstance2;
13086
+ return (_chatInstance2 = _chatInstance).sendMessage.apply(_chatInstance2, [
13087
+ message
13088
+ ].concat(_to_consumable_array(rest)));
13089
+ }
13090
+ var resolvedContext = typeof context === 'function' ? context() : context;
13091
+ var serializedContext;
13092
+ try {
13093
+ serializedContext = JSON.stringify(resolvedContext);
13094
+ } catch (unused) {
13095
+ var _chatInstance3;
13096
+ return (_chatInstance3 = _chatInstance).sendMessage.apply(_chatInstance3, [
13097
+ message
13098
+ ].concat(_to_consumable_array(rest)));
13099
+ }
13100
+ var contextTextPart = {
13101
+ type: 'text',
13102
+ text: '<context>'.concat(serializedContext).concat('</context>')
13103
+ };
13104
+ if ('parts' in message && message.parts) {
13105
+ var _chatInstance4;
13106
+ return (_chatInstance4 = _chatInstance).sendMessage.apply(_chatInstance4, [
13107
+ _object_spread_props(_object_spread({}, message), {
13108
+ parts: [
13109
+ contextTextPart
13110
+ ].concat(_to_consumable_array(message.parts)),
13111
+ text: undefined,
13112
+ files: undefined
13113
+ })
13114
+ ].concat(_to_consumable_array(rest)));
13115
+ }
13116
+ var textContent = 'text' in message && message.text ? message.text : '';
13117
+ return (_chatInstance1 = _chatInstance).sendMessage.apply(_chatInstance1, [
13118
+ {
13119
+ parts: [
13120
+ contextTextPart,
13121
+ {
13122
+ type: 'text',
13123
+ text: textContent
13124
+ }
13125
+ ],
13126
+ metadata: message.metadata,
13127
+ messageId: message.messageId,
13128
+ files: undefined,
13129
+ text: undefined
13130
+ }
13131
+ ].concat(_to_consumable_array(rest)));
13132
+ };
13011
13133
  return {
13012
13134
  indexUiState: instantSearchInstance.getUiState()[parent.getIndexId()],
13013
13135
  input: input,
@@ -13023,6 +13145,8 @@
13023
13145
  clearMessages: clearMessages,
13024
13146
  onClearTransitionEnd: onClearTransitionEnd,
13025
13147
  tools: toolsWithAddToolResult,
13148
+ sendChatMessageFeedback: _sendChatMessageFeedback,
13149
+ feedbackState: feedbackState,
13026
13150
  widgetParams: widgetParams,
13027
13151
  // Chat instance render state
13028
13152
  addToolResult: _chatInstance.addToolResult,
@@ -13032,12 +13156,13 @@
13032
13156
  messages: _chatInstance.messages,
13033
13157
  regenerate: _chatInstance.regenerate,
13034
13158
  resumeStream: _chatInstance.resumeStream,
13035
- sendMessage: _chatInstance.sendMessage,
13159
+ sendMessage: sendMessageWithContext,
13036
13160
  status: _chatInstance.status,
13037
13161
  stop: _chatInstance.stop
13038
13162
  };
13039
13163
  },
13040
13164
  dispose: function dispose() {
13165
+ feedbackAbortController === null || feedbackAbortController === void 0 ? void 0 : feedbackAbortController.abort();
13041
13166
  unmountFn();
13042
13167
  },
13043
13168
  shouldRender: function shouldRender() {
@@ -13054,13 +13179,13 @@
13054
13179
  return useConnector(connectChat, props, additionalWidgetProperties);
13055
13180
  }
13056
13181
 
13057
- var withUsage$l = createDocumentationMessageGenerator({
13182
+ var withUsage$m = createDocumentationMessageGenerator({
13058
13183
  name: 'clear-refinements',
13059
13184
  connector: true
13060
13185
  });
13061
13186
  var connectClearRefinements = function connectClearRefinements(renderFn) {
13062
13187
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
13063
- checkRendering(renderFn, withUsage$l());
13188
+ checkRendering(renderFn, withUsage$m());
13064
13189
  return function(widgetParams) {
13065
13190
  var _ref = widgetParams || {}, _ref_includedAttributes = _ref.includedAttributes, includedAttributes = _ref_includedAttributes === void 0 ? [] : _ref_includedAttributes, _ref_excludedAttributes = _ref.excludedAttributes, excludedAttributes = _ref_excludedAttributes === void 0 ? [
13066
13191
  'query'
@@ -13068,7 +13193,7 @@
13068
13193
  return items;
13069
13194
  } : _ref_transformItems;
13070
13195
  if (widgetParams && widgetParams.includedAttributes && widgetParams.excludedAttributes) {
13071
- throw new Error(withUsage$l('The options `includedAttributes` and `excludedAttributes` cannot be used together.'));
13196
+ throw new Error(withUsage$m('The options `includedAttributes` and `excludedAttributes` cannot be used together.'));
13072
13197
  }
13073
13198
  var connectorState = {
13074
13199
  refine: noop,
@@ -13171,16 +13296,16 @@
13171
13296
  return useConnector(connectClearRefinements, props, additionalWidgetProperties);
13172
13297
  }
13173
13298
 
13174
- var withUsage$k = createDocumentationMessageGenerator({
13299
+ var withUsage$l = createDocumentationMessageGenerator({
13175
13300
  name: 'current-refinements',
13176
13301
  connector: true
13177
13302
  });
13178
13303
  var connectCurrentRefinements = function connectCurrentRefinements(renderFn) {
13179
13304
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
13180
- checkRendering(renderFn, withUsage$k());
13305
+ checkRendering(renderFn, withUsage$l());
13181
13306
  return function(widgetParams) {
13182
13307
  if ((widgetParams || {}).includedAttributes && (widgetParams || {}).excludedAttributes) {
13183
- throw new Error(withUsage$k('The options `includedAttributes` and `excludedAttributes` cannot be used together.'));
13308
+ throw new Error(withUsage$l('The options `includedAttributes` and `excludedAttributes` cannot be used together.'));
13184
13309
  }
13185
13310
  var _ref = widgetParams || {}, includedAttributes = _ref.includedAttributes, _ref_excludedAttributes = _ref.excludedAttributes, excludedAttributes = _ref_excludedAttributes === void 0 ? [
13186
13311
  'query'
@@ -13369,19 +13494,19 @@
13369
13494
  });
13370
13495
  }
13371
13496
 
13372
- var withUsage$j = createDocumentationMessageGenerator({
13497
+ var withUsage$k = createDocumentationMessageGenerator({
13373
13498
  name: 'frequently-bought-together',
13374
13499
  connector: true
13375
13500
  });
13376
13501
  var connectFrequentlyBoughtTogether = function connectFrequentlyBoughtTogether(renderFn) {
13377
13502
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
13378
- checkRendering(renderFn, withUsage$j());
13503
+ checkRendering(renderFn, withUsage$k());
13379
13504
  return function(widgetParams) {
13380
13505
  var _ref = widgetParams || {}, _ref_escapeHTML = _ref.escapeHTML, escapeHTML = _ref_escapeHTML === void 0 ? true : _ref_escapeHTML, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
13381
13506
  return items;
13382
13507
  } : _ref_transformItems, objectIDs = _ref.objectIDs, limit = _ref.limit, threshold = _ref.threshold, fallbackParameters = _ref.fallbackParameters, queryParameters = _ref.queryParameters;
13383
13508
  if (!objectIDs || objectIDs.length === 0) {
13384
- throw new Error(withUsage$j('The `objectIDs` option is required.'));
13509
+ throw new Error(withUsage$k('The `objectIDs` option is required.'));
13385
13510
  }
13386
13511
  var sendEvent;
13387
13512
  return {
@@ -13519,7 +13644,7 @@
13519
13644
  return insideBoundingBoxStringToBoundingBox(value);
13520
13645
  }
13521
13646
 
13522
- var withUsage$i = createDocumentationMessageGenerator({
13647
+ var withUsage$j = createDocumentationMessageGenerator({
13523
13648
  name: 'geo-search',
13524
13649
  connector: true
13525
13650
  });
@@ -13543,7 +13668,7 @@
13543
13668
  * Currently, the feature is not compatible with multiple values in the _geoloc attribute.
13544
13669
  */ var connectGeoSearch = function connectGeoSearch(renderFn) {
13545
13670
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
13546
- checkRendering(renderFn, withUsage$i());
13671
+ checkRendering(renderFn, withUsage$j());
13547
13672
  return function(widgetParams) {
13548
13673
  var _ref = widgetParams || {}, _ref_enableRefineOnMapMove = _ref.enableRefineOnMapMove, enableRefineOnMapMove = _ref_enableRefineOnMapMove === void 0 ? true : _ref_enableRefineOnMapMove, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
13549
13674
  return items;
@@ -13761,7 +13886,7 @@
13761
13886
  return sendEventForFacet;
13762
13887
  }
13763
13888
 
13764
- var withUsage$h = createDocumentationMessageGenerator({
13889
+ var withUsage$i = createDocumentationMessageGenerator({
13765
13890
  name: 'hierarchical-menu',
13766
13891
  connector: true
13767
13892
  });
@@ -13782,16 +13907,16 @@
13782
13907
  * @return {function(CustomHierarchicalMenuWidgetParams)} Re-usable widget factory for a custom **HierarchicalMenu** widget.
13783
13908
  */ var connectHierarchicalMenu = function connectHierarchicalMenu(renderFn) {
13784
13909
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
13785
- checkRendering(renderFn, withUsage$h());
13910
+ checkRendering(renderFn, withUsage$i());
13786
13911
  return function(widgetParams) {
13787
13912
  var _ref = widgetParams || {}, attributes = _ref.attributes, _ref_separator = _ref.separator, separator = _ref_separator === void 0 ? ' > ' : _ref_separator, _ref_rootPath = _ref.rootPath, rootPath = _ref_rootPath === void 0 ? null : _ref_rootPath, _ref_showParentLevel = _ref.showParentLevel, showParentLevel = _ref_showParentLevel === void 0 ? true : _ref_showParentLevel, _ref_limit = _ref.limit, limit = _ref_limit === void 0 ? 10 : _ref_limit, _ref_showMore = _ref.showMore, showMore = _ref_showMore === void 0 ? false : _ref_showMore, _ref_showMoreLimit = _ref.showMoreLimit, showMoreLimit = _ref_showMoreLimit === void 0 ? 20 : _ref_showMoreLimit, _ref_sortBy = _ref.sortBy, sortBy = _ref_sortBy === void 0 ? DEFAULT_SORT$2 : _ref_sortBy, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
13788
13913
  return items;
13789
13914
  } : _ref_transformItems;
13790
13915
  if (!attributes || !Array.isArray(attributes) || attributes.length === 0) {
13791
- throw new Error(withUsage$h('The `attributes` option expects an array of strings.'));
13916
+ throw new Error(withUsage$i('The `attributes` option expects an array of strings.'));
13792
13917
  }
13793
13918
  if (showMore === true && showMoreLimit <= limit) {
13794
- throw new Error(withUsage$h('The `showMoreLimit` option must be greater than `limit`.'));
13919
+ throw new Error(withUsage$i('The `showMoreLimit` option must be greater than `limit`.'));
13795
13920
  }
13796
13921
  // we need to provide a hierarchicalFacet name for the search state
13797
13922
  // so that we can always map $hierarchicalFacetName => real attributes
@@ -13983,13 +14108,13 @@
13983
14108
  return useConnector(connectHierarchicalMenu, props, additionalWidgetProperties);
13984
14109
  }
13985
14110
 
13986
- var withUsage$g = createDocumentationMessageGenerator({
14111
+ var withUsage$h = createDocumentationMessageGenerator({
13987
14112
  name: 'hits',
13988
14113
  connector: true
13989
14114
  });
13990
14115
  var connectHits = function connectHits(renderFn) {
13991
14116
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
13992
- checkRendering(renderFn, withUsage$g());
14117
+ checkRendering(renderFn, withUsage$h());
13993
14118
  return function(widgetParams) {
13994
14119
  var _ref = widgetParams || {}, _ref_escapeHTML = _ref.escapeHTML, escapeHTML = _ref_escapeHTML === void 0 ? true : _ref_escapeHTML, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
13995
14120
  return items;
@@ -14087,29 +14212,29 @@
14087
14212
  return useConnector(connectHits, props, additionalWidgetProperties);
14088
14213
  }
14089
14214
 
14090
- var withUsage$f = createDocumentationMessageGenerator({
14215
+ var withUsage$g = createDocumentationMessageGenerator({
14091
14216
  name: 'hits-per-page',
14092
14217
  connector: true
14093
14218
  });
14094
14219
  var connectHitsPerPage = function connectHitsPerPage(renderFn) {
14095
14220
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
14096
- checkRendering(renderFn, withUsage$f());
14221
+ checkRendering(renderFn, withUsage$g());
14097
14222
  return function(widgetParams) {
14098
14223
  var _ref = widgetParams || {}, userItems = _ref.items, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
14099
14224
  return items;
14100
14225
  } : _ref_transformItems;
14101
14226
  if (!Array.isArray(userItems)) {
14102
- throw new Error(withUsage$f('The `items` option expects an array of objects.'));
14227
+ throw new Error(withUsage$g('The `items` option expects an array of objects.'));
14103
14228
  }
14104
14229
  var items = userItems;
14105
14230
  var defaultItems = items.filter(function(item) {
14106
14231
  return item.default === true;
14107
14232
  });
14108
14233
  if (defaultItems.length === 0) {
14109
- throw new Error(withUsage$f("A default value must be specified in `items`."));
14234
+ throw new Error(withUsage$g("A default value must be specified in `items`."));
14110
14235
  }
14111
14236
  if (defaultItems.length > 1) {
14112
- throw new Error(withUsage$f('More than one default value is specified in `items`.'));
14237
+ throw new Error(withUsage$g('More than one default value is specified in `items`.'));
14113
14238
  }
14114
14239
  var defaultItem = defaultItems[0];
14115
14240
  var normalizeItems = function normalizeItems(param) {
@@ -14228,7 +14353,7 @@
14228
14353
  });
14229
14354
  }
14230
14355
 
14231
- var withUsage$e = createDocumentationMessageGenerator({
14356
+ var withUsage$f = createDocumentationMessageGenerator({
14232
14357
  name: 'infinite-hits',
14233
14358
  connector: true
14234
14359
  });
@@ -14274,7 +14399,7 @@
14274
14399
  }
14275
14400
  var connectInfiniteHits = function connectInfiniteHits(renderFn) {
14276
14401
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
14277
- checkRendering(renderFn, withUsage$e());
14402
+ checkRendering(renderFn, withUsage$f());
14278
14403
  return function(widgetParams) {
14279
14404
  var _ref = widgetParams || {}, _ref_escapeHTML = _ref.escapeHTML, escapeHTML = _ref_escapeHTML === void 0 ? true : _ref_escapeHTML, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
14280
14405
  return items;
@@ -14480,7 +14605,7 @@
14480
14605
  return useConnector(connectInfiniteHits, props, additionalWidgetProperties);
14481
14606
  }
14482
14607
 
14483
- var withUsage$d = createDocumentationMessageGenerator({
14608
+ var withUsage$e = createDocumentationMessageGenerator({
14484
14609
  name: 'menu',
14485
14610
  connector: true
14486
14611
  });
@@ -14498,16 +14623,16 @@
14498
14623
  * **Requirement:** the attribute passed as `attribute` must be present in "attributes for faceting" on the Algolia dashboard or configured as attributesForFaceting via a set settings call to the Algolia API.
14499
14624
  */ var connectMenu = function connectMenu(renderFn) {
14500
14625
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
14501
- checkRendering(renderFn, withUsage$d());
14626
+ checkRendering(renderFn, withUsage$e());
14502
14627
  return function(widgetParams) {
14503
14628
  var _ref = widgetParams || {}, attribute = _ref.attribute, _ref_limit = _ref.limit, limit = _ref_limit === void 0 ? 10 : _ref_limit, _ref_showMore = _ref.showMore, showMore = _ref_showMore === void 0 ? false : _ref_showMore, _ref_showMoreLimit = _ref.showMoreLimit, showMoreLimit = _ref_showMoreLimit === void 0 ? 20 : _ref_showMoreLimit, _ref_sortBy = _ref.sortBy, sortBy = _ref_sortBy === void 0 ? DEFAULT_SORT$1 : _ref_sortBy, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
14504
14629
  return items;
14505
14630
  } : _ref_transformItems;
14506
14631
  if (!attribute) {
14507
- throw new Error(withUsage$d('The `attribute` option is required.'));
14632
+ throw new Error(withUsage$e('The `attribute` option is required.'));
14508
14633
  }
14509
14634
  if (showMore === true && showMoreLimit <= limit) {
14510
- throw new Error(withUsage$d('The `showMoreLimit` option must be greater than `limit`.'));
14635
+ throw new Error(withUsage$e('The `showMoreLimit` option must be greater than `limit`.'));
14511
14636
  }
14512
14637
  var sendEvent;
14513
14638
  var _createURL;
@@ -14677,7 +14802,7 @@
14677
14802
  return typeof value === 'number' && isFinite(value);
14678
14803
  }
14679
14804
 
14680
- var withUsage$c = createDocumentationMessageGenerator({
14805
+ var withUsage$d = createDocumentationMessageGenerator({
14681
14806
  name: 'numeric-menu',
14682
14807
  connector: true
14683
14808
  });
@@ -14696,16 +14821,16 @@
14696
14821
  };
14697
14822
  var connectNumericMenu = function connectNumericMenu(renderFn) {
14698
14823
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
14699
- checkRendering(renderFn, withUsage$c());
14824
+ checkRendering(renderFn, withUsage$d());
14700
14825
  return function(widgetParams) {
14701
14826
  var _ref = widgetParams || {}, _ref_attribute = _ref.attribute, attribute = _ref_attribute === void 0 ? '' : _ref_attribute, _ref_items = _ref.items, items = _ref_items === void 0 ? [] : _ref_items, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(item) {
14702
14827
  return item;
14703
14828
  } : _ref_transformItems;
14704
14829
  if (attribute === '') {
14705
- throw new Error(withUsage$c('The `attribute` option is required.'));
14830
+ throw new Error(withUsage$d('The `attribute` option is required.'));
14706
14831
  }
14707
14832
  if (!items || items.length === 0) {
14708
- throw new Error(withUsage$c('The `items` option expects an array of objects.'));
14833
+ throw new Error(withUsage$d('The `items` option expects an array of objects.'));
14709
14834
  }
14710
14835
  var prepareItems = function prepareItems(state) {
14711
14836
  return items.map(function(param) {
@@ -15020,7 +15145,7 @@
15020
15145
  return Paginator;
15021
15146
  }();
15022
15147
 
15023
- var withUsage$b = createDocumentationMessageGenerator({
15148
+ var withUsage$c = createDocumentationMessageGenerator({
15024
15149
  name: 'pagination',
15025
15150
  connector: true
15026
15151
  });
@@ -15032,7 +15157,7 @@
15032
15157
  * beyond the 1000th hits by default. You can find more information on the [Algolia documentation](https://www.algolia.com/doc/guides/searching/pagination/#pagination-limitations).
15033
15158
  */ var connectPagination = function connectPagination(renderFn) {
15034
15159
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
15035
- checkRendering(renderFn, withUsage$b());
15160
+ checkRendering(renderFn, withUsage$c());
15036
15161
  return function(widgetParams) {
15037
15162
  var _ref = widgetParams || {}, totalPages = _ref.totalPages, _ref_padding = _ref.padding, padding = _ref_padding === void 0 ? 3 : _ref_padding;
15038
15163
  var pager = new Paginator({
@@ -15154,7 +15279,7 @@
15154
15279
  };
15155
15280
  }
15156
15281
 
15157
- var withUsage$a = createDocumentationMessageGenerator({
15282
+ var withUsage$b = createDocumentationMessageGenerator({
15158
15283
  name: 'query-rules',
15159
15284
  connector: true
15160
15285
  });
@@ -15210,7 +15335,7 @@
15210
15335
  }
15211
15336
  var connectQueryRules = function connectQueryRules(render) {
15212
15337
  var unmount = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
15213
- checkRendering(render, withUsage$a());
15338
+ checkRendering(render, withUsage$b());
15214
15339
  return function(widgetParams) {
15215
15340
  var _ref = widgetParams || {}, _ref_trackedFilters = _ref.trackedFilters, trackedFilters = _ref_trackedFilters === void 0 ? {} : _ref_trackedFilters, _ref_transformRuleContexts = _ref.transformRuleContexts, transformRuleContexts = _ref_transformRuleContexts === void 0 ? function(rules) {
15216
15341
  return rules;
@@ -15219,7 +15344,7 @@
15219
15344
  } : _ref_transformItems;
15220
15345
  Object.keys(trackedFilters).forEach(function(facetName) {
15221
15346
  if (typeof trackedFilters[facetName] !== 'function') {
15222
- throw new Error(withUsage$a("'The \"".concat(facetName, '" filter value in the `trackedFilters` option expects a function.')));
15347
+ throw new Error(withUsage$b("'The \"".concat(facetName, '" filter value in the `trackedFilters` option expects a function.')));
15223
15348
  }
15224
15349
  });
15225
15350
  var hasTrackedFilters = Object.keys(trackedFilters).length > 0;
@@ -15295,7 +15420,7 @@
15295
15420
  return useConnector(connectQueryRules, props, additionalWidgetProperties);
15296
15421
  }
15297
15422
 
15298
- var withUsage$9 = createDocumentationMessageGenerator({
15423
+ var withUsage$a = createDocumentationMessageGenerator({
15299
15424
  name: 'range-input',
15300
15425
  connector: true
15301
15426
  }, {
@@ -15319,14 +15444,14 @@
15319
15444
  * information about the min and max bounds for the current result set.
15320
15445
  */ var connectRange = function connectRange(renderFn) {
15321
15446
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
15322
- checkRendering(renderFn, withUsage$9());
15447
+ checkRendering(renderFn, withUsage$a());
15323
15448
  return function(widgetParams) {
15324
15449
  var _ref = widgetParams || {}, _ref_attribute = _ref.attribute, attribute = _ref_attribute === void 0 ? '' : _ref_attribute, minBound = _ref.min, maxBound = _ref.max, _ref_precision = _ref.precision, precision = _ref_precision === void 0 ? 0 : _ref_precision;
15325
15450
  if (!attribute) {
15326
- throw new Error(withUsage$9('The `attribute` option is required.'));
15451
+ throw new Error(withUsage$a('The `attribute` option is required.'));
15327
15452
  }
15328
15453
  if (isFiniteNumber(minBound) && isFiniteNumber(maxBound) && minBound > maxBound) {
15329
- throw new Error(withUsage$9("The `max` option can't be lower than `min`."));
15454
+ throw new Error(withUsage$a("The `max` option can't be lower than `min`."));
15330
15455
  }
15331
15456
  var formatToNumber = function formatToNumber(v) {
15332
15457
  return Number(Number(v).toFixed(precision));
@@ -15546,7 +15671,7 @@
15546
15671
  return useConnector(connectRange, props, additionalWidgetProperties);
15547
15672
  }
15548
15673
 
15549
- var withUsage$8 = createDocumentationMessageGenerator({
15674
+ var withUsage$9 = createDocumentationMessageGenerator({
15550
15675
  name: 'refinement-list',
15551
15676
  connector: true
15552
15677
  });
@@ -15568,19 +15693,19 @@
15568
15693
  * - a `searchForItems()` function to search within the items.
15569
15694
  */ var connectRefinementList = function connectRefinementList(renderFn) {
15570
15695
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
15571
- checkRendering(renderFn, withUsage$8());
15696
+ checkRendering(renderFn, withUsage$9());
15572
15697
  return function(widgetParams) {
15573
15698
  var _ref = widgetParams || {}, attribute = _ref.attribute, _ref_operator = _ref.operator, operator = _ref_operator === void 0 ? 'or' : _ref_operator, _ref_limit = _ref.limit, limit = _ref_limit === void 0 ? 10 : _ref_limit, _ref_showMore = _ref.showMore, showMore = _ref_showMore === void 0 ? false : _ref_showMore, _ref_showMoreLimit = _ref.showMoreLimit, showMoreLimit = _ref_showMoreLimit === void 0 ? 20 : _ref_showMoreLimit, _ref_sortBy = _ref.sortBy, sortBy = _ref_sortBy === void 0 ? DEFAULT_SORT : _ref_sortBy, _ref_escapeFacetValues = _ref.escapeFacetValues, escapeFacetValues = _ref_escapeFacetValues === void 0 ? true : _ref_escapeFacetValues, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
15574
15699
  return items;
15575
15700
  } : _ref_transformItems;
15576
15701
  if (!attribute) {
15577
- throw new Error(withUsage$8('The `attribute` option is required.'));
15702
+ throw new Error(withUsage$9('The `attribute` option is required.'));
15578
15703
  }
15579
15704
  if (!/^(and|or)$/.test(operator)) {
15580
- throw new Error(withUsage$8('The `operator` must one of: `"and"`, `"or"` (got "'.concat(operator, '").')));
15705
+ throw new Error(withUsage$9('The `operator` must one of: `"and"`, `"or"` (got "'.concat(operator, '").')));
15581
15706
  }
15582
15707
  if (showMore === true && showMoreLimit <= limit) {
15583
- throw new Error(withUsage$8('`showMoreLimit` should be greater than `limit`.'));
15708
+ throw new Error(withUsage$9('`showMoreLimit` should be greater than `limit`.'));
15584
15709
  }
15585
15710
  var formatItems = function formatItems(_0) {
15586
15711
  var label = _0.name, value = _0.escapedValue, item = _object_without_properties(_0, [
@@ -15808,19 +15933,19 @@
15808
15933
  return useConnector(connectRefinementList, props, additionalWidgetProperties);
15809
15934
  }
15810
15935
 
15811
- var withUsage$7 = createDocumentationMessageGenerator({
15936
+ var withUsage$8 = createDocumentationMessageGenerator({
15812
15937
  name: 'related-products',
15813
15938
  connector: true
15814
15939
  });
15815
15940
  var connectRelatedProducts = function connectRelatedProducts(renderFn) {
15816
15941
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
15817
- checkRendering(renderFn, withUsage$7());
15942
+ checkRendering(renderFn, withUsage$8());
15818
15943
  return function(widgetParams) {
15819
15944
  var _ref = widgetParams || {}, _ref_escapeHTML = _ref.escapeHTML, escapeHTML = _ref_escapeHTML === void 0 ? true : _ref_escapeHTML, objectIDs = _ref.objectIDs, limit = _ref.limit, threshold = _ref.threshold, fallbackParameters = _ref.fallbackParameters, queryParameters = _ref.queryParameters, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
15820
15945
  return items;
15821
15946
  } : _ref_transformItems;
15822
15947
  if (!objectIDs || objectIDs.length === 0) {
15823
- throw new Error(withUsage$7('The `objectIDs` option is required.'));
15948
+ throw new Error(withUsage$8('The `objectIDs` option is required.'));
15824
15949
  }
15825
15950
  var sendEvent;
15826
15951
  return {
@@ -15896,7 +16021,7 @@
15896
16021
  return useConnector(connectRelatedProducts, props, additionalWidgetProperties);
15897
16022
  }
15898
16023
 
15899
- var withUsage$6 = createDocumentationMessageGenerator({
16024
+ var withUsage$7 = createDocumentationMessageGenerator({
15900
16025
  name: 'search-box',
15901
16026
  connector: true
15902
16027
  });
@@ -15910,7 +16035,7 @@
15910
16035
  * may be impacted by the `queryHook` widget parameter.
15911
16036
  */ var connectSearchBox = function connectSearchBox(renderFn) {
15912
16037
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
15913
- checkRendering(renderFn, withUsage$6());
16038
+ checkRendering(renderFn, withUsage$7());
15914
16039
  return function(widgetParams) {
15915
16040
  var _ref = widgetParams || {}, _ref_queryHook = _ref.queryHook, queryHook = _ref_queryHook === void 0 ? defaultQueryHook : _ref_queryHook;
15916
16041
  var _refine;
@@ -15981,7 +16106,7 @@
15981
16106
  return useConnector(connectSearchBox, props, additionalWidgetProperties);
15982
16107
  }
15983
16108
 
15984
- var withUsage$5 = createDocumentationMessageGenerator({
16109
+ var withUsage$6 = createDocumentationMessageGenerator({
15985
16110
  name: 'sort-by',
15986
16111
  connector: true
15987
16112
  });
@@ -16001,14 +16126,14 @@
16001
16126
  }
16002
16127
  var connectSortBy = function connectSortBy(renderFn) {
16003
16128
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
16004
- checkRendering(renderFn, withUsage$5());
16129
+ checkRendering(renderFn, withUsage$6());
16005
16130
  var connectorState = {};
16006
16131
  return function(widgetParams) {
16007
16132
  var _ref = widgetParams || {}, items = _ref.items, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(x) {
16008
16133
  return x;
16009
16134
  } : _ref_transformItems;
16010
16135
  if (!Array.isArray(items)) {
16011
- throw new Error(withUsage$5('The `items` option expects an array of objects.'));
16136
+ throw new Error(withUsage$6('The `items` option expects an array of objects.'));
16012
16137
  }
16013
16138
  var itemsLookup = {};
16014
16139
  items.forEach(function(item, index) {
@@ -16016,10 +16141,10 @@
16016
16141
  var hasStrategy = 'strategy' in item && item.strategy !== undefined;
16017
16142
  // Validate mutual exclusivity
16018
16143
  if (hasValue && hasStrategy) {
16019
- throw new Error(withUsage$5("Item at index ".concat(index, ' cannot have both "value" and "strategy" properties.')));
16144
+ throw new Error(withUsage$6("Item at index ".concat(index, ' cannot have both "value" and "strategy" properties.')));
16020
16145
  }
16021
16146
  if (!hasValue && !hasStrategy) {
16022
- throw new Error(withUsage$5("Item at index ".concat(index, ' must have either a "value" or "strategy" property.')));
16147
+ throw new Error(withUsage$6("Item at index ".concat(index, ' must have either a "value" or "strategy" property.')));
16023
16148
  }
16024
16149
  var itemValue = getItemValue(item);
16025
16150
  itemsLookup[itemValue] = item;
@@ -16034,7 +16159,7 @@
16034
16159
  return 'strategy' in item && item.strategy;
16035
16160
  });
16036
16161
  if (hasStrategyItems && !instantSearchInstance.compositionID) {
16037
- throw new Error(withUsage$5('Sorting strategies can only be used in composition mode. Please provide a "compositionID" to your InstantSearch instance.'));
16162
+ throw new Error(withUsage$6('Sorting strategies can only be used in composition mode. Please provide a "compositionID" to your InstantSearch instance.'));
16038
16163
  }
16039
16164
  var widgetRenderState = this.getWidgetRenderState(initOptions);
16040
16165
  var currentIndex = widgetRenderState.currentRefinement;
@@ -16147,13 +16272,13 @@
16147
16272
  return useConnector(connectSortBy, props, additionalWidgetProperties);
16148
16273
  }
16149
16274
 
16150
- var withUsage$4 = createDocumentationMessageGenerator({
16275
+ var withUsage$5 = createDocumentationMessageGenerator({
16151
16276
  name: 'stats',
16152
16277
  connector: true
16153
16278
  });
16154
16279
  var connectStats = function connectStats(renderFn) {
16155
16280
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
16156
- checkRendering(renderFn, withUsage$4());
16281
+ checkRendering(renderFn, withUsage$5());
16157
16282
  return function(widgetParams) {
16158
16283
  return {
16159
16284
  $$type: 'ais.stats',
@@ -16212,7 +16337,7 @@
16212
16337
  return useConnector(connectStats, props, additionalWidgetProperties);
16213
16338
  }
16214
16339
 
16215
- var withUsage$3 = createDocumentationMessageGenerator({
16340
+ var withUsage$4 = createDocumentationMessageGenerator({
16216
16341
  name: 'toggle-refinement',
16217
16342
  connector: true
16218
16343
  });
@@ -16263,11 +16388,11 @@
16263
16388
  * - switch between two values.
16264
16389
  */ var connectToggleRefinement = function connectToggleRefinement(renderFn) {
16265
16390
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
16266
- checkRendering(renderFn, withUsage$3());
16391
+ checkRendering(renderFn, withUsage$4());
16267
16392
  return function(widgetParams) {
16268
16393
  var _ref = widgetParams || {}, attribute = _ref.attribute, tmp = _ref.on, userOn = tmp === void 0 ? true : tmp, userOff = _ref.off;
16269
16394
  if (!attribute) {
16270
- throw new Error(withUsage$3('The `attribute` option is required.'));
16395
+ throw new Error(withUsage$4('The `attribute` option is required.'));
16271
16396
  }
16272
16397
  var hasAnOffValue = userOff !== undefined;
16273
16398
  // even though facet values can be numbers and boolean,
@@ -16488,19 +16613,19 @@
16488
16613
  return useConnector(connectToggleRefinement, props, additionalWidgetProperties);
16489
16614
  }
16490
16615
 
16491
- var withUsage$2 = createDocumentationMessageGenerator({
16616
+ var withUsage$3 = createDocumentationMessageGenerator({
16492
16617
  name: 'trending-items',
16493
16618
  connector: true
16494
16619
  });
16495
16620
  var connectTrendingItems = function connectTrendingItems(renderFn) {
16496
16621
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
16497
- checkRendering(renderFn, withUsage$2());
16622
+ checkRendering(renderFn, withUsage$3());
16498
16623
  return function(widgetParams) {
16499
16624
  var _ref = widgetParams || {}, facetName = _ref.facetName, facetValue = _ref.facetValue, limit = _ref.limit, threshold = _ref.threshold, fallbackParameters = _ref.fallbackParameters, queryParameters = _ref.queryParameters, _ref_escapeHTML = _ref.escapeHTML, escapeHTML = _ref_escapeHTML === void 0 ? true : _ref_escapeHTML, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
16500
16625
  return items;
16501
16626
  } : _ref_transformItems;
16502
16627
  if (facetName && !facetValue || !facetName && facetValue) {
16503
- throw new Error(withUsage$2("When you provide facetName (received type ".concat(getObjectType(facetName), "), you must also provide facetValue (received type ").concat(getObjectType(facetValue), ").")));
16628
+ throw new Error(withUsage$3("When you provide facetName (received type ".concat(getObjectType(facetName), "), you must also provide facetValue (received type ").concat(getObjectType(facetValue), ").")));
16504
16629
  }
16505
16630
  var sendEvent;
16506
16631
  return {
@@ -16574,6 +16699,94 @@
16574
16699
  return useConnector(connectTrendingItems, props, additionalWidgetProperties);
16575
16700
  }
16576
16701
 
16702
+ var withUsage$2 = createDocumentationMessageGenerator({
16703
+ name: 'trending-facets',
16704
+ connector: true
16705
+ });
16706
+ var connectTrendingFacets = function connectTrendingFacets(renderFn) {
16707
+ var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
16708
+ checkRendering(renderFn, withUsage$2());
16709
+ return function(widgetParams) {
16710
+ var _ref = widgetParams || {}, facetName = _ref.facetName, limit = _ref.limit, threshold = _ref.threshold, fallbackParameters = _ref.fallbackParameters, queryParameters = _ref.queryParameters, _ref_escapeHTML = _ref.escapeHTML, escapeHTML = _ref_escapeHTML === void 0 ? true : _ref_escapeHTML, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
16711
+ return items;
16712
+ } : _ref_transformItems;
16713
+ if (!facetName) {
16714
+ throw new Error(withUsage$2('The `facetName` option is required.'));
16715
+ }
16716
+ return {
16717
+ dependsOn: 'recommend',
16718
+ $$type: 'ais.trendingFacets',
16719
+ init: function init(initOptions) {
16720
+ renderFn(_object_spread_props(_object_spread({}, this.getWidgetRenderState(initOptions)), {
16721
+ instantSearchInstance: initOptions.instantSearchInstance
16722
+ }), true);
16723
+ },
16724
+ render: function render(renderOptions) {
16725
+ var renderState = this.getWidgetRenderState(renderOptions);
16726
+ renderFn(_object_spread_props(_object_spread({}, renderState), {
16727
+ instantSearchInstance: renderOptions.instantSearchInstance
16728
+ }), false);
16729
+ },
16730
+ getRenderState: function getRenderState(renderState) {
16731
+ return renderState;
16732
+ },
16733
+ getWidgetRenderState: function getWidgetRenderState(param) {
16734
+ var results = param.results;
16735
+ param.helper;
16736
+ param.instantSearchInstance;
16737
+ if (results === null || results === undefined) {
16738
+ return {
16739
+ items: [],
16740
+ widgetParams: widgetParams
16741
+ };
16742
+ }
16743
+ var items = (results.hits || []).map(function(hit) {
16744
+ return {
16745
+ facetName: hit.facetName,
16746
+ facetValue: hit.facetValue,
16747
+ _score: hit._score
16748
+ };
16749
+ });
16750
+ if (escapeHTML) {
16751
+ items = items.map(function(item) {
16752
+ return _object_spread_props(_object_spread({}, item), {
16753
+ facetValue: escape$1(item.facetValue)
16754
+ });
16755
+ });
16756
+ }
16757
+ items = transformItems(items, {
16758
+ results: results
16759
+ });
16760
+ return {
16761
+ items: items,
16762
+ widgetParams: widgetParams
16763
+ };
16764
+ },
16765
+ dispose: function dispose(param) {
16766
+ var recommendState = param.recommendState;
16767
+ unmountFn();
16768
+ return recommendState.removeParams(this.$$id);
16769
+ },
16770
+ getWidgetParameters: function getWidgetParameters(state) {
16771
+ // v4 TrendingFacetsQuery doesn't include queryParameters or
16772
+ // fallbackParameters, but the v5 API and the helper support them.
16773
+ return state.removeParams(this.$$id).addTrendingFacets({
16774
+ facetName: facetName,
16775
+ maxRecommendations: limit,
16776
+ threshold: threshold,
16777
+ fallbackParameters: fallbackParameters ? _object_spread({}, fallbackParameters, escapeHTML ? TAG_PLACEHOLDER : {}) : undefined,
16778
+ queryParameters: _object_spread({}, queryParameters, escapeHTML ? TAG_PLACEHOLDER : {}),
16779
+ $$id: this.$$id
16780
+ });
16781
+ }
16782
+ };
16783
+ };
16784
+ };
16785
+
16786
+ function useTrendingFacets(props, additionalWidgetProperties) {
16787
+ return useConnector(connectTrendingFacets, props, additionalWidgetProperties);
16788
+ }
16789
+
16577
16790
  var withUsage$1 = createDocumentationMessageGenerator({
16578
16791
  name: 'looking-similar',
16579
16792
  connector: true
@@ -17330,6 +17543,20 @@
17330
17543
  };
17331
17544
  }
17332
17545
 
17546
+ // WebKit can keep this SVG spinner animating while the loading slot is hidden (`hidden` / not stalled),
17547
+ // which wastes work. We pause SMIL when idle and unpause when `isSearchStalled`.
17548
+ // Same approach as autocomplete-js.
17549
+ // https://github.com/algolia/autocomplete/issues/1322
17550
+ function syncLoadingSvgAnimation(element, isSearchStalled) {
17551
+ if (!element || typeof element.pauseAnimations !== 'function' || typeof element.unpauseAnimations !== 'function') {
17552
+ return;
17553
+ }
17554
+ if (isSearchStalled) {
17555
+ element.unpauseAnimations();
17556
+ } else {
17557
+ element.pauseAnimations();
17558
+ }
17559
+ }
17333
17560
  function SubmitIcon(param) {
17334
17561
  var createElement = param.createElement;
17335
17562
  return /*#__PURE__*/ createElement("svg", {
@@ -17341,10 +17568,13 @@
17341
17568
  }));
17342
17569
  }
17343
17570
  function LoadingIcon(param) {
17344
- var createElement = param.createElement;
17571
+ var createElement = param.createElement, isSearchStalled = param.isSearchStalled;
17345
17572
  return /*#__PURE__*/ createElement("svg", {
17346
17573
  className: "ais-AutocompleteLoadingIcon",
17347
- viewBox: "0 0 100 100"
17574
+ viewBox: "0 0 100 100",
17575
+ ref: function ref(element) {
17576
+ return syncLoadingSvgAnimation(element, isSearchStalled);
17577
+ }
17348
17578
  }, /*#__PURE__*/ createElement("circle", {
17349
17579
  cx: "50",
17350
17580
  cy: "50",
@@ -17399,6 +17629,28 @@
17399
17629
  d: "M8 17v-7.586l8.293 8.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-8.293-8.293h7.586c0.552 0 1-0.448 1-1s-0.448-1-1-1h-10c-0.552 0-1 0.448-1 1v10c0 0.552 0.448 1 1 1s1-0.448 1-1z"
17400
17630
  }));
17401
17631
  }
17632
+ function AiModeIcon(param) {
17633
+ var createElement = param.createElement;
17634
+ return /*#__PURE__*/ createElement("svg", {
17635
+ className: "ais-AiModeButton-icon",
17636
+ xmlns: "http://www.w3.org/2000/svg",
17637
+ fill: "none",
17638
+ viewBox: "0 0 20 20",
17639
+ width: "16",
17640
+ height: "16",
17641
+ "aria-hidden": "true"
17642
+ }, /*#__PURE__*/ createElement("path", {
17643
+ fill: "currentColor",
17644
+ fillRule: "evenodd",
17645
+ d: "M10 1.875c.27 0 .51.173.594.43l1.593 4.844a1.043 1.043 0 0 0 .664.664l4.844 1.593a.625.625 0 0 1 0 1.188l-4.844 1.593a1.043 1.043 0 0 0-.664.664l-1.593 4.844a.625.625 0 0 1-1.188 0l-1.593-4.844a1.042 1.042 0 0 0-.664-.664l-4.844-1.593a.625.625 0 0 1 0-1.188l4.844-1.593a1.042 1.042 0 0 0 .664-.664l1.593-4.844a.625.625 0 0 1 .594-.43ZM9 7.539A2.292 2.292 0 0 1 7.54 9L4.5 10l3.04 1A2.292 2.292 0 0 1 9 12.46l1 3.04 1-3.04A2.293 2.293 0 0 1 12.46 11l3.04-1-3.04-1A2.292 2.292 0 0 1 11 7.54L10 4.5 9 7.54ZM4.167 1.875c.345 0 .625.28.625.625v3.333a.625.625 0 0 1-1.25 0V2.5c0-.345.28-.625.625-.625ZM15.833 13.542c.345 0 .625.28.625.625V17.5a.625.625 0 1 1-1.25 0v-3.333c0-.345.28-.625.625-.625Z",
17646
+ clipRule: "evenodd"
17647
+ }), /*#__PURE__*/ createElement("path", {
17648
+ fill: "currentColor",
17649
+ fillRule: "evenodd",
17650
+ d: "M1.875 4.167c0-.346.28-.625.625-.625h3.333a.625.625 0 1 1 0 1.25H2.5a.625.625 0 0 1-.625-.625ZM13.542 15.833c0-.345.28-.625.625-.625H17.5a.625.625 0 0 1 0 1.25h-3.333a.625.625 0 0 1-.625-.625Z",
17651
+ clipRule: "evenodd"
17652
+ }));
17653
+ }
17402
17654
  function SearchIcon(param) {
17403
17655
  var createElement = param.createElement;
17404
17656
  return /*#__PURE__*/ createElement("svg", {
@@ -17732,7 +17984,7 @@
17732
17984
  stroke: "currentColor"
17733
17985
  }));
17734
17986
  }
17735
- function ChevronLeftIcon(param) {
17987
+ function CheckIcon(param) {
17736
17988
  var createElement = param.createElement;
17737
17989
  return /*#__PURE__*/ createElement("svg", {
17738
17990
  xmlns: "http://www.w3.org/2000/svg",
@@ -17742,10 +17994,12 @@
17742
17994
  strokeLinecap: "round",
17743
17995
  strokeLinejoin: "round"
17744
17996
  }, /*#__PURE__*/ createElement("path", {
17745
- d: "m15 18-6-6 6-6"
17997
+ d: "M21.801 10A10 10 0 1 1 17 3.335"
17998
+ }), /*#__PURE__*/ createElement("path", {
17999
+ d: "m9 11 3 3L22 4"
17746
18000
  }));
17747
18001
  }
17748
- function ChevronRightIcon(param) {
18002
+ function ThumbsUpIcon(param) {
17749
18003
  var createElement = param.createElement;
17750
18004
  return /*#__PURE__*/ createElement("svg", {
17751
18005
  xmlns: "http://www.w3.org/2000/svg",
@@ -17755,31 +18009,74 @@
17755
18009
  strokeLinecap: "round",
17756
18010
  strokeLinejoin: "round"
17757
18011
  }, /*#__PURE__*/ createElement("path", {
17758
- d: "m9 18 6-6-6-6"
18012
+ d: "M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"
18013
+ }), /*#__PURE__*/ createElement("path", {
18014
+ d: "M7 10v12"
17759
18015
  }));
17760
18016
  }
17761
-
17762
- function createAutocompletePromptSuggestionComponent(param) {
18017
+ function ThumbsDownIcon(param) {
17763
18018
  var createElement = param.createElement;
17764
- return function AutocompletePromptSuggestion(userProps) {
17765
- var item = userProps.item, onSelect = userProps.onSelect, children = userProps.children, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames;
17766
- var label = item.label || item.prompt;
17767
- return /*#__PURE__*/ createElement("div", {
17768
- onClick: onSelect,
17769
- className: cx('ais-AutocompleteItemWrapper', 'ais-AutocompletePromptSuggestionWrapper', classNames.root)
17770
- }, /*#__PURE__*/ createElement("div", {
17771
- className: cx('ais-AutocompleteItemContent', 'ais-AutocompletePromptSuggestionItemContent', classNames.content)
17772
- }, /*#__PURE__*/ createElement("div", {
17773
- className: cx('ais-AutocompleteItemIcon', 'ais-AutocompletePromptSuggestionItemIcon', classNames.icon)
17774
- }, /*#__PURE__*/ createElement(SparklesIcon, {
17775
- createElement: createElement
17776
- })), /*#__PURE__*/ createElement("div", {
17777
- className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompletePromptSuggestionItemContentBody', classNames.body)
17778
- }, children !== null && children !== void 0 ? children : label)));
17779
- };
17780
- }
17781
-
17782
- function createAutocompleteRecentSearchComponent(param) {
18019
+ return /*#__PURE__*/ createElement("svg", {
18020
+ xmlns: "http://www.w3.org/2000/svg",
18021
+ viewBox: "0 0 24 24",
18022
+ fill: "none",
18023
+ stroke: "currentColor",
18024
+ strokeLinecap: "round",
18025
+ strokeLinejoin: "round"
18026
+ }, /*#__PURE__*/ createElement("path", {
18027
+ d: "M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"
18028
+ }), /*#__PURE__*/ createElement("path", {
18029
+ d: "M17 14V2"
18030
+ }));
18031
+ }
18032
+ function ChevronLeftIcon(param) {
18033
+ var createElement = param.createElement;
18034
+ return /*#__PURE__*/ createElement("svg", {
18035
+ xmlns: "http://www.w3.org/2000/svg",
18036
+ viewBox: "0 0 24 24",
18037
+ fill: "none",
18038
+ stroke: "currentColor",
18039
+ strokeLinecap: "round",
18040
+ strokeLinejoin: "round"
18041
+ }, /*#__PURE__*/ createElement("path", {
18042
+ d: "m15 18-6-6 6-6"
18043
+ }));
18044
+ }
18045
+ function ChevronRightIcon(param) {
18046
+ var createElement = param.createElement;
18047
+ return /*#__PURE__*/ createElement("svg", {
18048
+ xmlns: "http://www.w3.org/2000/svg",
18049
+ viewBox: "0 0 24 24",
18050
+ fill: "none",
18051
+ stroke: "currentColor",
18052
+ strokeLinecap: "round",
18053
+ strokeLinejoin: "round"
18054
+ }, /*#__PURE__*/ createElement("path", {
18055
+ d: "m9 18 6-6-6-6"
18056
+ }));
18057
+ }
18058
+
18059
+ function createAutocompletePromptSuggestionComponent(param) {
18060
+ var createElement = param.createElement;
18061
+ return function AutocompletePromptSuggestion(userProps) {
18062
+ var item = userProps.item, onSelect = userProps.onSelect, children = userProps.children, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames;
18063
+ var label = item.label || item.prompt;
18064
+ return /*#__PURE__*/ createElement("div", {
18065
+ onClick: onSelect,
18066
+ className: cx('ais-AutocompleteItemWrapper', 'ais-AutocompletePromptSuggestionWrapper', classNames.root)
18067
+ }, /*#__PURE__*/ createElement("div", {
18068
+ className: cx('ais-AutocompleteItemContent', 'ais-AutocompletePromptSuggestionItemContent', classNames.content)
18069
+ }, /*#__PURE__*/ createElement("div", {
18070
+ className: cx('ais-AutocompleteItemIcon', 'ais-AutocompletePromptSuggestionItemIcon', classNames.icon)
18071
+ }, /*#__PURE__*/ createElement(SparklesIcon, {
18072
+ createElement: createElement
18073
+ })), /*#__PURE__*/ createElement("div", {
18074
+ className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompletePromptSuggestionItemContentBody', classNames.body)
18075
+ }, children !== null && children !== void 0 ? children : label)));
18076
+ };
18077
+ }
18078
+
18079
+ function createAutocompleteRecentSearchComponent(param) {
17783
18080
  var createElement = param.createElement;
17784
18081
  return function AutocompleteRecentSearch(userProps) {
17785
18082
  var item = userProps.item, children = userProps.children, onSelect = userProps.onSelect, onRemoveRecentSearch = userProps.onRemoveRecentSearch, onApply = userProps.onApply, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames;
@@ -17821,7 +18118,7 @@
17821
18118
  function createAutocompleteSearchComponent(param) {
17822
18119
  var createElement = param.createElement;
17823
18120
  return function AutocompleteSearch(userProps) {
17824
- var inputProps = userProps.inputProps, onClear = userProps.onClear, query = userProps.query, isSearchStalled = userProps.isSearchStalled;
18121
+ var inputProps = userProps.inputProps, onClear = userProps.onClear, query = userProps.query, isSearchStalled = userProps.isSearchStalled, onAiModeClick = userProps.onAiModeClick;
17825
18122
  var inputRef = inputProps.ref;
17826
18123
  return /*#__PURE__*/ createElement("form", {
17827
18124
  className: "ais-AutocompleteForm",
@@ -17845,14 +18142,16 @@
17845
18142
  }, /*#__PURE__*/ createElement("button", {
17846
18143
  className: "ais-AutocompleteSubmitButton",
17847
18144
  type: "submit",
17848
- title: "Submit"
18145
+ title: "Submit",
18146
+ hidden: isSearchStalled
17849
18147
  }, /*#__PURE__*/ createElement(SubmitIcon, {
17850
18148
  createElement: createElement
17851
18149
  }))), /*#__PURE__*/ createElement("div", {
17852
18150
  className: "ais-AutocompleteLoadingIndicator",
17853
18151
  hidden: !isSearchStalled
17854
18152
  }, /*#__PURE__*/ createElement(LoadingIcon, {
17855
- createElement: createElement
18153
+ createElement: createElement,
18154
+ isSearchStalled: isSearchStalled
17856
18155
  }))), /*#__PURE__*/ createElement("div", {
17857
18156
  className: "ais-AutocompleteInputWrapper"
17858
18157
  }, /*#__PURE__*/ createElement("input", _object_spread({
@@ -17877,7 +18176,19 @@
17877
18176
  onClick: onClear
17878
18177
  }, /*#__PURE__*/ createElement(ClearIcon, {
17879
18178
  createElement: createElement
17880
- }))));
18179
+ })), onAiModeClick && /*#__PURE__*/ createElement("button", {
18180
+ className: "ais-AiModeButton",
18181
+ type: "button",
18182
+ title: "AI Mode",
18183
+ onClick: function onClick(e) {
18184
+ e.preventDefault();
18185
+ onAiModeClick();
18186
+ }
18187
+ }, /*#__PURE__*/ createElement(AiModeIcon, {
18188
+ createElement: createElement
18189
+ }), /*#__PURE__*/ createElement("span", {
18190
+ className: "ais-AiModeButton-label"
18191
+ }, "AI Mode"))));
17881
18192
  };
17882
18193
  }
17883
18194
 
@@ -17989,7 +18300,7 @@
17989
18300
  (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.blur();
17990
18301
  }
17991
18302
  var actualDescendant = (_override_activeDescendant = override.activeDescendant) !== null && _override_activeDescendant !== void 0 ? _override_activeDescendant : activeDescendant;
17992
- if (!actualDescendant && override.query) {
18303
+ if (!actualDescendant && override.query !== undefined) {
17993
18304
  onRefine(override.query);
17994
18305
  }
17995
18306
  if (actualDescendant && items.has(actualDescendant)) {
@@ -18642,6 +18953,9 @@
18642
18953
  return null;
18643
18954
  }
18644
18955
  if (part.type === 'text') {
18956
+ if (part.text.startsWith('<context>') && part.text.endsWith('</context>')) {
18957
+ return null;
18958
+ }
18645
18959
  var markdown = We(part.text, {
18646
18960
  createElement: createElement,
18647
18961
  disableParsingRawHTML: true
@@ -18680,6 +18994,7 @@
18680
18994
  setIndexUiState: setIndexUiState,
18681
18995
  addToolResult: boundAddToolResult,
18682
18996
  applyFilters: tool.applyFilters,
18997
+ sendEvent: tool.sendEvent || function() {},
18683
18998
  onClose: onClose
18684
18999
  }));
18685
19000
  }
@@ -18814,7 +19129,7 @@
18814
19129
  Fragment: Fragment
18815
19130
  });
18816
19131
  return function DefaultMessage(param) {
18817
- var message = param.message, status = param.status, userMessageProps = param.userMessageProps, assistantMessageProps = param.assistantMessageProps, tools = param.tools, indexUiState = param.indexUiState, setIndexUiState = param.setIndexUiState, onReload = param.onReload, onClose = param.onClose, actionsComponent = param.actionsComponent, classNames = param.classNames, messageTranslations = param.messageTranslations, translations = param.translations, suggestionsElement = param.suggestionsElement;
19132
+ var message = param.message, status = param.status, userMessageProps = param.userMessageProps, assistantMessageProps = param.assistantMessageProps, tools = param.tools, indexUiState = param.indexUiState, setIndexUiState = param.setIndexUiState, onReload = param.onReload, onClose = param.onClose, onFeedback = param.onFeedback, feedbackState = param.feedbackState, actionsComponent = param.actionsComponent, classNames = param.classNames, messageTranslations = param.messageTranslations, translations = param.translations, suggestionsElement = param.suggestionsElement;
18818
19133
  var defaultAssistantActions = _to_consumable_array(hasTextContent(message) ? [
18819
19134
  {
18820
19135
  title: translations.copyToClipboardLabel,
@@ -18838,6 +19153,60 @@
18838
19153
  }
18839
19154
  }
18840
19155
  ]);
19156
+ var messageFeedback = feedbackState === null || feedbackState === void 0 ? void 0 : feedbackState[message.id];
19157
+ var hasVoted = messageFeedback !== undefined;
19158
+ if (onFeedback) {
19159
+ var isSending = messageFeedback === 'sending';
19160
+ if (isSending) {
19161
+ defaultAssistantActions.push({
19162
+ title: translations.sendingFeedbackLabel,
19163
+ icon: function icon() {
19164
+ return /*#__PURE__*/ createElement("span", {
19165
+ className: "ais-ChatMessage-feedbackSpinner"
19166
+ }, /*#__PURE__*/ createElement(LoadingSpinnerIcon, {
19167
+ createElement: createElement
19168
+ }));
19169
+ },
19170
+ disabled: true
19171
+ });
19172
+ } else if (hasVoted) {
19173
+ defaultAssistantActions.push({
19174
+ title: translations.feedbackThankYouText,
19175
+ icon: function icon() {
19176
+ return /*#__PURE__*/ createElement("span", {
19177
+ className: "ais-ChatMessage-feedbackCheck"
19178
+ }, /*#__PURE__*/ createElement(CheckIcon, {
19179
+ createElement: createElement
19180
+ }), /*#__PURE__*/ createElement("span", {
19181
+ className: "ais-ChatMessage-feedbackText"
19182
+ }, translations.feedbackThankYouText));
19183
+ },
19184
+ disabled: true
19185
+ });
19186
+ } else {
19187
+ defaultAssistantActions.push({
19188
+ title: translations.thumbsUpLabel,
19189
+ icon: function icon() {
19190
+ return /*#__PURE__*/ createElement(ThumbsUpIcon, {
19191
+ createElement: createElement
19192
+ });
19193
+ },
19194
+ onClick: function onClick(m) {
19195
+ return onFeedback(m.id, 1);
19196
+ }
19197
+ }, {
19198
+ title: translations.thumbsDownLabel,
19199
+ icon: function icon() {
19200
+ return /*#__PURE__*/ createElement(ThumbsDownIcon, {
19201
+ createElement: createElement
19202
+ });
19203
+ },
19204
+ onClick: function onClick(m) {
19205
+ return onFeedback(m.id, 0);
19206
+ }
19207
+ });
19208
+ }
19209
+ }
18841
19210
  var messageProps = message.role === 'user' ? userMessageProps : assistantMessageProps;
18842
19211
  var defaultActions = message.role === 'user' ? undefined : defaultAssistantActions;
18843
19212
  return /*#__PURE__*/ createElement(ChatMessage, _object_spread({
@@ -18875,7 +19244,7 @@
18875
19244
  });
18876
19245
  return function ChatMessages(userProps) {
18877
19246
  var _lastMessage_parts;
18878
- var _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, _userProps_messageClassNames = userProps.messageClassNames, messageClassNames = _userProps_messageClassNames === void 0 ? {} : _userProps_messageClassNames, messageTranslations = userProps.messageTranslations, _userProps_messages = userProps.messages, messages = _userProps_messages === void 0 ? [] : _userProps_messages, MessageComponent = userProps.messageComponent, LoaderComponent = userProps.loaderComponent, ErrorComponent = userProps.errorComponent, ActionsComponent = userProps.actionsComponent, tools = userProps.tools, indexUiState = userProps.indexUiState, setIndexUiState = userProps.setIndexUiState, _userProps_status = userProps.status, status = _userProps_status === void 0 ? 'ready' : _userProps_status, _userProps_hideScrollToBottom = userProps.hideScrollToBottom, hideScrollToBottom = _userProps_hideScrollToBottom === void 0 ? false : _userProps_hideScrollToBottom, onReload = userProps.onReload, onClose = userProps.onClose, userTranslations = userProps.translations, userMessageProps = userProps.userMessageProps, assistantMessageProps = userProps.assistantMessageProps, _userProps_isClearing = userProps.isClearing, isClearing = _userProps_isClearing === void 0 ? false : _userProps_isClearing, onClearTransitionEnd = userProps.onClearTransitionEnd, isScrollAtBottom = userProps.isScrollAtBottom, scrollRef = userProps.scrollRef, contentRef = userProps.contentRef, onScrollToBottom = userProps.onScrollToBottom, suggestionsElement = userProps.suggestionsElement, props = _object_without_properties(userProps, [
19247
+ var _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, _userProps_messageClassNames = userProps.messageClassNames, messageClassNames = _userProps_messageClassNames === void 0 ? {} : _userProps_messageClassNames, messageTranslations = userProps.messageTranslations, _userProps_messages = userProps.messages, messages = _userProps_messages === void 0 ? [] : _userProps_messages, MessageComponent = userProps.messageComponent, LoaderComponent = userProps.loaderComponent, ErrorComponent = userProps.errorComponent, EmptyComponent = userProps.emptyComponent, ActionsComponent = userProps.actionsComponent, tools = userProps.tools, indexUiState = userProps.indexUiState, setIndexUiState = userProps.setIndexUiState, _userProps_status = userProps.status, status = _userProps_status === void 0 ? 'ready' : _userProps_status, _userProps_hideScrollToBottom = userProps.hideScrollToBottom, hideScrollToBottom = _userProps_hideScrollToBottom === void 0 ? false : _userProps_hideScrollToBottom, onReload = userProps.onReload, onClose = userProps.onClose, sendMessage = userProps.sendMessage, setInput = userProps.setInput, userTranslations = userProps.translations, userMessageProps = userProps.userMessageProps, assistantMessageProps = userProps.assistantMessageProps, _userProps_isClearing = userProps.isClearing, isClearing = _userProps_isClearing === void 0 ? false : _userProps_isClearing, onClearTransitionEnd = userProps.onClearTransitionEnd, isScrollAtBottom = userProps.isScrollAtBottom, scrollRef = userProps.scrollRef, contentRef = userProps.contentRef, onScrollToBottom = userProps.onScrollToBottom, suggestionsElement = userProps.suggestionsElement, onFeedback = userProps.onFeedback, feedbackState = userProps.feedbackState, props = _object_without_properties(userProps, [
18879
19248
  "classNames",
18880
19249
  "messageClassNames",
18881
19250
  "messageTranslations",
@@ -18883,6 +19252,7 @@
18883
19252
  "messageComponent",
18884
19253
  "loaderComponent",
18885
19254
  "errorComponent",
19255
+ "emptyComponent",
18886
19256
  "actionsComponent",
18887
19257
  "tools",
18888
19258
  "indexUiState",
@@ -18891,6 +19261,8 @@
18891
19261
  "hideScrollToBottom",
18892
19262
  "onReload",
18893
19263
  "onClose",
19264
+ "sendMessage",
19265
+ "setInput",
18894
19266
  "translations",
18895
19267
  "userMessageProps",
18896
19268
  "assistantMessageProps",
@@ -18900,12 +19272,18 @@
18900
19272
  "scrollRef",
18901
19273
  "contentRef",
18902
19274
  "onScrollToBottom",
18903
- "suggestionsElement"
19275
+ "suggestionsElement",
19276
+ "onFeedback",
19277
+ "feedbackState"
18904
19278
  ]);
18905
19279
  var translations = _object_spread({
18906
19280
  scrollToBottomLabel: 'Scroll to bottom',
18907
19281
  copyToClipboardLabel: 'Copy to clipboard',
18908
- regenerateLabel: 'Regenerate'
19282
+ regenerateLabel: 'Regenerate',
19283
+ thumbsUpLabel: 'Like',
19284
+ thumbsDownLabel: 'Dislike',
19285
+ feedbackThankYouText: 'Thanks for your feedback!',
19286
+ sendingFeedbackLabel: 'Sending feedback...'
18909
19287
  }, userTranslations);
18910
19288
  var cssClasses = {
18911
19289
  root: cx('ais-ChatMessages', classNames.root),
@@ -18920,6 +19298,7 @@
18920
19298
  var isStreamingWithNoContent = status === 'streaming' && !lastPart;
18921
19299
  var isStreamingNonTextContent = status === 'streaming' && lastPart && !isPartText(lastPart);
18922
19300
  var showLoader = isWaitingForResponse || isStreamingWithNoContent || isStreamingNonTextContent;
19301
+ var showEmpty = messages.length === 0 && !showLoader && !isClearing && status !== 'error';
18923
19302
  var DefaultMessage = MessageComponent || DefaultMessageComponent;
18924
19303
  var DefaultLoader = LoaderComponent || DefaultLoaderComponent;
18925
19304
  var DefaultError = ErrorComponent || DefaultErrorComponent;
@@ -18938,7 +19317,12 @@
18938
19317
  onClearTransitionEnd === null || onClearTransitionEnd === void 0 ? void 0 : onClearTransitionEnd();
18939
19318
  }
18940
19319
  }
18941
- }, messages.map(function(message, index) {
19320
+ }, showEmpty && EmptyComponent && /*#__PURE__*/ createElement(EmptyComponent, {
19321
+ sendMessage: sendMessage,
19322
+ setInput: setInput,
19323
+ status: status,
19324
+ onClose: onClose
19325
+ }), messages.map(function(message, index) {
18942
19326
  return /*#__PURE__*/ createElement(DefaultMessage, {
18943
19327
  key: message.id,
18944
19328
  message: message,
@@ -18949,6 +19333,8 @@
18949
19333
  indexUiState: indexUiState,
18950
19334
  setIndexUiState: setIndexUiState,
18951
19335
  onReload: onReload,
19336
+ onFeedback: onFeedback,
19337
+ feedbackState: feedbackState,
18952
19338
  actionsComponent: ActionsComponent,
18953
19339
  onClose: onClose,
18954
19340
  translations: translations,
@@ -18976,6 +19362,52 @@
18976
19362
  };
18977
19363
  }
18978
19364
 
19365
+ function createChatOverlayLayoutComponent(param) {
19366
+ var createElement = param.createElement;
19367
+ return function ChatOverlayLayout(userProps) {
19368
+ var open = userProps.open, maximized = userProps.maximized, headerComponent = userProps.headerComponent, messagesComponent = userProps.messagesComponent, promptComponent = userProps.promptComponent, toggleButtonComponent = userProps.toggleButtonComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className; // Chat state props (destructured to avoid spreading on div)
19369
+ userProps.messages;
19370
+ userProps.status;
19371
+ userProps.isClearing;
19372
+ userProps.clearMessages;
19373
+ userProps.onClearTransitionEnd;
19374
+ userProps.suggestions;
19375
+ userProps.tools;
19376
+ userProps.sendMessage;
19377
+ userProps.regenerate;
19378
+ userProps.stop;
19379
+ userProps.error;
19380
+ var rest = _object_without_properties(userProps, [
19381
+ "open",
19382
+ "maximized",
19383
+ "headerComponent",
19384
+ "messagesComponent",
19385
+ "promptComponent",
19386
+ "toggleButtonComponent",
19387
+ "classNames",
19388
+ "className",
19389
+ "messages",
19390
+ "status",
19391
+ "isClearing",
19392
+ "clearMessages",
19393
+ "onClearTransitionEnd",
19394
+ "suggestions",
19395
+ "tools",
19396
+ "sendMessage",
19397
+ "regenerate",
19398
+ "stop",
19399
+ "error"
19400
+ ]);
19401
+ return /*#__PURE__*/ createElement("div", _object_spread_props(_object_spread({}, rest), {
19402
+ className: cx('ais-Chat', 'ais-ChatOverlayLayout', maximized && 'ais-ChatOverlayLayout--maximized', classNames.root, className)
19403
+ }), /*#__PURE__*/ createElement("div", {
19404
+ className: cx('ais-Chat-container', open && 'ais-Chat-container--open', maximized && 'ais-Chat-container--maximized', classNames.container)
19405
+ }, headerComponent, messagesComponent, promptComponent), /*#__PURE__*/ createElement("div", {
19406
+ className: "ais-Chat-toggleButtonWrapper"
19407
+ }, toggleButtonComponent));
19408
+ };
19409
+ }
19410
+
18979
19411
  function createChatPromptComponent(param) {
18980
19412
  var createElement = param.createElement;
18981
19413
  var Button = createButtonComponent({
@@ -19213,8 +19645,12 @@
19213
19645
  createElement: createElement,
19214
19646
  Fragment: Fragment
19215
19647
  });
19648
+ var OverlayLayout = createChatOverlayLayoutComponent({
19649
+ createElement: createElement,
19650
+ Fragment: Fragment
19651
+ });
19216
19652
  return function Chat(userProps) {
19217
- var open = userProps.open, _userProps_maximized = userProps.maximized, maximized = _userProps_maximized === void 0 ? false : _userProps_maximized, headerProps = userProps.headerProps, toggleButtonProps = userProps.toggleButtonProps, messagesProps = userProps.messagesProps, suggestionsProps = userProps.suggestionsProps, _userProps_promptProps = userProps.promptProps, promptProps = _userProps_promptProps === void 0 ? {} : _userProps_promptProps, HeaderComponent = userProps.headerComponent, PromptComponent = userProps.promptComponent, ToggleButtonComponent = userProps.toggleButtonComponent, SuggestionsComponent = userProps.suggestionsComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, props = _object_without_properties(userProps, [
19653
+ var open = userProps.open, _userProps_maximized = userProps.maximized, maximized = _userProps_maximized === void 0 ? false : _userProps_maximized, headerProps = userProps.headerProps, toggleButtonProps = userProps.toggleButtonProps, messagesProps = userProps.messagesProps, suggestionsProps = userProps.suggestionsProps, _userProps_promptProps = userProps.promptProps, promptProps = _userProps_promptProps === void 0 ? {} : _userProps_promptProps, HeaderComponent = userProps.headerComponent, PromptComponent = userProps.promptComponent, ToggleButtonComponent = userProps.toggleButtonComponent, SuggestionsComponent = userProps.suggestionsComponent, tmp = userProps.layoutComponent, LayoutComponent = tmp === void 0 ? OverlayLayout : tmp, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, sendMessage = userProps.sendMessage, regenerate = userProps.regenerate, stop = userProps.stop, error = userProps.error, props = _object_without_properties(userProps, [
19218
19654
  "open",
19219
19655
  "maximized",
19220
19656
  "headerProps",
@@ -19226,27 +19662,29 @@
19226
19662
  "promptComponent",
19227
19663
  "toggleButtonComponent",
19228
19664
  "suggestionsComponent",
19665
+ "layoutComponent",
19229
19666
  "classNames",
19230
- "className"
19667
+ "className",
19668
+ "sendMessage",
19669
+ "regenerate",
19670
+ "stop",
19671
+ "error"
19231
19672
  ]);
19232
- return /*#__PURE__*/ createElement("div", _object_spread_props(_object_spread({}, props), {
19233
- className: cx('ais-Chat', maximized && 'ais-Chat--maximized', classNames.root, className)
19234
- }), /*#__PURE__*/ createElement("div", {
19235
- className: cx('ais-Chat-container', open && 'ais-Chat-container--open', maximized && 'ais-Chat-container--maximized', classNames.container)
19236
- }, createElement(HeaderComponent || ChatHeader, _object_spread_props(_object_spread({}, headerProps), {
19673
+ var headerComponent = createElement(HeaderComponent || ChatHeader, _object_spread_props(_object_spread({}, headerProps), {
19237
19674
  classNames: classNames.header,
19238
19675
  maximized: maximized
19239
- })), /*#__PURE__*/ createElement(ChatMessages, _object_spread_props(_object_spread({}, messagesProps), {
19676
+ }));
19677
+ var messagesComponent = /*#__PURE__*/ createElement(ChatMessages, _object_spread_props(_object_spread({}, messagesProps), {
19240
19678
  classNames: classNames.messages,
19241
19679
  messageClassNames: classNames.message,
19242
19680
  suggestionsElement: createElement(SuggestionsComponent || ChatPromptSuggestions, _object_spread_props(_object_spread({}, suggestionsProps), {
19243
19681
  classNames: classNames.suggestions
19244
19682
  }))
19245
- })), createElement(PromptComponent || ChatPrompt, _object_spread_props(_object_spread({}, promptProps), {
19683
+ }));
19684
+ var promptComponent = createElement(PromptComponent || ChatPrompt, _object_spread_props(_object_spread({}, promptProps), {
19246
19685
  classNames: classNames.prompt
19247
- }))), /*#__PURE__*/ createElement("div", {
19248
- className: "ais-Chat-toggleButtonWrapper"
19249
- }, createElement(ToggleButtonComponent || ChatToggleButton, _object_spread_props(_object_spread({}, toggleButtonProps), {
19686
+ }));
19687
+ var toggleButtonComponent = createElement(ToggleButtonComponent || ChatToggleButton, _object_spread_props(_object_spread({}, toggleButtonProps), {
19250
19688
  classNames: classNames.toggleButton,
19251
19689
  onClick: function onClick() {
19252
19690
  var _toggleButtonProps_onClick;
@@ -19256,7 +19694,179 @@
19256
19694
  (_promptProps_promptRef = promptProps.promptRef) === null || _promptProps_promptRef === void 0 ? void 0 : (_promptProps_promptRef_current = _promptProps_promptRef.current) === null || _promptProps_promptRef_current === void 0 ? void 0 : _promptProps_promptRef_current.focus();
19257
19695
  }
19258
19696
  }
19259
- }))));
19697
+ }));
19698
+ return /*#__PURE__*/ createElement(LayoutComponent, _object_spread_props(_object_spread({}, props), {
19699
+ open: open,
19700
+ maximized: maximized,
19701
+ headerComponent: headerComponent,
19702
+ messagesComponent: messagesComponent,
19703
+ promptComponent: promptComponent,
19704
+ toggleButtonComponent: toggleButtonComponent,
19705
+ classNames: {
19706
+ root: classNames.root,
19707
+ container: classNames.container
19708
+ },
19709
+ className: className,
19710
+ messages: messagesProps.messages,
19711
+ status: messagesProps.status,
19712
+ tools: messagesProps.tools,
19713
+ isClearing: messagesProps.isClearing,
19714
+ clearMessages: headerProps.onClear,
19715
+ onClearTransitionEnd: messagesProps.onClearTransitionEnd,
19716
+ suggestions: suggestionsProps.suggestions,
19717
+ sendMessage: sendMessage,
19718
+ regenerate: regenerate,
19719
+ stop: stop,
19720
+ error: error
19721
+ }));
19722
+ };
19723
+ }
19724
+
19725
+ function createChatInlineLayoutComponent(param) {
19726
+ var createElement = param.createElement;
19727
+ return function ChatInlineLayout(userProps) {
19728
+ var headerComponent = userProps.headerComponent, messagesComponent = userProps.messagesComponent, promptComponent = userProps.promptComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className;
19729
+ userProps.open;
19730
+ userProps.maximized;
19731
+ userProps.toggleButtonComponent; // Chat state props (destructured to avoid spreading on div)
19732
+ userProps.messages;
19733
+ userProps.status;
19734
+ userProps.isClearing;
19735
+ userProps.clearMessages;
19736
+ userProps.onClearTransitionEnd;
19737
+ userProps.suggestions;
19738
+ userProps.tools;
19739
+ userProps.sendMessage;
19740
+ userProps.regenerate;
19741
+ userProps.stop;
19742
+ userProps.error;
19743
+ var rest = _object_without_properties(userProps, [
19744
+ "headerComponent",
19745
+ "messagesComponent",
19746
+ "promptComponent",
19747
+ "classNames",
19748
+ "className",
19749
+ "open",
19750
+ "maximized",
19751
+ "toggleButtonComponent",
19752
+ "messages",
19753
+ "status",
19754
+ "isClearing",
19755
+ "clearMessages",
19756
+ "onClearTransitionEnd",
19757
+ "suggestions",
19758
+ "tools",
19759
+ "sendMessage",
19760
+ "regenerate",
19761
+ "stop",
19762
+ "error"
19763
+ ]);
19764
+ return /*#__PURE__*/ createElement("div", _object_spread_props(_object_spread({}, rest), {
19765
+ className: cx('ais-Chat', 'ais-ChatInlineLayout', classNames.root, className)
19766
+ }), /*#__PURE__*/ createElement("div", {
19767
+ className: cx('ais-Chat-container', classNames.container)
19768
+ }, headerComponent, messagesComponent, promptComponent));
19769
+ };
19770
+ }
19771
+
19772
+ function createChatSidePanelLayoutComponent(param) {
19773
+ var createElement = param.createElement;
19774
+ var originalMargins = new WeakMap();
19775
+ return function ChatSidePanelLayout(userProps) {
19776
+ var open = userProps.open, maximized = userProps.maximized, headerComponent = userProps.headerComponent, messagesComponent = userProps.messagesComponent, promptComponent = userProps.promptComponent, toggleButtonComponent = userProps.toggleButtonComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, parentElement = userProps.parentElement; // Chat state props (destructured to avoid spreading on div)
19777
+ userProps.messages;
19778
+ userProps.status;
19779
+ userProps.isClearing;
19780
+ userProps.clearMessages;
19781
+ userProps.onClearTransitionEnd;
19782
+ userProps.suggestions;
19783
+ userProps.tools;
19784
+ userProps.sendMessage;
19785
+ userProps.regenerate;
19786
+ userProps.stop;
19787
+ userProps.error;
19788
+ var rest = _object_without_properties(userProps, [
19789
+ "open",
19790
+ "maximized",
19791
+ "headerComponent",
19792
+ "messagesComponent",
19793
+ "promptComponent",
19794
+ "toggleButtonComponent",
19795
+ "classNames",
19796
+ "className",
19797
+ "parentElement",
19798
+ "messages",
19799
+ "status",
19800
+ "isClearing",
19801
+ "clearMessages",
19802
+ "onClearTransitionEnd",
19803
+ "suggestions",
19804
+ "tools",
19805
+ "sendMessage",
19806
+ "regenerate",
19807
+ "stop",
19808
+ "error"
19809
+ ]);
19810
+ var element = typeof document !== 'undefined' ? parentElement ? document.querySelector(parentElement) : document.body : null;
19811
+ if (element) {
19812
+ if (open && !originalMargins.has(element)) {
19813
+ originalMargins.set(element, element.style.marginRight);
19814
+ var chatWidth = getComputedStyle(document.documentElement).getPropertyValue('--ais-chat-width').trim() || '22.5rem';
19815
+ var original = originalMargins.get(element);
19816
+ element.style.marginRight = original ? "calc(".concat(original, " + ").concat(chatWidth, ")") : chatWidth;
19817
+ } else if (!open && originalMargins.has(element)) {
19818
+ var saved = originalMargins.get(element);
19819
+ if (saved) {
19820
+ element.style.marginRight = saved;
19821
+ } else {
19822
+ element.style.removeProperty('margin-right');
19823
+ }
19824
+ originalMargins.delete(element);
19825
+ }
19826
+ }
19827
+ return /*#__PURE__*/ createElement("div", _object_spread_props(_object_spread({}, rest), {
19828
+ className: cx('ais-Chat', 'ais-ChatSidePanelLayout', maximized && 'ais-ChatSidePanelLayout--maximized', classNames.root, className)
19829
+ }), /*#__PURE__*/ createElement("div", {
19830
+ className: cx('ais-Chat-container', open && 'ais-Chat-container--open', maximized && 'ais-Chat-container--maximized', classNames.container)
19831
+ }, headerComponent, messagesComponent, promptComponent), /*#__PURE__*/ createElement("div", {
19832
+ className: "ais-Chat-toggleButtonWrapper"
19833
+ }, toggleButtonComponent));
19834
+ };
19835
+ }
19836
+
19837
+ function createChatGreetingComponent(param) {
19838
+ var createElement = param.createElement;
19839
+ return function ChatGreeting(userProps) {
19840
+ var _ref, _ref1;
19841
+ var userTranslations = userProps.translations, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames;
19842
+ userProps.sendMessage;
19843
+ userProps.status;
19844
+ userProps.onClose;
19845
+ userProps.setInput;
19846
+ var banner = userProps.banner, props = _object_without_properties(userProps, [
19847
+ "translations",
19848
+ "classNames",
19849
+ "sendMessage",
19850
+ "status",
19851
+ "onClose",
19852
+ "setInput",
19853
+ "banner"
19854
+ ]);
19855
+ var translations = {
19856
+ heading: (_ref = userTranslations === null || userTranslations === void 0 ? void 0 : userTranslations.heading) !== null && _ref !== void 0 ? _ref : 'How can I help you today?',
19857
+ subheading: (_ref1 = userTranslations === null || userTranslations === void 0 ? void 0 : userTranslations.subheading) !== null && _ref1 !== void 0 ? _ref1 : "Ask me anything about our products, and I'll do my best to assist you."
19858
+ };
19859
+ return /*#__PURE__*/ createElement("div", _object_spread_props(_object_spread({}, props), {
19860
+ className: cx('ais-ChatGreeting', classNames.root, props.className)
19861
+ }), banner && /*#__PURE__*/ createElement("img", {
19862
+ className: cx('ais-ChatGreeting-banner', classNames.banner),
19863
+ src: banner,
19864
+ alt: ""
19865
+ }), /*#__PURE__*/ createElement("h2", {
19866
+ className: cx('ais-ChatGreeting-heading', classNames.heading)
19867
+ }, translations.heading), /*#__PURE__*/ createElement("p", {
19868
+ className: cx('ais-ChatGreeting-subheading', classNames.subheading)
19869
+ }, translations.subheading));
19260
19870
  };
19261
19871
  }
19262
19872
 
@@ -19654,6 +20264,74 @@
19654
20264
  };
19655
20265
  }
19656
20266
 
20267
+ function createTrendingFacetsComponent(param) {
20268
+ var createElement = param.createElement, Fragment = param.Fragment;
20269
+ function DefaultHeader(param) {
20270
+ var _param_classNames = param.classNames, classNames = _param_classNames === void 0 ? {} : _param_classNames, items = param.items, translations = param.translations;
20271
+ if (!items || items.length < 1) {
20272
+ return null;
20273
+ }
20274
+ if (!translations.title) {
20275
+ return null;
20276
+ }
20277
+ return /*#__PURE__*/ createElement("h3", {
20278
+ className: classNames.title
20279
+ }, translations.title);
20280
+ }
20281
+ function DefaultItem(param) {
20282
+ var item = param.item;
20283
+ return /*#__PURE__*/ createElement(Fragment, null, item.facetValue);
20284
+ }
20285
+ function DefaultEmpty() {
20286
+ return /*#__PURE__*/ createElement(Fragment, null, "No results");
20287
+ }
20288
+ return function TrendingFacets(userProps) {
20289
+ var _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, tmp = userProps.emptyComponent, EmptyComponent = tmp === void 0 ? DefaultEmpty : tmp, tmp1 = userProps.headerComponent, HeaderComponent = tmp1 === void 0 ? DefaultHeader : tmp1, tmp2 = userProps.itemComponent, ItemComponent = tmp2 === void 0 ? DefaultItem : tmp2, items = userProps.items, status = userProps.status, userTranslations = userProps.translations, props = _object_without_properties(userProps, [
20290
+ "classNames",
20291
+ "emptyComponent",
20292
+ "headerComponent",
20293
+ "itemComponent",
20294
+ "items",
20295
+ "status",
20296
+ "translations"
20297
+ ]);
20298
+ var translations = _object_spread({
20299
+ title: 'Trending'
20300
+ }, userTranslations);
20301
+ var cssClasses = {
20302
+ root: cx('ais-TrendingFacets', classNames.root),
20303
+ emptyRoot: cx('ais-TrendingFacets', classNames.root, 'ais-TrendingFacets--empty', classNames.emptyRoot, props.className),
20304
+ title: cx('ais-TrendingFacets-title', classNames.title),
20305
+ container: cx('ais-TrendingFacets-container', classNames.container),
20306
+ list: cx('ais-TrendingFacets-list', classNames.list),
20307
+ item: cx('ais-TrendingFacets-item', classNames.item)
20308
+ };
20309
+ if (items.length === 0 && status === 'idle') {
20310
+ return /*#__PURE__*/ createElement("section", _object_spread_props(_object_spread({}, props), {
20311
+ className: cssClasses.emptyRoot
20312
+ }), /*#__PURE__*/ createElement(EmptyComponent, null));
20313
+ }
20314
+ return /*#__PURE__*/ createElement("section", _object_spread_props(_object_spread({}, props), {
20315
+ className: cssClasses.root
20316
+ }), /*#__PURE__*/ createElement(HeaderComponent, {
20317
+ classNames: cssClasses,
20318
+ items: items,
20319
+ translations: translations
20320
+ }), /*#__PURE__*/ createElement("div", {
20321
+ className: cssClasses.container
20322
+ }, /*#__PURE__*/ createElement("ol", {
20323
+ className: cssClasses.list
20324
+ }, items.map(function(item, index) {
20325
+ return /*#__PURE__*/ createElement("li", {
20326
+ key: "".concat(item.facetName, ":").concat(item.facetValue, ":").concat(index),
20327
+ className: cssClasses.item
20328
+ }, /*#__PURE__*/ createElement(ItemComponent, {
20329
+ item: item
20330
+ }));
20331
+ }))));
20332
+ };
20333
+ }
20334
+
19657
20335
  function createFilterSuggestionsComponent(param) {
19658
20336
  var createElement = param.createElement;
19659
20337
  var Button = createButtonComponent({
@@ -20217,18 +20895,18 @@
20217
20895
  Fragment: React.Fragment
20218
20896
  });
20219
20897
  function AutocompleteSearch(param) {
20220
- var inputProps = param.inputProps, clearQuery = param.clearQuery, onQueryChange = param.onQueryChange, query = param.query, refine = param.refine, isSearchStalled = param.isSearchStalled;
20898
+ var inputProps = param.inputProps, clearQuery = param.clearQuery, onQueryChange = param.onQueryChange, query = param.query, isSearchStalled = param.isSearchStalled, onAiModeClick = param.onAiModeClick;
20221
20899
  return /*#__PURE__*/ React.createElement(AutocompleteSearchComponent, {
20222
20900
  inputProps: _object_spread_props(_object_spread({}, inputProps), {
20223
20901
  onChange: function onChange(event) {
20224
20902
  var value = event.currentTarget.value;
20225
- refine(value);
20226
20903
  onQueryChange === null || onQueryChange === void 0 ? void 0 : onQueryChange(value);
20227
20904
  }
20228
20905
  }),
20229
20906
  onClear: clearQuery,
20230
20907
  query: query,
20231
- isSearchStalled: isSearchStalled
20908
+ isSearchStalled: isSearchStalled,
20909
+ onAiModeClick: onAiModeClick
20232
20910
  });
20233
20911
  }
20234
20912
 
@@ -20614,7 +21292,7 @@
20614
21292
  }))));
20615
21293
  }
20616
21294
  function InnerAutocomplete(_0) {
20617
- 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, _0_detachedMediaQuery = _0.detachedMediaQuery, detachedMediaQuery = _0_detachedMediaQuery === void 0 ? DEFAULT_DETACHED_MEDIA_QUERY : _0_detachedMediaQuery, translations = _0.translations, classNames = _0.classNames, props = _object_without_properties(_0, [
21295
+ 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, _0_detachedMediaQuery = _0.detachedMediaQuery, detachedMediaQuery = _0_detachedMediaQuery === void 0 ? DEFAULT_DETACHED_MEDIA_QUERY : _0_detachedMediaQuery, translations = _0.translations, classNames = _0.classNames, aiMode = _0.aiMode, props = _object_without_properties(_0, [
20618
21296
  "indicesConfig",
20619
21297
  "refineSearchBox",
20620
21298
  "isSearchStalled",
@@ -20633,13 +21311,18 @@
20633
21311
  "autoFocus",
20634
21312
  "detachedMediaQuery",
20635
21313
  "translations",
20636
- "classNames"
21314
+ "classNames",
21315
+ "aiMode"
20637
21316
  ]);
20638
- var _ref;
21317
+ var _indexUiState_query, _ref;
20639
21318
  var _showPromptSuggestions_searchParameters;
20640
21319
  var _useAutocomplete = useAutocomplete({
20641
- transformItems: transformItems
21320
+ transformItems: transformItems,
21321
+ future: {
21322
+ undefinedEmptyQuery: true
21323
+ }
20642
21324
  }), indices = _useAutocomplete.indices, refineAutocomplete = _useAutocomplete.refine, currentRefinement = _useAutocomplete.currentRefinement;
21325
+ var resolvedQuery = currentRefinement !== undefined ? currentRefinement : (_indexUiState_query = indexUiState.query) !== null && _indexUiState_query !== void 0 ? _indexUiState_query : '';
20643
21326
  var _useDetachedMode = useDetachedMode(detachedMediaQuery), isDetached = _useDetachedMode.isDetached, isModalDetached = _useDetachedMode.isModalDetached, isModalOpen = _useDetachedMode.isModalOpen, setIsModalOpen = _useDetachedMode.setIsModalOpen;
20644
21327
  var previousIsDetachedRef = React.useRef(isDetached);
20645
21328
  var _useStorage = useStorage({
@@ -20847,9 +21530,20 @@
20847
21530
  onQueryChange: function onQueryChange(query) {
20848
21531
  refineAutocomplete(query);
20849
21532
  },
20850
- query: currentRefinement || indexUiState.query || '',
20851
- refine: refineSearchBox,
20852
- isSearchStalled: isSearchStalled
21533
+ query: resolvedQuery,
21534
+ isSearchStalled: isSearchStalled,
21535
+ onAiModeClick: aiMode ? function() {
21536
+ if (chatRenderState) {
21537
+ var _chatRenderState_setOpen;
21538
+ (_chatRenderState_setOpen = chatRenderState.setOpen) === null || _chatRenderState_setOpen === void 0 ? void 0 : _chatRenderState_setOpen.call(chatRenderState, true);
21539
+ if (resolvedQuery.trim()) {
21540
+ var _chatRenderState_sendMessage;
21541
+ (_chatRenderState_sendMessage = chatRenderState.sendMessage) === null || _chatRenderState_sendMessage === void 0 ? void 0 : _chatRenderState_sendMessage.call(chatRenderState, {
21542
+ text: resolvedQuery
21543
+ });
21544
+ }
21545
+ }
21546
+ } : undefined
20853
21547
  });
20854
21548
  var panelContent = /*#__PURE__*/ React.createElement(AutocompletePanel, getPanelProps(), PanelComponent ? /*#__PURE__*/ React.createElement(PanelComponent, {
20855
21549
  elements: elements,
@@ -20868,7 +21562,7 @@
20868
21562
  rootRef: rootRef,
20869
21563
  classNames: classNames
20870
21564
  }), /*#__PURE__*/ React.createElement(AutocompleteDetachedSearchButton, {
20871
- query: currentRefinement || indexUiState.query || '',
21565
+ query: resolvedQuery,
20872
21566
  placeholder: placeholder,
20873
21567
  classNames: classNames,
20874
21568
  onClick: function onClick() {
@@ -21032,15 +21726,37 @@
21032
21726
  return /*#__PURE__*/ React.createElement(CarouselUiComponent, _object_spread({}, carouselRefs, props));
21033
21727
  }
21034
21728
 
21729
+ var ChatOverlayLayout = createChatOverlayLayoutComponent({
21730
+ createElement: React.createElement,
21731
+ Fragment: React.Fragment
21732
+ });
21733
+
21734
+ var ChatInlineLayout = createChatInlineLayoutComponent({
21735
+ createElement: React.createElement,
21736
+ Fragment: React.Fragment
21737
+ });
21738
+
21739
+ var ChatSidePanelLayout = createChatSidePanelLayoutComponent({
21740
+ createElement: React.createElement,
21741
+ Fragment: React.Fragment
21742
+ });
21743
+
21744
+ var ChatGreeting = createChatGreetingComponent({
21745
+ createElement: React.createElement
21746
+ });
21747
+
21035
21748
  function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
21036
21749
  var Button = createButtonComponent({
21037
21750
  createElement: React.createElement
21038
21751
  });
21039
21752
  function SearchLayoutComponent(param) {
21040
- var message = param.message, applyFilters = param.applyFilters, onClose = param.onClose;
21753
+ var message = param.message, applyFilters = param.applyFilters, onClose = param.onClose, sendEvent = param.sendEvent;
21754
+ var _ref;
21755
+ var _output_hits;
21041
21756
  var input = message === null || message === void 0 ? void 0 : message.input;
21042
21757
  var output = message === null || message === void 0 ? void 0 : message.output;
21043
- var items = (output === null || output === void 0 ? void 0 : output.hits) || [];
21758
+ 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);
21759
+ var items = addQueryID(hitsWithAbsolutePosition, output === null || output === void 0 ? void 0 : output.queryID);
21044
21760
  var MemoedHeaderComponent = React.useMemo(function() {
21045
21761
  return function(props) {
21046
21762
  return /*#__PURE__*/ React.createElement(HeaderComponent, _object_spread({
@@ -21061,7 +21777,7 @@
21061
21777
  return /*#__PURE__*/ React.createElement(Carousel, {
21062
21778
  items: items,
21063
21779
  itemComponent: itemComponent,
21064
- sendEvent: function sendEvent() {},
21780
+ sendEvent: sendEvent,
21065
21781
  showNavigation: false,
21066
21782
  headerComponent: MemoedHeaderComponent
21067
21783
  });
@@ -21129,14 +21845,18 @@
21129
21845
  var _obj;
21130
21846
  return _obj = {}, _define_property(_obj, SearchIndexToolType$1, createCarouselTool(true, itemComponent, getSearchPageURL)), _define_property(_obj, RecommendToolType, createCarouselTool(false, itemComponent, getSearchPageURL)), _define_property(_obj, MemorizeToolType, {}), _define_property(_obj, MemorySearchToolType, {}), _define_property(_obj, PonderToolType, {}), _obj;
21131
21847
  }
21132
- function Chat(_0) {
21133
- var userTools = _0.tools, toggleButtonProps = _0.toggleButtonProps, headerProps = _0.headerProps, messagesProps = _0.messagesProps, promptProps = _0.promptProps, itemComponent = _0.itemComponent, toggleButtonComponent = _0.toggleButtonComponent, toggleButtonIconComponent = _0.toggleButtonIconComponent, headerComponent = _0.headerComponent, headerTitleIconComponent = _0.headerTitleIconComponent, headerCloseIconComponent = _0.headerCloseIconComponent, headerMinimizeIconComponent = _0.headerMinimizeIconComponent, headerMaximizeIconComponent = _0.headerMaximizeIconComponent, messagesLoaderComponent = _0.messagesLoaderComponent, messagesErrorComponent = _0.messagesErrorComponent, promptComponent = _0.promptComponent, promptHeaderComponent = _0.promptHeaderComponent, promptFooterComponent = _0.promptFooterComponent, assistantMessageLeadingComponent = _0.assistantMessageLeadingComponent, assistantMessageFooterComponent = _0.assistantMessageFooterComponent, userMessageLeadingComponent = _0.userMessageLeadingComponent, userMessageFooterComponent = _0.userMessageFooterComponent, actionsComponent = _0.actionsComponent, suggestionsComponent = _0.suggestionsComponent, classNames = _0.classNames, _0_translations = _0.translations, translations = _0_translations === void 0 ? {} : _0_translations, title = _0.title, getSearchPageURL = _0.getSearchPageURL, props = _object_without_properties(_0, [
21848
+ function ChatInner(_0, _1) {
21849
+ var _ref = [
21850
+ _0,
21851
+ _1
21852
+ ], _ref1 = _to_array(_ref), _ref2 = _ref1[0], _rest = _ref1.slice(1), userTools = _ref2.tools, toggleButtonProps = _ref2.toggleButtonProps, headerProps = _ref2.headerProps, messagesProps = _ref2.messagesProps, promptProps = _ref2.promptProps, itemComponent = _ref2.itemComponent, layoutComponent = _ref2.layoutComponent, toggleButtonComponent = _ref2.toggleButtonComponent, toggleButtonIconComponent = _ref2.toggleButtonIconComponent, headerComponent = _ref2.headerComponent, headerTitleIconComponent = _ref2.headerTitleIconComponent, headerCloseIconComponent = _ref2.headerCloseIconComponent, headerMinimizeIconComponent = _ref2.headerMinimizeIconComponent, headerMaximizeIconComponent = _ref2.headerMaximizeIconComponent, messagesLoaderComponent = _ref2.messagesLoaderComponent, messagesErrorComponent = _ref2.messagesErrorComponent, promptComponent = _ref2.promptComponent, promptHeaderComponent = _ref2.promptHeaderComponent, promptFooterComponent = _ref2.promptFooterComponent, assistantMessageLeadingComponent = _ref2.assistantMessageLeadingComponent, assistantMessageFooterComponent = _ref2.assistantMessageFooterComponent, userMessageLeadingComponent = _ref2.userMessageLeadingComponent, userMessageFooterComponent = _ref2.userMessageFooterComponent, emptyComponent = _ref2.emptyComponent, actionsComponent = _ref2.actionsComponent, suggestionsComponent = _ref2.suggestionsComponent, classNames = _ref2.classNames, _ref_translations = _ref2.translations, translations = _ref_translations === void 0 ? {} : _ref_translations, title = _ref2.title, getSearchPageURL = _ref2.getSearchPageURL, props = _object_without_properties(_ref2, [
21134
21853
  "tools",
21135
21854
  "toggleButtonProps",
21136
21855
  "headerProps",
21137
21856
  "messagesProps",
21138
21857
  "promptProps",
21139
21858
  "itemComponent",
21859
+ "layoutComponent",
21140
21860
  "toggleButtonComponent",
21141
21861
  "toggleButtonIconComponent",
21142
21862
  "headerComponent",
@@ -21153,13 +21873,14 @@
21153
21873
  "assistantMessageFooterComponent",
21154
21874
  "userMessageLeadingComponent",
21155
21875
  "userMessageFooterComponent",
21876
+ "emptyComponent",
21156
21877
  "actionsComponent",
21157
21878
  "suggestionsComponent",
21158
21879
  "classNames",
21159
21880
  "translations",
21160
21881
  "title",
21161
21882
  "getSearchPageURL"
21162
- ]);
21883
+ ]), _rest1 = _sliced_to_array(_rest, 1), ref = _rest1[0];
21163
21884
  var promptTranslations = translations.prompt, headerTranslations = translations.header, messageTranslations = translations.message, messagesTranslations = translations.messages;
21164
21885
  var _useInstantSearch = useInstantSearch(), indexUiState = _useInstantSearch.indexUiState, setIndexUiState = _useInstantSearch.setIndexUiState;
21165
21886
  var _useState = _sliced_to_array(React.useState(false), 2), maximized = _useState[0], setMaximized = _useState[1];
@@ -21179,7 +21900,16 @@
21179
21900
  var chatState = useChat(_object_spread_props(_object_spread({}, props), {
21180
21901
  tools: tools
21181
21902
  }));
21182
- var messages = chatState.messages, sendMessage = chatState.sendMessage, status = chatState.status, regenerate = chatState.regenerate, stop = chatState.stop, error = chatState.error, input = chatState.input, setInput = chatState.setInput, open = chatState.open, setOpen = chatState.setOpen, isClearing = chatState.isClearing, clearMessages = chatState.clearMessages, onClearTransitionEnd = chatState.onClearTransitionEnd, toolsFromConnector = chatState.tools, suggestions = chatState.suggestions;
21903
+ var messages = chatState.messages, sendMessage = chatState.sendMessage, status = chatState.status, regenerate = chatState.regenerate, stop = chatState.stop, error = chatState.error, input = chatState.input, setInput = chatState.setInput, open = chatState.open, setOpen = chatState.setOpen, isClearing = chatState.isClearing, clearMessages = chatState.clearMessages, onClearTransitionEnd = chatState.onClearTransitionEnd, toolsFromConnector = chatState.tools, suggestions = chatState.suggestions, onFeedback = chatState.sendChatMessageFeedback, feedbackState = chatState.feedbackState;
21904
+ React.useImperativeHandle(ref, function() {
21905
+ return {
21906
+ setOpen: setOpen,
21907
+ sendMessage: function sendMessage1(params) {
21908
+ return sendMessage(params);
21909
+ },
21910
+ setInput: setInput
21911
+ };
21912
+ });
21183
21913
  var wasOpenRef = React.useRef(false);
21184
21914
  React.useEffect(function() {
21185
21915
  var shouldFocusPrompt = !wasOpenRef.current && open;
@@ -21200,6 +21930,11 @@
21200
21930
  title: title,
21201
21931
  open: open,
21202
21932
  maximized: maximized,
21933
+ sendMessage: sendMessage,
21934
+ regenerate: regenerate,
21935
+ stop: stop,
21936
+ error: error,
21937
+ layoutComponent: layoutComponent,
21203
21938
  headerComponent: headerComponent,
21204
21939
  promptComponent: promptComponent,
21205
21940
  toggleButtonComponent: toggleButtonComponent,
@@ -21237,6 +21972,10 @@
21237
21972
  onClose: function onClose() {
21238
21973
  return setOpen(false);
21239
21974
  },
21975
+ sendMessage: sendMessage,
21976
+ setInput: setInput,
21977
+ onFeedback: onFeedback,
21978
+ feedbackState: feedbackState,
21240
21979
  messages: messages,
21241
21980
  tools: toolsFromConnector,
21242
21981
  indexUiState: indexUiState,
@@ -21249,6 +21988,7 @@
21249
21988
  onScrollToBottom: scrollToBottom,
21250
21989
  loaderComponent: messagesLoaderComponent,
21251
21990
  errorComponent: messagesErrorComponent,
21991
+ emptyComponent: emptyComponent,
21252
21992
  actionsComponent: actionsComponent,
21253
21993
  assistantMessageProps: _object_spread({
21254
21994
  leadingComponent: assistantMessageLeadingComponent,
@@ -21292,6 +22032,7 @@
21292
22032
  classNames: classNames
21293
22033
  });
21294
22034
  }
22035
+ var Chat = /*#__PURE__*/ React.forwardRef(ChatInner);
21295
22036
 
21296
22037
  function ClearRefinements$1(_0) {
21297
22038
  var _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, _0_disabled = _0.disabled, disabled = _0_disabled === void 0 ? false : _0_disabled, _0_onClick = _0.onClick, onClick = _0_onClick === void 0 ? function() {} : _0_onClick, translations = _0.translations, props = _object_without_properties(_0, [
@@ -22370,8 +23111,30 @@
22370
23111
  repeatCount: "indefinite"
22371
23112
  })))));
22372
23113
  }
23114
+ function DefaultAiModeIcon(param) {
23115
+ var classNames = param.classNames;
23116
+ return /*#__PURE__*/ React.createElement("svg", {
23117
+ className: cx('ais-AiModeButton-icon', classNames.aiModeIcon),
23118
+ xmlns: "http://www.w3.org/2000/svg",
23119
+ fill: "none",
23120
+ viewBox: "0 0 20 20",
23121
+ width: "16",
23122
+ height: "16",
23123
+ "aria-hidden": "true"
23124
+ }, /*#__PURE__*/ React.createElement("path", {
23125
+ fill: "currentColor",
23126
+ fillRule: "evenodd",
23127
+ d: "M10 1.875c.27 0 .51.173.594.43l1.593 4.844a1.043 1.043 0 0 0 .664.664l4.844 1.593a.625.625 0 0 1 0 1.188l-4.844 1.593a1.043 1.043 0 0 0-.664.664l-1.593 4.844a.625.625 0 0 1-1.188 0l-1.593-4.844a1.042 1.042 0 0 0-.664-.664l-4.844-1.593a.625.625 0 0 1 0-1.188l4.844-1.593a1.042 1.042 0 0 0 .664-.664l1.593-4.844a.625.625 0 0 1 .594-.43ZM9 7.539A2.292 2.292 0 0 1 7.54 9L4.5 10l3.04 1A2.292 2.292 0 0 1 9 12.46l1 3.04 1-3.04A2.293 2.293 0 0 1 12.46 11l3.04-1-3.04-1A2.292 2.292 0 0 1 11 7.54L10 4.5 9 7.54ZM4.167 1.875c.345 0 .625.28.625.625v3.333a.625.625 0 0 1-1.25 0V2.5c0-.345.28-.625.625-.625ZM15.833 13.542c.345 0 .625.28.625.625V17.5a.625.625 0 1 1-1.25 0v-3.333c0-.345.28-.625.625-.625Z",
23128
+ clipRule: "evenodd"
23129
+ }), /*#__PURE__*/ React.createElement("path", {
23130
+ fill: "currentColor",
23131
+ fillRule: "evenodd",
23132
+ d: "M1.875 4.167c0-.346.28-.625.625-.625h3.333a.625.625 0 1 1 0 1.25H2.5a.625.625 0 0 1-.625-.625ZM13.542 15.833c0-.345.28-.625.625-.625H17.5a.625.625 0 0 1 0 1.25h-3.333a.625.625 0 0 1-.625-.625Z",
23133
+ clipRule: "evenodd"
23134
+ }));
23135
+ }
22373
23136
  function SearchBox$1(_0) {
22374
- var formRef = _0.formRef, inputRef = _0.inputRef, inputProps = _0.inputProps, isSearchStalled = _0.isSearchStalled, onChange = _0.onChange, onReset = _0.onReset, onSubmit = _0.onSubmit, _0_placeholder = _0.placeholder, placeholder = _0_placeholder === void 0 ? '' : _0_placeholder, value = _0.value, autoFocus = _0.autoFocus, tmp = _0.resetIconComponent, ResetIcon = tmp === void 0 ? DefaultResetIcon : tmp, tmp1 = _0.submitIconComponent, SubmitIcon = tmp1 === void 0 ? DefaultSubmitIcon : tmp1, tmp2 = _0.loadingIconComponent, LoadingIcon = tmp2 === void 0 ? DefaultLoadingIcon : tmp2, _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, translations = _0.translations, props = _object_without_properties(_0, [
23137
+ var formRef = _0.formRef, inputRef = _0.inputRef, inputProps = _0.inputProps, isSearchStalled = _0.isSearchStalled, onChange = _0.onChange, onReset = _0.onReset, onSubmit = _0.onSubmit, _0_placeholder = _0.placeholder, placeholder = _0_placeholder === void 0 ? '' : _0_placeholder, value = _0.value, autoFocus = _0.autoFocus, tmp = _0.resetIconComponent, ResetIcon = tmp === void 0 ? DefaultResetIcon : tmp, tmp1 = _0.submitIconComponent, SubmitIcon = tmp1 === void 0 ? DefaultSubmitIcon : tmp1, tmp2 = _0.loadingIconComponent, LoadingIcon = tmp2 === void 0 ? DefaultLoadingIcon : tmp2, tmp3 = _0.aiModeIconComponent, AiModeIcon = tmp3 === void 0 ? DefaultAiModeIcon : tmp3, onAiModeClick = _0.onAiModeClick, _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, translations = _0.translations, props = _object_without_properties(_0, [
22375
23138
  "formRef",
22376
23139
  "inputRef",
22377
23140
  "inputProps",
@@ -22385,6 +23148,8 @@
22385
23148
  "resetIconComponent",
22386
23149
  "submitIconComponent",
22387
23150
  "loadingIconComponent",
23151
+ "aiModeIconComponent",
23152
+ "onAiModeClick",
22388
23153
  "classNames",
22389
23154
  "translations"
22390
23155
  ]);
@@ -22444,7 +23209,19 @@
22444
23209
  hidden: value.length === 0 || isSearchStalled
22445
23210
  }, /*#__PURE__*/ React.createElement(ResetIcon, {
22446
23211
  classNames: classNames
22447
- })), /*#__PURE__*/ React.createElement("span", {
23212
+ })), onAiModeClick && /*#__PURE__*/ React.createElement("button", {
23213
+ className: cx('ais-AiModeButton', classNames.aiModeButton),
23214
+ type: "button",
23215
+ title: translations.aiModeButtonTitle || 'AI Mode',
23216
+ onClick: function onClick(e) {
23217
+ e.preventDefault();
23218
+ onAiModeClick();
23219
+ }
23220
+ }, /*#__PURE__*/ React.createElement(AiModeIcon, {
23221
+ classNames: classNames
23222
+ }), /*#__PURE__*/ React.createElement("span", {
23223
+ className: "ais-AiModeButton-label"
23224
+ }, translations.aiModeButtonTitle || 'AI Mode')), /*#__PURE__*/ React.createElement("span", {
22448
23225
  className: cx('ais-SearchBox-loadingIndicator', classNames.loadingIndicator),
22449
23226
  hidden: !isSearchStalled
22450
23227
  }, /*#__PURE__*/ React.createElement(LoadingIcon, {
@@ -22608,10 +23385,11 @@
22608
23385
  }
22609
23386
 
22610
23387
  function SearchBox(_0) {
22611
- var queryHook = _0.queryHook, _0_searchAsYouType = _0.searchAsYouType, searchAsYouType = _0_searchAsYouType === void 0 ? true : _0_searchAsYouType, _0_ignoreCompositionEvents = _0.ignoreCompositionEvents, ignoreCompositionEvents = _0_ignoreCompositionEvents === void 0 ? false : _0_ignoreCompositionEvents, translations = _0.translations, props = _object_without_properties(_0, [
23388
+ var queryHook = _0.queryHook, _0_searchAsYouType = _0.searchAsYouType, searchAsYouType = _0_searchAsYouType === void 0 ? true : _0_searchAsYouType, _0_ignoreCompositionEvents = _0.ignoreCompositionEvents, ignoreCompositionEvents = _0_ignoreCompositionEvents === void 0 ? false : _0_ignoreCompositionEvents, aiMode = _0.aiMode, translations = _0.translations, props = _object_without_properties(_0, [
22612
23389
  "queryHook",
22613
23390
  "searchAsYouType",
22614
23391
  "ignoreCompositionEvents",
23392
+ "aiMode",
22615
23393
  "translations"
22616
23394
  ]);
22617
23395
  var _useSearchBox = useSearchBox({
@@ -22619,6 +23397,7 @@
22619
23397
  }, {
22620
23398
  $$widgetType: 'ais.searchBox'
22621
23399
  }), query = _useSearchBox.query, refine = _useSearchBox.refine, isSearchStalled = _useSearchBox.isSearchStalled;
23400
+ var indexRenderState = useInstantSearch().indexRenderState;
22622
23401
  var _useState = _sliced_to_array(React.useState(query), 2), inputValue = _useState[0], setInputValue = _useState[1];
22623
23402
  var inputRef = React.useRef(null);
22624
23403
  function setQuery(newQuery) {
@@ -22658,10 +23437,24 @@
22658
23437
  onChange: onChange,
22659
23438
  onReset: onReset,
22660
23439
  onSubmit: onSubmit,
23440
+ onAiModeClick: aiMode ? function() {
23441
+ var chatRenderState = indexRenderState.chat;
23442
+ if (chatRenderState) {
23443
+ var _chatRenderState_setOpen;
23444
+ (_chatRenderState_setOpen = chatRenderState.setOpen) === null || _chatRenderState_setOpen === void 0 ? void 0 : _chatRenderState_setOpen.call(chatRenderState, true);
23445
+ if (inputValue.trim()) {
23446
+ var _chatRenderState_sendMessage;
23447
+ (_chatRenderState_sendMessage = chatRenderState.sendMessage) === null || _chatRenderState_sendMessage === void 0 ? void 0 : _chatRenderState_sendMessage.call(chatRenderState, {
23448
+ text: inputValue
23449
+ });
23450
+ }
23451
+ }
23452
+ } : undefined,
22661
23453
  value: inputValue,
22662
23454
  translations: _object_spread({
22663
23455
  submitButtonTitle: 'Submit the search query',
22664
- resetButtonTitle: 'Clear the search query'
23456
+ resetButtonTitle: 'Clear the search query',
23457
+ aiModeButtonTitle: 'AI Mode'
22665
23458
  }, translations)
22666
23459
  };
22667
23460
  return /*#__PURE__*/ React.createElement(SearchBox$1, _object_spread({}, props, uiProps));
@@ -22931,6 +23724,45 @@
22931
23724
  return /*#__PURE__*/ React.createElement(TrendingItemsUiComponent, _object_spread({}, props, uiProps));
22932
23725
  }
22933
23726
 
23727
+ var TrendingFacetsUiComponent = createTrendingFacetsComponent({
23728
+ createElement: React.createElement,
23729
+ Fragment: React.Fragment
23730
+ });
23731
+ function TrendingFacets(_0) {
23732
+ var facetName = _0.facetName, limit = _0.limit, threshold = _0.threshold, fallbackParameters = _0.fallbackParameters, queryParameters = _0.queryParameters, escapeHTML = _0.escapeHTML, transformItems = _0.transformItems, itemComponent = _0.itemComponent, headerComponent = _0.headerComponent, emptyComponent = _0.emptyComponent, props = _object_without_properties(_0, [
23733
+ "facetName",
23734
+ "limit",
23735
+ "threshold",
23736
+ "fallbackParameters",
23737
+ "queryParameters",
23738
+ "escapeHTML",
23739
+ "transformItems",
23740
+ "itemComponent",
23741
+ "headerComponent",
23742
+ "emptyComponent"
23743
+ ]);
23744
+ var status = useInstantSearch().status;
23745
+ var items = useTrendingFacets({
23746
+ facetName: facetName,
23747
+ limit: limit,
23748
+ threshold: threshold,
23749
+ fallbackParameters: fallbackParameters,
23750
+ queryParameters: queryParameters,
23751
+ escapeHTML: escapeHTML,
23752
+ transformItems: transformItems
23753
+ }, {
23754
+ $$widgetType: 'ais.trendingFacets'
23755
+ }).items;
23756
+ var uiProps = {
23757
+ items: items,
23758
+ itemComponent: itemComponent,
23759
+ headerComponent: headerComponent,
23760
+ emptyComponent: emptyComponent,
23761
+ status: status
23762
+ };
23763
+ return /*#__PURE__*/ React.createElement(TrendingFacetsUiComponent, _object_spread({}, props, uiProps));
23764
+ }
23765
+
22934
23766
  var FilterSuggestionsUiComponent = createFilterSuggestionsComponent({
22935
23767
  createElement: React.createElement,
22936
23768
  Fragment: React.Fragment
@@ -22974,6 +23806,10 @@
22974
23806
  exports.Breadcrumb = Breadcrumb;
22975
23807
  exports.Carousel = Carousel;
22976
23808
  exports.Chat = Chat;
23809
+ exports.ChatGreeting = ChatGreeting;
23810
+ exports.ChatInlineLayout = ChatInlineLayout;
23811
+ exports.ChatOverlayLayout = ChatOverlayLayout;
23812
+ exports.ChatSidePanelLayout = ChatSidePanelLayout;
22977
23813
  exports.ClearRefinements = ClearRefinements;
22978
23814
  exports.Configure = Configure;
22979
23815
  exports.CurrentRefinements = CurrentRefinements;
@@ -23010,6 +23846,7 @@
23010
23846
  exports.SortBy = SortBy;
23011
23847
  exports.Stats = Stats;
23012
23848
  exports.ToggleRefinement = ToggleRefinement;
23849
+ exports.TrendingFacets = TrendingFacets;
23013
23850
  exports.TrendingItems = TrendingItems;
23014
23851
  exports.createDefaultTools = createDefaultTools;
23015
23852
  exports.getServerState = getServerState;
@@ -23045,6 +23882,7 @@
23045
23882
  exports.useStats = useStats;
23046
23883
  exports.useStickToBottom = useStickToBottom;
23047
23884
  exports.useToggleRefinement = useToggleRefinement;
23885
+ exports.useTrendingFacets = useTrendingFacets;
23048
23886
  exports.useTrendingItems = useTrendingItems;
23049
23887
  exports.version = version$2;
23050
23888
  exports.wrapPromiseWithState = wrapPromiseWithState;