@cueplusplus/ui 0.2.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 (628) hide show
  1. package/CHANGELOG.md +2250 -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/brand/_chassis.d.ts +1 -1
  12. package/dist/brand/cue-mark.d.ts +1 -1
  13. package/dist/brand/cue-mark.js +1 -1
  14. package/dist/chat/index.d.ts +2 -2
  15. package/dist/chat/message-list.d.ts +6 -0
  16. package/dist/chat/message-list.js +35 -0
  17. package/dist/chrome/_edge-scroller.js +12 -1
  18. package/dist/chrome/_tabs-scroll.d.ts +1 -1
  19. package/dist/chrome/_tabs-scroll.js +1 -1
  20. package/dist/chrome/app-shell.d.ts +52 -2
  21. package/dist/chrome/app-shell.js +80 -8
  22. package/dist/chrome/index.d.ts +2 -2
  23. package/dist/configurator/_export.js +3 -2
  24. package/dist/configurator/_overrides.d.ts +1 -1
  25. package/dist/configurator/_overrides.js +18 -6
  26. package/dist/configurator/token-editor.js +4 -1
  27. package/dist/date/_segments.js +37 -2
  28. package/dist/elements/activity-graph.d.ts +40 -0
  29. package/dist/elements/activity-graph.js +81 -0
  30. package/dist/elements/agent-card.d.ts +49 -0
  31. package/dist/elements/agent-card.js +91 -0
  32. package/dist/elements/agent-handoff.d.ts +24 -0
  33. package/dist/elements/agent-handoff.js +53 -0
  34. package/dist/elements/agent-mode-badge.d.ts +72 -0
  35. package/dist/elements/agent-mode-badge.js +110 -0
  36. package/dist/elements/agent-plan.d.ts +24 -0
  37. package/dist/elements/agent-plan.js +74 -0
  38. package/dist/elements/agent-status.d.ts +29 -0
  39. package/dist/elements/agent-status.js +46 -0
  40. package/dist/elements/agent-surface.d.ts +65 -0
  41. package/dist/elements/agent-surface.js +68 -0
  42. package/dist/elements/animated-number.d.ts +86 -0
  43. package/dist/elements/animated-number.js +118 -0
  44. package/dist/elements/approval-card.d.ts +40 -0
  45. package/dist/elements/approval-card.js +78 -0
  46. package/dist/elements/artifact-card.d.ts +30 -0
  47. package/dist/elements/artifact-card.js +58 -0
  48. package/dist/elements/background-inbox.d.ts +39 -0
  49. package/dist/elements/background-inbox.js +60 -0
  50. package/dist/elements/canvas-split.d.ts +77 -0
  51. package/dist/elements/canvas-split.js +138 -0
  52. package/dist/elements/chart.d.ts +41 -0
  53. package/dist/elements/chart.js +117 -0
  54. package/dist/elements/chat-panel.d.ts +46 -0
  55. package/dist/elements/chat-panel.js +104 -0
  56. package/dist/elements/checkpoint-history.d.ts +31 -0
  57. package/dist/elements/checkpoint-history.js +65 -0
  58. package/dist/elements/clamp.d.ts +90 -0
  59. package/dist/elements/clamp.js +109 -0
  60. package/dist/elements/code-diff.d.ts +42 -0
  61. package/dist/elements/code-diff.js +69 -0
  62. package/dist/elements/code-runner.d.ts +38 -0
  63. package/dist/elements/code-runner.js +84 -0
  64. package/dist/elements/command-palette.d.ts +48 -0
  65. package/dist/elements/command-palette.js +129 -0
  66. package/dist/elements/compaction-row.d.ts +63 -0
  67. package/dist/elements/compaction-row.js +110 -0
  68. package/dist/elements/comparison-card.d.ts +47 -0
  69. package/dist/elements/comparison-card.js +69 -0
  70. package/dist/elements/composer.d.ts +274 -0
  71. package/dist/elements/composer.js +505 -0
  72. package/dist/elements/computer-use.d.ts +40 -0
  73. package/dist/elements/computer-use.js +92 -0
  74. package/dist/elements/confidence-marker.d.ts +39 -0
  75. package/dist/elements/confidence-marker.js +64 -0
  76. package/dist/elements/connection-state.d.ts +29 -0
  77. package/dist/elements/connection-state.js +66 -0
  78. package/dist/elements/context-breakdown.d.ts +30 -0
  79. package/dist/elements/context-breakdown.js +86 -0
  80. package/dist/elements/context-usage.d.ts +99 -0
  81. package/dist/elements/context-usage.js +225 -0
  82. package/dist/elements/conversation-search.d.ts +48 -0
  83. package/dist/elements/conversation-search.js +88 -0
  84. package/dist/elements/cost-meter.d.ts +33 -0
  85. package/dist/elements/cost-meter.js +75 -0
  86. package/dist/elements/data-table.d.ts +31 -0
  87. package/dist/elements/data-table.js +67 -0
  88. package/dist/elements/day-separator.d.ts +34 -0
  89. package/dist/elements/day-separator.js +50 -0
  90. package/dist/elements/diagram.d.ts +34 -0
  91. package/dist/elements/diagram.js +75 -0
  92. package/dist/elements/document-reference.d.ts +37 -0
  93. package/dist/elements/document-reference.js +66 -0
  94. package/dist/elements/draft-restore.d.ts +27 -0
  95. package/dist/elements/draft-restore.js +54 -0
  96. package/dist/elements/edit-message.d.ts +36 -0
  97. package/dist/elements/edit-message.js +77 -0
  98. package/dist/elements/elements.css +459 -0
  99. package/dist/elements/elicitation-form.d.ts +48 -0
  100. package/dist/elements/elicitation-form.js +106 -0
  101. package/dist/elements/empty-state.d.ts +52 -0
  102. package/dist/elements/empty-state.js +98 -0
  103. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  104. package/dist/elements/end-of-turn-summary.js +75 -0
  105. package/dist/elements/error-state.d.ts +29 -0
  106. package/dist/elements/error-state.js +55 -0
  107. package/dist/elements/feedback-dialog.d.ts +36 -0
  108. package/dist/elements/feedback-dialog.js +81 -0
  109. package/dist/elements/file-tree.d.ts +45 -0
  110. package/dist/elements/file-tree.js +84 -0
  111. package/dist/elements/flow-graph.d.ts +45 -0
  112. package/dist/elements/flow-graph.js +78 -0
  113. package/dist/elements/generative/chart.js +200 -0
  114. package/dist/elements/generative/faults.js +111 -0
  115. package/dist/elements/generative/icons.d.ts +41 -0
  116. package/dist/elements/generative/icons.js +190 -0
  117. package/dist/elements/generative/intrinsics.js +483 -0
  118. package/dist/elements/generative/spec.d.ts +110 -0
  119. package/dist/elements/generative/spec.js +366 -0
  120. package/dist/elements/generative.css +1145 -0
  121. package/dist/elements/generative.d.ts +144 -0
  122. package/dist/elements/generative.js +126 -0
  123. package/dist/elements/guardrail-notice.d.ts +29 -0
  124. package/dist/elements/guardrail-notice.js +63 -0
  125. package/dist/elements/image-generation.d.ts +18 -0
  126. package/dist/elements/image-generation.js +64 -0
  127. package/dist/elements/index.d.ts +116 -0
  128. package/dist/elements/index.js +115 -0
  129. package/dist/elements/inline-citation.d.ts +43 -0
  130. package/dist/elements/inline-citation.js +93 -0
  131. package/dist/elements/job-progress.d.ts +49 -0
  132. package/dist/elements/job-progress.js +74 -0
  133. package/dist/elements/launcher-bubble.d.ts +34 -0
  134. package/dist/elements/launcher-bubble.js +72 -0
  135. package/dist/elements/live-region-announcer.d.ts +130 -0
  136. package/dist/elements/live-region-announcer.js +230 -0
  137. package/dist/elements/loading-state.d.ts +27 -0
  138. package/dist/elements/loading-state.js +36 -0
  139. package/dist/elements/map-answer.d.ts +38 -0
  140. package/dist/elements/map-answer.js +93 -0
  141. package/dist/elements/markdown.d.ts +131 -0
  142. package/dist/elements/markdown.js +528 -0
  143. package/dist/elements/math-block.d.ts +51 -0
  144. package/dist/elements/math-block.js +70 -0
  145. package/dist/elements/mcp-server-panel.d.ts +41 -0
  146. package/dist/elements/mcp-server-panel.js +115 -0
  147. package/dist/elements/memory-chips.d.ts +30 -0
  148. package/dist/elements/memory-chips.js +43 -0
  149. package/dist/elements/message-actions.d.ts +38 -0
  150. package/dist/elements/message-actions.js +71 -0
  151. package/dist/elements/message-attachment.d.ts +48 -0
  152. package/dist/elements/message-attachment.js +63 -0
  153. package/dist/elements/message-branches.d.ts +25 -0
  154. package/dist/elements/message-branches.js +65 -0
  155. package/dist/elements/message-pair.d.ts +33 -0
  156. package/dist/elements/message-pair.js +65 -0
  157. package/dist/elements/message-queue.d.ts +31 -0
  158. package/dist/elements/message-queue.js +80 -0
  159. package/dist/elements/message-timing.d.ts +33 -0
  160. package/dist/elements/message-timing.js +37 -0
  161. package/dist/elements/mobile-composer.d.ts +44 -0
  162. package/dist/elements/mobile-composer.js +88 -0
  163. package/dist/elements/model-picker.d.ts +38 -0
  164. package/dist/elements/model-picker.js +69 -0
  165. package/dist/elements/number-ticker.d.ts +18 -0
  166. package/dist/elements/number-ticker.js +47 -0
  167. package/dist/elements/onboarding.d.ts +30 -0
  168. package/dist/elements/onboarding.js +75 -0
  169. package/dist/elements/permission-grant.d.ts +35 -0
  170. package/dist/elements/permission-grant.js +86 -0
  171. package/dist/elements/permission-scopes.d.ts +215 -0
  172. package/dist/elements/permission-scopes.js +249 -0
  173. package/dist/elements/prompt-library.d.ts +43 -0
  174. package/dist/elements/prompt-library.js +117 -0
  175. package/dist/elements/queue-dock.d.ts +101 -0
  176. package/dist/elements/queue-dock.js +132 -0
  177. package/dist/elements/quota-banner.d.ts +26 -0
  178. package/dist/elements/quota-banner.js +66 -0
  179. package/dist/elements/quote-reply.d.ts +44 -0
  180. package/dist/elements/quote-reply.js +79 -0
  181. package/dist/elements/range.d.ts +29 -0
  182. package/dist/elements/range.js +45 -0
  183. package/dist/elements/read-aloud.d.ts +45 -0
  184. package/dist/elements/read-aloud.js +75 -0
  185. package/dist/elements/reasoning-effort.d.ts +36 -0
  186. package/dist/elements/reasoning-effort.js +67 -0
  187. package/dist/elements/reasoning-panel.d.ts +46 -0
  188. package/dist/elements/reasoning-panel.js +75 -0
  189. package/dist/elements/recommendation-card.d.ts +45 -0
  190. package/dist/elements/recommendation-card.js +83 -0
  191. package/dist/elements/regenerate-menu.d.ts +45 -0
  192. package/dist/elements/regenerate-menu.js +51 -0
  193. package/dist/elements/replay.d.ts +217 -0
  194. package/dist/elements/replay.js +498 -0
  195. package/dist/elements/research-report.d.ts +38 -0
  196. package/dist/elements/research-report.js +69 -0
  197. package/dist/elements/retrieval-chunks.d.ts +43 -0
  198. package/dist/elements/retrieval-chunks.js +81 -0
  199. package/dist/elements/revert-dock.d.ts +159 -0
  200. package/dist/elements/revert-dock.js +327 -0
  201. package/dist/elements/reviewable-diff.d.ts +45 -0
  202. package/dist/elements/reviewable-diff.js +110 -0
  203. package/dist/elements/risk-badge.d.ts +52 -0
  204. package/dist/elements/risk-badge.js +91 -0
  205. package/dist/elements/schedule-card.d.ts +42 -0
  206. package/dist/elements/schedule-card.js +90 -0
  207. package/dist/elements/score-breakdown.d.ts +47 -0
  208. package/dist/elements/score-breakdown.js +82 -0
  209. package/dist/elements/scroll-anchor.d.ts +32 -0
  210. package/dist/elements/scroll-anchor.js +121 -0
  211. package/dist/elements/settings-panel.d.ts +52 -0
  212. package/dist/elements/settings-panel.js +107 -0
  213. package/dist/elements/shared-conversation.d.ts +39 -0
  214. package/dist/elements/shared-conversation.js +68 -0
  215. package/dist/elements/sources.d.ts +33 -0
  216. package/dist/elements/sources.js +61 -0
  217. package/dist/elements/speaker-identity.d.ts +32 -0
  218. package/dist/elements/speaker-identity.js +51 -0
  219. package/dist/elements/spec-sheet.d.ts +31 -0
  220. package/dist/elements/spec-sheet.js +45 -0
  221. package/dist/elements/stopped-run.d.ts +22 -0
  222. package/dist/elements/stopped-run.js +50 -0
  223. package/dist/elements/streaming-text.d.ts +31 -0
  224. package/dist/elements/streaming-text.js +45 -0
  225. package/dist/elements/subagent-list.d.ts +37 -0
  226. package/dist/elements/subagent-list.js +79 -0
  227. package/dist/elements/suggestions.d.ts +30 -0
  228. package/dist/elements/suggestions.js +36 -0
  229. package/dist/elements/surfaces.d.ts +85 -0
  230. package/dist/elements/surfaces.js +107 -0
  231. package/dist/elements/tail-status.d.ts +131 -0
  232. package/dist/elements/tail-status.js +94 -0
  233. package/dist/elements/terminal-block.d.ts +29 -0
  234. package/dist/elements/terminal-block.js +54 -0
  235. package/dist/elements/thinking-indicator.d.ts +18 -0
  236. package/dist/elements/thinking-indicator.js +36 -0
  237. package/dist/elements/thread-list.d.ts +35 -0
  238. package/dist/elements/thread-list.js +68 -0
  239. package/dist/elements/thread-search.d.ts +42 -0
  240. package/dist/elements/thread-search.js +99 -0
  241. package/dist/elements/timeline.d.ts +37 -0
  242. package/dist/elements/timeline.js +46 -0
  243. package/dist/elements/todo-list.d.ts +42 -0
  244. package/dist/elements/todo-list.js +59 -0
  245. package/dist/elements/tool-call.d.ts +41 -0
  246. package/dist/elements/tool-call.js +85 -0
  247. package/dist/elements/tool-error.d.ts +39 -0
  248. package/dist/elements/tool-error.js +76 -0
  249. package/dist/elements/tool-group.d.ts +45 -0
  250. package/dist/elements/tool-group.js +71 -0
  251. package/dist/elements/tool-timeline.d.ts +65 -0
  252. package/dist/elements/tool-timeline.js +88 -0
  253. package/dist/elements/trace-waterfall.d.ts +37 -0
  254. package/dist/elements/trace-waterfall.js +69 -0
  255. package/dist/elements/transcript-rules.d.ts +67 -0
  256. package/dist/elements/transcript-rules.js +95 -0
  257. package/dist/elements/turn-footer.d.ts +74 -0
  258. package/dist/elements/turn-footer.js +101 -0
  259. package/dist/elements/typing-indicator.d.ts +16 -0
  260. package/dist/elements/typing-indicator.js +51 -0
  261. package/dist/elements/verdict-row.d.ts +89 -0
  262. package/dist/elements/verdict-row.js +150 -0
  263. package/dist/elements/vocabulary.d.ts +612 -0
  264. package/dist/elements/vocabulary.js +611 -0
  265. package/dist/elements/voice-conversation.d.ts +49 -0
  266. package/dist/elements/voice-conversation.js +123 -0
  267. package/dist/elements/web-preview.d.ts +32 -0
  268. package/dist/elements/web-preview.js +66 -0
  269. package/dist/elements/web-search.d.ts +37 -0
  270. package/dist/elements/web-search.js +66 -0
  271. package/dist/elements/work-collapse.d.ts +103 -0
  272. package/dist/elements/work-collapse.js +131 -0
  273. package/dist/icons/containers.d.ts +89 -0
  274. package/dist/icons/containers.js +295 -0
  275. package/dist/icons/index.d.ts +2 -0
  276. package/dist/index.d.ts +9 -7
  277. package/dist/index.js +3 -2
  278. package/dist/instruments/index.d.ts +2 -2
  279. package/dist/instruments/index.js +2 -2
  280. package/dist/instruments/table.d.ts +14 -1
  281. package/dist/instruments/table.js +20 -1
  282. package/dist/instruments/two-step-button.js +25 -6
  283. package/dist/layout/sidebar.d.ts +19 -1
  284. package/dist/layout/sidebar.js +19 -1
  285. package/dist/primitives/button.js +11 -1
  286. package/dist/primitives/chip.d.ts +34 -8
  287. package/dist/primitives/chip.js +97 -11
  288. package/dist/styles.css +11 -1
  289. package/dist/system/agent-skin.d.ts +27 -0
  290. package/dist/system/agent-skin.js +20 -0
  291. package/dist/system/index.d.ts +3 -3
  292. package/dist/system/portal.d.ts +5 -3
  293. package/dist/system/portal.js +36 -8
  294. package/dist/system/prepaint.d.ts +20 -2
  295. package/dist/system/prepaint.js +39 -33
  296. package/dist/system/theme-provider.d.ts +13 -2
  297. package/dist/system/theme-provider.js +107 -26
  298. package/dist/system/use-density.d.ts +9 -0
  299. package/dist/system/use-density.js +9 -0
  300. package/dist/system/use-isomorphic-layout-effect.js +19 -1
  301. package/dist/theming/_presets.d.ts +1 -1
  302. package/dist/theming/_presets.js +124 -8
  303. package/dist/theming/contrast.d.ts +16 -4
  304. package/dist/theming/contrast.js +33 -6
  305. package/dist/theming/create-theme.d.ts +8 -4
  306. package/dist/theming/create-theme.js +56 -20
  307. package/dist/theming/serialize.d.ts +11 -2
  308. package/dist/theming/serialize.js +87 -9
  309. package/manifest/components/accordion.json +154 -0
  310. package/manifest/components/activity-graph.json +88 -0
  311. package/manifest/components/agent-card.json +120 -0
  312. package/manifest/components/agent-handoff.json +87 -0
  313. package/manifest/components/agent-mode-badge.json +84 -0
  314. package/manifest/components/agent-pile.json +116 -0
  315. package/manifest/components/agent-plan.json +67 -0
  316. package/manifest/components/agent-status.json +73 -0
  317. package/manifest/components/agent-surface.json +78 -0
  318. package/manifest/components/alert-dialog.json +190 -0
  319. package/manifest/components/animated-number.json +67 -0
  320. package/manifest/components/app-bar.json +244 -0
  321. package/manifest/components/app-shell.json +383 -0
  322. package/manifest/components/app-window-frame.json +102 -0
  323. package/manifest/components/approval-card.json +106 -0
  324. package/manifest/components/artifact-card.json +81 -0
  325. package/manifest/components/ask-box.json +209 -0
  326. package/manifest/components/audience-icon.json +52 -0
  327. package/manifest/components/autocomplete.json +197 -0
  328. package/manifest/components/avatar-group.json +72 -0
  329. package/manifest/components/avatar.json +95 -0
  330. package/manifest/components/background-inbox.json +71 -0
  331. package/manifest/components/branch-picker.json +124 -0
  332. package/manifest/components/breadcrumb.json +74 -0
  333. package/manifest/components/button-group.json +74 -0
  334. package/manifest/components/button.json +126 -0
  335. package/manifest/components/calendar.json +65 -0
  336. package/manifest/components/canvas-split-body.json +62 -0
  337. package/manifest/components/canvas-split-document.json +54 -0
  338. package/manifest/components/canvas-split-header.json +83 -0
  339. package/manifest/components/canvas-split-line.json +62 -0
  340. package/manifest/components/canvas-split-message.json +62 -0
  341. package/manifest/components/canvas-split-thread.json +54 -0
  342. package/manifest/components/canvas-split.json +60 -0
  343. package/manifest/components/card.json +140 -0
  344. package/manifest/components/carousel.json +200 -0
  345. package/manifest/components/catalogue-icon.json +52 -0
  346. package/manifest/components/channel-beta-icon.json +52 -0
  347. package/manifest/components/channel-matrix.json +173 -0
  348. package/manifest/components/channel-released-icon.json +52 -0
  349. package/manifest/components/chart-container.json +111 -0
  350. package/manifest/components/chart-ramp.json +72 -0
  351. package/manifest/components/chart-swatch.json +65 -0
  352. package/manifest/components/chart-tooltip-content.json +114 -0
  353. package/manifest/components/chart.json +93 -0
  354. package/manifest/components/chat-empty-state.json +55 -0
  355. package/manifest/components/chat-panel-assistant-message.json +51 -0
  356. package/manifest/components/chat-panel-composer.json +66 -0
  357. package/manifest/components/chat-panel-messages.json +51 -0
  358. package/manifest/components/chat-panel-typing.json +51 -0
  359. package/manifest/components/chat-panel-user-message.json +51 -0
  360. package/manifest/components/chat-panel.json +57 -0
  361. package/manifest/components/checkbox-group.json +68 -0
  362. package/manifest/components/checkbox.json +93 -0
  363. package/manifest/components/checkpoint-history.json +80 -0
  364. package/manifest/components/chip.json +144 -0
  365. package/manifest/components/clamp.json +102 -0
  366. package/manifest/components/cli-tool-icon.json +52 -0
  367. package/manifest/components/code-diff.json +87 -0
  368. package/manifest/components/code-runner.json +97 -0
  369. package/manifest/components/collapsible.json +120 -0
  370. package/manifest/components/color-area.json +59 -0
  371. package/manifest/components/color-field.json +79 -0
  372. package/manifest/components/color-picker.json +175 -0
  373. package/manifest/components/color-slider.json +75 -0
  374. package/manifest/components/color-swatch.json +68 -0
  375. package/manifest/components/colors-section.json +66 -0
  376. package/manifest/components/combobox.json +198 -0
  377. package/manifest/components/command-palette.json +177 -0
  378. package/manifest/components/compaction-row.json +100 -0
  379. package/manifest/components/comparison-card.json +83 -0
  380. package/manifest/components/composer-actions.json +65 -0
  381. package/manifest/components/composer-attach-button.json +65 -0
  382. package/manifest/components/composer-attachment-chip.json +75 -0
  383. package/manifest/components/composer-attachments.json +60 -0
  384. package/manifest/components/composer-bar.json +73 -0
  385. package/manifest/components/composer-command-item.json +79 -0
  386. package/manifest/components/composer-context.json +67 -0
  387. package/manifest/components/composer-input.json +73 -0
  388. package/manifest/components/composer-menu-item.json +72 -0
  389. package/manifest/components/composer-menu.json +79 -0
  390. package/manifest/components/composer-model-item.json +75 -0
  391. package/manifest/components/composer-model-trigger.json +75 -0
  392. package/manifest/components/composer-person-item.json +79 -0
  393. package/manifest/components/composer-send.json +80 -0
  394. package/manifest/components/composer-toolbar.json +65 -0
  395. package/manifest/components/composer-voice-button.json +68 -0
  396. package/manifest/components/composer-voice.json +75 -0
  397. package/manifest/components/composer.json +176 -0
  398. package/manifest/components/computer-use.json +84 -0
  399. package/manifest/components/confidence-marker.json +74 -0
  400. package/manifest/components/connection-state.json +84 -0
  401. package/manifest/components/container.json +60 -0
  402. package/manifest/components/context-breakdown.json +65 -0
  403. package/manifest/components/context-menu.json +121 -0
  404. package/manifest/components/context-usage.json +85 -0
  405. package/manifest/components/conversation-search.json +92 -0
  406. package/manifest/components/copy-button.json +93 -0
  407. package/manifest/components/cost-meter.json +74 -0
  408. package/manifest/components/cue-logotype.json +96 -0
  409. package/manifest/components/cue-mark.json +97 -0
  410. package/manifest/components/cue-portal-frame.json +55 -0
  411. package/manifest/components/data-table-pagination.json +83 -0
  412. package/manifest/components/data-table-toolbar.json +104 -0
  413. package/manifest/components/date-field.json +80 -0
  414. package/manifest/components/date-picker.json +191 -0
  415. package/manifest/components/date-range-picker.json +191 -0
  416. package/manifest/components/day-separator.json +58 -0
  417. package/manifest/components/delegation-card.json +144 -0
  418. package/manifest/components/density.json +58 -0
  419. package/manifest/components/description-list.json +84 -0
  420. package/manifest/components/diagram.json +100 -0
  421. package/manifest/components/dialog.json +198 -0
  422. package/manifest/components/disclosure.json +109 -0
  423. package/manifest/components/dmx-bar.json +94 -0
  424. package/manifest/components/dmx-strip.json +101 -0
  425. package/manifest/components/document-reference.json +90 -0
  426. package/manifest/components/draft-restore.json +82 -0
  427. package/manifest/components/drawer.json +179 -0
  428. package/manifest/components/dropdown-menu.json +229 -0
  429. package/manifest/components/edit-message.json +105 -0
  430. package/manifest/components/elements-command-palette.json +100 -0
  431. package/manifest/components/elements-composer.json +71 -0
  432. package/manifest/components/elements-data-table.json +68 -0
  433. package/manifest/components/elements-timeline.json +69 -0
  434. package/manifest/components/elicitation-form.json +103 -0
  435. package/manifest/components/empty-state-composer.json +64 -0
  436. package/manifest/components/empty-state-greeting.json +49 -0
  437. package/manifest/components/empty-state-suggestion.json +57 -0
  438. package/manifest/components/empty-state-suggestions.json +49 -0
  439. package/manifest/components/empty-state.json +90 -0
  440. package/manifest/components/end-of-turn-summary.json +77 -0
  441. package/manifest/components/env-var-input.json +150 -0
  442. package/manifest/components/error-state.json +80 -0
  443. package/manifest/components/export-dialog.json +84 -0
  444. package/manifest/components/eyebrow.json +56 -0
  445. package/manifest/components/feedback-dialog.json +107 -0
  446. package/manifest/components/field-description.json +63 -0
  447. package/manifest/components/field-error.json +77 -0
  448. package/manifest/components/field-label.json +63 -0
  449. package/manifest/components/field.json +79 -0
  450. package/manifest/components/file-tree.json +83 -0
  451. package/manifest/components/file-upload.json +159 -0
  452. package/manifest/components/flow-background.json +50 -0
  453. package/manifest/components/flow-controls.json +50 -0
  454. package/manifest/components/flow-graph.json +75 -0
  455. package/manifest/components/folder-icon.json +52 -0
  456. package/manifest/components/footer.json +112 -0
  457. package/manifest/components/frac.json +59 -0
  458. package/manifest/components/generation-loader.json +64 -0
  459. package/manifest/components/generative-ui.json +93 -0
  460. package/manifest/components/grid.json +81 -0
  461. package/manifest/components/group-bar.json +102 -0
  462. package/manifest/components/guardrail-notice.json +91 -0
  463. package/manifest/components/hover-card.json +151 -0
  464. package/manifest/components/icon-button.json +88 -0
  465. package/manifest/components/image-generation.json +67 -0
  466. package/manifest/components/info-tip.json +98 -0
  467. package/manifest/components/inline-citation.json +77 -0
  468. package/manifest/components/input-group.json +91 -0
  469. package/manifest/components/input.json +89 -0
  470. package/manifest/components/item.json +129 -0
  471. package/manifest/components/job-progress.json +96 -0
  472. package/manifest/components/kbd.json +52 -0
  473. package/manifest/components/launcher-bubble.json +105 -0
  474. package/manifest/components/link.json +81 -0
  475. package/manifest/components/live-region-announcer.json +79 -0
  476. package/manifest/components/log-viewer.json +139 -0
  477. package/manifest/components/map-answer.json +83 -0
  478. package/manifest/components/markdown-text.json +94 -0
  479. package/manifest/components/math-block.json +74 -0
  480. package/manifest/components/mcp-server-icon.json +52 -0
  481. package/manifest/components/mcp-server-panel.json +87 -0
  482. package/manifest/components/memory-chips.json +65 -0
  483. package/manifest/components/menubar.json +157 -0
  484. package/manifest/components/message-actions.json +99 -0
  485. package/manifest/components/message-attachments.json +63 -0
  486. package/manifest/components/message-branches.json +71 -0
  487. package/manifest/components/message-list.json +100 -0
  488. package/manifest/components/message-pair.json +86 -0
  489. package/manifest/components/message-queue.json +74 -0
  490. package/manifest/components/message-timing.json +62 -0
  491. package/manifest/components/message.json +116 -0
  492. package/manifest/components/meter.json +114 -0
  493. package/manifest/components/mobile-composer.json +126 -0
  494. package/manifest/components/model-picker.json +76 -0
  495. package/manifest/components/multi-select.json +190 -0
  496. package/manifest/components/musical-time-input.json +113 -0
  497. package/manifest/components/navigation-menu.json +226 -0
  498. package/manifest/components/node-card.json +109 -0
  499. package/manifest/components/node-handle.json +69 -0
  500. package/manifest/components/number-field.json +107 -0
  501. package/manifest/components/number-ticker.json +61 -0
  502. package/manifest/components/onboarding.json +84 -0
  503. package/manifest/components/otp-field.json +128 -0
  504. package/manifest/components/page-shell.json +96 -0
  505. package/manifest/components/pagination.json +92 -0
  506. package/manifest/components/panel-header.json +77 -0
  507. package/manifest/components/panel.json +71 -0
  508. package/manifest/components/password-input.json +119 -0
  509. package/manifest/components/permission-grant.json +92 -0
  510. package/manifest/components/permission-scopes.json +139 -0
  511. package/manifest/components/piano-keyboard.json +120 -0
  512. package/manifest/components/plussie.json +111 -0
  513. package/manifest/components/popover.json +193 -0
  514. package/manifest/components/preset-section.json +73 -0
  515. package/manifest/components/progress.json +95 -0
  516. package/manifest/components/prompt-library.json +99 -0
  517. package/manifest/components/queue-dock.json +110 -0
  518. package/manifest/components/quota-banner.json +94 -0
  519. package/manifest/components/quote-reply.json +105 -0
  520. package/manifest/components/radio-group.json +73 -0
  521. package/manifest/components/radio.json +80 -0
  522. package/manifest/components/rating.json +141 -0
  523. package/manifest/components/read-aloud.json +111 -0
  524. package/manifest/components/reasoning-effort.json +81 -0
  525. package/manifest/components/reasoning-panel.json +108 -0
  526. package/manifest/components/recommendation-card.json +107 -0
  527. package/manifest/components/regenerate-menu.json +89 -0
  528. package/manifest/components/replay-player.json +102 -0
  529. package/manifest/components/research-report.json +76 -0
  530. package/manifest/components/resizable.json +88 -0
  531. package/manifest/components/retrieval-chunks.json +84 -0
  532. package/manifest/components/revert-dock.json +150 -0
  533. package/manifest/components/reviewable-diff.json +93 -0
  534. package/manifest/components/risk-badge.json +74 -0
  535. package/manifest/components/row.json +109 -0
  536. package/manifest/components/schedule-card.json +101 -0
  537. package/manifest/components/score-breakdown.json +91 -0
  538. package/manifest/components/scroll-anchor.json +72 -0
  539. package/manifest/components/scroll-area.json +91 -0
  540. package/manifest/components/scrollable-tabs-list.json +83 -0
  541. package/manifest/components/scrub-input.json +200 -0
  542. package/manifest/components/seam-cell.json +75 -0
  543. package/manifest/components/seam-grid.json +75 -0
  544. package/manifest/components/seam-list.json +56 -0
  545. package/manifest/components/search-input.json +134 -0
  546. package/manifest/components/section-header.json +112 -0
  547. package/manifest/components/segmented-control.json +138 -0
  548. package/manifest/components/select.json +194 -0
  549. package/manifest/components/separator.json +53 -0
  550. package/manifest/components/settings-panel.json +118 -0
  551. package/manifest/components/shape-section.json +66 -0
  552. package/manifest/components/shared-conversation.json +89 -0
  553. package/manifest/components/sheet.json +186 -0
  554. package/manifest/components/shimmer-label.json +59 -0
  555. package/manifest/components/sidebar.json +198 -0
  556. package/manifest/components/signal-edge.json +56 -0
  557. package/manifest/components/skeleton.json +46 -0
  558. package/manifest/components/skill-icon.json +52 -0
  559. package/manifest/components/slider.json +89 -0
  560. package/manifest/components/sources.json +83 -0
  561. package/manifest/components/sparkline.json +76 -0
  562. package/manifest/components/speaker-identity.json +61 -0
  563. package/manifest/components/spec-sheet.json +80 -0
  564. package/manifest/components/spectrum-visualizer.json +115 -0
  565. package/manifest/components/spinner.json +61 -0
  566. package/manifest/components/stack-icon.json +52 -0
  567. package/manifest/components/stack.json +96 -0
  568. package/manifest/components/stacks-matrix-icon.json +52 -0
  569. package/manifest/components/stat.json +87 -0
  570. package/manifest/components/status-bar.json +58 -0
  571. package/manifest/components/status-dot.json +78 -0
  572. package/manifest/components/stepper.json +89 -0
  573. package/manifest/components/stopped-run.json +81 -0
  574. package/manifest/components/streaming-text.json +71 -0
  575. package/manifest/components/sub.json +44 -0
  576. package/manifest/components/subagent-list.json +88 -0
  577. package/manifest/components/suggestions.json +84 -0
  578. package/manifest/components/sup.json +44 -0
  579. package/manifest/components/swap-label.json +71 -0
  580. package/manifest/components/switch.json +87 -0
  581. package/manifest/components/table-scroll-region.json +69 -0
  582. package/manifest/components/table.json +155 -0
  583. package/manifest/components/tabs.json +145 -0
  584. package/manifest/components/tags-input.json +190 -0
  585. package/manifest/components/tail-status.json +109 -0
  586. package/manifest/components/terminal-block.json +91 -0
  587. package/manifest/components/terminal-frame.json +119 -0
  588. package/manifest/components/textarea.json +76 -0
  589. package/manifest/components/theme-configurator.json +124 -0
  590. package/manifest/components/theme-provider.json +134 -0
  591. package/manifest/components/thinking-indicator.json +63 -0
  592. package/manifest/components/thread-list.json +76 -0
  593. package/manifest/components/thread-search.json +90 -0
  594. package/manifest/components/threshold-rail.json +160 -0
  595. package/manifest/components/time-boundary.json +62 -0
  596. package/manifest/components/time-field.json +80 -0
  597. package/manifest/components/timeline-ruler.json +139 -0
  598. package/manifest/components/timeline.json +115 -0
  599. package/manifest/components/title-bar.json +82 -0
  600. package/manifest/components/toast.json +130 -0
  601. package/manifest/components/todo-list.json +69 -0
  602. package/manifest/components/toggle-group.json +106 -0
  603. package/manifest/components/toggle.json +109 -0
  604. package/manifest/components/token-editor.json +90 -0
  605. package/manifest/components/tool-call-card.json +200 -0
  606. package/manifest/components/tool-call.json +119 -0
  607. package/manifest/components/tool-error.json +114 -0
  608. package/manifest/components/tool-group.json +83 -0
  609. package/manifest/components/tool-timeline.json +119 -0
  610. package/manifest/components/toolbar.json +163 -0
  611. package/manifest/components/tooltip.json +164 -0
  612. package/manifest/components/trace-waterfall.json +74 -0
  613. package/manifest/components/tree-visibility-toggle.json +84 -0
  614. package/manifest/components/tree.json +140 -0
  615. package/manifest/components/turn-footer.json +105 -0
  616. package/manifest/components/two-step-button.json +113 -0
  617. package/manifest/components/typing-indicator.json +53 -0
  618. package/manifest/components/universe-grid.json +127 -0
  619. package/manifest/components/unread-divider.json +55 -0
  620. package/manifest/components/usage-chart.json +124 -0
  621. package/manifest/components/verdict-row.json +91 -0
  622. package/manifest/components/voice-conversation.json +109 -0
  623. package/manifest/components/web-preview.json +87 -0
  624. package/manifest/components/web-search.json +92 -0
  625. package/manifest/components/work-collapse.json +102 -0
  626. package/manifest/manifest.json +4779 -0
  627. package/manifest/tokens.json +159 -0
  628. package/package.json +54 -5
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
- import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
3
+ import { useIsomorphicInsertionEffect, useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
4
4
  import { DEFAULT_DENSITY as DEFAULT_DENSITY$1, DENSITY_LEVELS, DensityContext } from "./density.js";
5
5
  import { DEFAULT_STORAGE_KEY } from "./prepaint.js";
6
6
  import * as React from "react";
7
7
  import { jsx } from "react/jsx-runtime";
8
- import { DEFAULT_FONT, FONTS } from "@cueplusplus/tokens";
8
+ import { DEFAULT_FONT, FONTS, THEMES } from "@cueplusplus/tokens";
9
9
  //#region src/system/theme-provider.tsx
10
- const MODES = [
10
+ const MODES$1 = [
11
11
  "dark",
12
12
  "light",
13
13
  "system"
@@ -34,6 +34,8 @@ const ThemeContext = React.createContext(null);
34
34
  * Internal: not part of the public API.
35
35
  */
36
36
  const FontScaleContext = React.createContext(null);
37
+ /** Effective font-family overrides from the nearest provider chain. */
38
+ const FontFamiliesContext = React.createContext(null);
37
39
  function isOneOf(allowed, value) {
38
40
  return typeof value === "string" && allowed.includes(value);
39
41
  }
@@ -49,6 +51,30 @@ function readPreferences(storageKey) {
49
51
  return {};
50
52
  }
51
53
  }
54
+ /** Resolve `"system"` the way {@link prepaintScript} resolves it: against the media query. */
55
+ function resolveMode(mode) {
56
+ if (mode !== "system") return mode;
57
+ if (typeof matchMedia !== "function") return DEFAULT_RESOLVED_MODE;
58
+ return matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
59
+ }
60
+ /**
61
+ * The stamp {@link prepaintScript} put on `<html>`, recomputed from the storage
62
+ * it read.
63
+ *
64
+ * Not read back off the element, because by the time anything here runs it is
65
+ * no longer there — see the `<html>` stamp below. Same key, same validation,
66
+ * same fallbacks, so this returns what the script decided rather than a second
67
+ * opinion about it.
68
+ */
69
+ function prepaintStamp(storageKey, fallback) {
70
+ const stored = readPreferences(storageKey);
71
+ return {
72
+ theme: typeof stored.theme === "string" && stored.theme.length > 0 ? stored.theme : fallback.theme,
73
+ density: isOneOf(DENSITY_LEVELS, stored.density) ? stored.density : fallback.density,
74
+ font: isOneOf(FONT_NAMES, stored.font) ? stored.font : fallback.font,
75
+ mode: resolveMode(isOneOf(MODES$1, stored.mode) ? stored.mode : fallback.mode)
76
+ };
77
+ }
52
78
  function writePreferences(storageKey, preferences) {
53
79
  if (typeof localStorage === "undefined") return;
54
80
  try {
@@ -84,14 +110,14 @@ function writePreferences(storageKey, preferences) {
84
110
  * <App />
85
111
  * </ThemeProvider>
86
112
  */
87
- function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp = DEFAULT_DENSITY$1, mode: modeProp = DEFAULT_MODE, font: fontProp = DEFAULT_FONT, fontScale = 1, storageKey = DEFAULT_STORAGE_KEY, asChild = false, className, style: styleProp, children }) {
113
+ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp = DEFAULT_DENSITY$1, mode: modeProp = DEFAULT_MODE, font: fontProp = DEFAULT_FONT, fontScale = 1, fontFamilies, storageKey = DEFAULT_STORAGE_KEY, persistPreferences = true, asChild = false, className, style: styleProp, children }) {
88
114
  const ambient = React.useContext(ThemeContext);
89
115
  const isRoot = ambient === null;
90
116
  const [theme, setThemeState] = React.useState(themeProp);
91
117
  const [density, setDensityState] = React.useState(densityProp);
92
118
  const [mode, setModeState] = React.useState(modeProp);
93
119
  const [rootFont, setRootFontState] = React.useState(() => {
94
- if (!isRoot) return fontProp;
120
+ if (!isRoot || !persistPreferences) return fontProp;
95
121
  const stored = readPreferences(storageKey).font;
96
122
  return isOneOf(FONT_NAMES, stored) ? stored : fontProp;
97
123
  });
@@ -101,15 +127,24 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
101
127
  const restoredKey = React.useRef(null);
102
128
  const [restored, setRestored] = React.useState(false);
103
129
  useIsomorphicLayoutEffect(() => {
104
- if (!isRoot || restoredKey.current === storageKey) return;
130
+ if (!isRoot) return;
131
+ if (!persistPreferences) {
132
+ setRestored(true);
133
+ return;
134
+ }
135
+ if (restoredKey.current === storageKey) return;
105
136
  restoredKey.current = storageKey;
106
137
  setRestored(true);
107
138
  const stored = readPreferences(storageKey);
108
- if (typeof stored.theme === "string" && stored.theme.length > 0) setThemeState(stored.theme);
139
+ if (isOneOf(THEMES, stored.theme)) setThemeState(stored.theme);
109
140
  if (isOneOf(DENSITY_LEVELS, stored.density)) setDensityState(stored.density);
110
141
  if (isOneOf(FONT_NAMES, stored.font)) setRootFontState(stored.font);
111
- if (isOneOf(MODES, stored.mode)) setModeState(stored.mode);
112
- }, [isRoot, storageKey]);
142
+ if (isOneOf(MODES$1, stored.mode)) setModeState(stored.mode);
143
+ }, [
144
+ isRoot,
145
+ persistPreferences,
146
+ storageKey
147
+ ]);
113
148
  const lastProps = React.useRef({
114
149
  theme: themeProp,
115
150
  density: densityProp,
@@ -162,9 +197,13 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
162
197
  ...patch
163
198
  };
164
199
  stateRef.current = next;
165
- if (!isRoot) return;
200
+ if (!isRoot || !persistPreferences) return;
166
201
  writePreferences(storageKey, next);
167
- }, [isRoot, storageKey]);
202
+ }, [
203
+ isRoot,
204
+ persistPreferences,
205
+ storageKey
206
+ ]);
168
207
  const setTheme = React.useCallback((next) => {
169
208
  setThemeState(next);
170
209
  persist({ theme: next });
@@ -184,9 +223,20 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
184
223
  /** Nested providers hand the axis straight up: one document, one pairing. */
185
224
  const setFont = isRoot ? rootSetFont : ambient.setFont;
186
225
  const originalStamp = React.useRef(null);
187
- useIsomorphicLayoutEffect(() => {
188
- if (!isRoot || !restored || typeof document === "undefined") return;
226
+ useIsomorphicInsertionEffect(() => {
227
+ if (!isRoot || typeof document === "undefined") return;
189
228
  const root = document.documentElement;
229
+ const next = restored || !persistPreferences ? {
230
+ theme,
231
+ density,
232
+ font,
233
+ mode
234
+ } : prepaintStamp(storageKey, {
235
+ theme: themeProp,
236
+ density: densityProp,
237
+ font: fontProp,
238
+ mode: modeProp
239
+ });
190
240
  originalStamp.current ??= {
191
241
  theme: root.getAttribute("data-theme"),
192
242
  density: root.getAttribute("data-density"),
@@ -194,18 +244,28 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
194
244
  mode: root.getAttribute("data-mode"),
195
245
  colorScheme: root.style.colorScheme
196
246
  };
197
- root.setAttribute("data-theme", theme);
198
- root.setAttribute("data-density", density);
199
- root.setAttribute("data-font", font);
200
- root.setAttribute("data-mode", resolvedMode);
201
- root.style.colorScheme = resolvedMode;
247
+ const write = (name, value) => {
248
+ if (root.getAttribute(name) !== value) root.setAttribute(name, value);
249
+ };
250
+ write("data-theme", next.theme);
251
+ write("data-density", next.density);
252
+ write("data-font", next.font);
253
+ write("data-mode", next.mode);
254
+ const scheme = next.mode === "system" ? "light dark" : next.mode;
255
+ if (root.style.colorScheme !== scheme) root.style.colorScheme = scheme;
202
256
  }, [
203
257
  isRoot,
204
258
  restored,
259
+ persistPreferences,
260
+ storageKey,
205
261
  theme,
206
262
  density,
207
263
  font,
208
- resolvedMode
264
+ mode,
265
+ themeProp,
266
+ densityProp,
267
+ fontProp,
268
+ modeProp
209
269
  ]);
210
270
  React.useEffect(() => () => {
211
271
  const original = originalStamp.current;
@@ -243,20 +303,38 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
243
303
  setMode,
244
304
  setFont
245
305
  ]);
306
+ const parentFontFamilies = React.useContext(FontFamiliesContext);
307
+ const effectiveFontFamilies = React.useMemo(() => {
308
+ const sans = fontFamilies?.sans ?? parentFontFamilies?.sans;
309
+ const mono = fontFamilies?.mono ?? parentFontFamilies?.mono;
310
+ return sans === void 0 && mono === void 0 ? null : {
311
+ sans,
312
+ mono
313
+ };
314
+ }, [
315
+ fontFamilies?.sans,
316
+ fontFamilies?.mono,
317
+ parentFontFamilies?.sans,
318
+ parentFontFamilies?.mono
319
+ ]);
246
320
  const style = React.useMemo(() => ({
247
- colorScheme: resolvedMode,
321
+ colorScheme: mode === "system" ? "light dark" : mode,
248
322
  "--cue-font-scale": fontScale,
323
+ ...fontFamilies?.sans === void 0 ? null : { "--cue-font-sans": fontFamilies.sans },
324
+ ...fontFamilies?.mono === void 0 ? null : { "--cue-font-mono": fontFamilies.mono },
249
325
  ...styleProp
250
326
  }), [
251
- resolvedMode,
327
+ mode,
252
328
  fontScale,
329
+ fontFamilies?.sans,
330
+ fontFamilies?.mono,
253
331
  styleProp
254
332
  ]);
255
333
  const stamp = {
256
334
  "data-cue-root": "",
257
335
  "data-theme": theme,
258
336
  "data-density": density,
259
- "data-mode": resolvedMode
337
+ "data-mode": mode
260
338
  };
261
339
  let root;
262
340
  if (asChild) {
@@ -279,12 +357,15 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
279
357
  value: contextValue,
280
358
  children: /* @__PURE__ */ jsx(FontScaleContext.Provider, {
281
359
  value: fontScale,
282
- children: /* @__PURE__ */ jsx(DensityContext.Provider, {
283
- value: density,
284
- children: root
360
+ children: /* @__PURE__ */ jsx(FontFamiliesContext.Provider, {
361
+ value: effectiveFontFamilies,
362
+ children: /* @__PURE__ */ jsx(DensityContext.Provider, {
363
+ value: density,
364
+ children: root
365
+ })
285
366
  })
286
367
  })
287
368
  });
288
369
  }
289
370
  //#endregion
290
- export { FontScaleContext, ThemeContext, ThemeProvider };
371
+ export { FontFamiliesContext, FontScaleContext, ThemeContext, ThemeProvider };
@@ -11,6 +11,15 @@ type ControlSize = "sm" | "md" | "lg";
11
11
  * per-rung variants (`density-ultra-compact:` … `density-ultra-large:`) instead.
12
12
  *
13
13
  * @returns The applicable density level.
14
+ * @example
15
+ * const density = useDensity();
16
+ * const rowHeight = useControlHeight("sm");
17
+ * // Shorter rows mean more of them on screen, so the reserve moves with the level.
18
+ * useVirtualizer({
19
+ * count: rows.length,
20
+ * estimateSize: () => rowHeight,
21
+ * overscan: density === "ultra-compact" ? 12 : 6,
22
+ * });
14
23
  */
15
24
  declare function useDensity(): Density;
16
25
  /**
@@ -63,6 +63,15 @@ function measureControlHeight(density, size) {
63
63
  * per-rung variants (`density-ultra-compact:` … `density-ultra-large:`) instead.
64
64
  *
65
65
  * @returns The applicable density level.
66
+ * @example
67
+ * const density = useDensity();
68
+ * const rowHeight = useControlHeight("sm");
69
+ * // Shorter rows mean more of them on screen, so the reserve moves with the level.
70
+ * useVirtualizer({
71
+ * count: rows.length,
72
+ * estimateSize: () => rowHeight,
73
+ * overscan: density === "ultra-compact" ? 12 : 6,
74
+ * });
66
75
  */
67
76
  function useDensity() {
68
77
  return React.useContext(DensityContext) ?? "compact";
@@ -11,5 +11,23 @@ import * as React from "react";
11
11
  * (never-invoked) passive variant instead.
12
12
  */
13
13
  const useIsomorphicLayoutEffect = typeof document === "undefined" ? React.useEffect : React.useLayoutEffect;
14
+ /**
15
+ * `useInsertionEffect` in the browser, `useEffect` on the server.
16
+ *
17
+ * One step earlier than the layout variant above, and the difference is the
18
+ * whole reason it exists. React runs **every** insertion effect in the tree
19
+ * during the mutation phase, before **any** layout effect runs; layout effects
20
+ * then run child-first, so a provider near the root is the last thing in the
21
+ * commit to get one. Anything a descendant's layout effect measures — Base UI
22
+ * calls `getComputedStyle` in several — is measured against whatever the
23
+ * document element is wearing at that moment.
24
+ *
25
+ * That matters exactly once: putting back what React 19 takes off `<html>` when
26
+ * it hydrates the document element. See the `<html>` stamp in
27
+ * `theme-provider.tsx`.
28
+ *
29
+ * Write only. An insertion effect must not read layout or schedule state.
30
+ */
31
+ const useIsomorphicInsertionEffect = typeof document === "undefined" ? React.useEffect : React.useInsertionEffect;
14
32
  //#endregion
15
- export { useIsomorphicLayoutEffect };
33
+ export { useIsomorphicInsertionEffect, useIsomorphicLayoutEffect };
@@ -4,7 +4,7 @@ import { Density, ThemeName } from "@cueplusplus/tokens";
4
4
  * The colour tokens every theme block declares, in the order the tokens build
5
5
  * emits them. A generated theme is complete exactly when it covers this list.
6
6
  */
7
- declare const THEME_COLOR_TOKENS: readonly ["bg", "sunken", "surface-1", "surface-2", "surface-3", "fg", "fg-muted", "fg-subtle", "border", "border-strong", "border-overlay", "accent", "accent-hover", "accent-fg", "ok", "busy", "warn", "danger", "info", "selection", "focus", "data-ground", "scrim"];
7
+ declare const THEME_COLOR_TOKENS: readonly ["bg", "sunken", "surface-1", "surface-2", "surface-3", "fg", "fg-muted", "fg-subtle", "border", "border-strong", "border-overlay", "accent", "accent-hover", "accent-fg", "ok", "busy", "warn", "warn-fg", "danger", "danger-fg", "info", "stream", "selection", "focus", "data-ground", "scrim"];
8
8
  /** One of the colour tokens a theme block owns. */
9
9
  type ThemeColorToken = (typeof THEME_COLOR_TOKENS)[number];
10
10
  //#endregion
@@ -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",
@@ -454,6 +505,65 @@ const THEME_PRESETS = {
454
505
  },
455
506
  fonts: { "font-mono": "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" }
456
507
  },
508
+ requestport: {
509
+ dark: {
510
+ "bg": "#0a0d0e",
511
+ "sunken": "#07090a",
512
+ "surface-1": "#101416",
513
+ "surface-2": "#151a1d",
514
+ "surface-3": "#1a2024",
515
+ "fg": "#f0eee9",
516
+ "fg-muted": "#a3a6a8",
517
+ "fg-subtle": "#81868a",
518
+ "border": "#293034",
519
+ "border-strong": "#61686d",
520
+ "border-overlay": "#3f484e",
521
+ "accent": "#e66a45",
522
+ "accent-hover": "#f07a53",
523
+ "accent-fg": "#160d09",
524
+ "ok": "#63b482",
525
+ "busy": "#9a8cdb",
526
+ "warn": "#d6a65a",
527
+ "warn-fg": "#07090a",
528
+ "danger": "#dc6d69",
529
+ "danger-fg": "#07090a",
530
+ "info": "#6eb7d9",
531
+ "stream": "#7cc4e8",
532
+ "selection": "rgba(230,106,69,0.18)",
533
+ "focus": "#e66a45",
534
+ "data-ground": "#000000",
535
+ "scrim": "rgba(0,0,0,0.72)"
536
+ },
537
+ light: {
538
+ "bg": "#f4f3ef",
539
+ "sunken": "#e7e6e1",
540
+ "surface-1": "#faf9f6",
541
+ "surface-2": "#ffffff",
542
+ "surface-3": "#deddd8",
543
+ "fg": "#1a1d1e",
544
+ "fg-muted": "#53595c",
545
+ "fg-subtle": "#62696d",
546
+ "border": "#d0d2cf",
547
+ "border-strong": "#7f8689",
548
+ "border-overlay": "#aeb4b5",
549
+ "accent": "#b8492b",
550
+ "accent-hover": "#963b23",
551
+ "accent-fg": "#ffffff",
552
+ "ok": "#247746",
553
+ "busy": "#604aaa",
554
+ "warn": "#8a5b00",
555
+ "warn-fg": "#f4f3ef",
556
+ "danger": "#aa2f2b",
557
+ "danger-fg": "#f4f3ef",
558
+ "info": "#1d6587",
559
+ "stream": "#15607f",
560
+ "selection": "rgba(184,73,43,0.18)",
561
+ "focus": "#b8492b",
562
+ "data-ground": "#000000",
563
+ "scrim": "rgba(20,18,15,0.45)"
564
+ },
565
+ fonts: { "font-mono": "\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" }
566
+ },
457
567
  quotamate: {
458
568
  dark: {
459
569
  "bg": "#0e0e12",
@@ -473,8 +583,11 @@ const THEME_PRESETS = {
473
583
  "ok": "#22d967",
474
584
  "busy": "#00e5e5",
475
585
  "warn": "#ffab1a",
586
+ "warn-fg": "#09090c",
476
587
  "danger": "#e13d3d",
588
+ "danger-fg": "#09090c",
477
589
  "info": "#4a9eff",
590
+ "stream": "#5fb0ff",
478
591
  "selection": "rgba(0,229,229,0.18)",
479
592
  "focus": "#00e5e5",
480
593
  "data-ground": "#000000",
@@ -498,8 +611,11 @@ const THEME_PRESETS = {
498
611
  "ok": "#17914a",
499
612
  "busy": "#0d7d7d",
500
613
  "warn": "#b46a00",
614
+ "warn-fg": "#000000",
501
615
  "danger": "#c22d2d",
616
+ "danger-fg": "#fcfcfd",
502
617
  "info": "#1f6fd4",
618
+ "stream": "#0f63c8",
503
619
  "selection": "rgba(13,125,125,0.16)",
504
620
  "focus": "#0d7d7d",
505
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. */