@cueplusplus/ui 0.3.0 → 0.5.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 (488) hide show
  1. package/CHANGELOG.md +2229 -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/app-shell.d.ts +52 -2
  15. package/dist/chrome/app-shell.js +80 -8
  16. package/dist/chrome/index.d.ts +2 -2
  17. package/dist/configurator/_export.js +3 -2
  18. package/dist/configurator/_overrides.d.ts +1 -1
  19. package/dist/configurator/token-editor.js +4 -1
  20. package/dist/date/_segments.js +37 -2
  21. package/dist/elements/activity-graph.d.ts +40 -0
  22. package/dist/elements/activity-graph.js +81 -0
  23. package/dist/elements/agent-card.d.ts +49 -0
  24. package/dist/elements/agent-card.js +91 -0
  25. package/dist/elements/agent-handoff.d.ts +24 -0
  26. package/dist/elements/agent-handoff.js +53 -0
  27. package/dist/elements/agent-mode-badge.d.ts +72 -0
  28. package/dist/elements/agent-mode-badge.js +110 -0
  29. package/dist/elements/agent-plan.d.ts +24 -0
  30. package/dist/elements/agent-plan.js +74 -0
  31. package/dist/elements/agent-status.d.ts +29 -0
  32. package/dist/elements/agent-status.js +46 -0
  33. package/dist/elements/agent-surface.d.ts +65 -0
  34. package/dist/elements/agent-surface.js +68 -0
  35. package/dist/elements/animated-number.d.ts +86 -0
  36. package/dist/elements/animated-number.js +118 -0
  37. package/dist/elements/approval-card.d.ts +40 -0
  38. package/dist/elements/approval-card.js +78 -0
  39. package/dist/elements/artifact-card.d.ts +30 -0
  40. package/dist/elements/artifact-card.js +58 -0
  41. package/dist/elements/background-inbox.d.ts +39 -0
  42. package/dist/elements/background-inbox.js +60 -0
  43. package/dist/elements/canvas-split.d.ts +77 -0
  44. package/dist/elements/canvas-split.js +138 -0
  45. package/dist/elements/chart.d.ts +41 -0
  46. package/dist/elements/chart.js +117 -0
  47. package/dist/elements/chat-panel.d.ts +46 -0
  48. package/dist/elements/chat-panel.js +104 -0
  49. package/dist/elements/checkpoint-history.d.ts +31 -0
  50. package/dist/elements/checkpoint-history.js +65 -0
  51. package/dist/elements/clamp.d.ts +90 -0
  52. package/dist/elements/clamp.js +109 -0
  53. package/dist/elements/code-diff.d.ts +42 -0
  54. package/dist/elements/code-diff.js +69 -0
  55. package/dist/elements/code-runner.d.ts +38 -0
  56. package/dist/elements/code-runner.js +84 -0
  57. package/dist/elements/command-palette.d.ts +48 -0
  58. package/dist/elements/command-palette.js +129 -0
  59. package/dist/elements/compaction-row.d.ts +63 -0
  60. package/dist/elements/compaction-row.js +110 -0
  61. package/dist/elements/comparison-card.d.ts +47 -0
  62. package/dist/elements/comparison-card.js +69 -0
  63. package/dist/elements/composer.d.ts +274 -0
  64. package/dist/elements/composer.js +505 -0
  65. package/dist/elements/computer-use.d.ts +40 -0
  66. package/dist/elements/computer-use.js +92 -0
  67. package/dist/elements/confidence-marker.d.ts +39 -0
  68. package/dist/elements/confidence-marker.js +64 -0
  69. package/dist/elements/connection-state.d.ts +29 -0
  70. package/dist/elements/connection-state.js +66 -0
  71. package/dist/elements/context-breakdown.d.ts +30 -0
  72. package/dist/elements/context-breakdown.js +86 -0
  73. package/dist/elements/context-usage.d.ts +99 -0
  74. package/dist/elements/context-usage.js +225 -0
  75. package/dist/elements/conversation-search.d.ts +48 -0
  76. package/dist/elements/conversation-search.js +88 -0
  77. package/dist/elements/cost-meter.d.ts +33 -0
  78. package/dist/elements/cost-meter.js +75 -0
  79. package/dist/elements/data-table.d.ts +31 -0
  80. package/dist/elements/data-table.js +67 -0
  81. package/dist/elements/day-separator.d.ts +34 -0
  82. package/dist/elements/day-separator.js +50 -0
  83. package/dist/elements/diagram.d.ts +34 -0
  84. package/dist/elements/diagram.js +75 -0
  85. package/dist/elements/document-reference.d.ts +37 -0
  86. package/dist/elements/document-reference.js +66 -0
  87. package/dist/elements/draft-restore.d.ts +27 -0
  88. package/dist/elements/draft-restore.js +54 -0
  89. package/dist/elements/edit-message.d.ts +36 -0
  90. package/dist/elements/edit-message.js +77 -0
  91. package/dist/elements/elements.css +459 -0
  92. package/dist/elements/elicitation-form.d.ts +48 -0
  93. package/dist/elements/elicitation-form.js +106 -0
  94. package/dist/elements/empty-state.d.ts +52 -0
  95. package/dist/elements/empty-state.js +98 -0
  96. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  97. package/dist/elements/end-of-turn-summary.js +75 -0
  98. package/dist/elements/error-state.d.ts +29 -0
  99. package/dist/elements/error-state.js +55 -0
  100. package/dist/elements/feedback-dialog.d.ts +36 -0
  101. package/dist/elements/feedback-dialog.js +81 -0
  102. package/dist/elements/file-tree.d.ts +45 -0
  103. package/dist/elements/file-tree.js +84 -0
  104. package/dist/elements/flow-graph.d.ts +45 -0
  105. package/dist/elements/flow-graph.js +78 -0
  106. package/dist/elements/generative/chart.js +200 -0
  107. package/dist/elements/generative/faults.js +111 -0
  108. package/dist/elements/generative/icons.d.ts +41 -0
  109. package/dist/elements/generative/icons.js +190 -0
  110. package/dist/elements/generative/intrinsics.js +483 -0
  111. package/dist/elements/generative/spec.d.ts +110 -0
  112. package/dist/elements/generative/spec.js +366 -0
  113. package/dist/elements/generative.css +1145 -0
  114. package/dist/elements/generative.d.ts +144 -0
  115. package/dist/elements/generative.js +126 -0
  116. package/dist/elements/guardrail-notice.d.ts +29 -0
  117. package/dist/elements/guardrail-notice.js +63 -0
  118. package/dist/elements/image-generation.d.ts +18 -0
  119. package/dist/elements/image-generation.js +64 -0
  120. package/dist/elements/index.d.ts +116 -0
  121. package/dist/elements/index.js +115 -0
  122. package/dist/elements/inline-citation.d.ts +43 -0
  123. package/dist/elements/inline-citation.js +93 -0
  124. package/dist/elements/job-progress.d.ts +49 -0
  125. package/dist/elements/job-progress.js +74 -0
  126. package/dist/elements/launcher-bubble.d.ts +34 -0
  127. package/dist/elements/launcher-bubble.js +72 -0
  128. package/dist/elements/live-region-announcer.d.ts +130 -0
  129. package/dist/elements/live-region-announcer.js +230 -0
  130. package/dist/elements/loading-state.d.ts +27 -0
  131. package/dist/elements/loading-state.js +36 -0
  132. package/dist/elements/map-answer.d.ts +38 -0
  133. package/dist/elements/map-answer.js +93 -0
  134. package/dist/elements/markdown.d.ts +131 -0
  135. package/dist/elements/markdown.js +528 -0
  136. package/dist/elements/math-block.d.ts +51 -0
  137. package/dist/elements/math-block.js +70 -0
  138. package/dist/elements/mcp-server-panel.d.ts +41 -0
  139. package/dist/elements/mcp-server-panel.js +115 -0
  140. package/dist/elements/memory-chips.d.ts +30 -0
  141. package/dist/elements/memory-chips.js +43 -0
  142. package/dist/elements/message-actions.d.ts +38 -0
  143. package/dist/elements/message-actions.js +71 -0
  144. package/dist/elements/message-attachment.d.ts +48 -0
  145. package/dist/elements/message-attachment.js +63 -0
  146. package/dist/elements/message-branches.d.ts +25 -0
  147. package/dist/elements/message-branches.js +65 -0
  148. package/dist/elements/message-pair.d.ts +33 -0
  149. package/dist/elements/message-pair.js +65 -0
  150. package/dist/elements/message-queue.d.ts +31 -0
  151. package/dist/elements/message-queue.js +80 -0
  152. package/dist/elements/message-timing.d.ts +33 -0
  153. package/dist/elements/message-timing.js +37 -0
  154. package/dist/elements/mobile-composer.d.ts +44 -0
  155. package/dist/elements/mobile-composer.js +88 -0
  156. package/dist/elements/model-picker.d.ts +38 -0
  157. package/dist/elements/model-picker.js +69 -0
  158. package/dist/elements/number-ticker.d.ts +18 -0
  159. package/dist/elements/number-ticker.js +47 -0
  160. package/dist/elements/onboarding.d.ts +30 -0
  161. package/dist/elements/onboarding.js +75 -0
  162. package/dist/elements/permission-grant.d.ts +35 -0
  163. package/dist/elements/permission-grant.js +86 -0
  164. package/dist/elements/permission-scopes.d.ts +215 -0
  165. package/dist/elements/permission-scopes.js +249 -0
  166. package/dist/elements/prompt-library.d.ts +43 -0
  167. package/dist/elements/prompt-library.js +117 -0
  168. package/dist/elements/queue-dock.d.ts +101 -0
  169. package/dist/elements/queue-dock.js +132 -0
  170. package/dist/elements/quota-banner.d.ts +26 -0
  171. package/dist/elements/quota-banner.js +66 -0
  172. package/dist/elements/quote-reply.d.ts +44 -0
  173. package/dist/elements/quote-reply.js +79 -0
  174. package/dist/elements/range.d.ts +29 -0
  175. package/dist/elements/range.js +45 -0
  176. package/dist/elements/read-aloud.d.ts +45 -0
  177. package/dist/elements/read-aloud.js +75 -0
  178. package/dist/elements/reasoning-effort.d.ts +36 -0
  179. package/dist/elements/reasoning-effort.js +67 -0
  180. package/dist/elements/reasoning-panel.d.ts +46 -0
  181. package/dist/elements/reasoning-panel.js +75 -0
  182. package/dist/elements/recommendation-card.d.ts +45 -0
  183. package/dist/elements/recommendation-card.js +83 -0
  184. package/dist/elements/regenerate-menu.d.ts +45 -0
  185. package/dist/elements/regenerate-menu.js +51 -0
  186. package/dist/elements/replay.d.ts +217 -0
  187. package/dist/elements/replay.js +498 -0
  188. package/dist/elements/research-report.d.ts +38 -0
  189. package/dist/elements/research-report.js +69 -0
  190. package/dist/elements/retrieval-chunks.d.ts +43 -0
  191. package/dist/elements/retrieval-chunks.js +81 -0
  192. package/dist/elements/revert-dock.d.ts +159 -0
  193. package/dist/elements/revert-dock.js +327 -0
  194. package/dist/elements/reviewable-diff.d.ts +45 -0
  195. package/dist/elements/reviewable-diff.js +110 -0
  196. package/dist/elements/risk-badge.d.ts +52 -0
  197. package/dist/elements/risk-badge.js +91 -0
  198. package/dist/elements/schedule-card.d.ts +42 -0
  199. package/dist/elements/schedule-card.js +90 -0
  200. package/dist/elements/score-breakdown.d.ts +47 -0
  201. package/dist/elements/score-breakdown.js +82 -0
  202. package/dist/elements/scroll-anchor.d.ts +32 -0
  203. package/dist/elements/scroll-anchor.js +121 -0
  204. package/dist/elements/settings-panel.d.ts +52 -0
  205. package/dist/elements/settings-panel.js +107 -0
  206. package/dist/elements/shared-conversation.d.ts +39 -0
  207. package/dist/elements/shared-conversation.js +68 -0
  208. package/dist/elements/sources.d.ts +33 -0
  209. package/dist/elements/sources.js +61 -0
  210. package/dist/elements/speaker-identity.d.ts +32 -0
  211. package/dist/elements/speaker-identity.js +51 -0
  212. package/dist/elements/spec-sheet.d.ts +31 -0
  213. package/dist/elements/spec-sheet.js +45 -0
  214. package/dist/elements/stopped-run.d.ts +22 -0
  215. package/dist/elements/stopped-run.js +50 -0
  216. package/dist/elements/streaming-text.d.ts +31 -0
  217. package/dist/elements/streaming-text.js +45 -0
  218. package/dist/elements/subagent-list.d.ts +37 -0
  219. package/dist/elements/subagent-list.js +79 -0
  220. package/dist/elements/suggestions.d.ts +30 -0
  221. package/dist/elements/suggestions.js +36 -0
  222. package/dist/elements/surfaces.d.ts +85 -0
  223. package/dist/elements/surfaces.js +107 -0
  224. package/dist/elements/tail-status.d.ts +131 -0
  225. package/dist/elements/tail-status.js +94 -0
  226. package/dist/elements/terminal-block.d.ts +29 -0
  227. package/dist/elements/terminal-block.js +54 -0
  228. package/dist/elements/thinking-indicator.d.ts +18 -0
  229. package/dist/elements/thinking-indicator.js +36 -0
  230. package/dist/elements/thread-list.d.ts +35 -0
  231. package/dist/elements/thread-list.js +68 -0
  232. package/dist/elements/thread-search.d.ts +42 -0
  233. package/dist/elements/thread-search.js +99 -0
  234. package/dist/elements/timeline.d.ts +37 -0
  235. package/dist/elements/timeline.js +46 -0
  236. package/dist/elements/todo-list.d.ts +42 -0
  237. package/dist/elements/todo-list.js +59 -0
  238. package/dist/elements/tool-call.d.ts +41 -0
  239. package/dist/elements/tool-call.js +85 -0
  240. package/dist/elements/tool-error.d.ts +39 -0
  241. package/dist/elements/tool-error.js +76 -0
  242. package/dist/elements/tool-group.d.ts +45 -0
  243. package/dist/elements/tool-group.js +71 -0
  244. package/dist/elements/tool-timeline.d.ts +65 -0
  245. package/dist/elements/tool-timeline.js +88 -0
  246. package/dist/elements/trace-waterfall.d.ts +37 -0
  247. package/dist/elements/trace-waterfall.js +69 -0
  248. package/dist/elements/transcript-rules.d.ts +67 -0
  249. package/dist/elements/transcript-rules.js +95 -0
  250. package/dist/elements/turn-footer.d.ts +74 -0
  251. package/dist/elements/turn-footer.js +101 -0
  252. package/dist/elements/typing-indicator.d.ts +16 -0
  253. package/dist/elements/typing-indicator.js +51 -0
  254. package/dist/elements/verdict-row.d.ts +89 -0
  255. package/dist/elements/verdict-row.js +150 -0
  256. package/dist/elements/vocabulary.d.ts +612 -0
  257. package/dist/elements/vocabulary.js +611 -0
  258. package/dist/elements/voice-conversation.d.ts +49 -0
  259. package/dist/elements/voice-conversation.js +123 -0
  260. package/dist/elements/web-preview.d.ts +32 -0
  261. package/dist/elements/web-preview.js +66 -0
  262. package/dist/elements/web-search.d.ts +37 -0
  263. package/dist/elements/web-search.js +66 -0
  264. package/dist/elements/work-collapse.d.ts +103 -0
  265. package/dist/elements/work-collapse.js +131 -0
  266. package/dist/icons/containers.d.ts +89 -0
  267. package/dist/icons/containers.js +295 -0
  268. package/dist/icons/index.d.ts +2 -0
  269. package/dist/index.d.ts +6 -4
  270. package/dist/index.js +2 -1
  271. package/dist/instruments/two-step-button.js +25 -6
  272. package/dist/layout/sidebar.d.ts +19 -1
  273. package/dist/layout/sidebar.js +19 -1
  274. package/dist/primitives/button.js +11 -1
  275. package/dist/primitives/chip.d.ts +35 -9
  276. package/dist/primitives/chip.js +97 -11
  277. package/dist/system/agent-skin.d.ts +27 -0
  278. package/dist/system/agent-skin.js +20 -0
  279. package/dist/system/portal.d.ts +5 -3
  280. package/dist/system/portal.js +19 -5
  281. package/dist/system/theme-provider.js +54 -9
  282. package/dist/system/use-density.d.ts +9 -0
  283. package/dist/system/use-density.js +9 -0
  284. package/dist/system/use-isomorphic-layout-effect.js +19 -1
  285. package/dist/theming/_presets.d.ts +1 -1
  286. package/dist/theming/_presets.js +71 -8
  287. package/dist/theming/contrast.d.ts +16 -4
  288. package/dist/theming/contrast.js +33 -6
  289. package/dist/theming/create-theme.d.ts +6 -2
  290. package/dist/theming/create-theme.js +32 -5
  291. package/dist/theming/serialize.d.ts +10 -1
  292. package/dist/theming/serialize.js +62 -8
  293. package/manifest/components/activity-graph.json +88 -0
  294. package/manifest/components/agent-card.json +120 -0
  295. package/manifest/components/agent-handoff.json +87 -0
  296. package/manifest/components/agent-mode-badge.json +84 -0
  297. package/manifest/components/agent-plan.json +67 -0
  298. package/manifest/components/agent-status.json +73 -0
  299. package/manifest/components/agent-surface.json +78 -0
  300. package/manifest/components/alert-dialog.json +1 -1
  301. package/manifest/components/animated-number.json +67 -0
  302. package/manifest/components/app-shell.json +99 -7
  303. package/manifest/components/approval-card.json +106 -0
  304. package/manifest/components/artifact-card.json +81 -0
  305. package/manifest/components/audience-icon.json +52 -0
  306. package/manifest/components/background-inbox.json +71 -0
  307. package/manifest/components/branch-picker.json +124 -0
  308. package/manifest/components/button.json +1 -0
  309. package/manifest/components/canvas-split-body.json +62 -0
  310. package/manifest/components/canvas-split-document.json +54 -0
  311. package/manifest/components/canvas-split-header.json +83 -0
  312. package/manifest/components/canvas-split-line.json +62 -0
  313. package/manifest/components/canvas-split-message.json +62 -0
  314. package/manifest/components/canvas-split-thread.json +54 -0
  315. package/manifest/components/canvas-split.json +60 -0
  316. package/manifest/components/catalogue-icon.json +52 -0
  317. package/manifest/components/channel-beta-icon.json +52 -0
  318. package/manifest/components/channel-released-icon.json +52 -0
  319. package/manifest/components/chart.json +93 -0
  320. package/manifest/components/chat-empty-state.json +55 -0
  321. package/manifest/components/chat-panel-assistant-message.json +51 -0
  322. package/manifest/components/chat-panel-composer.json +66 -0
  323. package/manifest/components/chat-panel-messages.json +51 -0
  324. package/manifest/components/chat-panel-typing.json +51 -0
  325. package/manifest/components/chat-panel-user-message.json +51 -0
  326. package/manifest/components/chat-panel.json +57 -0
  327. package/manifest/components/checkpoint-history.json +80 -0
  328. package/manifest/components/chip.json +24 -12
  329. package/manifest/components/clamp.json +102 -0
  330. package/manifest/components/cli-tool-icon.json +52 -0
  331. package/manifest/components/code-diff.json +87 -0
  332. package/manifest/components/code-runner.json +97 -0
  333. package/manifest/components/compaction-row.json +100 -0
  334. package/manifest/components/comparison-card.json +83 -0
  335. package/manifest/components/composer-actions.json +65 -0
  336. package/manifest/components/composer-attach-button.json +65 -0
  337. package/manifest/components/composer-attachment-chip.json +75 -0
  338. package/manifest/components/composer-attachments.json +60 -0
  339. package/manifest/components/composer-bar.json +73 -0
  340. package/manifest/components/composer-command-item.json +79 -0
  341. package/manifest/components/composer-context.json +67 -0
  342. package/manifest/components/composer-input.json +73 -0
  343. package/manifest/components/composer-menu-item.json +72 -0
  344. package/manifest/components/composer-menu.json +79 -0
  345. package/manifest/components/composer-model-item.json +75 -0
  346. package/manifest/components/composer-model-trigger.json +75 -0
  347. package/manifest/components/composer-person-item.json +79 -0
  348. package/manifest/components/composer-send.json +80 -0
  349. package/manifest/components/composer-toolbar.json +65 -0
  350. package/manifest/components/composer-voice-button.json +68 -0
  351. package/manifest/components/composer-voice.json +75 -0
  352. package/manifest/components/computer-use.json +84 -0
  353. package/manifest/components/confidence-marker.json +74 -0
  354. package/manifest/components/connection-state.json +84 -0
  355. package/manifest/components/context-breakdown.json +65 -0
  356. package/manifest/components/context-usage.json +85 -0
  357. package/manifest/components/conversation-search.json +92 -0
  358. package/manifest/components/cost-meter.json +74 -0
  359. package/manifest/components/cue-portal-frame.json +1 -1
  360. package/manifest/components/day-separator.json +58 -0
  361. package/manifest/components/delegation-card.json +1 -1
  362. package/manifest/components/density.json +1 -1
  363. package/manifest/components/diagram.json +100 -0
  364. package/manifest/components/document-reference.json +90 -0
  365. package/manifest/components/draft-restore.json +82 -0
  366. package/manifest/components/drawer.json +1 -1
  367. package/manifest/components/dropdown-menu.json +1 -1
  368. package/manifest/components/edit-message.json +105 -0
  369. package/manifest/components/elements-command-palette.json +100 -0
  370. package/manifest/components/elements-composer.json +71 -0
  371. package/manifest/components/elements-data-table.json +68 -0
  372. package/manifest/components/elements-timeline.json +69 -0
  373. package/manifest/components/elicitation-form.json +103 -0
  374. package/manifest/components/empty-state-composer.json +64 -0
  375. package/manifest/components/empty-state-greeting.json +49 -0
  376. package/manifest/components/empty-state-suggestion.json +57 -0
  377. package/manifest/components/empty-state-suggestions.json +49 -0
  378. package/manifest/components/end-of-turn-summary.json +77 -0
  379. package/manifest/components/error-state.json +80 -0
  380. package/manifest/components/feedback-dialog.json +107 -0
  381. package/manifest/components/file-tree.json +83 -0
  382. package/manifest/components/flow-graph.json +75 -0
  383. package/manifest/components/folder-icon.json +52 -0
  384. package/manifest/components/frac.json +59 -0
  385. package/manifest/components/generation-loader.json +64 -0
  386. package/manifest/components/generative-ui.json +93 -0
  387. package/manifest/components/guardrail-notice.json +91 -0
  388. package/manifest/components/hover-card.json +1 -1
  389. package/manifest/components/image-generation.json +67 -0
  390. package/manifest/components/info-tip.json +1 -1
  391. package/manifest/components/inline-citation.json +77 -0
  392. package/manifest/components/job-progress.json +96 -0
  393. package/manifest/components/launcher-bubble.json +105 -0
  394. package/manifest/components/live-region-announcer.json +79 -0
  395. package/manifest/components/map-answer.json +83 -0
  396. package/manifest/components/markdown-text.json +94 -0
  397. package/manifest/components/math-block.json +74 -0
  398. package/manifest/components/mcp-server-icon.json +52 -0
  399. package/manifest/components/mcp-server-panel.json +87 -0
  400. package/manifest/components/memory-chips.json +65 -0
  401. package/manifest/components/message-actions.json +99 -0
  402. package/manifest/components/message-attachments.json +63 -0
  403. package/manifest/components/message-branches.json +71 -0
  404. package/manifest/components/message-list.json +1 -1
  405. package/manifest/components/message-pair.json +86 -0
  406. package/manifest/components/message-queue.json +74 -0
  407. package/manifest/components/message-timing.json +62 -0
  408. package/manifest/components/mobile-composer.json +126 -0
  409. package/manifest/components/model-picker.json +76 -0
  410. package/manifest/components/node-card.json +1 -1
  411. package/manifest/components/node-handle.json +1 -1
  412. package/manifest/components/number-ticker.json +61 -0
  413. package/manifest/components/onboarding.json +84 -0
  414. package/manifest/components/otp-field.json +7 -7
  415. package/manifest/components/permission-grant.json +92 -0
  416. package/manifest/components/permission-scopes.json +139 -0
  417. package/manifest/components/popover.json +1 -1
  418. package/manifest/components/prompt-library.json +99 -0
  419. package/manifest/components/queue-dock.json +110 -0
  420. package/manifest/components/quota-banner.json +94 -0
  421. package/manifest/components/quote-reply.json +105 -0
  422. package/manifest/components/read-aloud.json +111 -0
  423. package/manifest/components/reasoning-effort.json +81 -0
  424. package/manifest/components/reasoning-panel.json +108 -0
  425. package/manifest/components/recommendation-card.json +107 -0
  426. package/manifest/components/regenerate-menu.json +89 -0
  427. package/manifest/components/replay-player.json +102 -0
  428. package/manifest/components/research-report.json +76 -0
  429. package/manifest/components/retrieval-chunks.json +84 -0
  430. package/manifest/components/revert-dock.json +150 -0
  431. package/manifest/components/reviewable-diff.json +93 -0
  432. package/manifest/components/risk-badge.json +74 -0
  433. package/manifest/components/schedule-card.json +101 -0
  434. package/manifest/components/score-breakdown.json +91 -0
  435. package/manifest/components/scroll-anchor.json +72 -0
  436. package/manifest/components/scroll-area.json +7 -7
  437. package/manifest/components/search-input.json +7 -7
  438. package/manifest/components/segmented-control.json +21 -21
  439. package/manifest/components/settings-panel.json +118 -0
  440. package/manifest/components/shared-conversation.json +89 -0
  441. package/manifest/components/shimmer-label.json +59 -0
  442. package/manifest/components/skill-icon.json +52 -0
  443. package/manifest/components/sources.json +83 -0
  444. package/manifest/components/speaker-identity.json +61 -0
  445. package/manifest/components/spec-sheet.json +80 -0
  446. package/manifest/components/stack-icon.json +52 -0
  447. package/manifest/components/stacks-matrix-icon.json +52 -0
  448. package/manifest/components/stat.json +1 -1
  449. package/manifest/components/status-dot.json +1 -1
  450. package/manifest/components/stopped-run.json +81 -0
  451. package/manifest/components/streaming-text.json +71 -0
  452. package/manifest/components/sub.json +44 -0
  453. package/manifest/components/subagent-list.json +88 -0
  454. package/manifest/components/suggestions.json +84 -0
  455. package/manifest/components/sup.json +44 -0
  456. package/manifest/components/swap-label.json +71 -0
  457. package/manifest/components/tail-status.json +109 -0
  458. package/manifest/components/terminal-block.json +91 -0
  459. package/manifest/components/theme-provider.json +2 -2
  460. package/manifest/components/thinking-indicator.json +63 -0
  461. package/manifest/components/thread-list.json +76 -0
  462. package/manifest/components/thread-search.json +90 -0
  463. package/manifest/components/threshold-rail.json +2 -2
  464. package/manifest/components/time-boundary.json +62 -0
  465. package/manifest/components/timeline.json +1 -1
  466. package/manifest/components/todo-list.json +69 -0
  467. package/manifest/components/toggle-group.json +7 -7
  468. package/manifest/components/token-editor.json +1 -1
  469. package/manifest/components/tool-call-card.json +200 -0
  470. package/manifest/components/tool-call.json +119 -0
  471. package/manifest/components/tool-error.json +114 -0
  472. package/manifest/components/tool-group.json +83 -0
  473. package/manifest/components/tool-timeline.json +119 -0
  474. package/manifest/components/toolbar.json +7 -7
  475. package/manifest/components/tooltip.json +1 -1
  476. package/manifest/components/trace-waterfall.json +74 -0
  477. package/manifest/components/turn-footer.json +105 -0
  478. package/manifest/components/typing-indicator.json +53 -0
  479. package/manifest/components/unread-divider.json +55 -0
  480. package/manifest/components/usage-chart.json +1 -1
  481. package/manifest/components/verdict-row.json +91 -0
  482. package/manifest/components/voice-conversation.json +109 -0
  483. package/manifest/components/web-preview.json +87 -0
  484. package/manifest/components/web-search.json +92 -0
  485. package/manifest/components/work-collapse.json +102 -0
  486. package/manifest/manifest.json +2670 -33
  487. package/manifest/tokens.json +22 -1
  488. package/package.json +46 -4
@@ -0,0 +1,91 @@
1
+ {
2
+ "name": "TerminalBlock",
3
+ "slug": "terminal-block",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "Command output that streams line by line and ends with an exit status.",
11
+ "props": [
12
+ {
13
+ "name": "command",
14
+ "type": "string",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Command string shown in the terminal header."
18
+ },
19
+ {
20
+ "name": "lines",
21
+ "type": "readonly string[]",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Output lines available to stream into the body."
25
+ },
26
+ {
27
+ "name": "visibleCount",
28
+ "type": "number",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "How many output lines from the start are currently shown."
32
+ },
33
+ {
34
+ "name": "done",
35
+ "type": "boolean",
36
+ "required": true,
37
+ "defaultValue": null,
38
+ "description": "When true the header shows exit 0; otherwise a spinner keeps spinning."
39
+ },
40
+ {
41
+ "name": "variant",
42
+ "type": "\"paper\" | \"ink\"",
43
+ "required": false,
44
+ "defaultValue": "paper",
45
+ "description": "paper matches the surrounding surfaces; ink renders the classic dark terminal slab."
46
+ }
47
+ ],
48
+ "typeReferences": [
49
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"command\" | \"lines\" | \"visibleCount\" | \"done\" | \"variant\"\n> & {\n /** Command string shown in the terminal header. */\n command: string;\n /** Output lines available to stream into the body. */\n lines: readonly string[];\n /** How many output lines from the start are currently shown. */\n visibleCount: number;\n /** When true the header shows exit 0; otherwise a spinner keeps spinning. */\n done: boolean;\n /** paper matches the surrounding surfaces; ink renders the classic dark terminal slab. */\n variant?: \"paper\" | \"ink\";\n}"
50
+ ],
51
+ "subcomponents": [],
52
+ "parts": [],
53
+ "variants": {},
54
+ "defaultVariants": {},
55
+ "tokensUsed": [
56
+ "--cue-fg",
57
+ "--cue-fg-muted",
58
+ "--cue-fg-subtle",
59
+ "--cue-font-mono",
60
+ "--cue-ok",
61
+ "--cue-radius-overlay",
62
+ "--cue-stream",
63
+ "--cue-sunken",
64
+ "--cue-text-ui"
65
+ ],
66
+ "summary": "Command output that streams line by line and ends with an exit status.",
67
+ "examples": [
68
+ {
69
+ "title": "Usage",
70
+ "code": "import { TerminalBlock } from \"@cueplusplus/ui/elements\";\n\n<TerminalBlock\n command=\"pnpm test\"\n lines={[\"PASS thread.test.ts\", \"Tests: 2 passed\"]}\n visibleCount={2}\n done\n/>",
71
+ "language": "tsx"
72
+ }
73
+ ],
74
+ "status": "todo-docs",
75
+ "url": "/docs/components/terminal-block",
76
+ "mdUrl": "/docs/components/terminal-block.md",
77
+ "jsonUrl": "/r/components/terminal-block.json",
78
+ "specimens": [
79
+ {
80
+ "title": "TerminalBlock",
81
+ "group": "elements",
82
+ "components": [
83
+ "TerminalBlock"
84
+ ],
85
+ "code": "<Specimens>\n <Specimen label=\"paper · streaming\" wide>\n <TerminalBlock\n command=\"cue patch --universe 3 --profile 'Source Four 26'\"\n lines={OUTPUT}\n visibleCount={2}\n done={false}\n />\n </Specimen>\n <Specimen label=\"ink · exit 0\" wide>\n <TerminalBlock\n command=\"cue patch --universe 3 --profile 'Source Four 26'\"\n lines={OUTPUT}\n visibleCount={OUTPUT.length}\n done\n variant=\"ink\"\n />\n </Specimen>\n</Specimens>",
86
+ "note": "Command output as it arrives: `visibleCount` says how many of the lines have landed, so the caller owns the clock and the block owns nothing. Two grounds — paper sits in the transcript, ink is the recessed slab a terminal is expected to be.",
87
+ "interaction": "none. It is a transcript of something that already happened."
88
+ }
89
+ ],
90
+ "todo": true
91
+ }
@@ -9,14 +9,14 @@
9
9
  "props": [
10
10
  {
11
11
  "name": "theme",
12
- "type": "\"terminal\" | \"signal\" | \"cue\" | \"venu\" | \"hivehub\" | \"dusk\" | \"luma\" | \"snuffle\" | \"requestport\" | \"quotamate\"",
12
+ "type": "\"terminal\" | \"cue\" | \"signal\" | \"venu\" | \"hivehub\" | \"dusk\" | \"luma\" | \"snuffle\" | \"requestport\" | \"quotamate\"",
13
13
  "required": false,
14
14
  "defaultValue": "cue",
15
15
  "description": "Initial theme preset. Defaults to `\"cue\"`. Changing it after mount adopts the new value."
16
16
  },
17
17
  {
18
18
  "name": "density",
19
- "type": "\"ultra-compact\" | \"compact\" | \"normal\" | \"large\" | \"ultra-large\"",
19
+ "type": "\"normal\" | \"large\" | \"compact\" | \"ultra-compact\" | \"ultra-large\"",
20
20
  "required": false,
21
21
  "defaultValue": "compact",
22
22
  "description": "Initial density level. Defaults to `\"compact\"`."
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "ThinkingIndicator",
3
+ "slug": "thinking-indicator",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "A live status line that names what the agent is doing right now, with elapsed time.",
9
+ "props": [
10
+ {
11
+ "name": "label",
12
+ "type": "string",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "What the agent is doing right now. Swapping it replays the entrance animation."
16
+ },
17
+ {
18
+ "name": "elapsed",
19
+ "type": "string",
20
+ "required": false,
21
+ "defaultValue": null,
22
+ "description": "Elapsed time rendered in mono next to the label. Omit to hide the timer."
23
+ }
24
+ ],
25
+ "typeReferences": [
26
+ "Omit<ComponentProps<\"div\">, \"children\" | \"label\" | \"elapsed\"> & {\n /** What the agent is doing right now. Swapping it replays the entrance animation. */\n label: string;\n /** Elapsed time rendered in mono next to the label. Omit to hide the timer. */\n elapsed?: string;\n}"
27
+ ],
28
+ "subcomponents": [],
29
+ "parts": [],
30
+ "variants": {},
31
+ "defaultVariants": {},
32
+ "tokensUsed": [
33
+ "--cue-fg-muted",
34
+ "--cue-fg-subtle",
35
+ "--cue-stream",
36
+ "--cue-text-body"
37
+ ],
38
+ "summary": "A live status line that names what the agent is doing right now, with elapsed time.",
39
+ "examples": [
40
+ {
41
+ "title": "Usage",
42
+ "code": "import { ThinkingIndicator } from \"@cueplusplus/ui/elements\";\n\n<ThinkingIndicator label=\"Reading thread.tsx\" elapsed=\"12s\" />",
43
+ "language": "tsx"
44
+ }
45
+ ],
46
+ "status": "todo-docs",
47
+ "url": "/docs/components/thinking-indicator",
48
+ "mdUrl": "/docs/components/thinking-indicator.md",
49
+ "jsonUrl": "/r/components/thinking-indicator.json",
50
+ "specimens": [
51
+ {
52
+ "title": "ThinkingIndicator",
53
+ "group": "elements-thread",
54
+ "components": [
55
+ "ThinkingIndicator"
56
+ ],
57
+ "code": "<Specimens>\n <Specimen label=\"reading\" wide>\n <ThinkingIndicator label=\"Reading front-truss.gdtf\" elapsed=\"0:04\" />\n </Specimen>\n <Specimen label=\"patching, no clock\" wide>\n <ThinkingIndicator label=\"Patching universe 3\" />\n </Specimen>\n</Specimens>",
58
+ "note": "One line that says what is happening right now, with the elapsed clock beside it. The label is keyed, so replacing it re-runs the entrance and the change reads as a change rather than as a re-render.",
59
+ "interaction": "none. It is a status line, not a control — the dot pulses and the label sweeps, and both stop for a reduced-motion reader."
60
+ }
61
+ ],
62
+ "todo": true
63
+ }
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "ThreadList",
3
+ "slug": "thread-list",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "Conversation history with unread marks and actions that wait for hover.",
11
+ "props": [
12
+ {
13
+ "name": "threads",
14
+ "type": "readonly ThreadItem[]",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Conversation rows with title, time, and optional unread mark."
18
+ },
19
+ {
20
+ "name": "activeIndex",
21
+ "type": "number",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Index of the currently selected thread. An index outside the list selects nothing."
25
+ },
26
+ {
27
+ "name": "onActiveIndexChange",
28
+ "type": "((index: number) => void)",
29
+ "required": false,
30
+ "defaultValue": null,
31
+ "description": "Called when the user clicks a thread row."
32
+ }
33
+ ],
34
+ "typeReferences": [
35
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"threads\" | \"activeIndex\" | \"onActiveIndexChange\"\n> & {\n /** Conversation rows with title, time, and optional unread mark. */\n threads: readonly ThreadItem[];\n /** Index of the currently selected thread. An index outside the list selects nothing. */\n activeIndex: number;\n /** Called when the user clicks a thread row. */\n onActiveIndexChange?: (index: number) => void;\n}"
36
+ ],
37
+ "subcomponents": [],
38
+ "parts": [],
39
+ "variants": {},
40
+ "defaultVariants": {},
41
+ "tokensUsed": [
42
+ "--cue-fg",
43
+ "--cue-fg-muted",
44
+ "--cue-fg-subtle",
45
+ "--cue-radius-surface",
46
+ "--cue-stream",
47
+ "--cue-surface-1",
48
+ "--cue-surface-2",
49
+ "--cue-text-body"
50
+ ],
51
+ "summary": "Conversation history with unread marks and actions that wait for hover.",
52
+ "examples": [
53
+ {
54
+ "title": "Usage",
55
+ "code": "import { ThreadList } from \"@cueplusplus/ui/elements\";\n\n<ThreadList\n threads={[\n { title: \"Composer polish\", time: \"2m\", unread: true },\n { title: \"Runtime migration\", time: \"1h\" },\n ]}\n activeIndex={activeIndex}\n onActiveIndexChange={setActiveIndex}\n/>",
56
+ "language": "tsx"
57
+ }
58
+ ],
59
+ "status": "todo-docs",
60
+ "url": "/docs/components/thread-list",
61
+ "mdUrl": "/docs/components/thread-list.md",
62
+ "jsonUrl": "/r/components/thread-list.json",
63
+ "specimens": [
64
+ {
65
+ "title": "ThreadList",
66
+ "group": "elements-composer",
67
+ "components": [
68
+ "ThreadList"
69
+ ],
70
+ "code": "<Specimens>\n <Specimen label=\"one open\">\n <ThreadList threads={THREADS} activeIndex={thread} onActiveIndexChange={setThread} />\n </Specimen>\n <Specimen label=\"nothing open\">\n <ThreadList threads={THREADS} activeIndex={-1} />\n </Specimen>\n</Specimens>",
71
+ "note": "Conversation history at its smallest: a title, how long ago, and an unread dot. The row's actions replace the timestamp on hover rather than sitting beside it, which is what keeps a 240px rail from becoming a toolbar — and the active row never shows an unread mark, because reading it is what cleared it.",
72
+ "interaction": "the selected row carries `aria-current`; the rename and delete affordances appear on hover in the space the time was using, so nothing moves when they arrive."
73
+ }
74
+ ],
75
+ "todo": true
76
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "ThreadSearch",
3
+ "slug": "thread-search",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "History you can actually get back into: pinned first, then grouped by when.",
11
+ "props": [
12
+ {
13
+ "name": "threads",
14
+ "type": "readonly SearchableThread[]",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "All threads. Filtering matches title and preview together."
18
+ },
19
+ {
20
+ "name": "query",
21
+ "type": "string",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Current search text."
25
+ },
26
+ {
27
+ "name": "activeId",
28
+ "type": "string",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "Which thread is open."
32
+ },
33
+ {
34
+ "name": "onQueryChange",
35
+ "type": "((query: string) => void)",
36
+ "required": false,
37
+ "defaultValue": null,
38
+ "description": "Called as the search is typed."
39
+ },
40
+ {
41
+ "name": "onSelect",
42
+ "type": "((id: string) => void)",
43
+ "required": false,
44
+ "defaultValue": null,
45
+ "description": "Called when a thread is opened."
46
+ }
47
+ ],
48
+ "typeReferences": [
49
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"threads\" | \"query\" | \"activeId\" | \"onQueryChange\" | \"onSelect\"\n> & {\n /** All threads. Filtering matches title and preview together. */\n threads: readonly SearchableThread[];\n /** Current search text. */\n query: string;\n /** Which thread is open. */\n activeId: string;\n /** Called as the search is typed. */\n onQueryChange?: (query: string) => void;\n /** Called when a thread is opened. */\n onSelect?: (id: string) => void;\n}"
50
+ ],
51
+ "subcomponents": [],
52
+ "parts": [],
53
+ "variants": {},
54
+ "defaultVariants": {},
55
+ "tokensUsed": [
56
+ "--cue-accent",
57
+ "--cue-fg-muted",
58
+ "--cue-fg-subtle",
59
+ "--cue-radius-overlay",
60
+ "--cue-radius-surface",
61
+ "--cue-surface-1",
62
+ "--cue-text-body",
63
+ "--cue-text-ui"
64
+ ],
65
+ "summary": "History you can actually get back into: pinned first, then grouped by when.",
66
+ "examples": [
67
+ {
68
+ "title": "Usage",
69
+ "code": "import { ThreadSearch } from \"@cueplusplus/ui/elements\";\n\n<ThreadSearch\n threads={threads}\n query={query}\n activeId={activeId}\n onQueryChange={setQuery}\n onSelect={setActiveId}\n/>",
70
+ "language": "tsx"
71
+ }
72
+ ],
73
+ "status": "todo-docs",
74
+ "url": "/docs/components/thread-search",
75
+ "mdUrl": "/docs/components/thread-search.md",
76
+ "jsonUrl": "/r/components/thread-search.json",
77
+ "specimens": [
78
+ {
79
+ "title": "ThreadSearch",
80
+ "group": "elements-composer",
81
+ "components": [
82
+ "ThreadSearch"
83
+ ],
84
+ "code": "<Specimens>\n <Specimen label=\"grouped\" wide>\n <ThreadSearch\n threads={SEARCHABLE}\n query={threadQuery}\n activeId={threadId}\n onQueryChange={setThreadQuery}\n onSelect={setThreadId}\n />\n </Specimen>\n <Specimen label=\"filtered\" wide>\n <ThreadSearch threads={SEARCHABLE} query=\"truss\" activeId=\"t-truss\" />\n </Specimen>\n <Specimen label=\"nothing matches\" wide>\n <ThreadSearch threads={SEARCHABLE} query=\"haze\" activeId=\"\" />\n </Specimen>\n</Specimens>",
85
+ "note": "History you can actually get back into: pinned first, then grouped by when. Filtering matches the title and the preview together, so a thread found by something said inside it still shows the line that found it. The pinned section is a lift out of the date groups rather than a copy — a pinned thread appears once.",
86
+ "interaction": "arrows walk the flattened order across group boundaries, which is the order the eye reads rather than the order the data is in."
87
+ }
88
+ ],
89
+ "todo": true
90
+ }
@@ -72,14 +72,14 @@
72
72
  },
73
73
  {
74
74
  "name": "belowTone",
75
- "type": "\"accent\" | \"danger\" | \"busy\" | \"ok\" | \"warn\" | \"info\"",
75
+ "type": "\"danger\" | \"accent\" | \"busy\" | \"ok\" | \"warn\" | \"info\"",
76
76
  "required": false,
77
77
  "defaultValue": "danger",
78
78
  "description": "Ink for the zones outside the window. Defaults to `\"danger\"`."
79
79
  },
80
80
  {
81
81
  "name": "aboveTone",
82
- "type": "\"accent\" | \"danger\" | \"busy\" | \"ok\" | \"warn\" | \"info\"",
82
+ "type": "\"danger\" | \"accent\" | \"busy\" | \"ok\" | \"warn\" | \"info\"",
83
83
  "required": false,
84
84
  "defaultValue": "ok",
85
85
  "description": "Ink for the armed zone. Defaults to `\"ok\"`."
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "TimeBoundary",
3
+ "slug": "time-boundary",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "The rule that says the day changed: a label centred between two hairlines.\n\nOne row, placed by the caller. That is the difference between this and\n`DaySeparator`, which takes a whole message list and inserts its own rules:\na transcript assembled from a row union — the shape every shipping agent UI\nconverged on — needs the boundary as a *member of that union*, not as a\ncomponent that owns the list around it.\n\nIt is a `role=\"separator\"` carrying its label as an accessible name, and the\ntext inside it is `aria-hidden`. A reader hears \"Today, separator\" once\nrather than twice, and the hairlines are never announced at all.",
9
+ "props": [
10
+ {
11
+ "name": "label",
12
+ "type": "string",
13
+ "required": false,
14
+ "defaultValue": null,
15
+ "description": "The label, pre-formatted: `Today`, `Yesterday`, `14 March`. This family\ndoes no date arithmetic and owns no locale — the caller knows which one the\nconsole is in, and `DaySeparator` next door takes its days the same way."
16
+ },
17
+ {
18
+ "name": "dateTime",
19
+ "type": "string",
20
+ "required": false,
21
+ "defaultValue": null,
22
+ "description": "The machine-readable instant, rendering the label inside a `<time>`. Worth\ngiving: it is what lets a test, a scraper or a deep link find the boundary\nwithout parsing the words a human reads."
23
+ }
24
+ ],
25
+ "typeReferences": [
26
+ "Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
27
+ ],
28
+ "subcomponents": [],
29
+ "parts": [],
30
+ "variants": {},
31
+ "defaultVariants": {},
32
+ "tokensUsed": [
33
+ "--cue-accent",
34
+ "--cue-border",
35
+ "--cue-fg-subtle"
36
+ ],
37
+ "summary": "The rule that says the day changed: a label centred between two hairlines.",
38
+ "examples": [
39
+ {
40
+ "title": "Usage",
41
+ "code": "import { TimeBoundary } from \"@cueplusplus/ui/elements\";\n\n<TimeBoundary label=\"Today\" dateTime=\"2026-08-22\" />",
42
+ "language": "tsx"
43
+ }
44
+ ],
45
+ "status": "todo-docs",
46
+ "url": "/docs/components/time-boundary",
47
+ "mdUrl": "/docs/components/time-boundary.md",
48
+ "jsonUrl": "/r/components/time-boundary.json",
49
+ "specimens": [
50
+ {
51
+ "title": "TimeBoundary",
52
+ "group": "elements-thread",
53
+ "components": [
54
+ "TimeBoundary"
55
+ ],
56
+ "code": "<Specimens>\n <Specimen label=\"today\" wide>\n <div className=\"w-full max-w-md\">\n <TimeBoundary label=\"Today\" dateTime=\"2026-08-22\" />\n </div>\n </Specimen>\n <Specimen label=\"a date\" wide>\n <div className=\"w-full max-w-md\">\n <TimeBoundary label=\"14 March\" dateTime=\"2026-03-14\" />\n </div>\n </Specimen>\n</Specimens>",
57
+ "note": "One row, placed by the caller — which is the difference between this and DaySeparator, which takes a whole message list and inserts its own. A transcript assembled from a row union needs the boundary as a member of that union. It is a role=separator carrying its label as its name, with the text inside aria-hidden so a reader hears 'Today' once rather than twice, and the caller pre-formats the words because this family owns no locale.",
58
+ "interaction": "none. It is a rule with a word on it, and nothing here takes focus."
59
+ }
60
+ ],
61
+ "todo": true
62
+ }
@@ -40,7 +40,7 @@
40
40
  "props": [
41
41
  {
42
42
  "name": "tone",
43
- "type": "\"idle\" | \"danger\" | \"busy\" | \"ok\" | \"warn\"",
43
+ "type": "\"danger\" | \"idle\" | \"busy\" | \"ok\" | \"warn\"",
44
44
  "required": true,
45
45
  "defaultValue": null,
46
46
  "description": "Which state this event is in. The shared `StatusDot` vocabulary."
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "TodoList",
3
+ "slug": "todo-list",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The agent's own working list, rewritten mid-run as it discovers what else is needed.",
11
+ "props": [
12
+ {
13
+ "name": "items",
14
+ "type": "readonly TodoItem[]",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "The list as it stands right now. Each item carries its own status, so the agent\ncan add, reorder, and complete items in any order between renders."
18
+ },
19
+ {
20
+ "name": "revision",
21
+ "type": "number",
22
+ "required": false,
23
+ "defaultValue": null,
24
+ "description": "Which rewrite of the list this is. Omit to show a plain done/total count instead."
25
+ }
26
+ ],
27
+ "typeReferences": [
28
+ "Omit<ComponentProps<\"div\">, \"children\" | \"items\" | \"revision\"> & {\n /**\n * The list as it stands right now. Each item carries its own status, so the agent\n * can add, reorder, and complete items in any order between renders.\n */\n items: readonly TodoItem[];\n /** Which rewrite of the list this is. Omit to show a plain done/total count instead. */\n revision?: number;\n}"
29
+ ],
30
+ "subcomponents": [],
31
+ "parts": [],
32
+ "variants": {},
33
+ "defaultVariants": {},
34
+ "tokensUsed": [
35
+ "--cue-border-strong",
36
+ "--cue-fg",
37
+ "--cue-fg-muted",
38
+ "--cue-fg-subtle",
39
+ "--cue-radius-control",
40
+ "--cue-stream",
41
+ "--cue-surface-2",
42
+ "--cue-text-body"
43
+ ],
44
+ "summary": "The agent's own working list, rewritten mid-run as it discovers what else is needed.",
45
+ "examples": [
46
+ {
47
+ "title": "Usage",
48
+ "code": "import { TodoList } from \"@cueplusplus/ui/elements\";\n\n<TodoList\n items={[\n { id: \"read\", text: \"Read the failing test\", status: \"done\" },\n { id: \"fix\", text: \"Fix the converter\", status: \"active\" },\n { id: \"verify\", text: \"Re-run the suite\", status: \"pending\" },\n ]}\n revision={2}\n/>",
49
+ "language": "tsx"
50
+ }
51
+ ],
52
+ "status": "todo-docs",
53
+ "url": "/docs/components/todo-list",
54
+ "mdUrl": "/docs/components/todo-list.md",
55
+ "jsonUrl": "/r/components/todo-list.json",
56
+ "specimens": [
57
+ {
58
+ "title": "TodoList",
59
+ "group": "elements",
60
+ "components": [
61
+ "TodoList"
62
+ ],
63
+ "code": "<Specimens>\n <Specimen label=\"rev 3\" wide>\n <TodoList items={TODOS} revision={3} />\n </Specimen>\n <Specimen label=\"no revision\" wide>\n <TodoList items={TODOS.slice(0, 3)} />\n </Specimen>\n</Specimens>",
64
+ "note": "The agent's own working list, which is not the plan: it is rewritten mid-run as the job turns out to be bigger. Items carry their own status, so more than one can be active, and `revision` is what makes a rewrite legible rather than alarming.",
65
+ "interaction": "none, and deliberately: a reader who could tick these off would be editing the agent's mind."
66
+ }
67
+ ],
68
+ "todo": true
69
+ }
@@ -7,6 +7,13 @@
7
7
  "clientOnly": true,
8
8
  "description": "A cluster of {@link Toggle }s sharing one pressed state.\n\nThe difference from {@link SegmentedControl } is not cosmetic: a toggle group\ncan be **empty**. Pressing the pressed item unpresses it, so \"no filter\" is a\nreachable state — which is what a filter bar needs and what a view switcher\nmust never offer. Reach for `SegmentedControl` when the answer is always one\nof N, and for this when the answer may be none, or several (`multiple`).\n\nArrow-key roving focus and the pressed-state ARIA come from Base UI; this\nlayer supplies the density rung (published to the children through context)\nand the flat frame-less layout — a group of toggles is a row of controls, not\na boxed widget.",
9
9
  "props": [
10
+ {
11
+ "name": "defaultValue",
12
+ "type": "readonly string[]",
13
+ "required": false,
14
+ "defaultValue": null,
15
+ "description": "The initially pressed values when uncontrolled."
16
+ },
10
17
  {
11
18
  "name": "className",
12
19
  "type": "string",
@@ -28,13 +35,6 @@
28
35
  "defaultValue": "md",
29
36
  "description": "Rung of the control ladder for every toggle inside. Defaults to `\"md\"`."
30
37
  },
31
- {
32
- "name": "defaultValue",
33
- "type": "readonly string[]",
34
- "required": false,
35
- "defaultValue": null,
36
- "description": "The initially pressed values when uncontrolled."
37
- },
38
38
  {
39
39
  "name": "value",
40
40
  "type": "readonly string[]",
@@ -41,7 +41,7 @@
41
41
  "name": "groups",
42
42
  "type": "readonly TokenGroup[]",
43
43
  "required": false,
44
- "defaultValue": "[\n {\n id: \"ground\",\n label: \"Ground & surfaces\",\n tokens: [\"bg\", \"sunken\", \"surface-1\", \"surface-2\", \"surface-3\", \"data-ground\", \"scrim\"],\n },\n { id: \"ink\", label: \"Ink\", tokens: [\"fg\", \"fg-muted\", \"fg-subtle\"] },\n { id: \"borders\", label: \"Borders\", tokens: [\"border\", \"border-strong\", \"border-overlay\"] },\n {\n id: \"accent\",\n label: \"Accent\",\n tokens: [\"accent\", \"accent-hover\", \"accent-fg\", \"focus\", \"selection\"],\n },\n { id: \"status\", label: \"Status\", tokens: [\"ok\", \"busy\", \"warn\", \"danger\", \"info\"] },\n]",
44
+ "defaultValue": "[\n {\n id: \"ground\",\n label: \"Ground & surfaces\",\n tokens: [\"bg\", \"sunken\", \"surface-1\", \"surface-2\", \"surface-3\", \"data-ground\", \"scrim\"],\n },\n { id: \"ink\", label: \"Ink\", tokens: [\"fg\", \"fg-muted\", \"fg-subtle\"] },\n { id: \"borders\", label: \"Borders\", tokens: [\"border\", \"border-strong\", \"border-overlay\"] },\n {\n id: \"accent\",\n label: \"Accent\",\n tokens: [\"accent\", \"accent-hover\", \"accent-fg\", \"focus\", \"selection\"],\n },\n {\n id: \"status\",\n label: \"Status\",\n // `stream` is the live hue rather than a sixth tone, and it sits in this\n // group because this is where somebody looking for \"the colour a running\n // tool is\" will look for it. `warn-fg` and `danger-fg` each sit next to the\n // tone they are chosen against: they are the inks on the two solid fills\n // this system paints, and moving a tone without looking at its ink is how a\n // confirm button stops being readable.\n tokens: [\"ok\", \"busy\", \"warn\", \"warn-fg\", \"danger\", \"danger-fg\", \"info\", \"stream\"],\n },\n]",
45
45
  "description": "Groups to render. Defaults to {@link COLOR_TOKEN_GROUPS}."
46
46
  },
47
47
  {