react-instantsearch 7.18.0 → 7.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@
7
7
 
8
8
  var React__default = 'default' in React ? React['default'] : React;
9
9
 
10
- var version = '7.18.0';
10
+ var version = '7.19.0';
11
11
 
12
12
  // Copyright Joyent, Inc. and other Node contributors.
13
13
  //
@@ -4360,8 +4360,8 @@
4360
4360
 
4361
4361
  return recSort(
4362
4362
  function (data, facetName) {
4363
+ var facetOrdering = getFacetOrdering(results, facetName);
4363
4364
  if (options.facetOrdering) {
4364
- var facetOrdering = getFacetOrdering(results, facetName);
4365
4365
  if (facetOrdering) {
4366
4366
  return sortViaFacetOrdering(data, facetOrdering);
4367
4367
  }
@@ -4369,7 +4369,24 @@
4369
4369
 
4370
4370
  if (Array.isArray(options.sortBy)) {
4371
4371
  var order = formatSort(options.sortBy, SearchResults.DEFAULT_SORT);
4372
- return orderBy_1(data, order[0], order[1]);
4372
+ var items = orderBy_1(data, order[0], order[1]);
4373
+
4374
+ var hide =
4375
+ facetOrdering && facetOrdering.hide ? facetOrdering.hide : [];
4376
+ if (hide.length > 0) {
4377
+ var visible = [];
4378
+ items.forEach(function (item) {
4379
+ // hierarchical facets get sorted using their raw name
4380
+ var name = item.path || item.name;
4381
+ if (hide.indexOf(name) === -1) {
4382
+ visible.push(item);
4383
+ }
4384
+ });
4385
+
4386
+ return visible;
4387
+ }
4388
+
4389
+ return items;
4373
4390
  } else if (typeof options.sortBy === 'function') {
4374
4391
  return vanillaSortFn(options.sortBy, data);
4375
4392
  }
@@ -4634,7 +4651,7 @@
4634
4651
 
4635
4652
  var sortAndMergeRecommendations_1 = sortAndMergeRecommendations;
4636
4653
 
4637
- var version$1 = '3.26.0';
4654
+ var version$1 = '3.26.1';
4638
4655
 
4639
4656
  var escapeFacetValue$3 = escapeFacetValue_1.escapeFacetValue;
4640
4657
 
@@ -5087,16 +5104,19 @@
5087
5104
 
5088
5105
  content = Array.isArray(content) ? content[0] : content;
5089
5106
 
5090
- content.facetHits.forEach(function (f, i) {
5107
+ content.facetHits = content.facetHits.reduce(function (acc, f) {
5091
5108
  if (hide.indexOf(f.value) > -1) {
5092
- content.facetHits.splice(i, 1);
5093
- return;
5109
+ return acc;
5094
5110
  }
5111
+
5095
5112
  f.escapedValue = escapeFacetValue$3(f.value);
5096
5113
  f.isRefined = isDisjunctive
5097
5114
  ? state.isDisjunctiveFacetRefined(facet, f.escapedValue)
5098
5115
  : state.isFacetRefined(facet, f.escapedValue);
5099
- });
5116
+
5117
+ acc.push(f);
5118
+ return acc;
5119
+ }, []);
5100
5120
 
5101
5121
  return content;
5102
5122
  },
@@ -10714,12 +10734,6 @@
10714
10734
  helper.searchWithoutTriggeringOnStateChange = function () {
10715
10735
  return mainHelper.search();
10716
10736
  };
10717
-
10718
- // We use the same pattern for the `searchForFacetValues`.
10719
- helper.searchForFacetValues = function (facetName, facetValue, maxFacetHits, userState) {
10720
- var state = helper.state.setQueryParameters(userState);
10721
- return mainHelper.searchForFacetValues(facetName, facetValue, maxFacetHits, state);
10722
- };
10723
10737
  var isolatedHelper = indexName ? helper : algoliasearchHelper_1({}, '__empty_index__', {});
10724
10738
  var derivingHelper = isolated ? isolatedHelper : nearestIsolatedHelper(parent, mainHelper);
10725
10739
  derivedHelper = derivingHelper.derive(function () {
@@ -13333,7 +13347,7 @@
13333
13347
  };
13334
13348
  }
13335
13349
 
13336
- var version$3 = '4.82.0';
13350
+ var version$3 = '4.83.0';
13337
13351
 
13338
13352
  function _typeof$q(o) {
13339
13353
  "@babel/helpers - typeof";
@@ -20809,6 +20823,15 @@
20809
20823
  var i = _toPrimitive$N(t, "string");
20810
20824
  return "symbol" == typeof i ? i : i + "";
20811
20825
  }
20826
+ function _typeof$S(o) {
20827
+ "@babel/helpers - typeof";
20828
+
20829
+ return _typeof$S = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
20830
+ return typeof o;
20831
+ } : function (o) {
20832
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
20833
+ }, _typeof$S(o);
20834
+ }
20812
20835
  function _unsupportedIterableToArray$n(r, a) {
20813
20836
  if (r) {
20814
20837
  if ("string" == typeof r) return _arrayLikeToArray$n(r, a);
@@ -20941,117 +20964,6 @@
20941
20964
  };
20942
20965
  }
20943
20966
 
20944
- function AutocompleteSubmitIcon(_ref) {
20945
- var createElement = _ref.createElement;
20946
- return createElement("svg", {
20947
- className: "ais-AutocompleteSubmitIcon",
20948
- viewBox: "0 0 24 24",
20949
- width: "20",
20950
- height: "20",
20951
- fill: "currentColor"
20952
- }, createElement("path", {
20953
- 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"
20954
- }));
20955
- }
20956
- function AutocompleteLoadingIcon(_ref2) {
20957
- var createElement = _ref2.createElement;
20958
- return createElement("svg", {
20959
- className: "ais-AutocompleteLoadingIcon",
20960
- viewBox: "0 0 100 100",
20961
- width: "20",
20962
- height: "20"
20963
- }, createElement("circle", {
20964
- cx: "50",
20965
- cy: "50",
20966
- fill: "none",
20967
- r: "35",
20968
- stroke: "currentColor",
20969
- strokeDasharray: "164.93361431346415 56.97787143782138",
20970
- strokeWidth: "6"
20971
- }, createElement("animateTransform", {
20972
- attributeName: "transform",
20973
- type: "rotate",
20974
- repeatCount: "indefinite",
20975
- dur: "1s",
20976
- values: "0 50 50;90 50 50;180 50 50;360 50 50",
20977
- keyTimes: "0;0.40;0.65;1"
20978
- })));
20979
- }
20980
- function AutocompleteClearIcon(_ref3) {
20981
- var createElement = _ref3.createElement;
20982
- return createElement("svg", {
20983
- className: "ais-AutocompleteClearIcon",
20984
- viewBox: "0 0 24 24",
20985
- width: "18",
20986
- height: "18",
20987
- fill: "currentColor"
20988
- }, createElement("path", {
20989
- 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"
20990
- }));
20991
- }
20992
-
20993
- function createAutocompleteSearchComponent(_ref) {
20994
- var createElement = _ref.createElement;
20995
- return function AutocompleteSearch(_ref2) {
20996
- var inputProps = _ref2.inputProps,
20997
- onClear = _ref2.onClear,
20998
- query = _ref2.query,
20999
- isSearchStalled = _ref2.isSearchStalled;
21000
- return createElement("form", {
21001
- className: "ais-AutocompleteForm",
21002
- action: "",
21003
- noValidate: true,
21004
- role: "search",
21005
- onSubmit: function onSubmit(e) {
21006
- return e.preventDefault();
21007
- }
21008
- }, createElement("div", {
21009
- className: "ais-AutocompleteInputWrapperPrefix"
21010
- }, createElement("label", {
21011
- className: "ais-AutocompleteLabel",
21012
- "aria-label": "Submit",
21013
- htmlFor: inputProps.id,
21014
- id: "".concat(inputProps.id, "-label")
21015
- }, createElement("button", {
21016
- className: "ais-AutocompleteSubmitButton",
21017
- type: "submit",
21018
- title: "Submit"
21019
- }, createElement(AutocompleteSubmitIcon, {
21020
- createElement: createElement
21021
- }))), createElement("div", {
21022
- className: "ais-AutocompleteLoadingIndicator",
21023
- hidden: !isSearchStalled
21024
- }, createElement(AutocompleteLoadingIcon, {
21025
- createElement: createElement
21026
- }))), createElement("div", {
21027
- className: "ais-AutocompleteInputWrapper"
21028
- }, createElement("input", _extends$2({
21029
- className: "ais-AutocompleteInput",
21030
- "aria-autocomplete": "both",
21031
- "aria-labelledby": "".concat(inputProps.id, "-label"),
21032
- autoComplete: "off",
21033
- autoCorrect: "off",
21034
- autoCapitalize: "off",
21035
- enterKeyHint: "search",
21036
- spellCheck: "false",
21037
- placeholder: "",
21038
- maxLength: 512,
21039
- type: "search",
21040
- value: query
21041
- }, inputProps))), createElement("div", {
21042
- className: "ais-AutocompleteInputWrapperSuffix"
21043
- }, createElement("button", {
21044
- className: "ais-AutocompleteClearButton",
21045
- type: "reset",
21046
- title: "Clear",
21047
- hidden: query.length === 0 || isSearchStalled,
21048
- onClick: onClear
21049
- }, createElement(AutocompleteClearIcon, {
21050
- createElement: createElement
21051
- }))));
21052
- };
21053
- }
21054
-
21055
20967
  var _typeof_1 = createCommonjsModule(function (module) {
21056
20968
  function _typeof(o) {
21057
20969
  "@babel/helpers - typeof";
@@ -21065,7 +20977,7 @@
21065
20977
  module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
21066
20978
  });
21067
20979
 
21068
- var _typeof$S = unwrapExports(_typeof_1);
20980
+ var _typeof$T = unwrapExports(_typeof_1);
21069
20981
 
21070
20982
  var toPrimitive_1 = createCommonjsModule(function (module) {
21071
20983
  var _typeof = _typeof_1["default"];
@@ -21194,6 +21106,169 @@
21194
21106
 
21195
21107
  var _slicedToArray$h = unwrapExports(slicedToArray);
21196
21108
 
21109
+ function AutocompleteSubmitIcon(_ref) {
21110
+ var createElement = _ref.createElement;
21111
+ return createElement("svg", {
21112
+ className: "ais-AutocompleteSubmitIcon",
21113
+ viewBox: "0 0 24 24",
21114
+ width: "20",
21115
+ height: "20",
21116
+ fill: "currentColor"
21117
+ }, createElement("path", {
21118
+ 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"
21119
+ }));
21120
+ }
21121
+ function AutocompleteLoadingIcon(_ref2) {
21122
+ var createElement = _ref2.createElement;
21123
+ return createElement("svg", {
21124
+ className: "ais-AutocompleteLoadingIcon",
21125
+ viewBox: "0 0 100 100",
21126
+ width: "20",
21127
+ height: "20"
21128
+ }, createElement("circle", {
21129
+ cx: "50",
21130
+ cy: "50",
21131
+ fill: "none",
21132
+ r: "35",
21133
+ stroke: "currentColor",
21134
+ strokeDasharray: "164.93361431346415 56.97787143782138",
21135
+ strokeWidth: "6"
21136
+ }, createElement("animateTransform", {
21137
+ attributeName: "transform",
21138
+ type: "rotate",
21139
+ repeatCount: "indefinite",
21140
+ dur: "1s",
21141
+ values: "0 50 50;90 50 50;180 50 50;360 50 50",
21142
+ keyTimes: "0;0.40;0.65;1"
21143
+ })));
21144
+ }
21145
+ function AutocompleteClearIcon(_ref3) {
21146
+ var createElement = _ref3.createElement;
21147
+ return createElement("svg", {
21148
+ className: "ais-AutocompleteClearIcon",
21149
+ viewBox: "0 0 24 24",
21150
+ width: "18",
21151
+ height: "18",
21152
+ fill: "currentColor"
21153
+ }, createElement("path", {
21154
+ 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"
21155
+ }));
21156
+ }
21157
+ function AutocompleteClockIcon(_ref4) {
21158
+ var createElement = _ref4.createElement;
21159
+ return createElement("svg", {
21160
+ viewBox: "0 0 24 24",
21161
+ fill: "currentColor"
21162
+ }, createElement("path", {
21163
+ 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"
21164
+ }));
21165
+ }
21166
+ function AutocompleteTrashIcon(_ref5) {
21167
+ var createElement = _ref5.createElement;
21168
+ return createElement("svg", {
21169
+ viewBox: "0 0 24 24",
21170
+ fill: "currentColor"
21171
+ }, createElement("path", {
21172
+ 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"
21173
+ }));
21174
+ }
21175
+
21176
+ function createAutocompleteRecentSearchComponent(_ref) {
21177
+ var createElement = _ref.createElement;
21178
+ return function AutocompleteRecentSearch(_ref2) {
21179
+ var item = _ref2.item,
21180
+ onSelect = _ref2.onSelect,
21181
+ onRemoveRecentSearch = _ref2.onRemoveRecentSearch,
21182
+ _ref2$classNames = _ref2.classNames,
21183
+ classNames = _ref2$classNames === void 0 ? {} : _ref2$classNames;
21184
+ return createElement("div", {
21185
+ onClick: onSelect,
21186
+ className: cx('ais-AutocompleteItemWrapper ais-AutocompleteRecentSearchWrapper', classNames.root)
21187
+ }, createElement("div", {
21188
+ className: cx('ais-AutocompleteItemContent', 'ais-AutocompleteRecentSearchItemContent', classNames.content)
21189
+ }, createElement("div", {
21190
+ className: cx('ais-AutocompleteItemIcon', 'ais-AutocompleteRecentSearchItemIcon', classNames.content)
21191
+ }, createElement(AutocompleteClockIcon, {
21192
+ createElement: createElement
21193
+ })), createElement("div", {
21194
+ className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompleteRecentSearchItemContentBody', classNames.content)
21195
+ }, item.query)), createElement("div", {
21196
+ className: cx('ais-AutocompleteItemActions', 'ais-AutocompleteRecentSearchItemActions', classNames.actions)
21197
+ }, createElement("button", {
21198
+ className: cx('ais-AutocompleteItemActionButton', 'ais-AutocompleteRecentSearchItemDeleteButton', classNames.deleteButton),
21199
+ title: "Remove ".concat(item.query, " from recent searches"),
21200
+ onClick: function onClick(evt) {
21201
+ evt.stopPropagation();
21202
+ onRemoveRecentSearch();
21203
+ }
21204
+ }, createElement(AutocompleteTrashIcon, {
21205
+ createElement: createElement
21206
+ }))));
21207
+ };
21208
+ }
21209
+
21210
+ function createAutocompleteSearchComponent(_ref) {
21211
+ var createElement = _ref.createElement;
21212
+ return function AutocompleteSearch(_ref2) {
21213
+ var inputProps = _ref2.inputProps,
21214
+ onClear = _ref2.onClear,
21215
+ query = _ref2.query,
21216
+ isSearchStalled = _ref2.isSearchStalled;
21217
+ return createElement("form", {
21218
+ className: "ais-AutocompleteForm",
21219
+ action: "",
21220
+ noValidate: true,
21221
+ role: "search",
21222
+ onSubmit: function onSubmit(e) {
21223
+ return e.preventDefault();
21224
+ }
21225
+ }, createElement("div", {
21226
+ className: "ais-AutocompleteInputWrapperPrefix"
21227
+ }, createElement("label", {
21228
+ className: "ais-AutocompleteLabel",
21229
+ "aria-label": "Submit",
21230
+ htmlFor: inputProps.id,
21231
+ id: "".concat(inputProps.id, "-label")
21232
+ }, createElement("button", {
21233
+ className: "ais-AutocompleteSubmitButton",
21234
+ type: "submit",
21235
+ title: "Submit"
21236
+ }, createElement(AutocompleteSubmitIcon, {
21237
+ createElement: createElement
21238
+ }))), createElement("div", {
21239
+ className: "ais-AutocompleteLoadingIndicator",
21240
+ hidden: !isSearchStalled
21241
+ }, createElement(AutocompleteLoadingIcon, {
21242
+ createElement: createElement
21243
+ }))), createElement("div", {
21244
+ className: "ais-AutocompleteInputWrapper"
21245
+ }, createElement("input", _extends$2({
21246
+ className: "ais-AutocompleteInput",
21247
+ "aria-autocomplete": "both",
21248
+ "aria-labelledby": "".concat(inputProps.id, "-label"),
21249
+ autoComplete: "off",
21250
+ autoCorrect: "off",
21251
+ autoCapitalize: "off",
21252
+ enterKeyHint: "search",
21253
+ spellCheck: "false",
21254
+ placeholder: "",
21255
+ maxLength: 512,
21256
+ type: "search",
21257
+ value: query
21258
+ }, inputProps))), createElement("div", {
21259
+ className: "ais-AutocompleteInputWrapperSuffix"
21260
+ }, createElement("button", {
21261
+ className: "ais-AutocompleteClearButton",
21262
+ type: "reset",
21263
+ title: "Clear",
21264
+ hidden: query.length === 0 || isSearchStalled,
21265
+ onClick: onClear
21266
+ }, createElement(AutocompleteClearIcon, {
21267
+ createElement: createElement
21268
+ }))));
21269
+ };
21270
+ }
21271
+
21197
21272
  function createAutocompleteSuggestionComponent(_ref) {
21198
21273
  var createElement = _ref.createElement;
21199
21274
  return function AutocompleteSuggestion(_ref2) {
@@ -21203,8 +21278,16 @@
21203
21278
  classNames = _ref2$classNames === void 0 ? {} : _ref2$classNames;
21204
21279
  return createElement("div", {
21205
21280
  onClick: onSelect,
21206
- className: cx('ais-AutocompleteSuggestion', classNames.root)
21207
- }, item.query);
21281
+ className: cx('ais-AutocompleteItemWrapper', 'ais-AutocompleteSuggestionWrapper', classNames.root)
21282
+ }, createElement("div", {
21283
+ className: cx('ais-AutocompleteItemContent', 'ais-AutocompleteSuggestionItemContent', classNames.content)
21284
+ }, createElement("div", {
21285
+ className: cx('ais-AutocompleteItemIcon', 'ais-AutocompleteSuggestionItemIcon', classNames.content)
21286
+ }, createElement(AutocompleteSubmitIcon, {
21287
+ createElement: createElement
21288
+ })), createElement("div", {
21289
+ className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompleteSuggestionItemContentBody', classNames.content)
21290
+ }, item.query)));
21208
21291
  };
21209
21292
  }
21210
21293
 
@@ -21418,10 +21501,186 @@
21418
21501
  * Returns the framework-agnostic value of a ref.
21419
21502
  */
21420
21503
  function unwrapRef(ref) {
21421
- return ref.current && _typeof$S(ref.current) === 'object' && 'base' in ref.current ? ref.current.base // Preact
21504
+ return ref.current && _typeof$T(ref.current) === 'object' && 'base' in ref.current ? ref.current.base // Preact
21422
21505
  : ref.current; // React
21423
21506
  }
21424
21507
 
21508
+ var arrayWithoutHoles = createCommonjsModule(function (module) {
21509
+ function _arrayWithoutHoles(r) {
21510
+ if (Array.isArray(r)) return arrayLikeToArray(r);
21511
+ }
21512
+ module.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
21513
+ });
21514
+
21515
+ unwrapExports(arrayWithoutHoles);
21516
+
21517
+ var iterableToArray = createCommonjsModule(function (module) {
21518
+ function _iterableToArray(r) {
21519
+ if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
21520
+ }
21521
+ module.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
21522
+ });
21523
+
21524
+ unwrapExports(iterableToArray);
21525
+
21526
+ var nonIterableSpread = createCommonjsModule(function (module) {
21527
+ function _nonIterableSpread() {
21528
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
21529
+ }
21530
+ module.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports;
21531
+ });
21532
+
21533
+ unwrapExports(nonIterableSpread);
21534
+
21535
+ var toConsumableArray = createCommonjsModule(function (module) {
21536
+ function _toConsumableArray(r) {
21537
+ return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();
21538
+ }
21539
+ module.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
21540
+ });
21541
+
21542
+ var _toConsumableArray$9 = unwrapExports(toConsumableArray);
21543
+
21544
+ function createAutocompleteStorage(_ref) {
21545
+ var useEffect = _ref.useEffect,
21546
+ useMemo = _ref.useMemo,
21547
+ useState = _ref.useState;
21548
+ return function useStorage(_ref2) {
21549
+ var showRecent = _ref2.showRecent,
21550
+ query = _ref2.query,
21551
+ indices = _ref2.indices,
21552
+ indicesConfig = _ref2.indicesConfig;
21553
+ var storageKey = showRecent && _typeof$T(showRecent) === 'object' ? showRecent.storageKey : undefined;
21554
+ var storage = useMemo(function () {
21555
+ return createStorage({
21556
+ limit: 5,
21557
+ storageKey: storageKey
21558
+ });
21559
+ }, [storageKey]);
21560
+ var _useState = useState(storage.getSnapshot()),
21561
+ _useState2 = _slicedToArray$h(_useState, 2),
21562
+ snapshot = _useState2[0],
21563
+ setSnapshot = _useState2[1];
21564
+ useEffect(function () {
21565
+ storage.registerUpdateListener(function () {
21566
+ setSnapshot(storage.getSnapshot());
21567
+ });
21568
+ return function () {
21569
+ storage.unregisterUpdateListener();
21570
+ };
21571
+ }, [storage]);
21572
+ if (!showRecent) {
21573
+ return {
21574
+ storage: {
21575
+ onAdd: function onAdd() {},
21576
+ onRemove: function onRemove() {}
21577
+ },
21578
+ storageHits: [],
21579
+ indicesForPropGetters: indices,
21580
+ indicesConfigForPropGetters: indicesConfig
21581
+ };
21582
+ }
21583
+ var storageHits = snapshot.getAll(query).map(function (value) {
21584
+ return {
21585
+ objectID: value,
21586
+ query: value,
21587
+ __indexName: 'recent-searches'
21588
+ };
21589
+ });
21590
+ var indicesForPropGetters = _toConsumableArray$9(indices);
21591
+ var indicesConfigForPropGetters = _toConsumableArray$9(indicesConfig);
21592
+ indicesForPropGetters.unshift({
21593
+ indexName: 'recent-searches',
21594
+ indexId: 'recent-searches',
21595
+ hits: storageHits
21596
+ });
21597
+ indicesConfigForPropGetters.unshift({
21598
+ indexName: 'recent-searches',
21599
+ // @ts-expect-error - we know it has query as it's generated from storageHits
21600
+ getQuery: function getQuery(item) {
21601
+ return item.query;
21602
+ }
21603
+ });
21604
+ return {
21605
+ storage: storage,
21606
+ storageHits: storageHits,
21607
+ indicesForPropGetters: indicesForPropGetters,
21608
+ indicesConfigForPropGetters: indicesConfigForPropGetters
21609
+ };
21610
+ };
21611
+ }
21612
+ var LOCAL_STORAGE_KEY_TEST = 'test-localstorage-support';
21613
+ var LOCAL_STORAGE_KEY = 'autocomplete-recent-searches';
21614
+ function isLocalStorageSupported() {
21615
+ try {
21616
+ localStorage.setItem(LOCAL_STORAGE_KEY_TEST, '');
21617
+ localStorage.removeItem(LOCAL_STORAGE_KEY_TEST);
21618
+ return true;
21619
+ } catch (error) {
21620
+ return false;
21621
+ }
21622
+ }
21623
+ function getLocalStorage() {
21624
+ var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : LOCAL_STORAGE_KEY;
21625
+ if (!isLocalStorageSupported()) {
21626
+ return {
21627
+ setItems: function setItems() {},
21628
+ getItems: function getItems() {
21629
+ return [];
21630
+ }
21631
+ };
21632
+ }
21633
+ return {
21634
+ setItems: function setItems(items) {
21635
+ try {
21636
+ window.localStorage.setItem(key, JSON.stringify(items));
21637
+ } catch (_unused) {
21638
+ // do nothing, this likely means the storage is full
21639
+ }
21640
+ },
21641
+ getItems: function getItems() {
21642
+ var items = window.localStorage.getItem(key);
21643
+ return items ? JSON.parse(items) : [];
21644
+ }
21645
+ };
21646
+ }
21647
+ function createStorage(_ref3) {
21648
+ var _ref3$limit = _ref3.limit,
21649
+ limit = _ref3$limit === void 0 ? 5 : _ref3$limit,
21650
+ storageKey = _ref3.storageKey;
21651
+ var storage = getLocalStorage(storageKey);
21652
+ var updateListener = null;
21653
+ return {
21654
+ onAdd: function onAdd(query) {
21655
+ this.onRemove(query);
21656
+ storage.setItems([query].concat(_toConsumableArray$9(storage.getItems())));
21657
+ },
21658
+ onRemove: function onRemove(query) {
21659
+ var _updateListener;
21660
+ storage.setItems(storage.getItems().filter(function (q) {
21661
+ return q !== query;
21662
+ }));
21663
+ (_updateListener = updateListener) === null || _updateListener === void 0 ? void 0 : _updateListener();
21664
+ },
21665
+ registerUpdateListener: function registerUpdateListener(callback) {
21666
+ updateListener = callback;
21667
+ },
21668
+ unregisterUpdateListener: function unregisterUpdateListener() {
21669
+ updateListener = null;
21670
+ },
21671
+ getSnapshot: function getSnapshot() {
21672
+ return {
21673
+ getAll: function getAll() {
21674
+ var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
21675
+ return storage.getItems().filter(function (q) {
21676
+ return q.includes(query);
21677
+ }).slice(0, limit);
21678
+ }
21679
+ };
21680
+ }
21681
+ };
21682
+ }
21683
+
21425
21684
  function createDefaultEmptyComponent(_ref) {
21426
21685
  var createElement = _ref.createElement,
21427
21686
  Fragment = _ref.Fragment;
@@ -22175,8 +22434,8 @@
22175
22434
  });
22176
22435
  }
22177
22436
 
22178
- var _excluded$m = ["indices", "showSuggestions"],
22179
- _excluded2$4 = ["indicesConfig", "refineSearchBox", "getSearchPageURL", "onSelect", "indexUiState", "isSearchPage"];
22437
+ var _excluded$m = ["indices", "showSuggestions", "showRecent"],
22438
+ _excluded2$4 = ["indicesConfig", "refineSearchBox", "getSearchPageURL", "onSelect", "indexUiState", "isSearchPage", "showRecent"];
22180
22439
  var Autocomplete = createAutocompleteComponent({
22181
22440
  createElement: React.createElement,
22182
22441
  Fragment: React.Fragment
@@ -22193,6 +22452,10 @@
22193
22452
  createElement: React.createElement,
22194
22453
  Fragment: React.Fragment
22195
22454
  });
22455
+ var AutocompleteRecentSearch = createAutocompleteRecentSearchComponent({
22456
+ createElement: React.createElement,
22457
+ Fragment: React.Fragment
22458
+ });
22196
22459
  var usePropGetters = createAutocompletePropGetters({
22197
22460
  useEffect: React.useEffect,
22198
22461
  useId: React.useId,
@@ -22200,6 +22463,11 @@
22200
22463
  useRef: React.useRef,
22201
22464
  useState: React.useState
22202
22465
  });
22466
+ var useStorage = createAutocompleteStorage({
22467
+ useEffect: React.useEffect,
22468
+ useMemo: React.useMemo,
22469
+ useState: React.useState
22470
+ });
22203
22471
  var _ref2 = /*#__PURE__*/React__default.createElement(Configure, {
22204
22472
  hitsPerPage: 5
22205
22473
  });
@@ -22207,6 +22475,7 @@
22207
22475
  var _ref$indices = _ref.indices,
22208
22476
  indices = _ref$indices === void 0 ? [] : _ref$indices,
22209
22477
  showSuggestions = _ref.showSuggestions,
22478
+ showRecent = _ref.showRecent,
22210
22479
  props = _objectWithoutProperties$c(_ref, _excluded$m);
22211
22480
  var _useInstantSearch = useInstantSearch(),
22212
22481
  indexUiState = _useInstantSearch.indexUiState,
@@ -22249,7 +22518,8 @@
22249
22518
  indicesConfig: indicesConfig,
22250
22519
  refineSearchBox: refine,
22251
22520
  indexUiState: indexUiState,
22252
- isSearchPage: isSearchPage
22521
+ isSearchPage: isSearchPage,
22522
+ showRecent: showRecent
22253
22523
  }))));
22254
22524
  }
22255
22525
  function InnerAutocomplete(_ref3) {
@@ -22259,16 +22529,29 @@
22259
22529
  userOnSelect = _ref3.onSelect,
22260
22530
  indexUiState = _ref3.indexUiState,
22261
22531
  isSearchPage = _ref3.isSearchPage,
22532
+ showRecent = _ref3.showRecent,
22262
22533
  props = _objectWithoutProperties$c(_ref3, _excluded2$4);
22263
22534
  var _useAutocomplete = useAutocomplete(),
22264
22535
  indices = _useAutocomplete.indices,
22265
- refineAutocomplete = _useAutocomplete.refine;
22266
- var _usePropGetters = usePropGetters({
22536
+ refineAutocomplete = _useAutocomplete.refine,
22537
+ currentRefinement = _useAutocomplete.currentRefinement;
22538
+ var _useStorage = useStorage({
22539
+ showRecent: showRecent,
22540
+ query: currentRefinement,
22267
22541
  indices: indices,
22268
- indicesConfig: indicesConfig,
22542
+ indicesConfig: indicesConfig
22543
+ }),
22544
+ storage = _useStorage.storage,
22545
+ storageHits = _useStorage.storageHits,
22546
+ indicesForPropGetters = _useStorage.indicesForPropGetters,
22547
+ indicesConfigForPropGetters = _useStorage.indicesConfigForPropGetters;
22548
+ var _usePropGetters = usePropGetters({
22549
+ indices: indicesForPropGetters,
22550
+ indicesConfig: indicesConfigForPropGetters,
22269
22551
  onRefine: function onRefine(query) {
22270
22552
  refineAutocomplete(query);
22271
22553
  refineSearchBox(query);
22554
+ storage.onAdd(query);
22272
22555
  },
22273
22556
  onSelect: userOnSelect !== null && userOnSelect !== void 0 ? userOnSelect : function (_ref4) {
22274
22557
  var query = _ref4.query,
@@ -22291,15 +22574,37 @@
22291
22574
  getItemProps = _usePropGetters.getItemProps,
22292
22575
  getPanelProps = _usePropGetters.getPanelProps,
22293
22576
  getRootProps = _usePropGetters.getRootProps;
22577
+ var AutocompleteRecentSearchComponent = _typeof$S(showRecent) === 'object' && showRecent.itemComponent || AutocompleteRecentSearch;
22294
22578
  return /*#__PURE__*/React__default.createElement(Autocomplete, _extends$1({}, props, getRootProps()), /*#__PURE__*/React__default.createElement(AutocompleteSearch, {
22295
22579
  inputProps: getInputProps(),
22296
22580
  clearQuery: function clearQuery() {
22297
22581
  refineSearchBox('');
22298
22582
  refineAutocomplete('');
22299
22583
  }
22300
- }), /*#__PURE__*/React__default.createElement(AutocompletePanel, getPanelProps(), indices.map(function (_ref5, index) {
22301
- var indexId = _ref5.indexId,
22302
- hits = _ref5.hits;
22584
+ }), /*#__PURE__*/React__default.createElement(AutocompletePanel, getPanelProps(), showRecent && /*#__PURE__*/React__default.createElement(AutocompleteIndex
22585
+ // @ts-ignore - there seems to be problems with React.ComponentType and this, but it's actually correct
22586
+ , {
22587
+ ItemComponent: function ItemComponent(_ref5) {
22588
+ var item = _ref5.item,
22589
+ onSelect = _ref5.onSelect;
22590
+ return /*#__PURE__*/React__default.createElement(AutocompleteRecentSearchComponent, {
22591
+ item: item,
22592
+ onSelect: onSelect,
22593
+ onRemoveRecentSearch: function onRemoveRecentSearch() {
22594
+ return storage.onRemove(item.query);
22595
+ }
22596
+ });
22597
+ },
22598
+ classNames: {
22599
+ root: 'ais-AutocompleteRecentSearches',
22600
+ list: 'ais-AutocompleteRecentSearchesList',
22601
+ item: 'ais-AutocompleteRecentSearchesItem'
22602
+ },
22603
+ items: storageHits,
22604
+ getItemProps: getItemProps
22605
+ }), indices.map(function (_ref6, index) {
22606
+ var indexId = _ref6.indexId,
22607
+ hits = _ref6.hits;
22303
22608
  return /*#__PURE__*/React__default.createElement(AutocompleteIndex, {
22304
22609
  key: indexId
22305
22610
  // @ts-expect-error - there seems to be problems with React.ComponentType and this, but it's actually correct