@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,67 @@
1
+ {
2
+ "name": "ComposerContext",
3
+ "slug": "composer-context",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The context-window dial in the toolbar, with the breakdown on hover or focus. It\nturns danger-coloured past 85%, which is the point where the next long tool result\nstarts costing the conversation its own history.",
11
+ "props": [
12
+ {
13
+ "name": "usage",
14
+ "type": "ComposerUsage",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Where the window has gone, and how big it is."
18
+ }
19
+ ],
20
+ "typeReferences": [
21
+ "Omit<ComponentProps<\"div\">, \"children\"> & {\n /** Where the window has gone, and how big it is. */\n usage: ComposerUsage;\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 context-window dial in the toolbar, with the breakdown on hover or focus.",
49
+ "examples": [],
50
+ "status": "todo-docs",
51
+ "url": "/docs/components/composer-context",
52
+ "mdUrl": "/docs/components/composer-context.md",
53
+ "jsonUrl": "/r/components/composer-context.json",
54
+ "specimens": [
55
+ {
56
+ "title": "ComposerContext",
57
+ "group": "elements-composer",
58
+ "components": [
59
+ "ComposerContext"
60
+ ],
61
+ "code": "<Specimens>\n <Specimen label=\"early in the session\">\n <ComposerContext usage={USAGE} />\n </Specimen>\n <Specimen label=\"past the warning line\">\n <ComposerContext usage={USAGE_TIGHT} />\n </Specimen>\n</Specimens>",
62
+ "note": "The context window as a dial small enough to leave in the toolbar, with the arithmetic behind it on hover or focus. It turns the danger hue past 85% — the point where the next long tool result starts costing the conversation its own history rather than its headroom. Everything is in thousands of tokens and nothing is rounded here: the element divides, the caller counts.",
63
+ "interaction": "the dial is a labelled button (`Context usage`) and the breakdown opens on hover *or* focus-within, so it is reachable from the keyboard without a click target that does nothing."
64
+ }
65
+ ],
66
+ "todo": true
67
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "ComposerInput",
3
+ "slug": "composer-input",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The text field. Enter submits, guarded against IME composition so accepting a\ncandidate does not send the message.",
11
+ "props": [
12
+ {
13
+ "name": "onSubmit",
14
+ "type": "(() => void)",
15
+ "required": false,
16
+ "defaultValue": null,
17
+ "description": "Called on Enter, guarded against IME composition so accepting a candidate does not\nsend."
18
+ }
19
+ ],
20
+ "typeReferences": [
21
+ "Omit<ComponentProps<\"input\">, \"onSubmit\"> & {\n /**\n * Called on Enter, guarded against IME composition so accepting a candidate does not\n * send.\n */\n onSubmit?: () => void;\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 text field.",
49
+ "examples": [],
50
+ "status": "todo-docs",
51
+ "url": "/docs/components/composer-input",
52
+ "mdUrl": "/docs/components/composer-input.md",
53
+ "jsonUrl": "/r/components/composer-input.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,72 @@
1
+ {
2
+ "name": "ComposerMenuItem",
3
+ "slug": "composer-menu-item",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "One row of a `ComposerMenu`, and the chassis the command, person and model rows are\nbuilt on.",
11
+ "props": [
12
+ {
13
+ "name": "active",
14
+ "type": "boolean",
15
+ "required": false,
16
+ "defaultValue": "false",
17
+ "description": "Whether this is the row the keyboard is on."
18
+ }
19
+ ],
20
+ "typeReferences": [
21
+ "ComponentProps<\"button\"> & {\n /** Whether this is the row the keyboard is on. */\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": "One row of a `ComposerMenu`, and the chassis the command, person and model rows are built on.",
49
+ "examples": [],
50
+ "status": "todo-docs",
51
+ "url": "/docs/components/composer-menu-item",
52
+ "mdUrl": "/docs/components/composer-menu-item.md",
53
+ "jsonUrl": "/r/components/composer-menu-item.json",
54
+ "specimens": [
55
+ {
56
+ "title": "ComposerMenu / useSlashMatches / useMentionMatches",
57
+ "group": "elements-composer",
58
+ "components": [
59
+ "ComposerMenu",
60
+ "ComposerMenuItem",
61
+ "ComposerCommandItem",
62
+ "ComposerPersonItem",
63
+ "useSlashMatches",
64
+ "useMentionMatches"
65
+ ],
66
+ "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>",
67
+ "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.",
68
+ "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."
69
+ }
70
+ ],
71
+ "todo": true
72
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "ComposerMenu",
3
+ "slug": "composer-menu",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The popover the slash and mention menus are drawn in, anchored above the bar. It\nanimates open rather than mounting, so the caret never moves under it.",
11
+ "props": [
12
+ {
13
+ "name": "open",
14
+ "type": "boolean",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Whether the menu is showing. Closed is animated out, not unmounted."
18
+ },
19
+ {
20
+ "name": "align",
21
+ "type": "\"end\" | \"start\"",
22
+ "required": false,
23
+ "defaultValue": "start",
24
+ "description": "Which edge of the composer the menu hangs from."
25
+ }
26
+ ],
27
+ "typeReferences": [
28
+ "ComponentProps<\"div\"> & {\n /** Whether the menu is showing. Closed is animated out, not unmounted. */\n open: boolean;\n /** Which edge of the composer the menu hangs from. */\n align?: \"start\" | \"end\";\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": "The popover the slash and mention menus are drawn in, anchored above the bar.",
56
+ "examples": [],
57
+ "status": "todo-docs",
58
+ "url": "/docs/components/composer-menu",
59
+ "mdUrl": "/docs/components/composer-menu.md",
60
+ "jsonUrl": "/r/components/composer-menu.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,75 @@
1
+ {
2
+ "name": "ComposerModelItem",
3
+ "slug": "composer-model-item",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "One model in the menu, with its metadata and a tick on the chosen one.",
11
+ "props": [
12
+ {
13
+ "name": "entry",
14
+ "type": "ComposerModel",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "The model this row offers."
18
+ },
19
+ {
20
+ "name": "selected",
21
+ "type": "boolean",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Whether this is the model in use. Draws the tick."
25
+ }
26
+ ],
27
+ "typeReferences": [
28
+ "Omit<ComponentProps<\"button\">, \"children\"> & {\n /** The model this row offers. */\n entry: ComposerModel;\n /** Whether this is the model in use. Draws the tick. */\n selected: 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": "One model in the menu, with its metadata and a tick on the chosen one.",
56
+ "examples": [],
57
+ "status": "todo-docs",
58
+ "url": "/docs/components/composer-model-item",
59
+ "mdUrl": "/docs/components/composer-model-item.md",
60
+ "jsonUrl": "/r/components/composer-model-item.json",
61
+ "specimens": [
62
+ {
63
+ "title": "ComposerModelTrigger / ComposerModelItem",
64
+ "group": "elements-composer",
65
+ "components": [
66
+ "ComposerModelTrigger",
67
+ "ComposerModelItem"
68
+ ],
69
+ "code": "<Specimens>\n <Specimen label=\"menu open\" wide>\n <div className=\"flex min-h-56 w-full max-w-lg items-end\">\n <ElementsComposer>\n <ComposerMenu open={modelOpen} align=\"start\">\n {MODELS.map((entry) => (\n <ComposerModelItem\n key={entry.name}\n entry={entry}\n selected={entry.name === model}\n onClick={() => {\n setModel(entry.name);\n setModelOpen(false);\n }}\n />\n ))}\n </ComposerMenu>\n <ComposerBar>\n <ComposerToolbar>\n <ComposerActions>\n <ComposerModelTrigger\n model={model}\n open={modelOpen}\n onClick={() => setModelOpen((open) => !open)}\n />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming={false} idle />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </div>\n </Specimen>\n <Specimen label=\"closed\">\n <ComposerModelTrigger model=\"Haiku 5\" open={false} />\n </Specimen>\n</Specimens>",
70
+ "note": "The model as a word in the toolbar rather than a settings page. The trigger shows what is in use and carries `aria-expanded` for the menu it opens; each row shows the model and its one line of metadata, with a tick on the chosen one. Three rows is the point at which this stops being right and `ModelPicker` starts.",
71
+ "interaction": "the trigger is a plain button and the menu is the same `ComposerMenu` the slash and mention lists use — nothing here portals, so an island's values reach it without any carriage."
72
+ }
73
+ ],
74
+ "todo": true
75
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "ComposerModelTrigger",
3
+ "slug": "composer-model-trigger",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The model name in the toolbar, which opens the model menu. Carries `aria-expanded`\nfor it.",
11
+ "props": [
12
+ {
13
+ "name": "model",
14
+ "type": "string",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "The name to show, which is the selected model."
18
+ },
19
+ {
20
+ "name": "open",
21
+ "type": "boolean",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Whether the menu it opens is showing. Announced as `aria-expanded`."
25
+ }
26
+ ],
27
+ "typeReferences": [
28
+ "Omit<ComponentProps<\"button\">, \"children\"> & {\n /** The name to show, which is the selected model. */\n model: string;\n /** Whether the menu it opens is showing. Announced as `aria-expanded`. */\n open: 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": "The model name in the toolbar, which opens the model menu.",
56
+ "examples": [],
57
+ "status": "todo-docs",
58
+ "url": "/docs/components/composer-model-trigger",
59
+ "mdUrl": "/docs/components/composer-model-trigger.md",
60
+ "jsonUrl": "/r/components/composer-model-trigger.json",
61
+ "specimens": [
62
+ {
63
+ "title": "ComposerModelTrigger / ComposerModelItem",
64
+ "group": "elements-composer",
65
+ "components": [
66
+ "ComposerModelTrigger",
67
+ "ComposerModelItem"
68
+ ],
69
+ "code": "<Specimens>\n <Specimen label=\"menu open\" wide>\n <div className=\"flex min-h-56 w-full max-w-lg items-end\">\n <ElementsComposer>\n <ComposerMenu open={modelOpen} align=\"start\">\n {MODELS.map((entry) => (\n <ComposerModelItem\n key={entry.name}\n entry={entry}\n selected={entry.name === model}\n onClick={() => {\n setModel(entry.name);\n setModelOpen(false);\n }}\n />\n ))}\n </ComposerMenu>\n <ComposerBar>\n <ComposerToolbar>\n <ComposerActions>\n <ComposerModelTrigger\n model={model}\n open={modelOpen}\n onClick={() => setModelOpen((open) => !open)}\n />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming={false} idle />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </div>\n </Specimen>\n <Specimen label=\"closed\">\n <ComposerModelTrigger model=\"Haiku 5\" open={false} />\n </Specimen>\n</Specimens>",
70
+ "note": "The model as a word in the toolbar rather than a settings page. The trigger shows what is in use and carries `aria-expanded` for the menu it opens; each row shows the model and its one line of metadata, with a tick on the chosen one. Three rows is the point at which this stops being right and `ModelPicker` starts.",
71
+ "interaction": "the trigger is a plain button and the menu is the same `ComposerMenu` the slash and mention lists use — nothing here portals, so an island's values reach it without any carriage."
72
+ }
73
+ ],
74
+ "todo": true
75
+ }
@@ -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
+ }