@cueplusplus/ui 0.3.0 → 0.6.0

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 (541) hide show
  1. package/CHANGELOG.md +2263 -0
  2. package/dist/agent-runtime/_glyphs.js +43 -0
  3. package/dist/agent-runtime/branch-picker.d.ts +45 -0
  4. package/dist/agent-runtime/branch-picker.js +87 -0
  5. package/dist/agent-runtime/index.d.ts +4 -0
  6. package/dist/agent-runtime/index.js +4 -0
  7. package/dist/agent-runtime/tool-call-card.d.ts +69 -0
  8. package/dist/agent-runtime/tool-call-card.js +187 -0
  9. package/dist/agent-runtime/use-agent-thread.d.ts +164 -0
  10. package/dist/agent-runtime/use-agent-thread.js +251 -0
  11. package/dist/chat/index.d.ts +2 -2
  12. package/dist/chat/message-list.d.ts +6 -0
  13. package/dist/chat/message-list.js +35 -0
  14. package/dist/chrome/_drag.js +59 -0
  15. package/dist/chrome/_status-bar-item.js +85 -0
  16. package/dist/chrome/_status-bar.d.ts +15 -0
  17. package/dist/chrome/_status-bar.js +171 -0
  18. package/dist/chrome/app-shell.d.ts +120 -2
  19. package/dist/chrome/app-shell.js +107 -8
  20. package/dist/chrome/index.d.ts +4 -3
  21. package/dist/chrome/status-bar.d.ts +87 -4
  22. package/dist/chrome/status-bar.js +80 -16
  23. package/dist/chrome/title-bar.d.ts +11 -1
  24. package/dist/chrome/title-bar.js +1 -3
  25. package/dist/configurator/_export.js +3 -2
  26. package/dist/configurator/_overrides.d.ts +1 -1
  27. package/dist/configurator/token-editor.js +4 -1
  28. package/dist/date/_segments.js +52 -6
  29. package/dist/elements/activity-graph.d.ts +40 -0
  30. package/dist/elements/activity-graph.js +81 -0
  31. package/dist/elements/agent-card.d.ts +49 -0
  32. package/dist/elements/agent-card.js +91 -0
  33. package/dist/elements/agent-handoff.d.ts +24 -0
  34. package/dist/elements/agent-handoff.js +53 -0
  35. package/dist/elements/agent-mode-badge.d.ts +72 -0
  36. package/dist/elements/agent-mode-badge.js +110 -0
  37. package/dist/elements/agent-plan.d.ts +24 -0
  38. package/dist/elements/agent-plan.js +74 -0
  39. package/dist/elements/agent-status.d.ts +29 -0
  40. package/dist/elements/agent-status.js +46 -0
  41. package/dist/elements/agent-surface.d.ts +65 -0
  42. package/dist/elements/agent-surface.js +68 -0
  43. package/dist/elements/animated-number.d.ts +86 -0
  44. package/dist/elements/animated-number.js +118 -0
  45. package/dist/elements/approval-card.d.ts +40 -0
  46. package/dist/elements/approval-card.js +78 -0
  47. package/dist/elements/artifact-card.d.ts +30 -0
  48. package/dist/elements/artifact-card.js +58 -0
  49. package/dist/elements/background-inbox.d.ts +39 -0
  50. package/dist/elements/background-inbox.js +60 -0
  51. package/dist/elements/canvas-split.d.ts +77 -0
  52. package/dist/elements/canvas-split.js +138 -0
  53. package/dist/elements/chart.d.ts +41 -0
  54. package/dist/elements/chart.js +117 -0
  55. package/dist/elements/chat-panel.d.ts +46 -0
  56. package/dist/elements/chat-panel.js +104 -0
  57. package/dist/elements/checkpoint-history.d.ts +31 -0
  58. package/dist/elements/checkpoint-history.js +65 -0
  59. package/dist/elements/clamp.d.ts +90 -0
  60. package/dist/elements/clamp.js +109 -0
  61. package/dist/elements/code-diff.d.ts +42 -0
  62. package/dist/elements/code-diff.js +69 -0
  63. package/dist/elements/code-runner.d.ts +38 -0
  64. package/dist/elements/code-runner.js +84 -0
  65. package/dist/elements/command-palette.d.ts +48 -0
  66. package/dist/elements/command-palette.js +129 -0
  67. package/dist/elements/compaction-row.d.ts +63 -0
  68. package/dist/elements/compaction-row.js +110 -0
  69. package/dist/elements/comparison-card.d.ts +47 -0
  70. package/dist/elements/comparison-card.js +69 -0
  71. package/dist/elements/composer.d.ts +274 -0
  72. package/dist/elements/composer.js +505 -0
  73. package/dist/elements/computer-use.d.ts +40 -0
  74. package/dist/elements/computer-use.js +92 -0
  75. package/dist/elements/confidence-marker.d.ts +39 -0
  76. package/dist/elements/confidence-marker.js +64 -0
  77. package/dist/elements/connection-state.d.ts +29 -0
  78. package/dist/elements/connection-state.js +66 -0
  79. package/dist/elements/context-breakdown.d.ts +30 -0
  80. package/dist/elements/context-breakdown.js +86 -0
  81. package/dist/elements/context-usage.d.ts +99 -0
  82. package/dist/elements/context-usage.js +225 -0
  83. package/dist/elements/conversation-search.d.ts +48 -0
  84. package/dist/elements/conversation-search.js +88 -0
  85. package/dist/elements/cost-meter.d.ts +33 -0
  86. package/dist/elements/cost-meter.js +75 -0
  87. package/dist/elements/data-table.d.ts +31 -0
  88. package/dist/elements/data-table.js +67 -0
  89. package/dist/elements/day-separator.d.ts +34 -0
  90. package/dist/elements/day-separator.js +50 -0
  91. package/dist/elements/diagram.d.ts +34 -0
  92. package/dist/elements/diagram.js +75 -0
  93. package/dist/elements/document-reference.d.ts +37 -0
  94. package/dist/elements/document-reference.js +66 -0
  95. package/dist/elements/draft-restore.d.ts +27 -0
  96. package/dist/elements/draft-restore.js +54 -0
  97. package/dist/elements/edit-message.d.ts +36 -0
  98. package/dist/elements/edit-message.js +77 -0
  99. package/dist/elements/elements.css +459 -0
  100. package/dist/elements/elicitation-form.d.ts +48 -0
  101. package/dist/elements/elicitation-form.js +106 -0
  102. package/dist/elements/empty-state.d.ts +52 -0
  103. package/dist/elements/empty-state.js +98 -0
  104. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  105. package/dist/elements/end-of-turn-summary.js +75 -0
  106. package/dist/elements/error-state.d.ts +29 -0
  107. package/dist/elements/error-state.js +55 -0
  108. package/dist/elements/feedback-dialog.d.ts +36 -0
  109. package/dist/elements/feedback-dialog.js +81 -0
  110. package/dist/elements/file-tree.d.ts +45 -0
  111. package/dist/elements/file-tree.js +84 -0
  112. package/dist/elements/flow-graph.d.ts +45 -0
  113. package/dist/elements/flow-graph.js +78 -0
  114. package/dist/elements/generative/chart.js +200 -0
  115. package/dist/elements/generative/faults.js +111 -0
  116. package/dist/elements/generative/icons.d.ts +41 -0
  117. package/dist/elements/generative/icons.js +190 -0
  118. package/dist/elements/generative/intrinsics.js +483 -0
  119. package/dist/elements/generative/spec.d.ts +110 -0
  120. package/dist/elements/generative/spec.js +366 -0
  121. package/dist/elements/generative.css +1145 -0
  122. package/dist/elements/generative.d.ts +144 -0
  123. package/dist/elements/generative.js +126 -0
  124. package/dist/elements/guardrail-notice.d.ts +29 -0
  125. package/dist/elements/guardrail-notice.js +63 -0
  126. package/dist/elements/image-generation.d.ts +18 -0
  127. package/dist/elements/image-generation.js +64 -0
  128. package/dist/elements/index.d.ts +116 -0
  129. package/dist/elements/index.js +115 -0
  130. package/dist/elements/inline-citation.d.ts +43 -0
  131. package/dist/elements/inline-citation.js +93 -0
  132. package/dist/elements/job-progress.d.ts +49 -0
  133. package/dist/elements/job-progress.js +74 -0
  134. package/dist/elements/launcher-bubble.d.ts +34 -0
  135. package/dist/elements/launcher-bubble.js +72 -0
  136. package/dist/elements/live-region-announcer.d.ts +130 -0
  137. package/dist/elements/live-region-announcer.js +230 -0
  138. package/dist/elements/loading-state.d.ts +27 -0
  139. package/dist/elements/loading-state.js +36 -0
  140. package/dist/elements/map-answer.d.ts +38 -0
  141. package/dist/elements/map-answer.js +93 -0
  142. package/dist/elements/markdown.d.ts +131 -0
  143. package/dist/elements/markdown.js +528 -0
  144. package/dist/elements/math-block.d.ts +51 -0
  145. package/dist/elements/math-block.js +70 -0
  146. package/dist/elements/mcp-server-panel.d.ts +41 -0
  147. package/dist/elements/mcp-server-panel.js +115 -0
  148. package/dist/elements/memory-chips.d.ts +30 -0
  149. package/dist/elements/memory-chips.js +43 -0
  150. package/dist/elements/message-actions.d.ts +38 -0
  151. package/dist/elements/message-actions.js +71 -0
  152. package/dist/elements/message-attachment.d.ts +48 -0
  153. package/dist/elements/message-attachment.js +63 -0
  154. package/dist/elements/message-branches.d.ts +25 -0
  155. package/dist/elements/message-branches.js +65 -0
  156. package/dist/elements/message-pair.d.ts +33 -0
  157. package/dist/elements/message-pair.js +65 -0
  158. package/dist/elements/message-queue.d.ts +31 -0
  159. package/dist/elements/message-queue.js +80 -0
  160. package/dist/elements/message-timing.d.ts +33 -0
  161. package/dist/elements/message-timing.js +37 -0
  162. package/dist/elements/mobile-composer.d.ts +44 -0
  163. package/dist/elements/mobile-composer.js +88 -0
  164. package/dist/elements/model-picker.d.ts +38 -0
  165. package/dist/elements/model-picker.js +69 -0
  166. package/dist/elements/number-ticker.d.ts +18 -0
  167. package/dist/elements/number-ticker.js +47 -0
  168. package/dist/elements/onboarding.d.ts +30 -0
  169. package/dist/elements/onboarding.js +75 -0
  170. package/dist/elements/permission-grant.d.ts +35 -0
  171. package/dist/elements/permission-grant.js +86 -0
  172. package/dist/elements/permission-scopes.d.ts +215 -0
  173. package/dist/elements/permission-scopes.js +249 -0
  174. package/dist/elements/prompt-library.d.ts +43 -0
  175. package/dist/elements/prompt-library.js +117 -0
  176. package/dist/elements/queue-dock.d.ts +101 -0
  177. package/dist/elements/queue-dock.js +132 -0
  178. package/dist/elements/quota-banner.d.ts +26 -0
  179. package/dist/elements/quota-banner.js +66 -0
  180. package/dist/elements/quote-reply.d.ts +44 -0
  181. package/dist/elements/quote-reply.js +79 -0
  182. package/dist/elements/range.d.ts +29 -0
  183. package/dist/elements/range.js +45 -0
  184. package/dist/elements/read-aloud.d.ts +45 -0
  185. package/dist/elements/read-aloud.js +75 -0
  186. package/dist/elements/reasoning-effort.d.ts +36 -0
  187. package/dist/elements/reasoning-effort.js +67 -0
  188. package/dist/elements/reasoning-panel.d.ts +46 -0
  189. package/dist/elements/reasoning-panel.js +75 -0
  190. package/dist/elements/recommendation-card.d.ts +45 -0
  191. package/dist/elements/recommendation-card.js +83 -0
  192. package/dist/elements/regenerate-menu.d.ts +45 -0
  193. package/dist/elements/regenerate-menu.js +51 -0
  194. package/dist/elements/replay.d.ts +217 -0
  195. package/dist/elements/replay.js +498 -0
  196. package/dist/elements/research-report.d.ts +38 -0
  197. package/dist/elements/research-report.js +69 -0
  198. package/dist/elements/retrieval-chunks.d.ts +43 -0
  199. package/dist/elements/retrieval-chunks.js +81 -0
  200. package/dist/elements/revert-dock.d.ts +159 -0
  201. package/dist/elements/revert-dock.js +327 -0
  202. package/dist/elements/reviewable-diff.d.ts +45 -0
  203. package/dist/elements/reviewable-diff.js +110 -0
  204. package/dist/elements/risk-badge.d.ts +52 -0
  205. package/dist/elements/risk-badge.js +91 -0
  206. package/dist/elements/schedule-card.d.ts +42 -0
  207. package/dist/elements/schedule-card.js +90 -0
  208. package/dist/elements/score-breakdown.d.ts +47 -0
  209. package/dist/elements/score-breakdown.js +82 -0
  210. package/dist/elements/scroll-anchor.d.ts +32 -0
  211. package/dist/elements/scroll-anchor.js +121 -0
  212. package/dist/elements/settings-panel.d.ts +52 -0
  213. package/dist/elements/settings-panel.js +107 -0
  214. package/dist/elements/shared-conversation.d.ts +39 -0
  215. package/dist/elements/shared-conversation.js +68 -0
  216. package/dist/elements/sources.d.ts +33 -0
  217. package/dist/elements/sources.js +61 -0
  218. package/dist/elements/speaker-identity.d.ts +32 -0
  219. package/dist/elements/speaker-identity.js +51 -0
  220. package/dist/elements/spec-sheet.d.ts +31 -0
  221. package/dist/elements/spec-sheet.js +45 -0
  222. package/dist/elements/stopped-run.d.ts +22 -0
  223. package/dist/elements/stopped-run.js +50 -0
  224. package/dist/elements/streaming-text.d.ts +31 -0
  225. package/dist/elements/streaming-text.js +45 -0
  226. package/dist/elements/subagent-list.d.ts +37 -0
  227. package/dist/elements/subagent-list.js +79 -0
  228. package/dist/elements/suggestions.d.ts +30 -0
  229. package/dist/elements/suggestions.js +36 -0
  230. package/dist/elements/surfaces.d.ts +85 -0
  231. package/dist/elements/surfaces.js +107 -0
  232. package/dist/elements/tail-status.d.ts +131 -0
  233. package/dist/elements/tail-status.js +94 -0
  234. package/dist/elements/terminal-block.d.ts +29 -0
  235. package/dist/elements/terminal-block.js +54 -0
  236. package/dist/elements/thinking-indicator.d.ts +18 -0
  237. package/dist/elements/thinking-indicator.js +36 -0
  238. package/dist/elements/thread-list.d.ts +35 -0
  239. package/dist/elements/thread-list.js +68 -0
  240. package/dist/elements/thread-search.d.ts +42 -0
  241. package/dist/elements/thread-search.js +99 -0
  242. package/dist/elements/timeline.d.ts +37 -0
  243. package/dist/elements/timeline.js +46 -0
  244. package/dist/elements/todo-list.d.ts +42 -0
  245. package/dist/elements/todo-list.js +59 -0
  246. package/dist/elements/tool-call.d.ts +41 -0
  247. package/dist/elements/tool-call.js +85 -0
  248. package/dist/elements/tool-error.d.ts +39 -0
  249. package/dist/elements/tool-error.js +76 -0
  250. package/dist/elements/tool-group.d.ts +45 -0
  251. package/dist/elements/tool-group.js +71 -0
  252. package/dist/elements/tool-timeline.d.ts +65 -0
  253. package/dist/elements/tool-timeline.js +88 -0
  254. package/dist/elements/trace-waterfall.d.ts +37 -0
  255. package/dist/elements/trace-waterfall.js +69 -0
  256. package/dist/elements/transcript-rules.d.ts +67 -0
  257. package/dist/elements/transcript-rules.js +95 -0
  258. package/dist/elements/turn-footer.d.ts +74 -0
  259. package/dist/elements/turn-footer.js +101 -0
  260. package/dist/elements/typing-indicator.d.ts +16 -0
  261. package/dist/elements/typing-indicator.js +51 -0
  262. package/dist/elements/verdict-row.d.ts +89 -0
  263. package/dist/elements/verdict-row.js +150 -0
  264. package/dist/elements/vocabulary.d.ts +612 -0
  265. package/dist/elements/vocabulary.js +611 -0
  266. package/dist/elements/voice-conversation.d.ts +49 -0
  267. package/dist/elements/voice-conversation.js +123 -0
  268. package/dist/elements/web-preview.d.ts +32 -0
  269. package/dist/elements/web-preview.js +66 -0
  270. package/dist/elements/web-search.d.ts +37 -0
  271. package/dist/elements/web-search.js +66 -0
  272. package/dist/elements/work-collapse.d.ts +103 -0
  273. package/dist/elements/work-collapse.js +131 -0
  274. package/dist/forms/_chassis.d.ts +104 -4
  275. package/dist/forms/_chassis.js +104 -4
  276. package/dist/forms/input-group.d.ts +8 -3
  277. package/dist/forms/input-group.js +8 -3
  278. package/dist/forms/number-field.d.ts +3 -2
  279. package/dist/forms/number-field.js +3 -2
  280. package/dist/icons/containers.d.ts +89 -0
  281. package/dist/icons/containers.js +295 -0
  282. package/dist/icons/index.d.ts +2 -0
  283. package/dist/index.d.ts +12 -6
  284. package/dist/index.js +5 -1
  285. package/dist/instruments/_data-row.js +118 -0
  286. package/dist/instruments/data-row.d.ts +94 -0
  287. package/dist/instruments/data-row.js +151 -0
  288. package/dist/instruments/data-tree.d.ts +126 -0
  289. package/dist/instruments/data-tree.js +303 -0
  290. package/dist/instruments/index.d.ts +5 -2
  291. package/dist/instruments/index.js +4 -1
  292. package/dist/instruments/ledger.d.ts +105 -0
  293. package/dist/instruments/ledger.js +114 -0
  294. package/dist/instruments/table.d.ts +70 -2
  295. package/dist/instruments/table.js +133 -39
  296. package/dist/instruments/two-step-button.js +25 -6
  297. package/dist/layout/sidebar.d.ts +19 -1
  298. package/dist/layout/sidebar.js +19 -1
  299. package/dist/primitives/button.js +11 -1
  300. package/dist/primitives/chip.d.ts +35 -9
  301. package/dist/primitives/chip.js +97 -11
  302. package/dist/system/agent-skin.d.ts +27 -0
  303. package/dist/system/agent-skin.js +20 -0
  304. package/dist/system/portal.d.ts +5 -3
  305. package/dist/system/portal.js +19 -5
  306. package/dist/system/theme-provider.js +54 -9
  307. package/dist/system/use-density.d.ts +9 -0
  308. package/dist/system/use-density.js +9 -0
  309. package/dist/system/use-isomorphic-layout-effect.js +19 -1
  310. package/dist/theming/_presets.d.ts +1 -1
  311. package/dist/theming/_presets.js +74 -11
  312. package/dist/theming/contrast.d.ts +16 -4
  313. package/dist/theming/contrast.js +33 -6
  314. package/dist/theming/create-theme.d.ts +6 -2
  315. package/dist/theming/create-theme.js +32 -5
  316. package/dist/theming/serialize.d.ts +10 -1
  317. package/dist/theming/serialize.js +62 -8
  318. package/manifest/components/activity-graph.json +88 -0
  319. package/manifest/components/agent-card.json +120 -0
  320. package/manifest/components/agent-handoff.json +87 -0
  321. package/manifest/components/agent-mode-badge.json +84 -0
  322. package/manifest/components/agent-plan.json +67 -0
  323. package/manifest/components/agent-status.json +73 -0
  324. package/manifest/components/agent-surface.json +78 -0
  325. package/manifest/components/alert-dialog.json +1 -1
  326. package/manifest/components/animated-number.json +67 -0
  327. package/manifest/components/app-shell.json +142 -9
  328. package/manifest/components/approval-card.json +106 -0
  329. package/manifest/components/artifact-card.json +81 -0
  330. package/manifest/components/audience-icon.json +52 -0
  331. package/manifest/components/autocomplete.json +2 -0
  332. package/manifest/components/background-inbox.json +71 -0
  333. package/manifest/components/branch-picker.json +124 -0
  334. package/manifest/components/button.json +1 -0
  335. package/manifest/components/canvas-split-body.json +62 -0
  336. package/manifest/components/canvas-split-document.json +54 -0
  337. package/manifest/components/canvas-split-header.json +83 -0
  338. package/manifest/components/canvas-split-line.json +62 -0
  339. package/manifest/components/canvas-split-message.json +62 -0
  340. package/manifest/components/canvas-split-thread.json +54 -0
  341. package/manifest/components/canvas-split.json +60 -0
  342. package/manifest/components/catalogue-icon.json +52 -0
  343. package/manifest/components/channel-beta-icon.json +52 -0
  344. package/manifest/components/channel-released-icon.json +52 -0
  345. package/manifest/components/chart.json +93 -0
  346. package/manifest/components/chat-empty-state.json +55 -0
  347. package/manifest/components/chat-panel-assistant-message.json +51 -0
  348. package/manifest/components/chat-panel-composer.json +66 -0
  349. package/manifest/components/chat-panel-messages.json +51 -0
  350. package/manifest/components/chat-panel-typing.json +51 -0
  351. package/manifest/components/chat-panel-user-message.json +51 -0
  352. package/manifest/components/chat-panel.json +57 -0
  353. package/manifest/components/checkpoint-history.json +80 -0
  354. package/manifest/components/chip.json +24 -12
  355. package/manifest/components/clamp.json +102 -0
  356. package/manifest/components/cli-tool-icon.json +52 -0
  357. package/manifest/components/code-diff.json +87 -0
  358. package/manifest/components/code-runner.json +97 -0
  359. package/manifest/components/color-field.json +2 -0
  360. package/manifest/components/color-picker.json +2 -0
  361. package/manifest/components/combobox.json +2 -0
  362. package/manifest/components/compaction-row.json +100 -0
  363. package/manifest/components/comparison-card.json +83 -0
  364. package/manifest/components/composer-actions.json +65 -0
  365. package/manifest/components/composer-attach-button.json +65 -0
  366. package/manifest/components/composer-attachment-chip.json +75 -0
  367. package/manifest/components/composer-attachments.json +60 -0
  368. package/manifest/components/composer-bar.json +73 -0
  369. package/manifest/components/composer-command-item.json +79 -0
  370. package/manifest/components/composer-context.json +67 -0
  371. package/manifest/components/composer-input.json +73 -0
  372. package/manifest/components/composer-menu-item.json +72 -0
  373. package/manifest/components/composer-menu.json +79 -0
  374. package/manifest/components/composer-model-item.json +75 -0
  375. package/manifest/components/composer-model-trigger.json +75 -0
  376. package/manifest/components/composer-person-item.json +79 -0
  377. package/manifest/components/composer-send.json +80 -0
  378. package/manifest/components/composer-toolbar.json +65 -0
  379. package/manifest/components/composer-voice-button.json +68 -0
  380. package/manifest/components/composer-voice.json +75 -0
  381. package/manifest/components/composer.json +2 -0
  382. package/manifest/components/computer-use.json +84 -0
  383. package/manifest/components/confidence-marker.json +74 -0
  384. package/manifest/components/connection-state.json +84 -0
  385. package/manifest/components/context-breakdown.json +65 -0
  386. package/manifest/components/context-usage.json +85 -0
  387. package/manifest/components/conversation-search.json +92 -0
  388. package/manifest/components/cost-meter.json +74 -0
  389. package/manifest/components/cue-portal-frame.json +1 -1
  390. package/manifest/components/data-row.json +203 -0
  391. package/manifest/components/data-tree.json +151 -0
  392. package/manifest/components/date-field.json +2 -0
  393. package/manifest/components/date-picker.json +2 -0
  394. package/manifest/components/date-range-picker.json +2 -0
  395. package/manifest/components/day-separator.json +58 -0
  396. package/manifest/components/delegation-card.json +1 -1
  397. package/manifest/components/density.json +1 -1
  398. package/manifest/components/diagram.json +100 -0
  399. package/manifest/components/document-reference.json +90 -0
  400. package/manifest/components/draft-restore.json +82 -0
  401. package/manifest/components/drawer.json +1 -1
  402. package/manifest/components/dropdown-menu.json +1 -1
  403. package/manifest/components/edit-message.json +105 -0
  404. package/manifest/components/elements-command-palette.json +100 -0
  405. package/manifest/components/elements-composer.json +71 -0
  406. package/manifest/components/elements-data-table.json +68 -0
  407. package/manifest/components/elements-timeline.json +69 -0
  408. package/manifest/components/elicitation-form.json +103 -0
  409. package/manifest/components/empty-state-composer.json +64 -0
  410. package/manifest/components/empty-state-greeting.json +49 -0
  411. package/manifest/components/empty-state-suggestion.json +57 -0
  412. package/manifest/components/empty-state-suggestions.json +49 -0
  413. package/manifest/components/end-of-turn-summary.json +77 -0
  414. package/manifest/components/env-var-input.json +2 -0
  415. package/manifest/components/error-state.json +80 -0
  416. package/manifest/components/feedback-dialog.json +107 -0
  417. package/manifest/components/file-tree.json +83 -0
  418. package/manifest/components/flow-graph.json +75 -0
  419. package/manifest/components/folder-icon.json +52 -0
  420. package/manifest/components/frac.json +59 -0
  421. package/manifest/components/generation-loader.json +64 -0
  422. package/manifest/components/generative-ui.json +93 -0
  423. package/manifest/components/guardrail-notice.json +91 -0
  424. package/manifest/components/hover-card.json +1 -1
  425. package/manifest/components/image-generation.json +67 -0
  426. package/manifest/components/info-tip.json +1 -1
  427. package/manifest/components/inline-citation.json +77 -0
  428. package/manifest/components/input-group.json +4 -2
  429. package/manifest/components/input.json +3 -1
  430. package/manifest/components/job-progress.json +96 -0
  431. package/manifest/components/launcher-bubble.json +105 -0
  432. package/manifest/components/ledger.json +187 -0
  433. package/manifest/components/live-region-announcer.json +79 -0
  434. package/manifest/components/map-answer.json +83 -0
  435. package/manifest/components/markdown-text.json +94 -0
  436. package/manifest/components/math-block.json +74 -0
  437. package/manifest/components/mcp-server-icon.json +52 -0
  438. package/manifest/components/mcp-server-panel.json +87 -0
  439. package/manifest/components/memory-chips.json +65 -0
  440. package/manifest/components/message-actions.json +99 -0
  441. package/manifest/components/message-attachments.json +63 -0
  442. package/manifest/components/message-branches.json +71 -0
  443. package/manifest/components/message-list.json +1 -1
  444. package/manifest/components/message-pair.json +86 -0
  445. package/manifest/components/message-queue.json +74 -0
  446. package/manifest/components/message-timing.json +62 -0
  447. package/manifest/components/mobile-composer.json +126 -0
  448. package/manifest/components/model-picker.json +76 -0
  449. package/manifest/components/multi-select.json +2 -0
  450. package/manifest/components/musical-time-input.json +2 -0
  451. package/manifest/components/node-card.json +1 -1
  452. package/manifest/components/node-handle.json +1 -1
  453. package/manifest/components/number-field.json +3 -1
  454. package/manifest/components/number-ticker.json +61 -0
  455. package/manifest/components/onboarding.json +84 -0
  456. package/manifest/components/otp-field.json +9 -7
  457. package/manifest/components/password-input.json +2 -0
  458. package/manifest/components/permission-grant.json +92 -0
  459. package/manifest/components/permission-scopes.json +139 -0
  460. package/manifest/components/popover.json +1 -1
  461. package/manifest/components/prompt-library.json +99 -0
  462. package/manifest/components/queue-dock.json +110 -0
  463. package/manifest/components/quota-banner.json +94 -0
  464. package/manifest/components/quote-reply.json +105 -0
  465. package/manifest/components/read-aloud.json +111 -0
  466. package/manifest/components/reasoning-effort.json +81 -0
  467. package/manifest/components/reasoning-panel.json +108 -0
  468. package/manifest/components/recommendation-card.json +107 -0
  469. package/manifest/components/regenerate-menu.json +89 -0
  470. package/manifest/components/replay-player.json +102 -0
  471. package/manifest/components/research-report.json +76 -0
  472. package/manifest/components/retrieval-chunks.json +84 -0
  473. package/manifest/components/revert-dock.json +150 -0
  474. package/manifest/components/reviewable-diff.json +93 -0
  475. package/manifest/components/risk-badge.json +74 -0
  476. package/manifest/components/schedule-card.json +101 -0
  477. package/manifest/components/score-breakdown.json +91 -0
  478. package/manifest/components/scroll-anchor.json +72 -0
  479. package/manifest/components/scroll-area.json +7 -7
  480. package/manifest/components/scrub-input.json +2 -0
  481. package/manifest/components/search-input.json +9 -7
  482. package/manifest/components/segmented-control.json +21 -21
  483. package/manifest/components/select.json +1 -0
  484. package/manifest/components/settings-panel.json +118 -0
  485. package/manifest/components/shared-conversation.json +89 -0
  486. package/manifest/components/shimmer-label.json +59 -0
  487. package/manifest/components/skill-icon.json +52 -0
  488. package/manifest/components/sources.json +83 -0
  489. package/manifest/components/speaker-identity.json +61 -0
  490. package/manifest/components/spec-sheet.json +80 -0
  491. package/manifest/components/stack-icon.json +52 -0
  492. package/manifest/components/stacks-matrix-icon.json +52 -0
  493. package/manifest/components/stat.json +1 -1
  494. package/manifest/components/status-bar.json +146 -12
  495. package/manifest/components/status-dot.json +1 -1
  496. package/manifest/components/stopped-run.json +81 -0
  497. package/manifest/components/streaming-text.json +71 -0
  498. package/manifest/components/sub.json +44 -0
  499. package/manifest/components/subagent-list.json +88 -0
  500. package/manifest/components/suggestions.json +84 -0
  501. package/manifest/components/sup.json +44 -0
  502. package/manifest/components/swap-label.json +71 -0
  503. package/manifest/components/table-scroll-region.json +6 -0
  504. package/manifest/components/table.json +88 -4
  505. package/manifest/components/tags-input.json +2 -0
  506. package/manifest/components/tail-status.json +109 -0
  507. package/manifest/components/terminal-block.json +91 -0
  508. package/manifest/components/textarea.json +3 -1
  509. package/manifest/components/theme-provider.json +2 -2
  510. package/manifest/components/thinking-indicator.json +63 -0
  511. package/manifest/components/thread-list.json +76 -0
  512. package/manifest/components/thread-search.json +90 -0
  513. package/manifest/components/threshold-rail.json +2 -2
  514. package/manifest/components/time-boundary.json +62 -0
  515. package/manifest/components/time-field.json +2 -0
  516. package/manifest/components/timeline.json +1 -1
  517. package/manifest/components/title-bar.json +1 -1
  518. package/manifest/components/todo-list.json +69 -0
  519. package/manifest/components/toggle-group.json +9 -7
  520. package/manifest/components/toggle.json +2 -0
  521. package/manifest/components/token-editor.json +1 -1
  522. package/manifest/components/tool-call-card.json +200 -0
  523. package/manifest/components/tool-call.json +119 -0
  524. package/manifest/components/tool-error.json +114 -0
  525. package/manifest/components/tool-group.json +83 -0
  526. package/manifest/components/tool-timeline.json +119 -0
  527. package/manifest/components/toolbar.json +7 -7
  528. package/manifest/components/tooltip.json +1 -1
  529. package/manifest/components/trace-waterfall.json +74 -0
  530. package/manifest/components/turn-footer.json +105 -0
  531. package/manifest/components/typing-indicator.json +53 -0
  532. package/manifest/components/unread-divider.json +55 -0
  533. package/manifest/components/usage-chart.json +1 -1
  534. package/manifest/components/verdict-row.json +91 -0
  535. package/manifest/components/voice-conversation.json +109 -0
  536. package/manifest/components/web-preview.json +87 -0
  537. package/manifest/components/web-search.json +92 -0
  538. package/manifest/components/work-collapse.json +102 -0
  539. package/manifest/manifest.json +2736 -60
  540. package/manifest/tokens.json +22 -1
  541. package/package.json +44 -2
@@ -0,0 +1,85 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { ShimmerLabel, SwapLabel, collapsePanel, field, mono } from "./surfaces.js";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ import { Collapsible } from "@base-ui/react/collapsible";
6
+ import { CheckIcon, ChevronRightIcon } from "lucide-react";
7
+ //#region src/elements/tool-call.tsx
8
+ /**
9
+ * One tool invocation with its request and result tucked behind a disclosure.
10
+ *
11
+ * @example
12
+ * import { ToolCall } from "@cueplusplus/ui/elements";
13
+ *
14
+ * <ToolCall
15
+ * label="Searched"
16
+ * activeLabel="Searching"
17
+ * query="composer props"
18
+ * request='{"q":"composer"}'
19
+ * result='{"hits":2}'
20
+ * running={false}
21
+ * open
22
+ * onOpenChange={setOpen}
23
+ * />
24
+ */
25
+ function ToolCall({ label, activeLabel, query, request, result, running, open, onOpenChange, className }) {
26
+ return /* @__PURE__ */ jsxs(Collapsible.Root, {
27
+ "data-slot": "tool-call",
28
+ open,
29
+ onOpenChange,
30
+ className: cn("w-full max-w-sm", className),
31
+ children: [/* @__PURE__ */ jsxs(Collapsible.Trigger, {
32
+ className: "group/trigger text-fg-muted hover:text-fg flex items-center gap-2 rounded-(--radius-control) py-1 text-(length:--cue-text-body) transition-colors outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent",
33
+ children: [
34
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3.5 shrink-0 opacity-60 transition-transform duration-200 ease-[cubic-bezier(0.32,0.72,0,1)] group-data-[panel-open]/trigger:rotate-90 motion-reduce:transition-none" }),
35
+ /* @__PURE__ */ jsxs(SwapLabel, {
36
+ active: running ? 0 : 1,
37
+ className: "text-start",
38
+ children: [/* @__PURE__ */ jsx(ShimmerLabel, {
39
+ active: running,
40
+ className: "relative inline-block leading-none",
41
+ children: activeLabel
42
+ }), /* @__PURE__ */ jsx(Fragment, { children: label })]
43
+ }),
44
+ /* @__PURE__ */ jsx("span", {
45
+ className: cn(mono, "bg-surface-2 text-fg-muted rounded-(--radius-control) px-1.5 py-0.5"),
46
+ children: query
47
+ }),
48
+ /* @__PURE__ */ jsx("span", {
49
+ className: "ms-auto flex w-4 items-center justify-end",
50
+ children: !running && /* @__PURE__ */ jsx(CheckIcon, { className: "cue-elements-fade-in cue-elements-zoom-in-90 cue-elements-animate-in size-3.5 text-ok duration-200" })
51
+ })
52
+ ]
53
+ }), /* @__PURE__ */ jsx(Collapsible.Panel, {
54
+ className: cn(collapsePanel, "outline-none"),
55
+ children: /* @__PURE__ */ jsxs("div", {
56
+ className: cn(field, "mt-2 overflow-hidden rounded-(--radius-overlay) text-(length:--cue-text-ui)"),
57
+ children: [
58
+ /* @__PURE__ */ jsxs("div", {
59
+ className: "px-3.5 pt-2.5 pb-2",
60
+ children: [/* @__PURE__ */ jsx("p", {
61
+ className: cn(mono, "text-fg-subtle mb-1"),
62
+ children: "Request"
63
+ }), /* @__PURE__ */ jsx("p", {
64
+ className: "text-fg-muted font-mono",
65
+ children: request
66
+ })]
67
+ }),
68
+ /* @__PURE__ */ jsx("div", { className: "bg-surface-2 mx-3.5 h-px" }),
69
+ /* @__PURE__ */ jsxs("div", {
70
+ className: "px-3.5 pt-2 pb-2.5",
71
+ children: [/* @__PURE__ */ jsx("p", {
72
+ className: cn(mono, "text-fg-subtle mb-1"),
73
+ children: "Result"
74
+ }), /* @__PURE__ */ jsx("p", {
75
+ className: "text-fg",
76
+ children: result
77
+ })]
78
+ })
79
+ ]
80
+ })
81
+ })]
82
+ });
83
+ }
84
+ //#endregion
85
+ export { ToolCall };
@@ -0,0 +1,39 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/tool-error.d.ts
3
+ /**
4
+ * One call failed. The error, the attempt count, and a retry that doesn't restart the
5
+ * turn.
6
+ *
7
+ * @example
8
+ * import { ToolError } from "@cueplusplus/ui/elements";
9
+ *
10
+ * <ToolError
11
+ * name="fetch"
12
+ * target="https://api.example.com/v1/issues"
13
+ * message="ETIMEDOUT after 30000ms"
14
+ * attempt={2}
15
+ * maxAttempts={3}
16
+ * retrying={false}
17
+ * onRetry={retry}
18
+ * />
19
+ */
20
+ declare function ToolError({ name, target, message, attempt, maxAttempts, retrying, onRetry, onSkip, className, ...props }: Omit<ComponentProps<"div">, "children" | "name" | "target" | "message" | "attempt" | "maxAttempts" | "retrying" | "onRetry" | "onSkip"> & {
21
+ /** Tool that failed. */
22
+ name: string;
23
+ /** What it was called against. */
24
+ target: string;
25
+ /** The raw error, shown in mono rather than reworded. */
26
+ message: string;
27
+ /** Which attempt this was. */
28
+ attempt: number;
29
+ /** How many the runtime will make. */
30
+ maxAttempts: number;
31
+ /** Swaps the retry control for a spinner and disables it. */
32
+ retrying: boolean;
33
+ /** Called to run the call again without restarting the turn. */
34
+ onRetry?: () => void;
35
+ /** Called to give up on this call and let the turn continue. */
36
+ onSkip?: () => void;
37
+ }): import("react").JSX.Element;
38
+ //#endregion
39
+ export { ToolError };
@@ -0,0 +1,76 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { field, mono, paper } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { AlertCircleIcon, Loader2Icon, RotateCwIcon } from "lucide-react";
6
+ //#region src/elements/tool-error.tsx
7
+ /**
8
+ * One call failed. The error, the attempt count, and a retry that doesn't restart the
9
+ * turn.
10
+ *
11
+ * @example
12
+ * import { ToolError } from "@cueplusplus/ui/elements";
13
+ *
14
+ * <ToolError
15
+ * name="fetch"
16
+ * target="https://api.example.com/v1/issues"
17
+ * message="ETIMEDOUT after 30000ms"
18
+ * attempt={2}
19
+ * maxAttempts={3}
20
+ * retrying={false}
21
+ * onRetry={retry}
22
+ * />
23
+ */
24
+ function ToolError({ name, target, message, attempt, maxAttempts, retrying, onRetry, onSkip, className, ...props }) {
25
+ return /* @__PURE__ */ jsxs("div", {
26
+ "data-slot": "tool-error",
27
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-3.5", className),
28
+ ...props,
29
+ children: [
30
+ /* @__PURE__ */ jsxs("div", {
31
+ className: "flex items-center gap-2.5",
32
+ children: [
33
+ /* @__PURE__ */ jsx(AlertCircleIcon, { className: "size-3.5 shrink-0 text-danger" }),
34
+ /* @__PURE__ */ jsx("span", {
35
+ className: cn(mono, "text-fg-muted shrink-0"),
36
+ children: name
37
+ }),
38
+ /* @__PURE__ */ jsx("span", {
39
+ className: "text-fg-muted min-w-0 flex-1 truncate text-(length:--cue-text-body)",
40
+ children: target
41
+ }),
42
+ /* @__PURE__ */ jsxs("span", {
43
+ className: cn(mono, "text-fg-subtle shrink-0 tabular-nums"),
44
+ children: [
45
+ attempt,
46
+ "/",
47
+ maxAttempts
48
+ ]
49
+ })
50
+ ]
51
+ }),
52
+ /* @__PURE__ */ jsx("div", {
53
+ className: cn(field, "rounded-(--radius-surface) px-3 py-2 font-mono text-(length:--cue-text-label) leading-relaxed text-danger"),
54
+ children: message
55
+ }),
56
+ /* @__PURE__ */ jsxs("div", {
57
+ className: "flex items-center justify-end gap-2",
58
+ children: [/* @__PURE__ */ jsx("button", {
59
+ type: "button",
60
+ onClick: onSkip,
61
+ disabled: !onSkip,
62
+ className: "text-fg-muted hover:bg-surface-2 hover:text-fg h-7 rounded-full px-2.5 text-(length:--cue-text-ui) font-medium transition-[background-color,color,scale] duration-150 active:scale-[0.96] disabled:pointer-events-none disabled:opacity-30",
63
+ children: "Skip"
64
+ }), /* @__PURE__ */ jsxs("button", {
65
+ type: "button",
66
+ onClick: onRetry,
67
+ disabled: retrying,
68
+ className: "text-fg-muted hover:bg-surface-2 hover:text-fg flex h-7 items-center gap-1.5 rounded-full px-2.5 text-(length:--cue-text-ui) font-medium transition-[background-color,color,scale] duration-150 active:scale-[0.96] disabled:pointer-events-none",
69
+ children: [retrying ? /* @__PURE__ */ jsx(Loader2Icon, { className: "size-3 animate-spin motion-reduce:animate-none" }) : /* @__PURE__ */ jsx(RotateCwIcon, { className: "size-3" }), retrying ? "Retrying" : "Retry"]
70
+ })]
71
+ })
72
+ ]
73
+ });
74
+ }
75
+ //#endregion
76
+ export { ToolError };
@@ -0,0 +1,45 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/tool-group.d.ts
3
+ /** Where one tool in a group got to: still running, finished, or failed. */
4
+ type GroupedToolState = "running" | "done" | "failed";
5
+ /** One row of a tool group: what ran, against what, and how it ended. */
6
+ interface GroupedTool {
7
+ /** Stable identity for the row key. */
8
+ id: string;
9
+ /** Tool name, rendered in mono. */
10
+ name: string;
11
+ /** What the call acted on: a path, a query, an id. */
12
+ target: string;
13
+ /** Per-call state, rolled up into the header summary. */
14
+ state: GroupedToolState;
15
+ /** Printed once the call settles. Omit while running. */
16
+ durationMs?: number;
17
+ }
18
+ /**
19
+ * Calls that went out together, collapsed to one row until you want the detail.
20
+ *
21
+ * @example
22
+ * import { ToolGroup } from "@cueplusplus/ui/elements";
23
+ *
24
+ * <ToolGroup
25
+ * label="Read 4 files in parallel"
26
+ * tools={tools}
27
+ * open={open}
28
+ * onOpenChange={setOpen}
29
+ * />
30
+ */
31
+ declare function ToolGroup({ label, tools, open, onOpenChange, className, ...props }: Omit<ComponentProps<"div">, "children" | "label" | "tools" | "open" | "onOpenChange"> & {
32
+ /** What the group did, as one line. */
33
+ label: string;
34
+ /**
35
+ * Calls issued together. The header summarizes them: progress while any run,
36
+ * failures if any failed, otherwise the count.
37
+ */
38
+ tools: readonly GroupedTool[];
39
+ /** Whether the per-call list is expanded. */
40
+ open: boolean;
41
+ /** Called when the group is expanded or collapsed. */
42
+ onOpenChange?: (open: boolean) => void;
43
+ }): import("react").JSX.Element;
44
+ //#endregion
45
+ export { GroupedTool, GroupedToolState, ToolGroup };
@@ -0,0 +1,71 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { mono, paper } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { CheckIcon, ChevronRightIcon, Loader2Icon, XIcon } from "lucide-react";
6
+ //#region src/elements/tool-group.tsx
7
+ /**
8
+ * Calls that went out together, collapsed to one row until you want the detail.
9
+ *
10
+ * @example
11
+ * import { ToolGroup } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <ToolGroup
14
+ * label="Read 4 files in parallel"
15
+ * tools={tools}
16
+ * open={open}
17
+ * onOpenChange={setOpen}
18
+ * />
19
+ */
20
+ function ToolGroup({ label, tools, open, onOpenChange, className, ...props }) {
21
+ const running = tools.filter((tool) => tool.state === "running").length;
22
+ const failed = tools.filter((tool) => tool.state === "failed").length;
23
+ return /* @__PURE__ */ jsxs("div", {
24
+ "data-slot": "tool-group",
25
+ className: cn(paper, "flex w-full max-w-sm flex-col overflow-hidden rounded-(--radius-overlay)", className),
26
+ ...props,
27
+ children: [/* @__PURE__ */ jsxs("button", {
28
+ type: "button",
29
+ "aria-expanded": open,
30
+ onClick: () => onOpenChange?.(!open),
31
+ className: "hover:bg-surface-1 flex items-center gap-2.5 px-3.5 py-2.5 text-start transition-colors",
32
+ children: [
33
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: cn("text-fg-subtle size-3 shrink-0 transition-transform duration-200 motion-reduce:transition-none", open && "rotate-90") }),
34
+ /* @__PURE__ */ jsx("span", {
35
+ className: "min-w-0 flex-1 truncate text-(length:--cue-text-body)",
36
+ children: label
37
+ }),
38
+ /* @__PURE__ */ jsx("span", {
39
+ className: cn(mono, "text-fg-subtle shrink-0 tabular-nums"),
40
+ children: running > 0 ? `${tools.length - running}/${tools.length}` : failed > 0 ? `${failed} failed` : `${tools.length} done`
41
+ }),
42
+ running > 0 ? /* @__PURE__ */ jsx(Loader2Icon, { className: "text-fg-subtle size-3.5 shrink-0 animate-spin motion-reduce:animate-none" }) : failed > 0 ? /* @__PURE__ */ jsx(XIcon, { className: "size-3.5 shrink-0 text-danger" }) : /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5 shrink-0 text-ok" })
43
+ ]
44
+ }), open && /* @__PURE__ */ jsx("div", {
45
+ className: "border-border cue-elements-fade-in cue-elements-slide-in-from-top-1 cue-elements-animate-in flex flex-col border-t duration-200",
46
+ children: tools.map((tool) => /* @__PURE__ */ jsxs("div", {
47
+ className: "flex items-center gap-2.5 px-3.5 py-2",
48
+ children: [
49
+ /* @__PURE__ */ jsx("span", {
50
+ className: "flex size-3.5 shrink-0 items-center justify-center",
51
+ children: tool.state === "running" ? /* @__PURE__ */ jsx(Loader2Icon, { className: "text-fg-subtle size-3 animate-spin motion-reduce:animate-none" }) : tool.state === "failed" ? /* @__PURE__ */ jsx(XIcon, { className: "size-3 text-danger" }) : /* @__PURE__ */ jsx(CheckIcon, { className: "size-3 text-ok" })
52
+ }),
53
+ /* @__PURE__ */ jsx("span", {
54
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-muted shrink-0"),
55
+ children: tool.name
56
+ }),
57
+ /* @__PURE__ */ jsx("span", {
58
+ className: "text-fg-muted min-w-0 flex-1 truncate text-(length:--cue-text-body)",
59
+ children: tool.target
60
+ }),
61
+ tool.durationMs !== void 0 && /* @__PURE__ */ jsxs("span", {
62
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle shrink-0 tabular-nums"),
63
+ children: [tool.durationMs, "ms"]
64
+ })
65
+ ]
66
+ }, tool.id))
67
+ })]
68
+ });
69
+ }
70
+ //#endregion
71
+ export { ToolGroup };
@@ -0,0 +1,65 @@
1
+ import { LucideIcon } from "lucide-react";
2
+ //#region src/elements/tool-timeline.d.ts
3
+ /** One thing the session did, said as a verb and the thing it was done to. */
4
+ interface TimelineStep {
5
+ /** What was done — `Read`, `Edited`, `Ran`. It shimmers while it is the live step. */
6
+ verb: string;
7
+ /** What it was done to, in a mono chip. Also the step's key, so it has to be distinct. */
8
+ chip: string;
9
+ /** The glyph beside the verb, as a `lucide-react` component rather than an element. */
10
+ icon: LucideIcon;
11
+ }
12
+ /** One file the session touched, with the lines it gained and lost. */
13
+ interface TimelineStat {
14
+ /** The path, in a mono chip. Also the row's key. */
15
+ file: string;
16
+ /** Lines added, shown in the ok hue. Omit for a file that only lost lines. */
17
+ added?: number;
18
+ /** Lines removed, shown in the danger hue. Omit for a file that only gained them. */
19
+ removed?: number;
20
+ }
21
+ /**
22
+ * What a session summary is told: its steps, its labels, and the files it ended up
23
+ * changing.
24
+ */
25
+ interface ToolTimelineProps {
26
+ /** Working-session verbs, chips, and icons to reveal over time. */
27
+ steps: readonly TimelineStep[];
28
+ /** How many steps from the start are currently shown. */
29
+ visibleSteps: number;
30
+ /** When true the trigger shows Working with a shimmer and elapsed timer. */
31
+ streaming: boolean;
32
+ /** Whether the collapsible timeline body is expanded. */
33
+ open: boolean;
34
+ /** Called when the user expands or collapses the timeline. */
35
+ onOpenChange: (open: boolean) => void;
36
+ /** Trigger label once streaming finishes. */
37
+ restingLabel: string;
38
+ /** Full-size live label while streaming, for example Working for 12s. */
39
+ activeLabel: string;
40
+ /** Per-file addition and removal counts listed under the steps. */
41
+ stats: TimelineStat[];
42
+ /** Extra classes merged onto the root. */
43
+ className?: string;
44
+ }
45
+ /**
46
+ * A whole working session summarized as verbs, targets, and file stats.
47
+ *
48
+ * @example
49
+ * import { FileSearchIcon } from "lucide-react";
50
+ * import { ToolTimeline } from "@cueplusplus/ui/elements";
51
+ *
52
+ * <ToolTimeline
53
+ * steps={[{ verb: "Read", chip: "thread.tsx", icon: FileSearchIcon }]}
54
+ * visibleSteps={1}
55
+ * streaming
56
+ * open
57
+ * onOpenChange={setOpen}
58
+ * restingLabel="Worked for 12s"
59
+ * activeLabel="Working for 12s"
60
+ * stats={[{ file: "thread.tsx", added: 4, removed: 1 }]}
61
+ * />
62
+ */
63
+ declare function ToolTimeline({ steps, visibleSteps, streaming, open, onOpenChange, restingLabel, activeLabel, stats, className }: ToolTimelineProps): import("react").JSX.Element;
64
+ //#endregion
65
+ export { TimelineStat, TimelineStep, ToolTimeline, ToolTimelineProps };
@@ -0,0 +1,88 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { ShimmerLabel, SwapLabel, collapsePanel } from "./surfaces.js";
4
+ import { take } from "./range.js";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import { Collapsible } from "@base-ui/react/collapsible";
7
+ import { ChevronRightIcon } from "lucide-react";
8
+ //#region src/elements/tool-timeline.tsx
9
+ /**
10
+ * A whole working session summarized as verbs, targets, and file stats.
11
+ *
12
+ * @example
13
+ * import { FileSearchIcon } from "lucide-react";
14
+ * import { ToolTimeline } from "@cueplusplus/ui/elements";
15
+ *
16
+ * <ToolTimeline
17
+ * steps={[{ verb: "Read", chip: "thread.tsx", icon: FileSearchIcon }]}
18
+ * visibleSteps={1}
19
+ * streaming
20
+ * open
21
+ * onOpenChange={setOpen}
22
+ * restingLabel="Worked for 12s"
23
+ * activeLabel="Working for 12s"
24
+ * stats={[{ file: "thread.tsx", added: 4, removed: 1 }]}
25
+ * />
26
+ */
27
+ function ToolTimeline({ steps, visibleSteps, streaming, open, onOpenChange, restingLabel, activeLabel, stats, className }) {
28
+ return /* @__PURE__ */ jsxs(Collapsible.Root, {
29
+ "data-slot": "tool-timeline",
30
+ open,
31
+ onOpenChange,
32
+ className: cn("w-full max-w-sm", className),
33
+ children: [/* @__PURE__ */ jsxs(Collapsible.Trigger, {
34
+ className: "group/trigger text-fg-muted hover:text-fg flex items-center gap-1.5 rounded-(--radius-control) py-1 text-(length:--cue-text-body) transition-colors outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent",
35
+ children: [/* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3.5 shrink-0 opacity-60 transition-transform duration-200 ease-[cubic-bezier(0.32,0.72,0,1)] group-data-[panel-open]/trigger:rotate-90 motion-reduce:transition-none" }), /* @__PURE__ */ jsxs(SwapLabel, {
36
+ active: streaming ? 0 : 1,
37
+ className: "text-start tabular-nums",
38
+ children: [/* @__PURE__ */ jsx(ShimmerLabel, {
39
+ active: streaming,
40
+ className: "relative inline-block leading-none",
41
+ children: activeLabel
42
+ }), /* @__PURE__ */ jsx(Fragment, { children: restingLabel })]
43
+ })]
44
+ }), /* @__PURE__ */ jsx(Collapsible.Panel, {
45
+ className: cn(collapsePanel, "outline-none"),
46
+ children: /* @__PURE__ */ jsxs("div", {
47
+ className: "flex flex-col gap-2.5 ps-4 pt-2.5",
48
+ children: [take(steps, visibleSteps).map((step, index, shown) => {
49
+ const Icon = step.icon;
50
+ const active = streaming && index === shown.length - 1;
51
+ return /* @__PURE__ */ jsxs("div", {
52
+ className: "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in cue-elements-fill-mode-both text-fg-muted flex items-center gap-2 text-(length:--cue-text-body) duration-300",
53
+ children: [
54
+ /* @__PURE__ */ jsx(Icon, { className: "text-fg-subtle size-3.5 shrink-0" }),
55
+ /* @__PURE__ */ jsx(ShimmerLabel, {
56
+ active,
57
+ className: "relative inline-block leading-none",
58
+ children: step.verb
59
+ }),
60
+ /* @__PURE__ */ jsx("span", {
61
+ className: "bg-surface-2 text-fg-muted rounded-(--radius-control) px-1.5 py-0.5 font-mono text-(length:--cue-text-label)",
62
+ children: step.chip
63
+ })
64
+ ]
65
+ }, step.chip);
66
+ }), stats.length > 0 && /* @__PURE__ */ jsx("div", {
67
+ className: "flex flex-wrap gap-1.5 pt-1",
68
+ children: stats.map((stat) => /* @__PURE__ */ jsxs("span", {
69
+ className: "bg-surface-2 text-fg-muted inline-flex items-center gap-1 rounded-(--radius-control) px-1.5 py-0.5 font-mono text-(length:--cue-text-label)",
70
+ children: [
71
+ /* @__PURE__ */ jsx("span", { children: stat.file }),
72
+ stat.added !== void 0 && /* @__PURE__ */ jsxs("span", {
73
+ className: "text-ok",
74
+ children: ["+", stat.added]
75
+ }),
76
+ stat.removed !== void 0 && /* @__PURE__ */ jsxs("span", {
77
+ className: "text-danger",
78
+ children: ["−", stat.removed]
79
+ })
80
+ ]
81
+ }, stat.file))
82
+ })]
83
+ })
84
+ })]
85
+ });
86
+ }
87
+ //#endregion
88
+ export { ToolTimeline };
@@ -0,0 +1,37 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/trace-waterfall.d.ts
3
+ /** How a span ended, or that it has not: `running`, `completed`, `failed`. */
4
+ type SpanStatus = "running" | "completed" | "failed";
5
+ /** One bar of a trace: where it starts, how long it lasts, and how deep it nests. */
6
+ interface TraceSpan {
7
+ /** Stable identity for the row key. */
8
+ id: string;
9
+ /** Span label in the left rail; truncates rather than wraps. */
10
+ name: string;
11
+ /** Nesting level. Indents the label; the bar position comes from startMs, not from this. */
12
+ depth: number;
13
+ /** Offset from the start of the trace. */
14
+ startMs: number;
15
+ /** How long the span took. A running span still needs one so its bar has width. */
16
+ durationMs: number;
17
+ /** Running pulses in blue, completed is neutral, failed is red. */
18
+ status: SpanStatus;
19
+ }
20
+ /**
21
+ * Every span in a run on one time axis, nested, so you can see where it actually went.
22
+ *
23
+ * @example
24
+ * import { TraceWaterfall } from "@cueplusplus/ui/elements";
25
+ *
26
+ * <TraceWaterfall spans={spans} totalMs={1840} visibleCount={spans.length} />
27
+ */
28
+ declare function TraceWaterfall({ spans, totalMs, visibleCount, className, ...props }: Omit<ComponentProps<"div">, "children" | "spans" | "totalMs" | "visibleCount"> & {
29
+ /** Flat list in start order. Nesting comes from each span's depth. */
30
+ spans: readonly TraceSpan[];
31
+ /** Width of the axis. Bars are positioned against this, not against the widest span. */
32
+ totalMs: number;
33
+ /** How many spans have been reported so far. */
34
+ visibleCount: number;
35
+ }): import("react").JSX.Element;
36
+ //#endregion
37
+ export { SpanStatus, TraceSpan, TraceWaterfall };
@@ -0,0 +1,69 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { mono, paper } from "./surfaces.js";
4
+ import { pct, take } from "./range.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/elements/trace-waterfall.tsx
7
+ const TONE = {
8
+ running: "bg-stream",
9
+ completed: "bg-surface-3",
10
+ failed: "bg-danger/80"
11
+ };
12
+ /**
13
+ * Every span in a run on one time axis, nested, so you can see where it actually went.
14
+ *
15
+ * @example
16
+ * import { TraceWaterfall } from "@cueplusplus/ui/elements";
17
+ *
18
+ * <TraceWaterfall spans={spans} totalMs={1840} visibleCount={spans.length} />
19
+ */
20
+ function TraceWaterfall({ spans, totalMs, visibleCount, className, ...props }) {
21
+ const span = totalMs || 1;
22
+ return /* @__PURE__ */ jsxs("div", {
23
+ "data-slot": "trace-waterfall",
24
+ className: cn(paper, "flex w-full max-w-md flex-col gap-2 rounded-(--radius-overlay) p-4", className),
25
+ ...props,
26
+ children: [/* @__PURE__ */ jsxs("div", {
27
+ className: "flex items-baseline justify-between",
28
+ children: [/* @__PURE__ */ jsx("span", {
29
+ className: "text-(length:--cue-text-body) font-medium",
30
+ children: "Trace"
31
+ }), /* @__PURE__ */ jsxs("span", {
32
+ className: cn(mono, "text-fg-subtle tabular-nums"),
33
+ children: [totalMs, "ms"]
34
+ })]
35
+ }), /* @__PURE__ */ jsx("div", {
36
+ className: "flex flex-col gap-1",
37
+ children: take(spans, visibleCount).map((item) => {
38
+ const left = pct(item.startMs, span);
39
+ const width = Math.max(1.5, pct(item.durationMs, span));
40
+ return /* @__PURE__ */ jsxs("div", {
41
+ className: "cue-elements-fade-in cue-elements-slide-in-from-left-1 cue-elements-animate-in cue-elements-fill-mode-both grid grid-cols-[7.5rem_1fr_2.5rem] items-center gap-2 duration-300",
42
+ children: [
43
+ /* @__PURE__ */ jsx("span", {
44
+ className: "text-fg-muted min-w-0 truncate text-(length:--cue-text-ui)",
45
+ style: { paddingInlineStart: `${item.depth * .75}rem` },
46
+ children: item.name
47
+ }),
48
+ /* @__PURE__ */ jsx("span", {
49
+ className: "relative flex h-4 min-w-0 items-center",
50
+ children: /* @__PURE__ */ jsx("span", {
51
+ className: cn("absolute h-[7px] rounded-full transition-[width] duration-500 ease-out motion-reduce:transition-none", TONE[item.status], item.status === "running" && "animate-pulse"),
52
+ style: {
53
+ insetInlineStart: `${left}%`,
54
+ width: `${width}%`
55
+ }
56
+ })
57
+ }),
58
+ /* @__PURE__ */ jsx("span", {
59
+ className: cn(mono, "text-fg-subtle text-end tabular-nums"),
60
+ children: item.durationMs
61
+ })
62
+ ]
63
+ }, item.id);
64
+ })
65
+ })]
66
+ });
67
+ }
68
+ //#endregion
69
+ export { TraceWaterfall };
@@ -0,0 +1,67 @@
1
+ import * as React from "react";
2
+ //#region src/elements/transcript-rules.d.ts
3
+ interface TimeBoundaryProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children"> {
4
+ /**
5
+ * The label, pre-formatted: `Today`, `Yesterday`, `14 March`. This family
6
+ * does no date arithmetic and owns no locale — the caller knows which one the
7
+ * console is in, and `DaySeparator` next door takes its days the same way.
8
+ */
9
+ label: string;
10
+ /**
11
+ * The machine-readable instant, rendering the label inside a `<time>`. Worth
12
+ * giving: it is what lets a test, a scraper or a deep link find the boundary
13
+ * without parsing the words a human reads.
14
+ */
15
+ dateTime?: string;
16
+ }
17
+ /**
18
+ * The rule that says the day changed: a label centred between two hairlines.
19
+ *
20
+ * One row, placed by the caller. That is the difference between this and
21
+ * `DaySeparator`, which takes a whole message list and inserts its own rules:
22
+ * a transcript assembled from a row union — the shape every shipping agent UI
23
+ * converged on — needs the boundary as a *member of that union*, not as a
24
+ * component that owns the list around it.
25
+ *
26
+ * It is a `role="separator"` carrying its label as an accessible name, and the
27
+ * text inside it is `aria-hidden`. A reader hears "Today, separator" once
28
+ * rather than twice, and the hairlines are never announced at all.
29
+ *
30
+ * @example
31
+ * import { TimeBoundary } from "@cueplusplus/ui/elements";
32
+ *
33
+ * <TimeBoundary label="Today" dateTime="2026-08-22" />
34
+ */
35
+ declare const TimeBoundary: React.ForwardRefExoticComponent<TimeBoundaryProps & React.RefAttributes<HTMLDivElement>>;
36
+ interface UnreadDividerProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children"> {
37
+ /**
38
+ * What the rule says. `New` by default — one word, because the row is a place
39
+ * marker and not an announcement, and because the sentence a reader wants is
40
+ * the one below the rule.
41
+ */
42
+ label?: string;
43
+ }
44
+ /**
45
+ * The rule that says "you have read down to here": an accented line with its
46
+ * label at the end.
47
+ *
48
+ * The second row of Cursor's union that no catalogue ships, and the one with a
49
+ * rule of its own that is easy to get wrong: it marks where the reader *was*,
50
+ * so it does not move while they read. A divider that chased the last-seen
51
+ * message would vanish the moment it appeared, which is why this component
52
+ * takes no messages, no counts and no scroll position — the caller decides
53
+ * where it goes and when it leaves, and the row is only ever the mark.
54
+ *
55
+ * Accented rather than neutral, and asymmetric rather than centred, so it can
56
+ * never be mistaken for a {@link TimeBoundary} two rows above it.
57
+ *
58
+ * @example
59
+ * import { UnreadDivider } from "@cueplusplus/ui/elements";
60
+ *
61
+ * <UnreadDivider />
62
+ * @example
63
+ * <UnreadDivider label="New since you left" />
64
+ */
65
+ declare const UnreadDivider: React.ForwardRefExoticComponent<UnreadDividerProps & React.RefAttributes<HTMLDivElement>>;
66
+ //#endregion
67
+ export { TimeBoundary, TimeBoundaryProps, UnreadDivider, UnreadDividerProps };