instantsearch.js 4.84.0 → 4.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -80,7 +80,8 @@ var connectChat = exports.default = function connectChat(renderFn) {
80
80
  api: "https://".concat(appId, ".algolia.net/agent-studio/1/agents/").concat(agentId, "/completions?compatibilityMode=ai-sdk-5"),
81
81
  headers: {
82
82
  'x-algolia-application-id': appId,
83
- 'x-algolia-api-Key': apiKey
83
+ 'x-algolia-api-Key': apiKey,
84
+ 'x-algolia-agent': (0, _utils.getAlgoliaAgent)(instantSearchInstance.client)
84
85
  }
85
86
  });
86
87
  }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getAlgoliaAgent = getAlgoliaAgent;
7
+ function getAlgoliaAgent(client) {
8
+ var clientTyped = client;
9
+ return clientTyped.transporter && clientTyped.transporter.userAgent ? clientTyped.transporter.userAgent.value : clientTyped._ua;
10
+ }
@@ -223,6 +223,17 @@ Object.keys(_geoSearch).forEach(function (key) {
223
223
  }
224
224
  });
225
225
  });
226
+ var _getAlgoliaAgent = require("./getAlgoliaAgent");
227
+ Object.keys(_getAlgoliaAgent).forEach(function (key) {
228
+ if (key === "default" || key === "__esModule") return;
229
+ if (key in exports && exports[key] === _getAlgoliaAgent[key]) return;
230
+ Object.defineProperty(exports, key, {
231
+ enumerable: true,
232
+ get: function get() {
233
+ return _getAlgoliaAgent[key];
234
+ }
235
+ });
236
+ });
226
237
  var _getAppIdAndApiKey = require("./getAppIdAndApiKey");
227
238
  Object.keys(_getAppIdAndApiKey).forEach(function (key) {
228
239
  if (key === "default" || key === "__esModule") return;
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _default = exports.default = '4.84.0';
7
+ var _default = exports.default = '4.85.0';
@@ -70,8 +70,7 @@ function createMetadataMiddleware() {
70
70
  subscribe: function subscribe() {
71
71
  // using setTimeout here to delay extraction until widgets have been added in a tick (e.g. Vue)
72
72
  setTimeout(function () {
73
- var client = instantSearchInstance.client;
74
- payload.ua = client.transporter && client.transporter.userAgent ? client.transporter.userAgent.value : client._ua;
73
+ payload.ua = (0, _utils.getAlgoliaAgent)(instantSearchInstance.client);
75
74
  extractWidgetPayload(instantSearchInstance.mainIndex.getWidgets(), instantSearchInstance, payload);
76
75
  instantSearchInstance.middleware.forEach(function (middleware) {
77
76
  return payload.widgets.push({
@@ -110,13 +110,14 @@ function AutocompleteWrapper(_ref) {
110
110
  indices = _ref.indices,
111
111
  getSearchPageURL = _ref.getSearchPageURL,
112
112
  userOnSelect = _ref.onSelect,
113
- refine = _ref.refine,
113
+ refineAutocomplete = _ref.refine,
114
114
  cssClasses = _ref.cssClasses,
115
115
  renderState = _ref.renderState,
116
116
  instantSearchInstance = _ref.instantSearchInstance,
117
117
  showRecent = _ref.showRecent,
118
118
  showSuggestions = _ref.showSuggestions,
119
- templates = _ref.templates;
119
+ templates = _ref.templates,
120
+ placeholder = _ref.placeholder;
120
121
  var isolatedIndex = renderState.isolatedIndex,
121
122
  targetIndex = renderState.targetIndex;
122
123
  var searchboxQuery = isolatedIndex === null || isolatedIndex === void 0 ? void 0 : (_isolatedIndex$getHel = isolatedIndex.getHelper()) === null || _isolatedIndex$getHel === void 0 ? void 0 : _isolatedIndex$getHel.state.query;
@@ -135,6 +136,7 @@ function AutocompleteWrapper(_ref) {
135
136
  return ['ais.hits', 'ais.infiniteHits'].includes($$type);
136
137
  })) !== null && _targetIndex$getWidge !== void 0 ? _targetIndex$getWidge : false;
137
138
  var onRefine = function onRefine(query) {
139
+ refineAutocomplete(query);
138
140
  instantSearchInstance.setUiState(function (uiState) {
139
141
  var _objectSpread2;
140
142
  return _objectSpread(_objectSpread({}, uiState), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, targetIndex.getIndexId(), _objectSpread(_objectSpread({}, uiState[targetIndex.getIndexId()]), {}, {
@@ -165,7 +167,8 @@ function AutocompleteWrapper(_ref) {
165
167
  return;
166
168
  }
167
169
  setQuery(query);
168
- }
170
+ },
171
+ placeholder: placeholder
169
172
  }),
170
173
  getInputProps = _usePropGetters.getInputProps,
171
174
  getItemProps = _usePropGetters.getItemProps,
@@ -264,11 +267,16 @@ function AutocompleteWrapper(_ref) {
264
267
  }));
265
268
  };
266
269
  var elementId = indexName === (showSuggestions === null || showSuggestions === void 0 ? void 0 : showSuggestions.indexName) ? 'suggestions' : indexName;
270
+ var filteredHits = elementId === 'suggestions' && showRecent ? hits.filter(function (suggestionHit) {
271
+ return !(0, _utils.find)(storageHits, function (storageHit) {
272
+ return storageHit.query === suggestionHit.query;
273
+ });
274
+ }) : hits;
267
275
  elements[elementId] = (0, _preact.h)(AutocompleteIndex, {
268
276
  key: indexId,
269
277
  HeaderComponent: headerComponent,
270
278
  ItemComponent: itemComponent,
271
- items: hits.map(function (item) {
279
+ items: filteredHits.map(function (item) {
272
280
  return _objectSpread(_objectSpread({}, item), {}, {
273
281
  __indexName: indexId
274
282
  });
@@ -284,11 +292,11 @@ function AutocompleteWrapper(_ref) {
284
292
  inputProps: _objectSpread(_objectSpread({}, getInputProps()), {}, {
285
293
  // @ts-ignore - This clashes with some ambient React JSX declarations.
286
294
  onInput: function onInput(evt) {
287
- return refine(evt.currentTarget.value);
295
+ return refineAutocomplete(evt.currentTarget.value);
288
296
  }
289
297
  }),
290
298
  onClear: function onClear() {
291
- return onRefine('');
299
+ onRefine('');
292
300
  },
293
301
  isSearchStalled: instantSearchInstance.status === 'stalled'
294
302
  }), (0, _preact.h)(AutocompletePanel, getPanelProps(), templates.panel ? (0, _preact.h)(_Template.default, _extends({}, renderState.templateProps, {
@@ -316,7 +324,8 @@ function EXPERIMENTAL_autocomplete(widgetParams) {
316
324
  _ref0$templates = _ref0.templates,
317
325
  templates = _ref0$templates === void 0 ? {} : _ref0$templates,
318
326
  _ref0$cssClasses = _ref0.cssClasses,
319
- userCssClasses = _ref0$cssClasses === void 0 ? {} : _ref0$cssClasses;
327
+ userCssClasses = _ref0$cssClasses === void 0 ? {} : _ref0$cssClasses,
328
+ placeholder = _ref0.placeholder;
320
329
  if (!container) {
321
330
  throw new Error(withUsage('The `container` option is required.'));
322
331
  }
@@ -367,6 +376,7 @@ function EXPERIMENTAL_autocomplete(widgetParams) {
367
376
  cssClasses: cssClasses,
368
377
  showRecent: showRecent,
369
378
  showSuggestions: showSuggestions,
379
+ placeholder: placeholder,
370
380
  renderState: {
371
381
  indexTemplateProps: [],
372
382
  isolatedIndex: undefined,
@@ -57,13 +57,13 @@ function getDefinedProperties(obj) {
57
57
  return value !== undefined;
58
58
  }));
59
59
  }
60
- var _ref6 = (0, _preact.h)(_instantsearchUiComponents.ArrowRightIconComponent, {
60
+ var _ref6 = (0, _preact.h)(_instantsearchUiComponents.ArrowRightIcon, {
61
61
  createElement: _preact.h
62
62
  });
63
- var _ref7 = (0, _preact.h)(_instantsearchUiComponents.ChevronLeftIconComponent, {
63
+ var _ref7 = (0, _preact.h)(_instantsearchUiComponents.ChevronLeftIcon, {
64
64
  createElement: _preact.h
65
65
  });
66
- var _ref8 = (0, _preact.h)(_instantsearchUiComponents.ChevronRightIconComponent, {
66
+ var _ref8 = (0, _preact.h)(_instantsearchUiComponents.ChevronRightIcon, {
67
67
  createElement: _preact.h
68
68
  });
69
69
  function createCarouselTool(showViewAll, templates, getSearchPageURL) {
@@ -379,6 +379,10 @@ declare type AutocompleteWidgetParams<TItem extends BaseHit> = {
379
379
  * CSS classes to add.
380
380
  */
381
381
  cssClasses?: AutocompleteCSSClasses;
382
+ /**
383
+ * Placeholder text for the search input.
384
+ */
385
+ placeholder?: string;
382
386
  };
383
387
 
384
388
  declare type BaseHit = Record<string, any>;
@@ -1,4 +1,4 @@
1
- /*! InstantSearch.js 4.84.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
1
+ /*! InstantSearch.js 4.85.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
4
4
  typeof define === 'function' && define.amd ? define(factory) :
@@ -1127,6 +1127,11 @@
1127
1127
  return insideBoundingBoxStringToBoundingBox(value);
1128
1128
  }
1129
1129
 
1130
+ function getAlgoliaAgent(client) {
1131
+ var clientTyped = client;
1132
+ return clientTyped.transporter && clientTyped.transporter.userAgent ? clientTyped.transporter.userAgent.value : clientTyped._ua;
1133
+ }
1134
+
1130
1135
  // typed as any, since it accepts the _real_ js clients, not the interface we otherwise expect
1131
1136
  function getAppIdAndApiKey(searchClient) {
1132
1137
  if (searchClient.appId && searchClient.apiKey) {
@@ -14500,8 +14505,7 @@
14500
14505
  subscribe: function subscribe() {
14501
14506
  // using setTimeout here to delay extraction until widgets have been added in a tick (e.g. Vue)
14502
14507
  setTimeout(function () {
14503
- var client = instantSearchInstance.client;
14504
- payload.ua = client.transporter && client.transporter.userAgent ? client.transporter.userAgent.value : client._ua;
14508
+ payload.ua = getAlgoliaAgent(instantSearchInstance.client);
14505
14509
  extractWidgetPayload(instantSearchInstance.mainIndex.getWidgets(), instantSearchInstance, payload);
14506
14510
  instantSearchInstance.middleware.forEach(function (middleware) {
14507
14511
  return payload.widgets.push({
@@ -16486,7 +16490,7 @@
16486
16490
  };
16487
16491
  }
16488
16492
 
16489
- var version$1 = '4.84.0';
16493
+ var version$1 = '4.85.0';
16490
16494
 
16491
16495
  var withUsage$v = createDocumentationMessageGenerator({
16492
16496
  name: 'instantsearch'
@@ -17262,7 +17266,7 @@
17262
17266
  onSelect = _getItemProps.onSelect,
17263
17267
  itemProps = _objectWithoutProperties$1(_getItemProps, _excluded$a);
17264
17268
  return createElement("li", _extends$1({
17265
- key: item.objectID
17269
+ key: "".concat(itemProps.id, ":").concat(item.objectID)
17266
17270
  }, itemProps, {
17267
17271
  className: cx('ais-AutocompleteIndexItem', classNames.item, className)
17268
17272
  }), createElement(ItemComponent, {
@@ -17273,16 +17277,23 @@
17273
17277
  };
17274
17278
  }
17275
17279
 
17276
- var _excluded$b = ["children", "classNames"];
17280
+ var _excluded$b = ["children", "classNames", "hidden"];
17277
17281
  function createAutocompletePanelComponent(_ref) {
17278
17282
  var createElement = _ref.createElement;
17279
17283
  return function AutocompletePanel(userProps) {
17280
17284
  var children = userProps.children,
17281
17285
  _userProps$classNames = userProps.classNames,
17282
17286
  classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
17287
+ hidden = userProps.hidden,
17283
17288
  props = _objectWithoutProperties$1(userProps, _excluded$b);
17284
17289
  return createElement("div", _extends$1({}, props, {
17285
- className: cx('ais-AutocompletePanel', classNames.root, props.className)
17290
+ "aria-hidden": hidden,
17291
+ className: cx('ais-AutocompletePanel', !hidden && 'ais-AutocompletePanel--open', classNames.root, props.className),
17292
+ onMouseDown: function onMouseDown(event) {
17293
+ // Prevents the autocomplete panel from blurring the input when
17294
+ // clicking inside the panel.
17295
+ event.preventDefault();
17296
+ }
17286
17297
  }), createElement("div", {
17287
17298
  className: cx('ais-AutocompletePanelLayout', classNames.layout)
17288
17299
  }, children));
@@ -17431,25 +17442,21 @@
17431
17442
 
17432
17443
  var _slicedToArray$1 = unwrapExports(slicedToArray);
17433
17444
 
17434
- function AutocompleteSubmitIcon(_ref) {
17445
+ function SubmitIcon(_ref) {
17435
17446
  var createElement = _ref.createElement;
17436
17447
  return createElement("svg", {
17437
17448
  className: "ais-AutocompleteSubmitIcon",
17438
17449
  viewBox: "0 0 24 24",
17439
- width: "20",
17440
- height: "20",
17441
17450
  fill: "currentColor"
17442
17451
  }, createElement("path", {
17443
17452
  d: "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"
17444
17453
  }));
17445
17454
  }
17446
- function AutocompleteLoadingIcon(_ref2) {
17455
+ function LoadingIcon(_ref2) {
17447
17456
  var createElement = _ref2.createElement;
17448
17457
  return createElement("svg", {
17449
17458
  className: "ais-AutocompleteLoadingIcon",
17450
- viewBox: "0 0 100 100",
17451
- width: "20",
17452
- height: "20"
17459
+ viewBox: "0 0 100 100"
17453
17460
  }, createElement("circle", {
17454
17461
  cx: "50",
17455
17462
  cy: "50",
@@ -17467,19 +17474,17 @@
17467
17474
  keyTimes: "0;0.40;0.65;1"
17468
17475
  })));
17469
17476
  }
17470
- function AutocompleteClearIcon(_ref3) {
17477
+ function ClearIcon(_ref3) {
17471
17478
  var createElement = _ref3.createElement;
17472
17479
  return createElement("svg", {
17473
17480
  className: "ais-AutocompleteClearIcon",
17474
17481
  viewBox: "0 0 24 24",
17475
- width: "18",
17476
- height: "18",
17477
17482
  fill: "currentColor"
17478
17483
  }, createElement("path", {
17479
17484
  d: "M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"
17480
17485
  }));
17481
17486
  }
17482
- function AutocompleteClockIcon(_ref4) {
17487
+ function ClockIcon(_ref4) {
17483
17488
  var createElement = _ref4.createElement;
17484
17489
  return createElement("svg", {
17485
17490
  viewBox: "0 0 24 24",
@@ -17488,7 +17493,7 @@
17488
17493
  d: "M12.516 6.984v5.25l4.5 2.672-0.75 1.266-5.25-3.188v-6h1.5zM12 20.016q3.281 0 5.648-2.367t2.367-5.648-2.367-5.648-5.648-2.367-5.648 2.367-2.367 5.648 2.367 5.648 5.648 2.367zM12 2.016q4.125 0 7.055 2.93t2.93 7.055-2.93 7.055-7.055 2.93-7.055-2.93-2.93-7.055 2.93-7.055 7.055-2.93z"
17489
17494
  }));
17490
17495
  }
17491
- function AutocompleteTrashIcon(_ref5) {
17496
+ function TrashIcon(_ref5) {
17492
17497
  var createElement = _ref5.createElement;
17493
17498
  return createElement("svg", {
17494
17499
  viewBox: "0 0 24 24",
@@ -17514,7 +17519,7 @@
17514
17519
  className: cx('ais-AutocompleteItemContent', 'ais-AutocompleteRecentSearchItemContent', classNames.content)
17515
17520
  }, createElement("div", {
17516
17521
  className: cx('ais-AutocompleteItemIcon', 'ais-AutocompleteRecentSearchItemIcon', classNames.content)
17517
- }, createElement(AutocompleteClockIcon, {
17522
+ }, createElement(ClockIcon, {
17518
17523
  createElement: createElement
17519
17524
  })), createElement("div", {
17520
17525
  className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompleteRecentSearchItemContentBody', classNames.content)
@@ -17527,7 +17532,7 @@
17527
17532
  evt.stopPropagation();
17528
17533
  onRemoveRecentSearch();
17529
17534
  }
17530
- }, createElement(AutocompleteTrashIcon, {
17535
+ }, createElement(TrashIcon, {
17531
17536
  createElement: createElement
17532
17537
  }))));
17533
17538
  };
@@ -17564,12 +17569,12 @@
17564
17569
  className: "ais-AutocompleteSubmitButton",
17565
17570
  type: "submit",
17566
17571
  title: "Submit"
17567
- }, createElement(AutocompleteSubmitIcon, {
17572
+ }, createElement(SubmitIcon, {
17568
17573
  createElement: createElement
17569
17574
  }))), createElement("div", {
17570
17575
  className: "ais-AutocompleteLoadingIndicator",
17571
17576
  hidden: !isSearchStalled
17572
- }, createElement(AutocompleteLoadingIcon, {
17577
+ }, createElement(LoadingIcon, {
17573
17578
  createElement: createElement
17574
17579
  }))), createElement("div", {
17575
17580
  className: "ais-AutocompleteInputWrapper"
@@ -17582,7 +17587,6 @@
17582
17587
  autoCapitalize: "off",
17583
17588
  enterKeyHint: "search",
17584
17589
  spellCheck: "false",
17585
- placeholder: "",
17586
17590
  maxLength: 512,
17587
17591
  type: "search",
17588
17592
  value: query
@@ -17594,7 +17598,7 @@
17594
17598
  title: "Clear",
17595
17599
  hidden: query.length === 0 || isSearchStalled,
17596
17600
  onClick: onClear
17597
- }, createElement(AutocompleteClearIcon, {
17601
+ }, createElement(ClearIcon, {
17598
17602
  createElement: createElement
17599
17603
  }))));
17600
17604
  };
@@ -17614,7 +17618,7 @@
17614
17618
  className: cx('ais-AutocompleteItemContent', 'ais-AutocompleteSuggestionItemContent', classNames.content)
17615
17619
  }, createElement("div", {
17616
17620
  className: cx('ais-AutocompleteItemIcon', 'ais-AutocompleteSuggestionItemIcon', classNames.content)
17617
- }, createElement(AutocompleteSubmitIcon, {
17621
+ }, createElement(SubmitIcon, {
17618
17622
  createElement: createElement
17619
17623
  })), createElement("div", {
17620
17624
  className: cx('ais-AutocompleteItemContentBody', 'ais-AutocompleteSuggestionItemContentBody', classNames.content)
@@ -17632,7 +17636,8 @@
17632
17636
  var indices = _ref2.indices,
17633
17637
  indicesConfig = _ref2.indicesConfig,
17634
17638
  onRefine = _ref2.onRefine,
17635
- globalOnSelect = _ref2.onSelect;
17639
+ globalOnSelect = _ref2.onSelect,
17640
+ placeholder = _ref2.placeholder;
17636
17641
  var getElementId = createGetElementId(useId());
17637
17642
  var inputRef = useRef(null);
17638
17643
  var rootRef = useRef(null);
@@ -17728,6 +17733,7 @@
17728
17733
  'aria-haspopup': 'grid',
17729
17734
  'aria-controls': getElementId('panel'),
17730
17735
  'aria-activedescendant': activeDescendant,
17736
+ placeholder: placeholder,
17731
17737
  onFocus: function onFocus() {
17732
17738
  return setIsOpen(true);
17733
17739
  },
@@ -18198,9 +18204,9 @@
18198
18204
  Fragment: Fragment
18199
18205
  }) : _userProps$itemCompon,
18200
18206
  _userProps$previousIc = userProps.previousIconComponent,
18201
- PreviousIconComponent = _userProps$previousIc === void 0 ? PreviousIconDefaultComponent : _userProps$previousIc,
18207
+ PreviousIcon = _userProps$previousIc === void 0 ? PreviousIconDefaultComponent : _userProps$previousIc,
18202
18208
  _userProps$nextIconCo = userProps.nextIconComponent,
18203
- NextIconComponent = _userProps$nextIconCo === void 0 ? NextIconDefaultComponent : _userProps$nextIconCo,
18209
+ NextIcon = _userProps$nextIconCo === void 0 ? NextIconDefaultComponent : _userProps$nextIconCo,
18204
18210
  HeaderComponent = userProps.headerComponent,
18205
18211
  _userProps$showNaviga = userProps.showNavigation,
18206
18212
  showNavigation = _userProps$showNaviga === void 0 ? true : _userProps$showNaviga,
@@ -18269,7 +18275,7 @@
18269
18275
  event.preventDefault();
18270
18276
  scrollLeft();
18271
18277
  }
18272
- }, createElement(PreviousIconComponent, {
18278
+ }, createElement(PreviousIcon, {
18273
18279
  createElement: createElement
18274
18280
  })), createElement("ol", {
18275
18281
  className: cx(cssClasses.list),
@@ -18315,7 +18321,7 @@
18315
18321
  event.preventDefault();
18316
18322
  scrollRight();
18317
18323
  }
18318
- }, createElement(NextIconComponent, {
18324
+ }, createElement(NextIcon, {
18319
18325
  createElement: createElement
18320
18326
  })));
18321
18327
  };
@@ -20477,13 +20483,14 @@
20477
20483
  indices = _ref.indices,
20478
20484
  getSearchPageURL = _ref.getSearchPageURL,
20479
20485
  userOnSelect = _ref.onSelect,
20480
- refine = _ref.refine,
20486
+ refineAutocomplete = _ref.refine,
20481
20487
  cssClasses = _ref.cssClasses,
20482
20488
  renderState = _ref.renderState,
20483
20489
  instantSearchInstance = _ref.instantSearchInstance,
20484
20490
  showRecent = _ref.showRecent,
20485
20491
  showSuggestions = _ref.showSuggestions,
20486
- templates = _ref.templates;
20492
+ templates = _ref.templates,
20493
+ placeholder = _ref.placeholder;
20487
20494
  var isolatedIndex = renderState.isolatedIndex,
20488
20495
  targetIndex = renderState.targetIndex;
20489
20496
  var searchboxQuery = isolatedIndex === null || isolatedIndex === void 0 ? void 0 : (_isolatedIndex$getHel = isolatedIndex.getHelper()) === null || _isolatedIndex$getHel === void 0 ? void 0 : _isolatedIndex$getHel.state.query;
@@ -20502,6 +20509,7 @@
20502
20509
  return ['ais.hits', 'ais.infiniteHits'].includes($$type);
20503
20510
  })) !== null && _targetIndex$getWidge !== void 0 ? _targetIndex$getWidge : false;
20504
20511
  var onRefine = function onRefine(query) {
20512
+ refineAutocomplete(query);
20505
20513
  instantSearchInstance.setUiState(function (uiState) {
20506
20514
  var _objectSpread2$1;
20507
20515
  return _objectSpread2(_objectSpread2({}, uiState), {}, (_objectSpread2$1 = {}, _defineProperty(_objectSpread2$1, targetIndex.getIndexId(), _objectSpread2(_objectSpread2({}, uiState[targetIndex.getIndexId()]), {}, {
@@ -20532,7 +20540,8 @@
20532
20540
  return;
20533
20541
  }
20534
20542
  setQuery(query);
20535
- }
20543
+ },
20544
+ placeholder: placeholder
20536
20545
  }),
20537
20546
  getInputProps = _usePropGetters.getInputProps,
20538
20547
  getItemProps = _usePropGetters.getItemProps,
@@ -20631,11 +20640,16 @@
20631
20640
  }));
20632
20641
  };
20633
20642
  var elementId = indexName === (showSuggestions === null || showSuggestions === void 0 ? void 0 : showSuggestions.indexName) ? 'suggestions' : indexName;
20643
+ var filteredHits = elementId === 'suggestions' && showRecent ? hits.filter(function (suggestionHit) {
20644
+ return !find(storageHits, function (storageHit) {
20645
+ return storageHit.query === suggestionHit.query;
20646
+ });
20647
+ }) : hits;
20634
20648
  elements[elementId] = h(AutocompleteIndex, {
20635
20649
  key: indexId,
20636
20650
  HeaderComponent: headerComponent,
20637
20651
  ItemComponent: itemComponent,
20638
- items: hits.map(function (item) {
20652
+ items: filteredHits.map(function (item) {
20639
20653
  return _objectSpread2(_objectSpread2({}, item), {}, {
20640
20654
  __indexName: indexId
20641
20655
  });
@@ -20651,11 +20665,11 @@
20651
20665
  inputProps: _objectSpread2(_objectSpread2({}, getInputProps()), {}, {
20652
20666
  // @ts-ignore - This clashes with some ambient React JSX declarations.
20653
20667
  onInput: function onInput(evt) {
20654
- return refine(evt.currentTarget.value);
20668
+ return refineAutocomplete(evt.currentTarget.value);
20655
20669
  }
20656
20670
  }),
20657
20671
  onClear: function onClear() {
20658
- return onRefine('');
20672
+ onRefine('');
20659
20673
  },
20660
20674
  isSearchStalled: instantSearchInstance.status === 'stalled'
20661
20675
  }), h(AutocompletePanel, getPanelProps(), templates.panel ? h(Template, _extends({}, renderState.templateProps, {
@@ -20683,7 +20697,8 @@
20683
20697
  _ref0$templates = _ref0.templates,
20684
20698
  templates = _ref0$templates === void 0 ? {} : _ref0$templates,
20685
20699
  _ref0$cssClasses = _ref0.cssClasses,
20686
- userCssClasses = _ref0$cssClasses === void 0 ? {} : _ref0$cssClasses;
20700
+ userCssClasses = _ref0$cssClasses === void 0 ? {} : _ref0$cssClasses,
20701
+ placeholder = _ref0.placeholder;
20687
20702
  if (!container) {
20688
20703
  throw new Error(withUsage$z('The `container` option is required.'));
20689
20704
  }
@@ -20734,6 +20749,7 @@
20734
20749
  cssClasses: cssClasses,
20735
20750
  showRecent: showRecent,
20736
20751
  showSuggestions: showSuggestions,
20752
+ placeholder: placeholder,
20737
20753
  renderState: {
20738
20754
  indexTemplateProps: [],
20739
20755
  isolatedIndex: undefined,