@assistant-ui/react-devtools 1.2.8 → 1.2.10

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 (219) hide show
  1. package/dist/DevToolsModal.d.ts +0 -1
  2. package/dist/DevToolsModal.d.ts.map +1 -1
  3. package/dist/DevToolsModal.js.map +1 -1
  4. package/dist/DevToolsModalImpl.d.ts +1 -6
  5. package/dist/DevToolsModalImpl.d.ts.map +1 -1
  6. package/dist/DevToolsModalImpl.js.map +1 -1
  7. package/dist/data/createInProcessClient.d.ts +0 -1
  8. package/dist/data/createInProcessClient.d.ts.map +1 -1
  9. package/dist/data/projectApi.d.ts +0 -1
  10. package/dist/data/projectApi.d.ts.map +1 -1
  11. package/dist/data/types.d.ts +0 -1
  12. package/dist/data/types.d.ts.map +1 -1
  13. package/dist/data/useDevToolsClient.d.ts +0 -1
  14. package/dist/data/useDevToolsClient.d.ts.map +1 -1
  15. package/dist/shell/DevToolsOverlay.d.ts +1 -6
  16. package/dist/shell/DevToolsOverlay.d.ts.map +1 -1
  17. package/dist/shell/DevToolsOverlay.js.map +1 -1
  18. package/dist/shell/DevToolsPanel.d.ts +1 -7
  19. package/dist/shell/DevToolsPanel.d.ts.map +1 -1
  20. package/dist/shell/DevToolsPanel.js.map +1 -1
  21. package/dist/shell/ShadowRoot.d.ts +1 -7
  22. package/dist/shell/ShadowRoot.d.ts.map +1 -1
  23. package/dist/shell/SplitLayout.d.ts +3 -7
  24. package/dist/shell/SplitLayout.d.ts.map +1 -1
  25. package/dist/shell/SplitLayout.js.map +1 -1
  26. package/dist/shell/registry.d.ts +0 -1
  27. package/dist/shell/registry.d.ts.map +1 -1
  28. package/dist/shell/tabs/ActivityTab.d.ts +1 -8
  29. package/dist/shell/tabs/ActivityTab.d.ts.map +1 -1
  30. package/dist/shell/tabs/ActivityTab.js.map +1 -1
  31. package/dist/shell/tabs/ContextTab.d.ts +1 -6
  32. package/dist/shell/tabs/ContextTab.d.ts.map +1 -1
  33. package/dist/shell/tabs/ContextTab.js.map +1 -1
  34. package/dist/shell/tabs/RawTab.d.ts +1 -6
  35. package/dist/shell/tabs/RawTab.d.ts.map +1 -1
  36. package/dist/shell/tabs/RawTab.js.map +1 -1
  37. package/dist/shell/tabs/ThreadTab.d.ts +1 -7
  38. package/dist/shell/tabs/ThreadTab.d.ts.map +1 -1
  39. package/dist/shell/tabs/ThreadTab.js.map +1 -1
  40. package/dist/shell/tabs/navSelection.d.ts.map +1 -1
  41. package/dist/styles/panel.generated.d.ts +1 -1
  42. package/dist/styles/panel.generated.d.ts.map +1 -1
  43. package/dist/styles/panel.generated.js +1 -1
  44. package/dist/styles/panel.generated.js.map +1 -1
  45. package/dist/types.d.ts +0 -1
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/utils/common.d.ts.map +1 -1
  48. package/dist/utils/diff.d.ts.map +1 -1
  49. package/dist/utils/serialization.d.ts +0 -1
  50. package/dist/utils/serialization.d.ts.map +1 -1
  51. package/dist/utils/toolNormalization.d.ts.map +1 -1
  52. package/dist/views/activity/EventLogRow.d.ts +4 -14
  53. package/dist/views/activity/EventLogRow.d.ts.map +1 -1
  54. package/dist/views/activity/EventLogRow.js.map +1 -1
  55. package/dist/views/activity/EventStreamPane.d.ts +1 -4
  56. package/dist/views/activity/EventStreamPane.d.ts.map +1 -1
  57. package/dist/views/activity/EventStreamPane.js.map +1 -1
  58. package/dist/views/activity/OrphansPane.d.ts +1 -4
  59. package/dist/views/activity/OrphansPane.d.ts.map +1 -1
  60. package/dist/views/activity/OrphansPane.js.map +1 -1
  61. package/dist/views/activity/RunDetailPane.d.ts +1 -4
  62. package/dist/views/activity/RunDetailPane.d.ts.map +1 -1
  63. package/dist/views/activity/RunDetailPane.js.map +1 -1
  64. package/dist/views/activity/activityNodes.d.ts +0 -1
  65. package/dist/views/activity/activityNodes.d.ts.map +1 -1
  66. package/dist/views/attachments/AttachmentList.d.ts +1 -6
  67. package/dist/views/attachments/AttachmentList.d.ts.map +1 -1
  68. package/dist/views/attachments/AttachmentList.js.map +1 -1
  69. package/dist/views/attachments/MediaPartView.d.ts +3 -13
  70. package/dist/views/attachments/MediaPartView.d.ts.map +1 -1
  71. package/dist/views/attachments/MediaPartView.js.map +1 -1
  72. package/dist/views/attachments/formatBytes.d.ts.map +1 -1
  73. package/dist/views/attachments/parseAttachment.d.ts +0 -1
  74. package/dist/views/attachments/parseAttachment.d.ts.map +1 -1
  75. package/dist/views/attachments/types.d.ts.map +1 -1
  76. package/dist/views/context/ContextDetail.d.ts +1 -5
  77. package/dist/views/context/ContextDetail.d.ts.map +1 -1
  78. package/dist/views/context/ToolUIsView.d.ts +1 -3
  79. package/dist/views/context/ToolUIsView.d.ts.map +1 -1
  80. package/dist/views/context/ToolUIsView.js.map +1 -1
  81. package/dist/views/context/contextNodes.d.ts +0 -1
  82. package/dist/views/context/contextNodes.d.ts.map +1 -1
  83. package/dist/views/mcp/McpView.d.ts +1 -4
  84. package/dist/views/mcp/McpView.d.ts.map +1 -1
  85. package/dist/views/mcp/McpView.js.map +1 -1
  86. package/dist/views/mcp/parse.d.ts +0 -1
  87. package/dist/views/mcp/parse.d.ts.map +1 -1
  88. package/dist/views/mcp/types.d.ts.map +1 -1
  89. package/dist/views/message/ChainOfThought.d.ts +1 -4
  90. package/dist/views/message/ChainOfThought.d.ts.map +1 -1
  91. package/dist/views/message/ChainOfThought.js.map +1 -1
  92. package/dist/views/message/MessageDetailPane.d.ts +1 -4
  93. package/dist/views/message/MessageDetailPane.d.ts.map +1 -1
  94. package/dist/views/message/MessageDetailPane.js.map +1 -1
  95. package/dist/views/message/MessageItem.d.ts +3 -6
  96. package/dist/views/message/MessageItem.d.ts.map +1 -1
  97. package/dist/views/message/MessageItem.js.map +1 -1
  98. package/dist/views/message/MessageList.d.ts +1 -5
  99. package/dist/views/message/MessageList.d.ts.map +1 -1
  100. package/dist/views/message/MessageList.js.map +1 -1
  101. package/dist/views/message/MessageMetrics.d.ts +1 -4
  102. package/dist/views/message/MessageMetrics.d.ts.map +1 -1
  103. package/dist/views/message/MessageMetrics.js.map +1 -1
  104. package/dist/views/message/MessageTimeline.d.ts +1 -4
  105. package/dist/views/message/MessageTimeline.d.ts.map +1 -1
  106. package/dist/views/message/MessageTimeline.js.map +1 -1
  107. package/dist/views/message/PartDisclosure.d.ts +1 -7
  108. package/dist/views/message/PartDisclosure.d.ts.map +1 -1
  109. package/dist/views/message/PartDisclosure.js.map +1 -1
  110. package/dist/views/message/PartView.d.ts +1 -5
  111. package/dist/views/message/PartView.d.ts.map +1 -1
  112. package/dist/views/message/PartView.js.map +1 -1
  113. package/dist/views/message/RoleLabel.d.ts +1 -4
  114. package/dist/views/message/RoleLabel.d.ts.map +1 -1
  115. package/dist/views/message/RoleLabel.js.map +1 -1
  116. package/dist/views/message/StatusBadge.d.ts +3 -8
  117. package/dist/views/message/StatusBadge.d.ts.map +1 -1
  118. package/dist/views/message/StatusBadge.js.map +1 -1
  119. package/dist/views/message/ToolCallView.d.ts +1 -5
  120. package/dist/views/message/ToolCallView.d.ts.map +1 -1
  121. package/dist/views/message/ToolCallView.js.map +1 -1
  122. package/dist/views/message/TtftBar.d.ts +1 -4
  123. package/dist/views/message/TtftBar.d.ts.map +1 -1
  124. package/dist/views/message/TtftBar.js.map +1 -1
  125. package/dist/views/message/messagePlainText.d.ts +0 -1
  126. package/dist/views/message/messagePlainText.d.ts.map +1 -1
  127. package/dist/views/message/parse.d.ts +0 -1
  128. package/dist/views/message/parse.d.ts.map +1 -1
  129. package/dist/views/message/types.d.ts +0 -1
  130. package/dist/views/message/types.d.ts.map +1 -1
  131. package/dist/views/model-context/ModelContextView.d.ts +4 -13
  132. package/dist/views/model-context/ModelContextView.d.ts.map +1 -1
  133. package/dist/views/model-context/ModelContextView.js.map +1 -1
  134. package/dist/views/nav.d.ts.map +1 -1
  135. package/dist/views/raw/RawDetail.d.ts +1 -6
  136. package/dist/views/raw/RawDetail.d.ts.map +1 -1
  137. package/dist/views/raw/RawDetail.js.map +1 -1
  138. package/dist/views/raw/rawNodes.d.ts +0 -1
  139. package/dist/views/raw/rawNodes.d.ts.map +1 -1
  140. package/dist/views/raw/statePreview.d.ts.map +1 -1
  141. package/dist/views/raw/statePreview.js.map +1 -1
  142. package/dist/views/runs/PayloadDiff.d.ts +1 -4
  143. package/dist/views/runs/PayloadDiff.d.ts.map +1 -1
  144. package/dist/views/runs/PayloadDiff.js.map +1 -1
  145. package/dist/views/runs/parse.d.ts +0 -1
  146. package/dist/views/runs/parse.d.ts.map +1 -1
  147. package/dist/views/runs/types.d.ts.map +1 -1
  148. package/dist/views/scopes/ScopesView.d.ts +1 -3
  149. package/dist/views/scopes/ScopesView.d.ts.map +1 -1
  150. package/dist/views/scopes/ScopesView.js.map +1 -1
  151. package/dist/views/scopes/parse.d.ts +0 -1
  152. package/dist/views/scopes/parse.d.ts.map +1 -1
  153. package/dist/views/scopes/types.d.ts.map +1 -1
  154. package/dist/views/thread/ComposerAttachments.d.ts +1 -4
  155. package/dist/views/thread/ComposerAttachments.d.ts.map +1 -1
  156. package/dist/views/thread/ComposerFlags.d.ts +1 -4
  157. package/dist/views/thread/ComposerFlags.d.ts.map +1 -1
  158. package/dist/views/thread/ComposerFlags.js.map +1 -1
  159. package/dist/views/thread/ComposerQueue.d.ts +1 -4
  160. package/dist/views/thread/ComposerQueue.d.ts.map +1 -1
  161. package/dist/views/thread/ComposerQueue.js.map +1 -1
  162. package/dist/views/thread/ConversationList.d.ts +1 -7
  163. package/dist/views/thread/ConversationList.d.ts.map +1 -1
  164. package/dist/views/thread/ConversationList.js.map +1 -1
  165. package/dist/views/thread/ConversationStatusDot.d.ts +2 -13
  166. package/dist/views/thread/ConversationStatusDot.d.ts.map +1 -1
  167. package/dist/views/thread/ThreadDetails.d.ts +1 -5
  168. package/dist/views/thread/ThreadDetails.d.ts.map +1 -1
  169. package/dist/views/thread/ThreadDetails.js.map +1 -1
  170. package/dist/views/thread/Transcript.d.ts +2 -9
  171. package/dist/views/thread/Transcript.d.ts.map +1 -1
  172. package/dist/views/thread/Transcript.js.map +1 -1
  173. package/dist/views/thread/resolve.d.ts +0 -1
  174. package/dist/views/thread/resolve.d.ts.map +1 -1
  175. package/dist/views/thread/types.d.ts +0 -1
  176. package/dist/views/thread/types.d.ts.map +1 -1
  177. package/dist/views/thread/utils.d.ts +0 -1
  178. package/dist/views/thread/utils.d.ts.map +1 -1
  179. package/dist/views/ui/CenteredMessage.d.ts +1 -4
  180. package/dist/views/ui/CenteredMessage.d.ts.map +1 -1
  181. package/dist/views/ui/Chip.d.ts +1 -5
  182. package/dist/views/ui/Chip.d.ts.map +1 -1
  183. package/dist/views/ui/ControlButton.d.ts +1 -5
  184. package/dist/views/ui/ControlButton.d.ts.map +1 -1
  185. package/dist/views/ui/CopyButton.d.ts +1 -8
  186. package/dist/views/ui/CopyButton.d.ts.map +1 -1
  187. package/dist/views/ui/CopyButton.js.map +1 -1
  188. package/dist/views/ui/EmptyState.d.ts +1 -4
  189. package/dist/views/ui/EmptyState.d.ts.map +1 -1
  190. package/dist/views/ui/InfoCard.d.ts +1 -7
  191. package/dist/views/ui/InfoCard.d.ts.map +1 -1
  192. package/dist/views/ui/InfoCard.js.map +1 -1
  193. package/dist/views/ui/JSONTree.d.ts +1 -5
  194. package/dist/views/ui/JSONTree.d.ts.map +1 -1
  195. package/dist/views/ui/JSONTree.js.map +1 -1
  196. package/dist/views/ui/PaneHeader.d.ts +2 -10
  197. package/dist/views/ui/PaneHeader.d.ts.map +1 -1
  198. package/dist/views/ui/PaneHeader.js.map +1 -1
  199. package/dist/views/ui/RailTime.d.ts +1 -4
  200. package/dist/views/ui/RailTime.d.ts.map +1 -1
  201. package/dist/views/ui/RailTime.js.map +1 -1
  202. package/dist/views/ui/SectionLabel.d.ts +1 -4
  203. package/dist/views/ui/SectionLabel.d.ts.map +1 -1
  204. package/dist/views/ui/SelectableRow.d.ts +2 -2
  205. package/dist/views/ui/SelectableRow.d.ts.map +1 -1
  206. package/dist/views/ui/Sparkline.d.ts +1 -4
  207. package/dist/views/ui/Sparkline.d.ts.map +1 -1
  208. package/dist/views/ui/Sparkline.js.map +1 -1
  209. package/dist/views/ui/SummaryItem.d.ts +2 -8
  210. package/dist/views/ui/SummaryItem.d.ts.map +1 -1
  211. package/dist/views/ui/SummaryItem.js.map +1 -1
  212. package/dist/views/ui/ToneBadge.d.ts +1 -7
  213. package/dist/views/ui/ToneBadge.d.ts.map +1 -1
  214. package/dist/views/ui/badgeTone.d.ts.map +1 -1
  215. package/dist/views/ui/useCopyToClipboard.d.ts +1 -3
  216. package/dist/views/ui/useCopyToClipboard.d.ts.map +1 -1
  217. package/package.json +10 -10
  218. package/src/styles/panel.generated.ts +1 -1
  219. package/src/views/message/MessageTimeline.test.tsx +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"CopyButton.d.ts","names":[],"sources":["../../../src/views/ui/CopyButton.tsx"],"mappings":";cA6Ba,UAAA;EAAc,KAAA;EAAA,KAAA;EAAA,WAAA;EAAA,SAAA;EAAA,QAAA;EAAA;AAAA;EAQzB,KAAA;EACA,KAAA;EACA,WAAA;EACA,SAAA;EACA,QAAA;EACA,IAAA;AAAA,sBACD,GAAA,CAAA,OAAA"}
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 +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;\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,9 +1,6 @@
1
1
  import { ReactNode } from "react";
2
-
3
2
  //#region src/views/ui/EmptyState.d.ts
4
- declare const EmptyState: ({
5
- children
6
- }: {
3
+ declare const EmptyState: ({ children }: {
7
4
  children: ReactNode;
8
5
  }) => import("react").JSX.Element;
9
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyState.d.ts","names":[],"sources":["../../../src/views/ui/EmptyState.tsx"],"mappings":";;;cAEa,UAAA;EAAc;AAAA;EAAgB,QAAA,EAAU,SAAS;AAAA,sBAAE,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"EmptyState.d.ts","names":[],"sources":["../../../src/views/ui/EmptyState.tsx"],"mappings":";;cAEa,eAAc;EAAgB,UAAU;sBAAW,IAAA"}
@@ -1,17 +1,11 @@
1
1
  import { ReactNode } from "react";
2
-
3
2
  //#region src/views/ui/InfoCard.d.ts
4
3
  /**
5
4
  * A flat content section: a header row (title + optional count/action) over its
6
5
  * content. No box, no nesting; sections are separated by whitespace on the
7
6
  * panel surface.
8
7
  */
9
- declare const InfoCard: ({
10
- title,
11
- count,
12
- action,
13
- children
14
- }: {
8
+ declare const InfoCard: ({ title, count, action, children }: {
15
9
  title?: ReactNode;
16
10
  count?: ReactNode;
17
11
  action?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"InfoCard.d.ts","names":[],"sources":["../../../src/views/ui/InfoCard.tsx"],"mappings":";;;;;AAOA;;;cAAa,QAAA;EAAY,KAAA;EAAA,KAAA;EAAA,MAAA;EAAA;AAAA;EAMvB,KAAA,GAAQ,SAAA;EACR,KAAA,GAAQ,SAAA;EACR,MAAA,GAAS,SAAA;EACT,QAAA,EAAU,SAAA;AAAA,sBACX,GAAA,CAAA,OAAA"}
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 +1 @@
1
- {"version":3,"file":"InfoCard.js","names":["ReactNode","InfoCard","t0","$","_c","title","count","action","children","t1","t2"],"sources":["../../../src/views/ui/InfoCard.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\n/**\n * A flat content section: a header row (title + optional count/action) over its\n * content. No box, no nesting; sections are separated by whitespace on the\n * panel surface.\n */\nexport const InfoCard = ({\n title,\n count,\n action,\n children,\n}: {\n title?: ReactNode;\n count?: ReactNode;\n action?: ReactNode;\n children: ReactNode;\n}) => (\n <section className=\"flex flex-col gap-2\">\n {title != null || action != null ? (\n <div className=\"flex h-5 items-center justify-between gap-2\">\n <h3 className=\"text-foreground flex items-center gap-1.5 text-[13px] font-medium\">\n {title}\n {count != null ? (\n <span className=\"text-muted-foreground text-[11px] font-normal tabular-nums\">\n {count}\n </span>\n ) : null}\n </h3>\n {action}\n </div>\n ) : null}\n {children}\n </section>\n);\n"],"mappings":";;;;;;;;AAOA,MAAaC,YAAWC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,OAAAC,OAAAC,QAAAC,aAAAN;CAUxB,IAAAO;CAAA,IAAAN,EAAA,OAAAI,UAAAJ,EAAA,OAAAG,SAAAH,EAAA,OAAAE,OAAA;EAEII,KAAAJ,SAAS,QAAQE,UAAU,OAC1B,qBAAA,OAAA;GAAe,WAAA;aAAf,CACE,qBAAA,MAAA;IAAc,WAAA;cAAd,CACGF,OACAC,SAAS,OACR,oBAAA,QAAA;KAAgB,WAAA;eACbA;IACI,CAAA,IAHR,IAKE;OACJC,MACG;OAXP;EAYOJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAG;EAAAH,EAAA,KAAAE;EAAAF,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,OAAAK,YAAAL,EAAA,OAAAM,IAAA;EAbVC,KAAA,qBAAA,WAAA;GAAmB,WAAA;aAAnB,CACGD,IAaAD,QACO;;EAAAL,EAAA,KAAAK;EAAAL,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAfVO;AAeU"}
1
+ {"version":3,"file":"InfoCard.js","names":["ReactNode","InfoCard","t0","$","_c","title","count","action","children","t1","t2"],"sources":["../../../src/views/ui/InfoCard.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\n/**\n * A flat content section: a header row (title + optional count/action) over its\n * content. No box, no nesting; sections are separated by whitespace on the\n * panel surface.\n */\nexport const InfoCard = ({\n title,\n count,\n action,\n children,\n}: {\n title?: ReactNode;\n count?: ReactNode;\n action?: ReactNode;\n children: ReactNode;\n}) => (\n <section className=\"flex flex-col gap-2\">\n {title != null || action != null ? (\n <div className=\"flex h-5 items-center justify-between gap-2\">\n <h3 className=\"text-foreground flex items-center gap-1.5 text-[13px] font-medium\">\n {title}\n {count != null ? (\n <span className=\"text-muted-foreground text-[11px] font-normal tabular-nums\">\n {count}\n </span>\n ) : null}\n </h3>\n {action}\n </div>\n ) : null}\n {children}\n </section>\n);\n"],"mappings":";;;;;;;;AAOA,MAAaC,YAAWC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,OAAAC,OAAAC,QAAAC,aAAAN;CAUxB,IAAAO;CAAA,IAAAN,EAAA,OAAAI,UAAAJ,EAAA,OAAAG,SAAAH,EAAA,OAAAE,OAAA;EAEII,KAAAJ,SAAS,QAAQE,UAAU,OAC1B,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA,CACE,qBAAA,MAAA;IAAc,WAAA;IAAd,UAAA,CACGF,OACAC,SAAS,OACR,oBAAA,QAAA;KAAgB,WAAA;KACbA,UAAAA;IACI,CAAA,IAHR,IAKE;GACJC,CAAAA,GAAAA,MACG;EAXP,CAAA,IAAA;EAYOJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAG;EAAAH,EAAA,KAAAE;EAAAF,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,OAAAK,YAAAL,EAAA,OAAAM,IAAA;EAbVC,KAAA,qBAAA,WAAA;GAAmB,WAAA;GAAnB,UAAA,CACGD,IAaAD,QACO;;EAAAL,EAAA,KAAAK;EAAAL,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAfVO;AAeU"}
@@ -2,11 +2,7 @@
2
2
  /**
3
3
  * Recursive JSON view. `compact` fits tool rows; copy always provides formatted JSON.
4
4
  */
5
- declare const JSONTree: ({
6
- value,
7
- openDepth,
8
- compact
9
- }: {
5
+ declare const JSONTree: ({ value, openDepth, compact }: {
10
6
  value: unknown;
11
7
  openDepth?: number;
12
8
  compact?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"JSONTree.d.ts","names":[],"sources":["../../../src/views/ui/JSONTree.tsx"],"mappings":";;AA6MA;;cAAa,QAAA;EAAY,KAAA;EAAA,SAAA;EAAA;AAAA;EAKvB,KAAA;EACA,SAAA;EACA,OAAA;AAAA,sBACD,GAAA,CAAA,OAAA"}
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 +1 @@
1
- {"version":3,"file":"JSONTree.js","names":["useMemo","useState","clsx","CopyButton","ENTRY_LIMIT","INLINE_MAX","isContainer","value","Entry","key","entriesOf","Array","isArray","map","item","index","String","Object","entries","Record","summaryOf","length","keys","serialize","compact","JSON","stringify","isInline","Leaf","t0","$","_c","t1","undefined","t2","TreeNode","name","depth","openDepth","open","setOpen","showAll","setShowAll","t3","t4","t5","shown","slice","hidden","Symbol","for","_temp","t6","t7","t8","t9","t10","t11","entry","InlineJson","serialized","copyText","TreeWithCopy","JSONTree","isLeaf","prev"],"sources":["../../../src/views/ui/JSONTree.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { CopyButton } from \"./CopyButton\";\n\nconst ENTRY_LIMIT = 100;\nconst INLINE_MAX = 88;\n\nconst isContainer = (value: unknown): value is object =>\n value !== null && typeof value === \"object\";\n\ntype Entry = { key: string; value: unknown };\n\nconst entriesOf = (value: unknown): Entry[] => {\n if (Array.isArray(value)) {\n return value.map((item, index) => ({ key: String(index), value: item }));\n }\n return Object.entries(value as Record<string, unknown>).map(\n ([key, value]) => ({ key, value }),\n );\n};\n\nconst summaryOf = (value: unknown): string => {\n if (Array.isArray(value)) return `[${value.length}]`;\n return `{${Object.keys(value as object).length}}`;\n};\n\nconst serialize = (value: unknown, compact: boolean) =>\n JSON.stringify(value, null, compact ? 0 : 2);\n\nconst isInline = (value: unknown, compact: boolean) => {\n if (!compact) return false;\n if (!isContainer(value)) return true;\n return serialize(value, true).length <= INLINE_MAX;\n};\n\nconst Leaf = ({ value }: { value: unknown }) => {\n if (typeof value === \"string\") {\n return (\n <span className=\"text-foreground break-all\">&quot;{value}&quot;</span>\n );\n }\n if (value === null || value === undefined) {\n return (\n <span className=\"text-muted-foreground italic\">{String(value)}</span>\n );\n }\n return (\n <span className=\"text-muted-foreground break-all\">{String(value)}</span>\n );\n};\n\nconst TreeNode = ({\n name,\n value,\n depth,\n openDepth,\n compact,\n}: {\n name?: string;\n value: unknown;\n depth: number;\n openDepth: number;\n compact: boolean;\n}) => {\n const [open, setOpen] = useState(depth < openDepth);\n const [showAll, setShowAll] = useState(false);\n\n if (!isContainer(value)) {\n return (\n <div\n className={clsx(\"flex min-w-0\", compact ? \"gap-1 py-px\" : \"gap-1.5\")}\n >\n {name !== undefined ? (\n <span className=\"text-muted-foreground shrink-0\">{name}:</span>\n ) : null}\n <Leaf value={value} />\n </div>\n );\n }\n\n const entries = entriesOf(value);\n const shown = showAll ? entries : entries.slice(0, ENTRY_LIMIT);\n const hidden = entries.length - shown.length;\n\n return (\n <div className=\"min-w-0\">\n <button\n type=\"button\"\n onClick={() => setOpen((prev) => !prev)}\n className={clsx(\n \"text-muted-foreground hover:text-foreground flex items-center\",\n compact ? \"gap-0.5 py-px\" : \"gap-1\",\n )}\n >\n <span\n className={clsx(\n \"inline-block transition-transform\",\n open && \"rotate-90\",\n )}\n >\n ›\n </span>\n {name !== undefined ? <span>{name}</span> : null}\n <span className=\"opacity-60\">{summaryOf(value)}</span>\n </button>\n {open ? (\n <div\n className={clsx(\n \"border-border/60 border-s\",\n compact ? \"ms-1 ps-2\" : \"ms-[5px] ps-3\",\n )}\n >\n {shown.map((entry) => (\n <TreeNode\n key={entry.key}\n name={entry.key}\n value={entry.value}\n depth={depth + 1}\n openDepth={openDepth}\n compact={compact}\n />\n ))}\n {hidden > 0 ? (\n <button\n type=\"button\"\n onClick={() => setShowAll(true)}\n className=\"text-muted-foreground hover:text-foreground text-[10px]\"\n >\n +{hidden} more\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n};\n\nconst InlineJson = ({\n serialized,\n copyText,\n compact,\n}: {\n serialized: string;\n copyText: string;\n compact: boolean;\n}) => (\n <div className=\"flex min-w-0 items-start gap-0.5\">\n <code\n className={clsx(\n \"text-foreground min-w-0 flex-1 font-mono leading-snug break-all\",\n compact ? \"text-[10px]\" : \"text-[11px]\",\n )}\n title={serialized}\n >\n {serialized}\n </code>\n <CopyButton\n value={copyText}\n label=\"Copy JSON\"\n iconOnly\n size={compact ? \"sm\" : \"default\"}\n />\n </div>\n);\n\nconst TreeWithCopy = ({\n value,\n openDepth,\n copyText,\n compact,\n}: {\n value: unknown;\n openDepth: number;\n copyText: string;\n compact: boolean;\n}) => (\n <div className=\"flex min-w-0 items-start gap-0.5\">\n <div\n className={clsx(\n \"min-w-0 flex-1 overflow-auto font-mono [font-variant-numeric:tabular-nums] [font-variant-ligatures:none]\",\n compact\n ? \"max-h-32 text-[10px] leading-snug\"\n : \"border-border bg-muted/40 max-h-[360px] rounded-md border p-3 text-[11px] leading-relaxed\",\n )}\n >\n <TreeNode\n value={value}\n depth={0}\n openDepth={openDepth}\n compact={compact}\n />\n </div>\n <CopyButton\n value={copyText}\n label=\"Copy JSON\"\n iconOnly\n size={compact ? \"sm\" : \"default\"}\n className=\"pt-px\"\n />\n </div>\n);\n\n/**\n * Recursive JSON view. `compact` fits tool rows; copy always provides formatted JSON.\n */\nexport const JSONTree = ({\n value,\n openDepth = 1,\n compact = false,\n}: {\n value: unknown;\n openDepth?: number;\n compact?: boolean;\n}) => {\n const isLeaf = isInline(value, compact) || !isContainer(value);\n const serialized = useMemo(\n () => (isLeaf ? serialize(value, compact) : \"\"),\n [value, compact, isLeaf],\n );\n const copyText = useMemo(() => JSON.stringify(value, null, 2), [value]);\n\n if (isLeaf) {\n return (\n <InlineJson\n serialized={serialized}\n copyText={copyText}\n compact={compact}\n />\n );\n }\n\n return (\n <TreeWithCopy\n value={value}\n openDepth={openDepth}\n copyText={copyText}\n compact={compact}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"JSONTree.js","names":["useMemo","useState","clsx","CopyButton","ENTRY_LIMIT","INLINE_MAX","isContainer","value","Entry","key","entriesOf","Array","isArray","map","item","index","String","Object","entries","Record","summaryOf","length","keys","serialize","compact","JSON","stringify","isInline","Leaf","t0","$","_c","t1","undefined","t2","TreeNode","name","depth","openDepth","open","setOpen","showAll","setShowAll","t3","t4","t5","shown","slice","hidden","Symbol","for","_temp","t6","t7","t8","t9","t10","t11","entry","InlineJson","serialized","copyText","TreeWithCopy","JSONTree","isLeaf","prev"],"sources":["../../../src/views/ui/JSONTree.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { CopyButton } from \"./CopyButton\";\n\nconst ENTRY_LIMIT = 100;\nconst INLINE_MAX = 88;\n\nconst isContainer = (value: unknown): value is object =>\n value !== null && typeof value === \"object\";\n\ntype Entry = { key: string; value: unknown };\n\nconst entriesOf = (value: unknown): Entry[] => {\n if (Array.isArray(value)) {\n return value.map((item, index) => ({ key: String(index), value: item }));\n }\n return Object.entries(value as Record<string, unknown>).map(\n ([key, value]) => ({ key, value }),\n );\n};\n\nconst summaryOf = (value: unknown): string => {\n if (Array.isArray(value)) return `[${value.length}]`;\n return `{${Object.keys(value as object).length}}`;\n};\n\nconst serialize = (value: unknown, compact: boolean) =>\n JSON.stringify(value, null, compact ? 0 : 2);\n\nconst isInline = (value: unknown, compact: boolean) => {\n if (!compact) return false;\n if (!isContainer(value)) return true;\n return serialize(value, true).length <= INLINE_MAX;\n};\n\nconst Leaf = ({ value }: { value: unknown }) => {\n if (typeof value === \"string\") {\n return (\n <span className=\"text-foreground break-all\">&quot;{value}&quot;</span>\n );\n }\n if (value === null || value === undefined) {\n return (\n <span className=\"text-muted-foreground italic\">{String(value)}</span>\n );\n }\n return (\n <span className=\"text-muted-foreground break-all\">{String(value)}</span>\n );\n};\n\nconst TreeNode = ({\n name,\n value,\n depth,\n openDepth,\n compact,\n}: {\n name?: string;\n value: unknown;\n depth: number;\n openDepth: number;\n compact: boolean;\n}) => {\n const [open, setOpen] = useState(depth < openDepth);\n const [showAll, setShowAll] = useState(false);\n\n if (!isContainer(value)) {\n return (\n <div\n className={clsx(\"flex min-w-0\", compact ? \"gap-1 py-px\" : \"gap-1.5\")}\n >\n {name !== undefined ? (\n <span className=\"text-muted-foreground shrink-0\">{name}:</span>\n ) : null}\n <Leaf value={value} />\n </div>\n );\n }\n\n const entries = entriesOf(value);\n const shown = showAll ? entries : entries.slice(0, ENTRY_LIMIT);\n const hidden = entries.length - shown.length;\n\n return (\n <div className=\"min-w-0\">\n <button\n type=\"button\"\n onClick={() => setOpen((prev) => !prev)}\n className={clsx(\n \"text-muted-foreground hover:text-foreground flex items-center\",\n compact ? \"gap-0.5 py-px\" : \"gap-1\",\n )}\n >\n <span\n className={clsx(\n \"inline-block transition-transform\",\n open && \"rotate-90\",\n )}\n >\n ›\n </span>\n {name !== undefined ? <span>{name}</span> : null}\n <span className=\"opacity-60\">{summaryOf(value)}</span>\n </button>\n {open ? (\n <div\n className={clsx(\n \"border-border/60 border-s\",\n compact ? \"ms-1 ps-2\" : \"ms-[5px] ps-3\",\n )}\n >\n {shown.map((entry) => (\n <TreeNode\n key={entry.key}\n name={entry.key}\n value={entry.value}\n depth={depth + 1}\n openDepth={openDepth}\n compact={compact}\n />\n ))}\n {hidden > 0 ? (\n <button\n type=\"button\"\n onClick={() => setShowAll(true)}\n className=\"text-muted-foreground hover:text-foreground text-[10px]\"\n >\n +{hidden} more\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n};\n\nconst InlineJson = ({\n serialized,\n copyText,\n compact,\n}: {\n serialized: string;\n copyText: string;\n compact: boolean;\n}) => (\n <div className=\"flex min-w-0 items-start gap-0.5\">\n <code\n className={clsx(\n \"text-foreground min-w-0 flex-1 font-mono leading-snug break-all\",\n compact ? \"text-[10px]\" : \"text-[11px]\",\n )}\n title={serialized}\n >\n {serialized}\n </code>\n <CopyButton\n value={copyText}\n label=\"Copy JSON\"\n iconOnly\n size={compact ? \"sm\" : \"default\"}\n />\n </div>\n);\n\nconst TreeWithCopy = ({\n value,\n openDepth,\n copyText,\n compact,\n}: {\n value: unknown;\n openDepth: number;\n copyText: string;\n compact: boolean;\n}) => (\n <div className=\"flex min-w-0 items-start gap-0.5\">\n <div\n className={clsx(\n \"min-w-0 flex-1 overflow-auto font-mono [font-variant-numeric:tabular-nums] [font-variant-ligatures:none]\",\n compact\n ? \"max-h-32 text-[10px] leading-snug\"\n : \"border-border bg-muted/40 max-h-[360px] rounded-md border p-3 text-[11px] leading-relaxed\",\n )}\n >\n <TreeNode\n value={value}\n depth={0}\n openDepth={openDepth}\n compact={compact}\n />\n </div>\n <CopyButton\n value={copyText}\n label=\"Copy JSON\"\n iconOnly\n size={compact ? \"sm\" : \"default\"}\n className=\"pt-px\"\n />\n </div>\n);\n\n/**\n * Recursive JSON view. `compact` fits tool rows; copy always provides formatted JSON.\n */\nexport const JSONTree = ({\n value,\n openDepth = 1,\n compact = false,\n}: {\n value: unknown;\n openDepth?: number;\n compact?: boolean;\n}) => {\n const isLeaf = isInline(value, compact) || !isContainer(value);\n const serialized = useMemo(\n () => (isLeaf ? serialize(value, compact) : \"\"),\n [value, compact, isLeaf],\n );\n const copyText = useMemo(() => JSON.stringify(value, null, 2), [value]);\n\n if (isLeaf) {\n return (\n <InlineJson\n serialized={serialized}\n copyText={copyText}\n compact={compact}\n />\n );\n }\n\n return (\n <TreeWithCopy\n value={value}\n openDepth={openDepth}\n copyText={copyText}\n compact={compact}\n />\n );\n};\n"],"mappings":"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"}
@@ -1,24 +1,16 @@
1
1
  import { ReactNode } from "react";
2
-
3
2
  //#region src/views/ui/PaneHeader.d.ts
4
3
  /**
5
4
  * Fixed-height rail header. Every column in a split layout should use this so
6
5
  * titles line up across columns.
7
6
  */
8
- declare const PaneHeader: ({
9
- children,
10
- trailing,
11
- borderless
12
- }: {
7
+ declare const PaneHeader: ({ children, trailing, borderless }: {
13
8
  children: ReactNode;
14
9
  trailing?: ReactNode | undefined;
15
10
  borderless?: boolean;
16
11
  }) => import("react").JSX.Element;
17
12
  /** Header that grows below a {@link PaneHeader}-height title row. */
18
- declare const PaneHeaderStack: ({
19
- header,
20
- children
21
- }: {
13
+ declare const PaneHeaderStack: ({ header, children }: {
22
14
  header: ReactNode;
23
15
  children?: ReactNode | undefined;
24
16
  }) => import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"PaneHeader.d.ts","names":[],"sources":["../../../src/views/ui/PaneHeader.tsx"],"mappings":";;;;;AAMA;;cAAa,UAAA;EAAc,QAAA;EAAA,QAAA;EAAA;AAAA;EAKzB,QAAA,EAAU,SAAA;EACV,QAAA,GAAW,SAAA;EACX,UAAA;AAAA,sBACD,GAAA,CAAA,OAAA;;cAoBY,eAAA;EAAmB,MAAA;EAAA;AAAA;EAI9B,MAAA,EAAQ,SAAA;EACR,QAAA,GAAW,SAAA;AAAA,sBACZ,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"PaneHeader.d.ts","names":[],"sources":["../../../src/views/ui/PaneHeader.tsx"],"mappings":";;;;;;cAMa,eAAc,UAAA,UAAA;EAKzB,UAAU;EACV,WAAW;EACX;sBACD,IAAA;;cAoBY,oBAAmB,QAAA;EAI9B,QAAQ;EACR,WAAW;sBACZ,IAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PaneHeader.js","names":["ReactNode","PaneHeader","t0","$","_c","children","trailing","borderless","t1","undefined","t2","t3","t4","t5","PaneHeaderStack","header"],"sources":["../../../src/views/ui/PaneHeader.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\n/**\n * Fixed-height rail header. Every column in a split layout should use this so\n * titles line up across columns.\n */\nexport const PaneHeader = ({\n children,\n trailing,\n borderless = false,\n}: {\n children: ReactNode;\n trailing?: ReactNode | undefined;\n borderless?: boolean;\n}) => (\n <div\n className={\n borderless\n ? \"bg-background flex h-8 max-h-8 min-h-8 shrink-0 items-center justify-between gap-2 overflow-hidden px-3\"\n : \"border-border bg-background flex h-8 max-h-8 min-h-8 shrink-0 items-center justify-between gap-2 overflow-hidden border-b px-3\"\n }\n >\n <div className=\"text-muted-foreground flex min-w-0 flex-1 items-center truncate text-[11px] leading-none tabular-nums\">\n {children}\n </div>\n {trailing ? (\n <div className=\"text-muted-foreground flex shrink-0 items-center gap-1.5 text-[10px] leading-none\">\n {trailing}\n </div>\n ) : null}\n </div>\n);\n\n/** Header that grows below a {@link PaneHeader}-height title row. */\nexport const PaneHeaderStack = ({\n header,\n children,\n}: {\n header: ReactNode;\n children?: ReactNode | undefined;\n}) => (\n <div className=\"border-border bg-background shrink-0 border-b\">\n {header}\n {children ? <div className=\"border-border border-t\">{children}</div> : null}\n </div>\n);\n"],"mappings":";;;;;;;AAMA,MAAaC,cAAaC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,UAAAC,UAAAC,YAAAC,OAAAN;CAWrB,MAAAQ,MARJF,OAAAC,KAAAA,IAAA,QAAAD,MAQI,4GAAA;CAEoI,IAAAG;CAAA,IAAAR,EAAA,OAAAE,UAAA;EAGtIM,KAAA,oBAAA,OAAA;GAAe,WAAA;GACZN;EACG,CAAA;EAAAF,EAAA,KAAAE;EAAAF,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAG,UAAA;EACLM,KAAAN,WACC,oBAAA,OAAA;GAAe,WAAA;aACZA;EACG,CAAA,IAHP;EAIOH,EAAA,KAAAG;EAAAH,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,IAAAU;CAAA,IAAAV,EAAA,OAAAO,MAAAP,EAAA,OAAAQ,MAAAR,EAAA,OAAAS,IAAA;EAdVC,KAAA,qBAAA,OAAA;GAEI,WAAAH;aAFJ,CAOEC,IAGCC,EAKG;;EAAAT,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;EAAAT,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,OAfNU;AAeM;;AAIR,MAAaC,mBAAkBZ,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAW,QAAAV,aAAAH;CAM/B,IAAAM;CAAA,IAAAL,EAAA,OAAAE,UAAA;EAGIG,KAAAH,WAAW,oBAAA,OAAA;GAAe,WAAA;GAA0BA;EAAe,CAAA,IAAnE;EAA0EF,EAAA,KAAAE;EAAAF,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,OAAAY,UAAAZ,EAAA,OAAAK,IAAA;EAF7EE,KAAA,qBAAA,OAAA;GAAe,WAAA;aAAf,CACGK,QACAP,EACG;;EAAAL,EAAA,KAAAY;EAAAZ,EAAA,KAAAK;EAAAL,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAHNO;AAGM"}
1
+ {"version":3,"file":"PaneHeader.js","names":["ReactNode","PaneHeader","t0","$","_c","children","trailing","borderless","t1","undefined","t2","t3","t4","t5","PaneHeaderStack","header"],"sources":["../../../src/views/ui/PaneHeader.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\n/**\n * Fixed-height rail header. Every column in a split layout should use this so\n * titles line up across columns.\n */\nexport const PaneHeader = ({\n children,\n trailing,\n borderless = false,\n}: {\n children: ReactNode;\n trailing?: ReactNode | undefined;\n borderless?: boolean;\n}) => (\n <div\n className={\n borderless\n ? \"bg-background flex h-8 max-h-8 min-h-8 shrink-0 items-center justify-between gap-2 overflow-hidden px-3\"\n : \"border-border bg-background flex h-8 max-h-8 min-h-8 shrink-0 items-center justify-between gap-2 overflow-hidden border-b px-3\"\n }\n >\n <div className=\"text-muted-foreground flex min-w-0 flex-1 items-center truncate text-[11px] leading-none tabular-nums\">\n {children}\n </div>\n {trailing ? (\n <div className=\"text-muted-foreground flex shrink-0 items-center gap-1.5 text-[10px] leading-none\">\n {trailing}\n </div>\n ) : null}\n </div>\n);\n\n/** Header that grows below a {@link PaneHeader}-height title row. */\nexport const PaneHeaderStack = ({\n header,\n children,\n}: {\n header: ReactNode;\n children?: ReactNode | undefined;\n}) => (\n <div className=\"border-border bg-background shrink-0 border-b\">\n {header}\n {children ? <div className=\"border-border border-t\">{children}</div> : null}\n </div>\n);\n"],"mappings":";;;;;;;AAMA,MAAaC,cAAaC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,UAAAC,UAAAC,YAAAC,OAAAN;CAWrB,MAAAQ,MARJF,OAAAC,KAAAA,IAAA,QAAAD,MAQI,4GAAA;CAEoI,IAAAG;CAAA,IAAAR,EAAA,OAAAE,UAAA;EAGtIM,KAAA,oBAAA,OAAA;GAAe,WAAA;GACZN;EACG,CAAA;EAAAF,EAAA,KAAAE;EAAAF,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAG,UAAA;EACLM,KAAAN,WACC,oBAAA,OAAA;GAAe,WAAA;GACZA,UAAAA;EACG,CAAA,IAHP;EAIOH,EAAA,KAAAG;EAAAH,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,IAAAU;CAAA,IAAAV,EAAA,OAAAO,MAAAP,EAAA,OAAAQ,MAAAR,EAAA,OAAAS,IAAA;EAdVC,KAAA,qBAAA,OAAA;GAEI,WAAAH;GAFJ,UAAA,CAOEC,IAGCC,EAKG;;EAAAT,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;EAAAT,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,OAfNU;AAeM;;AAIR,MAAaC,mBAAkBZ,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAW,QAAAV,aAAAH;CAM/B,IAAAM;CAAA,IAAAL,EAAA,OAAAE,UAAA;EAGIG,KAAAH,WAAW,oBAAA,OAAA;GAAe,WAAA;GAA0BA;EAAe,CAAA,IAAnE;EAA0EF,EAAA,KAAAE;EAAAF,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,OAAAY,UAAAZ,EAAA,OAAAK,IAAA;EAF7EE,KAAA,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA,CACGK,QACAP,EACG;;EAAAL,EAAA,KAAAY;EAAAZ,EAAA,KAAAK;EAAAL,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAHNO;AAGM"}
@@ -1,9 +1,6 @@
1
1
  //#region src/views/ui/RailTime.d.ts
2
2
  /** Compact timestamp for narrow rails; full value goes in the tooltip. */
3
- declare const RailTime: ({
4
- value,
5
- className
6
- }: {
3
+ declare const RailTime: ({ value, className }: {
7
4
  value: string | undefined;
8
5
  className?: string | undefined;
9
6
  }) => import("react").JSX.Element | null;
@@ -1 +1 @@
1
- {"version":3,"file":"RailTime.d.ts","names":[],"sources":["../../../src/views/ui/RailTime.tsx"],"mappings":";;cAIa,QAAA;EAAY,KAAA;EAAA;AAAA;EAIvB,KAAA;EACA,SAAA;AAAA,sBACD,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"RailTime.d.ts","names":[],"sources":["../../../src/views/ui/RailTime.tsx"],"mappings":";;cAIa,aAAY,OAAA;EAIvB;EACA;sBACD,IAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RailTime.js","names":["clsx","formatWhen","formatWhenLabel","RailTime","t0","$","_c","value","className","t1","when","t2","t3","t4"],"sources":["../../../src/views/ui/RailTime.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { formatWhen, formatWhenLabel } from \"../../utils/common\";\n\n/** Compact timestamp for narrow rails; full value goes in the tooltip. */\nexport const RailTime = ({\n value,\n className,\n}: {\n value: string | undefined;\n className?: string | undefined;\n}) => {\n const when = formatWhen(value);\n if (!when) return null;\n\n return (\n <time\n dateTime={value}\n title={formatWhenLabel(value)}\n className={clsx(\n \"text-muted-foreground font-mono text-[10px] leading-none whitespace-nowrap tabular-nums\",\n className,\n )}\n >\n {when}\n </time>\n );\n};\n"],"mappings":";;;;;;AAIA,MAAaG,YAAWC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,OAAAC,cAAAJ;CAMxB,IAAAK;CAAA,IAAAJ,EAAA,OAAAE,OAAA;EACcE,KAAAR,WAAWM,KAAK;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAA9B,MAAAK,OAAaD;CACb,IAAI,CAACC,MAAI,OAAS;CAAK,IAAAC;CAAA,IAAAN,EAAA,OAAAE,OAAA;EAKZI,KAAAT,gBAAgBK,KAAK;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,OAAAG,WAAA;EAClBI,KAAAZ,KACT,2FACAQ,SACF;EAACH,EAAA,KAAAG;EAAAH,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,OAAAM,MAAAN,EAAA,OAAAO,MAAAP,EAAA,OAAAE,SAAAF,EAAA,OAAAK,MAAA;EANHG,KAAA,oBAAA,QAAA;GACYN,UAAAA;GACH,OAAAI;GACI,WAAAC;aAKVF;EACI,CAAA;EAAAL,EAAA,KAAAM;EAAAN,EAAA,KAAAO;EAAAP,EAAA,KAAAE;EAAAF,EAAA,KAAAK;EAAAL,EAAA,MAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,OATPQ;AASO"}
1
+ {"version":3,"file":"RailTime.js","names":["clsx","formatWhen","formatWhenLabel","RailTime","t0","$","_c","value","className","t1","when","t2","t3","t4"],"sources":["../../../src/views/ui/RailTime.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { formatWhen, formatWhenLabel } from \"../../utils/common\";\n\n/** Compact timestamp for narrow rails; full value goes in the tooltip. */\nexport const RailTime = ({\n value,\n className,\n}: {\n value: string | undefined;\n className?: string | undefined;\n}) => {\n const when = formatWhen(value);\n if (!when) return null;\n\n return (\n <time\n dateTime={value}\n title={formatWhenLabel(value)}\n className={clsx(\n \"text-muted-foreground font-mono text-[10px] leading-none whitespace-nowrap tabular-nums\",\n className,\n )}\n >\n {when}\n </time>\n );\n};\n"],"mappings":";;;;;;AAIA,MAAaG,YAAWC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,OAAAC,cAAAJ;CAMxB,IAAAK;CAAA,IAAAJ,EAAA,OAAAE,OAAA;EACcE,KAAAR,WAAWM,KAAK;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAA9B,MAAAK,OAAaD;CACb,IAAI,CAACC,MAAI,OAAS;CAAK,IAAAC;CAAA,IAAAN,EAAA,OAAAE,OAAA;EAKZI,KAAAT,gBAAgBK,KAAK;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,OAAAG,WAAA;EAClBI,KAAAZ,KACT,2FACAQ,SACF;EAACH,EAAA,KAAAG;EAAAH,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,OAAAM,MAAAN,EAAA,OAAAO,MAAAP,EAAA,OAAAE,SAAAF,EAAA,OAAAK,MAAA;EANHG,KAAA,oBAAA,QAAA;GACYN,UAAAA;GACH,OAAAI;GACI,WAAAC;GAKVF,UAAAA;EACI,CAAA;EAAAL,EAAA,KAAAM;EAAAN,EAAA,KAAAO;EAAAP,EAAA,KAAAE;EAAAF,EAAA,KAAAK;EAAAL,EAAA,MAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,OATPQ;AASO"}
@@ -1,9 +1,6 @@
1
1
  import { ReactNode } from "react";
2
-
3
2
  //#region src/views/ui/SectionLabel.d.ts
4
- declare const SectionLabel: ({
5
- children
6
- }: {
3
+ declare const SectionLabel: ({ children }: {
7
4
  children: ReactNode;
8
5
  }) => import("react").JSX.Element;
9
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"SectionLabel.d.ts","names":[],"sources":["../../../src/views/ui/SectionLabel.tsx"],"mappings":";;;cAEa,YAAA;EAAgB;AAAA;EAAgB,QAAA,EAAU,SAAS;AAAA,sBAAE,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"SectionLabel.d.ts","names":[],"sources":["../../../src/views/ui/SectionLabel.tsx"],"mappings":";;cAEa,iBAAgB;EAAgB,UAAU;sBAAW,IAAA"}
@@ -1,5 +1,4 @@
1
1
  import { ReactNode } from "react";
2
-
3
2
  //#region src/views/ui/SelectableRow.d.ts
4
3
  /**
5
4
  * A row in a master rail. The leading border + accent fill mark the current
@@ -9,7 +8,8 @@ import { ReactNode } from "react";
9
8
  declare const SelectableRow: import("react").ForwardRefExoticComponent<{
10
9
  selected?: boolean;
11
10
  onSelect?: (() => void) | undefined;
12
- className?: string | undefined; /** Fixed-height row for uniform rails. */
11
+ className?: string | undefined;
12
+ /** Fixed-height row for uniform rails. */
13
13
  dense?: boolean;
14
14
  children: ReactNode;
15
15
  } & import("react").RefAttributes<HTMLButtonElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"SelectableRow.d.ts","names":[],"sources":["../../../src/views/ui/SelectableRow.tsx"],"mappings":";;;;;AAQA;;;cAAa,aAAA,kBAAa,yBAAA;;;;;YAQZ,SAAA;AAAA,kCAAA,iBAAA"}
1
+ {"version":3,"file":"SelectableRow.d.ts","names":[],"sources":["../../../src/views/ui/SelectableRow.tsx"],"mappings":";;;;;;;cAQa,+BAAa;EAGX;EACA;EACC;;EAEJ;EACE,UAAA;oBAwBZ,cAAA"}
@@ -5,10 +5,7 @@
5
5
  * glance and nothing more. Renders nothing below 2 points; color comes from the
6
6
  * surrounding text color (`currentColor`).
7
7
  */
8
- declare const Sparkline: ({
9
- values,
10
- className
11
- }: {
8
+ declare const Sparkline: ({ values, className }: {
12
9
  values: readonly number[];
13
10
  className?: string;
14
11
  }) => import("react").JSX.Element | null;
@@ -1 +1 @@
1
- {"version":3,"file":"Sparkline.d.ts","names":[],"sources":["../../../src/views/ui/Sparkline.tsx"],"mappings":";;AAQA;;;;;cAAa,SAAA;EAAa,MAAA;EAAA;AAAA;EAIxB,MAAA;EACA,SAAA;AAAA,sBACD,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"Sparkline.d.ts","names":[],"sources":["../../../src/views/ui/Sparkline.tsx"],"mappings":";;;;;;;cAQa,cAAa,QAAA;EAIxB;EACA;sBACD,IAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Sparkline.js","names":["clsx","Sparkline","t0","$","_c","values","className","length","max","Math","min","range","step","t1","value","index","toFixed","point","t2","map","join","points","lastValue","t3","split","lastX","lastY","t4","t5","t6","t7"],"sources":["../../../src/views/ui/Sparkline.tsx"],"sourcesContent":["import clsx from \"clsx\";\n\n/**\n * A monochrome trend line drawn as an SVG polyline. No axes, legend, or\n * gridlines: it answers \"is this metric rising, falling, or spiking\" at a\n * glance and nothing more. Renders nothing below 2 points; color comes from the\n * surrounding text color (`currentColor`).\n */\nexport const Sparkline = ({\n values,\n className,\n}: {\n values: readonly number[];\n className?: string;\n}) => {\n if (values.length < 2) return null;\n\n const width = 100;\n const height = 24;\n const max = Math.max(...values);\n const min = Math.min(...values);\n const range = max - min || 1;\n const step = width / (values.length - 1);\n\n const point = (value: number, index: number) =>\n `${(index * step).toFixed(1)},${(height - ((value - min) / range) * height).toFixed(1)}`;\n const points = values.map(point).join(\" \");\n const lastValue = values[values.length - 1]!;\n const [lastX, lastY] = point(lastValue, values.length - 1).split(\",\");\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={clsx(\"text-muted-foreground\", className)}\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n >\n <polyline\n points={points}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n <circle cx={lastX} cy={lastY} r=\"2\" fill=\"currentColor\" />\n </svg>\n );\n};\n"],"mappings":";;;;;;;;;;AAQA,MAAaC,aAAYC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,QAAAC,cAAAJ;CAOxB,IAAIG,OAAME,SAAU,GAAC,OAAS;CAI9B,MAAAC,MAAYC,KAAID,IAAI,GAAIH,MAAM;CAC9B,MAAAK,MAAYD,KAAIC,IAAI,GAAIL,MAAM;CAC9B,MAAAM,QAAcH,MAAME,OAAN;CACd,MAAAE,OALc,OAKQP,OAAME,SAAU;CAAG,IAAAM;CAAA,IAAAV,EAAA,OAAAO,OAAAP,EAAA,OAAAQ,SAAAR,EAAA,OAAAS,MAAA;EAE3BC,MAAAC,OAAAC,UACZ,IAAIA,QAAQH,KAAAA,CAAII,QAAU,CAAC,EAAC,IAPf,MAO+BF,QAAQJ,OAAOC,QAP9C,GAAA,CAO6DK,QAAU,CAAC;EAAGb,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;EAAAT,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAD1F,MAAAc,QAAcJ;CAC6E,IAAAK;CAAA,IAAAf,EAAA,OAAAc,SAAAd,EAAA,OAAAE,QAAA;EAC5Ea,KAAAb,OAAMc,IAAKF,KAAK,CAAC,CAAAG,KAAM,GAAG;EAACjB,EAAA,KAAAc;EAAAd,EAAA,KAAAE;EAAAF,EAAA,KAAAe;CAAA,OAAAA,KAAAf,EAAA;CAA1C,MAAAkB,SAAeH;CACf,MAAAI,YAAkBjB,OAAOA,OAAME,SAAU;CAAI,IAAAgB;CAAA,IAAApB,EAAA,OAAAmB,aAAAnB,EAAA,OAAAc,SAAAd,EAAA,OAAAE,OAAAE,QAAA;EACtBgB,KAAAN,MAAMK,WAAWjB,OAAME,SAAU,CAAC,CAAC,CAAAiB,MAAO,GAAG;EAACrB,EAAA,KAAAmB;EAAAnB,EAAA,KAAAc;EAAAd,EAAA,KAAAE,OAAAE;EAAAJ,EAAA,MAAAoB;CAAA,OAAAA,KAAApB,EAAA;CAArE,MAAA,CAAAsB,OAAAC,SAAuBH;CAA+C,IAAAI;CAAA,IAAAxB,EAAA,QAAAG,WAAA;EAKvDqB,KAAA3B,KAAK,yBAAyBM,SAAS;EAACH,EAAA,MAAAG;EAAAH,EAAA,MAAAwB;CAAA,OAAAA,KAAAxB,EAAA;CAAA,IAAAyB;CAAA,IAAAzB,EAAA,QAAAkB,QAAA;EAInDO,KAAA,oBAAA,YAAA;GACUP;GACH,MAAA;GACE,QAAA;GACK,aAAA;GACG,gBAAA;GACF,cAAA;EAAoB,CAAA;EACjClB,EAAA,MAAAkB;EAAAlB,EAAA,MAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CAAA,IAAA0B;CAAA,IAAA1B,EAAA,QAAAsB,SAAAtB,EAAA,QAAAuB,OAAA;EACFG,KAAA,oBAAA,UAAA;GAAYJ,IAAAA;GAAWC,IAAAA;GAAS,GAAA;GAAS,MAAA;EAAc,CAAA;EAAGvB,EAAA,MAAAsB;EAAAtB,EAAA,MAAAuB;EAAAvB,EAAA,MAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CAAA,IAAA2B;CAAA,IAAA3B,EAAA,QAAAwB,MAAAxB,EAAA,QAAAyB,MAAAzB,EAAA,QAAA0B,IAAA;EAd5DC,KAAA,qBAAA,OAAA;GACW,SAAA;GACE,WAAAH;GACS,qBAAA;GACR,eAAA;aAJd,CAMEC,IAQAC,EACI;;EAAA1B,EAAA,MAAAwB;EAAAxB,EAAA,MAAAyB;EAAAzB,EAAA,MAAA0B;EAAA1B,EAAA,MAAA2B;CAAA,OAAAA,KAAA3B,EAAA;CAAA,OAfN2B;AAeM"}
1
+ {"version":3,"file":"Sparkline.js","names":["clsx","Sparkline","t0","$","_c","values","className","length","max","Math","min","range","step","t1","value","index","toFixed","point","t2","map","join","points","lastValue","t3","split","lastX","lastY","t4","t5","t6","t7"],"sources":["../../../src/views/ui/Sparkline.tsx"],"sourcesContent":["import clsx from \"clsx\";\n\n/**\n * A monochrome trend line drawn as an SVG polyline. No axes, legend, or\n * gridlines: it answers \"is this metric rising, falling, or spiking\" at a\n * glance and nothing more. Renders nothing below 2 points; color comes from the\n * surrounding text color (`currentColor`).\n */\nexport const Sparkline = ({\n values,\n className,\n}: {\n values: readonly number[];\n className?: string;\n}) => {\n if (values.length < 2) return null;\n\n const width = 100;\n const height = 24;\n const max = Math.max(...values);\n const min = Math.min(...values);\n const range = max - min || 1;\n const step = width / (values.length - 1);\n\n const point = (value: number, index: number) =>\n `${(index * step).toFixed(1)},${(height - ((value - min) / range) * height).toFixed(1)}`;\n const points = values.map(point).join(\" \");\n const lastValue = values[values.length - 1]!;\n const [lastX, lastY] = point(lastValue, values.length - 1).split(\",\");\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={clsx(\"text-muted-foreground\", className)}\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n >\n <polyline\n points={points}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n <circle cx={lastX} cy={lastY} r=\"2\" fill=\"currentColor\" />\n </svg>\n );\n};\n"],"mappings":";;;;;;;;;;AAQA,MAAaC,aAAYC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,QAAAC,cAAAJ;CAOxB,IAAIG,OAAME,SAAU,GAAC,OAAS;CAI9B,MAAAC,MAAYC,KAAID,IAAI,GAAIH,MAAM;CAC9B,MAAAK,MAAYD,KAAIC,IAAI,GAAIL,MAAM;CAC9B,MAAAM,QAAcH,MAAME,OAAN;CACd,MAAAE,OALc,OAKQP,OAAME,SAAU;CAAG,IAAAM;CAAA,IAAAV,EAAA,OAAAO,OAAAP,EAAA,OAAAQ,SAAAR,EAAA,OAAAS,MAAA;EAE3BC,MAAAC,OAAAC,UACZ,IAAIA,QAAQH,KAAAA,CAAII,QAAU,CAAC,EAAC,IAPf,MAO+BF,QAAQJ,OAAOC,QAP9C,GAAA,CAO6DK,QAAU,CAAC;EAAGb,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;EAAAT,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAD1F,MAAAc,QAAcJ;CAC6E,IAAAK;CAAA,IAAAf,EAAA,OAAAc,SAAAd,EAAA,OAAAE,QAAA;EAC5Ea,KAAAb,OAAMc,IAAKF,KAAK,CAAC,CAAAG,KAAM,GAAG;EAACjB,EAAA,KAAAc;EAAAd,EAAA,KAAAE;EAAAF,EAAA,KAAAe;CAAA,OAAAA,KAAAf,EAAA;CAA1C,MAAAkB,SAAeH;CACf,MAAAI,YAAkBjB,OAAOA,OAAME,SAAU;CAAI,IAAAgB;CAAA,IAAApB,EAAA,OAAAmB,aAAAnB,EAAA,OAAAc,SAAAd,EAAA,OAAAE,OAAAE,QAAA;EACtBgB,KAAAN,MAAMK,WAAWjB,OAAME,SAAU,CAAC,CAAC,CAAAiB,MAAO,GAAG;EAACrB,EAAA,KAAAmB;EAAAnB,EAAA,KAAAc;EAAAd,EAAA,KAAAE,OAAAE;EAAAJ,EAAA,MAAAoB;CAAA,OAAAA,KAAApB,EAAA;CAArE,MAAA,CAAAsB,OAAAC,SAAuBH;CAA+C,IAAAI;CAAA,IAAAxB,EAAA,QAAAG,WAAA;EAKvDqB,KAAA3B,KAAK,yBAAyBM,SAAS;EAACH,EAAA,MAAAG;EAAAH,EAAA,MAAAwB;CAAA,OAAAA,KAAAxB,EAAA;CAAA,IAAAyB;CAAA,IAAAzB,EAAA,QAAAkB,QAAA;EAInDO,KAAA,oBAAA,YAAA;GACUP;GACH,MAAA;GACE,QAAA;GACK,aAAA;GACG,gBAAA;GACF,cAAA;EAAoB,CAAA;EACjClB,EAAA,MAAAkB;EAAAlB,EAAA,MAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CAAA,IAAA0B;CAAA,IAAA1B,EAAA,QAAAsB,SAAAtB,EAAA,QAAAuB,OAAA;EACFG,KAAA,oBAAA,UAAA;GAAYJ,IAAAA;GAAWC,IAAAA;GAAS,GAAA;GAAS,MAAA;EAAc,CAAA;EAAGvB,EAAA,MAAAsB;EAAAtB,EAAA,MAAAuB;EAAAvB,EAAA,MAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CAAA,IAAA2B;CAAA,IAAA3B,EAAA,QAAAwB,MAAAxB,EAAA,QAAAyB,MAAAzB,EAAA,QAAA0B,IAAA;EAd5DC,KAAA,qBAAA,OAAA;GACW,SAAA;GACE,WAAAH;GACS,qBAAA;GACR,eAAA;GAJd,UAAA,CAMEC,IAQAC,EACI;;EAAA1B,EAAA,MAAAwB;EAAAxB,EAAA,MAAAyB;EAAAzB,EAAA,MAAA0B;EAAA1B,EAAA,MAAA2B;CAAA,OAAAA,KAAA3B,EAAA;CAAA,OAfN2B;AAeM"}
@@ -1,21 +1,15 @@
1
1
  import { ReactNode } from "react";
2
-
3
2
  //#region src/views/ui/SummaryItem.d.ts
4
3
  /**
5
4
  * A key/value row: label left, value right on one baseline. Flat (no box). Group
6
5
  * a sequence in `SummaryList` for hairline dividers.
7
6
  */
8
- declare const SummaryItem: ({
9
- label,
10
- value
11
- }: {
7
+ declare const SummaryItem: ({ label, value }: {
12
8
  label: string;
13
9
  value: ReactNode;
14
10
  }) => import("react").JSX.Element;
15
11
  /** Divided list of `SummaryItem` rows. Unboxed: dividers do the grouping. */
16
- declare const SummaryList: ({
17
- children
18
- }: {
12
+ declare const SummaryList: ({ children }: {
19
13
  children: ReactNode;
20
14
  }) => import("react").JSX.Element;
21
15
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"SummaryItem.d.ts","names":[],"sources":["../../../src/views/ui/SummaryItem.tsx"],"mappings":";;;;;AAMA;;cAAa,WAAA;EAAe,KAAA;EAAA;AAAA;EAI1B,KAAA;EACA,KAAA,EAAO,SAAA;AAAA,sBACR,GAAA,CAAA,OAAA;;cAUY,WAAA;EAAe;AAAA;EAAgB,QAAA,EAAU,SAAS;AAAA,sBAAE,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"SummaryItem.d.ts","names":[],"sources":["../../../src/views/ui/SummaryItem.tsx"],"mappings":";;;;;;cAMa,gBAAe,OAAA;EAI1B;EACA,OAAO;sBACR,IAAA;;cAUY,gBAAe;EAAgB,UAAU;sBAAW,IAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"SummaryItem.js","names":["ReactNode","SummaryItem","t0","$","_c","label","value","t1","t2","t3","SummaryList","children"],"sources":["../../../src/views/ui/SummaryItem.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\n/**\n * A key/value row: label left, value right on one baseline. Flat (no box). Group\n * a sequence in `SummaryList` for hairline dividers.\n */\nexport const SummaryItem = ({\n label,\n value,\n}: {\n label: string;\n value: ReactNode;\n}) => (\n <div className=\"flex min-h-7 items-baseline justify-between gap-2 py-1 text-[11px]\">\n <span className=\"text-muted-foreground shrink-0\">{label}</span>\n <span className=\"text-foreground min-w-0 truncate text-right font-medium tabular-nums\">\n {value}\n </span>\n </div>\n);\n\n/** Divided list of `SummaryItem` rows. Unboxed: dividers do the grouping. */\nexport const SummaryList = ({ children }: { children: ReactNode }) => (\n <div className=\"divide-border divide-y\">{children}</div>\n);\n"],"mappings":";;;;;;;AAMA,MAAaC,eAAcC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,OAAAC,UAAAJ;CAM3B,IAAAK;CAAA,IAAAJ,EAAA,OAAAE,OAAA;EAEGE,KAAA,oBAAA,QAAA;GAAgB,WAAA;aAAkCF;EAAa,CAAA;EAAAF,EAAA,KAAAE;EAAAF,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,IAAAK;CAAA,IAAAL,EAAA,OAAAG,OAAA;EAC/DE,KAAA,oBAAA,QAAA;GAAgB,WAAA;aACbF;EACI,CAAA;EAAAH,EAAA,KAAAG;EAAAH,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAAA,IAAAM;CAAA,IAAAN,EAAA,OAAAI,MAAAJ,EAAA,OAAAK,IAAA;EAJTC,KAAA,qBAAA,OAAA;GAAe,WAAA;aAAf,CACEF,IACAC,EAGI;;EAAAL,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,OALNM;AAKM;;AAIR,MAAaC,eAAcR,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAO,aAAAT;CAAqC,IAAAK;CAAA,IAAAJ,EAAA,OAAAQ,UAAA;EAC/DJ,KAAA,oBAAA,OAAA;GAAe,WAAA;GAA0BI;EAAe,CAAA;EAAAR,EAAA,KAAAQ;EAAAR,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,OAAxDI;AAAwD"}
1
+ {"version":3,"file":"SummaryItem.js","names":["ReactNode","SummaryItem","t0","$","_c","label","value","t1","t2","t3","SummaryList","children"],"sources":["../../../src/views/ui/SummaryItem.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\n/**\n * A key/value row: label left, value right on one baseline. Flat (no box). Group\n * a sequence in `SummaryList` for hairline dividers.\n */\nexport const SummaryItem = ({\n label,\n value,\n}: {\n label: string;\n value: ReactNode;\n}) => (\n <div className=\"flex min-h-7 items-baseline justify-between gap-2 py-1 text-[11px]\">\n <span className=\"text-muted-foreground shrink-0\">{label}</span>\n <span className=\"text-foreground min-w-0 truncate text-right font-medium tabular-nums\">\n {value}\n </span>\n </div>\n);\n\n/** Divided list of `SummaryItem` rows. Unboxed: dividers do the grouping. */\nexport const SummaryList = ({ children }: { children: ReactNode }) => (\n <div className=\"divide-border divide-y\">{children}</div>\n);\n"],"mappings":";;;;;;;AAMA,MAAaC,eAAcC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,OAAAC,UAAAJ;CAM3B,IAAAK;CAAA,IAAAJ,EAAA,OAAAE,OAAA;EAEGE,KAAA,oBAAA,QAAA;GAAgB,WAAA;GAAkCF,UAAAA;EAAa,CAAA;EAAAF,EAAA,KAAAE;EAAAF,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,IAAAK;CAAA,IAAAL,EAAA,OAAAG,OAAA;EAC/DE,KAAA,oBAAA,QAAA;GAAgB,WAAA;GACbF,UAAAA;EACI,CAAA;EAAAH,EAAA,KAAAG;EAAAH,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAAA,IAAAM;CAAA,IAAAN,EAAA,OAAAI,MAAAJ,EAAA,OAAAK,IAAA;EAJTC,KAAA,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA,CACEF,IACAC,EAGI;;EAAAL,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,OALNM;AAKM;;AAIR,MAAaC,eAAcR,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAO,aAAAT;CAAqC,IAAAK;CAAA,IAAAJ,EAAA,OAAAQ,UAAA;EAC/DJ,KAAA,oBAAA,OAAA;GAAe,WAAA;GAA0BI;EAAe,CAAA;EAAAR,EAAA,KAAAQ;EAAAR,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,OAAxDI;AAAwD"}
@@ -1,13 +1,7 @@
1
1
  import { BadgeTone } from "./badgeTone.js";
2
2
  import { ReactNode } from "react";
3
-
4
3
  //#region src/views/ui/ToneBadge.d.ts
5
- declare const ToneBadge: ({
6
- tone,
7
- size,
8
- className,
9
- children
10
- }: {
4
+ declare const ToneBadge: ({ tone, size, className, children }: {
11
5
  tone?: BadgeTone | undefined;
12
6
  size?: "default" | "sm";
13
7
  className?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ToneBadge.d.ts","names":[],"sources":["../../../src/views/ui/ToneBadge.tsx"],"mappings":";;;;cAKa,SAAA;EAAa,IAAA;EAAA,IAAA;EAAA,SAAA;EAAA;AAAA;EAMxB,IAAA,GAAO,SAAA;EACP,IAAA;EACA,SAAA;EACA,QAAA,EAAU,SAAA;AAAA,sBACX,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"ToneBadge.d.ts","names":[],"sources":["../../../src/views/ui/ToneBadge.tsx"],"mappings":";;;cAKa,cAAa,MAAA,MAAA,WAAA;EAMxB,OAAO;EACP;EACA;EACA,UAAU;sBACX,IAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"badgeTone.d.ts","names":[],"sources":["../../../src/views/ui/badgeTone.ts"],"mappings":";cAAa,UAAA;EAAA;;;;;;;KAYD,SAAA,gBAAyB,UAAU;;cAGlC,WAAA,EAAa,MAAM,SAAS,SAAA;;cAQ5B,eAAA,EAAiB,MAAM,SAAS,SAAA;AAAA,cAShC,UAAA;AAAA,cAGA,QAAA;;cAIA,uBAAA"}
1
+ {"version":3,"file":"badgeTone.d.ts","names":[],"sources":["../../../src/views/ui/badgeTone.ts"],"mappings":";cAAa;;;;;;;;KAYD,yBAAyB;;cAGxB,aAAa,eAAe;;cAQ5B,iBAAiB,eAAe;cAShC;cAGA;;cAIA"}
@@ -1,7 +1,5 @@
1
1
  //#region src/views/ui/useCopyToClipboard.d.ts
2
- declare const useCopyToClipboard: ({
3
- copiedDuration
4
- }?: {
2
+ declare const useCopyToClipboard: ({ copiedDuration }?: {
5
3
  copiedDuration?: number;
6
4
  }) => {
7
5
  isCopied: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useCopyToClipboard.d.ts","names":[],"sources":["../../../src/views/ui/useCopyToClipboard.ts"],"mappings":";cAEa,kBAAA;EAAsB;AAAA;EAGjC,cAAA;AAAA"}
1
+ {"version":3,"file":"useCopyToClipboard.d.ts","names":[],"sources":["../../../src/views/ui/useCopyToClipboard.ts"],"mappings":";cAEa,uBAAsB;EAGjC;;;EAKU,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/react-devtools",
3
- "version": "1.2.8",
3
+ "version": "1.2.10",
4
4
  "description": "React development tools for assistant-ui components",
5
5
  "keywords": [
6
6
  "assistant-ui",
@@ -47,17 +47,17 @@
47
47
  }
48
48
  },
49
49
  "devDependencies": {
50
- "@tailwindcss/cli": "^4.3.1",
51
- "@types/node": "^26.0.0",
50
+ "@tailwindcss/cli": "^4.3.3",
51
+ "@types/node": "^26.1.1",
52
52
  "@types/react": "^19.2.17",
53
53
  "@types/react-dom": "^19.2.3",
54
- "react": "^19.2.7",
55
- "react-dom": "^19.2.7",
56
- "tailwindcss": "^4.3.1",
57
- "vitest": "^4.1.9",
58
- "@assistant-ui/tap": "0.9.3",
59
- "@assistant-ui/x-buildutils": "0.0.16",
60
- "@assistant-ui/react": "0.14.24"
54
+ "react": "^19.2.8",
55
+ "react-dom": "^19.2.8",
56
+ "tailwindcss": "^4.3.3",
57
+ "vitest": "^4.1.10",
58
+ "@assistant-ui/react": "0.14.28",
59
+ "@assistant-ui/tap": "0.9.5",
60
+ "@assistant-ui/x-buildutils": "0.0.19"
61
61
  },
62
62
  "publishConfig": {
63
63
  "access": "public",