@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,80 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { field, ghostButton, mono, paper } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { ArrowUpIcon, XIcon } from "lucide-react";
6
+ //#region src/elements/message-queue.tsx
7
+ /**
8
+ * Turns you typed while a run was in flight, stacked and cancelable until it finishes.
9
+ *
10
+ * @example
11
+ * import { MessageQueue } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <MessageQueue
14
+ * running="Fix the converter and add a guard"
15
+ * queued={[{ id: "a", text: "Also add a changeset" }]}
16
+ * onCancel={(id) => drop(id)}
17
+ * />
18
+ */
19
+ function MessageQueue({ running, queued, onCancel, className, ...props }) {
20
+ return /* @__PURE__ */ jsxs("div", {
21
+ "data-slot": "message-queue",
22
+ className: cn("flex w-full max-w-sm flex-col gap-2", className),
23
+ ...props,
24
+ children: [
25
+ /* @__PURE__ */ jsxs("div", {
26
+ className: cn(paper, "flex items-center gap-2.5 rounded-(--radius-overlay) p-3"),
27
+ children: [
28
+ /* @__PURE__ */ jsxs("span", {
29
+ className: "relative flex size-2 shrink-0",
30
+ children: [/* @__PURE__ */ jsx("span", { className: "absolute inline-flex size-full animate-ping rounded-full bg-stream/60 motion-reduce:hidden" }), /* @__PURE__ */ jsx("span", { className: "relative inline-flex size-2 rounded-full bg-stream" })]
31
+ }),
32
+ /* @__PURE__ */ jsx("span", {
33
+ className: "text-fg min-w-0 flex-1 truncate text-(length:--cue-text-body)",
34
+ children: running
35
+ }),
36
+ /* @__PURE__ */ jsx("span", {
37
+ className: cn(mono, "text-fg-subtle shrink-0"),
38
+ children: "running"
39
+ })
40
+ ]
41
+ }),
42
+ queued.length > 0 && /* @__PURE__ */ jsxs("div", {
43
+ className: "flex items-baseline justify-between px-1",
44
+ children: [/* @__PURE__ */ jsxs("span", {
45
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle"),
46
+ children: [queued.length, " queued"]
47
+ }), /* @__PURE__ */ jsx("span", {
48
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle"),
49
+ children: "sends when this finishes"
50
+ })]
51
+ }),
52
+ /* @__PURE__ */ jsx("ul", {
53
+ className: "flex flex-col gap-1.5",
54
+ children: queued.map((message, index) => /* @__PURE__ */ jsxs("li", {
55
+ className: cn(field, "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in cue-elements-fill-mode-both flex items-center gap-2.5 rounded-(--radius-overlay) py-2 pr-2 pl-3 duration-300"),
56
+ children: [
57
+ /* @__PURE__ */ jsx("span", {
58
+ className: cn(mono, "text-fg-subtle w-3 shrink-0 tabular-nums"),
59
+ children: index + 1
60
+ }),
61
+ /* @__PURE__ */ jsx("span", {
62
+ className: "text-fg-muted min-w-0 flex-1 truncate text-(length:--cue-text-body)",
63
+ children: message.text
64
+ }),
65
+ /* @__PURE__ */ jsx(ArrowUpIcon, { className: "text-fg-subtle size-3 shrink-0" }),
66
+ /* @__PURE__ */ jsx("button", {
67
+ type: "button",
68
+ "aria-label": `Remove "${message.text}" from the queue`,
69
+ onClick: () => onCancel?.(message.id),
70
+ className: cn(ghostButton, "size-6 shrink-0"),
71
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-3.5" })
72
+ })
73
+ ]
74
+ }, message.id))
75
+ })
76
+ ]
77
+ });
78
+ }
79
+ //#endregion
80
+ export { MessageQueue };
@@ -0,0 +1,33 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/message-timing.d.ts
3
+ /** One measurement of a finished turn — a label and an already-formatted value. */
4
+ interface TimingStat {
5
+ /** What was measured: `ttft`, `tok/s`, `cost`. Also the row's key. */
6
+ label: string;
7
+ /** The measurement, formatted by the caller. This element does no arithmetic. */
8
+ value: string;
9
+ }
10
+ /**
11
+ * What the turn cost: time to first token, throughput, tokens, money.
12
+ *
13
+ * @example
14
+ * import { MessageTiming } from "@cueplusplus/ui/elements";
15
+ *
16
+ * <MessageTiming
17
+ * stats={[
18
+ * { label: "ttft", value: "0.4s" },
19
+ * { label: "total", value: "2.6s" },
20
+ * ]}
21
+ * />
22
+ */
23
+ declare function MessageTiming({ stats, streaming, className, ...props }: Omit<ComponentProps<"div">, "children" | "stats" | "streaming"> & {
24
+ /**
25
+ * Label and value pairs, pre-formatted. Show fewer while streaming and the full set
26
+ * once the turn settles.
27
+ */
28
+ stats: readonly TimingStat[];
29
+ /** Tints the values blue while they are still moving. */
30
+ streaming?: boolean;
31
+ }): import("react").JSX.Element;
32
+ //#endregion
33
+ export { MessageTiming, TimingStat };
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { mono } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/elements/message-timing.tsx
6
+ /**
7
+ * What the turn cost: time to first token, throughput, tokens, money.
8
+ *
9
+ * @example
10
+ * import { MessageTiming } from "@cueplusplus/ui/elements";
11
+ *
12
+ * <MessageTiming
13
+ * stats={[
14
+ * { label: "ttft", value: "0.4s" },
15
+ * { label: "total", value: "2.6s" },
16
+ * ]}
17
+ * />
18
+ */
19
+ function MessageTiming({ stats, streaming, className, ...props }) {
20
+ return /* @__PURE__ */ jsx("div", {
21
+ "data-slot": "message-timing",
22
+ className: cn("cue-elements-fade-in cue-elements-animate-in flex w-full max-w-sm flex-wrap items-center gap-x-3 gap-y-1 duration-500", className),
23
+ ...props,
24
+ children: stats.map((stat) => /* @__PURE__ */ jsxs("span", {
25
+ className: "flex items-baseline gap-1",
26
+ children: [/* @__PURE__ */ jsx("span", {
27
+ className: cn(mono, "text-fg-subtle"),
28
+ children: stat.label
29
+ }), /* @__PURE__ */ jsx("span", {
30
+ className: cn(mono, "tabular-nums", streaming ? "text-stream" : "text-fg-muted"),
31
+ children: stat.value
32
+ })]
33
+ }, stat.label))
34
+ });
35
+ }
36
+ //#endregion
37
+ export { MessageTiming };
@@ -0,0 +1,44 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/mobile-composer.d.ts
3
+ /**
4
+ * The bottom sheet: keyboard-aware, quick actions above, thumb-sized targets.
5
+ *
6
+ * @example
7
+ * import { MobileComposer } from "@cueplusplus/ui/elements";
8
+ *
9
+ * <MobileComposer
10
+ * value={value}
11
+ * keyboardOpen={keyboardOpen}
12
+ * running={false}
13
+ * actions={actions}
14
+ * onValueChange={setValue}
15
+ * onSend={send}
16
+ * />
17
+ */
18
+ declare function MobileComposer({ value, keyboardOpen, running, actions, onAction, onAttach, onValueChange, onSend, onStop, onFocus, className, ...props }: Omit<ComponentProps<"div">, "children" | "value" | "keyboardOpen" | "running" | "actions" | "onAction" | "onAttach" | "onValueChange" | "onSend" | "onStop" | "onFocus"> & {
19
+ /** Current input. The field is 16px so iOS does not zoom on focus. */
20
+ value: string;
21
+ /** Collapses the quick actions and the home indicator inset when the keyboard is up. */
22
+ keyboardOpen: boolean;
23
+ /** Swaps send for stop, and suppresses Return-to-send while a run is in flight. */
24
+ running: boolean;
25
+ /** Quick actions above the field, scrolled horizontally. */
26
+ actions: readonly string[];
27
+ /**
28
+ * Called when a quick action is tapped. Omit it and the chips render disabled, since
29
+ * actions is required and the row would otherwise be inert.
30
+ */
31
+ onAction?: (action: string) => void;
32
+ /** Called from the attachment control. Omit it and the control renders disabled. */
33
+ onAttach?: () => void;
34
+ /** Called as the message is typed. */
35
+ onValueChange?: (value: string) => void;
36
+ /** Called to send. */
37
+ onSend?: () => void;
38
+ /** Called to stop a run in flight. */
39
+ onStop?: () => void;
40
+ /** Called when the field takes focus; drive keyboardOpen from it. */
41
+ onFocus?: () => void;
42
+ }): import("react").JSX.Element;
43
+ //#endregion
44
+ export { MobileComposer };
@@ -0,0 +1,88 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { field, ghostButton, inkButton } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { ArrowUpIcon, MicIcon, PlusIcon, SquareIcon } from "lucide-react";
6
+ //#region src/elements/mobile-composer.tsx
7
+ /**
8
+ * The bottom sheet: keyboard-aware, quick actions above, thumb-sized targets.
9
+ *
10
+ * @example
11
+ * import { MobileComposer } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <MobileComposer
14
+ * value={value}
15
+ * keyboardOpen={keyboardOpen}
16
+ * running={false}
17
+ * actions={actions}
18
+ * onValueChange={setValue}
19
+ * onSend={send}
20
+ * />
21
+ */
22
+ function MobileComposer({ value, keyboardOpen, running, actions, onAction, onAttach, onValueChange, onSend, onStop, onFocus, className, ...props }) {
23
+ return /* @__PURE__ */ jsxs("div", {
24
+ "data-slot": "mobile-composer",
25
+ className: cn("bg-bg border-border flex w-full max-w-[19rem] flex-col gap-2.5 rounded-t-(--radius-overlay) border-t px-3 pt-3", keyboardOpen ? "pb-3" : "pb-6", className),
26
+ ...props,
27
+ children: [
28
+ !keyboardOpen && /* @__PURE__ */ jsx("div", {
29
+ className: "cue-elements-fade-in cue-elements-animate-in -mx-3 flex gap-1.5 overflow-x-auto px-3 pb-0.5 duration-200",
30
+ children: actions.map((action) => /* @__PURE__ */ jsx("button", {
31
+ type: "button",
32
+ onClick: () => onAction?.(action),
33
+ disabled: !onAction,
34
+ className: cn("disabled:pointer-events-none", "bg-fg/[0.06]", "text-fg-muted shrink-0 rounded-full px-3 py-1.5 text-(length:--cue-text-ui) whitespace-nowrap"),
35
+ children: action
36
+ }, action))
37
+ }),
38
+ /* @__PURE__ */ jsxs("div", {
39
+ className: "flex items-end gap-2",
40
+ children: [
41
+ /* @__PURE__ */ jsx("button", {
42
+ type: "button",
43
+ "aria-label": "Add an attachment",
44
+ onClick: onAttach,
45
+ disabled: !onAttach,
46
+ className: cn(ghostButton, field, "size-9 shrink-0 disabled:pointer-events-none disabled:opacity-30"),
47
+ children: /* @__PURE__ */ jsx(PlusIcon, { className: "size-4" })
48
+ }),
49
+ /* @__PURE__ */ jsxs("div", {
50
+ className: cn(field, "flex min-w-0 flex-1 items-center gap-2 rounded-(--radius-overlay) px-3 py-2"),
51
+ children: [/* @__PURE__ */ jsx("input", {
52
+ value,
53
+ onChange: (event) => onValueChange?.(event.target.value),
54
+ onFocus,
55
+ onKeyDown: (event) => {
56
+ if (event.key !== "Enter" || event.shiftKey) return;
57
+ if (event.nativeEvent.isComposing) return;
58
+ event.preventDefault();
59
+ if (!running && value !== "") onSend?.();
60
+ },
61
+ placeholder: "Message",
62
+ "aria-label": "Message",
63
+ className: "text-fg-muted placeholder:text-fg-subtle min-w-0 flex-1 bg-transparent text-(length:--cue-text-emphasis) outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent"
64
+ }), value === "" && /* @__PURE__ */ jsx(MicIcon, { className: "text-fg-subtle size-4 shrink-0" })]
65
+ }),
66
+ /* @__PURE__ */ jsx("button", {
67
+ type: "button",
68
+ "aria-label": running ? "Stop" : "Send",
69
+ onClick: running ? onStop : onSend,
70
+ disabled: !running && value === "",
71
+ className: cn(inkButton, "flex size-9 shrink-0 items-center justify-center rounded-full disabled:pointer-events-none disabled:opacity-25"),
72
+ children: running ? /* @__PURE__ */ jsx(SquareIcon, { className: "size-3 fill-current" }) : /* @__PURE__ */ jsx(ArrowUpIcon, { className: "size-4" })
73
+ })
74
+ ]
75
+ }),
76
+ !keyboardOpen && /* @__PURE__ */ jsx("span", {
77
+ "aria-hidden": true,
78
+ className: "bg-surface-3 mx-auto h-1 w-28 rounded-full"
79
+ }),
80
+ keyboardOpen && /* @__PURE__ */ jsx("span", {
81
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle text-center"),
82
+ children: "return to send"
83
+ })
84
+ ]
85
+ });
86
+ }
87
+ //#endregion
88
+ export { MobileComposer };
@@ -0,0 +1,38 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/model-picker.d.ts
3
+ interface PickableModel {
4
+ /** Stable identity, compared against selectedId and reported by onSelect. */
5
+ id: string;
6
+ /** Display name of the model. */
7
+ name: string;
8
+ /** Group heading the model sits under. */
9
+ family: string;
10
+ /** Window size, pre-formatted. */
11
+ context: string;
12
+ /** Cost, pre-formatted. The element never does currency math. */
13
+ price: string;
14
+ /** Short capability chips: vision, tools, thinking. */
15
+ capabilities: readonly string[];
16
+ }
17
+ /**
18
+ * The full list rather than the rail: grouped by family, priced, with what each one
19
+ * can do.
20
+ *
21
+ * @example
22
+ * import { ModelPicker } from "@cueplusplus/ui/elements";
23
+ *
24
+ * <ModelPicker models={models} selectedId={selectedId} onSelect={setSelectedId} />
25
+ */
26
+ declare function ModelPicker({ models, selectedId, onSelect, className, ...props }: Omit<ComponentProps<"div">, "children" | "models" | "selectedId" | "onSelect"> & {
27
+ /**
28
+ * Every model on offer. Families are derived from the entries and keep their
29
+ * first-seen order.
30
+ */
31
+ models: readonly PickableModel[];
32
+ /** Which model is active. */
33
+ selectedId: string;
34
+ /** Called when a model is picked. */
35
+ onSelect?: (id: string) => void;
36
+ }): import("react").JSX.Element;
37
+ //#endregion
38
+ export { ModelPicker, PickableModel };
@@ -0,0 +1,69 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { field, mono, paper } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { CheckIcon } from "lucide-react";
6
+ //#region src/elements/model-picker.tsx
7
+ /**
8
+ * The full list rather than the rail: grouped by family, priced, with what each one
9
+ * can do.
10
+ *
11
+ * @example
12
+ * import { ModelPicker } from "@cueplusplus/ui/elements";
13
+ *
14
+ * <ModelPicker models={models} selectedId={selectedId} onSelect={setSelectedId} />
15
+ */
16
+ function ModelPicker({ models, selectedId, onSelect, className, ...props }) {
17
+ const families = [...new Set(models.map((model) => model.family))];
18
+ return /* @__PURE__ */ jsx("div", {
19
+ "data-slot": "model-picker",
20
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-1 rounded-(--radius-overlay) p-2", className),
21
+ ...props,
22
+ children: families.map((family) => /* @__PURE__ */ jsxs("div", {
23
+ className: "flex flex-col",
24
+ children: [/* @__PURE__ */ jsx("span", {
25
+ className: cn(mono, "text-fg-subtle px-2 pt-2 pb-1"),
26
+ children: family
27
+ }), models.filter((model) => model.family === family).map((model) => {
28
+ const selected = model.id === selectedId;
29
+ return /* @__PURE__ */ jsxs("button", {
30
+ type: "button",
31
+ "aria-pressed": selected,
32
+ onClick: () => onSelect?.(model.id),
33
+ className: cn("flex items-center gap-2.5 rounded-(--radius-surface) px-2 py-2 text-start transition-colors", selected ? "bg-surface-2" : "hover:bg-surface-1"),
34
+ children: [
35
+ /* @__PURE__ */ jsx("span", {
36
+ className: "flex size-3.5 shrink-0 items-center justify-center",
37
+ children: selected && /* @__PURE__ */ jsx(CheckIcon, { className: "cue-elements-fade-in cue-elements-zoom-in-90 cue-elements-animate-in text-fg-muted size-3.5 duration-200" })
38
+ }),
39
+ /* @__PURE__ */ jsxs("span", {
40
+ className: "flex min-w-0 flex-1 flex-col gap-1",
41
+ children: [/* @__PURE__ */ jsx("span", {
42
+ className: "truncate text-(length:--cue-text-body)",
43
+ children: model.name
44
+ }), /* @__PURE__ */ jsx("span", {
45
+ className: "flex flex-wrap gap-1",
46
+ children: model.capabilities.map((capability) => /* @__PURE__ */ jsx("span", {
47
+ className: cn(field, mono, "text-fg-muted rounded-(--radius-control) px-1 py-px"),
48
+ children: capability
49
+ }, capability))
50
+ })]
51
+ }),
52
+ /* @__PURE__ */ jsxs("span", {
53
+ className: "flex shrink-0 flex-col items-end gap-1",
54
+ children: [/* @__PURE__ */ jsx("span", {
55
+ className: cn(mono, "text-fg-subtle tabular-nums"),
56
+ children: model.context
57
+ }), /* @__PURE__ */ jsx("span", {
58
+ className: cn(mono, "text-fg-subtle tabular-nums"),
59
+ children: model.price
60
+ })]
61
+ })
62
+ ]
63
+ }, model.id);
64
+ })]
65
+ }, family))
66
+ });
67
+ }
68
+ //#endregion
69
+ export { ModelPicker };
@@ -0,0 +1,18 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/number-ticker.d.ts
3
+ /**
4
+ * Digits that roll into place as a count updates in real time.
5
+ *
6
+ * @example
7
+ * import { NumberTicker } from "@cueplusplus/ui/elements";
8
+ *
9
+ * <NumberTicker value={1284} label="tokens / sec" />
10
+ */
11
+ declare function NumberTicker({ value, label, className, ...props }: Omit<ComponentProps<"div">, "children" | "value" | "label"> & {
12
+ /** Numeric value whose digits roll into place as it changes. */
13
+ value: number;
14
+ /** Mono caption rendered under the rolling number. */
15
+ label: string;
16
+ }): import("react").JSX.Element;
17
+ //#endregion
18
+ export { NumberTicker };
@@ -0,0 +1,47 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { mono } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/elements/number-ticker.tsx
6
+ function RollingDigit({ digit }) {
7
+ return /* @__PURE__ */ jsx("span", {
8
+ className: "inline-flex h-[1.15em] overflow-hidden",
9
+ children: /* @__PURE__ */ jsx("span", {
10
+ className: "flex flex-col transition-transform duration-500 ease-[cubic-bezier(0.32,0.72,0,1)] motion-reduce:transition-none",
11
+ style: { transform: `translateY(-${digit * 1.15}em)` },
12
+ children: Array.from({ length: 10 }, (_, i) => /* @__PURE__ */ jsx("span", {
13
+ className: "h-[1.15em] leading-[1.15]",
14
+ children: i
15
+ }, i))
16
+ })
17
+ });
18
+ }
19
+ /**
20
+ * Digits that roll into place as a count updates in real time.
21
+ *
22
+ * @example
23
+ * import { NumberTicker } from "@cueplusplus/ui/elements";
24
+ *
25
+ * <NumberTicker value={1284} label="tokens / sec" />
26
+ */
27
+ function NumberTicker({ value, label, className, ...props }) {
28
+ const formatted = value.toLocaleString("en-US");
29
+ return /* @__PURE__ */ jsxs("div", {
30
+ "data-slot": "number-ticker",
31
+ className: cn("flex flex-col items-center gap-2.5", className),
32
+ ...props,
33
+ children: [/* @__PURE__ */ jsx("span", {
34
+ className: "flex text-(length:--cue-text-title) font-medium tracking-tight tabular-nums",
35
+ "aria-label": formatted,
36
+ children: formatted.split("").map((char, i) => /\d/.test(char) ? /* @__PURE__ */ jsx(RollingDigit, { digit: Number(char) }, i) : /* @__PURE__ */ jsx("span", {
37
+ className: "h-[1.15em] leading-[1.15]",
38
+ children: char
39
+ }, i))
40
+ }), /* @__PURE__ */ jsx("span", {
41
+ className: cn(mono, "text-fg-subtle"),
42
+ children: label
43
+ })]
44
+ });
45
+ }
46
+ //#endregion
47
+ export { NumberTicker };
@@ -0,0 +1,30 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/onboarding.d.ts
3
+ interface OnboardingStep {
4
+ /** Step heading. */
5
+ title: string;
6
+ /** What this step teaches, in a sentence or two. */
7
+ body: string;
8
+ /** A prompt the user could actually send. Showing beats describing. */
9
+ example: string;
10
+ }
11
+ /**
12
+ * First run: three moves that teach what this assistant is actually for.
13
+ *
14
+ * @example
15
+ * import { Onboarding } from "@cueplusplus/ui/elements";
16
+ *
17
+ * <Onboarding steps={steps} index={index} onNext={next} onSkip={skip} />
18
+ */
19
+ declare function Onboarding({ steps, index, onNext, onSkip, className, ...props }: Omit<ComponentProps<"div">, "children" | "steps" | "index" | "onNext" | "onSkip"> & {
20
+ /** What to teach, in order. Three is usually the limit before it is skipped. */
21
+ steps: readonly OnboardingStep[];
22
+ /** Which step is showing. The final step's action reads Start instead of Next. */
23
+ index: number;
24
+ /** Called to advance. */
25
+ onNext?: () => void;
26
+ /** Called to dismiss. Always offer it. */
27
+ onSkip?: () => void;
28
+ }): import("react").JSX.Element | null;
29
+ //#endregion
30
+ export { Onboarding, OnboardingStep };
@@ -0,0 +1,75 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { field, inkButton, mono, paper } from "./surfaces.js";
4
+ import { indexIn } from "./range.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/elements/onboarding.tsx
7
+ /**
8
+ * First run: three moves that teach what this assistant is actually for.
9
+ *
10
+ * @example
11
+ * import { Onboarding } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <Onboarding steps={steps} index={index} onNext={next} onSkip={skip} />
14
+ */
15
+ function Onboarding({ steps, index, onNext, onSkip, className, ...props }) {
16
+ const current = indexIn(steps, index);
17
+ const step = steps[current];
18
+ if (!step) return null;
19
+ const last = current >= steps.length - 1;
20
+ return /* @__PURE__ */ jsxs("div", {
21
+ "data-slot": "onboarding",
22
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-4 rounded-(--radius-overlay) p-5", className),
23
+ ...props,
24
+ children: [/* @__PURE__ */ jsxs("div", {
25
+ className: "cue-elements-fade-in cue-elements-animate-in flex flex-col gap-2 duration-300",
26
+ children: [
27
+ /* @__PURE__ */ jsxs("span", {
28
+ className: cn(mono, "text-fg-subtle tabular-nums"),
29
+ children: [
30
+ current + 1,
31
+ " of ",
32
+ steps.length
33
+ ]
34
+ }),
35
+ /* @__PURE__ */ jsx("span", {
36
+ className: "text-(length:--cue-text-emphasis) font-medium tracking-tight",
37
+ children: step.title
38
+ }),
39
+ /* @__PURE__ */ jsx("p", {
40
+ className: "text-fg-muted text-(length:--cue-text-body) leading-relaxed break-words",
41
+ children: step.body
42
+ }),
43
+ /* @__PURE__ */ jsx("span", {
44
+ className: cn(field, "text-fg-muted rounded-(--radius-surface) px-3 py-2 text-(length:--cue-text-body) leading-relaxed"),
45
+ children: step.example
46
+ })
47
+ ]
48
+ }, current), /* @__PURE__ */ jsxs("div", {
49
+ className: "flex items-center gap-2",
50
+ children: [
51
+ /* @__PURE__ */ jsx("span", {
52
+ className: "flex gap-1.5",
53
+ children: steps.map((_, i) => /* @__PURE__ */ jsx("span", {
54
+ "aria-hidden": true,
55
+ className: cn("h-1 rounded-full transition-all duration-300 motion-reduce:transition-none", i === current ? "bg-accent w-4" : "bg-surface-3 w-1")
56
+ }, i))
57
+ }),
58
+ /* @__PURE__ */ jsx("button", {
59
+ type: "button",
60
+ onClick: onSkip,
61
+ className: "text-fg-muted hover:bg-surface-2 hover:text-fg ms-auto h-8 rounded-full px-3 text-(length:--cue-text-ui) font-medium transition-[background-color,color,scale] duration-150 active:scale-[0.96]",
62
+ children: "Skip"
63
+ }),
64
+ /* @__PURE__ */ jsx("button", {
65
+ type: "button",
66
+ onClick: onNext,
67
+ className: cn(inkButton, "flex h-8 items-center rounded-full px-3.5 text-(length:--cue-text-ui) font-medium"),
68
+ children: last ? "Start" : "Next"
69
+ })
70
+ ]
71
+ })]
72
+ });
73
+ }
74
+ //#endregion
75
+ export { Onboarding };
@@ -0,0 +1,35 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/permission-grant.d.ts
3
+ /**
4
+ * How far a granted permission reaches — this session, every session, or nowhere. The
5
+ * prop that carries it also accepts `pending`, before the user has answered.
6
+ */
7
+ type GrantScope = "session" | "always" | "denied";
8
+ /**
9
+ * Granting a capability rather than approving one action, with the reach spelled out.
10
+ *
11
+ * @example
12
+ * import { PermissionGrant } from "@cueplusplus/ui/elements";
13
+ *
14
+ * <PermissionGrant
15
+ * capability="Filesystem access"
16
+ * requester="filesystem-mcp"
17
+ * reach={reach}
18
+ * scope="pending"
19
+ * onGrant={setScope}
20
+ * />
21
+ */
22
+ declare function PermissionGrant({ capability, requester, reach, scope, onGrant, className, ...props }: Omit<ComponentProps<"div">, "children" | "capability" | "requester" | "reach" | "scope" | "onGrant"> & {
23
+ /** What is being granted, named as a capability rather than an action. */
24
+ capability: string;
25
+ /** Who is asking. */
26
+ requester: string;
27
+ /** Exactly what the grant covers, and what it does not. Write the limits in too. */
28
+ reach: readonly string[];
29
+ /** pending shows the choices; anything else shows the settled outcome. */
30
+ scope: GrantScope | "pending";
31
+ /** Called with the scope the user chose. */
32
+ onGrant?: (scope: GrantScope) => void;
33
+ }): import("react").JSX.Element;
34
+ //#endregion
35
+ export { GrantScope, PermissionGrant };