@arbidocs/blocks 0.4.129 → 0.4.131

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 (121) hide show
  1. package/dist/agents/index.cjs +303 -303
  2. package/dist/agents/index.js +11 -11
  3. package/dist/calendar/CalendarPrint.d.ts +25 -0
  4. package/dist/calendar/booking-slots.d.ts +21 -0
  5. package/dist/calendar/index.cjs +381 -97
  6. package/dist/calendar/index.cjs.map +1 -1
  7. package/dist/calendar/index.d.ts +4 -0
  8. package/dist/calendar/index.js +277 -3
  9. package/dist/calendar/index.js.map +1 -1
  10. package/dist/calendar/print-layout.d.ts +16 -0
  11. package/dist/calendar/printCalendar.d.ts +6 -0
  12. package/dist/calls/composite-canvas.d.ts +52 -0
  13. package/dist/calls/index.cjs +374 -1
  14. package/dist/calls/index.cjs.map +1 -1
  15. package/dist/calls/index.d.ts +3 -0
  16. package/dist/calls/index.js +359 -4
  17. package/dist/calls/index.js.map +1 -1
  18. package/dist/calls/ringtone.d.ts +16 -0
  19. package/dist/calls/voice-levels.d.ts +32 -0
  20. package/dist/chat/ThreadVisualizer.d.ts +28 -0
  21. package/dist/chat/index.cjs +151 -135
  22. package/dist/chat/index.d.ts +2 -0
  23. package/dist/chat/index.js +4 -4
  24. package/dist/chat/thread-diagram.d.ts +26 -0
  25. package/dist/{chunk-H2KQ6OSU.js → chunk-26E6PHD2.js} +231 -6
  26. package/dist/chunk-26E6PHD2.js.map +1 -0
  27. package/dist/{chunk-2PNNCEPH.js → chunk-54ANPPMV.js} +4 -4
  28. package/dist/{chunk-2PNNCEPH.js.map → chunk-54ANPPMV.js.map} +1 -1
  29. package/dist/{chunk-IBZJYCYM.js → chunk-66TA5IBN.js} +17 -25
  30. package/dist/chunk-66TA5IBN.js.map +1 -0
  31. package/dist/{chunk-OYMWV45N.js → chunk-7D4W3SAH.js} +51 -4
  32. package/dist/chunk-7D4W3SAH.js.map +1 -0
  33. package/dist/{chunk-2DFDFOM7.js → chunk-7HAM7Y5U.js} +3 -3
  34. package/dist/{chunk-2DFDFOM7.js.map → chunk-7HAM7Y5U.js.map} +1 -1
  35. package/dist/{chunk-7423V6RM.cjs → chunk-7KH4M3KY.cjs} +8 -8
  36. package/dist/{chunk-7423V6RM.cjs.map → chunk-7KH4M3KY.cjs.map} +1 -1
  37. package/dist/{chunk-TGWTLNXW.cjs → chunk-BIXHB4LV.cjs} +3 -2
  38. package/dist/{chunk-TGWTLNXW.cjs.map → chunk-BIXHB4LV.cjs.map} +1 -1
  39. package/dist/{chunk-DZYAAL4H.cjs → chunk-BZF55UCE.cjs} +234 -5
  40. package/dist/chunk-BZF55UCE.cjs.map +1 -0
  41. package/dist/{chunk-3BJLNKOB.cjs → chunk-CDZVC32G.cjs} +5 -5
  42. package/dist/{chunk-3BJLNKOB.cjs.map → chunk-CDZVC32G.cjs.map} +1 -1
  43. package/dist/{chunk-PUCY3UXN.js → chunk-CXLVI3SB.js} +3 -3
  44. package/dist/{chunk-PUCY3UXN.js.map → chunk-CXLVI3SB.js.map} +1 -1
  45. package/dist/{chunk-KYDRUFWT.cjs → chunk-D4YR56FV.cjs} +5 -5
  46. package/dist/{chunk-KYDRUFWT.cjs.map → chunk-D4YR56FV.cjs.map} +1 -1
  47. package/dist/{chunk-6BTCDKCK.js → chunk-DI35D756.js} +4 -4
  48. package/dist/{chunk-6BTCDKCK.js.map → chunk-DI35D756.js.map} +1 -1
  49. package/dist/{chunk-TGJNPKST.js → chunk-GTCC2VAR.js} +3 -3
  50. package/dist/{chunk-TGJNPKST.js.map → chunk-GTCC2VAR.js.map} +1 -1
  51. package/dist/{chunk-6AALMYPS.cjs → chunk-HM23LXUP.cjs} +3 -3
  52. package/dist/{chunk-6AALMYPS.cjs.map → chunk-HM23LXUP.cjs.map} +1 -1
  53. package/dist/{chunk-HSFLEVZY.js → chunk-KLOSOT26.js} +10 -10
  54. package/dist/{chunk-HSFLEVZY.js.map → chunk-KLOSOT26.js.map} +1 -1
  55. package/dist/{chunk-SARREDFP.cjs → chunk-LC2KJSUS.cjs} +46 -46
  56. package/dist/{chunk-SARREDFP.cjs.map → chunk-LC2KJSUS.cjs.map} +1 -1
  57. package/dist/{chunk-MUMH3Z6K.cjs → chunk-LRD7BHAT.cjs} +50 -3
  58. package/dist/chunk-LRD7BHAT.cjs.map +1 -0
  59. package/dist/{chunk-CJBN5HIS.js → chunk-P5HOXWYL.js} +3 -3
  60. package/dist/{chunk-CJBN5HIS.js.map → chunk-P5HOXWYL.js.map} +1 -1
  61. package/dist/{chunk-5Y7JRY7Y.js → chunk-P5ST47VY.js} +3 -3
  62. package/dist/{chunk-5Y7JRY7Y.js.map → chunk-P5ST47VY.js.map} +1 -1
  63. package/dist/{chunk-A7NCSZAP.cjs → chunk-QZTNTP75.cjs} +17 -25
  64. package/dist/chunk-QZTNTP75.cjs.map +1 -0
  65. package/dist/{chunk-ENDP7JER.js → chunk-VW2C2AZL.js} +3 -3
  66. package/dist/{chunk-ENDP7JER.js.map → chunk-VW2C2AZL.js.map} +1 -1
  67. package/dist/{chunk-JLTXVW25.cjs → chunk-W27VK32R.cjs} +78 -78
  68. package/dist/{chunk-JLTXVW25.cjs.map → chunk-W27VK32R.cjs.map} +1 -1
  69. package/dist/{chunk-PJJY6CYL.cjs → chunk-WV4IDVDQ.cjs} +11 -11
  70. package/dist/{chunk-PJJY6CYL.cjs.map → chunk-WV4IDVDQ.cjs.map} +1 -1
  71. package/dist/{chunk-NYHGG2IA.cjs → chunk-ZV3BKLFY.cjs} +3 -3
  72. package/dist/{chunk-NYHGG2IA.cjs.map → chunk-ZV3BKLFY.cjs.map} +1 -1
  73. package/dist/collaboration/index.cjs +9 -9
  74. package/dist/collaboration/index.js +1 -1
  75. package/dist/connect/docx.cjs +4 -4
  76. package/dist/connect/docx.js +3 -3
  77. package/dist/connect/index.cjs +183 -146
  78. package/dist/connect/index.cjs.map +1 -1
  79. package/dist/connect/index.d.ts +1 -1
  80. package/dist/connect/index.js +134 -98
  81. package/dist/connect/index.js.map +1 -1
  82. package/dist/connection/ConnectedSettings.d.ts +42 -7
  83. package/dist/document-tools/index.cjs +1 -1
  84. package/dist/document-tools/index.js +1 -1
  85. package/dist/facts/fact-citations.d.ts +56 -0
  86. package/dist/facts/fact-table-column-resize.d.ts +18 -0
  87. package/dist/facts/index.cjs +194 -8
  88. package/dist/facts/index.cjs.map +1 -1
  89. package/dist/facts/index.d.ts +2 -0
  90. package/dist/facts/index.js +180 -5
  91. package/dist/facts/index.js.map +1 -1
  92. package/dist/files/index.cjs +1 -1
  93. package/dist/files/index.js +1 -1
  94. package/dist/home/index.cjs +17 -17
  95. package/dist/home/index.js +3 -3
  96. package/dist/index.cjs +517 -501
  97. package/dist/index.js +18 -18
  98. package/dist/settings/MoreInfo.d.ts +25 -0
  99. package/dist/settings/PlanCard.d.ts +1 -1
  100. package/dist/settings/index.cjs +79 -225
  101. package/dist/settings/index.cjs.map +1 -1
  102. package/dist/settings/index.d.ts +1 -1
  103. package/dist/settings/index.js +70 -215
  104. package/dist/settings/index.js.map +1 -1
  105. package/dist/shell/index.cjs +1 -1
  106. package/dist/shell/index.js +1 -1
  107. package/dist/site/index.cjs +5 -5
  108. package/dist/site/index.js +1 -1
  109. package/dist/studio/index.cjs +8 -8
  110. package/dist/studio/index.js +6 -6
  111. package/dist/workflow-canvas/index.cjs +64 -64
  112. package/dist/workflow-canvas/index.js +12 -12
  113. package/node_modules/@arbidocs/coedit/package.json +1 -1
  114. package/package.json +9 -4
  115. package/dist/chunk-A7NCSZAP.cjs.map +0 -1
  116. package/dist/chunk-DZYAAL4H.cjs.map +0 -1
  117. package/dist/chunk-H2KQ6OSU.js.map +0 -1
  118. package/dist/chunk-IBZJYCYM.js.map +0 -1
  119. package/dist/chunk-MUMH3Z6K.cjs.map +0 -1
  120. package/dist/chunk-OYMWV45N.js.map +0 -1
  121. package/dist/settings/FirmPool.d.ts +0 -82
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkMUMH3Z6K_cjs = require('./chunk-MUMH3Z6K.cjs');
5
- var chunkPJJY6CYL_cjs = require('./chunk-PJJY6CYL.cjs');
4
+ var chunkLRD7BHAT_cjs = require('./chunk-LRD7BHAT.cjs');
5
+ var chunkWV4IDVDQ_cjs = require('./chunk-WV4IDVDQ.cjs');
6
6
  var chunkSWQX6CTT_cjs = require('./chunk-SWQX6CTT.cjs');
7
7
  var react$1 = require('react');
8
8
  var react = require('@arbidocs/react');
9
9
  var jsxRuntime = require('react/jsx-runtime');
10
10
 
11
11
  function useConnectedAiTask() {
12
- const { assistantConfig } = chunkMUMH3Z6K_cjs.useConnection();
12
+ const { assistantConfig } = chunkLRD7BHAT_cjs.useConnection();
13
13
  const task = react.useAiTask();
14
14
  const kitRun = task.run;
15
15
  const run = react$1.useCallback(
@@ -19,7 +19,7 @@ function useConnectedAiTask() {
19
19
  return { ...task, run };
20
20
  }
21
21
  function useWorkspaceDocs() {
22
- const { workspaceId, fallbackWorkspaceId } = chunkMUMH3Z6K_cjs.useConnection();
22
+ const { workspaceId, fallbackWorkspaceId } = chunkLRD7BHAT_cjs.useConnection();
23
23
  return react.useWorkspaceDocs(workspaceId ?? fallbackWorkspaceId);
24
24
  }
25
25
  function useSemanticSearch() {
@@ -27,7 +27,7 @@ function useSemanticSearch() {
27
27
  return react.useSemanticSearch(docIds);
28
28
  }
29
29
  function useConnectedChat(options) {
30
- const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } = chunkMUMH3Z6K_cjs.useConnection();
30
+ const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } = chunkLRD7BHAT_cjs.useConnection();
31
31
  const wsId = workspaceId ?? fallbackWorkspaceId;
32
32
  const { data: members = [] } = react.useWorkspaceUsers(wsId, {
33
33
  enabled: status === "authenticated" && !!wsId,
@@ -64,7 +64,7 @@ function useConnectedChat(options) {
64
64
  }
65
65
  function ConnectedAssistantDock(props) {
66
66
  const chat = useConnectedChat();
67
- return /* @__PURE__ */ jsxRuntime.jsx(chunkPJJY6CYL_cjs.AssistantDock, { ...props, chat });
67
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkWV4IDVDQ_cjs.AssistantDock, { ...props, chat });
68
68
  }
69
69
 
70
70
  Object.defineProperty(exports, "redlineStats", {
@@ -84,5 +84,5 @@ exports.useConnectedAiTask = useConnectedAiTask;
84
84
  exports.useConnectedChat = useConnectedChat;
85
85
  exports.useSemanticSearch = useSemanticSearch;
86
86
  exports.useWorkspaceDocs = useWorkspaceDocs;
87
- //# sourceMappingURL=chunk-7423V6RM.cjs.map
88
- //# sourceMappingURL=chunk-7423V6RM.cjs.map
87
+ //# sourceMappingURL=chunk-7KH4M3KY.cjs.map
88
+ //# sourceMappingURL=chunk-7KH4M3KY.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/ai.tsx"],"names":["useConnection","useKitAiTask","useCallback","useKitWorkspaceDocs","useKitSemanticSearch","useWorkspaceUsers","useArbiChat","takeOpenDocumentForTurn","jsx","AssistantDock"],"mappings":"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","file":"chunk-7423V6RM.cjs","sourcesContent":["/**\n * The connected agent hooks — thin adapters over the reusable AI kit in\n * `@arbidocs/react`. The streaming/accumulation/search plumbing lives once in\n * the SDK; these hooks only bind the *workspace source* (from the connection\n * context, falling back to the configured workspace) and inject the host's\n * default assistant *configuration* so call sites needn't know the config\n * ext_id. An explicit `opts.model` still wins.\n */\nimport { useCallback } from 'react'\nimport {\n useAiTask as useKitAiTask,\n useWorkspaceDocs as useKitWorkspaceDocs,\n useSemanticSearch as useKitSemanticSearch,\n useArbiChat,\n useWorkspaceUsers,\n type ArbiChat,\n type UseArbiChatOptions,\n type AiRunOptions,\n} from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport { AssistantDock, type AssistantDockProps } from '../chat/AssistantDock'\nimport type { MentionCandidate } from '../chat/mentions'\nimport { takeOpenDocumentForTurn } from '../chat/open-document'\n\nexport type { AiTaskStatus, AiRunOptions, SearchChunk, ArtifactEvent } from '@arbidocs/react'\n\n/** Client-side redlining, re-exported so a host app has one import surface. */\nexport { toRedlineMarkdown, redlineStats, textToArtifact } from '@arbidocs/react'\n\n/**\n * The kit's `useAiTask` with the host's default assistant configuration\n * injected, so call sites needn't know the config ext_id.\n */\nexport function useConnectedAiTask() {\n const { assistantConfig } = useConnection()\n const task = useKitAiTask()\n const kitRun = task.run\n const run = useCallback(\n (question: string, docIds: string[], opts?: AiRunOptions) =>\n kitRun(question, docIds, { ...opts, model: opts?.model ?? assistantConfig }),\n [kitRun, assistantConfig]\n )\n return { ...task, run }\n}\n\n/** Resolve the active workspace + its document ids (what we ground the agent on). */\nexport function useWorkspaceDocs() {\n const { workspaceId, fallbackWorkspaceId } = useConnection()\n return useKitWorkspaceDocs(workspaceId ?? fallbackWorkspaceId)\n}\n\n/** Search the active workspace's documents and return the top matching passages. */\nexport function useSemanticSearch() {\n const { docIds } = useWorkspaceDocs()\n return useKitSemanticSearch(docIds)\n}\n\n/**\n * The chat controller for `ChatPage` bound to the connection: the active workspace and the host's\n * default assistant configuration are injected, so a host writes\n * `<ChatPage chat={useConnectedChat()} />`.\n */\nexport function useConnectedChat(\n options?: Omit<UseArbiChatOptions, 'workspaceId'>\n): ArbiChat & { mentionCandidates: MentionCandidate[] } {\n const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } =\n useConnection()\n const wsId = workspaceId ?? fallbackWorkspaceId\n const { data: members = [] } = useWorkspaceUsers(wsId, {\n enabled: status === 'authenticated' && !!wsId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const mentionCandidates: MentionCandidate[] = [\n { id: 'assistant', kind: 'assistant', label: 'Assistant' },\n ...(status === 'authenticated' ? members : [])\n .filter(\n (member) =>\n !member.agent_ext_id &&\n member.user.external_id !== user?.externalId &&\n !member.user.external_id.startsWith('agt-')\n )\n .map((member) => ({\n id: member.user.external_id,\n kind: 'user' as const,\n label:\n [member.user.given_name, member.user.family_name].filter(Boolean).join(' ') ||\n member.user.email,\n description: member.user.email,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)),\n ]\n const chat = useArbiChat({\n // Drafting mode: each question names the document open beside the chat.\n activeArtifact: () => takeOpenDocumentForTurn({ workspaceId: wsId }),\n ...options,\n workspaceId: wsId,\n model: options?.model ?? assistantConfig,\n })\n return {\n ...chat,\n mentionCandidates,\n messages: chat.messages.map((message) => ({\n ...message,\n ...(message.authorId\n ? {\n senderName:\n message.authorId === user?.externalId\n ? user?.name || user?.email\n : mentionCandidates.find((candidate) => candidate.id === message.authorId)?.label,\n }\n : {}),\n })),\n }\n}\n\n/**\n * The assistant dock bound to the connection: mount it once in the layout (`Shell.Root`'s `aside`)\n * and put `AssistantDockToggle` in the topbar. Chat state lives here, so it survives closing the dock.\n */\nexport function ConnectedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n const chat = useConnectedChat()\n return <AssistantDock {...props} chat={chat} />\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/ai.tsx"],"names":["useConnection","useKitAiTask","useCallback","useKitWorkspaceDocs","useKitSemanticSearch","useWorkspaceUsers","useArbiChat","takeOpenDocumentForTurn","jsx","AssistantDock"],"mappings":"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","file":"chunk-7KH4M3KY.cjs","sourcesContent":["/**\n * The connected agent hooks — thin adapters over the reusable AI kit in\n * `@arbidocs/react`. The streaming/accumulation/search plumbing lives once in\n * the SDK; these hooks only bind the *workspace source* (from the connection\n * context, falling back to the configured workspace) and inject the host's\n * default assistant *configuration* so call sites needn't know the config\n * ext_id. An explicit `opts.model` still wins.\n */\nimport { useCallback } from 'react'\nimport {\n useAiTask as useKitAiTask,\n useWorkspaceDocs as useKitWorkspaceDocs,\n useSemanticSearch as useKitSemanticSearch,\n useArbiChat,\n useWorkspaceUsers,\n type ArbiChat,\n type UseArbiChatOptions,\n type AiRunOptions,\n} from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport { AssistantDock, type AssistantDockProps } from '../chat/AssistantDock'\nimport type { MentionCandidate } from '../chat/mentions'\nimport { takeOpenDocumentForTurn } from '../chat/open-document'\n\nexport type { AiTaskStatus, AiRunOptions, SearchChunk, ArtifactEvent } from '@arbidocs/react'\n\n/** Client-side redlining, re-exported so a host app has one import surface. */\nexport { toRedlineMarkdown, redlineStats, textToArtifact } from '@arbidocs/react'\n\n/**\n * The kit's `useAiTask` with the host's default assistant configuration\n * injected, so call sites needn't know the config ext_id.\n */\nexport function useConnectedAiTask() {\n const { assistantConfig } = useConnection()\n const task = useKitAiTask()\n const kitRun = task.run\n const run = useCallback(\n (question: string, docIds: string[], opts?: AiRunOptions) =>\n kitRun(question, docIds, { ...opts, model: opts?.model ?? assistantConfig }),\n [kitRun, assistantConfig]\n )\n return { ...task, run }\n}\n\n/** Resolve the active workspace + its document ids (what we ground the agent on). */\nexport function useWorkspaceDocs() {\n const { workspaceId, fallbackWorkspaceId } = useConnection()\n return useKitWorkspaceDocs(workspaceId ?? fallbackWorkspaceId)\n}\n\n/** Search the active workspace's documents and return the top matching passages. */\nexport function useSemanticSearch() {\n const { docIds } = useWorkspaceDocs()\n return useKitSemanticSearch(docIds)\n}\n\n/**\n * The chat controller for `ChatPage` bound to the connection: the active workspace and the host's\n * default assistant configuration are injected, so a host writes\n * `<ChatPage chat={useConnectedChat()} />`.\n */\nexport function useConnectedChat(\n options?: Omit<UseArbiChatOptions, 'workspaceId'>\n): ArbiChat & { mentionCandidates: MentionCandidate[] } {\n const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } =\n useConnection()\n const wsId = workspaceId ?? fallbackWorkspaceId\n const { data: members = [] } = useWorkspaceUsers(wsId, {\n enabled: status === 'authenticated' && !!wsId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const mentionCandidates: MentionCandidate[] = [\n { id: 'assistant', kind: 'assistant', label: 'Assistant' },\n ...(status === 'authenticated' ? members : [])\n .filter(\n (member) =>\n !member.agent_ext_id &&\n member.user.external_id !== user?.externalId &&\n !member.user.external_id.startsWith('agt-')\n )\n .map((member) => ({\n id: member.user.external_id,\n kind: 'user' as const,\n label:\n [member.user.given_name, member.user.family_name].filter(Boolean).join(' ') ||\n member.user.email,\n description: member.user.email,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)),\n ]\n const chat = useArbiChat({\n // Drafting mode: each question names the document open beside the chat.\n activeArtifact: () => takeOpenDocumentForTurn({ workspaceId: wsId }),\n ...options,\n workspaceId: wsId,\n model: options?.model ?? assistantConfig,\n })\n return {\n ...chat,\n mentionCandidates,\n messages: chat.messages.map((message) => ({\n ...message,\n ...(message.authorId\n ? {\n senderName:\n message.authorId === user?.externalId\n ? user?.name || user?.email\n : mentionCandidates.find((candidate) => candidate.id === message.authorId)?.label,\n }\n : {}),\n })),\n }\n}\n\n/**\n * The assistant dock bound to the connection: mount it once in the layout (`Shell.Root`'s `aside`)\n * and put `AssistantDockToggle` in the topbar. Chat state lives here, so it survives closing the dock.\n */\nexport function ConnectedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n const chat = useConnectedChat()\n return <AssistantDock {...props} chat={chat} />\n}\n"]}
@@ -153,6 +153,7 @@ function wallArrayOffset(a, zone) {
153
153
  exports.addDays = addDays;
154
154
  exports.addMonths = addMonths;
155
155
  exports.convertWall = convertWall;
156
+ exports.dayOfWeekSun0 = dayOfWeekSun0;
156
157
  exports.detectTimeZone = detectTimeZone;
157
158
  exports.diffDays = diffDays;
158
159
  exports.epochToWallArray = epochToWallArray;
@@ -173,5 +174,5 @@ exports.wallToUtc = wallToUtc;
173
174
  exports.zoneCity = zoneCity;
174
175
  exports.zoneOffsetLabel = zoneOffsetLabel;
175
176
  exports.zoneOffsetMinutes = zoneOffsetMinutes;
176
- //# sourceMappingURL=chunk-TGWTLNXW.cjs.map
177
- //# sourceMappingURL=chunk-TGWTLNXW.cjs.map
177
+ //# sourceMappingURL=chunk-BIXHB4LV.cjs.map
178
+ //# sourceMappingURL=chunk-BIXHB4LV.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/calendar/zone.ts"],"names":["Temporal"],"mappings":"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","file":"chunk-TGWTLNXW.cjs","sourcesContent":["/**\n * Zone math for the calendar. Every conversion between a wall time in a named IANA zone and a UTC\n * instant goes through Temporal (the polyfill, imported as a module: nothing global is patched),\n * so DST gaps/overlaps resolve the way RFC 5545 says (`compatible`: a skipped time moves forward,\n * a repeated time takes the earlier instant). Nothing here reads the browser's local zone.\n */\nimport { Temporal } from 'temporal-polyfill'\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\nconst pad4 = (n: number) => String(n).padStart(4, '0')\n\n/** True when `zone` is a time zone the runtime can resolve. */\nexport function isValidTimeZone(zone: string | null | undefined): zone is string {\n if (!zone) return false\n try {\n Temporal.Now.instant().toZonedDateTimeISO(zone)\n return true\n } catch {\n return false\n }\n}\n\n/** `zone` when valid, else `fallback` (else UTC). */\nexport function safeZone(zone: string | null | undefined, fallback = 'UTC'): string {\n if (isValidTimeZone(zone)) return zone\n return isValidTimeZone(fallback) ? fallback : 'UTC'\n}\n\nfunction toPlainDateTime(wall: string): Temporal.PlainDateTime {\n // Accept `YYYY-MM-DDTHH:MM`, `…:SS` and a bare date (midnight).\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(wall)\n ? Temporal.PlainDate.from(wall).toPlainDateTime()\n : Temporal.PlainDateTime.from(wall)\n}\n\n/** The instant a wall time in `zone` names, as an ISO string ending in `Z` (no milliseconds unless set). */\nexport function wallToUtc(wall: string, zone: string): string {\n const zdt = toPlainDateTime(wall).toZonedDateTime(safeZone(zone), {\n disambiguation: 'compatible',\n })\n return zdt.toInstant().toString()\n}\n\n/** Epoch milliseconds of a wall time in `zone`. */\nexport function wallToEpochMs(wall: string, zone: string): number {\n return toPlainDateTime(wall).toZonedDateTime(safeZone(zone), { disambiguation: 'compatible' })\n .epochMilliseconds\n}\n\nfunction instantOf(utc: string | Date | number): Temporal.Instant {\n if (typeof utc === 'number') return Temporal.Instant.fromEpochMilliseconds(utc)\n if (utc instanceof Date) return Temporal.Instant.fromEpochMilliseconds(utc.getTime())\n return Temporal.Instant.from(utc)\n}\n\n/** The zoned date-time of an instant. */\nexport function zoned(utc: string | Date | number, zone: string): Temporal.ZonedDateTime {\n return instantOf(utc).toZonedDateTimeISO(safeZone(zone))\n}\n\n/** `YYYY-MM-DDTHH:MM` wall time of an instant in `zone`. */\nexport function utcToWall(utc: string | Date | number, zone: string): string {\n const z = zoned(utc, zone)\n return `${pad4(z.year)}-${pad2(z.month)}-${pad2(z.day)}T${pad2(z.hour)}:${pad2(z.minute)}`\n}\n\n/** `YYYY-MM-DD` date of an instant in `zone`. */\nexport function utcToDate(utc: string | Date | number, zone: string): string {\n const z = zoned(utc, zone)\n return `${pad4(z.year)}-${pad2(z.month)}-${pad2(z.day)}`\n}\n\n/** `HH:MM` of an instant in `zone`. */\nexport function utcToTime(utc: string | Date | number, zone: string): string {\n const z = zoned(utc, zone)\n return `${pad2(z.hour)}:${pad2(z.minute)}`\n}\n\n/** Convert a wall time from one zone to the same instant's wall time in another. */\nexport function convertWall(wall: string, fromZone: string, toZone: string): string {\n return utcToWall(wallToUtc(wall, fromZone), toZone)\n}\n\n/** Today's date in `zone`. */\nexport function todayInZone(zone: string, now: Date | number = Date.now()): string {\n return utcToDate(now, zone)\n}\n\n/** Calendar arithmetic on a `YYYY-MM-DD` date. */\nexport function addDays(date: string, days: number): string {\n return Temporal.PlainDate.from(date).add({ days }).toString()\n}\n\nexport function addMonths(date: string, months: number): string {\n return Temporal.PlainDate.from(date).add({ months }).toString()\n}\n\n/** Whole days from `a` to `b` (both `YYYY-MM-DD`). */\nexport function diffDays(a: string, b: string): number {\n return Temporal.PlainDate.from(a).until(Temporal.PlainDate.from(b), { largestUnit: 'days' }).days\n}\n\n/** 0 = Sunday … 6 = Saturday, for a `YYYY-MM-DD` date. */\nexport function dayOfWeekSun0(date: string): number {\n return Temporal.PlainDate.from(date).dayOfWeek % 7\n}\n\n/** The first day of the week containing `date`, for a week starting on `weekStart` (0 = Sunday). */\nexport function startOfWeek(date: string, weekStart: number): string {\n const back = (dayOfWeekSun0(date) - weekStart + 7) % 7\n return addDays(date, -back)\n}\n\n/** ISO-8601 week number of a `YYYY-MM-DD` date. */\nexport function isoWeekNumber(date: string): number {\n return Temporal.PlainDate.from(date).weekOfYear ?? 1\n}\n\n/** Offset of `zone` at an instant, in minutes east of UTC. */\nexport function zoneOffsetMinutes(zone: string, at: string | Date | number = Date.now()): number {\n return Math.round(zoned(at, zone).offsetNanoseconds / 60_000_000_000)\n}\n\n/** `GMT+5:30` / `GMT-4` / `GMT` label for `zone` at an instant. */\nexport function zoneOffsetLabel(zone: string, at: string | Date | number = Date.now()): string {\n const total = zoneOffsetMinutes(zone, at)\n if (total === 0) return 'GMT'\n const sign = total > 0 ? '+' : '-'\n const abs = Math.abs(total)\n const h = Math.floor(abs / 60)\n const m = abs % 60\n return `GMT${sign}${h}${m ? `:${pad2(m)}` : ''}`\n}\n\n/** Short city-ish label for a zone: `America/New_York` → `New York`. */\nexport function zoneCity(zone: string): string {\n const last = zone.split('/').pop() ?? zone\n return last.replace(/_/g, ' ')\n}\n\n/** Every IANA zone the runtime knows (falls back to a short list on old engines). */\nexport function listTimeZones(): string[] {\n try {\n const fn = (Intl as unknown as { supportedValuesOf?: (k: string) => string[] })\n .supportedValuesOf\n const zones = fn ? fn('timeZone') : []\n if (zones.length) return zones.includes('UTC') ? zones : ['UTC', ...zones]\n } catch {\n // fall through\n }\n return [\n 'UTC',\n 'Europe/London',\n 'Europe/Paris',\n 'Europe/Berlin',\n 'America/New_York',\n 'America/Chicago',\n 'America/Denver',\n 'America/Los_Angeles',\n 'Asia/Tokyo',\n 'Asia/Singapore',\n 'Australia/Sydney',\n ]\n}\n\n/** The viewer's zone (only as a default for a new user; rendering always uses an explicit zone). */\nexport function detectTimeZone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC'\n } catch {\n return 'UTC'\n }\n}\n\n/** Format an instant in `zone` with Intl (never the browser zone). */\nexport function formatInZone(\n utc: string | Date | number,\n zone: string,\n options: Intl.DateTimeFormatOptions,\n locale?: string\n): string {\n const ms = instantOf(utc).epochMilliseconds\n return new Intl.DateTimeFormat(locale, { ...options, timeZone: safeZone(zone) }).format(ms)\n}\n\n/** Format a `YYYY-MM-DD` date (zone-free: rendered at UTC noon so no zone can shift the day). */\nexport function formatPlainDate(\n date: string,\n options: Intl.DateTimeFormatOptions,\n locale?: string\n): string {\n return new Intl.DateTimeFormat(locale, { ...options, timeZone: 'UTC' }).format(\n Date.parse(`${date}T12:00:00Z`)\n )\n}\n\n/** Wall-clock array FullCalendar's NamedTimeZoneImpl speaks: [y, m0, d, h, min, s, ms]. */\nexport function epochToWallArray(ms: number, zone: string): number[] {\n const z = Temporal.Instant.fromEpochMilliseconds(ms).toZonedDateTimeISO(zone)\n return [z.year, z.month - 1, z.day, z.hour, z.minute, z.second, z.millisecond]\n}\n\n/** Offset (minutes east of UTC) for a wall-clock array in `zone`, resolving gaps `compatible`. */\nexport function wallArrayOffset(a: number[], zone: string): number {\n // FullCalendar may pass out-of-range parts (e.g. hour 24): normalise via a UTC Date first.\n const norm = new Date(\n Date.UTC(a[0], a[1] ?? 0, a[2] ?? 1, a[3] ?? 0, a[4] ?? 0, a[5] ?? 0, a[6] ?? 0)\n )\n const pdt = new Temporal.PlainDateTime(\n norm.getUTCFullYear(),\n norm.getUTCMonth() + 1,\n norm.getUTCDate(),\n norm.getUTCHours(),\n norm.getUTCMinutes(),\n norm.getUTCSeconds(),\n norm.getUTCMilliseconds()\n )\n const zdt = pdt.toZonedDateTime(zone, { disambiguation: 'compatible' })\n return Math.round(zdt.offsetNanoseconds / 60_000_000_000)\n}\n"]}
1
+ {"version":3,"sources":["../src/calendar/zone.ts"],"names":["Temporal"],"mappings":"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","file":"chunk-BIXHB4LV.cjs","sourcesContent":["/**\n * Zone math for the calendar. Every conversion between a wall time in a named IANA zone and a UTC\n * instant goes through Temporal (the polyfill, imported as a module: nothing global is patched),\n * so DST gaps/overlaps resolve the way RFC 5545 says (`compatible`: a skipped time moves forward,\n * a repeated time takes the earlier instant). Nothing here reads the browser's local zone.\n */\nimport { Temporal } from 'temporal-polyfill'\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\nconst pad4 = (n: number) => String(n).padStart(4, '0')\n\n/** True when `zone` is a time zone the runtime can resolve. */\nexport function isValidTimeZone(zone: string | null | undefined): zone is string {\n if (!zone) return false\n try {\n Temporal.Now.instant().toZonedDateTimeISO(zone)\n return true\n } catch {\n return false\n }\n}\n\n/** `zone` when valid, else `fallback` (else UTC). */\nexport function safeZone(zone: string | null | undefined, fallback = 'UTC'): string {\n if (isValidTimeZone(zone)) return zone\n return isValidTimeZone(fallback) ? fallback : 'UTC'\n}\n\nfunction toPlainDateTime(wall: string): Temporal.PlainDateTime {\n // Accept `YYYY-MM-DDTHH:MM`, `…:SS` and a bare date (midnight).\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(wall)\n ? Temporal.PlainDate.from(wall).toPlainDateTime()\n : Temporal.PlainDateTime.from(wall)\n}\n\n/** The instant a wall time in `zone` names, as an ISO string ending in `Z` (no milliseconds unless set). */\nexport function wallToUtc(wall: string, zone: string): string {\n const zdt = toPlainDateTime(wall).toZonedDateTime(safeZone(zone), {\n disambiguation: 'compatible',\n })\n return zdt.toInstant().toString()\n}\n\n/** Epoch milliseconds of a wall time in `zone`. */\nexport function wallToEpochMs(wall: string, zone: string): number {\n return toPlainDateTime(wall).toZonedDateTime(safeZone(zone), { disambiguation: 'compatible' })\n .epochMilliseconds\n}\n\nfunction instantOf(utc: string | Date | number): Temporal.Instant {\n if (typeof utc === 'number') return Temporal.Instant.fromEpochMilliseconds(utc)\n if (utc instanceof Date) return Temporal.Instant.fromEpochMilliseconds(utc.getTime())\n return Temporal.Instant.from(utc)\n}\n\n/** The zoned date-time of an instant. */\nexport function zoned(utc: string | Date | number, zone: string): Temporal.ZonedDateTime {\n return instantOf(utc).toZonedDateTimeISO(safeZone(zone))\n}\n\n/** `YYYY-MM-DDTHH:MM` wall time of an instant in `zone`. */\nexport function utcToWall(utc: string | Date | number, zone: string): string {\n const z = zoned(utc, zone)\n return `${pad4(z.year)}-${pad2(z.month)}-${pad2(z.day)}T${pad2(z.hour)}:${pad2(z.minute)}`\n}\n\n/** `YYYY-MM-DD` date of an instant in `zone`. */\nexport function utcToDate(utc: string | Date | number, zone: string): string {\n const z = zoned(utc, zone)\n return `${pad4(z.year)}-${pad2(z.month)}-${pad2(z.day)}`\n}\n\n/** `HH:MM` of an instant in `zone`. */\nexport function utcToTime(utc: string | Date | number, zone: string): string {\n const z = zoned(utc, zone)\n return `${pad2(z.hour)}:${pad2(z.minute)}`\n}\n\n/** Convert a wall time from one zone to the same instant's wall time in another. */\nexport function convertWall(wall: string, fromZone: string, toZone: string): string {\n return utcToWall(wallToUtc(wall, fromZone), toZone)\n}\n\n/** Today's date in `zone`. */\nexport function todayInZone(zone: string, now: Date | number = Date.now()): string {\n return utcToDate(now, zone)\n}\n\n/** Calendar arithmetic on a `YYYY-MM-DD` date. */\nexport function addDays(date: string, days: number): string {\n return Temporal.PlainDate.from(date).add({ days }).toString()\n}\n\nexport function addMonths(date: string, months: number): string {\n return Temporal.PlainDate.from(date).add({ months }).toString()\n}\n\n/** Whole days from `a` to `b` (both `YYYY-MM-DD`). */\nexport function diffDays(a: string, b: string): number {\n return Temporal.PlainDate.from(a).until(Temporal.PlainDate.from(b), { largestUnit: 'days' }).days\n}\n\n/** 0 = Sunday … 6 = Saturday, for a `YYYY-MM-DD` date. */\nexport function dayOfWeekSun0(date: string): number {\n return Temporal.PlainDate.from(date).dayOfWeek % 7\n}\n\n/** The first day of the week containing `date`, for a week starting on `weekStart` (0 = Sunday). */\nexport function startOfWeek(date: string, weekStart: number): string {\n const back = (dayOfWeekSun0(date) - weekStart + 7) % 7\n return addDays(date, -back)\n}\n\n/** ISO-8601 week number of a `YYYY-MM-DD` date. */\nexport function isoWeekNumber(date: string): number {\n return Temporal.PlainDate.from(date).weekOfYear ?? 1\n}\n\n/** Offset of `zone` at an instant, in minutes east of UTC. */\nexport function zoneOffsetMinutes(zone: string, at: string | Date | number = Date.now()): number {\n return Math.round(zoned(at, zone).offsetNanoseconds / 60_000_000_000)\n}\n\n/** `GMT+5:30` / `GMT-4` / `GMT` label for `zone` at an instant. */\nexport function zoneOffsetLabel(zone: string, at: string | Date | number = Date.now()): string {\n const total = zoneOffsetMinutes(zone, at)\n if (total === 0) return 'GMT'\n const sign = total > 0 ? '+' : '-'\n const abs = Math.abs(total)\n const h = Math.floor(abs / 60)\n const m = abs % 60\n return `GMT${sign}${h}${m ? `:${pad2(m)}` : ''}`\n}\n\n/** Short city-ish label for a zone: `America/New_York` → `New York`. */\nexport function zoneCity(zone: string): string {\n const last = zone.split('/').pop() ?? zone\n return last.replace(/_/g, ' ')\n}\n\n/** Every IANA zone the runtime knows (falls back to a short list on old engines). */\nexport function listTimeZones(): string[] {\n try {\n const fn = (Intl as unknown as { supportedValuesOf?: (k: string) => string[] })\n .supportedValuesOf\n const zones = fn ? fn('timeZone') : []\n if (zones.length) return zones.includes('UTC') ? zones : ['UTC', ...zones]\n } catch {\n // fall through\n }\n return [\n 'UTC',\n 'Europe/London',\n 'Europe/Paris',\n 'Europe/Berlin',\n 'America/New_York',\n 'America/Chicago',\n 'America/Denver',\n 'America/Los_Angeles',\n 'Asia/Tokyo',\n 'Asia/Singapore',\n 'Australia/Sydney',\n ]\n}\n\n/** The viewer's zone (only as a default for a new user; rendering always uses an explicit zone). */\nexport function detectTimeZone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC'\n } catch {\n return 'UTC'\n }\n}\n\n/** Format an instant in `zone` with Intl (never the browser zone). */\nexport function formatInZone(\n utc: string | Date | number,\n zone: string,\n options: Intl.DateTimeFormatOptions,\n locale?: string\n): string {\n const ms = instantOf(utc).epochMilliseconds\n return new Intl.DateTimeFormat(locale, { ...options, timeZone: safeZone(zone) }).format(ms)\n}\n\n/** Format a `YYYY-MM-DD` date (zone-free: rendered at UTC noon so no zone can shift the day). */\nexport function formatPlainDate(\n date: string,\n options: Intl.DateTimeFormatOptions,\n locale?: string\n): string {\n return new Intl.DateTimeFormat(locale, { ...options, timeZone: 'UTC' }).format(\n Date.parse(`${date}T12:00:00Z`)\n )\n}\n\n/** Wall-clock array FullCalendar's NamedTimeZoneImpl speaks: [y, m0, d, h, min, s, ms]. */\nexport function epochToWallArray(ms: number, zone: string): number[] {\n const z = Temporal.Instant.fromEpochMilliseconds(ms).toZonedDateTimeISO(zone)\n return [z.year, z.month - 1, z.day, z.hour, z.minute, z.second, z.millisecond]\n}\n\n/** Offset (minutes east of UTC) for a wall-clock array in `zone`, resolving gaps `compatible`. */\nexport function wallArrayOffset(a: number[], zone: string): number {\n // FullCalendar may pass out-of-range parts (e.g. hour 24): normalise via a UTC Date first.\n const norm = new Date(\n Date.UTC(a[0], a[1] ?? 0, a[2] ?? 1, a[3] ?? 0, a[4] ?? 0, a[5] ?? 0, a[6] ?? 0)\n )\n const pdt = new Temporal.PlainDateTime(\n norm.getUTCFullYear(),\n norm.getUTCMonth() + 1,\n norm.getUTCDate(),\n norm.getUTCHours(),\n norm.getUTCMinutes(),\n norm.getUTCSeconds(),\n norm.getUTCMilliseconds()\n )\n const zdt = pdt.toZonedDateTime(zone, { disambiguation: 'compatible' })\n return Math.round(zdt.offsetNanoseconds / 60_000_000_000)\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk5UHAWSEX_cjs = require('./chunk-5UHAWSEX.cjs');
5
- var chunkPJJY6CYL_cjs = require('./chunk-PJJY6CYL.cjs');
5
+ var chunkWV4IDVDQ_cjs = require('./chunk-WV4IDVDQ.cjs');
6
6
  var chunkB6MVQCXW_cjs = require('./chunk-B6MVQCXW.cjs');
7
7
  var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
8
8
  var chunkMWDW5UBW_cjs = require('./chunk-MWDW5UBW.cjs');
@@ -952,6 +952,231 @@ function ThreadMapDiagram({
952
952
  }
953
953
  );
954
954
  }
955
+
956
+ // src/chat/thread-diagram.ts
957
+ var DIAGRAM_COLORS = {
958
+ userBg: "#f1f5f9",
959
+ // slate-100
960
+ assistantBg: "#ffffff",
961
+ stroke: "#cbd5e1",
962
+ // slate-300
963
+ strokeLight: "#e2e8f0",
964
+ // slate-200
965
+ text: "#334155"
966
+ // slate-700
967
+ };
968
+ function escapeLabel(text) {
969
+ 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;");
970
+ }
971
+ function buildThreadDiagram(threads) {
972
+ if (!threads || threads.length === 0) return null;
973
+ const allMessages = /* @__PURE__ */ new Map();
974
+ threads.forEach((thread) => {
975
+ thread.history.forEach((message) => {
976
+ allMessages.set(message.external_id, message);
977
+ });
978
+ });
979
+ const parentToChildren = /* @__PURE__ */ new Map();
980
+ threads.forEach((thread) => {
981
+ thread.history.forEach((message, index) => {
982
+ const messageId = message.external_id;
983
+ let parentId = message.parent_message_ext_id;
984
+ if (!parentId && index > 0) {
985
+ parentId = thread.history[index - 1].external_id;
986
+ console.warn(
987
+ `ThreadVisualizer: Message ${messageId} (${message.role}) missing parent_message_ext_id. Inferred parent: ${parentId}`
988
+ );
989
+ } else if (!parentId) {
990
+ parentId = null;
991
+ }
992
+ if (parentId && !allMessages.has(parentId)) {
993
+ if (index > 0) {
994
+ const fallbackParentId = thread.history[index - 1].external_id;
995
+ console.warn(
996
+ `ThreadVisualizer: Message ${messageId} has invalid parent ${parentId}. Using fallback: ${fallbackParentId}`
997
+ );
998
+ parentId = fallbackParentId;
999
+ } else {
1000
+ console.warn(
1001
+ `ThreadVisualizer: Message ${messageId} has invalid parent ${parentId} and no fallback. Using root.`
1002
+ );
1003
+ parentId = null;
1004
+ }
1005
+ }
1006
+ if (!parentToChildren.has(parentId)) parentToChildren.set(parentId, /* @__PURE__ */ new Set());
1007
+ parentToChildren.get(parentId)?.add(messageId);
1008
+ });
1009
+ });
1010
+ const branchPoints = /* @__PURE__ */ new Set();
1011
+ parentToChildren.forEach((children, parentId) => {
1012
+ if (children.size > 1 && parentId) branchPoints.add(parentId);
1013
+ });
1014
+ allMessages.forEach((message, id) => {
1015
+ if (message.is_branch_point) branchPoints.add(id);
1016
+ });
1017
+ const leafNodes = new Set(threads.map((thread) => thread.leaf_message_ext_id));
1018
+ let diagram = "graph TD\n";
1019
+ diagram += ` classDef user fill:${DIAGRAM_COLORS.userBg},stroke:${DIAGRAM_COLORS.stroke},color:${DIAGRAM_COLORS.text},stroke-width:1px,font-size:12px
1020
+ `;
1021
+ diagram += ` classDef assistant fill:${DIAGRAM_COLORS.assistantBg},stroke:${DIAGRAM_COLORS.strokeLight},color:${DIAGRAM_COLORS.text},stroke-width:1px,font-size:12px
1022
+ `;
1023
+ diagram += ` linkStyle default stroke:${DIAGRAM_COLORS.stroke},stroke-width:1px
1024
+ `;
1025
+ allMessages.forEach((message, id) => {
1026
+ const plain = (message.content || "").replace(/[*_~`#]/g, "");
1027
+ const shortened = plain.substring(0, 180).replace(/\n/g, " ");
1028
+ const content = escapeLabel(shortened) + (shortened.length < plain.length ? "..." : "");
1029
+ let label = `${message.role === "user" ? "User" : "Assistant"}: ${content}`;
1030
+ if (branchPoints.has(id)) label = `${label} \u{1F500}`;
1031
+ if (leafNodes.has(id)) label = `${label} \u{1F3C1}`;
1032
+ diagram += ` ${id}["${label}"]
1033
+ `;
1034
+ diagram += ` class ${id} ${message.role === "user" ? "user" : "assistant"}
1035
+ `;
1036
+ });
1037
+ parentToChildren.forEach((children, parentId) => {
1038
+ children.forEach((childId) => {
1039
+ if (parentId) diagram += ` ${parentId} --> ${childId}
1040
+ `;
1041
+ });
1042
+ });
1043
+ return diagram;
1044
+ }
1045
+ function threadForNode(threads, nodeId) {
1046
+ const messageId = nodeId.replace(/^flowchart-/, "").replace(/-\d+$/, "");
1047
+ if (threads.some((thread) => thread.leaf_message_ext_id === messageId)) return messageId;
1048
+ const containing = threads.find(
1049
+ (thread) => thread.history.some((msg) => msg.external_id === messageId)
1050
+ );
1051
+ return containing ? containing.leaf_message_ext_id : null;
1052
+ }
1053
+ var DEFAULT_THREAD_VISUALIZER_LABELS = {
1054
+ hint: "Click on a message to resume conversation thread.",
1055
+ hintMany: "This conversation has many threads. Click on a message to resume conversation thread."
1056
+ };
1057
+ var mermaidInitialized = false;
1058
+ var mermaidModule = null;
1059
+ async function getMermaid() {
1060
+ if (!mermaidModule) {
1061
+ mermaidModule = (await import('mermaid')).default;
1062
+ }
1063
+ if (!mermaidInitialized) {
1064
+ try {
1065
+ mermaidModule.initialize({
1066
+ startOnLoad: false,
1067
+ flowchart: { useMaxWidth: true, curve: "basis" },
1068
+ securityLevel: "loose"
1069
+ // Required for click interactivity
1070
+ });
1071
+ mermaidInitialized = true;
1072
+ } catch (error) {
1073
+ console.error("Error initializing Mermaid:", error);
1074
+ }
1075
+ }
1076
+ return mermaidModule;
1077
+ }
1078
+ function ThreadVisualizerView({
1079
+ threads,
1080
+ switchToThread,
1081
+ showHeader = true,
1082
+ showDownloadButton = true,
1083
+ className,
1084
+ labels
1085
+ }) {
1086
+ const svgContainerRef = react.useRef(null);
1087
+ const [isRendering, setIsRendering] = react.useState(true);
1088
+ const [renderError, setRenderError] = react.useState(null);
1089
+ const [svgContent, setSvgContent] = react.useState("");
1090
+ const renderingRef = react.useRef(false);
1091
+ const mermaidDiagram = react.useMemo(() => buildThreadDiagram(threads), [threads]);
1092
+ const handleNodeClick = react.useCallback(
1093
+ (nodeId) => {
1094
+ try {
1095
+ const threadId = threadForNode(threads, nodeId);
1096
+ if (threadId) switchToThread(threadId);
1097
+ } catch (error) {
1098
+ console.error("Error in thread navigation callback:", error);
1099
+ }
1100
+ },
1101
+ [threads, switchToThread]
1102
+ );
1103
+ const saveSvgAsFile = react.useCallback(() => {
1104
+ if (!svgContent) return;
1105
+ try {
1106
+ const blob = new Blob([svgContent], { type: "image/svg+xml" });
1107
+ const url = URL.createObjectURL(blob);
1108
+ const link = document.createElement("a");
1109
+ link.href = url;
1110
+ link.download = `thread-visualizer-${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}.svg`;
1111
+ document.body.appendChild(link);
1112
+ link.click();
1113
+ document.body.removeChild(link);
1114
+ URL.revokeObjectURL(url);
1115
+ } catch (error) {
1116
+ console.error("Failed to save SVG:", error);
1117
+ }
1118
+ }, [svgContent]);
1119
+ react.useEffect(() => {
1120
+ if (renderingRef.current || !mermaidDiagram) return;
1121
+ const renderDiagram = async () => {
1122
+ renderingRef.current = true;
1123
+ setIsRendering(true);
1124
+ setRenderError(null);
1125
+ setSvgContent("");
1126
+ try {
1127
+ const renderDiagramId = `mermaid-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
1128
+ const mermaid = await getMermaid();
1129
+ const { svg } = await mermaid.render(renderDiagramId, mermaidDiagram);
1130
+ setSvgContent(svg);
1131
+ setIsRendering(false);
1132
+ } catch (error) {
1133
+ console.error("Error rendering mermaid diagram:", error);
1134
+ setRenderError(error instanceof Error ? error.message : String(error));
1135
+ setIsRendering(false);
1136
+ setSvgContent("");
1137
+ } finally {
1138
+ renderingRef.current = false;
1139
+ }
1140
+ };
1141
+ renderDiagram();
1142
+ }, [mermaidDiagram]);
1143
+ react.useEffect(() => {
1144
+ if (!svgContent || !svgContainerRef.current) return;
1145
+ const svgElement = svgContainerRef.current.querySelector("svg");
1146
+ if (!svgElement) return;
1147
+ svgElement.style.maxWidth = "100%";
1148
+ svgElement.style.height = "auto";
1149
+ svgElement.style.minHeight = "400px";
1150
+ const textElements = svgElement.getElementsByTagName("text");
1151
+ for (let i = 0; i < textElements.length; i++) {
1152
+ textElements[i].setAttribute("font-family", "system-ui, sans-serif");
1153
+ textElements[i].setAttribute("font-size", "12px");
1154
+ textElements[i].style.fontSize = "12px !important";
1155
+ }
1156
+ svgElement.querySelectorAll("g.node").forEach((element) => {
1157
+ const nodeId = element.getAttribute("id");
1158
+ if (!nodeId) return;
1159
+ element.style.cursor = "pointer";
1160
+ element.addEventListener("click", () => handleNodeClick(nodeId));
1161
+ });
1162
+ }, [svgContent, handleNodeClick]);
1163
+ const l = { ...DEFAULT_THREAD_VISUALIZER_LABELS, ...labels };
1164
+ const hint = showHeader ? threads.length > 5 ? l.hintMany : l.hint : void 0;
1165
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1166
+ ThreadMap,
1167
+ {
1168
+ hint,
1169
+ onSave: showDownloadButton && svgContent ? saveSvgAsFile : void 0,
1170
+ className,
1171
+ children: [
1172
+ (isRendering || !svgContent || !mermaidDiagram) && !renderError && /* @__PURE__ */ jsxRuntime.jsx(ThreadMapLoading, {}),
1173
+ renderError && /* @__PURE__ */ jsxRuntime.jsx(ThreadMapError, { message: renderError }),
1174
+ svgContent && !renderError && /* @__PURE__ */ jsxRuntime.jsx(ThreadMapDiagram, { svg: svgContent, diagramRef: svgContainerRef })
1175
+ ]
1176
+ }
1177
+ );
1178
+ }
1179
+ var ThreadVisualizer = react.memo(ThreadVisualizerView);
955
1180
  var LONG_PASTE_CHARACTER_LIMIT = 1e3;
956
1181
  var LONG_PASTE_LINE_LIMIT = 12;
957
1182
  function isLongPastedText(value) {
@@ -1637,8 +1862,8 @@ function LabelPinRow({
1637
1862
  );
1638
1863
  }
1639
1864
  function AssistantToaster(props) {
1640
- const dock = chunkPJJY6CYL_cjs.useAssistantDock();
1641
- const { isDockAvailable } = chunkPJJY6CYL_cjs.useChatSurface();
1865
+ const dock = chunkWV4IDVDQ_cjs.useAssistantDock();
1866
+ const { isDockAvailable } = chunkWV4IDVDQ_cjs.useChatSurface();
1642
1867
  return /* @__PURE__ */ jsxRuntime.jsx(chunk5UHAWSEX_cjs.Toaster, { ...props, dockOpen: dock.isOpen && isDockAvailable });
1643
1868
  }
1644
1869
  function hasMessageBody(value, recipientLabel = "ARBI") {
@@ -1872,6 +2097,7 @@ exports.DEFAULT_PENDING_ANSWER_BAR_LABELS = DEFAULT_PENDING_ANSWER_BAR_LABELS;
1872
2097
  exports.DEFAULT_PINNED_DOC_CHIP_LABELS = DEFAULT_PINNED_DOC_CHIP_LABELS;
1873
2098
  exports.DEFAULT_SLASH_MENU_LABELS = DEFAULT_SLASH_MENU_LABELS;
1874
2099
  exports.DEFAULT_THREAD_MAP_LABELS = DEFAULT_THREAD_MAP_LABELS;
2100
+ exports.DEFAULT_THREAD_VISUALIZER_LABELS = DEFAULT_THREAD_VISUALIZER_LABELS;
1875
2101
  exports.DraftingDocChip = DraftingDocChip;
1876
2102
  exports.LabelPinRow = LabelPinRow;
1877
2103
  exports.ModelAutoIcon = ModelAutoIcon;
@@ -1898,14 +2124,17 @@ exports.ThreadMap = ThreadMap;
1898
2124
  exports.ThreadMapDiagram = ThreadMapDiagram;
1899
2125
  exports.ThreadMapError = ThreadMapError;
1900
2126
  exports.ThreadMapLoading = ThreadMapLoading;
2127
+ exports.ThreadVisualizer = ThreadVisualizer;
1901
2128
  exports.TranscriptLine = TranscriptLine;
2129
+ exports.buildThreadDiagram = buildThreadDiagram;
1902
2130
  exports.flashMessage = flashMessage;
1903
2131
  exports.getParticipantTints = getParticipantTints;
1904
2132
  exports.hasMessageBody = hasMessageBody;
1905
2133
  exports.isLongPastedText = isLongPastedText;
2134
+ exports.threadForNode = threadForNode;
1906
2135
  exports.transcriptRuns = transcriptRuns;
1907
2136
  exports.useDismissibleCard = useDismissibleCard;
1908
2137
  exports.useLongPaste = useLongPaste;
1909
2138
  exports.useRecipientDraft = useRecipientDraft;
1910
- //# sourceMappingURL=chunk-DZYAAL4H.cjs.map
1911
- //# sourceMappingURL=chunk-DZYAAL4H.cjs.map
2139
+ //# sourceMappingURL=chunk-BZF55UCE.cjs.map
2140
+ //# sourceMappingURL=chunk-BZF55UCE.cjs.map