react-instantsearch 7.29.0 → 7.31.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 (44) hide show
  1. package/dist/cjs/components/AutocompleteSearch.js +6 -3
  2. package/dist/cjs/components/ChatGreeting.js +16 -0
  3. package/dist/cjs/components/ChatMessageLoader.js +16 -0
  4. package/dist/cjs/components/ChatSidePanelLayout.js +17 -0
  5. package/dist/cjs/components/index.js +3 -0
  6. package/dist/cjs/ui/SearchBox.js +38 -2
  7. package/dist/cjs/widgets/Autocomplete.js +43 -19
  8. package/dist/cjs/widgets/Chat.js +23 -5
  9. package/dist/cjs/widgets/SearchBox.js +18 -2
  10. package/dist/cjs/widgets/TrendingFacets.js +55 -0
  11. package/dist/cjs/widgets/chat/tools/SearchIndexTool.js +7 -3
  12. package/dist/cjs/widgets/index.js +1 -0
  13. package/dist/es/components/AutocompleteSearch.d.ts +5 -2
  14. package/dist/es/components/AutocompleteSearch.js +6 -3
  15. package/dist/es/components/ChatGreeting.d.ts +1 -0
  16. package/dist/es/components/ChatGreeting.js +8 -0
  17. package/dist/es/components/ChatMessageLoader.d.ts +1 -0
  18. package/dist/es/components/ChatMessageLoader.js +8 -0
  19. package/dist/es/components/ChatOverlayLayout.d.ts +1 -3
  20. package/dist/es/components/ChatSidePanelLayout.d.ts +1 -0
  21. package/dist/es/components/ChatSidePanelLayout.js +9 -0
  22. package/dist/es/components/index.d.ts +3 -0
  23. package/dist/es/components/index.js +3 -0
  24. package/dist/es/index.js +4 -0
  25. package/dist/es/ui/SearchBox.d.ts +15 -1
  26. package/dist/es/ui/SearchBox.js +38 -2
  27. package/dist/es/widgets/Autocomplete.d.ts +6 -0
  28. package/dist/es/widgets/Autocomplete.js +43 -19
  29. package/dist/es/widgets/Chat.d.ts +13 -3
  30. package/dist/es/widgets/Chat.js +37 -19
  31. package/dist/es/widgets/RefinementList.d.ts +3 -2
  32. package/dist/es/widgets/SearchBox.d.ts +8 -2
  33. package/dist/es/widgets/SearchBox.js +19 -3
  34. package/dist/es/widgets/TrendingFacets.d.ts +11 -0
  35. package/dist/es/widgets/TrendingFacets.js +46 -0
  36. package/dist/es/widgets/chat/tools/SearchIndexTool.js +7 -3
  37. package/dist/es/widgets/index.d.ts +1 -0
  38. package/dist/es/widgets/index.js +1 -0
  39. package/dist/umd/ReactInstantSearch.js +988 -262
  40. package/dist/umd/ReactInstantSearch.min.js +3 -3
  41. package/package.json +5 -5
  42. package/dist/cjs/widgets/index.umd.js +0 -69
  43. package/dist/es/widgets/index.umd.d.ts +0 -32
  44. package/dist/es/widgets/index.umd.js +0 -37
@@ -19,17 +19,20 @@ var AutocompleteSearchComponent = (0, _instantsearchuicomponents.createAutocompl
19
19
  Fragment: _react.Fragment
20
20
  });
21
21
  function AutocompleteSearch(param) {
22
- var inputProps = param.inputProps, clearQuery = param.clearQuery, onQueryChange = param.onQueryChange, query = param.query, refine = param.refine, isSearchStalled = param.isSearchStalled;
22
+ var inputProps = param.inputProps, clearQuery = param.clearQuery, onQueryChange = param.onQueryChange, query = param.query, isSearchStalled = param.isSearchStalled, onCancel = param.onCancel, isDetached = param.isDetached, submitTitle = param.submitTitle, onAiModeClick = param.onAiModeClick;
23
23
  return /*#__PURE__*/ _react.default.createElement(AutocompleteSearchComponent, {
24
24
  inputProps: _object_spread_props._(_object_spread._({}, inputProps), {
25
25
  onChange: function onChange(event) {
26
26
  var value = event.currentTarget.value;
27
- refine(value);
28
27
  onQueryChange === null || onQueryChange === void 0 ? void 0 : onQueryChange(value);
29
28
  }
30
29
  }),
31
30
  onClear: clearQuery,
32
31
  query: query,
33
- isSearchStalled: isSearchStalled
32
+ isSearchStalled: isSearchStalled,
33
+ onCancel: onCancel,
34
+ isDetached: isDetached,
35
+ submitTitle: submitTitle,
36
+ onAiModeClick: onAiModeClick
34
37
  });
35
38
  }
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ChatGreeting", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return ChatGreeting;
10
+ }
11
+ });
12
+ var _instantsearchuicomponents = require("instantsearch-ui-components");
13
+ var _react = require("react");
14
+ var ChatGreeting = (0, _instantsearchuicomponents.createChatGreetingComponent)({
15
+ createElement: _react.createElement
16
+ });
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ChatMessageLoader", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return ChatMessageLoader;
10
+ }
11
+ });
12
+ var _instantsearchuicomponents = require("instantsearch-ui-components");
13
+ var _react = require("react");
14
+ var ChatMessageLoader = (0, _instantsearchuicomponents.createChatMessageLoaderComponent)({
15
+ createElement: _react.createElement
16
+ });
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ChatSidePanelLayout", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return ChatSidePanelLayout;
10
+ }
11
+ });
12
+ var _instantsearchuicomponents = require("instantsearch-ui-components");
13
+ var _react = require("react");
14
+ var ChatSidePanelLayout = (0, _instantsearchuicomponents.createChatSidePanelLayoutComponent)({
15
+ createElement: _react.createElement,
16
+ Fragment: _react.Fragment
17
+ });
@@ -5,5 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  var _export_star = require("@swc/helpers/_/_export_star");
7
7
  _export_star._(require("./Carousel"), exports);
8
+ _export_star._(require("./ChatMessageLoader"), exports);
8
9
  _export_star._(require("./ChatOverlayLayout"), exports);
9
10
  _export_star._(require("./ChatInlineLayout"), exports);
11
+ _export_star._(require("./ChatSidePanelLayout"), exports);
12
+ _export_star._(require("./ChatGreeting"), exports);
@@ -71,8 +71,30 @@ function DefaultLoadingIcon(param) {
71
71
  repeatCount: "indefinite"
72
72
  })))));
73
73
  }
74
+ function DefaultAiModeIcon(param) {
75
+ var classNames = param.classNames;
76
+ return /*#__PURE__*/ _react.default.createElement("svg", {
77
+ className: (0, _instantsearchuicomponents.cx)('ais-AiModeButton-icon', classNames.aiModeIcon),
78
+ xmlns: "http://www.w3.org/2000/svg",
79
+ fill: "none",
80
+ viewBox: "0 0 20 20",
81
+ width: "16",
82
+ height: "16",
83
+ "aria-hidden": "true"
84
+ }, /*#__PURE__*/ _react.default.createElement("path", {
85
+ fill: "currentColor",
86
+ fillRule: "evenodd",
87
+ d: "M10 1.875c.27 0 .51.173.594.43l1.593 4.844a1.043 1.043 0 0 0 .664.664l4.844 1.593a.625.625 0 0 1 0 1.188l-4.844 1.593a1.043 1.043 0 0 0-.664.664l-1.593 4.844a.625.625 0 0 1-1.188 0l-1.593-4.844a1.042 1.042 0 0 0-.664-.664l-4.844-1.593a.625.625 0 0 1 0-1.188l4.844-1.593a1.042 1.042 0 0 0 .664-.664l1.593-4.844a.625.625 0 0 1 .594-.43ZM9 7.539A2.292 2.292 0 0 1 7.54 9L4.5 10l3.04 1A2.292 2.292 0 0 1 9 12.46l1 3.04 1-3.04A2.293 2.293 0 0 1 12.46 11l3.04-1-3.04-1A2.292 2.292 0 0 1 11 7.54L10 4.5 9 7.54ZM4.167 1.875c.345 0 .625.28.625.625v3.333a.625.625 0 0 1-1.25 0V2.5c0-.345.28-.625.625-.625ZM15.833 13.542c.345 0 .625.28.625.625V17.5a.625.625 0 1 1-1.25 0v-3.333c0-.345.28-.625.625-.625Z",
88
+ clipRule: "evenodd"
89
+ }), /*#__PURE__*/ _react.default.createElement("path", {
90
+ fill: "currentColor",
91
+ fillRule: "evenodd",
92
+ d: "M1.875 4.167c0-.346.28-.625.625-.625h3.333a.625.625 0 1 1 0 1.25H2.5a.625.625 0 0 1-.625-.625ZM13.542 15.833c0-.345.28-.625.625-.625H17.5a.625.625 0 0 1 0 1.25h-3.333a.625.625 0 0 1-.625-.625Z",
93
+ clipRule: "evenodd"
94
+ }));
95
+ }
74
96
  function SearchBox(_0) {
75
- var formRef = _0.formRef, inputRef = _0.inputRef, inputProps = _0.inputProps, isSearchStalled = _0.isSearchStalled, onChange = _0.onChange, onReset = _0.onReset, onSubmit = _0.onSubmit, _0_placeholder = _0.placeholder, placeholder = _0_placeholder === void 0 ? '' : _0_placeholder, value = _0.value, autoFocus = _0.autoFocus, tmp = _0.resetIconComponent, ResetIcon = tmp === void 0 ? DefaultResetIcon : tmp, tmp1 = _0.submitIconComponent, SubmitIcon = tmp1 === void 0 ? DefaultSubmitIcon : tmp1, tmp2 = _0.loadingIconComponent, LoadingIcon = tmp2 === void 0 ? DefaultLoadingIcon : tmp2, _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, translations = _0.translations, props = _object_without_properties._(_0, [
97
+ var formRef = _0.formRef, inputRef = _0.inputRef, inputProps = _0.inputProps, isSearchStalled = _0.isSearchStalled, onChange = _0.onChange, onReset = _0.onReset, onSubmit = _0.onSubmit, _0_placeholder = _0.placeholder, placeholder = _0_placeholder === void 0 ? '' : _0_placeholder, value = _0.value, autoFocus = _0.autoFocus, tmp = _0.resetIconComponent, ResetIcon = tmp === void 0 ? DefaultResetIcon : tmp, tmp1 = _0.submitIconComponent, SubmitIcon = tmp1 === void 0 ? DefaultSubmitIcon : tmp1, tmp2 = _0.loadingIconComponent, LoadingIcon = tmp2 === void 0 ? DefaultLoadingIcon : tmp2, tmp3 = _0.aiModeIconComponent, AiModeIcon = tmp3 === void 0 ? DefaultAiModeIcon : tmp3, onAiModeClick = _0.onAiModeClick, _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, translations = _0.translations, props = _object_without_properties._(_0, [
76
98
  "formRef",
77
99
  "inputRef",
78
100
  "inputProps",
@@ -86,6 +108,8 @@ function SearchBox(_0) {
86
108
  "resetIconComponent",
87
109
  "submitIconComponent",
88
110
  "loadingIconComponent",
111
+ "aiModeIconComponent",
112
+ "onAiModeClick",
89
113
  "classNames",
90
114
  "translations"
91
115
  ]);
@@ -145,7 +169,19 @@ function SearchBox(_0) {
145
169
  hidden: value.length === 0 || isSearchStalled
146
170
  }, /*#__PURE__*/ _react.default.createElement(ResetIcon, {
147
171
  classNames: classNames
148
- })), /*#__PURE__*/ _react.default.createElement("span", {
172
+ })), onAiModeClick && /*#__PURE__*/ _react.default.createElement("button", {
173
+ className: (0, _instantsearchuicomponents.cx)('ais-AiModeButton', classNames.aiModeButton),
174
+ type: "button",
175
+ title: translations.aiModeButtonTitle || 'AI Mode',
176
+ onClick: function onClick(e) {
177
+ e.preventDefault();
178
+ onAiModeClick();
179
+ }
180
+ }, /*#__PURE__*/ _react.default.createElement(AiModeIcon, {
181
+ classNames: classNames
182
+ }), /*#__PURE__*/ _react.default.createElement("span", {
183
+ className: "ais-AiModeButton-label"
184
+ }, translations.aiModeButtonTitle || 'AI Mode')), /*#__PURE__*/ _react.default.createElement("span", {
149
185
  className: (0, _instantsearchuicomponents.cx)('ais-SearchBox-loadingIndicator', classNames.loadingIndicator),
150
186
  hidden: !isSearchStalled
151
187
  }, /*#__PURE__*/ _react.default.createElement(LoadingIcon, {
@@ -319,7 +319,7 @@ function EXPERIMENTAL_Autocomplete(_0) {
319
319
  }))));
320
320
  }
321
321
  function InnerAutocomplete(_0) {
322
- var indicesConfig = _0.indicesConfig, refineSearchBox = _0.refineSearchBox, isSearchStalled = _0.isSearchStalled, getSearchPageURL = _0.getSearchPageURL, userOnSelect = _0.onSelect, indexUiState = _0.indexUiState, isSearchPage = _0.isSearchPage, PanelComponent = _0.panelComponent, showRecent = _0.showRecent, recentSearchConfig = _0.recentSearchConfig, showQuerySuggestions = _0.showQuerySuggestions, showPromptSuggestions = _0.showPromptSuggestions, chatRenderState = _0.chatRenderState, transformItems = _0.transformItems, placeholder = _0.placeholder, autoFocus = _0.autoFocus, _0_detachedMediaQuery = _0.detachedMediaQuery, detachedMediaQuery = _0_detachedMediaQuery === void 0 ? DEFAULT_DETACHED_MEDIA_QUERY : _0_detachedMediaQuery, translations = _0.translations, classNames = _0.classNames, props = _object_without_properties._(_0, [
322
+ var indicesConfig = _0.indicesConfig, refineSearchBox = _0.refineSearchBox, isSearchStalled = _0.isSearchStalled, getSearchPageURL = _0.getSearchPageURL, userOnSelect = _0.onSelect, indexUiState = _0.indexUiState, isSearchPage = _0.isSearchPage, PanelComponent = _0.panelComponent, showRecent = _0.showRecent, recentSearchConfig = _0.recentSearchConfig, showQuerySuggestions = _0.showQuerySuggestions, showPromptSuggestions = _0.showPromptSuggestions, chatRenderState = _0.chatRenderState, transformItems = _0.transformItems, placeholder = _0.placeholder, autoFocus = _0.autoFocus, _0_detachedMediaQuery = _0.detachedMediaQuery, detachedMediaQuery = _0_detachedMediaQuery === void 0 ? DEFAULT_DETACHED_MEDIA_QUERY : _0_detachedMediaQuery, translations = _0.translations, classNames = _0.classNames, aiMode = _0.aiMode, props = _object_without_properties._(_0, [
323
323
  "indicesConfig",
324
324
  "refineSearchBox",
325
325
  "isSearchStalled",
@@ -338,13 +338,18 @@ function InnerAutocomplete(_0) {
338
338
  "autoFocus",
339
339
  "detachedMediaQuery",
340
340
  "translations",
341
- "classNames"
341
+ "classNames",
342
+ "aiMode"
342
343
  ]);
343
- var _ref;
344
+ var _indexUiState_query, _ref;
344
345
  var _showPromptSuggestions_searchParameters;
345
346
  var _useAutocomplete = (0, _reactinstantsearchcore.useAutocomplete)({
346
- transformItems: transformItems
347
+ transformItems: transformItems,
348
+ future: {
349
+ undefinedEmptyQuery: true
350
+ }
347
351
  }), indices = _useAutocomplete.indices, refineAutocomplete = _useAutocomplete.refine, currentRefinement = _useAutocomplete.currentRefinement;
352
+ var resolvedQuery = currentRefinement !== undefined ? currentRefinement : (_indexUiState_query = indexUiState.query) !== null && _indexUiState_query !== void 0 ? _indexUiState_query : '';
348
353
  var _useDetachedMode = useDetachedMode(detachedMediaQuery), isDetached = _useDetachedMode.isDetached, isModalDetached = _useDetachedMode.isModalDetached, isModalOpen = _useDetachedMode.isModalOpen, setIsModalOpen = _useDetachedMode.setIsModalOpen;
349
354
  var previousIsDetachedRef = (0, _react.useRef)(isDetached);
350
355
  var _useStorage = useStorage({
@@ -510,7 +515,7 @@ function InnerAutocomplete(_0) {
510
515
  });
511
516
  }
512
517
  indicesForPanel.forEach(function(param) {
513
- var indexId = param.indexId, indexName = param.indexName, hits = param.hits;
518
+ var indexId = param.indexId, indexName = param.indexName, hits = param.hits, sendEvent = param.sendEvent;
514
519
  var elementId = indexName;
515
520
  if (indexName === (showQuerySuggestions === null || showQuerySuggestions === void 0 ? void 0 : showQuerySuggestions.indexName)) {
516
521
  elementId = 'suggestions';
@@ -536,9 +541,14 @@ function InnerAutocomplete(_0) {
536
541
  });
537
542
  }),
538
543
  getItemProps: getItemProps,
544
+ sendEvent: sendEvent,
539
545
  classNames: currentIndexConfig.classNames
540
546
  });
541
547
  });
548
+ var handleCancel = function handleCancel() {
549
+ setIsModalOpen(false);
550
+ setIsOpen(false);
551
+ };
542
552
  var searchBoxContent = /*#__PURE__*/ _react.default.createElement(_AutocompleteSearch.AutocompleteSearch, {
543
553
  inputProps: getInputProps(),
544
554
  clearQuery: function clearQuery() {
@@ -548,9 +558,31 @@ function InnerAutocomplete(_0) {
548
558
  onQueryChange: function onQueryChange(query) {
549
559
  refineAutocomplete(query);
550
560
  },
551
- query: currentRefinement || indexUiState.query || '',
552
- refine: refineSearchBox,
553
- isSearchStalled: isSearchStalled
561
+ query: resolvedQuery,
562
+ isSearchStalled: isSearchStalled,
563
+ onCancel: function onCancel() {
564
+ if (isDetached) {
565
+ handleCancel();
566
+ }
567
+ },
568
+ isDetached: isDetached,
569
+ submitTitle: isDetached ? translations.detachedCancelButtonText : undefined,
570
+ onAiModeClick: aiMode ? function() {
571
+ setIsOpen(false);
572
+ if (isDetached) {
573
+ setIsModalOpen(false);
574
+ }
575
+ if (chatRenderState) {
576
+ var _chatRenderState_setOpen;
577
+ (_chatRenderState_setOpen = chatRenderState.setOpen) === null || _chatRenderState_setOpen === void 0 ? void 0 : _chatRenderState_setOpen.call(chatRenderState, true);
578
+ if (resolvedQuery.trim()) {
579
+ var _chatRenderState_sendMessage;
580
+ (_chatRenderState_sendMessage = chatRenderState.sendMessage) === null || _chatRenderState_sendMessage === void 0 ? void 0 : _chatRenderState_sendMessage.call(chatRenderState, {
581
+ text: resolvedQuery
582
+ });
583
+ }
584
+ }
585
+ } : undefined
554
586
  });
555
587
  var panelContent = /*#__PURE__*/ _react.default.createElement(AutocompletePanel, getPanelProps(), PanelComponent ? /*#__PURE__*/ _react.default.createElement(PanelComponent, {
556
588
  elements: elements,
@@ -569,7 +601,7 @@ function InnerAutocomplete(_0) {
569
601
  rootRef: rootRef,
570
602
  classNames: classNames
571
603
  }), /*#__PURE__*/ _react.default.createElement(AutocompleteDetachedSearchButton, {
572
- query: currentRefinement || indexUiState.query || '',
604
+ query: resolvedQuery,
573
605
  placeholder: placeholder,
574
606
  classNames: classNames,
575
607
  onClick: function onClick() {
@@ -583,19 +615,11 @@ function InnerAutocomplete(_0) {
583
615
  translations: translations
584
616
  }), isModalOpen && /*#__PURE__*/ _react.default.createElement(AutocompleteDetachedOverlay, {
585
617
  classNames: classNames,
586
- onClose: function onClose() {
587
- setIsModalOpen(false);
588
- setIsOpen(false);
589
- }
618
+ onClose: handleCancel
590
619
  }, /*#__PURE__*/ _react.default.createElement(AutocompleteDetachedContainer, {
591
620
  classNames: detachedContainerClassNames
592
621
  }, /*#__PURE__*/ _react.default.createElement(AutocompleteDetachedFormContainer, {
593
- classNames: classNames,
594
- onCancel: function onCancel() {
595
- setIsModalOpen(false);
596
- setIsOpen(false);
597
- },
598
- translations: translations
622
+ classNames: classNames
599
623
  }, searchBoxContent), panelContent)));
600
624
  }
601
625
  // Normal (non-detached) rendering
@@ -38,6 +38,7 @@ var _object_spread = require("@swc/helpers/_/_object_spread");
38
38
  var _object_spread_props = require("@swc/helpers/_/_object_spread_props");
39
39
  var _object_without_properties = require("@swc/helpers/_/_object_without_properties");
40
40
  var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
41
+ var _to_array = require("@swc/helpers/_/_to_array");
41
42
  var _instantsearchuicomponents = require("instantsearch-ui-components");
42
43
  var _chat = require("instantsearch.js/cjs/lib/chat");
43
44
  var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
@@ -52,8 +53,11 @@ function createDefaultTools(itemComponent, getSearchPageURL) {
52
53
  var _obj;
53
54
  return _obj = {}, _define_property._(_obj, _chat.SearchIndexToolType, (0, _SearchIndexTool.createCarouselTool)(true, itemComponent, getSearchPageURL)), _define_property._(_obj, _chat.RecommendToolType, (0, _SearchIndexTool.createCarouselTool)(false, itemComponent, getSearchPageURL)), _define_property._(_obj, _chat.MemorizeToolType, {}), _define_property._(_obj, _chat.MemorySearchToolType, {}), _define_property._(_obj, _chat.PonderToolType, {}), _obj;
54
55
  }
55
- function Chat(_0) {
56
- var userTools = _0.tools, toggleButtonProps = _0.toggleButtonProps, headerProps = _0.headerProps, messagesProps = _0.messagesProps, promptProps = _0.promptProps, itemComponent = _0.itemComponent, layoutComponent = _0.layoutComponent, toggleButtonComponent = _0.toggleButtonComponent, toggleButtonIconComponent = _0.toggleButtonIconComponent, headerComponent = _0.headerComponent, headerTitleIconComponent = _0.headerTitleIconComponent, headerCloseIconComponent = _0.headerCloseIconComponent, headerMinimizeIconComponent = _0.headerMinimizeIconComponent, headerMaximizeIconComponent = _0.headerMaximizeIconComponent, messagesLoaderComponent = _0.messagesLoaderComponent, messagesErrorComponent = _0.messagesErrorComponent, promptComponent = _0.promptComponent, promptHeaderComponent = _0.promptHeaderComponent, promptFooterComponent = _0.promptFooterComponent, assistantMessageLeadingComponent = _0.assistantMessageLeadingComponent, assistantMessageFooterComponent = _0.assistantMessageFooterComponent, userMessageLeadingComponent = _0.userMessageLeadingComponent, userMessageFooterComponent = _0.userMessageFooterComponent, actionsComponent = _0.actionsComponent, suggestionsComponent = _0.suggestionsComponent, classNames = _0.classNames, _0_translations = _0.translations, translations = _0_translations === void 0 ? {} : _0_translations, title = _0.title, getSearchPageURL = _0.getSearchPageURL, props = _object_without_properties._(_0, [
56
+ function ChatInner(_0, _1) {
57
+ var _ref = [
58
+ _0,
59
+ _1
60
+ ], _ref1 = _to_array._(_ref), _ref2 = _ref1[0], _rest = _ref1.slice(1), userTools = _ref2.tools, toggleButtonProps = _ref2.toggleButtonProps, headerProps = _ref2.headerProps, messagesProps = _ref2.messagesProps, promptProps = _ref2.promptProps, itemComponent = _ref2.itemComponent, layoutComponent = _ref2.layoutComponent, toggleButtonComponent = _ref2.toggleButtonComponent, toggleButtonIconComponent = _ref2.toggleButtonIconComponent, headerComponent = _ref2.headerComponent, headerTitleIconComponent = _ref2.headerTitleIconComponent, headerCloseIconComponent = _ref2.headerCloseIconComponent, headerMinimizeIconComponent = _ref2.headerMinimizeIconComponent, headerMaximizeIconComponent = _ref2.headerMaximizeIconComponent, loaderComponent = _ref2.loaderComponent, messagesErrorComponent = _ref2.messagesErrorComponent, promptComponent = _ref2.promptComponent, promptHeaderComponent = _ref2.promptHeaderComponent, promptFooterComponent = _ref2.promptFooterComponent, assistantMessageLeadingComponent = _ref2.assistantMessageLeadingComponent, assistantMessageFooterComponent = _ref2.assistantMessageFooterComponent, userMessageLeadingComponent = _ref2.userMessageLeadingComponent, userMessageFooterComponent = _ref2.userMessageFooterComponent, emptyComponent = _ref2.emptyComponent, actionsComponent = _ref2.actionsComponent, suggestionsComponent = _ref2.suggestionsComponent, classNames = _ref2.classNames, _ref_translations = _ref2.translations, translations = _ref_translations === void 0 ? {} : _ref_translations, title = _ref2.title, getSearchPageURL = _ref2.getSearchPageURL, props = _object_without_properties._(_ref2, [
57
61
  "tools",
58
62
  "toggleButtonProps",
59
63
  "headerProps",
@@ -68,7 +72,7 @@ function Chat(_0) {
68
72
  "headerCloseIconComponent",
69
73
  "headerMinimizeIconComponent",
70
74
  "headerMaximizeIconComponent",
71
- "messagesLoaderComponent",
75
+ "loaderComponent",
72
76
  "messagesErrorComponent",
73
77
  "promptComponent",
74
78
  "promptHeaderComponent",
@@ -77,13 +81,14 @@ function Chat(_0) {
77
81
  "assistantMessageFooterComponent",
78
82
  "userMessageLeadingComponent",
79
83
  "userMessageFooterComponent",
84
+ "emptyComponent",
80
85
  "actionsComponent",
81
86
  "suggestionsComponent",
82
87
  "classNames",
83
88
  "translations",
84
89
  "title",
85
90
  "getSearchPageURL"
86
- ]);
91
+ ]), _rest1 = _sliced_to_array._(_rest, 1), ref = _rest1[0];
87
92
  var promptTranslations = translations.prompt, headerTranslations = translations.header, messageTranslations = translations.message, messagesTranslations = translations.messages;
88
93
  var _useInstantSearch = (0, _reactinstantsearchcore.useInstantSearch)(), indexUiState = _useInstantSearch.indexUiState, setIndexUiState = _useInstantSearch.setIndexUiState;
89
94
  var _useState = _sliced_to_array._((0, _react.useState)(false), 2), maximized = _useState[0], setMaximized = _useState[1];
@@ -104,6 +109,15 @@ function Chat(_0) {
104
109
  tools: tools
105
110
  }));
106
111
  var messages = chatState.messages, sendMessage = chatState.sendMessage, status = chatState.status, regenerate = chatState.regenerate, stop = chatState.stop, error = chatState.error, input = chatState.input, setInput = chatState.setInput, open = chatState.open, setOpen = chatState.setOpen, isClearing = chatState.isClearing, clearMessages = chatState.clearMessages, onClearTransitionEnd = chatState.onClearTransitionEnd, toolsFromConnector = chatState.tools, suggestions = chatState.suggestions, onFeedback = chatState.sendChatMessageFeedback, feedbackState = chatState.feedbackState;
112
+ (0, _react.useImperativeHandle)(ref, function() {
113
+ return {
114
+ setOpen: setOpen,
115
+ sendMessage: function sendMessage1(params) {
116
+ return sendMessage(params);
117
+ },
118
+ setInput: setInput
119
+ };
120
+ });
107
121
  var wasOpenRef = (0, _react.useRef)(false);
108
122
  (0, _react.useEffect)(function() {
109
123
  var shouldFocusPrompt = !wasOpenRef.current && open;
@@ -163,6 +177,8 @@ function Chat(_0) {
163
177
  onClose: function onClose() {
164
178
  return setOpen(false);
165
179
  },
180
+ sendMessage: sendMessage,
181
+ setInput: setInput,
166
182
  onFeedback: onFeedback,
167
183
  feedbackState: feedbackState,
168
184
  messages: messages,
@@ -175,8 +191,9 @@ function Chat(_0) {
175
191
  scrollRef: scrollRef,
176
192
  contentRef: contentRef,
177
193
  onScrollToBottom: scrollToBottom,
178
- loaderComponent: messagesLoaderComponent,
194
+ loaderComponent: loaderComponent,
179
195
  errorComponent: messagesErrorComponent,
196
+ emptyComponent: emptyComponent,
180
197
  actionsComponent: actionsComponent,
181
198
  assistantMessageProps: _object_spread._({
182
199
  leadingComponent: assistantMessageLeadingComponent,
@@ -220,3 +237,4 @@ function Chat(_0) {
220
237
  classNames: classNames
221
238
  });
222
239
  }
240
+ var Chat = /*#__PURE__*/ _react.default.forwardRef(ChatInner);
@@ -17,10 +17,11 @@ var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
17
17
  var _reactinstantsearchcore = require("react-instantsearch-core");
18
18
  var _SearchBox = require("../ui/SearchBox");
19
19
  function SearchBox(_0) {
20
- var queryHook = _0.queryHook, _0_searchAsYouType = _0.searchAsYouType, searchAsYouType = _0_searchAsYouType === void 0 ? true : _0_searchAsYouType, _0_ignoreCompositionEvents = _0.ignoreCompositionEvents, ignoreCompositionEvents = _0_ignoreCompositionEvents === void 0 ? false : _0_ignoreCompositionEvents, translations = _0.translations, props = _object_without_properties._(_0, [
20
+ var queryHook = _0.queryHook, _0_searchAsYouType = _0.searchAsYouType, searchAsYouType = _0_searchAsYouType === void 0 ? true : _0_searchAsYouType, _0_ignoreCompositionEvents = _0.ignoreCompositionEvents, ignoreCompositionEvents = _0_ignoreCompositionEvents === void 0 ? false : _0_ignoreCompositionEvents, aiMode = _0.aiMode, translations = _0.translations, props = _object_without_properties._(_0, [
21
21
  "queryHook",
22
22
  "searchAsYouType",
23
23
  "ignoreCompositionEvents",
24
+ "aiMode",
24
25
  "translations"
25
26
  ]);
26
27
  var _useSearchBox = (0, _reactinstantsearchcore.useSearchBox)({
@@ -28,6 +29,7 @@ function SearchBox(_0) {
28
29
  }, {
29
30
  $$widgetType: 'ais.searchBox'
30
31
  }), query = _useSearchBox.query, refine = _useSearchBox.refine, isSearchStalled = _useSearchBox.isSearchStalled;
32
+ var indexRenderState = (0, _reactinstantsearchcore.useInstantSearch)().indexRenderState;
31
33
  var _useState = _sliced_to_array._((0, _react.useState)(query), 2), inputValue = _useState[0], setInputValue = _useState[1];
32
34
  var inputRef = (0, _react.useRef)(null);
33
35
  function setQuery(newQuery) {
@@ -67,10 +69,24 @@ function SearchBox(_0) {
67
69
  onChange: onChange,
68
70
  onReset: onReset,
69
71
  onSubmit: onSubmit,
72
+ onAiModeClick: aiMode ? function() {
73
+ var chatRenderState = indexRenderState.chat;
74
+ if (chatRenderState) {
75
+ var _chatRenderState_setOpen;
76
+ (_chatRenderState_setOpen = chatRenderState.setOpen) === null || _chatRenderState_setOpen === void 0 ? void 0 : _chatRenderState_setOpen.call(chatRenderState, true);
77
+ if (inputValue.trim()) {
78
+ var _chatRenderState_sendMessage;
79
+ (_chatRenderState_sendMessage = chatRenderState.sendMessage) === null || _chatRenderState_sendMessage === void 0 ? void 0 : _chatRenderState_sendMessage.call(chatRenderState, {
80
+ text: inputValue
81
+ });
82
+ }
83
+ }
84
+ } : undefined,
70
85
  value: inputValue,
71
86
  translations: _object_spread._({
72
87
  submitButtonTitle: 'Submit the search query',
73
- resetButtonTitle: 'Clear the search query'
88
+ resetButtonTitle: 'Clear the search query',
89
+ aiModeButtonTitle: 'AI Mode'
74
90
  }, translations)
75
91
  };
76
92
  return /*#__PURE__*/ _react.default.createElement(_SearchBox.SearchBox, _object_spread._({}, props, uiProps));
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "TrendingFacets", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return TrendingFacets;
10
+ }
11
+ });
12
+ var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
+ var _object_spread = require("@swc/helpers/_/_object_spread");
14
+ var _object_without_properties = require("@swc/helpers/_/_object_without_properties");
15
+ var _instantsearchuicomponents = require("instantsearch-ui-components");
16
+ var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
17
+ var _reactinstantsearchcore = require("react-instantsearch-core");
18
+ var TrendingFacetsUiComponent = (0, _instantsearchuicomponents.createTrendingFacetsComponent)({
19
+ createElement: _react.createElement,
20
+ Fragment: _react.Fragment
21
+ });
22
+ function TrendingFacets(_0) {
23
+ var facetName = _0.facetName, limit = _0.limit, threshold = _0.threshold, fallbackParameters = _0.fallbackParameters, queryParameters = _0.queryParameters, escapeHTML = _0.escapeHTML, transformItems = _0.transformItems, itemComponent = _0.itemComponent, headerComponent = _0.headerComponent, emptyComponent = _0.emptyComponent, props = _object_without_properties._(_0, [
24
+ "facetName",
25
+ "limit",
26
+ "threshold",
27
+ "fallbackParameters",
28
+ "queryParameters",
29
+ "escapeHTML",
30
+ "transformItems",
31
+ "itemComponent",
32
+ "headerComponent",
33
+ "emptyComponent"
34
+ ]);
35
+ var status = (0, _reactinstantsearchcore.useInstantSearch)().status;
36
+ var items = (0, _reactinstantsearchcore.useTrendingFacets)({
37
+ facetName: facetName,
38
+ limit: limit,
39
+ threshold: threshold,
40
+ fallbackParameters: fallbackParameters,
41
+ queryParameters: queryParameters,
42
+ escapeHTML: escapeHTML,
43
+ transformItems: transformItems
44
+ }, {
45
+ $$widgetType: 'ais.trendingFacets'
46
+ }).items;
47
+ var uiProps = {
48
+ items: items,
49
+ itemComponent: itemComponent,
50
+ headerComponent: headerComponent,
51
+ emptyComponent: emptyComponent,
52
+ status: status
53
+ };
54
+ return /*#__PURE__*/ _react.default.createElement(TrendingFacetsUiComponent, _object_spread._({}, props, uiProps));
55
+ }
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "createCarouselTool", {
12
12
  var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
13
  var _object_spread = require("@swc/helpers/_/_object_spread");
14
14
  var _instantsearchuicomponents = require("instantsearch-ui-components");
15
+ var _utils = require("instantsearch.js/cjs/lib/utils");
15
16
  var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
16
17
  var _components = require("../../../components");
17
18
  function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
@@ -19,10 +20,13 @@ function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
19
20
  createElement: _react.createElement
20
21
  });
21
22
  function SearchLayoutComponent(param) {
22
- var message = param.message, applyFilters = param.applyFilters, onClose = param.onClose;
23
+ var message = param.message, applyFilters = param.applyFilters, onClose = param.onClose, sendEvent = param.sendEvent;
24
+ var _ref;
25
+ var _output_hits;
23
26
  var input = message === null || message === void 0 ? void 0 : message.input;
24
27
  var output = message === null || message === void 0 ? void 0 : message.output;
25
- var items = (output === null || output === void 0 ? void 0 : output.hits) || [];
28
+ var hitsWithAbsolutePosition = (0, _utils.addAbsolutePosition)((output === null || output === void 0 ? void 0 : output.hits) || [], 0, ((_ref = input === null || input === void 0 ? void 0 : input.number_of_results) !== null && _ref !== void 0 ? _ref : output === null || output === void 0 ? void 0 : (_output_hits = output.hits) === null || _output_hits === void 0 ? void 0 : _output_hits.length) || 5);
29
+ var items = (0, _utils.addQueryID)(hitsWithAbsolutePosition, output === null || output === void 0 ? void 0 : output.queryID);
26
30
  var MemoedHeaderComponent = _react.default.useMemo(function() {
27
31
  return function(props) {
28
32
  return /*#__PURE__*/ _react.default.createElement(HeaderComponent, _object_spread._({
@@ -43,7 +47,7 @@ function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
43
47
  return /*#__PURE__*/ _react.default.createElement(_components.Carousel, {
44
48
  items: items,
45
49
  itemComponent: itemComponent,
46
- sendEvent: function sendEvent() {},
50
+ sendEvent: sendEvent,
47
51
  showNavigation: false,
48
52
  headerComponent: MemoedHeaderComponent
49
53
  });
@@ -29,4 +29,5 @@ _export_star._(require("./SortBy"), exports);
29
29
  _export_star._(require("./Stats"), exports);
30
30
  _export_star._(require("./ToggleRefinement"), exports);
31
31
  _export_star._(require("./TrendingItems"), exports);
32
+ _export_star._(require("./TrendingFacets"), exports);
32
33
  _export_star._(require("./FilterSuggestions"), exports);
@@ -5,7 +5,10 @@ export type AutocompleteSearchProps = {
5
5
  clearQuery: () => void;
6
6
  onQueryChange?: (query: string) => void;
7
7
  query: string;
8
- refine: (query: string) => void;
9
8
  isSearchStalled: boolean;
9
+ onCancel?: () => void;
10
+ isDetached?: boolean;
11
+ submitTitle?: string;
12
+ onAiModeClick?: () => void;
10
13
  };
11
- export declare function AutocompleteSearch({ inputProps, clearQuery, onQueryChange, query, refine, isSearchStalled, }: AutocompleteSearchProps): React.JSX.Element;
14
+ export declare function AutocompleteSearch({ inputProps, clearQuery, onQueryChange, query, isSearchStalled, onCancel, isDetached, submitTitle, onAiModeClick, }: AutocompleteSearchProps): React.JSX.Element;
@@ -8,18 +8,21 @@ var AutocompleteSearchComponent = createAutocompleteSearchComponent({
8
8
  Fragment: Fragment
9
9
  });
10
10
  function AutocompleteSearch(param) {
11
- var inputProps = param.inputProps, clearQuery = param.clearQuery, onQueryChange = param.onQueryChange, query = param.query, refine = param.refine, isSearchStalled = param.isSearchStalled;
11
+ var inputProps = param.inputProps, clearQuery = param.clearQuery, onQueryChange = param.onQueryChange, query = param.query, isSearchStalled = param.isSearchStalled, onCancel = param.onCancel, isDetached = param.isDetached, submitTitle = param.submitTitle, onAiModeClick = param.onAiModeClick;
12
12
  return /*#__PURE__*/ React.createElement(AutocompleteSearchComponent, {
13
13
  inputProps: _(_$1({}, inputProps), {
14
14
  onChange: function onChange(event) {
15
15
  var value = event.currentTarget.value;
16
- refine(value);
17
16
  onQueryChange === null || onQueryChange === void 0 ? void 0 : onQueryChange(value);
18
17
  }
19
18
  }),
20
19
  onClear: clearQuery,
21
20
  query: query,
22
- isSearchStalled: isSearchStalled
21
+ isSearchStalled: isSearchStalled,
22
+ onCancel: onCancel,
23
+ isDetached: isDetached,
24
+ submitTitle: submitTitle,
25
+ onAiModeClick: onAiModeClick
23
26
  });
24
27
  }
25
28
 
@@ -0,0 +1 @@
1
+ export declare const ChatGreeting: (userProps: import("instantsearch-ui-components").ChatGreetingProps) => JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { createChatGreetingComponent } from 'instantsearch-ui-components';
2
+ import { createElement } from 'react';
3
+
4
+ var ChatGreeting = createChatGreetingComponent({
5
+ createElement: createElement
6
+ });
7
+
8
+ export { ChatGreeting };
@@ -0,0 +1 @@
1
+ export declare const ChatMessageLoader: (userProps: import("instantsearch-ui-components").ChatMessageLoaderProps) => JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { createChatMessageLoaderComponent } from 'instantsearch-ui-components';
2
+ import { createElement } from 'react';
3
+
4
+ var ChatMessageLoader = createChatMessageLoaderComponent({
5
+ createElement: createElement
6
+ });
7
+
8
+ export { ChatMessageLoader };
@@ -1,3 +1 @@
1
- import type { ChatLayoutOwnProps } from 'instantsearch-ui-components';
2
- export type { ChatLayoutOwnProps };
3
- export declare const ChatOverlayLayout: (userProps: ChatLayoutOwnProps) => JSX.Element;
1
+ export declare const ChatOverlayLayout: (userProps: import("instantsearch-ui-components").ChatLayoutOwnProps) => JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ChatSidePanelLayout: (userProps: import("instantsearch-ui-components").ChatSidePanelLayoutProps) => JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { createChatSidePanelLayoutComponent } from 'instantsearch-ui-components';
2
+ import { createElement, Fragment } from 'react';
3
+
4
+ var ChatSidePanelLayout = createChatSidePanelLayoutComponent({
5
+ createElement: createElement,
6
+ Fragment: Fragment
7
+ });
8
+
9
+ export { ChatSidePanelLayout };
@@ -1,3 +1,6 @@
1
1
  export * from './Carousel';
2
+ export * from './ChatMessageLoader';
2
3
  export * from './ChatOverlayLayout';
3
4
  export * from './ChatInlineLayout';
5
+ export * from './ChatSidePanelLayout';
6
+ export * from './ChatGreeting';
@@ -1,3 +1,6 @@
1
1
  export { Carousel } from './Carousel.js';
2
+ export { ChatMessageLoader } from './ChatMessageLoader.js';
2
3
  export { ChatOverlayLayout } from './ChatOverlayLayout.js';
3
4
  export { ChatInlineLayout } from './ChatInlineLayout.js';
5
+ export { ChatSidePanelLayout } from './ChatSidePanelLayout.js';
6
+ export { ChatGreeting } from './ChatGreeting.js';
package/dist/es/index.js CHANGED
@@ -26,7 +26,11 @@ export { SortBy } from './widgets/SortBy.js';
26
26
  export { Stats } from './widgets/Stats.js';
27
27
  export { ToggleRefinement } from './widgets/ToggleRefinement.js';
28
28
  export { TrendingItems } from './widgets/TrendingItems.js';
29
+ export { TrendingFacets } from './widgets/TrendingFacets.js';
29
30
  export { FilterSuggestions } from './widgets/FilterSuggestions.js';
30
31
  export { Carousel } from './components/Carousel.js';
32
+ export { ChatMessageLoader } from './components/ChatMessageLoader.js';
31
33
  export { ChatOverlayLayout } from './components/ChatOverlayLayout.js';
32
34
  export { ChatInlineLayout } from './components/ChatInlineLayout.js';
35
+ export { ChatSidePanelLayout } from './components/ChatSidePanelLayout.js';
36
+ export { ChatGreeting } from './components/ChatGreeting.js';