@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
@@ -21,8 +21,11 @@ const THEME_COLOR_TOKENS = [
21
21
  "ok",
22
22
  "busy",
23
23
  "warn",
24
+ "warn-fg",
24
25
  "danger",
26
+ "danger-fg",
25
27
  "info",
28
+ "stream",
26
29
  "selection",
27
30
  "focus",
28
31
  "data-ground",
@@ -46,11 +49,14 @@ const THEME_PRESETS = {
46
49
  "accent": "#ffffff",
47
50
  "accent-hover": "rgba(255,255,255,0.85)",
48
51
  "accent-fg": "#0a0a0a",
49
- "ok": "#ffffff",
50
- "busy": "#ffffff",
51
- "warn": "#ffffff",
52
+ "ok": "oklch(0.72 0.17 149)",
53
+ "busy": "oklch(0.78 0.13 220)",
54
+ "warn": "oklch(0.8 0.17 75)",
55
+ "warn-fg": "#000000",
52
56
  "danger": "#ff5f57",
53
- "info": "#ffffff",
57
+ "danger-fg": "#000000",
58
+ "info": "oklch(0.75 0.12 252)",
59
+ "stream": "oklch(0.707 0.165 254.624)",
54
60
  "selection": "rgba(255,255,255,0.20)",
55
61
  "focus": "#ffffff",
56
62
  "data-ground": "#000000",
@@ -71,11 +77,14 @@ const THEME_PRESETS = {
71
77
  "accent": "#0a0a0a",
72
78
  "accent-hover": "rgba(0,0,0,0.85)",
73
79
  "accent-fg": "#fcfcfc",
74
- "ok": "#0a0a0a",
75
- "busy": "#0a0a0a",
76
- "warn": "#0a0a0a",
80
+ "ok": "oklch(0.53 0.14 149)",
81
+ "busy": "oklch(0.54 0.1 225)",
82
+ "warn": "oklch(0.55 0.115 70)",
83
+ "warn-fg": "#fcfcfc",
77
84
  "danger": "#d03030",
78
- "info": "#0a0a0a",
85
+ "danger-fg": "#fcfcfc",
86
+ "info": "oklch(0.55 0.16 258)",
87
+ "stream": "oklch(0.55 0.21 259.815)",
79
88
  "selection": "rgba(0,0,0,0.20)",
80
89
  "focus": "#0a0a0a",
81
90
  "data-ground": "#000000",
@@ -102,8 +111,11 @@ const THEME_PRESETS = {
102
111
  "ok": "hsl(142 76% 50%)",
103
112
  "busy": "hsl(180 100% 50%)",
104
113
  "warn": "hsl(38 100% 55%)",
114
+ "warn-fg": "hsl(240 12% 4%)",
105
115
  "danger": "hsl(0 72% 51%)",
116
+ "danger-fg": "#ffffff",
106
117
  "info": "hsl(180 100% 50%)",
118
+ "stream": "hsl(190 100% 55%)",
107
119
  "selection": "hsl(180 100% 50% / 0.25)",
108
120
  "focus": "hsl(180 100% 50%)",
109
121
  "data-ground": "#000000",
@@ -127,8 +139,11 @@ const THEME_PRESETS = {
127
139
  "ok": "hsl(142 71% 45%)",
128
140
  "busy": "hsl(187 100% 33%)",
129
141
  "warn": "hsl(38 92% 50%)",
142
+ "warn-fg": "hsl(240 6% 10%)",
130
143
  "danger": "hsl(0 72% 45%)",
144
+ "danger-fg": "hsl(0 0% 99%)",
131
145
  "info": "hsl(187 100% 33%)",
146
+ "stream": "hsl(196 100% 32%)",
132
147
  "selection": "hsl(187 100% 33% / 0.18)",
133
148
  "focus": "hsl(240 6% 10%)",
134
149
  "data-ground": "#000000",
@@ -155,8 +170,11 @@ const THEME_PRESETS = {
155
170
  "ok": "#00cc66",
156
171
  "busy": "#ff6a2e",
157
172
  "warn": "#ff9500",
173
+ "warn-fg": "#141414",
158
174
  "danger": "#ff3333",
175
+ "danger-fg": "#141414",
159
176
  "info": "#3b82f6",
177
+ "stream": "#5b9dff",
160
178
  "selection": "rgba(255,106,46,0.16)",
161
179
  "focus": "#ff6a2e",
162
180
  "data-ground": "#000000",
@@ -180,8 +198,11 @@ const THEME_PRESETS = {
180
198
  "ok": "#009e50",
181
199
  "busy": "#d9541a",
182
200
  "warn": "#cc7700",
201
+ "warn-fg": "#1f1f1f",
183
202
  "danger": "#d42020",
203
+ "danger-fg": "#f5f5f5",
184
204
  "info": "#1a6fd4",
205
+ "stream": "#1560c4",
185
206
  "selection": "rgba(217,84,26,0.18)",
186
207
  "focus": "#d9541a",
187
208
  "data-ground": "#000000",
@@ -208,8 +229,11 @@ const THEME_PRESETS = {
208
229
  "ok": "hsl(166 79% 38%)",
209
230
  "busy": "hsl(27 94% 53%)",
210
231
  "warn": "hsl(27 88% 52%)",
232
+ "warn-fg": "hsl(0 0% 7%)",
211
233
  "danger": "hsl(0 87% 62%)",
234
+ "danger-fg": "hsl(0 0% 7%)",
212
235
  "info": "hsl(209 89% 54%)",
236
+ "stream": "hsl(206 92% 66%)",
213
237
  "selection": "hsl(212 63% 23%)",
214
238
  "focus": "hsl(27 94% 53%)",
215
239
  "data-ground": "#000000",
@@ -233,8 +257,11 @@ const THEME_PRESETS = {
233
257
  "ok": "#0e8c70",
234
258
  "busy": "#e06510",
235
259
  "warn": "#c05e10",
260
+ "warn-fg": "#000000",
236
261
  "danger": "#cc2f2f",
262
+ "danger-fg": "#f5f5f5",
237
263
  "info": "#1a75d2",
264
+ "stream": "hsl(212 78% 42%)",
238
265
  "selection": "#cce0ff",
239
266
  "focus": "#e06510",
240
267
  "data-ground": "#000000",
@@ -261,8 +288,11 @@ const THEME_PRESETS = {
261
288
  "ok": "hsl(142 76% 36%)",
262
289
  "busy": "hsl(38 92% 50%)",
263
290
  "warn": "hsl(38 92% 50%)",
291
+ "warn-fg": "hsl(222 47% 4%)",
264
292
  "danger": "hsl(0 72% 51%)",
293
+ "danger-fg": "hsl(0 0% 98%)",
265
294
  "info": "hsl(221 83% 62%)",
295
+ "stream": "hsl(217 91% 68%)",
266
296
  "selection": "hsl(27 94% 53% / 0.2)",
267
297
  "focus": "hsl(27 94% 53%)",
268
298
  "data-ground": "#000000",
@@ -286,8 +316,11 @@ const THEME_PRESETS = {
286
316
  "ok": "hsl(142 70% 30%)",
287
317
  "busy": "hsl(38 92% 40%)",
288
318
  "warn": "hsl(38 92% 40%)",
319
+ "warn-fg": "hsl(222 30% 12%)",
289
320
  "danger": "#c62828",
321
+ "danger-fg": "hsl(222 30% 97%)",
290
322
  "info": "#2f6fd0",
323
+ "stream": "hsl(221 78% 45%)",
291
324
  "selection": "rgba(224,101,16,0.15)",
292
325
  "focus": "#e06510",
293
326
  "data-ground": "#000000",
@@ -314,8 +347,11 @@ const THEME_PRESETS = {
314
347
  "ok": "#6BBF95",
315
348
  "busy": "#D98E4B",
316
349
  "warn": "#D98E4B",
350
+ "warn-fg": "#08100D",
317
351
  "danger": "#D9694B",
352
+ "danger-fg": "#08100D",
318
353
  "info": "#5B8DEF",
354
+ "stream": "#6FA0FF",
319
355
  "selection": "#1B1F16",
320
356
  "focus": "#E8A33D",
321
357
  "data-ground": "#000000",
@@ -339,8 +375,11 @@ const THEME_PRESETS = {
339
375
  "ok": "#2C7D55",
340
376
  "busy": "#96591D",
341
377
  "warn": "#96591D",
378
+ "warn-fg": "#F4F5F1",
342
379
  "danger": "#A23C22",
380
+ "danger-fg": "#F4F5F1",
343
381
  "info": "#2563EB",
382
+ "stream": "#1D4FD8",
344
383
  "selection": "rgba(154,101,22,0.18)",
345
384
  "focus": "#9A6516",
346
385
  "data-ground": "#000000",
@@ -367,8 +406,11 @@ const THEME_PRESETS = {
367
406
  "ok": "#15ac91",
368
407
  "busy": "#edbd6a",
369
408
  "warn": "#ea7620",
409
+ "warn-fg": "#111111",
370
410
  "danger": "#f14c4c",
411
+ "danger-fg": "#111111",
371
412
  "info": "#228df2",
413
+ "stream": "#4aa5ff",
372
414
  "selection": "rgba(237,189,106,0.22)",
373
415
  "focus": "#edbd6a",
374
416
  "data-ground": "#000000",
@@ -392,8 +434,11 @@ const THEME_PRESETS = {
392
434
  "ok": "#0e8c70",
393
435
  "busy": "#b8862f",
394
436
  "warn": "#d06a10",
437
+ "warn-fg": "#1a1a1a",
395
438
  "danger": "#d03030",
439
+ "danger-fg": "#f5f5f5",
396
440
  "info": "#1a75d2",
441
+ "stream": "#0f6ac4",
397
442
  "selection": "rgba(184,134,47,0.20)",
398
443
  "focus": "#b8862f",
399
444
  "data-ground": "#000000",
@@ -420,8 +465,11 @@ const THEME_PRESETS = {
420
465
  "ok": "#7bc47f",
421
466
  "busy": "#e6c53a",
422
467
  "warn": "#e6c53a",
468
+ "warn-fg": "#141414",
423
469
  "danger": "#e0563b",
470
+ "danger-fg": "#141414",
424
471
  "info": "#5ac8fa",
472
+ "stream": "#6ec0ff",
425
473
  "selection": "#e0568a",
426
474
  "focus": "#e0568a",
427
475
  "data-ground": "#000000",
@@ -445,8 +493,11 @@ const THEME_PRESETS = {
445
493
  "ok": "#3d8b41",
446
494
  "busy": "#8f7a14",
447
495
  "warn": "#8f7a14",
496
+ "warn-fg": "#000000",
448
497
  "danger": "#b8402b",
498
+ "danger-fg": "#f6f6f6",
449
499
  "info": "#157fb3",
500
+ "stream": "#0f6f9e",
450
501
  "selection": "rgba(184,53,96,0.18)",
451
502
  "focus": "#b83560",
452
503
  "data-ground": "#000000",
@@ -473,8 +524,11 @@ const THEME_PRESETS = {
473
524
  "ok": "#63b482",
474
525
  "busy": "#9a8cdb",
475
526
  "warn": "#d6a65a",
527
+ "warn-fg": "#07090a",
476
528
  "danger": "#dc6d69",
529
+ "danger-fg": "#07090a",
477
530
  "info": "#6eb7d9",
531
+ "stream": "#7cc4e8",
478
532
  "selection": "rgba(230,106,69,0.18)",
479
533
  "focus": "#e66a45",
480
534
  "data-ground": "#000000",
@@ -498,8 +552,11 @@ const THEME_PRESETS = {
498
552
  "ok": "#247746",
499
553
  "busy": "#604aaa",
500
554
  "warn": "#8a5b00",
555
+ "warn-fg": "#f4f3ef",
501
556
  "danger": "#aa2f2b",
557
+ "danger-fg": "#f4f3ef",
502
558
  "info": "#1d6587",
559
+ "stream": "#15607f",
503
560
  "selection": "rgba(184,73,43,0.18)",
504
561
  "focus": "#b8492b",
505
562
  "data-ground": "#000000",
@@ -526,8 +583,11 @@ const THEME_PRESETS = {
526
583
  "ok": "#22d967",
527
584
  "busy": "#00e5e5",
528
585
  "warn": "#ffab1a",
586
+ "warn-fg": "#09090c",
529
587
  "danger": "#e13d3d",
588
+ "danger-fg": "#09090c",
530
589
  "info": "#4a9eff",
590
+ "stream": "#5fb0ff",
531
591
  "selection": "rgba(0,229,229,0.18)",
532
592
  "focus": "#00e5e5",
533
593
  "data-ground": "#000000",
@@ -551,8 +611,11 @@ const THEME_PRESETS = {
551
611
  "ok": "#17914a",
552
612
  "busy": "#0d7d7d",
553
613
  "warn": "#b46a00",
614
+ "warn-fg": "#000000",
554
615
  "danger": "#c22d2d",
616
+ "danger-fg": "#fcfcfd",
555
617
  "info": "#1f6fd4",
618
+ "stream": "#0f63c8",
556
619
  "selection": "rgba(13,125,125,0.16)",
557
620
  "focus": "#0d7d7d",
558
621
  "data-ground": "#ffffff",
@@ -49,13 +49,25 @@ interface ContrastRequirement {
49
49
  reason: string;
50
50
  }
51
51
  /**
52
- * The eight pairs that decide whether a theme is usable.
52
+ * The eleven pairs that decide whether a theme is usable.
53
53
  *
54
54
  * Not every pair in the palette: the ones a reader's comprehension actually
55
55
  * depends on. Primary ink is held to AAA because it carries the prose; secondary
56
- * ink and accent ink to AA because they carry labels; the five status colours to
57
- * the non-text AA floor because they are read as *signals* — a dot, a rim, a bar
58
- * — never as body copy.
56
+ * ink and accent ink to AA because they carry labels; the five status colours
57
+ * and the live hue to the non-text AA floor because they are read as *signals*
58
+ * — a dot, a rim, a bar — never as body copy.
59
+ *
60
+ * `danger` and `warn` each appear twice, and they are the only tones that do.
61
+ * `ok`, `busy`, `info` and `stream` are *only* ever signals, so the non-text
62
+ * floor is the whole truth about them. The red and the amber are also grounds:
63
+ * they are the two tones this system fills a control with, and what they fill is
64
+ * the confirm on something irreversible and the confirm on something merely
65
+ * consequential. Text on either fill is text, so its ink is held to the text
66
+ * floor against the tone it sits on rather than against the page.
67
+ *
68
+ * `stream` is measured for the same reason `ok` is: `createTheme()` darkens it
69
+ * to this floor when it has to invent a light block, and a report that did not
70
+ * check what the derivation targets would be checking the wrong thing.
59
71
  */
60
72
  declare const CONTRAST_REQUIREMENTS: readonly ContrastRequirement[];
61
73
  /** One measured pair. */
@@ -1,7 +1,7 @@
1
1
  import { converter, parse } from "culori";
2
2
  //#region src/theming/contrast.ts
3
3
  /**
4
- * WCAG contrast, and the eight pairs a theme is judged on.
4
+ * WCAG contrast, and the eleven pairs a theme is judged on.
5
5
  *
6
6
  * A generator that only derived colours would be a colour toy: the reason to
7
7
  * compute a palette instead of picking one is that the computer can then *check*
@@ -82,13 +82,25 @@ function contrastRatio(foreground, background) {
82
82
  return (high + .05) / (low + .05);
83
83
  }
84
84
  /**
85
- * The eight pairs that decide whether a theme is usable.
85
+ * The eleven pairs that decide whether a theme is usable.
86
86
  *
87
87
  * Not every pair in the palette: the ones a reader's comprehension actually
88
88
  * depends on. Primary ink is held to AAA because it carries the prose; secondary
89
- * ink and accent ink to AA because they carry labels; the five status colours to
90
- * the non-text AA floor because they are read as *signals* — a dot, a rim, a bar
91
- * — never as body copy.
89
+ * ink and accent ink to AA because they carry labels; the five status colours
90
+ * and the live hue to the non-text AA floor because they are read as *signals*
91
+ * — a dot, a rim, a bar — never as body copy.
92
+ *
93
+ * `danger` and `warn` each appear twice, and they are the only tones that do.
94
+ * `ok`, `busy`, `info` and `stream` are *only* ever signals, so the non-text
95
+ * floor is the whole truth about them. The red and the amber are also grounds:
96
+ * they are the two tones this system fills a control with, and what they fill is
97
+ * the confirm on something irreversible and the confirm on something merely
98
+ * consequential. Text on either fill is text, so its ink is held to the text
99
+ * floor against the tone it sits on rather than against the page.
100
+ *
101
+ * `stream` is measured for the same reason `ok` is: `createTheme()` darkens it
102
+ * to this floor when it has to invent a light block, and a report that did not
103
+ * check what the derivation targets would be checking the wrong thing.
92
104
  */
93
105
  const CONTRAST_REQUIREMENTS = [
94
106
  {
@@ -112,12 +124,27 @@ const CONTRAST_REQUIREMENTS = [
112
124
  minimum: WCAG_AA_TEXT,
113
125
  reason: "The label on a solid accent button has to be readable."
114
126
  },
127
+ {
128
+ id: "danger-fg/danger",
129
+ foreground: "danger-fg",
130
+ background: "danger",
131
+ minimum: WCAG_AA_TEXT,
132
+ reason: "The label on a solid destructive fill is read before something irreversible happens."
133
+ },
134
+ {
135
+ id: "warn-fg/warn",
136
+ foreground: "warn-fg",
137
+ background: "warn",
138
+ minimum: WCAG_AA_TEXT,
139
+ reason: "The label on a solid warning fill is read before a consequential press lands."
140
+ },
115
141
  ...[
116
142
  "ok",
117
143
  "busy",
118
144
  "warn",
119
145
  "danger",
120
- "info"
146
+ "info",
147
+ "stream"
121
148
  ].map((status) => ({
122
149
  id: `${status}/bg`,
123
150
  foreground: status,
@@ -103,8 +103,12 @@ interface ThemeAnchors {
103
103
  accent?: string;
104
104
  /** Individual rungs of the surface ladder, overriding whatever would be derived. */
105
105
  surfaces?: Partial<Record<"sunken" | "surface-1" | "surface-2" | "surface-3", string>>;
106
- /** Individual status tones. Never derived — a signal colour is a decision. */
107
- status?: Partial<Record<"ok" | "busy" | "warn" | "danger" | "info", string>>;
106
+ /**
107
+ * Individual status tones, plus `stream` — the live hue an agent surface
108
+ * paints a token still arriving with. Never derived: a signal colour is a
109
+ * decision.
110
+ */
111
+ status?: Partial<Record<"ok" | "busy" | "warn" | "danger" | "info" | "stream", string>>;
108
112
  /**
109
113
  * Font stacks. `mono` is the one the presets themselves override; `sans` and
110
114
  * `display` are emitted only when given. Values pass through verbatim, so they
@@ -178,14 +178,31 @@ function lookup(map, token) {
178
178
  * and stays correct if a consumer overrides the accent in tier 1 later.
179
179
  */
180
180
  const SELECTION_WASH = `color-mix(in oklch, var(--cue-accent) 22%, transparent)`;
181
- /** The five status tones, in the order every theme block declares them. */
182
- const STATUSES = [
181
+ /**
182
+ * The five tones plus the live hue, in the order the colour contract lists them.
183
+ *
184
+ * `stream` resolves exactly like a status — authored, never derived from the
185
+ * accent, and darkened to the non-text floor when a light block has to be
186
+ * invented — but it is not a `tone` any component takes. See
187
+ * `ThemeAnchors.status`.
188
+ */
189
+ const TINTED = [...[
183
190
  "ok",
184
191
  "busy",
185
192
  "warn",
186
193
  "danger",
187
194
  "info"
188
- ];
195
+ ], "stream"];
196
+ /**
197
+ * The tones that are also *grounds*, in contract order.
198
+ *
199
+ * Every other status colour is only ever a signal — a dot, a rim, a wash — and
200
+ * whatever text sits near it sits on a surface. These two get filled: the amber
201
+ * carries the confirm on a consequential press and the red the confirm on an
202
+ * irreversible one, and text on a fill is text. So each gets an ink derived
203
+ * against itself, `warn-fg` and `danger-fg`.
204
+ */
205
+ const INKED = ["warn", "danger"];
189
206
  /** The three raised surfaces, in ladder order. */
190
207
  const SURFACES = [
191
208
  "surface-1",
@@ -243,7 +260,12 @@ function resolveDark(anchors, preset) {
243
260
  const accent = colors["accent"];
244
261
  define("accent-hover", void 0, accentMoved, () => shift(readColor(accent, "accent"), ACCENT_HOVER_LIGHTNESS_STEP));
245
262
  define("accent-fg", void 0, accentMoved, () => pickInk(accent, [colors["bg"], colors["fg"]]));
246
- for (const tone of STATUSES) define(tone, status[tone], false);
263
+ for (const tone of TINTED) define(tone, status[tone], false);
264
+ for (const tone of INKED) define(`${tone}-fg`, void 0, status[tone] !== void 0, () => pickInk(colors[tone], [
265
+ colors["bg"],
266
+ colors["sunken"],
267
+ colors["fg"]
268
+ ]));
247
269
  define("selection", void 0, accentMoved, () => SELECTION_WASH);
248
270
  define("focus", void 0, accentMoved, () => accent);
249
271
  define("data-ground", void 0, false);
@@ -311,7 +333,12 @@ function resolveLight(dark, preset) {
311
333
  const accent = colors["accent"];
312
334
  define("accent-hover", () => shift(readColor(accent, "accent"), ACCENT_HOVER_LIGHTNESS_STEP));
313
335
  define("accent-fg", () => pickInk(accent, [colors["bg"], colors["fg"]]));
314
- for (const tone of STATUSES) define(tone, () => darkenToContrast(dark.colors[tone], paperGround, 3, tone));
336
+ for (const tone of TINTED) define(tone, () => darkenToContrast(dark.colors[tone], paperGround, 3, tone));
337
+ for (const tone of INKED) define(`${tone}-fg`, () => pickInk(colors[tone], [
338
+ colors["bg"],
339
+ colors["sunken"],
340
+ colors["fg"]
341
+ ]));
315
342
  define("selection", () => SELECTION_WASH);
316
343
  define("focus", () => accent);
317
344
  define("data-ground", () => dark.colors["data-ground"]);
@@ -88,12 +88,21 @@ declare function themeSelector(name: string, options?: ThemeSelectorOptions): st
88
88
  * `:root`, for the same reason the build does it: a custom property's `var()`
89
89
  * references are substituted at the element that declares it, so a `:root`-level
90
90
  * mix would freeze the default theme's accent into every nested theme.
91
+ *
92
+ * This is deliberately a second copy of the `DERIVED` table in
93
+ * `packages/tokens/build.mjs`. It has to be one: that table runs at publish time
94
+ * over DTCG files under Style Dictionary, this one runs in a browser over a
95
+ * palette somebody just typed, and neither package can import the other's. What
96
+ * keeps a copy from drifting is not discipline but
97
+ * `test/theming/serialize.test.ts`, which compares this list against the
98
+ * compiled stylesheet in both directions — a derivation added to one side alone
99
+ * fails there rather than in a consumer's app six weeks later.
91
100
  */
92
101
  declare const DERIVED_TOKEN_TEMPLATES: ReadonlyArray<readonly [string, string]>;
93
102
  /**
94
103
  * {@link DERIVED_TOKEN_TEMPLATES} as a property → value map.
95
104
  *
96
- * @returns The eleven derived declarations, keyed by custom property.
105
+ * @returns The sixteen derived declarations, keyed by custom property.
97
106
  * @example
98
107
  * derivedTokens()["--cue-accent-soft"];
99
108
  */
@@ -97,6 +97,53 @@ function themeSelector(name, options = {}) {
97
97
  density === void 0 ? "" : `[data-density="${density}"]`
98
98
  ].join("");
99
99
  }
100
+ /** The tone vocabulary that gets a soft fill and a soft border in every theme. */
101
+ const STATUSES = [
102
+ "ok",
103
+ "busy",
104
+ "warn",
105
+ "danger",
106
+ "info"
107
+ ];
108
+ /**
109
+ * The live hue — a token still arriving, a tool still running, a cursor that
110
+ * has not stopped.
111
+ *
112
+ * Not a member of {@link STATUSES}, because a status is something a `Chip` or a
113
+ * `StatusDot` can be *told to be* and "streaming" is not a tone a caller picks:
114
+ * it is a property of a surface while the model is talking. What it shares with
115
+ * the statuses is the shape of its family — a full-strength ink, a soft fill and
116
+ * a rim — so it derives alongside them. `packages/tokens/build.mjs` carries the
117
+ * same pair of constants for the same reason; see the note on
118
+ * {@link DERIVED_TOKEN_TEMPLATES}.
119
+ */
120
+ const STREAM = "stream";
121
+ /** Every tone that earns a derived soft fill and a derived rim. */
122
+ const TINTED = [...STATUSES, STREAM];
123
+ /**
124
+ * The three shares of the foreground the list idioms are ruled with.
125
+ *
126
+ * `--cue-border` is an authored anchor, and what a preset authors is a *box
127
+ * edge* — the line around a card, an input, a panel. Repeated down thirty rows a
128
+ * box edge reads as a stack of boxes rather than as a list, so a rule between
129
+ * things is drawn lighter than the edge around a thing.
130
+ *
131
+ * Mixed from `--cue-fg` rather than authored, which is what makes them hold for
132
+ * a preset `createTheme()` produced from a palette nobody vetted: the rules keep
133
+ * their relationship to the type they separate whatever the palette turned out
134
+ * to be, in both modes, with nothing to get wrong.
135
+ *
136
+ * `row-hover` is the same measurement from the other side — the faintest wash
137
+ * that still reads as one row picked out of a list. It does not replace the
138
+ * surface ramp: a row sitting *on* a surface still lifts to the next rung
139
+ * (`hover:bg-surface-2`), which is what this library's own rows do. This is for
140
+ * rows drawn directly on `--cue-bg`, where the next rung is a visible step.
141
+ */
142
+ const HAIRLINE_TEMPLATES = [
143
+ ["hair", "color-mix(in oklch, var(--cue-fg) 6%, transparent)"],
144
+ ["hair-strong", "color-mix(in oklch, var(--cue-fg) 12%, transparent)"],
145
+ ["row-hover", "color-mix(in oklch, var(--cue-fg) 3.5%, transparent)"]
146
+ ];
100
147
  /**
101
148
  * The derived colours every theme block carries, as `[token, value]` pairs.
102
149
  *
@@ -105,18 +152,25 @@ function themeSelector(name, options = {}) {
105
152
  * `:root`, for the same reason the build does it: a custom property's `var()`
106
153
  * references are substituted at the element that declares it, so a `:root`-level
107
154
  * mix would freeze the default theme's accent into every nested theme.
155
+ *
156
+ * This is deliberately a second copy of the `DERIVED` table in
157
+ * `packages/tokens/build.mjs`. It has to be one: that table runs at publish time
158
+ * over DTCG files under Style Dictionary, this one runs in a browser over a
159
+ * palette somebody just typed, and neither package can import the other's. What
160
+ * keeps a copy from drifting is not discipline but
161
+ * `test/theming/serialize.test.ts`, which compares this list against the
162
+ * compiled stylesheet in both directions — a derivation added to one side alone
163
+ * fails there rather than in a consumer's app six weeks later.
108
164
  */
109
- const DERIVED_TOKEN_TEMPLATES = [["accent-soft", "color-mix(in oklch, var(--cue-accent) 14%, transparent)"], ...[
110
- "ok",
111
- "busy",
112
- "warn",
113
- "danger",
114
- "info"
115
- ].flatMap((status) => [[`${status}-soft`, `color-mix(in oklch, var(--cue-${status}) 12%, transparent)`], [`${status}-border`, `color-mix(in oklch, var(--cue-${status}) 35%, transparent)`]])];
165
+ const DERIVED_TOKEN_TEMPLATES = [
166
+ ["accent-soft", "color-mix(in oklch, var(--cue-accent) 14%, transparent)"],
167
+ ...TINTED.flatMap((tone) => [[`${tone}-soft`, `color-mix(in oklch, var(--cue-${tone}) 12%, transparent)`], [`${tone}-border`, `color-mix(in oklch, var(--cue-${tone}) 35%, transparent)`]]),
168
+ ...HAIRLINE_TEMPLATES
169
+ ];
116
170
  /**
117
171
  * {@link DERIVED_TOKEN_TEMPLATES} as a property → value map.
118
172
  *
119
- * @returns The eleven derived declarations, keyed by custom property.
173
+ * @returns The sixteen derived declarations, keyed by custom property.
120
174
  * @example
121
175
  * derivedTokens()["--cue-accent-soft"];
122
176
  */
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "ActivityGraph",
3
+ "slug": "activity-graph",
4
+ "group": "elements",
5
+ "importPath": "@cueplusplus/ui/elements",
6
+ "peerDependencies": [
7
+ "heat-graph"
8
+ ],
9
+ "clientOnly": true,
10
+ "description": "A half-year of runs as a calendar of cells, dense where the work was.",
11
+ "props": [
12
+ {
13
+ "name": "data",
14
+ "type": "readonly DataPoint[]",
15
+ "required": true,
16
+ "defaultValue": null,
17
+ "description": "Date and count pairs from the heat-graph package. Levels are classified for you;\ngaps are filled as empty cells."
18
+ },
19
+ {
20
+ "name": "start",
21
+ "type": "string | Date",
22
+ "required": true,
23
+ "defaultValue": null,
24
+ "description": "First day of the window. Pass it explicitly: left unset, heat-graph draws a full\nyear ending today, which will not match your data."
25
+ },
26
+ {
27
+ "name": "end",
28
+ "type": "string | Date",
29
+ "required": true,
30
+ "defaultValue": null,
31
+ "description": "Last day of the window. Cells are fixed-size, so a long window scrolls\nhorizontally rather than shrinking."
32
+ },
33
+ {
34
+ "name": "title",
35
+ "type": "string",
36
+ "required": true,
37
+ "defaultValue": null,
38
+ "description": "What is being counted."
39
+ },
40
+ {
41
+ "name": "total",
42
+ "type": "string",
43
+ "required": true,
44
+ "defaultValue": null,
45
+ "description": "Pre-formatted summary shown opposite the title."
46
+ }
47
+ ],
48
+ "typeReferences": [
49
+ "Omit<\n ComponentProps<\"div\">,\n \"children\" | \"data\" | \"start\" | \"end\" | \"title\" | \"total\"\n> & {\n /**\n * Date and count pairs from the heat-graph package. Levels are classified for you;\n * gaps are filled as empty cells.\n */\n data: readonly HeatGraph.DataPoint[];\n /**\n * First day of the window. Pass it explicitly: left unset, heat-graph draws a full\n * year ending today, which will not match your data.\n */\n start: string | Date;\n /**\n * Last day of the window. Cells are fixed-size, so a long window scrolls\n * horizontally rather than shrinking.\n */\n end: string | Date;\n /** What is being counted. */\n title: string;\n /** Pre-formatted summary shown opposite the title. */\n total: string;\n}"
50
+ ],
51
+ "subcomponents": [],
52
+ "parts": [],
53
+ "variants": {},
54
+ "defaultVariants": {},
55
+ "tokensUsed": [
56
+ "--cue-fg-subtle",
57
+ "--cue-radius-control",
58
+ "--cue-radius-overlay",
59
+ "--cue-stream",
60
+ "--cue-surface-2",
61
+ "--cue-text-body"
62
+ ],
63
+ "summary": "A half-year of runs as a calendar of cells, dense where the work was.",
64
+ "examples": [
65
+ {
66
+ "title": "Usage",
67
+ "code": "import { ActivityGraph } from \"@cueplusplus/ui/elements\";\n\n<ActivityGraph\n data={data}\n start={start}\n end={end}\n title=\"Agent runs\"\n total=\"1,204 in 6 months\"\n/>",
68
+ "language": "tsx"
69
+ }
70
+ ],
71
+ "status": "todo-docs",
72
+ "url": "/docs/components/activity-graph",
73
+ "mdUrl": "/docs/components/activity-graph.md",
74
+ "jsonUrl": "/r/components/activity-graph.json",
75
+ "specimens": [
76
+ {
77
+ "title": "ActivityGraph",
78
+ "group": "elements-agents",
79
+ "components": [
80
+ "ActivityGraph"
81
+ ],
82
+ "code": "<Specimens>\n <Specimen label=\"six months\" wide>\n <ActivityGraph\n data={RUN_DAYS}\n start=\"2026-02-01\"\n end=\"2026-08-21\"\n title=\"Agent runs\"\n total=\"1,204 in 6 months\"\n />\n </Specimen>\n <Specimen label=\"a fortnight\" wide>\n <ActivityGraph\n data={RECENT_DAYS}\n start={RECENT_DAYS[0]!.date}\n end={RECENT_DAYS[RECENT_DAYS.length - 1]!.date}\n title=\"Agent runs\"\n total=\"63 in 14 days\"\n />\n </Specimen>\n</Specimens>",
83
+ "note": "Half a year of runs as a calendar of cells, dense where the work was. It is the one element in the family with a runtime dependency of its own — `heat-graph`, an optional peer — which does the calendar arithmetic and the levelling; everything you can see here is cue's, from the five-step ramp in the streaming hue down to the legend. Cells are a fixed size, so a long window scrolls sideways rather than shrinking into a smudge.",
84
+ "interaction": "none. The five legend swatches are `aria-hidden` and sit between the words less and more, which is what carries the scale."
85
+ }
86
+ ],
87
+ "todo": true
88
+ }