@flamingo-stack/openframe-frontend-core 0.0.522 → 0.0.523-1663.4375.1

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