react-instantsearch 7.41.0 → 7.42.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.
@@ -16,7 +16,9 @@ var _instantsearchuicomponents = require("instantsearch-ui-components");
16
16
  var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
17
17
  var CarouselUiComponent = (0, _instantsearchuicomponents.createCarouselComponent)({
18
18
  createElement: _react.createElement,
19
- Fragment: _react.Fragment
19
+ Fragment: _react.Fragment,
20
+ useEffect: _react.useEffect,
21
+ useRef: _react.useRef
20
22
  });
21
23
  function Carousel(props) {
22
24
  var _useState = _sliced_to_array._((0, _react.useState)(false), 2), canScrollLeft = _useState[0], setCanScrollLeft = _useState[1];
@@ -650,7 +650,7 @@ function InnerAutocomplete(_0) {
650
650
  if (chatRenderState) {
651
651
  if ((0, _chat.openChat)(chatRenderState, {
652
652
  message: item.prompt,
653
- referer: 'prompt-suggestions'
653
+ referer: 'prompt-suggestions-autocomplete'
654
654
  })) {
655
655
  setQuery('');
656
656
  }
@@ -59,11 +59,28 @@ function createDefaultTools(itemComponent, getSearchPageURL) {
59
59
  var _obj;
60
60
  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.DisplayResultsToolType, (0, _DisplayResultsTool.createDisplayResultsTool)(itemComponent)), _define_property._(_obj, _chat.MemorizeToolType, {}), _define_property._(_obj, _chat.MemorySearchToolType, {}), _define_property._(_obj, _chat.PonderToolType, {}), _obj;
61
61
  }
62
+ function mergeToolOptions(defaultTools, userTools) {
63
+ if (!userTools) {
64
+ return defaultTools;
65
+ }
66
+ var tools = _object_spread._({}, defaultTools, userTools);
67
+ Object.keys(userTools).forEach(function(toolName) {
68
+ var _defaultTools_toolName;
69
+ var userTool = userTools[toolName];
70
+ var defaultStreamInput = (_defaultTools_toolName = defaultTools[toolName]) === null || _defaultTools_toolName === void 0 ? void 0 : _defaultTools_toolName.streamInput;
71
+ if (userTool.layoutComponent !== undefined && userTool.streamInput === undefined && defaultStreamInput !== undefined) {
72
+ tools[toolName] = _object_spread_props._(_object_spread._({}, userTool), {
73
+ streamInput: defaultStreamInput
74
+ });
75
+ }
76
+ });
77
+ return tools;
78
+ }
62
79
  function ChatInner(_0, _1) {
63
80
  var _ref = [
64
81
  _0,
65
82
  _1
66
- ], _ref1 = _to_array._(_ref), _ref2 = _ref1[0], _rest = _ref1.slice(1), userTools = _ref2.tools, headerProps = _ref2.headerProps, messagesProps = _ref2.messagesProps, promptProps = _ref2.promptProps, itemComponent = _ref2.itemComponent, layoutComponent = _ref2.layoutComponent, 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, _ref_disableTriggerValidation = _ref2.disableTriggerValidation, disableTriggerValidation = _ref_disableTriggerValidation === void 0 ? false : _ref_disableTriggerValidation, props = _object_without_properties._(_ref2, [
83
+ ], _ref1 = _to_array._(_ref), _ref2 = _ref1[0], _rest = _ref1.slice(1), userTools = _ref2.tools, headerProps = _ref2.headerProps, messagesProps = _ref2.messagesProps, promptProps = _ref2.promptProps, itemComponent = _ref2.itemComponent, layoutComponent = _ref2.layoutComponent, 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, _ref_disableTriggerValidation = _ref2.disableTriggerValidation, disableTriggerValidation = _ref_disableTriggerValidation === void 0 ? false : _ref_disableTriggerValidation, showReasoning = _ref2.showReasoning, props = _object_without_properties._(_ref2, [
67
84
  "tools",
68
85
  "headerProps",
69
86
  "messagesProps",
@@ -91,7 +108,8 @@ function ChatInner(_0, _1) {
91
108
  "translations",
92
109
  "title",
93
110
  "getSearchPageURL",
94
- "disableTriggerValidation"
111
+ "disableTriggerValidation",
112
+ "showReasoning"
95
113
  ]), _rest1 = _sliced_to_array._(_rest, 1), ref = _rest1[0];
96
114
  var promptTranslations = translations.prompt, headerTranslations = translations.header, messageTranslations = translations.message, messagesTranslations = translations.messages;
97
115
  var _useInstantSearch = (0, _reactinstantsearchcore.useInstantSearch)(), indexUiState = _useInstantSearch.indexUiState, setIndexUiState = _useInstantSearch.setIndexUiState;
@@ -103,7 +121,7 @@ function ChatInner(_0, _1) {
103
121
  }), scrollRef = _useStickToBottom1.scrollRef, contentRef = _useStickToBottom1.contentRef, scrollToBottom = _useStickToBottom1.scrollToBottom, isAtBottom = _useStickToBottom1.isAtBottom;
104
122
  var tools = (0, _react.useMemo)(function() {
105
123
  var defaults = createDefaultTools(itemComponent, getSearchPageURL);
106
- return _object_spread._({}, defaults, userTools);
124
+ return mergeToolOptions(defaults, userTools);
107
125
  }, [
108
126
  getSearchPageURL,
109
127
  itemComponent,
@@ -158,6 +176,10 @@ function ChatInner(_0, _1) {
158
176
  status,
159
177
  scrollToBottom
160
178
  ]);
179
+ var _ref3 = messagesProps !== null && messagesProps !== void 0 ? messagesProps : {}, callerAssistantMessageProps = _ref3.assistantMessageProps, callerUserMessageProps = _ref3.userMessageProps, restMessagesProps = _object_without_properties._(_ref3, [
180
+ "assistantMessageProps",
181
+ "userMessageProps"
182
+ ]);
161
183
  return /*#__PURE__*/ _react.default.createElement(ChatUiComponent, {
162
184
  title: title,
163
185
  open: open,
@@ -213,17 +235,18 @@ function ChatInner(_0, _1) {
213
235
  errorComponent: messagesErrorComponent,
214
236
  emptyComponent: emptyComponent,
215
237
  actionsComponent: actionsComponent,
238
+ translations: messagesTranslations,
239
+ messageTranslations: messageTranslations
240
+ }, restMessagesProps), {
216
241
  assistantMessageProps: _object_spread._({
217
242
  leadingComponent: assistantMessageLeadingComponent,
218
- footerComponent: assistantMessageFooterComponent
219
- }, messagesProps === null || messagesProps === void 0 ? void 0 : messagesProps.assistantMessageProps),
243
+ footerComponent: assistantMessageFooterComponent,
244
+ showReasoning: showReasoning
245
+ }, callerAssistantMessageProps),
220
246
  userMessageProps: _object_spread._({
221
247
  leadingComponent: userMessageLeadingComponent,
222
248
  footerComponent: userMessageFooterComponent
223
- }, messagesProps === null || messagesProps === void 0 ? void 0 : messagesProps.userMessageProps),
224
- translations: messagesTranslations,
225
- messageTranslations: messageTranslations
226
- }, messagesProps), {
249
+ }, callerUserMessageProps),
227
250
  error: error
228
251
  }),
229
252
  promptProps: _object_spread._({
@@ -0,0 +1,66 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "PromptSuggestions", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return PromptSuggestions;
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_spread_props = require("@swc/helpers/_/_object_spread_props");
15
+ var _object_without_properties = require("@swc/helpers/_/_object_without_properties");
16
+ var _instantsearchuicomponents = require("instantsearch-ui-components");
17
+ var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
18
+ var _reactinstantsearchcore = require("react-instantsearch-core");
19
+ var PromptSuggestionsUi = (0, _instantsearchuicomponents.createPromptSuggestionsComponent)({
20
+ createElement: _react.createElement,
21
+ Fragment: _react.Fragment
22
+ });
23
+ function PromptSuggestions(_0) {
24
+ var _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, LayoutComponent = _0.layoutComponent, onSuggestionClickOverride = _0.onSuggestionClick, // Connector params — forwarded to the hook, not the UI root.
25
+ agentId = _0.agentId, transport = _0.transport, configurationId = _0.configurationId, transformHits = _0.transformHits, context = _0.context, transformItems = _0.transformItems, props = _object_without_properties._(_0, [
26
+ "classNames",
27
+ "layoutComponent",
28
+ "onSuggestionClick",
29
+ "agentId",
30
+ "transport",
31
+ "configurationId",
32
+ "transformHits",
33
+ "context",
34
+ "transformItems"
35
+ ]);
36
+ var _usePromptSuggestions = (0, _reactinstantsearchcore.usePromptSuggestions)({
37
+ agentId: agentId,
38
+ transport: transport,
39
+ configurationId: configurationId,
40
+ transformHits: transformHits,
41
+ context: context,
42
+ transformItems: transformItems
43
+ }, {
44
+ $$widgetType: 'ais.promptSuggestions'
45
+ }), suggestions = _usePromptSuggestions.suggestions, isLoading = _usePromptSuggestions.isLoading, onSuggestionClick = _usePromptSuggestions.onSuggestionClick, isChatBusy = _usePromptSuggestions.isChatBusy, sendToChat = _usePromptSuggestions.sendToChat;
46
+ var handleClick = onSuggestionClickOverride ? function(prompt) {
47
+ return onSuggestionClickOverride(prompt, {
48
+ sendToChat: sendToChat
49
+ });
50
+ } : onSuggestionClick;
51
+ if (LayoutComponent) {
52
+ return /*#__PURE__*/ _react.default.createElement(LayoutComponent, {
53
+ suggestions: suggestions,
54
+ isLoading: isLoading,
55
+ onSuggestionClick: handleClick,
56
+ isChatBusy: isChatBusy
57
+ });
58
+ }
59
+ return /*#__PURE__*/ _react.default.createElement(PromptSuggestionsUi, _object_spread_props._(_object_spread._({}, props), {
60
+ classNames: classNames,
61
+ suggestions: suggestions,
62
+ isLoading: isLoading,
63
+ onSuggestionClick: handleClick,
64
+ disabled: isChatBusy
65
+ }));
66
+ }
@@ -17,11 +17,43 @@ function createDisplayResultsTool(itemComponent) {
17
17
  var DisplayResultsUIComponent = (0, _instantsearchuicomponents.createDisplayResultsToolComponent)({
18
18
  createElement: _react.createElement,
19
19
  Fragment: _react.Fragment,
20
- useMemo: _react.useMemo
20
+ useEffect: _react.useEffect,
21
+ useMemo: _react.useMemo,
22
+ useRef: _react.useRef
21
23
  });
22
24
  var Button = (0, _instantsearchuicomponents.createButtonComponent)({
23
25
  createElement: _react.createElement
24
26
  });
27
+ var DisplayResultsCarouselHeader = function DisplayResultsCarouselHeader(param) {
28
+ var nbItems = param.nbItems, canScrollLeft = param.canScrollLeft, canScrollRight = param.canScrollRight, scrollLeft = param.scrollLeft, scrollRight = param.scrollRight;
29
+ return /*#__PURE__*/ _react.default.createElement("div", {
30
+ className: "ais-ChatToolDisplayResultsCarouselHeader"
31
+ }, /*#__PURE__*/ _react.default.createElement("div", {
32
+ className: "ais-ChatToolDisplayResultsCarouselHeaderCount"
33
+ }, nbItems, " result", nbItems > 1 ? 's' : ''), /*#__PURE__*/ _react.default.createElement("div", {
34
+ className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButtons"
35
+ }, /*#__PURE__*/ _react.default.createElement(Button, {
36
+ variant: "outline",
37
+ size: "sm",
38
+ iconOnly: true,
39
+ "aria-label": "Previous",
40
+ onClick: scrollLeft,
41
+ disabled: !canScrollLeft,
42
+ className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButton"
43
+ }, /*#__PURE__*/ _react.default.createElement(_instantsearchuicomponents.ChevronLeftIcon, {
44
+ createElement: _react.createElement
45
+ })), /*#__PURE__*/ _react.default.createElement(Button, {
46
+ variant: "outline",
47
+ size: "sm",
48
+ iconOnly: true,
49
+ "aria-label": "Next",
50
+ onClick: scrollRight,
51
+ disabled: !canScrollRight,
52
+ className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButton"
53
+ }, /*#__PURE__*/ _react.default.createElement(_instantsearchuicomponents.ChevronRightIcon, {
54
+ createElement: _react.createElement
55
+ }))));
56
+ };
25
57
  var DisplayResultsLayoutComponent = function DisplayResultsLayoutComponent(toolProps) {
26
58
  return /*#__PURE__*/ _react.default.createElement(DisplayResultsUIComponent, {
27
59
  toolProps: toolProps,
@@ -32,39 +64,13 @@ function createDisplayResultsTool(itemComponent) {
32
64
  itemComponent: itemComponent,
33
65
  sendEvent: sendEvent,
34
66
  showNavigation: false,
35
- headerComponent: function headerComponent(param) {
36
- var canScrollLeft = param.canScrollLeft, canScrollRight = param.canScrollRight, scrollLeft = param.scrollLeft, scrollRight = param.scrollRight;
37
- return /*#__PURE__*/ _react.default.createElement("div", {
38
- className: "ais-ChatToolDisplayResultsCarouselHeader"
39
- }, /*#__PURE__*/ _react.default.createElement("div", {
40
- className: "ais-ChatToolDisplayResultsCarouselHeaderCount"
41
- }, items.length, " result", items.length > 1 ? 's' : ''), /*#__PURE__*/ _react.default.createElement("div", {
42
- className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButtons"
43
- }, /*#__PURE__*/ _react.default.createElement(Button, {
44
- variant: "outline",
45
- size: "sm",
46
- iconOnly: true,
47
- onClick: scrollLeft,
48
- disabled: !canScrollLeft,
49
- className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButton"
50
- }, /*#__PURE__*/ _react.default.createElement(_instantsearchuicomponents.ChevronLeftIcon, {
51
- createElement: _react.createElement
52
- })), /*#__PURE__*/ _react.default.createElement(Button, {
53
- variant: "outline",
54
- size: "sm",
55
- iconOnly: true,
56
- onClick: scrollRight,
57
- disabled: !canScrollRight,
58
- className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButton"
59
- }, /*#__PURE__*/ _react.default.createElement(_instantsearchuicomponents.ChevronRightIcon, {
60
- createElement: _react.createElement
61
- }))));
62
- }
67
+ headerComponent: DisplayResultsCarouselHeader
63
68
  });
64
69
  }
65
70
  });
66
71
  };
67
72
  return {
68
- layoutComponent: DisplayResultsLayoutComponent
73
+ layoutComponent: DisplayResultsLayoutComponent,
74
+ streamInput: true
69
75
  };
70
76
  }
@@ -16,6 +16,7 @@ function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
16
16
  var SearchLayoutUIComponent = (0, _instantsearchuicomponents.createCarouselToolComponent)({
17
17
  createElement: _react.createElement,
18
18
  Fragment: _react.Fragment,
19
+ useEffect: _react.useEffect,
19
20
  useMemo: _react.useMemo,
20
21
  useRef: _react.useRef,
21
22
  useState: _react.useState
@@ -7,6 +7,7 @@ var _export_star = require("@swc/helpers/_/_export_star");
7
7
  _export_star._(require("./Autocomplete"), exports);
8
8
  _export_star._(require("./Breadcrumb"), exports);
9
9
  _export_star._(require("./Chat"), exports);
10
+ _export_star._(require("./PromptSuggestions"), exports);
10
11
  _export_star._(require("./ChatTrigger"), exports);
11
12
  _export_star._(require("./ClearRefinements"), exports);
12
13
  _export_star._(require("./CurrentRefinements"), exports);
@@ -1,11 +1,13 @@
1
1
  import { _ as _$1 } from '@swc/helpers/esm/_object_spread.js';
2
2
  import { _ } from '@swc/helpers/esm/_sliced_to_array.js';
3
3
  import { createCarouselComponent, generateCarouselId } from 'instantsearch-ui-components';
4
- import React, { createElement, Fragment, useState, useRef } from 'react';
4
+ import React, { createElement, Fragment, useEffect, useRef, useState } from 'react';
5
5
 
6
6
  var CarouselUiComponent = createCarouselComponent({
7
7
  createElement: createElement,
8
- Fragment: Fragment
8
+ Fragment: Fragment,
9
+ useEffect: useEffect,
10
+ useRef: useRef
9
11
  });
10
12
  function Carousel(props) {
11
13
  var _useState = _(useState(false), 2), canScrollLeft = _useState[0], setCanScrollLeft = _useState[1];
package/dist/es/index.js CHANGED
@@ -4,6 +4,7 @@ export { Autocomplete, EXPERIMENTAL_Autocomplete } from './widgets/Autocomplete.
4
4
  export { Breadcrumb } from './widgets/Breadcrumb.js';
5
5
  export { DisplayResultsToolType, MemorizeToolType, MemorySearchToolType, PonderToolType, RecommendToolType, SearchIndexToolType } from 'instantsearch.js/es/lib/chat/index.js';
6
6
  export { Chat, createDefaultTools } from './widgets/Chat.js';
7
+ export { PromptSuggestions } from './widgets/PromptSuggestions.js';
7
8
  export { ChatTrigger } from './widgets/ChatTrigger.js';
8
9
  export { ClearRefinements } from './widgets/ClearRefinements.js';
9
10
  export { CurrentRefinements } from './widgets/CurrentRefinements.js';
@@ -631,7 +631,7 @@ function InnerAutocomplete(_0) {
631
631
  if (chatRenderState) {
632
632
  if (openChat(chatRenderState, {
633
633
  message: item.prompt,
634
- referer: 'prompt-suggestions'
634
+ referer: 'prompt-suggestions-autocomplete'
635
635
  })) {
636
636
  setQuery('');
637
637
  }
@@ -38,6 +38,10 @@ export type ChatProps<TObject, TUiMessage extends UIMessage = UIMessage> = Omit<
38
38
  userMessageLeadingComponent?: ChatMessageProps['leadingComponent'];
39
39
  userMessageFooterComponent?: ChatMessageProps['footerComponent'];
40
40
  suggestionsComponent?: ChatUiProps['suggestionsComponent'];
41
+ /**
42
+ * Whether to render reasoning parts
43
+ */
44
+ showReasoning?: boolean;
41
45
  translations?: Partial<{
42
46
  prompt: ChatUiProps['promptProps']['translations'];
43
47
  header: ChatUiProps['headerProps']['translations'];
@@ -1,6 +1,6 @@
1
1
  import { _ } from '@swc/helpers/esm/_define_property.js';
2
- import { _ as _$4 } from '@swc/helpers/esm/_object_spread.js';
3
- import { _ as _$5 } from '@swc/helpers/esm/_object_spread_props.js';
2
+ import { _ as _$5 } from '@swc/helpers/esm/_object_spread.js';
3
+ import { _ as _$4 } from '@swc/helpers/esm/_object_spread_props.js';
4
4
  import { _ as _$2 } from '@swc/helpers/esm/_object_without_properties.js';
5
5
  import { _ as _$3 } from '@swc/helpers/esm/_sliced_to_array.js';
6
6
  import { _ as _$1 } from '@swc/helpers/esm/_to_array.js';
@@ -23,11 +23,28 @@ function createDefaultTools(itemComponent, getSearchPageURL) {
23
23
  var _obj;
24
24
  return _obj = {}, _(_obj, SearchIndexToolType, createCarouselTool(true, itemComponent, getSearchPageURL)), _(_obj, RecommendToolType, createCarouselTool(false, itemComponent, getSearchPageURL)), _(_obj, DisplayResultsToolType, createDisplayResultsTool(itemComponent)), _(_obj, MemorizeToolType, {}), _(_obj, MemorySearchToolType, {}), _(_obj, PonderToolType, {}), _obj;
25
25
  }
26
+ function mergeToolOptions(defaultTools, userTools) {
27
+ if (!userTools) {
28
+ return defaultTools;
29
+ }
30
+ var tools = _$5({}, defaultTools, userTools);
31
+ Object.keys(userTools).forEach(function(toolName) {
32
+ var _defaultTools_toolName;
33
+ var userTool = userTools[toolName];
34
+ var defaultStreamInput = (_defaultTools_toolName = defaultTools[toolName]) === null || _defaultTools_toolName === void 0 ? void 0 : _defaultTools_toolName.streamInput;
35
+ if (userTool.layoutComponent !== undefined && userTool.streamInput === undefined && defaultStreamInput !== undefined) {
36
+ tools[toolName] = _$4(_$5({}, userTool), {
37
+ streamInput: defaultStreamInput
38
+ });
39
+ }
40
+ });
41
+ return tools;
42
+ }
26
43
  function ChatInner(_0, _1) {
27
44
  var _ref = [
28
45
  _0,
29
46
  _1
30
- ], _ref1 = _$1(_ref), _ref2 = _ref1[0], _rest = _ref1.slice(1), userTools = _ref2.tools, headerProps = _ref2.headerProps, messagesProps = _ref2.messagesProps, promptProps = _ref2.promptProps, itemComponent = _ref2.itemComponent, layoutComponent = _ref2.layoutComponent, 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, _ref_disableTriggerValidation = _ref2.disableTriggerValidation, disableTriggerValidation = _ref_disableTriggerValidation === void 0 ? false : _ref_disableTriggerValidation, props = _$2(_ref2, [
47
+ ], _ref1 = _$1(_ref), _ref2 = _ref1[0], _rest = _ref1.slice(1), userTools = _ref2.tools, headerProps = _ref2.headerProps, messagesProps = _ref2.messagesProps, promptProps = _ref2.promptProps, itemComponent = _ref2.itemComponent, layoutComponent = _ref2.layoutComponent, 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, _ref_disableTriggerValidation = _ref2.disableTriggerValidation, disableTriggerValidation = _ref_disableTriggerValidation === void 0 ? false : _ref_disableTriggerValidation, showReasoning = _ref2.showReasoning, props = _$2(_ref2, [
31
48
  "tools",
32
49
  "headerProps",
33
50
  "messagesProps",
@@ -55,7 +72,8 @@ function ChatInner(_0, _1) {
55
72
  "translations",
56
73
  "title",
57
74
  "getSearchPageURL",
58
- "disableTriggerValidation"
75
+ "disableTriggerValidation",
76
+ "showReasoning"
59
77
  ]), _rest1 = _$3(_rest, 1), ref = _rest1[0];
60
78
  var promptTranslations = translations.prompt, headerTranslations = translations.header, messageTranslations = translations.message, messagesTranslations = translations.messages;
61
79
  var _useInstantSearch = useInstantSearch(), indexUiState = _useInstantSearch.indexUiState, setIndexUiState = _useInstantSearch.setIndexUiState;
@@ -67,7 +85,7 @@ function ChatInner(_0, _1) {
67
85
  }), scrollRef = _useStickToBottom.scrollRef, contentRef = _useStickToBottom.contentRef, scrollToBottom = _useStickToBottom.scrollToBottom, isAtBottom = _useStickToBottom.isAtBottom;
68
86
  var tools = useMemo(function() {
69
87
  var defaults = createDefaultTools(itemComponent, getSearchPageURL);
70
- return _$4({}, defaults, userTools);
88
+ return mergeToolOptions(defaults, userTools);
71
89
  }, [
72
90
  getSearchPageURL,
73
91
  itemComponent,
@@ -78,7 +96,7 @@ function ChatInner(_0, _1) {
78
96
  // set on the layout component, which is consistent across flavors.
79
97
  var isInlineLayoutComponent = typeof layoutComponent === 'function' && layoutComponent.$$inlineLayout === true;
80
98
  var effectiveDisableTriggerValidation = disableTriggerValidation || isInlineLayoutComponent;
81
- var chatState = useChat(_$5(_$4({}, props), {
99
+ var chatState = useChat(_$4(_$5({}, props), {
82
100
  tools: tools,
83
101
  disableTriggerValidation: effectiveDisableTriggerValidation
84
102
  }));
@@ -122,6 +140,10 @@ function ChatInner(_0, _1) {
122
140
  status,
123
141
  scrollToBottom
124
142
  ]);
143
+ var _ref3 = messagesProps !== null && messagesProps !== void 0 ? messagesProps : {}, callerAssistantMessageProps = _ref3.assistantMessageProps, callerUserMessageProps = _ref3.userMessageProps, restMessagesProps = _$2(_ref3, [
144
+ "assistantMessageProps",
145
+ "userMessageProps"
146
+ ]);
125
147
  return /*#__PURE__*/ React.createElement(ChatUiComponent, {
126
148
  title: title,
127
149
  open: open,
@@ -134,7 +156,7 @@ function ChatInner(_0, _1) {
134
156
  headerComponent: headerComponent,
135
157
  promptComponent: promptComponent,
136
158
  suggestionsComponent: suggestionsComponent,
137
- headerProps: _$4({
159
+ headerProps: _$5({
138
160
  onClose: function onClose() {
139
161
  return setOpen(false);
140
162
  },
@@ -150,7 +172,7 @@ function ChatInner(_0, _1) {
150
172
  maximizeIconComponent: headerMaximizeIconComponent,
151
173
  translations: headerTranslations
152
174
  }, headerProps),
153
- messagesProps: _$5(_$4({
175
+ messagesProps: _$4(_$5({
154
176
  status: status,
155
177
  onReload: function onReload(messageId) {
156
178
  return regenerate({
@@ -177,20 +199,21 @@ function ChatInner(_0, _1) {
177
199
  errorComponent: messagesErrorComponent,
178
200
  emptyComponent: emptyComponent,
179
201
  actionsComponent: actionsComponent,
180
- assistantMessageProps: _$4({
202
+ translations: messagesTranslations,
203
+ messageTranslations: messageTranslations
204
+ }, restMessagesProps), {
205
+ assistantMessageProps: _$5({
181
206
  leadingComponent: assistantMessageLeadingComponent,
182
- footerComponent: assistantMessageFooterComponent
183
- }, messagesProps === null || messagesProps === void 0 ? void 0 : messagesProps.assistantMessageProps),
184
- userMessageProps: _$4({
207
+ footerComponent: assistantMessageFooterComponent,
208
+ showReasoning: showReasoning
209
+ }, callerAssistantMessageProps),
210
+ userMessageProps: _$5({
185
211
  leadingComponent: userMessageLeadingComponent,
186
212
  footerComponent: userMessageFooterComponent
187
- }, messagesProps === null || messagesProps === void 0 ? void 0 : messagesProps.userMessageProps),
188
- translations: messagesTranslations,
189
- messageTranslations: messageTranslations
190
- }, messagesProps), {
213
+ }, callerUserMessageProps),
191
214
  error: error
192
215
  }),
193
- promptProps: _$4({
216
+ promptProps: _$5({
194
217
  promptRef: promptRef,
195
218
  status: status,
196
219
  value: input,
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import type { PromptSuggestionsOwnProps } from 'instantsearch-ui-components';
3
+ import type { UsePromptSuggestionsProps } from 'react-instantsearch-core';
4
+ /**
5
+ * Props passed to a custom `layoutComponent`. Mirrors the connector render
6
+ * state so a layout component owns the full markup.
7
+ */
8
+ export type PromptSuggestionsLayoutComponentProps = {
9
+ suggestions: string[];
10
+ isLoading: boolean;
11
+ onSuggestionClick: (prompt: string) => void;
12
+ isChatBusy: boolean;
13
+ };
14
+ export type PromptSuggestionsOnSuggestionClick = (prompt: string, helpers: {
15
+ sendToChat: (prompt: string) => boolean;
16
+ }) => void;
17
+ type OwnedUiProps = 'suggestions' | 'isLoading' | 'onSuggestionClick' | 'disabled' | 'skeletonCount';
18
+ export type PromptSuggestionsProps = Omit<PromptSuggestionsOwnProps, OwnedUiProps> & UsePromptSuggestionsProps & {
19
+ layoutComponent?: (props: PromptSuggestionsLayoutComponentProps) => JSX.Element | null;
20
+ onSuggestionClick?: PromptSuggestionsOnSuggestionClick;
21
+ };
22
+ export declare function PromptSuggestions({ classNames, layoutComponent: LayoutComponent, onSuggestionClick: onSuggestionClickOverride, agentId, transport, configurationId, transformHits, context, transformItems, ...props }: PromptSuggestionsProps): React.JSX.Element;
23
+ export {};
@@ -0,0 +1,57 @@
1
+ import { _ as _$2 } from '@swc/helpers/esm/_object_spread.js';
2
+ import { _ as _$1 } from '@swc/helpers/esm/_object_spread_props.js';
3
+ import { _ } from '@swc/helpers/esm/_object_without_properties.js';
4
+ import { createPromptSuggestionsComponent } from 'instantsearch-ui-components';
5
+ import React, { createElement, Fragment } from 'react';
6
+ import { usePromptSuggestions } from 'react-instantsearch-core';
7
+
8
+ var PromptSuggestionsUi = createPromptSuggestionsComponent({
9
+ createElement: createElement,
10
+ Fragment: Fragment
11
+ });
12
+ function PromptSuggestions(_0) {
13
+ var _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, LayoutComponent = _0.layoutComponent, onSuggestionClickOverride = _0.onSuggestionClick, // Connector params — forwarded to the hook, not the UI root.
14
+ agentId = _0.agentId, transport = _0.transport, configurationId = _0.configurationId, transformHits = _0.transformHits, context = _0.context, transformItems = _0.transformItems, props = _(_0, [
15
+ "classNames",
16
+ "layoutComponent",
17
+ "onSuggestionClick",
18
+ "agentId",
19
+ "transport",
20
+ "configurationId",
21
+ "transformHits",
22
+ "context",
23
+ "transformItems"
24
+ ]);
25
+ var _usePromptSuggestions = usePromptSuggestions({
26
+ agentId: agentId,
27
+ transport: transport,
28
+ configurationId: configurationId,
29
+ transformHits: transformHits,
30
+ context: context,
31
+ transformItems: transformItems
32
+ }, {
33
+ $$widgetType: 'ais.promptSuggestions'
34
+ }), suggestions = _usePromptSuggestions.suggestions, isLoading = _usePromptSuggestions.isLoading, onSuggestionClick = _usePromptSuggestions.onSuggestionClick, isChatBusy = _usePromptSuggestions.isChatBusy, sendToChat = _usePromptSuggestions.sendToChat;
35
+ var handleClick = onSuggestionClickOverride ? function(prompt) {
36
+ return onSuggestionClickOverride(prompt, {
37
+ sendToChat: sendToChat
38
+ });
39
+ } : onSuggestionClick;
40
+ if (LayoutComponent) {
41
+ return /*#__PURE__*/ React.createElement(LayoutComponent, {
42
+ suggestions: suggestions,
43
+ isLoading: isLoading,
44
+ onSuggestionClick: handleClick,
45
+ isChatBusy: isChatBusy
46
+ });
47
+ }
48
+ return /*#__PURE__*/ React.createElement(PromptSuggestionsUi, _$1(_$2({}, props), {
49
+ classNames: classNames,
50
+ suggestions: suggestions,
51
+ isLoading: isLoading,
52
+ onSuggestionClick: handleClick,
53
+ disabled: isChatBusy
54
+ }));
55
+ }
56
+
57
+ export { PromptSuggestions };
@@ -1,16 +1,48 @@
1
1
  import { createDisplayResultsToolComponent, createButtonComponent, ChevronLeftIcon, ChevronRightIcon } from 'instantsearch-ui-components';
2
- import React, { createElement, Fragment, useMemo } from 'react';
2
+ import React, { createElement, Fragment, useEffect, useMemo, useRef } from 'react';
3
3
  import { Carousel } from '../../../components/Carousel.js';
4
4
 
5
5
  function createDisplayResultsTool(itemComponent) {
6
6
  var DisplayResultsUIComponent = createDisplayResultsToolComponent({
7
7
  createElement: createElement,
8
8
  Fragment: Fragment,
9
- useMemo: useMemo
9
+ useEffect: useEffect,
10
+ useMemo: useMemo,
11
+ useRef: useRef
10
12
  });
11
13
  var Button = createButtonComponent({
12
14
  createElement: createElement
13
15
  });
16
+ var DisplayResultsCarouselHeader = function DisplayResultsCarouselHeader(param) {
17
+ var nbItems = param.nbItems, canScrollLeft = param.canScrollLeft, canScrollRight = param.canScrollRight, scrollLeft = param.scrollLeft, scrollRight = param.scrollRight;
18
+ return /*#__PURE__*/ React.createElement("div", {
19
+ className: "ais-ChatToolDisplayResultsCarouselHeader"
20
+ }, /*#__PURE__*/ React.createElement("div", {
21
+ className: "ais-ChatToolDisplayResultsCarouselHeaderCount"
22
+ }, nbItems, " result", nbItems > 1 ? 's' : ''), /*#__PURE__*/ React.createElement("div", {
23
+ className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButtons"
24
+ }, /*#__PURE__*/ React.createElement(Button, {
25
+ variant: "outline",
26
+ size: "sm",
27
+ iconOnly: true,
28
+ "aria-label": "Previous",
29
+ onClick: scrollLeft,
30
+ disabled: !canScrollLeft,
31
+ className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButton"
32
+ }, /*#__PURE__*/ React.createElement(ChevronLeftIcon, {
33
+ createElement: createElement
34
+ })), /*#__PURE__*/ React.createElement(Button, {
35
+ variant: "outline",
36
+ size: "sm",
37
+ iconOnly: true,
38
+ "aria-label": "Next",
39
+ onClick: scrollRight,
40
+ disabled: !canScrollRight,
41
+ className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButton"
42
+ }, /*#__PURE__*/ React.createElement(ChevronRightIcon, {
43
+ createElement: createElement
44
+ }))));
45
+ };
14
46
  var DisplayResultsLayoutComponent = function DisplayResultsLayoutComponent(toolProps) {
15
47
  return /*#__PURE__*/ React.createElement(DisplayResultsUIComponent, {
16
48
  toolProps: toolProps,
@@ -21,40 +53,14 @@ function createDisplayResultsTool(itemComponent) {
21
53
  itemComponent: itemComponent,
22
54
  sendEvent: sendEvent,
23
55
  showNavigation: false,
24
- headerComponent: function headerComponent(param) {
25
- var canScrollLeft = param.canScrollLeft, canScrollRight = param.canScrollRight, scrollLeft = param.scrollLeft, scrollRight = param.scrollRight;
26
- return /*#__PURE__*/ React.createElement("div", {
27
- className: "ais-ChatToolDisplayResultsCarouselHeader"
28
- }, /*#__PURE__*/ React.createElement("div", {
29
- className: "ais-ChatToolDisplayResultsCarouselHeaderCount"
30
- }, items.length, " result", items.length > 1 ? 's' : ''), /*#__PURE__*/ React.createElement("div", {
31
- className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButtons"
32
- }, /*#__PURE__*/ React.createElement(Button, {
33
- variant: "outline",
34
- size: "sm",
35
- iconOnly: true,
36
- onClick: scrollLeft,
37
- disabled: !canScrollLeft,
38
- className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButton"
39
- }, /*#__PURE__*/ React.createElement(ChevronLeftIcon, {
40
- createElement: createElement
41
- })), /*#__PURE__*/ React.createElement(Button, {
42
- variant: "outline",
43
- size: "sm",
44
- iconOnly: true,
45
- onClick: scrollRight,
46
- disabled: !canScrollRight,
47
- className: "ais-ChatToolDisplayResultsCarouselHeaderScrollButton"
48
- }, /*#__PURE__*/ React.createElement(ChevronRightIcon, {
49
- createElement: createElement
50
- }))));
51
- }
56
+ headerComponent: DisplayResultsCarouselHeader
52
57
  });
53
58
  }
54
59
  });
55
60
  };
56
61
  return {
57
- layoutComponent: DisplayResultsLayoutComponent
62
+ layoutComponent: DisplayResultsLayoutComponent,
63
+ streamInput: true
58
64
  };
59
65
  }
60
66