react-instantsearch 7.28.1 → 7.30.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 (46) hide show
  1. package/dist/cjs/components/AutocompleteSearch.js +3 -3
  2. package/dist/cjs/components/ChatGreeting.js +16 -0
  3. package/dist/cjs/components/ChatInlineLayout.js +17 -0
  4. package/dist/cjs/components/ChatOverlayLayout.js +17 -0
  5. package/dist/cjs/components/ChatSidePanelLayout.js +17 -0
  6. package/dist/cjs/components/index.js +4 -0
  7. package/dist/cjs/ui/SearchBox.js +38 -2
  8. package/dist/cjs/widgets/Autocomplete.js +24 -8
  9. package/dist/cjs/widgets/Chat.js +30 -4
  10. package/dist/cjs/widgets/SearchBox.js +18 -2
  11. package/dist/cjs/widgets/TrendingFacets.js +55 -0
  12. package/dist/cjs/widgets/chat/tools/SearchIndexTool.js +7 -3
  13. package/dist/cjs/widgets/index.js +1 -0
  14. package/dist/es/components/AutocompleteSearch.d.ts +2 -2
  15. package/dist/es/components/AutocompleteSearch.js +3 -3
  16. package/dist/es/components/ChatGreeting.d.ts +1 -0
  17. package/dist/es/components/ChatGreeting.js +8 -0
  18. package/dist/es/components/ChatInlineLayout.d.ts +1 -0
  19. package/dist/es/components/ChatInlineLayout.js +9 -0
  20. package/dist/es/components/ChatOverlayLayout.d.ts +1 -0
  21. package/dist/es/components/ChatOverlayLayout.js +9 -0
  22. package/dist/es/components/ChatSidePanelLayout.d.ts +1 -0
  23. package/dist/es/components/ChatSidePanelLayout.js +9 -0
  24. package/dist/es/components/index.d.ts +4 -0
  25. package/dist/es/components/index.js +4 -0
  26. package/dist/es/index.js +5 -0
  27. package/dist/es/ui/SearchBox.d.ts +15 -1
  28. package/dist/es/ui/SearchBox.js +38 -2
  29. package/dist/es/widgets/Autocomplete.d.ts +6 -0
  30. package/dist/es/widgets/Autocomplete.js +24 -8
  31. package/dist/es/widgets/Chat.d.ts +15 -4
  32. package/dist/es/widgets/Chat.js +44 -18
  33. package/dist/es/widgets/RefinementList.d.ts +3 -2
  34. package/dist/es/widgets/SearchBox.d.ts +8 -2
  35. package/dist/es/widgets/SearchBox.js +19 -3
  36. package/dist/es/widgets/TrendingFacets.d.ts +11 -0
  37. package/dist/es/widgets/TrendingFacets.js +46 -0
  38. package/dist/es/widgets/chat/tools/SearchIndexTool.js +7 -3
  39. package/dist/es/widgets/index.d.ts +1 -0
  40. package/dist/es/widgets/index.js +1 -0
  41. package/dist/umd/ReactInstantSearch.js +1019 -181
  42. package/dist/umd/ReactInstantSearch.min.js +3 -3
  43. package/package.json +5 -5
  44. package/dist/cjs/widgets/index.umd.js +0 -69
  45. package/dist/es/widgets/index.umd.d.ts +0 -32
  46. package/dist/es/widgets/index.umd.js +0 -37
@@ -19,17 +19,17 @@ 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, 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
+ onAiModeClick: onAiModeClick
34
34
  });
35
35
  }
@@ -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,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ChatInlineLayout", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return ChatInlineLayout;
10
+ }
11
+ });
12
+ var _instantsearchuicomponents = require("instantsearch-ui-components");
13
+ var _react = require("react");
14
+ var ChatInlineLayout = (0, _instantsearchuicomponents.createChatInlineLayoutComponent)({
15
+ createElement: _react.createElement,
16
+ Fragment: _react.Fragment
17
+ });
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ChatOverlayLayout", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return ChatOverlayLayout;
10
+ }
11
+ });
12
+ var _instantsearchuicomponents = require("instantsearch-ui-components");
13
+ var _react = require("react");
14
+ var ChatOverlayLayout = (0, _instantsearchuicomponents.createChatOverlayLayoutComponent)({
15
+ createElement: _react.createElement,
16
+ Fragment: _react.Fragment
17
+ });
@@ -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,3 +5,7 @@ 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("./ChatOverlayLayout"), exports);
9
+ _export_star._(require("./ChatInlineLayout"), exports);
10
+ _export_star._(require("./ChatSidePanelLayout"), exports);
11
+ _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({
@@ -548,9 +553,20 @@ function InnerAutocomplete(_0) {
548
553
  onQueryChange: function onQueryChange(query) {
549
554
  refineAutocomplete(query);
550
555
  },
551
- query: currentRefinement || indexUiState.query || '',
552
- refine: refineSearchBox,
553
- isSearchStalled: isSearchStalled
556
+ query: resolvedQuery,
557
+ isSearchStalled: isSearchStalled,
558
+ onAiModeClick: aiMode ? function() {
559
+ if (chatRenderState) {
560
+ var _chatRenderState_setOpen;
561
+ (_chatRenderState_setOpen = chatRenderState.setOpen) === null || _chatRenderState_setOpen === void 0 ? void 0 : _chatRenderState_setOpen.call(chatRenderState, true);
562
+ if (resolvedQuery.trim()) {
563
+ var _chatRenderState_sendMessage;
564
+ (_chatRenderState_sendMessage = chatRenderState.sendMessage) === null || _chatRenderState_sendMessage === void 0 ? void 0 : _chatRenderState_sendMessage.call(chatRenderState, {
565
+ text: resolvedQuery
566
+ });
567
+ }
568
+ }
569
+ } : undefined
554
570
  });
555
571
  var panelContent = /*#__PURE__*/ _react.default.createElement(AutocompletePanel, getPanelProps(), PanelComponent ? /*#__PURE__*/ _react.default.createElement(PanelComponent, {
556
572
  elements: elements,
@@ -569,7 +585,7 @@ function InnerAutocomplete(_0) {
569
585
  rootRef: rootRef,
570
586
  classNames: classNames
571
587
  }), /*#__PURE__*/ _react.default.createElement(AutocompleteDetachedSearchButton, {
572
- query: currentRefinement || indexUiState.query || '',
588
+ query: resolvedQuery,
573
589
  placeholder: placeholder,
574
590
  classNames: classNames,
575
591
  onClick: function onClick() {
@@ -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,14 +53,18 @@ 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, 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, messagesLoaderComponent = _ref2.messagesLoaderComponent, 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",
60
64
  "messagesProps",
61
65
  "promptProps",
62
66
  "itemComponent",
67
+ "layoutComponent",
63
68
  "toggleButtonComponent",
64
69
  "toggleButtonIconComponent",
65
70
  "headerComponent",
@@ -76,13 +81,14 @@ function Chat(_0) {
76
81
  "assistantMessageFooterComponent",
77
82
  "userMessageLeadingComponent",
78
83
  "userMessageFooterComponent",
84
+ "emptyComponent",
79
85
  "actionsComponent",
80
86
  "suggestionsComponent",
81
87
  "classNames",
82
88
  "translations",
83
89
  "title",
84
90
  "getSearchPageURL"
85
- ]);
91
+ ]), _rest1 = _sliced_to_array._(_rest, 1), ref = _rest1[0];
86
92
  var promptTranslations = translations.prompt, headerTranslations = translations.header, messageTranslations = translations.message, messagesTranslations = translations.messages;
87
93
  var _useInstantSearch = (0, _reactinstantsearchcore.useInstantSearch)(), indexUiState = _useInstantSearch.indexUiState, setIndexUiState = _useInstantSearch.setIndexUiState;
88
94
  var _useState = _sliced_to_array._((0, _react.useState)(false), 2), maximized = _useState[0], setMaximized = _useState[1];
@@ -102,7 +108,16 @@ function Chat(_0) {
102
108
  var chatState = (0, _reactinstantsearchcore.useChat)(_object_spread_props._(_object_spread._({}, props), {
103
109
  tools: tools
104
110
  }));
105
- var messages = chatState.messages, sendMessage = chatState.sendMessage, status = chatState.status, regenerate = chatState.regenerate, stop = chatState.stop; chatState.error; var 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;
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
+ });
106
121
  var wasOpenRef = (0, _react.useRef)(false);
107
122
  (0, _react.useEffect)(function() {
108
123
  var shouldFocusPrompt = !wasOpenRef.current && open;
@@ -120,6 +135,11 @@ function Chat(_0) {
120
135
  title: title,
121
136
  open: open,
122
137
  maximized: maximized,
138
+ sendMessage: sendMessage,
139
+ regenerate: regenerate,
140
+ stop: stop,
141
+ error: error,
142
+ layoutComponent: layoutComponent,
123
143
  headerComponent: headerComponent,
124
144
  promptComponent: promptComponent,
125
145
  toggleButtonComponent: toggleButtonComponent,
@@ -157,6 +177,10 @@ function Chat(_0) {
157
177
  onClose: function onClose() {
158
178
  return setOpen(false);
159
179
  },
180
+ sendMessage: sendMessage,
181
+ setInput: setInput,
182
+ onFeedback: onFeedback,
183
+ feedbackState: feedbackState,
160
184
  messages: messages,
161
185
  tools: toolsFromConnector,
162
186
  indexUiState: indexUiState,
@@ -169,6 +193,7 @@ function Chat(_0) {
169
193
  onScrollToBottom: scrollToBottom,
170
194
  loaderComponent: messagesLoaderComponent,
171
195
  errorComponent: messagesErrorComponent,
196
+ emptyComponent: emptyComponent,
172
197
  actionsComponent: actionsComponent,
173
198
  assistantMessageProps: _object_spread._({
174
199
  leadingComponent: assistantMessageLeadingComponent,
@@ -212,3 +237,4 @@ function Chat(_0) {
212
237
  classNames: classNames
213
238
  });
214
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,7 @@ 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
+ onAiModeClick?: () => void;
10
10
  };
11
- export declare function AutocompleteSearch({ inputProps, clearQuery, onQueryChange, query, refine, isSearchStalled, }: AutocompleteSearchProps): React.JSX.Element;
11
+ export declare function AutocompleteSearch({ inputProps, clearQuery, onQueryChange, query, isSearchStalled, onAiModeClick, }: AutocompleteSearchProps): React.JSX.Element;
@@ -8,18 +8,18 @@ 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, 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
+ onAiModeClick: onAiModeClick
23
23
  });
24
24
  }
25
25
 
@@ -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 ChatInlineLayout: (userProps: import("instantsearch-ui-components").ChatLayoutOwnProps) => JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { createChatInlineLayoutComponent } from 'instantsearch-ui-components';
2
+ import { createElement, Fragment } from 'react';
3
+
4
+ var ChatInlineLayout = createChatInlineLayoutComponent({
5
+ createElement: createElement,
6
+ Fragment: Fragment
7
+ });
8
+
9
+ export { ChatInlineLayout };
@@ -0,0 +1 @@
1
+ export declare const ChatOverlayLayout: (userProps: import("instantsearch-ui-components").ChatLayoutOwnProps) => JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { createChatOverlayLayoutComponent } from 'instantsearch-ui-components';
2
+ import { createElement, Fragment } from 'react';
3
+
4
+ var ChatOverlayLayout = createChatOverlayLayoutComponent({
5
+ createElement: createElement,
6
+ Fragment: Fragment
7
+ });
8
+
9
+ export { ChatOverlayLayout };
@@ -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 +1,5 @@
1
1
  export * from './Carousel';
2
+ export * from './ChatOverlayLayout';
3
+ export * from './ChatInlineLayout';
4
+ export * from './ChatSidePanelLayout';
5
+ export * from './ChatGreeting';
@@ -1 +1,5 @@
1
1
  export { Carousel } from './Carousel.js';
2
+ export { ChatOverlayLayout } from './ChatOverlayLayout.js';
3
+ export { ChatInlineLayout } from './ChatInlineLayout.js';
4
+ export { ChatSidePanelLayout } from './ChatSidePanelLayout.js';
5
+ export { ChatGreeting } from './ChatGreeting.js';
package/dist/es/index.js CHANGED
@@ -26,5 +26,10 @@ 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 { ChatOverlayLayout } from './components/ChatOverlayLayout.js';
33
+ export { ChatInlineLayout } from './components/ChatInlineLayout.js';
34
+ export { ChatSidePanelLayout } from './components/ChatSidePanelLayout.js';
35
+ export { ChatGreeting } from './components/ChatGreeting.js';
@@ -39,6 +39,14 @@ export type SearchBoxClassNames = {
39
39
  * Class names to apply to the loading icon
40
40
  */
41
41
  loadingIcon: string;
42
+ /**
43
+ * Class names to apply to the AI mode button
44
+ */
45
+ aiModeButton: string;
46
+ /**
47
+ * Class names to apply to the AI mode icon
48
+ */
49
+ aiModeIcon: string;
42
50
  };
43
51
  export type SearchBoxTranslations = {
44
52
  /**
@@ -49,6 +57,10 @@ export type SearchBoxTranslations = {
49
57
  * The alternative text of the reset button.
50
58
  */
51
59
  resetButtonTitle: string;
60
+ /**
61
+ * The alternative text of the AI mode button.
62
+ */
63
+ aiModeButtonTitle?: string;
52
64
  };
53
65
  export type SearchBoxProps = Omit<React.ComponentProps<'div'>, 'onSubmit' | 'onReset' | 'onChange'> & Pick<React.ComponentProps<'form'>, 'onSubmit'> & Required<Pick<React.ComponentProps<'form'>, 'onReset'>> & Pick<React.ComponentProps<'input'>, 'placeholder' | 'autoFocus'> & {
54
66
  onChange?: (event: React.ChangeEvent<HTMLInputElement> | React.CompositionEvent<HTMLInputElement>) => void;
@@ -60,7 +72,9 @@ export type SearchBoxProps = Omit<React.ComponentProps<'div'>, 'onSubmit' | 'onR
60
72
  resetIconComponent?: React.JSXElementConstructor<IconProps>;
61
73
  submitIconComponent?: React.JSXElementConstructor<IconProps>;
62
74
  loadingIconComponent?: React.JSXElementConstructor<IconProps>;
75
+ aiModeIconComponent?: React.JSXElementConstructor<IconProps>;
76
+ onAiModeClick?: () => void;
63
77
  classNames?: Partial<SearchBoxClassNames>;
64
78
  translations: SearchBoxTranslations;
65
79
  };
66
- export declare function SearchBox({ formRef, inputRef, inputProps, isSearchStalled, onChange, onReset, onSubmit, placeholder, value, autoFocus, resetIconComponent: ResetIcon, submitIconComponent: SubmitIcon, loadingIconComponent: LoadingIcon, classNames, translations, ...props }: SearchBoxProps): React.JSX.Element;
80
+ export declare function SearchBox({ formRef, inputRef, inputProps, isSearchStalled, onChange, onReset, onSubmit, placeholder, value, autoFocus, resetIconComponent: ResetIcon, submitIconComponent: SubmitIcon, loadingIconComponent: LoadingIcon, aiModeIconComponent: AiModeIcon, onAiModeClick, classNames, translations, ...props }: SearchBoxProps): React.JSX.Element;