@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
@@ -55,7 +55,7 @@ declare const OVERRIDE_BANNER = "@cueplusplus/ui — theme configurator override
55
55
  /** The authored label tracking, and the value the "reset" arrow returns to. */
56
56
  declare const BASE_TRACKING_LABEL = "0.12em";
57
57
  /** The colour tokens the panel edits — the same list a theme block declares. */
58
- declare const COLOR_TOKENS: readonly ["bg", "sunken", "surface-1", "surface-2", "surface-3", "fg", "fg-muted", "fg-subtle", "border", "border-strong", "border-overlay", "accent", "accent-hover", "accent-fg", "ok", "busy", "warn", "danger", "info", "selection", "focus", "data-ground", "scrim"];
58
+ declare const COLOR_TOKENS: readonly ["bg", "sunken", "surface-1", "surface-2", "surface-3", "fg", "fg-muted", "fg-subtle", "border", "border-strong", "border-overlay", "accent", "accent-hover", "accent-fg", "ok", "busy", "warn", "warn-fg", "danger", "danger-fg", "info", "stream", "selection", "focus", "data-ground", "scrim"];
59
59
  /** The type stacks the panel edits. Mode-independent: a typeface is not a palette. */
60
60
  declare const FONT_TOKENS: readonly ["font-sans", "font-mono", "font-display"];
61
61
  /** Every token the configurator is allowed to write, as `--cue-*` properties, in contract order. */
@@ -67,8 +67,11 @@ const COLOR_TOKEN_GROUPS = [
67
67
  "ok",
68
68
  "busy",
69
69
  "warn",
70
+ "warn-fg",
70
71
  "danger",
71
- "info"
72
+ "danger-fg",
73
+ "info",
74
+ "stream"
72
75
  ]
73
76
  }
74
77
  ];
@@ -1,5 +1,5 @@
1
1
  import { cn } from "../lib/cn.js";
2
- import { controlVariants } from "../forms/_chassis.js";
2
+ import { controlGroupFocusClasses, controlVariants } from "../forms/_chassis.js";
3
3
  import { ariaClassName } from "../lib/aria-class.js";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -24,11 +24,22 @@ import { DateInput, DateSegment } from "react-aria-components";
24
24
  * The chassis lights its rim on `:focus`, which this group can never match —
25
25
  * React Aria keeps DOM focus on the individual segment and reports the group's
26
26
  * state as `data-focus-within`. Without the extra variant the inherited
27
- * `focus:border-accent` is a rule that cannot fire, and a segmented field is the
28
- * only control in the system whose rim stays dead while it is being typed into.
27
+ * `focus:border-border-strong` is a rule that cannot fire, and a segmented field
28
+ * would be the only control in the system whose rim stays dead while it is being
29
+ * typed into.
30
+ *
31
+ * A segmented field is a grouped control in every sense that matters, so it
32
+ * takes the grouped contract whole rather than a rim of its own invention:
33
+ * `controlGroupFocusClasses` strengthens the rim for any focus inside and paints
34
+ * the single flush `--cue-focus` ring only for a `:focus-visible` descendant.
35
+ * React Aria makes each value segment `contentEditable`, and a typing surface
36
+ * matches `:focus-visible` on a pointer click as well as on Tab, so the ring
37
+ * lands whenever the field is actually being edited. `data-focus-within` is kept
38
+ * beside the native `:focus-within` rim because it is the state React Aria
39
+ * documents, and the two agree on the same colour either way.
29
40
  */
30
41
  function segmentGroupClasses(size) {
31
- return cn(controlVariants({ size }), "inline-flex w-auto items-center whitespace-nowrap data-[focus-within]:border-accent");
42
+ return cn(controlVariants({ size }), "inline-flex w-auto items-center whitespace-nowrap data-[focus-within]:border-border-strong", controlGroupFocusClasses);
32
43
  }
33
44
  /**
34
45
  * One segment. `data-focused` — not `:focus` — carries the highlight, because
@@ -36,11 +47,46 @@ function segmentGroupClasses(size) {
36
47
  * through data attributes.
37
48
  */
38
49
  const segmentClasses = "rounded-[2px] px-[0.0625rem] tabular-nums outline-none data-[focused]:bg-accent data-[focused]:text-accent-fg data-[placeholder]:text-fg-subtle data-[disabled]:opacity-40 data-[type=literal]:px-0 data-[type=literal]:text-fg-subtle";
39
- /** The `DateInput` children render prop, wired to the segment skin. */
50
+ /**
51
+ * The `DateInput` children render prop, wired to the segment skin.
52
+ *
53
+ * `suppressHydrationWarning`, and it is not papering over a bug of ours. A
54
+ * segment's text comes from `Intl.DateTimeFormat`, which resolves against the
55
+ * *ICU data of whatever is rendering* — and a server and a browser update their
56
+ * ICU on different schedules. Today, `en-US` at 7:30 PM is `7:30\u202FPM` from
57
+ * Node 24 (CLDR 48) and `7:30\u0020PM` from Chrome 151: one narrow no-break
58
+ * space against one ordinary one, identical on screen, different to React.
59
+ *
60
+ * Without this, that one character is a hydration mismatch, and a mismatch is
61
+ * not a warning — React throws away the server's HTML and re-renders the whole
62
+ * document on the client. That re-mounts `<html>`, which React treats as a
63
+ * singleton and therefore strips every attribute off, including the four the
64
+ * pre-paint script wrote. Measured on this repository's own docs site: 208 ms
65
+ * with no theme, density, mode or pairing on the document, 6,423 elements
66
+ * resolving to a monospace nobody selected, and 40 KB of webfont fetched for it
67
+ * that painted zero glyphs.
68
+ *
69
+ * So the mismatch is declared expected, on the one element whose text can
70
+ * legitimately differ. The server's spelling of the space is kept; nobody can
71
+ * see which one it is.
72
+ *
73
+ * It needs the extra `<span>` because React Aria runs its props through
74
+ * `filterDOMProps`, which drops `suppressHydrationWarning` before the segment's
75
+ * own element ever sees it — and React only honours the flag on the element
76
+ * that directly contains the differing text. Only **literal** segments are
77
+ * wrapped: they are the separators, `aria-hidden` and not focusable, while the
78
+ * value segments React Aria makes `contentEditable` are left exactly as they
79
+ * were. Digits and `AM`/`PM` are spelled the same by every ICU there has been;
80
+ * it is only ever the space between them that moves.
81
+ */
40
82
  function renderSegment(segment) {
41
83
  return /* @__PURE__ */ jsx(DateSegment, {
42
84
  segment,
43
- className: segmentClasses
85
+ className: segmentClasses,
86
+ children: ({ text }) => segment.type === "literal" ? /* @__PURE__ */ jsx("span", {
87
+ suppressHydrationWarning: true,
88
+ children: text
89
+ }) : text
44
90
  });
45
91
  }
46
92
  /** The `DateInput` both fields render, dressed and wired to the segment skin. */
@@ -0,0 +1,40 @@
1
+ import { ComponentProps } from "react";
2
+ import * as HeatGraph from "heat-graph";
3
+ //#region src/elements/activity-graph.d.ts
4
+ /**
5
+ * A half-year of runs as a calendar of cells, dense where the work was.
6
+ *
7
+ * @example
8
+ * import { ActivityGraph } from "@cueplusplus/ui/elements";
9
+ *
10
+ * <ActivityGraph
11
+ * data={data}
12
+ * start={start}
13
+ * end={end}
14
+ * title="Agent runs"
15
+ * total="1,204 in 6 months"
16
+ * />
17
+ */
18
+ declare function ActivityGraph({ data, start, end, title, total, className, ...props }: Omit<ComponentProps<"div">, "children" | "data" | "start" | "end" | "title" | "total"> & {
19
+ /**
20
+ * Date and count pairs from the heat-graph package. Levels are classified for you;
21
+ * gaps are filled as empty cells.
22
+ */
23
+ data: readonly HeatGraph.DataPoint[];
24
+ /**
25
+ * First day of the window. Pass it explicitly: left unset, heat-graph draws a full
26
+ * year ending today, which will not match your data.
27
+ */
28
+ start: string | Date;
29
+ /**
30
+ * Last day of the window. Cells are fixed-size, so a long window scrolls
31
+ * horizontally rather than shrinking.
32
+ */
33
+ end: string | Date;
34
+ /** What is being counted. */
35
+ title: string;
36
+ /** Pre-formatted summary shown opposite the title. */
37
+ total: string;
38
+ }): import("react").JSX.Element;
39
+ //#endregion
40
+ export { ActivityGraph };
@@ -0,0 +1,81 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { mono, paper } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import * as HeatGraph from "heat-graph";
6
+ //#region src/elements/activity-graph.tsx
7
+ const LEVEL_TINT = [
8
+ "bg-surface-2",
9
+ "bg-stream/25",
10
+ "bg-stream/45",
11
+ "bg-stream/70",
12
+ "bg-stream"
13
+ ];
14
+ /**
15
+ * A half-year of runs as a calendar of cells, dense where the work was.
16
+ *
17
+ * @example
18
+ * import { ActivityGraph } from "@cueplusplus/ui/elements";
19
+ *
20
+ * <ActivityGraph
21
+ * data={data}
22
+ * start={start}
23
+ * end={end}
24
+ * title="Agent runs"
25
+ * total="1,204 in 6 months"
26
+ * />
27
+ */
28
+ function ActivityGraph({ data, start, end, title, total, className, ...props }) {
29
+ return /* @__PURE__ */ jsxs("div", {
30
+ "data-slot": "activity-graph",
31
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-4", className),
32
+ ...props,
33
+ children: [/* @__PURE__ */ jsxs("div", {
34
+ className: "flex items-baseline justify-between",
35
+ children: [/* @__PURE__ */ jsx("span", {
36
+ className: "text-(length:--cue-text-body) font-medium",
37
+ children: title
38
+ }), /* @__PURE__ */ jsx("span", {
39
+ className: cn(mono, "text-fg-subtle tabular-nums"),
40
+ children: total
41
+ })]
42
+ }), /* @__PURE__ */ jsxs(HeatGraph.Root, {
43
+ data: [...data],
44
+ start,
45
+ end,
46
+ weekStart: "monday",
47
+ className: "flex flex-col gap-2",
48
+ children: [/* @__PURE__ */ jsxs("div", {
49
+ className: "flex gap-2 overflow-x-auto",
50
+ children: [/* @__PURE__ */ jsx("div", {
51
+ className: "flex shrink-0 flex-col gap-[3px]",
52
+ children: /* @__PURE__ */ jsx(HeatGraph.DayLabels, { children: ({ label }) => /* @__PURE__ */ jsx("span", {
53
+ className: cn(mono, "text-fg-subtle flex h-[9px] items-center leading-none"),
54
+ children: label.row % 2 === 1 ? HeatGraph.DAY_SHORT[label.dayOfWeek] : ""
55
+ }) })
56
+ }), /* @__PURE__ */ jsx(HeatGraph.Grid, {
57
+ className: "gap-[3px]",
58
+ children: ({ cell }) => /* @__PURE__ */ jsx(HeatGraph.Cell, { className: cn("size-[9px] rounded-(--radius-control)", LEVEL_TINT[cell.level] ?? LEVEL_TINT[0]) })
59
+ })]
60
+ }), /* @__PURE__ */ jsxs("div", {
61
+ className: "flex items-center gap-1.5 self-end",
62
+ children: [
63
+ /* @__PURE__ */ jsx("span", {
64
+ className: cn(mono, "text-fg-subtle"),
65
+ children: "less"
66
+ }),
67
+ LEVEL_TINT.map((tint, level) => /* @__PURE__ */ jsx("span", {
68
+ "aria-hidden": true,
69
+ className: cn("size-[9px] rounded-(--radius-control)", tint)
70
+ }, level)),
71
+ /* @__PURE__ */ jsx("span", {
72
+ className: cn(mono, "text-fg-subtle"),
73
+ children: "more"
74
+ })
75
+ ]
76
+ })]
77
+ })]
78
+ });
79
+ }
80
+ //#endregion
81
+ export { ActivityGraph };
@@ -0,0 +1,49 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/agent-card.d.ts
3
+ /** One thing an agent says it can do: the verb it answers to, and the line under it. */
4
+ interface AgentSkill {
5
+ /** What the skill is called. Drawn as a mono chip, and the row's key. */
6
+ name: string;
7
+ /** One line on what it does, truncated to the row rather than wrapped. */
8
+ description: string;
9
+ }
10
+ /**
11
+ * Who you are about to talk to: its skills, its model, and the endpoint behind it.
12
+ *
13
+ * @example
14
+ * import { AgentCard } from "@cueplusplus/ui/elements";
15
+ *
16
+ * <AgentCard
17
+ * name="Maintainer"
18
+ * description="Reproduces the report, writes the fix, opens the PR."
19
+ * provider="assistant-ui"
20
+ * version="1.4.0"
21
+ * model="opus"
22
+ * endpoint="https://agents.example.com/a2a"
23
+ * skills={skills}
24
+ * connected={false}
25
+ * onConnect={connect}
26
+ * />
27
+ */
28
+ declare function AgentCard({ name, description, provider, version, model, endpoint, skills, connected, onConnect, className, ...props }: Omit<ComponentProps<"div">, "children" | "name" | "description" | "provider" | "version" | "model" | "endpoint" | "skills" | "connected" | "onConnect"> & {
29
+ /** Display name of the agent. */
30
+ name: string;
31
+ /** What it does, in one or two sentences. */
32
+ description: string;
33
+ /** Who publishes it. */
34
+ provider: string;
35
+ /** Card version, printed next to the name. */
36
+ version: string;
37
+ /** Model the agent runs on. */
38
+ model: string;
39
+ /** Where it is reached. Truncates rather than wraps. */
40
+ endpoint: string;
41
+ /** Named capabilities the card advertises. */
42
+ skills: readonly AgentSkill[];
43
+ /** Swaps the action for a settled Connected state and disables it. */
44
+ connected: boolean;
45
+ /** Called when the agent is added. */
46
+ onConnect?: () => void;
47
+ }): import("react").JSX.Element;
48
+ //#endregion
49
+ export { AgentCard, AgentSkill };
@@ -0,0 +1,91 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { field, inkButton, mono, paper } from "./surfaces.js";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ import { BotIcon, CheckIcon } from "lucide-react";
6
+ //#region src/elements/agent-card.tsx
7
+ /**
8
+ * Who you are about to talk to: its skills, its model, and the endpoint behind it.
9
+ *
10
+ * @example
11
+ * import { AgentCard } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <AgentCard
14
+ * name="Maintainer"
15
+ * description="Reproduces the report, writes the fix, opens the PR."
16
+ * provider="assistant-ui"
17
+ * version="1.4.0"
18
+ * model="opus"
19
+ * endpoint="https://agents.example.com/a2a"
20
+ * skills={skills}
21
+ * connected={false}
22
+ * onConnect={connect}
23
+ * />
24
+ */
25
+ function AgentCard({ name, description, provider, version, model, endpoint, skills, connected, onConnect, className, ...props }) {
26
+ return /* @__PURE__ */ jsxs("div", {
27
+ "data-slot": "agent-card",
28
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3.5 rounded-(--radius-overlay) p-4", className),
29
+ ...props,
30
+ children: [
31
+ /* @__PURE__ */ jsxs("div", {
32
+ className: "flex items-start gap-3",
33
+ children: [/* @__PURE__ */ jsx("span", {
34
+ className: "bg-surface-1 text-fg-muted flex size-9 shrink-0 items-center justify-center rounded-(--radius-surface)",
35
+ children: /* @__PURE__ */ jsx(BotIcon, { className: "size-4" })
36
+ }), /* @__PURE__ */ jsxs("div", {
37
+ className: "flex min-w-0 flex-1 flex-col",
38
+ children: [/* @__PURE__ */ jsxs("span", {
39
+ className: "flex items-baseline gap-2",
40
+ children: [/* @__PURE__ */ jsx("span", {
41
+ className: "truncate text-(length:--cue-text-body) font-medium",
42
+ children: name
43
+ }), /* @__PURE__ */ jsxs("span", {
44
+ className: cn(mono, "text-fg-subtle shrink-0"),
45
+ children: ["v", version]
46
+ })]
47
+ }), /* @__PURE__ */ jsx("span", {
48
+ className: "text-fg-muted truncate text-(length:--cue-text-ui)",
49
+ children: provider
50
+ })]
51
+ })]
52
+ }),
53
+ /* @__PURE__ */ jsx("p", {
54
+ className: "text-fg-muted text-(length:--cue-text-ui) leading-relaxed",
55
+ children: description
56
+ }),
57
+ /* @__PURE__ */ jsx("div", {
58
+ className: "flex flex-col gap-1.5",
59
+ children: skills.map((skill) => /* @__PURE__ */ jsxs("div", {
60
+ className: "flex items-baseline gap-2",
61
+ children: [/* @__PURE__ */ jsx("span", {
62
+ className: cn(field, mono, "text-fg-muted shrink-0 rounded-(--radius-control) px-1.5 py-0.5"),
63
+ children: skill.name
64
+ }), /* @__PURE__ */ jsx("span", {
65
+ className: "text-fg-muted min-w-0 flex-1 truncate text-(length:--cue-text-ui)",
66
+ children: skill.description
67
+ })]
68
+ }, skill.name))
69
+ }),
70
+ /* @__PURE__ */ jsxs("div", {
71
+ className: "border-border flex items-center gap-2 border-t pt-3",
72
+ children: [/* @__PURE__ */ jsx("span", {
73
+ className: cn(mono, "text-fg-subtle min-w-0 flex-1 truncate"),
74
+ children: endpoint
75
+ }), /* @__PURE__ */ jsx("span", {
76
+ className: cn(mono, "text-fg-subtle shrink-0"),
77
+ children: model
78
+ })]
79
+ }),
80
+ /* @__PURE__ */ jsx("button", {
81
+ type: "button",
82
+ onClick: onConnect,
83
+ disabled: connected,
84
+ className: cn(connected ? cn(field, "text-fg-muted") : cn(inkButton, "justify-center"), "flex h-8 items-center justify-center gap-1.5 rounded-full px-3.5 text-(length:--cue-text-ui) font-medium disabled:pointer-events-none"),
85
+ children: connected ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5 text-ok" }), "Connected"] }) : "Connect"
86
+ })
87
+ ]
88
+ });
89
+ }
90
+ //#endregion
91
+ export { AgentCard };
@@ -0,0 +1,24 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/agent-handoff.d.ts
3
+ /**
4
+ * Control passing between agents, with the reason and what came along.
5
+ *
6
+ * @example
7
+ * import { AgentHandoff } from "@cueplusplus/ui/elements";
8
+ *
9
+ * <AgentHandoff from="Triage" to="Maintainer" reason={reason} carried={carried} settled />
10
+ */
11
+ declare function AgentHandoff({ from, to, reason, carried, settled, className, ...props }: Omit<ComponentProps<"div">, "children" | "from" | "to" | "reason" | "carried" | "settled"> & {
12
+ /** Agent giving up control. */
13
+ from: string;
14
+ /** Agent taking it. */
15
+ to: string;
16
+ /** Why the baton moved. Without it a handoff reads as an unexplained jump. */
17
+ reason: string;
18
+ /** Context that travelled across. Pass an empty array to hide the section. */
19
+ carried: readonly string[];
20
+ /** Cools the arrow and the receiving badge once the new agent is underway. */
21
+ settled: boolean;
22
+ }): import("react").JSX.Element;
23
+ //#endregion
24
+ export { AgentHandoff };
@@ -0,0 +1,53 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { field } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { ArrowRightIcon, BotIcon } from "lucide-react";
6
+ //#region src/elements/agent-handoff.tsx
7
+ /**
8
+ * Control passing between agents, with the reason and what came along.
9
+ *
10
+ * @example
11
+ * import { AgentHandoff } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <AgentHandoff from="Triage" to="Maintainer" reason={reason} carried={carried} settled />
14
+ */
15
+ function AgentHandoff({ from, to, reason, carried, settled, className, ...props }) {
16
+ return /* @__PURE__ */ jsxs("div", {
17
+ "data-slot": "agent-handoff",
18
+ className: cn("flex w-full max-w-sm flex-col gap-2", className),
19
+ ...props,
20
+ children: [
21
+ /* @__PURE__ */ jsxs("div", {
22
+ className: "flex items-center gap-2",
23
+ children: [
24
+ /* @__PURE__ */ jsxs("span", {
25
+ className: cn(field, "text-fg-muted flex items-center gap-1.5 rounded-full px-2.5 py-1 text-(length:--cue-text-ui) transition-opacity duration-500", settled && "opacity-45"),
26
+ children: [/* @__PURE__ */ jsx(BotIcon, { className: "size-3" }), from]
27
+ }),
28
+ /* @__PURE__ */ jsx(ArrowRightIcon, { className: cn("size-3.5 shrink-0 transition-colors duration-500", settled ? "text-fg-subtle" : "text-stream") }),
29
+ /* @__PURE__ */ jsxs("span", {
30
+ className: cn("flex items-center gap-1.5 rounded-full px-2.5 py-1 text-(length:--cue-text-ui) transition-colors duration-500", settled ? cn(field, "text-fg-muted") : "bg-stream/15 text-stream"),
31
+ children: [/* @__PURE__ */ jsx(BotIcon, { className: "size-3" }), to]
32
+ })
33
+ ]
34
+ }),
35
+ /* @__PURE__ */ jsx("p", {
36
+ className: "text-fg-muted text-(length:--cue-text-ui) leading-relaxed",
37
+ children: reason
38
+ }),
39
+ carried.length > 0 && /* @__PURE__ */ jsxs("div", {
40
+ className: "flex flex-col gap-1",
41
+ children: [/* @__PURE__ */ jsx("span", {
42
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle"),
43
+ children: "carried over"
44
+ }), carried.map((item) => /* @__PURE__ */ jsx("span", {
45
+ className: "text-fg-muted border-border border-s ps-2.5 text-(length:--cue-text-ui) leading-relaxed",
46
+ children: item
47
+ }, item))]
48
+ })
49
+ ]
50
+ });
51
+ }
52
+ //#endregion
53
+ export { AgentHandoff };
@@ -0,0 +1,72 @@
1
+ import { AgentMode } from "./vocabulary.js";
2
+ import * as React from "react";
3
+ import { useRender } from "@base-ui/react/use-render";
4
+ //#region src/elements/agent-mode-badge.d.ts
5
+ interface AgentModeBadgeProps extends Omit<React.ComponentPropsWithoutRef<"span">, "children"> {
6
+ /**
7
+ * How much authority the run is holding: `manual`, `auto-edit`, `plan` or
8
+ * `unsafe`. Stamped as `data-agent-mode`, which is what the quadruple in
9
+ * `@cueplusplus/ui/elements.css` is keyed on.
10
+ */
11
+ mode: AgentMode;
12
+ /**
13
+ * The product's own word for it — `Agent`, `Build`, `YOLO`, `Bypass
14
+ * permissions`. Defaults to `AGENT_MODE_LABELS[mode]`, and it is the reason
15
+ * a nine-mode product needs no more than these four rungs.
16
+ */
17
+ label?: string;
18
+ /**
19
+ * What the mode actually does, as the badge's `title`. Defaults to
20
+ * `AGENT_MODE_DESCRIPTIONS[mode]`. Pass `""` for no tooltip at all.
21
+ */
22
+ description?: string;
23
+ /**
24
+ * Replace the rendered element (Base UI render prop) — `render={<button
25
+ * type="button" onClick={cycle} />}` for a picker that cycles, which is what
26
+ * every product with more than two modes ships.
27
+ */
28
+ render?: useRender.RenderProp;
29
+ }
30
+ /**
31
+ * What the run is allowed to do, said in one chip and one attribute.
32
+ *
33
+ * Agent authority is the fact a person most needs from the corner of their eye
34
+ * and the one every catalogue leaves to prose. This is the readout: a glyph, a
35
+ * word, and `data-agent-mode` on the element. The attribute is the part that
36
+ * travels — `@cueplusplus/ui/elements.css` declares four custom properties
37
+ * under it, so putting the same attribute on a composer tints its focus ring,
38
+ * its send button and its rail from one place, and a console adds a
39
+ * mode-aware surface by reading a property rather than by threading a prop:
40
+ *
41
+ * ```css
42
+ * .composer:focus-within { border-color: var(--cue-elements-mode-icon); }
43
+ * .send-button { background: var(--cue-elements-mode-icon); color: var(--cue-elements-mode-background); }
44
+ * .turn-rail { background: var(--cue-elements-mode-border); }
45
+ * ```
46
+ *
47
+ * The ladder is four rungs and the mode set is open. Every product in the study
48
+ * paints six, seven or nine modes in exactly four accents — will it ask me, is
49
+ * it writing, is it only planning, are the guardrails off — so the rung is what
50
+ * `mode` carries and the product's own word is what `label` carries.
51
+ *
52
+ * The properties resolve against the *element that carries the attribute*, not
53
+ * against the page: a badge inside an `<AgentSurface skin="aui">` takes the
54
+ * island's palette, because the quadruple is declared on `[data-agent-mode]`
55
+ * rather than at `:root` where a `var()` would have been substituted before it
56
+ * ever reached the island.
57
+ *
58
+ * @example
59
+ * import { AgentModeBadge } from "@cueplusplus/ui/elements";
60
+ *
61
+ * <AgentModeBadge mode="plan" />
62
+ * @example
63
+ * // A product's own word on cue's rung, and a chip that cycles.
64
+ * <AgentModeBadge
65
+ * mode="unsafe"
66
+ * label="YOLO"
67
+ * render={<button type="button" onClick={cycle} />}
68
+ * />
69
+ */
70
+ declare const AgentModeBadge: React.ForwardRefExoticComponent<AgentModeBadgeProps & React.RefAttributes<HTMLSpanElement>>;
71
+ //#endregion
72
+ export { AgentModeBadge, AgentModeBadgeProps };
@@ -0,0 +1,110 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { AGENT_MODE_DESCRIPTIONS, AGENT_MODE_LABELS } from "./vocabulary.js";
4
+ import * as React from "react";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import { useRender } from "@base-ui/react/use-render";
7
+ import { HandIcon, MapIcon, PencilIcon, ShieldOffIcon } from "lucide-react";
8
+ //#region src/elements/agent-mode-badge.tsx
9
+ /**
10
+ * The glyph per rung, so the ladder survives a colour-blind reader and a
11
+ * monochrome screenshot.
12
+ *
13
+ * A hand for the mode that stops and asks, a pencil for the one that writes, a
14
+ * map for the one that only reads and plans, and a shield with a line through
15
+ * it for the one that does not stop. Colour alone cannot carry authority — this
16
+ * is the same argument that puts a label beside it.
17
+ */
18
+ const MODE_GLYPH = {
19
+ manual: HandIcon,
20
+ "auto-edit": PencilIcon,
21
+ plan: MapIcon,
22
+ unsafe: ShieldOffIcon
23
+ };
24
+ /**
25
+ * The four properties the quadruple publishes, with a token behind each.
26
+ *
27
+ * The fallbacks are not decoration: `elements.css` is a consumer import, and
28
+ * without it these four are undeclared. A badge that resolved to nothing would
29
+ * be an invisible chip, so the fallback is the family's neutral — the mode is
30
+ * then carried by the glyph and the label, which is where it has to be carried
31
+ * anyway.
32
+ */
33
+ const MODE_PAINT = {
34
+ backgroundColor: "var(--cue-elements-mode-background, var(--cue-surface-2))",
35
+ color: "var(--cue-elements-mode-text, var(--cue-fg-muted))",
36
+ borderColor: "var(--cue-elements-mode-border, var(--cue-border))"
37
+ };
38
+ /** The icon's own property, which is the one a rail and a spinner also read. */
39
+ const MODE_ICON = { color: "var(--cue-elements-mode-icon, var(--cue-fg-subtle))" };
40
+ /**
41
+ * What the run is allowed to do, said in one chip and one attribute.
42
+ *
43
+ * Agent authority is the fact a person most needs from the corner of their eye
44
+ * and the one every catalogue leaves to prose. This is the readout: a glyph, a
45
+ * word, and `data-agent-mode` on the element. The attribute is the part that
46
+ * travels — `@cueplusplus/ui/elements.css` declares four custom properties
47
+ * under it, so putting the same attribute on a composer tints its focus ring,
48
+ * its send button and its rail from one place, and a console adds a
49
+ * mode-aware surface by reading a property rather than by threading a prop:
50
+ *
51
+ * ```css
52
+ * .composer:focus-within { border-color: var(--cue-elements-mode-icon); }
53
+ * .send-button { background: var(--cue-elements-mode-icon); color: var(--cue-elements-mode-background); }
54
+ * .turn-rail { background: var(--cue-elements-mode-border); }
55
+ * ```
56
+ *
57
+ * The ladder is four rungs and the mode set is open. Every product in the study
58
+ * paints six, seven or nine modes in exactly four accents — will it ask me, is
59
+ * it writing, is it only planning, are the guardrails off — so the rung is what
60
+ * `mode` carries and the product's own word is what `label` carries.
61
+ *
62
+ * The properties resolve against the *element that carries the attribute*, not
63
+ * against the page: a badge inside an `<AgentSurface skin="aui">` takes the
64
+ * island's palette, because the quadruple is declared on `[data-agent-mode]`
65
+ * rather than at `:root` where a `var()` would have been substituted before it
66
+ * ever reached the island.
67
+ *
68
+ * @example
69
+ * import { AgentModeBadge } from "@cueplusplus/ui/elements";
70
+ *
71
+ * <AgentModeBadge mode="plan" />
72
+ * @example
73
+ * // A product's own word on cue's rung, and a chip that cycles.
74
+ * <AgentModeBadge
75
+ * mode="unsafe"
76
+ * label="YOLO"
77
+ * render={<button type="button" onClick={cycle} />}
78
+ * />
79
+ */
80
+ const AgentModeBadge = React.forwardRef(function AgentModeBadge({ mode, label, description, render, className, style, ...elementProps }, ref) {
81
+ const Glyph = MODE_GLYPH[mode];
82
+ const said = label ?? AGENT_MODE_LABELS[mode];
83
+ const explained = description ?? AGENT_MODE_DESCRIPTIONS[mode];
84
+ return useRender({
85
+ render,
86
+ ref,
87
+ defaultTagName: "span",
88
+ props: {
89
+ ...elementProps,
90
+ "data-slot": "agent-mode-badge",
91
+ "data-agent-mode": mode,
92
+ title: explained === "" ? void 0 : explained,
93
+ style: {
94
+ ...MODE_PAINT,
95
+ ...style
96
+ },
97
+ className: cn("inline-flex shrink-0 items-center gap-1.5 rounded-full border px-2 py-0.5 text-(length:--cue-text-ui) font-medium", className),
98
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Glyph, {
99
+ "aria-hidden": true,
100
+ className: "size-3.5 shrink-0",
101
+ style: MODE_ICON
102
+ }), /* @__PURE__ */ jsx("span", {
103
+ className: "min-w-0 truncate",
104
+ children: said
105
+ })] })
106
+ }
107
+ });
108
+ });
109
+ //#endregion
110
+ export { AgentModeBadge };
@@ -0,0 +1,24 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/agent-plan.d.ts
3
+ /**
4
+ * A checklist the agent works through, with progress you can glance.
5
+ *
6
+ * @example
7
+ * import { AgentPlan } from "@cueplusplus/ui/elements";
8
+ *
9
+ * <AgentPlan
10
+ * steps={["Read the file", "Draft the fix", "Run tests"]}
11
+ * activeIndex={1}
12
+ * />
13
+ */
14
+ declare function AgentPlan({ steps, activeIndex, className, ...props }: Omit<ComponentProps<"div">, "children" | "steps" | "activeIndex"> & {
15
+ /** Checklist items the agent works through in order. */
16
+ steps: readonly string[];
17
+ /**
18
+ * Index of the step currently running. Values past the end mark every step done, and
19
+ * values before the start mark none.
20
+ */
21
+ activeIndex: number;
22
+ }): import("react").JSX.Element;
23
+ //#endregion
24
+ export { AgentPlan };