@flamingo-stack/openframe-frontend-core 0.0.521 → 0.0.522-snapshot.20260807100640

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/{chunk-6Q55DOM2.cjs → chunk-43QX3P4G.cjs} +3 -3
  2. package/dist/{chunk-6Q55DOM2.cjs.map → chunk-43QX3P4G.cjs.map} +1 -1
  3. package/dist/{chunk-R63KHYFN.js → chunk-7EYNWY2N.js} +2 -2
  4. package/dist/{chunk-Y3ES77KJ.js → chunk-7LSK5YFW.js} +2 -2
  5. package/dist/{chunk-XYVJKPUW.cjs → chunk-7RIYOJLG.cjs} +26 -26
  6. package/dist/{chunk-XYVJKPUW.cjs.map → chunk-7RIYOJLG.cjs.map} +1 -1
  7. package/dist/{chunk-ATN5CTEP.js → chunk-7ZIGB34Y.js} +6 -6
  8. package/dist/{chunk-NP62VGRO.js → chunk-ANKQQTAI.js} +4 -4
  9. package/dist/{chunk-VFYIFHJ3.js → chunk-BPBMHS4U.js} +2 -2
  10. package/dist/{chunk-WK5Z2Z5T.cjs → chunk-D3PPR2WR.cjs} +14 -14
  11. package/dist/{chunk-WK5Z2Z5T.cjs.map → chunk-D3PPR2WR.cjs.map} +1 -1
  12. package/dist/{chunk-5NQTT7D5.js → chunk-FP6HEAQC.js} +5 -5
  13. package/dist/{chunk-BSJAHSOO.cjs → chunk-H5TAFA4H.cjs} +4 -4
  14. package/dist/{chunk-BSJAHSOO.cjs.map → chunk-H5TAFA4H.cjs.map} +1 -1
  15. package/dist/{chunk-AAM6IP3G.cjs → chunk-HPGBHELQ.cjs} +7 -7
  16. package/dist/{chunk-AAM6IP3G.cjs.map → chunk-HPGBHELQ.cjs.map} +1 -1
  17. package/dist/{chunk-YJ4VCBRT.js → chunk-ICWQQQTR.js} +2 -2
  18. package/dist/{chunk-KSV7S3XR.cjs → chunk-J2OPY22M.cjs} +87 -87
  19. package/dist/{chunk-KSV7S3XR.cjs.map → chunk-J2OPY22M.cjs.map} +1 -1
  20. package/dist/{chunk-YPT3CBFR.cjs → chunk-JGYVXVN6.cjs} +61 -61
  21. package/dist/{chunk-YPT3CBFR.cjs.map → chunk-JGYVXVN6.cjs.map} +1 -1
  22. package/dist/{chunk-BFGMIDQN.cjs → chunk-JKUYXCG2.cjs} +9 -9
  23. package/dist/{chunk-BFGMIDQN.cjs.map → chunk-JKUYXCG2.cjs.map} +1 -1
  24. package/dist/{chunk-67R53SBT.cjs → chunk-KBE7SNFZ.cjs} +5 -5
  25. package/dist/{chunk-67R53SBT.cjs.map → chunk-KBE7SNFZ.cjs.map} +1 -1
  26. package/dist/{chunk-TXO7WK2L.js → chunk-L4DKYRHG.js} +2 -2
  27. package/dist/{chunk-KKQX7YWX.cjs → chunk-LJCBSJFU.cjs} +26 -26
  28. package/dist/{chunk-KKQX7YWX.cjs.map → chunk-LJCBSJFU.cjs.map} +1 -1
  29. package/dist/{chunk-GGHXEEYL.js → chunk-M45XIHZY.js} +2 -2
  30. package/dist/{chunk-TFUSHMTY.js → chunk-NBANPQ3N.js} +2 -2
  31. package/dist/{chunk-FHSZYVS5.js → chunk-NMZ33YWL.js} +4 -4
  32. package/dist/{chunk-FBK7CPXN.cjs → chunk-OGXZCZSA.cjs} +31 -31
  33. package/dist/{chunk-FBK7CPXN.cjs.map → chunk-OGXZCZSA.cjs.map} +1 -1
  34. package/dist/{chunk-7QEBK5ZY.js → chunk-OPU5BLBT.js} +2 -2
  35. package/dist/{chunk-RDGUBROF.cjs → chunk-PZVYYDFL.cjs} +37 -37
  36. package/dist/{chunk-RDGUBROF.cjs.map → chunk-PZVYYDFL.cjs.map} +1 -1
  37. package/dist/{chunk-AIVZKRDL.js → chunk-QBLLF7VS.js} +2 -2
  38. package/dist/{chunk-SX7V35WT.cjs → chunk-VYRP7JOD.cjs} +34 -8
  39. package/dist/chunk-VYRP7JOD.cjs.map +1 -0
  40. package/dist/{chunk-6AQKSCZ5.js → chunk-YJLQQGLH.js} +138 -112
  41. package/dist/{chunk-6AQKSCZ5.js.map → chunk-YJLQQGLH.js.map} +1 -1
  42. package/dist/{chunk-GAU637M2.cjs → chunk-ZIIIYUZ5.cjs} +11 -11
  43. package/dist/{chunk-GAU637M2.cjs.map → chunk-ZIIIYUZ5.cjs.map} +1 -1
  44. package/dist/components/case-studies/index.cjs +8 -8
  45. package/dist/components/case-studies/index.js +2 -2
  46. package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts +7 -1
  47. package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts.map +1 -1
  48. package/dist/components/chat/index.cjs +4 -2
  49. package/dist/components/chat/index.cjs.map +1 -1
  50. package/dist/components/chat/index.js +3 -1
  51. package/dist/components/chat/types/api.types.d.ts +22 -4
  52. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  53. package/dist/components/contact/index.cjs +3 -3
  54. package/dist/components/contact/index.js +2 -2
  55. package/dist/components/docs/index.cjs +5 -5
  56. package/dist/components/docs/index.js +4 -4
  57. package/dist/components/embeds/index.cjs +3 -3
  58. package/dist/components/embeds/index.js +2 -2
  59. package/dist/components/faq/index.cjs +3 -3
  60. package/dist/components/faq/index.js +2 -2
  61. package/dist/components/features/index.cjs +2 -2
  62. package/dist/components/features/index.js +1 -1
  63. package/dist/components/help-center-pages/index.cjs +22 -22
  64. package/dist/components/help-center-pages/index.js +13 -13
  65. package/dist/components/index.cjs +134 -132
  66. package/dist/components/index.cjs.map +1 -1
  67. package/dist/components/index.js +13 -11
  68. package/dist/components/index.js.map +1 -1
  69. package/dist/components/meeting-scheduler/index.cjs +34 -34
  70. package/dist/components/meeting-scheduler/index.js +3 -3
  71. package/dist/components/navigation/index.cjs +2 -2
  72. package/dist/components/navigation/index.js +1 -1
  73. package/dist/components/onboarding-guides/index.cjs +5 -5
  74. package/dist/components/onboarding-guides/index.js +4 -4
  75. package/dist/components/related-content/index.cjs +3 -3
  76. package/dist/components/related-content/index.js +2 -2
  77. package/dist/components/tickets/index.cjs +6 -6
  78. package/dist/components/tickets/index.js +5 -5
  79. package/dist/components/ui/index.cjs +4 -2
  80. package/dist/components/ui/index.cjs.map +1 -1
  81. package/dist/components/ui/index.js +3 -1
  82. package/dist/components/ui/tab-navigation.d.ts.map +1 -1
  83. package/dist/index.cjs +4 -2
  84. package/dist/index.cjs.map +1 -1
  85. package/dist/index.js +3 -1
  86. package/package.json +1 -1
  87. package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +11 -4
  88. package/src/components/chat/hooks/use-jetstream-dialog-subscription.ts +71 -6
  89. package/src/components/chat/types/api.types.ts +22 -4
  90. package/src/components/chat/utils/__tests__/history-merge.test.ts +99 -0
  91. package/src/components/ui/__tests__/tab-navigation.test.tsx +33 -1
  92. package/src/components/ui/tab-navigation.tsx +25 -8
  93. package/dist/chunk-SX7V35WT.cjs.map +0 -1
  94. /package/dist/{chunk-R63KHYFN.js.map → chunk-7EYNWY2N.js.map} +0 -0
  95. /package/dist/{chunk-Y3ES77KJ.js.map → chunk-7LSK5YFW.js.map} +0 -0
  96. /package/dist/{chunk-ATN5CTEP.js.map → chunk-7ZIGB34Y.js.map} +0 -0
  97. /package/dist/{chunk-NP62VGRO.js.map → chunk-ANKQQTAI.js.map} +0 -0
  98. /package/dist/{chunk-VFYIFHJ3.js.map → chunk-BPBMHS4U.js.map} +0 -0
  99. /package/dist/{chunk-5NQTT7D5.js.map → chunk-FP6HEAQC.js.map} +0 -0
  100. /package/dist/{chunk-YJ4VCBRT.js.map → chunk-ICWQQQTR.js.map} +0 -0
  101. /package/dist/{chunk-TXO7WK2L.js.map → chunk-L4DKYRHG.js.map} +0 -0
  102. /package/dist/{chunk-GGHXEEYL.js.map → chunk-M45XIHZY.js.map} +0 -0
  103. /package/dist/{chunk-TFUSHMTY.js.map → chunk-NBANPQ3N.js.map} +0 -0
  104. /package/dist/{chunk-FHSZYVS5.js.map → chunk-NMZ33YWL.js.map} +0 -0
  105. /package/dist/{chunk-7QEBK5ZY.js.map → chunk-OPU5BLBT.js.map} +0 -0
  106. /package/dist/{chunk-AIVZKRDL.js.map → chunk-QBLLF7VS.js.map} +0 -0
@@ -22387,7 +22387,8 @@ var TabBar = memo4(function TabBar2({
22387
22387
  }, [leftFade, rightFade]);
22388
22388
  const isPlaced = indicator.width > 0;
22389
22389
  const indicatorStyle = {
22390
- transform: `translateX(${indicator.left}px) scaleX(${indicator.width})`,
22390
+ width: `${indicator.width}px`,
22391
+ transform: `translateX(${indicator.left}px)`,
22391
22392
  opacity: isPlaced ? 1 : 0
22392
22393
  };
22393
22394
  const shouldAnimateIndicator = hasPlacedIndicatorRef.current;
@@ -22449,8 +22450,8 @@ var TabBar = memo4(function TabBar2({
22449
22450
  {
22450
22451
  "aria-hidden": true,
22451
22452
  className: cn(
22452
- "pointer-events-none absolute bottom-0 left-0 h-1 w-px origin-left bg-ods-accent",
22453
- shouldAnimateIndicator && "transition-[transform,opacity] duration-200 ease-out motion-reduce:transition-none"
22453
+ "pointer-events-none absolute bottom-0 left-0 h-1 bg-ods-accent",
22454
+ shouldAnimateIndicator && "transition-[transform,width,opacity] duration-200 ease-out motion-reduce:transition-none"
22454
22455
  ),
22455
22456
  style: indicatorStyle
22456
22457
  }
@@ -52765,9 +52766,10 @@ function useScriptedStream(frames, resetKey, enabled = true) {
52765
52766
  }
52766
52767
 
52767
52768
  // src/components/chat/hooks/use-jetstream-dialog-subscription.ts
52768
- import { useEffect as useEffect85, useRef as useRef69, useState as useState115 } from "react";
52769
+ import { useCallback as useCallback49, useEffect as useEffect85, useRef as useRef69, useState as useState115 } from "react";
52769
52770
  var DEFAULT_STREAM_NAME = "CHAT_CHUNKS";
52770
52771
  var RESYNC_AFTER_HIDDEN_MS = 1e4;
52772
+ var RESYNC_COALESCE_MS = 1e3;
52771
52773
  var RECOVERY_REPORT_FLOOR_MS = 5e3;
52772
52774
  function useJetStreamDialogSubscription({
52773
52775
  enabled,
@@ -52783,7 +52785,8 @@ function useJetStreamDialogSubscription({
52783
52785
  getNatsWsUrl,
52784
52786
  clientConfig = {},
52785
52787
  reconnectionBackoff,
52786
- inactiveThresholdMs
52788
+ inactiveThresholdMs,
52789
+ resyncSignal = 0
52787
52790
  }) {
52788
52791
  const [isConnected, setIsConnected] = useState115(false);
52789
52792
  const [isSubscribed, setIsSubscribed] = useState115(false);
@@ -52791,6 +52794,8 @@ function useJetStreamDialogSubscription({
52791
52794
  const [recoveryCount, setRecoveryCount] = useState115(0);
52792
52795
  const [currentStreamSeq, setCurrentStreamSeq] = useState115(null);
52793
52796
  const lastRecoveryReportRef = useRef69(0);
52797
+ const resyncTimerRef = useRef69(null);
52798
+ const lastResyncSignalRef = useRef69(resyncSignal);
52794
52799
  const clientRef = useRef69(null);
52795
52800
  const subscriptionRef = useRef69(null);
52796
52801
  const highestStreamSeqRef = useRef69(null);
@@ -52920,8 +52925,22 @@ function useJetStreamDialogSubscription({
52920
52925
  }, [enabled, wsUrl]);
52921
52926
  useEffect85(() => {
52922
52927
  highestStreamSeqRef.current = null;
52928
+ lastResyncSignalRef.current = resyncSignal;
52923
52929
  setCurrentStreamSeq(null);
52930
+ return () => {
52931
+ if (resyncTimerRef.current !== null) {
52932
+ clearTimeout(resyncTimerRef.current);
52933
+ resyncTimerRef.current = null;
52934
+ }
52935
+ };
52924
52936
  }, [dialogId]);
52937
+ const requestResync = useCallback49(() => {
52938
+ if (resyncTimerRef.current !== null) clearTimeout(resyncTimerRef.current);
52939
+ resyncTimerRef.current = setTimeout(() => {
52940
+ resyncTimerRef.current = null;
52941
+ setReconnectionCount((c) => c + 1);
52942
+ }, RESYNC_COALESCE_MS);
52943
+ }, []);
52925
52944
  useEffect85(() => {
52926
52945
  if (!enabled) return;
52927
52946
  let hiddenSince = document.visibilityState === "hidden" ? Date.now() : 0;
@@ -52933,12 +52952,18 @@ function useJetStreamDialogSubscription({
52933
52952
  const awayMs = hiddenSince === 0 ? 0 : Date.now() - hiddenSince;
52934
52953
  hiddenSince = 0;
52935
52954
  if (awayMs >= RESYNC_AFTER_HIDDEN_MS) {
52936
- setReconnectionCount((c) => c + 1);
52955
+ requestResync();
52937
52956
  }
52938
52957
  };
52939
52958
  document.addEventListener("visibilitychange", onVisibilityChange);
52940
52959
  return () => document.removeEventListener("visibilitychange", onVisibilityChange);
52941
- }, [enabled]);
52960
+ }, [enabled, requestResync]);
52961
+ useEffect85(() => {
52962
+ if (!enabled) return;
52963
+ if (resyncSignal <= lastResyncSignalRef.current) return;
52964
+ lastResyncSignalRef.current = resyncSignal;
52965
+ requestResync();
52966
+ }, [enabled, resyncSignal, requestResync]);
52942
52967
  useEffect85(() => {
52943
52968
  if (!enabled || !dialogId || !isConnected) {
52944
52969
  if (subscriptionRef.current) {
@@ -53441,7 +53466,7 @@ function useEmptyStateConfig(emptyStateUrl, options) {
53441
53466
  }
53442
53467
 
53443
53468
  // src/components/chat/hooks/use-chat-attachments.ts
53444
- import { useCallback as useCallback49, useMemo as useMemo50, useRef as useRef71, useState as useState118 } from "react";
53469
+ import { useCallback as useCallback50, useMemo as useMemo50, useRef as useRef71, useState as useState118 } from "react";
53445
53470
  import { fileTypeFromBlob } from "file-type";
53446
53471
  var CHAT_ATTACHMENTS_BUCKET = "chat-attachments";
53447
53472
  var CHAT_ATTACHMENTS_FOLDER = "chat";
@@ -53519,10 +53544,10 @@ function useChatAttachments() {
53519
53544
  const uploadUrlEndpoint = runtime.endpoints.attachmentUploadUrl;
53520
53545
  const [attachments, setAttachments] = useState118([]);
53521
53546
  const controllersRef = useRef71(/* @__PURE__ */ new Map());
53522
- const updateOne = useCallback49((id, patch) => {
53547
+ const updateOne = useCallback50((id, patch) => {
53523
53548
  setAttachments((prev) => prev.map((a) => a.id === id ? { ...a, ...patch } : a));
53524
53549
  }, []);
53525
- const removeAttachment = useCallback49((id) => {
53550
+ const removeAttachment = useCallback50((id) => {
53526
53551
  const ctrl = controllersRef.current.get(id);
53527
53552
  if (ctrl) {
53528
53553
  ctrl.abort();
@@ -53530,12 +53555,12 @@ function useChatAttachments() {
53530
53555
  }
53531
53556
  setAttachments((prev) => prev.filter((a) => a.id !== id));
53532
53557
  }, []);
53533
- const clear = useCallback49(() => {
53558
+ const clear = useCallback50(() => {
53534
53559
  for (const ctrl of controllersRef.current.values()) ctrl.abort();
53535
53560
  controllersRef.current.clear();
53536
53561
  setAttachments([]);
53537
53562
  }, []);
53538
- const uploadOne = useCallback49(
53563
+ const uploadOne = useCallback50(
53539
53564
  async (att) => {
53540
53565
  const ctrl = controllersRef.current.get(att.id);
53541
53566
  try {
@@ -53609,7 +53634,7 @@ function useChatAttachments() {
53609
53634
  );
53610
53635
  const attachmentsRef = useRef71([]);
53611
53636
  attachmentsRef.current = attachments;
53612
- const addFiles = useCallback49(
53637
+ const addFiles = useCallback50(
53613
53638
  (files) => {
53614
53639
  const arr = Array.from(files);
53615
53640
  if (arr.length === 0) return;
@@ -53684,7 +53709,7 @@ function useChatAttachments() {
53684
53709
  }
53685
53710
 
53686
53711
  // src/components/chat/hooks/use-chat-attachment-image-gallery.tsx
53687
- import { useCallback as useCallback50, useEffect as useEffect88, useRef as useRef72, useState as useState119 } from "react";
53712
+ import { useCallback as useCallback51, useEffect as useEffect88, useRef as useRef72, useState as useState119 } from "react";
53688
53713
  import { jsx as jsx380 } from "react/jsx-runtime";
53689
53714
  var CLOSED = { isOpen: false, images: [], initialIndex: 0 };
53690
53715
  function useChatAttachmentImageGallery() {
@@ -53692,7 +53717,7 @@ function useChatAttachmentImageGallery() {
53692
53717
  const viewUrlPrefix = runtime.endpoints.attachmentViewUrlPrefix;
53693
53718
  const panelRef = useRef72(null);
53694
53719
  const [state, setState] = useState119(CLOSED);
53695
- const handleClose = useCallback50(() => setState(CLOSED), []);
53720
+ const handleClose = useCallback51(() => setState(CLOSED), []);
53696
53721
  useEffect88(() => {
53697
53722
  const root = panelRef.current;
53698
53723
  if (!root) return;
@@ -53757,20 +53782,20 @@ function useCloseOnNavigation(close, pathname) {
53757
53782
  }
53758
53783
 
53759
53784
  // src/components/chat/hooks/use-chat.ts
53760
- import { useState as useState121, useCallback as useCallback52, useEffect as useEffect90, useRef as useRef75 } from "react";
53785
+ import { useState as useState121, useCallback as useCallback53, useEffect as useEffect90, useRef as useRef75 } from "react";
53761
53786
 
53762
53787
  // src/components/chat/hooks/use-sse.ts
53763
- import { useState as useState120, useCallback as useCallback51, useRef as useRef74 } from "react";
53788
+ import { useState as useState120, useCallback as useCallback52, useRef as useRef74 } from "react";
53764
53789
  function useSSE({ useMock = true, debugMode = false, streamFn } = {}) {
53765
53790
  const [isStreaming, setIsStreaming] = useState120(false);
53766
53791
  const [error, setError] = useState120(null);
53767
53792
  const abortControllerRef = useRef74(null);
53768
- const fallbackStream = useCallback51(async function* () {
53793
+ const fallbackStream = useCallback52(async function* () {
53769
53794
  throw new Error(
53770
53795
  "[useSSE] No streamFn provided and `useMock: true` is no longer wired into the lib. Supply a `streamFn` (see `createDocStreamFn` in use-embedded-chat) or migrate the mock to your host code."
53771
53796
  );
53772
53797
  }, []);
53773
- const streamMessage = useCallback51(
53798
+ const streamMessage = useCallback52(
53774
53799
  async function* (message2, extra) {
53775
53800
  setIsStreaming(true);
53776
53801
  setError(null);
@@ -53800,13 +53825,13 @@ function useSSE({ useMock = true, debugMode = false, streamFn } = {}) {
53800
53825
  },
53801
53826
  [streamFn, fallbackStream]
53802
53827
  );
53803
- const abort = useCallback51(() => {
53828
+ const abort = useCallback52(() => {
53804
53829
  if (abortControllerRef.current) {
53805
53830
  abortControllerRef.current.abort();
53806
53831
  }
53807
53832
  setIsStreaming(false);
53808
53833
  }, []);
53809
- const reset = useCallback51(() => {
53834
+ const reset = useCallback52(() => {
53810
53835
  }, []);
53811
53836
  return {
53812
53837
  streamMessage,
@@ -53849,10 +53874,10 @@ function useChat({
53849
53874
  debugMode,
53850
53875
  streamFn
53851
53876
  });
53852
- const addMessage = useCallback52((message2) => {
53877
+ const addMessage = useCallback53((message2) => {
53853
53878
  setMessages((prev) => [...prev, message2]);
53854
53879
  }, []);
53855
- const updateLastAssistantMessage = useCallback52((segments) => {
53880
+ const updateLastAssistantMessage = useCallback53((segments) => {
53856
53881
  setMessages((prev) => {
53857
53882
  const newMessages = [...prev];
53858
53883
  const lastMessage = newMessages[newMessages.length - 1];
@@ -53865,7 +53890,7 @@ function useChat({
53865
53890
  return newMessages;
53866
53891
  });
53867
53892
  }, []);
53868
- const sendMessage = useCallback52(
53893
+ const sendMessage = useCallback53(
53869
53894
  async (text, extra, options) => {
53870
53895
  const userMessage = {
53871
53896
  id: `user-${Date.now()}`,
@@ -54095,21 +54120,21 @@ function useChat({
54095
54120
  },
54096
54121
  [streamMessage, addMessage, updateLastAssistantMessage, assistantName, assistantAvatar]
54097
54122
  );
54098
- const handleQuickAction = useCallback52(
54123
+ const handleQuickAction = useCallback53(
54099
54124
  (actionText) => {
54100
54125
  sendMessage(actionText);
54101
54126
  },
54102
54127
  [sendMessage]
54103
54128
  );
54104
- const clearMessages = useCallback52(() => {
54129
+ const clearMessages = useCallback53(() => {
54105
54130
  setMessages([]);
54106
54131
  setIsTyping(false);
54107
54132
  reset();
54108
54133
  }, [reset]);
54109
- const hydrateMessages = useCallback52((history) => {
54134
+ const hydrateMessages = useCallback53((history) => {
54110
54135
  setMessages((prev) => prev.length === 0 ? history : [...history, ...prev]);
54111
54136
  }, []);
54112
- const stopMessage = useCallback52(() => {
54137
+ const stopMessage = useCallback53(() => {
54113
54138
  abort();
54114
54139
  setIsTyping(false);
54115
54140
  }, [abort]);
@@ -54128,7 +54153,7 @@ function useChat({
54128
54153
  }
54129
54154
 
54130
54155
  // src/components/chat/hooks/use-sse-chat-adapter.ts
54131
- import { useCallback as useCallback54, useMemo as useMemo52, useRef as useRef78 } from "react";
54156
+ import { useCallback as useCallback55, useMemo as useMemo52, useRef as useRef78 } from "react";
54132
54157
 
54133
54158
  // src/chat-protocol/frames.ts
54134
54159
  var FRAME_TERMINATOR = "\0";
@@ -56382,7 +56407,7 @@ function createChatDialogStore(options = {}) {
56382
56407
  }
56383
56408
 
56384
56409
  // src/components/chat/stream/use-chat-stream-reducer.ts
56385
- import { useCallback as useCallback53, useEffect as useEffect92, useMemo as useMemo51, useRef as useRef77, useSyncExternalStore } from "react";
56410
+ import { useCallback as useCallback54, useEffect as useEffect92, useMemo as useMemo51, useRef as useRef77, useSyncExternalStore } from "react";
56386
56411
 
56387
56412
  // src/components/chat/stream/delta-batcher.ts
56388
56413
  var DELTA_FLUSH_FALLBACK_MS = 50;
@@ -56474,9 +56499,9 @@ function useChatStreamReducer({
56474
56499
  const optionsRef = useRef77(createReducerOptions);
56475
56500
  optionsRef.current = createReducerOptions;
56476
56501
  const reducer2 = store.getReducer(dialogId, side, () => optionsRef.current?.() ?? {});
56477
- const getSnapshot = useCallback53(() => store.getSnapshot(dialogId, side), [store, dialogId, side]);
56478
- const getServerSnapshot = useCallback53(() => store.getServerSnapshot(), [store]);
56479
- const subscribe = useCallback53((listener) => store.subscribe(listener), [store]);
56502
+ const getSnapshot = useCallback54(() => store.getSnapshot(dialogId, side), [store, dialogId, side]);
56503
+ const getServerSnapshot = useCallback54(() => store.getServerSnapshot(), [store]);
56504
+ const subscribe = useCallback54((listener) => store.subscribe(listener), [store]);
56480
56505
  const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
56481
56506
  useEffect92(() => store.retain(dialogId, side), [store, dialogId, side]);
56482
56507
  const keyRef = useRef77({ dialogId, side });
@@ -56494,8 +56519,8 @@ function useChatStreamReducer({
56494
56519
  });
56495
56520
  }
56496
56521
  const batcher = batcherRef.current;
56497
- const flushDeltas = useCallback53(() => batcher.flush(), [batcher]);
56498
- const applyEvent = useCallback53(
56522
+ const flushDeltas = useCallback54(() => batcher.flush(), [batcher]);
56523
+ const applyEvent = useCallback54(
56499
56524
  (event) => {
56500
56525
  if (batcher.push(event, keyRef.current)) return;
56501
56526
  batcher.flush();
@@ -56504,7 +56529,7 @@ function useChatStreamReducer({
56504
56529
  [batcher, store, dialogId, side]
56505
56530
  );
56506
56531
  useEffect92(() => () => batcher.dispose(), [batcher]);
56507
- const mutate = useCallback53(
56532
+ const mutate = useCallback54(
56508
56533
  (fn) => store.mutate(dialogId, side, fn),
56509
56534
  [store, dialogId, side]
56510
56535
  );
@@ -56536,7 +56561,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
56536
56561
  const source = runtime.source || DEFAULT_CHAT_SOURCE;
56537
56562
  const tableIdForDocumentType = options?.tableIdForDocumentType ?? defaultTableIdForDocumentType;
56538
56563
  const sendMessageRef = useRef78(async () => true);
56539
- const cardResolve = useCallback54(
56564
+ const cardResolve = useCallback55(
56540
56565
  (action) => (reqId) => {
56541
56566
  if (!reqId) return;
56542
56567
  return sendMessageRef.current("", {
@@ -56548,7 +56573,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
56548
56573
  );
56549
56574
  const cardApprove = useMemo52(() => cardResolve("approve"), [cardResolve]);
56550
56575
  const cardReject = useMemo52(() => cardResolve("reject"), [cardResolve]);
56551
- const createReducerOptions = useCallback54(
56576
+ const createReducerOptions = useCallback55(
56552
56577
  () => ({
56553
56578
  transport: "sse",
56554
56579
  callbacks: { onApprove: cardApprove, onReject: cardReject }
@@ -56598,7 +56623,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
56598
56623
  const historyUrl = runtime.endpoints.chatHistoryUrl ?? `${runtime.endpoints.chatStreamUrl.replace(/\/+$/, "")}/history`;
56599
56624
  const hydrationRefsMapRef = useRef78(/* @__PURE__ */ new Map());
56600
56625
  const hydrationSendCountRef = useRef78(0);
56601
- const hydrateMessages = useCallback54(
56626
+ const hydrateMessages = useCallback55(
56602
56627
  (history) => {
56603
56628
  mutate((r) => {
56604
56629
  const mapped = history.map(historyMessageToReducerMessage);
@@ -56630,7 +56655,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
56630
56655
  });
56631
56656
  const endpointsRef = useRef78(runtime.endpoints);
56632
56657
  endpointsRef.current = runtime.endpoints;
56633
- const captureConversationId = useCallback54(
56658
+ const captureConversationId = useCallback55(
56634
56659
  (event) => {
56635
56660
  if (event.type !== "metadata") return;
56636
56661
  const id = event.conversationId;
@@ -56641,7 +56666,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
56641
56666
  },
56642
56667
  [conversationStorage]
56643
56668
  );
56644
- const sendMessage = useCallback54(
56669
+ const sendMessage = useCallback55(
56645
56670
  // Resolves `true` on a clean turn, `false` when the request failed
56646
56671
  // (surfaced to batch approve-all loops via the card callbacks).
56647
56672
  async (text, sendOptions) => {
@@ -56726,12 +56751,12 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
56726
56751
  [mutate, applyEvent, flushDeltas, captureConversationId]
56727
56752
  );
56728
56753
  sendMessageRef.current = sendMessage;
56729
- const stopMessage = useCallback54(() => {
56754
+ const stopMessage = useCallback55(() => {
56730
56755
  abortControllerRef.current?.abort();
56731
56756
  flushDeltas();
56732
56757
  mutate((r) => r.setPhase("idle"));
56733
56758
  }, [mutate, flushDeltas]);
56734
- const clearMessages = useCallback54(() => {
56759
+ const clearMessages = useCallback55(() => {
56735
56760
  mutate((r) => r.reset());
56736
56761
  conversationIdRef.current = null;
56737
56762
  conversationStorage.clear();
@@ -56769,7 +56794,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
56769
56794
  };
56770
56795
  });
56771
56796
  }, [state.messages, state.turnMeta]);
56772
- const displayRef = useCallback54(
56797
+ const displayRef = useCallback55(
56773
56798
  (reference) => {
56774
56799
  const tableId = tableIdForDocumentType(reference.type);
56775
56800
  if (!tableId) {
@@ -56793,7 +56818,7 @@ function useSseChatAdapter(options, runtimeOptions = {}) {
56793
56818
  },
56794
56819
  [sendMessage, source, cmdIdByTableId, tableIdForDocumentType]
56795
56820
  );
56796
- const discussRef = useCallback54(
56821
+ const discussRef = useCallback55(
56797
56822
  (reference) => {
56798
56823
  const tableId = tableIdForDocumentType(reference.type);
56799
56824
  if (!tableId) {
@@ -56895,7 +56920,7 @@ var noopBumpMetaTick = () => {
56895
56920
  };
56896
56921
 
56897
56922
  // src/components/chat/hooks/use-nats-chat-adapter.ts
56898
- import { useCallback as useCallback55, useEffect as useEffect93, useMemo as useMemo53, useRef as useRef79, useState as useState123 } from "react";
56923
+ import { useCallback as useCallback56, useEffect as useEffect93, useMemo as useMemo53, useRef as useRef79, useState as useState123 } from "react";
56899
56924
 
56900
56925
  // src/chat-protocol/nats-decoder.ts
56901
56926
  function normalizeToolCalls(raw) {
@@ -57695,11 +57720,11 @@ function useNatsChatAdapter(config, options = {}) {
57695
57720
  async () => {
57696
57721
  }
57697
57722
  );
57698
- const accumApprove = useCallback55((requestId) => {
57723
+ const accumApprove = useCallback56((requestId) => {
57699
57724
  if (!requestId) return;
57700
57725
  return handleApproveRef.current(requestId);
57701
57726
  }, []);
57702
- const accumReject = useCallback55((requestId) => {
57727
+ const accumReject = useCallback56((requestId) => {
57703
57728
  if (!requestId) return;
57704
57729
  return handleRejectRef.current(requestId);
57705
57730
  }, []);
@@ -57753,7 +57778,7 @@ function useNatsChatAdapter(config, options = {}) {
57753
57778
  console.error("[useNatsChatAdapter] rejectRequest failed:", err);
57754
57779
  }
57755
57780
  };
57756
- const processChunk = useCallback55(
57781
+ const processChunk = useCallback56(
57757
57782
  (chunk) => {
57758
57783
  const event = decodeNatsChunk(chunk);
57759
57784
  if (event) applyEvent(event);
@@ -57782,7 +57807,7 @@ function useNatsChatAdapter(config, options = {}) {
57782
57807
  fetchChunks
57783
57808
  });
57784
57809
  const historyLoadSeqRef = useRef79(0);
57785
- const loadDialogHistory = useCallback55(
57810
+ const loadDialogHistory = useCallback56(
57786
57811
  async (id, cursor) => {
57787
57812
  if (!fetchDialogMessages) return;
57788
57813
  historyLoadSeqRef.current += 1;
@@ -57929,7 +57954,7 @@ function useNatsChatAdapter(config, options = {}) {
57929
57954
  setConnectionState("connecting");
57930
57955
  }, [active, dialogId]);
57931
57956
  const initialDialogsLoadedRef = useRef79(false);
57932
- const loadDialogsPage = useCallback55(
57957
+ const loadDialogsPage = useCallback56(
57933
57958
  async (cursor) => {
57934
57959
  if (!fetchDialogs) return;
57935
57960
  setIsDialogsLoading(true);
@@ -57957,7 +57982,7 @@ function useNatsChatAdapter(config, options = {}) {
57957
57982
  },
57958
57983
  [fetchDialogs, dialogsPageSize]
57959
57984
  );
57960
- const reloadDialogs = useCallback55(() => {
57985
+ const reloadDialogs = useCallback56(() => {
57961
57986
  void loadDialogsPage();
57962
57987
  }, [loadDialogsPage]);
57963
57988
  useEffect93(() => {
@@ -57967,7 +57992,7 @@ function useNatsChatAdapter(config, options = {}) {
57967
57992
  initialDialogsLoadedRef.current = true;
57968
57993
  void loadDialogsPage();
57969
57994
  }, [active, fetchDialogs, loadDialogsPage]);
57970
- const sendMessage = useCallback55(
57995
+ const sendMessage = useCallback56(
57971
57996
  async (text, sendOptions) => {
57972
57997
  const hidden = sendOptions?.hidden ?? false;
57973
57998
  mutate((r) => r.pushOptimisticSend(text, hidden));
@@ -57975,7 +58000,7 @@ function useNatsChatAdapter(config, options = {}) {
57975
58000
  },
57976
58001
  [mutate, publishUserMessage, dialogId]
57977
58002
  );
57978
- const stopMessage = useCallback55(() => {
58003
+ const stopMessage = useCallback56(() => {
57979
58004
  mutate((r) => r.setPhase("idle"));
57980
58005
  if (stopGenerationCallback && dialogId) {
57981
58006
  void stopGenerationCallback(dialogId).catch((err) => {
@@ -57983,10 +58008,10 @@ function useNatsChatAdapter(config, options = {}) {
57983
58008
  });
57984
58009
  }
57985
58010
  }, [mutate, stopGenerationCallback, dialogId]);
57986
- const clearMessages = useCallback55(() => {
58011
+ const clearMessages = useCallback56(() => {
57987
58012
  mutate((r) => r.clearThread());
57988
58013
  }, [mutate]);
57989
- const selectDialog = useCallback55(
58014
+ const selectDialog = useCallback56(
57990
58015
  (id) => {
57991
58016
  if (!isManagedMode) {
57992
58017
  return;
@@ -57995,7 +58020,7 @@ function useNatsChatAdapter(config, options = {}) {
57995
58020
  },
57996
58021
  [isManagedMode]
57997
58022
  );
57998
- const startNewDialog = useCallback55(async () => {
58023
+ const startNewDialog = useCallback56(async () => {
57999
58024
  if (!createDialogCallback) return null;
58000
58025
  if (isCreatingDialog) return null;
58001
58026
  try {
@@ -58020,7 +58045,7 @@ function useNatsChatAdapter(config, options = {}) {
58020
58045
  setIsCreatingDialog(false);
58021
58046
  }
58022
58047
  }, [createDialogCallback, isCreatingDialog, isManagedMode]);
58023
- const deleteDialog = useCallback55(
58048
+ const deleteDialog = useCallback56(
58024
58049
  async (id) => {
58025
58050
  if (!deleteDialogCallback) return;
58026
58051
  try {
@@ -58036,7 +58061,7 @@ function useNatsChatAdapter(config, options = {}) {
58036
58061
  },
58037
58062
  [deleteDialogCallback, internalDialogId, isManagedMode]
58038
58063
  );
58039
- const renameDialog = useCallback55(
58064
+ const renameDialog = useCallback56(
58040
58065
  async (id, title) => {
58041
58066
  if (!renameDialogCallback) return;
58042
58067
  let previous;
@@ -58060,7 +58085,7 @@ function useNatsChatAdapter(config, options = {}) {
58060
58085
  },
58061
58086
  [renameDialogCallback]
58062
58087
  );
58063
- const archiveDialog = useCallback55(
58088
+ const archiveDialog = useCallback56(
58064
58089
  async (id) => {
58065
58090
  if (!archiveDialogCallback) return;
58066
58091
  try {
@@ -58075,27 +58100,27 @@ function useNatsChatAdapter(config, options = {}) {
58075
58100
  },
58076
58101
  [archiveDialogCallback, internalDialogId, isManagedMode]
58077
58102
  );
58078
- const loadMoreDialogs = useCallback55(async () => {
58103
+ const loadMoreDialogs = useCallback56(async () => {
58079
58104
  if (!dialogsNextCursor) return;
58080
58105
  await loadDialogsPage(dialogsNextCursor);
58081
58106
  }, [dialogsNextCursor, loadDialogsPage]);
58082
- const loadMoreMessages = useCallback55(async () => {
58107
+ const loadMoreMessages = useCallback56(async () => {
58083
58108
  if (!dialogId || !messagesNextCursor) return;
58084
58109
  await loadDialogHistory(dialogId, messagesNextCursor);
58085
58110
  }, [dialogId, messagesNextCursor, loadDialogHistory]);
58086
- const approveRequest = useCallback55(
58111
+ const approveRequest = useCallback56(
58087
58112
  async (requestId) => {
58088
58113
  await handleApproveRef.current(requestId);
58089
58114
  },
58090
58115
  []
58091
58116
  );
58092
- const rejectRequest = useCallback55(
58117
+ const rejectRequest = useCallback56(
58093
58118
  async (requestId, reason) => {
58094
58119
  await handleRejectRef.current(requestId, reason);
58095
58120
  },
58096
58121
  []
58097
58122
  );
58098
- const discussRef = useCallback55(
58123
+ const discussRef = useCallback56(
58099
58124
  (reference) => {
58100
58125
  const prompt = buildDiscussPrompt(reference, { includeReference: true });
58101
58126
  void sendMessage(prompt).catch((err) => {
@@ -58104,7 +58129,7 @@ function useNatsChatAdapter(config, options = {}) {
58104
58129
  },
58105
58130
  [sendMessage]
58106
58131
  );
58107
- const displayRef = useCallback55((_ref) => {
58132
+ const displayRef = useCallback56((_ref) => {
58108
58133
  }, []);
58109
58134
  const { messages, streamingPhase, dialogTokenUsage = null, liveModel = null } = state;
58110
58135
  const isLoading = streamingPhase !== "idle";
@@ -58193,7 +58218,7 @@ function useNatsChatAdapter(config, options = {}) {
58193
58218
  }
58194
58219
 
58195
58220
  // src/components/chat/hooks/use-unified-chat.ts
58196
- import { useCallback as useCallback56, useMemo as useMemo54, useRef as useRef80 } from "react";
58221
+ import { useCallback as useCallback57, useMemo as useMemo54, useRef as useRef80 } from "react";
58197
58222
  var EMPTY_SSE_OPTIONS = {};
58198
58223
  function createDisabledNatsConfig() {
58199
58224
  return {
@@ -58224,64 +58249,64 @@ function useUnifiedChat(options) {
58224
58249
  const activeState = activeMode === "guide" ? sseState : mingoStateOverride ?? natsState;
58225
58250
  const activeStateRef = useRef80(activeState);
58226
58251
  activeStateRef.current = activeState;
58227
- const stopMessage = useCallback56(() => activeStateRef.current.stopMessage(), []);
58228
- const clearMessages = useCallback56(
58252
+ const stopMessage = useCallback57(() => activeStateRef.current.stopMessage(), []);
58253
+ const clearMessages = useCallback57(
58229
58254
  () => activeStateRef.current.clearMessages(),
58230
58255
  []
58231
58256
  );
58232
- const sendMessage = useCallback56(
58257
+ const sendMessage = useCallback57(
58233
58258
  (text, opts) => activeStateRef.current.sendMessage(text, opts),
58234
58259
  []
58235
58260
  );
58236
- const discussRef = useCallback56(
58261
+ const discussRef = useCallback57(
58237
58262
  (ref) => activeStateRef.current.discussRef(ref),
58238
58263
  []
58239
58264
  );
58240
- const displayRef = useCallback56(
58265
+ const displayRef = useCallback57(
58241
58266
  (ref) => activeStateRef.current.displayRef(ref),
58242
58267
  []
58243
58268
  );
58244
- const selectDialog = useCallback56(
58269
+ const selectDialog = useCallback57(
58245
58270
  (id) => activeStateRef.current.selectDialog(id),
58246
58271
  []
58247
58272
  );
58248
- const startNewDialog = useCallback56(
58273
+ const startNewDialog = useCallback57(
58249
58274
  () => activeStateRef.current.startNewDialog(),
58250
58275
  []
58251
58276
  );
58252
- const deleteDialog = useCallback56(
58277
+ const deleteDialog = useCallback57(
58253
58278
  (id) => activeStateRef.current.deleteDialog(id),
58254
58279
  []
58255
58280
  );
58256
- const renameDialog = useCallback56(
58281
+ const renameDialog = useCallback57(
58257
58282
  (id, title) => activeStateRef.current.renameDialog(id, title),
58258
58283
  []
58259
58284
  );
58260
- const archiveDialog = useCallback56(
58285
+ const archiveDialog = useCallback57(
58261
58286
  (id) => activeStateRef.current.archiveDialog(id),
58262
58287
  []
58263
58288
  );
58264
- const loadMoreDialogs = useCallback56(
58289
+ const loadMoreDialogs = useCallback57(
58265
58290
  () => activeStateRef.current.loadMoreDialogs(),
58266
58291
  []
58267
58292
  );
58268
- const setDialogScope = useCallback56(
58293
+ const setDialogScope = useCallback57(
58269
58294
  (scope) => activeStateRef.current.setDialogScope?.(scope),
58270
58295
  []
58271
58296
  );
58272
- const reloadDialogs = useCallback56(
58297
+ const reloadDialogs = useCallback57(
58273
58298
  () => activeStateRef.current.reloadDialogs(),
58274
58299
  []
58275
58300
  );
58276
- const loadMoreMessages = useCallback56(
58301
+ const loadMoreMessages = useCallback57(
58277
58302
  () => activeStateRef.current.loadMoreMessages(),
58278
58303
  []
58279
58304
  );
58280
- const approveRequest = useCallback56(
58305
+ const approveRequest = useCallback57(
58281
58306
  (requestId) => activeStateRef.current.approveRequest(requestId),
58282
58307
  []
58283
58308
  );
58284
- const rejectRequest = useCallback56(
58309
+ const rejectRequest = useCallback57(
58285
58310
  (requestId, reason) => activeStateRef.current.rejectRequest(requestId, reason),
58286
58311
  []
58287
58312
  );
@@ -58621,7 +58646,7 @@ function buildStreamFrames(messages) {
58621
58646
 
58622
58647
  // src/components/chat/embeddable-chat.tsx
58623
58648
  init_cn();
58624
- import { useCallback as useCallback58, useEffect as useEffect94, useMemo as useMemo56, useRef as useRef82, useState as useState125 } from "react";
58649
+ import { useCallback as useCallback59, useEffect as useEffect94, useMemo as useMemo56, useRef as useRef82, useState as useState125 } from "react";
58625
58650
  import * as DialogPrimitive5 from "@radix-ui/react-dialog";
58626
58651
  import { usePreventScroll as usePreventScroll6 } from "@react-aria/overlays";
58627
58652
  import { isIOS } from "@react-aria/utils";
@@ -58708,7 +58733,7 @@ init_button2();
58708
58733
  import { FileText as FileText8, MessageSquare as MessageSquare3 } from "lucide-react";
58709
58734
 
58710
58735
  // src/components/chat/hooks/use-chat-dialog-manager.ts
58711
- import { useCallback as useCallback57, useMemo as useMemo55, useRef as useRef81, useState as useState124 } from "react";
58736
+ import { useCallback as useCallback58, useMemo as useMemo55, useRef as useRef81, useState as useState124 } from "react";
58712
58737
  function useChatDialogManager({
58713
58738
  dialogs,
58714
58739
  activeDialogId,
@@ -58721,14 +58746,14 @@ function useChatDialogManager({
58721
58746
  }) {
58722
58747
  const [renameTarget, setRenameTarget] = useState124(null);
58723
58748
  const [archiveTarget, setArchiveTarget] = useState124(null);
58724
- const handleConfirmRename = useCallback57(
58749
+ const handleConfirmRename = useCallback58(
58725
58750
  (name) => {
58726
58751
  if (renameTarget) void renameDialog(renameTarget.id, name);
58727
58752
  setRenameTarget(null);
58728
58753
  },
58729
58754
  [renameTarget, renameDialog]
58730
58755
  );
58731
- const handleConfirmArchive = useCallback57(async () => {
58756
+ const handleConfirmArchive = useCallback58(async () => {
58732
58757
  if (archiveTarget) {
58733
58758
  try {
58734
58759
  await archiveDialog(archiveTarget.id);
@@ -58749,7 +58774,7 @@ function useChatDialogManager({
58749
58774
  const [archivedLoading, setArchivedLoading] = useState124(false);
58750
58775
  const [archivedPending, setArchivedPending] = useState124(false);
58751
58776
  const archivedRequestIdRef = useRef81(0);
58752
- const loadArchivedPage = useCallback57(
58777
+ const loadArchivedPage = useCallback58(
58753
58778
  async (cursor) => {
58754
58779
  if (!fetchArchivedDialogs) return;
58755
58780
  const requestId = ++archivedRequestIdRef.current;
@@ -58784,16 +58809,16 @@ function useChatDialogManager({
58784
58809
  },
58785
58810
  [fetchArchivedDialogs]
58786
58811
  );
58787
- const openArchive = useCallback57(() => {
58812
+ const openArchive = useCallback58(() => {
58788
58813
  setArchiveOpen(true);
58789
58814
  void loadArchivedPage();
58790
58815
  }, [loadArchivedPage]);
58791
- const closeArchive = useCallback57(() => setArchiveOpen(false), []);
58816
+ const closeArchive = useCallback58(() => setArchiveOpen(false), []);
58792
58817
  const [viewingArchivedId, setViewingArchivedId] = useState124(
58793
58818
  null
58794
58819
  );
58795
58820
  const [openingDialogId, setOpeningDialogId] = useState124(null);
58796
- const handleSelectDialog = useCallback57(
58821
+ const handleSelectDialog = useCallback58(
58797
58822
  (id) => {
58798
58823
  setViewingArchivedId(null);
58799
58824
  setOpeningDialogId(id);
@@ -58802,7 +58827,7 @@ function useChatDialogManager({
58802
58827
  [selectDialog]
58803
58828
  );
58804
58829
  const isOpeningDialog = openingDialogId != null && openingDialogId === activeDialogId;
58805
- const handleArchivedSelect = useCallback57(
58830
+ const handleArchivedSelect = useCallback58(
58806
58831
  (id) => {
58807
58832
  setArchiveOpen(false);
58808
58833
  setOpeningDialogId(null);
@@ -58812,7 +58837,7 @@ function useChatDialogManager({
58812
58837
  [selectDialog]
58813
58838
  );
58814
58839
  const [restoreTarget, setRestoreTarget] = useState124(null);
58815
- const handleConfirmRestore = useCallback57(async () => {
58840
+ const handleConfirmRestore = useCallback58(async () => {
58816
58841
  if (restoreTarget) {
58817
58842
  try {
58818
58843
  await unarchiveDialog?.(restoreTarget.id);
@@ -58826,7 +58851,7 @@ function useChatDialogManager({
58826
58851
  setRestoreTarget(null);
58827
58852
  }, [restoreTarget, unarchiveDialog]);
58828
58853
  const isViewingArchived = viewingArchivedId != null && viewingArchivedId === activeDialogId;
58829
- const handleBack = useCallback57(() => {
58854
+ const handleBack = useCallback58(() => {
58830
58855
  const wasArchived = isViewingArchived;
58831
58856
  setViewingArchivedId(null);
58832
58857
  setOpeningDialogId(null);
@@ -58834,7 +58859,7 @@ function useChatDialogManager({
58834
58859
  clearMessages();
58835
58860
  if (wasArchived) setArchiveOpen(true);
58836
58861
  }, [isViewingArchived, selectDialog, clearMessages]);
58837
- const resetToNewChat = useCallback57(() => {
58862
+ const resetToNewChat = useCallback58(() => {
58838
58863
  setViewingArchivedId(null);
58839
58864
  setOpeningDialogId(null);
58840
58865
  selectDialog(null);
@@ -59326,7 +59351,7 @@ function EmbeddableChatInner({
59326
59351
  const initialActiveMode = controlledActiveMode ?? defaultActiveMode ?? (effectiveModes.guide ? "guide" : "mingo");
59327
59352
  const [uncontrolledActiveMode, setUncontrolledActiveMode] = useState125(initialActiveMode);
59328
59353
  const activeMode = controlledActiveMode ?? uncontrolledActiveMode;
59329
- const handleActiveModeChange = useCallback58(
59354
+ const handleActiveModeChange = useCallback59(
59330
59355
  (next) => {
59331
59356
  if (controlledActiveMode === void 0) {
59332
59357
  setUncontrolledActiveMode(next);
@@ -59432,7 +59457,7 @@ function EmbeddableChatInner({
59432
59457
  for (const t of contextEntityTypes ?? []) byType.set(t.type, t.icon);
59433
59458
  return (item) => byType.get(item.type);
59434
59459
  }, [contextEntityTypes]);
59435
- const toggleContextItem = useCallback58(
59460
+ const toggleContextItem = useCallback59(
59436
59461
  (item) => {
59437
59462
  const key = `${item.type}:${item.id}`;
59438
59463
  if (mentionActiveRef.current) {
@@ -59455,7 +59480,7 @@ function EmbeddableChatInner({
59455
59480
  },
59456
59481
  [contextMaxItems, contextItems, mentionMarkerByType, resolveContextIcon]
59457
59482
  );
59458
- const removeContextItem = useCallback58((item) => {
59483
+ const removeContextItem = useCallback59((item) => {
59459
59484
  const key = `${item.type}:${item.id}`;
59460
59485
  setContextItems((prev) => prev.filter((p) => `${p.type}:${p.id}` !== key));
59461
59486
  if (mentionKeysRef.current.has(key)) {
@@ -59465,7 +59490,7 @@ function EmbeddableChatInner({
59465
59490
  chatInputRef.current?.setValue(next);
59466
59491
  }
59467
59492
  }, [mentionMarkerByType]);
59468
- const handleContextValueChange = useCallback58((value) => {
59493
+ const handleContextValueChange = useCallback59((value) => {
59469
59494
  for (const key of Array.from(mentionKeysRef.current)) {
59470
59495
  if (!value.includes(`@${mentionTokenOf(key, mentionMarkerByType)}`)) {
59471
59496
  mentionKeysRef.current.delete(key);
@@ -59473,24 +59498,24 @@ function EmbeddableChatInner({
59473
59498
  }
59474
59499
  }
59475
59500
  }, [mentionMarkerByType]);
59476
- const openContextPicker = useCallback58(() => {
59501
+ const openContextPicker = useCallback59(() => {
59477
59502
  setMentionQuery(null);
59478
59503
  setContextPickerOpen(true);
59479
59504
  }, []);
59480
- const closeContextPicker = useCallback58(() => {
59505
+ const closeContextPicker = useCallback59(() => {
59481
59506
  if (mentionActiveRef.current) {
59482
59507
  chatInputRef.current?.removeMentionTrigger();
59483
59508
  }
59484
59509
  setContextPickerOpen(false);
59485
59510
  setMentionQuery(null);
59486
59511
  }, []);
59487
- const handleMentionQueryChange = useCallback58((query) => {
59512
+ const handleMentionQueryChange = useCallback59((query) => {
59488
59513
  setMentionQuery(query);
59489
59514
  setContextPickerOpen(query !== null);
59490
59515
  }, []);
59491
59516
  const resolvedBaseRoute = baseRoute || (source === "flamingo" ? "/knowledge-base" : "/data-room");
59492
- const handleClose = useCallback58(() => setIsOpen(false), [setIsOpen]);
59493
- const handleNavigationClose = useCallback58(() => {
59517
+ const handleClose = useCallback59(() => setIsOpen(false), [setIsOpen]);
59518
+ const handleNavigationClose = useCallback59(() => {
59494
59519
  navigatingAwayRef.current = true;
59495
59520
  setIsOpen(false);
59496
59521
  }, [setIsOpen]);
@@ -59498,7 +59523,7 @@ function EmbeddableChatInner({
59498
59523
  () => ({ closeChat: handleNavigationClose }),
59499
59524
  [handleNavigationClose]
59500
59525
  );
59501
- const renderEntityCard = useCallback58(
59526
+ const renderEntityCard = useCallback59(
59502
59527
  (reference) => renderChatInlineEntityCard(reference, {
59503
59528
  onDiscuss: discussRef,
59504
59529
  onDisplay: displayRef,
@@ -59561,7 +59586,7 @@ function EmbeddableChatInner({
59561
59586
  }
59562
59587
  return mapped;
59563
59588
  }, [rawMessages, guideUserName, guideUserAvatar]);
59564
- const handleSend = useCallback58(
59589
+ const handleSend = useCallback59(
59565
59590
  (text) => {
59566
59591
  let augmentedText = text;
59567
59592
  if (readyAttachments.length > 0) {
@@ -59581,7 +59606,7 @@ function EmbeddableChatInner({
59581
59606
  },
59582
59607
  [sendMessage, readyAttachments, viewUrlPrefix, clearAttachments, contextItems]
59583
59608
  );
59584
- const handleAskSelect = useCallback58(
59609
+ const handleAskSelect = useCallback59(
59585
59610
  (label) => {
59586
59611
  sendMessage(label);
59587
59612
  },
@@ -59649,7 +59674,7 @@ function EmbeddableChatInner({
59649
59674
  fetchArchivedDialogs: mingoCaps.fetchArchivedDialogs,
59650
59675
  unarchiveDialog: mingoCaps.unarchiveDialog
59651
59676
  });
59652
- const handleOpen = useCallback58(() => setIsOpen(true), [setIsOpen]);
59677
+ const handleOpen = useCallback59(() => setIsOpen(true), [setIsOpen]);
59653
59678
  useCloseOnNavigation(handleNavigationClose, null);
59654
59679
  useEffect94(() => {
59655
59680
  const handler = (e) => {
@@ -59735,7 +59760,7 @@ function EmbeddableChatInner({
59735
59760
  setPanelWidth(el.clientWidth);
59736
59761
  return () => ro.disconnect();
59737
59762
  }, []);
59738
- const setPanelNode = useCallback58((node) => {
59763
+ const setPanelNode = useCallback59((node) => {
59739
59764
  panelMeasureRef.current = node;
59740
59765
  setPanelBoundary(node);
59741
59766
  }, []);
@@ -59747,7 +59772,7 @@ function EmbeddableChatInner({
59747
59772
  } catch {
59748
59773
  }
59749
59774
  }, []);
59750
- const toggleRailCollapsed = useCallback58(() => {
59775
+ const toggleRailCollapsed = useCallback59(() => {
59751
59776
  setRailCollapsed((prev) => {
59752
59777
  const next = !prev;
59753
59778
  try {
@@ -59782,7 +59807,7 @@ function EmbeddableChatInner({
59782
59807
  const headerPersonName = headerOwner?.name?.trim() || headerUserName;
59783
59808
  const headerPersonAvatarUrl = headerOwner ? headerOwner.avatarUrl?.trim() || void 0 : identityUser?.avatarUrl?.trim() || userAvatarUrl?.trim() || void 0;
59784
59809
  const headerAvatar = headerPersonName || headerPersonAvatarUrl ? { name: headerPersonName, avatarUrl: headerPersonAvatarUrl } : void 0;
59785
- const handleNewChat = useCallback58(() => {
59810
+ const handleNewChat = useCallback59(() => {
59786
59811
  resetToNewChat();
59787
59812
  }, [resetToNewChat]);
59788
59813
  const splitHeaderMenuItems = [
@@ -60891,6 +60916,7 @@ export {
60891
60916
  NETWORK_CONFIG,
60892
60917
  useChunkCatchup,
60893
60918
  useScriptedStream,
60919
+ RESYNC_AFTER_HIDDEN_MS,
60894
60920
  useJetStreamDialogSubscription,
60895
60921
  useNatsDialogSubscription,
60896
60922
  buildNatsWsUrl,
@@ -61400,4 +61426,4 @@ export {
61400
61426
  LogsList,
61401
61427
  assets
61402
61428
  };
61403
- //# sourceMappingURL=chunk-6AQKSCZ5.js.map
61429
+ //# sourceMappingURL=chunk-YJLQQGLH.js.map