@cueplusplus/ui 0.3.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/CHANGELOG.md +2263 -0
  2. package/dist/agent-runtime/_glyphs.js +43 -0
  3. package/dist/agent-runtime/branch-picker.d.ts +45 -0
  4. package/dist/agent-runtime/branch-picker.js +87 -0
  5. package/dist/agent-runtime/index.d.ts +4 -0
  6. package/dist/agent-runtime/index.js +4 -0
  7. package/dist/agent-runtime/tool-call-card.d.ts +69 -0
  8. package/dist/agent-runtime/tool-call-card.js +187 -0
  9. package/dist/agent-runtime/use-agent-thread.d.ts +164 -0
  10. package/dist/agent-runtime/use-agent-thread.js +251 -0
  11. package/dist/chat/index.d.ts +2 -2
  12. package/dist/chat/message-list.d.ts +6 -0
  13. package/dist/chat/message-list.js +35 -0
  14. package/dist/chrome/_drag.js +59 -0
  15. package/dist/chrome/_status-bar-item.js +85 -0
  16. package/dist/chrome/_status-bar.d.ts +15 -0
  17. package/dist/chrome/_status-bar.js +171 -0
  18. package/dist/chrome/app-shell.d.ts +120 -2
  19. package/dist/chrome/app-shell.js +107 -8
  20. package/dist/chrome/index.d.ts +4 -3
  21. package/dist/chrome/status-bar.d.ts +87 -4
  22. package/dist/chrome/status-bar.js +80 -16
  23. package/dist/chrome/title-bar.d.ts +11 -1
  24. package/dist/chrome/title-bar.js +1 -3
  25. package/dist/configurator/_export.js +3 -2
  26. package/dist/configurator/_overrides.d.ts +1 -1
  27. package/dist/configurator/token-editor.js +4 -1
  28. package/dist/date/_segments.js +52 -6
  29. package/dist/elements/activity-graph.d.ts +40 -0
  30. package/dist/elements/activity-graph.js +81 -0
  31. package/dist/elements/agent-card.d.ts +49 -0
  32. package/dist/elements/agent-card.js +91 -0
  33. package/dist/elements/agent-handoff.d.ts +24 -0
  34. package/dist/elements/agent-handoff.js +53 -0
  35. package/dist/elements/agent-mode-badge.d.ts +72 -0
  36. package/dist/elements/agent-mode-badge.js +110 -0
  37. package/dist/elements/agent-plan.d.ts +24 -0
  38. package/dist/elements/agent-plan.js +74 -0
  39. package/dist/elements/agent-status.d.ts +29 -0
  40. package/dist/elements/agent-status.js +46 -0
  41. package/dist/elements/agent-surface.d.ts +65 -0
  42. package/dist/elements/agent-surface.js +68 -0
  43. package/dist/elements/animated-number.d.ts +86 -0
  44. package/dist/elements/animated-number.js +118 -0
  45. package/dist/elements/approval-card.d.ts +40 -0
  46. package/dist/elements/approval-card.js +78 -0
  47. package/dist/elements/artifact-card.d.ts +30 -0
  48. package/dist/elements/artifact-card.js +58 -0
  49. package/dist/elements/background-inbox.d.ts +39 -0
  50. package/dist/elements/background-inbox.js +60 -0
  51. package/dist/elements/canvas-split.d.ts +77 -0
  52. package/dist/elements/canvas-split.js +138 -0
  53. package/dist/elements/chart.d.ts +41 -0
  54. package/dist/elements/chart.js +117 -0
  55. package/dist/elements/chat-panel.d.ts +46 -0
  56. package/dist/elements/chat-panel.js +104 -0
  57. package/dist/elements/checkpoint-history.d.ts +31 -0
  58. package/dist/elements/checkpoint-history.js +65 -0
  59. package/dist/elements/clamp.d.ts +90 -0
  60. package/dist/elements/clamp.js +109 -0
  61. package/dist/elements/code-diff.d.ts +42 -0
  62. package/dist/elements/code-diff.js +69 -0
  63. package/dist/elements/code-runner.d.ts +38 -0
  64. package/dist/elements/code-runner.js +84 -0
  65. package/dist/elements/command-palette.d.ts +48 -0
  66. package/dist/elements/command-palette.js +129 -0
  67. package/dist/elements/compaction-row.d.ts +63 -0
  68. package/dist/elements/compaction-row.js +110 -0
  69. package/dist/elements/comparison-card.d.ts +47 -0
  70. package/dist/elements/comparison-card.js +69 -0
  71. package/dist/elements/composer.d.ts +274 -0
  72. package/dist/elements/composer.js +505 -0
  73. package/dist/elements/computer-use.d.ts +40 -0
  74. package/dist/elements/computer-use.js +92 -0
  75. package/dist/elements/confidence-marker.d.ts +39 -0
  76. package/dist/elements/confidence-marker.js +64 -0
  77. package/dist/elements/connection-state.d.ts +29 -0
  78. package/dist/elements/connection-state.js +66 -0
  79. package/dist/elements/context-breakdown.d.ts +30 -0
  80. package/dist/elements/context-breakdown.js +86 -0
  81. package/dist/elements/context-usage.d.ts +99 -0
  82. package/dist/elements/context-usage.js +225 -0
  83. package/dist/elements/conversation-search.d.ts +48 -0
  84. package/dist/elements/conversation-search.js +88 -0
  85. package/dist/elements/cost-meter.d.ts +33 -0
  86. package/dist/elements/cost-meter.js +75 -0
  87. package/dist/elements/data-table.d.ts +31 -0
  88. package/dist/elements/data-table.js +67 -0
  89. package/dist/elements/day-separator.d.ts +34 -0
  90. package/dist/elements/day-separator.js +50 -0
  91. package/dist/elements/diagram.d.ts +34 -0
  92. package/dist/elements/diagram.js +75 -0
  93. package/dist/elements/document-reference.d.ts +37 -0
  94. package/dist/elements/document-reference.js +66 -0
  95. package/dist/elements/draft-restore.d.ts +27 -0
  96. package/dist/elements/draft-restore.js +54 -0
  97. package/dist/elements/edit-message.d.ts +36 -0
  98. package/dist/elements/edit-message.js +77 -0
  99. package/dist/elements/elements.css +459 -0
  100. package/dist/elements/elicitation-form.d.ts +48 -0
  101. package/dist/elements/elicitation-form.js +106 -0
  102. package/dist/elements/empty-state.d.ts +52 -0
  103. package/dist/elements/empty-state.js +98 -0
  104. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  105. package/dist/elements/end-of-turn-summary.js +75 -0
  106. package/dist/elements/error-state.d.ts +29 -0
  107. package/dist/elements/error-state.js +55 -0
  108. package/dist/elements/feedback-dialog.d.ts +36 -0
  109. package/dist/elements/feedback-dialog.js +81 -0
  110. package/dist/elements/file-tree.d.ts +45 -0
  111. package/dist/elements/file-tree.js +84 -0
  112. package/dist/elements/flow-graph.d.ts +45 -0
  113. package/dist/elements/flow-graph.js +78 -0
  114. package/dist/elements/generative/chart.js +200 -0
  115. package/dist/elements/generative/faults.js +111 -0
  116. package/dist/elements/generative/icons.d.ts +41 -0
  117. package/dist/elements/generative/icons.js +190 -0
  118. package/dist/elements/generative/intrinsics.js +483 -0
  119. package/dist/elements/generative/spec.d.ts +110 -0
  120. package/dist/elements/generative/spec.js +366 -0
  121. package/dist/elements/generative.css +1145 -0
  122. package/dist/elements/generative.d.ts +144 -0
  123. package/dist/elements/generative.js +126 -0
  124. package/dist/elements/guardrail-notice.d.ts +29 -0
  125. package/dist/elements/guardrail-notice.js +63 -0
  126. package/dist/elements/image-generation.d.ts +18 -0
  127. package/dist/elements/image-generation.js +64 -0
  128. package/dist/elements/index.d.ts +116 -0
  129. package/dist/elements/index.js +115 -0
  130. package/dist/elements/inline-citation.d.ts +43 -0
  131. package/dist/elements/inline-citation.js +93 -0
  132. package/dist/elements/job-progress.d.ts +49 -0
  133. package/dist/elements/job-progress.js +74 -0
  134. package/dist/elements/launcher-bubble.d.ts +34 -0
  135. package/dist/elements/launcher-bubble.js +72 -0
  136. package/dist/elements/live-region-announcer.d.ts +130 -0
  137. package/dist/elements/live-region-announcer.js +230 -0
  138. package/dist/elements/loading-state.d.ts +27 -0
  139. package/dist/elements/loading-state.js +36 -0
  140. package/dist/elements/map-answer.d.ts +38 -0
  141. package/dist/elements/map-answer.js +93 -0
  142. package/dist/elements/markdown.d.ts +131 -0
  143. package/dist/elements/markdown.js +528 -0
  144. package/dist/elements/math-block.d.ts +51 -0
  145. package/dist/elements/math-block.js +70 -0
  146. package/dist/elements/mcp-server-panel.d.ts +41 -0
  147. package/dist/elements/mcp-server-panel.js +115 -0
  148. package/dist/elements/memory-chips.d.ts +30 -0
  149. package/dist/elements/memory-chips.js +43 -0
  150. package/dist/elements/message-actions.d.ts +38 -0
  151. package/dist/elements/message-actions.js +71 -0
  152. package/dist/elements/message-attachment.d.ts +48 -0
  153. package/dist/elements/message-attachment.js +63 -0
  154. package/dist/elements/message-branches.d.ts +25 -0
  155. package/dist/elements/message-branches.js +65 -0
  156. package/dist/elements/message-pair.d.ts +33 -0
  157. package/dist/elements/message-pair.js +65 -0
  158. package/dist/elements/message-queue.d.ts +31 -0
  159. package/dist/elements/message-queue.js +80 -0
  160. package/dist/elements/message-timing.d.ts +33 -0
  161. package/dist/elements/message-timing.js +37 -0
  162. package/dist/elements/mobile-composer.d.ts +44 -0
  163. package/dist/elements/mobile-composer.js +88 -0
  164. package/dist/elements/model-picker.d.ts +38 -0
  165. package/dist/elements/model-picker.js +69 -0
  166. package/dist/elements/number-ticker.d.ts +18 -0
  167. package/dist/elements/number-ticker.js +47 -0
  168. package/dist/elements/onboarding.d.ts +30 -0
  169. package/dist/elements/onboarding.js +75 -0
  170. package/dist/elements/permission-grant.d.ts +35 -0
  171. package/dist/elements/permission-grant.js +86 -0
  172. package/dist/elements/permission-scopes.d.ts +215 -0
  173. package/dist/elements/permission-scopes.js +249 -0
  174. package/dist/elements/prompt-library.d.ts +43 -0
  175. package/dist/elements/prompt-library.js +117 -0
  176. package/dist/elements/queue-dock.d.ts +101 -0
  177. package/dist/elements/queue-dock.js +132 -0
  178. package/dist/elements/quota-banner.d.ts +26 -0
  179. package/dist/elements/quota-banner.js +66 -0
  180. package/dist/elements/quote-reply.d.ts +44 -0
  181. package/dist/elements/quote-reply.js +79 -0
  182. package/dist/elements/range.d.ts +29 -0
  183. package/dist/elements/range.js +45 -0
  184. package/dist/elements/read-aloud.d.ts +45 -0
  185. package/dist/elements/read-aloud.js +75 -0
  186. package/dist/elements/reasoning-effort.d.ts +36 -0
  187. package/dist/elements/reasoning-effort.js +67 -0
  188. package/dist/elements/reasoning-panel.d.ts +46 -0
  189. package/dist/elements/reasoning-panel.js +75 -0
  190. package/dist/elements/recommendation-card.d.ts +45 -0
  191. package/dist/elements/recommendation-card.js +83 -0
  192. package/dist/elements/regenerate-menu.d.ts +45 -0
  193. package/dist/elements/regenerate-menu.js +51 -0
  194. package/dist/elements/replay.d.ts +217 -0
  195. package/dist/elements/replay.js +498 -0
  196. package/dist/elements/research-report.d.ts +38 -0
  197. package/dist/elements/research-report.js +69 -0
  198. package/dist/elements/retrieval-chunks.d.ts +43 -0
  199. package/dist/elements/retrieval-chunks.js +81 -0
  200. package/dist/elements/revert-dock.d.ts +159 -0
  201. package/dist/elements/revert-dock.js +327 -0
  202. package/dist/elements/reviewable-diff.d.ts +45 -0
  203. package/dist/elements/reviewable-diff.js +110 -0
  204. package/dist/elements/risk-badge.d.ts +52 -0
  205. package/dist/elements/risk-badge.js +91 -0
  206. package/dist/elements/schedule-card.d.ts +42 -0
  207. package/dist/elements/schedule-card.js +90 -0
  208. package/dist/elements/score-breakdown.d.ts +47 -0
  209. package/dist/elements/score-breakdown.js +82 -0
  210. package/dist/elements/scroll-anchor.d.ts +32 -0
  211. package/dist/elements/scroll-anchor.js +121 -0
  212. package/dist/elements/settings-panel.d.ts +52 -0
  213. package/dist/elements/settings-panel.js +107 -0
  214. package/dist/elements/shared-conversation.d.ts +39 -0
  215. package/dist/elements/shared-conversation.js +68 -0
  216. package/dist/elements/sources.d.ts +33 -0
  217. package/dist/elements/sources.js +61 -0
  218. package/dist/elements/speaker-identity.d.ts +32 -0
  219. package/dist/elements/speaker-identity.js +51 -0
  220. package/dist/elements/spec-sheet.d.ts +31 -0
  221. package/dist/elements/spec-sheet.js +45 -0
  222. package/dist/elements/stopped-run.d.ts +22 -0
  223. package/dist/elements/stopped-run.js +50 -0
  224. package/dist/elements/streaming-text.d.ts +31 -0
  225. package/dist/elements/streaming-text.js +45 -0
  226. package/dist/elements/subagent-list.d.ts +37 -0
  227. package/dist/elements/subagent-list.js +79 -0
  228. package/dist/elements/suggestions.d.ts +30 -0
  229. package/dist/elements/suggestions.js +36 -0
  230. package/dist/elements/surfaces.d.ts +85 -0
  231. package/dist/elements/surfaces.js +107 -0
  232. package/dist/elements/tail-status.d.ts +131 -0
  233. package/dist/elements/tail-status.js +94 -0
  234. package/dist/elements/terminal-block.d.ts +29 -0
  235. package/dist/elements/terminal-block.js +54 -0
  236. package/dist/elements/thinking-indicator.d.ts +18 -0
  237. package/dist/elements/thinking-indicator.js +36 -0
  238. package/dist/elements/thread-list.d.ts +35 -0
  239. package/dist/elements/thread-list.js +68 -0
  240. package/dist/elements/thread-search.d.ts +42 -0
  241. package/dist/elements/thread-search.js +99 -0
  242. package/dist/elements/timeline.d.ts +37 -0
  243. package/dist/elements/timeline.js +46 -0
  244. package/dist/elements/todo-list.d.ts +42 -0
  245. package/dist/elements/todo-list.js +59 -0
  246. package/dist/elements/tool-call.d.ts +41 -0
  247. package/dist/elements/tool-call.js +85 -0
  248. package/dist/elements/tool-error.d.ts +39 -0
  249. package/dist/elements/tool-error.js +76 -0
  250. package/dist/elements/tool-group.d.ts +45 -0
  251. package/dist/elements/tool-group.js +71 -0
  252. package/dist/elements/tool-timeline.d.ts +65 -0
  253. package/dist/elements/tool-timeline.js +88 -0
  254. package/dist/elements/trace-waterfall.d.ts +37 -0
  255. package/dist/elements/trace-waterfall.js +69 -0
  256. package/dist/elements/transcript-rules.d.ts +67 -0
  257. package/dist/elements/transcript-rules.js +95 -0
  258. package/dist/elements/turn-footer.d.ts +74 -0
  259. package/dist/elements/turn-footer.js +101 -0
  260. package/dist/elements/typing-indicator.d.ts +16 -0
  261. package/dist/elements/typing-indicator.js +51 -0
  262. package/dist/elements/verdict-row.d.ts +89 -0
  263. package/dist/elements/verdict-row.js +150 -0
  264. package/dist/elements/vocabulary.d.ts +612 -0
  265. package/dist/elements/vocabulary.js +611 -0
  266. package/dist/elements/voice-conversation.d.ts +49 -0
  267. package/dist/elements/voice-conversation.js +123 -0
  268. package/dist/elements/web-preview.d.ts +32 -0
  269. package/dist/elements/web-preview.js +66 -0
  270. package/dist/elements/web-search.d.ts +37 -0
  271. package/dist/elements/web-search.js +66 -0
  272. package/dist/elements/work-collapse.d.ts +103 -0
  273. package/dist/elements/work-collapse.js +131 -0
  274. package/dist/forms/_chassis.d.ts +104 -4
  275. package/dist/forms/_chassis.js +104 -4
  276. package/dist/forms/input-group.d.ts +8 -3
  277. package/dist/forms/input-group.js +8 -3
  278. package/dist/forms/number-field.d.ts +3 -2
  279. package/dist/forms/number-field.js +3 -2
  280. package/dist/icons/containers.d.ts +89 -0
  281. package/dist/icons/containers.js +295 -0
  282. package/dist/icons/index.d.ts +2 -0
  283. package/dist/index.d.ts +12 -6
  284. package/dist/index.js +5 -1
  285. package/dist/instruments/_data-row.js +118 -0
  286. package/dist/instruments/data-row.d.ts +94 -0
  287. package/dist/instruments/data-row.js +151 -0
  288. package/dist/instruments/data-tree.d.ts +126 -0
  289. package/dist/instruments/data-tree.js +303 -0
  290. package/dist/instruments/index.d.ts +5 -2
  291. package/dist/instruments/index.js +4 -1
  292. package/dist/instruments/ledger.d.ts +105 -0
  293. package/dist/instruments/ledger.js +114 -0
  294. package/dist/instruments/table.d.ts +70 -2
  295. package/dist/instruments/table.js +133 -39
  296. package/dist/instruments/two-step-button.js +25 -6
  297. package/dist/layout/sidebar.d.ts +19 -1
  298. package/dist/layout/sidebar.js +19 -1
  299. package/dist/primitives/button.js +11 -1
  300. package/dist/primitives/chip.d.ts +35 -9
  301. package/dist/primitives/chip.js +97 -11
  302. package/dist/system/agent-skin.d.ts +27 -0
  303. package/dist/system/agent-skin.js +20 -0
  304. package/dist/system/portal.d.ts +5 -3
  305. package/dist/system/portal.js +19 -5
  306. package/dist/system/theme-provider.js +54 -9
  307. package/dist/system/use-density.d.ts +9 -0
  308. package/dist/system/use-density.js +9 -0
  309. package/dist/system/use-isomorphic-layout-effect.js +19 -1
  310. package/dist/theming/_presets.d.ts +1 -1
  311. package/dist/theming/_presets.js +74 -11
  312. package/dist/theming/contrast.d.ts +16 -4
  313. package/dist/theming/contrast.js +33 -6
  314. package/dist/theming/create-theme.d.ts +6 -2
  315. package/dist/theming/create-theme.js +32 -5
  316. package/dist/theming/serialize.d.ts +10 -1
  317. package/dist/theming/serialize.js +62 -8
  318. package/manifest/components/activity-graph.json +88 -0
  319. package/manifest/components/agent-card.json +120 -0
  320. package/manifest/components/agent-handoff.json +87 -0
  321. package/manifest/components/agent-mode-badge.json +84 -0
  322. package/manifest/components/agent-plan.json +67 -0
  323. package/manifest/components/agent-status.json +73 -0
  324. package/manifest/components/agent-surface.json +78 -0
  325. package/manifest/components/alert-dialog.json +1 -1
  326. package/manifest/components/animated-number.json +67 -0
  327. package/manifest/components/app-shell.json +142 -9
  328. package/manifest/components/approval-card.json +106 -0
  329. package/manifest/components/artifact-card.json +81 -0
  330. package/manifest/components/audience-icon.json +52 -0
  331. package/manifest/components/autocomplete.json +2 -0
  332. package/manifest/components/background-inbox.json +71 -0
  333. package/manifest/components/branch-picker.json +124 -0
  334. package/manifest/components/button.json +1 -0
  335. package/manifest/components/canvas-split-body.json +62 -0
  336. package/manifest/components/canvas-split-document.json +54 -0
  337. package/manifest/components/canvas-split-header.json +83 -0
  338. package/manifest/components/canvas-split-line.json +62 -0
  339. package/manifest/components/canvas-split-message.json +62 -0
  340. package/manifest/components/canvas-split-thread.json +54 -0
  341. package/manifest/components/canvas-split.json +60 -0
  342. package/manifest/components/catalogue-icon.json +52 -0
  343. package/manifest/components/channel-beta-icon.json +52 -0
  344. package/manifest/components/channel-released-icon.json +52 -0
  345. package/manifest/components/chart.json +93 -0
  346. package/manifest/components/chat-empty-state.json +55 -0
  347. package/manifest/components/chat-panel-assistant-message.json +51 -0
  348. package/manifest/components/chat-panel-composer.json +66 -0
  349. package/manifest/components/chat-panel-messages.json +51 -0
  350. package/manifest/components/chat-panel-typing.json +51 -0
  351. package/manifest/components/chat-panel-user-message.json +51 -0
  352. package/manifest/components/chat-panel.json +57 -0
  353. package/manifest/components/checkpoint-history.json +80 -0
  354. package/manifest/components/chip.json +24 -12
  355. package/manifest/components/clamp.json +102 -0
  356. package/manifest/components/cli-tool-icon.json +52 -0
  357. package/manifest/components/code-diff.json +87 -0
  358. package/manifest/components/code-runner.json +97 -0
  359. package/manifest/components/color-field.json +2 -0
  360. package/manifest/components/color-picker.json +2 -0
  361. package/manifest/components/combobox.json +2 -0
  362. package/manifest/components/compaction-row.json +100 -0
  363. package/manifest/components/comparison-card.json +83 -0
  364. package/manifest/components/composer-actions.json +65 -0
  365. package/manifest/components/composer-attach-button.json +65 -0
  366. package/manifest/components/composer-attachment-chip.json +75 -0
  367. package/manifest/components/composer-attachments.json +60 -0
  368. package/manifest/components/composer-bar.json +73 -0
  369. package/manifest/components/composer-command-item.json +79 -0
  370. package/manifest/components/composer-context.json +67 -0
  371. package/manifest/components/composer-input.json +73 -0
  372. package/manifest/components/composer-menu-item.json +72 -0
  373. package/manifest/components/composer-menu.json +79 -0
  374. package/manifest/components/composer-model-item.json +75 -0
  375. package/manifest/components/composer-model-trigger.json +75 -0
  376. package/manifest/components/composer-person-item.json +79 -0
  377. package/manifest/components/composer-send.json +80 -0
  378. package/manifest/components/composer-toolbar.json +65 -0
  379. package/manifest/components/composer-voice-button.json +68 -0
  380. package/manifest/components/composer-voice.json +75 -0
  381. package/manifest/components/composer.json +2 -0
  382. package/manifest/components/computer-use.json +84 -0
  383. package/manifest/components/confidence-marker.json +74 -0
  384. package/manifest/components/connection-state.json +84 -0
  385. package/manifest/components/context-breakdown.json +65 -0
  386. package/manifest/components/context-usage.json +85 -0
  387. package/manifest/components/conversation-search.json +92 -0
  388. package/manifest/components/cost-meter.json +74 -0
  389. package/manifest/components/cue-portal-frame.json +1 -1
  390. package/manifest/components/data-row.json +203 -0
  391. package/manifest/components/data-tree.json +151 -0
  392. package/manifest/components/date-field.json +2 -0
  393. package/manifest/components/date-picker.json +2 -0
  394. package/manifest/components/date-range-picker.json +2 -0
  395. package/manifest/components/day-separator.json +58 -0
  396. package/manifest/components/delegation-card.json +1 -1
  397. package/manifest/components/density.json +1 -1
  398. package/manifest/components/diagram.json +100 -0
  399. package/manifest/components/document-reference.json +90 -0
  400. package/manifest/components/draft-restore.json +82 -0
  401. package/manifest/components/drawer.json +1 -1
  402. package/manifest/components/dropdown-menu.json +1 -1
  403. package/manifest/components/edit-message.json +105 -0
  404. package/manifest/components/elements-command-palette.json +100 -0
  405. package/manifest/components/elements-composer.json +71 -0
  406. package/manifest/components/elements-data-table.json +68 -0
  407. package/manifest/components/elements-timeline.json +69 -0
  408. package/manifest/components/elicitation-form.json +103 -0
  409. package/manifest/components/empty-state-composer.json +64 -0
  410. package/manifest/components/empty-state-greeting.json +49 -0
  411. package/manifest/components/empty-state-suggestion.json +57 -0
  412. package/manifest/components/empty-state-suggestions.json +49 -0
  413. package/manifest/components/end-of-turn-summary.json +77 -0
  414. package/manifest/components/env-var-input.json +2 -0
  415. package/manifest/components/error-state.json +80 -0
  416. package/manifest/components/feedback-dialog.json +107 -0
  417. package/manifest/components/file-tree.json +83 -0
  418. package/manifest/components/flow-graph.json +75 -0
  419. package/manifest/components/folder-icon.json +52 -0
  420. package/manifest/components/frac.json +59 -0
  421. package/manifest/components/generation-loader.json +64 -0
  422. package/manifest/components/generative-ui.json +93 -0
  423. package/manifest/components/guardrail-notice.json +91 -0
  424. package/manifest/components/hover-card.json +1 -1
  425. package/manifest/components/image-generation.json +67 -0
  426. package/manifest/components/info-tip.json +1 -1
  427. package/manifest/components/inline-citation.json +77 -0
  428. package/manifest/components/input-group.json +4 -2
  429. package/manifest/components/input.json +3 -1
  430. package/manifest/components/job-progress.json +96 -0
  431. package/manifest/components/launcher-bubble.json +105 -0
  432. package/manifest/components/ledger.json +187 -0
  433. package/manifest/components/live-region-announcer.json +79 -0
  434. package/manifest/components/map-answer.json +83 -0
  435. package/manifest/components/markdown-text.json +94 -0
  436. package/manifest/components/math-block.json +74 -0
  437. package/manifest/components/mcp-server-icon.json +52 -0
  438. package/manifest/components/mcp-server-panel.json +87 -0
  439. package/manifest/components/memory-chips.json +65 -0
  440. package/manifest/components/message-actions.json +99 -0
  441. package/manifest/components/message-attachments.json +63 -0
  442. package/manifest/components/message-branches.json +71 -0
  443. package/manifest/components/message-list.json +1 -1
  444. package/manifest/components/message-pair.json +86 -0
  445. package/manifest/components/message-queue.json +74 -0
  446. package/manifest/components/message-timing.json +62 -0
  447. package/manifest/components/mobile-composer.json +126 -0
  448. package/manifest/components/model-picker.json +76 -0
  449. package/manifest/components/multi-select.json +2 -0
  450. package/manifest/components/musical-time-input.json +2 -0
  451. package/manifest/components/node-card.json +1 -1
  452. package/manifest/components/node-handle.json +1 -1
  453. package/manifest/components/number-field.json +3 -1
  454. package/manifest/components/number-ticker.json +61 -0
  455. package/manifest/components/onboarding.json +84 -0
  456. package/manifest/components/otp-field.json +9 -7
  457. package/manifest/components/password-input.json +2 -0
  458. package/manifest/components/permission-grant.json +92 -0
  459. package/manifest/components/permission-scopes.json +139 -0
  460. package/manifest/components/popover.json +1 -1
  461. package/manifest/components/prompt-library.json +99 -0
  462. package/manifest/components/queue-dock.json +110 -0
  463. package/manifest/components/quota-banner.json +94 -0
  464. package/manifest/components/quote-reply.json +105 -0
  465. package/manifest/components/read-aloud.json +111 -0
  466. package/manifest/components/reasoning-effort.json +81 -0
  467. package/manifest/components/reasoning-panel.json +108 -0
  468. package/manifest/components/recommendation-card.json +107 -0
  469. package/manifest/components/regenerate-menu.json +89 -0
  470. package/manifest/components/replay-player.json +102 -0
  471. package/manifest/components/research-report.json +76 -0
  472. package/manifest/components/retrieval-chunks.json +84 -0
  473. package/manifest/components/revert-dock.json +150 -0
  474. package/manifest/components/reviewable-diff.json +93 -0
  475. package/manifest/components/risk-badge.json +74 -0
  476. package/manifest/components/schedule-card.json +101 -0
  477. package/manifest/components/score-breakdown.json +91 -0
  478. package/manifest/components/scroll-anchor.json +72 -0
  479. package/manifest/components/scroll-area.json +7 -7
  480. package/manifest/components/scrub-input.json +2 -0
  481. package/manifest/components/search-input.json +9 -7
  482. package/manifest/components/segmented-control.json +21 -21
  483. package/manifest/components/select.json +1 -0
  484. package/manifest/components/settings-panel.json +118 -0
  485. package/manifest/components/shared-conversation.json +89 -0
  486. package/manifest/components/shimmer-label.json +59 -0
  487. package/manifest/components/skill-icon.json +52 -0
  488. package/manifest/components/sources.json +83 -0
  489. package/manifest/components/speaker-identity.json +61 -0
  490. package/manifest/components/spec-sheet.json +80 -0
  491. package/manifest/components/stack-icon.json +52 -0
  492. package/manifest/components/stacks-matrix-icon.json +52 -0
  493. package/manifest/components/stat.json +1 -1
  494. package/manifest/components/status-bar.json +146 -12
  495. package/manifest/components/status-dot.json +1 -1
  496. package/manifest/components/stopped-run.json +81 -0
  497. package/manifest/components/streaming-text.json +71 -0
  498. package/manifest/components/sub.json +44 -0
  499. package/manifest/components/subagent-list.json +88 -0
  500. package/manifest/components/suggestions.json +84 -0
  501. package/manifest/components/sup.json +44 -0
  502. package/manifest/components/swap-label.json +71 -0
  503. package/manifest/components/table-scroll-region.json +6 -0
  504. package/manifest/components/table.json +88 -4
  505. package/manifest/components/tags-input.json +2 -0
  506. package/manifest/components/tail-status.json +109 -0
  507. package/manifest/components/terminal-block.json +91 -0
  508. package/manifest/components/textarea.json +3 -1
  509. package/manifest/components/theme-provider.json +2 -2
  510. package/manifest/components/thinking-indicator.json +63 -0
  511. package/manifest/components/thread-list.json +76 -0
  512. package/manifest/components/thread-search.json +90 -0
  513. package/manifest/components/threshold-rail.json +2 -2
  514. package/manifest/components/time-boundary.json +62 -0
  515. package/manifest/components/time-field.json +2 -0
  516. package/manifest/components/timeline.json +1 -1
  517. package/manifest/components/title-bar.json +1 -1
  518. package/manifest/components/todo-list.json +69 -0
  519. package/manifest/components/toggle-group.json +9 -7
  520. package/manifest/components/toggle.json +2 -0
  521. package/manifest/components/token-editor.json +1 -1
  522. package/manifest/components/tool-call-card.json +200 -0
  523. package/manifest/components/tool-call.json +119 -0
  524. package/manifest/components/tool-error.json +114 -0
  525. package/manifest/components/tool-group.json +83 -0
  526. package/manifest/components/tool-timeline.json +119 -0
  527. package/manifest/components/toolbar.json +7 -7
  528. package/manifest/components/tooltip.json +1 -1
  529. package/manifest/components/trace-waterfall.json +74 -0
  530. package/manifest/components/turn-footer.json +105 -0
  531. package/manifest/components/typing-indicator.json +53 -0
  532. package/manifest/components/unread-divider.json +55 -0
  533. package/manifest/components/usage-chart.json +1 -1
  534. package/manifest/components/verdict-row.json +91 -0
  535. package/manifest/components/voice-conversation.json +109 -0
  536. package/manifest/components/web-preview.json +87 -0
  537. package/manifest/components/web-search.json +92 -0
  538. package/manifest/components/work-collapse.json +102 -0
  539. package/manifest/manifest.json +2736 -60
  540. package/manifest/tokens.json +22 -1
  541. package/package.json +44 -2
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "SpecSheet",
3
+ "slug": "spec-sheet",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "The most common structured answer after a table: one object, labeled.",
9
+ "props": [
10
+ {
11
+ "name": "title",
12
+ "type": "string",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "What the sheet describes."
16
+ },
17
+ {
18
+ "name": "subtitle",
19
+ "type": "string",
20
+ "required": false,
21
+ "defaultValue": null,
22
+ "description": "Secondary identifier: a model id, a SKU, a version."
23
+ },
24
+ {
25
+ "name": "rows",
26
+ "type": "readonly SpecRow[]",
27
+ "required": true,
28
+ "defaultValue": null,
29
+ "description": "Label and value pairs. Values are pre-formatted and right-aligned on tabular figures."
30
+ },
31
+ {
32
+ "name": "visibleCount",
33
+ "type": "number",
34
+ "required": true,
35
+ "defaultValue": null,
36
+ "description": "How many rows have landed."
37
+ }
38
+ ],
39
+ "typeReferences": [
40
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"title\" | \"subtitle\" | \"rows\" | \"visibleCount\"\n> & {\n /** What the sheet describes. */\n title: string;\n /** Secondary identifier: a model id, a SKU, a version. */\n subtitle?: string;\n /** Label and value pairs. Values are pre-formatted and right-aligned on tabular figures. */\n rows: readonly SpecRow[];\n /** How many rows have landed. */\n visibleCount: number;\n}"
41
+ ],
42
+ "subcomponents": [],
43
+ "parts": [],
44
+ "variants": {},
45
+ "defaultVariants": {},
46
+ "tokensUsed": [
47
+ "--cue-border",
48
+ "--cue-fg",
49
+ "--cue-fg-muted",
50
+ "--cue-fg-subtle",
51
+ "--cue-radius-overlay",
52
+ "--cue-text-body",
53
+ "--cue-text-ui"
54
+ ],
55
+ "summary": "The most common structured answer after a table: one object, labeled.",
56
+ "examples": [
57
+ {
58
+ "title": "Usage",
59
+ "code": "import { SpecSheet } from \"@cueplusplus/ui/elements\";\n\n<SpecSheet title=\"Opus 5\" subtitle=\"claude-opus-5\" rows={rows} visibleCount={6} />",
60
+ "language": "tsx"
61
+ }
62
+ ],
63
+ "status": "todo-docs",
64
+ "url": "/docs/components/spec-sheet",
65
+ "mdUrl": "/docs/components/spec-sheet.md",
66
+ "jsonUrl": "/r/components/spec-sheet.json",
67
+ "specimens": [
68
+ {
69
+ "title": "SpecSheet",
70
+ "group": "elements-knowledge",
71
+ "components": [
72
+ "SpecSheet"
73
+ ],
74
+ "code": "<Specimens>\n <Specimen label=\"the whole sheet\" wide>\n <SpecSheet\n title=\"Robe ESPRITE\"\n subtitle=\"as configured for the front truss\"\n rows={SPEC}\n visibleCount={SPEC.length}\n />\n </Specimen>\n <Specimen label=\"arriving\" wide>\n <SpecSheet title=\"Robe ESPRITE\" rows={SPEC} visibleCount={3} />\n </Specimen>\n</Specimens>",
75
+ "note": "One object, labelled — the commonest structured answer after a table. Labels sit in mono on the leading edge and values in tabular figures on the trailing one, so a column of numbers lines up even though nothing here is a table. `emphasis` promotes the one row that answers the question.",
76
+ "interaction": "none. `visibleCount` is what makes it arrive a row at a time instead of appearing whole."
77
+ }
78
+ ],
79
+ "todo": true
80
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "StackIcon",
3
+ "slug": "stack-icon",
4
+ "group": "icons",
5
+ "importPath": "@cueplusplus/ui",
6
+ "peerDependencies": [],
7
+ "clientOnly": false,
8
+ "description": "One person's stack: the set of things they have actually installed.\n\nPlates seen edge-on — the layers idiom — because a stack is an accumulation\nand not a container: things go into it one at a time and the order they went\nin is part of what it is.",
9
+ "props": [],
10
+ "typeReferences": [
11
+ "React.SVGProps<SVGSVGElement>"
12
+ ],
13
+ "subcomponents": [],
14
+ "parts": [],
15
+ "variants": {},
16
+ "defaultVariants": {},
17
+ "tokensUsed": [
18
+ "--cue-danger",
19
+ "--cue-fg",
20
+ "--cue-icon-",
21
+ "--cue-icon-md",
22
+ "--cue-icon-sm"
23
+ ],
24
+ "summary": "One person's stack: the set of things they have actually installed.",
25
+ "examples": [],
26
+ "status": "todo-docs",
27
+ "url": "/docs/components/stack-icon",
28
+ "mdUrl": "/docs/components/stack-icon.md",
29
+ "jsonUrl": "/r/components/stack-icon.json",
30
+ "specimens": [
31
+ {
32
+ "title": "The container icon set",
33
+ "group": "icons",
34
+ "components": [
35
+ "CatalogueIcon",
36
+ "StackIcon",
37
+ "StacksMatrixIcon",
38
+ "AudienceIcon",
39
+ "ChannelReleasedIcon",
40
+ "ChannelBetaIcon",
41
+ "FolderIcon",
42
+ "McpServerIcon",
43
+ "CliToolIcon",
44
+ "SkillIcon"
45
+ ],
46
+ "code": "<Specimens>\n {CONTAINERS.map(([label, name, Icon]) => (\n <Specimen key={name} label={label}>\n <Icon className=\"size-icon-md text-fg\" />\n </Specimen>\n ))}\n</Specimens>\n<Specimens>\n <Specimen label=\"icon-sm\">\n <SkillIcon className=\"size-icon-sm text-fg\" />\n </Specimen>\n <Specimen label=\"icon-md\">\n <SkillIcon className=\"size-icon-md text-fg\" />\n </Specimen>\n <Specimen label=\"inherited\">\n <SkillIcon className=\"size-icon-md\" />\n </Specimen>\n <Specimen label=\"muted\">\n <SkillIcon className=\"size-icon-md text-fg-muted\" />\n </Specimen>\n <Specimen label=\"accent\">\n <SkillIcon className=\"size-icon-md text-accent\" />\n </Specimen>\n <Specimen label=\"danger\">\n <SkillIcon className=\"size-icon-md text-danger\" />\n </Specimen>\n</Specimens>\n<Specimens>\n <Specimen label=\"in a row\" wide>\n <span className=\"inline-flex items-center gap-(--cue-space-2) font-mono text-(length:--cue-text-ui) text-fg-muted\">\n <ChannelReleasedIcon className=\"size-icon-md shrink-0\" />\n Our skills · released\n </span>\n </Specimen>\n <Specimen label=\"current row\" wide>\n <span className=\"inline-flex items-center gap-(--cue-space-2) font-mono text-(length:--cue-text-ui) text-fg\">\n <ChannelBetaIcon className=\"size-icon-md shrink-0\" />\n Our skills · beta\n </span>\n </Specimen>\n</Specimens>",
47
+ "note": "One grid and one weight across all ten, at size-icon-md — the size a navigation row draws them at. Each is a plain <svg> that takes every SVG prop.",
48
+ "interaction": "none. They are decorative by default: aria-hidden, announced by nothing, because the row they mark already carries its name."
49
+ }
50
+ ],
51
+ "todo": true
52
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "StacksMatrixIcon",
3
+ "slug": "stacks-matrix-icon",
4
+ "group": "icons",
5
+ "importPath": "@cueplusplus/ui",
6
+ "peerDependencies": [],
7
+ "clientOnly": false,
8
+ "description": "Every stack at once, one column each: who has what, read across.\n\nA table rather than more plates. The head rule and the name column are what\nmake it a matrix instead of a grid — the question it answers is \"which of\nthese does that person not have\", and that is a question with two axes.",
9
+ "props": [],
10
+ "typeReferences": [
11
+ "React.SVGProps<SVGSVGElement>"
12
+ ],
13
+ "subcomponents": [],
14
+ "parts": [],
15
+ "variants": {},
16
+ "defaultVariants": {},
17
+ "tokensUsed": [
18
+ "--cue-danger",
19
+ "--cue-fg",
20
+ "--cue-icon-",
21
+ "--cue-icon-md",
22
+ "--cue-icon-sm"
23
+ ],
24
+ "summary": "Every stack at once, one column each: who has what, read across.",
25
+ "examples": [],
26
+ "status": "todo-docs",
27
+ "url": "/docs/components/stacks-matrix-icon",
28
+ "mdUrl": "/docs/components/stacks-matrix-icon.md",
29
+ "jsonUrl": "/r/components/stacks-matrix-icon.json",
30
+ "specimens": [
31
+ {
32
+ "title": "The container icon set",
33
+ "group": "icons",
34
+ "components": [
35
+ "CatalogueIcon",
36
+ "StackIcon",
37
+ "StacksMatrixIcon",
38
+ "AudienceIcon",
39
+ "ChannelReleasedIcon",
40
+ "ChannelBetaIcon",
41
+ "FolderIcon",
42
+ "McpServerIcon",
43
+ "CliToolIcon",
44
+ "SkillIcon"
45
+ ],
46
+ "code": "<Specimens>\n {CONTAINERS.map(([label, name, Icon]) => (\n <Specimen key={name} label={label}>\n <Icon className=\"size-icon-md text-fg\" />\n </Specimen>\n ))}\n</Specimens>\n<Specimens>\n <Specimen label=\"icon-sm\">\n <SkillIcon className=\"size-icon-sm text-fg\" />\n </Specimen>\n <Specimen label=\"icon-md\">\n <SkillIcon className=\"size-icon-md text-fg\" />\n </Specimen>\n <Specimen label=\"inherited\">\n <SkillIcon className=\"size-icon-md\" />\n </Specimen>\n <Specimen label=\"muted\">\n <SkillIcon className=\"size-icon-md text-fg-muted\" />\n </Specimen>\n <Specimen label=\"accent\">\n <SkillIcon className=\"size-icon-md text-accent\" />\n </Specimen>\n <Specimen label=\"danger\">\n <SkillIcon className=\"size-icon-md text-danger\" />\n </Specimen>\n</Specimens>\n<Specimens>\n <Specimen label=\"in a row\" wide>\n <span className=\"inline-flex items-center gap-(--cue-space-2) font-mono text-(length:--cue-text-ui) text-fg-muted\">\n <ChannelReleasedIcon className=\"size-icon-md shrink-0\" />\n Our skills · released\n </span>\n </Specimen>\n <Specimen label=\"current row\" wide>\n <span className=\"inline-flex items-center gap-(--cue-space-2) font-mono text-(length:--cue-text-ui) text-fg\">\n <ChannelBetaIcon className=\"size-icon-md shrink-0\" />\n Our skills · beta\n </span>\n </Specimen>\n</Specimens>",
47
+ "note": "One grid and one weight across all ten, at size-icon-md — the size a navigation row draws them at. Each is a plain <svg> that takes every SVG prop.",
48
+ "interaction": "none. They are decorative by default: aria-hidden, announced by nothing, because the row they mark already carries its name."
49
+ }
50
+ ],
51
+ "todo": true
52
+ }
@@ -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\"`."
@@ -5,11 +5,100 @@
5
5
  "importPath": "@cueplusplus/ui",
6
6
  "peerDependencies": [],
7
7
  "clientOnly": false,
8
- "description": "The quiet strip along the bottom of a window.\n\nThe smallest type in the system in the subtlest ink: a status bar is read\nwhen you go looking for it and ignored otherwise, so it must never compete\nwith the work above it. Height comes from `--cue-chrome-statusbar`.\n\nNot a live region — a status bar changes constantly (frame counters, DMX\noutput), and announcing every change would make the app unusable with a\nscreen reader. Put anything that genuinely must be announced in a `Toast`.\n\nStatic markup — no `\"use client\"`.",
8
+ "description": "The quiet strip along the bottom of a window.\n\nThe smallest type in the system in the subtlest ink: a status bar is read\nwhen you go looking for it and ignored otherwise, so it must never compete\nwith the work above it. Height comes from `--cue-chrome-statusbar`, and the\nbar clips rather than wrapping — one rung of the frame, always, whatever it\nis asked to hold.\n\nItems come in two kinds and the difference is deliberate. A plain\n`StatusBar.Item` is a **reading**: a `<div>`, inert by construction, with no\nhover, no focus and nothing to click — which is what most of a status bar is.\n`interactive` (or a `render`) makes one a **control**, and only then does it\ngrow the button chassis, the full-height hover fill and the inset focus ring.\n`StatusBar.Group` fuses adjacent items into one segmented control.\n\nNot a live region — a status bar changes constantly (frame counters, DMX\noutput), and announcing every change would make the app unusable with a\nscreen reader. Put anything that genuinely must be announced in a `Toast`.\n\nStatic markup — no `\"use client\"`. A bar of readings renders on the server\nand ships no JavaScript at all; the interactive item is the one part that\ncrosses the boundary, and it crosses it alone (`./_status-bar-item.tsx`).",
9
9
  "props": [],
10
- "typeReferences": [],
11
- "subcomponents": [],
12
- "parts": [],
10
+ "typeReferences": [
11
+ "React.ComponentPropsWithoutRef<\"div\">"
12
+ ],
13
+ "subcomponents": [
14
+ "Item",
15
+ "Group"
16
+ ],
17
+ "parts": [
18
+ {
19
+ "name": "Item",
20
+ "usage": "StatusBar.Item",
21
+ "description": "One reading in the bar: a mode, a count, a connection state — or, given\n`interactive`, one control in it.",
22
+ "props": [
23
+ {
24
+ "name": "tone",
25
+ "type": "\"accent\" | \"danger\" | \"busy\" | \"neutral\" | \"ok\" | \"warn\" | \"info\"",
26
+ "required": false,
27
+ "defaultValue": "neutral",
28
+ "description": "Ink for this item. Defaults to the bar's own subtle grey."
29
+ },
30
+ {
31
+ "name": "push",
32
+ "type": "boolean",
33
+ "required": false,
34
+ "defaultValue": "false",
35
+ "description": "Start the trailing cluster here: pushes this item and everything after it\nto the far edge. Cheaper and more robust than a spacer element, which a\ncaller has to remember to keep in the right place."
36
+ },
37
+ {
38
+ "name": "icon",
39
+ "type": "ElementType<any, keyof IntrinsicElements>",
40
+ "required": false,
41
+ "defaultValue": null,
42
+ "description": "Optional leading icon (e.g. a lucide icon), drawn `aria-hidden`."
43
+ },
44
+ {
45
+ "name": "interactive",
46
+ "type": "boolean",
47
+ "required": false,
48
+ "defaultValue": "false",
49
+ "description": "Make the item a real control: a `<button type=\"button\">` with hover, press\nand keyboard-focus feedback. Defaults to `false`.\n\nA native button, not a `<div>` with an `onClick` — keyboard order is DOM\norder, `Enter` and `Space` work because the platform makes them work, and\nassistive technology is told what the thing is by the element rather than\nby a role attribute that has to be kept honest by hand.\n\n**An icon-only interactive item needs an `aria-label`.** There is no text\nfor a screen reader to read and the icon is drawn `aria-hidden`, so without\none the control announces as \"button\" and nothing else."
50
+ },
51
+ {
52
+ "name": "prominence",
53
+ "type": "\"quiet\" | \"filled\"",
54
+ "required": false,
55
+ "defaultValue": "quiet",
56
+ "description": "How loudly the item states itself. Defaults to `\"quiet\"`.\n\n`quiet` is a reading: tone ink on the bar's own ground. `filled` is a chip\n— a full-height tone wash behind tone ink — for the small set of states\nthat earn a colour of their own: a warning, an error, the remote you are\nattached to. It is loud deliberately, and a bar of five filled items is a\nbar nobody reads."
57
+ },
58
+ {
59
+ "name": "render",
60
+ "type": "RenderProp<Record<string, unknown>>",
61
+ "required": false,
62
+ "defaultValue": null,
63
+ "description": "Replace the rendered element (Base UI render prop) — `render={<a href=\"…\" />}`\nfor a status item that navigates.\n\nImplies {@link StatusBarItemProps.interactive}: whatever is rendered gets\nthe control chassis, because an element a reader can click has to look like\none whether it is a button or a link."
64
+ },
65
+ {
66
+ "name": "disabled",
67
+ "type": "boolean",
68
+ "required": false,
69
+ "defaultValue": null,
70
+ "description": "Grey the control out, take it out of the pointer's reach and announce it as\ndisabled. Defaults to `false`. Ignored by a static item, which is a reading\nand not a control.\n\nHonoured whatever {@link StatusBarItemProps.render} renders, but by two\nroutes: the `disabled` attribute where it means something — the default\n`<button>`, a form control, a component that takes a `disabled` prop of its\nown — and `aria-disabled` plus `data-disabled` everywhere, which is all an\nanchor gets. There is no such thing as a disabled link; a link that should\nnot be followed should not be a link, and this states the intent rather\nthan pretending to enforce it."
71
+ }
72
+ ],
73
+ "typeReferences": [
74
+ "React.ComponentPropsWithoutRef<\"div\">"
75
+ ]
76
+ },
77
+ {
78
+ "name": "Group",
79
+ "usage": "StatusBar.Group",
80
+ "description": "Items that belong to each other, one pixel apart.\n\nThe bar spaces its readings at `--cue-space-4` because they are unrelated\nfacts. A branch name and its ahead/behind count are not unrelated facts; they\nare one control that happens to have two halves, and the gap between them is\nwhat says so. This is VS Code's `compact` mechanic — the seam collapses, and\nhovering either half grounds both while the half under the cursor goes one\nrung further — expressed as a wrapper rather than as an id-reference between\ntwo items, because a design system's items do not have ids to point at.\n\nA `role=\"group\"` rather than nothing: the members are announced as a set, and\nthe DOM order they are announced in is the order they are read in. Give it an\n`aria-label` when the members only make sense together.",
81
+ "props": [
82
+ {
83
+ "name": "push",
84
+ "type": "boolean",
85
+ "required": false,
86
+ "defaultValue": "false",
87
+ "description": "Start the trailing cluster at this group: pushes it and everything after it\nto the far edge, exactly as `push` does on a single item."
88
+ },
89
+ {
90
+ "name": "aria-label",
91
+ "type": "string",
92
+ "required": false,
93
+ "defaultValue": null,
94
+ "description": "What the cluster is called. Optional, and worth giving whenever the members\nonly make sense together — \"Repository\", \"Connection\" — because a `group`\nwith no name is a landmark a screen reader reads straight past."
95
+ }
96
+ ],
97
+ "typeReferences": [
98
+ "React.ComponentPropsWithoutRef<\"div\">"
99
+ ]
100
+ }
101
+ ],
13
102
  "variants": {},
14
103
  "defaultVariants": {},
15
104
  "tokensUsed": [
@@ -18,6 +107,7 @@
18
107
  "--cue-busy",
19
108
  "--cue-chrome-statusbar",
20
109
  "--cue-danger",
110
+ "--cue-fg",
21
111
  "--cue-fg-subtle",
22
112
  "--cue-font-mono",
23
113
  "--cue-icon-sm",
@@ -25,23 +115,68 @@
25
115
  "--cue-ok",
26
116
  "--cue-pad-row-x",
27
117
  "--cue-space-2",
118
+ "--cue-space-3",
28
119
  "--cue-space-4",
29
120
  "--cue-surface-1",
121
+ "--cue-surface-2",
122
+ "--cue-surface-3",
30
123
  "--cue-text-label",
31
124
  "--cue-warn"
32
125
  ],
33
- "summary": "The quiet strip along the bottom of a window.",
126
+ "summary": "The quiet strip along the bottom of a window: readings by default, controls where the reading is worth clicking.",
34
127
  "examples": [
35
128
  {
36
- "title": "Usage",
129
+ "title": "Readings and controls",
37
130
  "code": "<StatusBar>\n <StatusBar.Item icon={Plug} tone=\"ok\">Art-Net connected</StatusBar.Item>\n <StatusBar.Item push>512 channels</StatusBar.Item>\n</StatusBar>",
38
131
  "language": "tsx"
132
+ },
133
+ {
134
+ "title": "Readings and controls",
135
+ "code": "<StatusBar.Item interactive icon={GitBranch} onClick={openBranchPicker}>act-2</StatusBar.Item>\n<StatusBar.Item render={<a href=\"/runs/42\" />}>run 42</StatusBar.Item>",
136
+ "language": "tsx"
137
+ },
138
+ {
139
+ "title": "`push`, and the two clusters",
140
+ "code": "<StatusBar>\n <StatusBar.Item>universe 1</StatusBar.Item>\n <StatusBar.Item tone=\"ok\">44 Hz</StatusBar.Item>\n <StatusBar.Item push>10.0.0.42</StatusBar.Item>\n <StatusBar.Item tone=\"info\">art-net</StatusBar.Item>\n</StatusBar>",
141
+ "language": "tsx"
142
+ },
143
+ {
144
+ "title": "Groups: items that belong to each other",
145
+ "code": "<StatusBar.Group aria-label=\"Show file\">\n <StatusBar.Item interactive icon={GitBranch}>act-2</StatusBar.Item>\n <StatusBar.Item interactive icon={ArrowUp}>2</StatusBar.Item>\n</StatusBar.Group>",
146
+ "language": "tsx"
147
+ },
148
+ {
149
+ "title": "`prominence`, and how rarely to reach for it",
150
+ "code": "<StatusBar.Item prominence=\"filled\" tone=\"danger\" icon={TriangleAlert}>3 faults</StatusBar.Item>",
151
+ "language": "tsx"
152
+ },
153
+ {
154
+ "title": "Usage",
155
+ "code": "<StatusBar>\n <StatusBar.Item icon={Plug} tone=\"ok\">Art-Net connected</StatusBar.Item>\n <StatusBar.Item push>512 channels</StatusBar.Item>\n</StatusBar>\n// The VS Code shape: a clickable cluster left, a loud state right.\n<StatusBar>\n <StatusBar.Group aria-label=\"Repository\">\n <StatusBar.Item interactive icon={GitBranch}>main</StatusBar.Item>\n <StatusBar.Item interactive icon={ArrowUp}>2</StatusBar.Item>\n </StatusBar.Group>\n <StatusBar.Item push interactive prominence=\"filled\" tone=\"danger\">3 faults</StatusBar.Item>\n</StatusBar>",
156
+ "language": "tsx"
39
157
  }
40
158
  ],
41
- "status": "todo-docs",
159
+ "status": "stable",
42
160
  "url": "/docs/components/status-bar",
43
161
  "mdUrl": "/docs/components/status-bar.md",
44
162
  "jsonUrl": "/r/components/status-bar.json",
163
+ "whenToUse": [
164
+ "Ambient state a reader goes looking for rather than is interrupted by: a connection, a frame rate, a cursor position, a branch name.",
165
+ "A state that is also a destination. `interactive` makes an item a real button, `render={<a href=\"…\" />}` makes it a link, and `StatusBar.Group` fuses two of them into one control."
166
+ ],
167
+ "whenNotToUse": [
168
+ "Anything that must be noticed. A status bar is deliberately the quietest thing on screen and nothing in it is announced — urgent messages are `Toast`'s job.",
169
+ "A row of actions. That is `Toolbar`, which is sized for controls and has the keyboard model to match.",
170
+ "The end of a document — an address, fine print, a sitemap. That is `Footer`, which scrolls away with the content; the bar is part of the frame and never leaves the screen."
171
+ ],
172
+ "commonMistakes": [
173
+ "Making every item interactive. Most of a status bar is a reading, and a bar where everything lights up under the pointer is a bar where nothing means anything.",
174
+ "Filling more than one or two items. `prominence=\"filled\"` is the loudest thing the bar can do; a bar of five filled chips is a bar nobody reads.",
175
+ "An icon-only interactive item with no `aria-label`. The icon is drawn `aria-hidden`, so the control announces as \"button\" and nothing else.",
176
+ "Wrapping related items in a plain `<div>` to close the gap. `StatusBar.Group` closes the seam *and* neutralises the interactive item's negative margin, which a bare div does not.",
177
+ "Reaching for `aria-live` to make a reading announce itself. The bar changes constantly, and a live region here makes the app unusable with a screen reader.",
178
+ "Fixing the height with `h-6` instead of letting `--cue-chrome-statusbar` set it, which stops tracking density."
179
+ ],
45
180
  "specimens": [
46
181
  {
47
182
  "title": "StatusBar",
@@ -49,10 +184,9 @@
49
184
  "components": [
50
185
  "StatusBar"
51
186
  ],
52
- "code": "<div className=\"w-full overflow-hidden rounded-(--radius-surface) border border-border\">\n <StatusBar>\n <StatusBar.Item>universe 1</StatusBar.Item>\n <StatusBar.Item tone=\"ok\">44 Hz</StatusBar.Item>\n <StatusBar.Item tone=\"warn\">2 conflicts</StatusBar.Item>\n <StatusBar.Item push>10.0.0.42</StatusBar.Item>\n <StatusBar.Item tone=\"info\">art-net</StatusBar.Item>\n </StatusBar>\n</div>",
53
- "note": "The bottom strip: tone-inked items, and a `push` item that takes the remaining space.",
54
- "interaction": "none by default; items are plain readouts."
187
+ "code": "<div className=\"flex w-full flex-col gap-(--cue-space-4)\">\n <div className=\"w-full overflow-hidden rounded-(--radius-surface) border border-border\">\n <StatusBar>\n <StatusBar.Item>universe 1</StatusBar.Item>\n <StatusBar.Item tone=\"ok\">44 Hz</StatusBar.Item>\n <StatusBar.Item tone=\"warn\">2 conflicts</StatusBar.Item>\n <StatusBar.Item push>10.0.0.42</StatusBar.Item>\n <StatusBar.Item tone=\"info\">art-net</StatusBar.Item>\n </StatusBar>\n </div>\n\n <div className=\"w-full overflow-hidden rounded-(--radius-surface) border border-border\">\n <StatusBar>\n <StatusBar.Group aria-label=\"Show file\">\n <StatusBar.Item interactive icon={GitBranch}>\n act-2\n </StatusBar.Item>\n <StatusBar.Item interactive icon={ArrowUp}>\n 2\n </StatusBar.Item>\n </StatusBar.Group>\n <StatusBar.Item interactive tone=\"ok\">\n 44 Hz\n </StatusBar.Item>\n <StatusBar.Item interactive icon={Radio} aria-label=\"Art-Net output\" />\n <StatusBar.Item push interactive prominence=\"filled\" tone=\"warn\" icon={TriangleAlert}>\n 2 conflicts\n </StatusBar.Item>\n </StatusBar>\n </div>\n</div>",
188
+ "note": "The bottom strip: tone-inked items, and a `push` item that takes the remaining space. Drawn twice — the readings-only bar it has always been, and the VS Code shape beneath it, where some of the items are controls: a compact Group whose two halves read as one, an icon-only control that carries its name in aria-label, and a filled item for the one state that has earned a colour.",
189
+ "interaction": "the plain items are inert by construction — no hover, no focus, nothing to click. The controls take a full-height fill on hover and a darker one while pressed, Tab reaches them in DOM order and Enter fires them, and the focus ring is drawn inside the item so it never paints across the bar. Hovering either half of the Group grounds both, and the half under the pointer goes one rung further."
55
190
  }
56
- ],
57
- "todo": true
191
+ ]
58
192
  }
@@ -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
+ }