@cueplusplus/ui 0.2.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/CHANGELOG.md +2250 -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/brand/_chassis.d.ts +1 -1
  12. package/dist/brand/cue-mark.d.ts +1 -1
  13. package/dist/brand/cue-mark.js +1 -1
  14. package/dist/chat/index.d.ts +2 -2
  15. package/dist/chat/message-list.d.ts +6 -0
  16. package/dist/chat/message-list.js +35 -0
  17. package/dist/chrome/_edge-scroller.js +12 -1
  18. package/dist/chrome/_tabs-scroll.d.ts +1 -1
  19. package/dist/chrome/_tabs-scroll.js +1 -1
  20. package/dist/chrome/app-shell.d.ts +52 -2
  21. package/dist/chrome/app-shell.js +80 -8
  22. package/dist/chrome/index.d.ts +2 -2
  23. package/dist/configurator/_export.js +3 -2
  24. package/dist/configurator/_overrides.d.ts +1 -1
  25. package/dist/configurator/_overrides.js +18 -6
  26. package/dist/configurator/token-editor.js +4 -1
  27. package/dist/date/_segments.js +37 -2
  28. package/dist/elements/activity-graph.d.ts +40 -0
  29. package/dist/elements/activity-graph.js +81 -0
  30. package/dist/elements/agent-card.d.ts +49 -0
  31. package/dist/elements/agent-card.js +91 -0
  32. package/dist/elements/agent-handoff.d.ts +24 -0
  33. package/dist/elements/agent-handoff.js +53 -0
  34. package/dist/elements/agent-mode-badge.d.ts +72 -0
  35. package/dist/elements/agent-mode-badge.js +110 -0
  36. package/dist/elements/agent-plan.d.ts +24 -0
  37. package/dist/elements/agent-plan.js +74 -0
  38. package/dist/elements/agent-status.d.ts +29 -0
  39. package/dist/elements/agent-status.js +46 -0
  40. package/dist/elements/agent-surface.d.ts +65 -0
  41. package/dist/elements/agent-surface.js +68 -0
  42. package/dist/elements/animated-number.d.ts +86 -0
  43. package/dist/elements/animated-number.js +118 -0
  44. package/dist/elements/approval-card.d.ts +40 -0
  45. package/dist/elements/approval-card.js +78 -0
  46. package/dist/elements/artifact-card.d.ts +30 -0
  47. package/dist/elements/artifact-card.js +58 -0
  48. package/dist/elements/background-inbox.d.ts +39 -0
  49. package/dist/elements/background-inbox.js +60 -0
  50. package/dist/elements/canvas-split.d.ts +77 -0
  51. package/dist/elements/canvas-split.js +138 -0
  52. package/dist/elements/chart.d.ts +41 -0
  53. package/dist/elements/chart.js +117 -0
  54. package/dist/elements/chat-panel.d.ts +46 -0
  55. package/dist/elements/chat-panel.js +104 -0
  56. package/dist/elements/checkpoint-history.d.ts +31 -0
  57. package/dist/elements/checkpoint-history.js +65 -0
  58. package/dist/elements/clamp.d.ts +90 -0
  59. package/dist/elements/clamp.js +109 -0
  60. package/dist/elements/code-diff.d.ts +42 -0
  61. package/dist/elements/code-diff.js +69 -0
  62. package/dist/elements/code-runner.d.ts +38 -0
  63. package/dist/elements/code-runner.js +84 -0
  64. package/dist/elements/command-palette.d.ts +48 -0
  65. package/dist/elements/command-palette.js +129 -0
  66. package/dist/elements/compaction-row.d.ts +63 -0
  67. package/dist/elements/compaction-row.js +110 -0
  68. package/dist/elements/comparison-card.d.ts +47 -0
  69. package/dist/elements/comparison-card.js +69 -0
  70. package/dist/elements/composer.d.ts +274 -0
  71. package/dist/elements/composer.js +505 -0
  72. package/dist/elements/computer-use.d.ts +40 -0
  73. package/dist/elements/computer-use.js +92 -0
  74. package/dist/elements/confidence-marker.d.ts +39 -0
  75. package/dist/elements/confidence-marker.js +64 -0
  76. package/dist/elements/connection-state.d.ts +29 -0
  77. package/dist/elements/connection-state.js +66 -0
  78. package/dist/elements/context-breakdown.d.ts +30 -0
  79. package/dist/elements/context-breakdown.js +86 -0
  80. package/dist/elements/context-usage.d.ts +99 -0
  81. package/dist/elements/context-usage.js +225 -0
  82. package/dist/elements/conversation-search.d.ts +48 -0
  83. package/dist/elements/conversation-search.js +88 -0
  84. package/dist/elements/cost-meter.d.ts +33 -0
  85. package/dist/elements/cost-meter.js +75 -0
  86. package/dist/elements/data-table.d.ts +31 -0
  87. package/dist/elements/data-table.js +67 -0
  88. package/dist/elements/day-separator.d.ts +34 -0
  89. package/dist/elements/day-separator.js +50 -0
  90. package/dist/elements/diagram.d.ts +34 -0
  91. package/dist/elements/diagram.js +75 -0
  92. package/dist/elements/document-reference.d.ts +37 -0
  93. package/dist/elements/document-reference.js +66 -0
  94. package/dist/elements/draft-restore.d.ts +27 -0
  95. package/dist/elements/draft-restore.js +54 -0
  96. package/dist/elements/edit-message.d.ts +36 -0
  97. package/dist/elements/edit-message.js +77 -0
  98. package/dist/elements/elements.css +459 -0
  99. package/dist/elements/elicitation-form.d.ts +48 -0
  100. package/dist/elements/elicitation-form.js +106 -0
  101. package/dist/elements/empty-state.d.ts +52 -0
  102. package/dist/elements/empty-state.js +98 -0
  103. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  104. package/dist/elements/end-of-turn-summary.js +75 -0
  105. package/dist/elements/error-state.d.ts +29 -0
  106. package/dist/elements/error-state.js +55 -0
  107. package/dist/elements/feedback-dialog.d.ts +36 -0
  108. package/dist/elements/feedback-dialog.js +81 -0
  109. package/dist/elements/file-tree.d.ts +45 -0
  110. package/dist/elements/file-tree.js +84 -0
  111. package/dist/elements/flow-graph.d.ts +45 -0
  112. package/dist/elements/flow-graph.js +78 -0
  113. package/dist/elements/generative/chart.js +200 -0
  114. package/dist/elements/generative/faults.js +111 -0
  115. package/dist/elements/generative/icons.d.ts +41 -0
  116. package/dist/elements/generative/icons.js +190 -0
  117. package/dist/elements/generative/intrinsics.js +483 -0
  118. package/dist/elements/generative/spec.d.ts +110 -0
  119. package/dist/elements/generative/spec.js +366 -0
  120. package/dist/elements/generative.css +1145 -0
  121. package/dist/elements/generative.d.ts +144 -0
  122. package/dist/elements/generative.js +126 -0
  123. package/dist/elements/guardrail-notice.d.ts +29 -0
  124. package/dist/elements/guardrail-notice.js +63 -0
  125. package/dist/elements/image-generation.d.ts +18 -0
  126. package/dist/elements/image-generation.js +64 -0
  127. package/dist/elements/index.d.ts +116 -0
  128. package/dist/elements/index.js +115 -0
  129. package/dist/elements/inline-citation.d.ts +43 -0
  130. package/dist/elements/inline-citation.js +93 -0
  131. package/dist/elements/job-progress.d.ts +49 -0
  132. package/dist/elements/job-progress.js +74 -0
  133. package/dist/elements/launcher-bubble.d.ts +34 -0
  134. package/dist/elements/launcher-bubble.js +72 -0
  135. package/dist/elements/live-region-announcer.d.ts +130 -0
  136. package/dist/elements/live-region-announcer.js +230 -0
  137. package/dist/elements/loading-state.d.ts +27 -0
  138. package/dist/elements/loading-state.js +36 -0
  139. package/dist/elements/map-answer.d.ts +38 -0
  140. package/dist/elements/map-answer.js +93 -0
  141. package/dist/elements/markdown.d.ts +131 -0
  142. package/dist/elements/markdown.js +528 -0
  143. package/dist/elements/math-block.d.ts +51 -0
  144. package/dist/elements/math-block.js +70 -0
  145. package/dist/elements/mcp-server-panel.d.ts +41 -0
  146. package/dist/elements/mcp-server-panel.js +115 -0
  147. package/dist/elements/memory-chips.d.ts +30 -0
  148. package/dist/elements/memory-chips.js +43 -0
  149. package/dist/elements/message-actions.d.ts +38 -0
  150. package/dist/elements/message-actions.js +71 -0
  151. package/dist/elements/message-attachment.d.ts +48 -0
  152. package/dist/elements/message-attachment.js +63 -0
  153. package/dist/elements/message-branches.d.ts +25 -0
  154. package/dist/elements/message-branches.js +65 -0
  155. package/dist/elements/message-pair.d.ts +33 -0
  156. package/dist/elements/message-pair.js +65 -0
  157. package/dist/elements/message-queue.d.ts +31 -0
  158. package/dist/elements/message-queue.js +80 -0
  159. package/dist/elements/message-timing.d.ts +33 -0
  160. package/dist/elements/message-timing.js +37 -0
  161. package/dist/elements/mobile-composer.d.ts +44 -0
  162. package/dist/elements/mobile-composer.js +88 -0
  163. package/dist/elements/model-picker.d.ts +38 -0
  164. package/dist/elements/model-picker.js +69 -0
  165. package/dist/elements/number-ticker.d.ts +18 -0
  166. package/dist/elements/number-ticker.js +47 -0
  167. package/dist/elements/onboarding.d.ts +30 -0
  168. package/dist/elements/onboarding.js +75 -0
  169. package/dist/elements/permission-grant.d.ts +35 -0
  170. package/dist/elements/permission-grant.js +86 -0
  171. package/dist/elements/permission-scopes.d.ts +215 -0
  172. package/dist/elements/permission-scopes.js +249 -0
  173. package/dist/elements/prompt-library.d.ts +43 -0
  174. package/dist/elements/prompt-library.js +117 -0
  175. package/dist/elements/queue-dock.d.ts +101 -0
  176. package/dist/elements/queue-dock.js +132 -0
  177. package/dist/elements/quota-banner.d.ts +26 -0
  178. package/dist/elements/quota-banner.js +66 -0
  179. package/dist/elements/quote-reply.d.ts +44 -0
  180. package/dist/elements/quote-reply.js +79 -0
  181. package/dist/elements/range.d.ts +29 -0
  182. package/dist/elements/range.js +45 -0
  183. package/dist/elements/read-aloud.d.ts +45 -0
  184. package/dist/elements/read-aloud.js +75 -0
  185. package/dist/elements/reasoning-effort.d.ts +36 -0
  186. package/dist/elements/reasoning-effort.js +67 -0
  187. package/dist/elements/reasoning-panel.d.ts +46 -0
  188. package/dist/elements/reasoning-panel.js +75 -0
  189. package/dist/elements/recommendation-card.d.ts +45 -0
  190. package/dist/elements/recommendation-card.js +83 -0
  191. package/dist/elements/regenerate-menu.d.ts +45 -0
  192. package/dist/elements/regenerate-menu.js +51 -0
  193. package/dist/elements/replay.d.ts +217 -0
  194. package/dist/elements/replay.js +498 -0
  195. package/dist/elements/research-report.d.ts +38 -0
  196. package/dist/elements/research-report.js +69 -0
  197. package/dist/elements/retrieval-chunks.d.ts +43 -0
  198. package/dist/elements/retrieval-chunks.js +81 -0
  199. package/dist/elements/revert-dock.d.ts +159 -0
  200. package/dist/elements/revert-dock.js +327 -0
  201. package/dist/elements/reviewable-diff.d.ts +45 -0
  202. package/dist/elements/reviewable-diff.js +110 -0
  203. package/dist/elements/risk-badge.d.ts +52 -0
  204. package/dist/elements/risk-badge.js +91 -0
  205. package/dist/elements/schedule-card.d.ts +42 -0
  206. package/dist/elements/schedule-card.js +90 -0
  207. package/dist/elements/score-breakdown.d.ts +47 -0
  208. package/dist/elements/score-breakdown.js +82 -0
  209. package/dist/elements/scroll-anchor.d.ts +32 -0
  210. package/dist/elements/scroll-anchor.js +121 -0
  211. package/dist/elements/settings-panel.d.ts +52 -0
  212. package/dist/elements/settings-panel.js +107 -0
  213. package/dist/elements/shared-conversation.d.ts +39 -0
  214. package/dist/elements/shared-conversation.js +68 -0
  215. package/dist/elements/sources.d.ts +33 -0
  216. package/dist/elements/sources.js +61 -0
  217. package/dist/elements/speaker-identity.d.ts +32 -0
  218. package/dist/elements/speaker-identity.js +51 -0
  219. package/dist/elements/spec-sheet.d.ts +31 -0
  220. package/dist/elements/spec-sheet.js +45 -0
  221. package/dist/elements/stopped-run.d.ts +22 -0
  222. package/dist/elements/stopped-run.js +50 -0
  223. package/dist/elements/streaming-text.d.ts +31 -0
  224. package/dist/elements/streaming-text.js +45 -0
  225. package/dist/elements/subagent-list.d.ts +37 -0
  226. package/dist/elements/subagent-list.js +79 -0
  227. package/dist/elements/suggestions.d.ts +30 -0
  228. package/dist/elements/suggestions.js +36 -0
  229. package/dist/elements/surfaces.d.ts +85 -0
  230. package/dist/elements/surfaces.js +107 -0
  231. package/dist/elements/tail-status.d.ts +131 -0
  232. package/dist/elements/tail-status.js +94 -0
  233. package/dist/elements/terminal-block.d.ts +29 -0
  234. package/dist/elements/terminal-block.js +54 -0
  235. package/dist/elements/thinking-indicator.d.ts +18 -0
  236. package/dist/elements/thinking-indicator.js +36 -0
  237. package/dist/elements/thread-list.d.ts +35 -0
  238. package/dist/elements/thread-list.js +68 -0
  239. package/dist/elements/thread-search.d.ts +42 -0
  240. package/dist/elements/thread-search.js +99 -0
  241. package/dist/elements/timeline.d.ts +37 -0
  242. package/dist/elements/timeline.js +46 -0
  243. package/dist/elements/todo-list.d.ts +42 -0
  244. package/dist/elements/todo-list.js +59 -0
  245. package/dist/elements/tool-call.d.ts +41 -0
  246. package/dist/elements/tool-call.js +85 -0
  247. package/dist/elements/tool-error.d.ts +39 -0
  248. package/dist/elements/tool-error.js +76 -0
  249. package/dist/elements/tool-group.d.ts +45 -0
  250. package/dist/elements/tool-group.js +71 -0
  251. package/dist/elements/tool-timeline.d.ts +65 -0
  252. package/dist/elements/tool-timeline.js +88 -0
  253. package/dist/elements/trace-waterfall.d.ts +37 -0
  254. package/dist/elements/trace-waterfall.js +69 -0
  255. package/dist/elements/transcript-rules.d.ts +67 -0
  256. package/dist/elements/transcript-rules.js +95 -0
  257. package/dist/elements/turn-footer.d.ts +74 -0
  258. package/dist/elements/turn-footer.js +101 -0
  259. package/dist/elements/typing-indicator.d.ts +16 -0
  260. package/dist/elements/typing-indicator.js +51 -0
  261. package/dist/elements/verdict-row.d.ts +89 -0
  262. package/dist/elements/verdict-row.js +150 -0
  263. package/dist/elements/vocabulary.d.ts +612 -0
  264. package/dist/elements/vocabulary.js +611 -0
  265. package/dist/elements/voice-conversation.d.ts +49 -0
  266. package/dist/elements/voice-conversation.js +123 -0
  267. package/dist/elements/web-preview.d.ts +32 -0
  268. package/dist/elements/web-preview.js +66 -0
  269. package/dist/elements/web-search.d.ts +37 -0
  270. package/dist/elements/web-search.js +66 -0
  271. package/dist/elements/work-collapse.d.ts +103 -0
  272. package/dist/elements/work-collapse.js +131 -0
  273. package/dist/icons/containers.d.ts +89 -0
  274. package/dist/icons/containers.js +295 -0
  275. package/dist/icons/index.d.ts +2 -0
  276. package/dist/index.d.ts +9 -7
  277. package/dist/index.js +3 -2
  278. package/dist/instruments/index.d.ts +2 -2
  279. package/dist/instruments/index.js +2 -2
  280. package/dist/instruments/table.d.ts +14 -1
  281. package/dist/instruments/table.js +20 -1
  282. package/dist/instruments/two-step-button.js +25 -6
  283. package/dist/layout/sidebar.d.ts +19 -1
  284. package/dist/layout/sidebar.js +19 -1
  285. package/dist/primitives/button.js +11 -1
  286. package/dist/primitives/chip.d.ts +34 -8
  287. package/dist/primitives/chip.js +97 -11
  288. package/dist/styles.css +11 -1
  289. package/dist/system/agent-skin.d.ts +27 -0
  290. package/dist/system/agent-skin.js +20 -0
  291. package/dist/system/index.d.ts +3 -3
  292. package/dist/system/portal.d.ts +5 -3
  293. package/dist/system/portal.js +36 -8
  294. package/dist/system/prepaint.d.ts +20 -2
  295. package/dist/system/prepaint.js +39 -33
  296. package/dist/system/theme-provider.d.ts +13 -2
  297. package/dist/system/theme-provider.js +107 -26
  298. package/dist/system/use-density.d.ts +9 -0
  299. package/dist/system/use-density.js +9 -0
  300. package/dist/system/use-isomorphic-layout-effect.js +19 -1
  301. package/dist/theming/_presets.d.ts +1 -1
  302. package/dist/theming/_presets.js +124 -8
  303. package/dist/theming/contrast.d.ts +16 -4
  304. package/dist/theming/contrast.js +33 -6
  305. package/dist/theming/create-theme.d.ts +8 -4
  306. package/dist/theming/create-theme.js +56 -20
  307. package/dist/theming/serialize.d.ts +11 -2
  308. package/dist/theming/serialize.js +87 -9
  309. package/manifest/components/accordion.json +154 -0
  310. package/manifest/components/activity-graph.json +88 -0
  311. package/manifest/components/agent-card.json +120 -0
  312. package/manifest/components/agent-handoff.json +87 -0
  313. package/manifest/components/agent-mode-badge.json +84 -0
  314. package/manifest/components/agent-pile.json +116 -0
  315. package/manifest/components/agent-plan.json +67 -0
  316. package/manifest/components/agent-status.json +73 -0
  317. package/manifest/components/agent-surface.json +78 -0
  318. package/manifest/components/alert-dialog.json +190 -0
  319. package/manifest/components/animated-number.json +67 -0
  320. package/manifest/components/app-bar.json +244 -0
  321. package/manifest/components/app-shell.json +383 -0
  322. package/manifest/components/app-window-frame.json +102 -0
  323. package/manifest/components/approval-card.json +106 -0
  324. package/manifest/components/artifact-card.json +81 -0
  325. package/manifest/components/ask-box.json +209 -0
  326. package/manifest/components/audience-icon.json +52 -0
  327. package/manifest/components/autocomplete.json +197 -0
  328. package/manifest/components/avatar-group.json +72 -0
  329. package/manifest/components/avatar.json +95 -0
  330. package/manifest/components/background-inbox.json +71 -0
  331. package/manifest/components/branch-picker.json +124 -0
  332. package/manifest/components/breadcrumb.json +74 -0
  333. package/manifest/components/button-group.json +74 -0
  334. package/manifest/components/button.json +126 -0
  335. package/manifest/components/calendar.json +65 -0
  336. package/manifest/components/canvas-split-body.json +62 -0
  337. package/manifest/components/canvas-split-document.json +54 -0
  338. package/manifest/components/canvas-split-header.json +83 -0
  339. package/manifest/components/canvas-split-line.json +62 -0
  340. package/manifest/components/canvas-split-message.json +62 -0
  341. package/manifest/components/canvas-split-thread.json +54 -0
  342. package/manifest/components/canvas-split.json +60 -0
  343. package/manifest/components/card.json +140 -0
  344. package/manifest/components/carousel.json +200 -0
  345. package/manifest/components/catalogue-icon.json +52 -0
  346. package/manifest/components/channel-beta-icon.json +52 -0
  347. package/manifest/components/channel-matrix.json +173 -0
  348. package/manifest/components/channel-released-icon.json +52 -0
  349. package/manifest/components/chart-container.json +111 -0
  350. package/manifest/components/chart-ramp.json +72 -0
  351. package/manifest/components/chart-swatch.json +65 -0
  352. package/manifest/components/chart-tooltip-content.json +114 -0
  353. package/manifest/components/chart.json +93 -0
  354. package/manifest/components/chat-empty-state.json +55 -0
  355. package/manifest/components/chat-panel-assistant-message.json +51 -0
  356. package/manifest/components/chat-panel-composer.json +66 -0
  357. package/manifest/components/chat-panel-messages.json +51 -0
  358. package/manifest/components/chat-panel-typing.json +51 -0
  359. package/manifest/components/chat-panel-user-message.json +51 -0
  360. package/manifest/components/chat-panel.json +57 -0
  361. package/manifest/components/checkbox-group.json +68 -0
  362. package/manifest/components/checkbox.json +93 -0
  363. package/manifest/components/checkpoint-history.json +80 -0
  364. package/manifest/components/chip.json +144 -0
  365. package/manifest/components/clamp.json +102 -0
  366. package/manifest/components/cli-tool-icon.json +52 -0
  367. package/manifest/components/code-diff.json +87 -0
  368. package/manifest/components/code-runner.json +97 -0
  369. package/manifest/components/collapsible.json +120 -0
  370. package/manifest/components/color-area.json +59 -0
  371. package/manifest/components/color-field.json +79 -0
  372. package/manifest/components/color-picker.json +175 -0
  373. package/manifest/components/color-slider.json +75 -0
  374. package/manifest/components/color-swatch.json +68 -0
  375. package/manifest/components/colors-section.json +66 -0
  376. package/manifest/components/combobox.json +198 -0
  377. package/manifest/components/command-palette.json +177 -0
  378. package/manifest/components/compaction-row.json +100 -0
  379. package/manifest/components/comparison-card.json +83 -0
  380. package/manifest/components/composer-actions.json +65 -0
  381. package/manifest/components/composer-attach-button.json +65 -0
  382. package/manifest/components/composer-attachment-chip.json +75 -0
  383. package/manifest/components/composer-attachments.json +60 -0
  384. package/manifest/components/composer-bar.json +73 -0
  385. package/manifest/components/composer-command-item.json +79 -0
  386. package/manifest/components/composer-context.json +67 -0
  387. package/manifest/components/composer-input.json +73 -0
  388. package/manifest/components/composer-menu-item.json +72 -0
  389. package/manifest/components/composer-menu.json +79 -0
  390. package/manifest/components/composer-model-item.json +75 -0
  391. package/manifest/components/composer-model-trigger.json +75 -0
  392. package/manifest/components/composer-person-item.json +79 -0
  393. package/manifest/components/composer-send.json +80 -0
  394. package/manifest/components/composer-toolbar.json +65 -0
  395. package/manifest/components/composer-voice-button.json +68 -0
  396. package/manifest/components/composer-voice.json +75 -0
  397. package/manifest/components/composer.json +176 -0
  398. package/manifest/components/computer-use.json +84 -0
  399. package/manifest/components/confidence-marker.json +74 -0
  400. package/manifest/components/connection-state.json +84 -0
  401. package/manifest/components/container.json +60 -0
  402. package/manifest/components/context-breakdown.json +65 -0
  403. package/manifest/components/context-menu.json +121 -0
  404. package/manifest/components/context-usage.json +85 -0
  405. package/manifest/components/conversation-search.json +92 -0
  406. package/manifest/components/copy-button.json +93 -0
  407. package/manifest/components/cost-meter.json +74 -0
  408. package/manifest/components/cue-logotype.json +96 -0
  409. package/manifest/components/cue-mark.json +97 -0
  410. package/manifest/components/cue-portal-frame.json +55 -0
  411. package/manifest/components/data-table-pagination.json +83 -0
  412. package/manifest/components/data-table-toolbar.json +104 -0
  413. package/manifest/components/date-field.json +80 -0
  414. package/manifest/components/date-picker.json +191 -0
  415. package/manifest/components/date-range-picker.json +191 -0
  416. package/manifest/components/day-separator.json +58 -0
  417. package/manifest/components/delegation-card.json +144 -0
  418. package/manifest/components/density.json +58 -0
  419. package/manifest/components/description-list.json +84 -0
  420. package/manifest/components/diagram.json +100 -0
  421. package/manifest/components/dialog.json +198 -0
  422. package/manifest/components/disclosure.json +109 -0
  423. package/manifest/components/dmx-bar.json +94 -0
  424. package/manifest/components/dmx-strip.json +101 -0
  425. package/manifest/components/document-reference.json +90 -0
  426. package/manifest/components/draft-restore.json +82 -0
  427. package/manifest/components/drawer.json +179 -0
  428. package/manifest/components/dropdown-menu.json +229 -0
  429. package/manifest/components/edit-message.json +105 -0
  430. package/manifest/components/elements-command-palette.json +100 -0
  431. package/manifest/components/elements-composer.json +71 -0
  432. package/manifest/components/elements-data-table.json +68 -0
  433. package/manifest/components/elements-timeline.json +69 -0
  434. package/manifest/components/elicitation-form.json +103 -0
  435. package/manifest/components/empty-state-composer.json +64 -0
  436. package/manifest/components/empty-state-greeting.json +49 -0
  437. package/manifest/components/empty-state-suggestion.json +57 -0
  438. package/manifest/components/empty-state-suggestions.json +49 -0
  439. package/manifest/components/empty-state.json +90 -0
  440. package/manifest/components/end-of-turn-summary.json +77 -0
  441. package/manifest/components/env-var-input.json +150 -0
  442. package/manifest/components/error-state.json +80 -0
  443. package/manifest/components/export-dialog.json +84 -0
  444. package/manifest/components/eyebrow.json +56 -0
  445. package/manifest/components/feedback-dialog.json +107 -0
  446. package/manifest/components/field-description.json +63 -0
  447. package/manifest/components/field-error.json +77 -0
  448. package/manifest/components/field-label.json +63 -0
  449. package/manifest/components/field.json +79 -0
  450. package/manifest/components/file-tree.json +83 -0
  451. package/manifest/components/file-upload.json +159 -0
  452. package/manifest/components/flow-background.json +50 -0
  453. package/manifest/components/flow-controls.json +50 -0
  454. package/manifest/components/flow-graph.json +75 -0
  455. package/manifest/components/folder-icon.json +52 -0
  456. package/manifest/components/footer.json +112 -0
  457. package/manifest/components/frac.json +59 -0
  458. package/manifest/components/generation-loader.json +64 -0
  459. package/manifest/components/generative-ui.json +93 -0
  460. package/manifest/components/grid.json +81 -0
  461. package/manifest/components/group-bar.json +102 -0
  462. package/manifest/components/guardrail-notice.json +91 -0
  463. package/manifest/components/hover-card.json +151 -0
  464. package/manifest/components/icon-button.json +88 -0
  465. package/manifest/components/image-generation.json +67 -0
  466. package/manifest/components/info-tip.json +98 -0
  467. package/manifest/components/inline-citation.json +77 -0
  468. package/manifest/components/input-group.json +91 -0
  469. package/manifest/components/input.json +89 -0
  470. package/manifest/components/item.json +129 -0
  471. package/manifest/components/job-progress.json +96 -0
  472. package/manifest/components/kbd.json +52 -0
  473. package/manifest/components/launcher-bubble.json +105 -0
  474. package/manifest/components/link.json +81 -0
  475. package/manifest/components/live-region-announcer.json +79 -0
  476. package/manifest/components/log-viewer.json +139 -0
  477. package/manifest/components/map-answer.json +83 -0
  478. package/manifest/components/markdown-text.json +94 -0
  479. package/manifest/components/math-block.json +74 -0
  480. package/manifest/components/mcp-server-icon.json +52 -0
  481. package/manifest/components/mcp-server-panel.json +87 -0
  482. package/manifest/components/memory-chips.json +65 -0
  483. package/manifest/components/menubar.json +157 -0
  484. package/manifest/components/message-actions.json +99 -0
  485. package/manifest/components/message-attachments.json +63 -0
  486. package/manifest/components/message-branches.json +71 -0
  487. package/manifest/components/message-list.json +100 -0
  488. package/manifest/components/message-pair.json +86 -0
  489. package/manifest/components/message-queue.json +74 -0
  490. package/manifest/components/message-timing.json +62 -0
  491. package/manifest/components/message.json +116 -0
  492. package/manifest/components/meter.json +114 -0
  493. package/manifest/components/mobile-composer.json +126 -0
  494. package/manifest/components/model-picker.json +76 -0
  495. package/manifest/components/multi-select.json +190 -0
  496. package/manifest/components/musical-time-input.json +113 -0
  497. package/manifest/components/navigation-menu.json +226 -0
  498. package/manifest/components/node-card.json +109 -0
  499. package/manifest/components/node-handle.json +69 -0
  500. package/manifest/components/number-field.json +107 -0
  501. package/manifest/components/number-ticker.json +61 -0
  502. package/manifest/components/onboarding.json +84 -0
  503. package/manifest/components/otp-field.json +128 -0
  504. package/manifest/components/page-shell.json +96 -0
  505. package/manifest/components/pagination.json +92 -0
  506. package/manifest/components/panel-header.json +77 -0
  507. package/manifest/components/panel.json +71 -0
  508. package/manifest/components/password-input.json +119 -0
  509. package/manifest/components/permission-grant.json +92 -0
  510. package/manifest/components/permission-scopes.json +139 -0
  511. package/manifest/components/piano-keyboard.json +120 -0
  512. package/manifest/components/plussie.json +111 -0
  513. package/manifest/components/popover.json +193 -0
  514. package/manifest/components/preset-section.json +73 -0
  515. package/manifest/components/progress.json +95 -0
  516. package/manifest/components/prompt-library.json +99 -0
  517. package/manifest/components/queue-dock.json +110 -0
  518. package/manifest/components/quota-banner.json +94 -0
  519. package/manifest/components/quote-reply.json +105 -0
  520. package/manifest/components/radio-group.json +73 -0
  521. package/manifest/components/radio.json +80 -0
  522. package/manifest/components/rating.json +141 -0
  523. package/manifest/components/read-aloud.json +111 -0
  524. package/manifest/components/reasoning-effort.json +81 -0
  525. package/manifest/components/reasoning-panel.json +108 -0
  526. package/manifest/components/recommendation-card.json +107 -0
  527. package/manifest/components/regenerate-menu.json +89 -0
  528. package/manifest/components/replay-player.json +102 -0
  529. package/manifest/components/research-report.json +76 -0
  530. package/manifest/components/resizable.json +88 -0
  531. package/manifest/components/retrieval-chunks.json +84 -0
  532. package/manifest/components/revert-dock.json +150 -0
  533. package/manifest/components/reviewable-diff.json +93 -0
  534. package/manifest/components/risk-badge.json +74 -0
  535. package/manifest/components/row.json +109 -0
  536. package/manifest/components/schedule-card.json +101 -0
  537. package/manifest/components/score-breakdown.json +91 -0
  538. package/manifest/components/scroll-anchor.json +72 -0
  539. package/manifest/components/scroll-area.json +91 -0
  540. package/manifest/components/scrollable-tabs-list.json +83 -0
  541. package/manifest/components/scrub-input.json +200 -0
  542. package/manifest/components/seam-cell.json +75 -0
  543. package/manifest/components/seam-grid.json +75 -0
  544. package/manifest/components/seam-list.json +56 -0
  545. package/manifest/components/search-input.json +134 -0
  546. package/manifest/components/section-header.json +112 -0
  547. package/manifest/components/segmented-control.json +138 -0
  548. package/manifest/components/select.json +194 -0
  549. package/manifest/components/separator.json +53 -0
  550. package/manifest/components/settings-panel.json +118 -0
  551. package/manifest/components/shape-section.json +66 -0
  552. package/manifest/components/shared-conversation.json +89 -0
  553. package/manifest/components/sheet.json +186 -0
  554. package/manifest/components/shimmer-label.json +59 -0
  555. package/manifest/components/sidebar.json +198 -0
  556. package/manifest/components/signal-edge.json +56 -0
  557. package/manifest/components/skeleton.json +46 -0
  558. package/manifest/components/skill-icon.json +52 -0
  559. package/manifest/components/slider.json +89 -0
  560. package/manifest/components/sources.json +83 -0
  561. package/manifest/components/sparkline.json +76 -0
  562. package/manifest/components/speaker-identity.json +61 -0
  563. package/manifest/components/spec-sheet.json +80 -0
  564. package/manifest/components/spectrum-visualizer.json +115 -0
  565. package/manifest/components/spinner.json +61 -0
  566. package/manifest/components/stack-icon.json +52 -0
  567. package/manifest/components/stack.json +96 -0
  568. package/manifest/components/stacks-matrix-icon.json +52 -0
  569. package/manifest/components/stat.json +87 -0
  570. package/manifest/components/status-bar.json +58 -0
  571. package/manifest/components/status-dot.json +78 -0
  572. package/manifest/components/stepper.json +89 -0
  573. package/manifest/components/stopped-run.json +81 -0
  574. package/manifest/components/streaming-text.json +71 -0
  575. package/manifest/components/sub.json +44 -0
  576. package/manifest/components/subagent-list.json +88 -0
  577. package/manifest/components/suggestions.json +84 -0
  578. package/manifest/components/sup.json +44 -0
  579. package/manifest/components/swap-label.json +71 -0
  580. package/manifest/components/switch.json +87 -0
  581. package/manifest/components/table-scroll-region.json +69 -0
  582. package/manifest/components/table.json +155 -0
  583. package/manifest/components/tabs.json +145 -0
  584. package/manifest/components/tags-input.json +190 -0
  585. package/manifest/components/tail-status.json +109 -0
  586. package/manifest/components/terminal-block.json +91 -0
  587. package/manifest/components/terminal-frame.json +119 -0
  588. package/manifest/components/textarea.json +76 -0
  589. package/manifest/components/theme-configurator.json +124 -0
  590. package/manifest/components/theme-provider.json +134 -0
  591. package/manifest/components/thinking-indicator.json +63 -0
  592. package/manifest/components/thread-list.json +76 -0
  593. package/manifest/components/thread-search.json +90 -0
  594. package/manifest/components/threshold-rail.json +160 -0
  595. package/manifest/components/time-boundary.json +62 -0
  596. package/manifest/components/time-field.json +80 -0
  597. package/manifest/components/timeline-ruler.json +139 -0
  598. package/manifest/components/timeline.json +115 -0
  599. package/manifest/components/title-bar.json +82 -0
  600. package/manifest/components/toast.json +130 -0
  601. package/manifest/components/todo-list.json +69 -0
  602. package/manifest/components/toggle-group.json +106 -0
  603. package/manifest/components/toggle.json +109 -0
  604. package/manifest/components/token-editor.json +90 -0
  605. package/manifest/components/tool-call-card.json +200 -0
  606. package/manifest/components/tool-call.json +119 -0
  607. package/manifest/components/tool-error.json +114 -0
  608. package/manifest/components/tool-group.json +83 -0
  609. package/manifest/components/tool-timeline.json +119 -0
  610. package/manifest/components/toolbar.json +163 -0
  611. package/manifest/components/tooltip.json +164 -0
  612. package/manifest/components/trace-waterfall.json +74 -0
  613. package/manifest/components/tree-visibility-toggle.json +84 -0
  614. package/manifest/components/tree.json +140 -0
  615. package/manifest/components/turn-footer.json +105 -0
  616. package/manifest/components/two-step-button.json +113 -0
  617. package/manifest/components/typing-indicator.json +53 -0
  618. package/manifest/components/universe-grid.json +127 -0
  619. package/manifest/components/unread-divider.json +55 -0
  620. package/manifest/components/usage-chart.json +124 -0
  621. package/manifest/components/verdict-row.json +91 -0
  622. package/manifest/components/voice-conversation.json +109 -0
  623. package/manifest/components/web-preview.json +87 -0
  624. package/manifest/components/web-search.json +92 -0
  625. package/manifest/components/work-collapse.json +102 -0
  626. package/manifest/manifest.json +4779 -0
  627. package/manifest/tokens.json +159 -0
  628. package/package.json +54 -5
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "ComposerPersonItem",
3
+ "slug": "composer-person-item",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "A mentionable person in the menu: their initial, their name, and whether they are an\nagent or a human.",
11
+ "props": [
12
+ {
13
+ "name": "person",
14
+ "type": "ComposerPerson",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "The person this row would mention."
18
+ },
19
+ {
20
+ "name": "active",
21
+ "type": "boolean",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Whether this is the row Enter would pick."
25
+ }
26
+ ],
27
+ "typeReferences": [
28
+ "Omit<ComponentProps<\"button\">, \"children\"> & {\n /** The person this row would mention. */\n person: ComposerPerson;\n /** Whether this is the row Enter would pick. */\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 mentionable person in the menu: their initial, their name, and whether they are an agent or a human.",
56
+ "examples": [],
57
+ "status": "todo-docs",
58
+ "url": "/docs/components/composer-person-item",
59
+ "mdUrl": "/docs/components/composer-person-item.md",
60
+ "jsonUrl": "/r/components/composer-person-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
+ }
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "ComposerSend",
3
+ "slug": "composer-send",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "Send, which becomes stop while the model is streaming. Dim when the input is empty\nand there is nothing to send; the arrow and the square cross-fade rather than swap.",
11
+ "props": [
12
+ {
13
+ "name": "streaming",
14
+ "type": "boolean",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Swaps the arrow for a stop square."
18
+ },
19
+ {
20
+ "name": "idle",
21
+ "type": "boolean",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Whether the input is empty. Dims the button when there is nothing to send."
25
+ }
26
+ ],
27
+ "typeReferences": [
28
+ "Omit<ComponentProps<\"button\">, \"children\"> & {\n /** Swaps the arrow for a stop square. */\n streaming: boolean;\n /** Whether the input is empty. Dims the button when there is nothing to send. */\n idle: 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": "Send, which becomes stop while the model is streaming.",
56
+ "examples": [],
57
+ "status": "todo-docs",
58
+ "url": "/docs/components/composer-send",
59
+ "mdUrl": "/docs/components/composer-send.md",
60
+ "jsonUrl": "/r/components/composer-send.json",
61
+ "specimens": [
62
+ {
63
+ "title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
64
+ "group": "elements-composer",
65
+ "components": [
66
+ "ElementsComposer",
67
+ "ComposerBar",
68
+ "ComposerInput",
69
+ "ComposerToolbar",
70
+ "ComposerActions",
71
+ "ComposerAttachButton",
72
+ "ComposerSend"
73
+ ],
74
+ "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>",
75
+ "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.",
76
+ "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."
77
+ }
78
+ ],
79
+ "todo": true
80
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "ComposerToolbar",
3
+ "slug": "composer-toolbar",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The row under the input, which holds the two `ComposerActions` clusters.",
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 row under the input, which holds the two `ComposerActions` clusters.",
41
+ "examples": [],
42
+ "status": "todo-docs",
43
+ "url": "/docs/components/composer-toolbar",
44
+ "mdUrl": "/docs/components/composer-toolbar.md",
45
+ "jsonUrl": "/r/components/composer-toolbar.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,68 @@
1
+ {
2
+ "name": "ComposerVoiceButton",
3
+ "slug": "composer-voice-button",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The microphone, which becomes a filled stop while recording.",
11
+ "props": [
12
+ {
13
+ "name": "active",
14
+ "type": "boolean",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Whether the microphone is open."
18
+ }
19
+ ],
20
+ "typeReferences": [
21
+ "Omit<ComponentProps<\"button\">, \"children\"> & {\n /** Whether the microphone is open. */\n active: 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 microphone, which becomes a filled stop while recording.",
49
+ "examples": [],
50
+ "status": "todo-docs",
51
+ "url": "/docs/components/composer-voice-button",
52
+ "mdUrl": "/docs/components/composer-voice-button.md",
53
+ "jsonUrl": "/r/components/composer-voice-button.json",
54
+ "specimens": [
55
+ {
56
+ "title": "ComposerVoice / ComposerVoiceButton",
57
+ "group": "elements-composer",
58
+ "components": [
59
+ "ComposerVoice",
60
+ "ComposerVoiceButton"
61
+ ],
62
+ "code": "<Specimens>\n <Specimen label=\"recording\" wide>\n <ComposerVoice recording seconds={14} />\n </Specimen>\n <Specimen label=\"transcribing\" wide>\n <ComposerVoice recording={false} seconds={14} />\n </Specimen>\n <Specimen label=\"idle button\">\n <ComposerVoiceButton active={false} />\n </Specimen>\n <Specimen label=\"live button\">\n <ComposerVoiceButton active />\n </Specimen>\n</Specimens>",
63
+ "note": "What replaces the input while the microphone is open. Recording gives a level meter and a running clock; stopping leaves the same row with a shimmering `Transcribing` where the clock was, because the microphone closing is not the end of the work. The meter is drawn from `seconds` — the caller owns the tick, so this bench holds it still and a real one animates.",
64
+ "interaction": "the button is labelled by state (`Start voice input` / `Stop recording`) and fills in while live, so the control that stops a recording never looks like the one that starts it."
65
+ }
66
+ ],
67
+ "todo": true
68
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "ComposerVoice",
3
+ "slug": "composer-voice",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "What replaces the input while the microphone is open: a level meter, a running clock\nwhile recording, and a shimmering `Transcribing` once it stops.",
11
+ "props": [
12
+ {
13
+ "name": "recording",
14
+ "type": "boolean",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Whether the microphone is open. False is the transcribing state, not the resting one."
18
+ },
19
+ {
20
+ "name": "seconds",
21
+ "type": "number",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "How long it has been recording. Drives both the clock and the meter, so the caller\nowns the tick."
25
+ }
26
+ ],
27
+ "typeReferences": [
28
+ "Omit<ComponentProps<\"div\">, \"children\"> & {\n /** Whether the microphone is open. False is the transcribing state, not the resting one. */\n recording: boolean;\n /**\n * How long it has been recording. Drives both the clock and the meter, so the caller\n * owns the tick.\n */\n seconds: number;\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": "What replaces the input while the microphone is open: a level meter, a running clock while recording, and a shimmering `Transcribing` once it stops.",
56
+ "examples": [],
57
+ "status": "todo-docs",
58
+ "url": "/docs/components/composer-voice",
59
+ "mdUrl": "/docs/components/composer-voice.md",
60
+ "jsonUrl": "/r/components/composer-voice.json",
61
+ "specimens": [
62
+ {
63
+ "title": "ComposerVoice / ComposerVoiceButton",
64
+ "group": "elements-composer",
65
+ "components": [
66
+ "ComposerVoice",
67
+ "ComposerVoiceButton"
68
+ ],
69
+ "code": "<Specimens>\n <Specimen label=\"recording\" wide>\n <ComposerVoice recording seconds={14} />\n </Specimen>\n <Specimen label=\"transcribing\" wide>\n <ComposerVoice recording={false} seconds={14} />\n </Specimen>\n <Specimen label=\"idle button\">\n <ComposerVoiceButton active={false} />\n </Specimen>\n <Specimen label=\"live button\">\n <ComposerVoiceButton active />\n </Specimen>\n</Specimens>",
70
+ "note": "What replaces the input while the microphone is open. Recording gives a level meter and a running clock; stopping leaves the same row with a shimmering `Transcribing` where the clock was, because the microphone closing is not the end of the work. The meter is drawn from `seconds` — the caller owns the tick, so this bench holds it still and a real one animates.",
71
+ "interaction": "the button is labelled by state (`Start voice input` / `Stop recording`) and fills in while live, so the control that stops a recording never looks like the one that starts it."
72
+ }
73
+ ],
74
+ "todo": true
75
+ }
@@ -0,0 +1,176 @@
1
+ {
2
+ "name": "Composer",
3
+ "slug": "composer",
4
+ "group": "chat",
5
+ "importPath": "@cueplusplus/ui",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "The thing you type into: an auto-growing textarea, a send affordance, and\nslots for everything a host wants to hang off them.\n\nThree decisions worth stating:\n\n- **It grows, it does not scroll.** A one-line box that hides the second half\n of what you wrote is the most-complained-about part of every chat UI. The\n box starts at the tall control rung and grows to `maxRows` before it gives\n up and scrolls.\n- **The submit gesture is a setting.** Enter-to-send is right for a chat lane\n and wrong for a prompt editor where every draft is three paragraphs, so\n both are first-class and the *other* key always inserts a newline.\n- **Stop is never disabled.** While a run is in flight the composer is\n `disabled`, but the button that ends the run cannot inherit that — a stop\n you cannot press is not a stop.\n\nThe ref lands on the textarea rather than the form: focusing the composer is\nthe thing hosts actually reach for.",
9
+ "props": [
10
+ {
11
+ "name": "onSend",
12
+ "type": "(value: string) => void",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "Fired with the trimmed draft. Never fired with an empty string."
16
+ },
17
+ {
18
+ "name": "value",
19
+ "type": "string",
20
+ "required": false,
21
+ "defaultValue": null,
22
+ "description": "Draft when the host owns it. Pass with `onValueChange`."
23
+ },
24
+ {
25
+ "name": "defaultValue",
26
+ "type": "string",
27
+ "required": false,
28
+ "defaultValue": "",
29
+ "description": "Initial draft when uncontrolled."
30
+ },
31
+ {
32
+ "name": "onValueChange",
33
+ "type": "((value: string) => void)",
34
+ "required": false,
35
+ "defaultValue": null,
36
+ "description": "Called on every keystroke with the new draft."
37
+ },
38
+ {
39
+ "name": "placeholder",
40
+ "type": "string",
41
+ "required": false,
42
+ "defaultValue": "Message",
43
+ "description": "Placeholder for the empty box. Defaults to `\"Message\"`."
44
+ },
45
+ {
46
+ "name": "disabled",
47
+ "type": "boolean",
48
+ "required": false,
49
+ "defaultValue": "false",
50
+ "description": "Block sending — a closed thread, a failed connection."
51
+ },
52
+ {
53
+ "name": "busy",
54
+ "type": "boolean",
55
+ "required": false,
56
+ "defaultValue": "false",
57
+ "description": "A run is in flight. With `onStop`, swaps Send for Stop."
58
+ },
59
+ {
60
+ "name": "onStop",
61
+ "type": "(() => void)",
62
+ "required": false,
63
+ "defaultValue": null,
64
+ "description": "Abort the in-flight run. Renders the Stop button while `busy`."
65
+ },
66
+ {
67
+ "name": "submitKey",
68
+ "type": "\"enter\" | \"mod+enter\"",
69
+ "required": false,
70
+ "defaultValue": "enter",
71
+ "description": "Which gesture submits. Defaults to `\"enter\"`."
72
+ },
73
+ {
74
+ "name": "maxRows",
75
+ "type": "number",
76
+ "required": false,
77
+ "defaultValue": "8",
78
+ "description": "Rows the box may grow to before it scrolls. Defaults to `8`."
79
+ },
80
+ {
81
+ "name": "sendLabel",
82
+ "type": "ReactNode",
83
+ "required": false,
84
+ "defaultValue": "Send",
85
+ "description": "Label on the send button. Defaults to `\"Send\"`."
86
+ },
87
+ {
88
+ "name": "stopLabel",
89
+ "type": "ReactNode",
90
+ "required": false,
91
+ "defaultValue": "Stop",
92
+ "description": "Label on the stop button. Defaults to `\"Stop\"`."
93
+ },
94
+ {
95
+ "name": "attachments",
96
+ "type": "ReactNode",
97
+ "required": false,
98
+ "defaultValue": null,
99
+ "description": "Tray above the input — attachment chips, a reply-to quote."
100
+ },
101
+ {
102
+ "name": "toolbar",
103
+ "type": "ReactNode",
104
+ "required": false,
105
+ "defaultValue": null,
106
+ "description": "Controls beside the send button — an attach button, a model picker."
107
+ },
108
+ {
109
+ "name": "hint",
110
+ "type": "ReactNode",
111
+ "required": false,
112
+ "defaultValue": null,
113
+ "description": "Quiet strip under the input — a keyboard hint, a character count."
114
+ },
115
+ {
116
+ "name": "aria-label",
117
+ "type": "string",
118
+ "required": false,
119
+ "defaultValue": "Message",
120
+ "description": "Accessible name for the input. Defaults to `\"Message\"`."
121
+ }
122
+ ],
123
+ "typeReferences": [
124
+ "Omit<React.ComponentPropsWithoutRef<\"form\">, \"onSubmit\" | \"onChange\">"
125
+ ],
126
+ "subcomponents": [],
127
+ "parts": [],
128
+ "variants": {},
129
+ "defaultVariants": {},
130
+ "tokensUsed": [
131
+ "--cue-accent",
132
+ "--cue-border",
133
+ "--cue-control-lg",
134
+ "--cue-control-md",
135
+ "--cue-control-sm",
136
+ "--cue-danger",
137
+ "--cue-fg",
138
+ "--cue-fg-subtle",
139
+ "--cue-font-mono",
140
+ "--cue-radius-control",
141
+ "--cue-space-2",
142
+ "--cue-space-3",
143
+ "--cue-space-4",
144
+ "--cue-space-5",
145
+ "--cue-sunken",
146
+ "--cue-text-body",
147
+ "--cue-text-label",
148
+ "--cue-text-micro",
149
+ "--cue-text-ui"
150
+ ],
151
+ "summary": "The thing you type into: an auto-growing textarea, a send affordance, and slots for everything a host wants to hang off them.",
152
+ "examples": [
153
+ {
154
+ "title": "Usage",
155
+ "code": "<Composer onSend={send} />\n<Composer submitKey=\"mod+enter\" busy={running} onStop={abort} onSend={send} />",
156
+ "language": "tsx"
157
+ }
158
+ ],
159
+ "status": "todo-docs",
160
+ "url": "/docs/components/composer",
161
+ "mdUrl": "/docs/components/composer.md",
162
+ "jsonUrl": "/r/components/composer.json",
163
+ "specimens": [
164
+ {
165
+ "title": "Composer",
166
+ "group": "chat",
167
+ "components": [
168
+ "Composer"
169
+ ],
170
+ "code": "<div className=\"flex w-full max-w-[42rem] flex-col gap-(--cue-space-5)\">\n <Composer\n value={draft}\n onValueChange={setDraft}\n onSend={(value) => {\n setSent(value);\n setDraft(\"\");\n }}\n placeholder=\"Ask the swarm\"\n hint={<span>Enter sends. Shift+Enter starts a line.</span>}\n />\n <Composer\n onSend={() => {}}\n submitKey=\"mod+enter\"\n busy\n onStop={() => {}}\n defaultValue=\"Patching universe 2\"\n hint=\"Busy: the send control becomes Stop.\"\n />\n <Composer onSend={() => {}} disabled placeholder=\"Disabled\" />\n {sent === null ? null : <Chip tone=\"accent\">sent: {sent}</Chip>}\n</div>",
171
+ "note": "An auto-growing textarea at the large control height, with an attachment slot, a toolbar slot and a Stop that reports rather than decides.",
172
+ "interaction": "Enter sends by default, mod+Enter when configured the other way; Shift+Enter always inserts a newline."
173
+ }
174
+ ],
175
+ "todo": true
176
+ }
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "ComputerUse",
3
+ "slug": "computer-use",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The screen the agent is driving, with a cursor trail and what it is doing right now.",
11
+ "props": [
12
+ {
13
+ "name": "url",
14
+ "type": "string",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "What the session is pointed at."
18
+ },
19
+ {
20
+ "name": "steps",
21
+ "type": "readonly ComputerStep[]",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Actions taken, in order. Each carries the coordinates the cursor moved to."
25
+ },
26
+ {
27
+ "name": "activeIndex",
28
+ "type": "number",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "Which step is happening now. The two before it stay as a fading trail."
32
+ },
33
+ {
34
+ "name": "children",
35
+ "type": "ReactNode",
36
+ "required": true,
37
+ "defaultValue": null,
38
+ "description": "The viewport being driven: a video stream, a screenshot, an iframe."
39
+ }
40
+ ],
41
+ "typeReferences": [
42
+ "Omit<ComponentProps<\"div\">, \"url\" | \"steps\" | \"activeIndex\" | \"children\"> & {\n /** What the session is pointed at. */\n url: string;\n /** Actions taken, in order. Each carries the coordinates the cursor moved to. */\n steps: readonly ComputerStep[];\n /** Which step is happening now. The two before it stay as a fading trail. */\n activeIndex: number;\n /** The viewport being driven: a video stream, a screenshot, an iframe. */\n children: React.ReactNode;\n}"
43
+ ],
44
+ "subcomponents": [],
45
+ "parts": [],
46
+ "variants": {},
47
+ "defaultVariants": {},
48
+ "tokensUsed": [
49
+ "--cue-border",
50
+ "--cue-danger",
51
+ "--cue-fg-muted",
52
+ "--cue-fg-subtle",
53
+ "--cue-ok",
54
+ "--cue-radius-overlay",
55
+ "--cue-stream",
56
+ "--cue-text-body",
57
+ "--cue-warn"
58
+ ],
59
+ "summary": "The screen the agent is driving, with a cursor trail and what it is doing right now.",
60
+ "examples": [
61
+ {
62
+ "title": "Usage",
63
+ "code": "import { ComputerUse } from \"@cueplusplus/ui/elements\";\n\n<ComputerUse url=\"github.com/...\" steps={steps} activeIndex={2}>\n <iframe title=\"Session\" src={streamUrl} />\n</ComputerUse>",
64
+ "language": "tsx"
65
+ }
66
+ ],
67
+ "status": "todo-docs",
68
+ "url": "/docs/components/computer-use",
69
+ "mdUrl": "/docs/components/computer-use.md",
70
+ "jsonUrl": "/r/components/computer-use.json",
71
+ "specimens": [
72
+ {
73
+ "title": "ComputerUse",
74
+ "group": "elements-agents",
75
+ "components": [
76
+ "ComputerUse"
77
+ ],
78
+ "code": "<Specimens>\n <Specimen label=\"mid-session\" wide>\n <ComputerUse\n url=\"desk.local/show/patch\"\n steps={CLICKS}\n activeIndex={2}\n >\n <div className=\"flex h-40 flex-col gap-(--cue-space-2) bg-surface-1 p-(--cue-space-4)\">\n <span className=\"font-mono text-(length:--cue-text-label) text-fg-subtle\">\n UNIVERSE 3 — PATCH\n </span>\n <span className=\"text-(length:--cue-text-body) text-fg-muted\">\n 6 fixtures selected · start address 1\n </span>\n </div>\n </ComputerUse>\n </Specimen>\n <Specimen label=\"first step\" wide>\n <ComputerUse url=\"desk.local/show/patch\" steps={CLICKS} activeIndex={0}>\n <div className=\"flex h-40 items-center justify-center bg-surface-1\">\n <span className=\"font-mono text-(length:--cue-text-label) text-fg-subtle\">\n SHOW FILE — OVERVIEW\n </span>\n </div>\n </ComputerUse>\n </Specimen>\n</Specimens>",
79
+ "note": "The screen the agent is driving, with a cursor trail behind it and the current action named underneath. The two steps before the live one stay as fading dots, which is what turns a jumping pointer into a path you can follow. The viewport is `children` — a screenshot, a video stream, a sandboxed iframe — so the element frames it and isolates nothing of its own.",
80
+ "interaction": "none, and deliberately: this is a view of a session, not a remote control. The cursor and its trail are `aria-hidden`; the action row underneath is what a screen reader gets."
81
+ }
82
+ ],
83
+ "todo": true
84
+ }