@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,110 @@
1
+ {
2
+ "name": "QueueDock",
3
+ "slug": "queue-dock",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "What you typed while it was still working, stacked and still yours to change.\n\nThe dock over the composer, and one of the two elements the teardown found\nmissing everywhere. Its whole reason to exist is the three things you can do\nto a queued turn *before* it sends: rewrite it now that you have seen what\nthe run did, jump it to the front, or drop it. A queue you can only watch is\na queue you will let send something you no longer mean.\n\nIt folds. Four queued turns above a composer is a wall, so the collapsed\nstate is one line — `4 queued messages` — and the entries come back on a\nclick. Open state is a prop like everything else in this family, so a\nscripted replay of the dock is arithmetic rather than a component with a mind\nof its own.\n\nAn empty queue draws **nothing**: no line, no empty state, no rule. Every\nproduct in the study does the same, and it is the right answer — a dock that\nannounces it has nothing in it is a permanent strip of chrome apologising for\nitself.",
11
+ "props": [
12
+ {
13
+ "name": "messages",
14
+ "type": "readonly QueuedFollowUp[]",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "The turns waiting to send, in the order they will drain. Ordering is the\ncaller's: Cursor lets a person drag one up the list, and a component that\nsorted the array it was given could not be dragged."
18
+ },
19
+ {
20
+ "name": "open",
21
+ "type": "boolean",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Whether the entries are showing, or only the summary line."
25
+ },
26
+ {
27
+ "name": "onOpenChange",
28
+ "type": "((open: boolean) => void)",
29
+ "required": false,
30
+ "defaultValue": null,
31
+ "description": "Called when the dock is expanded or collapsed."
32
+ },
33
+ {
34
+ "name": "onEdit",
35
+ "type": "((id: string) => void)",
36
+ "required": false,
37
+ "defaultValue": null,
38
+ "description": "Put this turn back in the composer to be rewritten. The control exists\nonly when this is given."
39
+ },
40
+ {
41
+ "name": "onSendNow",
42
+ "type": "((id: string) => void)",
43
+ "required": false,
44
+ "defaultValue": null,
45
+ "description": "Send this turn now rather than waiting for the run to finish — Cursor's\n`Send now`, Zed's steer button. The control exists only when this is given."
46
+ },
47
+ {
48
+ "name": "onRemove",
49
+ "type": "((id: string) => void)",
50
+ "required": false,
51
+ "defaultValue": null,
52
+ "description": "Drop this turn before it ever sends. The control exists only when this is\ngiven."
53
+ },
54
+ {
55
+ "name": "summary",
56
+ "type": "string",
57
+ "required": false,
58
+ "defaultValue": null,
59
+ "description": "The summary line, replacing the one {@link formatQueueSummary} would build\n— for a dock that counts something else: `2 follow-ups`, `3 steps queued`."
60
+ },
61
+ {
62
+ "name": "labels",
63
+ "type": "Partial<QueueLabels>",
64
+ "required": false,
65
+ "defaultValue": null,
66
+ "description": "Copy for the five controls, merged over `QUEUE_LABELS`. Partial: overriding\n`sendNow` does not cost you the other four."
67
+ }
68
+ ],
69
+ "typeReferences": [
70
+ "Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
71
+ ],
72
+ "subcomponents": [],
73
+ "parts": [],
74
+ "variants": {},
75
+ "defaultVariants": {},
76
+ "tokensUsed": [
77
+ "--cue-accent",
78
+ "--cue-fg-muted",
79
+ "--cue-fg-subtle",
80
+ "--cue-radius-control",
81
+ "--cue-radius-overlay",
82
+ "--cue-surface-2",
83
+ "--cue-text-ui"
84
+ ],
85
+ "summary": "What you typed while it was still working, stacked and still yours to change.",
86
+ "examples": [
87
+ {
88
+ "title": "Usage",
89
+ "code": "import { QueueDock } from \"@cueplusplus/ui/elements\";\n\n<QueueDock\n messages={queued}\n open={open}\n onOpenChange={setOpen}\n onEdit={(id) => lift(id)}\n onSendNow={(id) => steer(id)}\n onRemove={(id) => drop(id)}\n/>\n// Read-only: the same dock in a shared transcript, with nothing to press.\n<QueueDock messages={queued} open />",
90
+ "language": "tsx"
91
+ }
92
+ ],
93
+ "status": "todo-docs",
94
+ "url": "/docs/components/queue-dock",
95
+ "mdUrl": "/docs/components/queue-dock.md",
96
+ "jsonUrl": "/r/components/queue-dock.json",
97
+ "specimens": [
98
+ {
99
+ "title": "QueueDock",
100
+ "group": "elements-agents",
101
+ "components": [
102
+ "QueueDock"
103
+ ],
104
+ "code": "<Specimens>\n <Specimen label={queueOpen ? \"three waiting\" : \"folded\"} wide>\n <div className=\"w-full max-w-md\">\n <QueueDock\n messages={queued}\n open={queueOpen}\n onOpenChange={setQueueOpen}\n onEdit={drain}\n onSendNow={drain}\n onRemove={drain}\n />\n </div>\n </Specimen>\n <Specimen label=\"read-only, in a shared transcript\" wide>\n <div className=\"w-full max-w-md\">\n <QueueDock messages={FOLLOW_UPS.slice(0, 2)} open />\n </div>\n </Specimen>\n</Specimens>",
105
+ "note": "What you typed while it was still working — and the three things you can still do about it. Cursor, opencode, Cline, Roo and Zed all ship this dock and assistant-ui's catalogue has nothing like it; the vendored MessageQueue two files along is the strip without the verbs. It folds to one line, because four queued turns above a composer is a wall, and an empty queue draws nothing at all rather than a strip of chrome apologising for itself.",
106
+ "interaction": "the summary line is the trigger and carries its own aria-expanded; each entry's three controls are named after the turn they belong to (`Send now: Then export the whole show to the desk`), so a screen reader hears which one it is about to jump. Press any of them here and the entry drains — the bench refills when the last one goes."
107
+ }
108
+ ],
109
+ "todo": true
110
+ }
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "QuotaBanner",
3
+ "slug": "quota-banner",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "How much is left, when it comes back, and the way to get more.",
9
+ "props": [
10
+ {
11
+ "name": "used",
12
+ "type": "number",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "How much has been consumed."
16
+ },
17
+ {
18
+ "name": "limit",
19
+ "type": "number",
20
+ "required": true,
21
+ "defaultValue": null,
22
+ "description": "The allowance. The banner turns amber at 90 percent."
23
+ },
24
+ {
25
+ "name": "unit",
26
+ "type": "string",
27
+ "required": true,
28
+ "defaultValue": null,
29
+ "description": "What is being counted: messages, runs, credits."
30
+ },
31
+ {
32
+ "name": "resetsIn",
33
+ "type": "string",
34
+ "required": true,
35
+ "defaultValue": null,
36
+ "description": "Pre-formatted time until the window rolls over."
37
+ },
38
+ {
39
+ "name": "upgradeLabel",
40
+ "type": "string",
41
+ "required": true,
42
+ "defaultValue": null,
43
+ "description": "Label for the way out."
44
+ },
45
+ {
46
+ "name": "onUpgrade",
47
+ "type": "(() => void)",
48
+ "required": false,
49
+ "defaultValue": null,
50
+ "description": "Called from the upgrade action."
51
+ }
52
+ ],
53
+ "typeReferences": [
54
+ "Omit<\n ComponentProps<\"div\">,\n | \"children\"\n | \"used\"\n | \"limit\"\n | \"unit\"\n | \"resetsIn\"\n | \"upgradeLabel\"\n | \"onUpgrade\"\n> & {\n /** How much has been consumed. */\n used: number;\n /** The allowance. The banner turns amber at 90 percent. */\n limit: number;\n /** What is being counted: messages, runs, credits. */\n unit: string;\n /** Pre-formatted time until the window rolls over. */\n resetsIn: string;\n /** Label for the way out. */\n upgradeLabel: string;\n /** Called from the upgrade action. */\n onUpgrade?: () => void;\n}"
55
+ ],
56
+ "subcomponents": [],
57
+ "parts": [],
58
+ "variants": {},
59
+ "defaultVariants": {},
60
+ "tokensUsed": [
61
+ "--cue-fg-subtle",
62
+ "--cue-radius-overlay",
63
+ "--cue-surface-2",
64
+ "--cue-surface-3",
65
+ "--cue-text-body",
66
+ "--cue-text-ui",
67
+ "--cue-warn"
68
+ ],
69
+ "summary": "How much is left, when it comes back, and the way to get more.",
70
+ "examples": [
71
+ {
72
+ "title": "Usage",
73
+ "code": "import { QuotaBanner } from \"@cueplusplus/ui/elements\";\n\n<QuotaBanner used={47} limit={50} unit=\"messages\" resetsIn=\"3h 12m\" upgradeLabel=\"Upgrade\" />",
74
+ "language": "tsx"
75
+ }
76
+ ],
77
+ "status": "todo-docs",
78
+ "url": "/docs/components/quota-banner",
79
+ "mdUrl": "/docs/components/quota-banner.md",
80
+ "jsonUrl": "/r/components/quota-banner.json",
81
+ "specimens": [
82
+ {
83
+ "title": "QuotaBanner",
84
+ "group": "elements-agents",
85
+ "components": [
86
+ "QuotaBanner"
87
+ ],
88
+ "code": "<Specimens>\n <Specimen label=\"comfortable\" wide>\n <QuotaBanner\n used={140}\n limit={500}\n unit=\"agent runs\"\n resetsIn=\"12 days\"\n upgradeLabel=\"Raise the limit\"\n onUpgrade={() => undefined}\n />\n </Specimen>\n <Specimen label=\"nearly out\" wide>\n <QuotaBanner\n used={472}\n limit={500}\n unit=\"agent runs\"\n resetsIn=\"3 days\"\n upgradeLabel=\"Raise the limit\"\n onUpgrade={() => undefined}\n />\n </Specimen>\n</Specimens>",
89
+ "note": "How much is left, when it comes back, and the way to get more — in that order, which is the order the question is actually asked in. It turns warn at nine tenths rather than at the wall, so the warning arrives while there is still something to do about it.",
90
+ "interaction": "the upgrade action is an ink button with the label the caller passes; nothing here is a link, so the destination is entirely the host app's business."
91
+ }
92
+ ],
93
+ "todo": true
94
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "name": "QuoteReply",
3
+ "slug": "quote-reply",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "Select a phrase in an answer and a toolbar offers to quote, explain, or rewrite it.",
11
+ "props": [
12
+ {
13
+ "name": "before",
14
+ "type": "string",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Text preceding the selection."
18
+ },
19
+ {
20
+ "name": "selection",
21
+ "type": "string",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "The highlighted run the actions apply to."
25
+ },
26
+ {
27
+ "name": "after",
28
+ "type": "string",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "Text following the selection."
32
+ },
33
+ {
34
+ "name": "actions",
35
+ "type": "readonly QuoteAction[]",
36
+ "required": true,
37
+ "defaultValue": null,
38
+ "description": "What the toolbar offers. Each action names one of the three built-in icons."
39
+ },
40
+ {
41
+ "name": "toolbarVisible",
42
+ "type": "boolean",
43
+ "required": true,
44
+ "defaultValue": null,
45
+ "description": "Whether the floating toolbar is showing. Drive it from your own selection handler."
46
+ },
47
+ {
48
+ "name": "quoted",
49
+ "type": "string",
50
+ "required": false,
51
+ "defaultValue": null,
52
+ "description": "Once quoted, the text carried into the composer, shown under a rule."
53
+ },
54
+ {
55
+ "name": "onAction",
56
+ "type": "((key: string) => void)",
57
+ "required": false,
58
+ "defaultValue": null,
59
+ "description": "Called with the key of the action that was chosen."
60
+ }
61
+ ],
62
+ "typeReferences": [
63
+ "Omit<\n ComponentProps<\"div\">,\n | \"children\"\n | \"before\"\n | \"selection\"\n | \"after\"\n | \"actions\"\n | \"toolbarVisible\"\n | \"quoted\"\n | \"onAction\"\n> & {\n /** Text preceding the selection. */\n before: string;\n /** The highlighted run the actions apply to. */\n selection: string;\n /** Text following the selection. */\n after: string;\n /** What the toolbar offers. Each action names one of the three built-in icons. */\n actions: readonly QuoteAction[];\n /** Whether the floating toolbar is showing. Drive it from your own selection handler. */\n toolbarVisible: boolean;\n /** Once quoted, the text carried into the composer, shown under a rule. */\n quoted?: string;\n /** Called with the key of the action that was chosen. */\n onAction?: (key: string) => void;\n}"
64
+ ],
65
+ "subcomponents": [],
66
+ "parts": [],
67
+ "variants": {},
68
+ "defaultVariants": {},
69
+ "tokensUsed": [
70
+ "--cue-border-strong",
71
+ "--cue-fg",
72
+ "--cue-fg-muted",
73
+ "--cue-fg-subtle",
74
+ "--cue-radius-control",
75
+ "--cue-stream",
76
+ "--cue-surface-2",
77
+ "--cue-text-body",
78
+ "--cue-text-ui"
79
+ ],
80
+ "summary": "Select a phrase in an answer and a toolbar offers to quote, explain, or rewrite it.",
81
+ "examples": [
82
+ {
83
+ "title": "Usage",
84
+ "code": "import { QuoteReply } from \"@cueplusplus/ui/elements\";\n\n<QuoteReply\n before=\"The regression happens because \"\n selection=\"the converter drops parts with no text\"\n after=\", so the turn never lands.\"\n actions={actions}\n toolbarVisible\n onAction={handle}\n/>",
85
+ "language": "tsx"
86
+ }
87
+ ],
88
+ "status": "todo-docs",
89
+ "url": "/docs/components/quote-reply",
90
+ "mdUrl": "/docs/components/quote-reply.md",
91
+ "jsonUrl": "/r/components/quote-reply.json",
92
+ "specimens": [
93
+ {
94
+ "title": "QuoteReply",
95
+ "group": "elements-thread",
96
+ "components": [
97
+ "QuoteReply"
98
+ ],
99
+ "code": "<Specimens>\n <Specimen label=\"toolbar up\" wide>\n <QuoteReply\n before=\"Patched 6 fixtures on \"\n selection=\"universe 3, channels 1 to 48\"\n after=\". Cue 1 is untouched.\"\n actions={QUOTE_ACTIONS}\n toolbarVisible\n />\n </Specimen>\n <Specimen label=\"quoted\" wide>\n <QuoteReply\n before=\"Patched 6 fixtures on \"\n selection=\"universe 3, channels 1 to 48\"\n after=\". Cue 1 is untouched.\"\n actions={QUOTE_ACTIONS}\n toolbarVisible={false}\n quoted=\"universe 3, channels 1 to 48\"\n />\n </Specimen>\n</Specimens>",
100
+ "note": "Select a phrase in an answer and act on that phrase rather than the whole turn. The selection stays lit in the streaming hue while the toolbar is up, and what you quoted is repeated under the composer so the next turn's subject is never in doubt.",
101
+ "interaction": "the toolbar's row is reserved whether or not it is showing, so nothing below it jumps when a selection appears. Each action is a labelled button."
102
+ }
103
+ ],
104
+ "todo": true
105
+ }
@@ -0,0 +1,111 @@
1
+ {
2
+ "name": "ReadAloud",
3
+ "slug": "read-aloud",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "An answer played back, the spoken word lit as it goes, speed under your thumb.",
11
+ "props": [
12
+ {
13
+ "name": "words",
14
+ "type": "readonly string[]",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "The answer split into words, so the spoken one can be lit without re-parsing the\ntext."
18
+ },
19
+ {
20
+ "name": "spokenIndex",
21
+ "type": "number",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Index of the word being spoken. Everything before it dims, everything after stays\nwaiting, and an index outside the text speaks none of it."
25
+ },
26
+ {
27
+ "name": "playing",
28
+ "type": "boolean",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "Swaps the transport button between play and pause."
32
+ },
33
+ {
34
+ "name": "rate",
35
+ "type": "number",
36
+ "required": true,
37
+ "defaultValue": null,
38
+ "description": "Playback speed, printed on the rate control."
39
+ },
40
+ {
41
+ "name": "elapsed",
42
+ "type": "string",
43
+ "required": true,
44
+ "defaultValue": null,
45
+ "description": "Pre-formatted elapsed time."
46
+ },
47
+ {
48
+ "name": "duration",
49
+ "type": "string",
50
+ "required": true,
51
+ "defaultValue": null,
52
+ "description": "Pre-formatted total duration."
53
+ },
54
+ {
55
+ "name": "onToggle",
56
+ "type": "(() => void)",
57
+ "required": false,
58
+ "defaultValue": null,
59
+ "description": "Called when playback is started or paused."
60
+ },
61
+ {
62
+ "name": "onRateChange",
63
+ "type": "(() => void)",
64
+ "required": false,
65
+ "defaultValue": null,
66
+ "description": "Called when the rate control is tapped; cycle the rate yourself."
67
+ }
68
+ ],
69
+ "typeReferences": [
70
+ "Omit<\n ComponentProps<\"div\">,\n | \"children\"\n | \"words\"\n | \"spokenIndex\"\n | \"playing\"\n | \"rate\"\n | \"elapsed\"\n | \"duration\"\n | \"onToggle\"\n | \"onRateChange\"\n> & {\n /**\n * The answer split into words, so the spoken one can be lit without re-parsing the\n * text.\n */\n words: readonly string[];\n /**\n * Index of the word being spoken. Everything before it dims, everything after stays\n * waiting, and an index outside the text speaks none of it.\n */\n spokenIndex: number;\n /** Swaps the transport button between play and pause. */\n playing: boolean;\n /** Playback speed, printed on the rate control. */\n rate: number;\n /** Pre-formatted elapsed time. */\n elapsed: string;\n /** Pre-formatted total duration. */\n duration: string;\n /** Called when playback is started or paused. */\n onToggle?: () => void;\n /** Called when the rate control is tapped; cycle the rate yourself. */\n onRateChange?: () => void;\n}"
71
+ ],
72
+ "subcomponents": [],
73
+ "parts": [],
74
+ "variants": {},
75
+ "defaultVariants": {},
76
+ "tokensUsed": [
77
+ "--cue-fg",
78
+ "--cue-fg-muted",
79
+ "--cue-fg-subtle",
80
+ "--cue-radius-control",
81
+ "--cue-radius-overlay",
82
+ "--cue-stream",
83
+ "--cue-surface-2",
84
+ "--cue-text-body"
85
+ ],
86
+ "summary": "An answer played back, the spoken word lit as it goes, speed under your thumb.",
87
+ "examples": [
88
+ {
89
+ "title": "Usage",
90
+ "code": "import { ReadAloud } from \"@cueplusplus/ui/elements\";\n\n<ReadAloud\n words={words}\n spokenIndex={12}\n playing\n rate={1}\n elapsed=\"0:04\"\n duration=\"0:11\"\n onToggle={toggle}\n onRateChange={cycleRate}\n/>",
91
+ "language": "tsx"
92
+ }
93
+ ],
94
+ "status": "todo-docs",
95
+ "url": "/docs/components/read-aloud",
96
+ "mdUrl": "/docs/components/read-aloud.md",
97
+ "jsonUrl": "/r/components/read-aloud.json",
98
+ "specimens": [
99
+ {
100
+ "title": "ReadAloud",
101
+ "group": "elements-thread",
102
+ "components": [
103
+ "ReadAloud"
104
+ ],
105
+ "code": "<Specimens>\n <Specimen label=\"playing\" wide>\n <ReadAloud\n words={SPOKEN}\n spokenIndex={4}\n playing={playing}\n rate={rate}\n elapsed=\"0:06\"\n duration=\"0:14\"\n onToggle={() => setPlaying((current) => !current)}\n onRateChange={() => setRate((current) => (current === 2 ? 1 : current + 0.5))}\n />\n </Specimen>\n <Specimen label=\"paused at the start\" wide>\n <ReadAloud\n words={SPOKEN}\n spokenIndex={0}\n playing={false}\n rate={1}\n elapsed=\"0:00\"\n duration=\"0:14\"\n />\n </Specimen>\n</Specimens>",
106
+ "note": "An answer played back with the spoken word lit as it goes. Position is a word index the caller advances, not an audio element, so the same component drives a real voice, a replay, or this bench. Speed is one tap away because that is the control people actually reach for.",
107
+ "interaction": "play/pause and the speed chip are both named buttons, and the label says the current rate rather than just the glyph. The progress bar animates linearly, and not at all under reduced motion."
108
+ }
109
+ ],
110
+ "todo": true
111
+ }
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "ReasoningEffort",
3
+ "slug": "reasoning-effort",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "How hard to think, and how much of that budget the run actually spent.",
9
+ "props": [
10
+ {
11
+ "name": "levels",
12
+ "type": "readonly EffortLevel[]",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "Every tier on offer, each carrying its own token budget."
16
+ },
17
+ {
18
+ "name": "selectedKey",
19
+ "type": "string",
20
+ "required": true,
21
+ "defaultValue": null,
22
+ "description": "Which tier is active. Its budget becomes the denominator."
23
+ },
24
+ {
25
+ "name": "spent",
26
+ "type": "number",
27
+ "required": true,
28
+ "defaultValue": null,
29
+ "description": "Thinking tokens used so far, filling the bar against the selected budget."
30
+ },
31
+ {
32
+ "name": "onSelect",
33
+ "type": "((key: string) => void)",
34
+ "required": false,
35
+ "defaultValue": null,
36
+ "description": "Called when a tier is picked."
37
+ }
38
+ ],
39
+ "typeReferences": [
40
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"levels\" | \"selectedKey\" | \"spent\" | \"onSelect\"\n> & {\n /** Every tier on offer, each carrying its own token budget. */\n levels: readonly EffortLevel[];\n /** Which tier is active. Its budget becomes the denominator. */\n selectedKey: string;\n /** Thinking tokens used so far, filling the bar against the selected budget. */\n spent: number;\n /** Called when a tier is picked. */\n onSelect?: (key: string) => void;\n}"
41
+ ],
42
+ "subcomponents": [],
43
+ "parts": [],
44
+ "variants": {},
45
+ "defaultVariants": {},
46
+ "tokensUsed": [
47
+ "--cue-bg",
48
+ "--cue-fg",
49
+ "--cue-fg-muted",
50
+ "--cue-fg-subtle",
51
+ "--cue-stream",
52
+ "--cue-surface-2",
53
+ "--cue-text-body",
54
+ "--cue-text-ui"
55
+ ],
56
+ "summary": "How hard to think, and how much of that budget the run actually spent.",
57
+ "examples": [
58
+ {
59
+ "title": "Usage",
60
+ "code": "import { ReasoningEffort } from \"@cueplusplus/ui/elements\";\n\n<ReasoningEffort\n levels={levels}\n selectedKey=\"high\"\n spent={5200}\n onSelect={setLevel}\n/>",
61
+ "language": "tsx"
62
+ }
63
+ ],
64
+ "status": "todo-docs",
65
+ "url": "/docs/components/reasoning-effort",
66
+ "mdUrl": "/docs/components/reasoning-effort.md",
67
+ "jsonUrl": "/r/components/reasoning-effort.json",
68
+ "specimens": [
69
+ {
70
+ "title": "ReasoningEffort",
71
+ "group": "elements-thread",
72
+ "components": [
73
+ "ReasoningEffort"
74
+ ],
75
+ "code": "<Specimens>\n <Specimen label=\"medium, a third spent\" wide>\n <ReasoningEffort\n levels={EFFORT}\n selectedKey={effort}\n spent={2841}\n onSelect={setEffort}\n />\n </Specimen>\n <Specimen label=\"low, over its rung\" wide>\n <ReasoningEffort levels={EFFORT} selectedKey=\"low\" spent={2048} />\n </Specimen>\n</Specimens>",
76
+ "note": "How hard to think, and how much of that budget the run actually spent. The segmented control is the choice; the hairline under it is the consequence, and it moves when you change rungs because a bigger budget makes the same spend a smaller fraction.",
77
+ "interaction": "each segment is a button carrying aria-pressed. The meter animates its width rather than jumping, and holds still for a reader who asked for less motion."
78
+ }
79
+ ],
80
+ "todo": true
81
+ }
@@ -0,0 +1,108 @@
1
+ {
2
+ "name": "ReasoningPanel",
3
+ "slug": "reasoning-panel",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "A collapsible trace that streams reasoning steps along a timeline, then settles into\na summary.",
11
+ "props": [
12
+ {
13
+ "name": "steps",
14
+ "type": "ReasoningStep[]",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Full list of reasoning steps available to reveal."
18
+ },
19
+ {
20
+ "name": "visibleSteps",
21
+ "type": "number",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "How many steps from the start are currently shown on the timeline."
25
+ },
26
+ {
27
+ "name": "streaming",
28
+ "type": "boolean",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "When true the trigger shows a shimmering Thinking label and the active step pulses."
32
+ },
33
+ {
34
+ "name": "open",
35
+ "type": "boolean",
36
+ "required": true,
37
+ "defaultValue": null,
38
+ "description": "Whether the collapsible step list is expanded."
39
+ },
40
+ {
41
+ "name": "onOpenChange",
42
+ "type": "(open: boolean) => void",
43
+ "required": true,
44
+ "defaultValue": null,
45
+ "description": "Called when the user expands or collapses the panel."
46
+ },
47
+ {
48
+ "name": "restingLabel",
49
+ "type": "string",
50
+ "required": true,
51
+ "defaultValue": null,
52
+ "description": "Trigger label once streaming finishes, for example a summary of how long it thought."
53
+ },
54
+ {
55
+ "name": "elapsed",
56
+ "type": "string",
57
+ "required": false,
58
+ "defaultValue": null,
59
+ "description": "Elapsed timer shown next to Thinking while streaming. Omit to hide it."
60
+ },
61
+ {
62
+ "name": "className",
63
+ "type": "string",
64
+ "required": false,
65
+ "defaultValue": null,
66
+ "description": "Extra classes merged onto the root."
67
+ }
68
+ ],
69
+ "typeReferences": [],
70
+ "subcomponents": [],
71
+ "parts": [],
72
+ "variants": {},
73
+ "defaultVariants": {},
74
+ "tokensUsed": [
75
+ "--cue-accent",
76
+ "--cue-fg",
77
+ "--cue-fg-muted",
78
+ "--cue-fg-subtle",
79
+ "--cue-stream",
80
+ "--cue-surface-3",
81
+ "--cue-text-body"
82
+ ],
83
+ "summary": "A collapsible trace that streams reasoning steps along a timeline, then settles into a summary.",
84
+ "examples": [
85
+ {
86
+ "title": "Usage",
87
+ "code": "import { ReasoningPanel } from \"@cueplusplus/ui/elements\";\n\n<ReasoningPanel\n steps={[{ title: \"Scope\", body: \"Find the failing path.\" }]}\n visibleSteps={1}\n streaming\n open\n onOpenChange={setOpen}\n restingLabel=\"Reasoned for 4s\"\n elapsed=\"2s\"\n/>",
88
+ "language": "tsx"
89
+ }
90
+ ],
91
+ "status": "todo-docs",
92
+ "url": "/docs/components/reasoning-panel",
93
+ "mdUrl": "/docs/components/reasoning-panel.md",
94
+ "jsonUrl": "/r/components/reasoning-panel.json",
95
+ "specimens": [
96
+ {
97
+ "title": "ReasoningPanel",
98
+ "group": "elements-thread",
99
+ "components": [
100
+ "ReasoningPanel"
101
+ ],
102
+ "code": "<Specimens>\n <Specimen label=\"streaming, open\" wide>\n <ReasoningPanel\n steps={REASONING}\n visibleSteps={3}\n streaming\n open={reasoningOpen}\n onOpenChange={setReasoningOpen}\n restingLabel=\"Thought for 6s\"\n elapsed=\"4s\"\n />\n </Specimen>\n <Specimen label=\"settled, collapsed\" wide>\n <ReasoningPanel\n steps={REASONING}\n visibleSteps={REASONING.length}\n streaming={false}\n open={settledOpen}\n onOpenChange={setSettledOpen}\n restingLabel=\"Thought for 6s\"\n />\n </Specimen>\n</Specimens>",
103
+ "note": "The model's own account of how it got there, revealed a beat at a time and then folded away. While it streams, the trigger shimmers and carries a running clock; when it settles, the label swaps for a summary and the timer goes. `visibleSteps` is what makes it a replay — the caller advances it, the panel never counts.",
104
+ "interaction": "the whole trigger row is the toggle and it takes focus; the chevron turns with the panel. The newest step's dot pulses while streaming and stops when it does."
105
+ }
106
+ ],
107
+ "todo": true
108
+ }