react-instantsearch 7.23.1 → 7.24.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.
@@ -7,7 +7,7 @@
7
7
 
8
8
  var React__default = 'default' in React ? React['default'] : React;
9
9
 
10
- var version = '7.23.1';
10
+ var version = '7.24.0';
11
11
 
12
12
  // Copyright Joyent, Inc. and other Node contributors.
13
13
  //
@@ -4651,7 +4651,7 @@
4651
4651
 
4652
4652
  var sortAndMergeRecommendations_1 = sortAndMergeRecommendations;
4653
4653
 
4654
- var version$1 = '3.27.0';
4654
+ var version$1 = '3.27.1';
4655
4655
 
4656
4656
  var escapeFacetValue$3 = escapeFacetValue_1.escapeFacetValue;
4657
4657
 
@@ -10743,6 +10743,12 @@
10743
10743
  helper.searchWithoutTriggeringOnStateChange = function () {
10744
10744
  return mainHelper.search();
10745
10745
  };
10746
+
10747
+ // We use the same pattern for the `searchForFacetValues`.
10748
+ helper.searchForFacetValues = function (facetName, facetValue, maxFacetHits, userState) {
10749
+ var state = mergeSearchParameters.apply(void 0, [mainHelper.state].concat(_toConsumableArray$1(resolveSearchParameters(_this3)))).setQueryParameters(userState);
10750
+ return mainHelper.searchForFacetValues(facetName, facetValue, maxFacetHits, state);
10751
+ };
10746
10752
  var isolatedHelper = indexName ? helper : algoliasearchHelper_1({}, '__empty_index__', {});
10747
10753
  var derivingHelper = isolated ? isolatedHelper : nearestIsolatedHelper(parent, mainHelper);
10748
10754
  derivedHelper = derivingHelper.derive(function () {
@@ -13355,7 +13361,7 @@
13355
13361
  };
13356
13362
  }
13357
13363
 
13358
- var version$3 = '4.87.1';
13364
+ var version$3 = '4.88.0';
13359
13365
 
13360
13366
  function _typeof$q(o) {
13361
13367
  "@babel/helpers - typeof";
@@ -16744,6 +16750,12 @@
16744
16750
  var MemorySearchToolType = 'algolia_memory_search';
16745
16751
  var PonderToolType = 'algolia_ponder';
16746
16752
 
16753
+ function flat$1(arr) {
16754
+ return arr.reduce(function (acc, array) {
16755
+ return acc.concat(array);
16756
+ }, []);
16757
+ }
16758
+
16747
16759
  function _typeof$z(o) {
16748
16760
  "@babel/helpers - typeof";
16749
16761
 
@@ -16798,12 +16810,56 @@
16798
16810
  }
16799
16811
  return ("string" === r ? String : Number)(t);
16800
16812
  }
16813
+ function _toConsumableArray$5(r) {
16814
+ return _arrayWithoutHoles$5(r) || _iterableToArray$5(r) || _unsupportedIterableToArray$e(r) || _nonIterableSpread$5();
16815
+ }
16816
+ function _nonIterableSpread$5() {
16817
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
16818
+ }
16819
+ function _iterableToArray$5(r) {
16820
+ if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
16821
+ }
16822
+ function _arrayWithoutHoles$5(r) {
16823
+ if (Array.isArray(r)) return _arrayLikeToArray$e(r);
16824
+ }
16825
+ function _objectWithoutProperties$a(e, t) {
16826
+ if (null == e) return {};
16827
+ var o,
16828
+ r,
16829
+ i = _objectWithoutPropertiesLoose$b(e, t);
16830
+ if (Object.getOwnPropertySymbols) {
16831
+ var n = Object.getOwnPropertySymbols(e);
16832
+ for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
16833
+ }
16834
+ return i;
16835
+ }
16836
+ function _objectWithoutPropertiesLoose$b(r, e) {
16837
+ if (null == r) return {};
16838
+ var t = {};
16839
+ for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
16840
+ if (-1 !== e.indexOf(n)) continue;
16841
+ t[n] = r[n];
16842
+ }
16843
+ return t;
16844
+ }
16801
16845
  function _slicedToArray$a(r, e) {
16802
16846
  return _arrayWithHoles$a(r) || _iterableToArrayLimit$a(r, e) || _unsupportedIterableToArray$e(r, e) || _nonIterableRest$a();
16803
16847
  }
16804
16848
  function _nonIterableRest$a() {
16805
16849
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
16806
16850
  }
16851
+ function _unsupportedIterableToArray$e(r, a) {
16852
+ if (r) {
16853
+ if ("string" == typeof r) return _arrayLikeToArray$e(r, a);
16854
+ var t = {}.toString.call(r).slice(8, -1);
16855
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$e(r, a) : void 0;
16856
+ }
16857
+ }
16858
+ function _arrayLikeToArray$e(r, a) {
16859
+ (null == a || a > r.length) && (a = r.length);
16860
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
16861
+ return n;
16862
+ }
16807
16863
  function _iterableToArrayLimit$a(r, l) {
16808
16864
  var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
16809
16865
  if (null != t) {
@@ -16834,66 +16890,72 @@
16834
16890
  function _arrayWithHoles$a(r) {
16835
16891
  if (Array.isArray(r)) return r;
16836
16892
  }
16837
- function _toConsumableArray$5(r) {
16838
- return _arrayWithoutHoles$5(r) || _iterableToArray$5(r) || _unsupportedIterableToArray$e(r) || _nonIterableSpread$5();
16839
- }
16840
- function _nonIterableSpread$5() {
16841
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
16842
- }
16843
- function _unsupportedIterableToArray$e(r, a) {
16844
- if (r) {
16845
- if ("string" == typeof r) return _arrayLikeToArray$e(r, a);
16846
- var t = {}.toString.call(r).slice(8, -1);
16847
- return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$e(r, a) : void 0;
16848
- }
16849
- }
16850
- function _iterableToArray$5(r) {
16851
- if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
16852
- }
16853
- function _arrayWithoutHoles$5(r) {
16854
- if (Array.isArray(r)) return _arrayLikeToArray$e(r);
16855
- }
16856
- function _arrayLikeToArray$e(r, a) {
16857
- (null == a || a > r.length) && (a = r.length);
16858
- for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
16859
- return n;
16860
- }
16861
- function _objectWithoutProperties$a(e, t) {
16862
- if (null == e) return {};
16863
- var o,
16864
- r,
16865
- i = _objectWithoutPropertiesLoose$b(e, t);
16866
- if (Object.getOwnPropertySymbols) {
16867
- var n = Object.getOwnPropertySymbols(e);
16868
- for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
16869
- }
16870
- return i;
16871
- }
16872
- function _objectWithoutPropertiesLoose$b(r, e) {
16873
- if (null == r) return {};
16874
- var t = {};
16875
- for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
16876
- if (-1 !== e.indexOf(n)) continue;
16877
- t[n] = r[n];
16878
- }
16879
- return t;
16880
- }
16881
16893
  var withUsage$6 = createDocumentationMessageGenerator({
16882
16894
  name: 'chat',
16883
16895
  connector: true
16884
16896
  });
16897
+ function getAttributesToClear(_ref) {
16898
+ var results = _ref.results,
16899
+ helper = _ref.helper;
16900
+ return uniq(getRefinements(results, helper.state, true).map(function (refinement) {
16901
+ return refinement.attribute;
16902
+ }));
16903
+ }
16904
+ function updateStateFromSearchToolInput(params, helper) {
16905
+ // clear all filters first
16906
+ var attributesToClear = getAttributesToClear({
16907
+ results: helper.lastResults,
16908
+ helper: helper
16909
+ });
16910
+ helper.setState(clearRefinements({
16911
+ helper: helper,
16912
+ attributesToClear: attributesToClear
16913
+ }));
16914
+ if (params.facetFilters) {
16915
+ var attributes = flat$1(params.facetFilters).map(function (filter) {
16916
+ var _filter$split = filter.split(':'),
16917
+ _filter$split2 = _slicedToArray$a(_filter$split, 2),
16918
+ attribute = _filter$split2[0],
16919
+ value = _filter$split2[1];
16920
+ return {
16921
+ attribute: attribute,
16922
+ value: value
16923
+ };
16924
+ });
16925
+ attributes.forEach(function (_ref2) {
16926
+ var attribute = _ref2.attribute,
16927
+ value = _ref2.value;
16928
+ if (!helper.state.isConjunctiveFacet(attribute) && !helper.state.isHierarchicalFacet(attribute) && !helper.state.isDisjunctiveFacet(attribute)) {
16929
+ var s = helper.state.addDisjunctiveFacet(attribute);
16930
+ helper.setState(s);
16931
+ helper.toggleFacetRefinement(attribute, value);
16932
+ } else {
16933
+ var _helper$state$hierarc;
16934
+ var attr = ((_helper$state$hierarc = helper.state.hierarchicalFacets.find(function (facet) {
16935
+ return facet.name === attribute;
16936
+ })) === null || _helper$state$hierarc === void 0 ? void 0 : _helper$state$hierarc.name) || attribute;
16937
+ helper.toggleFacetRefinement(attr, value);
16938
+ }
16939
+ });
16940
+ }
16941
+ if (params.query) {
16942
+ helper.setQuery(params.query);
16943
+ }
16944
+ helper.search();
16945
+ return helper.state;
16946
+ }
16885
16947
  var connectChat = (function connectChat(renderFn) {
16886
16948
  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop$1;
16887
16949
  checkRendering(renderFn, withUsage$6());
16888
16950
  return function (widgetParams) {
16889
- var _ref = widgetParams || {},
16890
- _ref$resume = _ref.resume,
16891
- resume = _ref$resume === void 0 ? false : _ref$resume,
16892
- _ref$tools = _ref.tools,
16893
- tools = _ref$tools === void 0 ? {} : _ref$tools,
16894
- _ref$type = _ref.type,
16895
- type = _ref$type === void 0 ? 'chat' : _ref$type,
16896
- options = _objectWithoutProperties$a(_ref, _excluded$a);
16951
+ var _ref3 = widgetParams || {},
16952
+ _ref3$resume = _ref3.resume,
16953
+ resume = _ref3$resume === void 0 ? false : _ref3$resume,
16954
+ _ref3$tools = _ref3.tools,
16955
+ tools = _ref3$tools === void 0 ? {} : _ref3$tools,
16956
+ _ref3$type = _ref3.type,
16957
+ type = _ref3$type === void 0 ? 'chat' : _ref3$type,
16958
+ options = _objectWithoutProperties$a(_ref3, _excluded$a);
16897
16959
  var _chatInstance;
16898
16960
  var input = '';
16899
16961
  var open = false;
@@ -16994,10 +17056,10 @@
16994
17056
  'x-algolia-api-Key': apiKey,
16995
17057
  'x-algolia-agent': getAlgoliaAgent(instantSearchInstance.client)
16996
17058
  },
16997
- prepareSendMessagesRequest: function prepareSendMessagesRequest(_ref2) {
16998
- var messages = _ref2.messages,
16999
- trigger = _ref2.trigger,
17000
- rest = _objectWithoutProperties$a(_ref2, _excluded2$2);
17059
+ prepareSendMessagesRequest: function prepareSendMessagesRequest(_ref4) {
17060
+ var messages = _ref4.messages,
17061
+ trigger = _ref4.trigger,
17062
+ rest = _objectWithoutProperties$a(_ref4, _excluded2$2);
17001
17063
  return {
17002
17064
  // Bypass cache when regenerating to ensure fresh responses
17003
17065
  api: trigger === 'regenerate-message' ? "".concat(baseApi, "&cache=false") : baseApi,
@@ -17017,8 +17079,8 @@
17017
17079
  return new Chat(_objectSpread$s(_objectSpread$s({}, options), {}, {
17018
17080
  transport: transport,
17019
17081
  sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,
17020
- onToolCall: function onToolCall(_ref3) {
17021
- var toolCall = _ref3.toolCall;
17082
+ onToolCall: function onToolCall(_ref5) {
17083
+ var toolCall = _ref5.toolCall;
17022
17084
  var tool = tools[toolCall.toolName];
17023
17085
  if (!tool) {
17024
17086
  return _chatInstance.addToolResult({
@@ -17028,8 +17090,8 @@
17028
17090
  });
17029
17091
  }
17030
17092
  if (tool.onToolCall) {
17031
- var addToolResult = function addToolResult(_ref4) {
17032
- var output = _ref4.output;
17093
+ var addToolResult = function addToolResult(_ref6) {
17094
+ var output = _ref6.output;
17033
17095
  return _chatInstance.addToolResult({
17034
17096
  output: output,
17035
17097
  tool: toolCall.toolName,
@@ -17089,7 +17151,8 @@
17089
17151
  },
17090
17152
  getWidgetRenderState: function getWidgetRenderState(renderOptions) {
17091
17153
  var instantSearchInstance = renderOptions.instantSearchInstance,
17092
- parent = renderOptions.parent;
17154
+ parent = renderOptions.parent,
17155
+ helper = renderOptions.helper;
17093
17156
  if (!_chatInstance) {
17094
17157
  this.init(_objectSpread$s(_objectSpread$s({}, renderOptions), {}, {
17095
17158
  uiState: {},
@@ -17103,13 +17166,17 @@
17103
17166
  widgetType: this.$$type
17104
17167
  });
17105
17168
  }
17169
+ function applyFilters(params) {
17170
+ return updateStateFromSearchToolInput(params, helper);
17171
+ }
17106
17172
  var toolsWithAddToolResult = {};
17107
- Object.entries(tools).forEach(function (_ref5) {
17108
- var _ref6 = _slicedToArray$a(_ref5, 2),
17109
- key = _ref6[0],
17110
- tool = _ref6[1];
17173
+ Object.entries(tools).forEach(function (_ref7) {
17174
+ var _ref8 = _slicedToArray$a(_ref7, 2),
17175
+ key = _ref8[0],
17176
+ tool = _ref8[1];
17111
17177
  var toolWithAddToolResult = _objectSpread$s(_objectSpread$s({}, tool), {}, {
17112
- addToolResult: _chatInstance.addToolResult
17178
+ addToolResult: _chatInstance.addToolResult,
17179
+ applyFilters: applyFilters
17113
17180
  });
17114
17181
  toolsWithAddToolResult[key] = toolWithAddToolResult;
17115
17182
  });
@@ -17294,7 +17361,7 @@
17294
17361
  scopedResults = _ref2.scopedResults,
17295
17362
  results = _ref2.results;
17296
17363
  connectorState.attributesToClear = scopedResults.reduce(function (attributesToClear, scopedResult) {
17297
- return attributesToClear.concat(getAttributesToClear({
17364
+ return attributesToClear.concat(getAttributesToClear$1({
17298
17365
  scopedResult: scopedResult,
17299
17366
  includedAttributes: includedAttributes,
17300
17367
  excludedAttributes: excludedAttributes,
@@ -17336,7 +17403,7 @@
17336
17403
  };
17337
17404
  };
17338
17405
  };
17339
- function getAttributesToClear(_ref5) {
17406
+ function getAttributesToClear$1(_ref5) {
17340
17407
  var scopedResult = _ref5.scopedResult,
17341
17408
  includedAttributes = _ref5.includedAttributes,
17342
17409
  excludedAttributes = _ref5.excludedAttributes,
@@ -23596,7 +23663,203 @@
23596
23663
  };
23597
23664
  }
23598
23665
 
23599
- var _excluded$g = ["className", "onSelect", "onApply"];
23666
+ function createAutocompleteDetachedContainerComponent(_ref) {
23667
+ var createElement = _ref.createElement;
23668
+ return function AutocompleteDetachedContainer(userProps) {
23669
+ var children = userProps.children,
23670
+ _userProps$classNames = userProps.classNames,
23671
+ classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames;
23672
+ return createElement("div", {
23673
+ className: cx('ais-AutocompleteDetachedContainer', classNames.detachedContainer),
23674
+ onMouseDown: function onMouseDown(event) {
23675
+ event.stopPropagation();
23676
+ }
23677
+ }, children);
23678
+ };
23679
+ }
23680
+
23681
+ var _excluded$g = ["variant", "size", "iconOnly", "className", "children"];
23682
+ function createButtonComponent(_ref) {
23683
+ var createElement = _ref.createElement;
23684
+ return function Button(userProps) {
23685
+ var _userProps$variant = userProps.variant,
23686
+ variant = _userProps$variant === void 0 ? 'primary' : _userProps$variant,
23687
+ _userProps$size = userProps.size,
23688
+ size = _userProps$size === void 0 ? 'md' : _userProps$size,
23689
+ _userProps$iconOnly = userProps.iconOnly,
23690
+ iconOnly = _userProps$iconOnly === void 0 ? false : _userProps$iconOnly,
23691
+ className = userProps.className,
23692
+ children = userProps.children,
23693
+ props = _objectWithoutProperties$g(userProps, _excluded$g);
23694
+ return createElement("button", _extends$2({
23695
+ type: "button",
23696
+ className: cx('ais-Button', "ais-Button--".concat(variant), "ais-Button--".concat(size), iconOnly && 'ais-Button--icon-only', className)
23697
+ }, props), children);
23698
+ };
23699
+ }
23700
+
23701
+ function createAutocompleteDetachedFormContainerComponent(_ref) {
23702
+ var createElement = _ref.createElement;
23703
+ var Button = createButtonComponent({
23704
+ createElement: createElement
23705
+ });
23706
+ return function AutocompleteDetachedFormContainer(userProps) {
23707
+ var children = userProps.children,
23708
+ _userProps$classNames = userProps.classNames,
23709
+ classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
23710
+ onCancel = userProps.onCancel,
23711
+ translations = userProps.translations;
23712
+ return createElement("div", {
23713
+ className: cx('ais-AutocompleteDetachedFormContainer', classNames.detachedFormContainer)
23714
+ }, children, createElement(Button, {
23715
+ variant: "ghost",
23716
+ className: cx('ais-AutocompleteDetachedCancelButton', classNames.detachedCancelButton),
23717
+ onClick: onCancel
23718
+ }, translations.detachedCancelButtonText));
23719
+ };
23720
+ }
23721
+
23722
+ function createAutocompleteDetachedOverlayComponent(_ref) {
23723
+ var createElement = _ref.createElement;
23724
+ return function AutocompleteDetachedOverlay(userProps) {
23725
+ var children = userProps.children,
23726
+ _userProps$classNames = userProps.classNames,
23727
+ classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
23728
+ onClose = userProps.onClose;
23729
+ return createElement("div", {
23730
+ className: cx('ais-AutocompleteDetachedOverlay', classNames.detachedOverlay),
23731
+ onMouseDown: onClose
23732
+ }, children);
23733
+ };
23734
+ }
23735
+
23736
+ function SubmitIcon(_ref) {
23737
+ var createElement = _ref.createElement;
23738
+ return createElement("svg", {
23739
+ className: "ais-AutocompleteSubmitIcon",
23740
+ viewBox: "0 0 24 24",
23741
+ fill: "currentColor"
23742
+ }, createElement("path", {
23743
+ d: "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"
23744
+ }));
23745
+ }
23746
+ function LoadingIcon(_ref2) {
23747
+ var createElement = _ref2.createElement;
23748
+ return createElement("svg", {
23749
+ className: "ais-AutocompleteLoadingIcon",
23750
+ viewBox: "0 0 100 100"
23751
+ }, createElement("circle", {
23752
+ cx: "50",
23753
+ cy: "50",
23754
+ fill: "none",
23755
+ r: "35",
23756
+ stroke: "currentColor",
23757
+ strokeDasharray: "164.93361431346415 56.97787143782138",
23758
+ strokeWidth: "6"
23759
+ }, createElement("animateTransform", {
23760
+ attributeName: "transform",
23761
+ type: "rotate",
23762
+ repeatCount: "indefinite",
23763
+ dur: "1s",
23764
+ values: "0 50 50;90 50 50;180 50 50;360 50 50",
23765
+ keyTimes: "0;0.40;0.65;1"
23766
+ })));
23767
+ }
23768
+ function ClearIcon(_ref3) {
23769
+ var createElement = _ref3.createElement;
23770
+ return createElement("svg", {
23771
+ className: "ais-AutocompleteClearIcon",
23772
+ viewBox: "0 0 24 24",
23773
+ fill: "currentColor"
23774
+ }, createElement("path", {
23775
+ d: "M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"
23776
+ }));
23777
+ }
23778
+ function ClockIcon(_ref4) {
23779
+ var createElement = _ref4.createElement;
23780
+ return createElement("svg", {
23781
+ viewBox: "0 0 24 24",
23782
+ fill: "currentColor"
23783
+ }, createElement("path", {
23784
+ d: "M12.516 6.984v5.25l4.5 2.672-0.75 1.266-5.25-3.188v-6h1.5zM12 20.016q3.281 0 5.648-2.367t2.367-5.648-2.367-5.648-5.648-2.367-5.648 2.367-2.367 5.648 2.367 5.648 5.648 2.367zM12 2.016q4.125 0 7.055 2.93t2.93 7.055-2.93 7.055-7.055 2.93-7.055-2.93-2.93-7.055 2.93-7.055 7.055-2.93z"
23785
+ }));
23786
+ }
23787
+ function TrashIcon(_ref5) {
23788
+ var createElement = _ref5.createElement;
23789
+ return createElement("svg", {
23790
+ viewBox: "0 0 24 24",
23791
+ fill: "currentColor"
23792
+ }, createElement("path", {
23793
+ d: "M18 7v13c0 0.276-0.111 0.525-0.293 0.707s-0.431 0.293-0.707 0.293h-10c-0.276 0-0.525-0.111-0.707-0.293s-0.293-0.431-0.293-0.707v-13zM17 5v-1c0-0.828-0.337-1.58-0.879-2.121s-1.293-0.879-2.121-0.879h-4c-0.828 0-1.58 0.337-2.121 0.879s-0.879 1.293-0.879 2.121v1h-4c-0.552 0-1 0.448-1 1s0.448 1 1 1h1v13c0 0.828 0.337 1.58 0.879 2.121s1.293 0.879 2.121 0.879h10c0.828 0 1.58-0.337 2.121-0.879s0.879-1.293 0.879-2.121v-13h1c0.552 0 1-0.448 1-1s-0.448-1-1-1zM9 5v-1c0-0.276 0.111-0.525 0.293-0.707s0.431-0.293 0.707-0.293h4c0.276 0 0.525 0.111 0.707 0.293s0.293 0.431 0.293 0.707v1zM9 11v6c0 0.552 0.448 1 1 1s1-0.448 1-1v-6c0-0.552-0.448-1-1-1s-1 0.448-1 1zM13 11v6c0 0.552 0.448 1 1 1s1-0.448 1-1v-6c0-0.552-0.448-1-1-1s-1 0.448-1 1z"
23794
+ }));
23795
+ }
23796
+ function ApplyIcon(_ref6) {
23797
+ var createElement = _ref6.createElement;
23798
+ return createElement("svg", {
23799
+ viewBox: "0 0 24 24",
23800
+ fill: "currentColor"
23801
+ }, createElement("path", {
23802
+ 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"
23803
+ }));
23804
+ }
23805
+ function SearchIcon(_ref7) {
23806
+ var createElement = _ref7.createElement;
23807
+ return createElement("svg", {
23808
+ className: "ais-AutocompleteDetachedSearchIcon",
23809
+ viewBox: "0 0 24 24",
23810
+ fill: "currentColor"
23811
+ }, createElement("path", {
23812
+ d: "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"
23813
+ }));
23814
+ }
23815
+
23816
+ function createAutocompleteDetachedSearchButtonComponent(_ref) {
23817
+ var createElement = _ref.createElement;
23818
+ return function AutocompleteDetachedSearchButton(userProps) {
23819
+ var query = userProps.query,
23820
+ _userProps$placeholde = userProps.placeholder,
23821
+ placeholder = _userProps$placeholde === void 0 ? 'Search' : _userProps$placeholde,
23822
+ _userProps$classNames = userProps.classNames,
23823
+ classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
23824
+ onClick = userProps.onClick,
23825
+ onClear = userProps.onClear,
23826
+ translations = userProps.translations;
23827
+ return createElement("div", {
23828
+ className: cx('ais-AutocompleteDetachedSearchButton', classNames.detachedSearchButton),
23829
+ onClick: onClick,
23830
+ onKeyDown: function onKeyDown(event) {
23831
+ if (event.key === 'Enter' || event.key === ' ') {
23832
+ event.preventDefault();
23833
+ onClick();
23834
+ }
23835
+ },
23836
+ role: "button",
23837
+ tabIndex: 0,
23838
+ title: translations.detachedSearchButtonTitle
23839
+ }, createElement("div", {
23840
+ className: cx('ais-AutocompleteDetachedSearchButtonIcon', classNames.detachedSearchButtonIcon)
23841
+ }, createElement(SearchIcon, {
23842
+ createElement: createElement
23843
+ })), createElement("div", {
23844
+ className: cx('ais-AutocompleteDetachedSearchButtonPlaceholder', classNames.detachedSearchButtonPlaceholder),
23845
+ hidden: Boolean(query)
23846
+ }, placeholder), createElement("div", {
23847
+ className: cx('ais-AutocompleteDetachedSearchButtonQuery', classNames.detachedSearchButtonQuery)
23848
+ }, query), query && onClear && createElement("button", {
23849
+ type: "reset",
23850
+ className: cx('ais-AutocompleteDetachedSearchButtonClear', classNames.detachedSearchButtonClear),
23851
+ title: translations.detachedClearButtonTitle,
23852
+ onClick: function onClick(event) {
23853
+ event.stopPropagation();
23854
+ onClear();
23855
+ }
23856
+ }, createElement(ClearIcon, {
23857
+ createElement: createElement
23858
+ })));
23859
+ };
23860
+ }
23861
+
23862
+ var _excluded$h = ["className", "onSelect", "onApply"];
23600
23863
  function createAutocompleteIndexComponent(_ref) {
23601
23864
  var createElement = _ref.createElement;
23602
23865
  return function AutocompleteIndex(userProps) {
@@ -23622,7 +23885,7 @@
23622
23885
  className = _getItemProps.className,
23623
23886
  onSelect = _getItemProps.onSelect,
23624
23887
  onApply = _getItemProps.onApply,
23625
- itemProps = _objectWithoutProperties$g(_getItemProps, _excluded$g);
23888
+ itemProps = _objectWithoutProperties$g(_getItemProps, _excluded$h);
23626
23889
  return createElement("li", _extends$2({
23627
23890
  key: "".concat(itemProps.id, ":").concat(item.objectID)
23628
23891
  }, itemProps, {
@@ -23636,7 +23899,7 @@
23636
23899
  };
23637
23900
  }
23638
23901
 
23639
- var _excluded$h = ["children", "classNames", "hidden"];
23902
+ var _excluded$i = ["children", "classNames", "hidden"];
23640
23903
  function createAutocompletePanelComponent(_ref) {
23641
23904
  var createElement = _ref.createElement;
23642
23905
  return function AutocompletePanel(userProps) {
@@ -23644,7 +23907,7 @@
23644
23907
  _userProps$classNames = userProps.classNames,
23645
23908
  classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
23646
23909
  hidden = userProps.hidden,
23647
- props = _objectWithoutProperties$g(userProps, _excluded$h);
23910
+ props = _objectWithoutProperties$g(userProps, _excluded$i);
23648
23911
  return createElement("div", _extends$2({}, props, {
23649
23912
  "aria-hidden": hidden,
23650
23913
  className: cx('ais-AutocompletePanel', !hidden && 'ais-AutocompletePanel--open', classNames.root, props.className),
@@ -24306,76 +24569,6 @@
24306
24569
  return str.slice(0, prefix.length) === prefix;
24307
24570
  }
24308
24571
 
24309
- function SubmitIcon(_ref) {
24310
- var createElement = _ref.createElement;
24311
- return createElement("svg", {
24312
- className: "ais-AutocompleteSubmitIcon",
24313
- viewBox: "0 0 24 24",
24314
- fill: "currentColor"
24315
- }, createElement("path", {
24316
- d: "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"
24317
- }));
24318
- }
24319
- function LoadingIcon(_ref2) {
24320
- var createElement = _ref2.createElement;
24321
- return createElement("svg", {
24322
- className: "ais-AutocompleteLoadingIcon",
24323
- viewBox: "0 0 100 100"
24324
- }, createElement("circle", {
24325
- cx: "50",
24326
- cy: "50",
24327
- fill: "none",
24328
- r: "35",
24329
- stroke: "currentColor",
24330
- strokeDasharray: "164.93361431346415 56.97787143782138",
24331
- strokeWidth: "6"
24332
- }, createElement("animateTransform", {
24333
- attributeName: "transform",
24334
- type: "rotate",
24335
- repeatCount: "indefinite",
24336
- dur: "1s",
24337
- values: "0 50 50;90 50 50;180 50 50;360 50 50",
24338
- keyTimes: "0;0.40;0.65;1"
24339
- })));
24340
- }
24341
- function ClearIcon(_ref3) {
24342
- var createElement = _ref3.createElement;
24343
- return createElement("svg", {
24344
- className: "ais-AutocompleteClearIcon",
24345
- viewBox: "0 0 24 24",
24346
- fill: "currentColor"
24347
- }, createElement("path", {
24348
- d: "M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"
24349
- }));
24350
- }
24351
- function ClockIcon(_ref4) {
24352
- var createElement = _ref4.createElement;
24353
- return createElement("svg", {
24354
- viewBox: "0 0 24 24",
24355
- fill: "currentColor"
24356
- }, createElement("path", {
24357
- d: "M12.516 6.984v5.25l4.5 2.672-0.75 1.266-5.25-3.188v-6h1.5zM12 20.016q3.281 0 5.648-2.367t2.367-5.648-2.367-5.648-5.648-2.367-5.648 2.367-2.367 5.648 2.367 5.648 5.648 2.367zM12 2.016q4.125 0 7.055 2.93t2.93 7.055-2.93 7.055-7.055 2.93-7.055-2.93-2.93-7.055 2.93-7.055 7.055-2.93z"
24358
- }));
24359
- }
24360
- function TrashIcon(_ref5) {
24361
- var createElement = _ref5.createElement;
24362
- return createElement("svg", {
24363
- viewBox: "0 0 24 24",
24364
- fill: "currentColor"
24365
- }, createElement("path", {
24366
- d: "M18 7v13c0 0.276-0.111 0.525-0.293 0.707s-0.431 0.293-0.707 0.293h-10c-0.276 0-0.525-0.111-0.707-0.293s-0.293-0.431-0.293-0.707v-13zM17 5v-1c0-0.828-0.337-1.58-0.879-2.121s-1.293-0.879-2.121-0.879h-4c-0.828 0-1.58 0.337-2.121 0.879s-0.879 1.293-0.879 2.121v1h-4c-0.552 0-1 0.448-1 1s0.448 1 1 1h1v13c0 0.828 0.337 1.58 0.879 2.121s1.293 0.879 2.121 0.879h10c0.828 0 1.58-0.337 2.121-0.879s0.879-1.293 0.879-2.121v-13h1c0.552 0 1-0.448 1-1s-0.448-1-1-1zM9 5v-1c0-0.276 0.111-0.525 0.293-0.707s0.431-0.293 0.707-0.293h4c0.276 0 0.525 0.111 0.707 0.293s0.293 0.431 0.293 0.707v1zM9 11v6c0 0.552 0.448 1 1 1s1-0.448 1-1v-6c0-0.552-0.448-1-1-1s-1 0.448-1 1zM13 11v6c0 0.552 0.448 1 1 1s1-0.448 1-1v-6c0-0.552-0.448-1-1-1s-1 0.448-1 1z"
24367
- }));
24368
- }
24369
- function ApplyIcon(_ref6) {
24370
- var createElement = _ref6.createElement;
24371
- return createElement("svg", {
24372
- viewBox: "0 0 24 24",
24373
- fill: "currentColor"
24374
- }, createElement("path", {
24375
- 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"
24376
- }));
24377
- }
24378
-
24379
24572
  function createAutocompleteRecentSearchComponent(_ref) {
24380
24573
  var createElement = _ref.createElement;
24381
24574
  return function AutocompleteRecentSearch(userProps) {
@@ -24535,7 +24728,10 @@
24535
24728
  onRefine = _ref2.onRefine,
24536
24729
  globalOnSelect = _ref2.onSelect,
24537
24730
  _onApply = _ref2.onApply,
24538
- placeholder = _ref2.placeholder;
24731
+ onSubmit = _ref2.onSubmit,
24732
+ placeholder = _ref2.placeholder,
24733
+ _ref2$isDetached = _ref2.isDetached,
24734
+ isDetached = _ref2$isDetached === void 0 ? false : _ref2$isDetached;
24539
24735
  var getElementId = createGetElementId(useId());
24540
24736
  var inputRef = useRef(null);
24541
24737
  var rootRef = useRef(null);
@@ -24557,6 +24753,11 @@
24557
24753
  items = _useMemo.items,
24558
24754
  itemsIds = _useMemo.itemsIds;
24559
24755
  useEffect(function () {
24756
+ // In detached mode, we don't close the panel on body click
24757
+ // because the overlay handles closing
24758
+ if (isDetached) {
24759
+ return function () {};
24760
+ }
24560
24761
  var onBodyClick = function onBodyClick(event) {
24561
24762
  var _unwrapRef;
24562
24763
  if ((_unwrapRef = unwrapRef(rootRef)) !== null && _unwrapRef !== void 0 && _unwrapRef.contains(event.target)) {
@@ -24568,7 +24769,7 @@
24568
24769
  return function () {
24569
24770
  document.body.removeEventListener('click', onBodyClick);
24570
24771
  };
24571
- }, [rootRef]);
24772
+ }, [rootRef, isDetached]);
24572
24773
  var getNextActiveDescendant = function getNextActiveDescendant(key) {
24573
24774
  switch (key) {
24574
24775
  case 'ArrowLeft':
@@ -24619,6 +24820,7 @@
24619
24820
  });
24620
24821
  setActiveDescendant(undefined);
24621
24822
  }
24823
+ onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit();
24622
24824
  };
24623
24825
  return {
24624
24826
  getInputProps: function getInputProps() {
@@ -24668,7 +24870,10 @@
24668
24870
  break;
24669
24871
  }
24670
24872
  case 'Tab':
24671
- setIsOpen(false);
24873
+ // In detached mode, Tab doesn't close the panel
24874
+ if (!isDetached) {
24875
+ setIsOpen(false);
24876
+ }
24672
24877
  break;
24673
24878
  default:
24674
24879
  setIsOpen(true);
@@ -24724,6 +24929,12 @@
24724
24929
  return {
24725
24930
  ref: rootRef
24726
24931
  };
24932
+ },
24933
+ isOpen: isOpen,
24934
+ setIsOpen: setIsOpen,
24935
+ focusInput: function focusInput() {
24936
+ var _inputRef$current2;
24937
+ (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
24727
24938
  }
24728
24939
  };
24729
24940
  };
@@ -25005,26 +25216,6 @@
25005
25216
  };
25006
25217
  }
25007
25218
 
25008
- var _excluded$i = ["variant", "size", "iconOnly", "className", "children"];
25009
- function createButtonComponent(_ref) {
25010
- var createElement = _ref.createElement;
25011
- return function Button(userProps) {
25012
- var _userProps$variant = userProps.variant,
25013
- variant = _userProps$variant === void 0 ? 'primary' : _userProps$variant,
25014
- _userProps$size = userProps.size,
25015
- size = _userProps$size === void 0 ? 'md' : _userProps$size,
25016
- _userProps$iconOnly = userProps.iconOnly,
25017
- iconOnly = _userProps$iconOnly === void 0 ? false : _userProps$iconOnly,
25018
- className = userProps.className,
25019
- children = userProps.children,
25020
- props = _objectWithoutProperties$g(userProps, _excluded$i);
25021
- return createElement("button", _extends$2({
25022
- type: "button",
25023
- className: cx('ais-Button', "ais-Button--".concat(variant), "ais-Button--".concat(size), iconOnly && 'ais-Button--icon-only', className)
25024
- }, props), children);
25025
- };
25026
- }
25027
-
25028
25219
  function createDefaultEmptyComponent(_ref) {
25029
25220
  var createElement = _ref.createElement,
25030
25221
  Fragment = _ref.Fragment;
@@ -25738,6 +25929,7 @@
25738
25929
  indexUiState: indexUiState,
25739
25930
  setIndexUiState: setIndexUiState,
25740
25931
  addToolResult: boundAddToolResult,
25932
+ applyFilters: tool.applyFilters,
25741
25933
  onClose: onClose
25742
25934
  }));
25743
25935
  }
@@ -27023,15 +27215,17 @@
27023
27215
  });
27024
27216
  function AutocompleteSearch(_ref) {
27025
27217
  var inputProps = _ref.inputProps,
27026
- clearQuery = _ref.clearQuery;
27027
- var _useSearchBox = useSearchBox(),
27028
- query = _useSearchBox.query,
27029
- refine = _useSearchBox.refine,
27030
- isSearchStalled = _useSearchBox.isSearchStalled;
27218
+ clearQuery = _ref.clearQuery,
27219
+ onQueryChange = _ref.onQueryChange,
27220
+ query = _ref.query,
27221
+ refine = _ref.refine,
27222
+ isSearchStalled = _ref.isSearchStalled;
27031
27223
  return /*#__PURE__*/React__default.createElement(AutocompleteSearchComponent, {
27032
27224
  inputProps: _objectSpread2(_objectSpread2({}, inputProps), {}, {
27033
27225
  onChange: function onChange(event) {
27034
- return refine(event.currentTarget.value);
27226
+ var value = event.currentTarget.value;
27227
+ refine(value);
27228
+ onQueryChange === null || onQueryChange === void 0 ? void 0 : onQueryChange(value);
27035
27229
  }
27036
27230
  }),
27037
27231
  onClear: clearQuery,
@@ -27088,8 +27282,8 @@
27088
27282
  }));
27089
27283
  }
27090
27284
 
27091
- var _excluded$B = ["indices", "showSuggestions", "showRecent", "searchParameters"],
27092
- _excluded2$6 = ["indicesConfig", "refineSearchBox", "getSearchPageURL", "onSelect", "indexUiState", "isSearchPage", "panelComponent", "showRecent", "recentSearchConfig", "showSuggestions", "transformItems", "placeholder"];
27285
+ var _excluded$B = ["indices", "showSuggestions", "showRecent", "searchParameters", "detachedMediaQuery", "translations"],
27286
+ _excluded2$6 = ["indicesConfig", "refineSearchBox", "isSearchStalled", "getSearchPageURL", "onSelect", "indexUiState", "isSearchPage", "panelComponent", "showRecent", "recentSearchConfig", "showSuggestions", "transformItems", "placeholder", "detachedMediaQuery", "translations", "classNames"];
27093
27287
  var Autocomplete = createAutocompleteComponent({
27094
27288
  createElement: React.createElement,
27095
27289
  Fragment: React.Fragment
@@ -27110,6 +27304,22 @@
27110
27304
  createElement: React.createElement,
27111
27305
  Fragment: React.Fragment
27112
27306
  });
27307
+ var AutocompleteDetachedContainer = createAutocompleteDetachedContainerComponent({
27308
+ createElement: React.createElement,
27309
+ Fragment: React.Fragment
27310
+ });
27311
+ var AutocompleteDetachedOverlay = createAutocompleteDetachedOverlayComponent({
27312
+ createElement: React.createElement,
27313
+ Fragment: React.Fragment
27314
+ });
27315
+ var AutocompleteDetachedFormContainer = createAutocompleteDetachedFormContainerComponent({
27316
+ createElement: React.createElement,
27317
+ Fragment: React.Fragment
27318
+ });
27319
+ var AutocompleteDetachedSearchButton = createAutocompleteDetachedSearchButtonComponent({
27320
+ createElement: React.createElement,
27321
+ Fragment: React.Fragment
27322
+ });
27113
27323
  var usePropGetters = createAutocompletePropGetters({
27114
27324
  useEffect: React.useEffect,
27115
27325
  useId: React.useId,
@@ -27122,6 +27332,127 @@
27122
27332
  useMemo: React.useMemo,
27123
27333
  useState: React.useState
27124
27334
  });
27335
+ var DEFAULT_DETACHED_MEDIA_QUERY = '(max-width: 680px)';
27336
+ var DEFAULT_DETACHED_MODAL_MEDIA_QUERY = '(min-width: 680px)';
27337
+ var DETACHED_MEDIA_QUERY_CSS_VAR = '--ais-autocomplete-detached-media-query';
27338
+ var DETACHED_MODAL_MEDIA_QUERY_CSS_VAR = '--ais-autocomplete-detached-modal-media-query';
27339
+ var DEFAULT_TRANSLATIONS = {
27340
+ detachedCancelButtonText: 'Cancel',
27341
+ detachedSearchButtonTitle: 'Search',
27342
+ detachedClearButtonTitle: 'Clear'
27343
+ };
27344
+ function getCssMediaQueryValue(name) {
27345
+ if (typeof window === 'undefined' || typeof document === 'undefined') {
27346
+ return '';
27347
+ }
27348
+ return getComputedStyle(document.documentElement).getPropertyValue(name).trim();
27349
+ }
27350
+ function resolveMediaQuery(value, cssVarName, fallback) {
27351
+ if (value === '') {
27352
+ return '';
27353
+ }
27354
+ if (value) {
27355
+ return value;
27356
+ }
27357
+ return getCssMediaQueryValue(cssVarName) || fallback;
27358
+ }
27359
+ function getMediaQueryList(mediaQuery) {
27360
+ if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
27361
+ return null;
27362
+ }
27363
+ return window.matchMedia(mediaQuery);
27364
+ }
27365
+
27366
+ /**
27367
+ * Hook to manage detached (mobile) mode state
27368
+ */
27369
+ function useDetachedMode(mediaQuery) {
27370
+ var resolvedMediaQuery = React.useMemo(function () {
27371
+ return resolveMediaQuery(mediaQuery, DETACHED_MEDIA_QUERY_CSS_VAR, DEFAULT_DETACHED_MEDIA_QUERY);
27372
+ }, [mediaQuery]);
27373
+ var _useState = React.useState(function () {
27374
+ var _getMediaQueryList;
27375
+ return resolvedMediaQuery ? Boolean((_getMediaQueryList = getMediaQueryList(resolvedMediaQuery)) === null || _getMediaQueryList === void 0 ? void 0 : _getMediaQueryList.matches) : false;
27376
+ }),
27377
+ _useState2 = _slicedToArray$j(_useState, 2),
27378
+ isDetached = _useState2[0],
27379
+ setIsDetached = _useState2[1];
27380
+ var _useState3 = React.useState(false),
27381
+ _useState4 = _slicedToArray$j(_useState3, 2),
27382
+ isModalOpen = _useState4[0],
27383
+ setIsModalOpen = _useState4[1];
27384
+ var _useState5 = React.useState(false),
27385
+ _useState6 = _slicedToArray$j(_useState5, 2),
27386
+ isModalDetached = _useState6[0],
27387
+ setIsModalDetached = _useState6[1];
27388
+ React.useEffect(function () {
27389
+ if (!resolvedMediaQuery) {
27390
+ setIsDetached(false);
27391
+ return function () {};
27392
+ }
27393
+ var mql = getMediaQueryList(resolvedMediaQuery);
27394
+ if (!mql) {
27395
+ setIsDetached(false);
27396
+ return function () {};
27397
+ }
27398
+ var handler = function handler(event) {
27399
+ var wasDetached = isDetached;
27400
+ setIsDetached(event.matches);
27401
+ // Close modal if switching from detached to non-detached
27402
+ if (wasDetached && !event.matches) {
27403
+ setIsModalOpen(false);
27404
+ }
27405
+ };
27406
+ mql.addEventListener('change', handler);
27407
+ return function () {
27408
+ return mql.removeEventListener('change', handler);
27409
+ };
27410
+ }, [resolvedMediaQuery, isDetached]);
27411
+ React.useEffect(function () {
27412
+ if (!isDetached) {
27413
+ setIsModalDetached(false);
27414
+ return function () {};
27415
+ }
27416
+ var modalMediaQuery = resolveMediaQuery(undefined, DETACHED_MODAL_MEDIA_QUERY_CSS_VAR, DEFAULT_DETACHED_MODAL_MEDIA_QUERY);
27417
+ if (!modalMediaQuery) {
27418
+ setIsModalDetached(false);
27419
+ return function () {};
27420
+ }
27421
+ var mql = getMediaQueryList(modalMediaQuery);
27422
+ if (!mql) {
27423
+ setIsModalDetached(false);
27424
+ return function () {};
27425
+ }
27426
+ var handler = function handler(event) {
27427
+ setIsModalDetached(event.matches);
27428
+ };
27429
+ setIsModalDetached(mql.matches);
27430
+ mql.addEventListener('change', handler);
27431
+ return function () {
27432
+ return mql.removeEventListener('change', handler);
27433
+ };
27434
+ }, [isDetached]);
27435
+ React.useEffect(function () {
27436
+ if (typeof document === 'undefined') return function () {};
27437
+ if (isModalOpen) {
27438
+ var scrollY = window.scrollY;
27439
+ document.body.style.top = "-".concat(scrollY, "px");
27440
+ document.body.classList.add('ais-Autocomplete--detached');
27441
+ return function () {
27442
+ document.body.classList.remove('ais-Autocomplete--detached');
27443
+ document.body.style.top = '';
27444
+ window.scrollTo(0, scrollY);
27445
+ };
27446
+ }
27447
+ return function () {};
27448
+ }, [isModalOpen]);
27449
+ return {
27450
+ isDetached: isDetached,
27451
+ isModalDetached: isModalDetached,
27452
+ isModalOpen: isModalOpen,
27453
+ setIsModalOpen: setIsModalOpen
27454
+ };
27455
+ }
27125
27456
  function EXPERIMENTAL_Autocomplete(_ref) {
27126
27457
  var _showRecent$className, _showRecent$className2, _showRecent$className3, _showRecent$className4;
27127
27458
  var _ref$indices = _ref.indices,
@@ -27129,15 +27460,21 @@
27129
27460
  showSuggestions = _ref.showSuggestions,
27130
27461
  showRecent = _ref.showRecent,
27131
27462
  userSearchParameters = _ref.searchParameters,
27463
+ detachedMediaQuery = _ref.detachedMediaQuery,
27464
+ _ref$translations = _ref.translations,
27465
+ userTranslations = _ref$translations === void 0 ? {} : _ref$translations,
27132
27466
  props = _objectWithoutProperties$f(_ref, _excluded$B);
27467
+ var translations = _objectSpread2(_objectSpread2({}, DEFAULT_TRANSLATIONS), userTranslations);
27133
27468
  var _useInstantSearch = useInstantSearch(),
27134
27469
  indexUiState = _useInstantSearch.indexUiState,
27135
- indexRenderState = _useInstantSearch.indexRenderState;
27470
+ indexRenderState = _useInstantSearch.indexRenderState,
27471
+ status = _useInstantSearch.status;
27136
27472
  var _useSearchBox = useSearchBox({}, {
27137
27473
  $$type: 'ais.autocomplete',
27138
27474
  $$widgetType: 'ais.autocomplete'
27139
27475
  }),
27140
27476
  refine = _useSearchBox.refine;
27477
+ var isSearchStalled = status === 'stalled';
27141
27478
  var searchParameters = _objectSpread2({
27142
27479
  hitsPerPage: 5
27143
27480
  }, userSearchParameters);
@@ -27194,16 +27531,20 @@
27194
27531
  }), /*#__PURE__*/React__default.createElement(InnerAutocomplete, _extends$1({}, props, {
27195
27532
  indicesConfig: indicesConfig,
27196
27533
  refineSearchBox: refine,
27534
+ isSearchStalled: isSearchStalled,
27197
27535
  indexUiState: indexUiState,
27198
27536
  isSearchPage: isSearchPage,
27199
27537
  showRecent: showRecent,
27200
27538
  recentSearchConfig: recentSearchConfig,
27201
- showSuggestions: showSuggestions
27539
+ showSuggestions: showSuggestions,
27540
+ detachedMediaQuery: detachedMediaQuery,
27541
+ translations: translations
27202
27542
  }))));
27203
27543
  }
27204
27544
  function InnerAutocomplete(_ref3) {
27205
27545
  var indicesConfig = _ref3.indicesConfig,
27206
27546
  refineSearchBox = _ref3.refineSearchBox,
27547
+ isSearchStalled = _ref3.isSearchStalled,
27207
27548
  getSearchPageURL = _ref3.getSearchPageURL,
27208
27549
  userOnSelect = _ref3.onSelect,
27209
27550
  indexUiState = _ref3.indexUiState,
@@ -27214,6 +27555,10 @@
27214
27555
  showSuggestions = _ref3.showSuggestions,
27215
27556
  transformItems = _ref3.transformItems,
27216
27557
  placeholder = _ref3.placeholder,
27558
+ _ref3$detachedMediaQu = _ref3.detachedMediaQuery,
27559
+ detachedMediaQuery = _ref3$detachedMediaQu === void 0 ? DEFAULT_DETACHED_MEDIA_QUERY : _ref3$detachedMediaQu,
27560
+ translations = _ref3.translations,
27561
+ classNames = _ref3.classNames,
27217
27562
  props = _objectWithoutProperties$f(_ref3, _excluded2$6);
27218
27563
  var _useAutocomplete = useAutocomplete({
27219
27564
  transformItems: transformItems
@@ -27221,6 +27566,12 @@
27221
27566
  indices = _useAutocomplete.indices,
27222
27567
  refineAutocomplete = _useAutocomplete.refine,
27223
27568
  currentRefinement = _useAutocomplete.currentRefinement;
27569
+ var _useDetachedMode = useDetachedMode(detachedMediaQuery),
27570
+ isDetached = _useDetachedMode.isDetached,
27571
+ isModalDetached = _useDetachedMode.isModalDetached,
27572
+ isModalOpen = _useDetachedMode.isModalOpen,
27573
+ setIsModalOpen = _useDetachedMode.setIsModalOpen;
27574
+ var previousIsDetachedRef = React.useRef(isDetached);
27224
27575
  var _useStorage = useStorage({
27225
27576
  showRecent: showRecent,
27226
27577
  query: currentRefinement,
@@ -27259,12 +27610,41 @@
27259
27610
  }
27260
27611
  setQuery(query);
27261
27612
  },
27262
- placeholder: placeholder
27613
+ onSubmit: function onSubmit() {
27614
+ // Close the detached modal when form is submitted
27615
+ if (isDetached) {
27616
+ setIsModalOpen(false);
27617
+ }
27618
+ },
27619
+ placeholder: placeholder,
27620
+ isDetached: isDetached
27263
27621
  }),
27264
27622
  getInputProps = _usePropGetters.getInputProps,
27265
27623
  getItemProps = _usePropGetters.getItemProps,
27266
27624
  getPanelProps = _usePropGetters.getPanelProps,
27267
- getRootProps = _usePropGetters.getRootProps;
27625
+ getRootProps = _usePropGetters.getRootProps,
27626
+ isOpen = _usePropGetters.isOpen,
27627
+ setIsOpen = _usePropGetters.setIsOpen,
27628
+ focusInput = _usePropGetters.focusInput;
27629
+
27630
+ // Open panel and focus input when modal opens
27631
+ React.useEffect(function () {
27632
+ if (isDetached && isModalOpen) {
27633
+ setIsOpen(true);
27634
+ // Focus input to show the keyboard on mobile
27635
+ focusInput();
27636
+ }
27637
+ }, [isDetached, isModalOpen, setIsOpen, focusInput]);
27638
+
27639
+ // Keep the modal open if the panel was open before switching to detached
27640
+ React.useEffect(function () {
27641
+ var wasDetached = previousIsDetachedRef.current;
27642
+ var switchedToDetached = !wasDetached && isDetached;
27643
+ if (switchedToDetached && isOpen) {
27644
+ setIsModalOpen(true);
27645
+ }
27646
+ previousIsDetachedRef.current = isDetached;
27647
+ }, [isDetached, isOpen, setIsModalOpen]);
27268
27648
  var elements = {};
27269
27649
  if (showRecent && recentSearchConfig) {
27270
27650
  var RecentSearchItemComponent = recentSearchConfig.itemComponent;
@@ -27326,18 +27706,66 @@
27326
27706
  classNames: currentIndexConfig.classNames
27327
27707
  });
27328
27708
  });
27329
- return /*#__PURE__*/React__default.createElement(Autocomplete, _extends$1({}, props, getRootProps()), /*#__PURE__*/React__default.createElement(AutocompleteSearch, {
27709
+ var searchBoxContent = /*#__PURE__*/React__default.createElement(AutocompleteSearch, {
27330
27710
  inputProps: getInputProps(),
27331
27711
  clearQuery: function clearQuery() {
27332
27712
  refineSearchBox('');
27333
27713
  refineAutocomplete('');
27334
- }
27335
- }), /*#__PURE__*/React__default.createElement(AutocompletePanel, getPanelProps(), PanelComponent ? /*#__PURE__*/React__default.createElement(PanelComponent, {
27714
+ },
27715
+ onQueryChange: function onQueryChange(query) {
27716
+ refineAutocomplete(query);
27717
+ },
27718
+ query: currentRefinement || indexUiState.query || '',
27719
+ refine: refineSearchBox,
27720
+ isSearchStalled: isSearchStalled
27721
+ });
27722
+ var panelContent = /*#__PURE__*/React__default.createElement(AutocompletePanel, getPanelProps(), PanelComponent ? /*#__PURE__*/React__default.createElement(PanelComponent, {
27336
27723
  elements: elements,
27337
27724
  indices: indices
27338
27725
  }) : Object.keys(elements).map(function (elementId) {
27339
27726
  return elements[elementId];
27340
- })));
27727
+ }));
27728
+ var detachedContainerClassNames = isModalDetached ? _objectSpread2(_objectSpread2({}, classNames), {}, {
27729
+ detachedContainer: cx('ais-AutocompleteDetachedContainer--modal', classNames === null || classNames === void 0 ? void 0 : classNames.detachedContainer)
27730
+ }) : classNames;
27731
+ if (isDetached) {
27732
+ return /*#__PURE__*/React__default.createElement(Autocomplete, _extends$1({}, props, getRootProps(), {
27733
+ classNames: classNames
27734
+ }), /*#__PURE__*/React__default.createElement(AutocompleteDetachedSearchButton, {
27735
+ query: currentRefinement || indexUiState.query || '',
27736
+ placeholder: placeholder,
27737
+ classNames: classNames,
27738
+ onClick: function onClick() {
27739
+ setIsModalOpen(true);
27740
+ setIsOpen(true);
27741
+ },
27742
+ onClear: function onClear() {
27743
+ refineSearchBox('');
27744
+ refineAutocomplete('');
27745
+ },
27746
+ translations: translations
27747
+ }), isModalOpen && /*#__PURE__*/React__default.createElement(AutocompleteDetachedOverlay, {
27748
+ classNames: classNames,
27749
+ onClose: function onClose() {
27750
+ setIsModalOpen(false);
27751
+ setIsOpen(false);
27752
+ }
27753
+ }, /*#__PURE__*/React__default.createElement(AutocompleteDetachedContainer, {
27754
+ classNames: detachedContainerClassNames
27755
+ }, /*#__PURE__*/React__default.createElement(AutocompleteDetachedFormContainer, {
27756
+ classNames: classNames,
27757
+ onCancel: function onCancel() {
27758
+ setIsModalOpen(false);
27759
+ setIsOpen(false);
27760
+ },
27761
+ translations: translations
27762
+ }, searchBoxContent), panelContent)));
27763
+ }
27764
+
27765
+ // Normal (non-detached) rendering
27766
+ return /*#__PURE__*/React__default.createElement(Autocomplete, _extends$1({}, props, getRootProps(), {
27767
+ classNames: classNames
27768
+ }), searchBoxContent, panelContent);
27341
27769
  }
27342
27770
  function ConditionalReverseHighlight(_ref7) {
27343
27771
  var _item$_highlightResul;
@@ -27480,8 +27908,7 @@
27480
27908
  });
27481
27909
  function SearchLayoutComponent(_ref) {
27482
27910
  var message = _ref.message,
27483
- indexUiState = _ref.indexUiState,
27484
- setIndexUiState = _ref.setIndexUiState,
27911
+ applyFilters = _ref.applyFilters,
27485
27912
  onClose = _ref.onClose;
27486
27913
  var input = message === null || message === void 0 ? void 0 : message.input;
27487
27914
  var output = message === null || message === void 0 ? void 0 : message.output;
@@ -27490,15 +27917,13 @@
27490
27917
  return function (props) {
27491
27918
  return /*#__PURE__*/React__default.createElement(HeaderComponent, _extends$1({
27492
27919
  nbHits: output === null || output === void 0 ? void 0 : output.nbHits,
27493
- query: input === null || input === void 0 ? void 0 : input.query,
27920
+ input: input,
27494
27921
  hitsPerPage: items.length,
27495
- setIndexUiState: setIndexUiState,
27496
- indexUiState: indexUiState,
27497
- getSearchPageURL: getSearchPageURL,
27498
- onClose: onClose
27922
+ onClose: onClose,
27923
+ applyFilters: applyFilters
27499
27924
  }, props));
27500
27925
  };
27501
- }, [items.length, input === null || input === void 0 ? void 0 : input.query, output === null || output === void 0 ? void 0 : output.nbHits, setIndexUiState, onClose, indexUiState]);
27926
+ }, [items.length, input, output === null || output === void 0 ? void 0 : output.nbHits, applyFilters, onClose]);
27502
27927
  return /*#__PURE__*/React__default.createElement(Carousel, {
27503
27928
  items: items,
27504
27929
  itemComponent: itemComponent,
@@ -27513,11 +27938,9 @@
27513
27938
  scrollLeft = _ref2.scrollLeft,
27514
27939
  scrollRight = _ref2.scrollRight,
27515
27940
  nbHits = _ref2.nbHits,
27516
- query = _ref2.query,
27941
+ input = _ref2.input,
27517
27942
  hitsPerPage = _ref2.hitsPerPage,
27518
- setIndexUiState = _ref2.setIndexUiState,
27519
- indexUiState = _ref2.indexUiState,
27520
- getSearchPageURL = _ref2.getSearchPageURL,
27943
+ applyFilters = _ref2.applyFilters,
27521
27944
  onClose = _ref2.onClose;
27522
27945
  if ((hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0) < 1) {
27523
27946
  return null;
@@ -27532,20 +27955,15 @@
27532
27955
  variant: "ghost",
27533
27956
  size: "sm",
27534
27957
  onClick: function onClick() {
27535
- if (!query) return;
27536
- var nextUiState = _objectSpread2(_objectSpread2({}, indexUiState), {}, {
27537
- query: query
27958
+ if (!input || !applyFilters) return;
27959
+ var params = applyFilters({
27960
+ query: input.query,
27961
+ facetFilters: input.facet_filters
27538
27962
  });
27539
-
27540
- // If no main search page URL or we are on the search page, just update the state
27541
- if (!getSearchPageURL || getSearchPageURL && new URL(getSearchPageURL(nextUiState)).pathname === window.location.pathname) {
27542
- setIndexUiState(nextUiState);
27543
- onClose();
27544
- return;
27963
+ if (getSearchPageURL && new URL(getSearchPageURL(params)).pathname !== window.location.pathname) {
27964
+ window.location.href = getSearchPageURL(params);
27545
27965
  }
27546
-
27547
- // Navigate to different page
27548
- window.location.href = getSearchPageURL(nextUiState);
27966
+ onClose();
27549
27967
  },
27550
27968
  className: "ais-ChatToolSearchIndexCarouselHeaderViewAll"
27551
27969
  }, "View all", /*#__PURE__*/React__default.createElement(ArrowRightIcon, {