@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,112 @@
1
+ import "./_ramp.js";
2
+ //#region src/dmx/_universe.ts
3
+ /**
4
+ * The ruler's addresses: the start, the end, and every 64 in between.
5
+ *
6
+ * 64 is the interval a patch sheet is written in, so these are the numbers an
7
+ * operator already counts by — not a tick density chosen to fill the width.
8
+ */
9
+ const UNIVERSE_TICKS = [
10
+ 1,
11
+ 64,
12
+ 128,
13
+ 192,
14
+ 256,
15
+ 320,
16
+ 384,
17
+ 448,
18
+ 512
19
+ ];
20
+ /**
21
+ * Where a channel sits along the bar, as a percentage.
22
+ *
23
+ * 1-based in, 0-based out: channel 1 is the left edge, and the last channel
24
+ * starts one slot short of the right one — a channel is a *slot* with width,
25
+ * not a point.
26
+ *
27
+ * @param channel - The address, 1-based.
28
+ * @param slots - Frame length. Defaults to a full universe.
29
+ */
30
+ function channelPercent(channel, slots = 512) {
31
+ return (channel - 1) / slots * 100;
32
+ }
33
+ /**
34
+ * Place a patch on a universe bar and find its collisions.
35
+ *
36
+ * Three rules, each one a thing a patch tool has to get right:
37
+ *
38
+ * 1. **An allocation that occupies nothing is not drawn.** A zero-width block
39
+ * with a two-pixel floor would draw a fixture that is not patched.
40
+ * 2. **A run that walks off the end is cut, not hidden** — and marked `clipped`,
41
+ * because "your 32-channel fixture at 500 does not fit" is exactly the thing
42
+ * the operator needs to see.
43
+ * 3. **Occupancy is counted in distinct slots.** Summing sizes would let a
44
+ * double patch report more capacity in use than the universe has.
45
+ *
46
+ * @param allocations - The patch, in display order.
47
+ * @param slots - Frame length. Defaults to a full universe.
48
+ */
49
+ function universeLayout(allocations, slots = 512) {
50
+ const placed = [];
51
+ for (const [index, allocation] of allocations.entries()) {
52
+ if (!Number.isFinite(allocation.start) || !Number.isFinite(allocation.size)) continue;
53
+ const first = Math.round(allocation.start);
54
+ const size = Math.round(allocation.size);
55
+ if (size <= 0) continue;
56
+ const start = Math.max(1, first);
57
+ const end = Math.min(slots, first + size - 1);
58
+ if (end < start) continue;
59
+ placed.push({
60
+ allocation,
61
+ index,
62
+ start,
63
+ end,
64
+ clipped: first < 1 || first + size - 1 > slots
65
+ });
66
+ }
67
+ const occupancy = new Uint16Array(slots + 1);
68
+ for (const entry of placed) for (let channel = entry.start; channel <= entry.end; channel += 1) occupancy[channel] = occupancy[channel] + 1;
69
+ const conflicts = [];
70
+ let used = 0;
71
+ let run = null;
72
+ for (let channel = 1; channel <= slots; channel += 1) {
73
+ const count = occupancy[channel];
74
+ if (count > 0) used += 1;
75
+ if (count > 1) {
76
+ if (run === null) run = {
77
+ start: channel,
78
+ end: channel
79
+ };
80
+ else run.end = channel;
81
+ } else if (run !== null) {
82
+ conflicts.push(run);
83
+ run = null;
84
+ }
85
+ }
86
+ if (run !== null) conflicts.push(run);
87
+ return {
88
+ slots,
89
+ blocks: placed.map((entry) => {
90
+ let conflict = false;
91
+ for (let channel = entry.start; channel <= entry.end && !conflict; channel += 1) if (occupancy[channel] > 1) conflict = true;
92
+ return {
93
+ key: entry.allocation.id ?? `${entry.allocation.label}#${entry.index}`,
94
+ allocation: entry.allocation,
95
+ label: entry.allocation.label,
96
+ tone: entry.allocation.tone ?? "neutral",
97
+ start: entry.start,
98
+ end: entry.end,
99
+ size: entry.end - entry.start + 1,
100
+ left: channelPercent(entry.start, slots),
101
+ width: (entry.end - entry.start + 1) / slots * 100,
102
+ conflict,
103
+ clipped: entry.clipped
104
+ };
105
+ }),
106
+ conflicts,
107
+ used,
108
+ utilisation: Math.round(used / slots * 100)
109
+ };
110
+ }
111
+ //#endregion
112
+ export { UNIVERSE_TICKS, channelPercent, universeLayout };
@@ -0,0 +1,81 @@
1
+ import { DmxRamp } from "./_ramp.js";
2
+ import * as React from "react";
3
+ //#region src/dmx/channel-matrix.d.ts
4
+ /** Columns of the detail grid. 32 × 16 is the one factorisation of 512 that reads as a page. */
5
+ declare const CHANNEL_MATRIX_COLUMNS = 32;
6
+ /** Rows of the detail grid. */
7
+ declare const CHANNEL_MATRIX_ROWS = 16;
8
+ /** Which view the matrix is showing. */
9
+ type ChannelMatrixMode = "detail" | "overview";
10
+ interface ChannelMatrixProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children"> {
11
+ /**
12
+ * The frame buffer: `universes × 512` bytes, universe 0 first.
13
+ *
14
+ * Read on every animation frame rather than on every render, so mutating it
15
+ * in place is the intended usage — that is what makes a 40 Hz stream cost one
16
+ * `requestAnimationFrame` instead of one React render per packet. The one
17
+ * thing that does not follow an in-place write is the accessible summary,
18
+ * which is computed in render and so refreshes when a new reference arrives.
19
+ */
20
+ data?: Uint8Array;
21
+ /** How many universes the buffer holds. Defaults to `1`. */
22
+ universes?: number;
23
+ /** Selected universe, 0-based. Use with `onUniverseChange` for a controlled widget. */
24
+ universe?: number;
25
+ /** Initially selected universe for an uncontrolled widget. Defaults to `0`. */
26
+ defaultUniverse?: number;
27
+ /** Called with the universe a drill-in selected. */
28
+ onUniverseChange?: (universe: number) => void;
29
+ /** Current view. Use with `onModeChange` for a controlled widget. */
30
+ mode?: ChannelMatrixMode;
31
+ /** Initial view for an uncontrolled widget. Defaults to `"detail"`. */
32
+ defaultMode?: ChannelMatrixMode;
33
+ /** Called when the view changes, including on a drill-in. */
34
+ onModeChange?: (mode: ChannelMatrixMode) => void;
35
+ /** Cell colouring. Use with `onRampChange` for a controlled widget. */
36
+ ramp?: DmxRamp;
37
+ /** Initial cell colouring for an uncontrolled widget. Defaults to `"mono"`. */
38
+ defaultRamp?: DmxRamp;
39
+ /** Called when the colouring changes. */
40
+ onRampChange?: (ramp: DmxRamp) => void;
41
+ /** Whether frames are still arriving. Defaults to `true`; `false` stops the repaint loop. */
42
+ live?: boolean;
43
+ /** Show the view and colouring buttons. Defaults to `true`. */
44
+ controls?: boolean;
45
+ /** What this output is. Defaults to `"DMX output"`. */
46
+ label?: string;
47
+ /** Name a universe for its button and card. Defaults to `"Universe 3"` / `U03`. */
48
+ formatUniverse?: (universe: number) => string;
49
+ }
50
+ /**
51
+ * The channel-by-channel view: 512 addressed cells, repainted imperatively.
52
+ *
53
+ * Ported from dmxhub's bridge debugger. The interesting part is not the grid —
54
+ * it is what happens between frames. Five hundred and twelve React elements
55
+ * re-rendered forty times a second is a locked tab, so this component renders
56
+ * the grid *once* and then never re-renders it: an animation loop reads the
57
+ * buffer, diffs each slot against a previous-value cache, and writes only the
58
+ * cells whose level actually moved. A typical lighting state changes a handful
59
+ * of channels per frame, so a typical frame touches a handful of nodes.
60
+ *
61
+ * That is also why `data` is read through a ref rather than through props: a
62
+ * decoder that writes into one buffer forever is the cheapest thing it can do,
63
+ * and this component is built to be pointed at exactly that.
64
+ *
65
+ * Two things it keeps from the port, and one it fixes:
66
+ *
67
+ * - **Two ramps.** Grey answers "how bright", the status ramp answers "which
68
+ * ones are hot". Both are lookup tables, built once per theme (see `_ramp.ts`).
69
+ * - **Overview and drill-in.** Thirty-two universes as thumbnails, drawn through
70
+ * one 32×16 offscreen canvas and scaled up unsmoothed; clicking one opens it.
71
+ * - **It stops.** The original left `requestAnimationFrame` running forever. Here
72
+ * the loop is off under `prefers-reduced-motion` and off when `live` is
73
+ * `false`; a new `data` reference still repaints, so a paused stream is never
74
+ * a stale grid.
75
+ *
76
+ * @example
77
+ * <ChannelMatrix label="Output" data={buffer} universes={32} />
78
+ */
79
+ declare const ChannelMatrix: React.ForwardRefExoticComponent<ChannelMatrixProps & React.RefAttributes<HTMLDivElement>>;
80
+ //#endregion
81
+ export { CHANNEL_MATRIX_COLUMNS, CHANNEL_MATRIX_ROWS, ChannelMatrix, ChannelMatrixMode, ChannelMatrixProps };
@@ -0,0 +1,285 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { useIsomorphicLayoutEffect } from "../system/use-isomorphic-layout-effect.js";
4
+ import { useComposedRefs } from "../lib/compose.js";
5
+ import { useCuePortalProps } from "../system/portal.js";
6
+ import { usePrefersReducedMotion } from "../instruments/_motion.js";
7
+ import { DMX_RAMP_NAMES, activeChannels, dmxPalette, dmxPaletteColor, dmxPaletteInk } from "./_ramp.js";
8
+ import { DmxReadout } from "./_readout.js";
9
+ import * as React from "react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ //#region src/dmx/channel-matrix.tsx
12
+ /** Columns of the detail grid. 32 × 16 is the one factorisation of 512 that reads as a page. */
13
+ const CHANNEL_MATRIX_COLUMNS = 32;
14
+ /** Rows of the detail grid. */
15
+ const CHANNEL_MATRIX_ROWS = 16;
16
+ /** Opaque alpha for every pixel of a thumbnail. */
17
+ const OPAQUE = 255;
18
+ /** Human labels for the ramp buttons. */
19
+ const RAMP_LABELS = {
20
+ mono: "Mono",
21
+ value: "Value"
22
+ };
23
+ /**
24
+ * The channel-by-channel view: 512 addressed cells, repainted imperatively.
25
+ *
26
+ * Ported from dmxhub's bridge debugger. The interesting part is not the grid —
27
+ * it is what happens between frames. Five hundred and twelve React elements
28
+ * re-rendered forty times a second is a locked tab, so this component renders
29
+ * the grid *once* and then never re-renders it: an animation loop reads the
30
+ * buffer, diffs each slot against a previous-value cache, and writes only the
31
+ * cells whose level actually moved. A typical lighting state changes a handful
32
+ * of channels per frame, so a typical frame touches a handful of nodes.
33
+ *
34
+ * That is also why `data` is read through a ref rather than through props: a
35
+ * decoder that writes into one buffer forever is the cheapest thing it can do,
36
+ * and this component is built to be pointed at exactly that.
37
+ *
38
+ * Two things it keeps from the port, and one it fixes:
39
+ *
40
+ * - **Two ramps.** Grey answers "how bright", the status ramp answers "which
41
+ * ones are hot". Both are lookup tables, built once per theme (see `_ramp.ts`).
42
+ * - **Overview and drill-in.** Thirty-two universes as thumbnails, drawn through
43
+ * one 32×16 offscreen canvas and scaled up unsmoothed; clicking one opens it.
44
+ * - **It stops.** The original left `requestAnimationFrame` running forever. Here
45
+ * the loop is off under `prefers-reduced-motion` and off when `live` is
46
+ * `false`; a new `data` reference still repaints, so a paused stream is never
47
+ * a stale grid.
48
+ *
49
+ * @example
50
+ * <ChannelMatrix label="Output" data={buffer} universes={32} />
51
+ */
52
+ const ChannelMatrix = React.forwardRef(function ChannelMatrix({ className, data, universes = 1, universe: universeProp, defaultUniverse = 0, onUniverseChange, mode: modeProp, defaultMode = "detail", onModeChange, ramp: rampProp, defaultRamp = "mono", onRampChange, live = true, controls = true, label, formatUniverse = (value) => `Universe ${value}`, ...elementProps }, forwardedRef) {
53
+ const [uncontrolledUniverse, setUncontrolledUniverse] = React.useState(defaultUniverse);
54
+ const [uncontrolledMode, setUncontrolledMode] = React.useState(defaultMode);
55
+ const [uncontrolledRamp, setUncontrolledRamp] = React.useState(defaultRamp);
56
+ const universe = universeProp ?? uncontrolledUniverse;
57
+ const mode = modeProp ?? uncontrolledMode;
58
+ const ramp = rampProp ?? uncontrolledRamp;
59
+ const rootRef = React.useRef(null);
60
+ const ref = useComposedRefs(forwardedRef, rootRef);
61
+ const cellsRef = React.useRef([]);
62
+ const thumbnailsRef = React.useRef([]);
63
+ const offscreenRef = React.useRef(null);
64
+ const imageRef = React.useRef(null);
65
+ const previousRef = React.useRef((/* @__PURE__ */ new Int16Array(512)).fill(-1));
66
+ const paletteRef = React.useRef(dmxPalette("mono"));
67
+ const hoverIndexRef = React.useRef(null);
68
+ const valueElementRef = React.useRef(null);
69
+ const dataRef = React.useRef(data);
70
+ dataRef.current = data;
71
+ const modeRef = React.useRef(mode);
72
+ modeRef.current = mode;
73
+ const universeRef = React.useRef(universe);
74
+ universeRef.current = universe;
75
+ const universesRef = React.useRef(universes);
76
+ universesRef.current = universes;
77
+ const [hover, setHover] = React.useState(null);
78
+ const portal = useCuePortalProps();
79
+ const reduced = usePrefersReducedMotion();
80
+ const streaming = live && !reduced;
81
+ const paint = React.useCallback(() => {
82
+ const bytes = dataRef.current;
83
+ const palette = paletteRef.current;
84
+ if (modeRef.current === "detail") {
85
+ const base = universeRef.current * 512;
86
+ const previous = previousRef.current;
87
+ for (let slot = 0; slot < 512; slot += 1) {
88
+ const level = bytes?.[base + slot] ?? 0;
89
+ if (previous[slot] === level) continue;
90
+ previous[slot] = level;
91
+ const cell = cellsRef.current[slot];
92
+ if (!cell) continue;
93
+ if (level === 0) {
94
+ cell.style.backgroundColor = "";
95
+ cell.style.color = "";
96
+ cell.textContent = String(slot + 1);
97
+ } else {
98
+ cell.style.backgroundColor = dmxPaletteColor(palette, level);
99
+ cell.style.color = dmxPaletteInk(palette, level);
100
+ cell.textContent = String(level);
101
+ }
102
+ }
103
+ const hovered = hoverIndexRef.current;
104
+ if (hovered !== null && valueElementRef.current !== null) valueElementRef.current.textContent = String(bytes?.[base + hovered] ?? 0);
105
+ return;
106
+ }
107
+ const offscreen = offscreenRef.current ??= createOffscreen();
108
+ const offscreenContext = offscreen?.getContext("2d");
109
+ if (!offscreen || !offscreenContext) return;
110
+ const image = imageRef.current ??= offscreenContext.createImageData(32, 16);
111
+ for (let index = 0; index < universesRef.current; index += 1) {
112
+ const thumbnail = thumbnailsRef.current[index];
113
+ const context = thumbnail?.getContext("2d");
114
+ if (!thumbnail || !context) continue;
115
+ const base = index * 512;
116
+ for (let slot = 0; slot < 512; slot += 1) {
117
+ const level = bytes?.[base + slot] ?? 0;
118
+ const offset = slot * 4;
119
+ image.data[offset] = palette[level * 3];
120
+ image.data[offset + 1] = palette[level * 3 + 1];
121
+ image.data[offset + 2] = palette[level * 3 + 2];
122
+ image.data[offset + 3] = OPAQUE;
123
+ }
124
+ offscreenContext.putImageData(image, 0, 0);
125
+ context.imageSmoothingEnabled = false;
126
+ context.drawImage(offscreen, 0, 0, 32, 16, 0, 0, thumbnail.width, thumbnail.height);
127
+ }
128
+ }, []);
129
+ useIsomorphicLayoutEffect(() => {
130
+ paletteRef.current = dmxPalette(ramp, rootRef.current);
131
+ previousRef.current.fill(-1);
132
+ paint();
133
+ }, [
134
+ paint,
135
+ data,
136
+ mode,
137
+ ramp,
138
+ universe,
139
+ universes
140
+ ]);
141
+ React.useEffect(() => {
142
+ if (!streaming) return;
143
+ let frame = 0;
144
+ const loop = () => {
145
+ frame = requestAnimationFrame(loop);
146
+ paint();
147
+ };
148
+ frame = requestAnimationFrame(loop);
149
+ return () => cancelAnimationFrame(frame);
150
+ }, [streaming, paint]);
151
+ const selectUniverse = (next) => {
152
+ if (universeProp === void 0) setUncontrolledUniverse(next);
153
+ onUniverseChange?.(next);
154
+ };
155
+ const selectMode = (next) => {
156
+ if (modeProp === void 0) setUncontrolledMode(next);
157
+ onModeChange?.(next);
158
+ };
159
+ const selectRamp = (next) => {
160
+ if (rampProp === void 0) setUncontrolledRamp(next);
161
+ onRampChange?.(next);
162
+ };
163
+ const onCellOver = (event) => {
164
+ const cell = event.target.closest("[data-channel]");
165
+ if (cell === null) return;
166
+ const index = Number(cell.dataset["channel"]) - 1;
167
+ if (!Number.isInteger(index)) return;
168
+ const box = cell.getBoundingClientRect();
169
+ hoverIndexRef.current = index;
170
+ setHover({
171
+ index,
172
+ x: box.left + box.width / 2,
173
+ y: box.top
174
+ });
175
+ };
176
+ const onGridLeave = () => {
177
+ hoverIndexRef.current = null;
178
+ setHover(null);
179
+ };
180
+ const base = universe * 512;
181
+ const summary = `${label ?? "DMX output"}: ${activeChannels(data, base)} of 512 channels active`;
182
+ return /* @__PURE__ */ jsxs("div", {
183
+ ref,
184
+ "data-slot": "channel-matrix",
185
+ "data-mode": mode,
186
+ "data-streaming": String(streaming),
187
+ className: cn("flex min-w-0 flex-col gap-(--cue-space-3)", className),
188
+ ...elementProps,
189
+ children: [
190
+ controls ? /* @__PURE__ */ jsxs("div", {
191
+ "data-slot": "channel-matrix-controls",
192
+ className: "flex items-center gap-(--cue-space-4)",
193
+ children: [universes > 1 ? /* @__PURE__ */ jsx("div", {
194
+ className: "flex items-center gap-(--cue-space-1)",
195
+ children: ["detail", "overview"].map((value) => /* @__PURE__ */ jsx(ControlButton, {
196
+ pressed: mode === value,
197
+ onClick: () => selectMode(value),
198
+ children: value === "detail" ? "Detail" : "Overview"
199
+ }, value))
200
+ }) : null, /* @__PURE__ */ jsx("div", {
201
+ className: "flex items-center gap-(--cue-space-1)",
202
+ children: DMX_RAMP_NAMES.map((value) => /* @__PURE__ */ jsx(ControlButton, {
203
+ pressed: ramp === value,
204
+ onClick: () => selectRamp(value),
205
+ children: RAMP_LABELS[value]
206
+ }, value))
207
+ })]
208
+ }) : null,
209
+ mode === "detail" ? /* @__PURE__ */ jsx("div", {
210
+ role: "img",
211
+ "aria-label": summary,
212
+ "data-slot": "channel-matrix-grid",
213
+ className: "grid gap-px",
214
+ style: { gridTemplateColumns: `repeat(32, minmax(0, 1fr))` },
215
+ onMouseOver: onCellOver,
216
+ onMouseLeave: onGridLeave,
217
+ children: Array.from({ length: 512 }, (_unused, slot) => /* @__PURE__ */ jsx("div", {
218
+ ref: (node) => {
219
+ cellsRef.current[slot] = node;
220
+ },
221
+ "data-slot": "channel-matrix-cell",
222
+ "data-channel": slot + 1,
223
+ className: "flex aspect-square items-center justify-center rounded-[2px] border border-border bg-(--cue-data-ground) font-mono text-(length:--cue-text-micro) tabular-nums text-fg-subtle select-none",
224
+ children: slot + 1
225
+ }, slot))
226
+ }) : /* @__PURE__ */ jsx("div", {
227
+ "data-slot": "channel-matrix-overview",
228
+ className: "grid gap-(--cue-space-3)",
229
+ style: { gridTemplateColumns: "repeat(auto-fill, minmax(9rem, 1fr))" },
230
+ children: Array.from({ length: universes }, (_unused, index) => /* @__PURE__ */ jsxs("button", {
231
+ type: "button",
232
+ "data-slot": "channel-matrix-universe",
233
+ "data-universe": index,
234
+ "data-selected": index === universe ? "true" : void 0,
235
+ "aria-label": formatUniverse(index),
236
+ onClick: () => {
237
+ selectUniverse(index);
238
+ selectMode("detail");
239
+ },
240
+ className: "flex cursor-pointer flex-col gap-(--cue-space-2) rounded-(--radius-control) border border-border bg-surface-1 p-(--cue-space-2) text-left outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent data-[selected=true]:border-accent",
241
+ children: [/* @__PURE__ */ jsxs("span", {
242
+ className: "font-mono text-(length:--cue-text-micro) tabular-nums text-fg-muted",
243
+ children: ["U", String(index).padStart(2, "0")]
244
+ }), /* @__PURE__ */ jsx("canvas", {
245
+ ref: (node) => {
246
+ thumbnailsRef.current[index] = node;
247
+ },
248
+ width: 160,
249
+ height: 80,
250
+ "aria-hidden": "true",
251
+ className: "block w-full rounded-[2px] bg-(--cue-data-ground) [image-rendering:pixelated]"
252
+ })]
253
+ }, index))
254
+ }),
255
+ hover === null || mode !== "detail" ? null : /* @__PURE__ */ jsx(DmxReadout, {
256
+ container: portal.container,
257
+ channel: hover.index + 1,
258
+ value: data?.[base + hover.index] ?? 0,
259
+ x: hover.x,
260
+ y: hover.y,
261
+ valueRef: valueElementRef
262
+ })
263
+ ]
264
+ });
265
+ });
266
+ /** The 32×16 scratch canvas every thumbnail is drawn through. */
267
+ function createOffscreen() {
268
+ if (typeof document === "undefined") return null;
269
+ const canvas = document.createElement("canvas");
270
+ canvas.width = 32;
271
+ canvas.height = 16;
272
+ return canvas;
273
+ }
274
+ /** One toggle of the matrix's own control strip — a chromeless mono rung. */
275
+ function ControlButton({ pressed, onClick, children }) {
276
+ return /* @__PURE__ */ jsx("button", {
277
+ type: "button",
278
+ "aria-pressed": pressed,
279
+ onClick,
280
+ className: "flex h-control-sm cursor-pointer items-center rounded-(--radius-control) px-(--cue-space-3) font-mono text-(length:--cue-text-label) text-fg-muted outline-none transition-colors duration-150 hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent aria-pressed:bg-accent-soft aria-pressed:text-accent motion-reduce:transition-none",
281
+ children
282
+ });
283
+ }
284
+ //#endregion
285
+ export { CHANNEL_MATRIX_COLUMNS, CHANNEL_MATRIX_ROWS, ChannelMatrix };
@@ -0,0 +1,50 @@
1
+ import * as React from "react";
2
+ //#region src/dmx/dmx-bar.d.ts
3
+ interface DmxBarProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children"> {
4
+ /**
5
+ * The current frame: one byte per channel, 512 long.
6
+ *
7
+ * Repainting is keyed on the array's *identity*, which is what a frame decoder
8
+ * naturally produces (a fresh buffer per packet). A buffer mutated in place
9
+ * will not repaint — hand a new view, or use `ChannelMatrix`, which owns an
10
+ * animation loop for exactly that case.
11
+ */
12
+ data?: Uint8Array;
13
+ /** Bar height in px at the 16px root, emitted as `rem`. Defaults to `12`. */
14
+ height?: number;
15
+ /**
16
+ * Whether frames are still arriving. Defaults to `true`. When `false` the bar
17
+ * dims and says so in its accessible name — a stalled stream and a blacked-out
18
+ * universe look identical otherwise.
19
+ */
20
+ live?: boolean;
21
+ /** What this universe is. Defaults to `"DMX output"`. */
22
+ label?: string;
23
+ }
24
+ /**
25
+ * The whole universe as one strip: 512 columns, black at 0, white at 255.
26
+ *
27
+ * Ported from dmxhub's bridge, where it sits under every node in the routing
28
+ * graph and updates at the wire rate. Three decisions are what make it cheap
29
+ * enough to leave running:
30
+ *
31
+ * 1. **It is a 512×1 texture, stretched.** One `putImageData` per frame paints
32
+ * every channel; the browser scales it. Drawing 512 rectangles would be 512
33
+ * state changes for the same picture.
34
+ * 2. **The pixels are never smoothed.** `image-rendering: pixelated` keeps one
35
+ * channel one hard column. Interpolation here would invent levels between
36
+ * channels, which is the one thing a monitoring bar must not do.
37
+ * 3. **The crosshair is anchored in percent, not pixels.** The bar routinely
38
+ * sits inside a zoom transform (a node graph, a canvas). A pixel offset gets
39
+ * scaled with the parent and drifts off the cursor; a percentage resolves in
40
+ * the bar's own width and lands correctly at any zoom.
41
+ *
42
+ * The ground is `--cue-data-ground`, true black in every theme: a level of 0 is
43
+ * *nothing*, and it should not read as the panel it happens to sit on.
44
+ *
45
+ * @example
46
+ * <DmxBar label="Universe 0" data={frame} live={connected} />
47
+ */
48
+ declare const DmxBar: React.ForwardRefExoticComponent<DmxBarProps & React.RefAttributes<HTMLDivElement>>;
49
+ //#endregion
50
+ export { DmxBar, DmxBarProps };
@@ -0,0 +1,107 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { useIsomorphicLayoutEffect } from "../system/use-isomorphic-layout-effect.js";
4
+ import { useCuePortalProps } from "../system/portal.js";
5
+ import { toRem } from "../instruments/_rem.js";
6
+ import { activeChannels } from "./_ramp.js";
7
+ import { DmxReadout } from "./_readout.js";
8
+ import * as React from "react";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ //#region src/dmx/dmx-bar.tsx
11
+ /** Default bar height in px at the 16px root: readable, still an inline strip. */
12
+ const DEFAULT_HEIGHT_PX = 12;
13
+ /** Opaque alpha for every pixel of the texture. */
14
+ const OPAQUE = 255;
15
+ /**
16
+ * The whole universe as one strip: 512 columns, black at 0, white at 255.
17
+ *
18
+ * Ported from dmxhub's bridge, where it sits under every node in the routing
19
+ * graph and updates at the wire rate. Three decisions are what make it cheap
20
+ * enough to leave running:
21
+ *
22
+ * 1. **It is a 512×1 texture, stretched.** One `putImageData` per frame paints
23
+ * every channel; the browser scales it. Drawing 512 rectangles would be 512
24
+ * state changes for the same picture.
25
+ * 2. **The pixels are never smoothed.** `image-rendering: pixelated` keeps one
26
+ * channel one hard column. Interpolation here would invent levels between
27
+ * channels, which is the one thing a monitoring bar must not do.
28
+ * 3. **The crosshair is anchored in percent, not pixels.** The bar routinely
29
+ * sits inside a zoom transform (a node graph, a canvas). A pixel offset gets
30
+ * scaled with the parent and drifts off the cursor; a percentage resolves in
31
+ * the bar's own width and lands correctly at any zoom.
32
+ *
33
+ * The ground is `--cue-data-ground`, true black in every theme: a level of 0 is
34
+ * *nothing*, and it should not read as the panel it happens to sit on.
35
+ *
36
+ * @example
37
+ * <DmxBar label="Universe 0" data={frame} live={connected} />
38
+ */
39
+ const DmxBar = React.forwardRef(function DmxBar({ className, data, height = DEFAULT_HEIGHT_PX, live = true, label, ...elementProps }, ref) {
40
+ const canvasRef = React.useRef(null);
41
+ const [hover, setHover] = React.useState(null);
42
+ const portal = useCuePortalProps();
43
+ useIsomorphicLayoutEffect(() => {
44
+ const context = canvasRef.current?.getContext("2d");
45
+ if (!context) return;
46
+ const image = context.createImageData(512, 1);
47
+ for (let slot = 0; slot < 512; slot += 1) {
48
+ const level = data?.[slot] ?? 0;
49
+ const offset = slot * 4;
50
+ image.data[offset] = level;
51
+ image.data[offset + 1] = level;
52
+ image.data[offset + 2] = level;
53
+ image.data[offset + 3] = OPAQUE;
54
+ }
55
+ context.putImageData(image, 0, 0);
56
+ }, [data]);
57
+ const onMouseMove = (event) => {
58
+ const box = event.currentTarget.getBoundingClientRect();
59
+ if (box.width === 0) return;
60
+ const fraction = Math.min(.999, Math.max(0, (event.clientX - box.left) / box.width));
61
+ setHover({
62
+ index: Math.floor(fraction * 512),
63
+ percent: fraction * 100,
64
+ x: event.clientX,
65
+ y: box.top
66
+ });
67
+ };
68
+ const active = activeChannels(data);
69
+ const summary = `${label ?? "DMX output"}: ${active} of 512 channels active${live ? "" : ", stream idle"}`;
70
+ return /* @__PURE__ */ jsxs("div", {
71
+ ref,
72
+ "data-slot": "dmx-bar",
73
+ "data-live": String(live),
74
+ className: cn("relative min-w-0", className),
75
+ onMouseMove,
76
+ onMouseLeave: () => setHover(null),
77
+ ...elementProps,
78
+ children: [
79
+ /* @__PURE__ */ jsx("canvas", {
80
+ ref: canvasRef,
81
+ width: 512,
82
+ height: 1,
83
+ role: "img",
84
+ "aria-label": summary,
85
+ "data-slot": "dmx-bar-canvas",
86
+ "data-live": String(live),
87
+ className: "block w-full cursor-crosshair rounded-(--radius-control) border border-border bg-(--cue-data-ground) [image-rendering:pixelated] data-[live=false]:opacity-45",
88
+ style: { height: toRem(height) }
89
+ }),
90
+ hover === null ? null : /* @__PURE__ */ jsx("span", {
91
+ "aria-hidden": "true",
92
+ "data-slot": "dmx-bar-crosshair",
93
+ className: "pointer-events-none absolute -inset-y-px w-px bg-accent",
94
+ style: { left: `${hover.percent}%` }
95
+ }),
96
+ hover === null ? null : /* @__PURE__ */ jsx(DmxReadout, {
97
+ container: portal.container,
98
+ channel: hover.index + 1,
99
+ value: data?.[hover.index] ?? 0,
100
+ x: hover.x,
101
+ y: hover.y
102
+ })
103
+ ]
104
+ });
105
+ });
106
+ //#endregion
107
+ export { DmxBar };
@@ -0,0 +1,41 @@
1
+ import * as React from "react";
2
+ //#region src/dmx/dmx-strip.d.ts
3
+ interface DmxStripProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children"> {
4
+ /** Columns, one per simulated channel. Defaults to `128`. */
5
+ cells?: number;
6
+ /** Strip height in px at the 16px root, emitted as `rem`. Defaults to `14`. */
7
+ height?: number;
8
+ /** Seed for the whole simulation. The same seed always plays the same way. Defaults to `1`. */
9
+ seed?: number;
10
+ /** Run the simulation. Defaults to `true`; `false` holds the seeded first frame. */
11
+ simulate?: boolean;
12
+ /** What the strip depicts. Defaults to `"Simulated DMX activity"`. */
13
+ label?: string;
14
+ }
15
+ /**
16
+ * `DmxBar`'s picture with no console behind it — a lighting rig, simulated.
17
+ *
18
+ * This is the marketing device from dmxhub's site: the same 1px-tall pixelated
19
+ * canvas the bridge uses for real output, driven by a model of a plausible rig
20
+ * instead of a wire. Channels are grouped into six-channel fixtures; most sit
21
+ * where they were left, some are dark, and every so often one re-cues and
22
+ * crossfades to its new level. That grouping is what makes it read as *lighting*
23
+ * rather than as noise — a random 512 bytes looks like static, and a rig does
24
+ * not.
25
+ *
26
+ * Everything about it is seeded, including the re-cues the original left to
27
+ * `Math.random()`. A screenshot, a visual-regression run and a test all see the
28
+ * same rig from the same `seed`.
29
+ *
30
+ * Under `prefers-reduced-motion` the strip paints its first frame and stops.
31
+ * There is no information in the animation — the point of the component is the
32
+ * texture — so stilling it costs the reader nothing.
33
+ *
34
+ * @example
35
+ * <DmxStrip seed={7} />
36
+ * @example
37
+ * <DmxStrip cells={256} simulate={false} label="Rig activity" />
38
+ */
39
+ declare const DmxStrip: React.ForwardRefExoticComponent<DmxStripProps & React.RefAttributes<HTMLDivElement>>;
40
+ //#endregion
41
+ export { DmxStrip, DmxStripProps };