@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,100 @@
1
+ {
2
+ "name": "CompactionRow",
3
+ "slug": "compaction-row",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The rule that says the conversation was compacted, and by how much.\n\nA `role=\"separator\"` like {@link TimeBoundary }, because that is what it is:\nthe transcript above it is not the transcript below it any more. What makes\nit worth a component rather than a line of prose is the pair of numbers —\nbefore and after, on both axes — since \"compacted\" alone tells a reader\nnothing they can act on, while `128k → 24k tokens · 214 → 31 messages` tells\nthem why the model stopped remembering the thing they mentioned an hour ago.\n\nFive states, which is two more than most implementations have and exactly the\ntwo that matter: a compaction that **failed** leaves the window full, and one\nthat was **skipped** leaves it full on purpose. Both are the states a reader\nmeets when something is about to go wrong, and both are the states a UI that\nonly draws the happy path renders as nothing at all.\n\nThe numbers render as far as they are known. While `started`, pass the before\nfigures and no after ones and the row reads `128k tokens · 214 messages`; the\narrows arrive with the answer.",
11
+ "props": [
12
+ {
13
+ "name": "state",
14
+ "type": "\"failed\" | \"started\" | \"completed\" | \"cancelled\" | \"skipped\"",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Where the compaction got to. See `COMPACTION_STATES`."
18
+ },
19
+ {
20
+ "name": "tokensBefore",
21
+ "type": "number",
22
+ "required": false,
23
+ "defaultValue": null,
24
+ "description": "Tokens in the window before it ran."
25
+ },
26
+ {
27
+ "name": "tokensAfter",
28
+ "type": "number",
29
+ "required": false,
30
+ "defaultValue": null,
31
+ "description": "Tokens after. Omit while it is running, or when it did not finish."
32
+ },
33
+ {
34
+ "name": "messagesBefore",
35
+ "type": "number",
36
+ "required": false,
37
+ "defaultValue": null,
38
+ "description": "Messages in the window before it ran."
39
+ },
40
+ {
41
+ "name": "messagesAfter",
42
+ "type": "number",
43
+ "required": false,
44
+ "defaultValue": null,
45
+ "description": "Messages after. Omit while it is running, or when it did not finish."
46
+ },
47
+ {
48
+ "name": "label",
49
+ "type": "string",
50
+ "required": false,
51
+ "defaultValue": null,
52
+ "description": "What the rule says, replacing the one `COMPACTION_LABELS` supplies for this\nstate."
53
+ },
54
+ {
55
+ "name": "reason",
56
+ "type": "string",
57
+ "required": false,
58
+ "defaultValue": null,
59
+ "description": "Why, for the two states that owe an answer: `context window still under\n60%`, `the summariser refused`. Roo's rule — a compaction that did not\nhappen, or that lost something, should say so in words rather than leave a\nreader to infer it from a number that did not move."
60
+ }
61
+ ],
62
+ "typeReferences": [
63
+ "Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
64
+ ],
65
+ "subcomponents": [],
66
+ "parts": [],
67
+ "variants": {},
68
+ "defaultVariants": {},
69
+ "tokensUsed": [
70
+ "--cue-border",
71
+ "--cue-danger",
72
+ "--cue-fg-subtle",
73
+ "--cue-stream"
74
+ ],
75
+ "summary": "The rule that says the conversation was compacted, and by how much.",
76
+ "examples": [
77
+ {
78
+ "title": "Usage",
79
+ "code": "import { CompactionRow } from \"@cueplusplus/ui/elements\";\n\n<CompactionRow\n state=\"completed\"\n tokensBefore={128_000}\n tokensAfter={24_000}\n messagesBefore={214}\n messagesAfter={31}\n/>\n<CompactionRow state=\"skipped\" reason=\"context window still under 60%\" />",
80
+ "language": "tsx"
81
+ }
82
+ ],
83
+ "status": "todo-docs",
84
+ "url": "/docs/components/compaction-row",
85
+ "mdUrl": "/docs/components/compaction-row.md",
86
+ "jsonUrl": "/r/components/compaction-row.json",
87
+ "specimens": [
88
+ {
89
+ "title": "CompactionRow",
90
+ "group": "elements-thread",
91
+ "components": [
92
+ "CompactionRow"
93
+ ],
94
+ "code": "<Specimens>\n <Specimen label=\"started\" wide>\n <div className=\"w-full max-w-md\">\n <CompactionRow state=\"started\" tokensBefore={128_000} messagesBefore={214} />\n </div>\n </Specimen>\n <Specimen label=\"completed\" wide>\n <div className=\"w-full max-w-md\">\n <CompactionRow\n state=\"completed\"\n tokensBefore={128_000}\n tokensAfter={24_000}\n messagesBefore={214}\n messagesAfter={31}\n />\n </div>\n </Specimen>\n <Specimen label=\"failed\" wide>\n <div className=\"w-full max-w-md\">\n <CompactionRow\n state=\"failed\"\n tokensBefore={128_000}\n reason=\"the summariser refused\"\n />\n </div>\n </Specimen>\n <Specimen label=\"cancelled\" wide>\n <div className=\"w-full max-w-md\">\n <CompactionRow state=\"cancelled\" tokensBefore={128_000} />\n </div>\n </Specimen>\n <Specimen label=\"skipped\" wide>\n <div className=\"w-full max-w-md\">\n <CompactionRow state=\"skipped\" reason=\"context window still under 60%\" />\n </div>\n </Specimen>\n</Specimens>",
95
+ "note": "A rule like TimeBoundary, because that is what it is: the transcript above it is not the transcript below it any more. What makes it a component is the pair of numbers on both axes — 'compacted' alone tells a reader nothing they can act on, while 128k → 24k tokens · 214 → 31 messages tells them why the model stopped remembering the thing they mentioned an hour ago. Five states, which is two more than most implementations have and exactly the two that matter: failed leaves the window full, and skipped leaves it full on purpose.",
96
+ "interaction": "none. The whole rule is one accessible name, because a separator announces its label and never its children."
97
+ }
98
+ ],
99
+ "todo": true
100
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "ComparisonCard",
3
+ "slug": "comparison-card",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "Two options weighed side by side, with the pick named and argued.",
11
+ "props": [
12
+ {
13
+ "name": "traitLabels",
14
+ "type": "readonly string[]",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "The dimensions compared, in order. Used as the fallback label when an option lacks\na trait."
18
+ },
19
+ {
20
+ "name": "options",
21
+ "type": "readonly ComparisonOption[]",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Two or three options. More than that wants a table, not a comparison."
25
+ },
26
+ {
27
+ "name": "recommendedId",
28
+ "type": "string",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "Which option is the pick. It is tinted and labelled rather than merely ordered first."
32
+ },
33
+ {
34
+ "name": "reason",
35
+ "type": "string",
36
+ "required": true,
37
+ "defaultValue": null,
38
+ "description": "Why that one, in the user's terms. A comparison without a recommendation is an\nunanswered question."
39
+ }
40
+ ],
41
+ "typeReferences": [
42
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"traitLabels\" | \"options\" | \"recommendedId\" | \"reason\"\n> & {\n /**\n * The dimensions compared, in order. Used as the fallback label when an option lacks\n * a trait.\n */\n traitLabels: readonly string[];\n /** Two or three options. More than that wants a table, not a comparison. */\n options: readonly ComparisonOption[];\n /** Which option is the pick. It is tinted and labelled rather than merely ordered first. */\n recommendedId: string;\n /**\n * Why that one, in the user's terms. A comparison without a recommendation is an\n * unanswered question.\n */\n reason: string;\n}"
43
+ ],
44
+ "subcomponents": [],
45
+ "parts": [],
46
+ "variants": {},
47
+ "defaultVariants": {},
48
+ "tokensUsed": [
49
+ "--cue-fg-muted",
50
+ "--cue-fg-subtle",
51
+ "--cue-ok",
52
+ "--cue-radius-overlay",
53
+ "--cue-radius-surface",
54
+ "--cue-stream",
55
+ "--cue-text-body",
56
+ "--cue-text-ui"
57
+ ],
58
+ "summary": "Two options weighed side by side, with the pick named and argued.",
59
+ "examples": [
60
+ {
61
+ "title": "Usage",
62
+ "code": "import { ComparisonCard } from \"@cueplusplus/ui/elements\";\n\n<ComparisonCard\n traitLabels={traits}\n options={options}\n recommendedId=\"local\"\n reason=\"You already hold messages in your own store.\"\n/>",
63
+ "language": "tsx"
64
+ }
65
+ ],
66
+ "status": "todo-docs",
67
+ "url": "/docs/components/comparison-card",
68
+ "mdUrl": "/docs/components/comparison-card.md",
69
+ "jsonUrl": "/r/components/comparison-card.json",
70
+ "specimens": [
71
+ {
72
+ "title": "ComparisonCard",
73
+ "group": "elements-knowledge",
74
+ "components": [
75
+ "ComparisonCard"
76
+ ],
77
+ "code": "<Specimens>\n <Specimen label=\"the ESPRITE picked\" wide>\n <ComparisonCard\n traitLabels={[\"Output\", \"Power\", \"Stock\", \"Shutters\"]}\n options={OPTIONS}\n recommendedId=\"esprite\"\n reason=\"The ESPRITE clears the wash at 8.4 m with zoom to spare; the S4's fixed 26° needs a second bar.\"\n />\n </Specimen>\n <Specimen label=\"the other way round\" wide>\n <ComparisonCard\n traitLabels={[\"Output\", \"Power\", \"Stock\", \"Shutters\"]}\n options={OPTIONS}\n recommendedId=\"s4\"\n reason=\"On the power installed, six S4s fit the FOH leg with 8 A to spare; six ESPRITEs do not.\"\n />\n </Specimen>\n</Specimens>",
78
+ "note": "Two options side by side with the pick named, argued, and tinted in the streaming hue — not left for the reader to infer from a longer column. A trait that is `false` collapses to the label in grey with a minus, so the absence lines up with the presences instead of leaving a hole.",
79
+ "interaction": "none. It is a read-only comparison; choosing is `RecommendationCard`'s job, one bench along."
80
+ }
81
+ ],
82
+ "todo": true
83
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "ComposerActions",
3
+ "slug": "composer-actions",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "One cluster of controls in the toolbar. Two of them, one at each end.",
11
+ "props": [],
12
+ "typeReferences": [
13
+ "ComponentProps<\"div\">"
14
+ ],
15
+ "subcomponents": [],
16
+ "parts": [],
17
+ "variants": {},
18
+ "defaultVariants": {},
19
+ "tokensUsed": [
20
+ "--cue-accent",
21
+ "--cue-danger",
22
+ "--cue-fg",
23
+ "--cue-fg-muted",
24
+ "--cue-fg-subtle",
25
+ "--cue-font-mono",
26
+ "--cue-ok",
27
+ "--cue-radius-control",
28
+ "--cue-radius-overlay",
29
+ "--cue-radius-surface",
30
+ "--cue-stream",
31
+ "--cue-surface-1",
32
+ "--cue-surface-2",
33
+ "--cue-surface-3",
34
+ "--cue-text-body",
35
+ "--cue-text-emphasis",
36
+ "--cue-text-label",
37
+ "--cue-text-micro",
38
+ "--cue-text-ui"
39
+ ],
40
+ "summary": "One cluster of controls in the toolbar.",
41
+ "examples": [],
42
+ "status": "todo-docs",
43
+ "url": "/docs/components/composer-actions",
44
+ "mdUrl": "/docs/components/composer-actions.md",
45
+ "jsonUrl": "/r/components/composer-actions.json",
46
+ "specimens": [
47
+ {
48
+ "title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
49
+ "group": "elements-composer",
50
+ "components": [
51
+ "ElementsComposer",
52
+ "ComposerBar",
53
+ "ComposerInput",
54
+ "ComposerToolbar",
55
+ "ComposerActions",
56
+ "ComposerAttachButton",
57
+ "ComposerSend"
58
+ ],
59
+ "code": "<Specimens>\n <Specimen label=\"empty\" wide>\n <ElementsComposer>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value=\"\"\n placeholder=\"Ask about the rig\"\n readOnly\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton onClick={() => undefined} />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming={false} idle />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n\n <Specimen label=\"typed\" wide>\n <ElementsComposer>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value={message}\n placeholder=\"Ask about the rig\"\n onChange={(event) => setMessage(event.target.value)}\n onSubmit={() => setMessage(\"\")}\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton onClick={() => undefined} />\n <ComposerModelTrigger model={model} open={false} />\n </ComposerActions>\n <ComposerActions>\n <ComposerContext usage={USAGE} />\n <ComposerVoiceButton active={false} />\n <ComposerSend streaming={false} idle={message === \"\"} />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n\n <Specimen label=\"streaming, file over the bar\" wide>\n <ElementsComposer>\n <ComposerBar dragActive>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value=\"\"\n placeholder=\"Drop the truss drawing here\"\n readOnly\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming idle={false} />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n</Specimens>",
60
+ "note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
61
+ "interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
62
+ }
63
+ ],
64
+ "todo": true
65
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "ComposerAttachButton",
3
+ "slug": "composer-attach-button",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The paperclip, as a plus. Disabled when no handler is given, rather than rendering a\ncontrol that does nothing.",
11
+ "props": [],
12
+ "typeReferences": [
13
+ "Omit<ComponentProps<\"button\">, \"children\">"
14
+ ],
15
+ "subcomponents": [],
16
+ "parts": [],
17
+ "variants": {},
18
+ "defaultVariants": {},
19
+ "tokensUsed": [
20
+ "--cue-accent",
21
+ "--cue-danger",
22
+ "--cue-fg",
23
+ "--cue-fg-muted",
24
+ "--cue-fg-subtle",
25
+ "--cue-font-mono",
26
+ "--cue-ok",
27
+ "--cue-radius-control",
28
+ "--cue-radius-overlay",
29
+ "--cue-radius-surface",
30
+ "--cue-stream",
31
+ "--cue-surface-1",
32
+ "--cue-surface-2",
33
+ "--cue-surface-3",
34
+ "--cue-text-body",
35
+ "--cue-text-emphasis",
36
+ "--cue-text-label",
37
+ "--cue-text-micro",
38
+ "--cue-text-ui"
39
+ ],
40
+ "summary": "The paperclip, as a plus.",
41
+ "examples": [],
42
+ "status": "todo-docs",
43
+ "url": "/docs/components/composer-attach-button",
44
+ "mdUrl": "/docs/components/composer-attach-button.md",
45
+ "jsonUrl": "/r/components/composer-attach-button.json",
46
+ "specimens": [
47
+ {
48
+ "title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
49
+ "group": "elements-composer",
50
+ "components": [
51
+ "ElementsComposer",
52
+ "ComposerBar",
53
+ "ComposerInput",
54
+ "ComposerToolbar",
55
+ "ComposerActions",
56
+ "ComposerAttachButton",
57
+ "ComposerSend"
58
+ ],
59
+ "code": "<Specimens>\n <Specimen label=\"empty\" wide>\n <ElementsComposer>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value=\"\"\n placeholder=\"Ask about the rig\"\n readOnly\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton onClick={() => undefined} />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming={false} idle />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n\n <Specimen label=\"typed\" wide>\n <ElementsComposer>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value={message}\n placeholder=\"Ask about the rig\"\n onChange={(event) => setMessage(event.target.value)}\n onSubmit={() => setMessage(\"\")}\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton onClick={() => undefined} />\n <ComposerModelTrigger model={model} open={false} />\n </ComposerActions>\n <ComposerActions>\n <ComposerContext usage={USAGE} />\n <ComposerVoiceButton active={false} />\n <ComposerSend streaming={false} idle={message === \"\"} />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n\n <Specimen label=\"streaming, file over the bar\" wide>\n <ElementsComposer>\n <ComposerBar dragActive>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value=\"\"\n placeholder=\"Drop the truss drawing here\"\n readOnly\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming idle={false} />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n</Specimens>",
60
+ "note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
61
+ "interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
62
+ }
63
+ ],
64
+ "todo": true
65
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "ComposerAttachmentChip",
3
+ "slug": "composer-attachment-chip",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "One attached file as a chip: an icon for its kind, its name and size, and — while it\nuploads — a progress hairline along the bottom edge. A finished one offers remove, a\nfailed one says so in its meta line.",
11
+ "props": [
12
+ {
13
+ "name": "attachment",
14
+ "type": "ComposerAttachment",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "The file this chip stands for."
18
+ },
19
+ {
20
+ "name": "onRemove",
21
+ "type": "((name: string) => void)",
22
+ "required": false,
23
+ "defaultValue": null,
24
+ "description": "Called with the attachment's name. Omit it and a finished chip shows a tick\ninstead of a remove button."
25
+ }
26
+ ],
27
+ "typeReferences": [
28
+ "Omit<ComponentProps<\"div\">, \"children\"> & {\n /** The file this chip stands for. */\n attachment: ComposerAttachment;\n /**\n * Called with the attachment's name. Omit it and a finished chip shows a tick\n * instead of a remove button.\n */\n onRemove?: (name: string) => void;\n}"
29
+ ],
30
+ "subcomponents": [],
31
+ "parts": [],
32
+ "variants": {},
33
+ "defaultVariants": {},
34
+ "tokensUsed": [
35
+ "--cue-accent",
36
+ "--cue-danger",
37
+ "--cue-fg",
38
+ "--cue-fg-muted",
39
+ "--cue-fg-subtle",
40
+ "--cue-font-mono",
41
+ "--cue-ok",
42
+ "--cue-radius-control",
43
+ "--cue-radius-overlay",
44
+ "--cue-radius-surface",
45
+ "--cue-stream",
46
+ "--cue-surface-1",
47
+ "--cue-surface-2",
48
+ "--cue-surface-3",
49
+ "--cue-text-body",
50
+ "--cue-text-emphasis",
51
+ "--cue-text-label",
52
+ "--cue-text-micro",
53
+ "--cue-text-ui"
54
+ ],
55
+ "summary": "One attached file as a chip: an icon for its kind, its name and size, and — while it uploads — a progress hairline along the bottom edge.",
56
+ "examples": [],
57
+ "status": "todo-docs",
58
+ "url": "/docs/components/composer-attachment-chip",
59
+ "mdUrl": "/docs/components/composer-attachment-chip.md",
60
+ "jsonUrl": "/r/components/composer-attachment-chip.json",
61
+ "specimens": [
62
+ {
63
+ "title": "ComposerAttachments / ComposerAttachmentChip",
64
+ "group": "elements-composer",
65
+ "components": [
66
+ "ComposerAttachments",
67
+ "ComposerAttachmentChip"
68
+ ],
69
+ "code": "<Specimens>\n <Specimen label=\"three states\" wide>\n <ComposerAttachments>\n {chips.map((attachment) => (\n <ComposerAttachmentChip\n key={attachment.name}\n attachment={attachment}\n onRemove={(name) => setAttached((current) => [...current, name])}\n />\n ))}\n </ComposerAttachments>\n </Specimen>\n <Specimen label=\"one, settled, nothing to remove\" wide>\n <ComposerAttachments>\n <ComposerAttachmentChip\n attachment={{\n name: \"front-truss.pdf\",\n meta: \"1.2 MB\",\n state: \"done\",\n kind: \"text\",\n }}\n />\n </ComposerAttachments>\n </Specimen>\n</Specimens>",
70
+ "note": "The rail above the input, and one chip per file. A chip carries its own state: uploading draws a hairline of progress along its bottom edge, done offers a remove button, and a failure says why in the line that would otherwise hold a size. The icon is the file's kind, not its extension, so an unknown type still lands on something.",
71
+ "interaction": "remove is a labelled icon button (`Remove front-truss.pdf`) and only exists on a finished chip — there is nothing to remove from an upload that has not landed, and a failed one is removed by fixing it."
72
+ }
73
+ ],
74
+ "todo": true
75
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "ComposerAttachments",
3
+ "slug": "composer-attachments",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The rail the attachment chips wrap in, above the input.",
11
+ "props": [],
12
+ "typeReferences": [
13
+ "ComponentProps<\"div\">"
14
+ ],
15
+ "subcomponents": [],
16
+ "parts": [],
17
+ "variants": {},
18
+ "defaultVariants": {},
19
+ "tokensUsed": [
20
+ "--cue-accent",
21
+ "--cue-danger",
22
+ "--cue-fg",
23
+ "--cue-fg-muted",
24
+ "--cue-fg-subtle",
25
+ "--cue-font-mono",
26
+ "--cue-ok",
27
+ "--cue-radius-control",
28
+ "--cue-radius-overlay",
29
+ "--cue-radius-surface",
30
+ "--cue-stream",
31
+ "--cue-surface-1",
32
+ "--cue-surface-2",
33
+ "--cue-surface-3",
34
+ "--cue-text-body",
35
+ "--cue-text-emphasis",
36
+ "--cue-text-label",
37
+ "--cue-text-micro",
38
+ "--cue-text-ui"
39
+ ],
40
+ "summary": "The rail the attachment chips wrap in, above the input.",
41
+ "examples": [],
42
+ "status": "todo-docs",
43
+ "url": "/docs/components/composer-attachments",
44
+ "mdUrl": "/docs/components/composer-attachments.md",
45
+ "jsonUrl": "/r/components/composer-attachments.json",
46
+ "specimens": [
47
+ {
48
+ "title": "ComposerAttachments / ComposerAttachmentChip",
49
+ "group": "elements-composer",
50
+ "components": [
51
+ "ComposerAttachments",
52
+ "ComposerAttachmentChip"
53
+ ],
54
+ "code": "<Specimens>\n <Specimen label=\"three states\" wide>\n <ComposerAttachments>\n {chips.map((attachment) => (\n <ComposerAttachmentChip\n key={attachment.name}\n attachment={attachment}\n onRemove={(name) => setAttached((current) => [...current, name])}\n />\n ))}\n </ComposerAttachments>\n </Specimen>\n <Specimen label=\"one, settled, nothing to remove\" wide>\n <ComposerAttachments>\n <ComposerAttachmentChip\n attachment={{\n name: \"front-truss.pdf\",\n meta: \"1.2 MB\",\n state: \"done\",\n kind: \"text\",\n }}\n />\n </ComposerAttachments>\n </Specimen>\n</Specimens>",
55
+ "note": "The rail above the input, and one chip per file. A chip carries its own state: uploading draws a hairline of progress along its bottom edge, done offers a remove button, and a failure says why in the line that would otherwise hold a size. The icon is the file's kind, not its extension, so an unknown type still lands on something.",
56
+ "interaction": "remove is a labelled icon button (`Remove front-truss.pdf`) and only exists on a finished chip — there is nothing to remove from an upload that has not landed, and a failed one is removed by fixing it."
57
+ }
58
+ ],
59
+ "todo": true
60
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "ComposerBar",
3
+ "slug": "composer-bar",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The bar itself: the paper the input, the attachments and the toolbar sit on.\n`dragActive` tints it while a file is over it, which is the only feedback a drop\ntarget gets before the drop.",
11
+ "props": [
12
+ {
13
+ "name": "dragActive",
14
+ "type": "boolean",
15
+ "required": false,
16
+ "defaultValue": "false",
17
+ "description": "Whether a file is being dragged over the bar."
18
+ }
19
+ ],
20
+ "typeReferences": [
21
+ "ComponentProps<\"div\"> & {\n /** Whether a file is being dragged over the bar. */\n dragActive?: boolean;\n}"
22
+ ],
23
+ "subcomponents": [],
24
+ "parts": [],
25
+ "variants": {},
26
+ "defaultVariants": {},
27
+ "tokensUsed": [
28
+ "--cue-accent",
29
+ "--cue-danger",
30
+ "--cue-fg",
31
+ "--cue-fg-muted",
32
+ "--cue-fg-subtle",
33
+ "--cue-font-mono",
34
+ "--cue-ok",
35
+ "--cue-radius-control",
36
+ "--cue-radius-overlay",
37
+ "--cue-radius-surface",
38
+ "--cue-stream",
39
+ "--cue-surface-1",
40
+ "--cue-surface-2",
41
+ "--cue-surface-3",
42
+ "--cue-text-body",
43
+ "--cue-text-emphasis",
44
+ "--cue-text-label",
45
+ "--cue-text-micro",
46
+ "--cue-text-ui"
47
+ ],
48
+ "summary": "The bar itself: the paper the input, the attachments and the toolbar sit on.",
49
+ "examples": [],
50
+ "status": "todo-docs",
51
+ "url": "/docs/components/composer-bar",
52
+ "mdUrl": "/docs/components/composer-bar.md",
53
+ "jsonUrl": "/r/components/composer-bar.json",
54
+ "specimens": [
55
+ {
56
+ "title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
57
+ "group": "elements-composer",
58
+ "components": [
59
+ "ElementsComposer",
60
+ "ComposerBar",
61
+ "ComposerInput",
62
+ "ComposerToolbar",
63
+ "ComposerActions",
64
+ "ComposerAttachButton",
65
+ "ComposerSend"
66
+ ],
67
+ "code": "<Specimens>\n <Specimen label=\"empty\" wide>\n <ElementsComposer>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value=\"\"\n placeholder=\"Ask about the rig\"\n readOnly\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton onClick={() => undefined} />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming={false} idle />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n\n <Specimen label=\"typed\" wide>\n <ElementsComposer>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value={message}\n placeholder=\"Ask about the rig\"\n onChange={(event) => setMessage(event.target.value)}\n onSubmit={() => setMessage(\"\")}\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton onClick={() => undefined} />\n <ComposerModelTrigger model={model} open={false} />\n </ComposerActions>\n <ComposerActions>\n <ComposerContext usage={USAGE} />\n <ComposerVoiceButton active={false} />\n <ComposerSend streaming={false} idle={message === \"\"} />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n\n <Specimen label=\"streaming, file over the bar\" wide>\n <ElementsComposer>\n <ComposerBar dragActive>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value=\"\"\n placeholder=\"Drop the truss drawing here\"\n readOnly\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming idle={false} />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n</Specimens>",
68
+ "note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
69
+ "interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
70
+ }
71
+ ],
72
+ "todo": true
73
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "ComposerCommandItem",
3
+ "slug": "composer-command-item",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "A slash command in the menu: its icon, `/name`, what it does, and the return key on\nthe active row.",
11
+ "props": [
12
+ {
13
+ "name": "command",
14
+ "type": "ComposerCommand",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "The command this row offers."
18
+ },
19
+ {
20
+ "name": "active",
21
+ "type": "boolean",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Whether this is the row Enter would run."
25
+ }
26
+ ],
27
+ "typeReferences": [
28
+ "Omit<ComponentProps<\"button\">, \"children\"> & {\n /** The command this row offers. */\n command: ComposerCommand;\n /** Whether this is the row Enter would run. */\n active: boolean;\n}"
29
+ ],
30
+ "subcomponents": [],
31
+ "parts": [],
32
+ "variants": {},
33
+ "defaultVariants": {},
34
+ "tokensUsed": [
35
+ "--cue-accent",
36
+ "--cue-danger",
37
+ "--cue-fg",
38
+ "--cue-fg-muted",
39
+ "--cue-fg-subtle",
40
+ "--cue-font-mono",
41
+ "--cue-ok",
42
+ "--cue-radius-control",
43
+ "--cue-radius-overlay",
44
+ "--cue-radius-surface",
45
+ "--cue-stream",
46
+ "--cue-surface-1",
47
+ "--cue-surface-2",
48
+ "--cue-surface-3",
49
+ "--cue-text-body",
50
+ "--cue-text-emphasis",
51
+ "--cue-text-label",
52
+ "--cue-text-micro",
53
+ "--cue-text-ui"
54
+ ],
55
+ "summary": "A slash command in the menu: its icon, `/name`, what it does, and the return key on the active row.",
56
+ "examples": [],
57
+ "status": "todo-docs",
58
+ "url": "/docs/components/composer-command-item",
59
+ "mdUrl": "/docs/components/composer-command-item.md",
60
+ "jsonUrl": "/r/components/composer-command-item.json",
61
+ "specimens": [
62
+ {
63
+ "title": "ComposerMenu / useSlashMatches / useMentionMatches",
64
+ "group": "elements-composer",
65
+ "components": [
66
+ "ComposerMenu",
67
+ "ComposerMenuItem",
68
+ "ComposerCommandItem",
69
+ "ComposerPersonItem",
70
+ "useSlashMatches",
71
+ "useMentionMatches"
72
+ ],
73
+ "code": "<Specimens>\n <Specimen label=\"slash commands\" wide>\n <div className=\"flex min-h-64 w-full max-w-lg items-end\">\n <ElementsComposer>\n <ComposerMenu open={slashMatches.length > 0} align=\"start\">\n {slashMatches.map((command, index) => (\n <ComposerCommandItem\n key={command.name}\n command={command}\n active={index === 0}\n onClick={() => setSlash(`/${command.name} `)}\n />\n ))}\n <ComposerMenuItem onClick={() => setSlash(\"\")}>\n Browse every command\n </ComposerMenuItem>\n </ComposerMenu>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Run a slash command\"\n value={slash}\n placeholder=\"Type / for commands\"\n onChange={(event) => setSlash(event.target.value)}\n />\n </ComposerBar>\n </ElementsComposer>\n </div>\n </Specimen>\n\n <Specimen label=\"mentions\" wide>\n <div className=\"flex min-h-64 w-full max-w-lg items-end\">\n <ElementsComposer>\n <ComposerMenu open={mentionMatches.length > 0} align=\"end\">\n {mentionMatches.map((person, index) => (\n <ComposerPersonItem\n key={person.name}\n person={person}\n active={index === 0}\n onClick={() => setMention(applyMention(mention, person.name))}\n />\n ))}\n </ComposerMenu>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Mention an agent or a person\"\n value={mention}\n placeholder=\"Type @ to hand this to somebody\"\n onChange={(event) => setMention(event.target.value)}\n />\n </ComposerBar>\n </ElementsComposer>\n </div>\n </Specimen>\n</Specimens>",
74
+ "note": "One input, two menus, and two hooks that decide which of them has anything to say. `useSlashMatches` answers only while the value starts with a slash; `useMentionMatches` only while the caret is inside a trailing @word — so an empty result is the menu's own instruction to stay shut. `applyMention` writes the choice back into the value, which is the one piece of text editing the family does for you. Type in either field below and the menu above it follows.",
75
+ "interaction": "the menu animates rather than mounting, so the caret never moves under it. A row is a button and takes cue's focus ring; the active one shows the return key it would answer to."
76
+ }
77
+ ],
78
+ "todo": true
79
+ }