@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,197 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { toRem } from "../instruments/_rem.js";
4
+ import { keyboardLayout, keyboardWindow, noteAtOffset, noteName } from "./_notes.js";
5
+ import * as React from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/midi/piano-keyboard.tsx
8
+ /** Octaves drawn when the caller does not say. Three is the ported default. */
9
+ const DEFAULT_OCTAVES = 3;
10
+ /** Board height in px at the 16px root: the white keys' full length. */
11
+ const DEFAULT_KEY_HEIGHT_PX = 48;
12
+ /** How far down the board a black key reaches, as a share of the whites. */
13
+ const BLACK_KEY_HEIGHT = "62%";
14
+ /** Height of the marker rail under the keys, in px at the 16px root. */
15
+ const RAIL_HEIGHT_PX = 12;
16
+ /** What a page key moves an edge by: one octave. */
17
+ const OCTAVE_STEP = 12;
18
+ /**
19
+ * A piano keyboard as a range control: drag the markers, or arrow the edges.
20
+ *
21
+ * Ported from ableton-sync's note-range picker, geometry intact — 16px whites,
22
+ * 10px blacks over the seams — and rebuilt around three things the original did
23
+ * not have:
24
+ *
25
+ * 1. **The edges are sliders.** The port moved its markers with `mousedown` and
26
+ * a window listener, which means no keyboard, no screen reader and no touch.
27
+ * Here each marker is a `role="slider"` announcing its note by name, so
28
+ * "set the low end to C2" is reachable without a pointer.
29
+ * 2. **The board holds still while you drag.** The window is centred on the
30
+ * selection, so moving an edge moves the window, which moves the note under
31
+ * the cursor — the port's markers slid away from the pointer mid-drag. The
32
+ * window is frozen for the length of a gesture instead.
33
+ * 3. **It is drawn in console materials, not in white and black.** A photo of a
34
+ * piano inverts in a light theme; a `surface-3` white key and a
35
+ * `--cue-data-ground` black key read the same in both. The information — what
36
+ * is in range, what is sounding — is carried by the accent, which is the only
37
+ * thing here that a theme is allowed to move.
38
+ *
39
+ * @example
40
+ * <PianoKeyboard range={range} onRangeChange={setRange} highlight={sounding} />
41
+ */
42
+ const PianoKeyboard = React.forwardRef(function PianoKeyboard({ className, range: rangeProp, defaultRange = {
43
+ start: 48,
44
+ end: 72
45
+ }, onRangeChange, octaves = DEFAULT_OCTAVES, highlight, keyHeight = DEFAULT_KEY_HEIGHT_PX, label = "Note range", readout = true, disabled = false, ...elementProps }, forwardedRef) {
46
+ const [uncontrolledRange, setUncontrolledRange] = React.useState(defaultRange);
47
+ const range = rangeProp ?? uncontrolledRange;
48
+ const boardRef = React.useRef(null);
49
+ const [drag, setDrag] = React.useState(null);
50
+ const settled = React.useMemo(() => keyboardWindow(range, octaves), [range, octaves]);
51
+ const view = drag?.window ?? settled;
52
+ const { start: viewStart, end: viewEnd } = view;
53
+ const layout = React.useMemo(() => keyboardLayout({
54
+ start: viewStart,
55
+ end: viewEnd
56
+ }), [viewStart, viewEnd]);
57
+ const lit = React.useMemo(() => new Set(highlight ?? []), [highlight]);
58
+ const setEdge = (edge, note) => {
59
+ const next = edge === "start" ? {
60
+ start: clamp(note, 0, range.end),
61
+ end: range.end
62
+ } : {
63
+ start: range.start,
64
+ end: clamp(note, range.start, 127)
65
+ };
66
+ if (next.start === range.start && next.end === range.end) return;
67
+ setUncontrolledRange(next);
68
+ onRangeChange?.(next);
69
+ };
70
+ const onPointerDown = (edge) => (event) => {
71
+ if (disabled || event.button !== 0) return;
72
+ event.currentTarget.setPointerCapture?.(event.pointerId);
73
+ setDrag({
74
+ edge,
75
+ pointerId: event.pointerId,
76
+ window: view
77
+ });
78
+ };
79
+ const onPointerMove = (event) => {
80
+ if (drag === null || drag.pointerId !== event.pointerId) return;
81
+ const box = boardRef.current?.getBoundingClientRect();
82
+ if (box === void 0 || box.width === 0) return;
83
+ const offset = (event.clientX - box.left) / box.width * layout.width;
84
+ setEdge(drag.edge, noteAtOffset(offset, drag.window));
85
+ };
86
+ const endDrag = (event) => {
87
+ if (drag === null || drag.pointerId !== event.pointerId) return;
88
+ event.currentTarget.releasePointerCapture?.(event.pointerId);
89
+ setDrag(null);
90
+ };
91
+ const onKeyDown = (edge) => (event) => {
92
+ if (disabled) return;
93
+ const note = edge === "start" ? range.start : range.end;
94
+ let next = null;
95
+ if (event.key === "ArrowRight" || event.key === "ArrowUp") next = note + 1;
96
+ else if (event.key === "ArrowLeft" || event.key === "ArrowDown") next = note - 1;
97
+ else if (event.key === "PageUp") next = note + OCTAVE_STEP;
98
+ else if (event.key === "PageDown") next = note - OCTAVE_STEP;
99
+ else if (event.key === "Home") next = 0;
100
+ else if (event.key === "End") next = 127;
101
+ if (next === null) return;
102
+ event.preventDefault();
103
+ setEdge(edge, next);
104
+ };
105
+ const boardStyle = { width: toRem(layout.width) };
106
+ return /* @__PURE__ */ jsxs("div", {
107
+ ref: forwardedRef,
108
+ "data-slot": "piano-keyboard",
109
+ role: "group",
110
+ "aria-label": label,
111
+ className: cn("inline-flex flex-col gap-(--cue-space-1) select-none", className),
112
+ ...elementProps,
113
+ children: [/* @__PURE__ */ jsxs("div", {
114
+ ref: boardRef,
115
+ "data-slot": "piano-keyboard-board",
116
+ className: "relative",
117
+ style: boardStyle,
118
+ children: [/* @__PURE__ */ jsx("div", {
119
+ "data-slot": "piano-keyboard-keys",
120
+ className: "relative overflow-hidden rounded-(--radius-control) border border-border bg-sunken",
121
+ style: { height: toRem(keyHeight) },
122
+ children: layout.keys.map((key) => {
123
+ const inRange = key.note >= range.start && key.note <= range.end;
124
+ const sounding = lit.has(key.note);
125
+ return /* @__PURE__ */ jsx("span", {
126
+ "data-slot": "piano-key",
127
+ "data-note": key.note,
128
+ "data-black": String(key.black),
129
+ "data-in-range": String(inRange),
130
+ "data-lit": String(sounding),
131
+ title: key.name,
132
+ className: keyClasses(key.black, inRange, sounding),
133
+ style: {
134
+ left: toRem(key.left),
135
+ width: toRem(key.width),
136
+ height: key.black ? BLACK_KEY_HEIGHT : "100%"
137
+ }
138
+ }, key.note);
139
+ })
140
+ }), /* @__PURE__ */ jsx("div", {
141
+ "data-slot": "piano-keyboard-rail",
142
+ className: "relative",
143
+ style: { height: toRem(RAIL_HEIGHT_PX) },
144
+ children: ["start", "end"].map((edge) => {
145
+ const note = edge === "start" ? range.start : range.end;
146
+ const key = layout.keys.find((candidate) => candidate.note === note);
147
+ if (key === void 0) return null;
148
+ return /* @__PURE__ */ jsx("div", {
149
+ role: "slider",
150
+ "data-slot": "piano-keyboard-marker",
151
+ "data-edge": edge,
152
+ "data-dragging": String(drag?.edge === edge),
153
+ tabIndex: disabled ? -1 : 0,
154
+ "aria-label": `${label} ${edge}`,
155
+ "aria-valuenow": note,
156
+ "aria-valuemin": edge === "start" ? 0 : range.start,
157
+ "aria-valuemax": edge === "start" ? range.end : 127,
158
+ "aria-valuetext": noteName(note),
159
+ "aria-disabled": disabled ? true : void 0,
160
+ onPointerDown: onPointerDown(edge),
161
+ onPointerMove,
162
+ onPointerUp: endDrag,
163
+ onPointerCancel: endDrag,
164
+ onKeyDown: onKeyDown(edge),
165
+ className: cn("absolute top-0 flex h-full -translate-x-1/2 touch-none items-start justify-center rounded-(--radius-control) px-px outline-none", "focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent", disabled ? "cursor-default opacity-40" : "cursor-ew-resize"),
166
+ style: { left: toRem(key.left + key.width / 2) },
167
+ children: /* @__PURE__ */ jsx("span", {
168
+ "aria-hidden": "true",
169
+ "data-slot": "piano-keyboard-marker-glyph",
170
+ className: "h-0 w-0 border-x-[3px] border-b-[4px] border-x-transparent border-b-accent"
171
+ })
172
+ }, edge);
173
+ })
174
+ })]
175
+ }), readout ? /* @__PURE__ */ jsx("p", {
176
+ "data-slot": "piano-keyboard-readout",
177
+ className: "font-mono text-(length:--cue-text-micro) text-fg-subtle tabular-nums",
178
+ children: `${noteName(range.start)} to ${noteName(range.end)} · ${range.end - range.start + 1} notes`
179
+ }) : null]
180
+ });
181
+ });
182
+ /**
183
+ * Ink for one key.
184
+ *
185
+ * Computed rather than left to `data-[…]` variants because three states stack
186
+ * onto one property and CSS would decide the winner by stylesheet order, which
187
+ * is not something this component gets to control.
188
+ */
189
+ function keyClasses(black, inRange, sounding) {
190
+ return cn("absolute top-0 border transition-colors motion-reduce:transition-none", black ? "z-10 rounded-b-[2px] border-border-strong" : "rounded-b-[2px] border-border", sounding ? "bg-accent" : inRange ? black ? "bg-accent/45" : "bg-accent-soft" : black ? "bg-(--cue-data-ground)" : "bg-surface-3");
191
+ }
192
+ /** Keep a note inside a pair of bounds. */
193
+ function clamp(note, low, high) {
194
+ return Math.min(high, Math.max(low, note));
195
+ }
196
+ //#endregion
197
+ export { PianoKeyboard };
@@ -0,0 +1,65 @@
1
+ import { FrequencyBand, RampName } from "../charts/ramps.js";
2
+ import * as React from "react";
3
+ //#region src/midi/spectrum-visualizer.d.ts
4
+ /**
5
+ * Backing-store width before anything measures the element.
6
+ *
7
+ * The same 600 the `UsageChart` draws into: wide enough that a 31-band analyser
8
+ * gets 19 pixels a bar, narrow enough to be cheap. A `ResizeObserver` replaces
9
+ * it with the real width as soon as there is one.
10
+ */
11
+ declare const SPECTRUM_WIDTH = 600;
12
+ /** How a spectrum is drawn. */
13
+ type SpectrumMode = "bars" | "line";
14
+ interface SpectrumVisualizerProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children"> {
15
+ /**
16
+ * One level per band, `0`–`1`, in the ramp's own order.
17
+ *
18
+ * Positional rather than keyed by band id: an FFT hands back an array forty
19
+ * times a second, and building a lookup per frame to match it up is work for
20
+ * no information.
21
+ */
22
+ levels: readonly number[] | Float32Array;
23
+ /** The bands: a ramp from `/charts` by name, or a band list. Defaults to `"bands-7"`. */
24
+ ramp?: RampName | readonly FrequencyBand[];
25
+ /** Bars or a line trace. Defaults to `"bars"`. */
26
+ mode?: SpectrumMode;
27
+ /** Trigger levels to rule, one per band or one for all of them. */
28
+ thresholds?: number | readonly number[];
29
+ /** Band ids to keep bright. Empty or absent means every band is bright. */
30
+ selected?: readonly string[];
31
+ /** Display gain applied to every level before drawing. Defaults to `1`. */
32
+ sensitivity?: number;
33
+ /** Graph height in px at the 16px root, emitted as `rem`. Defaults to `96`. */
34
+ height?: number;
35
+ /** List the band names under the graph. Defaults to `true`. */
36
+ labels?: boolean;
37
+ /** What is being analysed. Defaults to `"Spectrum"`. */
38
+ label?: string;
39
+ }
40
+ /**
41
+ * The FFT, drawn: one bar per frequency band, or one line across all of them.
42
+ *
43
+ * Ported from ableton-sync's analyser, with the colours taken off the caller's
44
+ * hands. The original asked for a `color` per band and defaulted to `#00FF00`
45
+ * when it did not get one, which is how an audio tool ends up with two
46
+ * different greens for the same band in two different panels. Here the bands
47
+ * *are* the ramp — the same `BANDS_7`/`BANDS_10`/`BANDS_16`/`BANDS_31` the
48
+ * `/charts` subpath publishes — so bass is the same red in the analyser, in the
49
+ * legend and in any chart of the same data.
50
+ *
51
+ * Those ramps are deliberately theme-independent (see `charts/ramps.tsx`): a
52
+ * listener who has learnt "bass is red" must not have to relearn it because the
53
+ * console switched to a different accent. Everything *around* the data — the
54
+ * grid, the line trace — does read tokens, and is resolved at paint time so a
55
+ * theme switch needs no subscription.
56
+ *
57
+ * Selection dims rather than hides. A band that vanished when deselected would
58
+ * change the shape of the spectrum, and the shape is the reading.
59
+ *
60
+ * @example
61
+ * <SpectrumVisualizer levels={fft} ramp="bands-31" thresholds={0.7} />
62
+ */
63
+ declare const SpectrumVisualizer: React.ForwardRefExoticComponent<SpectrumVisualizerProps & React.RefAttributes<HTMLDivElement>>;
64
+ //#endregion
65
+ export { SPECTRUM_WIDTH, SpectrumMode, SpectrumVisualizer, SpectrumVisualizerProps };
@@ -0,0 +1,213 @@
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 { toRem } from "../instruments/_rem.js";
6
+ import { resolveToken } from "../charts/_token.js";
7
+ import { RAMPS } from "../charts/ramps.js";
8
+ import * as React from "react";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ //#region src/midi/spectrum-visualizer.tsx
11
+ /**
12
+ * Backing-store width before anything measures the element.
13
+ *
14
+ * The same 600 the `UsageChart` draws into: wide enough that a 31-band analyser
15
+ * gets 19 pixels a bar, narrow enough to be cheap. A `ResizeObserver` replaces
16
+ * it with the real width as soon as there is one.
17
+ */
18
+ const SPECTRUM_WIDTH = 600;
19
+ /** Default graph height in px at the 16px root. */
20
+ const DEFAULT_HEIGHT_PX = 96;
21
+ /** How far a band outside the selection is faded. */
22
+ const DIM_ALPHA = .2;
23
+ /** Opacity of a threshold rule, selected and not. */
24
+ const RULE_ALPHA = .5;
25
+ const RULE_ALPHA_DIM = .1;
26
+ /** Horizontal grid divisions. Five lines: 0, 25, 50, 75 and 100 per cent. */
27
+ const GRID_LINES = 4;
28
+ /** Share of a bar's slot left as breathing room, split between its two sides. */
29
+ const BAR_PADDING = .1;
30
+ /** Ink for the grid when the token cannot be read (server render, bare test DOM). */
31
+ const GRID_FALLBACK = "#2a2a2a";
32
+ /** Ink for the line trace when the accent cannot be read. */
33
+ const TRACE_FALLBACK = "#8a8a8a";
34
+ /**
35
+ * The FFT, drawn: one bar per frequency band, or one line across all of them.
36
+ *
37
+ * Ported from ableton-sync's analyser, with the colours taken off the caller's
38
+ * hands. The original asked for a `color` per band and defaulted to `#00FF00`
39
+ * when it did not get one, which is how an audio tool ends up with two
40
+ * different greens for the same band in two different panels. Here the bands
41
+ * *are* the ramp — the same `BANDS_7`/`BANDS_10`/`BANDS_16`/`BANDS_31` the
42
+ * `/charts` subpath publishes — so bass is the same red in the analyser, in the
43
+ * legend and in any chart of the same data.
44
+ *
45
+ * Those ramps are deliberately theme-independent (see `charts/ramps.tsx`): a
46
+ * listener who has learnt "bass is red" must not have to relearn it because the
47
+ * console switched to a different accent. Everything *around* the data — the
48
+ * grid, the line trace — does read tokens, and is resolved at paint time so a
49
+ * theme switch needs no subscription.
50
+ *
51
+ * Selection dims rather than hides. A band that vanished when deselected would
52
+ * change the shape of the spectrum, and the shape is the reading.
53
+ *
54
+ * @example
55
+ * <SpectrumVisualizer levels={fft} ramp="bands-31" thresholds={0.7} />
56
+ */
57
+ const SpectrumVisualizer = React.forwardRef(function SpectrumVisualizer({ className, levels, ramp = "bands-7", mode = "bars", thresholds, selected, sensitivity = 1, height = DEFAULT_HEIGHT_PX, labels = true, label = "Spectrum", ...elementProps }, forwardedRef) {
58
+ const rootRef = React.useRef(null);
59
+ const ref = useComposedRefs(forwardedRef, rootRef);
60
+ const canvasRef = React.useRef(null);
61
+ const [width, setWidth] = React.useState(600);
62
+ const bands = React.useMemo(() => typeof ramp === "string" ? RAMPS[ramp] : ramp, [ramp]);
63
+ const isSelected = React.useCallback((band) => selected === void 0 || selected.length === 0 || selected.includes(band.id), [selected]);
64
+ useIsomorphicLayoutEffect(() => {
65
+ const element = rootRef.current;
66
+ if (element === null || typeof ResizeObserver === "undefined") return;
67
+ const observer = new ResizeObserver((entries) => {
68
+ const measured = Math.round(entries[0]?.contentRect.width ?? 0);
69
+ if (measured > 0) setWidth(measured);
70
+ });
71
+ observer.observe(element);
72
+ return () => observer.disconnect();
73
+ }, []);
74
+ useIsomorphicLayoutEffect(() => {
75
+ const canvas = canvasRef.current;
76
+ const context = canvas?.getContext("2d");
77
+ if (!canvas || !context) return;
78
+ context.clearRect(0, 0, width, height);
79
+ drawGrid(context, width, height, resolveToken("border", canvas) ?? GRID_FALLBACK);
80
+ const slot = width / Math.max(1, bands.length);
81
+ const points = bands.map((band, index) => ({
82
+ band,
83
+ x: mode === "bars" ? index * slot : index / Math.max(1, bands.length - 1) * width,
84
+ y: height - amplitude(levels[index], sensitivity) * height,
85
+ bright: isSelected(band)
86
+ }));
87
+ if (mode === "bars") {
88
+ const padding = slot * BAR_PADDING;
89
+ for (const point of points) {
90
+ const barHeight = height - point.y;
91
+ if (barHeight <= 0) continue;
92
+ context.globalAlpha = point.bright ? 1 : DIM_ALPHA;
93
+ context.fillStyle = point.band.color;
94
+ context.fillRect(point.x + padding, point.y, slot - padding * 2, barHeight);
95
+ }
96
+ context.globalAlpha = 1;
97
+ } else drawTrace(context, points.map((point) => [point.x, point.y]), width, height, resolveToken("accent", canvas) ?? TRACE_FALLBACK);
98
+ context.lineWidth = 1;
99
+ context.setLineDash([2, 2]);
100
+ points.forEach((point, index) => {
101
+ const threshold = thresholdAt(thresholds, index);
102
+ if (threshold === void 0) return;
103
+ const y = height - clamp01(threshold) * height;
104
+ context.globalAlpha = point.bright ? RULE_ALPHA : RULE_ALPHA_DIM;
105
+ context.strokeStyle = point.band.color;
106
+ context.beginPath();
107
+ context.moveTo(mode === "bars" ? point.x : point.x - slot / 2, y);
108
+ context.lineTo(mode === "bars" ? point.x + slot : point.x + slot / 2, y);
109
+ context.stroke();
110
+ });
111
+ context.setLineDash([]);
112
+ context.globalAlpha = 1;
113
+ }, [
114
+ bands,
115
+ height,
116
+ isSelected,
117
+ levels,
118
+ mode,
119
+ sensitivity,
120
+ thresholds,
121
+ width
122
+ ]);
123
+ const loudest = bands.reduce((best, band, index) => {
124
+ const level = clamp01(Number(levels[index] ?? 0));
125
+ return best === null || level > best.level ? {
126
+ band,
127
+ level
128
+ } : best;
129
+ }, null);
130
+ const summary = loudest === null || loudest.level <= 0 ? `${label}: ${bands.length} bands, silent` : `${label}: ${bands.length} bands, loudest ${loudest.band.label} at ${Math.round(loudest.level * 100)}%`;
131
+ return /* @__PURE__ */ jsxs("div", {
132
+ ref,
133
+ "data-slot": "spectrum-visualizer",
134
+ className: cn("min-w-0", className),
135
+ ...elementProps,
136
+ children: [/* @__PURE__ */ jsx("canvas", {
137
+ ref: canvasRef,
138
+ width,
139
+ height,
140
+ role: "img",
141
+ "aria-label": summary,
142
+ "data-slot": "spectrum-visualizer-canvas",
143
+ "data-mode": mode,
144
+ className: "block w-full rounded-(--radius-control) border border-border bg-(--cue-data-ground)",
145
+ style: { height: toRem(height) }
146
+ }), labels ? /* @__PURE__ */ jsx("div", {
147
+ "data-slot": "spectrum-visualizer-legend",
148
+ className: "mt-(--cue-space-1) flex font-mono text-(length:--cue-text-micro)",
149
+ children: bands.map((band) => /* @__PURE__ */ jsx("span", {
150
+ "data-slot": "spectrum-visualizer-band",
151
+ "data-selected": String(isSelected(band)),
152
+ className: "flex-1 truncate px-px text-center data-[selected=false]:opacity-40",
153
+ style: { color: band.color },
154
+ children: band.label
155
+ }, band.id))
156
+ }) : null]
157
+ });
158
+ });
159
+ /** The horizontal reference lines, dashed and faint. */
160
+ function drawGrid(context, width, height, ink) {
161
+ context.globalAlpha = .45;
162
+ context.strokeStyle = ink;
163
+ context.lineWidth = 1;
164
+ context.setLineDash([1, 3]);
165
+ for (let line = 0; line <= GRID_LINES; line += 1) {
166
+ const y = height / GRID_LINES * line;
167
+ context.beginPath();
168
+ context.moveTo(0, y);
169
+ context.lineTo(width, y);
170
+ context.stroke();
171
+ }
172
+ context.setLineDash([]);
173
+ context.globalAlpha = 1;
174
+ }
175
+ /** The line mode: a filled skirt under a two-pixel trace. */
176
+ function drawTrace(context, points, width, height, ink) {
177
+ const gradient = context.createLinearGradient(0, height, 0, 0);
178
+ gradient.addColorStop(0, "transparent");
179
+ gradient.addColorStop(1, ink);
180
+ context.globalAlpha = .18;
181
+ context.beginPath();
182
+ context.moveTo(0, height);
183
+ for (const [x, y] of points) context.lineTo(x, y);
184
+ context.lineTo(width, height);
185
+ context.closePath();
186
+ context.fillStyle = gradient;
187
+ context.fill();
188
+ context.globalAlpha = 1;
189
+ context.beginPath();
190
+ points.forEach(([x, y], index) => {
191
+ if (index === 0) context.moveTo(x, y);
192
+ else context.lineTo(x, y);
193
+ });
194
+ context.strokeStyle = ink;
195
+ context.lineWidth = 2;
196
+ context.stroke();
197
+ }
198
+ /** A level, gained and clamped to full scale. */
199
+ function amplitude(level, sensitivity) {
200
+ return clamp01(Number(level ?? 0) * sensitivity);
201
+ }
202
+ /** The threshold that applies to a band: one for all, one each, or none. */
203
+ function thresholdAt(thresholds, index) {
204
+ if (thresholds === void 0) return void 0;
205
+ return typeof thresholds === "number" ? thresholds : thresholds[index];
206
+ }
207
+ /** Keep a level inside `[0, 1]`, treating nonsense as silence. */
208
+ function clamp01(value) {
209
+ if (!Number.isFinite(value)) return 0;
210
+ return Math.min(1, Math.max(0, value));
211
+ }
212
+ //#endregion
213
+ export { SPECTRUM_WIDTH, SpectrumVisualizer };
@@ -0,0 +1,72 @@
1
+ import * as React from "react";
2
+ //#region src/midi/threshold-rail.d.ts
3
+ /** Ink for a zone of the rail, in the shared status vocabulary. */
4
+ type ThresholdTone = "accent" | "ok" | "busy" | "warn" | "danger" | "info";
5
+ interface ThresholdRailProps extends Omit<React.ComponentPropsWithoutRef<"div">, "onChange" | "defaultValue"> {
6
+ /** The (upper) threshold, `0`–`1`. Always controlled. */
7
+ value: number;
8
+ /** Called with the next upper threshold. */
9
+ onChange: (value: number) => void;
10
+ /** The lower threshold. Supplying it turns the rail into a window. */
11
+ lower?: number;
12
+ /** Called with the next lower threshold. */
13
+ onLowerChange?: (value: number) => void;
14
+ /**
15
+ * Called once per finished gesture with both thresholds: pointer-up after a
16
+ * drag, or each key step. Hang undo entries and network writes here —
17
+ * `onChange` fires on every frame of a drag.
18
+ */
19
+ onCommit?: (thresholds: {
20
+ upper: number;
21
+ lower?: number;
22
+ }) => void;
23
+ /** Live signal level, `0`–`1`, drawn as a fill. Absent draws no fill. */
24
+ level?: number;
25
+ /** Peak-hold position, `0`–`1`. `null` or absent draws no needle. */
26
+ peak?: number | null;
27
+ /** Grid the handles snap to. Defaults to `0.01`. */
28
+ step?: number;
29
+ /** Closest the two handles may get. Defaults to `0.01`. */
30
+ minGap?: number;
31
+ /** Ink for the zones outside the window. Defaults to `"danger"`. */
32
+ belowTone?: ThresholdTone;
33
+ /** Ink for the armed zone. Defaults to `"ok"`. */
34
+ aboveTone?: ThresholdTone;
35
+ /** Refuse every gesture. */
36
+ disabled?: boolean;
37
+ /** What is being thresholded. Names the handles. Defaults to `"Threshold"`. */
38
+ label?: string;
39
+ /** Format a value for the handle's spoken text. Defaults to `"62%"`. */
40
+ formatValue?: (value: number) => string;
41
+ }
42
+ /**
43
+ * The trigger level, set by dragging it along the signal it triggers on.
44
+ *
45
+ * A threshold is a number, and a number field would hold it perfectly well —
46
+ * but a threshold is only ever chosen *relative to a signal*, and this control
47
+ * is the one place both are visible at once: the live level fills the rail, the
48
+ * peak-hold needle marks how far it got, and the handle sits where the trigger
49
+ * fires. Unified from ableton-sync's three near-identical threshold editors.
50
+ *
51
+ * Two thresholds make it a window rather than a floor: supply `lower` and the
52
+ * rail arms *between* the handles, which is how a band-triggered cue avoids
53
+ * firing on a peak it was never meant to catch.
54
+ *
55
+ * What the ports did not have is a keyboard. Their handles moved on `mousedown`
56
+ * plus a document listener, so a threshold could not be set by anyone not using
57
+ * a mouse, and no screen reader was ever told what the number was. Here each
58
+ * handle is a `role="slider"` announcing a percentage, arrow keys step, page
59
+ * keys jump, and Home/End go to the limits — the drag is the fast path, not the
60
+ * only path.
61
+ *
62
+ * The `onChange`/`onCommit` split is the same undo-coalescing contract as
63
+ * `Slider` and `ScrubInput`: one drag is one undo entry.
64
+ *
65
+ * @example
66
+ * <ThresholdRail value={threshold} onChange={setThreshold} level={rms} peak={peak} />
67
+ * @example
68
+ * <ThresholdRail value={high} lower={low} onChange={setHigh} onLowerChange={setLow} />
69
+ */
70
+ declare const ThresholdRail: React.ForwardRefExoticComponent<ThresholdRailProps & React.RefAttributes<HTMLDivElement>>;
71
+ //#endregion
72
+ export { ThresholdRail, ThresholdRailProps, ThresholdTone };