@arbidocs/blocks 0.4.128 → 0.4.130

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 (236) hide show
  1. package/README.md +25 -10
  2. package/dist/{StreamedArtifactEditor-EEYAXJ4H.cjs → StreamedArtifactEditor-TQAND4H5.cjs} +6 -5
  3. package/dist/StreamedArtifactEditor-TQAND4H5.cjs.map +1 -0
  4. package/dist/{StreamedArtifactEditor-TDATDYD2.js → StreamedArtifactEditor-XQNANTWM.js} +4 -3
  5. package/dist/StreamedArtifactEditor-XQNANTWM.js.map +1 -0
  6. package/dist/agents/index.cjs +304 -304
  7. package/dist/agents/index.js +12 -12
  8. package/dist/artifacts/ArtifactCodeView.d.ts +6 -0
  9. package/dist/artifacts/ArtifactPreview.d.ts +22 -0
  10. package/dist/artifacts/index.cjs +50 -21
  11. package/dist/artifacts/index.d.ts +3 -0
  12. package/dist/artifacts/index.js +2 -1
  13. package/dist/artifacts/sandbox-policy.d.ts +34 -0
  14. package/dist/artifacts/sandboxDocument.d.ts +7 -0
  15. package/dist/calendar/CalendarPrint.d.ts +25 -0
  16. package/dist/calendar/booking-slots.d.ts +21 -0
  17. package/dist/calendar/index.cjs +440 -243
  18. package/dist/calendar/index.cjs.map +1 -1
  19. package/dist/calendar/index.d.ts +4 -0
  20. package/dist/calendar/index.js +282 -151
  21. package/dist/calendar/index.js.map +1 -1
  22. package/dist/calendar/print-layout.d.ts +16 -0
  23. package/dist/calendar/printCalendar.d.ts +6 -0
  24. package/dist/calls/composite-canvas.d.ts +52 -0
  25. package/dist/calls/index.cjs +376 -3
  26. package/dist/calls/index.cjs.map +1 -1
  27. package/dist/calls/index.d.ts +3 -0
  28. package/dist/calls/index.js +360 -5
  29. package/dist/calls/index.js.map +1 -1
  30. package/dist/calls/ringtone.d.ts +16 -0
  31. package/dist/calls/voice-levels.d.ts +32 -0
  32. package/dist/chat/ThreadVisualizer.d.ts +28 -0
  33. package/dist/chat/index.cjs +156 -140
  34. package/dist/chat/index.d.ts +2 -0
  35. package/dist/chat/index.js +5 -5
  36. package/dist/chat/open-document.d.ts +5 -1
  37. package/dist/chat/thread-diagram.d.ts +26 -0
  38. package/dist/{chunk-7HAM7Y5U.js → chunk-2DFDFOM7.js} +3 -3
  39. package/dist/{chunk-7HAM7Y5U.js.map → chunk-2DFDFOM7.js.map} +1 -1
  40. package/dist/{chunk-54ANPPMV.js → chunk-2PNNCEPH.js} +4 -4
  41. package/dist/{chunk-54ANPPMV.js.map → chunk-2PNNCEPH.js.map} +1 -1
  42. package/dist/{chunk-DQCYCEDR.js → chunk-2Q7FDZAY.js} +3 -3
  43. package/dist/{chunk-DQCYCEDR.js.map → chunk-2Q7FDZAY.js.map} +1 -1
  44. package/dist/{chunk-INW76PEL.cjs → chunk-2YV7FBLO.cjs} +175 -2
  45. package/dist/chunk-2YV7FBLO.cjs.map +1 -0
  46. package/dist/{chunk-S7PSMMRG.js → chunk-444XKG46.js} +3 -3
  47. package/dist/{chunk-S7PSMMRG.js.map → chunk-444XKG46.js.map} +1 -1
  48. package/dist/{chunk-FSBY2S4V.cjs → chunk-4QIIDXLF.cjs} +10 -10
  49. package/dist/{chunk-FSBY2S4V.cjs.map → chunk-4QIIDXLF.cjs.map} +1 -1
  50. package/dist/{chunk-OYMWV45N.js → chunk-4RLCRFZS.js} +63 -13
  51. package/dist/chunk-4RLCRFZS.js.map +1 -0
  52. package/dist/{chunk-NZUQFF35.cjs → chunk-4S5IDT5F.cjs} +234 -5
  53. package/dist/chunk-4S5IDT5F.cjs.map +1 -0
  54. package/dist/{chunk-CJBN5HIS.js → chunk-4UMXQPNA.js} +20 -8
  55. package/dist/chunk-4UMXQPNA.js.map +1 -0
  56. package/dist/{chunk-KELGOCJA.js → chunk-65S53MZK.js} +174 -5
  57. package/dist/chunk-65S53MZK.js.map +1 -0
  58. package/dist/{chunk-IBZJYCYM.js → chunk-66TA5IBN.js} +17 -25
  59. package/dist/chunk-66TA5IBN.js.map +1 -0
  60. package/dist/{chunk-HM23LXUP.cjs → chunk-6AALMYPS.cjs} +3 -3
  61. package/dist/{chunk-HM23LXUP.cjs.map → chunk-6AALMYPS.cjs.map} +1 -1
  62. package/dist/{chunk-OR4CO743.cjs → chunk-AAFX64WD.cjs} +3 -3
  63. package/dist/{chunk-OR4CO743.cjs.map → chunk-AAFX64WD.cjs.map} +1 -1
  64. package/dist/{chunk-MUMH3Z6K.cjs → chunk-ARDHLU73.cjs} +61 -11
  65. package/dist/chunk-ARDHLU73.cjs.map +1 -0
  66. package/dist/chunk-BIXHB4LV.cjs +178 -0
  67. package/dist/chunk-BIXHB4LV.cjs.map +1 -0
  68. package/dist/chunk-C4WSHRR6.cjs +166 -0
  69. package/dist/chunk-C4WSHRR6.cjs.map +1 -0
  70. package/dist/{chunk-ZAVEMQ37.cjs → chunk-DWZXSPMB.cjs} +3 -3
  71. package/dist/{chunk-ZAVEMQ37.cjs.map → chunk-DWZXSPMB.cjs.map} +1 -1
  72. package/dist/{chunk-VW2C2AZL.js → chunk-ENDP7JER.js} +3 -3
  73. package/dist/{chunk-VW2C2AZL.js.map → chunk-ENDP7JER.js.map} +1 -1
  74. package/dist/{chunk-5HFPRI3W.js → chunk-FUTMU4FR.js} +3 -3
  75. package/dist/{chunk-5HFPRI3W.js.map → chunk-FUTMU4FR.js.map} +1 -1
  76. package/dist/{chunk-P5ST47VY.js → chunk-GDBDHOI4.js} +3 -3
  77. package/dist/{chunk-P5ST47VY.js.map → chunk-GDBDHOI4.js.map} +1 -1
  78. package/dist/chunk-GTCC2VAR.js +153 -0
  79. package/dist/chunk-GTCC2VAR.js.map +1 -0
  80. package/dist/{chunk-3BJLNKOB.cjs → chunk-GZPTWHP5.cjs} +22 -10
  81. package/dist/chunk-GZPTWHP5.cjs.map +1 -0
  82. package/dist/{chunk-OUW6G4O2.cjs → chunk-HFGXA5CL.cjs} +4 -4
  83. package/dist/{chunk-OUW6G4O2.cjs.map → chunk-HFGXA5CL.cjs.map} +1 -1
  84. package/dist/{chunk-SWQX6CTT.cjs → chunk-JKB7WT7L.cjs} +2 -2
  85. package/dist/chunk-JKB7WT7L.cjs.map +1 -0
  86. package/dist/{chunk-D4YR56FV.cjs → chunk-KYDRUFWT.cjs} +5 -5
  87. package/dist/{chunk-D4YR56FV.cjs.map → chunk-KYDRUFWT.cjs.map} +1 -1
  88. package/dist/chunk-NS4JD2VR.js +22 -0
  89. package/dist/chunk-NS4JD2VR.js.map +1 -0
  90. package/dist/{chunk-S6BOINC4.cjs → chunk-OGBXV326.cjs} +7 -7
  91. package/dist/{chunk-S6BOINC4.cjs.map → chunk-OGBXV326.cjs.map} +1 -1
  92. package/dist/{chunk-DJM7DLCT.cjs → chunk-OPTBQSCV.cjs} +3 -3
  93. package/dist/{chunk-DJM7DLCT.cjs.map → chunk-OPTBQSCV.cjs.map} +1 -1
  94. package/dist/{chunk-GFYGYME3.js → chunk-OQ7RUNOC.js} +3 -3
  95. package/dist/{chunk-GFYGYME3.js.map → chunk-OQ7RUNOC.js.map} +1 -1
  96. package/dist/{chunk-WV4IDVDQ.cjs → chunk-PJJY6CYL.cjs} +11 -11
  97. package/dist/{chunk-WV4IDVDQ.cjs.map → chunk-PJJY6CYL.cjs.map} +1 -1
  98. package/dist/{chunk-CXLVI3SB.js → chunk-PUCY3UXN.js} +3 -3
  99. package/dist/{chunk-CXLVI3SB.js.map → chunk-PUCY3UXN.js.map} +1 -1
  100. package/dist/{chunk-ZV3BKLFY.cjs → chunk-QDEODGXE.cjs} +5 -5
  101. package/dist/{chunk-ZV3BKLFY.cjs.map → chunk-QDEODGXE.cjs.map} +1 -1
  102. package/dist/{chunk-7BJRLP3U.js → chunk-QYTYW74G.js} +5 -5
  103. package/dist/{chunk-7BJRLP3U.js.map → chunk-QYTYW74G.js.map} +1 -1
  104. package/dist/{chunk-A7NCSZAP.cjs → chunk-QZTNTP75.cjs} +17 -25
  105. package/dist/chunk-QZTNTP75.cjs.map +1 -0
  106. package/dist/{chunk-OB5F4577.cjs → chunk-R26BK7YL.cjs} +4 -4
  107. package/dist/{chunk-OB5F4577.cjs.map → chunk-R26BK7YL.cjs.map} +1 -1
  108. package/dist/{chunk-A2YAC22G.js → chunk-RI6DZA5X.js} +3 -3
  109. package/dist/{chunk-A2YAC22G.js.map → chunk-RI6DZA5X.js.map} +1 -1
  110. package/dist/{chunk-LC2KJSUS.cjs → chunk-SARREDFP.cjs} +46 -46
  111. package/dist/{chunk-LC2KJSUS.cjs.map → chunk-SARREDFP.cjs.map} +1 -1
  112. package/dist/{chunk-ZCHSJUCI.js → chunk-SZX44LCT.js} +231 -6
  113. package/dist/chunk-SZX44LCT.js.map +1 -0
  114. package/dist/{chunk-7QDX2CO4.cjs → chunk-TP6PLDNM.cjs} +4 -4
  115. package/dist/{chunk-7QDX2CO4.cjs.map → chunk-TP6PLDNM.cjs.map} +1 -1
  116. package/dist/{chunk-W27VK32R.cjs → chunk-TT6XV6WM.cjs} +84 -84
  117. package/dist/{chunk-W27VK32R.cjs.map → chunk-TT6XV6WM.cjs.map} +1 -1
  118. package/dist/{chunk-KLOSOT26.js → chunk-UMIY4SQS.js} +11 -11
  119. package/dist/{chunk-KLOSOT26.js.map → chunk-UMIY4SQS.js.map} +1 -1
  120. package/dist/chunk-VG24E4JJ.cjs +26 -0
  121. package/dist/chunk-VG24E4JJ.cjs.map +1 -0
  122. package/dist/{chunk-ECERC6TI.js → chunk-VHJHY7TT.js} +3 -3
  123. package/dist/{chunk-ECERC6TI.js.map → chunk-VHJHY7TT.js.map} +1 -1
  124. package/dist/{chunk-D3N67Q4D.js → chunk-W3VYZXNS.js} +3 -3
  125. package/dist/{chunk-D3N67Q4D.js.map → chunk-W3VYZXNS.js.map} +1 -1
  126. package/dist/{chunk-JK45LSIH.cjs → chunk-WXYQ66KC.cjs} +5 -5
  127. package/dist/{chunk-JK45LSIH.cjs.map → chunk-WXYQ66KC.cjs.map} +1 -1
  128. package/dist/{chunk-ZCF2JJFA.js → chunk-Y3KA6X7B.js} +3 -3
  129. package/dist/{chunk-ZCF2JJFA.js.map → chunk-Y3KA6X7B.js.map} +1 -1
  130. package/dist/{chunk-GYCQ3FNL.js → chunk-YBLIKTJK.js} +2 -2
  131. package/dist/chunk-YBLIKTJK.js.map +1 -0
  132. package/dist/chunk-YNIBUKV5.js +163 -0
  133. package/dist/chunk-YNIBUKV5.js.map +1 -0
  134. package/dist/citations/index.cjs +12 -11
  135. package/dist/citations/index.js +3 -2
  136. package/dist/collaboration/index.cjs +51 -51
  137. package/dist/collaboration/index.js +3 -3
  138. package/dist/components/DroppableContainer.d.ts +6 -0
  139. package/dist/components/GridRowNavigator.d.ts +29 -0
  140. package/dist/components/LoadingIndicator.d.ts +21 -0
  141. package/dist/components/RowNavigatorControls.d.ts +29 -0
  142. package/dist/components/SharedCell.d.ts +27 -0
  143. package/dist/connect/docx.cjs +7 -5
  144. package/dist/connect/docx.cjs.map +1 -1
  145. package/dist/connect/docx.js +6 -4
  146. package/dist/connect/docx.js.map +1 -1
  147. package/dist/connect/index.cjs +270 -227
  148. package/dist/connect/index.cjs.map +1 -1
  149. package/dist/connect/index.d.ts +1 -1
  150. package/dist/connect/index.js +199 -156
  151. package/dist/connect/index.js.map +1 -1
  152. package/dist/connection/ConnectedSettings.d.ts +46 -20
  153. package/dist/connection/ConnectionProvider.d.ts +5 -0
  154. package/dist/connection/mail/ConnectedMailComposer.d.ts +2 -3
  155. package/dist/connection/mail/ConnectedMailbox.d.ts +2 -3
  156. package/dist/connection/mail/MailComposerForm.d.ts +2 -3
  157. package/dist/connection/mail/index.d.ts +2 -2
  158. package/dist/connection/mail/mailbox.d.ts +1 -4
  159. package/dist/connection/mail/types.d.ts +0 -8
  160. package/dist/document-tools/index.cjs +1 -1
  161. package/dist/document-tools/index.js +1 -1
  162. package/dist/facts/fact-citations.d.ts +56 -0
  163. package/dist/facts/fact-table-column-resize.d.ts +18 -0
  164. package/dist/facts/index.cjs +198 -29
  165. package/dist/facts/index.cjs.map +1 -1
  166. package/dist/facts/index.d.ts +2 -1
  167. package/dist/facts/index.js +187 -27
  168. package/dist/facts/index.js.map +1 -1
  169. package/dist/files/index.cjs +4 -4
  170. package/dist/files/index.js +3 -3
  171. package/dist/home/index.cjs +20 -19
  172. package/dist/home/index.cjs.map +1 -1
  173. package/dist/home/index.js +5 -4
  174. package/dist/home/index.js.map +1 -1
  175. package/dist/index.cjs +877 -679
  176. package/dist/index.cjs.map +1 -1
  177. package/dist/index.d.ts +7 -1
  178. package/dist/index.js +207 -30
  179. package/dist/index.js.map +1 -1
  180. package/dist/provider/BlocksProvider.d.ts +39 -4
  181. package/dist/provider/dialogs.d.ts +31 -0
  182. package/dist/retrieval/index.cjs +5 -4
  183. package/dist/retrieval/index.js +3 -2
  184. package/dist/sandboxDocument-JLEETIWW.js +71 -0
  185. package/dist/sandboxDocument-JLEETIWW.js.map +1 -0
  186. package/dist/sandboxDocument-WQUNODSC.cjs +76 -0
  187. package/dist/sandboxDocument-WQUNODSC.cjs.map +1 -0
  188. package/dist/settings/DraggableHeader.d.ts +10 -0
  189. package/dist/settings/FilterChip.d.ts +15 -0
  190. package/dist/settings/MessageJsonTree.d.ts +7 -0
  191. package/dist/settings/MoreInfo.d.ts +25 -0
  192. package/dist/settings/PlanCard.d.ts +1 -1
  193. package/dist/settings/index.cjs +363 -266
  194. package/dist/settings/index.cjs.map +1 -1
  195. package/dist/settings/index.d.ts +4 -1
  196. package/dist/settings/index.js +317 -222
  197. package/dist/settings/index.js.map +1 -1
  198. package/dist/settings/message-schema-hints.d.ts +19 -0
  199. package/dist/shell/index.cjs +48 -47
  200. package/dist/shell/index.js +4 -3
  201. package/dist/site/index.cjs +5 -5
  202. package/dist/site/index.js +1 -1
  203. package/dist/studio/index.cjs +19 -18
  204. package/dist/studio/index.cjs.map +1 -1
  205. package/dist/studio/index.js +11 -10
  206. package/dist/studio/index.js.map +1 -1
  207. package/dist/workflow-canvas/index.cjs +65 -65
  208. package/dist/workflow-canvas/index.js +13 -13
  209. package/dist/workspaces/index.cjs +42 -3
  210. package/dist/workspaces/index.cjs.map +1 -1
  211. package/dist/workspaces/index.d.ts +1 -0
  212. package/dist/workspaces/index.js +38 -3
  213. package/dist/workspaces/index.js.map +1 -1
  214. package/dist/workspaces/workspace-type.d.ts +29 -0
  215. package/node_modules/@arbidocs/coedit/package.json +1 -1
  216. package/package.json +10 -4
  217. package/dist/StreamedArtifactEditor-EEYAXJ4H.cjs.map +0 -1
  218. package/dist/StreamedArtifactEditor-TDATDYD2.js.map +0 -1
  219. package/dist/chunk-3BJLNKOB.cjs.map +0 -1
  220. package/dist/chunk-76JDDMSP.js +0 -31
  221. package/dist/chunk-76JDDMSP.js.map +0 -1
  222. package/dist/chunk-A7NCSZAP.cjs.map +0 -1
  223. package/dist/chunk-C54XEN5T.cjs +0 -34
  224. package/dist/chunk-C54XEN5T.cjs.map +0 -1
  225. package/dist/chunk-CJBN5HIS.js.map +0 -1
  226. package/dist/chunk-GYCQ3FNL.js.map +0 -1
  227. package/dist/chunk-IBZJYCYM.js.map +0 -1
  228. package/dist/chunk-INW76PEL.cjs.map +0 -1
  229. package/dist/chunk-KELGOCJA.js.map +0 -1
  230. package/dist/chunk-MUMH3Z6K.cjs.map +0 -1
  231. package/dist/chunk-NZUQFF35.cjs.map +0 -1
  232. package/dist/chunk-OYMWV45N.js.map +0 -1
  233. package/dist/chunk-SWQX6CTT.cjs.map +0 -1
  234. package/dist/chunk-ZCHSJUCI.js.map +0 -1
  235. package/dist/facts/timezone.d.ts +0 -4
  236. package/dist/settings/FirmPool.d.ts +0 -82
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  import { Toaster } from './chunk-OKERRHLH.js';
3
- import { useAssistantDock, useChatSurface } from './chunk-CXLVI3SB.js';
3
+ import { useAssistantDock, useChatSurface } from './chunk-PUCY3UXN.js';
4
4
  import { BlocksTooltipProvider } from './chunk-7XF5SFJ2.js';
5
5
  import { listOptionId } from './chunk-AA3PT6KR.js';
6
6
  import { speakerAccent, speakerDot } from './chunk-Z3AZ7Q5X.js';
7
7
  import { prefixedTestId, testIdOr } from './chunk-7F6CBP3Z.js';
8
- import { Globe, BookOpen, ChevronsUpDown, Search, SquareSlash, PenLine, Pin, X, Network, ArrowLeft, ArrowRight, Crown, Glasses, Zap, Sparkles, Check, Settings, Plus, Bot, Download, MessageCircleQuestion, Clock, Play, Pause, Loader2, MessageSquare, CheckCircle, Tag, AudioLines, User } from 'lucide-react';
8
+ import { Globe, BookOpen, ChevronsUpDown, Search, SquareSlash, Download, PenLine, Pin, X, Network, ArrowLeft, ArrowRight, Crown, Glasses, Zap, Sparkles, Check, Settings, Plus, Bot, MessageCircleQuestion, Clock, Play, Pause, Loader2, MessageSquare, CheckCircle, Tag, AudioLines, User } from 'lucide-react';
9
9
  import { cn, Button, HoverCardContent, Input, Badge, Tooltip, TooltipTrigger, TooltipContent, Popover, PopoverTrigger, PopoverContent, PassageCard, Tabs, TabsList, TabsTrigger, TabsContent } from '@arbidocs/react/ui';
10
10
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
11
- import { memo, useId, useRef, useEffect, forwardRef, useMemo, useState, useCallback, Fragment as Fragment$1 } from 'react';
11
+ import { memo, useId, useRef, useEffect, forwardRef, useState, useMemo, useCallback, Fragment as Fragment$1 } from 'react';
12
12
  import DOMPurify from 'dompurify';
13
13
 
14
14
  // src/chat/participant-tints.ts
@@ -946,6 +946,231 @@ function ThreadMapDiagram({
946
946
  }
947
947
  );
948
948
  }
949
+
950
+ // src/chat/thread-diagram.ts
951
+ var DIAGRAM_COLORS = {
952
+ userBg: "#f1f5f9",
953
+ // slate-100
954
+ assistantBg: "#ffffff",
955
+ stroke: "#cbd5e1",
956
+ // slate-300
957
+ strokeLight: "#e2e8f0",
958
+ // slate-200
959
+ text: "#334155"
960
+ // slate-700
961
+ };
962
+ function escapeLabel(text) {
963
+ return text.replace(/"/g, "&quot;").replace(/'/g, "&apos;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\[/g, "&#91;").replace(/\]/g, "&#93;").replace(/\(/g, "&#40;").replace(/\)/g, "&#41;").replace(/\{/g, "&#123;").replace(/\}/g, "&#125;");
964
+ }
965
+ function buildThreadDiagram(threads) {
966
+ if (!threads || threads.length === 0) return null;
967
+ const allMessages = /* @__PURE__ */ new Map();
968
+ threads.forEach((thread) => {
969
+ thread.history.forEach((message) => {
970
+ allMessages.set(message.external_id, message);
971
+ });
972
+ });
973
+ const parentToChildren = /* @__PURE__ */ new Map();
974
+ threads.forEach((thread) => {
975
+ thread.history.forEach((message, index) => {
976
+ const messageId = message.external_id;
977
+ let parentId = message.parent_message_ext_id;
978
+ if (!parentId && index > 0) {
979
+ parentId = thread.history[index - 1].external_id;
980
+ console.warn(
981
+ `ThreadVisualizer: Message ${messageId} (${message.role}) missing parent_message_ext_id. Inferred parent: ${parentId}`
982
+ );
983
+ } else if (!parentId) {
984
+ parentId = null;
985
+ }
986
+ if (parentId && !allMessages.has(parentId)) {
987
+ if (index > 0) {
988
+ const fallbackParentId = thread.history[index - 1].external_id;
989
+ console.warn(
990
+ `ThreadVisualizer: Message ${messageId} has invalid parent ${parentId}. Using fallback: ${fallbackParentId}`
991
+ );
992
+ parentId = fallbackParentId;
993
+ } else {
994
+ console.warn(
995
+ `ThreadVisualizer: Message ${messageId} has invalid parent ${parentId} and no fallback. Using root.`
996
+ );
997
+ parentId = null;
998
+ }
999
+ }
1000
+ if (!parentToChildren.has(parentId)) parentToChildren.set(parentId, /* @__PURE__ */ new Set());
1001
+ parentToChildren.get(parentId)?.add(messageId);
1002
+ });
1003
+ });
1004
+ const branchPoints = /* @__PURE__ */ new Set();
1005
+ parentToChildren.forEach((children, parentId) => {
1006
+ if (children.size > 1 && parentId) branchPoints.add(parentId);
1007
+ });
1008
+ allMessages.forEach((message, id) => {
1009
+ if (message.is_branch_point) branchPoints.add(id);
1010
+ });
1011
+ const leafNodes = new Set(threads.map((thread) => thread.leaf_message_ext_id));
1012
+ let diagram = "graph TD\n";
1013
+ diagram += ` classDef user fill:${DIAGRAM_COLORS.userBg},stroke:${DIAGRAM_COLORS.stroke},color:${DIAGRAM_COLORS.text},stroke-width:1px,font-size:12px
1014
+ `;
1015
+ diagram += ` classDef assistant fill:${DIAGRAM_COLORS.assistantBg},stroke:${DIAGRAM_COLORS.strokeLight},color:${DIAGRAM_COLORS.text},stroke-width:1px,font-size:12px
1016
+ `;
1017
+ diagram += ` linkStyle default stroke:${DIAGRAM_COLORS.stroke},stroke-width:1px
1018
+ `;
1019
+ allMessages.forEach((message, id) => {
1020
+ const plain = (message.content || "").replace(/[*_~`#]/g, "");
1021
+ const shortened = plain.substring(0, 180).replace(/\n/g, " ");
1022
+ const content = escapeLabel(shortened) + (shortened.length < plain.length ? "..." : "");
1023
+ let label = `${message.role === "user" ? "User" : "Assistant"}: ${content}`;
1024
+ if (branchPoints.has(id)) label = `${label} \u{1F500}`;
1025
+ if (leafNodes.has(id)) label = `${label} \u{1F3C1}`;
1026
+ diagram += ` ${id}["${label}"]
1027
+ `;
1028
+ diagram += ` class ${id} ${message.role === "user" ? "user" : "assistant"}
1029
+ `;
1030
+ });
1031
+ parentToChildren.forEach((children, parentId) => {
1032
+ children.forEach((childId) => {
1033
+ if (parentId) diagram += ` ${parentId} --> ${childId}
1034
+ `;
1035
+ });
1036
+ });
1037
+ return diagram;
1038
+ }
1039
+ function threadForNode(threads, nodeId) {
1040
+ const messageId = nodeId.replace(/^flowchart-/, "").replace(/-\d+$/, "");
1041
+ if (threads.some((thread) => thread.leaf_message_ext_id === messageId)) return messageId;
1042
+ const containing = threads.find(
1043
+ (thread) => thread.history.some((msg) => msg.external_id === messageId)
1044
+ );
1045
+ return containing ? containing.leaf_message_ext_id : null;
1046
+ }
1047
+ var DEFAULT_THREAD_VISUALIZER_LABELS = {
1048
+ hint: "Click on a message to resume conversation thread.",
1049
+ hintMany: "This conversation has many threads. Click on a message to resume conversation thread."
1050
+ };
1051
+ var mermaidInitialized = false;
1052
+ var mermaidModule = null;
1053
+ async function getMermaid() {
1054
+ if (!mermaidModule) {
1055
+ mermaidModule = (await import('mermaid')).default;
1056
+ }
1057
+ if (!mermaidInitialized) {
1058
+ try {
1059
+ mermaidModule.initialize({
1060
+ startOnLoad: false,
1061
+ flowchart: { useMaxWidth: true, curve: "basis" },
1062
+ securityLevel: "loose"
1063
+ // Required for click interactivity
1064
+ });
1065
+ mermaidInitialized = true;
1066
+ } catch (error) {
1067
+ console.error("Error initializing Mermaid:", error);
1068
+ }
1069
+ }
1070
+ return mermaidModule;
1071
+ }
1072
+ function ThreadVisualizerView({
1073
+ threads,
1074
+ switchToThread,
1075
+ showHeader = true,
1076
+ showDownloadButton = true,
1077
+ className,
1078
+ labels
1079
+ }) {
1080
+ const svgContainerRef = useRef(null);
1081
+ const [isRendering, setIsRendering] = useState(true);
1082
+ const [renderError, setRenderError] = useState(null);
1083
+ const [svgContent, setSvgContent] = useState("");
1084
+ const renderingRef = useRef(false);
1085
+ const mermaidDiagram = useMemo(() => buildThreadDiagram(threads), [threads]);
1086
+ const handleNodeClick = useCallback(
1087
+ (nodeId) => {
1088
+ try {
1089
+ const threadId = threadForNode(threads, nodeId);
1090
+ if (threadId) switchToThread(threadId);
1091
+ } catch (error) {
1092
+ console.error("Error in thread navigation callback:", error);
1093
+ }
1094
+ },
1095
+ [threads, switchToThread]
1096
+ );
1097
+ const saveSvgAsFile = useCallback(() => {
1098
+ if (!svgContent) return;
1099
+ try {
1100
+ const blob = new Blob([svgContent], { type: "image/svg+xml" });
1101
+ const url = URL.createObjectURL(blob);
1102
+ const link = document.createElement("a");
1103
+ link.href = url;
1104
+ link.download = `thread-visualizer-${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}.svg`;
1105
+ document.body.appendChild(link);
1106
+ link.click();
1107
+ document.body.removeChild(link);
1108
+ URL.revokeObjectURL(url);
1109
+ } catch (error) {
1110
+ console.error("Failed to save SVG:", error);
1111
+ }
1112
+ }, [svgContent]);
1113
+ useEffect(() => {
1114
+ if (renderingRef.current || !mermaidDiagram) return;
1115
+ const renderDiagram = async () => {
1116
+ renderingRef.current = true;
1117
+ setIsRendering(true);
1118
+ setRenderError(null);
1119
+ setSvgContent("");
1120
+ try {
1121
+ const renderDiagramId = `mermaid-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
1122
+ const mermaid = await getMermaid();
1123
+ const { svg } = await mermaid.render(renderDiagramId, mermaidDiagram);
1124
+ setSvgContent(svg);
1125
+ setIsRendering(false);
1126
+ } catch (error) {
1127
+ console.error("Error rendering mermaid diagram:", error);
1128
+ setRenderError(error instanceof Error ? error.message : String(error));
1129
+ setIsRendering(false);
1130
+ setSvgContent("");
1131
+ } finally {
1132
+ renderingRef.current = false;
1133
+ }
1134
+ };
1135
+ renderDiagram();
1136
+ }, [mermaidDiagram]);
1137
+ useEffect(() => {
1138
+ if (!svgContent || !svgContainerRef.current) return;
1139
+ const svgElement = svgContainerRef.current.querySelector("svg");
1140
+ if (!svgElement) return;
1141
+ svgElement.style.maxWidth = "100%";
1142
+ svgElement.style.height = "auto";
1143
+ svgElement.style.minHeight = "400px";
1144
+ const textElements = svgElement.getElementsByTagName("text");
1145
+ for (let i = 0; i < textElements.length; i++) {
1146
+ textElements[i].setAttribute("font-family", "system-ui, sans-serif");
1147
+ textElements[i].setAttribute("font-size", "12px");
1148
+ textElements[i].style.fontSize = "12px !important";
1149
+ }
1150
+ svgElement.querySelectorAll("g.node").forEach((element) => {
1151
+ const nodeId = element.getAttribute("id");
1152
+ if (!nodeId) return;
1153
+ element.style.cursor = "pointer";
1154
+ element.addEventListener("click", () => handleNodeClick(nodeId));
1155
+ });
1156
+ }, [svgContent, handleNodeClick]);
1157
+ const l = { ...DEFAULT_THREAD_VISUALIZER_LABELS, ...labels };
1158
+ const hint = showHeader ? threads.length > 5 ? l.hintMany : l.hint : void 0;
1159
+ return /* @__PURE__ */ jsxs(
1160
+ ThreadMap,
1161
+ {
1162
+ hint,
1163
+ onSave: showDownloadButton && svgContent ? saveSvgAsFile : void 0,
1164
+ className,
1165
+ children: [
1166
+ (isRendering || !svgContent || !mermaidDiagram) && !renderError && /* @__PURE__ */ jsx(ThreadMapLoading, {}),
1167
+ renderError && /* @__PURE__ */ jsx(ThreadMapError, { message: renderError }),
1168
+ svgContent && !renderError && /* @__PURE__ */ jsx(ThreadMapDiagram, { svg: svgContent, diagramRef: svgContainerRef })
1169
+ ]
1170
+ }
1171
+ );
1172
+ }
1173
+ var ThreadVisualizer = memo(ThreadVisualizerView);
949
1174
  var LONG_PASTE_CHARACTER_LIMIT = 1e3;
950
1175
  var LONG_PASTE_LINE_LIMIT = 12;
951
1176
  function isLongPastedText(value) {
@@ -1830,6 +2055,6 @@ function transcriptRuns(items, speakerOf, timeOf, gapMs = 2 * 6e4) {
1830
2055
  return continued;
1831
2056
  }
1832
2057
 
1833
- export { AssistantToaster, BranchControls, ComposerAccessories, ComposerTools, ContextActionButton, ContextCheckRow, ContextPanelContent, ContextPanelFooter, ContextPanelTabs, ContextPickerList, ContextPickerRow, ContextSearchInput, ContextSelectList, ContextSelectRow, Conversation, ConversationBody, ConversationFilter, ConversationHeader, ConversationHeaderActions, ConversationHistoryPane, ConversationLoading, ConversationMain, ConversationRoot, ConversationSearchView, ConversationSettingsButton, DEFAULT_BRANCH_CONTROLS_LABELS, DEFAULT_CONVERSATION_LAYOUT_LABELS, DEFAULT_CONVERSATION_PARTS_LABELS, DEFAULT_CONVERSATION_SEARCH_LABELS, DEFAULT_DRAFTING_DOC_CHIP_LABELS, DEFAULT_LABEL_PIN_ROW_LABELS, DEFAULT_MODEL_PRICING_TIP_LABELS, DEFAULT_PENDING_ANSWER_BAR_LABELS, DEFAULT_PINNED_DOC_CHIP_LABELS, DEFAULT_SLASH_MENU_LABELS, DEFAULT_THREAD_MAP_LABELS, DraftingDocChip, LabelPinRow, ModelAutoIcon, ModelConfigureButton, ModelDot, ModelMenuDivider, ModelMenuMessage, ModelOption, ModelOptionLabel, ModelPickerPopover, ModelPickerTrigger, ModelPricingTip, ModelTierIcon, ModelTierOption, ModelTriggerContent, NewChatButton, NewPaChatButton, PaModeBadge, PendingAnswerBar, PinnedDocChip, ProvisionalTranscriptLine, SlashMenu, ThreadMap, ThreadMapDiagram, ThreadMapError, ThreadMapLoading, TranscriptLine, flashMessage, getParticipantTints, hasMessageBody, isLongPastedText, transcriptRuns, useDismissibleCard, useLongPaste, useRecipientDraft };
1834
- //# sourceMappingURL=chunk-ZCHSJUCI.js.map
1835
- //# sourceMappingURL=chunk-ZCHSJUCI.js.map
2058
+ export { AssistantToaster, BranchControls, ComposerAccessories, ComposerTools, ContextActionButton, ContextCheckRow, ContextPanelContent, ContextPanelFooter, ContextPanelTabs, ContextPickerList, ContextPickerRow, ContextSearchInput, ContextSelectList, ContextSelectRow, Conversation, ConversationBody, ConversationFilter, ConversationHeader, ConversationHeaderActions, ConversationHistoryPane, ConversationLoading, ConversationMain, ConversationRoot, ConversationSearchView, ConversationSettingsButton, DEFAULT_BRANCH_CONTROLS_LABELS, DEFAULT_CONVERSATION_LAYOUT_LABELS, DEFAULT_CONVERSATION_PARTS_LABELS, DEFAULT_CONVERSATION_SEARCH_LABELS, DEFAULT_DRAFTING_DOC_CHIP_LABELS, DEFAULT_LABEL_PIN_ROW_LABELS, DEFAULT_MODEL_PRICING_TIP_LABELS, DEFAULT_PENDING_ANSWER_BAR_LABELS, DEFAULT_PINNED_DOC_CHIP_LABELS, DEFAULT_SLASH_MENU_LABELS, DEFAULT_THREAD_MAP_LABELS, DEFAULT_THREAD_VISUALIZER_LABELS, DraftingDocChip, LabelPinRow, ModelAutoIcon, ModelConfigureButton, ModelDot, ModelMenuDivider, ModelMenuMessage, ModelOption, ModelOptionLabel, ModelPickerPopover, ModelPickerTrigger, ModelPricingTip, ModelTierIcon, ModelTierOption, ModelTriggerContent, NewChatButton, NewPaChatButton, PaModeBadge, PendingAnswerBar, PinnedDocChip, ProvisionalTranscriptLine, SlashMenu, ThreadMap, ThreadMapDiagram, ThreadMapError, ThreadMapLoading, ThreadVisualizer, TranscriptLine, buildThreadDiagram, flashMessage, getParticipantTints, hasMessageBody, isLongPastedText, threadForNode, transcriptRuns, useDismissibleCard, useLongPaste, useRecipientDraft };
2059
+ //# sourceMappingURL=chunk-SZX44LCT.js.map
2060
+ //# sourceMappingURL=chunk-SZX44LCT.js.map