instantsearch.js 4.82.0 → 4.83.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.83.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
  },
@@ -16134,12 +16154,6 @@
16134
16154
  helper.searchWithoutTriggeringOnStateChange = function () {
16135
16155
  return mainHelper.search();
16136
16156
  };
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
16157
  var isolatedHelper = indexName ? helper : algoliasearchHelper_1({}, '__empty_index__', {});
16144
16158
  var derivingHelper = isolated ? isolatedHelper : nearestIsolatedHelper(parent, mainHelper);
16145
16159
  derivedHelper = derivingHelper.derive(function () {
@@ -16468,7 +16482,7 @@
16468
16482
  };
16469
16483
  }
16470
16484
 
16471
- var version$1 = '4.82.0';
16485
+ var version$1 = '4.83.0';
16472
16486
 
16473
16487
  var withUsage$v = createDocumentationMessageGenerator({
16474
16488
  name: 'instantsearch'
@@ -17271,117 +17285,6 @@
17271
17285
  };
17272
17286
  }
17273
17287
 
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
17288
  var _typeof_1 = createCommonjsModule(function (module) {
17386
17289
  function _typeof(o) {
17387
17290
  "@babel/helpers - typeof";
@@ -17524,6 +17427,169 @@
17524
17427
 
17525
17428
  var _slicedToArray$1 = unwrapExports(slicedToArray);
17526
17429
 
17430
+ function AutocompleteSubmitIcon(_ref) {
17431
+ var createElement = _ref.createElement;
17432
+ return createElement("svg", {
17433
+ className: "ais-AutocompleteSubmitIcon",
17434
+ viewBox: "0 0 24 24",
17435
+ width: "20",
17436
+ height: "20",
17437
+ fill: "currentColor"
17438
+ }, createElement("path", {
17439
+ 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
+ }));
17441
+ }
17442
+ function AutocompleteLoadingIcon(_ref2) {
17443
+ var createElement = _ref2.createElement;
17444
+ return createElement("svg", {
17445
+ className: "ais-AutocompleteLoadingIcon",
17446
+ viewBox: "0 0 100 100",
17447
+ width: "20",
17448
+ height: "20"
17449
+ }, createElement("circle", {
17450
+ cx: "50",
17451
+ cy: "50",
17452
+ fill: "none",
17453
+ r: "35",
17454
+ stroke: "currentColor",
17455
+ strokeDasharray: "164.93361431346415 56.97787143782138",
17456
+ strokeWidth: "6"
17457
+ }, createElement("animateTransform", {
17458
+ attributeName: "transform",
17459
+ type: "rotate",
17460
+ repeatCount: "indefinite",
17461
+ dur: "1s",
17462
+ values: "0 50 50;90 50 50;180 50 50;360 50 50",
17463
+ keyTimes: "0;0.40;0.65;1"
17464
+ })));
17465
+ }
17466
+ function AutocompleteClearIcon(_ref3) {
17467
+ var createElement = _ref3.createElement;
17468
+ return createElement("svg", {
17469
+ className: "ais-AutocompleteClearIcon",
17470
+ viewBox: "0 0 24 24",
17471
+ width: "18",
17472
+ height: "18",
17473
+ fill: "currentColor"
17474
+ }, createElement("path", {
17475
+ 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
+ }));
17477
+ }
17478
+ function AutocompleteClockIcon(_ref4) {
17479
+ var createElement = _ref4.createElement;
17480
+ return createElement("svg", {
17481
+ viewBox: "0 0 24 24",
17482
+ fill: "currentColor"
17483
+ }, createElement("path", {
17484
+ 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
+ }));
17486
+ }
17487
+ function AutocompleteTrashIcon(_ref5) {
17488
+ var createElement = _ref5.createElement;
17489
+ return createElement("svg", {
17490
+ viewBox: "0 0 24 24",
17491
+ fill: "currentColor"
17492
+ }, createElement("path", {
17493
+ 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"
17494
+ }));
17495
+ }
17496
+
17497
+ function createAutocompleteRecentSearchComponent(_ref) {
17498
+ var createElement = _ref.createElement;
17499
+ return function AutocompleteRecentSearch(_ref2) {
17500
+ var item = _ref2.item,
17501
+ onSelect = _ref2.onSelect,
17502
+ onRemoveRecentSearch = _ref2.onRemoveRecentSearch,
17503
+ _ref2$classNames = _ref2.classNames,
17504
+ classNames = _ref2$classNames === void 0 ? {} : _ref2$classNames;
17505
+ return createElement("div", {
17506
+ onClick: onSelect,
17507
+ className: cx('ais-AutocompleteItemWrapper ais-AutocompleteRecentSearchWrapper', classNames.root)
17508
+ }, createElement("div", {
17509
+ className: cx('ais-AutocompleteItemContent', 'ais-AutocompleteRecentSearchItemContent', classNames.content)
17510
+ }, createElement("div", {
17511
+ className: cx('ais-AutocompleteItemIcon', 'ais-AutocompleteRecentSearchItemIcon', classNames.content)
17512
+ }, createElement(AutocompleteClockIcon, {
17513
+ createElement: createElement
17514
+ })), createElement("div", {
17515
+ className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompleteRecentSearchItemContentBody', classNames.content)
17516
+ }, item.query)), createElement("div", {
17517
+ className: cx('ais-AutocompleteItemActions', 'ais-AutocompleteRecentSearchItemActions', classNames.actions)
17518
+ }, createElement("button", {
17519
+ className: cx('ais-AutocompleteItemActionButton', 'ais-AutocompleteRecentSearchItemDeleteButton', classNames.deleteButton),
17520
+ title: "Remove ".concat(item.query, " from recent searches"),
17521
+ onClick: function onClick(evt) {
17522
+ evt.stopPropagation();
17523
+ onRemoveRecentSearch();
17524
+ }
17525
+ }, createElement(AutocompleteTrashIcon, {
17526
+ createElement: createElement
17527
+ }))));
17528
+ };
17529
+ }
17530
+
17531
+ function createAutocompleteSearchComponent(_ref) {
17532
+ var createElement = _ref.createElement;
17533
+ return function AutocompleteSearch(_ref2) {
17534
+ var inputProps = _ref2.inputProps,
17535
+ onClear = _ref2.onClear,
17536
+ query = _ref2.query,
17537
+ isSearchStalled = _ref2.isSearchStalled;
17538
+ return createElement("form", {
17539
+ className: "ais-AutocompleteForm",
17540
+ action: "",
17541
+ noValidate: true,
17542
+ role: "search",
17543
+ onSubmit: function onSubmit(e) {
17544
+ return e.preventDefault();
17545
+ }
17546
+ }, createElement("div", {
17547
+ className: "ais-AutocompleteInputWrapperPrefix"
17548
+ }, createElement("label", {
17549
+ className: "ais-AutocompleteLabel",
17550
+ "aria-label": "Submit",
17551
+ htmlFor: inputProps.id,
17552
+ id: "".concat(inputProps.id, "-label")
17553
+ }, createElement("button", {
17554
+ className: "ais-AutocompleteSubmitButton",
17555
+ type: "submit",
17556
+ title: "Submit"
17557
+ }, createElement(AutocompleteSubmitIcon, {
17558
+ createElement: createElement
17559
+ }))), createElement("div", {
17560
+ className: "ais-AutocompleteLoadingIndicator",
17561
+ hidden: !isSearchStalled
17562
+ }, createElement(AutocompleteLoadingIcon, {
17563
+ createElement: createElement
17564
+ }))), createElement("div", {
17565
+ className: "ais-AutocompleteInputWrapper"
17566
+ }, createElement("input", _extends$1({
17567
+ className: "ais-AutocompleteInput",
17568
+ "aria-autocomplete": "both",
17569
+ "aria-labelledby": "".concat(inputProps.id, "-label"),
17570
+ autoComplete: "off",
17571
+ autoCorrect: "off",
17572
+ autoCapitalize: "off",
17573
+ enterKeyHint: "search",
17574
+ spellCheck: "false",
17575
+ placeholder: "",
17576
+ maxLength: 512,
17577
+ type: "search",
17578
+ value: query
17579
+ }, inputProps))), createElement("div", {
17580
+ className: "ais-AutocompleteInputWrapperSuffix"
17581
+ }, createElement("button", {
17582
+ className: "ais-AutocompleteClearButton",
17583
+ type: "reset",
17584
+ title: "Clear",
17585
+ hidden: query.length === 0 || isSearchStalled,
17586
+ onClick: onClear
17587
+ }, createElement(AutocompleteClearIcon, {
17588
+ createElement: createElement
17589
+ }))));
17590
+ };
17591
+ }
17592
+
17527
17593
  function createAutocompleteSuggestionComponent(_ref) {
17528
17594
  var createElement = _ref.createElement;
17529
17595
  return function AutocompleteSuggestion(_ref2) {
@@ -17533,8 +17599,16 @@
17533
17599
  classNames = _ref2$classNames === void 0 ? {} : _ref2$classNames;
17534
17600
  return createElement("div", {
17535
17601
  onClick: onSelect,
17536
- className: cx('ais-AutocompleteSuggestion', classNames.root)
17537
- }, item.query);
17602
+ className: cx('ais-AutocompleteItemWrapper', 'ais-AutocompleteSuggestionWrapper', classNames.root)
17603
+ }, createElement("div", {
17604
+ className: cx('ais-AutocompleteItemContent', 'ais-AutocompleteSuggestionItemContent', classNames.content)
17605
+ }, createElement("div", {
17606
+ className: cx('ais-AutocompleteItemIcon', 'ais-AutocompleteSuggestionItemIcon', classNames.content)
17607
+ }, createElement(AutocompleteSubmitIcon, {
17608
+ createElement: createElement
17609
+ })), createElement("div", {
17610
+ className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompleteSuggestionItemContentBody', classNames.content)
17611
+ }, item.query)));
17538
17612
  };
17539
17613
  }
17540
17614
 
@@ -17752,6 +17826,182 @@
17752
17826
  : ref.current; // React
17753
17827
  }
17754
17828
 
17829
+ var arrayWithoutHoles = createCommonjsModule(function (module) {
17830
+ function _arrayWithoutHoles(r) {
17831
+ if (Array.isArray(r)) return arrayLikeToArray(r);
17832
+ }
17833
+ module.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
17834
+ });
17835
+
17836
+ unwrapExports(arrayWithoutHoles);
17837
+
17838
+ var iterableToArray = createCommonjsModule(function (module) {
17839
+ function _iterableToArray(r) {
17840
+ if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
17841
+ }
17842
+ module.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
17843
+ });
17844
+
17845
+ unwrapExports(iterableToArray);
17846
+
17847
+ var nonIterableSpread = createCommonjsModule(function (module) {
17848
+ function _nonIterableSpread() {
17849
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
17850
+ }
17851
+ module.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports;
17852
+ });
17853
+
17854
+ unwrapExports(nonIterableSpread);
17855
+
17856
+ var toConsumableArray = createCommonjsModule(function (module) {
17857
+ function _toConsumableArray(r) {
17858
+ return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();
17859
+ }
17860
+ module.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
17861
+ });
17862
+
17863
+ var _toConsumableArray$1 = unwrapExports(toConsumableArray);
17864
+
17865
+ function createAutocompleteStorage(_ref) {
17866
+ var useEffect = _ref.useEffect,
17867
+ useMemo = _ref.useMemo,
17868
+ useState = _ref.useState;
17869
+ return function useStorage(_ref2) {
17870
+ var showRecent = _ref2.showRecent,
17871
+ query = _ref2.query,
17872
+ indices = _ref2.indices,
17873
+ indicesConfig = _ref2.indicesConfig;
17874
+ var storageKey = showRecent && _typeof$1(showRecent) === 'object' ? showRecent.storageKey : undefined;
17875
+ var storage = useMemo(function () {
17876
+ return createStorage({
17877
+ limit: 5,
17878
+ storageKey: storageKey
17879
+ });
17880
+ }, [storageKey]);
17881
+ var _useState = useState(storage.getSnapshot()),
17882
+ _useState2 = _slicedToArray$1(_useState, 2),
17883
+ snapshot = _useState2[0],
17884
+ setSnapshot = _useState2[1];
17885
+ useEffect(function () {
17886
+ storage.registerUpdateListener(function () {
17887
+ setSnapshot(storage.getSnapshot());
17888
+ });
17889
+ return function () {
17890
+ storage.unregisterUpdateListener();
17891
+ };
17892
+ }, [storage]);
17893
+ if (!showRecent) {
17894
+ return {
17895
+ storage: {
17896
+ onAdd: function onAdd() {},
17897
+ onRemove: function onRemove() {}
17898
+ },
17899
+ storageHits: [],
17900
+ indicesForPropGetters: indices,
17901
+ indicesConfigForPropGetters: indicesConfig
17902
+ };
17903
+ }
17904
+ var storageHits = snapshot.getAll(query).map(function (value) {
17905
+ return {
17906
+ objectID: value,
17907
+ query: value,
17908
+ __indexName: 'recent-searches'
17909
+ };
17910
+ });
17911
+ var indicesForPropGetters = _toConsumableArray$1(indices);
17912
+ var indicesConfigForPropGetters = _toConsumableArray$1(indicesConfig);
17913
+ indicesForPropGetters.unshift({
17914
+ indexName: 'recent-searches',
17915
+ indexId: 'recent-searches',
17916
+ hits: storageHits
17917
+ });
17918
+ indicesConfigForPropGetters.unshift({
17919
+ indexName: 'recent-searches',
17920
+ // @ts-expect-error - we know it has query as it's generated from storageHits
17921
+ getQuery: function getQuery(item) {
17922
+ return item.query;
17923
+ }
17924
+ });
17925
+ return {
17926
+ storage: storage,
17927
+ storageHits: storageHits,
17928
+ indicesForPropGetters: indicesForPropGetters,
17929
+ indicesConfigForPropGetters: indicesConfigForPropGetters
17930
+ };
17931
+ };
17932
+ }
17933
+ var LOCAL_STORAGE_KEY_TEST = 'test-localstorage-support';
17934
+ var LOCAL_STORAGE_KEY = 'autocomplete-recent-searches';
17935
+ function isLocalStorageSupported() {
17936
+ try {
17937
+ localStorage.setItem(LOCAL_STORAGE_KEY_TEST, '');
17938
+ localStorage.removeItem(LOCAL_STORAGE_KEY_TEST);
17939
+ return true;
17940
+ } catch (error) {
17941
+ return false;
17942
+ }
17943
+ }
17944
+ function getLocalStorage() {
17945
+ var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : LOCAL_STORAGE_KEY;
17946
+ if (!isLocalStorageSupported()) {
17947
+ return {
17948
+ setItems: function setItems() {},
17949
+ getItems: function getItems() {
17950
+ return [];
17951
+ }
17952
+ };
17953
+ }
17954
+ return {
17955
+ setItems: function setItems(items) {
17956
+ try {
17957
+ window.localStorage.setItem(key, JSON.stringify(items));
17958
+ } catch (_unused) {
17959
+ // do nothing, this likely means the storage is full
17960
+ }
17961
+ },
17962
+ getItems: function getItems() {
17963
+ var items = window.localStorage.getItem(key);
17964
+ return items ? JSON.parse(items) : [];
17965
+ }
17966
+ };
17967
+ }
17968
+ function createStorage(_ref3) {
17969
+ var _ref3$limit = _ref3.limit,
17970
+ limit = _ref3$limit === void 0 ? 5 : _ref3$limit,
17971
+ storageKey = _ref3.storageKey;
17972
+ var storage = getLocalStorage(storageKey);
17973
+ var updateListener = null;
17974
+ return {
17975
+ onAdd: function onAdd(query) {
17976
+ this.onRemove(query);
17977
+ storage.setItems([query].concat(_toConsumableArray$1(storage.getItems())));
17978
+ },
17979
+ onRemove: function onRemove(query) {
17980
+ var _updateListener;
17981
+ storage.setItems(storage.getItems().filter(function (q) {
17982
+ return q !== query;
17983
+ }));
17984
+ (_updateListener = updateListener) === null || _updateListener === void 0 ? void 0 : _updateListener();
17985
+ },
17986
+ registerUpdateListener: function registerUpdateListener(callback) {
17987
+ updateListener = callback;
17988
+ },
17989
+ unregisterUpdateListener: function unregisterUpdateListener() {
17990
+ updateListener = null;
17991
+ },
17992
+ getSnapshot: function getSnapshot() {
17993
+ return {
17994
+ getAll: function getAll() {
17995
+ var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
17996
+ return storage.getItems().filter(function (q) {
17997
+ return q.includes(query);
17998
+ }).slice(0, limit);
17999
+ }
18000
+ };
18001
+ }
18002
+ };
18003
+ }
18004
+
17755
18005
  function createDefaultEmptyComponent(_ref) {
17756
18006
  var createElement = _ref.createElement,
17757
18007
  Fragment = _ref.Fragment;
@@ -20117,6 +20367,10 @@
20117
20367
  createElement: h,
20118
20368
  Fragment: p
20119
20369
  });
20370
+ var AutocompleteRecentSearch = createAutocompleteRecentSearchComponent({
20371
+ createElement: h,
20372
+ Fragment: p
20373
+ });
20120
20374
  var usePropGetters = createAutocompletePropGetters({
20121
20375
  useEffect: s$1,
20122
20376
  useId: b$1,
@@ -20124,12 +20378,18 @@
20124
20378
  useRef: A$1,
20125
20379
  useState: y$1
20126
20380
  });
20381
+ var useStorage = createAutocompleteStorage({
20382
+ useEffect: s$1,
20383
+ useState: y$1,
20384
+ useMemo: T$1
20385
+ });
20127
20386
  var createRenderer = function createRenderer(params) {
20128
20387
  var instanceId = params.instanceId,
20129
20388
  containerNode = params.containerNode,
20130
20389
  rendererParams = _objectWithoutProperties(params, _excluded$s);
20131
20390
  return function (connectorParams, isFirstRendering) {
20132
20391
  if (isFirstRendering) {
20392
+ var _targetIndex$getHelpe, _targetIndex$getHelpe2;
20133
20393
  var isolatedIndex = connectorParams.instantSearchInstance.mainIndex;
20134
20394
  var targetIndex = connectorParams.instantSearchInstance.mainIndex;
20135
20395
  walkIndex(targetIndex, function (childIndex) {
@@ -20143,13 +20403,14 @@
20143
20403
  isolatedIndex: isolatedIndex,
20144
20404
  targetIndex: targetIndex
20145
20405
  };
20406
+ 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
20407
  return;
20147
20408
  }
20148
20409
  P(h(AutocompleteWrapper, _extends({}, rendererParams, connectorParams)), containerNode);
20149
20410
  };
20150
20411
  };
20151
20412
  function AutocompleteWrapper(_ref) {
20152
- var _targetIndex$getWidge, _isolatedIndex$getHel;
20413
+ var _isolatedIndex$getHel, _targetIndex$getWidge, _showRecent$templates;
20153
20414
  var indicesConfig = _ref.indicesConfig,
20154
20415
  indices = _ref.indices,
20155
20416
  getSearchPageURL = _ref.getSearchPageURL,
@@ -20157,9 +20418,21 @@
20157
20418
  refine = _ref.refine,
20158
20419
  cssClasses = _ref.cssClasses,
20159
20420
  renderState = _ref.renderState,
20160
- instantSearchInstance = _ref.instantSearchInstance;
20421
+ instantSearchInstance = _ref.instantSearchInstance,
20422
+ showRecent = _ref.showRecent;
20161
20423
  var isolatedIndex = renderState.isolatedIndex,
20162
20424
  targetIndex = renderState.targetIndex;
20425
+ var searchboxQuery = isolatedIndex === null || isolatedIndex === void 0 ? void 0 : (_isolatedIndex$getHel = isolatedIndex.getHelper()) === null || _isolatedIndex$getHel === void 0 ? void 0 : _isolatedIndex$getHel.state.query;
20426
+ var _useStorage = useStorage({
20427
+ query: searchboxQuery,
20428
+ showRecent: showRecent,
20429
+ indices: indices,
20430
+ indicesConfig: indicesConfig
20431
+ }),
20432
+ storage = _useStorage.storage,
20433
+ storageHits = _useStorage.storageHits,
20434
+ indicesConfigForPropGetters = _useStorage.indicesConfigForPropGetters,
20435
+ indicesForPropGetters = _useStorage.indicesForPropGetters;
20163
20436
  var isSearchPage = (_targetIndex$getWidge = targetIndex === null || targetIndex === void 0 ? void 0 : targetIndex.getWidgets().some(function (_ref2) {
20164
20437
  var $$type = _ref2.$$type;
20165
20438
  return ['ais.hits', 'ais.infiniteHits'].includes($$type);
@@ -20173,10 +20446,11 @@
20173
20446
  query: query
20174
20447
  }), _objectSpread2$1));
20175
20448
  });
20449
+ query.length > 0 && storage.onAdd(query);
20176
20450
  };
20177
20451
  var _usePropGetters = usePropGetters({
20178
- indices: indices,
20179
- indicesConfig: indicesConfig,
20452
+ indices: indicesForPropGetters,
20453
+ indicesConfig: indicesConfigForPropGetters,
20180
20454
  onRefine: onRefine,
20181
20455
  onSelect: userOnSelect !== null && userOnSelect !== void 0 ? userOnSelect : function (_ref3) {
20182
20456
  var query = _ref3.query,
@@ -20200,11 +20474,32 @@
20200
20474
  getItemProps = _usePropGetters.getItemProps,
20201
20475
  getPanelProps = _usePropGetters.getPanelProps,
20202
20476
  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;
20477
+ var AutocompleteRecentSearchComponent = AutocompleteRecentSearch;
20478
+ if (_typeof(showRecent) === 'object' && (_showRecent$templates = showRecent.templates) !== null && _showRecent$templates !== void 0 && _showRecent$templates.item) {
20479
+ var props = prepareTemplateProps({
20480
+ defaultTemplates: {},
20481
+ templatesConfig: instantSearchInstance.templatesConfig,
20482
+ templates: showRecent.templates
20483
+ });
20484
+ AutocompleteRecentSearchComponent = function AutocompleteRecentSearchComponent(_ref4) {
20485
+ var item = _ref4.item,
20486
+ onSelect = _ref4.onSelect,
20487
+ onRemoveRecentSearch = _ref4.onRemoveRecentSearch;
20488
+ return h(Template, _extends({}, props, {
20489
+ templateKey: "item",
20490
+ rootTagName: "fragment",
20491
+ data: {
20492
+ item: item,
20493
+ onSelect: onSelect,
20494
+ onRemoveRecentSearch: onRemoveRecentSearch
20495
+ }
20496
+ }));
20497
+ };
20498
+ }
20204
20499
  return h(Autocomplete, _extends({}, getRootProps(), {
20205
20500
  classNames: cssClasses
20206
20501
  }), h(AutocompleteSearchBox, {
20207
- query: query || '',
20502
+ query: searchboxQuery || '',
20208
20503
  inputProps: _objectSpread2(_objectSpread2({}, getInputProps()), {}, {
20209
20504
  // @ts-ignore - This clashes with some ambient React JSX declarations.
20210
20505
  onInput: function onInput(evt) {
@@ -20215,10 +20510,31 @@
20215
20510
  return onRefine('');
20216
20511
  },
20217
20512
  isSearchStalled: instantSearchInstance.status === 'stalled'
20218
- }), h(AutocompletePanel, getPanelProps(), indices.map(function (_ref4, i) {
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) {
20219
20535
  var _indicesConfig$i$temp;
20220
- var indexId = _ref4.indexId,
20221
- hits = _ref4.hits;
20536
+ var indexId = _ref6.indexId,
20537
+ hits = _ref6.hits;
20222
20538
  if (!renderState.indexTemplateProps[i]) {
20223
20539
  renderState.indexTemplateProps[i] = prepareTemplateProps({
20224
20540
  defaultTemplates: {},
@@ -20226,8 +20542,8 @@
20226
20542
  templates: indicesConfig[i].templates
20227
20543
  });
20228
20544
  }
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;
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;
20231
20547
  return h(Template, _extends({}, renderState.indexTemplateProps[i], {
20232
20548
  templateKey: "header",
20233
20549
  rootTagName: "fragment",
@@ -20236,9 +20552,9 @@
20236
20552
  }
20237
20553
  }));
20238
20554
  } : undefined;
20239
- var itemComponent = function itemComponent(_ref6) {
20240
- var item = _ref6.item,
20241
- onSelect = _ref6.onSelect;
20555
+ var itemComponent = function itemComponent(_ref8) {
20556
+ var item = _ref8.item,
20557
+ onSelect = _ref8.onSelect;
20242
20558
  return h(Template, _extends({}, renderState.indexTemplateProps[i], {
20243
20559
  templateKey: "item",
20244
20560
  rootTagName: "fragment",
@@ -20263,18 +20579,19 @@
20263
20579
  })));
20264
20580
  }
20265
20581
  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;
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;
20278
20595
  if (!container) {
20279
20596
  throw new Error(withUsage$z('The `container` option is required.'));
20280
20597
  }
@@ -20311,6 +20628,7 @@
20311
20628
  getSearchPageURL: getSearchPageURL,
20312
20629
  onSelect: onSelect,
20313
20630
  cssClasses: cssClasses,
20631
+ showRecent: showRecent,
20314
20632
  renderState: {
20315
20633
  indexTemplateProps: [],
20316
20634
  isolatedIndex: undefined,
@@ -20326,14 +20644,14 @@
20326
20644
  })({}), index({
20327
20645
  indexId: "ais-autocomplete-".concat(instanceId),
20328
20646
  EXPERIMENTAL_isolated: true
20329
- }).addWidgets([configure({
20330
- hitsPerPage: 5
20331
- })].concat(_toConsumableArray(indicesConfig.map(function (_ref8) {
20332
- var indexName = _ref8.indexName;
20647
+ }).addWidgets([].concat(_toConsumableArray(indicesConfig.map(function (_ref0) {
20648
+ var indexName = _ref0.indexName;
20333
20649
  return index({
20334
20650
  indexName: indexName,
20335
20651
  indexId: indexName
20336
- }).addWidgets([configure({})]);
20652
+ }).addWidgets([configure({
20653
+ hitsPerPage: 5
20654
+ })]);
20337
20655
  })), [_objectSpread2(_objectSpread2({}, makeWidget({
20338
20656
  escapeHTML: escapeHTML
20339
20657
  })), {}, {