@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
@@ -27,13 +27,6 @@
27
27
  "defaultValue": null,
28
28
  "description": "Extra classes for the bar."
29
29
  },
30
- {
31
- "name": "overflow",
32
- "type": "\"clip\" | \"scroll\"",
33
- "required": false,
34
- "defaultValue": "scroll",
35
- "description": "What the bar does when its controls do not fit. Defaults to `\"scroll\"`.\n\n`\"scroll\"` is the library's one overflow behaviour (see\n`./_edge-scroller` for why it is scrolling rather than wrapping or a \"more\"\nmenu): the bar keeps its single chrome-rung height, the controls scroll\ninside it, the overflowing edge is faded and a pager chevron appears there.\nA bar whose controls all fit renders exactly as it did before — no mask, no\nchevrons, no compositing layer.\n\n`\"clip\"` restores the old behaviour and adds no wrapper element, for a bar\nthat is already inside something which scrolls.\n\nA vertical toolbar ignores this: the affordance is horizontal, and a\nvertical bar overflows on the axis this does not measure."
36
- },
37
30
  {
38
31
  "name": "previousLabel",
39
32
  "type": "string",
@@ -47,6 +40,13 @@
47
40
  "required": false,
48
41
  "defaultValue": "Show later controls",
49
42
  "description": "Accessible name for the chevron that reveals controls off the trailing edge."
43
+ },
44
+ {
45
+ "name": "overflow",
46
+ "type": "\"clip\" | \"scroll\"",
47
+ "required": false,
48
+ "defaultValue": "scroll",
49
+ "description": "What the bar does when its controls do not fit. Defaults to `\"scroll\"`.\n\n`\"scroll\"` is the library's one overflow behaviour (see\n`./_edge-scroller` for why it is scrolling rather than wrapping or a \"more\"\nmenu): the bar keeps its single chrome-rung height, the controls scroll\ninside it, the overflowing edge is faded and a pager chevron appears there.\nA bar whose controls all fit renders exactly as it did before — no mask, no\nchevrons, no compositing layer.\n\n`\"clip\"` restores the old behaviour and adds no wrapper element, for a bar\nthat is already inside something which scrolls.\n\nA vertical toolbar ignores this: the affordance is horizontal, and a\nvertical bar overflows on the axis this does not measure."
50
50
  }
51
51
  ],
52
52
  "typeReferences": [
@@ -84,7 +84,7 @@
84
84
  },
85
85
  {
86
86
  "name": "side",
87
- "type": "\"left\" | \"right\" | \"top\" | \"bottom\" | \"inline-end\" | \"inline-start\"",
87
+ "type": "\"left\" | \"right\" | \"bottom\" | \"top\" | \"inline-end\" | \"inline-start\"",
88
88
  "required": false,
89
89
  "defaultValue": "top",
90
90
  "description": "Preferred side of the trigger. Defaults to `\"top\"`."
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "TraceWaterfall",
3
+ "slug": "trace-waterfall",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "Every span in a run on one time axis, nested, so you can see where it actually went.",
9
+ "props": [
10
+ {
11
+ "name": "spans",
12
+ "type": "readonly TraceSpan[]",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "Flat list in start order. Nesting comes from each span's depth."
16
+ },
17
+ {
18
+ "name": "totalMs",
19
+ "type": "number",
20
+ "required": true,
21
+ "defaultValue": null,
22
+ "description": "Width of the axis. Bars are positioned against this, not against the widest span."
23
+ },
24
+ {
25
+ "name": "visibleCount",
26
+ "type": "number",
27
+ "required": true,
28
+ "defaultValue": null,
29
+ "description": "How many spans have been reported so far."
30
+ }
31
+ ],
32
+ "typeReferences": [
33
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"spans\" | \"totalMs\" | \"visibleCount\"\n> & {\n /** Flat list in start order. Nesting comes from each span's depth. */\n spans: readonly TraceSpan[];\n /** Width of the axis. Bars are positioned against this, not against the widest span. */\n totalMs: number;\n /** How many spans have been reported so far. */\n visibleCount: number;\n}"
34
+ ],
35
+ "subcomponents": [],
36
+ "parts": [],
37
+ "variants": {},
38
+ "defaultVariants": {},
39
+ "tokensUsed": [
40
+ "--cue-danger",
41
+ "--cue-fg-muted",
42
+ "--cue-fg-subtle",
43
+ "--cue-radius-overlay",
44
+ "--cue-stream",
45
+ "--cue-surface-3",
46
+ "--cue-text-body",
47
+ "--cue-text-ui"
48
+ ],
49
+ "summary": "Every span in a run on one time axis, nested, so you can see where it actually went.",
50
+ "examples": [
51
+ {
52
+ "title": "Usage",
53
+ "code": "import { TraceWaterfall } from \"@cueplusplus/ui/elements\";\n\n<TraceWaterfall spans={spans} totalMs={1840} visibleCount={spans.length} />",
54
+ "language": "tsx"
55
+ }
56
+ ],
57
+ "status": "todo-docs",
58
+ "url": "/docs/components/trace-waterfall",
59
+ "mdUrl": "/docs/components/trace-waterfall.md",
60
+ "jsonUrl": "/r/components/trace-waterfall.json",
61
+ "specimens": [
62
+ {
63
+ "title": "TraceWaterfall",
64
+ "group": "elements",
65
+ "components": [
66
+ "TraceWaterfall"
67
+ ],
68
+ "code": "<Specimens>\n <Specimen label=\"mid-run\" wide>\n <TraceWaterfall spans={SPANS} totalMs={2300} visibleCount={4} />\n </Specimen>\n <Specimen label=\"with a retry\" wide>\n <TraceWaterfall spans={SPANS} totalMs={2300} visibleCount={SPANS.length} />\n </Specimen>\n</Specimens>",
69
+ "note": "Where the run's time actually went. Bars are positioned against `totalMs` rather than against the widest span, which is the difference between a trace and a bar chart: a 20ms retry at the end stays 20ms wide.",
70
+ "interaction": "none. Running spans pulse in the stream hue, failed ones are red, and both are spelled out in the row rather than only tinted."
71
+ }
72
+ ],
73
+ "todo": true
74
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "name": "TurnFooter",
3
+ "slug": "turn-footer",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The row under a finished turn: copy, reply, fork, and when it happened.\n\nEvery control is opt-in — passing no handler draws no button — because the\nfour are not one set. A read-only shared transcript has a copy button and\nnothing else; a console with branching has all four. A footer that drew\ndisabled controls for the ones a product does not have would be a row of\nthings nobody can press.\n\nThe controls are drawn plainly rather than revealed on hover. Revealing them\nis a decision about the *turn*, not about this row: Cursor keys it off the\nturn's own hover state and Cline's stylesheet explains why the reveal must be\ninstant — \"a fade on hover chrome reads as lag, not polish\" — and float over\nwhat follows rather than reserving space. Both are two lines of CSS on the\nturn, and neither is something this component can decide from inside itself.",
11
+ "props": [
12
+ {
13
+ "name": "onCopy",
14
+ "type": "(() => void)",
15
+ "required": false,
16
+ "defaultValue": null,
17
+ "description": "Copy the turn. The control exists only when this is given."
18
+ },
19
+ {
20
+ "name": "copied",
21
+ "type": "boolean",
22
+ "required": false,
23
+ "defaultValue": "false",
24
+ "description": "Whether the clipboard has it: the copy glyph crossfades to a check."
25
+ },
26
+ {
27
+ "name": "onReply",
28
+ "type": "(() => void)",
29
+ "required": false,
30
+ "defaultValue": null,
31
+ "description": "Quote this turn into the composer. The control exists only when this is given."
32
+ },
33
+ {
34
+ "name": "onFork",
35
+ "type": "(() => void)",
36
+ "required": false,
37
+ "defaultValue": null,
38
+ "description": "Branch the conversation from this turn. The control exists only when this is given."
39
+ },
40
+ {
41
+ "name": "onMore",
42
+ "type": "(() => void)",
43
+ "required": false,
44
+ "defaultValue": null,
45
+ "description": "Open the overflow menu — Cursor hangs \"Copy request ID\" off it."
46
+ },
47
+ {
48
+ "name": "timestamp",
49
+ "type": "TurnTimestamp",
50
+ "required": false,
51
+ "defaultValue": null,
52
+ "description": "When the turn happened and how long it took. See {@link TurnTimestamp}."
53
+ },
54
+ {
55
+ "name": "labels",
56
+ "type": "Partial<TurnActionLabels>",
57
+ "required": false,
58
+ "defaultValue": null,
59
+ "description": "The accessible names of the four controls, merged over\n`TURN_ACTION_LABELS`. Partial on purpose: a console localising two of them\nshould not have to restate the other three."
60
+ },
61
+ {
62
+ "name": "label",
63
+ "type": "string",
64
+ "required": false,
65
+ "defaultValue": "Turn actions",
66
+ "description": "What the group of controls is called. Defaults to `Turn actions`."
67
+ }
68
+ ],
69
+ "typeReferences": [
70
+ "Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
71
+ ],
72
+ "subcomponents": [],
73
+ "parts": [],
74
+ "variants": {},
75
+ "defaultVariants": {},
76
+ "tokensUsed": [
77
+ "--cue-fg-subtle",
78
+ "--cue-ok"
79
+ ],
80
+ "summary": "The row under a finished turn: copy, reply, fork, and when it happened.",
81
+ "examples": [
82
+ {
83
+ "title": "Usage",
84
+ "code": "import { TurnFooter } from \"@cueplusplus/ui/elements\";\n\n<TurnFooter\n onCopy={copy}\n copied={copied}\n onReply={quote}\n onFork={branch}\n timestamp={{ label: \"2m ago\", title: \"Today at 2:14 PM\", subtitle: \"Worked for 2m 15s\" }}\n/>\n// A shared transcript: one control, and the time it was written.\n<TurnFooter onCopy={copy} timestamp={{ label: \"14 March\" }} />",
85
+ "language": "tsx"
86
+ }
87
+ ],
88
+ "status": "todo-docs",
89
+ "url": "/docs/components/turn-footer",
90
+ "mdUrl": "/docs/components/turn-footer.md",
91
+ "jsonUrl": "/r/components/turn-footer.json",
92
+ "specimens": [
93
+ {
94
+ "title": "TurnFooter",
95
+ "group": "elements-thread",
96
+ "components": [
97
+ "TurnFooter"
98
+ ],
99
+ "code": "<Specimens>\n <Specimen label=\"all four, three-level timestamp\" wide>\n <div className=\"w-full max-w-md\">\n <TurnFooter\n onCopy={() => setTurnCopied((current) => !current)}\n copied={turnCopied}\n onReply={() => {}}\n onFork={() => {}}\n onMore={() => {}}\n timestamp={{\n label: \"2m ago\",\n title: \"Today at 2:14 PM\",\n subtitle: \"Worked for 2m 15s\",\n }}\n />\n </div>\n </Specimen>\n <Specimen label=\"a shared transcript: copy only\" wide>\n <div className=\"w-full max-w-md\">\n <TurnFooter onCopy={() => {}} timestamp={{ label: \"14 March\" }} />\n </div>\n </Specimen>\n <Specimen label=\"relabelled\" wide>\n <div className=\"w-full max-w-md\">\n <TurnFooter\n onCopy={() => {}}\n onFork={() => {}}\n labels={{ fork: \"Branch\" }}\n timestamp={{ label: \"2m ago\" }}\n />\n </div>\n </Specimen>\n</Specimens>",
100
+ "note": "The row under a finished turn: copy, reply, fork, and when it happened. Every control is opt-in, because the four are not one set — a read-only shared transcript has a copy button and nothing else, and a footer that drew disabled controls would be a row of things nobody can press. The timestamp is three levels at once: 2m ago at a glance, the exact time on the title where it costs nothing, and how long the work took beside it, which is the only one of the three that is about the agent rather than the clock.",
101
+ "interaction": "four named icon buttons; copy crossfades to a check in place and renames itself Copied. The four names come from TURN_ACTION_LABELS and a partial override merges over it, so localising two of them does not mean restating the other three."
102
+ }
103
+ ],
104
+ "todo": true
105
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "TypingIndicator",
3
+ "slug": "typing-indicator",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "The classic three dots, tuned to read as presence rather than noise.",
9
+ "props": [
10
+ {
11
+ "name": "variant",
12
+ "type": "\"bubble\" | \"bare\"",
13
+ "required": false,
14
+ "defaultValue": "bubble",
15
+ "description": "bubble wraps the dots in a pill; bare renders only the three dots."
16
+ }
17
+ ],
18
+ "typeReferences": [
19
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"variant\" | \"role\" | \"aria-label\"\n> & {\n /** bubble wraps the dots in a pill; bare renders only the three dots. */\n variant?: \"bubble\" | \"bare\";\n}"
20
+ ],
21
+ "subcomponents": [],
22
+ "parts": [],
23
+ "variants": {},
24
+ "defaultVariants": {},
25
+ "tokensUsed": [
26
+ "--cue-surface-3"
27
+ ],
28
+ "summary": "The classic three dots, tuned to read as presence rather than noise.",
29
+ "examples": [
30
+ {
31
+ "title": "Usage",
32
+ "code": "import { TypingIndicator } from \"@cueplusplus/ui/elements\";\n\n<TypingIndicator />",
33
+ "language": "tsx"
34
+ }
35
+ ],
36
+ "status": "todo-docs",
37
+ "url": "/docs/components/typing-indicator",
38
+ "mdUrl": "/docs/components/typing-indicator.md",
39
+ "jsonUrl": "/r/components/typing-indicator.json",
40
+ "specimens": [
41
+ {
42
+ "title": "TypingIndicator",
43
+ "group": "elements-thread",
44
+ "components": [
45
+ "TypingIndicator"
46
+ ],
47
+ "code": "<Specimens>\n <Specimen label=\"bubble\">\n <TypingIndicator />\n </Specimen>\n <Specimen label=\"bare\">\n <TypingIndicator variant=\"bare\" />\n </Specimen>\n</Specimens>",
48
+ "note": "The gap between sending and the first token. Three dots that read as presence rather than noise — bare when the transcript has no bubbles, in a pill when it does.",
49
+ "interaction": "none. Both variants carry role='status' and a name, so the wait is announced once instead of animating silently."
50
+ }
51
+ ],
52
+ "todo": true
53
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "UnreadDivider",
3
+ "slug": "unread-divider",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "The rule that says \"you have read down to here\": an accented line with its\nlabel at the end.\n\nThe second row of Cursor's union that no catalogue ships, and the one with a\nrule of its own that is easy to get wrong: it marks where the reader *was*,\nso it does not move while they read. A divider that chased the last-seen\nmessage would vanish the moment it appeared, which is why this component\ntakes no messages, no counts and no scroll position — the caller decides\nwhere it goes and when it leaves, and the row is only ever the mark.\n\nAccented rather than neutral, and asymmetric rather than centred, so it can\nnever be mistaken for a {@link TimeBoundary} two rows above it.",
9
+ "props": [
10
+ {
11
+ "name": "label",
12
+ "type": "string",
13
+ "required": false,
14
+ "defaultValue": "New",
15
+ "description": "What the rule says. `New` by default — one word, because the row is a place\nmarker and not an announcement, and because the sentence a reader wants is\nthe one below the rule."
16
+ }
17
+ ],
18
+ "typeReferences": [
19
+ "Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
20
+ ],
21
+ "subcomponents": [],
22
+ "parts": [],
23
+ "variants": {},
24
+ "defaultVariants": {},
25
+ "tokensUsed": [
26
+ "--cue-accent",
27
+ "--cue-border",
28
+ "--cue-fg-subtle"
29
+ ],
30
+ "summary": "The rule that says \"you have read down to here\": an accented line with its label at the end.",
31
+ "examples": [
32
+ {
33
+ "title": "Usage",
34
+ "code": "import { UnreadDivider } from \"@cueplusplus/ui/elements\";\n\n<UnreadDivider />\n<UnreadDivider label=\"New since you left\" />",
35
+ "language": "tsx"
36
+ }
37
+ ],
38
+ "status": "todo-docs",
39
+ "url": "/docs/components/unread-divider",
40
+ "mdUrl": "/docs/components/unread-divider.md",
41
+ "jsonUrl": "/r/components/unread-divider.json",
42
+ "specimens": [
43
+ {
44
+ "title": "UnreadDivider",
45
+ "group": "elements-thread",
46
+ "components": [
47
+ "UnreadDivider"
48
+ ],
49
+ "code": "<Specimens>\n <Specimen label=\"default\" wide>\n <div className=\"w-full max-w-md\">\n <UnreadDivider />\n </div>\n </Specimen>\n <Specimen label=\"its own words\" wide>\n <div className=\"w-full max-w-md\">\n <UnreadDivider label=\"New since you left\" />\n </div>\n </Specimen>\n</Specimens>",
50
+ "note": "The second rule Cursor's row union has and no catalogue ships: where you had read down to. It takes no messages, no count and no scroll position, because the one rule it must obey is that it does not move while you read — a divider that chased the last-seen message would vanish the moment it appeared. Accented and asymmetric, so it can never be mistaken for a time boundary two rows above it.",
51
+ "interaction": "none, deliberately. The mark is the whole component; when it leaves is the caller's decision."
52
+ }
53
+ ],
54
+ "todo": true
55
+ }
@@ -16,7 +16,7 @@
16
16
  },
17
17
  {
18
18
  "name": "tone",
19
- "type": "\"accent\" | \"danger\" | \"busy\" | \"ok\" | \"warn\" | \"info\"",
19
+ "type": "\"danger\" | \"accent\" | \"busy\" | \"ok\" | \"warn\" | \"info\"",
20
20
  "required": false,
21
21
  "defaultValue": "accent",
22
22
  "description": "Stroke tone. Defaults to `\"accent\"`."
@@ -0,0 +1,91 @@
1
+ {
2
+ "name": "VerdictRow",
3
+ "slug": "verdict-row",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "What the run thought of its own work, attached to the turn that did it.\n\nThe second of the two elements nothing in the field ships. A finished turn\nsays what it changed and how long it took; whether it is any *good* is the\none question the reader actually has, and every agent runtime that runs a\ncritic, a test suite or a self-review already has an answer to it. This is\nthat answer as a row: a rating out of five, the exact score beside it, the\nscorer's sentence, and the problems it thinks are most likely, each with how\nsure it is.\n\nEvery number is defended. Scores arrive from a model, so `NaN`, `Infinity`\nand out-of-range values are normal traffic and all of them clamp — a verdict\nrow is worthless if a bad payload can make it render `NaN out of 5`.\n\nTone is stated as `data-verdict` on the element, from OpenHands' own\nthresholds (`ok` at 0.6, `warn` at 0.4, `danger` below), and the chips take\ntheirs from the probability (`danger` at 0.7, `warn` at 0.5). The stars are\none `role=\"img\"` with the rating as its name rather than five glyphs a screen\nreader would read out one at a time.",
11
+ "props": [
12
+ {
13
+ "name": "score",
14
+ "type": "number",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "What the scorer thought of the work, `0`–`1`. Clamped, and a non-finite\nscore is worth no stars — see {@link verdictStars}."
18
+ },
19
+ {
20
+ "name": "title",
21
+ "type": "string",
22
+ "required": false,
23
+ "defaultValue": null,
24
+ "description": "What the scorer is called. Defaults to `VERDICT_LABELS.title`\n(`Verification`), which is deliberately not `Critic`: the same row fits a\ntest run, a linter or a second model."
25
+ },
26
+ {
27
+ "name": "summary",
28
+ "type": "string",
29
+ "required": false,
30
+ "defaultValue": null,
31
+ "description": "One line of the scorer's own prose, under the rating."
32
+ },
33
+ {
34
+ "name": "issues",
35
+ "type": "readonly VerdictIssue[]",
36
+ "required": false,
37
+ "defaultValue": null,
38
+ "description": "What it thinks is probably wrong, drawn as chips with their probabilities\nand tinted by them. Order is the caller's — most likely first reads best."
39
+ },
40
+ {
41
+ "name": "labels",
42
+ "type": "Partial<VerdictLabels>",
43
+ "required": false,
44
+ "defaultValue": null,
45
+ "description": "The row's three strings, merged over `VERDICT_LABELS`."
46
+ }
47
+ ],
48
+ "typeReferences": [
49
+ "Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
50
+ ],
51
+ "subcomponents": [],
52
+ "parts": [],
53
+ "variants": {},
54
+ "defaultVariants": {},
55
+ "tokensUsed": [
56
+ "--cue-danger",
57
+ "--cue-fg",
58
+ "--cue-fg-muted",
59
+ "--cue-fg-subtle",
60
+ "--cue-ok",
61
+ "--cue-radius-control",
62
+ "--cue-radius-overlay",
63
+ "--cue-text-ui",
64
+ "--cue-warn"
65
+ ],
66
+ "summary": "What the run thought of its own work, attached to the turn that did it.",
67
+ "examples": [
68
+ {
69
+ "title": "Usage",
70
+ "code": "import { VerdictRow } from \"@cueplusplus/ui/elements\";\n\n<VerdictRow\n score={0.82}\n summary=\"The patch matches the plot and the cue holds.\"\n issues={[{ label: \"No fallback for a missing fixture\", probability: 0.54 }]}\n/>\n// A verdict that failed the work, from a test run rather than a model.\n<VerdictRow score={0.24} title=\"Test run\" summary=\"3 of 41 checks failed.\" />",
71
+ "language": "tsx"
72
+ }
73
+ ],
74
+ "status": "todo-docs",
75
+ "url": "/docs/components/verdict-row",
76
+ "mdUrl": "/docs/components/verdict-row.md",
77
+ "jsonUrl": "/r/components/verdict-row.json",
78
+ "specimens": [
79
+ {
80
+ "title": "VerdictRow",
81
+ "group": "elements",
82
+ "components": [
83
+ "VerdictRow"
84
+ ],
85
+ "code": "<Specimens>\n <Specimen label=\"it holds\" wide>\n <div className=\"w-full max-w-md\">\n <VerdictRow score={0.86} summary=\"The patch matches the plot and cue 1 holds at 3.0s.\" />\n </div>\n </Specimen>\n <Specimen label=\"doubtful, with what it doubts\" wide>\n <div className=\"w-full max-w-md\">\n <VerdictRow\n score={0.52}\n summary=\"The universe is patched, but nothing proves the cue fires.\"\n issues={DOUBTS}\n />\n </div>\n </Specimen>\n <Specimen label=\"failed, from a test run rather than a model\" wide>\n <div className=\"w-full max-w-md\">\n <VerdictRow score={0.24} title=\"Test run\" summary=\"3 of 41 checks failed.\" />\n </div>\n </Specimen>\n</Specimens>",
86
+ "note": "What the run thought of its own work, attached to the turn that did it. A finished turn says what it changed and how long it took; whether it is any good is the question the reader actually has, and every runtime that runs a critic, a test suite or a self-review already has an answer. The scorer is unnamed on purpose — the same row fits a critic model, a linter and a second pair of eyes. The stars are the shape and the percentage is the number, because 0.58 against 0.62 is a decision and rounding it away hides the thing that moved the colour.",
87
+ "interaction": "none, but every number is defended: scores arrive from a model over a network, so NaN, Infinity and out-of-range values all clamp rather than reaching the DOM. The rating is one role=img with `Rated 4 out of 5` as its name, not five glyphs read out one at a time."
88
+ }
89
+ ],
90
+ "todo": true
91
+ }
@@ -0,0 +1,109 @@
1
+ {
2
+ "name": "VoiceConversation",
3
+ "slug": "voice-conversation",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "A live call: the orb tracks your voice, the caption names the turn, the transcript\nfollows.",
11
+ "props": [
12
+ {
13
+ "name": "mode",
14
+ "type": "\"thinking\" | \"connecting\" | \"listening\" | \"speaking\"",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Drives the orb and the caption. Only listening and speaking react to amplitude."
18
+ },
19
+ {
20
+ "name": "amplitude",
21
+ "type": "number",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Current level from 0 to 1, clamped internally. Feed it from the analyser node."
25
+ },
26
+ {
27
+ "name": "transcript",
28
+ "type": "readonly VoiceTurn[]",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "Turns so far, oldest first."
32
+ },
33
+ {
34
+ "name": "muted",
35
+ "type": "boolean",
36
+ "required": false,
37
+ "defaultValue": null,
38
+ "description": "Marks the mic control as engaged and swaps the hint."
39
+ },
40
+ {
41
+ "name": "onToggleMute",
42
+ "type": "(() => void)",
43
+ "required": false,
44
+ "defaultValue": null,
45
+ "description": "Called when the mic is muted or unmuted."
46
+ },
47
+ {
48
+ "name": "onInterrupt",
49
+ "type": "(() => void)",
50
+ "required": false,
51
+ "defaultValue": null,
52
+ "description": "Called when the orb is pressed while the assistant is speaking. The orb is inert\nin every other mode, so the caption only offers the interrupt when one is\npossible."
53
+ },
54
+ {
55
+ "name": "onEnd",
56
+ "type": "(() => void)",
57
+ "required": false,
58
+ "defaultValue": null,
59
+ "description": "Called when the call is ended."
60
+ }
61
+ ],
62
+ "typeReferences": [
63
+ "Omit<\n ComponentProps<\"div\">,\n | \"children\"\n | \"mode\"\n | \"amplitude\"\n | \"transcript\"\n | \"muted\"\n | \"onToggleMute\"\n | \"onInterrupt\"\n | \"onEnd\"\n> & {\n /** Drives the orb and the caption. Only listening and speaking react to amplitude. */\n mode: VoiceMode;\n /** Current level from 0 to 1, clamped internally. Feed it from the analyser node. */\n amplitude: number;\n /** Turns so far, oldest first. */\n transcript: readonly VoiceTurn[];\n /** Marks the mic control as engaged and swaps the hint. */\n muted?: boolean;\n /** Called when the mic is muted or unmuted. */\n onToggleMute?: () => void;\n /**\n * Called when the orb is pressed while the assistant is speaking. The orb is inert\n * in every other mode, so the caption only offers the interrupt when one is\n * possible.\n */\n onInterrupt?: () => void;\n /** Called when the call is ended. */\n onEnd?: () => void;\n}"
64
+ ],
65
+ "subcomponents": [],
66
+ "parts": [],
67
+ "variants": {},
68
+ "defaultVariants": {},
69
+ "tokensUsed": [
70
+ "--cue-accent",
71
+ "--cue-danger",
72
+ "--cue-danger-fg",
73
+ "--cue-fg",
74
+ "--cue-fg-muted",
75
+ "--cue-fg-subtle",
76
+ "--cue-radius-overlay",
77
+ "--cue-stream",
78
+ "--cue-surface-1",
79
+ "--cue-surface-2",
80
+ "--cue-surface-3",
81
+ "--cue-text-body",
82
+ "--cue-text-ui"
83
+ ],
84
+ "summary": "A live call: the orb tracks your voice, the caption names the turn, the transcript follows.",
85
+ "examples": [
86
+ {
87
+ "title": "Usage",
88
+ "code": "import { VoiceConversation } from \"@cueplusplus/ui/elements\";\n\n<VoiceConversation\n mode=\"listening\"\n amplitude={0.6}\n transcript={transcript}\n onToggleMute={toggleMute}\n onEnd={hangUp}\n/>",
89
+ "language": "tsx"
90
+ }
91
+ ],
92
+ "status": "todo-docs",
93
+ "url": "/docs/components/voice-conversation",
94
+ "mdUrl": "/docs/components/voice-conversation.md",
95
+ "jsonUrl": "/r/components/voice-conversation.json",
96
+ "specimens": [
97
+ {
98
+ "title": "VoiceConversation",
99
+ "group": "elements-composer",
100
+ "components": [
101
+ "VoiceConversation"
102
+ ],
103
+ "code": "<Specimens>\n <Specimen label=\"connecting\">\n <VoiceConversation mode=\"connecting\" amplitude={0} transcript={[]} />\n </Specimen>\n <Specimen label=\"listening\">\n <VoiceConversation\n mode=\"listening\"\n amplitude={0.72}\n transcript={VOICE.slice(0, 1)}\n onToggleMute={() => undefined}\n onEnd={() => undefined}\n />\n </Specimen>\n <Specimen label=\"thinking\">\n <VoiceConversation mode=\"thinking\" amplitude={0} transcript={VOICE.slice(0, 1)} />\n </Specimen>\n <Specimen label=\"speaking, interruptible\">\n <VoiceConversation\n mode=\"speaking\"\n amplitude={0.44}\n transcript={VOICE}\n onInterrupt={() => undefined}\n onToggleMute={() => undefined}\n onEnd={() => undefined}\n />\n </Specimen>\n <Specimen label=\"muted\">\n <VoiceConversation\n mode=\"listening\"\n amplitude={0}\n transcript={VOICE}\n muted\n onToggleMute={() => undefined}\n onEnd={() => undefined}\n />\n </Specimen>\n</Specimens>",
104
+ "note": "A live call as a surface of its own: the orb tracks your voice, the caption names the turn, and the transcript follows underneath. Only `listening` and `speaking` react to amplitude — a connecting or thinking orb pulses on its own, because pretending to track a level nobody is producing is a lie the eye catches. The transcript keeps a minimum height so the card does not grow as the call goes on.",
105
+ "interaction": "the orb is only pressable while the assistant is speaking, and the hint under the caption says so (`Tap to interrupt`) — an inert orb offers nothing rather than looking pressable and doing nothing."
106
+ }
107
+ ],
108
+ "todo": true
109
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "WebPreview",
3
+ "slug": "web-preview",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "Chrome around a preview: a URL bar, reload, and open-in-new. It renders\n`children` as given and enforces no isolation of its own, so the caller is\nresponsible for passing an already-sandboxed frame.",
11
+ "props": [
12
+ {
13
+ "name": "origin",
14
+ "type": "string",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Host the content is served from. Show the sandbox origin, not your own, so the\nisolation is legible. Displaying it does not create the isolation; the frame you\npass as children must already be sandboxed."
18
+ },
19
+ {
20
+ "name": "loading",
21
+ "type": "boolean",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Fades the frame out and shimmers a status while the sandbox is being set up."
25
+ },
26
+ {
27
+ "name": "children",
28
+ "type": "ReactNode",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "The frame itself. In production this is a sandboxed iframe, not inline markup."
32
+ },
33
+ {
34
+ "name": "onReload",
35
+ "type": "(() => void)",
36
+ "required": false,
37
+ "defaultValue": null,
38
+ "description": "Called from the reload control."
39
+ },
40
+ {
41
+ "name": "onOpenExternal",
42
+ "type": "(() => void)",
43
+ "required": false,
44
+ "defaultValue": null,
45
+ "description": "Called from the open-in-new-tab control."
46
+ }
47
+ ],
48
+ "typeReferences": [
49
+ "Omit<\n ComponentProps<\"div\">,\n \"origin\" | \"loading\" | \"children\" | \"onReload\" | \"onOpenExternal\"\n> & {\n /**\n * Host the content is served from. Show the sandbox origin, not your own, so the\n * isolation is legible. Displaying it does not create the isolation; the frame you\n * pass as children must already be sandboxed.\n */\n origin: string;\n /** Fades the frame out and shimmers a status while the sandbox is being set up. */\n loading: boolean;\n /** The frame itself. In production this is a sandboxed iframe, not inline markup. */\n children: React.ReactNode;\n /** Called from the reload control. */\n onReload?: () => void;\n /** Called from the open-in-new-tab control. */\n onOpenExternal?: () => void;\n}"
50
+ ],
51
+ "subcomponents": [],
52
+ "parts": [],
53
+ "variants": {},
54
+ "defaultVariants": {},
55
+ "tokensUsed": [
56
+ "--cue-border",
57
+ "--cue-fg-muted",
58
+ "--cue-fg-subtle",
59
+ "--cue-radius-overlay",
60
+ "--cue-text-ui"
61
+ ],
62
+ "summary": "Chrome around a preview: a URL bar, reload, and open-in-new.",
63
+ "examples": [
64
+ {
65
+ "title": "Usage",
66
+ "code": "import { WebPreview } from \"@cueplusplus/ui/elements\";\n\n<WebPreview origin=\"scf.auiusercontent.com\" loading={false} onReload={reload}>\n <iframe title=\"Preview\" src={sandboxUrl} sandbox=\"allow-scripts\" />\n</WebPreview>",
67
+ "language": "tsx"
68
+ }
69
+ ],
70
+ "status": "todo-docs",
71
+ "url": "/docs/components/web-preview",
72
+ "mdUrl": "/docs/components/web-preview.md",
73
+ "jsonUrl": "/r/components/web-preview.json",
74
+ "specimens": [
75
+ {
76
+ "title": "WebPreview",
77
+ "group": "elements-knowledge",
78
+ "components": [
79
+ "WebPreview"
80
+ ],
81
+ "code": "<Specimens>\n <Specimen label=\"loaded\" wide>\n <WebPreview\n origin=\"robe.cz/esprite\"\n loading={previewLoading}\n onReload={() => setPreviewLoading((current) => !current)}\n onOpenExternal={() => undefined}\n >\n <div className=\"flex flex-col gap-2 p-4\">\n <p className=\"text-(length:--cue-text-emphasis) font-medium\">ESPRITE</p>\n <p className=\"text-fg-muted text-(length:--cue-text-ui) leading-relaxed\">\n 1000 W LED profile, 6.5–50° zoom, framing shutters, 22,300 lm.\n </p>\n </div>\n </WebPreview>\n </Specimen>\n <Specimen label=\"loading\" wide>\n <WebPreview origin=\"etcconnect.com/source-four-led\" loading>\n <div className=\"p-4\">Source Four LED Series 3</div>\n </WebPreview>\n </Specimen>\n</Specimens>",
82
+ "note": "Chrome around a page the agent opened: origin, reload, open-in-new. It renders whatever you hand it and isolates nothing of its own — an `iframe` here has to arrive already sandboxed, and that is the caller's job, not the element's.",
83
+ "interaction": "reload and open-in-new are named buttons; while `loading` the reload glyph spins, the frame is hidden from assistive tech, and a shimmering label sits in its place."
84
+ }
85
+ ],
86
+ "todo": true
87
+ }