@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,58 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { ShimmerLabel, mono, paper } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { ArrowUpRightIcon, FileTextIcon } from "lucide-react";
6
+ //#region src/elements/artifact-card.tsx
7
+ /**
8
+ * A generated document as a tangible object, written live and versioned.
9
+ *
10
+ * @example
11
+ * import { ArtifactCard } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <ArtifactCard
14
+ * title="Draft persistence RFC"
15
+ * meta="Document · v3 · just now"
16
+ * generating={isWriting}
17
+ * words={wordCount}
18
+ * />
19
+ */
20
+ function ArtifactCard({ title, meta, generating = false, words = 0, className, ...props }) {
21
+ return /* @__PURE__ */ jsxs("div", {
22
+ "data-slot": "artifact-card",
23
+ className: cn(paper, "group flex w-full max-w-xs cursor-pointer items-center gap-3 rounded-(--radius-overlay) p-3.5 transition-transform duration-150 hover:-translate-y-px active:scale-[0.98]", className),
24
+ ...props,
25
+ children: [
26
+ /* @__PURE__ */ jsx("span", {
27
+ className: "bg-surface-1 text-fg-muted flex size-9 shrink-0 items-center justify-center rounded-(--radius-surface)",
28
+ children: /* @__PURE__ */ jsx(FileTextIcon, { className: cn("size-4", generating && "animate-pulse motion-reduce:animate-none") })
29
+ }),
30
+ /* @__PURE__ */ jsxs("div", {
31
+ className: "min-w-0 flex-1",
32
+ children: [/* @__PURE__ */ jsx("p", {
33
+ className: "truncate text-(length:--cue-text-body) font-medium",
34
+ children: title
35
+ }), generating ? /* @__PURE__ */ jsxs("p", {
36
+ className: cn(mono, "text-fg-subtle flex items-center gap-1"),
37
+ children: [
38
+ /* @__PURE__ */ jsx(ShimmerLabel, {
39
+ className: "relative inline-block leading-none",
40
+ children: "Writing"
41
+ }),
42
+ /* @__PURE__ */ jsx("span", { children: "·" }),
43
+ /* @__PURE__ */ jsxs("span", {
44
+ className: "tabular-nums",
45
+ children: [words, " words"]
46
+ })
47
+ ]
48
+ }) : /* @__PURE__ */ jsx("p", {
49
+ className: cn(mono, "cue-elements-fade-in cue-elements-blur-in-2 cue-elements-animate-in text-fg-subtle duration-300 motion-reduce:animate-none"),
50
+ children: meta
51
+ })]
52
+ }),
53
+ /* @__PURE__ */ jsx(ArrowUpRightIcon, { className: "text-fg-subtle size-3.5 opacity-0 transition-opacity group-hover:opacity-100" })
54
+ ]
55
+ });
56
+ }
57
+ //#endregion
58
+ export { ArtifactCard };
@@ -0,0 +1,39 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/background-inbox.d.ts
3
+ /**
4
+ * Where a run that left the conversation got to: still `running`, `ready` to be
5
+ * collected, or `failed`. Only a ready run is clickable.
6
+ */
7
+ type BackgroundState = "running" | "ready" | "failed";
8
+ /** One piece of work going on somewhere else, and what is waiting to come back from it. */
9
+ interface BackgroundRun {
10
+ /** Stable identity, reported back by onCollect. */
11
+ id: string;
12
+ /** What the detached run is doing. */
13
+ title: string;
14
+ /** Only ready and failed rows can be collected. */
15
+ state: BackgroundState;
16
+ /** Pre-formatted run time. */
17
+ elapsed: string;
18
+ /** One-line result, shown once there is one. */
19
+ summary?: string;
20
+ }
21
+ /**
22
+ * Work still going somewhere else, and the results waiting to be collected.
23
+ *
24
+ * @example
25
+ * import { BackgroundInbox } from "@cueplusplus/ui/elements";
26
+ *
27
+ * <BackgroundInbox runs={runs} onCollect={collect} />
28
+ */
29
+ declare function BackgroundInbox({ runs, onCollect, className, ...props }: Omit<ComponentProps<"div">, "children" | "runs" | "onCollect"> & {
30
+ /**
31
+ * Detached runs. The header counts what is ready rather than what is in flight,
32
+ * because ready is the thing that needs you.
33
+ */
34
+ runs: readonly BackgroundRun[];
35
+ /** Called to pull a finished run back into the thread. Running rows are not clickable. */
36
+ onCollect?: (id: string) => void;
37
+ }): import("react").JSX.Element;
38
+ //#endregion
39
+ export { BackgroundInbox, BackgroundRun, BackgroundState };
@@ -0,0 +1,60 @@
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 { CheckIcon, Loader2Icon, XIcon } from "lucide-react";
6
+ //#region src/elements/background-inbox.tsx
7
+ /**
8
+ * Work still going somewhere else, and the results waiting to be collected.
9
+ *
10
+ * @example
11
+ * import { BackgroundInbox } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <BackgroundInbox runs={runs} onCollect={collect} />
14
+ */
15
+ function BackgroundInbox({ runs, onCollect, className, ...props }) {
16
+ const ready = runs.filter((run) => run.state === "ready").length;
17
+ const running = runs.filter((run) => run.state === "running").length;
18
+ return /* @__PURE__ */ jsxs("div", {
19
+ "data-slot": "background-inbox",
20
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-1 rounded-(--radius-overlay) p-3", className),
21
+ ...props,
22
+ children: [/* @__PURE__ */ jsxs("div", {
23
+ className: "flex items-baseline justify-between px-1 pb-1",
24
+ children: [/* @__PURE__ */ jsx("span", {
25
+ className: "text-(length:--cue-text-body) font-medium",
26
+ children: "Running elsewhere"
27
+ }), /* @__PURE__ */ jsx("span", {
28
+ className: cn(mono, "tabular-nums", ready > 0 ? "text-stream" : "text-fg-subtle"),
29
+ children: ready > 0 ? `${ready} ready` : `${running} in flight`
30
+ })]
31
+ }), runs.map((run) => /* @__PURE__ */ jsxs("button", {
32
+ type: "button",
33
+ disabled: run.state === "running",
34
+ onClick: () => onCollect?.(run.id),
35
+ className: cn("flex items-center gap-2.5 rounded-(--radius-surface) px-1.5 py-2 text-start transition-colors", run.state === "running" ? "cursor-default" : "hover:bg-surface-1"),
36
+ children: [
37
+ /* @__PURE__ */ jsx("span", {
38
+ className: "flex size-3.5 shrink-0 items-center justify-center",
39
+ children: run.state === "running" ? /* @__PURE__ */ jsx(Loader2Icon, { className: "text-fg-subtle size-3 animate-spin motion-reduce:animate-none" }) : run.state === "failed" ? /* @__PURE__ */ jsx(XIcon, { className: "size-3 text-danger" }) : /* @__PURE__ */ jsx(CheckIcon, { className: "size-3 text-ok" })
40
+ }),
41
+ /* @__PURE__ */ jsxs("span", {
42
+ className: "flex min-w-0 flex-1 flex-col gap-0.5",
43
+ children: [/* @__PURE__ */ jsx("span", {
44
+ className: cn("truncate text-(length:--cue-text-body)", run.state === "running" ? "text-fg-muted" : "text-fg"),
45
+ children: run.title
46
+ }), run.summary && /* @__PURE__ */ jsx("span", {
47
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle truncate"),
48
+ children: run.summary
49
+ })]
50
+ }),
51
+ /* @__PURE__ */ jsx("span", {
52
+ className: cn(mono, "text-fg-subtle shrink-0 tabular-nums"),
53
+ children: run.elapsed
54
+ })
55
+ ]
56
+ }, run.id))]
57
+ });
58
+ }
59
+ //#endregion
60
+ export { BackgroundInbox };
@@ -0,0 +1,77 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/canvas-split.d.ts
3
+ /**
4
+ * The thread steps aside and the document takes the room, still being written as you
5
+ * read.
6
+ *
7
+ * @example
8
+ * import {
9
+ * CanvasSplit,
10
+ * CanvasSplitBody,
11
+ * CanvasSplitDocument,
12
+ * CanvasSplitHeader,
13
+ * CanvasSplitLine,
14
+ * CanvasSplitMessage,
15
+ * CanvasSplitThread,
16
+ * } from "@cueplusplus/ui/elements";
17
+ *
18
+ * <CanvasSplit>
19
+ * <CanvasSplitThread>
20
+ * <CanvasSplitMessage speaker="user">Draft the note</CanvasSplitMessage>
21
+ * </CanvasSplitThread>
22
+ * <CanvasSplitDocument>
23
+ * <CanvasSplitHeader title="note.md" version={3} saved onCopy={copy} />
24
+ * <CanvasSplitBody writing>
25
+ * <CanvasSplitLine heading>Migrating to 0.14</CanvasSplitLine>
26
+ * </CanvasSplitBody>
27
+ * </CanvasSplitDocument>
28
+ * </CanvasSplit>
29
+ */
30
+ declare function CanvasSplit({ className, ...props }: ComponentProps<"div">): import("react").JSX.Element;
31
+ /**
32
+ * The conversation, narrowed to a rail beside the document. It keeps scrolling while
33
+ * the document is written, so the turn that asked for the artifact stays in view.
34
+ */
35
+ declare function CanvasSplitThread({ className, ...props }: ComponentProps<"div">): import("react").JSX.Element;
36
+ /** One turn inside the rail — a filled bubble for the person, plain text for the model. */
37
+ declare function CanvasSplitMessage({ speaker, className, ...props }: ComponentProps<"div"> & {
38
+ /**
39
+ * User turns sit right in a bubble, assistant turns run flush left. Emitted as
40
+ * data-speaker for styling from outside; it is deliberately not called role, so the
41
+ * ARIA attribute stays yours to set.
42
+ */
43
+ speaker: "user" | "assistant";
44
+ }): import("react").JSX.Element;
45
+ /** The document half of the split: the header, and the body under it. */
46
+ declare function CanvasSplitDocument({ className, ...props }: ComponentProps<"div">): import("react").JSX.Element;
47
+ /**
48
+ * What the document is, which version this is, and whether it has been written down
49
+ * yet — with copy and close beside them.
50
+ */
51
+ declare function CanvasSplitHeader({ title, version, saved, onCopy, onClose, className, ...props }: Omit<ComponentProps<"div">, "children" | "title"> & {
52
+ /** Document name. */
53
+ title: string;
54
+ /** Which revision is on screen. */
55
+ version: number;
56
+ /** Swaps the status between editing and saved. */
57
+ saved: boolean;
58
+ /** Called from the copy action. Omit it and the control renders disabled. */
59
+ onCopy?: () => void;
60
+ /** Called when the canvas is dismissed. */
61
+ onClose?: () => void;
62
+ }): import("react").JSX.Element;
63
+ /**
64
+ * The document's text, scrolling on its own, with a caret while it is still being
65
+ * written.
66
+ */
67
+ declare function CanvasSplitBody({ writing, className, children, ...props }: ComponentProps<"div"> & {
68
+ /** Trails a caret after the last line while the document is still being written. */
69
+ writing?: boolean;
70
+ }): import("react").JSX.Element;
71
+ /** One line of the document, arriving as it is written. `heading` sets it apart. */
72
+ declare function CanvasSplitLine({ heading, className, ...props }: ComponentProps<"p"> & {
73
+ /** Renders the line as a heading rather than body text. */
74
+ heading?: boolean;
75
+ }): import("react").JSX.Element;
76
+ //#endregion
77
+ export { CanvasSplit, CanvasSplitBody, CanvasSplitDocument, CanvasSplitHeader, CanvasSplitLine, CanvasSplitMessage, CanvasSplitThread };
@@ -0,0 +1,138 @@
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 { CheckIcon, CopyIcon, FileTextIcon, XIcon } from "lucide-react";
6
+ //#region src/elements/canvas-split.tsx
7
+ /**
8
+ * The thread steps aside and the document takes the room, still being written as you
9
+ * read.
10
+ *
11
+ * @example
12
+ * import {
13
+ * CanvasSplit,
14
+ * CanvasSplitBody,
15
+ * CanvasSplitDocument,
16
+ * CanvasSplitHeader,
17
+ * CanvasSplitLine,
18
+ * CanvasSplitMessage,
19
+ * CanvasSplitThread,
20
+ * } from "@cueplusplus/ui/elements";
21
+ *
22
+ * <CanvasSplit>
23
+ * <CanvasSplitThread>
24
+ * <CanvasSplitMessage speaker="user">Draft the note</CanvasSplitMessage>
25
+ * </CanvasSplitThread>
26
+ * <CanvasSplitDocument>
27
+ * <CanvasSplitHeader title="note.md" version={3} saved onCopy={copy} />
28
+ * <CanvasSplitBody writing>
29
+ * <CanvasSplitLine heading>Migrating to 0.14</CanvasSplitLine>
30
+ * </CanvasSplitBody>
31
+ * </CanvasSplitDocument>
32
+ * </CanvasSplit>
33
+ */
34
+ function CanvasSplit({ className, ...props }) {
35
+ return /* @__PURE__ */ jsx("div", {
36
+ "data-slot": "canvas-split",
37
+ className: cn(paper, "flex w-full max-w-3xl flex-col overflow-hidden rounded-(--radius-overlay) md:h-80 md:flex-row", className),
38
+ ...props
39
+ });
40
+ }
41
+ /**
42
+ * The conversation, narrowed to a rail beside the document. It keeps scrolling while
43
+ * the document is written, so the turn that asked for the artifact stays in view.
44
+ */
45
+ function CanvasSplitThread({ className, ...props }) {
46
+ return /* @__PURE__ */ jsx("div", {
47
+ "data-slot": "canvas-split-thread",
48
+ className: cn("border-border flex flex-col gap-3 border-b p-4 md:w-[15rem] md:shrink-0 md:overflow-y-auto md:border-r md:border-b-0", className),
49
+ ...props
50
+ });
51
+ }
52
+ /** One turn inside the rail — a filled bubble for the person, plain text for the model. */
53
+ function CanvasSplitMessage({ speaker, className, ...props }) {
54
+ return /* @__PURE__ */ jsx("div", {
55
+ "data-slot": "canvas-split-message",
56
+ "data-speaker": speaker,
57
+ className: cn("cue-elements-fade-in cue-elements-animate-in cue-elements-fill-mode-both text-(length:--cue-text-body) leading-relaxed duration-300", speaker === "user" ? cn(field, "text-fg-muted ms-auto rounded-(--radius-overlay) px-3 py-2") : "text-fg-muted", className),
58
+ ...props
59
+ });
60
+ }
61
+ /** The document half of the split: the header, and the body under it. */
62
+ function CanvasSplitDocument({ className, ...props }) {
63
+ return /* @__PURE__ */ jsx("div", {
64
+ "data-slot": "canvas-split-document",
65
+ className: cn("flex min-w-0 flex-1 flex-col", className),
66
+ ...props
67
+ });
68
+ }
69
+ /**
70
+ * What the document is, which version this is, and whether it has been written down
71
+ * yet — with copy and close beside them.
72
+ */
73
+ function CanvasSplitHeader({ title, version, saved, onCopy, onClose, className, ...props }) {
74
+ return /* @__PURE__ */ jsxs("div", {
75
+ "data-slot": "canvas-split-header",
76
+ className: cn("border-border flex items-center gap-2 border-b px-3.5 py-2.5", className),
77
+ ...props,
78
+ children: [
79
+ /* @__PURE__ */ jsx(FileTextIcon, { className: "text-fg-subtle size-3.5 shrink-0" }),
80
+ /* @__PURE__ */ jsx("span", {
81
+ className: "min-w-0 flex-1 truncate text-(length:--cue-text-body) font-medium",
82
+ children: title
83
+ }),
84
+ /* @__PURE__ */ jsxs("span", {
85
+ className: cn(mono, "text-fg-subtle shrink-0"),
86
+ children: ["v", version]
87
+ }),
88
+ /* @__PURE__ */ jsx("span", {
89
+ className: cn(mono, "shrink-0 transition-colors duration-300", saved ? "text-ok" : "text-fg-subtle"),
90
+ children: saved ? /* @__PURE__ */ jsxs("span", {
91
+ className: "flex items-center gap-1",
92
+ children: [/* @__PURE__ */ jsx(CheckIcon, { className: "size-3" }), "saved"]
93
+ }) : "editing"
94
+ }),
95
+ /* @__PURE__ */ jsx("button", {
96
+ type: "button",
97
+ "aria-label": `Copy ${title}`,
98
+ onClick: onCopy,
99
+ disabled: !onCopy,
100
+ className: cn(ghostButton, "size-7 shrink-0 disabled:pointer-events-none disabled:opacity-30"),
101
+ children: /* @__PURE__ */ jsx(CopyIcon, { className: "size-3.5" })
102
+ }),
103
+ /* @__PURE__ */ jsx("button", {
104
+ type: "button",
105
+ "aria-label": "Close the canvas",
106
+ onClick: onClose,
107
+ disabled: !onClose,
108
+ className: cn(ghostButton, "size-7 shrink-0 disabled:pointer-events-none disabled:opacity-30"),
109
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-3.5" })
110
+ })
111
+ ]
112
+ });
113
+ }
114
+ /**
115
+ * The document's text, scrolling on its own, with a caret while it is still being
116
+ * written.
117
+ */
118
+ function CanvasSplitBody({ writing, className, children, ...props }) {
119
+ return /* @__PURE__ */ jsxs("div", {
120
+ "data-slot": "canvas-split-body",
121
+ className: cn("flex min-h-[9rem] flex-1 flex-col gap-1.5 overflow-y-auto p-4", className),
122
+ ...props,
123
+ children: [children, writing && /* @__PURE__ */ jsx("span", {
124
+ "aria-hidden": true,
125
+ className: "bg-accent h-[1.05em] w-[2px] animate-pulse rounded-full motion-reduce:animate-none"
126
+ })]
127
+ });
128
+ }
129
+ /** One line of the document, arriving as it is written. `heading` sets it apart. */
130
+ function CanvasSplitLine({ heading, className, ...props }) {
131
+ return /* @__PURE__ */ jsx("p", {
132
+ "data-slot": "canvas-split-line",
133
+ className: cn("cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in cue-elements-fill-mode-both text-(length:--cue-text-body) leading-relaxed duration-300", heading ? "text-fg font-medium" : "text-fg-muted", className),
134
+ ...props
135
+ });
136
+ }
137
+ //#endregion
138
+ export { CanvasSplit, CanvasSplitBody, CanvasSplitDocument, CanvasSplitHeader, CanvasSplitLine, CanvasSplitMessage, CanvasSplitThread };
@@ -0,0 +1,41 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/chart.d.ts
3
+ /**
4
+ * How the series is drawn: a filled `area`, a bare `line`, or `bars`. All three share
5
+ * one geometry and one scale — the variant only changes the marks.
6
+ */
7
+ type ChartVariant = "area" | "line" | "bars";
8
+ /**
9
+ * Area, line, and bars, with points landing one at a time as the series streams in.
10
+ *
11
+ * @example
12
+ * import { Chart } from "@cueplusplus/ui/elements";
13
+ *
14
+ * <Chart
15
+ * label="Runs this week"
16
+ * value="92"
17
+ * delta="+34%"
18
+ * points={points}
19
+ * visibleCount={points.length}
20
+ * variant="area"
21
+ * />
22
+ */
23
+ declare function Chart({ label, value, delta, points, visibleCount, variant, className, ...props }: Omit<ComponentProps<"div">, "children" | "label" | "value" | "delta" | "points" | "visibleCount" | "variant"> & {
24
+ /** What the series measures. */
25
+ label: string;
26
+ /** The headline figure, pre-formatted. The chart never formats numbers itself. */
27
+ value: string;
28
+ /** Change against the previous window. Renders green unless it starts with a minus sign. */
29
+ delta?: string;
30
+ /**
31
+ * The full series. The scale is computed from all of it, so the axis does not jump
32
+ * while streaming.
33
+ */
34
+ points: readonly number[];
35
+ /** How many points have arrived. */
36
+ visibleCount: number;
37
+ /** Mark type. The last point stays emphasized in all three. */
38
+ variant?: ChartVariant;
39
+ }): import("react").JSX.Element;
40
+ //#endregion
41
+ export { Chart, ChartVariant };
@@ -0,0 +1,117 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { mono, paper } from "./surfaces.js";
4
+ import { clamp, take } from "./range.js";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/elements/chart.tsx
7
+ const W = 300;
8
+ const H = 88;
9
+ const PAD = 6;
10
+ const scale = (points) => {
11
+ const max = Math.max(...points, 1);
12
+ const min = Math.min(...points, 0);
13
+ const span = max - min || 1;
14
+ return (value) => 82 - (value - min) / span * 76;
15
+ };
16
+ /**
17
+ * Area, line, and bars, with points landing one at a time as the series streams in.
18
+ *
19
+ * @example
20
+ * import { Chart } from "@cueplusplus/ui/elements";
21
+ *
22
+ * <Chart
23
+ * label="Runs this week"
24
+ * value="92"
25
+ * delta="+34%"
26
+ * points={points}
27
+ * visibleCount={points.length}
28
+ * variant="area"
29
+ * />
30
+ */
31
+ function Chart({ label, value, delta, points, visibleCount, variant = "area", className, ...props }) {
32
+ const shown = take(points, clamp(visibleCount, 1, points.length));
33
+ const y = scale(points);
34
+ const step = points.length > 1 ? 288 / (points.length - 1) : 0;
35
+ const x = (i) => PAD + i * step;
36
+ const coords = shown.map((p, i) => ({
37
+ x: x(i),
38
+ y: y(p)
39
+ }));
40
+ const line = coords.map((c) => `${c.x},${c.y}`).join(" ");
41
+ const last = coords.at(-1);
42
+ const area = last ? `M ${PAD},82 ${coords.map((c) => `L ${c.x},${c.y}`).join(" ")} L ${last.x},82 Z` : "";
43
+ const lastIndex = shown.length - 1;
44
+ const falling = delta !== void 0 && /^\s*[-−–]/.test(delta);
45
+ const rising = delta !== void 0 && !falling;
46
+ return /* @__PURE__ */ jsxs("div", {
47
+ "data-slot": "chart",
48
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-4", className),
49
+ ...props,
50
+ children: [
51
+ /* @__PURE__ */ jsxs("div", {
52
+ className: "flex items-baseline justify-between",
53
+ children: [/* @__PURE__ */ jsx("span", {
54
+ className: cn(mono, "text-fg-subtle"),
55
+ children: label
56
+ }), delta !== void 0 && /* @__PURE__ */ jsx("span", {
57
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "tabular-nums", rising ? "text-ok" : "text-danger"),
58
+ children: delta
59
+ })]
60
+ }),
61
+ /* @__PURE__ */ jsx("span", {
62
+ className: "text-(length:--cue-text-title) font-medium tracking-tight tabular-nums",
63
+ children: value
64
+ }),
65
+ /* @__PURE__ */ jsxs("svg", {
66
+ viewBox: `0 0 ${W} ${H}`,
67
+ role: "img",
68
+ "aria-label": `${label}: ${value}`,
69
+ className: "h-[88px] w-full overflow-visible",
70
+ preserveAspectRatio: "none",
71
+ children: [/* @__PURE__ */ jsx("line", {
72
+ x1: "0",
73
+ x2: W,
74
+ y1: 82,
75
+ y2: 82,
76
+ className: "stroke-fg-subtle",
77
+ strokeWidth: "1",
78
+ vectorEffect: "non-scaling-stroke"
79
+ }), variant === "bars" ? shown.map((p, i) => {
80
+ const top = y(p);
81
+ const barWidth = Math.max(2, step * .55);
82
+ return /* @__PURE__ */ jsx("rect", {
83
+ x: x(i) - barWidth / 2,
84
+ y: top,
85
+ width: barWidth,
86
+ height: Math.max(1, 82 - top),
87
+ rx: "1.5",
88
+ className: cn("cue-elements-fade-in cue-elements-animate-in cue-elements-fill-mode-both duration-300", i === lastIndex ? "fill-stream" : "fill-fg-subtle"),
89
+ style: { animationDelay: `${i * 40}ms` }
90
+ }, i);
91
+ }) : /* @__PURE__ */ jsxs(Fragment, { children: [
92
+ variant === "area" && shown.length > 1 && /* @__PURE__ */ jsx("path", {
93
+ d: area,
94
+ className: "fill-stream/15"
95
+ }),
96
+ /* @__PURE__ */ jsx("polyline", {
97
+ points: line,
98
+ fill: "none",
99
+ strokeWidth: "1.75",
100
+ strokeLinecap: "round",
101
+ strokeLinejoin: "round",
102
+ vectorEffect: "non-scaling-stroke",
103
+ className: "stroke-stream"
104
+ }),
105
+ last && /* @__PURE__ */ jsx("circle", {
106
+ cx: last.x,
107
+ cy: last.y,
108
+ r: "3",
109
+ className: "fill-stream"
110
+ })
111
+ ] })]
112
+ })
113
+ ]
114
+ });
115
+ }
116
+ //#endregion
117
+ export { Chart };
@@ -0,0 +1,46 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/chat-panel.d.ts
3
+ /**
4
+ * The whole family working together: a message, a pause, a streamed reply.
5
+ *
6
+ * @example
7
+ * import {
8
+ * ChatPanel,
9
+ * ChatPanelComposer,
10
+ * ChatPanelMessages,
11
+ * ChatPanelTyping,
12
+ * ChatPanelUserMessage,
13
+ * } from "@cueplusplus/ui/elements";
14
+ *
15
+ * <ChatPanel>
16
+ * <ChatPanelMessages>
17
+ * <ChatPanelUserMessage>Why did my draft disappear?</ChatPanelUserMessage>
18
+ * <ChatPanelTyping />
19
+ * </ChatPanelMessages>
20
+ * <ChatPanelComposer placeholder="Message" onSend={send} />
21
+ * </ChatPanel>
22
+ */
23
+ declare function ChatPanel({ className, ...props }: ComponentProps<"div">): import("react").JSX.Element;
24
+ /**
25
+ * The scrolling transcript inside a `ChatPanel`. Bottom-aligned, so a short
26
+ * conversation sits on the composer rather than floating at the top of the panel.
27
+ */
28
+ declare function ChatPanelMessages({ className, ...props }: ComponentProps<"div">): import("react").JSX.Element;
29
+ /** One message from the person, drawn as a filled bubble on the trailing edge. */
30
+ declare function ChatPanelUserMessage({ className, ...props }: ComponentProps<"div">): import("react").JSX.Element;
31
+ /** One message from the model: plain text on the leading edge, no bubble. */
32
+ declare function ChatPanelAssistantMessage({ className, ...props }: ComponentProps<"p">): import("react").JSX.Element;
33
+ /** The three-dot rest state, for the gap between sending and the first token. */
34
+ declare function ChatPanelTyping({ className, ...props }: Omit<ComponentProps<"div">, "children">): import("react").JSX.Element;
35
+ /**
36
+ * The panel's composer row. It is a display of a composer rather than a working one —
37
+ * the placeholder is a string and the send button takes a handler.
38
+ */
39
+ declare function ChatPanelComposer({ placeholder, onSend, className, ...props }: Omit<ComponentProps<"div">, "children" | "placeholder"> & {
40
+ /** Resting text in the input bar. */
41
+ placeholder: string;
42
+ /** Called from the send control. Omit it and the control renders disabled. */
43
+ onSend?: () => void;
44
+ }): import("react").JSX.Element;
45
+ //#endregion
46
+ export { ChatPanel, ChatPanelAssistantMessage, ChatPanelComposer, ChatPanelMessages, ChatPanelTyping, ChatPanelUserMessage };