@assistant-ui/react-devtools 1.2.18 → 1.2.20

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 (215) hide show
  1. package/dist/DevToolsModal.d.ts +2 -3
  2. package/dist/DevToolsModal.d.ts.map +1 -1
  3. package/dist/data/createInProcessClient.d.ts +3 -6
  4. package/dist/data/createInProcessClient.d.ts.map +1 -1
  5. package/dist/data/createInProcessClient.js +1 -3
  6. package/dist/data/createInProcessClient.js.map +1 -1
  7. package/dist/data/projectApi.d.ts +1 -2
  8. package/dist/data/projectApi.d.ts.map +1 -1
  9. package/dist/data/types.d.ts +6 -6
  10. package/dist/data/types.d.ts.map +1 -1
  11. package/dist/data/useDevToolsClient.d.ts +2 -3
  12. package/dist/data/useDevToolsClient.d.ts.map +1 -1
  13. package/dist/shell/DevToolsOverlay.d.ts +2 -3
  14. package/dist/shell/DevToolsOverlay.d.ts.map +1 -1
  15. package/dist/shell/DevToolsPanel.d.ts +2 -3
  16. package/dist/shell/DevToolsPanel.d.ts.map +1 -1
  17. package/dist/shell/ShadowRoot.d.ts +2 -3
  18. package/dist/shell/ShadowRoot.d.ts.map +1 -1
  19. package/dist/shell/SplitLayout.d.ts +3 -4
  20. package/dist/shell/SplitLayout.d.ts.map +1 -1
  21. package/dist/shell/registry.d.ts +4 -5
  22. package/dist/shell/registry.d.ts.map +1 -1
  23. package/dist/shell/tabs/ActivityTab.d.ts +1 -2
  24. package/dist/shell/tabs/ActivityTab.d.ts.map +1 -1
  25. package/dist/shell/tabs/ContextTab.d.ts +1 -2
  26. package/dist/shell/tabs/ContextTab.d.ts.map +1 -1
  27. package/dist/shell/tabs/RawTab.d.ts +1 -2
  28. package/dist/shell/tabs/RawTab.d.ts.map +1 -1
  29. package/dist/shell/tabs/ThreadTab.d.ts +1 -2
  30. package/dist/shell/tabs/ThreadTab.d.ts.map +1 -1
  31. package/dist/shell/tabs/navSelection.d.ts +1 -2
  32. package/dist/shell/tabs/navSelection.d.ts.map +1 -1
  33. package/dist/styles/panel.generated.d.ts +1 -2
  34. package/dist/styles/panel.generated.d.ts.map +1 -1
  35. package/dist/styles/panel.generated.js +1 -1
  36. package/dist/styles/panel.generated.js.map +1 -1
  37. package/dist/types.d.ts +1 -2
  38. package/dist/types.d.ts.map +1 -1
  39. package/dist/utils/common.d.ts +13 -14
  40. package/dist/utils/common.d.ts.map +1 -1
  41. package/dist/utils/diff.d.ts +2 -3
  42. package/dist/utils/diff.d.ts.map +1 -1
  43. package/dist/utils/serialization.d.ts +5 -6
  44. package/dist/utils/serialization.d.ts.map +1 -1
  45. package/dist/utils/serialization.js +13 -4
  46. package/dist/utils/serialization.js.map +1 -1
  47. package/dist/utils/toolNormalization.d.ts +2 -3
  48. package/dist/utils/toolNormalization.d.ts.map +1 -1
  49. package/dist/utils/unserializable.d.ts +2 -3
  50. package/dist/utils/unserializable.d.ts.map +1 -1
  51. package/dist/views/activity/EventLogRow.d.ts +2 -3
  52. package/dist/views/activity/EventLogRow.d.ts.map +1 -1
  53. package/dist/views/activity/EventStreamPane.d.ts +1 -2
  54. package/dist/views/activity/EventStreamPane.d.ts.map +1 -1
  55. package/dist/views/activity/OrphansPane.d.ts +1 -2
  56. package/dist/views/activity/OrphansPane.d.ts.map +1 -1
  57. package/dist/views/activity/RunDetailPane.d.ts +1 -2
  58. package/dist/views/activity/RunDetailPane.d.ts.map +1 -1
  59. package/dist/views/activity/activityNodes.d.ts +6 -7
  60. package/dist/views/activity/activityNodes.d.ts.map +1 -1
  61. package/dist/views/attachments/AttachmentList.d.ts +1 -2
  62. package/dist/views/attachments/AttachmentList.d.ts.map +1 -1
  63. package/dist/views/attachments/MediaPartView.d.ts +3 -4
  64. package/dist/views/attachments/MediaPartView.d.ts.map +1 -1
  65. package/dist/views/attachments/formatBytes.d.ts +3 -4
  66. package/dist/views/attachments/formatBytes.d.ts.map +1 -1
  67. package/dist/views/attachments/parseAttachment.d.ts +2 -3
  68. package/dist/views/attachments/parseAttachment.d.ts.map +1 -1
  69. package/dist/views/attachments/types.d.ts +2 -3
  70. package/dist/views/attachments/types.d.ts.map +1 -1
  71. package/dist/views/context/ContextDetail.d.ts +1 -2
  72. package/dist/views/context/ContextDetail.d.ts.map +1 -1
  73. package/dist/views/context/ToolUIsView.d.ts +1 -2
  74. package/dist/views/context/ToolUIsView.d.ts.map +1 -1
  75. package/dist/views/context/contextNodes.d.ts +4 -5
  76. package/dist/views/context/contextNodes.d.ts.map +1 -1
  77. package/dist/views/mcp/McpView.d.ts +1 -2
  78. package/dist/views/mcp/McpView.d.ts.map +1 -1
  79. package/dist/views/mcp/parse.d.ts +1 -2
  80. package/dist/views/mcp/parse.d.ts.map +1 -1
  81. package/dist/views/mcp/types.d.ts +3 -4
  82. package/dist/views/mcp/types.d.ts.map +1 -1
  83. package/dist/views/message/ChainOfThought.d.ts +1 -2
  84. package/dist/views/message/ChainOfThought.d.ts.map +1 -1
  85. package/dist/views/message/MessageDetailPane.d.ts +2 -3
  86. package/dist/views/message/MessageDetailPane.d.ts.map +1 -1
  87. package/dist/views/message/MessageItem.d.ts +1 -2
  88. package/dist/views/message/MessageItem.d.ts.map +1 -1
  89. package/dist/views/message/MessageList.d.ts +1 -2
  90. package/dist/views/message/MessageList.d.ts.map +1 -1
  91. package/dist/views/message/MessageMetrics.d.ts +1 -2
  92. package/dist/views/message/MessageMetrics.d.ts.map +1 -1
  93. package/dist/views/message/MessageMetrics.js +1 -1
  94. package/dist/views/message/MessageMetrics.js.map +1 -1
  95. package/dist/views/message/MessageTimeline.d.ts +3 -4
  96. package/dist/views/message/MessageTimeline.d.ts.map +1 -1
  97. package/dist/views/message/PartDisclosure.d.ts +1 -2
  98. package/dist/views/message/PartDisclosure.d.ts.map +1 -1
  99. package/dist/views/message/PartView.d.ts +1 -2
  100. package/dist/views/message/PartView.d.ts.map +1 -1
  101. package/dist/views/message/RoleLabel.d.ts +1 -2
  102. package/dist/views/message/RoleLabel.d.ts.map +1 -1
  103. package/dist/views/message/StatusBadge.d.ts +1 -2
  104. package/dist/views/message/StatusBadge.d.ts.map +1 -1
  105. package/dist/views/message/ToolCallView.d.ts +1 -2
  106. package/dist/views/message/ToolCallView.d.ts.map +1 -1
  107. package/dist/views/message/TtftBar.d.ts +2 -3
  108. package/dist/views/message/TtftBar.d.ts.map +1 -1
  109. package/dist/views/message/TtftBar.js +2 -2
  110. package/dist/views/message/TtftBar.js.map +1 -1
  111. package/dist/views/message/messagePlainText.d.ts +1 -2
  112. package/dist/views/message/messagePlainText.d.ts.map +1 -1
  113. package/dist/views/message/parse.d.ts +4 -5
  114. package/dist/views/message/parse.d.ts.map +1 -1
  115. package/dist/views/message/types.d.ts +17 -18
  116. package/dist/views/message/types.d.ts.map +1 -1
  117. package/dist/views/model-context/ModelContextView.d.ts +4 -5
  118. package/dist/views/model-context/ModelContextView.d.ts.map +1 -1
  119. package/dist/views/nav.d.ts +4 -5
  120. package/dist/views/nav.d.ts.map +1 -1
  121. package/dist/views/raw/RawDetail.d.ts +1 -2
  122. package/dist/views/raw/RawDetail.d.ts.map +1 -1
  123. package/dist/views/raw/rawNodes.d.ts +4 -5
  124. package/dist/views/raw/rawNodes.d.ts.map +1 -1
  125. package/dist/views/raw/statePreview.d.ts +1 -2
  126. package/dist/views/raw/statePreview.d.ts.map +1 -1
  127. package/dist/views/runs/PayloadDiff.d.ts +1 -2
  128. package/dist/views/runs/PayloadDiff.d.ts.map +1 -1
  129. package/dist/views/runs/parse.d.ts +1 -2
  130. package/dist/views/runs/parse.d.ts.map +1 -1
  131. package/dist/views/runs/types.d.ts +3 -4
  132. package/dist/views/runs/types.d.ts.map +1 -1
  133. package/dist/views/scopes/ScopesView.d.ts +1 -2
  134. package/dist/views/scopes/ScopesView.d.ts.map +1 -1
  135. package/dist/views/scopes/parse.d.ts +1 -2
  136. package/dist/views/scopes/parse.d.ts.map +1 -1
  137. package/dist/views/scopes/types.d.ts +1 -2
  138. package/dist/views/scopes/types.d.ts.map +1 -1
  139. package/dist/views/thread/ComposerAttachments.d.ts +1 -2
  140. package/dist/views/thread/ComposerAttachments.d.ts.map +1 -1
  141. package/dist/views/thread/ComposerFlags.d.ts +1 -2
  142. package/dist/views/thread/ComposerFlags.d.ts.map +1 -1
  143. package/dist/views/thread/ComposerQueue.d.ts +1 -2
  144. package/dist/views/thread/ComposerQueue.d.ts.map +1 -1
  145. package/dist/views/thread/ConversationList.d.ts +2 -3
  146. package/dist/views/thread/ConversationList.d.ts.map +1 -1
  147. package/dist/views/thread/ConversationStatusDot.d.ts +3 -4
  148. package/dist/views/thread/ConversationStatusDot.d.ts.map +1 -1
  149. package/dist/views/thread/ThreadDetails.d.ts +1 -2
  150. package/dist/views/thread/ThreadDetails.d.ts.map +1 -1
  151. package/dist/views/thread/Transcript.d.ts +3 -4
  152. package/dist/views/thread/Transcript.d.ts.map +1 -1
  153. package/dist/views/thread/Transcript.js +1 -1
  154. package/dist/views/thread/Transcript.js.map +1 -1
  155. package/dist/views/thread/resolve.d.ts +2 -3
  156. package/dist/views/thread/resolve.d.ts.map +1 -1
  157. package/dist/views/thread/types.d.ts +7 -7
  158. package/dist/views/thread/types.d.ts.map +1 -1
  159. package/dist/views/thread/utils.d.ts +4 -5
  160. package/dist/views/thread/utils.d.ts.map +1 -1
  161. package/dist/views/ui/CenteredMessage.d.ts +1 -2
  162. package/dist/views/ui/CenteredMessage.d.ts.map +1 -1
  163. package/dist/views/ui/Chip.d.ts +1 -2
  164. package/dist/views/ui/Chip.d.ts.map +1 -1
  165. package/dist/views/ui/ControlButton.d.ts +1 -2
  166. package/dist/views/ui/ControlButton.d.ts.map +1 -1
  167. package/dist/views/ui/CopyButton.d.ts +2 -3
  168. package/dist/views/ui/CopyButton.d.ts.map +1 -1
  169. package/dist/views/ui/CopyButton.js +3 -3
  170. package/dist/views/ui/CopyButton.js.map +1 -1
  171. package/dist/views/ui/EmptyState.d.ts +1 -2
  172. package/dist/views/ui/EmptyState.d.ts.map +1 -1
  173. package/dist/views/ui/InfoCard.d.ts +1 -2
  174. package/dist/views/ui/InfoCard.d.ts.map +1 -1
  175. package/dist/views/ui/JSONTree.d.ts +1 -2
  176. package/dist/views/ui/JSONTree.d.ts.map +1 -1
  177. package/dist/views/ui/JSONTree.js +51 -72
  178. package/dist/views/ui/JSONTree.js.map +1 -1
  179. package/dist/views/ui/PaneHeader.d.ts +2 -3
  180. package/dist/views/ui/PaneHeader.d.ts.map +1 -1
  181. package/dist/views/ui/RailTime.d.ts +1 -2
  182. package/dist/views/ui/RailTime.d.ts.map +1 -1
  183. package/dist/views/ui/SectionLabel.d.ts +1 -2
  184. package/dist/views/ui/SectionLabel.d.ts.map +1 -1
  185. package/dist/views/ui/SelectableRow.d.ts +1 -2
  186. package/dist/views/ui/SelectableRow.d.ts.map +1 -1
  187. package/dist/views/ui/Sparkline.d.ts +1 -2
  188. package/dist/views/ui/Sparkline.d.ts.map +1 -1
  189. package/dist/views/ui/SummaryItem.d.ts +2 -3
  190. package/dist/views/ui/SummaryItem.d.ts.map +1 -1
  191. package/dist/views/ui/ToneBadge.d.ts +1 -2
  192. package/dist/views/ui/ToneBadge.d.ts.map +1 -1
  193. package/dist/views/ui/badgeTone.d.ts +7 -8
  194. package/dist/views/ui/badgeTone.d.ts.map +1 -1
  195. package/dist/views/ui/getInlineJson.d.ts +4 -0
  196. package/dist/views/ui/getInlineJson.d.ts.map +1 -0
  197. package/dist/views/ui/getInlineJson.js +22 -0
  198. package/dist/views/ui/getInlineJson.js.map +1 -0
  199. package/dist/views/ui/useCopyToClipboard.d.ts +1 -2
  200. package/dist/views/ui/useCopyToClipboard.d.ts.map +1 -1
  201. package/package.json +16 -13
  202. package/src/data/createInProcessClient.ts +1 -3
  203. package/src/styles/panel.generated.ts +1 -1
  204. package/src/utils/serialization.test.ts +19 -0
  205. package/src/utils/serialization.ts +32 -7
  206. package/src/views/message/MessageMetrics.tsx +2 -3
  207. package/src/views/message/TtftBar.test.tsx +20 -0
  208. package/src/views/message/TtftBar.tsx +2 -2
  209. package/src/views/thread/Transcript.tsx +1 -6
  210. package/src/views/ui/CopyButton.tsx +3 -3
  211. package/src/views/ui/JSONTree.interaction.test.tsx +118 -0
  212. package/src/views/ui/JSONTree.tsx +29 -28
  213. package/src/views/ui/JSONTree.work.test.tsx +60 -0
  214. package/src/views/ui/getInlineJson.test.ts +83 -0
  215. package/src/views/ui/getInlineJson.ts +38 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Transcript.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","clsx","truncate","StatusBadge","MessagePreview","PartPreview","messageStepCount","RoleLabel","Chip","PaneHeader","PaneHeaderStack","RailTime","RAIL_STATUS_BADGE_CLASS","SelectableRow","Sparkline","ToneBadge","ComposerPreview","ThreadPreview","MetricSeries","label","values","format","value","messageNodeId","id","formatTokens","toFixed","String","textOf","parts","filter","part","Extract","type","map","text","join","trim","rowSummary","message","tool","find","toolName","rowStepHint","tools","texts","hints","push","length","railStatus","isOptimistic","status","railAttachmentCount","attachments","TurnRow","t0","$","_c","selected","nodeId","onSelect","rowRef","t1","t2","summary","t3","stepHint","attachmentCount","t4","t5","t6","role","t7","reason","undefined","t8","t9","t10","createdAt","t11","t12","t13","t14","t15","t16","GhostComposer","composer","Symbol","for","textLength","canSend","queue","collect","messages","pick","metricSeries","timing","tokensPerSecond","firstTokenTime","streamStartTime","Math","round","usage","outputTokens","series","TranscriptHeader","thread","expanded","setExpanded","reduce","_temp2","_temp3","errors","tokens","_temp4","Boolean","statParts","trendSeries","stats","canExpand","isRunning","_temp5","titleRow","t17","_temp6","t18","Transcript","selection","selectedRef","prevSelectionRef","handleSelect","current","scrollIntoView","block","nodeId_0","_temp","sum","message_0","sum_0","message_1","inputTokens","prev","entry"],"sources":["../../../src/views/thread/Transcript.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { truncate } from \"../../utils/common\";\nimport { StatusBadge } from \"../message\";\nimport type { MessagePreview, PartPreview } from \"../message\";\nimport { messageStepCount } from \"../message/MessageTimeline\";\nimport { RoleLabel } from \"../message/RoleLabel\";\nimport {\n Chip,\n PaneHeader,\n PaneHeaderStack,\n RailTime,\n RAIL_STATUS_BADGE_CLASS,\n SelectableRow,\n Sparkline,\n ToneBadge,\n} from \"../ui\";\nimport type { ComposerPreview, ThreadPreview } from \"./types\";\n\ninterface MetricSeries {\n label: string;\n values: number[];\n format: (value: number) => string;\n}\n\nexport const messageNodeId = (id: string) => `msg:${id}`;\n\nconst formatTokens = (value: number) =>\n value >= 1000 ? `${(value / 1000).toFixed(1)}k` : String(value);\n\nconst textOf = (parts: readonly PartPreview[]) =>\n parts\n .filter(\n (part): part is Extract<PartPreview, { type: \"text\" }> =>\n part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\\n\")\n .trim();\n\nconst rowSummary = (message: MessagePreview) => {\n const text = textOf(message.parts);\n if (text) return truncate(text, 72);\n const tool = message.parts.find(\n (part): part is Extract<PartPreview, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n );\n if (tool) return tool.toolName;\n return \"—\";\n};\n\nconst rowStepHint = (message: MessagePreview) => {\n const { tools, texts } = messageStepCount(message.parts);\n const hints: string[] = [];\n if (tools > 1) hints.push(`${tools} tools`);\n if (texts > 1) hints.push(`${texts} msgs`);\n return hints.length ? hints.join(\" · \") : null;\n};\n\nconst railStatus = (message: MessagePreview) => {\n if (message.isOptimistic) return null;\n if (!message.status || message.status.type === \"complete\") return null;\n return message.status;\n};\n\nconst railAttachmentCount = (message: MessagePreview) => {\n if (message.attachments.length > 0) return message.attachments.length;\n return message.parts.filter(\n (part) =>\n part.type === \"image\" || part.type === \"file\" || part.type === \"audio\",\n ).length;\n};\n\nconst TurnRow = memo(function TurnRow({\n message,\n selected,\n nodeId,\n onSelect,\n rowRef,\n}: {\n message: MessagePreview;\n selected: boolean;\n nodeId: string;\n onSelect: (nodeId: string) => void;\n rowRef?: React.Ref<HTMLButtonElement> | undefined;\n}) {\n const status = railStatus(message);\n const summary = rowSummary(message);\n const stepHint = rowStepHint(message);\n const attachmentCount = railAttachmentCount(message);\n\n return (\n <SelectableRow\n ref={rowRef}\n selected={selected}\n onSelect={() => onSelect(nodeId)}\n dense\n >\n <div\n className=\"flex h-10 flex-col justify-center gap-0.5\"\n title={stepHint ? `${stepHint}\\n${summary}` : summary}\n >\n <div className=\"flex min-w-0 items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <RoleLabel role={message.role} compact />\n {message.isOptimistic ? (\n <ToneBadge\n tone=\"amber\"\n size=\"sm\"\n className={RAIL_STATUS_BADGE_CLASS}\n >\n opt\n </ToneBadge>\n ) : status ? (\n <StatusBadge\n type={status.type}\n reason={\"reason\" in status ? status.reason : undefined}\n compact\n size=\"sm\"\n className={RAIL_STATUS_BADGE_CLASS}\n />\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {attachmentCount > 0 ? (\n <span\n className=\"text-muted-foreground text-[10px] leading-none\"\n title={`${attachmentCount} attachment${attachmentCount === 1 ? \"\" : \"s\"}`}\n >\n 📎{attachmentCount}\n </span>\n ) : null}\n <RailTime value={message.createdAt} />\n </div>\n </div>\n <p className=\"text-foreground min-w-0 truncate text-[12px] leading-tight\">\n {stepHint ? (\n <span className=\"text-muted-foreground\">{stepHint} · </span>\n ) : null}\n {summary}\n </p>\n </div>\n </SelectableRow>\n );\n});\n\nconst GhostComposer = ({ composer }: { composer: ComposerPreview }) => (\n <div className=\"border-border text-muted-foreground flex items-center gap-2 border-t px-3 py-2 text-[11px]\">\n <span className=\"text-foreground font-medium\">draft</span>\n <span>{composer.role ?? \"user\"}</span>\n <span>· {composer.textLength} chars</span>\n {composer.canSend ? <Chip>can send</Chip> : null}\n {composer.queue.length ? <Chip>{composer.queue.length} queued</Chip> : null}\n </div>\n);\n\nconst collect = (\n messages: readonly MessagePreview[],\n pick: (message: MessagePreview) => number | undefined,\n): number[] =>\n messages.map(pick).filter((value): value is number => value !== undefined);\n\nconst metricSeries = (messages: readonly MessagePreview[]): MetricSeries[] =>\n [\n {\n label: \"tok/s\",\n values: collect(messages, (message) => message.timing?.tokensPerSecond),\n format: (value: number) => value.toFixed(1),\n },\n {\n label: \"TTFT\",\n values: collect(messages, (message) =>\n message.timing?.firstTokenTime !== undefined &&\n message.timing?.streamStartTime !== undefined\n ? message.timing.firstTokenTime - message.timing.streamStartTime\n : undefined,\n ),\n format: (value: number) => `${Math.round(value)}ms`,\n },\n {\n label: \"output\",\n values: collect(messages, (message) => message.usage?.outputTokens),\n format: (value: number) => String(value),\n },\n ].filter((series) => series.values.length >= 3);\n\nexport const TranscriptHeader = memo(function TranscriptHeader({\n thread,\n}: {\n thread: ThreadPreview;\n}) {\n const [expanded, setExpanded] = useState(false);\n const messages = thread.messages;\n\n const { stats, series, canExpand } = useMemo(() => {\n const tools = messages.reduce(\n (sum, message) =>\n sum + message.parts.filter((part) => part.type === \"tool-call\").length,\n 0,\n );\n const errors = messages.filter(\n (message) => message.status?.type === \"incomplete\",\n ).length;\n const tokens = messages.reduce(\n (sum, message) =>\n sum +\n (message.usage\n ? message.usage.inputTokens + message.usage.outputTokens\n : 0),\n 0,\n );\n\n const statParts = [\n `${messages.length} msg${messages.length === 1 ? \"\" : \"s\"}`,\n tokens ? `${formatTokens(tokens)} tok` : null,\n tools ? `${tools} tool${tools === 1 ? \"\" : \"s\"}` : null,\n errors ? `${errors} err` : null,\n ].filter(Boolean);\n\n const trendSeries = metricSeries(messages);\n\n return {\n stats: statParts,\n series: trendSeries,\n canExpand: trendSeries.length > 0,\n };\n }, [messages]);\n\n const titleRow = (\n <PaneHeader\n borderless={canExpand && expanded}\n trailing={\n <>\n {thread.isRunning ? (\n <ToneBadge tone=\"blue\" size=\"sm\">\n running\n </ToneBadge>\n ) : null}\n {canExpand ? (\n <button\n type=\"button\"\n onClick={() => setExpanded((prev) => !prev)}\n className=\"text-muted-foreground hover:text-foreground text-[11px] leading-none\"\n >\n <span\n className={clsx(\n \"inline-block transition-transform\",\n expanded && \"rotate-90\",\n )}\n >\n ›\n </span>{\" \"}\n trends\n </button>\n ) : null}\n </>\n }\n >\n {stats.join(\" · \")}\n </PaneHeader>\n );\n\n if (canExpand && expanded) {\n return (\n <PaneHeaderStack header={titleRow}>\n {series.map((entry) => (\n <div\n key={entry.label}\n className=\"flex items-center justify-between gap-3 px-3 py-1.5\"\n >\n <div className=\"flex flex-col\">\n <span className=\"text-muted-foreground text-[10px]\">\n {entry.label}\n </span>\n <span className=\"text-foreground text-[12px] font-medium tabular-nums\">\n {entry.format(entry.values[entry.values.length - 1]!)}\n </span>\n </div>\n <Sparkline values={entry.values} className=\"h-6 w-24\" />\n </div>\n ))}\n </PaneHeaderStack>\n );\n }\n\n return titleRow;\n});\n\nexport const Transcript = ({\n thread,\n selection,\n onSelect,\n}: {\n thread: ThreadPreview;\n selection: string | null;\n onSelect: (nodeId: string) => void;\n}) => {\n const selectedRef = useRef<HTMLButtonElement>(null);\n const prevSelectionRef = useRef(selection);\n const handleSelect = useCallback(\n (nodeId: string) => onSelect(nodeId),\n [onSelect],\n );\n\n useEffect(() => {\n if (prevSelectionRef.current === selection) return;\n prevSelectionRef.current = selection;\n selectedRef.current?.scrollIntoView({ block: \"nearest\" });\n }, [selection]);\n\n return (\n <>\n {thread.messages.map((message) => {\n const nodeId = messageNodeId(message.id);\n const selected = selection === nodeId;\n return (\n <TurnRow\n key={message.id}\n message={message}\n nodeId={nodeId}\n selected={selected}\n onSelect={handleSelect}\n rowRef={selected ? selectedRef : undefined}\n />\n );\n })}\n {thread.composer && thread.composer.textLength > 0 ? (\n <GhostComposer composer={thread.composer} />\n ) : null}\n </>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Transcript.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","clsx","truncate","StatusBadge","MessagePreview","PartPreview","messageStepCount","RoleLabel","Chip","PaneHeader","PaneHeaderStack","RailTime","RAIL_STATUS_BADGE_CLASS","SelectableRow","Sparkline","ToneBadge","ComposerPreview","ThreadPreview","MetricSeries","label","values","format","value","messageNodeId","id","formatTokens","toFixed","String","textOf","parts","filter","part","Extract","type","map","text","join","trim","rowSummary","message","tool","find","toolName","rowStepHint","tools","texts","hints","push","length","railStatus","isOptimistic","status","railAttachmentCount","attachments","TurnRow","t0","$","_c","selected","nodeId","onSelect","rowRef","t1","t2","summary","t3","stepHint","attachmentCount","t4","t5","t6","role","t7","reason","undefined","t8","t9","t10","createdAt","t11","t12","t13","t14","t15","t16","GhostComposer","composer","Symbol","for","textLength","canSend","queue","collect","messages","pick","metricSeries","timing","tokensPerSecond","firstTokenTime","Math","round","usage","outputTokens","series","TranscriptHeader","thread","expanded","setExpanded","reduce","_temp2","_temp3","errors","tokens","_temp4","Boolean","statParts","trendSeries","stats","canExpand","isRunning","_temp5","titleRow","t17","_temp6","t18","Transcript","selection","selectedRef","prevSelectionRef","handleSelect","current","scrollIntoView","block","nodeId_0","_temp","sum","message_0","sum_0","message_1","inputTokens","prev","entry"],"sources":["../../../src/views/thread/Transcript.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { truncate } from \"../../utils/common\";\nimport { StatusBadge } from \"../message\";\nimport type { MessagePreview, PartPreview } from \"../message\";\nimport { messageStepCount } from \"../message/MessageTimeline\";\nimport { RoleLabel } from \"../message/RoleLabel\";\nimport {\n Chip,\n PaneHeader,\n PaneHeaderStack,\n RailTime,\n RAIL_STATUS_BADGE_CLASS,\n SelectableRow,\n Sparkline,\n ToneBadge,\n} from \"../ui\";\nimport type { ComposerPreview, ThreadPreview } from \"./types\";\n\ninterface MetricSeries {\n label: string;\n values: number[];\n format: (value: number) => string;\n}\n\nexport const messageNodeId = (id: string) => `msg:${id}`;\n\nconst formatTokens = (value: number) =>\n value >= 1000 ? `${(value / 1000).toFixed(1)}k` : String(value);\n\nconst textOf = (parts: readonly PartPreview[]) =>\n parts\n .filter(\n (part): part is Extract<PartPreview, { type: \"text\" }> =>\n part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\\n\")\n .trim();\n\nconst rowSummary = (message: MessagePreview) => {\n const text = textOf(message.parts);\n if (text) return truncate(text, 72);\n const tool = message.parts.find(\n (part): part is Extract<PartPreview, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n );\n if (tool) return tool.toolName;\n return \"—\";\n};\n\nconst rowStepHint = (message: MessagePreview) => {\n const { tools, texts } = messageStepCount(message.parts);\n const hints: string[] = [];\n if (tools > 1) hints.push(`${tools} tools`);\n if (texts > 1) hints.push(`${texts} msgs`);\n return hints.length ? hints.join(\" · \") : null;\n};\n\nconst railStatus = (message: MessagePreview) => {\n if (message.isOptimistic) return null;\n if (!message.status || message.status.type === \"complete\") return null;\n return message.status;\n};\n\nconst railAttachmentCount = (message: MessagePreview) => {\n if (message.attachments.length > 0) return message.attachments.length;\n return message.parts.filter(\n (part) =>\n part.type === \"image\" || part.type === \"file\" || part.type === \"audio\",\n ).length;\n};\n\nconst TurnRow = memo(function TurnRow({\n message,\n selected,\n nodeId,\n onSelect,\n rowRef,\n}: {\n message: MessagePreview;\n selected: boolean;\n nodeId: string;\n onSelect: (nodeId: string) => void;\n rowRef?: React.Ref<HTMLButtonElement> | undefined;\n}) {\n const status = railStatus(message);\n const summary = rowSummary(message);\n const stepHint = rowStepHint(message);\n const attachmentCount = railAttachmentCount(message);\n\n return (\n <SelectableRow\n ref={rowRef}\n selected={selected}\n onSelect={() => onSelect(nodeId)}\n dense\n >\n <div\n className=\"flex h-10 flex-col justify-center gap-0.5\"\n title={stepHint ? `${stepHint}\\n${summary}` : summary}\n >\n <div className=\"flex min-w-0 items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <RoleLabel role={message.role} compact />\n {message.isOptimistic ? (\n <ToneBadge\n tone=\"amber\"\n size=\"sm\"\n className={RAIL_STATUS_BADGE_CLASS}\n >\n opt\n </ToneBadge>\n ) : status ? (\n <StatusBadge\n type={status.type}\n reason={\"reason\" in status ? status.reason : undefined}\n compact\n size=\"sm\"\n className={RAIL_STATUS_BADGE_CLASS}\n />\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {attachmentCount > 0 ? (\n <span\n className=\"text-muted-foreground text-[10px] leading-none\"\n title={`${attachmentCount} attachment${attachmentCount === 1 ? \"\" : \"s\"}`}\n >\n 📎{attachmentCount}\n </span>\n ) : null}\n <RailTime value={message.createdAt} />\n </div>\n </div>\n <p className=\"text-foreground min-w-0 truncate text-[12px] leading-tight\">\n {stepHint ? (\n <span className=\"text-muted-foreground\">{stepHint} · </span>\n ) : null}\n {summary}\n </p>\n </div>\n </SelectableRow>\n );\n});\n\nconst GhostComposer = ({ composer }: { composer: ComposerPreview }) => (\n <div className=\"border-border text-muted-foreground flex items-center gap-2 border-t px-3 py-2 text-[11px]\">\n <span className=\"text-foreground font-medium\">draft</span>\n <span>{composer.role ?? \"user\"}</span>\n <span>· {composer.textLength} chars</span>\n {composer.canSend ? <Chip>can send</Chip> : null}\n {composer.queue.length ? <Chip>{composer.queue.length} queued</Chip> : null}\n </div>\n);\n\nconst collect = (\n messages: readonly MessagePreview[],\n pick: (message: MessagePreview) => number | undefined,\n): number[] =>\n messages.map(pick).filter((value): value is number => value !== undefined);\n\nconst metricSeries = (messages: readonly MessagePreview[]): MetricSeries[] =>\n [\n {\n label: \"tok/s\",\n values: collect(messages, (message) => message.timing?.tokensPerSecond),\n format: (value: number) => value.toFixed(1),\n },\n {\n label: \"TTFT\",\n values: collect(messages, (message) => message.timing?.firstTokenTime),\n format: (value: number) => `${Math.round(value)}ms`,\n },\n {\n label: \"output\",\n values: collect(messages, (message) => message.usage?.outputTokens),\n format: (value: number) => String(value),\n },\n ].filter((series) => series.values.length >= 3);\n\nexport const TranscriptHeader = memo(function TranscriptHeader({\n thread,\n}: {\n thread: ThreadPreview;\n}) {\n const [expanded, setExpanded] = useState(false);\n const messages = thread.messages;\n\n const { stats, series, canExpand } = useMemo(() => {\n const tools = messages.reduce(\n (sum, message) =>\n sum + message.parts.filter((part) => part.type === \"tool-call\").length,\n 0,\n );\n const errors = messages.filter(\n (message) => message.status?.type === \"incomplete\",\n ).length;\n const tokens = messages.reduce(\n (sum, message) =>\n sum +\n (message.usage\n ? message.usage.inputTokens + message.usage.outputTokens\n : 0),\n 0,\n );\n\n const statParts = [\n `${messages.length} msg${messages.length === 1 ? \"\" : \"s\"}`,\n tokens ? `${formatTokens(tokens)} tok` : null,\n tools ? `${tools} tool${tools === 1 ? \"\" : \"s\"}` : null,\n errors ? `${errors} err` : null,\n ].filter(Boolean);\n\n const trendSeries = metricSeries(messages);\n\n return {\n stats: statParts,\n series: trendSeries,\n canExpand: trendSeries.length > 0,\n };\n }, [messages]);\n\n const titleRow = (\n <PaneHeader\n borderless={canExpand && expanded}\n trailing={\n <>\n {thread.isRunning ? (\n <ToneBadge tone=\"blue\" size=\"sm\">\n running\n </ToneBadge>\n ) : null}\n {canExpand ? (\n <button\n type=\"button\"\n onClick={() => setExpanded((prev) => !prev)}\n className=\"text-muted-foreground hover:text-foreground text-[11px] leading-none\"\n >\n <span\n className={clsx(\n \"inline-block transition-transform\",\n expanded && \"rotate-90\",\n )}\n >\n ›\n </span>{\" \"}\n trends\n </button>\n ) : null}\n </>\n }\n >\n {stats.join(\" · \")}\n </PaneHeader>\n );\n\n if (canExpand && expanded) {\n return (\n <PaneHeaderStack header={titleRow}>\n {series.map((entry) => (\n <div\n key={entry.label}\n className=\"flex items-center justify-between gap-3 px-3 py-1.5\"\n >\n <div className=\"flex flex-col\">\n <span className=\"text-muted-foreground text-[10px]\">\n {entry.label}\n </span>\n <span className=\"text-foreground text-[12px] font-medium tabular-nums\">\n {entry.format(entry.values[entry.values.length - 1]!)}\n </span>\n </div>\n <Sparkline values={entry.values} className=\"h-6 w-24\" />\n </div>\n ))}\n </PaneHeaderStack>\n );\n }\n\n return titleRow;\n});\n\nexport const Transcript = ({\n thread,\n selection,\n onSelect,\n}: {\n thread: ThreadPreview;\n selection: string | null;\n onSelect: (nodeId: string) => void;\n}) => {\n const selectedRef = useRef<HTMLButtonElement>(null);\n const prevSelectionRef = useRef(selection);\n const handleSelect = useCallback(\n (nodeId: string) => onSelect(nodeId),\n [onSelect],\n );\n\n useEffect(() => {\n if (prevSelectionRef.current === selection) return;\n prevSelectionRef.current = selection;\n selectedRef.current?.scrollIntoView({ block: \"nearest\" });\n }, [selection]);\n\n return (\n <>\n {thread.messages.map((message) => {\n const nodeId = messageNodeId(message.id);\n const selected = selection === nodeId;\n return (\n <TurnRow\n key={message.id}\n message={message}\n nodeId={nodeId}\n selected={selected}\n onSelect={handleSelect}\n rowRef={selected ? selectedRef : undefined}\n />\n );\n })}\n {thread.composer && thread.composer.textLength > 0 ? (\n <GhostComposer composer={thread.composer} />\n ) : null}\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAyBA,MAAa4B,iBAAiBC,OAAe,OAAOA;AAEpD,MAAMC,gBAAgBH,UACpBA,SAAS,MAAO,IAAIA,QAAQ,IAAA,CAAMI,QAAQ,CAAC,EAAC,KAAMC,OAAOL,KAAK;AAEhE,MAAMM,UAAUC,UACdA,MACGC,QACEC,SACCA,KAAKE,SAAS,MAClB,CAAC,CACAC,KAAKH,SAASA,KAAKI,IAAI,CAAC,CACxBC,KAAK,IAAI,CAAC,CACVC,KAAK;AAEV,MAAMC,cAAcC,YAA4B;CAC9C,MAAMJ,OAAOP,OAAOW,QAAQV,KAAK;CACjC,IAAIM,MAAM,OAAOjC,SAASiC,MAAM,EAAE;CAClC,MAAMK,OAAOD,QAAQV,MAAMY,MACxBV,SACCA,KAAKE,SAAS,WAClB;CACA,IAAIO,MAAM,OAAOA,KAAKE;CACtB,OAAO;AACT;AAEA,MAAMC,eAAeJ,YAA4B;CAC/C,MAAM,EAAEK,OAAOC,UAAUvC,iBAAiBiC,QAAQV,KAAK;CACvD,MAAMiB,QAAkB,CAAA;CACxB,IAAIF,QAAQ,GAAGE,MAAMC,KAAK,GAAGH,MAAK,OAAQ;CAC1C,IAAIC,QAAQ,GAAGC,MAAMC,KAAK,GAAGF,MAAK,MAAO;CACzC,OAAOC,MAAME,SAASF,MAAMV,KAAK,KAAK,IAAI;AAC5C;AAEA,MAAMa,cAAcV,YAA4B;CAC9C,IAAIA,QAAQW,cAAc,OAAO;CACjC,IAAI,CAACX,QAAQY,UAAUZ,QAAQY,OAAOlB,SAAS,YAAY,OAAO;CAClE,OAAOM,QAAQY;AACjB;AAEA,MAAMC,uBAAuBb,YAA4B;CACvD,IAAIA,QAAQc,YAAYL,SAAS,GAAG,OAAOT,QAAQc,YAAYL;CAC/D,OAAOT,QAAQV,MAAMC,QAClBC,SACCA,KAAKE,SAAS,WAAWF,KAAKE,SAAS,UAAUF,KAAKE,SAAS,OACnE,CAAC,CAACe;AACJ;AAEA,MAAMM,UAAU3D,KAAK,SAAA2D,QAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAiB,MAAA,EAAAlB,SAAAmB,UAAAC,QAAAC,UAAAC,WAAAN;CAYrC,IAAAO;CAAA,IAAAN,EAAA,OAAAjB,SAAA;EACgBuB,KAAAb,WAAWV,OAAO;EAACiB,EAAA,KAAAjB;EAAAiB,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAlC,MAAAL,SAAeW;CAAoB,IAAAC;CAAA,IAAAP,EAAA,OAAAjB,SAAA;EACnBwB,KAAAzB,WAAWC,OAAO;EAACiB,EAAA,KAAAjB;EAAAiB,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAnC,MAAAQ,UAAgBD;CAAoB,IAAAE;CAAA,IAAAT,EAAA,OAAAjB,SAAA;EACnB0B,KAAAtB,YAAYJ,OAAO;EAACiB,EAAA,KAAAjB;EAAAiB,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAArC,MAAAU,WAAiBD;CACjB,MAAAE,kBAAwBf,oBAAoBb,OAAO;CAAE,IAAA6B;CAAA,IAAAZ,EAAA,OAAAG,UAAAH,EAAA,OAAAI,UAAA;EAMvCQ,WAAMR,SAASD,MAAM;EAACH,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAKvB,MAAAa,KAAAH,WAAA,GAAcA,SAAQ,IAAKF,YAA3BA;CAA8C,IAAAM;CAAA,IAAAd,EAAA,OAAAjB,QAAAgC,MAAA;EAIjDD,KAAA,oBAAC,WAAD;GAAiB,MAAA/B,QAAOgC;GAAO,SAAA;EAAO,CAAA;EAAGf,EAAA,KAAAjB,QAAAgC;EAAAf,EAAA,MAAAc;CAAA,OAAAA,KAAAd,EAAA;CAAA,IAAAgB;CAAA,IAAAhB,EAAA,QAAAjB,QAAAW,gBAAAM,EAAA,QAAAL,QAAA;EACxCqB,KAAAjC,QAAOW,eACN,oBAAC,WAAD;GACO,MAAA;GACA,MAAA;GACMtC,WAAAA;GACZ,UAAA;EAJS,CAAA,IAORuC,SACF,oBAAC,aAAD;GACQ,MAAAA,OAAMlB;GACJ,QAAA,YAAYkB,SAASA,OAAMsB,SAA3BC,KAAAA;GACR,SAAA;GACK,MAAA;GACM9D,WAAAA;EAAuB,CAAA,IANlC;EAQI4C,EAAA,MAAAjB,QAAAW;EAAAM,EAAA,MAAAL;EAAAK,EAAA,MAAAgB;CAAA,OAAAA,KAAAhB,EAAA;CAAA,IAAAmB;CAAA,IAAAnB,EAAA,QAAAc,MAAAd,EAAA,QAAAgB,IAAA;EAlBVG,KAAA,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA,CACEL,IACCE,EAiBG;;EAAAhB,EAAA,MAAAc;EAAAd,EAAA,MAAAgB;EAAAhB,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAAA,IAAAoB;CAAA,IAAApB,EAAA,QAAAW,iBAAA;EAEHS,KAAAT,kBAAkB,IACjB,qBAAA,QAAA;GACY,WAAA;GACH,OAAA,GAAGA,gBAAe,aAAcA,oBAAoB,IAApB,KAAA;GAFzC,UAAA,CAGC,MACIA,eACE;EANR,CAAA,IAAA;EAOOX,EAAA,MAAAW;EAAAX,EAAA,MAAAoB;CAAA,OAAAA,KAAApB,EAAA;CAAA,IAAAqB;CAAA,IAAArB,EAAA,QAAAjB,QAAAuC,WAAA;EACRD,MAAA,oBAAC,UAAD,EAAiB,OAAAtC,QAAOuC,UAAU,CAAA;EAAItB,EAAA,MAAAjB,QAAAuC;EAAAtB,EAAA,MAAAqB;CAAA,OAAAA,MAAArB,EAAA;CAAA,IAAAuB;CAAA,IAAAvB,EAAA,QAAAqB,OAAArB,EAAA,QAAAoB,IAAA;EATxCG,MAAA,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA,CACGH,IAQDC,GACI;;EAAArB,EAAA,MAAAqB;EAAArB,EAAA,MAAAoB;EAAApB,EAAA,MAAAuB;CAAA,OAAAA,MAAAvB,EAAA;CAAA,IAAAwB;CAAA,IAAAxB,EAAA,QAAAuB,OAAAvB,EAAA,QAAAmB,IAAA;EA/BRK,MAAA,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA,CACEL,IAoBAI,GAWI;;EAAAvB,EAAA,MAAAuB;EAAAvB,EAAA,MAAAmB;EAAAnB,EAAA,MAAAwB;CAAA,OAAAA,MAAAxB,EAAA;CAAA,IAAAyB;CAAA,IAAAzB,EAAA,QAAAU,UAAA;EAEHe,MAAAf,WACC,qBAAA,QAAA;GAAgB,WAAA;GAAhB,UAAA,CAAyCA,UAAS,KAAU;EAD7D,CAAA,IAAA;EAEOV,EAAA,MAAAU;EAAAV,EAAA,MAAAyB;CAAA,OAAAA,MAAAzB,EAAA;CAAA,IAAA0B;CAAA,IAAA1B,EAAA,QAAAQ,WAAAR,EAAA,QAAAyB,KAAA;EAHVC,MAAA,qBAAA,KAAA;GAAa,WAAA;GAAb,UAAA,CACGD,KAGAjB,OACC;;EAAAR,EAAA,MAAAQ;EAAAR,EAAA,MAAAyB;EAAAzB,EAAA,MAAA0B;CAAA,OAAAA,MAAA1B,EAAA;CAAA,IAAA2B;CAAA,IAAA3B,EAAA,QAAAwB,OAAAxB,EAAA,QAAA0B,OAAA1B,EAAA,QAAAa,IAAA;EA1CNc,MAAA,qBAAA,OAAA;GACY,WAAA;GACH,OAAAd;GAFT,UAAA,CAIEW,KAiCAE,GAMI;;EAAA1B,EAAA,MAAAwB;EAAAxB,EAAA,MAAA0B;EAAA1B,EAAA,MAAAa;EAAAb,EAAA,MAAA2B;CAAA,OAAAA,MAAA3B,EAAA;CAAA,IAAA4B;CAAA,IAAA5B,EAAA,QAAAK,UAAAL,EAAA,QAAAE,YAAAF,EAAA,QAAA2B,OAAA3B,EAAA,QAAAY,IAAA;EAjDRgB,MAAA,oBAAC,eAAD;GACOvB,KAAAA;GACKH;GACA,UAAAU;GACV,OAAA;GAEAe,UAAAA;EANY,CAAA;EAkDE3B,EAAA,MAAAK;EAAAL,EAAA,MAAAE;EAAAF,EAAA,MAAA2B;EAAA3B,EAAA,MAAAY;EAAAZ,EAAA,MAAA4B;CAAA,OAAAA,MAAA5B,EAAA;CAAA,OAlDhB4B;AAkDgB,CAEnB;AAED,MAAMC,iBAAgB9B,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAA6B,aAAA/B;CAA2C,IAAAO;CAAA,IAAAN,EAAA,OAAA+B,OAAAC,IAAA,2BAAA,GAAA;EAE9D1B,KAAA,oBAAA,QAAA;GAAgB,WAAA;GAA8B,UAAA;EAAY,CAAA;EAAAN,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CACnD,MAAAO,KAAAuB,SAAQf,QAAR;CAAuB,IAAAN;CAAA,IAAAT,EAAA,OAAAO,IAAA;EAA9BE,KAAA,oBAAA,QAAA,EAAA,UAAOF,GAA+B,CAAA;EAAAP,EAAA,KAAAO;EAAAP,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,IAAAY;CAAA,IAAAZ,EAAA,OAAA8B,SAAAG,YAAA;EACtCrB,KAAA,qBAAA,QAAA,EAAA,UAAA;GAAM;GAAGkB,SAAQG;GAAY;EAAa,EAAA,CAAA;EAAAjC,EAAA,KAAA8B,SAAAG;EAAAjC,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAAA,IAAAa;CAAA,IAAAb,EAAA,OAAA8B,SAAAI,SAAA;EACzCrB,KAAAiB,SAAQI,UAAW,oBAAC,MAAD,EAAA,UAAM,WAAD,CAAA,IAAxB;EAA+ClC,EAAA,KAAA8B,SAAAI;EAAAlC,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,IAAAc;CAAA,IAAAd,EAAA,OAAA8B,SAAAK,MAAA3C,QAAA;EAC/CsB,KAAAgB,SAAQK,MAAM3C,SAAU,qBAAC,MAAD,EAAA,UAAA,CAAOsC,SAAQK,MAAM3C,QAAQ,SAAxB,EAAA,CAAA,IAA7B;EAA0EQ,EAAA,KAAA8B,SAAAK,MAAA3C;EAAAQ,EAAA,KAAAc;CAAA,OAAAA,KAAAd,EAAA;CAAA,IAAAgB;CAAA,IAAAhB,EAAA,OAAAS,MAAAT,EAAA,QAAAY,MAAAZ,EAAA,QAAAa,MAAAb,EAAA,QAAAc,IAAA;EAL7EE,KAAA,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA;IACEV;IACAG;IACAG;IACCC;IACAC;GACG;;EAAAd,EAAA,KAAAS;EAAAT,EAAA,MAAAY;EAAAZ,EAAA,MAAAa;EAAAb,EAAA,MAAAc;EAAAd,EAAA,MAAAgB;CAAA,OAAAA,KAAAhB,EAAA;CAAA,OANNgB;AAMM;AAGR,MAAMoB,WACJC,UACAC,SAEAD,SAAS3D,IAAI4D,IAAI,CAAC,CAAChE,QAAQR,UAA2BA,UAAUoD,KAAAA,CAAS;AAE3E,MAAMqB,gBAAgBF,aACpB;CACE;EACE1E,OAAO;EACPC,QAAQwE,QAAQC,WAAWtD,YAAYA,QAAQyD,QAAQC,eAAe;EACtE5E,SAASC,UAAkBA,MAAMI,QAAQ,CAAC;CAC5C;CACA;EACEP,OAAO;EACPC,QAAQwE,QAAQC,WAAWtD,YAAYA,QAAQyD,QAAQE,cAAc;EACrE7E,SAASC,UAAkB,GAAG6E,KAAKC,MAAM9E,KAAK,EAAC;CACjD;CACA;EACEH,OAAO;EACPC,QAAQwE,QAAQC,WAAWtD,YAAYA,QAAQ8D,OAAOC,YAAY;EAClEjF,SAASC,UAAkBK,OAAOL,KAAK;CACzC;AAAC,CACF,CAACQ,QAAQyE,WAAWA,OAAOnF,OAAO4B,UAAU,CAAC;AAEhD,MAAawD,mBAAmB7G,KAAK,SAAA6G,iBAAAjD,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAA0B,MAAA,EAAAgD,WAAAlD;CAK7D,MAAA,CAAAmD,UAAAC,eAAgC3G,SAAS,KAAK;CAC9C,MAAA6F,WAAiBY,OAAMZ;CAAU,IAAA/B;CAAA,IAAAN,EAAA,OAAAqC,UAAA;EAGjB/B,KAAA+B,SAAQe,OACpBC,QAEA,CACF;EAACrD,EAAA,KAAAqC;EAAArC,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAJD,MAAAZ,QAAckB;CAIZ,IAAAC;CAAA,IAAAP,EAAA,OAAAqC,UAAA;EACa9B,KAAA8B,SAAQ/D,OACrBgF,MACF;EAACtD,EAAA,KAAAqC;EAAArC,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAFD,MAAAuD,SAAehD,GAEdf;CAAQ,IAAAiB;CAAA,IAAAG;CAAA,IAAAZ,EAAA,OAAAqC,UAAA;EACT,MAAAmB,SAAenB,SAAQe,OACrBK,QAKA,CACF;EAGEhD,KAAA,GAAG4B,SAAQ7C,OAAO,MAAO6C,SAAQ7C,WAAY,IAApB,KAAA;EACzBoB,KAAA4C,SAAA,GAAYvF,aAAauF,MAAM,EAAC,QAAhC;EAA6CxD,EAAA,KAAAqC;EAAArC,EAAA,KAAAS;EAAAT,EAAA,KAAAY;CAAA,OAAA;EAAAH,KAAAT,EAAA;EAAAY,KAAAZ,EAAA;CAAA;CAC7C,MAAAa,KAAAzB,QAAA,GAAWA,MAAK,OAAQA,UAAU,IAAV,KAAA,QAAxB;CACA,MAAA0B,KAAAyC,SAAA,GAAYA,OAAM,QAAlB;CAA+B,IAAAvC;CAAA,IAAAhB,EAAA,OAAAS,MAAAT,EAAA,OAAAY,MAAAZ,EAAA,OAAAa,MAAAb,EAAA,QAAAc,IAAA;EAJfE,KAAA;GAChBP;GACAG;GACAC;GACAC;EAA+B,CAChC,CAAAxC,OAAQoF,OAAO;EAAC1D,EAAA,KAAAS;EAAAT,EAAA,KAAAY;EAAAZ,EAAA,KAAAa;EAAAb,EAAA,MAAAc;EAAAd,EAAA,MAAAgB;CAAA,OAAAA,KAAAhB,EAAA;CALjB,MAAA2D,YAAkB3C;CAKA,IAAAG;CAAA,IAAAnB,EAAA,QAAAqC,UAAA;EAEElB,KAAAoB,aAAaF,QAAQ;EAACrC,EAAA,MAAAqC;EAAArC,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAA1C,MAAA4D,cAAoBzC;CAKP,MAAAC,KAAAwC,YAAWpE,SAAU;CAAC,IAAA6B;CAAA,IAAArB,EAAA,QAAA2D,aAAA3D,EAAA,QAAAoB,MAAApB,EAAA,QAAA4D,aAAA;EAH5BvC,MAAA;GAAAwC,OACEF;GAASZ,QACRa;GAAWE,WACR1C;EACb;EAACpB,EAAA,MAAA2D;EAAA3D,EAAA,MAAAoB;EAAApB,EAAA,MAAA4D;EAAA5D,EAAA,MAAAqB;CAAA,OAAAA,MAAArB,EAAA;CA/BH,MAAA,EAAA6D,OAAAd,QAAAe,cA2BEzC;CASc,MAAAE,MAAAuC,aAAAZ;CAAqB,IAAA1B;CAAA,IAAAxB,EAAA,QAAAiD,OAAAc,WAAA;EAG5BvC,MAAAyB,OAAMc,YACL,oBAAC,WAAD;GAAgB,MAAA;GAAY,MAAA;GAAK,UAAA;EAAvB,CAAA,IADX;EAIO/D,EAAA,MAAAiD,OAAAc;EAAA/D,EAAA,MAAAwB;CAAA,OAAAA,MAAAxB,EAAA;CAAA,IAAAyB;CAAA,IAAAzB,EAAA,QAAA8D,aAAA9D,EAAA,QAAAkD,UAAA;EACPzB,MAAAqC,YACC,qBAAA,UAAA;GACO,MAAA;GACI,eAAMX,YAAYa,MAAe;GAChC,WAAA;GAHZ,UAAA;IAKE,oBAAA,QAAA;KACa,WAAAvH,KACT,qCACAyG,YAAA,WACF;KACD,UAAA;IAEM,CAAA;IAAC;IAAI;GAEL;EAfV,CAAA,IAAA;EAgBOlD,EAAA,MAAA8D;EAAA9D,EAAA,MAAAkD;EAAAlD,EAAA,MAAAyB;CAAA,OAAAA,MAAAzB,EAAA;CAAA,IAAA0B;CAAA,IAAA1B,EAAA,QAAAwB,OAAAxB,EAAA,QAAAyB,KAAA;EAtBVC,MAAA,qBAAA,YAAA,EAAA,UAAA,CACGF,KAKAC,GAgBO,EAAA,CAAA;EACPzB,EAAA,MAAAwB;EAAAxB,EAAA,MAAAyB;EAAAzB,EAAA,MAAA0B;CAAA,OAAAA,MAAA1B,EAAA;CAAA,IAAA2B;CAAA,IAAA3B,EAAA,QAAA6D,OAAA;EAGJlC,MAAAkC,MAAKjF,KAAM,KAAK;EAACoB,EAAA,MAAA6D;EAAA7D,EAAA,MAAA2B;CAAA,OAAAA,MAAA3B,EAAA;CAAA,IAAA4B;CAAA,IAAA5B,EAAA,QAAAuB,OAAAvB,EAAA,QAAA0B,OAAA1B,EAAA,QAAA2B,KAAA;EA7BpBC,MAAA,oBAAC,YAAD;GACc,YAAAL;GAEV,UAAAG;GA0BDC,UAAAA;EA7BQ,CAAA;EA8BE3B,EAAA,MAAAuB;EAAAvB,EAAA,MAAA0B;EAAA1B,EAAA,MAAA2B;EAAA3B,EAAA,MAAA4B;CAAA,OAAAA,MAAA5B,EAAA;CA/Bf,MAAAiE,WACErC;CAiCF,IAAIkC,aAAAZ,UAAqB;EAAA,IAAAgB;EAAA,IAAAlE,EAAA,QAAA+C,QAAA;GAGlBmB,MAAAnB,OAAMrE,IAAKyF,MAeX;GAACnE,EAAA,MAAA+C;GAAA/C,EAAA,MAAAkE;EAAA,OAAAA,MAAAlE,EAAA;EAAA,IAAAoE;EAAA,IAAApE,EAAA,QAAAkE,OAAAlE,EAAA,QAAAiE,UAAA;GAhBJG,MAAA,oBAAC,iBAAD;IAAyBH,QAAAA;IACtBC,UAAAA;GADa,CAAA;GAiBElE,EAAA,MAAAkE;GAAAlE,EAAA,MAAAiE;GAAAjE,EAAA,MAAAoE;EAAA,OAAAA,MAAApE,EAAA;EAAA,OAjBlBoE;CAiBkB;CAErB,OAEMH;AAAQ,CAChB;AAED,MAAaI,cAAatE,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAgD,QAAAqB,WAAAlE,aAAAL;CASzB,MAAAwE,cAAoBhI,OAA0B,IAAI;CAClD,MAAAiI,mBAAyBjI,OAAO+H,SAAS;CAAE,IAAAhE;CAAA,IAAAN,EAAA,OAAAI,UAAA;EAEzCE,MAAAH,WAAoBC,SAASD,MAAM;EAACH,EAAA,KAAAI;EAAAJ,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CADtC,MAAAyE,eAAqBnE;CAGnB,IAAAC;CAAA,IAAAE;CAAA,IAAAT,EAAA,OAAAsE,WAAA;EAEQ/D,WAAA;GACR,IAAIiE,iBAAgBE,YAAaJ,WAAS;GAC1CE,iBAAgBE,UAAWJ;GAC3BC,YAAWG,SAAwBC,eAAC,EAAAC,OAAS,UAAU,CAAC;EAAC;EACxDnE,KAAA,CAAC6D,SAAS;EAACtE,EAAA,KAAAsE;EAAAtE,EAAA,KAAAO;EAAAP,EAAA,KAAAS;CAAA,OAAA;EAAAF,KAAAP,EAAA;EAAAS,KAAAT,EAAA;CAAA;CAJd3D,UAAUkE,IAIPE,EAAW;CAAC,IAAAG;CAAA,IAAAZ,EAAA,OAAAyE,gBAAAzE,EAAA,OAAAsE,aAAAtE,EAAA,OAAAiD,OAAAZ,UAAA;EAIVzB,KAAAqC,OAAMZ,SAAS3D,KAAKK,YAAA;GACnB,MAAA8F,WAAe9G,cAAcgB,QAAOf,EAAG;GACvC,MAAAkC,WAAiBoE,cAAcnE;GAAO,OAEpC,oBAAC,SAAD;IAEWpB;IACDoB,QAAAA;IACED;IACAuE,UAAAA;IACF,QAAAvE,WAAAqE,cAAArD,KAAAA;GAAkC,GALrCnC,QAAOf,EAK8B;EAC1C,CAEL;EAACgC,EAAA,KAAAyE;EAAAzE,EAAA,KAAAsE;EAAAtE,EAAA,KAAAiD,OAAAZ;EAAArC,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAAA,IAAAa;CAAA,IAAAb,EAAA,OAAAiD,OAAAnB,UAAA;EACDjB,KAAAoC,OAAMnB,YAAamB,OAAMnB,SAASG,aAAc,IAC/C,oBAAC,eAAD,EAAyB,UAAAgB,OAAMnB,SAAS,CAAA,IADzC;EAEO9B,EAAA,KAAAiD,OAAAnB;EAAA9B,EAAA,MAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,IAAAc;CAAA,IAAAd,EAAA,QAAAY,MAAAZ,EAAA,QAAAa,IAAA;EAjBVC,KAAA,qBAAA,YAAA,EAAA,UAAA,CACGF,IAcAC,EAEO,EAAA,CAAA;EACPb,EAAA,MAAAY;EAAAZ,EAAA,MAAAa;EAAAb,EAAA,MAAAc;CAAA,OAAAA,KAAAd,EAAA;CAAA,OAlBHc;AAkBG;AA/I8B,SAAAgE,MAAAvG,MAAA;CAAA,OAWQA,KAAIE,SAAU;AAAW;AAXjC,SAAA4E,OAAA0B,KAAAhG,SAAA;CAAA,OAW7BgG,MAAMhG,QAAOV,MAAMC,OAAQwG,KAAmC,CAAC,CAAAtF;AAAO;AAXzC,SAAA8D,OAAA0B,WAAA;CAAA,OAelBjG,UAAOY,QAAalB,SAAK;AAAY;AAfnB,SAAAgF,OAAAwB,OAAAC,WAAA;CAAA,OAmB7BH,SACChG,UAAO8D,QACJ9D,UAAO8D,MAAMsC,cAAepG,UAAO8D,MAAMC,eAD5C;AAEK;AAtBuB,SAAAkB,OAAAoB,MAAA;CAAA,OAuDc,CAACA;AAAI;AAvDnB,SAAAjB,OAAAkB,OAAA;CAAA,OAgF3B,qBAAA,OAAA;EAEY,WAAA;EAFZ,UAAA,CAIE,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA,CACE,oBAAA,QAAA;IAAgB,WAAA;IACbA,UAAAA,MAAK1H;GACD,CAAA,GACP,oBAAA,QAAA;IAAgB,WAAA;IACb0H,UAAAA,MAAKxH,OAAQwH,MAAKzH,OAAQyH,MAAKzH,OAAO4B,SAAU,EAAG;GAC/C,CAAA,CACH;EACN,CAAA,GAAA,oBAAC,WAAD;GAAmB,QAAA6F,MAAKzH;GAAmB,WAAA;EAAU,CAAA,CACjD;CAZCyH,GAAAA,MAAK1H,KAYN;AAAA"}
@@ -4,9 +4,8 @@ import { ThreadListPreview, ThreadPreview } from "./types.js";
4
4
  * Picks the thread to show for a selected conversation id, preferring a cached
5
5
  * snapshot, then the live main thread, then the single-thread runtime state.
6
6
  */
7
- declare const resolveThreadForId: (state: Record<string, unknown>, snapshots: Readonly<Record<string, unknown>> | undefined, threadId: string, threadList: ThreadListPreview | null) => ThreadPreview | null;
7
+ export declare const resolveThreadForId: (state: Record<string, unknown>, snapshots: Readonly<Record<string, unknown>> | undefined, threadId: string, threadList: ThreadListPreview | null) => ThreadPreview | null;
8
8
  /** Picks the thread to show when the runtime exposes no conversation list. */
9
- declare const resolveSingleThread: (state: Record<string, unknown>) => ThreadPreview | null;
9
+ export declare const resolveSingleThread: (state: Record<string, unknown>) => ThreadPreview | null;
10
10
  //#endregion
11
- export { resolveSingleThread, resolveThreadForId };
12
11
  //# sourceMappingURL=resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","names":[],"sources":["../../../src/views/thread/resolve.ts"],"mappings":";;;;;;cAOa,qBACX,OAAO,yBACP,WAAW,SAAS,sCACpB,kBACA,YAAY,6BACX;;cAeU,sBACX,OAAO,4BACN"}
1
+ {"version":3,"file":"resolve.d.ts","names":[],"sources":["../../../src/views/thread/resolve.ts"],"mappings":";;;;;;qBAOa,qBACX,OAAO,yBACP,WAAW,SAAS,sCACpB,kBACA,YAAY,6BACX;;qBAeU,sBACX,OAAO,4BACN"}
@@ -1,7 +1,7 @@
1
1
  import { AttachmentPreview } from "../attachments/types.js";
2
2
  import { MessagePreview } from "../message/types.js";
3
3
  //#region src/views/thread/types.d.ts
4
- interface ThreadListItemPreview {
4
+ export interface ThreadListItemPreview {
5
5
  id: string;
6
6
  title?: string;
7
7
  status?: string;
@@ -9,14 +9,14 @@ interface ThreadListItemPreview {
9
9
  remoteId?: string;
10
10
  lastMessageAt?: string;
11
11
  }
12
- interface SuggestionPreview {
12
+ export interface SuggestionPreview {
13
13
  prompt?: string;
14
14
  }
15
- interface ComposerQueueItem {
15
+ export interface ComposerQueueItem {
16
16
  id?: string;
17
17
  prompt: string;
18
18
  }
19
- interface ComposerPreview {
19
+ export interface ComposerPreview {
20
20
  textLength: number;
21
21
  role?: string;
22
22
  attachments: AttachmentPreview[];
@@ -27,7 +27,7 @@ interface ComposerPreview {
27
27
  type?: string;
28
28
  queue: ComposerQueueItem[];
29
29
  }
30
- interface ThreadPreview {
30
+ export interface ThreadPreview {
31
31
  isDisabled?: boolean;
32
32
  isLoading?: boolean;
33
33
  isRunning?: boolean;
@@ -36,7 +36,7 @@ interface ThreadPreview {
36
36
  capabilities: string[];
37
37
  composer?: ComposerPreview;
38
38
  }
39
- interface ThreadListPreview {
39
+ export interface ThreadListPreview {
40
40
  mainThreadId?: string;
41
41
  newThreadId?: string | null;
42
42
  threadIds: string[];
@@ -45,5 +45,5 @@ interface ThreadListPreview {
45
45
  main?: ThreadPreview;
46
46
  }
47
47
  //#endregion
48
- export { type AttachmentPreview, ComposerPreview, ComposerQueueItem, SuggestionPreview, ThreadListItemPreview, ThreadListPreview, ThreadPreview };
48
+ export type { AttachmentPreview };
49
49
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/views/thread/types.ts"],"mappings":";;;UAKiB;EACf;EACA;EACA;EACA;EACA;EACA;;UAGe;EACf;;UAGe;EACf;EACA;;UAGe;EACf;EACA;EACA,aAAa;EACb;EACA;EACA;EACA;EACA;EACA,OAAO;;UAGQ;EACf;EACA;EACA;EACA,UAAU;EACV,aAAa;EACb;EACA,WAAW;;UAGI;EACf;EACA;EACA;EACA;EACA,aAAa;EACb,OAAO"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/views/thread/types.ts"],"mappings":";;;iBAKiB;EACf;EACA;EACA;EACA;EACA;EACA;;iBAGe;EACf;;iBAGe;EACf;EACA;;iBAGe;EACf;EACA;EACA,aAAa;EACb;EACA;EACA;EACA;EACA;EACA,OAAO;;iBAGQ;EACf;EACA;EACA;EACA,UAAU;EACV,aAAa;EACb;EACA,WAAW;;iBAGI;EACf;EACA;EACA;EACA;EACA,aAAa;EACb,OAAO"}
@@ -1,9 +1,8 @@
1
1
  import { ComposerPreview, ThreadListItemPreview, ThreadListPreview, ThreadPreview } from "./types.js";
2
2
  //#region src/views/thread/utils.d.ts
3
- declare const parseComposerPreview: (value: unknown) => ComposerPreview | undefined;
4
- declare const parseThreadListItemPreview: (value: unknown) => ThreadListItemPreview | null;
5
- declare const parseThreadPreview: (value: unknown) => ThreadPreview | null;
6
- declare const parseThreadListPreview: (value: unknown) => ThreadListPreview | null;
3
+ export declare const parseComposerPreview: (value: unknown) => ComposerPreview | undefined;
4
+ export declare const parseThreadListItemPreview: (value: unknown) => ThreadListItemPreview | null;
5
+ export declare const parseThreadPreview: (value: unknown) => ThreadPreview | null;
6
+ export declare const parseThreadListPreview: (value: unknown) => ThreadListPreview | null;
7
7
  //#endregion
8
- export { parseComposerPreview, parseThreadListItemPreview, parseThreadListPreview, parseThreadPreview };
9
8
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/views/thread/utils.ts"],"mappings":";;cAmBa,uBACX,mBACC;cAyCU,6BACX,mBACC;cAmBU,qBAAsB,mBAAiB;cAsCvC,yBACX,mBACC"}
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/views/thread/utils.ts"],"mappings":";;qBAmBa,uBACX,mBACC;qBAyCU,6BACX,mBACC;qBAmBU,qBAAsB,mBAAiB;qBAsCvC,yBACX,mBACC"}
@@ -1,8 +1,7 @@
1
1
  import { ReactNode } from "react";
2
2
  //#region src/views/ui/CenteredMessage.d.ts
3
- declare const CenteredMessage: ({ children }: {
3
+ export declare const CenteredMessage: ({ children }: {
4
4
  children: ReactNode;
5
5
  }) => import("react").JSX.Element;
6
6
  //#endregion
7
- export { CenteredMessage };
8
7
  //# sourceMappingURL=CenteredMessage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CenteredMessage.d.ts","names":[],"sources":["../../../src/views/ui/CenteredMessage.tsx"],"mappings":";;cAEa,oBAAmB;EAAgB,UAAU;sBAAW,IAAA"}
1
+ {"version":3,"file":"CenteredMessage.d.ts","names":[],"sources":["../../../src/views/ui/CenteredMessage.tsx"],"mappings":";;qBAEa,oBAAmB;EAAgB,UAAU;sBAAW,IAAA"}
@@ -1,9 +1,8 @@
1
1
  import { ReactNode } from "react";
2
2
  //#region src/views/ui/Chip.d.ts
3
- declare const Chip: ({ className, children }: {
3
+ export declare const Chip: ({ className, children }: {
4
4
  className?: string | undefined;
5
5
  children: ReactNode;
6
6
  }) => import("react").JSX.Element;
7
7
  //#endregion
8
- export { Chip };
9
8
  //# sourceMappingURL=Chip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chip.d.ts","names":[],"sources":["../../../src/views/ui/Chip.tsx"],"mappings":";;cAIa,SAAQ,WAAA;EAInB;EACA,UAAU;sBACX,IAAA"}
1
+ {"version":3,"file":"Chip.d.ts","names":[],"sources":["../../../src/views/ui/Chip.tsx"],"mappings":";;qBAIa,SAAQ,WAAA;EAInB;EACA,UAAU;sBACX,IAAA"}
@@ -1,6 +1,5 @@
1
1
  import { ButtonHTMLAttributes } from "react";
2
2
  //#region src/views/ui/ControlButton.d.ts
3
- declare const ControlButton: ({ className, ...props }: ButtonHTMLAttributes<HTMLButtonElement>) => import("react").JSX.Element;
3
+ export declare const ControlButton: ({ className, ...props }: ButtonHTMLAttributes<HTMLButtonElement>) => import("react").JSX.Element;
4
4
  //#endregion
5
- export { ControlButton };
6
5
  //# sourceMappingURL=ControlButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ControlButton.d.ts","names":[],"sources":["../../../src/views/ui/ControlButton.tsx"],"mappings":";;cAGa,kBAAiB,cAAA,SAG3B,qBAAqB,uCAAkB,IAAA"}
1
+ {"version":3,"file":"ControlButton.d.ts","names":[],"sources":["../../../src/views/ui/ControlButton.tsx"],"mappings":";;qBAGa,kBAAiB,cAAA,SAG3B,qBAAqB,uCAAkB,IAAA"}
@@ -1,6 +1,6 @@
1
1
  //#region src/views/ui/CopyButton.d.ts
2
- declare const CopyButton: ({ value, label, copiedLabel, className, iconOnly, size }: {
3
- value: string;
2
+ export declare const CopyButton: ({ value, label, copiedLabel, className, iconOnly, size }: {
3
+ value: string | (() => string);
4
4
  label?: string;
5
5
  copiedLabel?: string;
6
6
  className?: string | undefined;
@@ -8,5 +8,4 @@ declare const CopyButton: ({ value, label, copiedLabel, className, iconOnly, siz
8
8
  size?: "default" | "sm";
9
9
  }) => import("react").JSX.Element;
10
10
  //#endregion
11
- export { CopyButton };
12
11
  //# sourceMappingURL=CopyButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CopyButton.d.ts","names":[],"sources":["../../../src/views/ui/CopyButton.tsx"],"mappings":";cA6Ba,eAAc,OAAA,OAAA,aAAA,WAAA,UAAA;EAQzB;EACA;EACA;EACA;EACA;EACA;sBACD,IAAA"}
1
+ {"version":3,"file":"CopyButton.d.ts","names":[],"sources":["../../../src/views/ui/CopyButton.tsx"],"mappings":";qBA6Ba,eAAc,OAAA,OAAA,aAAA,WAAA,UAAA;EAQzB;EACA;EACA;EACA;EACA;EACA;sBACD,IAAA"}
@@ -56,11 +56,11 @@ const CopyButton = (t0) => {
56
56
  const { isCopied, copy } = useCopyToClipboard();
57
57
  let t5;
58
58
  if ($[0] !== value) {
59
- t5 = value.trim();
59
+ t5 = typeof value === "string" && !value.trim();
60
60
  $[0] = value;
61
61
  $[1] = t5;
62
62
  } else t5 = $[1];
63
- const empty = !t5;
63
+ const empty = t5;
64
64
  const iconPx = size === "sm" ? 10 : 12;
65
65
  const t6 = isCopied ? copiedLabel : label;
66
66
  const t7 = isCopied ? copiedLabel : label;
@@ -68,7 +68,7 @@ const CopyButton = (t0) => {
68
68
  if ($[2] !== copy || $[3] !== value) {
69
69
  t8 = (event) => {
70
70
  event.stopPropagation();
71
- copy(value);
71
+ copy(typeof value === "function" ? value() : value);
72
72
  };
73
73
  $[2] = copy;
74
74
  $[3] = value;
@@ -1 +1 @@
1
- {"version":3,"file":"CopyButton.js","names":["clsx","useCopyToClipboard","ClipboardIcon","t0","$","_c","size","t1","undefined","t2","t3","Symbol","for","t4","CopyButton","value","label","copiedLabel","className","iconOnly","isCopied","copy","t5","trim","empty","iconPx","t6","t7","t8","event","stopPropagation","t9","t10","t11","t12","t13"],"sources":["../../../src/views/ui/CopyButton.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { useCopyToClipboard } from \"./useCopyToClipboard\";\n\nconst ClipboardIcon = ({ size = 12 }: { size?: number }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <rect\n x=\"9\"\n y=\"9\"\n width=\"11\"\n height=\"11\"\n rx=\"1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n />\n <path\n d=\"M7 15H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h7a2 2 0 0 1 2 2v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nexport const CopyButton = ({\n value,\n label = \"Copy\",\n copiedLabel = \"Copied\",\n className,\n iconOnly = false,\n size = \"default\",\n}: {\n value: string;\n label?: string;\n copiedLabel?: string;\n className?: string | undefined;\n iconOnly?: boolean;\n size?: \"default\" | \"sm\";\n}) => {\n const { isCopied, copy } = useCopyToClipboard();\n const empty = !value.trim();\n const iconPx = size === \"sm\" ? 10 : 12;\n\n return (\n <button\n type=\"button\"\n disabled={empty}\n aria-label={isCopied ? copiedLabel : label}\n title={isCopied ? copiedLabel : label}\n onClick={(event) => {\n event.stopPropagation();\n copy(value);\n }}\n className={clsx(\n \"text-muted-foreground hover:text-foreground inline-flex shrink-0 items-center justify-center rounded transition-colors disabled:pointer-events-none disabled:opacity-40\",\n iconOnly\n ? size === \"sm\"\n ? \"hover:bg-accent/60 size-4\"\n : \"hover:bg-accent/60 size-6\"\n : \"hover:bg-accent/60 h-6 gap-1 px-1.5 text-[10px] font-medium\",\n className,\n )}\n >\n <ClipboardIcon size={iconPx} />\n {!iconOnly ? <span>{isCopied ? copiedLabel : label}</span> : null}\n </button>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"CopyButton.js","names":["clsx","useCopyToClipboard","ClipboardIcon","t0","$","_c","size","t1","undefined","t2","t3","Symbol","for","t4","CopyButton","value","label","copiedLabel","className","iconOnly","isCopied","copy","t5","trim","empty","iconPx","t6","t7","t8","event","stopPropagation","t9","t10","t11","t12","t13"],"sources":["../../../src/views/ui/CopyButton.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { useCopyToClipboard } from \"./useCopyToClipboard\";\n\nconst ClipboardIcon = ({ size = 12 }: { size?: number }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <rect\n x=\"9\"\n y=\"9\"\n width=\"11\"\n height=\"11\"\n rx=\"1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n />\n <path\n d=\"M7 15H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h7a2 2 0 0 1 2 2v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nexport const CopyButton = ({\n value,\n label = \"Copy\",\n copiedLabel = \"Copied\",\n className,\n iconOnly = false,\n size = \"default\",\n}: {\n value: string | (() => string);\n label?: string;\n copiedLabel?: string;\n className?: string | undefined;\n iconOnly?: boolean;\n size?: \"default\" | \"sm\";\n}) => {\n const { isCopied, copy } = useCopyToClipboard();\n const empty = typeof value === \"string\" && !value.trim();\n const iconPx = size === \"sm\" ? 10 : 12;\n\n return (\n <button\n type=\"button\"\n disabled={empty}\n aria-label={isCopied ? copiedLabel : label}\n title={isCopied ? copiedLabel : label}\n onClick={(event) => {\n event.stopPropagation();\n copy(typeof value === \"function\" ? value() : value);\n }}\n className={clsx(\n \"text-muted-foreground hover:text-foreground inline-flex shrink-0 items-center justify-center rounded transition-colors disabled:pointer-events-none disabled:opacity-40\",\n iconOnly\n ? size === \"sm\"\n ? \"hover:bg-accent/60 size-4\"\n : \"hover:bg-accent/60 size-6\"\n : \"hover:bg-accent/60 h-6 gap-1 px-1.5 text-[10px] font-medium\",\n className,\n )}\n >\n <ClipboardIcon size={iconPx} />\n {!iconOnly ? <span>{isCopied ? copiedLabel : label}</span> : null}\n </button>\n );\n};\n"],"mappings":";;;;;AAGA,MAAME,iBAAgBC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,MAAAC,OAAAJ;CAAE,MAAAG,OAAAC,OAAAC,KAAAA,IAAA,KAAAD;CAAS,IAAAE;CAAA,IAAAC;CAAA,IAAAN,EAAA,OAAAO,OAAAC,IAAA,2BAAA,GAAA;EAQ9BH,KAAA,oBAAA,QAAA;GACI,GAAA;GACA,GAAA;GACI,OAAA;GACC,QAAA;GACJ,IAAA;GACI,QAAA;GACK,aAAA;EAAM,CAAA;EAEpBC,KAAA,oBAAA,QAAA;GACI,GAAA;GACK,QAAA;GACK,aAAA;GACE,eAAA;EAAO,CAAA;EACrBN,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAA;EAAAD,KAAAL,EAAA;EAAAM,KAAAN,EAAA;CAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAE,MAAA;EArBJO,KAAA,qBAAA,OAAA;GACSP,OAAAA;GACCA,QAAAA;GACA,SAAA;GACH,MAAA;GACO,eAAA;GALd,UAAA,CAOEG,IASAC,EAMI;;EAAAN,EAAA,KAAAE;EAAAF,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OAtBNS;AAsBM;AAGR,MAAaC,cAAaX,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAU,OAAAC,OAAAT,IAAAU,aAAAR,IAAAS,WAAAC,UAAAT,IAAAJ,MAAAO,OAAAV;CAEzB,MAAAa,QAAAT,OAAAC,KAAAA,IAAA,SAAAD;CACA,MAAAU,cAAAR,OAAAD,KAAAA,IAAA,WAAAC;CAEA,MAAAU,WAAAT,OAAAF,KAAAA,IAAA,QAAAE;CACA,MAAAJ,OAAAO,OAAAL,KAAAA,IAAA,YAAAK;CASA,MAAA,EAAAO,UAAAC,SAA2BpB,mBAAmB;CAAE,IAAAqB;CAAA,IAAAlB,EAAA,OAAAW,OAAA;EAClCO,KAAA,OAAOP,UAAU,YAAjB,CAA8BA,MAAKQ,KAAM;EAACnB,EAAA,KAAAW;EAAAX,EAAA,KAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAxD,MAAAoB,QAAcF;CACd,MAAAG,SAAenB,SAAS,OAAT,KAAA;CAMC,MAAAoB,KAAAN,WAAAH,cAAAD;CACL,MAAAW,KAAAP,WAAAH,cAAAD;CAA8B,IAAAY;CAAA,IAAAxB,EAAA,OAAAiB,QAAAjB,EAAA,OAAAW,OAAA;EAC5Ba,MAAAC,UAAA;GACPA,MAAKC,gBAAiB;GACtBT,KAAK,OAAON,UAAU,aAAaA,MAAc,IAA5CA,KAA6C;EAAC;EACpDX,EAAA,KAAAiB;EAAAjB,EAAA,KAAAW;EAAAX,EAAA,KAAAwB;CAAA,OAAAA,KAAAxB,EAAA;CAGC,MAAA2B,KAAAZ,WACIb,SAAS,OAAT,8BAAA,8BADJ;CAIiE,IAAA0B;CAAA,IAAA5B,EAAA,OAAAc,aAAAd,EAAA,OAAA2B,IAAA;EANxDC,MAAAhC,KACT,2KACA+B,IAKAb,SACF;EAACd,EAAA,KAAAc;EAAAd,EAAA,KAAA2B;EAAA3B,EAAA,KAAA4B;CAAA,OAAAA,MAAA5B,EAAA;CAAA,IAAA6B;CAAA,IAAA7B,EAAA,OAAAqB,QAAA;EAEDQ,MAAA,oBAAC,eAAD,EAAqBR,MAAAA,OAAM,CAAA;EAAIrB,EAAA,KAAAqB;EAAArB,EAAA,KAAA6B;CAAA,OAAAA,MAAA7B,EAAA;CAAA,IAAA8B;CAAA,IAAA9B,EAAA,QAAAa,eAAAb,EAAA,QAAAe,YAAAf,EAAA,QAAAgB,YAAAhB,EAAA,QAAAY,OAAA;EAC9BkB,MAAA,CAACf,WAAW,oBAAA,QAAA,EAAA,UAAOC,WAAAH,cAAAD,MAAsC,CAAA,IAAzD;EAAgEZ,EAAA,MAAAa;EAAAb,EAAA,MAAAe;EAAAf,EAAA,MAAAgB;EAAAhB,EAAA,MAAAY;EAAAZ,EAAA,MAAA8B;CAAA,OAAAA,MAAA9B,EAAA;CAAA,IAAA+B;CAAA,IAAA/B,EAAA,QAAAoB,SAAApB,EAAA,QAAA4B,OAAA5B,EAAA,QAAA6B,OAAA7B,EAAA,QAAA8B,OAAA9B,EAAA,QAAAsB,MAAAtB,EAAA,QAAAuB,MAAAvB,EAAA,QAAAwB,IAAA;EApBnEO,MAAA,qBAAA,UAAA;GACO,MAAA;GACKX,UAAAA;GACE,cAAAE;GACL,OAAAC;GACE,SAAAC;GAIE,WAAAI;GATb,UAAA,CAmBEC,KACCC,GACM;;EAAA9B,EAAA,MAAAoB;EAAApB,EAAA,MAAA4B;EAAA5B,EAAA,MAAA6B;EAAA7B,EAAA,MAAA8B;EAAA9B,EAAA,MAAAsB;EAAAtB,EAAA,MAAAuB;EAAAvB,EAAA,MAAAwB;EAAAxB,EAAA,MAAA+B;CAAA,OAAAA,MAAA/B,EAAA;CAAA,OArBT+B;AAqBS"}
@@ -1,8 +1,7 @@
1
1
  import { ReactNode } from "react";
2
2
  //#region src/views/ui/EmptyState.d.ts
3
- declare const EmptyState: ({ children }: {
3
+ export declare const EmptyState: ({ children }: {
4
4
  children: ReactNode;
5
5
  }) => import("react").JSX.Element;
6
6
  //#endregion
7
- export { EmptyState };
8
7
  //# sourceMappingURL=EmptyState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyState.d.ts","names":[],"sources":["../../../src/views/ui/EmptyState.tsx"],"mappings":";;cAEa,eAAc;EAAgB,UAAU;sBAAW,IAAA"}
1
+ {"version":3,"file":"EmptyState.d.ts","names":[],"sources":["../../../src/views/ui/EmptyState.tsx"],"mappings":";;qBAEa,eAAc;EAAgB,UAAU;sBAAW,IAAA"}
@@ -5,12 +5,11 @@ import { ReactNode } from "react";
5
5
  * content. No box, no nesting; sections are separated by whitespace on the
6
6
  * panel surface.
7
7
  */
8
- declare const InfoCard: ({ title, count, action, children }: {
8
+ export declare const InfoCard: ({ title, count, action, children }: {
9
9
  title?: ReactNode;
10
10
  count?: ReactNode;
11
11
  action?: ReactNode;
12
12
  children: ReactNode;
13
13
  }) => import("react").JSX.Element;
14
14
  //#endregion
15
- export { InfoCard };
16
15
  //# sourceMappingURL=InfoCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InfoCard.d.ts","names":[],"sources":["../../../src/views/ui/InfoCard.tsx"],"mappings":";;;;;;;cAOa,aAAY,OAAA,OAAA,QAAA;EAMvB,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,UAAU;sBACX,IAAA"}
1
+ {"version":3,"file":"InfoCard.d.ts","names":[],"sources":["../../../src/views/ui/InfoCard.tsx"],"mappings":";;;;;;;qBAOa,aAAY,OAAA,OAAA,QAAA;EAMvB,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,UAAU;sBACX,IAAA"}
@@ -2,11 +2,10 @@
2
2
  /**
3
3
  * Recursive JSON view. `compact` fits tool rows; copy always provides formatted JSON.
4
4
  */
5
- declare const JSONTree: ({ value, openDepth, compact }: {
5
+ export declare const JSONTree: ({ value, openDepth, compact }: {
6
6
  value: unknown;
7
7
  openDepth?: number;
8
8
  compact?: boolean;
9
9
  }) => import("react").JSX.Element;
10
10
  //#endregion
11
- export { JSONTree };
12
11
  //# sourceMappingURL=JSONTree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"JSONTree.d.ts","names":[],"sources":["../../../src/views/ui/JSONTree.tsx"],"mappings":";;;;cA6Ma,aAAY,OAAA,WAAA;EAKvB;EACA;EACA;sBACD,IAAA"}
1
+ {"version":3,"file":"JSONTree.d.ts","names":[],"sources":["../../../src/views/ui/JSONTree.tsx"],"mappings":";;;;qBA0Ma,aAAY,OAAA,WAAA;EAKvB;EACA;EACA;sBACD,IAAA"}
@@ -1,4 +1,5 @@
1
1
  import { CopyButton } from "./CopyButton.js";
2
+ import { getInlineJson } from "./getInlineJson.js";
2
3
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
4
  import { useState } from "@assistant-ui/tap/react-shim";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -7,26 +8,17 @@ import clsx from "clsx";
7
8
  const ENTRY_LIMIT = 100;
8
9
  const INLINE_MAX = 88;
9
10
  const isContainer = (value) => value !== null && typeof value === "object";
10
- const entriesOf = (value) => {
11
- if (Array.isArray(value)) return value.map((item, index) => ({
11
+ const entriesOf = (value, keys, limit) => {
12
+ if (Array.isArray(value)) return value.slice(0, limit).map((item, index) => ({
12
13
  key: String(index),
13
14
  value: item
14
15
  }));
15
- return Object.entries(value).map(([key, value]) => ({
16
+ return keys.slice(0, limit).map((key) => ({
16
17
  key,
17
- value
18
+ value: value[key]
18
19
  }));
19
20
  };
20
- const summaryOf = (value) => {
21
- if (Array.isArray(value)) return `[${value.length}]`;
22
- return `{${Object.keys(value).length}}`;
23
- };
24
21
  const serialize = (value, compact) => JSON.stringify(value, null, compact ? 0 : 2);
25
- const isInline = (value, compact) => {
26
- if (!compact) return false;
27
- if (!isContainer(value)) return true;
28
- return serialize(value, true).length <= INLINE_MAX;
29
- };
30
22
  const Leaf = (t0) => {
31
23
  const $ = c(6);
32
24
  const { value } = t0;
@@ -72,7 +64,7 @@ const Leaf = (t0) => {
72
64
  return t2;
73
65
  };
74
66
  const TreeNode = (t0) => {
75
- const $ = c(36);
67
+ const $ = c(34);
76
68
  const { name, value, depth, openDepth, compact } = t0;
77
69
  const [open, setOpen] = useState(depth < openDepth);
78
70
  const [showAll, setShowAll] = useState(false);
@@ -114,9 +106,10 @@ const TreeNode = (t0) => {
114
106
  }
115
107
  let t1;
116
108
  if ($[10] !== compact || $[11] !== depth || $[12] !== name || $[13] !== open || $[14] !== openDepth || $[15] !== showAll || $[16] !== value) {
117
- const entries = entriesOf(value);
118
- const shown = showAll ? entries : entries.slice(0, ENTRY_LIMIT);
119
- const hidden = entries.length - shown.length;
109
+ const keys = Array.isArray(value) ? [] : Object.keys(value);
110
+ const count = Array.isArray(value) ? value.length : keys.length;
111
+ const shown = open ? entriesOf(value, keys, showAll ? count : ENTRY_LIMIT) : [];
112
+ const hidden = count - shown.length;
120
113
  let t2;
121
114
  if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
122
115
  t2 = () => setOpen(_temp);
@@ -151,23 +144,18 @@ const TreeNode = (t0) => {
151
144
  $[25] = name;
152
145
  $[26] = t8;
153
146
  } else t8 = $[26];
154
- let t9;
155
- if ($[27] !== value) {
156
- t9 = summaryOf(value);
157
- $[27] = value;
158
- $[28] = t9;
159
- } else t9 = $[28];
147
+ const t9 = Array.isArray(value) ? `[${count}]` : `{${count}}`;
160
148
  let t10;
161
- if ($[29] !== t9) {
149
+ if ($[27] !== t9) {
162
150
  t10 = /* @__PURE__ */ jsx("span", {
163
151
  className: "opacity-60",
164
152
  children: t9
165
153
  });
166
- $[29] = t9;
167
- $[30] = t10;
168
- } else t10 = $[30];
154
+ $[27] = t9;
155
+ $[28] = t10;
156
+ } else t10 = $[28];
169
157
  let t11;
170
- if ($[31] !== t10 || $[32] !== t4 || $[33] !== t7 || $[34] !== t8) {
158
+ if ($[29] !== t10 || $[30] !== t4 || $[31] !== t7 || $[32] !== t8) {
171
159
  t11 = /* @__PURE__ */ jsxs("button", {
172
160
  type: "button",
173
161
  onClick: t2,
@@ -178,12 +166,12 @@ const TreeNode = (t0) => {
178
166
  t10
179
167
  ]
180
168
  });
181
- $[31] = t10;
182
- $[32] = t4;
183
- $[33] = t7;
184
- $[34] = t8;
185
- $[35] = t11;
186
- } else t11 = $[35];
169
+ $[29] = t10;
170
+ $[30] = t4;
171
+ $[31] = t7;
172
+ $[32] = t8;
173
+ $[33] = t11;
174
+ } else t11 = $[33];
187
175
  t1 = /* @__PURE__ */ jsxs("div", {
188
176
  className: "min-w-0",
189
177
  children: [t11, open ? /* @__PURE__ */ jsxs("div", {
@@ -326,64 +314,55 @@ const TreeWithCopy = (t0) => {
326
314
  * Recursive JSON view. `compact` fits tool rows; copy always provides formatted JSON.
327
315
  */
328
316
  const JSONTree = (t0) => {
329
- const $ = c(18);
317
+ const $ = c(14);
330
318
  const { value, openDepth: t1, compact: t2 } = t0;
331
319
  const openDepth = t1 === void 0 ? 1 : t1;
332
320
  const compact = t2 === void 0 ? false : t2;
333
321
  let t3;
334
322
  if ($[0] !== compact || $[1] !== value) {
335
- t3 = isInline(value, compact) || !isContainer(value);
323
+ t3 = !isContainer(value) ? serialize(value, compact) : compact ? getInlineJson(value, INLINE_MAX) : void 0;
336
324
  $[0] = compact;
337
325
  $[1] = value;
338
326
  $[2] = t3;
339
327
  } else t3 = $[2];
340
- const isLeaf = t3;
328
+ const serialized = t3;
341
329
  let t4;
342
- if ($[3] !== compact || $[4] !== isLeaf || $[5] !== value) {
343
- t4 = isLeaf ? serialize(value, compact) : "";
344
- $[3] = compact;
345
- $[4] = isLeaf;
346
- $[5] = value;
347
- $[6] = t4;
348
- } else t4 = $[6];
349
- const serialized = t4;
350
- let t5;
351
- if ($[7] !== value) {
352
- t5 = JSON.stringify(value, null, 2);
353
- $[7] = value;
354
- $[8] = t5;
355
- } else t5 = $[8];
356
- const copyText = t5;
357
- if (isLeaf) {
358
- let t6;
359
- if ($[9] !== compact || $[10] !== copyText || $[11] !== serialized) {
360
- t6 = /* @__PURE__ */ jsx(InlineJson, {
330
+ if ($[3] !== value) {
331
+ t4 = () => JSON.stringify(value, null, 2);
332
+ $[3] = value;
333
+ $[4] = t4;
334
+ } else t4 = $[4];
335
+ const copyText = t4;
336
+ if (serialized !== void 0) {
337
+ let t5;
338
+ if ($[5] !== compact || $[6] !== copyText || $[7] !== serialized) {
339
+ t5 = /* @__PURE__ */ jsx(InlineJson, {
361
340
  serialized,
362
341
  copyText,
363
342
  compact
364
343
  });
365
- $[9] = compact;
366
- $[10] = copyText;
367
- $[11] = serialized;
368
- $[12] = t6;
369
- } else t6 = $[12];
370
- return t6;
344
+ $[5] = compact;
345
+ $[6] = copyText;
346
+ $[7] = serialized;
347
+ $[8] = t5;
348
+ } else t5 = $[8];
349
+ return t5;
371
350
  }
372
- let t6;
373
- if ($[13] !== compact || $[14] !== copyText || $[15] !== openDepth || $[16] !== value) {
374
- t6 = /* @__PURE__ */ jsx(TreeWithCopy, {
351
+ let t5;
352
+ if ($[9] !== compact || $[10] !== copyText || $[11] !== openDepth || $[12] !== value) {
353
+ t5 = /* @__PURE__ */ jsx(TreeWithCopy, {
375
354
  value,
376
355
  openDepth,
377
356
  copyText,
378
357
  compact
379
358
  });
380
- $[13] = compact;
381
- $[14] = copyText;
382
- $[15] = openDepth;
383
- $[16] = value;
384
- $[17] = t6;
385
- } else t6 = $[17];
386
- return t6;
359
+ $[9] = compact;
360
+ $[10] = copyText;
361
+ $[11] = openDepth;
362
+ $[12] = value;
363
+ $[13] = t5;
364
+ } else t5 = $[13];
365
+ return t5;
387
366
  };
388
367
  function _temp(prev) {
389
368
  return !prev;