instantsearch.js 4.82.0 → 4.84.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.82.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
1
+ /*! InstantSearch.js 4.84.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) :
@@ -6277,8 +6277,8 @@
6277
6277
 
6278
6278
  return recSort(
6279
6279
  function (data, facetName) {
6280
+ var facetOrdering = getFacetOrdering(results, facetName);
6280
6281
  if (options.facetOrdering) {
6281
- var facetOrdering = getFacetOrdering(results, facetName);
6282
6282
  if (facetOrdering) {
6283
6283
  return sortViaFacetOrdering(data, facetOrdering);
6284
6284
  }
@@ -6286,7 +6286,24 @@
6286
6286
 
6287
6287
  if (Array.isArray(options.sortBy)) {
6288
6288
  var order = formatSort(options.sortBy, SearchResults.DEFAULT_SORT);
6289
- return orderBy_1(data, order[0], order[1]);
6289
+ var items = orderBy_1(data, order[0], order[1]);
6290
+
6291
+ var hide =
6292
+ facetOrdering && facetOrdering.hide ? facetOrdering.hide : [];
6293
+ if (hide.length > 0) {
6294
+ var visible = [];
6295
+ items.forEach(function (item) {
6296
+ // hierarchical facets get sorted using their raw name
6297
+ var name = item.path || item.name;
6298
+ if (hide.indexOf(name) === -1) {
6299
+ visible.push(item);
6300
+ }
6301
+ });
6302
+
6303
+ return visible;
6304
+ }
6305
+
6306
+ return items;
6290
6307
  } else if (typeof options.sortBy === 'function') {
6291
6308
  return vanillaSortFn(options.sortBy, data);
6292
6309
  }
@@ -6551,7 +6568,7 @@
6551
6568
 
6552
6569
  var sortAndMergeRecommendations_1 = sortAndMergeRecommendations;
6553
6570
 
6554
- var version = '3.26.0';
6571
+ var version = '3.26.1';
6555
6572
 
6556
6573
  var escapeFacetValue$4 = escapeFacetValue_1.escapeFacetValue;
6557
6574
 
@@ -7004,16 +7021,19 @@
7004
7021
 
7005
7022
  content = Array.isArray(content) ? content[0] : content;
7006
7023
 
7007
- content.facetHits.forEach(function (f, i) {
7024
+ content.facetHits = content.facetHits.reduce(function (acc, f) {
7008
7025
  if (hide.indexOf(f.value) > -1) {
7009
- content.facetHits.splice(i, 1);
7010
- return;
7026
+ return acc;
7011
7027
  }
7028
+
7012
7029
  f.escapedValue = escapeFacetValue$4(f.value);
7013
7030
  f.isRefined = isDisjunctive
7014
7031
  ? state.isDisjunctiveFacetRefined(facet, f.escapedValue)
7015
7032
  : state.isFacetRefined(facet, f.escapedValue);
7016
- });
7033
+
7034
+ acc.push(f);
7035
+ return acc;
7036
+ }, []);
7017
7037
 
7018
7038
  return content;
7019
7039
  },
@@ -15916,6 +15936,12 @@
15916
15936
  helper: helper
15917
15937
  })));
15918
15938
  },
15939
+ scheduleLocalSearch: defer(function () {
15940
+ if (isolated) {
15941
+ var _helper2;
15942
+ (_helper2 = helper) === null || _helper2 === void 0 ? void 0 : _helper2.search();
15943
+ }
15944
+ }),
15919
15945
  getWidgets: function getWidgets() {
15920
15946
  return localWidgets;
15921
15947
  },
@@ -15981,8 +16007,7 @@
15981
16007
  }
15982
16008
  });
15983
16009
  if (isolated) {
15984
- var _helper2;
15985
- (_helper2 = helper) === null || _helper2 === void 0 ? void 0 : _helper2.search();
16010
+ this.scheduleLocalSearch();
15986
16011
  } else {
15987
16012
  localInstantSearchInstance.scheduleSearch();
15988
16013
  }
@@ -16061,8 +16086,7 @@
16061
16086
  helper.recommendState = cleanedRecommendState;
16062
16087
  if (localWidgets.length) {
16063
16088
  if (isolated) {
16064
- var _helper3;
16065
- (_helper3 = helper) === null || _helper3 === void 0 ? void 0 : _helper3.search();
16089
+ this.scheduleLocalSearch();
16066
16090
  } else {
16067
16091
  localInstantSearchInstance.scheduleSearch();
16068
16092
  }
@@ -16134,12 +16158,6 @@
16134
16158
  helper.searchWithoutTriggeringOnStateChange = function () {
16135
16159
  return mainHelper.search();
16136
16160
  };
16137
-
16138
- // We use the same pattern for the `searchForFacetValues`.
16139
- helper.searchForFacetValues = function (facetName, facetValue, maxFacetHits, userState) {
16140
- var state = helper.state.setQueryParameters(userState);
16141
- return mainHelper.searchForFacetValues(facetName, facetValue, maxFacetHits, state);
16142
- };
16143
16161
  var isolatedHelper = indexName ? helper : algoliasearchHelper_1({}, '__empty_index__', {});
16144
16162
  var derivingHelper = isolated ? isolatedHelper : nearestIsolatedHelper(parent, mainHelper);
16145
16163
  derivedHelper = derivingHelper.derive(function () {
@@ -16322,7 +16340,7 @@
16322
16340
  },
16323
16341
  dispose: function dispose() {
16324
16342
  var _this5 = this,
16325
- _helper4,
16343
+ _helper3,
16326
16344
  _derivedHelper3;
16327
16345
  localWidgets.forEach(function (widget) {
16328
16346
  if (widget.dispose && helper) {
@@ -16342,7 +16360,7 @@
16342
16360
  });
16343
16361
  localInstantSearchInstance = null;
16344
16362
  localParent = null;
16345
- (_helper4 = helper) === null || _helper4 === void 0 ? void 0 : _helper4.removeAllListeners();
16363
+ (_helper3 = helper) === null || _helper3 === void 0 ? void 0 : _helper3.removeAllListeners();
16346
16364
  helper = null;
16347
16365
  (_derivedHelper3 = derivedHelper) === null || _derivedHelper3 === void 0 ? void 0 : _derivedHelper3.detach();
16348
16366
  derivedHelper = null;
@@ -16468,7 +16486,7 @@
16468
16486
  };
16469
16487
  }
16470
16488
 
16471
- var version$1 = '4.82.0';
16489
+ var version$1 = '4.84.0';
16472
16490
 
16473
16491
  var withUsage$v = createDocumentationMessageGenerator({
16474
16492
  name: 'instantsearch'
@@ -17271,117 +17289,6 @@
17271
17289
  };
17272
17290
  }
17273
17291
 
17274
- function AutocompleteSubmitIcon(_ref) {
17275
- var createElement = _ref.createElement;
17276
- return createElement("svg", {
17277
- className: "ais-AutocompleteSubmitIcon",
17278
- viewBox: "0 0 24 24",
17279
- width: "20",
17280
- height: "20",
17281
- fill: "currentColor"
17282
- }, createElement("path", {
17283
- 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"
17284
- }));
17285
- }
17286
- function AutocompleteLoadingIcon(_ref2) {
17287
- var createElement = _ref2.createElement;
17288
- return createElement("svg", {
17289
- className: "ais-AutocompleteLoadingIcon",
17290
- viewBox: "0 0 100 100",
17291
- width: "20",
17292
- height: "20"
17293
- }, createElement("circle", {
17294
- cx: "50",
17295
- cy: "50",
17296
- fill: "none",
17297
- r: "35",
17298
- stroke: "currentColor",
17299
- strokeDasharray: "164.93361431346415 56.97787143782138",
17300
- strokeWidth: "6"
17301
- }, createElement("animateTransform", {
17302
- attributeName: "transform",
17303
- type: "rotate",
17304
- repeatCount: "indefinite",
17305
- dur: "1s",
17306
- values: "0 50 50;90 50 50;180 50 50;360 50 50",
17307
- keyTimes: "0;0.40;0.65;1"
17308
- })));
17309
- }
17310
- function AutocompleteClearIcon(_ref3) {
17311
- var createElement = _ref3.createElement;
17312
- return createElement("svg", {
17313
- className: "ais-AutocompleteClearIcon",
17314
- viewBox: "0 0 24 24",
17315
- width: "18",
17316
- height: "18",
17317
- fill: "currentColor"
17318
- }, createElement("path", {
17319
- 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"
17320
- }));
17321
- }
17322
-
17323
- function createAutocompleteSearchComponent(_ref) {
17324
- var createElement = _ref.createElement;
17325
- return function AutocompleteSearch(_ref2) {
17326
- var inputProps = _ref2.inputProps,
17327
- onClear = _ref2.onClear,
17328
- query = _ref2.query,
17329
- isSearchStalled = _ref2.isSearchStalled;
17330
- return createElement("form", {
17331
- className: "ais-AutocompleteForm",
17332
- action: "",
17333
- noValidate: true,
17334
- role: "search",
17335
- onSubmit: function onSubmit(e) {
17336
- return e.preventDefault();
17337
- }
17338
- }, createElement("div", {
17339
- className: "ais-AutocompleteInputWrapperPrefix"
17340
- }, createElement("label", {
17341
- className: "ais-AutocompleteLabel",
17342
- "aria-label": "Submit",
17343
- htmlFor: inputProps.id,
17344
- id: "".concat(inputProps.id, "-label")
17345
- }, createElement("button", {
17346
- className: "ais-AutocompleteSubmitButton",
17347
- type: "submit",
17348
- title: "Submit"
17349
- }, createElement(AutocompleteSubmitIcon, {
17350
- createElement: createElement
17351
- }))), createElement("div", {
17352
- className: "ais-AutocompleteLoadingIndicator",
17353
- hidden: !isSearchStalled
17354
- }, createElement(AutocompleteLoadingIcon, {
17355
- createElement: createElement
17356
- }))), createElement("div", {
17357
- className: "ais-AutocompleteInputWrapper"
17358
- }, createElement("input", _extends$1({
17359
- className: "ais-AutocompleteInput",
17360
- "aria-autocomplete": "both",
17361
- "aria-labelledby": "".concat(inputProps.id, "-label"),
17362
- autoComplete: "off",
17363
- autoCorrect: "off",
17364
- autoCapitalize: "off",
17365
- enterKeyHint: "search",
17366
- spellCheck: "false",
17367
- placeholder: "",
17368
- maxLength: 512,
17369
- type: "search",
17370
- value: query
17371
- }, inputProps))), createElement("div", {
17372
- className: "ais-AutocompleteInputWrapperSuffix"
17373
- }, createElement("button", {
17374
- className: "ais-AutocompleteClearButton",
17375
- type: "reset",
17376
- title: "Clear",
17377
- hidden: query.length === 0 || isSearchStalled,
17378
- onClick: onClear
17379
- }, createElement(AutocompleteClearIcon, {
17380
- createElement: createElement
17381
- }))));
17382
- };
17383
- }
17384
-
17385
17292
  var _typeof_1 = createCommonjsModule(function (module) {
17386
17293
  function _typeof(o) {
17387
17294
  "@babel/helpers - typeof";
@@ -17524,17 +17431,194 @@
17524
17431
 
17525
17432
  var _slicedToArray$1 = unwrapExports(slicedToArray);
17526
17433
 
17434
+ function AutocompleteSubmitIcon(_ref) {
17435
+ var createElement = _ref.createElement;
17436
+ return createElement("svg", {
17437
+ className: "ais-AutocompleteSubmitIcon",
17438
+ viewBox: "0 0 24 24",
17439
+ width: "20",
17440
+ height: "20",
17441
+ fill: "currentColor"
17442
+ }, createElement("path", {
17443
+ 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"
17444
+ }));
17445
+ }
17446
+ function AutocompleteLoadingIcon(_ref2) {
17447
+ var createElement = _ref2.createElement;
17448
+ return createElement("svg", {
17449
+ className: "ais-AutocompleteLoadingIcon",
17450
+ viewBox: "0 0 100 100",
17451
+ width: "20",
17452
+ height: "20"
17453
+ }, createElement("circle", {
17454
+ cx: "50",
17455
+ cy: "50",
17456
+ fill: "none",
17457
+ r: "35",
17458
+ stroke: "currentColor",
17459
+ strokeDasharray: "164.93361431346415 56.97787143782138",
17460
+ strokeWidth: "6"
17461
+ }, createElement("animateTransform", {
17462
+ attributeName: "transform",
17463
+ type: "rotate",
17464
+ repeatCount: "indefinite",
17465
+ dur: "1s",
17466
+ values: "0 50 50;90 50 50;180 50 50;360 50 50",
17467
+ keyTimes: "0;0.40;0.65;1"
17468
+ })));
17469
+ }
17470
+ function AutocompleteClearIcon(_ref3) {
17471
+ var createElement = _ref3.createElement;
17472
+ return createElement("svg", {
17473
+ className: "ais-AutocompleteClearIcon",
17474
+ viewBox: "0 0 24 24",
17475
+ width: "18",
17476
+ height: "18",
17477
+ fill: "currentColor"
17478
+ }, createElement("path", {
17479
+ 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"
17480
+ }));
17481
+ }
17482
+ function AutocompleteClockIcon(_ref4) {
17483
+ var createElement = _ref4.createElement;
17484
+ return createElement("svg", {
17485
+ viewBox: "0 0 24 24",
17486
+ fill: "currentColor"
17487
+ }, createElement("path", {
17488
+ 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"
17489
+ }));
17490
+ }
17491
+ function AutocompleteTrashIcon(_ref5) {
17492
+ var createElement = _ref5.createElement;
17493
+ return createElement("svg", {
17494
+ viewBox: "0 0 24 24",
17495
+ fill: "currentColor"
17496
+ }, createElement("path", {
17497
+ 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"
17498
+ }));
17499
+ }
17500
+
17501
+ function createAutocompleteRecentSearchComponent(_ref) {
17502
+ var createElement = _ref.createElement;
17503
+ return function AutocompleteRecentSearch(_ref2) {
17504
+ var item = _ref2.item,
17505
+ children = _ref2.children,
17506
+ onSelect = _ref2.onSelect,
17507
+ onRemoveRecentSearch = _ref2.onRemoveRecentSearch,
17508
+ _ref2$classNames = _ref2.classNames,
17509
+ classNames = _ref2$classNames === void 0 ? {} : _ref2$classNames;
17510
+ return createElement("div", {
17511
+ onClick: onSelect,
17512
+ className: cx('ais-AutocompleteItemWrapper ais-AutocompleteRecentSearchWrapper', classNames.root)
17513
+ }, createElement("div", {
17514
+ className: cx('ais-AutocompleteItemContent', 'ais-AutocompleteRecentSearchItemContent', classNames.content)
17515
+ }, createElement("div", {
17516
+ className: cx('ais-AutocompleteItemIcon', 'ais-AutocompleteRecentSearchItemIcon', classNames.content)
17517
+ }, createElement(AutocompleteClockIcon, {
17518
+ createElement: createElement
17519
+ })), createElement("div", {
17520
+ className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompleteRecentSearchItemContentBody', classNames.content)
17521
+ }, children)), createElement("div", {
17522
+ className: cx('ais-AutocompleteItemActions', 'ais-AutocompleteRecentSearchItemActions', classNames.actions)
17523
+ }, createElement("button", {
17524
+ className: cx('ais-AutocompleteItemActionButton', 'ais-AutocompleteRecentSearchItemDeleteButton', classNames.deleteButton),
17525
+ title: "Remove ".concat(item.query, " from recent searches"),
17526
+ onClick: function onClick(evt) {
17527
+ evt.stopPropagation();
17528
+ onRemoveRecentSearch();
17529
+ }
17530
+ }, createElement(AutocompleteTrashIcon, {
17531
+ createElement: createElement
17532
+ }))));
17533
+ };
17534
+ }
17535
+
17536
+ function createAutocompleteSearchComponent(_ref) {
17537
+ var createElement = _ref.createElement;
17538
+ return function AutocompleteSearch(_ref2) {
17539
+ var inputProps = _ref2.inputProps,
17540
+ onClear = _ref2.onClear,
17541
+ query = _ref2.query,
17542
+ isSearchStalled = _ref2.isSearchStalled;
17543
+ var inputRef = inputProps.ref;
17544
+ return createElement("form", {
17545
+ className: "ais-AutocompleteForm",
17546
+ action: "",
17547
+ noValidate: true,
17548
+ role: "search",
17549
+ onSubmit: function onSubmit(e) {
17550
+ return e.preventDefault();
17551
+ },
17552
+ onReset: function onReset() {
17553
+ var _inputRef$current;
17554
+ return (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
17555
+ }
17556
+ }, createElement("div", {
17557
+ className: "ais-AutocompleteInputWrapperPrefix"
17558
+ }, createElement("label", {
17559
+ className: "ais-AutocompleteLabel",
17560
+ "aria-label": "Submit",
17561
+ htmlFor: inputProps.id,
17562
+ id: "".concat(inputProps.id, "-label")
17563
+ }, createElement("button", {
17564
+ className: "ais-AutocompleteSubmitButton",
17565
+ type: "submit",
17566
+ title: "Submit"
17567
+ }, createElement(AutocompleteSubmitIcon, {
17568
+ createElement: createElement
17569
+ }))), createElement("div", {
17570
+ className: "ais-AutocompleteLoadingIndicator",
17571
+ hidden: !isSearchStalled
17572
+ }, createElement(AutocompleteLoadingIcon, {
17573
+ createElement: createElement
17574
+ }))), createElement("div", {
17575
+ className: "ais-AutocompleteInputWrapper"
17576
+ }, createElement("input", _extends$1({
17577
+ className: "ais-AutocompleteInput",
17578
+ "aria-autocomplete": "both",
17579
+ "aria-labelledby": "".concat(inputProps.id, "-label"),
17580
+ autoComplete: "off",
17581
+ autoCorrect: "off",
17582
+ autoCapitalize: "off",
17583
+ enterKeyHint: "search",
17584
+ spellCheck: "false",
17585
+ placeholder: "",
17586
+ maxLength: 512,
17587
+ type: "search",
17588
+ value: query
17589
+ }, inputProps))), createElement("div", {
17590
+ className: "ais-AutocompleteInputWrapperSuffix"
17591
+ }, createElement("button", {
17592
+ className: "ais-AutocompleteClearButton",
17593
+ type: "reset",
17594
+ title: "Clear",
17595
+ hidden: query.length === 0 || isSearchStalled,
17596
+ onClick: onClear
17597
+ }, createElement(AutocompleteClearIcon, {
17598
+ createElement: createElement
17599
+ }))));
17600
+ };
17601
+ }
17602
+
17527
17603
  function createAutocompleteSuggestionComponent(_ref) {
17528
17604
  var createElement = _ref.createElement;
17529
17605
  return function AutocompleteSuggestion(_ref2) {
17530
- var item = _ref2.item,
17606
+ var children = _ref2.children,
17531
17607
  onSelect = _ref2.onSelect,
17532
17608
  _ref2$classNames = _ref2.classNames,
17533
17609
  classNames = _ref2$classNames === void 0 ? {} : _ref2$classNames;
17534
17610
  return createElement("div", {
17535
17611
  onClick: onSelect,
17536
- className: cx('ais-AutocompleteSuggestion', classNames.root)
17537
- }, item.query);
17612
+ className: cx('ais-AutocompleteItemWrapper', 'ais-AutocompleteSuggestionWrapper', classNames.root)
17613
+ }, createElement("div", {
17614
+ className: cx('ais-AutocompleteItemContent', 'ais-AutocompleteSuggestionItemContent', classNames.content)
17615
+ }, createElement("div", {
17616
+ className: cx('ais-AutocompleteItemIcon', 'ais-AutocompleteSuggestionItemIcon', classNames.content)
17617
+ }, createElement(AutocompleteSubmitIcon, {
17618
+ createElement: createElement
17619
+ })), createElement("div", {
17620
+ className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompleteSuggestionItemContentBody', classNames.content)
17621
+ }, children)));
17538
17622
  };
17539
17623
  }
17540
17624
 
@@ -17550,6 +17634,7 @@
17550
17634
  onRefine = _ref2.onRefine,
17551
17635
  globalOnSelect = _ref2.onSelect;
17552
17636
  var getElementId = createGetElementId(useId());
17637
+ var inputRef = useRef(null);
17553
17638
  var rootRef = useRef(null);
17554
17639
  var _useState = useState(false),
17555
17640
  _useState2 = _slicedToArray$1(_useState, 2),
@@ -17581,7 +17666,7 @@
17581
17666
  document.body.removeEventListener('click', onBodyClick);
17582
17667
  };
17583
17668
  }, [rootRef]);
17584
- var getNextActiveDescendent = function getNextActiveDescendent(key) {
17669
+ var getNextActiveDescendant = function getNextActiveDescendant(key) {
17585
17670
  switch (key) {
17586
17671
  case 'ArrowLeft':
17587
17672
  case 'ArrowUp':
@@ -17600,11 +17685,21 @@
17600
17685
  }
17601
17686
  };
17602
17687
  var submit = function submit() {
17603
- var actualActiveDescendant = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : activeDescendant;
17604
- setIsOpen(false);
17605
- if (actualActiveDescendant && items.has(actualActiveDescendant)) {
17688
+ var _override$activeDesce;
17689
+ var override = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
17690
+ if (isOpen) {
17691
+ setIsOpen(false);
17692
+ } else {
17693
+ var _inputRef$current;
17694
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.blur();
17695
+ }
17696
+ var actualDescendant = (_override$activeDesce = override.activeDescendant) !== null && _override$activeDesce !== void 0 ? _override$activeDesce : activeDescendant;
17697
+ if (!actualDescendant && override.query) {
17698
+ onRefine(override.query);
17699
+ }
17700
+ if (actualDescendant && items.has(actualDescendant)) {
17606
17701
  var _getQuery;
17607
- var _ref3 = items.get(actualActiveDescendant),
17702
+ var _ref3 = items.get(actualDescendant),
17608
17703
  _item = _ref3.item,
17609
17704
  _ref3$config = _ref3.config,
17610
17705
  indexOnSelect = _ref3$config.onSelect,
@@ -17626,6 +17721,7 @@
17626
17721
  getInputProps: function getInputProps() {
17627
17722
  return {
17628
17723
  id: getElementId('input'),
17724
+ ref: inputRef,
17629
17725
  role: 'combobox',
17630
17726
  'aria-autocomplete': 'list',
17631
17727
  'aria-expanded': isOpen,
@@ -17636,33 +17732,42 @@
17636
17732
  return setIsOpen(true);
17637
17733
  },
17638
17734
  onKeyDown: function onKeyDown(event) {
17639
- if (event.key === 'Escape') {
17640
- setActiveDescendant(undefined);
17641
- setIsOpen(false);
17642
- return;
17643
- }
17644
17735
  switch (event.key) {
17736
+ case 'Escape':
17737
+ {
17738
+ if (isOpen) {
17739
+ setIsOpen(false);
17740
+ event.preventDefault();
17741
+ } else {
17742
+ setActiveDescendant(undefined);
17743
+ }
17744
+ break;
17745
+ }
17645
17746
  case 'ArrowLeft':
17646
17747
  case 'ArrowUp':
17647
17748
  case 'ArrowRight':
17648
17749
  case 'ArrowDown':
17649
17750
  {
17650
17751
  var _document$getElementB;
17651
- var nextActiveDescendent = getNextActiveDescendent(event.key);
17652
- setActiveDescendant(nextActiveDescendent);
17653
- (_document$getElementB = document.getElementById(nextActiveDescendent)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.scrollIntoView(false);
17752
+ setIsOpen(true);
17753
+ var nextActiveDescendant = getNextActiveDescendant(event.key);
17754
+ setActiveDescendant(nextActiveDescendant);
17755
+ (_document$getElementB = document.getElementById(nextActiveDescendant)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.scrollIntoView(false);
17654
17756
  event.preventDefault();
17655
17757
  break;
17656
17758
  }
17657
17759
  case 'Enter':
17658
17760
  {
17659
- submit();
17761
+ submit({
17762
+ query: event.target.value
17763
+ });
17660
17764
  break;
17661
17765
  }
17662
17766
  case 'Tab':
17663
17767
  setIsOpen(false);
17664
17768
  break;
17665
17769
  default:
17770
+ setIsOpen(true);
17666
17771
  return;
17667
17772
  }
17668
17773
  },
@@ -17690,7 +17795,9 @@
17690
17795
  role: 'row',
17691
17796
  'aria-selected': id === activeDescendant,
17692
17797
  onSelect: function onSelect() {
17693
- return submit(id);
17798
+ return submit({
17799
+ activeDescendant: id
17800
+ });
17694
17801
  }
17695
17802
  };
17696
17803
  },
@@ -17752,6 +17859,206 @@
17752
17859
  : ref.current; // React
17753
17860
  }
17754
17861
 
17862
+ var arrayWithoutHoles = createCommonjsModule(function (module) {
17863
+ function _arrayWithoutHoles(r) {
17864
+ if (Array.isArray(r)) return arrayLikeToArray(r);
17865
+ }
17866
+ module.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
17867
+ });
17868
+
17869
+ unwrapExports(arrayWithoutHoles);
17870
+
17871
+ var iterableToArray = createCommonjsModule(function (module) {
17872
+ function _iterableToArray(r) {
17873
+ if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
17874
+ }
17875
+ module.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
17876
+ });
17877
+
17878
+ unwrapExports(iterableToArray);
17879
+
17880
+ var nonIterableSpread = createCommonjsModule(function (module) {
17881
+ function _nonIterableSpread() {
17882
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
17883
+ }
17884
+ module.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports;
17885
+ });
17886
+
17887
+ unwrapExports(nonIterableSpread);
17888
+
17889
+ var toConsumableArray = createCommonjsModule(function (module) {
17890
+ function _toConsumableArray(r) {
17891
+ return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();
17892
+ }
17893
+ module.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
17894
+ });
17895
+
17896
+ var _toConsumableArray$1 = unwrapExports(toConsumableArray);
17897
+
17898
+ function createAutocompleteStorage(_ref) {
17899
+ var useEffect = _ref.useEffect,
17900
+ useMemo = _ref.useMemo,
17901
+ useState = _ref.useState;
17902
+ return function useStorage(_ref2) {
17903
+ var showRecent = _ref2.showRecent,
17904
+ query = _ref2.query,
17905
+ indices = _ref2.indices,
17906
+ indicesConfig = _ref2.indicesConfig;
17907
+ var storageKey = showRecent && _typeof$1(showRecent) === 'object' ? showRecent.storageKey : undefined;
17908
+ var storage = useMemo(function () {
17909
+ return createStorage({
17910
+ limit: 5,
17911
+ storageKey: storageKey
17912
+ });
17913
+ }, [storageKey]);
17914
+ var _useState = useState(storage.getSnapshot()),
17915
+ _useState2 = _slicedToArray$1(_useState, 2),
17916
+ snapshot = _useState2[0],
17917
+ setSnapshot = _useState2[1];
17918
+ useEffect(function () {
17919
+ storage.registerUpdateListener(function () {
17920
+ setSnapshot(storage.getSnapshot());
17921
+ });
17922
+ return function () {
17923
+ storage.unregisterUpdateListener();
17924
+ };
17925
+ }, [storage]);
17926
+ if (!showRecent) {
17927
+ return {
17928
+ storage: {
17929
+ onAdd: function onAdd() {},
17930
+ onRemove: function onRemove() {}
17931
+ },
17932
+ storageHits: [],
17933
+ indicesForPropGetters: indices,
17934
+ indicesConfigForPropGetters: indicesConfig
17935
+ };
17936
+ }
17937
+ var storageHits = snapshot.getAll(query).map(function (value) {
17938
+ return {
17939
+ objectID: value,
17940
+ query: value,
17941
+ __indexName: 'recent-searches',
17942
+ _highlightResult: getHighlightedAttribute({
17943
+ item: {
17944
+ query: value
17945
+ },
17946
+ query: query || ''
17947
+ })
17948
+ };
17949
+ });
17950
+ var indicesForPropGetters = _toConsumableArray$1(indices);
17951
+ var indicesConfigForPropGetters = _toConsumableArray$1(indicesConfig);
17952
+ indicesForPropGetters.unshift({
17953
+ indexName: 'recent-searches',
17954
+ indexId: 'recent-searches',
17955
+ hits: storageHits
17956
+ });
17957
+ indicesConfigForPropGetters.unshift({
17958
+ indexName: 'recent-searches',
17959
+ // @ts-expect-error - we know it has query as it's generated from storageHits
17960
+ getQuery: function getQuery(item) {
17961
+ return item.query;
17962
+ }
17963
+ });
17964
+ return {
17965
+ storage: storage,
17966
+ storageHits: storageHits,
17967
+ indicesForPropGetters: indicesForPropGetters,
17968
+ indicesConfigForPropGetters: indicesConfigForPropGetters
17969
+ };
17970
+ };
17971
+ }
17972
+ var LOCAL_STORAGE_KEY_TEST = 'test-localstorage-support';
17973
+ var LOCAL_STORAGE_KEY = 'autocomplete-recent-searches';
17974
+ function isLocalStorageSupported() {
17975
+ try {
17976
+ localStorage.setItem(LOCAL_STORAGE_KEY_TEST, '');
17977
+ localStorage.removeItem(LOCAL_STORAGE_KEY_TEST);
17978
+ return true;
17979
+ } catch (error) {
17980
+ return false;
17981
+ }
17982
+ }
17983
+ function getHighlightedAttribute(_ref3) {
17984
+ var item = _ref3.item,
17985
+ query = _ref3.query;
17986
+ if (!query.trim().length) {
17987
+ return {
17988
+ query: {
17989
+ matchLevel: 'none'
17990
+ }
17991
+ };
17992
+ }
17993
+ return {
17994
+ query: {
17995
+ value: item.query.replace(new RegExp(query.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'), 'gi'), function (match) {
17996
+ return "<mark>".concat(match, "</mark>");
17997
+ })
17998
+ }
17999
+ };
18000
+ }
18001
+ function getLocalStorage() {
18002
+ var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : LOCAL_STORAGE_KEY;
18003
+ if (!isLocalStorageSupported()) {
18004
+ return {
18005
+ setItems: function setItems() {},
18006
+ getItems: function getItems() {
18007
+ return [];
18008
+ }
18009
+ };
18010
+ }
18011
+ return {
18012
+ setItems: function setItems(items) {
18013
+ try {
18014
+ window.localStorage.setItem(key, JSON.stringify(items));
18015
+ } catch (_unused) {
18016
+ // do nothing, this likely means the storage is full
18017
+ }
18018
+ },
18019
+ getItems: function getItems() {
18020
+ var items = window.localStorage.getItem(key);
18021
+ return items ? JSON.parse(items) : [];
18022
+ }
18023
+ };
18024
+ }
18025
+ function createStorage(_ref4) {
18026
+ var _ref4$limit = _ref4.limit,
18027
+ limit = _ref4$limit === void 0 ? 5 : _ref4$limit,
18028
+ storageKey = _ref4.storageKey;
18029
+ var storage = getLocalStorage(storageKey);
18030
+ var updateListener = null;
18031
+ return {
18032
+ onAdd: function onAdd(query) {
18033
+ this.onRemove(query);
18034
+ storage.setItems([query].concat(_toConsumableArray$1(storage.getItems())));
18035
+ },
18036
+ onRemove: function onRemove(query) {
18037
+ var _updateListener;
18038
+ storage.setItems(storage.getItems().filter(function (q) {
18039
+ return q !== query;
18040
+ }));
18041
+ (_updateListener = updateListener) === null || _updateListener === void 0 ? void 0 : _updateListener();
18042
+ },
18043
+ registerUpdateListener: function registerUpdateListener(callback) {
18044
+ updateListener = callback;
18045
+ },
18046
+ unregisterUpdateListener: function unregisterUpdateListener() {
18047
+ updateListener = null;
18048
+ },
18049
+ getSnapshot: function getSnapshot() {
18050
+ return {
18051
+ getAll: function getAll() {
18052
+ var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
18053
+ return storage.getItems().filter(function (q) {
18054
+ return q.includes(query);
18055
+ }).slice(0, limit);
18056
+ }
18057
+ };
18058
+ }
18059
+ };
18060
+ }
18061
+
17755
18062
  function createDefaultEmptyComponent(_ref) {
17756
18063
  var createElement = _ref.createElement,
17757
18064
  Fragment = _ref.Fragment;
@@ -20117,6 +20424,10 @@
20117
20424
  createElement: h,
20118
20425
  Fragment: p
20119
20426
  });
20427
+ var AutocompleteRecentSearch = createAutocompleteRecentSearchComponent({
20428
+ createElement: h,
20429
+ Fragment: p
20430
+ });
20120
20431
  var usePropGetters = createAutocompletePropGetters({
20121
20432
  useEffect: s$1,
20122
20433
  useId: b$1,
@@ -20124,12 +20435,18 @@
20124
20435
  useRef: A$1,
20125
20436
  useState: y$1
20126
20437
  });
20438
+ var useStorage = createAutocompleteStorage({
20439
+ useEffect: s$1,
20440
+ useState: y$1,
20441
+ useMemo: T$1
20442
+ });
20127
20443
  var createRenderer = function createRenderer(params) {
20128
20444
  var instanceId = params.instanceId,
20129
20445
  containerNode = params.containerNode,
20130
20446
  rendererParams = _objectWithoutProperties(params, _excluded$s);
20131
20447
  return function (connectorParams, isFirstRendering) {
20132
20448
  if (isFirstRendering) {
20449
+ var _targetIndex$getHelpe, _targetIndex$getHelpe2;
20133
20450
  var isolatedIndex = connectorParams.instantSearchInstance.mainIndex;
20134
20451
  var targetIndex = connectorParams.instantSearchInstance.mainIndex;
20135
20452
  walkIndex(targetIndex, function (childIndex) {
@@ -20141,15 +20458,21 @@
20141
20458
  rendererParams.renderState = {
20142
20459
  indexTemplateProps: [],
20143
20460
  isolatedIndex: isolatedIndex,
20144
- targetIndex: targetIndex
20461
+ targetIndex: targetIndex,
20462
+ templateProps: prepareTemplateProps({
20463
+ defaultTemplates: {},
20464
+ templatesConfig: connectorParams.instantSearchInstance.templatesConfig,
20465
+ templates: rendererParams.templates
20466
+ })
20145
20467
  };
20468
+ 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 : '');
20146
20469
  return;
20147
20470
  }
20148
20471
  P(h(AutocompleteWrapper, _extends({}, rendererParams, connectorParams)), containerNode);
20149
20472
  };
20150
20473
  };
20151
20474
  function AutocompleteWrapper(_ref) {
20152
- var _targetIndex$getWidge, _isolatedIndex$getHel;
20475
+ var _isolatedIndex$getHel, _targetIndex$getWidge, _showRecent$templates;
20153
20476
  var indicesConfig = _ref.indicesConfig,
20154
20477
  indices = _ref.indices,
20155
20478
  getSearchPageURL = _ref.getSearchPageURL,
@@ -20157,9 +20480,23 @@
20157
20480
  refine = _ref.refine,
20158
20481
  cssClasses = _ref.cssClasses,
20159
20482
  renderState = _ref.renderState,
20160
- instantSearchInstance = _ref.instantSearchInstance;
20483
+ instantSearchInstance = _ref.instantSearchInstance,
20484
+ showRecent = _ref.showRecent,
20485
+ showSuggestions = _ref.showSuggestions,
20486
+ templates = _ref.templates;
20161
20487
  var isolatedIndex = renderState.isolatedIndex,
20162
20488
  targetIndex = renderState.targetIndex;
20489
+ var searchboxQuery = isolatedIndex === null || isolatedIndex === void 0 ? void 0 : (_isolatedIndex$getHel = isolatedIndex.getHelper()) === null || _isolatedIndex$getHel === void 0 ? void 0 : _isolatedIndex$getHel.state.query;
20490
+ var _useStorage = useStorage({
20491
+ query: searchboxQuery,
20492
+ showRecent: showRecent,
20493
+ indices: indices,
20494
+ indicesConfig: indicesConfig
20495
+ }),
20496
+ storage = _useStorage.storage,
20497
+ storageHits = _useStorage.storageHits,
20498
+ indicesConfigForPropGetters = _useStorage.indicesConfigForPropGetters,
20499
+ indicesForPropGetters = _useStorage.indicesForPropGetters;
20163
20500
  var isSearchPage = (_targetIndex$getWidge = targetIndex === null || targetIndex === void 0 ? void 0 : targetIndex.getWidgets().some(function (_ref2) {
20164
20501
  var $$type = _ref2.$$type;
20165
20502
  return ['ais.hits', 'ais.infiniteHits'].includes($$type);
@@ -20173,10 +20510,11 @@
20173
20510
  query: query
20174
20511
  }), _objectSpread2$1));
20175
20512
  });
20513
+ query.length > 0 && storage.onAdd(query);
20176
20514
  };
20177
20515
  var _usePropGetters = usePropGetters({
20178
- indices: indices,
20179
- indicesConfig: indicesConfig,
20516
+ indices: indicesForPropGetters,
20517
+ indicesConfig: indicesConfigForPropGetters,
20180
20518
  onRefine: onRefine,
20181
20519
  onSelect: userOnSelect !== null && userOnSelect !== void 0 ? userOnSelect : function (_ref3) {
20182
20520
  var query = _ref3.query,
@@ -20200,25 +20538,69 @@
20200
20538
  getItemProps = _usePropGetters.getItemProps,
20201
20539
  getPanelProps = _usePropGetters.getPanelProps,
20202
20540
  getRootProps = _usePropGetters.getRootProps;
20203
- var query = isolatedIndex === null || isolatedIndex === void 0 ? void 0 : (_isolatedIndex$getHel = isolatedIndex.getHelper()) === null || _isolatedIndex$getHel === void 0 ? void 0 : _isolatedIndex$getHel.state.query;
20204
- return h(Autocomplete, _extends({}, getRootProps(), {
20205
- classNames: cssClasses
20206
- }), h(AutocompleteSearchBox, {
20207
- query: query || '',
20208
- inputProps: _objectSpread2(_objectSpread2({}, getInputProps()), {}, {
20209
- // @ts-ignore - This clashes with some ambient React JSX declarations.
20210
- onInput: function onInput(evt) {
20211
- return refine(evt.currentTarget.value);
20212
- }
20213
- }),
20214
- onClear: function onClear() {
20215
- return onRefine('');
20216
- },
20217
- isSearchStalled: instantSearchInstance.status === 'stalled'
20218
- }), h(AutocompletePanel, getPanelProps(), indices.map(function (_ref4, i) {
20541
+ var AutocompleteRecentSearchComponent = function AutocompleteRecentSearchComponent(_ref4) {
20542
+ var item = _ref4.item,
20543
+ onSelect = _ref4.onSelect,
20544
+ onRemoveRecentSearch = _ref4.onRemoveRecentSearch;
20545
+ return h(AutocompleteRecentSearch, {
20546
+ item: item,
20547
+ onSelect: onSelect,
20548
+ onRemoveRecentSearch: onRemoveRecentSearch
20549
+ }, h(ConditionalReverseHighlight, {
20550
+ item: item
20551
+ }));
20552
+ };
20553
+ if (_typeof(showRecent) === 'object' && (_showRecent$templates = showRecent.templates) !== null && _showRecent$templates !== void 0 && _showRecent$templates.item) {
20554
+ var props = prepareTemplateProps({
20555
+ defaultTemplates: {},
20556
+ templatesConfig: instantSearchInstance.templatesConfig,
20557
+ templates: showRecent.templates
20558
+ });
20559
+ AutocompleteRecentSearchComponent = function AutocompleteRecentSearchComponent(_ref5) {
20560
+ var item = _ref5.item,
20561
+ onSelect = _ref5.onSelect,
20562
+ onRemoveRecentSearch = _ref5.onRemoveRecentSearch;
20563
+ return h(Template, _extends({}, props, {
20564
+ templateKey: "item",
20565
+ rootTagName: "fragment",
20566
+ data: {
20567
+ item: item,
20568
+ onSelect: onSelect,
20569
+ onRemoveRecentSearch: onRemoveRecentSearch
20570
+ }
20571
+ }));
20572
+ };
20573
+ }
20574
+ var elements = {};
20575
+ if (showRecent) {
20576
+ elements.recent = h(AutocompleteIndex
20577
+ // @ts-ignore - there seems to be problems with React.ComponentType and this, but it's actually correct
20578
+ , {
20579
+ ItemComponent: function ItemComponent(_ref6) {
20580
+ var item = _ref6.item,
20581
+ onSelect = _ref6.onSelect;
20582
+ return h(AutocompleteRecentSearchComponent, {
20583
+ item: item,
20584
+ onSelect: onSelect,
20585
+ onRemoveRecentSearch: function onRemoveRecentSearch() {
20586
+ return storage.onRemove(item.query);
20587
+ }
20588
+ });
20589
+ },
20590
+ classNames: {
20591
+ root: 'ais-AutocompleteRecentSearches',
20592
+ list: 'ais-AutocompleteRecentSearchesList',
20593
+ item: 'ais-AutocompleteRecentSearchesItem'
20594
+ },
20595
+ items: storageHits,
20596
+ getItemProps: getItemProps
20597
+ });
20598
+ }
20599
+ indices.forEach(function (_ref7, i) {
20219
20600
  var _indicesConfig$i$temp;
20220
- var indexId = _ref4.indexId,
20221
- hits = _ref4.hits;
20601
+ var indexId = _ref7.indexId,
20602
+ indexName = _ref7.indexName,
20603
+ hits = _ref7.hits;
20222
20604
  if (!renderState.indexTemplateProps[i]) {
20223
20605
  renderState.indexTemplateProps[i] = prepareTemplateProps({
20224
20606
  defaultTemplates: {},
@@ -20226,8 +20608,8 @@
20226
20608
  templates: indicesConfig[i].templates
20227
20609
  });
20228
20610
  }
20229
- var headerComponent = (_indicesConfig$i$temp = indicesConfig[i].templates) !== null && _indicesConfig$i$temp !== void 0 && _indicesConfig$i$temp.header ? function (_ref5) {
20230
- var items = _ref5.items;
20611
+ var headerComponent = (_indicesConfig$i$temp = indicesConfig[i].templates) !== null && _indicesConfig$i$temp !== void 0 && _indicesConfig$i$temp.header ? function (_ref8) {
20612
+ var items = _ref8.items;
20231
20613
  return h(Template, _extends({}, renderState.indexTemplateProps[i], {
20232
20614
  templateKey: "header",
20233
20615
  rootTagName: "fragment",
@@ -20236,9 +20618,9 @@
20236
20618
  }
20237
20619
  }));
20238
20620
  } : undefined;
20239
- var itemComponent = function itemComponent(_ref6) {
20240
- var item = _ref6.item,
20241
- onSelect = _ref6.onSelect;
20621
+ var itemComponent = function itemComponent(_ref9) {
20622
+ var item = _ref9.item,
20623
+ onSelect = _ref9.onSelect;
20242
20624
  return h(Template, _extends({}, renderState.indexTemplateProps[i], {
20243
20625
  templateKey: "item",
20244
20626
  rootTagName: "fragment",
@@ -20248,7 +20630,8 @@
20248
20630
  }
20249
20631
  }));
20250
20632
  };
20251
- return h(AutocompleteIndex, {
20633
+ var elementId = indexName === (showSuggestions === null || showSuggestions === void 0 ? void 0 : showSuggestions.indexName) ? 'suggestions' : indexName;
20634
+ elements[elementId] = h(AutocompleteIndex, {
20252
20635
  key: indexId,
20253
20636
  HeaderComponent: headerComponent,
20254
20637
  ItemComponent: itemComponent,
@@ -20260,25 +20643,54 @@
20260
20643
  getItemProps: getItemProps,
20261
20644
  classNames: indicesConfig[i].cssClasses
20262
20645
  });
20646
+ });
20647
+ return h(Autocomplete, _extends({}, getRootProps(), {
20648
+ classNames: cssClasses
20649
+ }), h(AutocompleteSearchBox, {
20650
+ query: searchboxQuery || '',
20651
+ inputProps: _objectSpread2(_objectSpread2({}, getInputProps()), {}, {
20652
+ // @ts-ignore - This clashes with some ambient React JSX declarations.
20653
+ onInput: function onInput(evt) {
20654
+ return refine(evt.currentTarget.value);
20655
+ }
20656
+ }),
20657
+ onClear: function onClear() {
20658
+ return onRefine('');
20659
+ },
20660
+ isSearchStalled: instantSearchInstance.status === 'stalled'
20661
+ }), h(AutocompletePanel, getPanelProps(), templates.panel ? h(Template, _extends({}, renderState.templateProps, {
20662
+ templateKey: "panel",
20663
+ rootTagName: "fragment",
20664
+ data: {
20665
+ elements: elements,
20666
+ indices: indices
20667
+ }
20668
+ })) : Object.keys(elements).map(function (elementId) {
20669
+ return elements[elementId];
20263
20670
  })));
20264
20671
  }
20265
20672
  function EXPERIMENTAL_autocomplete(widgetParams) {
20266
- var _ref7 = widgetParams || {},
20267
- container = _ref7.container,
20268
- escapeHTML = _ref7.escapeHTML,
20269
- _ref7$indices = _ref7.indices,
20270
- indices = _ref7$indices === void 0 ? [] : _ref7$indices,
20271
- showSuggestions = _ref7.showSuggestions,
20272
- getSearchPageURL = _ref7.getSearchPageURL,
20273
- onSelect = _ref7.onSelect,
20274
- _ref7$templates = _ref7.templates,
20275
- templates = _ref7$templates === void 0 ? {} : _ref7$templates,
20276
- _ref7$cssClasses = _ref7.cssClasses,
20277
- userCssClasses = _ref7$cssClasses === void 0 ? {} : _ref7$cssClasses;
20673
+ var _ref0 = widgetParams || {},
20674
+ container = _ref0.container,
20675
+ escapeHTML = _ref0.escapeHTML,
20676
+ _ref0$indices = _ref0.indices,
20677
+ indices = _ref0$indices === void 0 ? [] : _ref0$indices,
20678
+ showSuggestions = _ref0.showSuggestions,
20679
+ showRecent = _ref0.showRecent,
20680
+ userSearchParameters = _ref0.searchParameters,
20681
+ getSearchPageURL = _ref0.getSearchPageURL,
20682
+ onSelect = _ref0.onSelect,
20683
+ _ref0$templates = _ref0.templates,
20684
+ templates = _ref0$templates === void 0 ? {} : _ref0$templates,
20685
+ _ref0$cssClasses = _ref0.cssClasses,
20686
+ userCssClasses = _ref0$cssClasses === void 0 ? {} : _ref0$cssClasses;
20278
20687
  if (!container) {
20279
20688
  throw new Error(withUsage$z('The `container` option is required.'));
20280
20689
  }
20281
20690
  var containerNode = getContainerNode(container);
20691
+ var searchParameters = _objectSpread2({
20692
+ hitsPerPage: 5
20693
+ }, userSearchParameters);
20282
20694
  var cssClasses = {
20283
20695
  root: cx(suit$6(), userCssClasses.root)
20284
20696
  };
@@ -20289,7 +20701,16 @@
20289
20701
  indexName: showSuggestions.indexName,
20290
20702
  templates: _objectSpread2({
20291
20703
  // @ts-expect-error
20292
- item: AutocompleteSuggestion
20704
+ item: function item(_ref1) {
20705
+ var _item = _ref1.item,
20706
+ onSelectItem = _ref1.onSelect;
20707
+ return h(AutocompleteSuggestion, {
20708
+ item: _item,
20709
+ onSelect: onSelectItem
20710
+ }, h(ConditionalReverseHighlight, {
20711
+ item: _item
20712
+ }));
20713
+ }
20293
20714
  }, showSuggestions.templates),
20294
20715
  cssClasses: {
20295
20716
  root: cx('ais-AutocompleteSuggestions', (_showSuggestions$cssC = showSuggestions.cssClasses) === null || _showSuggestions$cssC === void 0 ? void 0 : _showSuggestions$cssC.root),
@@ -20311,10 +20732,13 @@
20311
20732
  getSearchPageURL: getSearchPageURL,
20312
20733
  onSelect: onSelect,
20313
20734
  cssClasses: cssClasses,
20735
+ showRecent: showRecent,
20736
+ showSuggestions: showSuggestions,
20314
20737
  renderState: {
20315
20738
  indexTemplateProps: [],
20316
20739
  isolatedIndex: undefined,
20317
- targetIndex: undefined
20740
+ targetIndex: undefined,
20741
+ templateProps: undefined
20318
20742
  },
20319
20743
  templates: templates
20320
20744
  });
@@ -20326,20 +20750,32 @@
20326
20750
  })({}), index({
20327
20751
  indexId: "ais-autocomplete-".concat(instanceId),
20328
20752
  EXPERIMENTAL_isolated: true
20329
- }).addWidgets([configure({
20330
- hitsPerPage: 5
20331
- })].concat(_toConsumableArray(indicesConfig.map(function (_ref8) {
20332
- var indexName = _ref8.indexName;
20753
+ }).addWidgets([configure(searchParameters)].concat(_toConsumableArray(indicesConfig.map(function (_ref10) {
20754
+ var indexName = _ref10.indexName,
20755
+ indexSearchParameters = _ref10.searchParameters;
20333
20756
  return index({
20334
20757
  indexName: indexName,
20335
20758
  indexId: indexName
20336
- }).addWidgets([configure({})]);
20759
+ }).addWidgets([configure(indexSearchParameters || {})]);
20337
20760
  })), [_objectSpread2(_objectSpread2({}, makeWidget({
20338
20761
  escapeHTML: escapeHTML
20339
20762
  })), {}, {
20340
20763
  $$widgetType: 'ais.autocomplete'
20341
20764
  })]))];
20342
20765
  }
20766
+ function ConditionalReverseHighlight(_ref11) {
20767
+ var _item$_highlightResul;
20768
+ var item = _ref11.item;
20769
+ if (!((_item$_highlightResul = item._highlightResult) !== null && _item$_highlightResul !== void 0 && _item$_highlightResul.query) ||
20770
+ // @ts-expect-error - we should not have matchLevel as arrays here
20771
+ item._highlightResult.query.matchLevel === 'none') {
20772
+ return item.query;
20773
+ }
20774
+ return h(ReverseHighlight$1, {
20775
+ attribute: "query",
20776
+ hit: item
20777
+ });
20778
+ }
20343
20779
 
20344
20780
  var Breadcrumb = function Breadcrumb(_ref) {
20345
20781
  var items = _ref.items,