@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,543 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { useIsomorphicInsertionEffect, useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
4
+ import { AmbientThemeContext, DensityContext, StyleSetContext } from "./density.js";
5
+ import { buildRegistry, isStyleSet, vocabulary, warnOnce } from "./vocabulary.js";
6
+ import { OverridesContext, inlineOverrides, overridesCss, reportOverrides } from "./overrides.js";
7
+ import { DEFAULT_STORAGE_KEY } from "./prepaint.js";
8
+ import { ThemeRegistryContext } from "./theme-registry.js";
9
+ import * as React from "react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ import { MODES, THEME_NAME_PATTERN, validateManifest } from "@cueplusplus/theme-base";
12
+ //#region src/system/theme-provider.tsx
13
+ /**
14
+ * The empty registry, at module scope so the default is referentially stable.
15
+ *
16
+ * Every memo below is keyed on `themes`, and a fresh `[]` per render would
17
+ * rebuild the registry, the vocabulary and the context value on every commit of
18
+ * every app that has not registered anything yet — which, for one release, is
19
+ * all of them.
20
+ */
21
+ const EMPTY = [];
22
+ /**
23
+ * Dark-first defaults, and the one thing to know about the first of them: it is
24
+ * a *name*, and since this release nothing in the library paints it.
25
+ *
26
+ * A bare `:root` used to carry `cue`'s palette, because `@cueplusplus/tokens`
27
+ * shipped ten presets and put the default one there. `styles.css` now imports
28
+ * `@cueplusplus/theme-base/base.css` instead, whose `:root` is the blank base —
29
+ * greys and one desaturated accent. So an app that registers nothing and stamps
30
+ * nothing gets `data-theme="cue"` on its provider element and paints the blank
31
+ * base, because no stylesheet on the page declares a `[data-theme="cue"]` block.
32
+ * Colour is decided by CSS, not by this constant.
33
+ *
34
+ * That is deliberate and it is why the name stays `cue`: the alternative — a
35
+ * default of `"base"` or `""` — would change what every app that *does* import
36
+ * `@cueplusplus/theme-cue/theme.css` renders when it passes no `theme` prop, to
37
+ * buy nothing, since a name that matches no imported block already paints the
38
+ * base.
39
+ */
40
+ const DEFAULT_THEME = "cue";
41
+ const DEFAULT_MODE = "dark";
42
+ const DEFAULT_RESOLVED_MODE = "dark";
43
+ /**
44
+ * Ambient theme state. `null` outside a provider, which is how `useTheme()`
45
+ * knows to throw and how the portal helpers know to use the defaults.
46
+ *
47
+ * Internal: consumers read it through `useTheme()`.
48
+ */
49
+ const ThemeContext = React.createContext(null);
50
+ /**
51
+ * The nearest provider's `fontScale`, published on its own so portal roots can
52
+ * republish it. A portal mounts outside the provider's DOM subtree and so
53
+ * inherits none of its custom properties — including `--cue-font-scale`, which
54
+ * every text token multiplies by. `null` means "no provider above", in which
55
+ * case a portal leaves whatever the document already declares alone.
56
+ *
57
+ * Internal: not part of the public API.
58
+ */
59
+ const FontScaleContext = React.createContext(null);
60
+ /** Effective font-family overrides from the nearest provider chain. */
61
+ const FontFamiliesContext = React.createContext(null);
62
+ function isOneOf(allowed, value) {
63
+ return typeof value === "string" && allowed.includes(value);
64
+ }
65
+ function readPreferences(storageKey) {
66
+ if (typeof localStorage === "undefined") return {};
67
+ try {
68
+ const raw = localStorage.getItem(storageKey);
69
+ if (raw === null) return {};
70
+ const parsed = JSON.parse(raw);
71
+ if (parsed === null || typeof parsed !== "object") return {};
72
+ return parsed;
73
+ } catch {
74
+ return {};
75
+ }
76
+ }
77
+ /**
78
+ * The stored quadruple, accepted the way the pre-paint script accepts it:
79
+ * **theme first**, then each axis under the theme resolution actually chose.
80
+ *
81
+ * A rung a theme adds is scoped by the cascade to that theme's `data-theme`, so
82
+ * checking it against the theme that is about to be replaced rejects exactly
83
+ * the pairing the registry exists to allow — and on every commit that reads
84
+ * storage the component's `theme` is still the *prop*, never the theme the
85
+ * visitor stored. The script does `var t=…; var a=A[t]`; so does this, and it
86
+ * is the only place either rule is applied.
87
+ *
88
+ * `mode` is returned as stored, including the literal `"system"`. Resolving it
89
+ * here is what used to put `data-mode="dark"` on `<html>` for one commit under
90
+ * a stored `system`, which the stamp's own comment says must not happen.
91
+ *
92
+ * **The fallback is judged too.** It is the app's own default quadruple, which
93
+ * was chosen under the app's own default *theme* — and the theme resolution
94
+ * just chose need not be that one. Handing back `fallback.density` unchecked
95
+ * puts a rung the resolved theme does not declare onto `<html>`: an attribute
96
+ * no block matches, which is the precise failure the registry exists to
97
+ * prevent, arrived at by the code that was meant to prevent it. So each axis
98
+ * falls through the stored value, then the app default, then the base default,
99
+ * which every theme offers by construction.
100
+ *
101
+ * A *refused theme* is the one case here worth a word to the developer. The
102
+ * other three axes have a visible fallback the reader can see and change back;
103
+ * a theme that was registered when the visitor chose it and is not registered
104
+ * now is almost always a registration that was dropped by accident, and it
105
+ * shows up as "my users keep losing their theme" long after the commit that
106
+ * caused it. With an empty registry nothing is refused for being unregistered
107
+ * — theme validation is off — so the only refusal left there is a name that
108
+ * could not be a `data-theme` value at all, and it gets the other sentence:
109
+ * "register it" is not the fix for `"9bad"`.
110
+ */
111
+ function acceptedPreferences(vocab, stored, fallback) {
112
+ const theme = vocab.acceptsTheme(stored.theme) ? stored.theme : fallback.theme;
113
+ if (stored.theme !== void 0 && stored.theme !== theme) warnOnce(vocab.themes === null ? `stored theme "${stored.theme}" is not a valid theme name; falling back to "${theme}". A theme name must match ${String(THEME_NAME_PATTERN)}.` : `stored theme "${stored.theme}" is not registered; falling back to "${theme}". A visitor who chose it keeps losing it until its manifest is back in ThemeProvider's themes prop.`);
114
+ return {
115
+ theme,
116
+ density: vocab.acceptsDensity(theme, stored.density) ? stored.density : vocab.acceptsDensity(theme, fallback.density) ? fallback.density : vocab.preferredDensity(theme),
117
+ font: vocab.acceptsFont(theme, stored.font) ? stored.font : vocab.acceptsFont(theme, fallback.font) ? fallback.font : vocab.preferredFont(theme),
118
+ mode: isOneOf(MODES, stored.mode) ? stored.mode : fallback.mode,
119
+ styleSet: isStyleSet(stored.style) ? stored.style : fallback.styleSet
120
+ };
121
+ }
122
+ function writePreferences(storageKey, preferences) {
123
+ if (typeof localStorage === "undefined") return;
124
+ const { styleSet, ...axes } = preferences;
125
+ const payload = styleSet === null ? axes : {
126
+ ...axes,
127
+ style: styleSet
128
+ };
129
+ try {
130
+ localStorage.setItem(storageKey, JSON.stringify(payload));
131
+ } catch {}
132
+ }
133
+ /**
134
+ * Root of the theme system: stamps `data-theme`, `data-density` and `data-mode`
135
+ * so the token layer resolves, puts `data-font` on `<html>`, publishes
136
+ * `--cue-font-scale`, owns the persisted user preference, and publishes the
137
+ * registry the three axis hooks read.
138
+ *
139
+ * Rendering: `<div data-cue-root data-theme data-density data-mode style={{ colorScheme, --cue-font-scale }}>`
140
+ * (or the single child when `asChild`), plus `data-style` when — and only when —
141
+ * a style set is in force. The `theme`/`density`/`font`/`mode`/`styleSet` props are
142
+ * *initial* values — the provider holds the state so `setTheme` and friends can
143
+ * drive it — but a changed prop is adopted after mount, so a controlling parent
144
+ * still works.
145
+ *
146
+ * The font pairing is the one axis that never lands on this element: it has no
147
+ * island form, `<html>` is its only home, and restating it here would shadow the
148
+ * pre-paint stamp for the whole page on the first frame. See the `stamp` object
149
+ * below.
150
+ *
151
+ * Persistence and the pre-paint contract: setters write
152
+ * `{ theme, density, font, mode }` to `localStorage[storageKey]`, plus a `style`
153
+ * key holding the style set when there is one — omitted entirely when there is
154
+ * not, so an application that never touches that axis writes the same four-key
155
+ * object it always wrote. That is exactly what
156
+ * {@link prepaintScript} reads to stamp `<html>` before the first paint. The
157
+ * outermost provider keeps `<html>` in sync while the app runs (and restores the
158
+ * previous stamp on unmount) so the page ground, UA scrollbars and form controls
159
+ * follow the theme; nested providers never touch `<html>`, and never own the
160
+ * font pairing — `useTheme().font` and `setFont` inside one are the root's.
161
+ *
162
+ * @example
163
+ * // `cue` and `terminal` are the `manifest.json` each theme package ships, read
164
+ * // from the `…/manifest.json` subpath of `@cueplusplus/theme-cue` and
165
+ * // `@cueplusplus/theme-terminal`. Written that way round on purpose: a literal
166
+ * // import statement in this comment reads, to every import-graph gate in this
167
+ * // repository, as `ui` depending on a theme package — which is the one thing
168
+ * // it may not do.
169
+ * <ThemeProvider themes={[cue, terminal]} theme="terminal" density="ultra-compact" font="plex" mode="system">
170
+ * <App />
171
+ * </ThemeProvider>
172
+ */
173
+ function ThemeProvider({ themes: themesProp, theme: themeProp, density: densityProp, mode: modeProp = DEFAULT_MODE, font: fontProp, styleSet: styleSetProp, fontScale = 1, fontFamilies, overrides, storageKey = DEFAULT_STORAGE_KEY, persistPreferences = true, asChild = false, className, style: styleProp, children }) {
174
+ const ambient = React.useContext(ThemeContext);
175
+ const isRoot = ambient === null;
176
+ const outerStyleSet = React.useContext(StyleSetContext);
177
+ const ambientRegistry = React.useContext(ThemeRegistryContext);
178
+ const themes = themesProp ?? ambientRegistry?.themes ?? EMPTY;
179
+ const vocab = React.useMemo(() => vocabulary(themes), [themes]);
180
+ React.useMemo(() => {
181
+ if (process.env.NODE_ENV === "production") return;
182
+ for (const manifest of themes) {
183
+ const problems = validateManifest(manifest);
184
+ if (problems.length > 0) throw new TypeError(`ThemeProvider: manifest ${JSON.stringify(manifest.name)} is invalid\n${problems.map((p) => ` ${p.path}: ${p.message}`).join("\n")}`);
185
+ }
186
+ for (const manifest of themes) {
187
+ const rung = manifest.densities.default;
188
+ if (rung !== void 0 && !vocab.acceptsDensity(manifest.name, rung)) warnOnce(`manifest "${manifest.name}": densities.default "${rung}" is neither a base rung nor one this theme adds; the base default is used`);
189
+ const pairing = manifest.fontPairings.default;
190
+ if (pairing !== void 0 && !vocab.acceptsFont(manifest.name, pairing)) warnOnce(`manifest "${manifest.name}": fontPairings.default "${pairing}" is neither a base pairing nor one this theme adds; the base default is used`);
191
+ }
192
+ if (isRoot && themes.length === 0) warnOnce("ThemeProvider: no `themes` were registered, so there is no registry: useThemes() is empty, useTheme().manifest is null, the pre-paint script accepts any well-formed theme name out of storage, and no theme's added density rungs or font pairings are offered. Whatever [data-theme] blocks the page imported still paint. Pass themes={[…]} — see @cueplusplus/theme-base.");
193
+ }, [
194
+ themes,
195
+ vocab,
196
+ isRoot
197
+ ]);
198
+ const initialTheme = themeProp ?? (isRoot ? themes[0]?.name : ambient?.theme) ?? DEFAULT_THEME;
199
+ const initialDensity = densityProp ?? vocab.preferredDensity(initialTheme);
200
+ const initialFont = fontProp ?? vocab.preferredFont(initialTheme);
201
+ const initialStyleSet = styleSetProp ?? (isRoot ? null : outerStyleSet);
202
+ const [theme, setThemeState] = React.useState(initialTheme);
203
+ const [densityState, setDensityState] = React.useState(initialDensity);
204
+ const [mode, setModeState] = React.useState(modeProp);
205
+ const [styleSet, setStyleSetState] = React.useState(initialStyleSet);
206
+ const [storedSeed] = React.useState(() => {
207
+ if (!isRoot || !persistPreferences) return {
208
+ theme: initialTheme,
209
+ font: initialFont
210
+ };
211
+ const stored = readPreferences(storageKey);
212
+ const theme = vocab.acceptsTheme(stored.theme) ? stored.theme : initialTheme;
213
+ const fallback = fontProp ?? (theme === initialTheme ? initialFont : vocab.preferredFont(theme));
214
+ return {
215
+ theme,
216
+ font: vocab.acceptsFont(theme, stored.font) ? stored.font : fallback
217
+ };
218
+ });
219
+ const [rootFont, setRootFontState] = React.useState(storedSeed.font);
220
+ const rawFont = isRoot ? rootFont : ambient.font;
221
+ const [systemMode, setSystemMode] = React.useState(DEFAULT_RESOLVED_MODE);
222
+ const restoredKey = React.useRef(null);
223
+ const [restored, setRestored] = React.useState(false);
224
+ const manifest = React.useMemo(() => themes.find((m) => m.name === theme) ?? null, [themes, theme]);
225
+ if (vocab.themes !== null && manifest === null) warnOnce(`theme "${theme}" is not registered; useTheme().manifest is null and only the base axes are offered. Add its manifest to ThemeProvider's themes prop.`);
226
+ const density = vocab.acceptsDensity(theme, densityState) ? densityState : vocab.preferredDensity(theme);
227
+ if (density !== densityState) warnOnce(`density "${densityState}" is not offered by theme "${theme}"; using "${density}"`);
228
+ const fontTheme = isRoot && persistPreferences && !restored ? storedSeed.theme : theme;
229
+ const font = vocab.acceptsFont(fontTheme, rawFont) ? rawFont : vocab.preferredFont(fontTheme);
230
+ if (font !== rawFont) warnOnce(`font "${rawFont}" is not offered by theme "${fontTheme}"; using "${font}"`);
231
+ const resolvedMode = manifest?.supportsLight === false ? "dark" : mode === "system" ? systemMode : mode;
232
+ useIsomorphicLayoutEffect(() => {
233
+ if (!isRoot) return;
234
+ if (!persistPreferences) {
235
+ setRestored(true);
236
+ return;
237
+ }
238
+ if (restoredKey.current === storageKey) return;
239
+ restoredKey.current = storageKey;
240
+ setRestored(true);
241
+ const stored = readPreferences(storageKey);
242
+ const next = acceptedPreferences(vocab, stored, {
243
+ theme,
244
+ density,
245
+ font,
246
+ mode,
247
+ styleSet
248
+ });
249
+ setThemeState(next.theme);
250
+ setDensityState(next.density);
251
+ setRootFontState(next.font);
252
+ setModeState(next.mode);
253
+ setStyleSetState(next.styleSet);
254
+ if (stored.theme !== void 0 && stored.theme !== next.theme || stored.density !== void 0 && stored.density !== next.density || stored.font !== void 0 && stored.font !== next.font || stored.mode !== void 0 && stored.mode !== next.mode || stored.style !== void 0 && !isStyleSet(stored.style)) writePreferences(storageKey, next);
255
+ }, [
256
+ isRoot,
257
+ persistPreferences,
258
+ storageKey
259
+ ]);
260
+ const lastProps = React.useRef({
261
+ theme: themeProp,
262
+ density: densityProp,
263
+ mode: modeProp,
264
+ font: fontProp,
265
+ styleSet: styleSetProp
266
+ });
267
+ React.useEffect(() => {
268
+ const previous = lastProps.current;
269
+ lastProps.current = {
270
+ theme: themeProp,
271
+ density: densityProp,
272
+ mode: modeProp,
273
+ font: fontProp,
274
+ styleSet: styleSetProp
275
+ };
276
+ if (previous.theme !== themeProp && themeProp !== void 0) setThemeState(themeProp);
277
+ if (previous.density !== densityProp && densityProp !== void 0) setDensityState(densityProp);
278
+ if (previous.mode !== modeProp) setModeState(modeProp);
279
+ if (previous.font !== fontProp && fontProp !== void 0) setRootFontState(fontProp);
280
+ if (previous.styleSet !== styleSetProp && styleSetProp !== void 0) setStyleSetState(styleSetProp);
281
+ }, [
282
+ themeProp,
283
+ densityProp,
284
+ modeProp,
285
+ fontProp,
286
+ styleSetProp
287
+ ]);
288
+ useIsomorphicLayoutEffect(() => {
289
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
290
+ const query = window.matchMedia("(prefers-color-scheme: light)");
291
+ const sync = () => setSystemMode(query.matches ? "light" : "dark");
292
+ sync();
293
+ query.addEventListener("change", sync);
294
+ return () => query.removeEventListener("change", sync);
295
+ }, []);
296
+ const stateRef = React.useRef({
297
+ theme,
298
+ density: densityState,
299
+ mode,
300
+ font: rawFont,
301
+ styleSet
302
+ });
303
+ useIsomorphicLayoutEffect(() => {
304
+ stateRef.current = {
305
+ theme,
306
+ density: densityState,
307
+ mode,
308
+ font: rawFont,
309
+ styleSet
310
+ };
311
+ });
312
+ const persist = React.useCallback((patch) => {
313
+ const next = {
314
+ ...stateRef.current,
315
+ ...patch
316
+ };
317
+ stateRef.current = next;
318
+ if (!isRoot || !persistPreferences) return;
319
+ writePreferences(storageKey, next);
320
+ }, [
321
+ isRoot,
322
+ persistPreferences,
323
+ storageKey
324
+ ]);
325
+ const setTheme = React.useCallback((next) => {
326
+ setThemeState(next);
327
+ persist({ theme: next });
328
+ }, [persist]);
329
+ const setDensity = React.useCallback((next) => {
330
+ setDensityState(next);
331
+ persist({ density: next });
332
+ }, [persist]);
333
+ const setMode = React.useCallback((next) => {
334
+ setModeState(next);
335
+ persist({ mode: next });
336
+ }, [persist]);
337
+ const rootSetFont = React.useCallback((next) => {
338
+ setRootFontState(next);
339
+ persist({ font: next });
340
+ }, [persist]);
341
+ /** Nested providers hand the axis straight up: one document, one pairing. */
342
+ const setFont = isRoot ? rootSetFont : ambient.setFont;
343
+ const setStyleSet = React.useCallback((next) => {
344
+ setStyleSetState(next);
345
+ persist({ styleSet: next });
346
+ }, [persist]);
347
+ const originalStamp = React.useRef(null);
348
+ useIsomorphicInsertionEffect(() => {
349
+ if (!isRoot || typeof document === "undefined") return;
350
+ const root = document.documentElement;
351
+ const current = {
352
+ theme,
353
+ density,
354
+ font,
355
+ mode,
356
+ styleSet
357
+ };
358
+ const next = restored || !persistPreferences ? current : acceptedPreferences(vocab, readPreferences(storageKey), current);
359
+ originalStamp.current ??= {
360
+ theme: root.getAttribute("data-theme"),
361
+ density: root.getAttribute("data-density"),
362
+ font: root.getAttribute("data-font"),
363
+ mode: root.getAttribute("data-mode"),
364
+ style: root.getAttribute("data-style"),
365
+ colorScheme: root.style.colorScheme
366
+ };
367
+ const write = (name, value) => {
368
+ if (root.getAttribute(name) !== value) root.setAttribute(name, value);
369
+ };
370
+ write("data-theme", next.theme);
371
+ write("data-density", next.density);
372
+ write("data-font", next.font);
373
+ write("data-mode", next.mode);
374
+ if (next.styleSet === null) {
375
+ if (root.hasAttribute("data-style")) root.removeAttribute("data-style");
376
+ } else write("data-style", next.styleSet);
377
+ const scheme = (themes.find((m) => m.name === next.theme) ?? null)?.supportsLight === false ? "dark" : next.mode === "system" ? "light dark" : next.mode;
378
+ if (root.style.colorScheme !== scheme) root.style.colorScheme = scheme;
379
+ }, [
380
+ isRoot,
381
+ restored,
382
+ persistPreferences,
383
+ storageKey,
384
+ theme,
385
+ density,
386
+ font,
387
+ mode,
388
+ styleSet,
389
+ themes,
390
+ vocab
391
+ ]);
392
+ React.useEffect(() => () => {
393
+ const original = originalStamp.current;
394
+ if (original === null || typeof document === "undefined") return;
395
+ originalStamp.current = null;
396
+ const root = document.documentElement;
397
+ const restore = (name, value) => {
398
+ if (value === null) root.removeAttribute(name);
399
+ else root.setAttribute(name, value);
400
+ };
401
+ restore("data-theme", original.theme);
402
+ restore("data-density", original.density);
403
+ restore("data-font", original.font);
404
+ restore("data-mode", original.mode);
405
+ restore("data-style", original.style);
406
+ root.style.colorScheme = original.colorScheme;
407
+ }, []);
408
+ const effectiveStyleSet = styleSet ?? outerStyleSet;
409
+ const contextValue = React.useMemo(() => ({
410
+ theme,
411
+ manifest,
412
+ density,
413
+ mode,
414
+ font,
415
+ styleSet: effectiveStyleSet,
416
+ resolvedMode,
417
+ setTheme,
418
+ setDensity,
419
+ setMode,
420
+ setFont,
421
+ setStyleSet
422
+ }), [
423
+ theme,
424
+ manifest,
425
+ density,
426
+ mode,
427
+ font,
428
+ effectiveStyleSet,
429
+ resolvedMode,
430
+ setTheme,
431
+ setDensity,
432
+ setMode,
433
+ setFont,
434
+ setStyleSet
435
+ ]);
436
+ /** The axes on offer under the theme that is actually active. */
437
+ const registry = React.useMemo(() => buildRegistry(themes, theme), [themes, theme]);
438
+ const parentFontFamilies = React.useContext(FontFamiliesContext);
439
+ const effectiveFontFamilies = React.useMemo(() => {
440
+ const sans = fontFamilies?.sans ?? parentFontFamilies?.sans;
441
+ const mono = fontFamilies?.mono ?? parentFontFamilies?.mono;
442
+ return sans === void 0 && mono === void 0 ? null : {
443
+ sans,
444
+ mono
445
+ };
446
+ }, [
447
+ fontFamilies?.sans,
448
+ fontFamilies?.mono,
449
+ parentFontFamilies?.sans,
450
+ parentFontFamilies?.mono
451
+ ]);
452
+ const overridesKey = JSON.stringify(overrides ?? null);
453
+ const inline = React.useMemo(() => inlineOverrides(overrides, resolvedMode), [overridesKey, resolvedMode]);
454
+ const overridesStyle = React.useMemo(() => overridesCss(overrides), [overridesKey]);
455
+ const parentOverrides = React.useContext(OverridesContext);
456
+ const effectiveOverrides = React.useMemo(() => {
457
+ const merged = {
458
+ ...parentOverrides,
459
+ ...inline
460
+ };
461
+ return Object.keys(merged).length === 0 ? null : merged;
462
+ }, [parentOverrides, inline]);
463
+ React.useEffect(() => {
464
+ if (process.env.NODE_ENV === "production") return;
465
+ reportOverrides(manifest, resolvedMode, overrides, theme);
466
+ }, [
467
+ manifest,
468
+ resolvedMode,
469
+ overridesKey,
470
+ theme
471
+ ]);
472
+ const style = React.useMemo(() => ({
473
+ colorScheme: manifest?.supportsLight === false ? "dark" : mode === "system" ? "light dark" : mode,
474
+ "--cue-font-scale": fontScale,
475
+ ...fontFamilies?.sans === void 0 ? null : { "--cue-font-sans": fontFamilies.sans },
476
+ ...fontFamilies?.mono === void 0 ? null : { "--cue-font-mono": fontFamilies.mono },
477
+ ...inline,
478
+ ...styleProp
479
+ }), [
480
+ manifest?.supportsLight,
481
+ mode,
482
+ fontScale,
483
+ fontFamilies?.sans,
484
+ fontFamilies?.mono,
485
+ inline,
486
+ styleProp
487
+ ]);
488
+ const stamp = {
489
+ "data-cue-root": "",
490
+ "data-theme": theme,
491
+ "data-density": density,
492
+ "data-mode": mode,
493
+ ...styleSet === null ? null : { "data-style": styleSet }
494
+ };
495
+ let root;
496
+ if (asChild) {
497
+ const child = React.Children.only(children);
498
+ root = React.cloneElement(child, {
499
+ ...stamp,
500
+ className: cn(className, child.props.className),
501
+ style: {
502
+ ...style,
503
+ ...child.props.style
504
+ }
505
+ });
506
+ } else root = /* @__PURE__ */ jsx("div", {
507
+ ...stamp,
508
+ className,
509
+ style,
510
+ children
511
+ });
512
+ const densityLayer = overridesStyle === "" ? null : /* @__PURE__ */ jsx("style", {
513
+ "data-cue-overrides": "",
514
+ children: overridesStyle
515
+ });
516
+ return /* @__PURE__ */ jsx(ThemeRegistryContext.Provider, {
517
+ value: registry,
518
+ children: /* @__PURE__ */ jsx(ThemeContext.Provider, {
519
+ value: contextValue,
520
+ children: /* @__PURE__ */ jsx(AmbientThemeContext.Provider, {
521
+ value: theme,
522
+ children: /* @__PURE__ */ jsx(FontScaleContext.Provider, {
523
+ value: fontScale,
524
+ children: /* @__PURE__ */ jsx(FontFamiliesContext.Provider, {
525
+ value: effectiveFontFamilies,
526
+ children: /* @__PURE__ */ jsx(OverridesContext.Provider, {
527
+ value: effectiveOverrides,
528
+ children: /* @__PURE__ */ jsx(DensityContext.Provider, {
529
+ value: density,
530
+ children: /* @__PURE__ */ jsxs(StyleSetContext.Provider, {
531
+ value: effectiveStyleSet,
532
+ children: [root, densityLayer]
533
+ })
534
+ })
535
+ })
536
+ })
537
+ })
538
+ })
539
+ })
540
+ });
541
+ }
542
+ //#endregion
543
+ export { FontFamiliesContext, FontScaleContext, ThemeContext, ThemeProvider };
@@ -0,0 +1,53 @@
1
+ import { ThemeRegistry } from "./vocabulary.js";
2
+ import "react";
3
+ import { DensityEntry, FontEntry, ThemeManifest } from "@cueplusplus/theme-base";
4
+ //#region src/system/theme-registry.d.ts
5
+ /**
6
+ * Every registered manifest, in registration order.
7
+ *
8
+ * The array a picker enumerates. It is the `themes` prop the nearest provider
9
+ * was handed, not a copy: registration is an application decision, and this
10
+ * library never discovers a theme by itself.
11
+ *
12
+ * @throws If called outside a `<ThemeProvider>`, like `useTheme()`.
13
+ * @example
14
+ * const themes = useThemes();
15
+ * const { theme, setTheme } = useTheme();
16
+ * return themes.map((m) => (
17
+ * <Chip key={m.name} selected={m.name === theme} onClick={() => setTheme(m.name)}>
18
+ * {m.name}
19
+ * </Chip>
20
+ * ));
21
+ */
22
+ declare function useThemes(): readonly ThemeManifest[];
23
+ /**
24
+ * The rungs an app may offer right now: the base five, then the ACTIVE theme's
25
+ * additions.
26
+ *
27
+ * Active, not registered: a rung a theme adds is emitted under that theme's
28
+ * `[data-theme]`, so offering another theme's rung would offer a control that
29
+ * changes nothing. Switch theme and this list changes with it.
30
+ *
31
+ * @throws If called outside a `<ThemeProvider>`.
32
+ * @example
33
+ * const rungs = useDensities();
34
+ * const { density, setDensity } = useTheme();
35
+ * <Select
36
+ * items={rungs.map((d) => ({ value: d.name, label: d.name }))}
37
+ * value={density}
38
+ * onValueChange={setDensity}
39
+ * />
40
+ */
41
+ declare function useDensities(): readonly DensityEntry[];
42
+ /**
43
+ * The font pairings, by the same rule: the base eight, then the active theme's.
44
+ *
45
+ * @throws If called outside a `<ThemeProvider>`.
46
+ * @example
47
+ * // The stacks a pairing resolves to, for a specimen that renders its own row.
48
+ * const { font } = useTheme();
49
+ * const sans = useFonts().find((f) => f.name === font)?.stacks["font-sans"];
50
+ */
51
+ declare function useFonts(): readonly FontEntry[];
52
+ //#endregion
53
+ export { type ThemeRegistry, useDensities, useFonts, useThemes };
@@ -0,0 +1,66 @@
1
+ "use client";
2
+ import "./vocabulary.js";
3
+ import * as React from "react";
4
+ //#region src/system/theme-registry.tsx
5
+ /** Internal: consumers read it through the three hooks. `null` outside a provider. */
6
+ const ThemeRegistryContext = React.createContext(null);
7
+ function useRegistry(hook) {
8
+ const registry = React.useContext(ThemeRegistryContext);
9
+ if (registry === null) throw new Error(`${hook}() must be called inside a <ThemeProvider>.`);
10
+ return registry;
11
+ }
12
+ /**
13
+ * Every registered manifest, in registration order.
14
+ *
15
+ * The array a picker enumerates. It is the `themes` prop the nearest provider
16
+ * was handed, not a copy: registration is an application decision, and this
17
+ * library never discovers a theme by itself.
18
+ *
19
+ * @throws If called outside a `<ThemeProvider>`, like `useTheme()`.
20
+ * @example
21
+ * const themes = useThemes();
22
+ * const { theme, setTheme } = useTheme();
23
+ * return themes.map((m) => (
24
+ * <Chip key={m.name} selected={m.name === theme} onClick={() => setTheme(m.name)}>
25
+ * {m.name}
26
+ * </Chip>
27
+ * ));
28
+ */
29
+ function useThemes() {
30
+ return useRegistry("useThemes").themes;
31
+ }
32
+ /**
33
+ * The rungs an app may offer right now: the base five, then the ACTIVE theme's
34
+ * additions.
35
+ *
36
+ * Active, not registered: a rung a theme adds is emitted under that theme's
37
+ * `[data-theme]`, so offering another theme's rung would offer a control that
38
+ * changes nothing. Switch theme and this list changes with it.
39
+ *
40
+ * @throws If called outside a `<ThemeProvider>`.
41
+ * @example
42
+ * const rungs = useDensities();
43
+ * const { density, setDensity } = useTheme();
44
+ * <Select
45
+ * items={rungs.map((d) => ({ value: d.name, label: d.name }))}
46
+ * value={density}
47
+ * onValueChange={setDensity}
48
+ * />
49
+ */
50
+ function useDensities() {
51
+ return useRegistry("useDensities").densities;
52
+ }
53
+ /**
54
+ * The font pairings, by the same rule: the base eight, then the active theme's.
55
+ *
56
+ * @throws If called outside a `<ThemeProvider>`.
57
+ * @example
58
+ * // The stacks a pairing resolves to, for a specimen that renders its own row.
59
+ * const { font } = useTheme();
60
+ * const sans = useFonts().find((f) => f.name === font)?.stacks["font-sans"];
61
+ */
62
+ function useFonts() {
63
+ return useRegistry("useFonts").fonts;
64
+ }
65
+ //#endregion
66
+ export { ThemeRegistryContext, useDensities, useFonts, useThemes };