@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
@@ -30,7 +30,7 @@
30
30
  },
31
31
  {
32
32
  "name": "tone",
33
- "type": "\"accent\" | \"danger\" | \"busy\" | \"neutral\" | \"ok\" | \"warn\" | \"info\"",
33
+ "type": "\"danger\" | \"accent\" | \"busy\" | \"neutral\" | \"ok\" | \"warn\" | \"info\"",
34
34
  "required": false,
35
35
  "defaultValue": "neutral",
36
36
  "description": "Tints the value only. Defaults to `\"neutral\"`."
@@ -9,7 +9,7 @@
9
9
  "props": [
10
10
  {
11
11
  "name": "tone",
12
- "type": "\"idle\" | \"danger\" | \"busy\" | \"ok\" | \"warn\"",
12
+ "type": "\"danger\" | \"idle\" | \"busy\" | \"ok\" | \"warn\"",
13
13
  "required": true,
14
14
  "defaultValue": null,
15
15
  "description": "Which state to paint. `idle` renders a hollow ring."
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "StoppedRun",
3
+ "slug": "stopped-run",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "You pressed stop. The half-written answer stays, and continuing is one tap away.",
11
+ "props": [
12
+ {
13
+ "name": "words",
14
+ "type": "readonly string[]",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "The partial answer as it stood when the run stopped. It stays on screen."
18
+ },
19
+ {
20
+ "name": "reason",
21
+ "type": "string",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Why it ended: stopped by you, hit the token limit, timed out."
25
+ },
26
+ {
27
+ "name": "onContinue",
28
+ "type": "(() => void)",
29
+ "required": false,
30
+ "defaultValue": null,
31
+ "description": "Called to resume from where the answer left off."
32
+ },
33
+ {
34
+ "name": "onDiscard",
35
+ "type": "(() => void)",
36
+ "required": false,
37
+ "defaultValue": null,
38
+ "description": "Called to drop the partial answer."
39
+ }
40
+ ],
41
+ "typeReferences": [
42
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"words\" | \"reason\" | \"onContinue\" | \"onDiscard\"\n> & {\n /** The partial answer as it stood when the run stopped. It stays on screen. */\n words: readonly string[];\n /** Why it ended: stopped by you, hit the token limit, timed out. */\n reason: string;\n /** Called to resume from where the answer left off. */\n onContinue?: () => void;\n /** Called to drop the partial answer. */\n onDiscard?: () => void;\n}"
43
+ ],
44
+ "subcomponents": [],
45
+ "parts": [],
46
+ "variants": {},
47
+ "defaultVariants": {},
48
+ "tokensUsed": [
49
+ "--cue-fg",
50
+ "--cue-fg-muted",
51
+ "--cue-surface-2",
52
+ "--cue-surface-3",
53
+ "--cue-text-body",
54
+ "--cue-text-ui"
55
+ ],
56
+ "summary": "You pressed stop.",
57
+ "examples": [
58
+ {
59
+ "title": "Usage",
60
+ "code": "import { StoppedRun } from \"@cueplusplus/ui/elements\";\n\n<StoppedRun words={words} reason=\"stopped by you\" onContinue={resume} />",
61
+ "language": "tsx"
62
+ }
63
+ ],
64
+ "status": "todo-docs",
65
+ "url": "/docs/components/stopped-run",
66
+ "mdUrl": "/docs/components/stopped-run.md",
67
+ "jsonUrl": "/r/components/stopped-run.json",
68
+ "specimens": [
69
+ {
70
+ "title": "StoppedRun",
71
+ "group": "elements-thread",
72
+ "components": [
73
+ "StoppedRun"
74
+ ],
75
+ "code": "<Specimens>\n <Specimen label=\"stopped by the user\" wide>\n <StoppedRun\n words={SPOKEN.slice(0, 5)}\n reason=\"stopped by you\"\n onContinue={() => undefined}\n onDiscard={() => undefined}\n />\n </Specimen>\n <Specimen label=\"stopped by a limit\" wide>\n <StoppedRun words={SPOKEN.slice(0, 3)} reason=\"token budget reached\" />\n </Specimen>\n</Specimens>",
76
+ "note": "You pressed stop. The half-written answer stays exactly where it stopped, with a caret to say so, and the run gives its reason on a chip. Continuing is one tap; discarding is the quieter of the two, which is the right ranking.",
77
+ "interaction": "Continue leads and carries the arrow; Discard is a ghost. Both are ordinary buttons — nothing here is a destructive-action dialog."
78
+ }
79
+ ],
80
+ "todo": true
81
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "StreamingText",
3
+ "slug": "streaming-text",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "Tokens arrive softly: the newest words land in blue and settle into ink.",
9
+ "props": [
10
+ {
11
+ "name": "segments",
12
+ "type": "Segment[]",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "Text chunks to stream, optionally marked mono for inline code chips."
16
+ },
17
+ {
18
+ "name": "count",
19
+ "type": "number",
20
+ "required": true,
21
+ "defaultValue": null,
22
+ "description": "How many words from the flattened segments are visible."
23
+ },
24
+ {
25
+ "name": "streaming",
26
+ "type": "boolean",
27
+ "required": true,
28
+ "defaultValue": null,
29
+ "description": "When true the newest words tint blue and a caret blinks at the end."
30
+ }
31
+ ],
32
+ "typeReferences": [
33
+ "Omit<\n ComponentProps<\"p\">,\n \"children\" | \"segments\" | \"count\" | \"streaming\"\n> & {\n /** Text chunks to stream, optionally marked mono for inline code chips. */\n segments: Segment[];\n /** How many words from the flattened segments are visible. */\n count: number;\n /** When true the newest words tint blue and a caret blinks at the end. */\n streaming: boolean;\n}"
34
+ ],
35
+ "subcomponents": [],
36
+ "parts": [],
37
+ "variants": {},
38
+ "defaultVariants": {},
39
+ "tokensUsed": [
40
+ "--cue-font-mono",
41
+ "--cue-radius-control",
42
+ "--cue-stream",
43
+ "--cue-surface-2",
44
+ "--cue-text-body"
45
+ ],
46
+ "summary": "Tokens arrive softly: the newest words land in blue and settle into ink.",
47
+ "examples": [
48
+ {
49
+ "title": "Usage",
50
+ "code": "import { StreamingText } from \"@cueplusplus/ui/elements\";\n\n<StreamingText\n segments={[{ text: \"Hello world\" }, { text: \"thread.tsx\", mono: true }]}\n count={3}\n streaming\n/>",
51
+ "language": "tsx"
52
+ }
53
+ ],
54
+ "status": "todo-docs",
55
+ "url": "/docs/components/streaming-text",
56
+ "mdUrl": "/docs/components/streaming-text.md",
57
+ "jsonUrl": "/r/components/streaming-text.json",
58
+ "specimens": [
59
+ {
60
+ "title": "StreamingText",
61
+ "group": "elements-thread",
62
+ "components": [
63
+ "StreamingText"
64
+ ],
65
+ "code": "<Specimens>\n <Specimen label=\"mid-stream\" wide>\n <StreamingText segments={ANSWER} count={9} streaming />\n </Specimen>\n <Specimen label=\"settled\" wide>\n <StreamingText segments={ANSWER} count={40} streaming={false} />\n </Specimen>\n</Specimens>",
66
+ "note": "Tokens landing a word at a time: the newest two are lit in the streaming hue and cool into ink behind them, and a caret sits at the end while more is coming. A segment marked mono becomes a chip, which is how a path or a channel range survives being read aloud in prose.",
67
+ "interaction": "none, and deliberately: it is a paragraph, and it stays selectable, copyable text at every count."
68
+ }
69
+ ],
70
+ "todo": true
71
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "Sub",
3
+ "slug": "sub",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "A subscript inside an expression: a bound or a label, set upright inside the italic.",
9
+ "props": [],
10
+ "typeReferences": [],
11
+ "subcomponents": [],
12
+ "parts": [],
13
+ "variants": {},
14
+ "defaultVariants": {},
15
+ "tokensUsed": [
16
+ "--cue-border-strong",
17
+ "--cue-fg",
18
+ "--cue-fg-subtle",
19
+ "--cue-radius-overlay",
20
+ "--cue-text-emphasis"
21
+ ],
22
+ "summary": "A subscript inside an expression: a bound or a label, set upright inside the italic.",
23
+ "examples": [],
24
+ "status": "todo-docs",
25
+ "url": "/docs/components/sub",
26
+ "mdUrl": "/docs/components/sub.md",
27
+ "jsonUrl": "/r/components/sub.json",
28
+ "specimens": [
29
+ {
30
+ "title": "MathBlock",
31
+ "group": "elements-knowledge",
32
+ "components": [
33
+ "MathBlock",
34
+ "Frac",
35
+ "Sub",
36
+ "Sup"
37
+ ],
38
+ "code": "<Specimens>\n <Specimen label=\"worked through\" wide>\n <MathBlock label=\"illuminance at the deck\" steps={MATH} visibleSteps={MATH.length} />\n </Specimen>\n <Specimen label=\"first step only\" wide>\n <MathBlock steps={MATH} visibleSteps={1} />\n </Specimen>\n</Specimens>",
39
+ "note": "Maths with the working shown, a step at a time. The expressions are nodes rather than a string, so there is no parser and no KaTeX in the bundle — `Frac` stacks a numerator over a rule, `Sup` and `Sub` set an index upright inside the serif italic, and anything else is text.",
40
+ "interaction": "none. Each step's note says what justified it, which is what turns three lines of algebra into an explanation."
41
+ }
42
+ ],
43
+ "todo": true
44
+ }
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "SubagentList",
3
+ "slug": "subagent-list",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "Parallel workers with their own progress, models, and completions.",
11
+ "props": [
12
+ {
13
+ "name": "agents",
14
+ "type": "readonly SubagentItem[]",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Parallel workers shown as cards with name and model."
18
+ },
19
+ {
20
+ "name": "completedCount",
21
+ "type": "number",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "How many agents from the start are marked complete."
25
+ },
26
+ {
27
+ "name": "progress",
28
+ "type": "readonly number[]",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "Per-agent progress widths used while a worker is still running."
32
+ },
33
+ {
34
+ "name": "showSummary",
35
+ "type": "boolean",
36
+ "required": true,
37
+ "defaultValue": null,
38
+ "description": "When true the summary agent card is revealed under the list."
39
+ },
40
+ {
41
+ "name": "summaryAgent",
42
+ "type": "SubagentItem",
43
+ "required": true,
44
+ "defaultValue": null,
45
+ "description": "Agent shown in the summary card once showSummary is true."
46
+ }
47
+ ],
48
+ "typeReferences": [
49
+ "Omit<\n ComponentProps<\"div\">,\n | \"children\"\n | \"agents\"\n | \"completedCount\"\n | \"progress\"\n | \"showSummary\"\n | \"summaryAgent\"\n> & {\n /** Parallel workers shown as cards with name and model. */\n agents: readonly SubagentItem[];\n /** How many agents from the start are marked complete. */\n completedCount: number;\n /** Per-agent progress widths used while a worker is still running. */\n progress: readonly number[];\n /** When true the summary agent card is revealed under the list. */\n showSummary: boolean;\n /** Agent shown in the summary card once showSummary is true. */\n summaryAgent: SubagentItem;\n}"
50
+ ],
51
+ "subcomponents": [],
52
+ "parts": [],
53
+ "variants": {},
54
+ "defaultVariants": {},
55
+ "tokensUsed": [
56
+ "--cue-accent",
57
+ "--cue-fg-subtle",
58
+ "--cue-ok",
59
+ "--cue-radius-overlay",
60
+ "--cue-surface-2",
61
+ "--cue-text-body"
62
+ ],
63
+ "summary": "Parallel workers with their own progress, models, and completions.",
64
+ "examples": [
65
+ {
66
+ "title": "Usage",
67
+ "code": "import { SubagentList } from \"@cueplusplus/ui/elements\";\n\n<SubagentList\n agents={[{ name: \"Researcher\", model: \"Sonnet\" }]}\n completedCount={0}\n progress={[40]}\n showSummary={false}\n summaryAgent={{ name: \"Summarizer\", model: \"Haiku\" }}\n/>",
68
+ "language": "tsx"
69
+ }
70
+ ],
71
+ "status": "todo-docs",
72
+ "url": "/docs/components/subagent-list",
73
+ "mdUrl": "/docs/components/subagent-list.md",
74
+ "jsonUrl": "/r/components/subagent-list.json",
75
+ "specimens": [
76
+ {
77
+ "title": "SubagentList",
78
+ "group": "elements",
79
+ "components": [
80
+ "SubagentList"
81
+ ],
82
+ "code": "<Specimens>\n <Specimen label=\"two running\" wide>\n <SubagentList\n agents={WORKERS}\n completedCount={1}\n progress={[100, 62, 24]}\n showSummary={false}\n summaryAgent={SUMMARISER}\n />\n </Specimen>\n <Specimen label=\"summarising\" wide>\n <SubagentList\n agents={WORKERS}\n completedCount={WORKERS.length}\n progress={[100, 100, 100]}\n showSummary\n summaryAgent={SUMMARISER}\n />\n </Specimen>\n</Specimens>",
83
+ "note": "Parallel workers, each with its own model and its own progress. `completedCount` marks the finished ones from the start of the list, and the summary card appears under them when the agent that folds their answers together starts work.",
84
+ "interaction": "none. Delegation is something to watch, not something to steer from here."
85
+ }
86
+ ],
87
+ "todo": true
88
+ }
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "Suggestions",
3
+ "slug": "suggestions",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "Prompt pills that stagger in after a reply and invite the next turn.",
9
+ "props": [
10
+ {
11
+ "name": "suggestions",
12
+ "type": "readonly string[]",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "Follow-up prompt pills rendered in order."
16
+ },
17
+ {
18
+ "name": "selectedSuggestion",
19
+ "type": "string | null",
20
+ "required": true,
21
+ "defaultValue": null,
22
+ "description": "The pill currently pressed, or null when none is selected."
23
+ },
24
+ {
25
+ "name": "cycle",
26
+ "type": "number",
27
+ "required": true,
28
+ "defaultValue": null,
29
+ "description": "Identity key that remounts the row so the stagger entrance can replay."
30
+ },
31
+ {
32
+ "name": "onSuggestion",
33
+ "type": "(suggestion: string) => void",
34
+ "required": true,
35
+ "defaultValue": null,
36
+ "description": "Called when a suggestion pill is pressed."
37
+ },
38
+ {
39
+ "name": "variant",
40
+ "type": "\"list\" | \"pills\"",
41
+ "required": false,
42
+ "defaultValue": "pills",
43
+ "description": "pills wraps suggestions into a centered row; list stacks them as full-width rows."
44
+ }
45
+ ],
46
+ "typeReferences": [
47
+ "Omit<\n ComponentProps<\"div\">,\n \"children\"\n>"
48
+ ],
49
+ "subcomponents": [],
50
+ "parts": [],
51
+ "variants": {},
52
+ "defaultVariants": {},
53
+ "tokensUsed": [
54
+ "--cue-accent",
55
+ "--cue-accent-fg",
56
+ "--cue-radius-overlay",
57
+ "--cue-text-body"
58
+ ],
59
+ "summary": "Prompt pills that stagger in after a reply and invite the next turn.",
60
+ "examples": [
61
+ {
62
+ "title": "Usage",
63
+ "code": "import { Suggestions } from \"@cueplusplus/ui/elements\";\n\n<Suggestions\n suggestions={[\"Explain more\", \"Show an example\"]}\n selectedSuggestion={null}\n cycle={0}\n onSuggestion={setSelected}\n/>",
64
+ "language": "tsx"
65
+ }
66
+ ],
67
+ "status": "todo-docs",
68
+ "url": "/docs/components/suggestions",
69
+ "mdUrl": "/docs/components/suggestions.md",
70
+ "jsonUrl": "/r/components/suggestions.json",
71
+ "specimens": [
72
+ {
73
+ "title": "Suggestions",
74
+ "group": "elements-thread",
75
+ "components": [
76
+ "Suggestions"
77
+ ],
78
+ "code": "<Specimens>\n <Specimen label=\"pills\" wide>\n <Suggestions\n suggestions={FOLLOW_UPS}\n selectedSuggestion={suggestion}\n cycle={0}\n onSuggestion={setSuggestion}\n />\n </Specimen>\n <Specimen label=\"list\" wide>\n <Suggestions\n suggestions={FOLLOW_UPS}\n selectedSuggestion={FOLLOW_UPS[0] ?? null}\n cycle={1}\n onSuggestion={setSuggestion}\n variant=\"list\"\n />\n </Specimen>\n</Specimens>",
79
+ "note": "Where the conversation could go next, staggered in after a reply. Pills for a centred empty state, a list for a side panel; either way `cycle` is the key that re-runs the entrance when a new set replaces the old one.",
80
+ "interaction": "each pill is a button carrying aria-pressed, lifts a pixel on hover and presses in on click. The selected one inverts."
81
+ }
82
+ ],
83
+ "todo": true
84
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "Sup",
3
+ "slug": "sup",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "A superscript inside an expression: an exponent or an index, set upright inside the\nitalic.",
9
+ "props": [],
10
+ "typeReferences": [],
11
+ "subcomponents": [],
12
+ "parts": [],
13
+ "variants": {},
14
+ "defaultVariants": {},
15
+ "tokensUsed": [
16
+ "--cue-border-strong",
17
+ "--cue-fg",
18
+ "--cue-fg-subtle",
19
+ "--cue-radius-overlay",
20
+ "--cue-text-emphasis"
21
+ ],
22
+ "summary": "A superscript inside an expression: an exponent or an index, set upright inside the italic.",
23
+ "examples": [],
24
+ "status": "todo-docs",
25
+ "url": "/docs/components/sup",
26
+ "mdUrl": "/docs/components/sup.md",
27
+ "jsonUrl": "/r/components/sup.json",
28
+ "specimens": [
29
+ {
30
+ "title": "MathBlock",
31
+ "group": "elements-knowledge",
32
+ "components": [
33
+ "MathBlock",
34
+ "Frac",
35
+ "Sub",
36
+ "Sup"
37
+ ],
38
+ "code": "<Specimens>\n <Specimen label=\"worked through\" wide>\n <MathBlock label=\"illuminance at the deck\" steps={MATH} visibleSteps={MATH.length} />\n </Specimen>\n <Specimen label=\"first step only\" wide>\n <MathBlock steps={MATH} visibleSteps={1} />\n </Specimen>\n</Specimens>",
39
+ "note": "Maths with the working shown, a step at a time. The expressions are nodes rather than a string, so there is no parser and no KaTeX in the bundle — `Frac` stacks a numerator over a rule, `Sup` and `Sub` set an index upright inside the serif italic, and anything else is text.",
40
+ "interaction": "none. Each step's note says what justified it, which is what turns three lines of algebra into an explanation."
41
+ }
42
+ ],
43
+ "todo": true
44
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "SwapLabel",
3
+ "slug": "swap-label",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "Two labels stacked in one cell, with the box's width animating between them.\n\nA `ResizeObserver` measures the layer that is showing, because the crossfade\nis only half the effect — a \"Searching…\" that becomes \"Searched\" has to make\nthe row shrink, and neither layer can size the box while both are in it.\n\nThe layer that is leaving is `aria-hidden`, so the outgoing text is neither\nannounced nor copied into a selection.",
9
+ "props": [
10
+ {
11
+ "name": "active",
12
+ "type": "0 | 1",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "Which of the two children is showing."
16
+ },
17
+ {
18
+ "name": "children",
19
+ "type": "[ReactNode, ReactNode]",
20
+ "required": true,
21
+ "defaultValue": null,
22
+ "description": "Exactly two labels: the resting one and the active one."
23
+ },
24
+ {
25
+ "name": "className",
26
+ "type": "string",
27
+ "required": false,
28
+ "defaultValue": null,
29
+ "description": "Extra classes for the measured box."
30
+ }
31
+ ],
32
+ "typeReferences": [],
33
+ "subcomponents": [],
34
+ "parts": [],
35
+ "variants": {},
36
+ "defaultVariants": {},
37
+ "tokensUsed": [
38
+ "--cue-accent",
39
+ "--cue-accent-fg",
40
+ "--cue-accent-hover",
41
+ "--cue-border",
42
+ "--cue-border-overlay",
43
+ "--cue-fg",
44
+ "--cue-fg-muted",
45
+ "--cue-font-mono",
46
+ "--cue-stream",
47
+ "--cue-sunken",
48
+ "--cue-surface-1",
49
+ "--cue-surface-2",
50
+ "--cue-text-label"
51
+ ],
52
+ "summary": "Two labels stacked in one cell, with the box's width animating between them.",
53
+ "examples": [],
54
+ "status": "todo-docs",
55
+ "url": "/docs/components/swap-label",
56
+ "mdUrl": "/docs/components/swap-label.md",
57
+ "jsonUrl": "/r/components/swap-label.json",
58
+ "specimens": [
59
+ {
60
+ "title": "SwapLabel",
61
+ "group": "elements",
62
+ "components": [
63
+ "SwapLabel"
64
+ ],
65
+ "code": "<Specimens>\n <Specimen label={swapped === 0 ? \"active 0\" : \"active 1\"}>\n <span className=\"flex items-center gap-(--cue-space-3)\">\n <SwapLabel active={swapped}>\n <ShimmerLabel className=\"relative inline-block leading-none\">\n Patching universe 3\n </ShimmerLabel>\n <>Patched</>\n </SwapLabel>\n <Button size=\"sm\" onClick={() => setSwapped((current) => (current === 0 ? 1 : 0))}>\n Swap\n </Button>\n </span>\n </Specimen>\n</Specimens>",
66
+ "note": "Two labels in one cell, crossfading, with the box measuring itself to whichever is showing. The width is half the effect: 'Patching universe 3' becoming 'Patched' has to make the row shrink, and the outgoing layer is aria-hidden so it is neither announced nor copied.",
67
+ "interaction": "swap it and watch the box, not the text. Everything after the label on that row moves with it."
68
+ }
69
+ ],
70
+ "todo": true
71
+ }
@@ -0,0 +1,109 @@
1
+ {
2
+ "name": "TailStatus",
3
+ "slug": "tail-status",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The live row at the foot of a transcript: what the run is doing, right now.\n\nThe one row every shipping agent UI has and no component catalogue ships. It\nis not a spinner and not a toast — it is a transcript row with\n`role=\"status\"`, which is what makes it the *only* element in this family a\nscreen reader is told about without being asked. Everything else here is\ndrawn and left alone; this one announces itself politely each time the action\nchanges, which is exactly the behaviour a person who cannot see the spinner\nneeds and exactly the behaviour that becomes unbearable if it is used for\nanything else. One per transcript, at the foot, and nowhere else.\n\n**Unless something better is speaking.** {@link LiveRegionAnnouncer } is this\nfamily's other live region, and its table of transitions covers what this row\nnarrates; a console that mounts both would have the run read out twice. So\nmounting an announcer takes the speech away from this row automatically — the\nwords stay on the screen, the `role=\"status\"` goes, and `data-announces` says\nwhich of the two it is doing. {@link TailStatusProps.announce} overrules it in\neither direction.\n\nThe action and the detail are separate props rather than one composed string\nbecause they truncate differently: the action is short and must survive, the\ndetail is a path and must not push it off the row.\n\nState is a prop, as everywhere in this family. The row holds no timer, counts\nnothing, and does not know whether the run is healthy — `active` says whether\nthe sweep runs, `action` says what it says, and the caller changes both.",
11
+ "props": [
12
+ {
13
+ "name": "action",
14
+ "type": "string",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "What is happening, in two or three words: `Running commands`,\n`Searching the codebase`. `TAIL_ACTIONS` is the shipped vocabulary and this\nprop is a plain string, so a product with its own verbs is not stuck with\nthese ten."
18
+ },
19
+ {
20
+ "name": "detail",
21
+ "type": "string",
22
+ "required": false,
23
+ "defaultValue": null,
24
+ "description": "The thing the action is happening to — a path, a query, a topic. Truncates\non its own so the action never has to; a sidebar transcript is 280px wide\nand a status line that elides its verb has said nothing."
25
+ },
26
+ {
27
+ "name": "active",
28
+ "type": "boolean",
29
+ "required": false,
30
+ "defaultValue": "true",
31
+ "description": "Whether the action is still going. `true` by default, because this row is\nthe live one; turn it off for `Idle`, `Interrupted` and `Aborted`, which\nstops the sweep and empties the spinner's slot without moving the text."
32
+ },
33
+ {
34
+ "name": "updatesInPlace",
35
+ "type": "boolean",
36
+ "required": false,
37
+ "defaultValue": "true",
38
+ "description": "Whether a new `action` animates into the row that is already there, or\nsimply replaces the text.\n\nCursor's flag, and the reason it needs one: a narration line that changes\nevery few hundred milliseconds should read as one row being updated, while\na line that means something *different* should read as a new row. `true`\n(the default) keys the label on its own text so each new action fades in\nwhere the last one was; `false` leaves it unkeyed, and the words change\nwith no motion at all. A reduced-motion reader gets the second behaviour\neither way."
39
+ },
40
+ {
41
+ "name": "priority",
42
+ "type": "\"normal\" | \"attention\"",
43
+ "required": false,
44
+ "defaultValue": "normal",
45
+ "description": "How loudly this row is speaking. See {@link TailPriority}."
46
+ },
47
+ {
48
+ "name": "onCancel",
49
+ "type": "(() => void)",
50
+ "required": false,
51
+ "defaultValue": null,
52
+ "description": "Stop the run. The inline control exists only when this is given — Cursor's\nrule, and the right one: a Cancel that cannot cancel is worse than no\nCancel."
53
+ },
54
+ {
55
+ "name": "cancelLabel",
56
+ "type": "string",
57
+ "required": false,
58
+ "defaultValue": "Cancel",
59
+ "description": "What the stop control is called. `Cancel` is Cursor's word; opencode uses\n`Interrupt` and `Stop` for the same button."
60
+ },
61
+ {
62
+ "name": "announce",
63
+ "type": "boolean",
64
+ "required": false,
65
+ "defaultValue": null,
66
+ "description": "Whether this row is a live region — whether a screen reader is told each\ntime the action changes.\n\n**Answers itself by default, and that default is the interesting part.**\nLeft alone the row speaks when it is the only thing that can, and goes\nquiet the moment a {@link LiveRegionAnnouncer } is mounted anywhere on the\npage: the announcer's table covers the same transitions this row narrates,\nso a console with both — the ordinary composition — would otherwise have\nevery state read out twice, out of step, because the two regions update at\ndifferent moments.\n\nThe row is the one that defers because the announcer is the better speaker:\nit is a queue, spaced and depth-limited and paused while the page is hidden\nor a modal has the reader, and it is mounted empty and left mounted, which\nis the only way a live region is reliably announced. This row changes\nseveral times a second and comes and goes with the run.\n\nSet it explicitly to overrule that — `true` for a console whose announcer\nis fed something other than these actions, `false` for one that narrates\nthe foot of the transcript some other way. An explicit answer always wins."
67
+ }
68
+ ],
69
+ "typeReferences": [
70
+ "Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
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-stream",
82
+ "--cue-text-ui"
83
+ ],
84
+ "summary": "The live row at the foot of a transcript: what the run is doing, right now.",
85
+ "examples": [
86
+ {
87
+ "title": "Usage",
88
+ "code": "import { TailStatus, TAIL_ACTIONS } from \"@cueplusplus/ui/elements\";\n\n<TailStatus\n action={TAIL_ACTIONS.searchingCode}\n detail=\"composer.tsx\"\n onCancel={stop}\n/>\n// Settled: no sweep, no spinner, and the text changes without motion.\n<TailStatus action={TAIL_ACTIONS.interrupted} active={false} updatesInPlace={false} />\n// Composed with the announcer: this row draws the state, the queue speaks it.\n<>\n <TailStatus action={TAIL_ACTIONS.running} detail=\"pnpm test\" />\n <LiveRegionAnnouncer messages={log} />\n</>",
89
+ "language": "tsx"
90
+ }
91
+ ],
92
+ "status": "todo-docs",
93
+ "url": "/docs/components/tail-status",
94
+ "mdUrl": "/docs/components/tail-status.md",
95
+ "jsonUrl": "/r/components/tail-status.json",
96
+ "specimens": [
97
+ {
98
+ "title": "TailStatus",
99
+ "group": "elements-thread",
100
+ "components": [
101
+ "TailStatus"
102
+ ],
103
+ "code": "<Specimens>\n <Specimen label={stopped ? \"settled\" : \"live, cancellable\"} wide>\n <div className=\"w-full max-w-md\">\n <TailStatus\n action={stopped ? TAIL_ACTIONS.interrupted : TAIL_ACTIONS.running}\n detail={stopped ? undefined : \"ola-patch --universe 3\"}\n active={!stopped}\n updatesInPlace={!stopped}\n onCancel={stopped ? undefined : () => setStopped(true)}\n />\n </div>\n </Specimen>\n <Specimen label=\"thinking, with a topic\" wide>\n <div className=\"w-full max-w-md\">\n <TailStatus action={TAIL_ACTIONS.thinking} detail=\"which universe has room\" />\n </div>\n </Specimen>\n <Specimen label=\"attention\" wide>\n <div className=\"w-full max-w-md\">\n <TailStatus\n action=\"Waiting for you\"\n detail=\"approve the shell command\"\n priority=\"attention\"\n />\n </div>\n </Specimen>\n</Specimens>",
104
+ "note": "The live row at the foot of the transcript, and the only element in this family a screen reader is told about without being asked: it is a role=status, so each new action is announced politely as it lands — unless a LiveRegionAnnouncer is mounted, in which case it hands the speaking over and draws the state without saying it, because two polite regions narrating the same run is the transcript read out twice. Two props rather than one string — the action is short and must survive, the detail is a path and must not push it off a 280px sidebar — and an inline Cancel that exists only when there is something to cancel. The copy is TAIL_ACTIONS, a table, not ten strings baked into the markup.",
105
+ "interaction": "press Cancel and the row settles: the sweep stops, the spinner leaves its slot without the words moving, and the last thing it says is what stopped it. updatesInPlace goes off with it, because 'Interrupted' is a different sentence rather than the next frame of the same one."
106
+ }
107
+ ],
108
+ "todo": true
109
+ }