instantsearch.js 4.86.1 → 4.87.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.
Files changed (47) hide show
  1. package/cjs/connectors/autocomplete/connectAutocomplete.js +13 -5
  2. package/cjs/connectors/chat/connectChat.js +89 -17
  3. package/cjs/connectors/filter-suggestions/connectFilterSuggestions.js +255 -0
  4. package/cjs/connectors/index.js +7 -0
  5. package/cjs/connectors/index.umd.js +7 -0
  6. package/cjs/lib/chat/chat.js +3 -3
  7. package/cjs/lib/chat/index.js +5 -2
  8. package/cjs/lib/version.js +1 -1
  9. package/cjs/widgets/autocomplete/autocomplete.js +15 -6
  10. package/cjs/widgets/chat/chat.js +32 -3
  11. package/cjs/widgets/filter-suggestions/filter-suggestions.js +131 -0
  12. package/cjs/widgets/index.js +7 -0
  13. package/cjs/widgets/index.umd.js +7 -0
  14. package/dist/instantsearch.development.d.ts +885 -72
  15. package/dist/instantsearch.development.js +731 -184
  16. package/dist/instantsearch.development.js.map +1 -1
  17. package/dist/instantsearch.production.d.ts +885 -72
  18. package/dist/instantsearch.production.min.d.ts +885 -72
  19. package/dist/instantsearch.production.min.js +2 -2
  20. package/dist/instantsearch.production.min.js.map +1 -1
  21. package/es/connectors/autocomplete/connectAutocomplete.d.ts +10 -0
  22. package/es/connectors/autocomplete/connectAutocomplete.js +13 -5
  23. package/es/connectors/chat/connectChat.d.ts +10 -0
  24. package/es/connectors/chat/connectChat.js +89 -17
  25. package/es/connectors/filter-suggestions/connectFilterSuggestions.d.ts +95 -0
  26. package/es/connectors/filter-suggestions/connectFilterSuggestions.js +249 -0
  27. package/es/connectors/index.d.ts +1 -0
  28. package/es/connectors/index.js +2 -1
  29. package/es/connectors/index.umd.d.ts +1 -0
  30. package/es/connectors/index.umd.js +2 -1
  31. package/es/lib/chat/chat.d.ts +1 -1
  32. package/es/lib/chat/chat.js +3 -3
  33. package/es/lib/chat/index.d.ts +3 -0
  34. package/es/lib/chat/index.js +4 -1
  35. package/es/lib/version.d.ts +1 -1
  36. package/es/lib/version.js +1 -1
  37. package/es/widgets/autocomplete/autocomplete.d.ts +2 -1
  38. package/es/widgets/autocomplete/autocomplete.js +15 -6
  39. package/es/widgets/chat/chat.d.ts +8 -0
  40. package/es/widgets/chat/chat.js +33 -4
  41. package/es/widgets/filter-suggestions/filter-suggestions.d.ts +689 -0
  42. package/es/widgets/filter-suggestions/filter-suggestions.js +124 -0
  43. package/es/widgets/index.d.ts +1 -0
  44. package/es/widgets/index.js +2 -1
  45. package/es/widgets/index.umd.d.ts +1 -0
  46. package/es/widgets/index.umd.js +2 -1
  47. package/package.json +6 -6
@@ -44,4 +44,5 @@ export { default as connectFrequentlyBoughtTogether } from "./frequently-bought-
44
44
  export { default as connectLookingSimilar } from "./looking-similar/connectLookingSimilar.js";
45
45
  export var connectChat = function connectChat() {
46
46
  throw new Error("\"connectChat\" is not available from the UMD build.\n\nPlease use InstantSearch.js with a packaging system:\nhttps://www.algolia.com/doc/guides/building-search-ui/installation/js/#with-a-packaging-system");
47
- };
47
+ };
48
+ export { default as connectFilterSuggestions } from "./filter-suggestions/connectFilterSuggestions.js";
@@ -3,7 +3,7 @@ import type { UIMessage, ChatState as BaseChatState, ChatStatus, ChatInit } from
3
3
  export type { UIMessage };
4
4
  export { AbstractChat };
5
5
  export { ChatInit };
6
- export declare const CACHE_KEY = "instantsearch-chat-initial-messages-";
6
+ export declare const CACHE_KEY = "instantsearch-chat-initial-messages";
7
7
  export declare class ChatState<TUiMessage extends UIMessage> implements BaseChatState<TUiMessage> {
8
8
  _messages: TUiMessage[];
9
9
  _status: ChatStatus;
@@ -25,9 +25,9 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
25
25
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
26
26
  import { AbstractChat } from 'ai';
27
27
  export { AbstractChat };
28
- export var CACHE_KEY = 'instantsearch-chat-initial-messages-';
28
+ export var CACHE_KEY = 'instantsearch-chat-initial-messages';
29
29
  function getDefaultInitialMessages(id) {
30
- var initialMessages = sessionStorage.getItem(CACHE_KEY + id);
30
+ var initialMessages = sessionStorage.getItem(CACHE_KEY + (id ? "-".concat(id) : ''));
31
31
  return initialMessages ? JSON.parse(initialMessages) : [];
32
32
  }
33
33
  export var ChatState = /*#__PURE__*/function () {
@@ -97,7 +97,7 @@ export var ChatState = /*#__PURE__*/function () {
97
97
  var saveMessagesInLocalStorage = function saveMessagesInLocalStorage() {
98
98
  if (_this.status === 'ready') {
99
99
  try {
100
- sessionStorage.setItem(CACHE_KEY + id, JSON.stringify(_this.messages));
100
+ sessionStorage.setItem(CACHE_KEY + (id ? "-".concat(id) : ''), JSON.stringify(_this.messages));
101
101
  } catch (e) {
102
102
  // Do nothing if sessionStorage is not available or full
103
103
  }
@@ -5,3 +5,6 @@ export { ChatState } from './chat';
5
5
  export { Chat } from './chat';
6
6
  export declare const SearchIndexToolType = "algolia_search_index";
7
7
  export declare const RecommendToolType = "algolia_recommend";
8
+ export declare const MemorizeToolType = "algolia_memorize";
9
+ export declare const MemorySearchToolType = "algolia_memory_search";
10
+ export declare const PonderToolType = "algolia_ponder";
@@ -2,4 +2,7 @@ export { AbstractChat } from "./chat.js";
2
2
  export { ChatState } from "./chat.js";
3
3
  export { Chat } from "./chat.js";
4
4
  export var SearchIndexToolType = 'algolia_search_index';
5
- export var RecommendToolType = 'algolia_recommend';
5
+ export var RecommendToolType = 'algolia_recommend';
6
+ export var MemorizeToolType = 'algolia_memorize';
7
+ export var MemorySearchToolType = 'algolia_memory_search';
8
+ export var PonderToolType = 'algolia_ponder';
@@ -1,2 +1,2 @@
1
- declare const _default: "4.86.1";
1
+ declare const _default: "4.87.0";
2
2
  export default _default;
package/es/lib/version.js CHANGED
@@ -1 +1 @@
1
- export default '4.86.1';
1
+ export default '4.87.0';
@@ -1,5 +1,5 @@
1
1
 
2
- import type { AutocompleteConnectorParams, AutocompleteRenderState, AutocompleteWidgetDescription } from '../../connectors/autocomplete/connectAutocomplete';
2
+ import type { AutocompleteConnectorParams, AutocompleteRenderState, AutocompleteWidgetDescription, TransformItemsIndicesConfig } from '../../connectors/autocomplete/connectAutocomplete';
3
3
  import type { BaseHit, IndexUiState, IndexWidget, Template, WidgetFactory } from '../../types';
4
4
  import type { PlainSearchParameters } from 'algoliasearch-helper';
5
5
  import type { AutocompleteClassNames, AutocompleteIndexClassNames, AutocompleteIndexConfig } from 'instantsearch-ui-components';
@@ -79,6 +79,7 @@ type AutocompleteWidgetParams<TItem extends BaseHit> = {
79
79
  }>;
80
80
  cssClasses?: Partial<AutocompleteIndexClassNames>;
81
81
  };
82
+ transformItems?: (indices: TransformItemsIndicesConfig[]) => TransformItemsIndicesConfig[];
82
83
  /**
83
84
  * Search parameters to apply to the autocomplete indices.
84
85
  */
@@ -171,7 +171,8 @@ function AutocompleteWrapper(_ref4) {
171
171
  query: searchboxQuery,
172
172
  showRecent: showRecent,
173
173
  indices: indices,
174
- indicesConfig: indicesConfig
174
+ indicesConfig: indicesConfig,
175
+ suggestionsIndexName: showSuggestions === null || showSuggestions === void 0 ? void 0 : showSuggestions.indexName
175
176
  }),
176
177
  storage = _useStorage.storage,
177
178
  storageHits = _useStorage.storageHits,
@@ -255,18 +256,24 @@ function AutocompleteWrapper(_ref4) {
255
256
  });
256
257
  }
257
258
  indices.forEach(function (_ref8, i) {
258
- var _indicesConfig$i$temp;
259
+ var _currentIndexConfig$t;
259
260
  var indexId = _ref8.indexId,
260
261
  indexName = _ref8.indexName,
261
262
  hits = _ref8.hits;
263
+ var currentIndexConfig = find(indicesConfig, function (config) {
264
+ return config.indexName === indexName;
265
+ });
266
+ if (!currentIndexConfig) {
267
+ return;
268
+ }
262
269
  if (!renderState.indexTemplateProps[i]) {
263
270
  renderState.indexTemplateProps[i] = prepareTemplateProps({
264
271
  defaultTemplates: {},
265
272
  templatesConfig: instantSearchInstance.templatesConfig,
266
- templates: indicesConfig[i].templates
273
+ templates: currentIndexConfig.templates
267
274
  });
268
275
  }
269
- var headerComponent = (_indicesConfig$i$temp = indicesConfig[i].templates) !== null && _indicesConfig$i$temp !== void 0 && _indicesConfig$i$temp.header ? function (_ref9) {
276
+ var headerComponent = (_currentIndexConfig$t = currentIndexConfig.templates) !== null && _currentIndexConfig$t !== void 0 && _currentIndexConfig$t.header ? function (_ref9) {
270
277
  var items = _ref9.items;
271
278
  return h(TemplateComponent, _extends({}, renderState.indexTemplateProps[i], {
272
279
  templateKey: "header",
@@ -306,7 +313,7 @@ function AutocompleteWrapper(_ref4) {
306
313
  });
307
314
  }),
308
315
  getItemProps: getItemProps,
309
- classNames: indicesConfig[i].cssClasses
316
+ classNames: currentIndexConfig.cssClasses
310
317
  });
311
318
  });
312
319
  return h(Autocomplete, _extends({}, getRootProps(), {
@@ -346,6 +353,7 @@ export function EXPERIMENTAL_autocomplete(widgetParams) {
346
353
  onSelect = _ref1.onSelect,
347
354
  _ref1$templates = _ref1.templates,
348
355
  templates = _ref1$templates === void 0 ? {} : _ref1$templates,
356
+ transformItems = _ref1.transformItems,
349
357
  _ref1$cssClasses = _ref1.cssClasses,
350
358
  userCssClasses = _ref1$cssClasses === void 0 ? {} : _ref1$cssClasses,
351
359
  placeholder = _ref1.placeholder;
@@ -430,7 +438,8 @@ export function EXPERIMENTAL_autocomplete(widgetParams) {
430
438
  indexId: indexName
431
439
  }).addWidgets([configure(indexSearchParameters || {})]);
432
440
  })), [_objectSpread(_objectSpread({}, makeWidget({
433
- escapeHTML: escapeHTML
441
+ escapeHTML: escapeHTML,
442
+ transformItems: transformItems
434
443
  })), {}, {
435
444
  $$widgetType: 'ais.autocomplete'
436
445
  })]))];
@@ -197,6 +197,13 @@ export type ChatTemplates<THit extends NonNullable<object> = BaseHit> = Partial<
197
197
  actions: ChatMessageActionProps[];
198
198
  message: ChatMessageBase;
199
199
  }>;
200
+ /**
201
+ * Template to use for prompt suggestions.
202
+ */
203
+ suggestions: Template<{
204
+ suggestions: string[];
205
+ onSuggestionClick: (suggestion: string) => void;
206
+ }>;
200
207
  }>;
201
208
  type ChatWidgetParams<THit extends RecordWithObjectID = RecordWithObjectID> = {
202
209
  /**
@@ -506,6 +513,7 @@ declare const _default: <THit extends RecordWithObjectID = RecordWithObjectID>(w
506
513
  setInput: (input: string) => void;
507
514
  setOpen: (open: boolean) => void;
508
515
  setMessages: (messagesParam: import("ai").UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>[] | ((m: import("ai").UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>[]) => import("ai").UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>[])) => void;
516
+ suggestions: string[] | undefined;
509
517
  isClearing: boolean;
510
518
  clearMessages: () => void;
511
519
  onClearTransitionEnd: () => void;
@@ -19,7 +19,7 @@ import { Fragment, h, render } from 'preact';
19
19
  import { useMemo } from 'preact/hooks';
20
20
  import TemplateComponent from "../../components/Template/Template.js";
21
21
  import connectChat from "../../connectors/chat/connectChat.js";
22
- import { SearchIndexToolType, RecommendToolType } from "../../lib/chat/index.js";
22
+ import { SearchIndexToolType, RecommendToolType, MemorizeToolType, MemorySearchToolType, PonderToolType } from "../../lib/chat/index.js";
23
23
  import { prepareTemplateProps } from "../../lib/templating/index.js";
24
24
  import { useStickToBottom } from "../../lib/useStickToBottom.js";
25
25
  import { getContainerNode, createDocumentationMessageGenerator } from "../../lib/utils/index.js";
@@ -161,7 +161,13 @@ function createCarouselTool(showViewAll, templates, getSearchPageURL) {
161
161
  }
162
162
  function createDefaultTools(templates, getSearchPageURL) {
163
163
  var _ref9;
164
- return _ref9 = {}, _defineProperty(_ref9, SearchIndexToolType, createCarouselTool(true, templates, getSearchPageURL)), _defineProperty(_ref9, RecommendToolType, createCarouselTool(false, templates, getSearchPageURL)), _ref9;
164
+ return _ref9 = {}, _defineProperty(_ref9, SearchIndexToolType, createCarouselTool(true, templates, getSearchPageURL)), _defineProperty(_ref9, RecommendToolType, createCarouselTool(false, templates, getSearchPageURL)), _defineProperty(_ref9, MemorizeToolType, {
165
+ templates: {}
166
+ }), _defineProperty(_ref9, MemorySearchToolType, {
167
+ templates: {}
168
+ }), _defineProperty(_ref9, PonderToolType, {
169
+ templates: {}
170
+ }), _ref9;
165
171
  }
166
172
  function ChatWrapper(_ref0) {
167
173
  var cssClasses = _ref0.cssClasses,
@@ -184,6 +190,7 @@ function ChatWrapper(_ref0) {
184
190
  headerProps = _ref0.headerProps,
185
191
  messagesProps = _ref0.messagesProps,
186
192
  promptProps = _ref0.promptProps,
193
+ suggestionsProps = _ref0.suggestionsProps,
187
194
  state = _ref0.state;
188
195
  var _useStickToBottom = useStickToBottom({
189
196
  initial: 'smooth',
@@ -212,6 +219,7 @@ function ChatWrapper(_ref0) {
212
219
  },
213
220
  headerComponent: headerProps.layoutComponent,
214
221
  promptComponent: promptProps.layoutComponent,
222
+ suggestionsComponent: suggestionsProps.suggestionsComponent,
215
223
  headerProps: {
216
224
  onClose: function onClose() {
217
225
  return setChatOpen(false);
@@ -275,6 +283,10 @@ function ChatWrapper(_ref0) {
275
283
  headerComponent: promptProps.headerComponent,
276
284
  footerComponent: promptProps.footerComponent,
277
285
  translations: promptProps.translations
286
+ },
287
+ suggestionsProps: {
288
+ onSuggestionClick: suggestionsProps.onSuggestionClick,
289
+ suggestions: suggestionsProps.suggestions
278
290
  }
279
291
  });
280
292
  }
@@ -308,7 +320,8 @@ var createRenderer = function createRenderer(_ref1) {
308
320
  isClearing = props.isClearing,
309
321
  clearMessages = props.clearMessages,
310
322
  onClearTransitionEnd = props.onClearTransitionEnd,
311
- toolsFromConnector = props.tools;
323
+ toolsFromConnector = props.tools,
324
+ suggestions = props.suggestions;
312
325
  if (process.env.NODE_ENV === 'development' && error) {
313
326
  throw error;
314
327
  }
@@ -509,6 +522,13 @@ var createRenderer = function createRenderer(_ref1) {
509
522
  }
510
523
  }));
511
524
  } : undefined;
525
+ var suggestionsComponent = templates.suggestions ? function (suggestionsProps) {
526
+ return h(TemplateComponent, _extends({}, renderState.templateProps, {
527
+ templateKey: "suggestions",
528
+ rootTagName: "fragment",
529
+ data: suggestionsProps
530
+ }));
531
+ } : undefined;
512
532
  state.subscribe(rerender);
513
533
  function rerender() {
514
534
  render(h(ChatWrapper, {
@@ -562,7 +582,16 @@ var createRenderer = function createRenderer(_ref1) {
562
582
  translations: promptTranslations,
563
583
  promptRef: promptRef
564
584
  },
565
- state: state
585
+ state: state,
586
+ suggestionsProps: {
587
+ suggestions: suggestions,
588
+ onSuggestionClick: function onSuggestionClick(message) {
589
+ sendMessage({
590
+ text: message
591
+ });
592
+ },
593
+ suggestionsComponent: suggestionsComponent
594
+ }
566
595
  }), containerNode);
567
596
  }
568
597
  rerender();