@cueplusplus/ui 0.13.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 (1016) hide show
  1. package/CHANGELOG.md +4028 -0
  2. package/LICENSE +21 -0
  3. package/NOTICE.md +34 -0
  4. package/README.md +237 -0
  5. package/dist/agent-runtime/_glyphs.js +43 -0
  6. package/dist/agent-runtime/branch-picker.d.ts +45 -0
  7. package/dist/agent-runtime/branch-picker.js +87 -0
  8. package/dist/agent-runtime/index.d.ts +4 -0
  9. package/dist/agent-runtime/index.js +4 -0
  10. package/dist/agent-runtime/tool-call-card.d.ts +69 -0
  11. package/dist/agent-runtime/tool-call-card.js +187 -0
  12. package/dist/agent-runtime/use-agent-thread.d.ts +164 -0
  13. package/dist/agent-runtime/use-agent-thread.js +251 -0
  14. package/dist/brand/_chassis.d.ts +54 -0
  15. package/dist/brand/_chassis.js +81 -0
  16. package/dist/brand/_geometry.js +41 -0
  17. package/dist/brand/cue-logotype.d.ts +29 -0
  18. package/dist/brand/cue-logotype.js +60 -0
  19. package/dist/brand/cue-mark.d.ts +30 -0
  20. package/dist/brand/cue-mark.js +61 -0
  21. package/dist/brand/index.d.ts +5 -0
  22. package/dist/brand/plussie.d.ts +67 -0
  23. package/dist/brand/plussie.js +125 -0
  24. package/dist/charts/_token.js +39 -0
  25. package/dist/charts/container.d.ts +58 -0
  26. package/dist/charts/container.js +77 -0
  27. package/dist/charts/index.d.ts +5 -0
  28. package/dist/charts/index.js +5 -0
  29. package/dist/charts/ramps.d.ts +140 -0
  30. package/dist/charts/ramps.js +615 -0
  31. package/dist/charts/theme.d.ts +112 -0
  32. package/dist/charts/theme.js +165 -0
  33. package/dist/charts/tones.d.ts +111 -0
  34. package/dist/charts/tones.js +127 -0
  35. package/dist/chat/_glyphs.js +55 -0
  36. package/dist/chat/agent-color.d.ts +84 -0
  37. package/dist/chat/agent-color.js +101 -0
  38. package/dist/chat/agent-pile.d.ts +55 -0
  39. package/dist/chat/agent-pile.js +121 -0
  40. package/dist/chat/ask-box.d.ts +88 -0
  41. package/dist/chat/ask-box.js +341 -0
  42. package/dist/chat/composer.d.ts +66 -0
  43. package/dist/chat/composer.js +144 -0
  44. package/dist/chat/delegation-card.d.ts +60 -0
  45. package/dist/chat/delegation-card.js +129 -0
  46. package/dist/chat/index.d.ts +8 -0
  47. package/dist/chat/index.js +8 -0
  48. package/dist/chat/message-list.d.ts +45 -0
  49. package/dist/chat/message-list.js +141 -0
  50. package/dist/chat/message.d.ts +47 -0
  51. package/dist/chat/message.js +108 -0
  52. package/dist/chrome/_band.js +54 -0
  53. package/dist/chrome/_drag.js +59 -0
  54. package/dist/chrome/_edge-scroller.d.ts +45 -0
  55. package/dist/chrome/_edge-scroller.js +149 -0
  56. package/dist/chrome/_glyphs.js +119 -0
  57. package/dist/chrome/_status-bar-item.js +85 -0
  58. package/dist/chrome/_status-bar.d.ts +15 -0
  59. package/dist/chrome/_status-bar.js +171 -0
  60. package/dist/chrome/_tabs-scroll.d.ts +67 -0
  61. package/dist/chrome/_tabs-scroll.js +73 -0
  62. package/dist/chrome/_tree.d.ts +75 -0
  63. package/dist/chrome/_tree.js +49 -0
  64. package/dist/chrome/app-bar.d.ts +103 -0
  65. package/dist/chrome/app-bar.js +175 -0
  66. package/dist/chrome/app-shell.d.ts +243 -0
  67. package/dist/chrome/app-shell.js +266 -0
  68. package/dist/chrome/band.d.ts +106 -0
  69. package/dist/chrome/band.js +97 -0
  70. package/dist/chrome/empty-state.d.ts +37 -0
  71. package/dist/chrome/empty-state.js +57 -0
  72. package/dist/chrome/eyebrow.d.ts +29 -0
  73. package/dist/chrome/eyebrow.js +36 -0
  74. package/dist/chrome/footer.d.ts +88 -0
  75. package/dist/chrome/footer.js +83 -0
  76. package/dist/chrome/index.d.ts +24 -0
  77. package/dist/chrome/index.js +22 -0
  78. package/dist/chrome/inspector.d.ts +61 -0
  79. package/dist/chrome/inspector.js +121 -0
  80. package/dist/chrome/navigation-menu.d.ts +80 -0
  81. package/dist/chrome/navigation-menu.js +121 -0
  82. package/dist/chrome/page-shell.d.ts +38 -0
  83. package/dist/chrome/page-shell.js +76 -0
  84. package/dist/chrome/panel.d.ts +55 -0
  85. package/dist/chrome/panel.js +67 -0
  86. package/dist/chrome/row.d.ts +82 -0
  87. package/dist/chrome/row.js +106 -0
  88. package/dist/chrome/scroll-area.d.ts +39 -0
  89. package/dist/chrome/scroll-area.js +70 -0
  90. package/dist/chrome/section-header.d.ts +42 -0
  91. package/dist/chrome/section-header.js +79 -0
  92. package/dist/chrome/segmented-control.d.ts +77 -0
  93. package/dist/chrome/segmented-control.js +95 -0
  94. package/dist/chrome/status-bar.d.ts +129 -0
  95. package/dist/chrome/status-bar.js +120 -0
  96. package/dist/chrome/tabs.d.ts +80 -0
  97. package/dist/chrome/tabs.js +132 -0
  98. package/dist/chrome/title-bar.d.ts +47 -0
  99. package/dist/chrome/title-bar.js +43 -0
  100. package/dist/chrome/toolbar.d.ts +68 -0
  101. package/dist/chrome/toolbar.js +83 -0
  102. package/dist/chrome/tree.d.ts +98 -0
  103. package/dist/chrome/tree.js +248 -0
  104. package/dist/color/_checker.js +14 -0
  105. package/dist/color/_convert.d.ts +52 -0
  106. package/dist/color/_convert.js +66 -0
  107. package/dist/color/_glyphs.js +28 -0
  108. package/dist/color/_thumb.js +15 -0
  109. package/dist/color/_value.js +28 -0
  110. package/dist/color/color-area.d.ts +27 -0
  111. package/dist/color/color-area.js +40 -0
  112. package/dist/color/color-field.d.ts +32 -0
  113. package/dist/color/color-field.js +43 -0
  114. package/dist/color/color-picker.d.ts +71 -0
  115. package/dist/color/color-picker.js +178 -0
  116. package/dist/color/color-slider.d.ts +31 -0
  117. package/dist/color/color-slider.js +51 -0
  118. package/dist/color/color-swatch.d.ts +32 -0
  119. package/dist/color/color-swatch.js +44 -0
  120. package/dist/color/index.d.ts +7 -0
  121. package/dist/color/index.js +7 -0
  122. package/dist/configurator/_export.d.ts +78 -0
  123. package/dist/configurator/_export.js +302 -0
  124. package/dist/configurator/_glyphs.js +92 -0
  125. package/dist/configurator/_overrides.d.ts +266 -0
  126. package/dist/configurator/_overrides.js +541 -0
  127. package/dist/configurator/configurator.d.ts +71 -0
  128. package/dist/configurator/configurator.js +284 -0
  129. package/dist/configurator/export-dialog.d.ts +30 -0
  130. package/dist/configurator/export-dialog.js +121 -0
  131. package/dist/configurator/index.d.ts +8 -0
  132. package/dist/configurator/index.js +8 -0
  133. package/dist/configurator/panel-sections.d.ts +86 -0
  134. package/dist/configurator/panel-sections.js +352 -0
  135. package/dist/configurator/token-editor.d.ts +74 -0
  136. package/dist/configurator/token-editor.js +152 -0
  137. package/dist/configurator/use-zoom.d.ts +87 -0
  138. package/dist/configurator/use-zoom.js +113 -0
  139. package/dist/date/_glyphs.js +34 -0
  140. package/dist/date/_segments.js +101 -0
  141. package/dist/date/_trigger.js +31 -0
  142. package/dist/date/calendar.d.ts +25 -0
  143. package/dist/date/calendar.js +125 -0
  144. package/dist/date/date-field.d.ts +34 -0
  145. package/dist/date/date-field.js +41 -0
  146. package/dist/date/date-picker.d.ts +69 -0
  147. package/dist/date/date-picker.js +89 -0
  148. package/dist/date/date-range-picker.d.ts +65 -0
  149. package/dist/date/date-range-picker.js +92 -0
  150. package/dist/date/index.d.ts +6 -0
  151. package/dist/date/index.js +6 -0
  152. package/dist/date/time-field.d.ts +29 -0
  153. package/dist/date/time-field.js +36 -0
  154. package/dist/dmx/_ramp.d.ts +77 -0
  155. package/dist/dmx/_ramp.js +169 -0
  156. package/dist/dmx/_readout.js +53 -0
  157. package/dist/dmx/_universe.d.ts +105 -0
  158. package/dist/dmx/_universe.js +112 -0
  159. package/dist/dmx/channel-matrix.d.ts +81 -0
  160. package/dist/dmx/channel-matrix.js +285 -0
  161. package/dist/dmx/dmx-bar.d.ts +50 -0
  162. package/dist/dmx/dmx-bar.js +107 -0
  163. package/dist/dmx/dmx-strip.d.ts +41 -0
  164. package/dist/dmx/dmx-strip.js +196 -0
  165. package/dist/dmx/index.d.ts +7 -0
  166. package/dist/dmx/index.js +7 -0
  167. package/dist/dmx/universe-grid.d.ts +61 -0
  168. package/dist/dmx/universe-grid.js +182 -0
  169. package/dist/elements/activity-graph.d.ts +40 -0
  170. package/dist/elements/activity-graph.js +81 -0
  171. package/dist/elements/agent-card.d.ts +49 -0
  172. package/dist/elements/agent-card.js +91 -0
  173. package/dist/elements/agent-handoff.d.ts +24 -0
  174. package/dist/elements/agent-handoff.js +53 -0
  175. package/dist/elements/agent-mode-badge.d.ts +72 -0
  176. package/dist/elements/agent-mode-badge.js +110 -0
  177. package/dist/elements/agent-plan.d.ts +24 -0
  178. package/dist/elements/agent-plan.js +74 -0
  179. package/dist/elements/agent-status.d.ts +29 -0
  180. package/dist/elements/agent-status.js +46 -0
  181. package/dist/elements/agent-surface.d.ts +65 -0
  182. package/dist/elements/agent-surface.js +68 -0
  183. package/dist/elements/animated-number.d.ts +86 -0
  184. package/dist/elements/animated-number.js +118 -0
  185. package/dist/elements/approval-card.d.ts +40 -0
  186. package/dist/elements/approval-card.js +78 -0
  187. package/dist/elements/artifact-card.d.ts +30 -0
  188. package/dist/elements/artifact-card.js +58 -0
  189. package/dist/elements/background-inbox.d.ts +39 -0
  190. package/dist/elements/background-inbox.js +60 -0
  191. package/dist/elements/canvas-split.d.ts +77 -0
  192. package/dist/elements/canvas-split.js +138 -0
  193. package/dist/elements/chart.d.ts +41 -0
  194. package/dist/elements/chart.js +117 -0
  195. package/dist/elements/chat-panel.d.ts +46 -0
  196. package/dist/elements/chat-panel.js +104 -0
  197. package/dist/elements/checkpoint-history.d.ts +31 -0
  198. package/dist/elements/checkpoint-history.js +65 -0
  199. package/dist/elements/clamp.d.ts +90 -0
  200. package/dist/elements/clamp.js +109 -0
  201. package/dist/elements/code-diff.d.ts +42 -0
  202. package/dist/elements/code-diff.js +69 -0
  203. package/dist/elements/code-runner.d.ts +38 -0
  204. package/dist/elements/code-runner.js +84 -0
  205. package/dist/elements/command-palette.d.ts +48 -0
  206. package/dist/elements/command-palette.js +129 -0
  207. package/dist/elements/compaction-row.d.ts +63 -0
  208. package/dist/elements/compaction-row.js +110 -0
  209. package/dist/elements/comparison-card.d.ts +47 -0
  210. package/dist/elements/comparison-card.js +69 -0
  211. package/dist/elements/composer.d.ts +274 -0
  212. package/dist/elements/composer.js +505 -0
  213. package/dist/elements/computer-use.d.ts +40 -0
  214. package/dist/elements/computer-use.js +92 -0
  215. package/dist/elements/confidence-marker.d.ts +39 -0
  216. package/dist/elements/confidence-marker.js +64 -0
  217. package/dist/elements/connection-state.d.ts +29 -0
  218. package/dist/elements/connection-state.js +66 -0
  219. package/dist/elements/context-breakdown.d.ts +30 -0
  220. package/dist/elements/context-breakdown.js +86 -0
  221. package/dist/elements/context-usage.d.ts +99 -0
  222. package/dist/elements/context-usage.js +225 -0
  223. package/dist/elements/conversation-search.d.ts +48 -0
  224. package/dist/elements/conversation-search.js +88 -0
  225. package/dist/elements/cost-meter.d.ts +33 -0
  226. package/dist/elements/cost-meter.js +75 -0
  227. package/dist/elements/data-table.d.ts +31 -0
  228. package/dist/elements/data-table.js +67 -0
  229. package/dist/elements/day-separator.d.ts +34 -0
  230. package/dist/elements/day-separator.js +50 -0
  231. package/dist/elements/diagram.d.ts +34 -0
  232. package/dist/elements/diagram.js +75 -0
  233. package/dist/elements/document-reference.d.ts +37 -0
  234. package/dist/elements/document-reference.js +66 -0
  235. package/dist/elements/draft-restore.d.ts +27 -0
  236. package/dist/elements/draft-restore.js +54 -0
  237. package/dist/elements/edit-message.d.ts +36 -0
  238. package/dist/elements/edit-message.js +77 -0
  239. package/dist/elements/elements.css +459 -0
  240. package/dist/elements/elicitation-form.d.ts +48 -0
  241. package/dist/elements/elicitation-form.js +106 -0
  242. package/dist/elements/empty-state.d.ts +52 -0
  243. package/dist/elements/empty-state.js +98 -0
  244. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  245. package/dist/elements/end-of-turn-summary.js +75 -0
  246. package/dist/elements/error-state.d.ts +29 -0
  247. package/dist/elements/error-state.js +55 -0
  248. package/dist/elements/feedback-dialog.d.ts +36 -0
  249. package/dist/elements/feedback-dialog.js +81 -0
  250. package/dist/elements/file-tree.d.ts +45 -0
  251. package/dist/elements/file-tree.js +84 -0
  252. package/dist/elements/flow-graph.d.ts +45 -0
  253. package/dist/elements/flow-graph.js +78 -0
  254. package/dist/elements/generative/chart.js +200 -0
  255. package/dist/elements/generative/faults.js +111 -0
  256. package/dist/elements/generative/icons.d.ts +41 -0
  257. package/dist/elements/generative/icons.js +190 -0
  258. package/dist/elements/generative/intrinsics.js +483 -0
  259. package/dist/elements/generative/spec.d.ts +110 -0
  260. package/dist/elements/generative/spec.js +366 -0
  261. package/dist/elements/generative.css +1145 -0
  262. package/dist/elements/generative.d.ts +144 -0
  263. package/dist/elements/generative.js +126 -0
  264. package/dist/elements/guardrail-notice.d.ts +29 -0
  265. package/dist/elements/guardrail-notice.js +63 -0
  266. package/dist/elements/image-generation.d.ts +18 -0
  267. package/dist/elements/image-generation.js +64 -0
  268. package/dist/elements/index.d.ts +116 -0
  269. package/dist/elements/index.js +115 -0
  270. package/dist/elements/inline-citation.d.ts +43 -0
  271. package/dist/elements/inline-citation.js +93 -0
  272. package/dist/elements/job-progress.d.ts +49 -0
  273. package/dist/elements/job-progress.js +74 -0
  274. package/dist/elements/launcher-bubble.d.ts +34 -0
  275. package/dist/elements/launcher-bubble.js +72 -0
  276. package/dist/elements/live-region-announcer.d.ts +130 -0
  277. package/dist/elements/live-region-announcer.js +230 -0
  278. package/dist/elements/loading-state.d.ts +27 -0
  279. package/dist/elements/loading-state.js +36 -0
  280. package/dist/elements/map-answer.d.ts +38 -0
  281. package/dist/elements/map-answer.js +93 -0
  282. package/dist/elements/markdown.d.ts +131 -0
  283. package/dist/elements/markdown.js +528 -0
  284. package/dist/elements/math-block.d.ts +51 -0
  285. package/dist/elements/math-block.js +70 -0
  286. package/dist/elements/mcp-server-panel.d.ts +41 -0
  287. package/dist/elements/mcp-server-panel.js +115 -0
  288. package/dist/elements/memory-chips.d.ts +30 -0
  289. package/dist/elements/memory-chips.js +43 -0
  290. package/dist/elements/message-actions.d.ts +38 -0
  291. package/dist/elements/message-actions.js +71 -0
  292. package/dist/elements/message-attachment.d.ts +48 -0
  293. package/dist/elements/message-attachment.js +63 -0
  294. package/dist/elements/message-branches.d.ts +25 -0
  295. package/dist/elements/message-branches.js +65 -0
  296. package/dist/elements/message-pair.d.ts +33 -0
  297. package/dist/elements/message-pair.js +65 -0
  298. package/dist/elements/message-queue.d.ts +31 -0
  299. package/dist/elements/message-queue.js +80 -0
  300. package/dist/elements/message-timing.d.ts +33 -0
  301. package/dist/elements/message-timing.js +37 -0
  302. package/dist/elements/mobile-composer.d.ts +44 -0
  303. package/dist/elements/mobile-composer.js +88 -0
  304. package/dist/elements/model-picker.d.ts +38 -0
  305. package/dist/elements/model-picker.js +69 -0
  306. package/dist/elements/number-ticker.d.ts +18 -0
  307. package/dist/elements/number-ticker.js +47 -0
  308. package/dist/elements/onboarding.d.ts +30 -0
  309. package/dist/elements/onboarding.js +75 -0
  310. package/dist/elements/permission-grant.d.ts +35 -0
  311. package/dist/elements/permission-grant.js +86 -0
  312. package/dist/elements/permission-scopes.d.ts +215 -0
  313. package/dist/elements/permission-scopes.js +249 -0
  314. package/dist/elements/prompt-library.d.ts +43 -0
  315. package/dist/elements/prompt-library.js +117 -0
  316. package/dist/elements/queue-dock.d.ts +101 -0
  317. package/dist/elements/queue-dock.js +132 -0
  318. package/dist/elements/quota-banner.d.ts +26 -0
  319. package/dist/elements/quota-banner.js +66 -0
  320. package/dist/elements/quote-reply.d.ts +44 -0
  321. package/dist/elements/quote-reply.js +79 -0
  322. package/dist/elements/range.d.ts +29 -0
  323. package/dist/elements/range.js +45 -0
  324. package/dist/elements/read-aloud.d.ts +45 -0
  325. package/dist/elements/read-aloud.js +75 -0
  326. package/dist/elements/reasoning-effort.d.ts +36 -0
  327. package/dist/elements/reasoning-effort.js +67 -0
  328. package/dist/elements/reasoning-panel.d.ts +46 -0
  329. package/dist/elements/reasoning-panel.js +75 -0
  330. package/dist/elements/recommendation-card.d.ts +45 -0
  331. package/dist/elements/recommendation-card.js +83 -0
  332. package/dist/elements/regenerate-menu.d.ts +45 -0
  333. package/dist/elements/regenerate-menu.js +51 -0
  334. package/dist/elements/replay.d.ts +217 -0
  335. package/dist/elements/replay.js +498 -0
  336. package/dist/elements/research-report.d.ts +38 -0
  337. package/dist/elements/research-report.js +69 -0
  338. package/dist/elements/retrieval-chunks.d.ts +43 -0
  339. package/dist/elements/retrieval-chunks.js +81 -0
  340. package/dist/elements/revert-dock.d.ts +159 -0
  341. package/dist/elements/revert-dock.js +327 -0
  342. package/dist/elements/reviewable-diff.d.ts +45 -0
  343. package/dist/elements/reviewable-diff.js +110 -0
  344. package/dist/elements/risk-badge.d.ts +52 -0
  345. package/dist/elements/risk-badge.js +91 -0
  346. package/dist/elements/schedule-card.d.ts +42 -0
  347. package/dist/elements/schedule-card.js +90 -0
  348. package/dist/elements/score-breakdown.d.ts +47 -0
  349. package/dist/elements/score-breakdown.js +82 -0
  350. package/dist/elements/scroll-anchor.d.ts +32 -0
  351. package/dist/elements/scroll-anchor.js +123 -0
  352. package/dist/elements/settings-panel.d.ts +52 -0
  353. package/dist/elements/settings-panel.js +107 -0
  354. package/dist/elements/shared-conversation.d.ts +39 -0
  355. package/dist/elements/shared-conversation.js +68 -0
  356. package/dist/elements/sources.d.ts +33 -0
  357. package/dist/elements/sources.js +61 -0
  358. package/dist/elements/speaker-identity.d.ts +32 -0
  359. package/dist/elements/speaker-identity.js +51 -0
  360. package/dist/elements/spec-sheet.d.ts +31 -0
  361. package/dist/elements/spec-sheet.js +45 -0
  362. package/dist/elements/stopped-run.d.ts +22 -0
  363. package/dist/elements/stopped-run.js +50 -0
  364. package/dist/elements/streaming-text.d.ts +31 -0
  365. package/dist/elements/streaming-text.js +45 -0
  366. package/dist/elements/subagent-list.d.ts +37 -0
  367. package/dist/elements/subagent-list.js +79 -0
  368. package/dist/elements/suggestions.d.ts +30 -0
  369. package/dist/elements/suggestions.js +36 -0
  370. package/dist/elements/surfaces.d.ts +85 -0
  371. package/dist/elements/surfaces.js +108 -0
  372. package/dist/elements/tail-status.d.ts +131 -0
  373. package/dist/elements/tail-status.js +94 -0
  374. package/dist/elements/terminal-block.d.ts +29 -0
  375. package/dist/elements/terminal-block.js +54 -0
  376. package/dist/elements/thinking-indicator.d.ts +18 -0
  377. package/dist/elements/thinking-indicator.js +36 -0
  378. package/dist/elements/thread-list.d.ts +35 -0
  379. package/dist/elements/thread-list.js +68 -0
  380. package/dist/elements/thread-search.d.ts +42 -0
  381. package/dist/elements/thread-search.js +99 -0
  382. package/dist/elements/timeline.d.ts +37 -0
  383. package/dist/elements/timeline.js +46 -0
  384. package/dist/elements/todo-list.d.ts +42 -0
  385. package/dist/elements/todo-list.js +59 -0
  386. package/dist/elements/tool-call.d.ts +41 -0
  387. package/dist/elements/tool-call.js +85 -0
  388. package/dist/elements/tool-error.d.ts +39 -0
  389. package/dist/elements/tool-error.js +76 -0
  390. package/dist/elements/tool-group.d.ts +45 -0
  391. package/dist/elements/tool-group.js +71 -0
  392. package/dist/elements/tool-timeline.d.ts +65 -0
  393. package/dist/elements/tool-timeline.js +88 -0
  394. package/dist/elements/trace-waterfall.d.ts +37 -0
  395. package/dist/elements/trace-waterfall.js +69 -0
  396. package/dist/elements/transcript-rules.d.ts +67 -0
  397. package/dist/elements/transcript-rules.js +95 -0
  398. package/dist/elements/turn-footer.d.ts +74 -0
  399. package/dist/elements/turn-footer.js +101 -0
  400. package/dist/elements/typing-indicator.d.ts +16 -0
  401. package/dist/elements/typing-indicator.js +51 -0
  402. package/dist/elements/verdict-row.d.ts +89 -0
  403. package/dist/elements/verdict-row.js +150 -0
  404. package/dist/elements/vocabulary.d.ts +612 -0
  405. package/dist/elements/vocabulary.js +611 -0
  406. package/dist/elements/voice-conversation.d.ts +49 -0
  407. package/dist/elements/voice-conversation.js +123 -0
  408. package/dist/elements/web-preview.d.ts +32 -0
  409. package/dist/elements/web-preview.js +66 -0
  410. package/dist/elements/web-search.d.ts +37 -0
  411. package/dist/elements/web-search.js +66 -0
  412. package/dist/elements/work-collapse.d.ts +103 -0
  413. package/dist/elements/work-collapse.js +131 -0
  414. package/dist/flow/_frame.d.ts +52 -0
  415. package/dist/flow/_frame.js +38 -0
  416. package/dist/flow/controls.d.ts +41 -0
  417. package/dist/flow/controls.js +53 -0
  418. package/dist/flow/flow.css +121 -0
  419. package/dist/flow/handles.d.ts +40 -0
  420. package/dist/flow/handles.js +61 -0
  421. package/dist/flow/index.d.ts +7 -0
  422. package/dist/flow/index.js +7 -0
  423. package/dist/flow/node-card.d.ts +71 -0
  424. package/dist/flow/node-card.js +102 -0
  425. package/dist/flow/signal-edge.d.ts +60 -0
  426. package/dist/flow/signal-edge.js +108 -0
  427. package/dist/flow/use-flow-theme.d.ts +69 -0
  428. package/dist/flow/use-flow-theme.js +109 -0
  429. package/dist/forms/_chassis.d.ts +164 -0
  430. package/dist/forms/_chassis.js +159 -0
  431. package/dist/forms/_glyphs.js +143 -0
  432. package/dist/forms/_listbox.js +55 -0
  433. package/dist/forms/autocomplete.d.ts +61 -0
  434. package/dist/forms/autocomplete.js +88 -0
  435. package/dist/forms/button-group.d.ts +47 -0
  436. package/dist/forms/button-group.js +52 -0
  437. package/dist/forms/checkbox.d.ts +51 -0
  438. package/dist/forms/checkbox.js +98 -0
  439. package/dist/forms/combobox.d.ts +73 -0
  440. package/dist/forms/combobox.js +108 -0
  441. package/dist/forms/env-var-input.d.ts +74 -0
  442. package/dist/forms/env-var-input.js +116 -0
  443. package/dist/forms/field.d.ts +89 -0
  444. package/dist/forms/field.js +102 -0
  445. package/dist/forms/file-upload.d.ts +113 -0
  446. package/dist/forms/file-upload.js +232 -0
  447. package/dist/forms/index.d.ts +26 -0
  448. package/dist/forms/index.js +26 -0
  449. package/dist/forms/input-group.d.ts +36 -0
  450. package/dist/forms/input-group.js +59 -0
  451. package/dist/forms/input.d.ts +45 -0
  452. package/dist/forms/input.js +36 -0
  453. package/dist/forms/multi-select.d.ts +62 -0
  454. package/dist/forms/multi-select.js +107 -0
  455. package/dist/forms/number-field.d.ts +39 -0
  456. package/dist/forms/number-field.js +65 -0
  457. package/dist/forms/otp-field.d.ts +54 -0
  458. package/dist/forms/otp-field.js +59 -0
  459. package/dist/forms/password-input.d.ts +46 -0
  460. package/dist/forms/password-input.js +62 -0
  461. package/dist/forms/radio-group.d.ts +50 -0
  462. package/dist/forms/radio-group.js +64 -0
  463. package/dist/forms/rating.d.ts +69 -0
  464. package/dist/forms/rating.js +103 -0
  465. package/dist/forms/scrub-input.d.ts +81 -0
  466. package/dist/forms/scrub-input.js +249 -0
  467. package/dist/forms/search-input.d.ts +54 -0
  468. package/dist/forms/search-input.js +112 -0
  469. package/dist/forms/select.d.ts +75 -0
  470. package/dist/forms/select.js +91 -0
  471. package/dist/forms/slider.d.ts +44 -0
  472. package/dist/forms/slider.js +65 -0
  473. package/dist/forms/switch.d.ts +36 -0
  474. package/dist/forms/switch.js +71 -0
  475. package/dist/forms/tags-input.d.ts +69 -0
  476. package/dist/forms/tags-input.js +148 -0
  477. package/dist/forms/textarea.d.ts +39 -0
  478. package/dist/forms/textarea.js +37 -0
  479. package/dist/forms/toggle-group.d.ts +41 -0
  480. package/dist/forms/toggle-group.js +56 -0
  481. package/dist/forms/toggle.d.ts +47 -0
  482. package/dist/forms/toggle.js +100 -0
  483. package/dist/icons/containers.d.ts +89 -0
  484. package/dist/icons/containers.js +295 -0
  485. package/dist/icons/index.d.ts +2 -0
  486. package/dist/index.d.ts +138 -0
  487. package/dist/index.js +124 -0
  488. package/dist/instruments/_ansi.js +116 -0
  489. package/dist/instruments/_data-row.d.ts +68 -0
  490. package/dist/instruments/_data-row.js +139 -0
  491. package/dist/instruments/_glyphs.js +90 -0
  492. package/dist/instruments/_ledger-disclosure.js +103 -0
  493. package/dist/instruments/_ledger.d.ts +21 -0
  494. package/dist/instruments/_ledger.js +5 -0
  495. package/dist/instruments/_motion.js +56 -0
  496. package/dist/instruments/_rem.js +21 -0
  497. package/dist/instruments/app-window-frame.d.ts +48 -0
  498. package/dist/instruments/app-window-frame.js +76 -0
  499. package/dist/instruments/code-block.d.ts +35 -0
  500. package/dist/instruments/code-block.js +173 -0
  501. package/dist/instruments/copy-button.d.ts +41 -0
  502. package/dist/instruments/copy-button.js +112 -0
  503. package/dist/instruments/data-row.d.ts +94 -0
  504. package/dist/instruments/data-row.js +151 -0
  505. package/dist/instruments/data-table.d.ts +168 -0
  506. package/dist/instruments/data-table.js +212 -0
  507. package/dist/instruments/data-tree.d.ts +126 -0
  508. package/dist/instruments/data-tree.js +303 -0
  509. package/dist/instruments/group-bar.d.ts +63 -0
  510. package/dist/instruments/group-bar.js +122 -0
  511. package/dist/instruments/index.d.ts +18 -0
  512. package/dist/instruments/index.js +18 -0
  513. package/dist/instruments/ledger.d.ts +204 -0
  514. package/dist/instruments/ledger.js +204 -0
  515. package/dist/instruments/log-viewer.d.ts +74 -0
  516. package/dist/instruments/log-viewer.js +215 -0
  517. package/dist/instruments/meter.d.ts +81 -0
  518. package/dist/instruments/meter.js +96 -0
  519. package/dist/instruments/progress.d.ts +61 -0
  520. package/dist/instruments/progress.js +79 -0
  521. package/dist/instruments/seam-grid.d.ts +66 -0
  522. package/dist/instruments/seam-grid.js +78 -0
  523. package/dist/instruments/sparkline.d.ts +39 -0
  524. package/dist/instruments/sparkline.js +85 -0
  525. package/dist/instruments/stat.d.ts +35 -0
  526. package/dist/instruments/stat.js +59 -0
  527. package/dist/instruments/table.d.ts +170 -0
  528. package/dist/instruments/table.js +237 -0
  529. package/dist/instruments/terminal-frame.d.ts +89 -0
  530. package/dist/instruments/terminal-frame.js +256 -0
  531. package/dist/instruments/two-step-button.d.ts +47 -0
  532. package/dist/instruments/two-step-button.js +166 -0
  533. package/dist/instruments/usage-chart.d.ts +55 -0
  534. package/dist/instruments/usage-chart.js +235 -0
  535. package/dist/layout/_collapse.js +46 -0
  536. package/dist/layout/_glyphs.js +45 -0
  537. package/dist/layout/_ground.d.ts +22 -0
  538. package/dist/layout/_ground.js +9 -0
  539. package/dist/layout/accordion.d.ts +52 -0
  540. package/dist/layout/accordion.js +81 -0
  541. package/dist/layout/bento.d.ts +144 -0
  542. package/dist/layout/bento.js +266 -0
  543. package/dist/layout/breadcrumb.d.ts +35 -0
  544. package/dist/layout/breadcrumb.js +67 -0
  545. package/dist/layout/card.d.ts +51 -0
  546. package/dist/layout/card.js +76 -0
  547. package/dist/layout/carousel.d.ts +96 -0
  548. package/dist/layout/carousel.js +211 -0
  549. package/dist/layout/collapsible.d.ts +74 -0
  550. package/dist/layout/collapsible.js +126 -0
  551. package/dist/layout/container.d.ts +27 -0
  552. package/dist/layout/container.js +43 -0
  553. package/dist/layout/description-list.d.ts +24 -0
  554. package/dist/layout/description-list.js +37 -0
  555. package/dist/layout/frames.d.ts +70 -0
  556. package/dist/layout/frames.js +298 -0
  557. package/dist/layout/grid.d.ts +40 -0
  558. package/dist/layout/grid.js +48 -0
  559. package/dist/layout/index.d.ts +19 -0
  560. package/dist/layout/index.js +18 -0
  561. package/dist/layout/item.d.ts +65 -0
  562. package/dist/layout/item.js +100 -0
  563. package/dist/layout/link.d.ts +48 -0
  564. package/dist/layout/link.js +63 -0
  565. package/dist/layout/pagination.d.ts +54 -0
  566. package/dist/layout/pagination.js +121 -0
  567. package/dist/layout/preview.d.ts +177 -0
  568. package/dist/layout/preview.js +628 -0
  569. package/dist/layout/resizable.d.ts +38 -0
  570. package/dist/layout/resizable.js +68 -0
  571. package/dist/layout/sidebar.d.ts +105 -0
  572. package/dist/layout/sidebar.js +158 -0
  573. package/dist/layout/stack.d.ts +46 -0
  574. package/dist/layout/stack.js +62 -0
  575. package/dist/layout/stepper.d.ts +49 -0
  576. package/dist/layout/stepper.js +81 -0
  577. package/dist/layout/timeline.d.ts +43 -0
  578. package/dist/layout/timeline.js +63 -0
  579. package/dist/lib/aria-class.js +24 -0
  580. package/dist/lib/cn.js +18 -0
  581. package/dist/lib/compose.js +38 -0
  582. package/dist/lib/cva.d.ts +18 -0
  583. package/dist/lib/cva.js +65 -0
  584. package/dist/midi/_notes.d.ts +101 -0
  585. package/dist/midi/_notes.js +183 -0
  586. package/dist/midi/_ruler.d.ts +100 -0
  587. package/dist/midi/_ruler.js +105 -0
  588. package/dist/midi/_time.d.ts +107 -0
  589. package/dist/midi/_time.js +130 -0
  590. package/dist/midi/index.d.ts +9 -0
  591. package/dist/midi/index.js +9 -0
  592. package/dist/midi/musical-time-input.d.ts +48 -0
  593. package/dist/midi/musical-time-input.js +154 -0
  594. package/dist/midi/piano-keyboard.d.ts +50 -0
  595. package/dist/midi/piano-keyboard.js +197 -0
  596. package/dist/midi/spectrum-visualizer.d.ts +65 -0
  597. package/dist/midi/spectrum-visualizer.js +213 -0
  598. package/dist/midi/threshold-rail.d.ts +72 -0
  599. package/dist/midi/threshold-rail.js +214 -0
  600. package/dist/midi/timeline-ruler.d.ts +83 -0
  601. package/dist/midi/timeline-ruler.js +152 -0
  602. package/dist/overlays/_debounce.js +34 -0
  603. package/dist/overlays/_glyphs.js +59 -0
  604. package/dist/overlays/_surface.d.ts +70 -0
  605. package/dist/overlays/_surface.js +70 -0
  606. package/dist/overlays/_wheel.js +42 -0
  607. package/dist/overlays/alert-dialog.d.ts +67 -0
  608. package/dist/overlays/alert-dialog.js +117 -0
  609. package/dist/overlays/command-palette.d.ts +93 -0
  610. package/dist/overlays/command-palette.js +193 -0
  611. package/dist/overlays/context-menu.d.ts +64 -0
  612. package/dist/overlays/context-menu.js +78 -0
  613. package/dist/overlays/dialog.d.ts +72 -0
  614. package/dist/overlays/dialog.js +124 -0
  615. package/dist/overlays/drawer.d.ts +75 -0
  616. package/dist/overlays/drawer.js +151 -0
  617. package/dist/overlays/dropdown-menu.d.ts +79 -0
  618. package/dist/overlays/dropdown-menu.js +156 -0
  619. package/dist/overlays/hover-card.d.ts +58 -0
  620. package/dist/overlays/hover-card.js +91 -0
  621. package/dist/overlays/index.d.ts +15 -0
  622. package/dist/overlays/index.js +15 -0
  623. package/dist/overlays/info-tip.d.ts +41 -0
  624. package/dist/overlays/info-tip.js +45 -0
  625. package/dist/overlays/menubar.d.ts +72 -0
  626. package/dist/overlays/menubar.js +100 -0
  627. package/dist/overlays/popover.d.ts +66 -0
  628. package/dist/overlays/popover.js +114 -0
  629. package/dist/overlays/sheet.d.ts +78 -0
  630. package/dist/overlays/sheet.js +131 -0
  631. package/dist/overlays/toast.d.ts +106 -0
  632. package/dist/overlays/toast.js +146 -0
  633. package/dist/overlays/tooltip.d.ts +57 -0
  634. package/dist/overlays/tooltip.js +95 -0
  635. package/dist/primitives/avatar.d.ts +51 -0
  636. package/dist/primitives/avatar.js +93 -0
  637. package/dist/primitives/button.d.ts +58 -0
  638. package/dist/primitives/button.js +104 -0
  639. package/dist/primitives/chip.d.ts +73 -0
  640. package/dist/primitives/chip.js +238 -0
  641. package/dist/primitives/icon-button.d.ts +41 -0
  642. package/dist/primitives/icon-button.js +59 -0
  643. package/dist/primitives/index.d.ts +10 -0
  644. package/dist/primitives/index.js +10 -0
  645. package/dist/primitives/kbd.d.ts +17 -0
  646. package/dist/primitives/kbd.js +24 -0
  647. package/dist/primitives/separator.d.ts +25 -0
  648. package/dist/primitives/separator.js +30 -0
  649. package/dist/primitives/skeleton.d.ts +20 -0
  650. package/dist/primitives/skeleton.js +27 -0
  651. package/dist/primitives/spinner.d.ts +26 -0
  652. package/dist/primitives/spinner.js +31 -0
  653. package/dist/primitives/status-dot.d.ts +51 -0
  654. package/dist/primitives/status-dot.js +57 -0
  655. package/dist/styles.css +97 -0
  656. package/dist/system/agent-skin.d.ts +27 -0
  657. package/dist/system/agent-skin.js +20 -0
  658. package/dist/system/density.d.ts +73 -0
  659. package/dist/system/density.js +111 -0
  660. package/dist/system/index.d.ts +12 -0
  661. package/dist/system/index.js +10 -0
  662. package/dist/system/overrides.d.ts +80 -0
  663. package/dist/system/overrides.js +277 -0
  664. package/dist/system/portal.d.ts +56 -0
  665. package/dist/system/portal.js +193 -0
  666. package/dist/system/prepaint.d.ts +134 -0
  667. package/dist/system/prepaint.js +120 -0
  668. package/dist/system/theme-provider.d.ts +290 -0
  669. package/dist/system/theme-provider.js +543 -0
  670. package/dist/system/theme-registry.d.ts +53 -0
  671. package/dist/system/theme-registry.js +66 -0
  672. package/dist/system/use-density.d.ts +50 -0
  673. package/dist/system/use-density.js +232 -0
  674. package/dist/system/use-isomorphic-layout-effect.js +33 -0
  675. package/dist/system/use-theme.d.ts +30 -0
  676. package/dist/system/use-theme.js +36 -0
  677. package/dist/system/vocabulary.d.ts +16 -0
  678. package/dist/system/vocabulary.js +125 -0
  679. package/dist/theming/contrast.d.ts +2 -0
  680. package/dist/theming/contrast.js +2 -0
  681. package/dist/theming/create-theme.d.ts +195 -0
  682. package/dist/theming/create-theme.js +524 -0
  683. package/dist/theming/index.d.ts +4 -0
  684. package/dist/theming/index.js +4 -0
  685. package/dist/theming/serialize.d.ts +167 -0
  686. package/dist/theming/serialize.js +241 -0
  687. package/manifest/components/accordion.json +173 -0
  688. package/manifest/components/activity-graph.json +104 -0
  689. package/manifest/components/agent-card.json +150 -0
  690. package/manifest/components/agent-handoff.json +104 -0
  691. package/manifest/components/agent-mode-badge.json +102 -0
  692. package/manifest/components/agent-pile.json +147 -0
  693. package/manifest/components/agent-plan.json +74 -0
  694. package/manifest/components/agent-status.json +87 -0
  695. package/manifest/components/agent-surface.json +93 -0
  696. package/manifest/components/alert-dialog.json +215 -0
  697. package/manifest/components/animated-number.json +75 -0
  698. package/manifest/components/app-bar.json +297 -0
  699. package/manifest/components/app-shell.json +526 -0
  700. package/manifest/components/app-window-frame.json +124 -0
  701. package/manifest/components/approval-card.json +136 -0
  702. package/manifest/components/artifact-card.json +93 -0
  703. package/manifest/components/ask-box.json +288 -0
  704. package/manifest/components/audience-icon.json +46 -0
  705. package/manifest/components/autocomplete.json +262 -0
  706. package/manifest/components/avatar-group.json +83 -0
  707. package/manifest/components/avatar.json +113 -0
  708. package/manifest/components/background-inbox.json +79 -0
  709. package/manifest/components/band.json +104 -0
  710. package/manifest/components/bento.json +306 -0
  711. package/manifest/components/branch-picker.json +146 -0
  712. package/manifest/components/breadcrumb.json +85 -0
  713. package/manifest/components/button-group.json +91 -0
  714. package/manifest/components/button.json +163 -0
  715. package/manifest/components/calendar.json +65 -0
  716. package/manifest/components/canvas-split-body.json +66 -0
  717. package/manifest/components/canvas-split-document.json +55 -0
  718. package/manifest/components/canvas-split-header.json +97 -0
  719. package/manifest/components/canvas-split-line.json +66 -0
  720. package/manifest/components/canvas-split-message.json +70 -0
  721. package/manifest/components/canvas-split-thread.json +55 -0
  722. package/manifest/components/canvas-split.json +61 -0
  723. package/manifest/components/card.json +152 -0
  724. package/manifest/components/carousel.json +242 -0
  725. package/manifest/components/catalogue-icon.json +46 -0
  726. package/manifest/components/channel-beta-icon.json +46 -0
  727. package/manifest/components/channel-matrix.json +239 -0
  728. package/manifest/components/channel-released-icon.json +46 -0
  729. package/manifest/components/chart-container.json +127 -0
  730. package/manifest/components/chart-ramp.json +82 -0
  731. package/manifest/components/chart-swatch.json +72 -0
  732. package/manifest/components/chart-tooltip-content.json +140 -0
  733. package/manifest/components/chart.json +117 -0
  734. package/manifest/components/chat-empty-state.json +55 -0
  735. package/manifest/components/chat-panel-assistant-message.json +52 -0
  736. package/manifest/components/chat-panel-composer.json +74 -0
  737. package/manifest/components/chat-panel-messages.json +52 -0
  738. package/manifest/components/chat-panel-typing.json +52 -0
  739. package/manifest/components/chat-panel-user-message.json +52 -0
  740. package/manifest/components/chat-panel.json +58 -0
  741. package/manifest/components/checkbox-group.json +70 -0
  742. package/manifest/components/checkbox.json +106 -0
  743. package/manifest/components/checkpoint-history.json +91 -0
  744. package/manifest/components/chip.json +174 -0
  745. package/manifest/components/clamp.json +125 -0
  746. package/manifest/components/cli-tool-icon.json +46 -0
  747. package/manifest/components/code-block.json +107 -0
  748. package/manifest/components/code-diff.json +104 -0
  749. package/manifest/components/code-runner.json +124 -0
  750. package/manifest/components/collapsible.json +133 -0
  751. package/manifest/components/color-area.json +62 -0
  752. package/manifest/components/color-field.json +91 -0
  753. package/manifest/components/color-picker.json +235 -0
  754. package/manifest/components/color-slider.json +84 -0
  755. package/manifest/components/color-swatch.json +79 -0
  756. package/manifest/components/colors-section.json +70 -0
  757. package/manifest/components/combobox.json +265 -0
  758. package/manifest/components/command-palette.json +222 -0
  759. package/manifest/components/compaction-row.json +128 -0
  760. package/manifest/components/comparison-card.json +98 -0
  761. package/manifest/components/composer-actions.json +65 -0
  762. package/manifest/components/composer-attach-button.json +65 -0
  763. package/manifest/components/composer-attachment-chip.json +83 -0
  764. package/manifest/components/composer-attachments.json +60 -0
  765. package/manifest/components/composer-bar.json +76 -0
  766. package/manifest/components/composer-command-item.json +85 -0
  767. package/manifest/components/composer-context.json +71 -0
  768. package/manifest/components/composer-input.json +77 -0
  769. package/manifest/components/composer-menu-item.json +75 -0
  770. package/manifest/components/composer-menu.json +89 -0
  771. package/manifest/components/composer-model-item.json +82 -0
  772. package/manifest/components/composer-model-trigger.json +81 -0
  773. package/manifest/components/composer-person-item.json +86 -0
  774. package/manifest/components/composer-send.json +86 -0
  775. package/manifest/components/composer-toolbar.json +65 -0
  776. package/manifest/components/composer-voice-button.json +71 -0
  777. package/manifest/components/composer-voice.json +81 -0
  778. package/manifest/components/composer.json +238 -0
  779. package/manifest/components/computer-use.json +98 -0
  780. package/manifest/components/confidence-marker.json +86 -0
  781. package/manifest/components/connection-state.json +103 -0
  782. package/manifest/components/container.json +75 -0
  783. package/manifest/components/context-breakdown.json +72 -0
  784. package/manifest/components/context-menu.json +134 -0
  785. package/manifest/components/context-usage.json +98 -0
  786. package/manifest/components/conversation-search.json +111 -0
  787. package/manifest/components/copy-button.json +118 -0
  788. package/manifest/components/cost-meter.json +84 -0
  789. package/manifest/components/cue-logotype.json +110 -0
  790. package/manifest/components/cue-mark.json +111 -0
  791. package/manifest/components/cue-portal-frame.json +65 -0
  792. package/manifest/components/data-row.json +222 -0
  793. package/manifest/components/data-table-pagination.json +97 -0
  794. package/manifest/components/data-table-toolbar.json +127 -0
  795. package/manifest/components/data-tree.json +185 -0
  796. package/manifest/components/date-field.json +93 -0
  797. package/manifest/components/date-picker.json +255 -0
  798. package/manifest/components/date-range-picker.json +255 -0
  799. package/manifest/components/day-separator.json +63 -0
  800. package/manifest/components/delegation-card.json +196 -0
  801. package/manifest/components/density.json +93 -0
  802. package/manifest/components/description-list.json +91 -0
  803. package/manifest/components/diagram.json +126 -0
  804. package/manifest/components/dialog.json +222 -0
  805. package/manifest/components/disclosure.json +134 -0
  806. package/manifest/components/dmx-bar.json +107 -0
  807. package/manifest/components/dmx-strip.json +117 -0
  808. package/manifest/components/document-reference.json +108 -0
  809. package/manifest/components/draft-restore.json +96 -0
  810. package/manifest/components/drawer.json +204 -0
  811. package/manifest/components/dropdown-menu.json +275 -0
  812. package/manifest/components/edit-message.json +131 -0
  813. package/manifest/components/elements-command-palette.json +122 -0
  814. package/manifest/components/elements-composer.json +71 -0
  815. package/manifest/components/elements-data-table.json +75 -0
  816. package/manifest/components/elements-timeline.json +77 -0
  817. package/manifest/components/elicitation-form.json +130 -0
  818. package/manifest/components/empty-state-composer.json +71 -0
  819. package/manifest/components/empty-state-greeting.json +49 -0
  820. package/manifest/components/empty-state-suggestion.json +60 -0
  821. package/manifest/components/empty-state-suggestions.json +49 -0
  822. package/manifest/components/empty-state.json +111 -0
  823. package/manifest/components/end-of-turn-summary.json +89 -0
  824. package/manifest/components/env-var-input.json +194 -0
  825. package/manifest/components/error-state.json +93 -0
  826. package/manifest/components/export-dialog.json +101 -0
  827. package/manifest/components/eyebrow.json +59 -0
  828. package/manifest/components/feedback-dialog.json +133 -0
  829. package/manifest/components/field-description.json +66 -0
  830. package/manifest/components/field-error.json +87 -0
  831. package/manifest/components/field-label.json +66 -0
  832. package/manifest/components/field.json +82 -0
  833. package/manifest/components/file-tree.json +96 -0
  834. package/manifest/components/file-upload.json +204 -0
  835. package/manifest/components/flow-background.json +50 -0
  836. package/manifest/components/flow-controls.json +50 -0
  837. package/manifest/components/flow-graph.json +86 -0
  838. package/manifest/components/folder-icon.json +46 -0
  839. package/manifest/components/footer.json +133 -0
  840. package/manifest/components/frac.json +68 -0
  841. package/manifest/components/frames.json +210 -0
  842. package/manifest/components/generation-loader.json +78 -0
  843. package/manifest/components/generative-ui.json +125 -0
  844. package/manifest/components/grid.json +132 -0
  845. package/manifest/components/group-bar.json +122 -0
  846. package/manifest/components/guardrail-notice.json +109 -0
  847. package/manifest/components/hover-card.json +189 -0
  848. package/manifest/components/icon-button.json +106 -0
  849. package/manifest/components/image-generation.json +73 -0
  850. package/manifest/components/info-tip.json +133 -0
  851. package/manifest/components/inline-citation.json +90 -0
  852. package/manifest/components/input-group.json +112 -0
  853. package/manifest/components/input.json +121 -0
  854. package/manifest/components/inspector.json +199 -0
  855. package/manifest/components/item.json +163 -0
  856. package/manifest/components/job-progress.json +116 -0
  857. package/manifest/components/kbd.json +52 -0
  858. package/manifest/components/launcher-bubble.json +130 -0
  859. package/manifest/components/ledger.json +330 -0
  860. package/manifest/components/link.json +94 -0
  861. package/manifest/components/live-region-announcer.json +95 -0
  862. package/manifest/components/log-viewer.json +172 -0
  863. package/manifest/components/map-answer.json +97 -0
  864. package/manifest/components/markdown-text.json +126 -0
  865. package/manifest/components/math-block.json +84 -0
  866. package/manifest/components/mcp-server-icon.json +46 -0
  867. package/manifest/components/mcp-server-panel.json +102 -0
  868. package/manifest/components/memory-chips.json +73 -0
  869. package/manifest/components/menubar.json +184 -0
  870. package/manifest/components/message-actions.json +125 -0
  871. package/manifest/components/message-attachments.json +71 -0
  872. package/manifest/components/message-branches.json +83 -0
  873. package/manifest/components/message-list.json +121 -0
  874. package/manifest/components/message-pair.json +107 -0
  875. package/manifest/components/message-queue.json +85 -0
  876. package/manifest/components/message-timing.json +69 -0
  877. package/manifest/components/message.json +149 -0
  878. package/manifest/components/meter.json +150 -0
  879. package/manifest/components/mobile-composer.json +163 -0
  880. package/manifest/components/model-picker.json +87 -0
  881. package/manifest/components/multi-select.json +255 -0
  882. package/manifest/components/musical-time-input.json +141 -0
  883. package/manifest/components/navigation-menu.json +269 -0
  884. package/manifest/components/node-card.json +144 -0
  885. package/manifest/components/node-handle.json +84 -0
  886. package/manifest/components/number-field.json +131 -0
  887. package/manifest/components/number-ticker.json +67 -0
  888. package/manifest/components/onboarding.json +100 -0
  889. package/manifest/components/otp-field.json +163 -0
  890. package/manifest/components/page-shell.json +129 -0
  891. package/manifest/components/pagination.json +108 -0
  892. package/manifest/components/panel-header.json +89 -0
  893. package/manifest/components/panel.json +71 -0
  894. package/manifest/components/password-input.json +171 -0
  895. package/manifest/components/permission-grant.json +115 -0
  896. package/manifest/components/permission-scopes.json +184 -0
  897. package/manifest/components/piano-keyboard.json +149 -0
  898. package/manifest/components/plussie.json +140 -0
  899. package/manifest/components/popover.json +231 -0
  900. package/manifest/components/preset-section.json +80 -0
  901. package/manifest/components/preview.json +294 -0
  902. package/manifest/components/progress.json +114 -0
  903. package/manifest/components/prompt-library.json +122 -0
  904. package/manifest/components/queue-dock.json +139 -0
  905. package/manifest/components/quota-banner.json +113 -0
  906. package/manifest/components/quote-reply.json +129 -0
  907. package/manifest/components/radio-group.json +83 -0
  908. package/manifest/components/radio.json +94 -0
  909. package/manifest/components/rating.json +188 -0
  910. package/manifest/components/read-aloud.json +139 -0
  911. package/manifest/components/reasoning-effort.json +95 -0
  912. package/manifest/components/reasoning-panel.json +135 -0
  913. package/manifest/components/recommendation-card.json +133 -0
  914. package/manifest/components/regenerate-menu.json +107 -0
  915. package/manifest/components/replay-player.json +124 -0
  916. package/manifest/components/research-report.json +87 -0
  917. package/manifest/components/resizable.json +91 -0
  918. package/manifest/components/retrieval-chunks.json +98 -0
  919. package/manifest/components/revert-dock.json +197 -0
  920. package/manifest/components/reviewable-diff.json +113 -0
  921. package/manifest/components/risk-badge.json +89 -0
  922. package/manifest/components/row.json +122 -0
  923. package/manifest/components/schedule-card.json +121 -0
  924. package/manifest/components/score-breakdown.json +108 -0
  925. package/manifest/components/scroll-anchor.json +84 -0
  926. package/manifest/components/scroll-area.json +114 -0
  927. package/manifest/components/scrollable-tabs-list.json +91 -0
  928. package/manifest/components/scrub-input.json +268 -0
  929. package/manifest/components/seam-cell.json +91 -0
  930. package/manifest/components/seam-grid.json +84 -0
  931. package/manifest/components/seam-list.json +56 -0
  932. package/manifest/components/search-input.json +195 -0
  933. package/manifest/components/section-header.json +140 -0
  934. package/manifest/components/segmented-control.json +178 -0
  935. package/manifest/components/select.json +253 -0
  936. package/manifest/components/separator.json +56 -0
  937. package/manifest/components/settings-panel.json +152 -0
  938. package/manifest/components/shape-section.json +70 -0
  939. package/manifest/components/shared-conversation.json +107 -0
  940. package/manifest/components/sheet.json +210 -0
  941. package/manifest/components/shimmer-label.json +61 -0
  942. package/manifest/components/sidebar.json +245 -0
  943. package/manifest/components/signal-edge.json +56 -0
  944. package/manifest/components/skeleton.json +46 -0
  945. package/manifest/components/skill-icon.json +46 -0
  946. package/manifest/components/slider.json +106 -0
  947. package/manifest/components/sources.json +97 -0
  948. package/manifest/components/sparkline.json +89 -0
  949. package/manifest/components/speaker-identity.json +66 -0
  950. package/manifest/components/spec-sheet.json +93 -0
  951. package/manifest/components/spectrum-visualizer.json +147 -0
  952. package/manifest/components/spinner.json +71 -0
  953. package/manifest/components/stack-icon.json +46 -0
  954. package/manifest/components/stack.json +143 -0
  955. package/manifest/components/stacks-matrix-icon.json +46 -0
  956. package/manifest/components/stat.json +111 -0
  957. package/manifest/components/status-bar.json +233 -0
  958. package/manifest/components/status-dot.json +97 -0
  959. package/manifest/components/stepper.json +107 -0
  960. package/manifest/components/stopped-run.json +97 -0
  961. package/manifest/components/streaming-text.json +82 -0
  962. package/manifest/components/sub.json +45 -0
  963. package/manifest/components/subagent-list.json +106 -0
  964. package/manifest/components/suggestions.json +106 -0
  965. package/manifest/components/sup.json +45 -0
  966. package/manifest/components/swap-label.json +86 -0
  967. package/manifest/components/switch.json +102 -0
  968. package/manifest/components/table-scroll-region.json +78 -0
  969. package/manifest/components/table.json +306 -0
  970. package/manifest/components/tabs.json +156 -0
  971. package/manifest/components/tags-input.json +255 -0
  972. package/manifest/components/tail-status.json +138 -0
  973. package/manifest/components/terminal-block.json +111 -0
  974. package/manifest/components/terminal-frame.json +146 -0
  975. package/manifest/components/textarea.json +104 -0
  976. package/manifest/components/theme-configurator.json +158 -0
  977. package/manifest/components/theme-provider.json +228 -0
  978. package/manifest/components/thinking-indicator.json +69 -0
  979. package/manifest/components/thread-list.json +87 -0
  980. package/manifest/components/thread-search.json +108 -0
  981. package/manifest/components/threshold-rail.json +223 -0
  982. package/manifest/components/time-boundary.json +68 -0
  983. package/manifest/components/time-field.json +93 -0
  984. package/manifest/components/timeline-ruler.json +178 -0
  985. package/manifest/components/timeline.json +131 -0
  986. package/manifest/components/title-bar.json +97 -0
  987. package/manifest/components/toast.json +140 -0
  988. package/manifest/components/todo-list.json +76 -0
  989. package/manifest/components/toggle-group.json +134 -0
  990. package/manifest/components/toggle.json +140 -0
  991. package/manifest/components/token-editor.json +106 -0
  992. package/manifest/components/tool-call-card.json +268 -0
  993. package/manifest/components/tool-call.json +147 -0
  994. package/manifest/components/tool-error.json +141 -0
  995. package/manifest/components/tool-group.json +97 -0
  996. package/manifest/components/tool-timeline.json +147 -0
  997. package/manifest/components/toolbar.json +192 -0
  998. package/manifest/components/tooltip.json +199 -0
  999. package/manifest/components/trace-waterfall.json +84 -0
  1000. package/manifest/components/tree-visibility-toggle.json +99 -0
  1001. package/manifest/components/tree.json +182 -0
  1002. package/manifest/components/turn-footer.json +133 -0
  1003. package/manifest/components/two-step-button.json +150 -0
  1004. package/manifest/components/typing-indicator.json +60 -0
  1005. package/manifest/components/universe-grid.json +155 -0
  1006. package/manifest/components/unread-divider.json +58 -0
  1007. package/manifest/components/usage-chart.json +162 -0
  1008. package/manifest/components/verdict-row.json +106 -0
  1009. package/manifest/components/voice-conversation.json +141 -0
  1010. package/manifest/components/web-preview.json +105 -0
  1011. package/manifest/components/web-search.json +108 -0
  1012. package/manifest/components/work-collapse.json +125 -0
  1013. package/manifest/fixtures.json +776 -0
  1014. package/manifest/manifest.json +5037 -0
  1015. package/manifest/tokens.json +288 -0
  1016. package/package.json +278 -0
@@ -0,0 +1,277 @@
1
+ "use client";
2
+ import { noteOnce, warnOnce } from "./vocabulary.js";
3
+ import * as React from "react";
4
+ import { THEME_NAME_PATTERN, resolve } from "@cueplusplus/theme-base";
5
+ import { contrastReport } from "@cueplusplus/theme-base/contrast";
6
+ //#region src/system/overrides.ts
7
+ /**
8
+ * `overrides` — the one theme edit an application may make without owning a
9
+ * theme package.
10
+ *
11
+ * A theme is a package now, and the honest way to change one is to publish
12
+ * another. But there is a real band of edits below that: one accent for a
13
+ * customer's tenant, a font stack an app already loads, a rung that needs two
14
+ * more pixels for a touch build. Making each of those a package would be a
15
+ * build step for a value that changes per request, and the alternative every
16
+ * application reaches for otherwise — a stray `<style>` with `!important` in it
17
+ * — outranks the token layer everywhere at once and takes the density islands
18
+ * and the portals down with it.
19
+ *
20
+ * So the edits are typed, and they land where the cascade already expects them:
21
+ *
22
+ * - **Colours and fonts are inline custom properties on the provider root.**
23
+ * Inline beats every stylesheet, needs no `!important`, is scoped to the
24
+ * subtree by inheritance, and — because a portal mounts on `<body>` and
25
+ * inherits nothing from its owner — is re-stamped onto the portal container
26
+ * through {@link OverridesContext}, exactly like `--cue-font-scale` already is.
27
+ * - **Densities are one document-scoped `<style>`.** A rung is selected by
28
+ * attribute, not inherited, so it cannot be an inline declaration at all; and
29
+ * `useControlHeight`'s probe hangs off `document.body`, outside every provider
30
+ * root, so a subtree-scoped rule would leave the measurement and the paint
31
+ * disagreeing by exactly the override. See {@link overridesCss}.
32
+ *
33
+ * The dev pass measures the result: an override is a colour decision made
34
+ * without the generator that would have checked it, so this file checks it
35
+ * instead. See {@link reportOverrides}.
36
+ */
37
+ /**
38
+ * The prefix every token in this system is published under.
39
+ *
40
+ * Restated here rather than imported from `../theming`: that group reaches
41
+ * `culori` and the whole generator, and `system/` is in the import graph of
42
+ * every component in the package. One six-character constant is the cheaper
43
+ * copy. `test/system/overrides.test.tsx` holds it to `CUE_TOKEN_PREFIX`.
44
+ */
45
+ const PREFIX = "--cue-";
46
+ /**
47
+ * The already-flattened, referentially stable inline record the provider
48
+ * publishes for portals.
49
+ *
50
+ * Flattened and stable both matter. `usePortalStamp()` builds a fresh object on
51
+ * every render, so a `TokenOverrides` handed down raw would be a new dependency
52
+ * on every render of every overlay, and every open popover would re-write its
53
+ * container's custom properties for nothing. The provider computes this once,
54
+ * keyed on the serialised prop and the resolved mode, and hands the *same*
55
+ * object down until one of those actually moves.
56
+ *
57
+ * `null` means "nothing to stamp" — either no provider above, or a provider
58
+ * whose overrides publish no colour or font for this mode.
59
+ *
60
+ * Internal: consumers get this through the provider, never directly.
61
+ */
62
+ const OverridesContext = React.createContext(null);
63
+ /**
64
+ * The inline declarations for the resolved mode: colours and fonts.
65
+ *
66
+ * Only one colour block is ever emitted. The mode is a fact about the document
67
+ * at this instant, and publishing both blocks would mean the dark edit sat as a
68
+ * dead custom property under a light palette, waiting for somebody to `var()`
69
+ * it by mistake.
70
+ *
71
+ * No validation of the *values* here, deliberately: these go through React's
72
+ * `style` prop and `CSSStyleDeclaration.setProperty`, and the CSSOM drops a
73
+ * declaration it cannot parse. A bad colour is a colour that does not apply,
74
+ * not an injection — which is exactly the difference between this half of the
75
+ * feature and {@link overridesCss}, where the text is written into a stylesheet
76
+ * by hand and has to be guarded.
77
+ *
78
+ * @param overrides - The prop, or `undefined`.
79
+ * @param mode - The mode after `"system"` has been resolved.
80
+ * @returns Custom property name → value; empty when there is nothing to say.
81
+ * @example
82
+ * inlineOverrides({ colors: { light: { accent: "#b35900" } } }, "light");
83
+ * // → { "--cue-accent": "#b35900" }
84
+ */
85
+ function inlineOverrides(overrides, mode) {
86
+ const inline = {};
87
+ for (const [token, value] of Object.entries(overrides?.colors?.[mode] ?? {})) if (value !== void 0) inline[`${PREFIX}${token}`] = value;
88
+ const fonts = overrides?.fonts;
89
+ if (fonts?.sans !== void 0) inline[`${PREFIX}font-sans`] = fonts.sans;
90
+ if (fonts?.mono !== void 0) inline[`${PREFIX}font-mono`] = fonts.mono;
91
+ if (fonts?.display !== void 0) inline[`${PREFIX}font-display`] = fonts.display;
92
+ return inline;
93
+ }
94
+ /**
95
+ * A value that can be written into a stylesheet without closing the rule.
96
+ *
97
+ * The inline half needs no such guard — the CSSOM parses each declaration on
98
+ * its own — but this text is concatenated into a `<style>` by hand, so a value
99
+ * carrying `;`, `}` or `<` would end the declaration, the block or the element
100
+ * and let whatever follows be parsed as CSS. An override value can easily come
101
+ * from a tenant record or a query string, so the check is not theoretical.
102
+ */
103
+ const SAFE_VALUE = /^[^;{}<>\\]+$/;
104
+ /**
105
+ * Whether a string may be written into the density stylesheet this module
106
+ * builds.
107
+ *
108
+ * The same rule {@link overridesCss} applies at `SAFE_VALUE`, exported because a
109
+ * caller that builds a {@link TokenOverrides} wants to refuse a value at the
110
+ * *input* rather than watch it be dropped, silently and one warning later, at
111
+ * the sheet. A panel that cannot ask the question has two bad answers open to
112
+ * it: keep a second copy of this regex, which stops being this regex the first
113
+ * time either moves, or write the value anyway and let a reader wonder why the
114
+ * picture did not change.
115
+ *
116
+ * `@cueplusplus/ui/configurator` exports `isSafeCssValue` (`configurator/_overrides.ts:239`)
117
+ * for the configurator's own snapshot, and this is deliberately **not** that
118
+ * function: same rule, asked from the module that owns it, without dragging in
119
+ * a subpath that also carries `ThemeConfigurator`, `ExportDialog` and an
120
+ * optional `react-aria-components` peer. Neither imports the other, and the
121
+ * test beside this file is what holds them to one answer.
122
+ *
123
+ * **The one thing the rule does not cover, said out loud: an unterminated
124
+ * `/*`.** It carries none of the five refused characters, so it is accepted and
125
+ * written, and everything after it in that stylesheet — the closing brace and
126
+ * any later declaration — is inside a comment. That is a value of the caller's
127
+ * own that stops their *other* overrides applying, not an injection: with `;`,
128
+ * `{`, `}`, `<` and `\` all refused, no second value can close the comment and
129
+ * open a rule. A caller that wants to refuse it as well can say so on top of
130
+ * this; tightening `SAFE_VALUE` itself would change what `overridesCss` writes,
131
+ * which is a different release note from this one.
132
+ *
133
+ * @param value - The proposed declaration value.
134
+ * @returns `true` when it cannot close its declaration, its block or the
135
+ * `<style>` element — see the comment case above for what that does not mean.
136
+ * @example
137
+ * isSafeTokenValue("Iosevka, monospace"); // → true
138
+ * isSafeTokenValue("red;}"); // → false
139
+ */
140
+ function isSafeTokenValue(value) {
141
+ return SAFE_VALUE.test(value);
142
+ }
143
+ /**
144
+ * The document-scoped stylesheet text for the density layer.
145
+ *
146
+ * **Why the selector says the attribute twice.** A rung a theme retunes ships
147
+ * as `[data-theme="t"] [data-density="x"]` — specificity (0,2,0). An override
148
+ * that has to beat the base rung *and* tie the theme's own has to reach (0,2,0)
149
+ * as well, and the honest way to write that on a single element is to repeat
150
+ * the attribute: no invented ancestor, no `!important`, no `:is()` trick whose
151
+ * specificity depends on its longest argument. Tied on specificity, source
152
+ * order decides — and the provider's element is appended to `<body>`, after
153
+ * every stylesheet in `<head>`, so the override wins. The same arithmetic puts
154
+ * it above the configurator's persisted snapshot, which writes bare
155
+ * `[data-density="x"]` at (0,1,0) into `<head>`.
156
+ *
157
+ * **Why it is document-scoped rather than nested under the provider root.**
158
+ * `useControlHeight()` measures `--cue-control-<size>` on a throwaway element
159
+ * appended to `document.body`, which is outside `[data-cue-root]`. A rule
160
+ * scoped under the root would leave that probe reading unoverridden geometry
161
+ * while the control beside it painted the override, and every consumer of the
162
+ * measured height — virtualised rows, canvas layout, the DMX grid — would be
163
+ * off by exactly the override. The cost of the document scope is stated in
164
+ * `ThemeProviderProps.overrides`: a nested provider's rung edits reach the
165
+ * whole page, the same way a theme's own rung rules do.
166
+ *
167
+ * @param overrides - The prop, or `undefined`.
168
+ * @returns One rule per rung, newline-separated; `""` when there is nothing to
169
+ * emit, which is the provider's signal to render no element at all.
170
+ * @example
171
+ * overridesCss({ densities: { compact: { "control-md": "1.75rem" } } });
172
+ * // → '[data-density="compact"][data-density="compact"]{--cue-control-md:1.75rem}'
173
+ */
174
+ function overridesCss(overrides) {
175
+ const rules = [];
176
+ for (const [rung, patch] of Object.entries(overrides?.densities ?? {})) {
177
+ if (!THEME_NAME_PATTERN.test(rung)) {
178
+ warnOnce(`overrides: density "${rung}" is not a usable rung name; its overrides are dropped`);
179
+ continue;
180
+ }
181
+ const declarations = [];
182
+ for (const [token, value] of Object.entries(patch ?? {})) {
183
+ if (value === void 0) continue;
184
+ if (!SAFE_VALUE.test(value)) {
185
+ warnOnce(`overrides: value ${JSON.stringify(value)} for "${token}" is not a CSS value`);
186
+ continue;
187
+ }
188
+ declarations.push(`${PREFIX}${token}:${value}`);
189
+ }
190
+ if (declarations.length === 0) continue;
191
+ rules.push(`[data-density="${rung}"][data-density="${rung}"]{${declarations.join(";")}}`);
192
+ }
193
+ return rules.join("\n");
194
+ }
195
+ /**
196
+ * Measure the palette an override actually produces, and name what it broke.
197
+ *
198
+ * `createTheme()` hands back a contrast report because a generated palette that
199
+ * nobody measured is a colour toy. An `overrides.colors` edit is the same
200
+ * decision made *without* the generator — one hex, dropped over a theme whose
201
+ * own build already cleared the eleven pairs — so it is measured here instead,
202
+ * against the palette it is layered onto.
203
+ *
204
+ * **Only what the override is answerable for is reported.** The palette is
205
+ * measured twice, once without the edit and once with it, and a pair is named
206
+ * when the edit introduced its failure, lowered its ratio, or *named either of
207
+ * its tokens*. Five of the ten themes this repository ships carry a **waived**
208
+ * required failure — a pair their own build recorded as known-bad — and
209
+ * reporting the overridden result flat would blame a tenant's accent for a pair
210
+ * it never touched, under a message that begins with the word `overrides:`. A
211
+ * report a reader learns to ignore is worse than no report. But a waiver covers
212
+ * the ink the *theme* shipped: the moment an app writes one of the two tokens
213
+ * itself, the pair is the app's, whichever way the ratio moved. See `caused()`.
214
+ *
215
+ * Failures `console.warn` and advisories `console.info`, matching the two tiers
216
+ * `contrastReport()` itself keeps: a failure is what makes a screen unreadable,
217
+ * an advisory is a ring nobody has been failed on yet.
218
+ *
219
+ * With no manifest registered for the active name the baseline is the blank
220
+ * base, which is what `resolve(null, …)` returns and what an unregistered theme
221
+ * can be measured against — the numbers are then the base's, not the palette
222
+ * the document is painted in. The message still names the theme the document is
223
+ * *stamped* with, because that is the screen the reader is looking at.
224
+ *
225
+ * Development only, and once per distinct message per process.
226
+ *
227
+ * @param manifest - The active theme's manifest, or `null` when unregistered.
228
+ * @param mode - The mode after `"system"` has been resolved.
229
+ * @param overrides - The prop, or `undefined`.
230
+ * @param theme - The name on `data-theme`, for the message.
231
+ */
232
+ function reportOverrides(manifest, mode, overrides, theme) {
233
+ if (process.env.NODE_ENV === "production") return;
234
+ const patch = overrides?.colors?.[mode];
235
+ if (patch === void 0 || Object.keys(patch).length === 0) return;
236
+ const base = resolve(manifest, { mode }).colors;
237
+ let before;
238
+ let after;
239
+ try {
240
+ before = new Map(contrastReport([{
241
+ mode,
242
+ tokens: base
243
+ }]).checks.map((check) => [check.id, check]));
244
+ after = contrastReport([{
245
+ mode,
246
+ tokens: {
247
+ ...base,
248
+ ...patch
249
+ }
250
+ }]);
251
+ } catch {
252
+ warnOnce(`overrides: a value in the ${mode} block is not a colour this can measure; the contrast pass was skipped`);
253
+ return;
254
+ }
255
+ /**
256
+ * A pair the edit is answerable for.
257
+ *
258
+ * Three of these clauses are about the *result* moving — newly measurable,
259
+ * newly failing, failing worse. The fourth is about authorship, and it is the
260
+ * one that took a review to find: an override that names either token of a
261
+ * pair has adopted that pair, even when the theme was already failing it and
262
+ * even when the edit improved the ratio without clearing the floor. Under
263
+ * `venu`, whose own build waived `accent-fg/accent` at 2.67, an app setting
264
+ * `accent-fg` to something that lands at 3.60 has made a colour decision of
265
+ * its own and is still under the 4.5 floor — and the theme's waiver covers
266
+ * the theme's ink, not the app's. Without the clause the report would go
267
+ * quiet on exactly the pair the app just took responsibility for.
268
+ */
269
+ const caused = (check) => {
270
+ const was = before.get(check.id);
271
+ return was === void 0 || was.passes || check.ratio < was.ratio || check.foreground in patch || check.background in patch;
272
+ };
273
+ for (const check of after.failures) if (caused(check)) warnOnce(`overrides: ${check.id} at ${check.ratio.toFixed(2)}:1 fails its ${check.minimum} floor under theme "${theme}"`);
274
+ for (const check of after.advisories) if (caused(check)) noteOnce(`overrides: ${check.id} at ${check.ratio.toFixed(2)}:1 misses its ${check.minimum} advisory floor under theme "${theme}"`);
275
+ }
276
+ //#endregion
277
+ export { OverridesContext, inlineOverrides, isSafeTokenValue, overridesCss, reportOverrides };
@@ -0,0 +1,56 @@
1
+ import * as React from "react";
2
+ //#region src/system/portal.d.ts
3
+ /**
4
+ * Props to spread onto a Base UI `Portal` part so the portal root inherits the
5
+ * caller's theme, density, font pairing and mode.
6
+ *
7
+ * Returns a `container` element appended to `document.body` and stamped with
8
+ * `data-theme` / `data-density` / `data-font` / `data-mode` (plus
9
+ * `--cue-font-scale` and any `ThemeProvider` `overrides` colour or font
10
+ * property) copied from the nearest provider and density island, with
11
+ * `data-style` when the caller is inside a style set, and with
12
+ * `data-cue-skin` / `data-cue-fidelity` when the caller sits inside an
13
+ * `AgentSurface` island. The container is
14
+ * `display: contents`, so it changes no layout and creates no containing block —
15
+ * fixed-position overlay content behaves exactly as if it were a direct child of
16
+ * `<body>`.
17
+ *
18
+ * Before the container exists (server render, first client render) the object is
19
+ * empty, which leaves the Base UI default (`document.body`) in place.
20
+ *
21
+ * Every overlay in this system spreads this. It is the single fix for the
22
+ * nested-density portal bug (spec §6).
23
+ *
24
+ * @returns `{ container }` once mounted, `{}` otherwise.
25
+ * @example
26
+ * const portalProps = useCuePortalProps();
27
+ * <Popover.Portal {...portalProps}><Popover.Positioner>…</Popover.Positioner></Popover.Portal>
28
+ */
29
+ declare function useCuePortalProps(): {
30
+ container?: HTMLElement;
31
+ };
32
+ interface CuePortalFrameProps {
33
+ /** Portal content to stamp. */
34
+ children: React.ReactNode;
35
+ /** Extra classes for the frame element. */
36
+ className?: string;
37
+ /** Inline styles, merged after `display: contents`. */
38
+ style?: React.CSSProperties;
39
+ }
40
+ /**
41
+ * Inline version of the portal contract, for portals whose container cannot be
42
+ * chosen (a third-party overlay, or content already portaled by something else).
43
+ *
44
+ * Wraps `children` in a `display: contents` element carrying the same
45
+ * `data-theme` / `data-density` / `data-font` / `data-mode` / `data-style` /
46
+ * `data-cue-skin` / `data-cue-fidelity` stamp, `--cue-font-scale` and
47
+ * `overrides` properties as {@link useCuePortalProps}. Prefer the hook — a
48
+ * stamped container costs one element per overlay instead of one per render
49
+ * tree — and reach for this only when the container prop is not available.
50
+ *
51
+ * @example
52
+ * <SomeThirdPartyPortal><CuePortalFrame>{content}</CuePortalFrame></SomeThirdPartyPortal>
53
+ */
54
+ declare function CuePortalFrame({ children, className, style }: CuePortalFrameProps): React.JSX.Element;
55
+ //#endregion
56
+ export { CuePortalFrame, CuePortalFrameProps, useCuePortalProps };
@@ -0,0 +1,193 @@
1
+ "use client";
2
+ import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
3
+ import { AgentSkinContext } from "./agent-skin.js";
4
+ import { DensityContext, StyleSetContext } from "./density.js";
5
+ import { OverridesContext } from "./overrides.js";
6
+ import { FontFamiliesContext, FontScaleContext, ThemeContext } from "./theme-provider.js";
7
+ import * as React from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ import { DEFAULT_FONT } from "@cueplusplus/tokens";
10
+ //#region src/system/portal.tsx
11
+ const DEFAULT_THEME = "cue";
12
+ const DEFAULT_MODE = "dark";
13
+ /** Custom property the density text ladder multiplies by; see `FontScaleContext`. */
14
+ const FONT_SCALE_PROPERTY = "--cue-font-scale";
15
+ const FONT_SANS_PROPERTY = "--cue-font-sans";
16
+ const FONT_MONO_PROPERTY = "--cue-font-mono";
17
+ /**
18
+ * Read the stamp from React context — never from the DOM. A portal is mounted
19
+ * outside its owner's DOM subtree, so `getComputedStyle`-style discovery would
20
+ * read the *body's* theme, which is exactly the bug this contract exists to
21
+ * prevent. The same detachment is why `--cue-font-scale` travels here too: the
22
+ * provider publishes it as an inline custom property, which a body-level portal
23
+ * would otherwise never inherit — and why the provider's `overrides` do, for
24
+ * exactly the same reason and by the same route.
25
+ */
26
+ function usePortalStamp() {
27
+ const theme = React.useContext(ThemeContext);
28
+ const island = React.useContext(DensityContext);
29
+ const fontScale = React.useContext(FontScaleContext);
30
+ const fontFamilies = React.useContext(FontFamiliesContext);
31
+ const overrides = React.useContext(OverridesContext);
32
+ const skin = React.useContext(AgentSkinContext);
33
+ const styleSet = React.useContext(StyleSetContext);
34
+ return {
35
+ theme: theme?.theme ?? DEFAULT_THEME,
36
+ density: island ?? theme?.density ?? "compact",
37
+ mode: theme?.mode ?? DEFAULT_MODE,
38
+ font: theme?.font ?? DEFAULT_FONT,
39
+ fontScale,
40
+ fontFamilies,
41
+ overrides,
42
+ skin: skin?.skin ?? null,
43
+ fidelity: skin?.fidelity ?? null,
44
+ styleSet
45
+ };
46
+ }
47
+ /**
48
+ * Props to spread onto a Base UI `Portal` part so the portal root inherits the
49
+ * caller's theme, density, font pairing and mode.
50
+ *
51
+ * Returns a `container` element appended to `document.body` and stamped with
52
+ * `data-theme` / `data-density` / `data-font` / `data-mode` (plus
53
+ * `--cue-font-scale` and any `ThemeProvider` `overrides` colour or font
54
+ * property) copied from the nearest provider and density island, with
55
+ * `data-style` when the caller is inside a style set, and with
56
+ * `data-cue-skin` / `data-cue-fidelity` when the caller sits inside an
57
+ * `AgentSurface` island. The container is
58
+ * `display: contents`, so it changes no layout and creates no containing block —
59
+ * fixed-position overlay content behaves exactly as if it were a direct child of
60
+ * `<body>`.
61
+ *
62
+ * Before the container exists (server render, first client render) the object is
63
+ * empty, which leaves the Base UI default (`document.body`) in place.
64
+ *
65
+ * Every overlay in this system spreads this. It is the single fix for the
66
+ * nested-density portal bug (spec §6).
67
+ *
68
+ * @returns `{ container }` once mounted, `{}` otherwise.
69
+ * @example
70
+ * const portalProps = useCuePortalProps();
71
+ * <Popover.Portal {...portalProps}><Popover.Positioner>…</Popover.Positioner></Popover.Portal>
72
+ */
73
+ function useCuePortalProps() {
74
+ const stamp = usePortalStamp();
75
+ const stampRef = React.useRef(stamp);
76
+ stampRef.current = stamp;
77
+ const [container, setContainer] = React.useState(null);
78
+ useIsomorphicLayoutEffect(() => {
79
+ if (typeof document === "undefined") return;
80
+ const element = document.createElement("div");
81
+ element.setAttribute("data-cue-portal", "");
82
+ element.style.display = "contents";
83
+ applyStamp(element, stampRef.current);
84
+ document.body.appendChild(element);
85
+ setContainer(element);
86
+ return () => {
87
+ element.remove();
88
+ setContainer(null);
89
+ };
90
+ }, []);
91
+ useIsomorphicLayoutEffect(() => {
92
+ if (container === null) return;
93
+ applyStamp(container, stamp);
94
+ }, [
95
+ container,
96
+ stamp.theme,
97
+ stamp.density,
98
+ stamp.font,
99
+ stamp.styleSet,
100
+ stamp.mode,
101
+ stamp.fontScale,
102
+ stamp.fontFamilies?.sans,
103
+ stamp.fontFamilies?.mono,
104
+ stamp.overrides,
105
+ stamp.skin,
106
+ stamp.fidelity
107
+ ]);
108
+ return React.useMemo(() => container === null ? {} : { container }, [container]);
109
+ }
110
+ /**
111
+ * The override property names last written to each container.
112
+ *
113
+ * A stamp is applied over the top of the previous one, and `style.setProperty`
114
+ * only ever adds. So a key that *disappears* — the app switching to a mode
115
+ * whose block names different tokens, or dropping the prop — would leave its
116
+ * `--cue-*` on the container for the life of the overlay, with the in-tree
117
+ * content already painting without it. This is the record of what to take off.
118
+ *
119
+ * A `WeakMap` keyed on the element rather than an attribute on it: the same
120
+ * bookkeeping written as `data-cue-override-keys` would be one more
121
+ * document-visible mutation on every write, a second place for the truth to
122
+ * live, and a new `data-` attribute in a file whose whole contract is which
123
+ * `data-` attributes a portal carries. Containers are removed with the overlay
124
+ * and collected with it, which is what makes the weak reference the right one.
125
+ */
126
+ const stampedOverrides = /* @__PURE__ */ new WeakMap();
127
+ /** Write a stamp onto a live element (the imperative half of the contract). */
128
+ function applyStamp(element, stamp) {
129
+ element.setAttribute("data-theme", stamp.theme);
130
+ element.setAttribute("data-density", stamp.density);
131
+ element.setAttribute("data-font", stamp.font);
132
+ element.setAttribute("data-mode", stamp.mode);
133
+ if (stamp.styleSet === null) element.removeAttribute("data-style");
134
+ else element.setAttribute("data-style", stamp.styleSet);
135
+ if (stamp.skin === null) element.removeAttribute("data-cue-skin");
136
+ else element.setAttribute("data-cue-skin", stamp.skin);
137
+ if (stamp.fidelity === null) element.removeAttribute("data-cue-fidelity");
138
+ else element.setAttribute("data-cue-fidelity", stamp.fidelity);
139
+ const overrides = stamp.overrides ?? {};
140
+ for (const property of stampedOverrides.get(element) ?? []) if (!(property in overrides)) element.style.removeProperty(property);
141
+ if (stamp.fontScale === null) element.style.removeProperty(FONT_SCALE_PROPERTY);
142
+ else element.style.setProperty(FONT_SCALE_PROPERTY, String(stamp.fontScale));
143
+ setOptionalProperty(element, FONT_SANS_PROPERTY, stamp.fontFamilies?.sans);
144
+ setOptionalProperty(element, FONT_MONO_PROPERTY, stamp.fontFamilies?.mono);
145
+ for (const [property, value] of Object.entries(overrides)) element.style.setProperty(property, value);
146
+ const keys = Object.keys(overrides);
147
+ if (keys.length === 0) stampedOverrides.delete(element);
148
+ else stampedOverrides.set(element, keys);
149
+ }
150
+ function setOptionalProperty(element, property, value) {
151
+ if (value === void 0) element.style.removeProperty(property);
152
+ else element.style.setProperty(property, value);
153
+ }
154
+ /**
155
+ * Inline version of the portal contract, for portals whose container cannot be
156
+ * chosen (a third-party overlay, or content already portaled by something else).
157
+ *
158
+ * Wraps `children` in a `display: contents` element carrying the same
159
+ * `data-theme` / `data-density` / `data-font` / `data-mode` / `data-style` /
160
+ * `data-cue-skin` / `data-cue-fidelity` stamp, `--cue-font-scale` and
161
+ * `overrides` properties as {@link useCuePortalProps}. Prefer the hook — a
162
+ * stamped container costs one element per overlay instead of one per render
163
+ * tree — and reach for this only when the container prop is not available.
164
+ *
165
+ * @example
166
+ * <SomeThirdPartyPortal><CuePortalFrame>{content}</CuePortalFrame></SomeThirdPartyPortal>
167
+ */
168
+ function CuePortalFrame({ children, className, style }) {
169
+ const stamp = usePortalStamp();
170
+ const frameStyle = {
171
+ display: "contents",
172
+ ...stamp.fontScale === null ? null : { [FONT_SCALE_PROPERTY]: stamp.fontScale },
173
+ ...stamp.fontFamilies?.sans === void 0 ? null : { [FONT_SANS_PROPERTY]: stamp.fontFamilies.sans },
174
+ ...stamp.fontFamilies?.mono === void 0 ? null : { [FONT_MONO_PROPERTY]: stamp.fontFamilies.mono },
175
+ ...stamp.overrides,
176
+ ...style
177
+ };
178
+ return /* @__PURE__ */ jsx("div", {
179
+ "data-cue-portal": "",
180
+ "data-theme": stamp.theme,
181
+ "data-density": stamp.density,
182
+ "data-font": stamp.font,
183
+ "data-mode": stamp.mode,
184
+ "data-style": stamp.styleSet ?? void 0,
185
+ "data-cue-skin": stamp.skin ?? void 0,
186
+ "data-cue-fidelity": stamp.fidelity ?? void 0,
187
+ className,
188
+ style: frameStyle,
189
+ children
190
+ });
191
+ }
192
+ //#endregion
193
+ export { CuePortalFrame, useCuePortalProps };
@@ -0,0 +1,134 @@
1
+ import { StyleSet } from "@cueplusplus/tokens";
2
+ import { Density as Density$1, FontName, Mode, ThemeManifest, ThemeName } from "@cueplusplus/theme-base";
3
+ //#region src/system/prepaint.d.ts
4
+ /** localStorage key the ThemeProvider and the pre-paint script share by default. */
5
+ declare const DEFAULT_STORAGE_KEY = "cue-ui";
6
+ /** Shape persisted under {@link DEFAULT_STORAGE_KEY} — kept in sync with the provider's writer. */
7
+ interface PersistedPreferences {
8
+ /** Last theme the user picked. */
9
+ theme?: string;
10
+ /** Last density level the user picked. */
11
+ density?: string;
12
+ /** Last mode the user picked, including the literal `"system"`. */
13
+ mode?: string;
14
+ /** Last font pairing the user picked. */
15
+ font?: string;
16
+ /**
17
+ * Last style set the user picked, or absent — which is what "no style set"
18
+ * looks like in storage. Absent rather than `null`, because the key is written
19
+ * only when there is a set: an application that never touches the axis stores
20
+ * the four-key object it always stored, and the pre-paint script has no fifth
21
+ * value to hold an opinion about.
22
+ */
23
+ style?: string;
24
+ }
25
+ /**
26
+ * The server-authoritative fallback stamped when storage is absent or ignored.
27
+ *
28
+ * `theme` and `mode` are required because nothing else can supply them: the
29
+ * theme is the app's own decision and the mode has no per-theme preference to
30
+ * fall back to. `density` and `font` are optional on purpose — leave either out
31
+ * and the script opens on the rung or the pairing `defaults.theme` itself
32
+ * declares (§5's `densities.default` / `fontPairings.default`), which is
33
+ * exactly what `<ThemeProvider>` opens on when the consumer passes no `density`
34
+ * or `font`. Naming one here is therefore the same statement as passing the
35
+ * prop: it overrides the theme's preference for the first paint, and the
36
+ * provider must be given the matching prop or the two disagree by a frame.
37
+ */
38
+ interface PrepaintDefaults {
39
+ theme: ThemeName;
40
+ /** Initial density rung. Omitted, the theme's own `densities.default` decides. */
41
+ density?: Density$1;
42
+ mode: Mode;
43
+ /** Initial document-wide font pairing. Omitted, the theme's own `fontPairings.default` decides. */
44
+ font?: FontName;
45
+ /**
46
+ * Initial style set. Omitted — and it is omitted by every app that has not
47
+ * asked for page composition — the script stamps no `data-style` at all, which
48
+ * is exactly what `<ThemeProvider>` does with no `styleSet` prop.
49
+ *
50
+ * Unlike `density` and `font` there is no per-theme preference behind it: no
51
+ * manifest can declare a style set, so the fall-through is two tiers deep
52
+ * (stored, then this) rather than four.
53
+ */
54
+ styleSet?: StyleSet;
55
+ }
56
+ /** Options form for apps whose server projection, not localStorage, owns first paint. */
57
+ interface PrepaintOptions {
58
+ /** localStorage key shared with ThemeProvider. */
59
+ storageKey?: string;
60
+ /** The validated fallback: `theme` and `mode` always, `density` and `font` only to override the theme's own. */
61
+ defaults: PrepaintDefaults;
62
+ /** Whether valid stored axes may override `defaults`. Defaults to `true`. */
63
+ readStoredPreferences?: boolean;
64
+ /**
65
+ * The manifests this app registers, in the same order and of the same shape
66
+ * as `<ThemeProvider themes>`. The script inlines their names, and per theme
67
+ * the rungs and pairings that theme offers, so a stored preference is judged
68
+ * before paint by exactly the rule the provider applies after it.
69
+ *
70
+ * Omitted — and it is omitted by the positional overload, which cannot carry
71
+ * it — the script gets the empty-registry rule: any well-formed theme name is
72
+ * accepted, and density and font validate against the base axes alone. That
73
+ * is deliberate rather than lax. An app that registers nothing has whatever
74
+ * theme its stylesheet paints, and refusing the name it stored would repaint
75
+ * every returning visitor's first frame in a theme they did not choose.
76
+ */
77
+ themes?: readonly ThemeManifest[];
78
+ }
79
+ /**
80
+ * Build the blocking inline script that stamps `data-theme`, `data-density`,
81
+ * `data-font`, `data-mode`, `data-style` and `color-scheme` on `<html>` from
82
+ * localStorage before the first paint, and removes `data-style` when nothing
83
+ * chose one.
84
+ *
85
+ * Render it as `<script dangerouslySetInnerHTML={{ __html: prepaintScript() }} />`
86
+ * in `<head>`, above everything else. The output never contains `</script>` and
87
+ * never throws: private-mode localStorage failures degrade to the dark-first
88
+ * defaults (`cue` / `compact` / `system` / `dark`). Two of those four are what
89
+ * bare `:root` already carries — `compact` geometry and the dark palette, from
90
+ * `@cueplusplus/theme-base/base.css` and the `@cueplusplus/tokens/axes.css` it
91
+ * imports. `cue` is not: since this release no stylesheet the library ships
92
+ * declares a `[data-theme="cue"]` block, so stamping that name paints the blank
93
+ * base unless the app imported `@cueplusplus/theme-cue/theme.css` itself. The
94
+ * script's job is to make the first frame agree with the first commit, and it
95
+ * still does — both are whatever the page's stylesheets say `cue` means.
96
+ *
97
+ * What the script *accepts* out of storage is decided by the same rule the
98
+ * provider applies a moment later. Pass the options form with `themes` — the
99
+ * array `<ThemeProvider themes>` is given — and the registered names are
100
+ * inlined, along with the rungs and pairings each theme offers, so a rung one
101
+ * theme adds is not accepted on first paint under a theme that does not have
102
+ * it. Pass nothing and the empty-registry rule applies: any well-formed theme
103
+ * name, and the base density and font axes. The positional overload below
104
+ * cannot carry a registry and always gets that rule.
105
+ *
106
+ * What it *stamps* for a visitor with nothing stored is decided the same way.
107
+ * The options form needs only `defaults.theme` and `defaults.mode`: leave
108
+ * `defaults.density` or `defaults.font` out and the script opens on the rung
109
+ * and the pairing that theme itself declares (§5's `densities.default` /
110
+ * `fontPairings.default`), which is precisely what `<ThemeProvider>` opens on
111
+ * when no `density` or `font` prop names one. Name either here and you are
112
+ * making the same statement the prop makes — so pass the matching prop, or the
113
+ * first paint and the first commit disagree by a frame.
114
+ *
115
+ * @param storageKey - localStorage key to read. Must match the `storageKey`
116
+ * passed to `<ThemeProvider>`. Defaults to {@link DEFAULT_STORAGE_KEY}.
117
+ * @param defaultTheme - Theme to stamp for a visitor with nothing persisted yet.
118
+ * Must match the `theme` passed to `<ThemeProvider>`, or the first paint
119
+ * dresses `<html>` in one preset while the app renders in another. Defaults to
120
+ * `"cue"`.
121
+ * @param defaultDensity - Density level to stamp for a visitor with nothing
122
+ * persisted yet. Same rule as `defaultTheme`: it must match the `density`
123
+ * passed to `<ThemeProvider>` or the first frame is drawn at one rung and
124
+ * every frame after it at another. Defaults to `"compact"`, the library's own
125
+ * fallback, which is what an app that passes no `density` renders at.
126
+ * @returns One line of JavaScript, safe to inline verbatim.
127
+ * @example
128
+ * // An app whose provider is <ThemeProvider theme="terminal" density="normal">:
129
+ * prepaintScript(DEFAULT_STORAGE_KEY, "terminal", "normal");
130
+ */
131
+ declare function prepaintScript(storageKey?: string, defaultTheme?: ThemeName, defaultDensity?: Density$1, defaultFont?: FontName): string;
132
+ declare function prepaintScript(options: PrepaintOptions): string;
133
+ //#endregion
134
+ export { DEFAULT_STORAGE_KEY, PersistedPreferences, PrepaintDefaults, PrepaintOptions, prepaintScript };