@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,68 @@
1
+ {
2
+ "name": "ElementsDataTable",
3
+ "slug": "elements-data-table",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "A small comparison table the model can answer with directly.",
9
+ "props": [
10
+ {
11
+ "name": "rows",
12
+ "type": "readonly ModelUsage[]",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "Table rows with model name, context window, and cost."
16
+ },
17
+ {
18
+ "name": "cycle",
19
+ "type": "number",
20
+ "required": true,
21
+ "defaultValue": null,
22
+ "description": "Identity key that remounts the body so row entrance can replay."
23
+ }
24
+ ],
25
+ "typeReferences": [
26
+ "Omit<\n ComponentProps<\"div\">,\n \"children\"\n>"
27
+ ],
28
+ "subcomponents": [],
29
+ "parts": [],
30
+ "variants": {},
31
+ "defaultVariants": {},
32
+ "tokensUsed": [
33
+ "--cue-fg",
34
+ "--cue-fg-muted",
35
+ "--cue-fg-subtle",
36
+ "--cue-radius-control",
37
+ "--cue-radius-overlay",
38
+ "--cue-surface-1",
39
+ "--cue-surface-2",
40
+ "--cue-text-body",
41
+ "--cue-text-micro"
42
+ ],
43
+ "summary": "A small comparison table the model can answer with directly.",
44
+ "examples": [
45
+ {
46
+ "title": "Usage",
47
+ "code": "import { DataTable } from \"@cueplusplus/ui/elements\";\n\n<DataTable\n rows={[{ name: \"Sonnet\", context: \"200k\", cost: \"$3\" }]}\n cycle={0}\n/>",
48
+ "language": "tsx"
49
+ }
50
+ ],
51
+ "status": "todo-docs",
52
+ "url": "/docs/components/elements-data-table",
53
+ "mdUrl": "/docs/components/elements-data-table.md",
54
+ "jsonUrl": "/r/components/elements-data-table.json",
55
+ "specimens": [
56
+ {
57
+ "title": "ElementsDataTable",
58
+ "group": "elements-knowledge",
59
+ "components": [
60
+ "ElementsDataTable"
61
+ ],
62
+ "code": "<Specimens>\n <Specimen label=\"what the research cost\" wide>\n <ElementsDataTable rows={USAGE} cycle={0} />\n </Specimen>\n <Specimen label=\"one row\" wide>\n <ElementsDataTable rows={USAGE.slice(0, 1)} cycle={1} />\n </Specimen>\n</Specimens>",
63
+ "note": "A small table the model can answer with directly — three columns, no sorting, no virtualisation, no header menu. It is `ElementsDataTable` because the package already sells a real one at `@cueplusplus/ui/instruments`: that one is a data grid, this one is a paragraph shaped like a grid, and the rename keeps a consumer from reaching for the wrong one.",
64
+ "interaction": "none. `cycle` remounts the body, so a new answer's rows stagger in rather than mutating in place."
65
+ }
66
+ ],
67
+ "todo": true
68
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "ElementsTimeline",
3
+ "slug": "elements-timeline",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "Events on a time axis, with what already happened and what is still coming.",
9
+ "props": [
10
+ {
11
+ "name": "events",
12
+ "type": "readonly TimelineEvent[]",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "Events in chronological order, past and scheduled together."
16
+ },
17
+ {
18
+ "name": "visibleCount",
19
+ "type": "number",
20
+ "required": true,
21
+ "defaultValue": null,
22
+ "description": "How many events have been resolved."
23
+ }
24
+ ],
25
+ "typeReferences": [
26
+ "Omit<ComponentProps<\"div\">, \"children\" | \"events\" | \"visibleCount\"> & {\n /** Events in chronological order, past and scheduled together. */\n events: readonly TimelineEvent[];\n /** How many events have been resolved. */\n visibleCount: number;\n}"
27
+ ],
28
+ "subcomponents": [],
29
+ "parts": [],
30
+ "variants": {},
31
+ "defaultVariants": {},
32
+ "tokensUsed": [
33
+ "--cue-border-strong",
34
+ "--cue-fg",
35
+ "--cue-fg-muted",
36
+ "--cue-fg-subtle",
37
+ "--cue-radius-overlay",
38
+ "--cue-stream",
39
+ "--cue-surface-2",
40
+ "--cue-surface-3",
41
+ "--cue-text-body",
42
+ "--cue-text-ui"
43
+ ],
44
+ "summary": "Events on a time axis, with what already happened and what is still coming.",
45
+ "examples": [
46
+ {
47
+ "title": "Usage",
48
+ "code": "import { Timeline } from \"@cueplusplus/ui/elements\";\n\n<Timeline events={events} visibleCount={events.length} />",
49
+ "language": "tsx"
50
+ }
51
+ ],
52
+ "status": "todo-docs",
53
+ "url": "/docs/components/elements-timeline",
54
+ "mdUrl": "/docs/components/elements-timeline.md",
55
+ "jsonUrl": "/r/components/elements-timeline.json",
56
+ "specimens": [
57
+ {
58
+ "title": "ElementsTimeline",
59
+ "group": "elements-agents",
60
+ "components": [
61
+ "ElementsTimeline"
62
+ ],
63
+ "code": "<Specimens>\n <Specimen label=\"past, now and scheduled\" wide>\n <ElementsTimeline events={EVENTS} visibleCount={EVENTS.length} />\n </Specimen>\n <Specimen label=\"two events in\" wide>\n <ElementsTimeline events={EVENTS} visibleCount={2} />\n </Specimen>\n</Specimens>",
64
+ "note": "Events on one axis, with what already happened and what is still coming in the same list — `past`, `now` and `future` are one union, so a schedule and a history are the same component. It publishes as `ElementsTimeline` because cue already sells a `Timeline`; the spec asked for `ToolTimeline`, which turned out to be the next bench's name.",
65
+ "interaction": "none. The now marker is the only one that pulses, and it holds still for a reader who asked for less motion."
66
+ }
67
+ ],
68
+ "todo": true
69
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "ElicitationForm",
3
+ "slug": "elicitation-form",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "A server pausing mid-tool-call to ask you for the fields it still needs.",
11
+ "props": [
12
+ {
13
+ "name": "server",
14
+ "type": "string",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Which server paused to ask."
18
+ },
19
+ {
20
+ "name": "message",
21
+ "type": "string",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Why the input is needed, in the server's words."
25
+ },
26
+ {
27
+ "name": "fields",
28
+ "type": "readonly ElicitationField[]",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "The schema the server sent, already resolved to display values."
32
+ },
33
+ {
34
+ "name": "state",
35
+ "type": "\"request\" | \"accepted\" | \"declined\"",
36
+ "required": true,
37
+ "defaultValue": null,
38
+ "description": "Swaps the action row for the outcome once the user answers."
39
+ },
40
+ {
41
+ "name": "onAccept",
42
+ "type": "(() => void)",
43
+ "required": false,
44
+ "defaultValue": null,
45
+ "description": "Called when the filled form is sent back."
46
+ },
47
+ {
48
+ "name": "onDecline",
49
+ "type": "(() => void)",
50
+ "required": false,
51
+ "defaultValue": null,
52
+ "description": "Called when the request is refused."
53
+ }
54
+ ],
55
+ "typeReferences": [
56
+ "Omit<\n ComponentProps<\"div\">,\n | \"children\"\n | \"server\"\n | \"message\"\n | \"fields\"\n | \"state\"\n | \"onAccept\"\n | \"onDecline\"\n> & {\n /** Which server paused to ask. */\n server: string;\n /** Why the input is needed, in the server's words. */\n message: string;\n /** The schema the server sent, already resolved to display values. */\n fields: readonly ElicitationField[];\n /** Swaps the action row for the outcome once the user answers. */\n state: ElicitationState;\n /** Called when the filled form is sent back. */\n onAccept?: () => void;\n /** Called when the request is refused. */\n onDecline?: () => void;\n}"
57
+ ],
58
+ "subcomponents": [],
59
+ "parts": [],
60
+ "variants": {},
61
+ "defaultVariants": {},
62
+ "tokensUsed": [
63
+ "--cue-accent",
64
+ "--cue-accent-fg",
65
+ "--cue-bg",
66
+ "--cue-fg",
67
+ "--cue-fg-muted",
68
+ "--cue-fg-subtle",
69
+ "--cue-ok",
70
+ "--cue-radius-overlay",
71
+ "--cue-radius-surface",
72
+ "--cue-surface-1",
73
+ "--cue-surface-2",
74
+ "--cue-surface-3",
75
+ "--cue-text-body",
76
+ "--cue-text-ui"
77
+ ],
78
+ "summary": "A server pausing mid-tool-call to ask you for the fields it still needs.",
79
+ "examples": [
80
+ {
81
+ "title": "Usage",
82
+ "code": "import { ElicitationForm } from \"@cueplusplus/ui/elements\";\n\n<ElicitationForm\n server=\"github-mcp\"\n message=\"Confirm where the release notes should be published.\"\n fields={fields}\n state=\"request\"\n onAccept={send}\n onDecline={decline}\n/>",
83
+ "language": "tsx"
84
+ }
85
+ ],
86
+ "status": "todo-docs",
87
+ "url": "/docs/components/elicitation-form",
88
+ "mdUrl": "/docs/components/elicitation-form.md",
89
+ "jsonUrl": "/r/components/elicitation-form.json",
90
+ "specimens": [
91
+ {
92
+ "title": "ElicitationForm",
93
+ "group": "elements-composer",
94
+ "components": [
95
+ "ElicitationForm"
96
+ ],
97
+ "code": "<Specimens>\n <Specimen label=\"asking\" wide>\n <ElicitationForm\n server=\"eos-desk\"\n message=\"Confirm which universe to patch into before I write anything to the show file.\"\n fields={FIELDS}\n state={elicitation}\n onAccept={() => setElicitation(\"accepted\")}\n onDecline={() => setElicitation(\"declined\")}\n />\n </Specimen>\n <Specimen label=\"answered\" wide>\n <ElicitationForm\n server=\"eos-desk\"\n message=\"Confirm which universe to patch into before I write anything to the show file.\"\n fields={FIELDS}\n state=\"accepted\"\n />\n </Specimen>\n <Specimen label=\"refused\" wide>\n <ElicitationForm\n server=\"eos-desk\"\n message=\"Confirm which universe to patch into before I write anything to the show file.\"\n fields={FIELDS}\n state=\"declined\"\n />\n </Specimen>\n</Specimens>",
98
+ "note": "A server pausing mid-tool-call to ask for the fields it still needs — MCP's elicitation, drawn. The fields arrive already resolved to display values, so the element renders a schema without ever having parsed one, and `state` swaps the two buttons for the outcome the moment the user answers. Declining is a first-class answer here, not a dismissal.",
99
+ "interaction": "each field's control is chosen by its `kind` — a value chip, a row of options, or a switch — and the required ones are marked on the label rather than announced only on failure."
100
+ }
101
+ ],
102
+ "todo": true
103
+ }
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "EmptyStateComposer",
3
+ "slug": "empty-state-composer",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "A composer-shaped invitation under the suggestions. It is a display rather than a\nworking input — the placeholder is a string and send takes a handler — for the\nscreen whose real composer is somewhere else.",
11
+ "props": [
12
+ {
13
+ "name": "placeholder",
14
+ "type": "string",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Resting text in the input bar."
18
+ },
19
+ {
20
+ "name": "onSend",
21
+ "type": "(() => void)",
22
+ "required": false,
23
+ "defaultValue": null,
24
+ "description": "Called from the send control. Omit it and the control renders disabled."
25
+ }
26
+ ],
27
+ "typeReferences": [
28
+ "Omit<ComponentProps<\"div\">, \"children\" | \"placeholder\"> & {\n /** Resting text in the input bar. */\n placeholder: string;\n /** Called from the send control. Omit it and the control renders disabled. */\n onSend?: () => void;\n}"
29
+ ],
30
+ "subcomponents": [],
31
+ "parts": [],
32
+ "variants": {},
33
+ "defaultVariants": {},
34
+ "tokensUsed": [
35
+ "--cue-accent",
36
+ "--cue-fg-subtle",
37
+ "--cue-text-body",
38
+ "--cue-text-emphasis",
39
+ "--cue-text-title"
40
+ ],
41
+ "summary": "A composer-shaped invitation under the suggestions.",
42
+ "examples": [],
43
+ "status": "todo-docs",
44
+ "url": "/docs/components/empty-state-composer",
45
+ "mdUrl": "/docs/components/empty-state-composer.md",
46
+ "jsonUrl": "/r/components/empty-state-composer.json",
47
+ "specimens": [
48
+ {
49
+ "title": "ChatEmptyState",
50
+ "group": "elements-composer",
51
+ "components": [
52
+ "ChatEmptyState",
53
+ "EmptyStateGreeting",
54
+ "EmptyStateSuggestions",
55
+ "EmptyStateSuggestion",
56
+ "EmptyStateComposer"
57
+ ],
58
+ "code": "<Specimens>\n <Specimen label=\"greeting, ways in, composer\" wide>\n <ChatEmptyState>\n <EmptyStateGreeting>What is the rig doing tonight?</EmptyStateGreeting>\n <EmptyStateSuggestions>\n {OPENERS.map((opener, index) => (\n <EmptyStateSuggestion key={opener} index={index}>\n {opener}\n </EmptyStateSuggestion>\n ))}\n </EmptyStateSuggestions>\n <EmptyStateComposer placeholder=\"Ask about the rig\" onSend={() => undefined} />\n </ChatEmptyState>\n </Specimen>\n <Specimen label=\"greeting only\" wide>\n <ChatEmptyState>\n <EmptyStateGreeting>Ready when you are.</EmptyStateGreeting>\n <EmptyStateComposer placeholder=\"Ask about the rig\" />\n </ChatEmptyState>\n </Specimen>\n</Specimens>",
59
+ "note": "The first screen, composed rather than configured: a greeting, some ways in, and a composer-shaped invitation. `EmptyStateComposer` is a display and not a working input — the placeholder is a string and send takes a handler — for the screen whose real composer is somewhere else. The suggestions stagger their entrance from `index`, so the row arrives left to right instead of all at once. Named `ChatEmptyState` because cue already publishes a layout `EmptyState`.",
60
+ "interaction": "each suggestion is a button with cue's focus ring; the greeting is an `h2`, so a screen reader lands on the sentence rather than the pills."
61
+ }
62
+ ],
63
+ "todo": true
64
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "EmptyStateGreeting",
3
+ "slug": "empty-state-greeting",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The one line at the top of a blank thread. A heading, so a screen reader lands on it.",
11
+ "props": [],
12
+ "typeReferences": [
13
+ "ComponentProps<\"h2\">"
14
+ ],
15
+ "subcomponents": [],
16
+ "parts": [],
17
+ "variants": {},
18
+ "defaultVariants": {},
19
+ "tokensUsed": [
20
+ "--cue-accent",
21
+ "--cue-fg-subtle",
22
+ "--cue-text-body",
23
+ "--cue-text-emphasis",
24
+ "--cue-text-title"
25
+ ],
26
+ "summary": "The one line at the top of a blank thread.",
27
+ "examples": [],
28
+ "status": "todo-docs",
29
+ "url": "/docs/components/empty-state-greeting",
30
+ "mdUrl": "/docs/components/empty-state-greeting.md",
31
+ "jsonUrl": "/r/components/empty-state-greeting.json",
32
+ "specimens": [
33
+ {
34
+ "title": "ChatEmptyState",
35
+ "group": "elements-composer",
36
+ "components": [
37
+ "ChatEmptyState",
38
+ "EmptyStateGreeting",
39
+ "EmptyStateSuggestions",
40
+ "EmptyStateSuggestion",
41
+ "EmptyStateComposer"
42
+ ],
43
+ "code": "<Specimens>\n <Specimen label=\"greeting, ways in, composer\" wide>\n <ChatEmptyState>\n <EmptyStateGreeting>What is the rig doing tonight?</EmptyStateGreeting>\n <EmptyStateSuggestions>\n {OPENERS.map((opener, index) => (\n <EmptyStateSuggestion key={opener} index={index}>\n {opener}\n </EmptyStateSuggestion>\n ))}\n </EmptyStateSuggestions>\n <EmptyStateComposer placeholder=\"Ask about the rig\" onSend={() => undefined} />\n </ChatEmptyState>\n </Specimen>\n <Specimen label=\"greeting only\" wide>\n <ChatEmptyState>\n <EmptyStateGreeting>Ready when you are.</EmptyStateGreeting>\n <EmptyStateComposer placeholder=\"Ask about the rig\" />\n </ChatEmptyState>\n </Specimen>\n</Specimens>",
44
+ "note": "The first screen, composed rather than configured: a greeting, some ways in, and a composer-shaped invitation. `EmptyStateComposer` is a display and not a working input — the placeholder is a string and send takes a handler — for the screen whose real composer is somewhere else. The suggestions stagger their entrance from `index`, so the row arrives left to right instead of all at once. Named `ChatEmptyState` because cue already publishes a layout `EmptyState`.",
45
+ "interaction": "each suggestion is a button with cue's focus ring; the greeting is an `h2`, so a screen reader lands on the sentence rather than the pills."
46
+ }
47
+ ],
48
+ "todo": true
49
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "EmptyStateSuggestion",
3
+ "slug": "empty-state-suggestion",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "One thing worth asking, as a pill. `index` staggers its entrance so the row arrives\nleft to right rather than all at once.",
11
+ "props": [
12
+ {
13
+ "name": "index",
14
+ "type": "number",
15
+ "required": false,
16
+ "defaultValue": "0",
17
+ "description": "Position in the row. Staggers the entrance so the pills arrive in order."
18
+ }
19
+ ],
20
+ "typeReferences": [
21
+ "ComponentProps<\"button\"> & {\n /** Position in the row. Staggers the entrance so the pills arrive in order. */\n index?: number;\n}"
22
+ ],
23
+ "subcomponents": [],
24
+ "parts": [],
25
+ "variants": {},
26
+ "defaultVariants": {},
27
+ "tokensUsed": [
28
+ "--cue-accent",
29
+ "--cue-fg-subtle",
30
+ "--cue-text-body",
31
+ "--cue-text-emphasis",
32
+ "--cue-text-title"
33
+ ],
34
+ "summary": "One thing worth asking, as a pill.",
35
+ "examples": [],
36
+ "status": "todo-docs",
37
+ "url": "/docs/components/empty-state-suggestion",
38
+ "mdUrl": "/docs/components/empty-state-suggestion.md",
39
+ "jsonUrl": "/r/components/empty-state-suggestion.json",
40
+ "specimens": [
41
+ {
42
+ "title": "ChatEmptyState",
43
+ "group": "elements-composer",
44
+ "components": [
45
+ "ChatEmptyState",
46
+ "EmptyStateGreeting",
47
+ "EmptyStateSuggestions",
48
+ "EmptyStateSuggestion",
49
+ "EmptyStateComposer"
50
+ ],
51
+ "code": "<Specimens>\n <Specimen label=\"greeting, ways in, composer\" wide>\n <ChatEmptyState>\n <EmptyStateGreeting>What is the rig doing tonight?</EmptyStateGreeting>\n <EmptyStateSuggestions>\n {OPENERS.map((opener, index) => (\n <EmptyStateSuggestion key={opener} index={index}>\n {opener}\n </EmptyStateSuggestion>\n ))}\n </EmptyStateSuggestions>\n <EmptyStateComposer placeholder=\"Ask about the rig\" onSend={() => undefined} />\n </ChatEmptyState>\n </Specimen>\n <Specimen label=\"greeting only\" wide>\n <ChatEmptyState>\n <EmptyStateGreeting>Ready when you are.</EmptyStateGreeting>\n <EmptyStateComposer placeholder=\"Ask about the rig\" />\n </ChatEmptyState>\n </Specimen>\n</Specimens>",
52
+ "note": "The first screen, composed rather than configured: a greeting, some ways in, and a composer-shaped invitation. `EmptyStateComposer` is a display and not a working input — the placeholder is a string and send takes a handler — for the screen whose real composer is somewhere else. The suggestions stagger their entrance from `index`, so the row arrives left to right instead of all at once. Named `ChatEmptyState` because cue already publishes a layout `EmptyState`.",
53
+ "interaction": "each suggestion is a button with cue's focus ring; the greeting is an `h2`, so a screen reader lands on the sentence rather than the pills."
54
+ }
55
+ ],
56
+ "todo": true
57
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "EmptyStateSuggestions",
3
+ "slug": "empty-state-suggestions",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "The row the suggestion pills wrap in.",
11
+ "props": [],
12
+ "typeReferences": [
13
+ "ComponentProps<\"div\">"
14
+ ],
15
+ "subcomponents": [],
16
+ "parts": [],
17
+ "variants": {},
18
+ "defaultVariants": {},
19
+ "tokensUsed": [
20
+ "--cue-accent",
21
+ "--cue-fg-subtle",
22
+ "--cue-text-body",
23
+ "--cue-text-emphasis",
24
+ "--cue-text-title"
25
+ ],
26
+ "summary": "The row the suggestion pills wrap in.",
27
+ "examples": [],
28
+ "status": "todo-docs",
29
+ "url": "/docs/components/empty-state-suggestions",
30
+ "mdUrl": "/docs/components/empty-state-suggestions.md",
31
+ "jsonUrl": "/r/components/empty-state-suggestions.json",
32
+ "specimens": [
33
+ {
34
+ "title": "ChatEmptyState",
35
+ "group": "elements-composer",
36
+ "components": [
37
+ "ChatEmptyState",
38
+ "EmptyStateGreeting",
39
+ "EmptyStateSuggestions",
40
+ "EmptyStateSuggestion",
41
+ "EmptyStateComposer"
42
+ ],
43
+ "code": "<Specimens>\n <Specimen label=\"greeting, ways in, composer\" wide>\n <ChatEmptyState>\n <EmptyStateGreeting>What is the rig doing tonight?</EmptyStateGreeting>\n <EmptyStateSuggestions>\n {OPENERS.map((opener, index) => (\n <EmptyStateSuggestion key={opener} index={index}>\n {opener}\n </EmptyStateSuggestion>\n ))}\n </EmptyStateSuggestions>\n <EmptyStateComposer placeholder=\"Ask about the rig\" onSend={() => undefined} />\n </ChatEmptyState>\n </Specimen>\n <Specimen label=\"greeting only\" wide>\n <ChatEmptyState>\n <EmptyStateGreeting>Ready when you are.</EmptyStateGreeting>\n <EmptyStateComposer placeholder=\"Ask about the rig\" />\n </ChatEmptyState>\n </Specimen>\n</Specimens>",
44
+ "note": "The first screen, composed rather than configured: a greeting, some ways in, and a composer-shaped invitation. `EmptyStateComposer` is a display and not a working input — the placeholder is a string and send takes a handler — for the screen whose real composer is somewhere else. The suggestions stagger their entrance from `index`, so the row arrives left to right instead of all at once. Named `ChatEmptyState` because cue already publishes a layout `EmptyState`.",
45
+ "interaction": "each suggestion is a button with cue's focus ring; the greeting is an `h2`, so a screen reader lands on the sentence rather than the pills."
46
+ }
47
+ ],
48
+ "todo": true
49
+ }
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "EndOfTurnSummary",
3
+ "slug": "end-of-turn-summary",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "What the turn came to, in one line: `3 files changed +48 −12`.\n\nA rollup, not a control: it says what happened and offers nothing to do about\nit, because the things to do about it — review, keep, reject — belong to a\nbar above the composer that acts on the whole run, and a per-turn row with\nthose buttons on it is a row that can be pressed after the next turn has\nalready changed the same files.\n\nThe counts are drawn only when there are some. A turn that read four files\nand wrote nothing says `No files changed` and stops, rather than saying it\nwith two zeroes.",
9
+ "props": [
10
+ {
11
+ "name": "files",
12
+ "type": "number",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "How many files the turn touched."
16
+ },
17
+ {
18
+ "name": "additions",
19
+ "type": "number",
20
+ "required": false,
21
+ "defaultValue": "0",
22
+ "description": "Lines added across them."
23
+ },
24
+ {
25
+ "name": "deletions",
26
+ "type": "number",
27
+ "required": false,
28
+ "defaultValue": "0",
29
+ "description": "Lines removed across them."
30
+ },
31
+ {
32
+ "name": "label",
33
+ "type": "string",
34
+ "required": false,
35
+ "defaultValue": null,
36
+ "description": "The whole line, replacing the one {@link formatChangeSummary} would build —\nfor a turn whose result is not a diff at all: `2 cues written`,\n`Nothing to change`."
37
+ }
38
+ ],
39
+ "typeReferences": [
40
+ "Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
41
+ ],
42
+ "subcomponents": [],
43
+ "parts": [],
44
+ "variants": {},
45
+ "defaultVariants": {},
46
+ "tokensUsed": [
47
+ "--cue-danger",
48
+ "--cue-fg-muted",
49
+ "--cue-ok",
50
+ "--cue-text-ui"
51
+ ],
52
+ "summary": "What the turn came to, in one line: `3 files changed +48 −12`.",
53
+ "examples": [
54
+ {
55
+ "title": "Usage",
56
+ "code": "import { EndOfTurnSummary } from \"@cueplusplus/ui/elements\";\n\n<EndOfTurnSummary files={3} additions={48} deletions={12} />\n<EndOfTurnSummary files={0} />",
57
+ "language": "tsx"
58
+ }
59
+ ],
60
+ "status": "todo-docs",
61
+ "url": "/docs/components/end-of-turn-summary",
62
+ "mdUrl": "/docs/components/end-of-turn-summary.md",
63
+ "jsonUrl": "/r/components/end-of-turn-summary.json",
64
+ "specimens": [
65
+ {
66
+ "title": "EndOfTurnSummary",
67
+ "group": "elements-thread",
68
+ "components": [
69
+ "EndOfTurnSummary"
70
+ ],
71
+ "code": "<Specimens>\n <Specimen label=\"three files\" wide>\n <div className=\"w-full max-w-md\">\n <EndOfTurnSummary files={3} additions={48} deletions={12} />\n </div>\n </Specimen>\n <Specimen label=\"one file, additions only\" wide>\n <div className=\"w-full max-w-md\">\n <EndOfTurnSummary files={1} additions={6} />\n </div>\n </Specimen>\n <Specimen label=\"nothing changed\" wide>\n <div className=\"w-full max-w-md\">\n <EndOfTurnSummary files={0} />\n </div>\n </Specimen>\n</Specimens>",
72
+ "note": "What the turn came to, in one line. A rollup and not a control: review, keep and reject act on the whole run and belong above the composer, where they cannot be pressed after the next turn has already changed the same files. The + and − are CodeDiff's glyphs, so one transcript never shows two conventions for the same number, and a turn that changed nothing says so instead of saying it with two zeroes.",
73
+ "interaction": "none. It is a sentence with two tinted numbers in it."
74
+ }
75
+ ],
76
+ "todo": true
77
+ }
@@ -102,12 +102,14 @@
102
102
  "tokensUsed": [
103
103
  "--cue-accent",
104
104
  "--cue-border",
105
+ "--cue-border-strong",
105
106
  "--cue-control-lg",
106
107
  "--cue-control-md",
107
108
  "--cue-control-sm",
108
109
  "--cue-danger",
109
110
  "--cue-fg",
110
111
  "--cue-fg-subtle",
112
+ "--cue-focus",
111
113
  "--cue-font-mono",
112
114
  "--cue-icon-md",
113
115
  "--cue-icon-sm",
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "ErrorState",
3
+ "slug": "error-state",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "lucide-react"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "A quiet failure banner with a retry path, not a modal in your face.",
11
+ "props": [
12
+ {
13
+ "name": "title",
14
+ "type": "string",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Primary failure headline shown in the banner."
18
+ },
19
+ {
20
+ "name": "detail",
21
+ "type": "string",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "Supporting detail under the title explaining what went wrong."
25
+ },
26
+ {
27
+ "name": "retrying",
28
+ "type": "boolean",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "When true the banner swaps to a spinning Retrying status instead of the error."
32
+ },
33
+ {
34
+ "name": "onRetry",
35
+ "type": "() => void",
36
+ "required": true,
37
+ "defaultValue": null,
38
+ "description": "Called when the retry control is pressed."
39
+ }
40
+ ],
41
+ "typeReferences": [
42
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"role\"\n>"
43
+ ],
44
+ "subcomponents": [],
45
+ "parts": [],
46
+ "variants": {},
47
+ "defaultVariants": {},
48
+ "tokensUsed": [
49
+ "--cue-danger",
50
+ "--cue-fg-muted",
51
+ "--cue-radius-overlay",
52
+ "--cue-text-body",
53
+ "--cue-text-ui"
54
+ ],
55
+ "summary": "A quiet failure banner with a retry path, not a modal in your face.",
56
+ "examples": [
57
+ {
58
+ "title": "Usage",
59
+ "code": "import { ErrorState } from \"@cueplusplus/ui/elements\";\n\n<ErrorState\n title=\"Request failed\"\n detail=\"The model timed out.\"\n retrying={false}\n onRetry={() => {}}\n/>",
60
+ "language": "tsx"
61
+ }
62
+ ],
63
+ "status": "todo-docs",
64
+ "url": "/docs/components/error-state",
65
+ "mdUrl": "/docs/components/error-state.md",
66
+ "jsonUrl": "/r/components/error-state.json",
67
+ "specimens": [
68
+ {
69
+ "title": "ErrorState",
70
+ "group": "elements-agents",
71
+ "components": [
72
+ "ErrorState"
73
+ ],
74
+ "code": "<Specimens>\n <Specimen label=\"failed\" wide>\n <ErrorState\n title=\"The desk refused the patch\"\n detail=\"Universe 3 is not enabled on this show file. Enable it on the desk, or patch into universes 1 and 2.\"\n retrying={false}\n onRetry={() => undefined}\n />\n </Specimen>\n <Specimen label=\"retrying\" wide>\n <ErrorState\n title=\"The desk refused the patch\"\n detail=\"Universe 3 is not enabled on this show file.\"\n retrying\n onRetry={() => undefined}\n />\n </Specimen>\n</Specimens>",
75
+ "note": "A failure banner, not a modal: it sits in the flow where the answer would have been, says what broke and what to do, and leaves the rest of the page alone. Retrying is a different element entirely rather than a disabled button — `role='alert'` while it is a failure, `role='status'` while it is trying again, which is the difference between interrupting a screen reader and not.",
76
+ "interaction": "Retry is a named button that tints on hover. The retrying state has no control at all, because there is nothing to press while it works."
77
+ }
78
+ ],
79
+ "todo": true
80
+ }