instantsearch.js 4.83.0 → 4.85.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.
@@ -1,4 +1,4 @@
1
- /*! InstantSearch.js 4.83.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
1
+ /*! InstantSearch.js 4.85.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' ? module.exports = factory() :
4
4
  typeof define === 'function' && define.amd ? define(factory) :
@@ -1127,6 +1127,11 @@
1127
1127
  return insideBoundingBoxStringToBoundingBox(value);
1128
1128
  }
1129
1129
 
1130
+ function getAlgoliaAgent(client) {
1131
+ var clientTyped = client;
1132
+ return clientTyped.transporter && clientTyped.transporter.userAgent ? clientTyped.transporter.userAgent.value : clientTyped._ua;
1133
+ }
1134
+
1130
1135
  // typed as any, since it accepts the _real_ js clients, not the interface we otherwise expect
1131
1136
  function getAppIdAndApiKey(searchClient) {
1132
1137
  if (searchClient.appId && searchClient.apiKey) {
@@ -14500,8 +14505,7 @@
14500
14505
  subscribe: function subscribe() {
14501
14506
  // using setTimeout here to delay extraction until widgets have been added in a tick (e.g. Vue)
14502
14507
  setTimeout(function () {
14503
- var client = instantSearchInstance.client;
14504
- payload.ua = client.transporter && client.transporter.userAgent ? client.transporter.userAgent.value : client._ua;
14508
+ payload.ua = getAlgoliaAgent(instantSearchInstance.client);
14505
14509
  extractWidgetPayload(instantSearchInstance.mainIndex.getWidgets(), instantSearchInstance, payload);
14506
14510
  instantSearchInstance.middleware.forEach(function (middleware) {
14507
14511
  return payload.widgets.push({
@@ -15936,6 +15940,12 @@
15936
15940
  helper: helper
15937
15941
  })));
15938
15942
  },
15943
+ scheduleLocalSearch: defer(function () {
15944
+ if (isolated) {
15945
+ var _helper2;
15946
+ (_helper2 = helper) === null || _helper2 === void 0 ? void 0 : _helper2.search();
15947
+ }
15948
+ }),
15939
15949
  getWidgets: function getWidgets() {
15940
15950
  return localWidgets;
15941
15951
  },
@@ -16001,8 +16011,7 @@
16001
16011
  }
16002
16012
  });
16003
16013
  if (isolated) {
16004
- var _helper2;
16005
- (_helper2 = helper) === null || _helper2 === void 0 ? void 0 : _helper2.search();
16014
+ this.scheduleLocalSearch();
16006
16015
  } else {
16007
16016
  localInstantSearchInstance.scheduleSearch();
16008
16017
  }
@@ -16081,8 +16090,7 @@
16081
16090
  helper.recommendState = cleanedRecommendState;
16082
16091
  if (localWidgets.length) {
16083
16092
  if (isolated) {
16084
- var _helper3;
16085
- (_helper3 = helper) === null || _helper3 === void 0 ? void 0 : _helper3.search();
16093
+ this.scheduleLocalSearch();
16086
16094
  } else {
16087
16095
  localInstantSearchInstance.scheduleSearch();
16088
16096
  }
@@ -16336,7 +16344,7 @@
16336
16344
  },
16337
16345
  dispose: function dispose() {
16338
16346
  var _this5 = this,
16339
- _helper4,
16347
+ _helper3,
16340
16348
  _derivedHelper3;
16341
16349
  localWidgets.forEach(function (widget) {
16342
16350
  if (widget.dispose && helper) {
@@ -16356,7 +16364,7 @@
16356
16364
  });
16357
16365
  localInstantSearchInstance = null;
16358
16366
  localParent = null;
16359
- (_helper4 = helper) === null || _helper4 === void 0 ? void 0 : _helper4.removeAllListeners();
16367
+ (_helper3 = helper) === null || _helper3 === void 0 ? void 0 : _helper3.removeAllListeners();
16360
16368
  helper = null;
16361
16369
  (_derivedHelper3 = derivedHelper) === null || _derivedHelper3 === void 0 ? void 0 : _derivedHelper3.detach();
16362
16370
  derivedHelper = null;
@@ -16482,7 +16490,7 @@
16482
16490
  };
16483
16491
  }
16484
16492
 
16485
- var version$1 = '4.83.0';
16493
+ var version$1 = '4.85.0';
16486
16494
 
16487
16495
  var withUsage$v = createDocumentationMessageGenerator({
16488
16496
  name: 'instantsearch'
@@ -17258,7 +17266,7 @@
17258
17266
  onSelect = _getItemProps.onSelect,
17259
17267
  itemProps = _objectWithoutProperties$1(_getItemProps, _excluded$a);
17260
17268
  return createElement("li", _extends$1({
17261
- key: item.objectID
17269
+ key: "".concat(itemProps.id, ":").concat(item.objectID)
17262
17270
  }, itemProps, {
17263
17271
  className: cx('ais-AutocompleteIndexItem', classNames.item, className)
17264
17272
  }), createElement(ItemComponent, {
@@ -17269,16 +17277,23 @@
17269
17277
  };
17270
17278
  }
17271
17279
 
17272
- var _excluded$b = ["children", "classNames"];
17280
+ var _excluded$b = ["children", "classNames", "hidden"];
17273
17281
  function createAutocompletePanelComponent(_ref) {
17274
17282
  var createElement = _ref.createElement;
17275
17283
  return function AutocompletePanel(userProps) {
17276
17284
  var children = userProps.children,
17277
17285
  _userProps$classNames = userProps.classNames,
17278
17286
  classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
17287
+ hidden = userProps.hidden,
17279
17288
  props = _objectWithoutProperties$1(userProps, _excluded$b);
17280
17289
  return createElement("div", _extends$1({}, props, {
17281
- className: cx('ais-AutocompletePanel', classNames.root, props.className)
17290
+ "aria-hidden": hidden,
17291
+ className: cx('ais-AutocompletePanel', !hidden && 'ais-AutocompletePanel--open', classNames.root, props.className),
17292
+ onMouseDown: function onMouseDown(event) {
17293
+ // Prevents the autocomplete panel from blurring the input when
17294
+ // clicking inside the panel.
17295
+ event.preventDefault();
17296
+ }
17282
17297
  }), createElement("div", {
17283
17298
  className: cx('ais-AutocompletePanelLayout', classNames.layout)
17284
17299
  }, children));
@@ -17427,25 +17442,21 @@
17427
17442
 
17428
17443
  var _slicedToArray$1 = unwrapExports(slicedToArray);
17429
17444
 
17430
- function AutocompleteSubmitIcon(_ref) {
17445
+ function SubmitIcon(_ref) {
17431
17446
  var createElement = _ref.createElement;
17432
17447
  return createElement("svg", {
17433
17448
  className: "ais-AutocompleteSubmitIcon",
17434
17449
  viewBox: "0 0 24 24",
17435
- width: "20",
17436
- height: "20",
17437
17450
  fill: "currentColor"
17438
17451
  }, createElement("path", {
17439
17452
  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"
17440
17453
  }));
17441
17454
  }
17442
- function AutocompleteLoadingIcon(_ref2) {
17455
+ function LoadingIcon(_ref2) {
17443
17456
  var createElement = _ref2.createElement;
17444
17457
  return createElement("svg", {
17445
17458
  className: "ais-AutocompleteLoadingIcon",
17446
- viewBox: "0 0 100 100",
17447
- width: "20",
17448
- height: "20"
17459
+ viewBox: "0 0 100 100"
17449
17460
  }, createElement("circle", {
17450
17461
  cx: "50",
17451
17462
  cy: "50",
@@ -17463,19 +17474,17 @@
17463
17474
  keyTimes: "0;0.40;0.65;1"
17464
17475
  })));
17465
17476
  }
17466
- function AutocompleteClearIcon(_ref3) {
17477
+ function ClearIcon(_ref3) {
17467
17478
  var createElement = _ref3.createElement;
17468
17479
  return createElement("svg", {
17469
17480
  className: "ais-AutocompleteClearIcon",
17470
17481
  viewBox: "0 0 24 24",
17471
- width: "18",
17472
- height: "18",
17473
17482
  fill: "currentColor"
17474
17483
  }, createElement("path", {
17475
17484
  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"
17476
17485
  }));
17477
17486
  }
17478
- function AutocompleteClockIcon(_ref4) {
17487
+ function ClockIcon(_ref4) {
17479
17488
  var createElement = _ref4.createElement;
17480
17489
  return createElement("svg", {
17481
17490
  viewBox: "0 0 24 24",
@@ -17484,7 +17493,7 @@
17484
17493
  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"
17485
17494
  }));
17486
17495
  }
17487
- function AutocompleteTrashIcon(_ref5) {
17496
+ function TrashIcon(_ref5) {
17488
17497
  var createElement = _ref5.createElement;
17489
17498
  return createElement("svg", {
17490
17499
  viewBox: "0 0 24 24",
@@ -17498,6 +17507,7 @@
17498
17507
  var createElement = _ref.createElement;
17499
17508
  return function AutocompleteRecentSearch(_ref2) {
17500
17509
  var item = _ref2.item,
17510
+ children = _ref2.children,
17501
17511
  onSelect = _ref2.onSelect,
17502
17512
  onRemoveRecentSearch = _ref2.onRemoveRecentSearch,
17503
17513
  _ref2$classNames = _ref2.classNames,
@@ -17509,11 +17519,11 @@
17509
17519
  className: cx('ais-AutocompleteItemContent', 'ais-AutocompleteRecentSearchItemContent', classNames.content)
17510
17520
  }, createElement("div", {
17511
17521
  className: cx('ais-AutocompleteItemIcon', 'ais-AutocompleteRecentSearchItemIcon', classNames.content)
17512
- }, createElement(AutocompleteClockIcon, {
17522
+ }, createElement(ClockIcon, {
17513
17523
  createElement: createElement
17514
17524
  })), createElement("div", {
17515
17525
  className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompleteRecentSearchItemContentBody', classNames.content)
17516
- }, item.query)), createElement("div", {
17526
+ }, children)), createElement("div", {
17517
17527
  className: cx('ais-AutocompleteItemActions', 'ais-AutocompleteRecentSearchItemActions', classNames.actions)
17518
17528
  }, createElement("button", {
17519
17529
  className: cx('ais-AutocompleteItemActionButton', 'ais-AutocompleteRecentSearchItemDeleteButton', classNames.deleteButton),
@@ -17522,7 +17532,7 @@
17522
17532
  evt.stopPropagation();
17523
17533
  onRemoveRecentSearch();
17524
17534
  }
17525
- }, createElement(AutocompleteTrashIcon, {
17535
+ }, createElement(TrashIcon, {
17526
17536
  createElement: createElement
17527
17537
  }))));
17528
17538
  };
@@ -17535,6 +17545,7 @@
17535
17545
  onClear = _ref2.onClear,
17536
17546
  query = _ref2.query,
17537
17547
  isSearchStalled = _ref2.isSearchStalled;
17548
+ var inputRef = inputProps.ref;
17538
17549
  return createElement("form", {
17539
17550
  className: "ais-AutocompleteForm",
17540
17551
  action: "",
@@ -17542,6 +17553,10 @@
17542
17553
  role: "search",
17543
17554
  onSubmit: function onSubmit(e) {
17544
17555
  return e.preventDefault();
17556
+ },
17557
+ onReset: function onReset() {
17558
+ var _inputRef$current;
17559
+ return (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
17545
17560
  }
17546
17561
  }, createElement("div", {
17547
17562
  className: "ais-AutocompleteInputWrapperPrefix"
@@ -17554,12 +17569,12 @@
17554
17569
  className: "ais-AutocompleteSubmitButton",
17555
17570
  type: "submit",
17556
17571
  title: "Submit"
17557
- }, createElement(AutocompleteSubmitIcon, {
17572
+ }, createElement(SubmitIcon, {
17558
17573
  createElement: createElement
17559
17574
  }))), createElement("div", {
17560
17575
  className: "ais-AutocompleteLoadingIndicator",
17561
17576
  hidden: !isSearchStalled
17562
- }, createElement(AutocompleteLoadingIcon, {
17577
+ }, createElement(LoadingIcon, {
17563
17578
  createElement: createElement
17564
17579
  }))), createElement("div", {
17565
17580
  className: "ais-AutocompleteInputWrapper"
@@ -17572,7 +17587,6 @@
17572
17587
  autoCapitalize: "off",
17573
17588
  enterKeyHint: "search",
17574
17589
  spellCheck: "false",
17575
- placeholder: "",
17576
17590
  maxLength: 512,
17577
17591
  type: "search",
17578
17592
  value: query
@@ -17584,7 +17598,7 @@
17584
17598
  title: "Clear",
17585
17599
  hidden: query.length === 0 || isSearchStalled,
17586
17600
  onClick: onClear
17587
- }, createElement(AutocompleteClearIcon, {
17601
+ }, createElement(ClearIcon, {
17588
17602
  createElement: createElement
17589
17603
  }))));
17590
17604
  };
@@ -17593,7 +17607,7 @@
17593
17607
  function createAutocompleteSuggestionComponent(_ref) {
17594
17608
  var createElement = _ref.createElement;
17595
17609
  return function AutocompleteSuggestion(_ref2) {
17596
- var item = _ref2.item,
17610
+ var children = _ref2.children,
17597
17611
  onSelect = _ref2.onSelect,
17598
17612
  _ref2$classNames = _ref2.classNames,
17599
17613
  classNames = _ref2$classNames === void 0 ? {} : _ref2$classNames;
@@ -17604,11 +17618,11 @@
17604
17618
  className: cx('ais-AutocompleteItemContent', 'ais-AutocompleteSuggestionItemContent', classNames.content)
17605
17619
  }, createElement("div", {
17606
17620
  className: cx('ais-AutocompleteItemIcon', 'ais-AutocompleteSuggestionItemIcon', classNames.content)
17607
- }, createElement(AutocompleteSubmitIcon, {
17621
+ }, createElement(SubmitIcon, {
17608
17622
  createElement: createElement
17609
17623
  })), createElement("div", {
17610
17624
  className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompleteSuggestionItemContentBody', classNames.content)
17611
- }, item.query)));
17625
+ }, children)));
17612
17626
  };
17613
17627
  }
17614
17628
 
@@ -17622,8 +17636,10 @@
17622
17636
  var indices = _ref2.indices,
17623
17637
  indicesConfig = _ref2.indicesConfig,
17624
17638
  onRefine = _ref2.onRefine,
17625
- globalOnSelect = _ref2.onSelect;
17639
+ globalOnSelect = _ref2.onSelect,
17640
+ placeholder = _ref2.placeholder;
17626
17641
  var getElementId = createGetElementId(useId());
17642
+ var inputRef = useRef(null);
17627
17643
  var rootRef = useRef(null);
17628
17644
  var _useState = useState(false),
17629
17645
  _useState2 = _slicedToArray$1(_useState, 2),
@@ -17655,7 +17671,7 @@
17655
17671
  document.body.removeEventListener('click', onBodyClick);
17656
17672
  };
17657
17673
  }, [rootRef]);
17658
- var getNextActiveDescendent = function getNextActiveDescendent(key) {
17674
+ var getNextActiveDescendant = function getNextActiveDescendant(key) {
17659
17675
  switch (key) {
17660
17676
  case 'ArrowLeft':
17661
17677
  case 'ArrowUp':
@@ -17674,11 +17690,21 @@
17674
17690
  }
17675
17691
  };
17676
17692
  var submit = function submit() {
17677
- var actualActiveDescendant = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : activeDescendant;
17678
- setIsOpen(false);
17679
- if (actualActiveDescendant && items.has(actualActiveDescendant)) {
17693
+ var _override$activeDesce;
17694
+ var override = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
17695
+ if (isOpen) {
17696
+ setIsOpen(false);
17697
+ } else {
17698
+ var _inputRef$current;
17699
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.blur();
17700
+ }
17701
+ var actualDescendant = (_override$activeDesce = override.activeDescendant) !== null && _override$activeDesce !== void 0 ? _override$activeDesce : activeDescendant;
17702
+ if (!actualDescendant && override.query) {
17703
+ onRefine(override.query);
17704
+ }
17705
+ if (actualDescendant && items.has(actualDescendant)) {
17680
17706
  var _getQuery;
17681
- var _ref3 = items.get(actualActiveDescendant),
17707
+ var _ref3 = items.get(actualDescendant),
17682
17708
  _item = _ref3.item,
17683
17709
  _ref3$config = _ref3.config,
17684
17710
  indexOnSelect = _ref3$config.onSelect,
@@ -17700,43 +17726,54 @@
17700
17726
  getInputProps: function getInputProps() {
17701
17727
  return {
17702
17728
  id: getElementId('input'),
17729
+ ref: inputRef,
17703
17730
  role: 'combobox',
17704
17731
  'aria-autocomplete': 'list',
17705
17732
  'aria-expanded': isOpen,
17706
17733
  'aria-haspopup': 'grid',
17707
17734
  'aria-controls': getElementId('panel'),
17708
17735
  'aria-activedescendant': activeDescendant,
17736
+ placeholder: placeholder,
17709
17737
  onFocus: function onFocus() {
17710
17738
  return setIsOpen(true);
17711
17739
  },
17712
17740
  onKeyDown: function onKeyDown(event) {
17713
- if (event.key === 'Escape') {
17714
- setActiveDescendant(undefined);
17715
- setIsOpen(false);
17716
- return;
17717
- }
17718
17741
  switch (event.key) {
17742
+ case 'Escape':
17743
+ {
17744
+ if (isOpen) {
17745
+ setIsOpen(false);
17746
+ event.preventDefault();
17747
+ } else {
17748
+ setActiveDescendant(undefined);
17749
+ }
17750
+ break;
17751
+ }
17719
17752
  case 'ArrowLeft':
17720
17753
  case 'ArrowUp':
17721
17754
  case 'ArrowRight':
17722
17755
  case 'ArrowDown':
17723
17756
  {
17724
17757
  var _document$getElementB;
17725
- var nextActiveDescendent = getNextActiveDescendent(event.key);
17726
- setActiveDescendant(nextActiveDescendent);
17727
- (_document$getElementB = document.getElementById(nextActiveDescendent)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.scrollIntoView(false);
17758
+ setIsOpen(true);
17759
+ var nextActiveDescendant = getNextActiveDescendant(event.key);
17760
+ setActiveDescendant(nextActiveDescendant);
17761
+ (_document$getElementB = document.getElementById(nextActiveDescendant)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.scrollIntoView(false);
17728
17762
  event.preventDefault();
17729
17763
  break;
17730
17764
  }
17731
17765
  case 'Enter':
17732
17766
  {
17733
- submit();
17767
+ submit({
17768
+ query: event.target.value
17769
+ });
17734
17770
  break;
17735
17771
  }
17736
17772
  case 'Tab':
17737
17773
  setIsOpen(false);
17738
17774
  break;
17739
17775
  default:
17776
+ setIsOpen(true);
17740
17777
  return;
17741
17778
  }
17742
17779
  },
@@ -17764,7 +17801,9 @@
17764
17801
  role: 'row',
17765
17802
  'aria-selected': id === activeDescendant,
17766
17803
  onSelect: function onSelect() {
17767
- return submit(id);
17804
+ return submit({
17805
+ activeDescendant: id
17806
+ });
17768
17807
  }
17769
17808
  };
17770
17809
  },
@@ -17905,7 +17944,13 @@
17905
17944
  return {
17906
17945
  objectID: value,
17907
17946
  query: value,
17908
- __indexName: 'recent-searches'
17947
+ __indexName: 'recent-searches',
17948
+ _highlightResult: getHighlightedAttribute({
17949
+ item: {
17950
+ query: value
17951
+ },
17952
+ query: query || ''
17953
+ })
17909
17954
  };
17910
17955
  });
17911
17956
  var indicesForPropGetters = _toConsumableArray$1(indices);
@@ -17941,6 +17986,24 @@
17941
17986
  return false;
17942
17987
  }
17943
17988
  }
17989
+ function getHighlightedAttribute(_ref3) {
17990
+ var item = _ref3.item,
17991
+ query = _ref3.query;
17992
+ if (!query.trim().length) {
17993
+ return {
17994
+ query: {
17995
+ matchLevel: 'none'
17996
+ }
17997
+ };
17998
+ }
17999
+ return {
18000
+ query: {
18001
+ value: item.query.replace(new RegExp(query.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'), 'gi'), function (match) {
18002
+ return "<mark>".concat(match, "</mark>");
18003
+ })
18004
+ }
18005
+ };
18006
+ }
17944
18007
  function getLocalStorage() {
17945
18008
  var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : LOCAL_STORAGE_KEY;
17946
18009
  if (!isLocalStorageSupported()) {
@@ -17965,10 +18028,10 @@
17965
18028
  }
17966
18029
  };
17967
18030
  }
17968
- function createStorage(_ref3) {
17969
- var _ref3$limit = _ref3.limit,
17970
- limit = _ref3$limit === void 0 ? 5 : _ref3$limit,
17971
- storageKey = _ref3.storageKey;
18031
+ function createStorage(_ref4) {
18032
+ var _ref4$limit = _ref4.limit,
18033
+ limit = _ref4$limit === void 0 ? 5 : _ref4$limit,
18034
+ storageKey = _ref4.storageKey;
17972
18035
  var storage = getLocalStorage(storageKey);
17973
18036
  var updateListener = null;
17974
18037
  return {
@@ -18141,9 +18204,9 @@
18141
18204
  Fragment: Fragment
18142
18205
  }) : _userProps$itemCompon,
18143
18206
  _userProps$previousIc = userProps.previousIconComponent,
18144
- PreviousIconComponent = _userProps$previousIc === void 0 ? PreviousIconDefaultComponent : _userProps$previousIc,
18207
+ PreviousIcon = _userProps$previousIc === void 0 ? PreviousIconDefaultComponent : _userProps$previousIc,
18145
18208
  _userProps$nextIconCo = userProps.nextIconComponent,
18146
- NextIconComponent = _userProps$nextIconCo === void 0 ? NextIconDefaultComponent : _userProps$nextIconCo,
18209
+ NextIcon = _userProps$nextIconCo === void 0 ? NextIconDefaultComponent : _userProps$nextIconCo,
18147
18210
  HeaderComponent = userProps.headerComponent,
18148
18211
  _userProps$showNaviga = userProps.showNavigation,
18149
18212
  showNavigation = _userProps$showNaviga === void 0 ? true : _userProps$showNaviga,
@@ -18212,7 +18275,7 @@
18212
18275
  event.preventDefault();
18213
18276
  scrollLeft();
18214
18277
  }
18215
- }, createElement(PreviousIconComponent, {
18278
+ }, createElement(PreviousIcon, {
18216
18279
  createElement: createElement
18217
18280
  })), createElement("ol", {
18218
18281
  className: cx(cssClasses.list),
@@ -18258,7 +18321,7 @@
18258
18321
  event.preventDefault();
18259
18322
  scrollRight();
18260
18323
  }
18261
- }, createElement(NextIconComponent, {
18324
+ }, createElement(NextIcon, {
18262
18325
  createElement: createElement
18263
18326
  })));
18264
18327
  };
@@ -20401,7 +20464,12 @@
20401
20464
  rendererParams.renderState = {
20402
20465
  indexTemplateProps: [],
20403
20466
  isolatedIndex: isolatedIndex,
20404
- targetIndex: targetIndex
20467
+ targetIndex: targetIndex,
20468
+ templateProps: prepareTemplateProps({
20469
+ defaultTemplates: {},
20470
+ templatesConfig: connectorParams.instantSearchInstance.templatesConfig,
20471
+ templates: rendererParams.templates
20472
+ })
20405
20473
  };
20406
20474
  connectorParams.refine((_targetIndex$getHelpe = (_targetIndex$getHelpe2 = targetIndex.getHelper()) === null || _targetIndex$getHelpe2 === void 0 ? void 0 : _targetIndex$getHelpe2.state.query) !== null && _targetIndex$getHelpe !== void 0 ? _targetIndex$getHelpe : '');
20407
20475
  return;
@@ -20415,11 +20483,14 @@
20415
20483
  indices = _ref.indices,
20416
20484
  getSearchPageURL = _ref.getSearchPageURL,
20417
20485
  userOnSelect = _ref.onSelect,
20418
- refine = _ref.refine,
20486
+ refineAutocomplete = _ref.refine,
20419
20487
  cssClasses = _ref.cssClasses,
20420
20488
  renderState = _ref.renderState,
20421
20489
  instantSearchInstance = _ref.instantSearchInstance,
20422
- showRecent = _ref.showRecent;
20490
+ showRecent = _ref.showRecent,
20491
+ showSuggestions = _ref.showSuggestions,
20492
+ templates = _ref.templates,
20493
+ placeholder = _ref.placeholder;
20423
20494
  var isolatedIndex = renderState.isolatedIndex,
20424
20495
  targetIndex = renderState.targetIndex;
20425
20496
  var searchboxQuery = isolatedIndex === null || isolatedIndex === void 0 ? void 0 : (_isolatedIndex$getHel = isolatedIndex.getHelper()) === null || _isolatedIndex$getHel === void 0 ? void 0 : _isolatedIndex$getHel.state.query;
@@ -20438,6 +20509,7 @@
20438
20509
  return ['ais.hits', 'ais.infiniteHits'].includes($$type);
20439
20510
  })) !== null && _targetIndex$getWidge !== void 0 ? _targetIndex$getWidge : false;
20440
20511
  var onRefine = function onRefine(query) {
20512
+ refineAutocomplete(query);
20441
20513
  instantSearchInstance.setUiState(function (uiState) {
20442
20514
  var _objectSpread2$1;
20443
20515
  return _objectSpread2(_objectSpread2({}, uiState), {}, (_objectSpread2$1 = {}, _defineProperty(_objectSpread2$1, targetIndex.getIndexId(), _objectSpread2(_objectSpread2({}, uiState[targetIndex.getIndexId()]), {}, {
@@ -20468,23 +20540,35 @@
20468
20540
  return;
20469
20541
  }
20470
20542
  setQuery(query);
20471
- }
20543
+ },
20544
+ placeholder: placeholder
20472
20545
  }),
20473
20546
  getInputProps = _usePropGetters.getInputProps,
20474
20547
  getItemProps = _usePropGetters.getItemProps,
20475
20548
  getPanelProps = _usePropGetters.getPanelProps,
20476
20549
  getRootProps = _usePropGetters.getRootProps;
20477
- var AutocompleteRecentSearchComponent = AutocompleteRecentSearch;
20550
+ var AutocompleteRecentSearchComponent = function AutocompleteRecentSearchComponent(_ref4) {
20551
+ var item = _ref4.item,
20552
+ onSelect = _ref4.onSelect,
20553
+ onRemoveRecentSearch = _ref4.onRemoveRecentSearch;
20554
+ return h(AutocompleteRecentSearch, {
20555
+ item: item,
20556
+ onSelect: onSelect,
20557
+ onRemoveRecentSearch: onRemoveRecentSearch
20558
+ }, h(ConditionalReverseHighlight, {
20559
+ item: item
20560
+ }));
20561
+ };
20478
20562
  if (_typeof(showRecent) === 'object' && (_showRecent$templates = showRecent.templates) !== null && _showRecent$templates !== void 0 && _showRecent$templates.item) {
20479
20563
  var props = prepareTemplateProps({
20480
20564
  defaultTemplates: {},
20481
20565
  templatesConfig: instantSearchInstance.templatesConfig,
20482
20566
  templates: showRecent.templates
20483
20567
  });
20484
- AutocompleteRecentSearchComponent = function AutocompleteRecentSearchComponent(_ref4) {
20485
- var item = _ref4.item,
20486
- onSelect = _ref4.onSelect,
20487
- onRemoveRecentSearch = _ref4.onRemoveRecentSearch;
20568
+ AutocompleteRecentSearchComponent = function AutocompleteRecentSearchComponent(_ref5) {
20569
+ var item = _ref5.item,
20570
+ onSelect = _ref5.onSelect,
20571
+ onRemoveRecentSearch = _ref5.onRemoveRecentSearch;
20488
20572
  return h(Template, _extends({}, props, {
20489
20573
  templateKey: "item",
20490
20574
  rootTagName: "fragment",
@@ -20496,45 +20580,36 @@
20496
20580
  }));
20497
20581
  };
20498
20582
  }
20499
- return h(Autocomplete, _extends({}, getRootProps(), {
20500
- classNames: cssClasses
20501
- }), h(AutocompleteSearchBox, {
20502
- query: searchboxQuery || '',
20503
- inputProps: _objectSpread2(_objectSpread2({}, getInputProps()), {}, {
20504
- // @ts-ignore - This clashes with some ambient React JSX declarations.
20505
- onInput: function onInput(evt) {
20506
- return refine(evt.currentTarget.value);
20507
- }
20508
- }),
20509
- onClear: function onClear() {
20510
- return onRefine('');
20511
- },
20512
- isSearchStalled: instantSearchInstance.status === 'stalled'
20513
- }), h(AutocompletePanel, getPanelProps(), showRecent && h(AutocompleteIndex
20514
- // @ts-ignore - there seems to be problems with React.ComponentType and this, but it's actually correct
20515
- , {
20516
- ItemComponent: function ItemComponent(_ref5) {
20517
- var item = _ref5.item,
20518
- onSelect = _ref5.onSelect;
20519
- return h(AutocompleteRecentSearchComponent, {
20520
- item: item,
20521
- onSelect: onSelect,
20522
- onRemoveRecentSearch: function onRemoveRecentSearch() {
20523
- return storage.onRemove(item.query);
20524
- }
20525
- });
20526
- },
20527
- classNames: {
20528
- root: 'ais-AutocompleteRecentSearches',
20529
- list: 'ais-AutocompleteRecentSearchesList',
20530
- item: 'ais-AutocompleteRecentSearchesItem'
20531
- },
20532
- items: storageHits,
20533
- getItemProps: getItemProps
20534
- }), indices.map(function (_ref6, i) {
20583
+ var elements = {};
20584
+ if (showRecent) {
20585
+ elements.recent = h(AutocompleteIndex
20586
+ // @ts-ignore - there seems to be problems with React.ComponentType and this, but it's actually correct
20587
+ , {
20588
+ ItemComponent: function ItemComponent(_ref6) {
20589
+ var item = _ref6.item,
20590
+ onSelect = _ref6.onSelect;
20591
+ return h(AutocompleteRecentSearchComponent, {
20592
+ item: item,
20593
+ onSelect: onSelect,
20594
+ onRemoveRecentSearch: function onRemoveRecentSearch() {
20595
+ return storage.onRemove(item.query);
20596
+ }
20597
+ });
20598
+ },
20599
+ classNames: {
20600
+ root: 'ais-AutocompleteRecentSearches',
20601
+ list: 'ais-AutocompleteRecentSearchesList',
20602
+ item: 'ais-AutocompleteRecentSearchesItem'
20603
+ },
20604
+ items: storageHits,
20605
+ getItemProps: getItemProps
20606
+ });
20607
+ }
20608
+ indices.forEach(function (_ref7, i) {
20535
20609
  var _indicesConfig$i$temp;
20536
- var indexId = _ref6.indexId,
20537
- hits = _ref6.hits;
20610
+ var indexId = _ref7.indexId,
20611
+ indexName = _ref7.indexName,
20612
+ hits = _ref7.hits;
20538
20613
  if (!renderState.indexTemplateProps[i]) {
20539
20614
  renderState.indexTemplateProps[i] = prepareTemplateProps({
20540
20615
  defaultTemplates: {},
@@ -20542,8 +20617,8 @@
20542
20617
  templates: indicesConfig[i].templates
20543
20618
  });
20544
20619
  }
20545
- var headerComponent = (_indicesConfig$i$temp = indicesConfig[i].templates) !== null && _indicesConfig$i$temp !== void 0 && _indicesConfig$i$temp.header ? function (_ref7) {
20546
- var items = _ref7.items;
20620
+ var headerComponent = (_indicesConfig$i$temp = indicesConfig[i].templates) !== null && _indicesConfig$i$temp !== void 0 && _indicesConfig$i$temp.header ? function (_ref8) {
20621
+ var items = _ref8.items;
20547
20622
  return h(Template, _extends({}, renderState.indexTemplateProps[i], {
20548
20623
  templateKey: "header",
20549
20624
  rootTagName: "fragment",
@@ -20552,9 +20627,9 @@
20552
20627
  }
20553
20628
  }));
20554
20629
  } : undefined;
20555
- var itemComponent = function itemComponent(_ref8) {
20556
- var item = _ref8.item,
20557
- onSelect = _ref8.onSelect;
20630
+ var itemComponent = function itemComponent(_ref9) {
20631
+ var item = _ref9.item,
20632
+ onSelect = _ref9.onSelect;
20558
20633
  return h(Template, _extends({}, renderState.indexTemplateProps[i], {
20559
20634
  templateKey: "item",
20560
20635
  rootTagName: "fragment",
@@ -20564,11 +20639,17 @@
20564
20639
  }
20565
20640
  }));
20566
20641
  };
20567
- return h(AutocompleteIndex, {
20642
+ var elementId = indexName === (showSuggestions === null || showSuggestions === void 0 ? void 0 : showSuggestions.indexName) ? 'suggestions' : indexName;
20643
+ var filteredHits = elementId === 'suggestions' && showRecent ? hits.filter(function (suggestionHit) {
20644
+ return !find(storageHits, function (storageHit) {
20645
+ return storageHit.query === suggestionHit.query;
20646
+ });
20647
+ }) : hits;
20648
+ elements[elementId] = h(AutocompleteIndex, {
20568
20649
  key: indexId,
20569
20650
  HeaderComponent: headerComponent,
20570
20651
  ItemComponent: itemComponent,
20571
- items: hits.map(function (item) {
20652
+ items: filteredHits.map(function (item) {
20572
20653
  return _objectSpread2(_objectSpread2({}, item), {}, {
20573
20654
  __indexName: indexId
20574
20655
  });
@@ -20576,26 +20657,55 @@
20576
20657
  getItemProps: getItemProps,
20577
20658
  classNames: indicesConfig[i].cssClasses
20578
20659
  });
20660
+ });
20661
+ return h(Autocomplete, _extends({}, getRootProps(), {
20662
+ classNames: cssClasses
20663
+ }), h(AutocompleteSearchBox, {
20664
+ query: searchboxQuery || '',
20665
+ inputProps: _objectSpread2(_objectSpread2({}, getInputProps()), {}, {
20666
+ // @ts-ignore - This clashes with some ambient React JSX declarations.
20667
+ onInput: function onInput(evt) {
20668
+ return refineAutocomplete(evt.currentTarget.value);
20669
+ }
20670
+ }),
20671
+ onClear: function onClear() {
20672
+ onRefine('');
20673
+ },
20674
+ isSearchStalled: instantSearchInstance.status === 'stalled'
20675
+ }), h(AutocompletePanel, getPanelProps(), templates.panel ? h(Template, _extends({}, renderState.templateProps, {
20676
+ templateKey: "panel",
20677
+ rootTagName: "fragment",
20678
+ data: {
20679
+ elements: elements,
20680
+ indices: indices
20681
+ }
20682
+ })) : Object.keys(elements).map(function (elementId) {
20683
+ return elements[elementId];
20579
20684
  })));
20580
20685
  }
20581
20686
  function EXPERIMENTAL_autocomplete(widgetParams) {
20582
- var _ref9 = widgetParams || {},
20583
- container = _ref9.container,
20584
- escapeHTML = _ref9.escapeHTML,
20585
- _ref9$indices = _ref9.indices,
20586
- indices = _ref9$indices === void 0 ? [] : _ref9$indices,
20587
- showSuggestions = _ref9.showSuggestions,
20588
- showRecent = _ref9.showRecent,
20589
- getSearchPageURL = _ref9.getSearchPageURL,
20590
- onSelect = _ref9.onSelect,
20591
- _ref9$templates = _ref9.templates,
20592
- templates = _ref9$templates === void 0 ? {} : _ref9$templates,
20593
- _ref9$cssClasses = _ref9.cssClasses,
20594
- userCssClasses = _ref9$cssClasses === void 0 ? {} : _ref9$cssClasses;
20687
+ var _ref0 = widgetParams || {},
20688
+ container = _ref0.container,
20689
+ escapeHTML = _ref0.escapeHTML,
20690
+ _ref0$indices = _ref0.indices,
20691
+ indices = _ref0$indices === void 0 ? [] : _ref0$indices,
20692
+ showSuggestions = _ref0.showSuggestions,
20693
+ showRecent = _ref0.showRecent,
20694
+ userSearchParameters = _ref0.searchParameters,
20695
+ getSearchPageURL = _ref0.getSearchPageURL,
20696
+ onSelect = _ref0.onSelect,
20697
+ _ref0$templates = _ref0.templates,
20698
+ templates = _ref0$templates === void 0 ? {} : _ref0$templates,
20699
+ _ref0$cssClasses = _ref0.cssClasses,
20700
+ userCssClasses = _ref0$cssClasses === void 0 ? {} : _ref0$cssClasses,
20701
+ placeholder = _ref0.placeholder;
20595
20702
  if (!container) {
20596
20703
  throw new Error(withUsage$z('The `container` option is required.'));
20597
20704
  }
20598
20705
  var containerNode = getContainerNode(container);
20706
+ var searchParameters = _objectSpread2({
20707
+ hitsPerPage: 5
20708
+ }, userSearchParameters);
20599
20709
  var cssClasses = {
20600
20710
  root: cx(suit$6(), userCssClasses.root)
20601
20711
  };
@@ -20606,7 +20716,16 @@
20606
20716
  indexName: showSuggestions.indexName,
20607
20717
  templates: _objectSpread2({
20608
20718
  // @ts-expect-error
20609
- item: AutocompleteSuggestion
20719
+ item: function item(_ref1) {
20720
+ var _item = _ref1.item,
20721
+ onSelectItem = _ref1.onSelect;
20722
+ return h(AutocompleteSuggestion, {
20723
+ item: _item,
20724
+ onSelect: onSelectItem
20725
+ }, h(ConditionalReverseHighlight, {
20726
+ item: _item
20727
+ }));
20728
+ }
20610
20729
  }, showSuggestions.templates),
20611
20730
  cssClasses: {
20612
20731
  root: cx('ais-AutocompleteSuggestions', (_showSuggestions$cssC = showSuggestions.cssClasses) === null || _showSuggestions$cssC === void 0 ? void 0 : _showSuggestions$cssC.root),
@@ -20629,10 +20748,13 @@
20629
20748
  onSelect: onSelect,
20630
20749
  cssClasses: cssClasses,
20631
20750
  showRecent: showRecent,
20751
+ showSuggestions: showSuggestions,
20752
+ placeholder: placeholder,
20632
20753
  renderState: {
20633
20754
  indexTemplateProps: [],
20634
20755
  isolatedIndex: undefined,
20635
- targetIndex: undefined
20756
+ targetIndex: undefined,
20757
+ templateProps: undefined
20636
20758
  },
20637
20759
  templates: templates
20638
20760
  });
@@ -20644,20 +20766,32 @@
20644
20766
  })({}), index({
20645
20767
  indexId: "ais-autocomplete-".concat(instanceId),
20646
20768
  EXPERIMENTAL_isolated: true
20647
- }).addWidgets([].concat(_toConsumableArray(indicesConfig.map(function (_ref0) {
20648
- var indexName = _ref0.indexName;
20769
+ }).addWidgets([configure(searchParameters)].concat(_toConsumableArray(indicesConfig.map(function (_ref10) {
20770
+ var indexName = _ref10.indexName,
20771
+ indexSearchParameters = _ref10.searchParameters;
20649
20772
  return index({
20650
20773
  indexName: indexName,
20651
20774
  indexId: indexName
20652
- }).addWidgets([configure({
20653
- hitsPerPage: 5
20654
- })]);
20775
+ }).addWidgets([configure(indexSearchParameters || {})]);
20655
20776
  })), [_objectSpread2(_objectSpread2({}, makeWidget({
20656
20777
  escapeHTML: escapeHTML
20657
20778
  })), {}, {
20658
20779
  $$widgetType: 'ais.autocomplete'
20659
20780
  })]))];
20660
20781
  }
20782
+ function ConditionalReverseHighlight(_ref11) {
20783
+ var _item$_highlightResul;
20784
+ var item = _ref11.item;
20785
+ if (!((_item$_highlightResul = item._highlightResult) !== null && _item$_highlightResul !== void 0 && _item$_highlightResul.query) ||
20786
+ // @ts-expect-error - we should not have matchLevel as arrays here
20787
+ item._highlightResult.query.matchLevel === 'none') {
20788
+ return item.query;
20789
+ }
20790
+ return h(ReverseHighlight$1, {
20791
+ attribute: "query",
20792
+ hit: item
20793
+ });
20794
+ }
20661
20795
 
20662
20796
  var Breadcrumb = function Breadcrumb(_ref) {
20663
20797
  var items = _ref.items,