impact-chatbot 2.3.47 → 2.3.48

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
- declare const TabularContent: ({ steps: initialSteps, currentTabValue, children, questions: initialQuestions, questionsStepsMap: initialQuestionsStepsMap, stepFormDataMap: initialStepFormDataMap, isFormDisabled }: {
1
+ declare const TabularContent: ({ steps: initialSteps, currentTabValue, children, questions: initialQuestions, questionsStepsMap: initialQuestionsStepsMap, stepFormDataMap: initialStepFormDataMap, isFormDisabled, sessionId: propSessionId }: {
2
2
  steps: any;
3
3
  currentTabValue: any;
4
4
  children: any;
@@ -6,5 +6,8 @@ declare const TabularContent: ({ steps: initialSteps, currentTabValue, children,
6
6
  questionsStepsMap?: {};
7
7
  stepFormDataMap?: {};
8
8
  isFormDisabled?: boolean;
9
+ sessionId?: string;
9
10
  }) => import("react/jsx-runtime").JSX.Element;
11
+ /** Reset the active instance tracker (call when a new conversation starts from the input field) */
12
+ export declare const resetActiveTabularInstance: () => void;
10
13
  export default TabularContent;
package/dist/index.cjs.js CHANGED
@@ -5108,6 +5108,15 @@ const sseevent = (message, messageToStoreRef) => {
5108
5108
  }
5109
5109
  return new MessageEvent(type, { data: data });
5110
5110
  }
5111
+ if (parsedData?.status === "notification") {
5112
+ messageToStoreRef.current.notificationData = {
5113
+ message: parsedData?.message || "",
5114
+ chat_id: parsedData?.chat_id || "",
5115
+ session_id: parsedData?.session_id || "",
5116
+ };
5117
+ // Do NOT append notification messages to chatData.response — return early
5118
+ return new MessageEvent(type, { data: data });
5119
+ }
5111
5120
  if (parsedData?.status === "thinking") {
5112
5121
  messageToStoreRef.current.chatData.thinkingResponse.thinkingStream =
5113
5122
  messageToStoreRef.current.chatData.thinkingResponse.thinkingStream +
@@ -5144,13 +5153,6 @@ const sseevent = (message, messageToStoreRef) => {
5144
5153
  ? parsedData.additional_args
5145
5154
  : {};
5146
5155
  }
5147
- if (parsedData?.status === "notification") {
5148
- messageToStoreRef.current.notificationData = {
5149
- message: parsedData?.message || "",
5150
- chat_id: parsedData?.chat_id || "",
5151
- session_id: parsedData?.session_id || "",
5152
- };
5153
- }
5154
5156
  if (parsedData?.status === "completed" ||
5155
5157
  parsedData?.status === "follow-up") {
5156
5158
  messageToStoreRef.current.initValue = true;
@@ -5413,10 +5415,10 @@ const ButtonContent = ({ bodyText, isFormDisabled = false, isStepFormSubmit = fa
5413
5415
  if (sessionId) {
5414
5416
  chatbotServices.stopAgentFlow({ session_id: sessionId }, baseUrl);
5415
5417
  }
5416
- dispatch(smartBotActions.setStepFormStreamData({ status: "error", chunks: [...chunksRef] }));
5418
+ dispatch(smartBotActions.setStepFormStreamData({ status: "error", chunks: [...chunksRef], sessionId }));
5417
5419
  };
5418
5420
  // Signal that streaming has started (after setting stepFormStreamControl so useEffect sees the flag)
5419
- dispatch(smartBotActions.setStepFormStreamData({ status: "streaming_start", chunks: [] }));
5421
+ dispatch(smartBotActions.setStepFormStreamData({ status: "streaming_start", chunks: [], sessionId }));
5420
5422
  // Fire DOM event so SmartBot can show stop icon (Redux gets cleared by TabularContent before parent effects run)
5421
5423
  window.dispatchEvent(new CustomEvent("stepFormStreamStart"));
5422
5424
  sourceRef.current = AxiosSource(endPoint, {
@@ -5438,14 +5440,14 @@ const ButtonContent = ({ bodyText, isFormDisabled = false, isStepFormSubmit = fa
5438
5440
  chunksRef.push(data);
5439
5441
  // Dispatch widget chunks immediately for real-time rendering
5440
5442
  if (data?.status === "widget") {
5441
- dispatch(smartBotActions.setStepFormStreamData({ status: "widget_chunk", chunks: [data] }));
5443
+ dispatch(smartBotActions.setStepFormStreamData({ status: "widget_chunk", chunks: [data], sessionId }));
5442
5444
  }
5443
5445
  // If this chunk also carries [DONE], dispatch collected chunks now
5444
5446
  if (data?.message === "[DONE]") {
5445
5447
  stepFormStreamControl.isStreaming = false;
5446
5448
  stepFormStreamControl.abort = null;
5447
5449
  window.dispatchEvent(new CustomEvent("stepFormStreamEnd"));
5448
- dispatch(smartBotActions.setStepFormStreamData({ status: "done", chunks: [...chunksRef] }));
5450
+ dispatch(smartBotActions.setStepFormStreamData({ status: "done", chunks: [...chunksRef], sessionId }));
5449
5451
  }
5450
5452
  }
5451
5453
  else if (data?.status === "completed" || data?.status === "follow-up" || data?.message === "[DONE]") {
@@ -5469,7 +5471,7 @@ const ButtonContent = ({ bodyText, isFormDisabled = false, isStepFormSubmit = fa
5469
5471
  if (data?.status === "completed" && !hasStepForm) {
5470
5472
  window.dispatchEvent(new CustomEvent("stepFormStreamCompleted"));
5471
5473
  }
5472
- dispatch(smartBotActions.setStepFormStreamData({ status: "done", chunks: [...chunksRef] }));
5474
+ dispatch(smartBotActions.setStepFormStreamData({ status: "done", chunks: [...chunksRef], sessionId }));
5473
5475
  }
5474
5476
  else if (data?.message) {
5475
5477
  chunksRef.push({ status: "content", message: data.message });
@@ -5484,7 +5486,7 @@ const ButtonContent = ({ bodyText, isFormDisabled = false, isStepFormSubmit = fa
5484
5486
  stepFormStreamControl.isStreaming = false;
5485
5487
  stepFormStreamControl.abort = null;
5486
5488
  window.dispatchEvent(new CustomEvent("stepFormStreamEnd"));
5487
- dispatch(smartBotActions.setStepFormStreamData({ status: "error", chunks: chunksRef }));
5489
+ dispatch(smartBotActions.setStepFormStreamData({ status: "error", chunks: chunksRef, sessionId }));
5488
5490
  });
5489
5491
  };
5490
5492
  const renderButtons = () => {
@@ -7369,6 +7371,7 @@ const StreamedContent = ({ botData }) => {
7369
7371
  data: isEmpty(dummyButton)
7370
7372
  ? [textResponseTobeParsed, ...finalData]
7371
7373
  : [textResponseTobeParsed, ...finalData, dummyButton],
7374
+ session_id: messageToStoreRef.current.sessionId || "",
7372
7375
  },
7373
7376
  },
7374
7377
  };
@@ -7453,6 +7456,7 @@ const StreamedContent = ({ botData }) => {
7453
7456
  data: {
7454
7457
  data: {
7455
7458
  data: [textResponseTobeParsed, ...finalData],
7459
+ session_id: messageToStoreRef.current.sessionId || "",
7456
7460
  },
7457
7461
  },
7458
7462
  };
@@ -7873,7 +7877,11 @@ const AgentResponse = ({ children }) => {
7873
7877
  return (jsxRuntime.jsx("div", { className: classes.agentResponseContainer, children: children }));
7874
7878
  };
7875
7879
 
7876
- const TabularContent = ({ steps: initialSteps, currentTabValue, children, questions: initialQuestions = [], questionsStepsMap: initialQuestionsStepsMap = {}, stepFormDataMap: initialStepFormDataMap = {}, isFormDisabled = false }) => {
7880
+ // Module-level counter and active instance tracker.
7881
+ // Only the active instance should process stepFormStreamData from Redux.
7882
+ let instanceCounter = 0;
7883
+ let activeTabularInstanceId = null;
7884
+ const TabularContent = ({ steps: initialSteps, currentTabValue, children, questions: initialQuestions = [], questionsStepsMap: initialQuestionsStepsMap = {}, stepFormDataMap: initialStepFormDataMap = {}, isFormDisabled = false, sessionId: propSessionId = "" }) => {
7877
7885
  const dispatch = reactRedux.useDispatch();
7878
7886
  const stepFormStreamData = reactRedux.useSelector((state) => state.smartBotReducer.stepFormStreamData);
7879
7887
  const [tabValue, setTabValue] = React.useState(currentTabValue);
@@ -7897,6 +7905,12 @@ const TabularContent = ({ steps: initialSteps, currentTabValue, children, questi
7897
7905
  const [stepFormSubmitted, setStepFormSubmitted] = React.useState(false);
7898
7906
  const [hasNewStepFormFromRestream, setHasNewStepFormFromRestream] = React.useState(false);
7899
7907
  const [activeFormIntent, setActiveFormIntent] = React.useState(null);
7908
+ // Stable unique instance ID for this TabularContent mount
7909
+ const instanceIdRef = React.useRef(null);
7910
+ if (instanceIdRef.current === null) {
7911
+ instanceCounter += 1;
7912
+ instanceIdRef.current = instanceCounter;
7913
+ }
7900
7914
  // Refs for accumulating state during streaming (avoids stale closures)
7901
7915
  const stepsRef = React.useRef(stepsState);
7902
7916
  const questionsRef = React.useRef(questionsState);
@@ -7938,10 +7952,21 @@ const TabularContent = ({ steps: initialSteps, currentTabValue, children, questi
7938
7952
  return null;
7939
7953
  }
7940
7954
  };
7955
+ // Register as active instance when this TabularContent has an active step form
7956
+ React.useEffect(() => {
7957
+ const hasActiveForm = Object.keys(initialStepFormDataMap).length > 0;
7958
+ if (hasActiveForm) {
7959
+ activeTabularInstanceId = instanceIdRef.current;
7960
+ }
7961
+ }, [initialStepFormDataMap]);
7941
7962
  // Watch Redux for batched SSE chunks dispatched by ButtonContent
7942
7963
  React.useEffect(() => {
7943
7964
  if (!stepFormStreamData)
7944
7965
  return;
7966
+ // Only the active instance should process stepFormStreamData
7967
+ if (activeTabularInstanceId !== null && activeTabularInstanceId !== instanceIdRef.current) {
7968
+ return;
7969
+ }
7945
7970
  const payload = stepFormStreamData;
7946
7971
  // Clear Redux immediately
7947
7972
  dispatch(smartBotActions.setStepFormStreamData(null));
@@ -8095,6 +8120,8 @@ const TabularContent = ({ steps: initialSteps, currentTabValue, children, questi
8095
8120
  setStepFormSubmitted(false);
8096
8121
  setHasNewStepFormFromRestream(true);
8097
8122
  setActiveFormIntent(latestIntent || null);
8123
+ // Re-register as active instance since this TabularContent now owns the new form
8124
+ activeTabularInstanceId = instanceIdRef.current;
8098
8125
  // Clear stale persisted form values and context so the new form starts fresh
8099
8126
  dispatch(smartBotActions.clearPersistedFormValues());
8100
8127
  dispatch(smartBotActions.setChatbotContext({}));
@@ -8119,6 +8146,10 @@ const TabularContent = ({ steps: initialSteps, currentTabValue, children, questi
8119
8146
  jsxRuntime.jsxs(AgentResponse, { children: [children, renderedWidgets.length > 0 && (jsxRuntime.jsx("div", { className: "restream-widget-content", children: renderedWidgets }))] }),
8120
8147
  ], value: tabValue }) }));
8121
8148
  };
8149
+ /** Reset the active instance tracker (call when a new conversation starts from the input field) */
8150
+ const resetActiveTabularInstance = () => {
8151
+ activeTabularInstanceId = null;
8152
+ };
8122
8153
 
8123
8154
  const CombinedContent = ({ botData, props }) => {
8124
8155
  const isFormDisabled = botData?.isFormDisabled || false;
@@ -8187,7 +8218,7 @@ const CombinedContent = ({ botData, props }) => {
8187
8218
  const validContent = renderedContent.filter(content => content !== null);
8188
8219
  const renderCombinedContent = () => (jsxRuntime.jsx("div", { className: "combined-content-container", children: validContent.length > 0 ? (validContent.map((content, index) => (jsxRuntime.jsx("div", { className: "combined-content-item", children: content }, `wrapper-${index}`)))) : (jsxRuntime.jsx("div", { children: "No valid content to display" })) }));
8189
8220
  if (isTabEnabled) {
8190
- return (jsxRuntime.jsx(TabularContent, { steps: botData?.utilityData?.steps || [], currentTabValue: botData?.utilityData?.currentTabValue || "steps", questions: botData?.utilityData?.questions || [], questionsStepsMap: botData?.utilityData?.questionsStepsMap || {}, stepFormDataMap: botData?.utilityData?.stepFormDataMap || {}, isFormDisabled: isFormDisabled, children: renderCombinedContent() }));
8221
+ return (jsxRuntime.jsx(TabularContent, { steps: botData?.utilityData?.steps || [], currentTabValue: botData?.utilityData?.currentTabValue || "steps", questions: botData?.utilityData?.questions || [], questionsStepsMap: botData?.utilityData?.questionsStepsMap || {}, stepFormDataMap: botData?.utilityData?.stepFormDataMap || {}, isFormDisabled: isFormDisabled, sessionId: botData?.sessionId || "", children: renderCombinedContent() }));
8191
8222
  }
8192
8223
  return renderCombinedContent();
8193
8224
  };
@@ -11714,7 +11745,7 @@ const useStyles = styles.makeStyles({
11714
11745
  });
11715
11746
  const ChatbotSaveFilterComponent = (props) => {
11716
11747
  const classes = useStyles();
11717
- const { savedFilterSets, partialClose } = props;
11748
+ const { savedFilterSets, partialClose, chatBotWidth } = props;
11718
11749
  const [showFilter, setShowFilter] = React.useState(!lodash.isEmpty(savedFilterSets));
11719
11750
  /**
11720
11751
  * onFilterDashboardClick function is called when we click the apply filter
@@ -11787,11 +11818,13 @@ const ChatbotSaveFilterComponent = (props) => {
11787
11818
  }
11788
11819
  const filterContainer = document.querySelector(".impact_drawer_filter_container.impact_drawer_filter_container_large");
11789
11820
  if (filterContainer) {
11790
- filterContainer.style.setProperty("width", "616px");
11821
+ const computedWidth = chatBotWidth ? `${chatBotWidth - 86}px` : "616px";
11822
+ filterContainer.style.setProperty("width", computedWidth);
11791
11823
  }
11792
11824
  const rightPanel = document.querySelector(".impact_drawer_filter_container .impact_drawer_filter_container_right_panel");
11793
11825
  if (rightPanel) {
11794
11826
  rightPanel.style.setProperty("height", "600px");
11827
+ rightPanel.style.setProperty("width", "100%");
11795
11828
  }
11796
11829
  const backdrop = document.querySelector(".MuiBackdrop-root.MuiModal-backdrop");
11797
11830
  if (backdrop) {
@@ -11825,7 +11858,7 @@ const ChatbotSaveFilterComponent = (props) => {
11825
11858
  const observer = new MutationObserver(patchDrawer);
11826
11859
  observer.observe(document.body, { childList: true, subtree: true });
11827
11860
  return () => observer.disconnect();
11828
- }, [showFilter]);
11861
+ }, [showFilter, chatBotWidth]);
11829
11862
  return (jsxRuntime.jsx("div", { className: partialClose ? classes.hidden : undefined, children: !showFilter ?
11830
11863
  jsxRuntime.jsxs("div", { className: classes.container, children: [jsxRuntime.jsx(NoFilterSetSavedIcon, { width: "189px", height: "126px", className: classes.icon }), jsxRuntime.jsx("p", { className: classes.title, children: "No filter set saved!" }), jsxRuntime.jsx("p", { className: classes.subtitle, children: "Create and save a filter set to use as your default scope or apply it anytime during a conversation" }), jsxRuntime.jsx("div", { className: classes.buttonWrapper, children: jsxRuntime.jsx(impactUiV3.Button, { variant: "primary", onClick: () => setShowFilter(true), children: "Create A Filter Set" }) })] }) :
11831
11864
  jsxRuntime.jsx("div", { children: jsxRuntime.jsx(CoreComponentScreen, { showPageHeader: false,
@@ -11859,6 +11892,7 @@ const SmartBot = (props) => {
11859
11892
  // Per-mode conversation ID tracking — prevents cross-mode contamination when
11860
11893
  // switching tabs while streams are pending.
11861
11894
  React.useRef({});
11895
+ const activeConversationIdRef = React.useRef(activeConversationId);
11862
11896
  const activeTab = React.useRef({
11863
11897
  activeTab: "dashboard",
11864
11898
  });
@@ -11877,6 +11911,7 @@ const SmartBot = (props) => {
11877
11911
  const [filterOptions, setFilterOptions] = React.useState([]);
11878
11912
  const [savedFilterSets, setSavedFilterSets] = React.useState([]);
11879
11913
  const [selectedFilterSet, setSelectedFilterSet] = React.useState(null);
11914
+ const [chatBotWidth, setChatBotWidth] = React.useState(null);
11880
11915
  React.useRef(0);
11881
11916
  const { setUserFlow, setUserScreenAndFlow, fetchUserResultsFromQuery, getCurrentDateTimeString, setLink, } = useChatFlow(chatDataRef, setLoader, setFlowType, setScreenName, setUserInput, setQuestionIndex, setCurrentAppLink, flowType, screenName, questionIndex, userInput, dateFormat, currentMode, activeConversationId, setIsModuleChanged, chatBodyRef, filterReducerState, dispatch, navigate, setShowChatPlaceholder, baseUrl, setChatDataState, setCurrentSessionId, customChatConfig, chatDataInfoRef, chatbotContext, setInitValue, setSessionId, thinkingContent, setThinkingContent, isThinking, setIsThinking, chatId, setChatId, isStop, setIsStop, functionsRef, functionsState, setFunctionsState, thinkingHeaderMessage, setThinkingHeaderMessage, uniqueChatId, initValue, sessionId, fieldNumber, setFieldNumber, additionalArgs, setActiveConversationId, navSessionId, setNavSessionId);
11882
11917
  const { parseSavedFlow, saveCurrentChanges, endCurrentSession, clearChatSession, initiateNewChat, hasUnsavedChanges, } = useChatSession(chatDataRef, setFlowType, setScreenName, setUserInput, setTemplateData, chatDataScreenLinkRef, setShowModal, setMinimizedMode, setSelectedModule, setChatDataState, currentMode, setUserFlow, getCurrentDateTimeString, setCurrentAppLink, selectedModule, fetchUserResultsFromQuery, props.closeBot, activeConversationId, setActiveConversationId, setShowChatPlaceholder);
@@ -11909,6 +11944,10 @@ const SmartBot = (props) => {
11909
11944
  setFieldNumber,
11910
11945
  setAdditionalArgs,
11911
11946
  });
11947
+ // Keep activeConversationIdRef in sync so event handlers with [] deps can access the latest value
11948
+ React.useEffect(() => {
11949
+ activeConversationIdRef.current = activeConversationId;
11950
+ }, [activeConversationId]);
11912
11951
  // Show/hide stop icon when step-form restream (second init API from ButtonContent) starts/ends.
11913
11952
  // Must live here (SmartBot) because StreamedContent unmounts after the first stream completes.
11914
11953
  React.useEffect(() => {
@@ -11930,6 +11969,23 @@ const SmartBot = (props) => {
11930
11969
  };
11931
11970
  const handleStepFormStreamEnd = () => {
11932
11971
  setIsStop(false);
11972
+ // Update the timestamp on the last bot message to reflect when the restream completed
11973
+ try {
11974
+ const mode = localStorage.getItem("currentModeData") || "agent";
11975
+ const convId = activeConversationIdRef.current;
11976
+ const messages = chatDataInfoRef?.current?.[mode]?.conversations?.[convId]?.messages;
11977
+ if (messages && messages.length > 0) {
11978
+ const lastBotIdx = messages.reduce((lastIdx, msg, idx) => msg.userType === "bot" ? idx : lastIdx, -1);
11979
+ if (lastBotIdx !== -1) {
11980
+ messages[lastBotIdx].timeStamp = moment().format(dateFormat);
11981
+ // Trigger re-render so the UI reflects the updated timestamp
11982
+ setChatDataState((prev) => ({ ...prev }));
11983
+ }
11984
+ }
11985
+ }
11986
+ catch (e) {
11987
+ console.error("Error updating timestamp after step form stream:", e);
11988
+ }
11933
11989
  };
11934
11990
  window.addEventListener("stepFormStreamStart", handleStepFormStreamStart);
11935
11991
  window.addEventListener("stepFormStreamEnd", handleStepFormStreamEnd);
@@ -12366,6 +12422,9 @@ const SmartBot = (props) => {
12366
12422
  };
12367
12423
  const onSendIconClick = (params, params2) => {
12368
12424
  try {
12425
+ // Reset step form stream state so old TabularContent instances don't process new data
12426
+ dispatch(smartBotActions.setStepFormStreamData(null));
12427
+ resetActiveTabularInstance();
12369
12428
  // dispatch(setChatbotContext({}));
12370
12429
  setUserInput(params?.text);
12371
12430
  handleSendMessage(params?.text, params?.userExplicitInput, params?.textWithColumnNames);
@@ -12532,6 +12591,8 @@ const SmartBot = (props) => {
12532
12591
  localStorage.setItem("isStreaming", "false");
12533
12592
  dispatch(smartBotActions.setChatbotContext({}));
12534
12593
  dispatch(smartBotActions.clearPersistedFormValues());
12594
+ dispatch(smartBotActions.setStepFormStreamData(null));
12595
+ resetActiveTabularInstance();
12535
12596
  setConversation([]);
12536
12597
  chatDataInfoRef.current[currentMode] = {
12537
12598
  conversations: {},
@@ -12724,7 +12785,7 @@ const SmartBot = (props) => {
12724
12785
  ], utilityList: utilityList, isAssistantThinking: false, isCustomScreen: showChatPlaceholder ? showChatPlaceholder : showSavedFilters, customScreenJsx: showChatPlaceholder ?
12725
12786
  jsxRuntime.jsx(ChatPlaceholder, { dateFormat: dateFormat, chatDataRef: chatDataRef, currentMode: currentMode, setShowChatPlaceholder: setShowChatPlaceholder, setLoader: setLoader, setCurrentAgentId: setCurrentAgentId, baseUrl: baseUrl, setBaseUrl: setBaseUrl, setCurrentSessionId: setCurrentSessionId, customChatConfig: customChatConfig, chatDataInfoRef: chatDataInfoRef, setChatDataState: setChatDataState, userInput: userInput, legacyAgentScreen: legacyAgentScreen, activeConversationId: activeConversationId, chatBodyRef: chatBodyRef, chatbotContext: chatbotContext, setInitValue: setInitValue, setSessionId: setSessionId, thinkingContent: thinkingContext?.thinkingContent, setThinkingContent: setThinkingContent, isThinking: isThinking, setIsThinking: setIsThinking, chatId: chatId, setChatId: setChatId, isStop: isStop, setIsStop: setIsStop, functionsRef: functionsRef, functionsState: functionsState, setFunctionsState: setFunctionsState, thinkingHeaderMessage: thinkingContext?.thinkingHeaderMessage, setThinkingHeaderMessage: setThinkingHeaderMessage, uniqueChatId: uniqueChatId, setUniqueChatId: setUniqueChatId, fieldNumber: fieldNumber, setFieldNumber: setFieldNumber, setAdditionalArgs: setAdditionalArgs, displayQuestions: displayQuestions, questions: questions, setActiveConversationId: setActiveConversationId })
12726
12787
  :
12727
- jsxRuntime.jsx(ChatbotSaveFilterComponent$1, { savedFilterSets: savedFilterSets, partialClose: partialClose }), inputText: userInput, threadList: ["Home"], hideMenuArrow: hideMenu, newChatScreen: newChatScreen, isModuleListLoading: modulesLoading, suggestionBanner: {
12788
+ jsxRuntime.jsx(ChatbotSaveFilterComponent$1, { savedFilterSets: savedFilterSets, partialClose: partialClose, chatBotWidth: chatBotWidth }), inputText: userInput, threadList: ["Home"], hideMenuArrow: hideMenu, newChatScreen: newChatScreen, isModuleListLoading: modulesLoading, suggestionBanner: {
12728
12789
  freeTextHeading: "Try adding more details :",
12729
12790
  freeTextContent: "Alan works better when you provide more context and pointed questions",
12730
12791
  }, isStopIcon: isStop, onStopIconClick: onStopIconClick, footerText: "AI-generated responses may contain errors\u2014please verify important information", showSuggestionBanner: showSavedFilters ? false : showSuggestionBanner, onCloseSuggestionBanner: () => {
@@ -12744,7 +12805,9 @@ const SmartBot = (props) => {
12744
12805
  }, handleSaveChat: () => {
12745
12806
  // Handle save chat logic here
12746
12807
  saveCurrentChat();
12747
- } })] }));
12808
+ }, onChatBotResize: (params) => {
12809
+ setChatBotWidth(params);
12810
+ }, onMinimiseChatBot: null })] }));
12748
12811
  };
12749
12812
 
12750
12813
  exports.default = SmartBot;