@cueplusplus/ui 0.3.0 → 0.5.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 (488) hide show
  1. package/CHANGELOG.md +2229 -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/app-shell.d.ts +52 -2
  15. package/dist/chrome/app-shell.js +80 -8
  16. package/dist/chrome/index.d.ts +2 -2
  17. package/dist/configurator/_export.js +3 -2
  18. package/dist/configurator/_overrides.d.ts +1 -1
  19. package/dist/configurator/token-editor.js +4 -1
  20. package/dist/date/_segments.js +37 -2
  21. package/dist/elements/activity-graph.d.ts +40 -0
  22. package/dist/elements/activity-graph.js +81 -0
  23. package/dist/elements/agent-card.d.ts +49 -0
  24. package/dist/elements/agent-card.js +91 -0
  25. package/dist/elements/agent-handoff.d.ts +24 -0
  26. package/dist/elements/agent-handoff.js +53 -0
  27. package/dist/elements/agent-mode-badge.d.ts +72 -0
  28. package/dist/elements/agent-mode-badge.js +110 -0
  29. package/dist/elements/agent-plan.d.ts +24 -0
  30. package/dist/elements/agent-plan.js +74 -0
  31. package/dist/elements/agent-status.d.ts +29 -0
  32. package/dist/elements/agent-status.js +46 -0
  33. package/dist/elements/agent-surface.d.ts +65 -0
  34. package/dist/elements/agent-surface.js +68 -0
  35. package/dist/elements/animated-number.d.ts +86 -0
  36. package/dist/elements/animated-number.js +118 -0
  37. package/dist/elements/approval-card.d.ts +40 -0
  38. package/dist/elements/approval-card.js +78 -0
  39. package/dist/elements/artifact-card.d.ts +30 -0
  40. package/dist/elements/artifact-card.js +58 -0
  41. package/dist/elements/background-inbox.d.ts +39 -0
  42. package/dist/elements/background-inbox.js +60 -0
  43. package/dist/elements/canvas-split.d.ts +77 -0
  44. package/dist/elements/canvas-split.js +138 -0
  45. package/dist/elements/chart.d.ts +41 -0
  46. package/dist/elements/chart.js +117 -0
  47. package/dist/elements/chat-panel.d.ts +46 -0
  48. package/dist/elements/chat-panel.js +104 -0
  49. package/dist/elements/checkpoint-history.d.ts +31 -0
  50. package/dist/elements/checkpoint-history.js +65 -0
  51. package/dist/elements/clamp.d.ts +90 -0
  52. package/dist/elements/clamp.js +109 -0
  53. package/dist/elements/code-diff.d.ts +42 -0
  54. package/dist/elements/code-diff.js +69 -0
  55. package/dist/elements/code-runner.d.ts +38 -0
  56. package/dist/elements/code-runner.js +84 -0
  57. package/dist/elements/command-palette.d.ts +48 -0
  58. package/dist/elements/command-palette.js +129 -0
  59. package/dist/elements/compaction-row.d.ts +63 -0
  60. package/dist/elements/compaction-row.js +110 -0
  61. package/dist/elements/comparison-card.d.ts +47 -0
  62. package/dist/elements/comparison-card.js +69 -0
  63. package/dist/elements/composer.d.ts +274 -0
  64. package/dist/elements/composer.js +505 -0
  65. package/dist/elements/computer-use.d.ts +40 -0
  66. package/dist/elements/computer-use.js +92 -0
  67. package/dist/elements/confidence-marker.d.ts +39 -0
  68. package/dist/elements/confidence-marker.js +64 -0
  69. package/dist/elements/connection-state.d.ts +29 -0
  70. package/dist/elements/connection-state.js +66 -0
  71. package/dist/elements/context-breakdown.d.ts +30 -0
  72. package/dist/elements/context-breakdown.js +86 -0
  73. package/dist/elements/context-usage.d.ts +99 -0
  74. package/dist/elements/context-usage.js +225 -0
  75. package/dist/elements/conversation-search.d.ts +48 -0
  76. package/dist/elements/conversation-search.js +88 -0
  77. package/dist/elements/cost-meter.d.ts +33 -0
  78. package/dist/elements/cost-meter.js +75 -0
  79. package/dist/elements/data-table.d.ts +31 -0
  80. package/dist/elements/data-table.js +67 -0
  81. package/dist/elements/day-separator.d.ts +34 -0
  82. package/dist/elements/day-separator.js +50 -0
  83. package/dist/elements/diagram.d.ts +34 -0
  84. package/dist/elements/diagram.js +75 -0
  85. package/dist/elements/document-reference.d.ts +37 -0
  86. package/dist/elements/document-reference.js +66 -0
  87. package/dist/elements/draft-restore.d.ts +27 -0
  88. package/dist/elements/draft-restore.js +54 -0
  89. package/dist/elements/edit-message.d.ts +36 -0
  90. package/dist/elements/edit-message.js +77 -0
  91. package/dist/elements/elements.css +459 -0
  92. package/dist/elements/elicitation-form.d.ts +48 -0
  93. package/dist/elements/elicitation-form.js +106 -0
  94. package/dist/elements/empty-state.d.ts +52 -0
  95. package/dist/elements/empty-state.js +98 -0
  96. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  97. package/dist/elements/end-of-turn-summary.js +75 -0
  98. package/dist/elements/error-state.d.ts +29 -0
  99. package/dist/elements/error-state.js +55 -0
  100. package/dist/elements/feedback-dialog.d.ts +36 -0
  101. package/dist/elements/feedback-dialog.js +81 -0
  102. package/dist/elements/file-tree.d.ts +45 -0
  103. package/dist/elements/file-tree.js +84 -0
  104. package/dist/elements/flow-graph.d.ts +45 -0
  105. package/dist/elements/flow-graph.js +78 -0
  106. package/dist/elements/generative/chart.js +200 -0
  107. package/dist/elements/generative/faults.js +111 -0
  108. package/dist/elements/generative/icons.d.ts +41 -0
  109. package/dist/elements/generative/icons.js +190 -0
  110. package/dist/elements/generative/intrinsics.js +483 -0
  111. package/dist/elements/generative/spec.d.ts +110 -0
  112. package/dist/elements/generative/spec.js +366 -0
  113. package/dist/elements/generative.css +1145 -0
  114. package/dist/elements/generative.d.ts +144 -0
  115. package/dist/elements/generative.js +126 -0
  116. package/dist/elements/guardrail-notice.d.ts +29 -0
  117. package/dist/elements/guardrail-notice.js +63 -0
  118. package/dist/elements/image-generation.d.ts +18 -0
  119. package/dist/elements/image-generation.js +64 -0
  120. package/dist/elements/index.d.ts +116 -0
  121. package/dist/elements/index.js +115 -0
  122. package/dist/elements/inline-citation.d.ts +43 -0
  123. package/dist/elements/inline-citation.js +93 -0
  124. package/dist/elements/job-progress.d.ts +49 -0
  125. package/dist/elements/job-progress.js +74 -0
  126. package/dist/elements/launcher-bubble.d.ts +34 -0
  127. package/dist/elements/launcher-bubble.js +72 -0
  128. package/dist/elements/live-region-announcer.d.ts +130 -0
  129. package/dist/elements/live-region-announcer.js +230 -0
  130. package/dist/elements/loading-state.d.ts +27 -0
  131. package/dist/elements/loading-state.js +36 -0
  132. package/dist/elements/map-answer.d.ts +38 -0
  133. package/dist/elements/map-answer.js +93 -0
  134. package/dist/elements/markdown.d.ts +131 -0
  135. package/dist/elements/markdown.js +528 -0
  136. package/dist/elements/math-block.d.ts +51 -0
  137. package/dist/elements/math-block.js +70 -0
  138. package/dist/elements/mcp-server-panel.d.ts +41 -0
  139. package/dist/elements/mcp-server-panel.js +115 -0
  140. package/dist/elements/memory-chips.d.ts +30 -0
  141. package/dist/elements/memory-chips.js +43 -0
  142. package/dist/elements/message-actions.d.ts +38 -0
  143. package/dist/elements/message-actions.js +71 -0
  144. package/dist/elements/message-attachment.d.ts +48 -0
  145. package/dist/elements/message-attachment.js +63 -0
  146. package/dist/elements/message-branches.d.ts +25 -0
  147. package/dist/elements/message-branches.js +65 -0
  148. package/dist/elements/message-pair.d.ts +33 -0
  149. package/dist/elements/message-pair.js +65 -0
  150. package/dist/elements/message-queue.d.ts +31 -0
  151. package/dist/elements/message-queue.js +80 -0
  152. package/dist/elements/message-timing.d.ts +33 -0
  153. package/dist/elements/message-timing.js +37 -0
  154. package/dist/elements/mobile-composer.d.ts +44 -0
  155. package/dist/elements/mobile-composer.js +88 -0
  156. package/dist/elements/model-picker.d.ts +38 -0
  157. package/dist/elements/model-picker.js +69 -0
  158. package/dist/elements/number-ticker.d.ts +18 -0
  159. package/dist/elements/number-ticker.js +47 -0
  160. package/dist/elements/onboarding.d.ts +30 -0
  161. package/dist/elements/onboarding.js +75 -0
  162. package/dist/elements/permission-grant.d.ts +35 -0
  163. package/dist/elements/permission-grant.js +86 -0
  164. package/dist/elements/permission-scopes.d.ts +215 -0
  165. package/dist/elements/permission-scopes.js +249 -0
  166. package/dist/elements/prompt-library.d.ts +43 -0
  167. package/dist/elements/prompt-library.js +117 -0
  168. package/dist/elements/queue-dock.d.ts +101 -0
  169. package/dist/elements/queue-dock.js +132 -0
  170. package/dist/elements/quota-banner.d.ts +26 -0
  171. package/dist/elements/quota-banner.js +66 -0
  172. package/dist/elements/quote-reply.d.ts +44 -0
  173. package/dist/elements/quote-reply.js +79 -0
  174. package/dist/elements/range.d.ts +29 -0
  175. package/dist/elements/range.js +45 -0
  176. package/dist/elements/read-aloud.d.ts +45 -0
  177. package/dist/elements/read-aloud.js +75 -0
  178. package/dist/elements/reasoning-effort.d.ts +36 -0
  179. package/dist/elements/reasoning-effort.js +67 -0
  180. package/dist/elements/reasoning-panel.d.ts +46 -0
  181. package/dist/elements/reasoning-panel.js +75 -0
  182. package/dist/elements/recommendation-card.d.ts +45 -0
  183. package/dist/elements/recommendation-card.js +83 -0
  184. package/dist/elements/regenerate-menu.d.ts +45 -0
  185. package/dist/elements/regenerate-menu.js +51 -0
  186. package/dist/elements/replay.d.ts +217 -0
  187. package/dist/elements/replay.js +498 -0
  188. package/dist/elements/research-report.d.ts +38 -0
  189. package/dist/elements/research-report.js +69 -0
  190. package/dist/elements/retrieval-chunks.d.ts +43 -0
  191. package/dist/elements/retrieval-chunks.js +81 -0
  192. package/dist/elements/revert-dock.d.ts +159 -0
  193. package/dist/elements/revert-dock.js +327 -0
  194. package/dist/elements/reviewable-diff.d.ts +45 -0
  195. package/dist/elements/reviewable-diff.js +110 -0
  196. package/dist/elements/risk-badge.d.ts +52 -0
  197. package/dist/elements/risk-badge.js +91 -0
  198. package/dist/elements/schedule-card.d.ts +42 -0
  199. package/dist/elements/schedule-card.js +90 -0
  200. package/dist/elements/score-breakdown.d.ts +47 -0
  201. package/dist/elements/score-breakdown.js +82 -0
  202. package/dist/elements/scroll-anchor.d.ts +32 -0
  203. package/dist/elements/scroll-anchor.js +121 -0
  204. package/dist/elements/settings-panel.d.ts +52 -0
  205. package/dist/elements/settings-panel.js +107 -0
  206. package/dist/elements/shared-conversation.d.ts +39 -0
  207. package/dist/elements/shared-conversation.js +68 -0
  208. package/dist/elements/sources.d.ts +33 -0
  209. package/dist/elements/sources.js +61 -0
  210. package/dist/elements/speaker-identity.d.ts +32 -0
  211. package/dist/elements/speaker-identity.js +51 -0
  212. package/dist/elements/spec-sheet.d.ts +31 -0
  213. package/dist/elements/spec-sheet.js +45 -0
  214. package/dist/elements/stopped-run.d.ts +22 -0
  215. package/dist/elements/stopped-run.js +50 -0
  216. package/dist/elements/streaming-text.d.ts +31 -0
  217. package/dist/elements/streaming-text.js +45 -0
  218. package/dist/elements/subagent-list.d.ts +37 -0
  219. package/dist/elements/subagent-list.js +79 -0
  220. package/dist/elements/suggestions.d.ts +30 -0
  221. package/dist/elements/suggestions.js +36 -0
  222. package/dist/elements/surfaces.d.ts +85 -0
  223. package/dist/elements/surfaces.js +107 -0
  224. package/dist/elements/tail-status.d.ts +131 -0
  225. package/dist/elements/tail-status.js +94 -0
  226. package/dist/elements/terminal-block.d.ts +29 -0
  227. package/dist/elements/terminal-block.js +54 -0
  228. package/dist/elements/thinking-indicator.d.ts +18 -0
  229. package/dist/elements/thinking-indicator.js +36 -0
  230. package/dist/elements/thread-list.d.ts +35 -0
  231. package/dist/elements/thread-list.js +68 -0
  232. package/dist/elements/thread-search.d.ts +42 -0
  233. package/dist/elements/thread-search.js +99 -0
  234. package/dist/elements/timeline.d.ts +37 -0
  235. package/dist/elements/timeline.js +46 -0
  236. package/dist/elements/todo-list.d.ts +42 -0
  237. package/dist/elements/todo-list.js +59 -0
  238. package/dist/elements/tool-call.d.ts +41 -0
  239. package/dist/elements/tool-call.js +85 -0
  240. package/dist/elements/tool-error.d.ts +39 -0
  241. package/dist/elements/tool-error.js +76 -0
  242. package/dist/elements/tool-group.d.ts +45 -0
  243. package/dist/elements/tool-group.js +71 -0
  244. package/dist/elements/tool-timeline.d.ts +65 -0
  245. package/dist/elements/tool-timeline.js +88 -0
  246. package/dist/elements/trace-waterfall.d.ts +37 -0
  247. package/dist/elements/trace-waterfall.js +69 -0
  248. package/dist/elements/transcript-rules.d.ts +67 -0
  249. package/dist/elements/transcript-rules.js +95 -0
  250. package/dist/elements/turn-footer.d.ts +74 -0
  251. package/dist/elements/turn-footer.js +101 -0
  252. package/dist/elements/typing-indicator.d.ts +16 -0
  253. package/dist/elements/typing-indicator.js +51 -0
  254. package/dist/elements/verdict-row.d.ts +89 -0
  255. package/dist/elements/verdict-row.js +150 -0
  256. package/dist/elements/vocabulary.d.ts +612 -0
  257. package/dist/elements/vocabulary.js +611 -0
  258. package/dist/elements/voice-conversation.d.ts +49 -0
  259. package/dist/elements/voice-conversation.js +123 -0
  260. package/dist/elements/web-preview.d.ts +32 -0
  261. package/dist/elements/web-preview.js +66 -0
  262. package/dist/elements/web-search.d.ts +37 -0
  263. package/dist/elements/web-search.js +66 -0
  264. package/dist/elements/work-collapse.d.ts +103 -0
  265. package/dist/elements/work-collapse.js +131 -0
  266. package/dist/icons/containers.d.ts +89 -0
  267. package/dist/icons/containers.js +295 -0
  268. package/dist/icons/index.d.ts +2 -0
  269. package/dist/index.d.ts +6 -4
  270. package/dist/index.js +2 -1
  271. package/dist/instruments/two-step-button.js +25 -6
  272. package/dist/layout/sidebar.d.ts +19 -1
  273. package/dist/layout/sidebar.js +19 -1
  274. package/dist/primitives/button.js +11 -1
  275. package/dist/primitives/chip.d.ts +35 -9
  276. package/dist/primitives/chip.js +97 -11
  277. package/dist/system/agent-skin.d.ts +27 -0
  278. package/dist/system/agent-skin.js +20 -0
  279. package/dist/system/portal.d.ts +5 -3
  280. package/dist/system/portal.js +19 -5
  281. package/dist/system/theme-provider.js +54 -9
  282. package/dist/system/use-density.d.ts +9 -0
  283. package/dist/system/use-density.js +9 -0
  284. package/dist/system/use-isomorphic-layout-effect.js +19 -1
  285. package/dist/theming/_presets.d.ts +1 -1
  286. package/dist/theming/_presets.js +71 -8
  287. package/dist/theming/contrast.d.ts +16 -4
  288. package/dist/theming/contrast.js +33 -6
  289. package/dist/theming/create-theme.d.ts +6 -2
  290. package/dist/theming/create-theme.js +32 -5
  291. package/dist/theming/serialize.d.ts +10 -1
  292. package/dist/theming/serialize.js +62 -8
  293. package/manifest/components/activity-graph.json +88 -0
  294. package/manifest/components/agent-card.json +120 -0
  295. package/manifest/components/agent-handoff.json +87 -0
  296. package/manifest/components/agent-mode-badge.json +84 -0
  297. package/manifest/components/agent-plan.json +67 -0
  298. package/manifest/components/agent-status.json +73 -0
  299. package/manifest/components/agent-surface.json +78 -0
  300. package/manifest/components/alert-dialog.json +1 -1
  301. package/manifest/components/animated-number.json +67 -0
  302. package/manifest/components/app-shell.json +99 -7
  303. package/manifest/components/approval-card.json +106 -0
  304. package/manifest/components/artifact-card.json +81 -0
  305. package/manifest/components/audience-icon.json +52 -0
  306. package/manifest/components/background-inbox.json +71 -0
  307. package/manifest/components/branch-picker.json +124 -0
  308. package/manifest/components/button.json +1 -0
  309. package/manifest/components/canvas-split-body.json +62 -0
  310. package/manifest/components/canvas-split-document.json +54 -0
  311. package/manifest/components/canvas-split-header.json +83 -0
  312. package/manifest/components/canvas-split-line.json +62 -0
  313. package/manifest/components/canvas-split-message.json +62 -0
  314. package/manifest/components/canvas-split-thread.json +54 -0
  315. package/manifest/components/canvas-split.json +60 -0
  316. package/manifest/components/catalogue-icon.json +52 -0
  317. package/manifest/components/channel-beta-icon.json +52 -0
  318. package/manifest/components/channel-released-icon.json +52 -0
  319. package/manifest/components/chart.json +93 -0
  320. package/manifest/components/chat-empty-state.json +55 -0
  321. package/manifest/components/chat-panel-assistant-message.json +51 -0
  322. package/manifest/components/chat-panel-composer.json +66 -0
  323. package/manifest/components/chat-panel-messages.json +51 -0
  324. package/manifest/components/chat-panel-typing.json +51 -0
  325. package/manifest/components/chat-panel-user-message.json +51 -0
  326. package/manifest/components/chat-panel.json +57 -0
  327. package/manifest/components/checkpoint-history.json +80 -0
  328. package/manifest/components/chip.json +24 -12
  329. package/manifest/components/clamp.json +102 -0
  330. package/manifest/components/cli-tool-icon.json +52 -0
  331. package/manifest/components/code-diff.json +87 -0
  332. package/manifest/components/code-runner.json +97 -0
  333. package/manifest/components/compaction-row.json +100 -0
  334. package/manifest/components/comparison-card.json +83 -0
  335. package/manifest/components/composer-actions.json +65 -0
  336. package/manifest/components/composer-attach-button.json +65 -0
  337. package/manifest/components/composer-attachment-chip.json +75 -0
  338. package/manifest/components/composer-attachments.json +60 -0
  339. package/manifest/components/composer-bar.json +73 -0
  340. package/manifest/components/composer-command-item.json +79 -0
  341. package/manifest/components/composer-context.json +67 -0
  342. package/manifest/components/composer-input.json +73 -0
  343. package/manifest/components/composer-menu-item.json +72 -0
  344. package/manifest/components/composer-menu.json +79 -0
  345. package/manifest/components/composer-model-item.json +75 -0
  346. package/manifest/components/composer-model-trigger.json +75 -0
  347. package/manifest/components/composer-person-item.json +79 -0
  348. package/manifest/components/composer-send.json +80 -0
  349. package/manifest/components/composer-toolbar.json +65 -0
  350. package/manifest/components/composer-voice-button.json +68 -0
  351. package/manifest/components/composer-voice.json +75 -0
  352. package/manifest/components/computer-use.json +84 -0
  353. package/manifest/components/confidence-marker.json +74 -0
  354. package/manifest/components/connection-state.json +84 -0
  355. package/manifest/components/context-breakdown.json +65 -0
  356. package/manifest/components/context-usage.json +85 -0
  357. package/manifest/components/conversation-search.json +92 -0
  358. package/manifest/components/cost-meter.json +74 -0
  359. package/manifest/components/cue-portal-frame.json +1 -1
  360. package/manifest/components/day-separator.json +58 -0
  361. package/manifest/components/delegation-card.json +1 -1
  362. package/manifest/components/density.json +1 -1
  363. package/manifest/components/diagram.json +100 -0
  364. package/manifest/components/document-reference.json +90 -0
  365. package/manifest/components/draft-restore.json +82 -0
  366. package/manifest/components/drawer.json +1 -1
  367. package/manifest/components/dropdown-menu.json +1 -1
  368. package/manifest/components/edit-message.json +105 -0
  369. package/manifest/components/elements-command-palette.json +100 -0
  370. package/manifest/components/elements-composer.json +71 -0
  371. package/manifest/components/elements-data-table.json +68 -0
  372. package/manifest/components/elements-timeline.json +69 -0
  373. package/manifest/components/elicitation-form.json +103 -0
  374. package/manifest/components/empty-state-composer.json +64 -0
  375. package/manifest/components/empty-state-greeting.json +49 -0
  376. package/manifest/components/empty-state-suggestion.json +57 -0
  377. package/manifest/components/empty-state-suggestions.json +49 -0
  378. package/manifest/components/end-of-turn-summary.json +77 -0
  379. package/manifest/components/error-state.json +80 -0
  380. package/manifest/components/feedback-dialog.json +107 -0
  381. package/manifest/components/file-tree.json +83 -0
  382. package/manifest/components/flow-graph.json +75 -0
  383. package/manifest/components/folder-icon.json +52 -0
  384. package/manifest/components/frac.json +59 -0
  385. package/manifest/components/generation-loader.json +64 -0
  386. package/manifest/components/generative-ui.json +93 -0
  387. package/manifest/components/guardrail-notice.json +91 -0
  388. package/manifest/components/hover-card.json +1 -1
  389. package/manifest/components/image-generation.json +67 -0
  390. package/manifest/components/info-tip.json +1 -1
  391. package/manifest/components/inline-citation.json +77 -0
  392. package/manifest/components/job-progress.json +96 -0
  393. package/manifest/components/launcher-bubble.json +105 -0
  394. package/manifest/components/live-region-announcer.json +79 -0
  395. package/manifest/components/map-answer.json +83 -0
  396. package/manifest/components/markdown-text.json +94 -0
  397. package/manifest/components/math-block.json +74 -0
  398. package/manifest/components/mcp-server-icon.json +52 -0
  399. package/manifest/components/mcp-server-panel.json +87 -0
  400. package/manifest/components/memory-chips.json +65 -0
  401. package/manifest/components/message-actions.json +99 -0
  402. package/manifest/components/message-attachments.json +63 -0
  403. package/manifest/components/message-branches.json +71 -0
  404. package/manifest/components/message-list.json +1 -1
  405. package/manifest/components/message-pair.json +86 -0
  406. package/manifest/components/message-queue.json +74 -0
  407. package/manifest/components/message-timing.json +62 -0
  408. package/manifest/components/mobile-composer.json +126 -0
  409. package/manifest/components/model-picker.json +76 -0
  410. package/manifest/components/node-card.json +1 -1
  411. package/manifest/components/node-handle.json +1 -1
  412. package/manifest/components/number-ticker.json +61 -0
  413. package/manifest/components/onboarding.json +84 -0
  414. package/manifest/components/otp-field.json +7 -7
  415. package/manifest/components/permission-grant.json +92 -0
  416. package/manifest/components/permission-scopes.json +139 -0
  417. package/manifest/components/popover.json +1 -1
  418. package/manifest/components/prompt-library.json +99 -0
  419. package/manifest/components/queue-dock.json +110 -0
  420. package/manifest/components/quota-banner.json +94 -0
  421. package/manifest/components/quote-reply.json +105 -0
  422. package/manifest/components/read-aloud.json +111 -0
  423. package/manifest/components/reasoning-effort.json +81 -0
  424. package/manifest/components/reasoning-panel.json +108 -0
  425. package/manifest/components/recommendation-card.json +107 -0
  426. package/manifest/components/regenerate-menu.json +89 -0
  427. package/manifest/components/replay-player.json +102 -0
  428. package/manifest/components/research-report.json +76 -0
  429. package/manifest/components/retrieval-chunks.json +84 -0
  430. package/manifest/components/revert-dock.json +150 -0
  431. package/manifest/components/reviewable-diff.json +93 -0
  432. package/manifest/components/risk-badge.json +74 -0
  433. package/manifest/components/schedule-card.json +101 -0
  434. package/manifest/components/score-breakdown.json +91 -0
  435. package/manifest/components/scroll-anchor.json +72 -0
  436. package/manifest/components/scroll-area.json +7 -7
  437. package/manifest/components/search-input.json +7 -7
  438. package/manifest/components/segmented-control.json +21 -21
  439. package/manifest/components/settings-panel.json +118 -0
  440. package/manifest/components/shared-conversation.json +89 -0
  441. package/manifest/components/shimmer-label.json +59 -0
  442. package/manifest/components/skill-icon.json +52 -0
  443. package/manifest/components/sources.json +83 -0
  444. package/manifest/components/speaker-identity.json +61 -0
  445. package/manifest/components/spec-sheet.json +80 -0
  446. package/manifest/components/stack-icon.json +52 -0
  447. package/manifest/components/stacks-matrix-icon.json +52 -0
  448. package/manifest/components/stat.json +1 -1
  449. package/manifest/components/status-dot.json +1 -1
  450. package/manifest/components/stopped-run.json +81 -0
  451. package/manifest/components/streaming-text.json +71 -0
  452. package/manifest/components/sub.json +44 -0
  453. package/manifest/components/subagent-list.json +88 -0
  454. package/manifest/components/suggestions.json +84 -0
  455. package/manifest/components/sup.json +44 -0
  456. package/manifest/components/swap-label.json +71 -0
  457. package/manifest/components/tail-status.json +109 -0
  458. package/manifest/components/terminal-block.json +91 -0
  459. package/manifest/components/theme-provider.json +2 -2
  460. package/manifest/components/thinking-indicator.json +63 -0
  461. package/manifest/components/thread-list.json +76 -0
  462. package/manifest/components/thread-search.json +90 -0
  463. package/manifest/components/threshold-rail.json +2 -2
  464. package/manifest/components/time-boundary.json +62 -0
  465. package/manifest/components/timeline.json +1 -1
  466. package/manifest/components/todo-list.json +69 -0
  467. package/manifest/components/toggle-group.json +7 -7
  468. package/manifest/components/token-editor.json +1 -1
  469. package/manifest/components/tool-call-card.json +200 -0
  470. package/manifest/components/tool-call.json +119 -0
  471. package/manifest/components/tool-error.json +114 -0
  472. package/manifest/components/tool-group.json +83 -0
  473. package/manifest/components/tool-timeline.json +119 -0
  474. package/manifest/components/toolbar.json +7 -7
  475. package/manifest/components/tooltip.json +1 -1
  476. package/manifest/components/trace-waterfall.json +74 -0
  477. package/manifest/components/turn-footer.json +105 -0
  478. package/manifest/components/typing-indicator.json +53 -0
  479. package/manifest/components/unread-divider.json +55 -0
  480. package/manifest/components/usage-chart.json +1 -1
  481. package/manifest/components/verdict-row.json +91 -0
  482. package/manifest/components/voice-conversation.json +109 -0
  483. package/manifest/components/web-preview.json +87 -0
  484. package/manifest/components/web-search.json +92 -0
  485. package/manifest/components/work-collapse.json +102 -0
  486. package/manifest/manifest.json +2670 -33
  487. package/manifest/tokens.json +22 -1
  488. package/package.json +46 -4
@@ -0,0 +1,115 @@
1
+ import { ShimmerLabel, SwapLabel, codeScroll, codeSurface, collapsePanel, field, fieldInteractive, floating, ghostButton, iconSwap, iconSwapIn, iconSwapOut, inkButton, labelSwap, labelSwapIn, labelSwapOut, live, mono, paper, pressable } from "./surfaces.js";
2
+ import { ActivityGraph } from "./activity-graph.js";
3
+ import { AgentCard } from "./agent-card.js";
4
+ import { AgentHandoff } from "./agent-handoff.js";
5
+ import { AGENT_MODES, AGENT_MODE_DESCRIPTIONS, AGENT_MODE_LABELS, ANNOUNCEMENTS, CLAMP_LABELS, COMPACTION_LABELS, COMPACTION_STATES, CONTEXT_CATEGORY_LABELS, CONTEXT_LABELS, CONTEXT_STAT_LABELS, PERMISSION_LABELS, PERMISSION_SCOPE_LABELS, QUEUE_LABELS, REVERT_LABELS, REVERT_SCOPES, REVERT_SCOPE_DESCRIPTIONS, REVERT_SCOPE_LABELS, RISK_LABELS, SECURITY_RISKS, TAIL_ACTIONS, TURN_ACTION_LABELS, VERB_TRIADS, VERDICT_LABELS, verbFor } from "./vocabulary.js";
6
+ import { AgentModeBadge } from "./agent-mode-badge.js";
7
+ import { at, clamp, indexIn, pct, progressOf, take } from "./range.js";
8
+ import { AgentPlan } from "./agent-plan.js";
9
+ import { AgentStatus } from "./agent-status.js";
10
+ import { AgentSurface } from "./agent-surface.js";
11
+ import { AnimatedNumber, formatCompactNumber } from "./animated-number.js";
12
+ import { ApprovalCard } from "./approval-card.js";
13
+ import { ArtifactCard } from "./artifact-card.js";
14
+ import { BackgroundInbox } from "./background-inbox.js";
15
+ import { CanvasSplit, CanvasSplitBody, CanvasSplitDocument, CanvasSplitHeader, CanvasSplitLine, CanvasSplitMessage, CanvasSplitThread } from "./canvas-split.js";
16
+ import { Chart } from "./chart.js";
17
+ import { ChatPanel, ChatPanelAssistantMessage, ChatPanelComposer, ChatPanelMessages, ChatPanelTyping, ChatPanelUserMessage } from "./chat-panel.js";
18
+ import { CheckpointHistory } from "./checkpoint-history.js";
19
+ import { Clamp } from "./clamp.js";
20
+ import { CodeDiff } from "./code-diff.js";
21
+ import { CodeRunner } from "./code-runner.js";
22
+ import { ElementsCommandPalette } from "./command-palette.js";
23
+ import { CompactionRow } from "./compaction-row.js";
24
+ import { ComparisonCard } from "./comparison-card.js";
25
+ import { ComposerActions, ComposerAttachButton, ComposerAttachmentChip, ComposerAttachments, ComposerBar, ComposerCommandItem, ComposerContext, ComposerInput, ComposerMenu, ComposerMenuItem, ComposerModelItem, ComposerModelTrigger, ComposerPersonItem, ComposerSend, ComposerToolbar, ComposerVoice, ComposerVoiceButton, ElementsComposer, applyMention, useMentionMatches, useSlashMatches } from "./composer.js";
26
+ import { ComputerUse } from "./computer-use.js";
27
+ import { ConfidenceMarker } from "./confidence-marker.js";
28
+ import { ConnectionState } from "./connection-state.js";
29
+ import { ContextBreakdown } from "./context-breakdown.js";
30
+ import { ContextUsage } from "./context-usage.js";
31
+ import { ConversationSearch } from "./conversation-search.js";
32
+ import { CostMeter } from "./cost-meter.js";
33
+ import { ElementsDataTable } from "./data-table.js";
34
+ import { DaySeparator } from "./day-separator.js";
35
+ import { Diagram } from "./diagram.js";
36
+ import { DocumentReference } from "./document-reference.js";
37
+ import { DraftRestore } from "./draft-restore.js";
38
+ import { EditMessage } from "./edit-message.js";
39
+ import { ElicitationForm } from "./elicitation-form.js";
40
+ import { ChatEmptyState, EmptyStateComposer, EmptyStateGreeting, EmptyStateSuggestion, EmptyStateSuggestions } from "./empty-state.js";
41
+ import { EndOfTurnSummary, formatChangeSummary } from "./end-of-turn-summary.js";
42
+ import { ErrorState } from "./error-state.js";
43
+ import { FeedbackDialog } from "./feedback-dialog.js";
44
+ import { FileTree } from "./file-tree.js";
45
+ import { FlowGraph } from "./flow-graph.js";
46
+ import { GuardrailNotice } from "./guardrail-notice.js";
47
+ import { ImageGeneration } from "./image-generation.js";
48
+ import { InlineCitation } from "./inline-citation.js";
49
+ import { JobProgress } from "./job-progress.js";
50
+ import { LauncherBubble } from "./launcher-bubble.js";
51
+ import { LiveRegionAnnouncer, useAnnouncerPresent } from "./live-region-announcer.js";
52
+ import { GenerationLoader } from "./loading-state.js";
53
+ import { MapAnswer } from "./map-answer.js";
54
+ import { Frac, MathBlock, Sub, Sup } from "./math-block.js";
55
+ import { McpServerPanel } from "./mcp-server-panel.js";
56
+ import { MemoryChips } from "./memory-chips.js";
57
+ import { MessageActions } from "./message-actions.js";
58
+ import { MessageAttachments } from "./message-attachment.js";
59
+ import { MessageBranches } from "./message-branches.js";
60
+ import { MessagePair } from "./message-pair.js";
61
+ import { MessageQueue } from "./message-queue.js";
62
+ import { MessageTiming } from "./message-timing.js";
63
+ import { MobileComposer } from "./mobile-composer.js";
64
+ import { ModelPicker } from "./model-picker.js";
65
+ import { NumberTicker } from "./number-ticker.js";
66
+ import { Onboarding } from "./onboarding.js";
67
+ import { PermissionGrant } from "./permission-grant.js";
68
+ import { PermissionScopes, formatAlwaysAllow } from "./permission-scopes.js";
69
+ import { PromptLibrary } from "./prompt-library.js";
70
+ import { QueueDock, formatQueueSummary } from "./queue-dock.js";
71
+ import { QuotaBanner } from "./quota-banner.js";
72
+ import { QuoteReply } from "./quote-reply.js";
73
+ import { ReadAloud } from "./read-aloud.js";
74
+ import { ReasoningEffort } from "./reasoning-effort.js";
75
+ import { ReasoningPanel } from "./reasoning-panel.js";
76
+ import { RecommendationCard } from "./recommendation-card.js";
77
+ import { RegenerateMenu } from "./regenerate-menu.js";
78
+ import { ResearchReport } from "./research-report.js";
79
+ import { RetrievalChunks } from "./retrieval-chunks.js";
80
+ import { RevertDock, formatRevertSummary } from "./revert-dock.js";
81
+ import { ReviewableDiff } from "./reviewable-diff.js";
82
+ import { RiskBadge } from "./risk-badge.js";
83
+ import { ScheduleCard } from "./schedule-card.js";
84
+ import { ScoreBreakdown } from "./score-breakdown.js";
85
+ import { ScrollAnchor } from "./scroll-anchor.js";
86
+ import { SettingsPanel } from "./settings-panel.js";
87
+ import { SharedConversation } from "./shared-conversation.js";
88
+ import { Sources } from "./sources.js";
89
+ import { SpeakerIdentity } from "./speaker-identity.js";
90
+ import { SpecSheet } from "./spec-sheet.js";
91
+ import { StoppedRun } from "./stopped-run.js";
92
+ import { StreamingText } from "./streaming-text.js";
93
+ import { SubagentList } from "./subagent-list.js";
94
+ import { Suggestions } from "./suggestions.js";
95
+ import { TailStatus } from "./tail-status.js";
96
+ import { TerminalBlock } from "./terminal-block.js";
97
+ import { ThinkingIndicator } from "./thinking-indicator.js";
98
+ import { ThreadList } from "./thread-list.js";
99
+ import { ThreadSearch } from "./thread-search.js";
100
+ import { ElementsTimeline } from "./timeline.js";
101
+ import { TodoList } from "./todo-list.js";
102
+ import { ToolCall } from "./tool-call.js";
103
+ import { ToolError } from "./tool-error.js";
104
+ import { ToolGroup } from "./tool-group.js";
105
+ import { ToolTimeline } from "./tool-timeline.js";
106
+ import { TraceWaterfall } from "./trace-waterfall.js";
107
+ import { TimeBoundary, UnreadDivider } from "./transcript-rules.js";
108
+ import { TurnFooter } from "./turn-footer.js";
109
+ import { TypingIndicator } from "./typing-indicator.js";
110
+ import { VerdictRow, verdictStars } from "./verdict-row.js";
111
+ import { VoiceConversation } from "./voice-conversation.js";
112
+ import { WebPreview } from "./web-preview.js";
113
+ import { WebSearch } from "./web-search.js";
114
+ import { WorkCollapse, formatWorkDuration, formatWorkLabel } from "./work-collapse.js";
115
+ export { AGENT_MODES, AGENT_MODE_DESCRIPTIONS, AGENT_MODE_LABELS, ANNOUNCEMENTS, ActivityGraph, AgentCard, AgentHandoff, AgentModeBadge, AgentPlan, AgentStatus, AgentSurface, AnimatedNumber, ApprovalCard, ArtifactCard, BackgroundInbox, CLAMP_LABELS, COMPACTION_LABELS, COMPACTION_STATES, CONTEXT_CATEGORY_LABELS, CONTEXT_LABELS, CONTEXT_STAT_LABELS, CanvasSplit, CanvasSplitBody, CanvasSplitDocument, CanvasSplitHeader, CanvasSplitLine, CanvasSplitMessage, CanvasSplitThread, Chart, ChatEmptyState, ChatPanel, ChatPanelAssistantMessage, ChatPanelComposer, ChatPanelMessages, ChatPanelTyping, ChatPanelUserMessage, CheckpointHistory, Clamp, CodeDiff, CodeRunner, CompactionRow, ComparisonCard, ComposerActions, ComposerAttachButton, ComposerAttachmentChip, ComposerAttachments, ComposerBar, ComposerCommandItem, ComposerContext, ComposerInput, ComposerMenu, ComposerMenuItem, ComposerModelItem, ComposerModelTrigger, ComposerPersonItem, ComposerSend, ComposerToolbar, ComposerVoice, ComposerVoiceButton, ComputerUse, ConfidenceMarker, ConnectionState, ContextBreakdown, ContextUsage, ConversationSearch, CostMeter, DaySeparator, Diagram, DocumentReference, DraftRestore, EditMessage, ElementsCommandPalette, ElementsComposer, ElementsDataTable, ElementsTimeline, ElicitationForm, EmptyStateComposer, EmptyStateGreeting, EmptyStateSuggestion, EmptyStateSuggestions, EndOfTurnSummary, ErrorState, FeedbackDialog, FileTree, FlowGraph, Frac, GenerationLoader, GuardrailNotice, ImageGeneration, InlineCitation, JobProgress, LauncherBubble, LiveRegionAnnouncer, MapAnswer, MathBlock, McpServerPanel, MemoryChips, MessageActions, MessageAttachments, MessageBranches, MessagePair, MessageQueue, MessageTiming, MobileComposer, ModelPicker, NumberTicker, Onboarding, PERMISSION_LABELS, PERMISSION_SCOPE_LABELS, PermissionGrant, PermissionScopes, PromptLibrary, QUEUE_LABELS, QueueDock, QuotaBanner, QuoteReply, REVERT_LABELS, REVERT_SCOPES, REVERT_SCOPE_DESCRIPTIONS, REVERT_SCOPE_LABELS, RISK_LABELS, ReadAloud, ReasoningEffort, ReasoningPanel, RecommendationCard, RegenerateMenu, ResearchReport, RetrievalChunks, RevertDock, ReviewableDiff, RiskBadge, SECURITY_RISKS, ScheduleCard, ScoreBreakdown, ScrollAnchor, SettingsPanel, SharedConversation, ShimmerLabel, Sources, SpeakerIdentity, SpecSheet, StoppedRun, StreamingText, Sub, SubagentList, Suggestions, Sup, SwapLabel, TAIL_ACTIONS, TURN_ACTION_LABELS, TailStatus, TerminalBlock, ThinkingIndicator, ThreadList, ThreadSearch, TimeBoundary, TodoList, ToolCall, ToolError, ToolGroup, ToolTimeline, TraceWaterfall, TurnFooter, TypingIndicator, UnreadDivider, VERB_TRIADS, VERDICT_LABELS, VerdictRow, VoiceConversation, WebPreview, WebSearch, WorkCollapse, applyMention, at, clamp, codeScroll, codeSurface, collapsePanel, field, fieldInteractive, floating, formatAlwaysAllow, formatChangeSummary, formatCompactNumber, formatQueueSummary, formatRevertSummary, formatWorkDuration, formatWorkLabel, ghostButton, iconSwap, iconSwapIn, iconSwapOut, indexIn, inkButton, labelSwap, labelSwapIn, labelSwapOut, live, mono, paper, pct, pressable, progressOf, take, useAnnouncerPresent, useMentionMatches, useSlashMatches, verbFor, verdictStars };
@@ -0,0 +1,43 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/inline-citation.d.ts
3
+ /**
4
+ * A source behind one marker in a sentence, with the passage its hover card shows.
5
+ * Named apart from `sources.tsx`'s `Source` because the family cannot publish two.
6
+ */
7
+ interface CitationSource {
8
+ /** The site, as a bare host. Its first letter is the preview card's monogram. */
9
+ domain: string;
10
+ /** The page's own title, set as the preview card's heading. */
11
+ title: string;
12
+ /** The passage the claim rests on, at the length a 16rem card can hold. */
13
+ snippet: string;
14
+ }
15
+ interface InlineCitationProps extends Omit<ComponentProps<"p">, "children"> {
16
+ /** Sources attached to the numbered reference markers in the sentence. */
17
+ sources: CitationSource[];
18
+ /** Which citation preview is open, or null when none is open. */
19
+ openIndex: number | null;
20
+ /** Called when a citation marker opens or closes its preview. */
21
+ onOpenIndexChange: (index: number | null) => void;
22
+ }
23
+ /**
24
+ * Numbered references inside a sentence, each with a hover preview of its source.
25
+ *
26
+ * @example
27
+ * import { InlineCitation } from "@cueplusplus/ui/elements";
28
+ *
29
+ * <InlineCitation
30
+ * sources={[
31
+ * {
32
+ * domain: "docs.example.com",
33
+ * title: "Optimistic updates",
34
+ * snippet: "Confirm writes after paint.",
35
+ * },
36
+ * ]}
37
+ * openIndex={0}
38
+ * onOpenIndexChange={setOpenIndex}
39
+ * />
40
+ */
41
+ declare function InlineCitation({ sources, openIndex, onOpenIndexChange, className, ...props }: InlineCitationProps): import("react").JSX.Element;
42
+ //#endregion
43
+ export { CitationSource, InlineCitation, InlineCitationProps };
@@ -0,0 +1,93 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { useCuePortalProps } from "../system/portal.js";
4
+ import { floating, mono } from "./surfaces.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { PreviewCard } from "@base-ui/react/preview-card";
7
+ //#region src/elements/inline-citation.tsx
8
+ function Citation({ index, source, open, onOpenChange }) {
9
+ const portalProps = useCuePortalProps();
10
+ return /* @__PURE__ */ jsxs(PreviewCard.Root, {
11
+ open,
12
+ onOpenChange,
13
+ children: [/* @__PURE__ */ jsx(PreviewCard.Trigger, {
14
+ delay: 0,
15
+ render: /* @__PURE__ */ jsx("button", { type: "button" }),
16
+ className: cn("mx-0.5 inline-flex h-4 min-w-4 translate-y-[-2px] cursor-default items-center justify-center rounded-(--radius-control) px-1 align-middle font-mono text-(length:--cue-text-micro) font-medium tabular-nums transition-colors", open ? "bg-accent text-accent-fg" : "bg-surface-2 text-fg-muted hover:text-fg"),
17
+ children: index + 1
18
+ }), /* @__PURE__ */ jsx(PreviewCard.Portal, {
19
+ ...portalProps,
20
+ children: /* @__PURE__ */ jsx(PreviewCard.Positioner, {
21
+ side: "top",
22
+ sideOffset: 8,
23
+ children: /* @__PURE__ */ jsxs(PreviewCard.Popup, {
24
+ className: cn(floating, "z-50 w-64 origin-(--transform-origin) rounded-(--radius-overlay) p-3.5 outline-none", "transition-[opacity,scale] duration-200 ease-[cubic-bezier(0.23,1,0.32,1)] motion-reduce:transition-none", "data-[starting-style]:scale-[0.97] data-[starting-style]:opacity-0", "data-[ending-style]:scale-[0.97] data-[ending-style]:opacity-0"),
25
+ children: [
26
+ /* @__PURE__ */ jsxs("div", {
27
+ className: "flex items-center gap-1.5",
28
+ children: [/* @__PURE__ */ jsx("span", {
29
+ className: "bg-surface-2 text-fg-muted flex size-4 items-center justify-center rounded-(--radius-control) text-(length:--cue-text-micro) font-medium",
30
+ children: source.domain[0]?.toUpperCase()
31
+ }), /* @__PURE__ */ jsx("span", {
32
+ className: cn(mono, "text-fg-subtle"),
33
+ children: source.domain
34
+ })]
35
+ }),
36
+ /* @__PURE__ */ jsx("p", {
37
+ className: "mt-2 text-(length:--cue-text-body) leading-snug font-medium",
38
+ children: source.title
39
+ }),
40
+ /* @__PURE__ */ jsx("p", {
41
+ className: "text-fg-muted mt-1 text-(length:--cue-text-body) leading-relaxed",
42
+ children: source.snippet
43
+ })
44
+ ]
45
+ })
46
+ })
47
+ })]
48
+ });
49
+ }
50
+ /**
51
+ * Numbered references inside a sentence, each with a hover preview of its source.
52
+ *
53
+ * @example
54
+ * import { InlineCitation } from "@cueplusplus/ui/elements";
55
+ *
56
+ * <InlineCitation
57
+ * sources={[
58
+ * {
59
+ * domain: "docs.example.com",
60
+ * title: "Optimistic updates",
61
+ * snippet: "Confirm writes after paint.",
62
+ * },
63
+ * ]}
64
+ * openIndex={0}
65
+ * onOpenIndexChange={setOpenIndex}
66
+ * />
67
+ */
68
+ function InlineCitation({ sources, openIndex, onOpenIndexChange, className, ...props }) {
69
+ return /* @__PURE__ */ jsxs("p", {
70
+ "data-slot": "inline-citation",
71
+ className: cn("text-fg max-w-sm text-(length:--cue-text-body) leading-relaxed", className),
72
+ ...props,
73
+ children: [
74
+ "Optimistic updates keep the thread responsive while the server confirms the write",
75
+ sources[0] && /* @__PURE__ */ jsx(Citation, {
76
+ index: 0,
77
+ source: sources[0],
78
+ open: openIndex === 0,
79
+ onOpenChange: (open) => onOpenIndexChange(open ? 0 : null)
80
+ }),
81
+ ". The store already exposes a consistent snapshot for every subscriber",
82
+ sources[1] && /* @__PURE__ */ jsx(Citation, {
83
+ index: 1,
84
+ source: sources[1],
85
+ open: openIndex === 1,
86
+ onOpenChange: (open) => onOpenIndexChange(open ? 1 : null)
87
+ }),
88
+ ", so no extra reconciliation pass is needed."
89
+ ]
90
+ });
91
+ }
92
+ //#endregion
93
+ export { InlineCitation };
@@ -0,0 +1,49 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/job-progress.d.ts
3
+ /** One named stage of a long job, and how much of the whole it accounts for. */
4
+ interface JobStage {
5
+ /** What the stage is called. Shown in the stage row, and the row's key. */
6
+ name: string;
7
+ /**
8
+ * How much of the job this stage is worth. The weights are summed and the bar is
9
+ * filled from them, so a job whose stages are not equal reads honestly — no unit is
10
+ * implied and they need not add to anything in particular.
11
+ */
12
+ weight: number;
13
+ }
14
+ /**
15
+ * Work measured in minutes: weighted stages, an ETA, and a way out.
16
+ *
17
+ * @example
18
+ * import { JobProgress } from "@cueplusplus/ui/elements";
19
+ *
20
+ * <JobProgress
21
+ * title="Verify the fix on CI"
22
+ * stages={stages}
23
+ * stageIndex={1}
24
+ * stageProgress={0.6}
25
+ * eta="about 3 min"
26
+ * />
27
+ */
28
+ declare function JobProgress({ title, stages, stageIndex, stageProgress, eta, onCancel, className, ...props }: Omit<ComponentProps<"div">, "children" | "title" | "stages" | "stageIndex" | "stageProgress" | "eta" | "onCancel"> & {
29
+ /** What the job is doing. */
30
+ title: string;
31
+ /**
32
+ * Stages with relative weights, so a long install does not read the same as a fast
33
+ * clone.
34
+ */
35
+ stages: readonly JobStage[];
36
+ /**
37
+ * Which stage is running. Passing stages.length marks the job finished, and the bar
38
+ * never runs past its track.
39
+ */
40
+ stageIndex: number;
41
+ /** Progress inside the current stage, 0 to 1. */
42
+ stageProgress: number;
43
+ /** Pre-formatted estimate. Replaced by done once finished. */
44
+ eta: string;
45
+ /** Called to stop the job. Hidden once it finishes. */
46
+ onCancel?: () => void;
47
+ }): import("react").JSX.Element;
48
+ //#endregion
49
+ export { JobProgress, JobStage };
@@ -0,0 +1,74 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { mono, paper } from "./surfaces.js";
4
+ import { clamp, pct, progressOf, take } from "./range.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { CheckIcon, Loader2Icon, XIcon } from "lucide-react";
7
+ //#region src/elements/job-progress.tsx
8
+ /**
9
+ * Work measured in minutes: weighted stages, an ETA, and a way out.
10
+ *
11
+ * @example
12
+ * import { JobProgress } from "@cueplusplus/ui/elements";
13
+ *
14
+ * <JobProgress
15
+ * title="Verify the fix on CI"
16
+ * stages={stages}
17
+ * stageIndex={1}
18
+ * stageProgress={0.6}
19
+ * eta="about 3 min"
20
+ * />
21
+ */
22
+ function JobProgress({ title, stages, stageIndex, stageProgress, eta, onCancel, className, ...props }) {
23
+ const stage = progressOf(stageIndex, stages.length);
24
+ const progress = clamp(stageProgress, 0, 1);
25
+ const totalWeight = stages.reduce((sum, item) => sum + item.weight, 0) || 1;
26
+ const completed = take(stages, stage).reduce((sum, item) => sum + item.weight, 0);
27
+ const current = stages[stage];
28
+ const overall = pct(completed + (current ? current.weight * progress : 0), totalWeight);
29
+ const finished = stage >= stages.length;
30
+ return /* @__PURE__ */ jsxs("div", {
31
+ "data-slot": "job-progress",
32
+ className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-4", className),
33
+ ...props,
34
+ children: [
35
+ /* @__PURE__ */ jsxs("div", {
36
+ className: "flex items-center gap-2.5",
37
+ children: [
38
+ finished ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5 shrink-0 text-ok" }) : /* @__PURE__ */ jsx(Loader2Icon, { className: "text-fg-subtle size-3.5 shrink-0 animate-spin motion-reduce:animate-none" }),
39
+ /* @__PURE__ */ jsx("span", {
40
+ className: "min-w-0 flex-1 truncate text-(length:--cue-text-body) font-medium",
41
+ children: title
42
+ }),
43
+ /* @__PURE__ */ jsx("span", {
44
+ className: cn(mono, "text-fg-subtle shrink-0 tabular-nums"),
45
+ children: finished ? "done" : eta
46
+ }),
47
+ !finished && /* @__PURE__ */ jsx("button", {
48
+ type: "button",
49
+ "aria-label": "Cancel the job",
50
+ onClick: onCancel,
51
+ className: cn("flex items-center justify-center rounded-full text-fg-muted outline-none transition-[background-color,color,scale] duration-150 hover:bg-surface-2 hover:text-fg active:scale-[0.96] focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent motion-reduce:transition-none", "size-6 shrink-0"),
52
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-3.5" })
53
+ })
54
+ ]
55
+ }),
56
+ /* @__PURE__ */ jsx("span", {
57
+ className: "bg-surface-2 h-1 w-full overflow-hidden rounded-full",
58
+ children: /* @__PURE__ */ jsx("span", {
59
+ className: cn("block h-full rounded-full transition-[width] duration-500 ease-out motion-reduce:transition-none", finished ? "bg-ok" : "bg-stream"),
60
+ style: { width: `${overall}%` }
61
+ })
62
+ }),
63
+ /* @__PURE__ */ jsx("div", {
64
+ className: "flex flex-wrap gap-x-3 gap-y-1",
65
+ children: stages.map((item, i) => /* @__PURE__ */ jsx("span", {
66
+ className: cn(mono, i < stage ? "text-fg-subtle" : i === stage ? "text-fg" : "text-fg-subtle"),
67
+ children: item.name
68
+ }, item.name))
69
+ })
70
+ ]
71
+ });
72
+ }
73
+ //#endregion
74
+ export { JobProgress };
@@ -0,0 +1,34 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/elements/launcher-bubble.d.ts
3
+ /**
4
+ * The floating entry point, and the panel it opens into.
5
+ *
6
+ * @example
7
+ * import { LauncherBubble } from "@cueplusplus/ui/elements";
8
+ *
9
+ * <LauncherBubble
10
+ * open={open}
11
+ * unread={2}
12
+ * greeting="Need a hand?"
13
+ * prompts={prompts}
14
+ * onToggle={toggle}
15
+ * />
16
+ */
17
+ declare function LauncherBubble({ open, unread, greeting, prompts, onToggle, onPick, onStart, className, ...props }: Omit<ComponentProps<"div">, "children" | "open" | "unread" | "greeting" | "prompts" | "onToggle" | "onPick" | "onStart"> & {
18
+ /** Whether the panel is showing. The trigger icon crossfades either way. */
19
+ open: boolean;
20
+ /** Badge count on the closed bubble. Hidden at zero and while open. */
21
+ unread: number;
22
+ /** Opening line in the panel. */
23
+ greeting: string;
24
+ /** Ways in, so the first message does not have to be invented. */
25
+ prompts: readonly string[];
26
+ /** Called when the bubble is pressed. */
27
+ onToggle?: () => void;
28
+ /** Called when a starter prompt is chosen. */
29
+ onPick?: (prompt: string) => void;
30
+ /** Called from the Start a conversation action, for opening an empty thread. */
31
+ onStart?: () => void;
32
+ }): import("react").JSX.Element;
33
+ //#endregion
34
+ export { LauncherBubble };
@@ -0,0 +1,72 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { inkButton } from "./surfaces.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { MessageCircleIcon, XIcon } from "lucide-react";
6
+ //#region src/elements/launcher-bubble.tsx
7
+ /**
8
+ * The floating entry point, and the panel it opens into.
9
+ *
10
+ * @example
11
+ * import { LauncherBubble } from "@cueplusplus/ui/elements";
12
+ *
13
+ * <LauncherBubble
14
+ * open={open}
15
+ * unread={2}
16
+ * greeting="Need a hand?"
17
+ * prompts={prompts}
18
+ * onToggle={toggle}
19
+ * />
20
+ */
21
+ function LauncherBubble({ open, unread, greeting, prompts, onToggle, onPick, onStart, className, ...props }) {
22
+ return /* @__PURE__ */ jsxs("div", {
23
+ "data-slot": "launcher-bubble",
24
+ className: cn("flex w-full max-w-[19rem] flex-col items-end gap-2.5", className),
25
+ ...props,
26
+ children: [open && /* @__PURE__ */ jsxs("div", {
27
+ className: cn("bg-surface-2 border border-border-overlay", "cue-elements-fade-in cue-elements-zoom-in-95 cue-elements-slide-in-from-bottom-2 cue-elements-animate-in flex w-full flex-col gap-3 rounded-(--radius-overlay) p-4 duration-200"),
28
+ children: [
29
+ /* @__PURE__ */ jsxs("div", {
30
+ className: "flex flex-col gap-1",
31
+ children: [/* @__PURE__ */ jsx("span", {
32
+ className: "text-(length:--cue-text-body) font-medium",
33
+ children: greeting
34
+ }), /* @__PURE__ */ jsx("span", {
35
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle"),
36
+ children: "typically replies in a minute"
37
+ })]
38
+ }),
39
+ /* @__PURE__ */ jsx("div", {
40
+ className: "flex flex-col gap-1.5",
41
+ children: prompts.map((prompt) => /* @__PURE__ */ jsx("button", {
42
+ type: "button",
43
+ onClick: () => onPick?.(prompt),
44
+ className: cn("bg-fg/[0.06]", "hover:bg-surface-2 text-fg-muted rounded-(--radius-surface) px-3 py-2 text-start text-(length:--cue-text-body) transition-colors"),
45
+ children: prompt
46
+ }, prompt))
47
+ }),
48
+ /* @__PURE__ */ jsx("button", {
49
+ type: "button",
50
+ onClick: onStart,
51
+ className: cn("bg-accent text-accent-fg transition-[background-color,scale] duration-150 ease-[cubic-bezier(0.23,1,0.32,1)] hover:bg-accent-hover active:scale-[0.96] motion-reduce:transition-none", "flex h-8 items-center justify-center rounded-full text-(length:--cue-text-ui) font-medium"),
52
+ children: "Start a conversation"
53
+ })
54
+ ]
55
+ }), /* @__PURE__ */ jsxs("button", {
56
+ type: "button",
57
+ "aria-expanded": open,
58
+ "aria-label": open ? "Close the assistant" : "Open the assistant",
59
+ onClick: onToggle,
60
+ className: cn(inkButton, "relative flex size-12 shrink-0 items-center justify-center rounded-full"),
61
+ children: [/* @__PURE__ */ jsxs("span", {
62
+ className: "grid",
63
+ children: [/* @__PURE__ */ jsx(MessageCircleIcon, { className: cn("size-5 transition-[opacity,rotate] duration-200 [grid-area:1/1]", open && "rotate-90 opacity-0") }), /* @__PURE__ */ jsx(XIcon, { className: cn("size-5 transition-[opacity,rotate] duration-200 [grid-area:1/1]", !open && "-rotate-90 opacity-0") })]
64
+ }), unread > 0 && !open && /* @__PURE__ */ jsx("span", {
65
+ className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "bg-bg text-fg absolute -top-0.5 -right-0.5 flex size-4 items-center justify-center rounded-full tabular-nums"),
66
+ children: unread
67
+ })]
68
+ })]
69
+ });
70
+ }
71
+ //#endregion
72
+ export { LauncherBubble };
@@ -0,0 +1,130 @@
1
+ import * as React from "react";
2
+ //#region src/elements/live-region-announcer.d.ts
3
+ /**
4
+ * Whether a {@link LiveRegionAnnouncer} is mounted and will do the speaking.
5
+ *
6
+ * The hook behind this family's one-speaker rule: an announcer and a
7
+ * `TailStatus` in the same console would otherwise narrate the same run twice,
8
+ * so the row asks this and goes quiet. Exported because a console with a status
9
+ * row of its own owes a reader the same courtesy — ask before becoming a second
10
+ * live region.
11
+ *
12
+ * @returns `true` while at least one announcer is mounted anywhere in the page.
13
+ * @example
14
+ * const spokenFor = useAnnouncerPresent();
15
+ * <div role={spokenFor ? undefined : "status"}>{action}</div>
16
+ */
17
+ declare function useAnnouncerPresent(): boolean;
18
+ interface LiveRegionAnnouncerProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children"> {
19
+ /**
20
+ * The log of things worth saying, oldest first. Everything that arrives at
21
+ * the end of it after the announcer last looked is queued and read out in
22
+ * order.
23
+ *
24
+ * An **append-only** list: the announcer remembers how much of it it has
25
+ * seen, so a list that is trimmed at the head loses the announcements that
26
+ * were trimmed with it. Keep the run's log growing, or remount the announcer
27
+ * with a new `key` when you start a new one.
28
+ */
29
+ messages: readonly string[];
30
+ /**
31
+ * Milliseconds between announcements. Defaults to `400`, the reference's own
32
+ * spacing, which is roughly how long a short phrase takes to speak.
33
+ *
34
+ * This is the whole point of the component: a polite announcement that
35
+ * arrives while another is being spoken replaces it, so an unspaced queue is
36
+ * a queue most of which is never heard.
37
+ */
38
+ spacing?: number;
39
+ /**
40
+ * How many announcements may wait at once. Defaults to `5`, and the **oldest**
41
+ * are dropped past it — five deep behind a busy run, the newest is the true
42
+ * one and the backlog is history.
43
+ */
44
+ depth?: number;
45
+ /**
46
+ * Hold everything without dropping it: a modal is open, or the surface is
47
+ * behind something a reader is working in. The queue drains from where it
48
+ * stopped when this goes back to `false`.
49
+ *
50
+ * A prop rather than an internal ref-count of open overlays, deliberately:
51
+ * this library has its own portal and overlay contract, and an announcer with
52
+ * a second opinion about what is on screen would be wrong exactly when it
53
+ * mattered.
54
+ */
55
+ paused?: boolean;
56
+ /**
57
+ * Announce the messages that are already in the list at mount. Defaults to
58
+ * `false` — the reference's "skip the first observation" guard, and the
59
+ * reason restoring a session does not read the whole transcript aloud.
60
+ *
61
+ * The pause rules still hold over it: a backlog handed to an announcer that
62
+ * mounts into a hidden tab, or with `paused` already set, waits there rather
63
+ * than spending its first line. Restoring a session into a background tab is
64
+ * the case, and it is the one the rules exist for.
65
+ */
66
+ announceOnMount?: boolean;
67
+ }
68
+ /**
69
+ * One polite region, and a queue that makes it audible.
70
+ *
71
+ * The element in this family with no visual design at all, and the one that
72
+ * decides whether the rest of it can be used without a screen. An agent
73
+ * transcript is a stream of state changes, and the naive wiring — an
74
+ * `aria-live` region bound to the current status — announces almost none of
75
+ * them: polite announcements replace each other, so a region updated four times
76
+ * a second speaks once and swallows the rest.
77
+ *
78
+ * So this is a queue with four rules, all of them the reference's:
79
+ *
80
+ * - **Spacing.** One announcement every `spacing` milliseconds, so each is
81
+ * spoken instead of overwritten.
82
+ * - **Depth, oldest dropped.** A backlog behind a busy run is history; the
83
+ * newest five are what a reader needs.
84
+ * - **Paused while the page is hidden**, so a background tab does not read a
85
+ * run out over whatever the reader is actually doing, and paused on demand
86
+ * through `paused` while a modal has their attention. Both are in force from
87
+ * the first render rather than the first effect, so an announcer mounted into
88
+ * a hidden tab with a backlog does not spend a line of it learning where it
89
+ * is.
90
+ * - **The trailing space.** A screen reader ignores a live region set to the
91
+ * text it already holds; the same message twice is announced twice by
92
+ * appending a space to the second, which changes the string without changing
93
+ * a word of it.
94
+ *
95
+ * The region itself is mounted empty and stays mounted. A live region added to
96
+ * the document at the same moment as its text is a region most assistive
97
+ * technologies never announce, which is the most common way this fails in
98
+ * practice.
99
+ *
100
+ * What to say is the caller's: {@link ANNOUNCEMENTS} carries the nine
101
+ * transitions the study found announced, as templates a console can extend or
102
+ * translate.
103
+ *
104
+ * **It is the surface's one speaker.** `TailStatus` is a `role="status"` too,
105
+ * and a console that mounts both — which is the ordinary shape of an agent
106
+ * console — would have every state read out twice. So mounting this hands the
107
+ * speaking to it: a `TailStatus` anywhere on the page notices (through
108
+ * {@link useAnnouncerPresent}) and renders as an ordinary row, keeping its words
109
+ * on the screen and taking them out of the accessibility tree. Feed this the
110
+ * transitions that row would have narrated, or set `announce` on the row to
111
+ * decide the other way.
112
+ *
113
+ * @example
114
+ * import { ANNOUNCEMENTS, LiveRegionAnnouncer } from "@cueplusplus/ui/elements";
115
+ *
116
+ * // One per surface, mounted for the life of the transcript.
117
+ * <LiveRegionAnnouncer messages={log} paused={dialogOpen} />
118
+ * @example
119
+ * // Composed with the transcript's live row: the row draws, this one speaks.
120
+ * <>
121
+ * <TailStatus action={TAIL_ACTIONS.searchingCode} detail="composer.tsx" />
122
+ * <LiveRegionAnnouncer messages={log} />
123
+ * </>
124
+ * @example
125
+ * // The log is a caller's append-only list of what happened.
126
+ * setLog((was) => [...was, ANNOUNCEMENTS.working]);
127
+ */
128
+ declare const LiveRegionAnnouncer: React.ForwardRefExoticComponent<LiveRegionAnnouncerProps & React.RefAttributes<HTMLDivElement>>;
129
+ //#endregion
130
+ export { LiveRegionAnnouncer, LiveRegionAnnouncerProps, useAnnouncerPresent };