react-instantsearch 7.28.1 → 7.29.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.
@@ -1,4 +1,4 @@
1
- /*! React InstantSearch 7.28.1 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
1
+ /*! React InstantSearch 7.29.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
4
4
  typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
@@ -24,7 +24,7 @@
24
24
 
25
25
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
26
26
 
27
- var version$2 = '7.28.1';
27
+ var version$2 = '7.29.0';
28
28
 
29
29
  function _define_property(obj, key, value) {
30
30
  if (key in obj) {
@@ -9684,7 +9684,7 @@
9684
9684
  };
9685
9685
  }
9686
9686
 
9687
- var version = '4.92.1';
9687
+ var version = '4.93.0';
9688
9688
 
9689
9689
  function hydrateSearchClient(client, results) {
9690
9690
  if (!results) {
@@ -12578,6 +12578,30 @@
12578
12578
  return DefaultChatTransport;
12579
12579
  }(HttpChatTransport);
12580
12580
 
12581
+ function sendChatMessageFeedback(param) {
12582
+ var agentId = param.agentId, vote = param.vote, messageId = param.messageId, appId = param.appId, apiKey = param.apiKey;
12583
+ return fetch("https://".concat(appId, ".algolia.net/agent-studio/1/feedback"), {
12584
+ method: 'POST',
12585
+ body: JSON.stringify({
12586
+ messageId: messageId,
12587
+ agentId: agentId,
12588
+ vote: vote
12589
+ }),
12590
+ headers: {
12591
+ 'x-algolia-application-id': appId,
12592
+ 'x-algolia-api-key': apiKey,
12593
+ 'content-type': 'application/json'
12594
+ }
12595
+ }).then(function(response) {
12596
+ if (response.status >= 300) {
12597
+ return response.json().then(function(data) {
12598
+ throw new Error("Feedback request failed with status ".concat(response.status, ": ").concat(data.message));
12599
+ });
12600
+ }
12601
+ return response.json();
12602
+ });
12603
+ }
12604
+
12581
12605
  /**
12582
12606
  * Clears the refinements of a SearchParameters object based on rules provided.
12583
12607
  * The included attributes list is applied before the excluded attributes list. If the list
@@ -12797,7 +12821,11 @@
12797
12821
  var setOpen;
12798
12822
  var focusInput;
12799
12823
  var setIsClearing;
12824
+ var setFeedbackState;
12800
12825
  var agentId = 'agentId' in options ? options.agentId : undefined;
12826
+ var feedbackState = {};
12827
+ var _sendChatMessageFeedback;
12828
+ var feedbackAbortController;
12801
12829
  // Extract suggestions from the last assistant message's data-suggestions part
12802
12830
  var getSuggestionsFromMessages = function getSuggestionsFromMessages(messages) {
12803
12831
  // Find the last assistant message (iterate from end)
@@ -12829,6 +12857,7 @@
12829
12857
  var onClearTransitionEnd = function onClearTransitionEnd() {
12830
12858
  setMessages([]);
12831
12859
  _chatInstance.clearError();
12860
+ feedbackState = {};
12832
12861
  setIsClearing(false);
12833
12862
  };
12834
12863
  var makeChatInstance = function makeChatInstance(instantSearchInstance) {
@@ -12963,6 +12992,33 @@
12963
12992
  isClearing = value;
12964
12993
  render();
12965
12994
  };
12995
+ setFeedbackState = function setFeedbackState(messageId, state) {
12996
+ feedbackState = _object_spread_props(_object_spread({}, feedbackState), _define_property({}, messageId, state));
12997
+ render();
12998
+ };
12999
+ var feedback = 'feedback' in options ? options.feedback : undefined;
13000
+ if (agentId && feedback) {
13001
+ var _getAppIdAndApiKey = _sliced_to_array(getAppIdAndApiKey(initOptions.instantSearchInstance.client), 2), appId = _getAppIdAndApiKey[0], apiKey = _getAppIdAndApiKey[1];
13002
+ if (!appId || !apiKey) {
13003
+ throw new Error(withUsage$m('Could not extract Algolia credentials from the search client.'));
13004
+ }
13005
+ feedbackAbortController = new AbortController();
13006
+ _sendChatMessageFeedback = function _sendChatMessageFeedback(messageId, vote) {
13007
+ if (feedbackState[messageId] !== undefined) {
13008
+ return;
13009
+ }
13010
+ setFeedbackState(messageId, 'sending');
13011
+ sendChatMessageFeedback({
13012
+ agentId: agentId,
13013
+ vote: vote,
13014
+ messageId: messageId,
13015
+ appId: appId,
13016
+ apiKey: apiKey
13017
+ }).finally(function() {
13018
+ setFeedbackState(messageId, vote);
13019
+ });
13020
+ };
13021
+ }
12966
13022
  _chatInstance['~registerErrorCallback'](render);
12967
13023
  _chatInstance['~registerMessagesCallback'](render);
12968
13024
  _chatInstance['~registerStatusCallback'](render);
@@ -13023,6 +13079,8 @@
13023
13079
  clearMessages: clearMessages,
13024
13080
  onClearTransitionEnd: onClearTransitionEnd,
13025
13081
  tools: toolsWithAddToolResult,
13082
+ sendChatMessageFeedback: _sendChatMessageFeedback,
13083
+ feedbackState: feedbackState,
13026
13084
  widgetParams: widgetParams,
13027
13085
  // Chat instance render state
13028
13086
  addToolResult: _chatInstance.addToolResult,
@@ -13038,6 +13096,7 @@
13038
13096
  };
13039
13097
  },
13040
13098
  dispose: function dispose() {
13099
+ feedbackAbortController === null || feedbackAbortController === void 0 ? void 0 : feedbackAbortController.abort();
13041
13100
  unmountFn();
13042
13101
  },
13043
13102
  shouldRender: function shouldRender() {
@@ -17330,6 +17389,20 @@
17330
17389
  };
17331
17390
  }
17332
17391
 
17392
+ // WebKit can keep this SVG spinner animating while the loading slot is hidden (`hidden` / not stalled),
17393
+ // which wastes work. We pause SMIL when idle and unpause when `isSearchStalled`.
17394
+ // Same approach as autocomplete-js.
17395
+ // https://github.com/algolia/autocomplete/issues/1322
17396
+ function syncLoadingSvgAnimation(element, isSearchStalled) {
17397
+ if (!element || typeof element.pauseAnimations !== 'function' || typeof element.unpauseAnimations !== 'function') {
17398
+ return;
17399
+ }
17400
+ if (isSearchStalled) {
17401
+ element.unpauseAnimations();
17402
+ } else {
17403
+ element.pauseAnimations();
17404
+ }
17405
+ }
17333
17406
  function SubmitIcon(param) {
17334
17407
  var createElement = param.createElement;
17335
17408
  return /*#__PURE__*/ createElement("svg", {
@@ -17341,10 +17414,13 @@
17341
17414
  }));
17342
17415
  }
17343
17416
  function LoadingIcon(param) {
17344
- var createElement = param.createElement;
17417
+ var createElement = param.createElement, isSearchStalled = param.isSearchStalled;
17345
17418
  return /*#__PURE__*/ createElement("svg", {
17346
17419
  className: "ais-AutocompleteLoadingIcon",
17347
- viewBox: "0 0 100 100"
17420
+ viewBox: "0 0 100 100",
17421
+ ref: function ref(element) {
17422
+ return syncLoadingSvgAnimation(element, isSearchStalled);
17423
+ }
17348
17424
  }, /*#__PURE__*/ createElement("circle", {
17349
17425
  cx: "50",
17350
17426
  cy: "50",
@@ -17732,6 +17808,51 @@
17732
17808
  stroke: "currentColor"
17733
17809
  }));
17734
17810
  }
17811
+ function CheckIcon(param) {
17812
+ var createElement = param.createElement;
17813
+ return /*#__PURE__*/ createElement("svg", {
17814
+ xmlns: "http://www.w3.org/2000/svg",
17815
+ viewBox: "0 0 24 24",
17816
+ fill: "none",
17817
+ stroke: "currentColor",
17818
+ strokeLinecap: "round",
17819
+ strokeLinejoin: "round"
17820
+ }, /*#__PURE__*/ createElement("path", {
17821
+ d: "M21.801 10A10 10 0 1 1 17 3.335"
17822
+ }), /*#__PURE__*/ createElement("path", {
17823
+ d: "m9 11 3 3L22 4"
17824
+ }));
17825
+ }
17826
+ function ThumbsUpIcon(param) {
17827
+ var createElement = param.createElement;
17828
+ return /*#__PURE__*/ createElement("svg", {
17829
+ xmlns: "http://www.w3.org/2000/svg",
17830
+ viewBox: "0 0 24 24",
17831
+ fill: "none",
17832
+ stroke: "currentColor",
17833
+ strokeLinecap: "round",
17834
+ strokeLinejoin: "round"
17835
+ }, /*#__PURE__*/ createElement("path", {
17836
+ d: "M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"
17837
+ }), /*#__PURE__*/ createElement("path", {
17838
+ d: "M7 10v12"
17839
+ }));
17840
+ }
17841
+ function ThumbsDownIcon(param) {
17842
+ var createElement = param.createElement;
17843
+ return /*#__PURE__*/ createElement("svg", {
17844
+ xmlns: "http://www.w3.org/2000/svg",
17845
+ viewBox: "0 0 24 24",
17846
+ fill: "none",
17847
+ stroke: "currentColor",
17848
+ strokeLinecap: "round",
17849
+ strokeLinejoin: "round"
17850
+ }, /*#__PURE__*/ createElement("path", {
17851
+ d: "M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"
17852
+ }), /*#__PURE__*/ createElement("path", {
17853
+ d: "M17 14V2"
17854
+ }));
17855
+ }
17735
17856
  function ChevronLeftIcon(param) {
17736
17857
  var createElement = param.createElement;
17737
17858
  return /*#__PURE__*/ createElement("svg", {
@@ -17845,14 +17966,16 @@
17845
17966
  }, /*#__PURE__*/ createElement("button", {
17846
17967
  className: "ais-AutocompleteSubmitButton",
17847
17968
  type: "submit",
17848
- title: "Submit"
17969
+ title: "Submit",
17970
+ hidden: isSearchStalled
17849
17971
  }, /*#__PURE__*/ createElement(SubmitIcon, {
17850
17972
  createElement: createElement
17851
17973
  }))), /*#__PURE__*/ createElement("div", {
17852
17974
  className: "ais-AutocompleteLoadingIndicator",
17853
17975
  hidden: !isSearchStalled
17854
17976
  }, /*#__PURE__*/ createElement(LoadingIcon, {
17855
- createElement: createElement
17977
+ createElement: createElement,
17978
+ isSearchStalled: isSearchStalled
17856
17979
  }))), /*#__PURE__*/ createElement("div", {
17857
17980
  className: "ais-AutocompleteInputWrapper"
17858
17981
  }, /*#__PURE__*/ createElement("input", _object_spread({
@@ -18814,7 +18937,7 @@
18814
18937
  Fragment: Fragment
18815
18938
  });
18816
18939
  return function DefaultMessage(param) {
18817
- var message = param.message, status = param.status, userMessageProps = param.userMessageProps, assistantMessageProps = param.assistantMessageProps, tools = param.tools, indexUiState = param.indexUiState, setIndexUiState = param.setIndexUiState, onReload = param.onReload, onClose = param.onClose, actionsComponent = param.actionsComponent, classNames = param.classNames, messageTranslations = param.messageTranslations, translations = param.translations, suggestionsElement = param.suggestionsElement;
18940
+ var message = param.message, status = param.status, userMessageProps = param.userMessageProps, assistantMessageProps = param.assistantMessageProps, tools = param.tools, indexUiState = param.indexUiState, setIndexUiState = param.setIndexUiState, onReload = param.onReload, onClose = param.onClose, onFeedback = param.onFeedback, feedbackState = param.feedbackState, actionsComponent = param.actionsComponent, classNames = param.classNames, messageTranslations = param.messageTranslations, translations = param.translations, suggestionsElement = param.suggestionsElement;
18818
18941
  var defaultAssistantActions = _to_consumable_array(hasTextContent(message) ? [
18819
18942
  {
18820
18943
  title: translations.copyToClipboardLabel,
@@ -18838,6 +18961,60 @@
18838
18961
  }
18839
18962
  }
18840
18963
  ]);
18964
+ var messageFeedback = feedbackState === null || feedbackState === void 0 ? void 0 : feedbackState[message.id];
18965
+ var hasVoted = messageFeedback !== undefined;
18966
+ if (onFeedback) {
18967
+ var isSending = messageFeedback === 'sending';
18968
+ if (isSending) {
18969
+ defaultAssistantActions.push({
18970
+ title: translations.sendingFeedbackLabel,
18971
+ icon: function icon() {
18972
+ return /*#__PURE__*/ createElement("span", {
18973
+ className: "ais-ChatMessage-feedbackSpinner"
18974
+ }, /*#__PURE__*/ createElement(LoadingSpinnerIcon, {
18975
+ createElement: createElement
18976
+ }));
18977
+ },
18978
+ disabled: true
18979
+ });
18980
+ } else if (hasVoted) {
18981
+ defaultAssistantActions.push({
18982
+ title: translations.feedbackThankYouText,
18983
+ icon: function icon() {
18984
+ return /*#__PURE__*/ createElement("span", {
18985
+ className: "ais-ChatMessage-feedbackCheck"
18986
+ }, /*#__PURE__*/ createElement(CheckIcon, {
18987
+ createElement: createElement
18988
+ }), /*#__PURE__*/ createElement("span", {
18989
+ className: "ais-ChatMessage-feedbackText"
18990
+ }, translations.feedbackThankYouText));
18991
+ },
18992
+ disabled: true
18993
+ });
18994
+ } else {
18995
+ defaultAssistantActions.push({
18996
+ title: translations.thumbsUpLabel,
18997
+ icon: function icon() {
18998
+ return /*#__PURE__*/ createElement(ThumbsUpIcon, {
18999
+ createElement: createElement
19000
+ });
19001
+ },
19002
+ onClick: function onClick(m) {
19003
+ return onFeedback(m.id, 1);
19004
+ }
19005
+ }, {
19006
+ title: translations.thumbsDownLabel,
19007
+ icon: function icon() {
19008
+ return /*#__PURE__*/ createElement(ThumbsDownIcon, {
19009
+ createElement: createElement
19010
+ });
19011
+ },
19012
+ onClick: function onClick(m) {
19013
+ return onFeedback(m.id, 0);
19014
+ }
19015
+ });
19016
+ }
19017
+ }
18841
19018
  var messageProps = message.role === 'user' ? userMessageProps : assistantMessageProps;
18842
19019
  var defaultActions = message.role === 'user' ? undefined : defaultAssistantActions;
18843
19020
  return /*#__PURE__*/ createElement(ChatMessage, _object_spread({
@@ -18875,7 +19052,7 @@
18875
19052
  });
18876
19053
  return function ChatMessages(userProps) {
18877
19054
  var _lastMessage_parts;
18878
- var _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, _userProps_messageClassNames = userProps.messageClassNames, messageClassNames = _userProps_messageClassNames === void 0 ? {} : _userProps_messageClassNames, messageTranslations = userProps.messageTranslations, _userProps_messages = userProps.messages, messages = _userProps_messages === void 0 ? [] : _userProps_messages, MessageComponent = userProps.messageComponent, LoaderComponent = userProps.loaderComponent, ErrorComponent = userProps.errorComponent, ActionsComponent = userProps.actionsComponent, tools = userProps.tools, indexUiState = userProps.indexUiState, setIndexUiState = userProps.setIndexUiState, _userProps_status = userProps.status, status = _userProps_status === void 0 ? 'ready' : _userProps_status, _userProps_hideScrollToBottom = userProps.hideScrollToBottom, hideScrollToBottom = _userProps_hideScrollToBottom === void 0 ? false : _userProps_hideScrollToBottom, onReload = userProps.onReload, onClose = userProps.onClose, userTranslations = userProps.translations, userMessageProps = userProps.userMessageProps, assistantMessageProps = userProps.assistantMessageProps, _userProps_isClearing = userProps.isClearing, isClearing = _userProps_isClearing === void 0 ? false : _userProps_isClearing, onClearTransitionEnd = userProps.onClearTransitionEnd, isScrollAtBottom = userProps.isScrollAtBottom, scrollRef = userProps.scrollRef, contentRef = userProps.contentRef, onScrollToBottom = userProps.onScrollToBottom, suggestionsElement = userProps.suggestionsElement, props = _object_without_properties(userProps, [
19055
+ var _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, _userProps_messageClassNames = userProps.messageClassNames, messageClassNames = _userProps_messageClassNames === void 0 ? {} : _userProps_messageClassNames, messageTranslations = userProps.messageTranslations, _userProps_messages = userProps.messages, messages = _userProps_messages === void 0 ? [] : _userProps_messages, MessageComponent = userProps.messageComponent, LoaderComponent = userProps.loaderComponent, ErrorComponent = userProps.errorComponent, ActionsComponent = userProps.actionsComponent, tools = userProps.tools, indexUiState = userProps.indexUiState, setIndexUiState = userProps.setIndexUiState, _userProps_status = userProps.status, status = _userProps_status === void 0 ? 'ready' : _userProps_status, _userProps_hideScrollToBottom = userProps.hideScrollToBottom, hideScrollToBottom = _userProps_hideScrollToBottom === void 0 ? false : _userProps_hideScrollToBottom, onReload = userProps.onReload, onClose = userProps.onClose, userTranslations = userProps.translations, userMessageProps = userProps.userMessageProps, assistantMessageProps = userProps.assistantMessageProps, _userProps_isClearing = userProps.isClearing, isClearing = _userProps_isClearing === void 0 ? false : _userProps_isClearing, onClearTransitionEnd = userProps.onClearTransitionEnd, isScrollAtBottom = userProps.isScrollAtBottom, scrollRef = userProps.scrollRef, contentRef = userProps.contentRef, onScrollToBottom = userProps.onScrollToBottom, suggestionsElement = userProps.suggestionsElement, onFeedback = userProps.onFeedback, feedbackState = userProps.feedbackState, props = _object_without_properties(userProps, [
18879
19056
  "classNames",
18880
19057
  "messageClassNames",
18881
19058
  "messageTranslations",
@@ -18900,12 +19077,18 @@
18900
19077
  "scrollRef",
18901
19078
  "contentRef",
18902
19079
  "onScrollToBottom",
18903
- "suggestionsElement"
19080
+ "suggestionsElement",
19081
+ "onFeedback",
19082
+ "feedbackState"
18904
19083
  ]);
18905
19084
  var translations = _object_spread({
18906
19085
  scrollToBottomLabel: 'Scroll to bottom',
18907
19086
  copyToClipboardLabel: 'Copy to clipboard',
18908
- regenerateLabel: 'Regenerate'
19087
+ regenerateLabel: 'Regenerate',
19088
+ thumbsUpLabel: 'Like',
19089
+ thumbsDownLabel: 'Dislike',
19090
+ feedbackThankYouText: 'Thanks for your feedback!',
19091
+ sendingFeedbackLabel: 'Sending feedback...'
18909
19092
  }, userTranslations);
18910
19093
  var cssClasses = {
18911
19094
  root: cx('ais-ChatMessages', classNames.root),
@@ -18949,6 +19132,8 @@
18949
19132
  indexUiState: indexUiState,
18950
19133
  setIndexUiState: setIndexUiState,
18951
19134
  onReload: onReload,
19135
+ onFeedback: onFeedback,
19136
+ feedbackState: feedbackState,
18952
19137
  actionsComponent: ActionsComponent,
18953
19138
  onClose: onClose,
18954
19139
  translations: translations,
@@ -18976,6 +19161,52 @@
18976
19161
  };
18977
19162
  }
18978
19163
 
19164
+ function createChatOverlayLayoutComponent(param) {
19165
+ var createElement = param.createElement;
19166
+ return function ChatOverlayLayout(userProps) {
19167
+ var open = userProps.open, maximized = userProps.maximized, headerComponent = userProps.headerComponent, messagesComponent = userProps.messagesComponent, promptComponent = userProps.promptComponent, toggleButtonComponent = userProps.toggleButtonComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className; // Chat state props (destructured to avoid spreading on div)
19168
+ userProps.messages;
19169
+ userProps.status;
19170
+ userProps.isClearing;
19171
+ userProps.clearMessages;
19172
+ userProps.onClearTransitionEnd;
19173
+ userProps.suggestions;
19174
+ userProps.tools;
19175
+ userProps.sendMessage;
19176
+ userProps.regenerate;
19177
+ userProps.stop;
19178
+ userProps.error;
19179
+ var rest = _object_without_properties(userProps, [
19180
+ "open",
19181
+ "maximized",
19182
+ "headerComponent",
19183
+ "messagesComponent",
19184
+ "promptComponent",
19185
+ "toggleButtonComponent",
19186
+ "classNames",
19187
+ "className",
19188
+ "messages",
19189
+ "status",
19190
+ "isClearing",
19191
+ "clearMessages",
19192
+ "onClearTransitionEnd",
19193
+ "suggestions",
19194
+ "tools",
19195
+ "sendMessage",
19196
+ "regenerate",
19197
+ "stop",
19198
+ "error"
19199
+ ]);
19200
+ return /*#__PURE__*/ createElement("div", _object_spread_props(_object_spread({}, rest), {
19201
+ className: cx('ais-Chat', 'ais-ChatOverlayLayout', maximized && 'ais-ChatOverlayLayout--maximized', classNames.root, className)
19202
+ }), /*#__PURE__*/ createElement("div", {
19203
+ className: cx('ais-Chat-container', open && 'ais-Chat-container--open', maximized && 'ais-Chat-container--maximized', classNames.container)
19204
+ }, headerComponent, messagesComponent, promptComponent), /*#__PURE__*/ createElement("div", {
19205
+ className: "ais-Chat-toggleButtonWrapper"
19206
+ }, toggleButtonComponent));
19207
+ };
19208
+ }
19209
+
18979
19210
  function createChatPromptComponent(param) {
18980
19211
  var createElement = param.createElement;
18981
19212
  var Button = createButtonComponent({
@@ -19213,8 +19444,12 @@
19213
19444
  createElement: createElement,
19214
19445
  Fragment: Fragment
19215
19446
  });
19447
+ var OverlayLayout = createChatOverlayLayoutComponent({
19448
+ createElement: createElement,
19449
+ Fragment: Fragment
19450
+ });
19216
19451
  return function Chat(userProps) {
19217
- var open = userProps.open, _userProps_maximized = userProps.maximized, maximized = _userProps_maximized === void 0 ? false : _userProps_maximized, headerProps = userProps.headerProps, toggleButtonProps = userProps.toggleButtonProps, messagesProps = userProps.messagesProps, suggestionsProps = userProps.suggestionsProps, _userProps_promptProps = userProps.promptProps, promptProps = _userProps_promptProps === void 0 ? {} : _userProps_promptProps, HeaderComponent = userProps.headerComponent, PromptComponent = userProps.promptComponent, ToggleButtonComponent = userProps.toggleButtonComponent, SuggestionsComponent = userProps.suggestionsComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, props = _object_without_properties(userProps, [
19452
+ var open = userProps.open, _userProps_maximized = userProps.maximized, maximized = _userProps_maximized === void 0 ? false : _userProps_maximized, headerProps = userProps.headerProps, toggleButtonProps = userProps.toggleButtonProps, messagesProps = userProps.messagesProps, suggestionsProps = userProps.suggestionsProps, _userProps_promptProps = userProps.promptProps, promptProps = _userProps_promptProps === void 0 ? {} : _userProps_promptProps, HeaderComponent = userProps.headerComponent, PromptComponent = userProps.promptComponent, ToggleButtonComponent = userProps.toggleButtonComponent, SuggestionsComponent = userProps.suggestionsComponent, tmp = userProps.layoutComponent, LayoutComponent = tmp === void 0 ? OverlayLayout : tmp, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, sendMessage = userProps.sendMessage, regenerate = userProps.regenerate, stop = userProps.stop, error = userProps.error, props = _object_without_properties(userProps, [
19218
19453
  "open",
19219
19454
  "maximized",
19220
19455
  "headerProps",
@@ -19226,27 +19461,29 @@
19226
19461
  "promptComponent",
19227
19462
  "toggleButtonComponent",
19228
19463
  "suggestionsComponent",
19464
+ "layoutComponent",
19229
19465
  "classNames",
19230
- "className"
19466
+ "className",
19467
+ "sendMessage",
19468
+ "regenerate",
19469
+ "stop",
19470
+ "error"
19231
19471
  ]);
19232
- return /*#__PURE__*/ createElement("div", _object_spread_props(_object_spread({}, props), {
19233
- className: cx('ais-Chat', maximized && 'ais-Chat--maximized', classNames.root, className)
19234
- }), /*#__PURE__*/ createElement("div", {
19235
- className: cx('ais-Chat-container', open && 'ais-Chat-container--open', maximized && 'ais-Chat-container--maximized', classNames.container)
19236
- }, createElement(HeaderComponent || ChatHeader, _object_spread_props(_object_spread({}, headerProps), {
19472
+ var headerComponent = createElement(HeaderComponent || ChatHeader, _object_spread_props(_object_spread({}, headerProps), {
19237
19473
  classNames: classNames.header,
19238
19474
  maximized: maximized
19239
- })), /*#__PURE__*/ createElement(ChatMessages, _object_spread_props(_object_spread({}, messagesProps), {
19475
+ }));
19476
+ var messagesComponent = /*#__PURE__*/ createElement(ChatMessages, _object_spread_props(_object_spread({}, messagesProps), {
19240
19477
  classNames: classNames.messages,
19241
19478
  messageClassNames: classNames.message,
19242
19479
  suggestionsElement: createElement(SuggestionsComponent || ChatPromptSuggestions, _object_spread_props(_object_spread({}, suggestionsProps), {
19243
19480
  classNames: classNames.suggestions
19244
19481
  }))
19245
- })), createElement(PromptComponent || ChatPrompt, _object_spread_props(_object_spread({}, promptProps), {
19482
+ }));
19483
+ var promptComponent = createElement(PromptComponent || ChatPrompt, _object_spread_props(_object_spread({}, promptProps), {
19246
19484
  classNames: classNames.prompt
19247
- }))), /*#__PURE__*/ createElement("div", {
19248
- className: "ais-Chat-toggleButtonWrapper"
19249
- }, createElement(ToggleButtonComponent || ChatToggleButton, _object_spread_props(_object_spread({}, toggleButtonProps), {
19485
+ }));
19486
+ var toggleButtonComponent = createElement(ToggleButtonComponent || ChatToggleButton, _object_spread_props(_object_spread({}, toggleButtonProps), {
19250
19487
  classNames: classNames.toggleButton,
19251
19488
  onClick: function onClick() {
19252
19489
  var _toggleButtonProps_onClick;
@@ -19256,7 +19493,78 @@
19256
19493
  (_promptProps_promptRef = promptProps.promptRef) === null || _promptProps_promptRef === void 0 ? void 0 : (_promptProps_promptRef_current = _promptProps_promptRef.current) === null || _promptProps_promptRef_current === void 0 ? void 0 : _promptProps_promptRef_current.focus();
19257
19494
  }
19258
19495
  }
19259
- }))));
19496
+ }));
19497
+ return /*#__PURE__*/ createElement(LayoutComponent, _object_spread_props(_object_spread({}, props), {
19498
+ open: open,
19499
+ maximized: maximized,
19500
+ headerComponent: headerComponent,
19501
+ messagesComponent: messagesComponent,
19502
+ promptComponent: promptComponent,
19503
+ toggleButtonComponent: toggleButtonComponent,
19504
+ classNames: {
19505
+ root: classNames.root,
19506
+ container: classNames.container
19507
+ },
19508
+ className: className,
19509
+ messages: messagesProps.messages,
19510
+ status: messagesProps.status,
19511
+ tools: messagesProps.tools,
19512
+ isClearing: messagesProps.isClearing,
19513
+ clearMessages: headerProps.onClear,
19514
+ onClearTransitionEnd: messagesProps.onClearTransitionEnd,
19515
+ suggestions: suggestionsProps.suggestions,
19516
+ sendMessage: sendMessage,
19517
+ regenerate: regenerate,
19518
+ stop: stop,
19519
+ error: error
19520
+ }));
19521
+ };
19522
+ }
19523
+
19524
+ function createChatInlineLayoutComponent(param) {
19525
+ var createElement = param.createElement;
19526
+ return function ChatInlineLayout(userProps) {
19527
+ var headerComponent = userProps.headerComponent, messagesComponent = userProps.messagesComponent, promptComponent = userProps.promptComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className;
19528
+ userProps.open;
19529
+ userProps.maximized;
19530
+ userProps.toggleButtonComponent; // Chat state props (destructured to avoid spreading on div)
19531
+ userProps.messages;
19532
+ userProps.status;
19533
+ userProps.isClearing;
19534
+ userProps.clearMessages;
19535
+ userProps.onClearTransitionEnd;
19536
+ userProps.suggestions;
19537
+ userProps.tools;
19538
+ userProps.sendMessage;
19539
+ userProps.regenerate;
19540
+ userProps.stop;
19541
+ userProps.error;
19542
+ var rest = _object_without_properties(userProps, [
19543
+ "headerComponent",
19544
+ "messagesComponent",
19545
+ "promptComponent",
19546
+ "classNames",
19547
+ "className",
19548
+ "open",
19549
+ "maximized",
19550
+ "toggleButtonComponent",
19551
+ "messages",
19552
+ "status",
19553
+ "isClearing",
19554
+ "clearMessages",
19555
+ "onClearTransitionEnd",
19556
+ "suggestions",
19557
+ "tools",
19558
+ "sendMessage",
19559
+ "regenerate",
19560
+ "stop",
19561
+ "error"
19562
+ ]);
19563
+ return /*#__PURE__*/ createElement("div", _object_spread_props(_object_spread({}, rest), {
19564
+ className: cx('ais-Chat', 'ais-ChatInlineLayout', classNames.root, className)
19565
+ }), /*#__PURE__*/ createElement("div", {
19566
+ className: cx('ais-Chat-container', classNames.container)
19567
+ }, headerComponent, messagesComponent, promptComponent));
19260
19568
  };
19261
19569
  }
19262
19570
 
@@ -21032,6 +21340,16 @@
21032
21340
  return /*#__PURE__*/ React.createElement(CarouselUiComponent, _object_spread({}, carouselRefs, props));
21033
21341
  }
21034
21342
 
21343
+ var ChatOverlayLayout = createChatOverlayLayoutComponent({
21344
+ createElement: React.createElement,
21345
+ Fragment: React.Fragment
21346
+ });
21347
+
21348
+ var ChatInlineLayout = createChatInlineLayoutComponent({
21349
+ createElement: React.createElement,
21350
+ Fragment: React.Fragment
21351
+ });
21352
+
21035
21353
  function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
21036
21354
  var Button = createButtonComponent({
21037
21355
  createElement: React.createElement
@@ -21130,13 +21448,14 @@
21130
21448
  return _obj = {}, _define_property(_obj, SearchIndexToolType$1, createCarouselTool(true, itemComponent, getSearchPageURL)), _define_property(_obj, RecommendToolType, createCarouselTool(false, itemComponent, getSearchPageURL)), _define_property(_obj, MemorizeToolType, {}), _define_property(_obj, MemorySearchToolType, {}), _define_property(_obj, PonderToolType, {}), _obj;
21131
21449
  }
21132
21450
  function Chat(_0) {
21133
- 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, [
21451
+ 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, [
21134
21452
  "tools",
21135
21453
  "toggleButtonProps",
21136
21454
  "headerProps",
21137
21455
  "messagesProps",
21138
21456
  "promptProps",
21139
21457
  "itemComponent",
21458
+ "layoutComponent",
21140
21459
  "toggleButtonComponent",
21141
21460
  "toggleButtonIconComponent",
21142
21461
  "headerComponent",
@@ -21179,7 +21498,7 @@
21179
21498
  var chatState = useChat(_object_spread_props(_object_spread({}, props), {
21180
21499
  tools: tools
21181
21500
  }));
21182
- 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;
21501
+ 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;
21183
21502
  var wasOpenRef = React.useRef(false);
21184
21503
  React.useEffect(function() {
21185
21504
  var shouldFocusPrompt = !wasOpenRef.current && open;
@@ -21200,6 +21519,11 @@
21200
21519
  title: title,
21201
21520
  open: open,
21202
21521
  maximized: maximized,
21522
+ sendMessage: sendMessage,
21523
+ regenerate: regenerate,
21524
+ stop: stop,
21525
+ error: error,
21526
+ layoutComponent: layoutComponent,
21203
21527
  headerComponent: headerComponent,
21204
21528
  promptComponent: promptComponent,
21205
21529
  toggleButtonComponent: toggleButtonComponent,
@@ -21237,6 +21561,8 @@
21237
21561
  onClose: function onClose() {
21238
21562
  return setOpen(false);
21239
21563
  },
21564
+ onFeedback: onFeedback,
21565
+ feedbackState: feedbackState,
21240
21566
  messages: messages,
21241
21567
  tools: toolsFromConnector,
21242
21568
  indexUiState: indexUiState,
@@ -22974,6 +23300,8 @@
22974
23300
  exports.Breadcrumb = Breadcrumb;
22975
23301
  exports.Carousel = Carousel;
22976
23302
  exports.Chat = Chat;
23303
+ exports.ChatInlineLayout = ChatInlineLayout;
23304
+ exports.ChatOverlayLayout = ChatOverlayLayout;
22977
23305
  exports.ClearRefinements = ClearRefinements;
22978
23306
  exports.Configure = Configure;
22979
23307
  exports.CurrentRefinements = CurrentRefinements;