@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.
- package/CHANGELOG.md +4028 -0
- package/LICENSE +21 -0
- package/NOTICE.md +34 -0
- package/README.md +237 -0
- package/dist/agent-runtime/_glyphs.js +43 -0
- package/dist/agent-runtime/branch-picker.d.ts +45 -0
- package/dist/agent-runtime/branch-picker.js +87 -0
- package/dist/agent-runtime/index.d.ts +4 -0
- package/dist/agent-runtime/index.js +4 -0
- package/dist/agent-runtime/tool-call-card.d.ts +69 -0
- package/dist/agent-runtime/tool-call-card.js +187 -0
- package/dist/agent-runtime/use-agent-thread.d.ts +164 -0
- package/dist/agent-runtime/use-agent-thread.js +251 -0
- package/dist/brand/_chassis.d.ts +54 -0
- package/dist/brand/_chassis.js +81 -0
- package/dist/brand/_geometry.js +41 -0
- package/dist/brand/cue-logotype.d.ts +29 -0
- package/dist/brand/cue-logotype.js +60 -0
- package/dist/brand/cue-mark.d.ts +30 -0
- package/dist/brand/cue-mark.js +61 -0
- package/dist/brand/index.d.ts +5 -0
- package/dist/brand/plussie.d.ts +67 -0
- package/dist/brand/plussie.js +125 -0
- package/dist/charts/_token.js +39 -0
- package/dist/charts/container.d.ts +58 -0
- package/dist/charts/container.js +77 -0
- package/dist/charts/index.d.ts +5 -0
- package/dist/charts/index.js +5 -0
- package/dist/charts/ramps.d.ts +140 -0
- package/dist/charts/ramps.js +615 -0
- package/dist/charts/theme.d.ts +112 -0
- package/dist/charts/theme.js +165 -0
- package/dist/charts/tones.d.ts +111 -0
- package/dist/charts/tones.js +127 -0
- package/dist/chat/_glyphs.js +55 -0
- package/dist/chat/agent-color.d.ts +84 -0
- package/dist/chat/agent-color.js +101 -0
- package/dist/chat/agent-pile.d.ts +55 -0
- package/dist/chat/agent-pile.js +121 -0
- package/dist/chat/ask-box.d.ts +88 -0
- package/dist/chat/ask-box.js +341 -0
- package/dist/chat/composer.d.ts +66 -0
- package/dist/chat/composer.js +144 -0
- package/dist/chat/delegation-card.d.ts +60 -0
- package/dist/chat/delegation-card.js +129 -0
- package/dist/chat/index.d.ts +8 -0
- package/dist/chat/index.js +8 -0
- package/dist/chat/message-list.d.ts +45 -0
- package/dist/chat/message-list.js +141 -0
- package/dist/chat/message.d.ts +47 -0
- package/dist/chat/message.js +108 -0
- package/dist/chrome/_band.js +54 -0
- package/dist/chrome/_drag.js +59 -0
- package/dist/chrome/_edge-scroller.d.ts +45 -0
- package/dist/chrome/_edge-scroller.js +149 -0
- package/dist/chrome/_glyphs.js +119 -0
- package/dist/chrome/_status-bar-item.js +85 -0
- package/dist/chrome/_status-bar.d.ts +15 -0
- package/dist/chrome/_status-bar.js +171 -0
- package/dist/chrome/_tabs-scroll.d.ts +67 -0
- package/dist/chrome/_tabs-scroll.js +73 -0
- package/dist/chrome/_tree.d.ts +75 -0
- package/dist/chrome/_tree.js +49 -0
- package/dist/chrome/app-bar.d.ts +103 -0
- package/dist/chrome/app-bar.js +175 -0
- package/dist/chrome/app-shell.d.ts +243 -0
- package/dist/chrome/app-shell.js +266 -0
- package/dist/chrome/band.d.ts +106 -0
- package/dist/chrome/band.js +97 -0
- package/dist/chrome/empty-state.d.ts +37 -0
- package/dist/chrome/empty-state.js +57 -0
- package/dist/chrome/eyebrow.d.ts +29 -0
- package/dist/chrome/eyebrow.js +36 -0
- package/dist/chrome/footer.d.ts +88 -0
- package/dist/chrome/footer.js +83 -0
- package/dist/chrome/index.d.ts +24 -0
- package/dist/chrome/index.js +22 -0
- package/dist/chrome/inspector.d.ts +61 -0
- package/dist/chrome/inspector.js +121 -0
- package/dist/chrome/navigation-menu.d.ts +80 -0
- package/dist/chrome/navigation-menu.js +121 -0
- package/dist/chrome/page-shell.d.ts +38 -0
- package/dist/chrome/page-shell.js +76 -0
- package/dist/chrome/panel.d.ts +55 -0
- package/dist/chrome/panel.js +67 -0
- package/dist/chrome/row.d.ts +82 -0
- package/dist/chrome/row.js +106 -0
- package/dist/chrome/scroll-area.d.ts +39 -0
- package/dist/chrome/scroll-area.js +70 -0
- package/dist/chrome/section-header.d.ts +42 -0
- package/dist/chrome/section-header.js +79 -0
- package/dist/chrome/segmented-control.d.ts +77 -0
- package/dist/chrome/segmented-control.js +95 -0
- package/dist/chrome/status-bar.d.ts +129 -0
- package/dist/chrome/status-bar.js +120 -0
- package/dist/chrome/tabs.d.ts +80 -0
- package/dist/chrome/tabs.js +132 -0
- package/dist/chrome/title-bar.d.ts +47 -0
- package/dist/chrome/title-bar.js +43 -0
- package/dist/chrome/toolbar.d.ts +68 -0
- package/dist/chrome/toolbar.js +83 -0
- package/dist/chrome/tree.d.ts +98 -0
- package/dist/chrome/tree.js +248 -0
- package/dist/color/_checker.js +14 -0
- package/dist/color/_convert.d.ts +52 -0
- package/dist/color/_convert.js +66 -0
- package/dist/color/_glyphs.js +28 -0
- package/dist/color/_thumb.js +15 -0
- package/dist/color/_value.js +28 -0
- package/dist/color/color-area.d.ts +27 -0
- package/dist/color/color-area.js +40 -0
- package/dist/color/color-field.d.ts +32 -0
- package/dist/color/color-field.js +43 -0
- package/dist/color/color-picker.d.ts +71 -0
- package/dist/color/color-picker.js +178 -0
- package/dist/color/color-slider.d.ts +31 -0
- package/dist/color/color-slider.js +51 -0
- package/dist/color/color-swatch.d.ts +32 -0
- package/dist/color/color-swatch.js +44 -0
- package/dist/color/index.d.ts +7 -0
- package/dist/color/index.js +7 -0
- package/dist/configurator/_export.d.ts +78 -0
- package/dist/configurator/_export.js +302 -0
- package/dist/configurator/_glyphs.js +92 -0
- package/dist/configurator/_overrides.d.ts +266 -0
- package/dist/configurator/_overrides.js +541 -0
- package/dist/configurator/configurator.d.ts +71 -0
- package/dist/configurator/configurator.js +284 -0
- package/dist/configurator/export-dialog.d.ts +30 -0
- package/dist/configurator/export-dialog.js +121 -0
- package/dist/configurator/index.d.ts +8 -0
- package/dist/configurator/index.js +8 -0
- package/dist/configurator/panel-sections.d.ts +86 -0
- package/dist/configurator/panel-sections.js +352 -0
- package/dist/configurator/token-editor.d.ts +74 -0
- package/dist/configurator/token-editor.js +152 -0
- package/dist/configurator/use-zoom.d.ts +87 -0
- package/dist/configurator/use-zoom.js +113 -0
- package/dist/date/_glyphs.js +34 -0
- package/dist/date/_segments.js +101 -0
- package/dist/date/_trigger.js +31 -0
- package/dist/date/calendar.d.ts +25 -0
- package/dist/date/calendar.js +125 -0
- package/dist/date/date-field.d.ts +34 -0
- package/dist/date/date-field.js +41 -0
- package/dist/date/date-picker.d.ts +69 -0
- package/dist/date/date-picker.js +89 -0
- package/dist/date/date-range-picker.d.ts +65 -0
- package/dist/date/date-range-picker.js +92 -0
- package/dist/date/index.d.ts +6 -0
- package/dist/date/index.js +6 -0
- package/dist/date/time-field.d.ts +29 -0
- package/dist/date/time-field.js +36 -0
- package/dist/dmx/_ramp.d.ts +77 -0
- package/dist/dmx/_ramp.js +169 -0
- package/dist/dmx/_readout.js +53 -0
- package/dist/dmx/_universe.d.ts +105 -0
- package/dist/dmx/_universe.js +112 -0
- package/dist/dmx/channel-matrix.d.ts +81 -0
- package/dist/dmx/channel-matrix.js +285 -0
- package/dist/dmx/dmx-bar.d.ts +50 -0
- package/dist/dmx/dmx-bar.js +107 -0
- package/dist/dmx/dmx-strip.d.ts +41 -0
- package/dist/dmx/dmx-strip.js +196 -0
- package/dist/dmx/index.d.ts +7 -0
- package/dist/dmx/index.js +7 -0
- package/dist/dmx/universe-grid.d.ts +61 -0
- package/dist/dmx/universe-grid.js +182 -0
- package/dist/elements/activity-graph.d.ts +40 -0
- package/dist/elements/activity-graph.js +81 -0
- package/dist/elements/agent-card.d.ts +49 -0
- package/dist/elements/agent-card.js +91 -0
- package/dist/elements/agent-handoff.d.ts +24 -0
- package/dist/elements/agent-handoff.js +53 -0
- package/dist/elements/agent-mode-badge.d.ts +72 -0
- package/dist/elements/agent-mode-badge.js +110 -0
- package/dist/elements/agent-plan.d.ts +24 -0
- package/dist/elements/agent-plan.js +74 -0
- package/dist/elements/agent-status.d.ts +29 -0
- package/dist/elements/agent-status.js +46 -0
- package/dist/elements/agent-surface.d.ts +65 -0
- package/dist/elements/agent-surface.js +68 -0
- package/dist/elements/animated-number.d.ts +86 -0
- package/dist/elements/animated-number.js +118 -0
- package/dist/elements/approval-card.d.ts +40 -0
- package/dist/elements/approval-card.js +78 -0
- package/dist/elements/artifact-card.d.ts +30 -0
- package/dist/elements/artifact-card.js +58 -0
- package/dist/elements/background-inbox.d.ts +39 -0
- package/dist/elements/background-inbox.js +60 -0
- package/dist/elements/canvas-split.d.ts +77 -0
- package/dist/elements/canvas-split.js +138 -0
- package/dist/elements/chart.d.ts +41 -0
- package/dist/elements/chart.js +117 -0
- package/dist/elements/chat-panel.d.ts +46 -0
- package/dist/elements/chat-panel.js +104 -0
- package/dist/elements/checkpoint-history.d.ts +31 -0
- package/dist/elements/checkpoint-history.js +65 -0
- package/dist/elements/clamp.d.ts +90 -0
- package/dist/elements/clamp.js +109 -0
- package/dist/elements/code-diff.d.ts +42 -0
- package/dist/elements/code-diff.js +69 -0
- package/dist/elements/code-runner.d.ts +38 -0
- package/dist/elements/code-runner.js +84 -0
- package/dist/elements/command-palette.d.ts +48 -0
- package/dist/elements/command-palette.js +129 -0
- package/dist/elements/compaction-row.d.ts +63 -0
- package/dist/elements/compaction-row.js +110 -0
- package/dist/elements/comparison-card.d.ts +47 -0
- package/dist/elements/comparison-card.js +69 -0
- package/dist/elements/composer.d.ts +274 -0
- package/dist/elements/composer.js +505 -0
- package/dist/elements/computer-use.d.ts +40 -0
- package/dist/elements/computer-use.js +92 -0
- package/dist/elements/confidence-marker.d.ts +39 -0
- package/dist/elements/confidence-marker.js +64 -0
- package/dist/elements/connection-state.d.ts +29 -0
- package/dist/elements/connection-state.js +66 -0
- package/dist/elements/context-breakdown.d.ts +30 -0
- package/dist/elements/context-breakdown.js +86 -0
- package/dist/elements/context-usage.d.ts +99 -0
- package/dist/elements/context-usage.js +225 -0
- package/dist/elements/conversation-search.d.ts +48 -0
- package/dist/elements/conversation-search.js +88 -0
- package/dist/elements/cost-meter.d.ts +33 -0
- package/dist/elements/cost-meter.js +75 -0
- package/dist/elements/data-table.d.ts +31 -0
- package/dist/elements/data-table.js +67 -0
- package/dist/elements/day-separator.d.ts +34 -0
- package/dist/elements/day-separator.js +50 -0
- package/dist/elements/diagram.d.ts +34 -0
- package/dist/elements/diagram.js +75 -0
- package/dist/elements/document-reference.d.ts +37 -0
- package/dist/elements/document-reference.js +66 -0
- package/dist/elements/draft-restore.d.ts +27 -0
- package/dist/elements/draft-restore.js +54 -0
- package/dist/elements/edit-message.d.ts +36 -0
- package/dist/elements/edit-message.js +77 -0
- package/dist/elements/elements.css +459 -0
- package/dist/elements/elicitation-form.d.ts +48 -0
- package/dist/elements/elicitation-form.js +106 -0
- package/dist/elements/empty-state.d.ts +52 -0
- package/dist/elements/empty-state.js +98 -0
- package/dist/elements/end-of-turn-summary.d.ts +60 -0
- package/dist/elements/end-of-turn-summary.js +75 -0
- package/dist/elements/error-state.d.ts +29 -0
- package/dist/elements/error-state.js +55 -0
- package/dist/elements/feedback-dialog.d.ts +36 -0
- package/dist/elements/feedback-dialog.js +81 -0
- package/dist/elements/file-tree.d.ts +45 -0
- package/dist/elements/file-tree.js +84 -0
- package/dist/elements/flow-graph.d.ts +45 -0
- package/dist/elements/flow-graph.js +78 -0
- package/dist/elements/generative/chart.js +200 -0
- package/dist/elements/generative/faults.js +111 -0
- package/dist/elements/generative/icons.d.ts +41 -0
- package/dist/elements/generative/icons.js +190 -0
- package/dist/elements/generative/intrinsics.js +483 -0
- package/dist/elements/generative/spec.d.ts +110 -0
- package/dist/elements/generative/spec.js +366 -0
- package/dist/elements/generative.css +1145 -0
- package/dist/elements/generative.d.ts +144 -0
- package/dist/elements/generative.js +126 -0
- package/dist/elements/guardrail-notice.d.ts +29 -0
- package/dist/elements/guardrail-notice.js +63 -0
- package/dist/elements/image-generation.d.ts +18 -0
- package/dist/elements/image-generation.js +64 -0
- package/dist/elements/index.d.ts +116 -0
- package/dist/elements/index.js +115 -0
- package/dist/elements/inline-citation.d.ts +43 -0
- package/dist/elements/inline-citation.js +93 -0
- package/dist/elements/job-progress.d.ts +49 -0
- package/dist/elements/job-progress.js +74 -0
- package/dist/elements/launcher-bubble.d.ts +34 -0
- package/dist/elements/launcher-bubble.js +72 -0
- package/dist/elements/live-region-announcer.d.ts +130 -0
- package/dist/elements/live-region-announcer.js +230 -0
- package/dist/elements/loading-state.d.ts +27 -0
- package/dist/elements/loading-state.js +36 -0
- package/dist/elements/map-answer.d.ts +38 -0
- package/dist/elements/map-answer.js +93 -0
- package/dist/elements/markdown.d.ts +131 -0
- package/dist/elements/markdown.js +528 -0
- package/dist/elements/math-block.d.ts +51 -0
- package/dist/elements/math-block.js +70 -0
- package/dist/elements/mcp-server-panel.d.ts +41 -0
- package/dist/elements/mcp-server-panel.js +115 -0
- package/dist/elements/memory-chips.d.ts +30 -0
- package/dist/elements/memory-chips.js +43 -0
- package/dist/elements/message-actions.d.ts +38 -0
- package/dist/elements/message-actions.js +71 -0
- package/dist/elements/message-attachment.d.ts +48 -0
- package/dist/elements/message-attachment.js +63 -0
- package/dist/elements/message-branches.d.ts +25 -0
- package/dist/elements/message-branches.js +65 -0
- package/dist/elements/message-pair.d.ts +33 -0
- package/dist/elements/message-pair.js +65 -0
- package/dist/elements/message-queue.d.ts +31 -0
- package/dist/elements/message-queue.js +80 -0
- package/dist/elements/message-timing.d.ts +33 -0
- package/dist/elements/message-timing.js +37 -0
- package/dist/elements/mobile-composer.d.ts +44 -0
- package/dist/elements/mobile-composer.js +88 -0
- package/dist/elements/model-picker.d.ts +38 -0
- package/dist/elements/model-picker.js +69 -0
- package/dist/elements/number-ticker.d.ts +18 -0
- package/dist/elements/number-ticker.js +47 -0
- package/dist/elements/onboarding.d.ts +30 -0
- package/dist/elements/onboarding.js +75 -0
- package/dist/elements/permission-grant.d.ts +35 -0
- package/dist/elements/permission-grant.js +86 -0
- package/dist/elements/permission-scopes.d.ts +215 -0
- package/dist/elements/permission-scopes.js +249 -0
- package/dist/elements/prompt-library.d.ts +43 -0
- package/dist/elements/prompt-library.js +117 -0
- package/dist/elements/queue-dock.d.ts +101 -0
- package/dist/elements/queue-dock.js +132 -0
- package/dist/elements/quota-banner.d.ts +26 -0
- package/dist/elements/quota-banner.js +66 -0
- package/dist/elements/quote-reply.d.ts +44 -0
- package/dist/elements/quote-reply.js +79 -0
- package/dist/elements/range.d.ts +29 -0
- package/dist/elements/range.js +45 -0
- package/dist/elements/read-aloud.d.ts +45 -0
- package/dist/elements/read-aloud.js +75 -0
- package/dist/elements/reasoning-effort.d.ts +36 -0
- package/dist/elements/reasoning-effort.js +67 -0
- package/dist/elements/reasoning-panel.d.ts +46 -0
- package/dist/elements/reasoning-panel.js +75 -0
- package/dist/elements/recommendation-card.d.ts +45 -0
- package/dist/elements/recommendation-card.js +83 -0
- package/dist/elements/regenerate-menu.d.ts +45 -0
- package/dist/elements/regenerate-menu.js +51 -0
- package/dist/elements/replay.d.ts +217 -0
- package/dist/elements/replay.js +498 -0
- package/dist/elements/research-report.d.ts +38 -0
- package/dist/elements/research-report.js +69 -0
- package/dist/elements/retrieval-chunks.d.ts +43 -0
- package/dist/elements/retrieval-chunks.js +81 -0
- package/dist/elements/revert-dock.d.ts +159 -0
- package/dist/elements/revert-dock.js +327 -0
- package/dist/elements/reviewable-diff.d.ts +45 -0
- package/dist/elements/reviewable-diff.js +110 -0
- package/dist/elements/risk-badge.d.ts +52 -0
- package/dist/elements/risk-badge.js +91 -0
- package/dist/elements/schedule-card.d.ts +42 -0
- package/dist/elements/schedule-card.js +90 -0
- package/dist/elements/score-breakdown.d.ts +47 -0
- package/dist/elements/score-breakdown.js +82 -0
- package/dist/elements/scroll-anchor.d.ts +32 -0
- package/dist/elements/scroll-anchor.js +123 -0
- package/dist/elements/settings-panel.d.ts +52 -0
- package/dist/elements/settings-panel.js +107 -0
- package/dist/elements/shared-conversation.d.ts +39 -0
- package/dist/elements/shared-conversation.js +68 -0
- package/dist/elements/sources.d.ts +33 -0
- package/dist/elements/sources.js +61 -0
- package/dist/elements/speaker-identity.d.ts +32 -0
- package/dist/elements/speaker-identity.js +51 -0
- package/dist/elements/spec-sheet.d.ts +31 -0
- package/dist/elements/spec-sheet.js +45 -0
- package/dist/elements/stopped-run.d.ts +22 -0
- package/dist/elements/stopped-run.js +50 -0
- package/dist/elements/streaming-text.d.ts +31 -0
- package/dist/elements/streaming-text.js +45 -0
- package/dist/elements/subagent-list.d.ts +37 -0
- package/dist/elements/subagent-list.js +79 -0
- package/dist/elements/suggestions.d.ts +30 -0
- package/dist/elements/suggestions.js +36 -0
- package/dist/elements/surfaces.d.ts +85 -0
- package/dist/elements/surfaces.js +108 -0
- package/dist/elements/tail-status.d.ts +131 -0
- package/dist/elements/tail-status.js +94 -0
- package/dist/elements/terminal-block.d.ts +29 -0
- package/dist/elements/terminal-block.js +54 -0
- package/dist/elements/thinking-indicator.d.ts +18 -0
- package/dist/elements/thinking-indicator.js +36 -0
- package/dist/elements/thread-list.d.ts +35 -0
- package/dist/elements/thread-list.js +68 -0
- package/dist/elements/thread-search.d.ts +42 -0
- package/dist/elements/thread-search.js +99 -0
- package/dist/elements/timeline.d.ts +37 -0
- package/dist/elements/timeline.js +46 -0
- package/dist/elements/todo-list.d.ts +42 -0
- package/dist/elements/todo-list.js +59 -0
- package/dist/elements/tool-call.d.ts +41 -0
- package/dist/elements/tool-call.js +85 -0
- package/dist/elements/tool-error.d.ts +39 -0
- package/dist/elements/tool-error.js +76 -0
- package/dist/elements/tool-group.d.ts +45 -0
- package/dist/elements/tool-group.js +71 -0
- package/dist/elements/tool-timeline.d.ts +65 -0
- package/dist/elements/tool-timeline.js +88 -0
- package/dist/elements/trace-waterfall.d.ts +37 -0
- package/dist/elements/trace-waterfall.js +69 -0
- package/dist/elements/transcript-rules.d.ts +67 -0
- package/dist/elements/transcript-rules.js +95 -0
- package/dist/elements/turn-footer.d.ts +74 -0
- package/dist/elements/turn-footer.js +101 -0
- package/dist/elements/typing-indicator.d.ts +16 -0
- package/dist/elements/typing-indicator.js +51 -0
- package/dist/elements/verdict-row.d.ts +89 -0
- package/dist/elements/verdict-row.js +150 -0
- package/dist/elements/vocabulary.d.ts +612 -0
- package/dist/elements/vocabulary.js +611 -0
- package/dist/elements/voice-conversation.d.ts +49 -0
- package/dist/elements/voice-conversation.js +123 -0
- package/dist/elements/web-preview.d.ts +32 -0
- package/dist/elements/web-preview.js +66 -0
- package/dist/elements/web-search.d.ts +37 -0
- package/dist/elements/web-search.js +66 -0
- package/dist/elements/work-collapse.d.ts +103 -0
- package/dist/elements/work-collapse.js +131 -0
- package/dist/flow/_frame.d.ts +52 -0
- package/dist/flow/_frame.js +38 -0
- package/dist/flow/controls.d.ts +41 -0
- package/dist/flow/controls.js +53 -0
- package/dist/flow/flow.css +121 -0
- package/dist/flow/handles.d.ts +40 -0
- package/dist/flow/handles.js +61 -0
- package/dist/flow/index.d.ts +7 -0
- package/dist/flow/index.js +7 -0
- package/dist/flow/node-card.d.ts +71 -0
- package/dist/flow/node-card.js +102 -0
- package/dist/flow/signal-edge.d.ts +60 -0
- package/dist/flow/signal-edge.js +108 -0
- package/dist/flow/use-flow-theme.d.ts +69 -0
- package/dist/flow/use-flow-theme.js +109 -0
- package/dist/forms/_chassis.d.ts +164 -0
- package/dist/forms/_chassis.js +159 -0
- package/dist/forms/_glyphs.js +143 -0
- package/dist/forms/_listbox.js +55 -0
- package/dist/forms/autocomplete.d.ts +61 -0
- package/dist/forms/autocomplete.js +88 -0
- package/dist/forms/button-group.d.ts +47 -0
- package/dist/forms/button-group.js +52 -0
- package/dist/forms/checkbox.d.ts +51 -0
- package/dist/forms/checkbox.js +98 -0
- package/dist/forms/combobox.d.ts +73 -0
- package/dist/forms/combobox.js +108 -0
- package/dist/forms/env-var-input.d.ts +74 -0
- package/dist/forms/env-var-input.js +116 -0
- package/dist/forms/field.d.ts +89 -0
- package/dist/forms/field.js +102 -0
- package/dist/forms/file-upload.d.ts +113 -0
- package/dist/forms/file-upload.js +232 -0
- package/dist/forms/index.d.ts +26 -0
- package/dist/forms/index.js +26 -0
- package/dist/forms/input-group.d.ts +36 -0
- package/dist/forms/input-group.js +59 -0
- package/dist/forms/input.d.ts +45 -0
- package/dist/forms/input.js +36 -0
- package/dist/forms/multi-select.d.ts +62 -0
- package/dist/forms/multi-select.js +107 -0
- package/dist/forms/number-field.d.ts +39 -0
- package/dist/forms/number-field.js +65 -0
- package/dist/forms/otp-field.d.ts +54 -0
- package/dist/forms/otp-field.js +59 -0
- package/dist/forms/password-input.d.ts +46 -0
- package/dist/forms/password-input.js +62 -0
- package/dist/forms/radio-group.d.ts +50 -0
- package/dist/forms/radio-group.js +64 -0
- package/dist/forms/rating.d.ts +69 -0
- package/dist/forms/rating.js +103 -0
- package/dist/forms/scrub-input.d.ts +81 -0
- package/dist/forms/scrub-input.js +249 -0
- package/dist/forms/search-input.d.ts +54 -0
- package/dist/forms/search-input.js +112 -0
- package/dist/forms/select.d.ts +75 -0
- package/dist/forms/select.js +91 -0
- package/dist/forms/slider.d.ts +44 -0
- package/dist/forms/slider.js +65 -0
- package/dist/forms/switch.d.ts +36 -0
- package/dist/forms/switch.js +71 -0
- package/dist/forms/tags-input.d.ts +69 -0
- package/dist/forms/tags-input.js +148 -0
- package/dist/forms/textarea.d.ts +39 -0
- package/dist/forms/textarea.js +37 -0
- package/dist/forms/toggle-group.d.ts +41 -0
- package/dist/forms/toggle-group.js +56 -0
- package/dist/forms/toggle.d.ts +47 -0
- package/dist/forms/toggle.js +100 -0
- package/dist/icons/containers.d.ts +89 -0
- package/dist/icons/containers.js +295 -0
- package/dist/icons/index.d.ts +2 -0
- package/dist/index.d.ts +138 -0
- package/dist/index.js +124 -0
- package/dist/instruments/_ansi.js +116 -0
- package/dist/instruments/_data-row.d.ts +68 -0
- package/dist/instruments/_data-row.js +139 -0
- package/dist/instruments/_glyphs.js +90 -0
- package/dist/instruments/_ledger-disclosure.js +103 -0
- package/dist/instruments/_ledger.d.ts +21 -0
- package/dist/instruments/_ledger.js +5 -0
- package/dist/instruments/_motion.js +56 -0
- package/dist/instruments/_rem.js +21 -0
- package/dist/instruments/app-window-frame.d.ts +48 -0
- package/dist/instruments/app-window-frame.js +76 -0
- package/dist/instruments/code-block.d.ts +35 -0
- package/dist/instruments/code-block.js +173 -0
- package/dist/instruments/copy-button.d.ts +41 -0
- package/dist/instruments/copy-button.js +112 -0
- package/dist/instruments/data-row.d.ts +94 -0
- package/dist/instruments/data-row.js +151 -0
- package/dist/instruments/data-table.d.ts +168 -0
- package/dist/instruments/data-table.js +212 -0
- package/dist/instruments/data-tree.d.ts +126 -0
- package/dist/instruments/data-tree.js +303 -0
- package/dist/instruments/group-bar.d.ts +63 -0
- package/dist/instruments/group-bar.js +122 -0
- package/dist/instruments/index.d.ts +18 -0
- package/dist/instruments/index.js +18 -0
- package/dist/instruments/ledger.d.ts +204 -0
- package/dist/instruments/ledger.js +204 -0
- package/dist/instruments/log-viewer.d.ts +74 -0
- package/dist/instruments/log-viewer.js +215 -0
- package/dist/instruments/meter.d.ts +81 -0
- package/dist/instruments/meter.js +96 -0
- package/dist/instruments/progress.d.ts +61 -0
- package/dist/instruments/progress.js +79 -0
- package/dist/instruments/seam-grid.d.ts +66 -0
- package/dist/instruments/seam-grid.js +78 -0
- package/dist/instruments/sparkline.d.ts +39 -0
- package/dist/instruments/sparkline.js +85 -0
- package/dist/instruments/stat.d.ts +35 -0
- package/dist/instruments/stat.js +59 -0
- package/dist/instruments/table.d.ts +170 -0
- package/dist/instruments/table.js +237 -0
- package/dist/instruments/terminal-frame.d.ts +89 -0
- package/dist/instruments/terminal-frame.js +256 -0
- package/dist/instruments/two-step-button.d.ts +47 -0
- package/dist/instruments/two-step-button.js +166 -0
- package/dist/instruments/usage-chart.d.ts +55 -0
- package/dist/instruments/usage-chart.js +235 -0
- package/dist/layout/_collapse.js +46 -0
- package/dist/layout/_glyphs.js +45 -0
- package/dist/layout/_ground.d.ts +22 -0
- package/dist/layout/_ground.js +9 -0
- package/dist/layout/accordion.d.ts +52 -0
- package/dist/layout/accordion.js +81 -0
- package/dist/layout/bento.d.ts +144 -0
- package/dist/layout/bento.js +266 -0
- package/dist/layout/breadcrumb.d.ts +35 -0
- package/dist/layout/breadcrumb.js +67 -0
- package/dist/layout/card.d.ts +51 -0
- package/dist/layout/card.js +76 -0
- package/dist/layout/carousel.d.ts +96 -0
- package/dist/layout/carousel.js +211 -0
- package/dist/layout/collapsible.d.ts +74 -0
- package/dist/layout/collapsible.js +126 -0
- package/dist/layout/container.d.ts +27 -0
- package/dist/layout/container.js +43 -0
- package/dist/layout/description-list.d.ts +24 -0
- package/dist/layout/description-list.js +37 -0
- package/dist/layout/frames.d.ts +70 -0
- package/dist/layout/frames.js +298 -0
- package/dist/layout/grid.d.ts +40 -0
- package/dist/layout/grid.js +48 -0
- package/dist/layout/index.d.ts +19 -0
- package/dist/layout/index.js +18 -0
- package/dist/layout/item.d.ts +65 -0
- package/dist/layout/item.js +100 -0
- package/dist/layout/link.d.ts +48 -0
- package/dist/layout/link.js +63 -0
- package/dist/layout/pagination.d.ts +54 -0
- package/dist/layout/pagination.js +121 -0
- package/dist/layout/preview.d.ts +177 -0
- package/dist/layout/preview.js +628 -0
- package/dist/layout/resizable.d.ts +38 -0
- package/dist/layout/resizable.js +68 -0
- package/dist/layout/sidebar.d.ts +105 -0
- package/dist/layout/sidebar.js +158 -0
- package/dist/layout/stack.d.ts +46 -0
- package/dist/layout/stack.js +62 -0
- package/dist/layout/stepper.d.ts +49 -0
- package/dist/layout/stepper.js +81 -0
- package/dist/layout/timeline.d.ts +43 -0
- package/dist/layout/timeline.js +63 -0
- package/dist/lib/aria-class.js +24 -0
- package/dist/lib/cn.js +18 -0
- package/dist/lib/compose.js +38 -0
- package/dist/lib/cva.d.ts +18 -0
- package/dist/lib/cva.js +65 -0
- package/dist/midi/_notes.d.ts +101 -0
- package/dist/midi/_notes.js +183 -0
- package/dist/midi/_ruler.d.ts +100 -0
- package/dist/midi/_ruler.js +105 -0
- package/dist/midi/_time.d.ts +107 -0
- package/dist/midi/_time.js +130 -0
- package/dist/midi/index.d.ts +9 -0
- package/dist/midi/index.js +9 -0
- package/dist/midi/musical-time-input.d.ts +48 -0
- package/dist/midi/musical-time-input.js +154 -0
- package/dist/midi/piano-keyboard.d.ts +50 -0
- package/dist/midi/piano-keyboard.js +197 -0
- package/dist/midi/spectrum-visualizer.d.ts +65 -0
- package/dist/midi/spectrum-visualizer.js +213 -0
- package/dist/midi/threshold-rail.d.ts +72 -0
- package/dist/midi/threshold-rail.js +214 -0
- package/dist/midi/timeline-ruler.d.ts +83 -0
- package/dist/midi/timeline-ruler.js +152 -0
- package/dist/overlays/_debounce.js +34 -0
- package/dist/overlays/_glyphs.js +59 -0
- package/dist/overlays/_surface.d.ts +70 -0
- package/dist/overlays/_surface.js +70 -0
- package/dist/overlays/_wheel.js +42 -0
- package/dist/overlays/alert-dialog.d.ts +67 -0
- package/dist/overlays/alert-dialog.js +117 -0
- package/dist/overlays/command-palette.d.ts +93 -0
- package/dist/overlays/command-palette.js +193 -0
- package/dist/overlays/context-menu.d.ts +64 -0
- package/dist/overlays/context-menu.js +78 -0
- package/dist/overlays/dialog.d.ts +72 -0
- package/dist/overlays/dialog.js +124 -0
- package/dist/overlays/drawer.d.ts +75 -0
- package/dist/overlays/drawer.js +151 -0
- package/dist/overlays/dropdown-menu.d.ts +79 -0
- package/dist/overlays/dropdown-menu.js +156 -0
- package/dist/overlays/hover-card.d.ts +58 -0
- package/dist/overlays/hover-card.js +91 -0
- package/dist/overlays/index.d.ts +15 -0
- package/dist/overlays/index.js +15 -0
- package/dist/overlays/info-tip.d.ts +41 -0
- package/dist/overlays/info-tip.js +45 -0
- package/dist/overlays/menubar.d.ts +72 -0
- package/dist/overlays/menubar.js +100 -0
- package/dist/overlays/popover.d.ts +66 -0
- package/dist/overlays/popover.js +114 -0
- package/dist/overlays/sheet.d.ts +78 -0
- package/dist/overlays/sheet.js +131 -0
- package/dist/overlays/toast.d.ts +106 -0
- package/dist/overlays/toast.js +146 -0
- package/dist/overlays/tooltip.d.ts +57 -0
- package/dist/overlays/tooltip.js +95 -0
- package/dist/primitives/avatar.d.ts +51 -0
- package/dist/primitives/avatar.js +93 -0
- package/dist/primitives/button.d.ts +58 -0
- package/dist/primitives/button.js +104 -0
- package/dist/primitives/chip.d.ts +73 -0
- package/dist/primitives/chip.js +238 -0
- package/dist/primitives/icon-button.d.ts +41 -0
- package/dist/primitives/icon-button.js +59 -0
- package/dist/primitives/index.d.ts +10 -0
- package/dist/primitives/index.js +10 -0
- package/dist/primitives/kbd.d.ts +17 -0
- package/dist/primitives/kbd.js +24 -0
- package/dist/primitives/separator.d.ts +25 -0
- package/dist/primitives/separator.js +30 -0
- package/dist/primitives/skeleton.d.ts +20 -0
- package/dist/primitives/skeleton.js +27 -0
- package/dist/primitives/spinner.d.ts +26 -0
- package/dist/primitives/spinner.js +31 -0
- package/dist/primitives/status-dot.d.ts +51 -0
- package/dist/primitives/status-dot.js +57 -0
- package/dist/styles.css +97 -0
- package/dist/system/agent-skin.d.ts +27 -0
- package/dist/system/agent-skin.js +20 -0
- package/dist/system/density.d.ts +73 -0
- package/dist/system/density.js +111 -0
- package/dist/system/index.d.ts +12 -0
- package/dist/system/index.js +10 -0
- package/dist/system/overrides.d.ts +80 -0
- package/dist/system/overrides.js +277 -0
- package/dist/system/portal.d.ts +56 -0
- package/dist/system/portal.js +193 -0
- package/dist/system/prepaint.d.ts +134 -0
- package/dist/system/prepaint.js +120 -0
- package/dist/system/theme-provider.d.ts +290 -0
- package/dist/system/theme-provider.js +543 -0
- package/dist/system/theme-registry.d.ts +53 -0
- package/dist/system/theme-registry.js +66 -0
- package/dist/system/use-density.d.ts +50 -0
- package/dist/system/use-density.js +232 -0
- package/dist/system/use-isomorphic-layout-effect.js +33 -0
- package/dist/system/use-theme.d.ts +30 -0
- package/dist/system/use-theme.js +36 -0
- package/dist/system/vocabulary.d.ts +16 -0
- package/dist/system/vocabulary.js +125 -0
- package/dist/theming/contrast.d.ts +2 -0
- package/dist/theming/contrast.js +2 -0
- package/dist/theming/create-theme.d.ts +195 -0
- package/dist/theming/create-theme.js +524 -0
- package/dist/theming/index.d.ts +4 -0
- package/dist/theming/index.js +4 -0
- package/dist/theming/serialize.d.ts +167 -0
- package/dist/theming/serialize.js +241 -0
- package/manifest/components/accordion.json +173 -0
- package/manifest/components/activity-graph.json +104 -0
- package/manifest/components/agent-card.json +150 -0
- package/manifest/components/agent-handoff.json +104 -0
- package/manifest/components/agent-mode-badge.json +102 -0
- package/manifest/components/agent-pile.json +147 -0
- package/manifest/components/agent-plan.json +74 -0
- package/manifest/components/agent-status.json +87 -0
- package/manifest/components/agent-surface.json +93 -0
- package/manifest/components/alert-dialog.json +215 -0
- package/manifest/components/animated-number.json +75 -0
- package/manifest/components/app-bar.json +297 -0
- package/manifest/components/app-shell.json +526 -0
- package/manifest/components/app-window-frame.json +124 -0
- package/manifest/components/approval-card.json +136 -0
- package/manifest/components/artifact-card.json +93 -0
- package/manifest/components/ask-box.json +288 -0
- package/manifest/components/audience-icon.json +46 -0
- package/manifest/components/autocomplete.json +262 -0
- package/manifest/components/avatar-group.json +83 -0
- package/manifest/components/avatar.json +113 -0
- package/manifest/components/background-inbox.json +79 -0
- package/manifest/components/band.json +104 -0
- package/manifest/components/bento.json +306 -0
- package/manifest/components/branch-picker.json +146 -0
- package/manifest/components/breadcrumb.json +85 -0
- package/manifest/components/button-group.json +91 -0
- package/manifest/components/button.json +163 -0
- package/manifest/components/calendar.json +65 -0
- package/manifest/components/canvas-split-body.json +66 -0
- package/manifest/components/canvas-split-document.json +55 -0
- package/manifest/components/canvas-split-header.json +97 -0
- package/manifest/components/canvas-split-line.json +66 -0
- package/manifest/components/canvas-split-message.json +70 -0
- package/manifest/components/canvas-split-thread.json +55 -0
- package/manifest/components/canvas-split.json +61 -0
- package/manifest/components/card.json +152 -0
- package/manifest/components/carousel.json +242 -0
- package/manifest/components/catalogue-icon.json +46 -0
- package/manifest/components/channel-beta-icon.json +46 -0
- package/manifest/components/channel-matrix.json +239 -0
- package/manifest/components/channel-released-icon.json +46 -0
- package/manifest/components/chart-container.json +127 -0
- package/manifest/components/chart-ramp.json +82 -0
- package/manifest/components/chart-swatch.json +72 -0
- package/manifest/components/chart-tooltip-content.json +140 -0
- package/manifest/components/chart.json +117 -0
- package/manifest/components/chat-empty-state.json +55 -0
- package/manifest/components/chat-panel-assistant-message.json +52 -0
- package/manifest/components/chat-panel-composer.json +74 -0
- package/manifest/components/chat-panel-messages.json +52 -0
- package/manifest/components/chat-panel-typing.json +52 -0
- package/manifest/components/chat-panel-user-message.json +52 -0
- package/manifest/components/chat-panel.json +58 -0
- package/manifest/components/checkbox-group.json +70 -0
- package/manifest/components/checkbox.json +106 -0
- package/manifest/components/checkpoint-history.json +91 -0
- package/manifest/components/chip.json +174 -0
- package/manifest/components/clamp.json +125 -0
- package/manifest/components/cli-tool-icon.json +46 -0
- package/manifest/components/code-block.json +107 -0
- package/manifest/components/code-diff.json +104 -0
- package/manifest/components/code-runner.json +124 -0
- package/manifest/components/collapsible.json +133 -0
- package/manifest/components/color-area.json +62 -0
- package/manifest/components/color-field.json +91 -0
- package/manifest/components/color-picker.json +235 -0
- package/manifest/components/color-slider.json +84 -0
- package/manifest/components/color-swatch.json +79 -0
- package/manifest/components/colors-section.json +70 -0
- package/manifest/components/combobox.json +265 -0
- package/manifest/components/command-palette.json +222 -0
- package/manifest/components/compaction-row.json +128 -0
- package/manifest/components/comparison-card.json +98 -0
- package/manifest/components/composer-actions.json +65 -0
- package/manifest/components/composer-attach-button.json +65 -0
- package/manifest/components/composer-attachment-chip.json +83 -0
- package/manifest/components/composer-attachments.json +60 -0
- package/manifest/components/composer-bar.json +76 -0
- package/manifest/components/composer-command-item.json +85 -0
- package/manifest/components/composer-context.json +71 -0
- package/manifest/components/composer-input.json +77 -0
- package/manifest/components/composer-menu-item.json +75 -0
- package/manifest/components/composer-menu.json +89 -0
- package/manifest/components/composer-model-item.json +82 -0
- package/manifest/components/composer-model-trigger.json +81 -0
- package/manifest/components/composer-person-item.json +86 -0
- package/manifest/components/composer-send.json +86 -0
- package/manifest/components/composer-toolbar.json +65 -0
- package/manifest/components/composer-voice-button.json +71 -0
- package/manifest/components/composer-voice.json +81 -0
- package/manifest/components/composer.json +238 -0
- package/manifest/components/computer-use.json +98 -0
- package/manifest/components/confidence-marker.json +86 -0
- package/manifest/components/connection-state.json +103 -0
- package/manifest/components/container.json +75 -0
- package/manifest/components/context-breakdown.json +72 -0
- package/manifest/components/context-menu.json +134 -0
- package/manifest/components/context-usage.json +98 -0
- package/manifest/components/conversation-search.json +111 -0
- package/manifest/components/copy-button.json +118 -0
- package/manifest/components/cost-meter.json +84 -0
- package/manifest/components/cue-logotype.json +110 -0
- package/manifest/components/cue-mark.json +111 -0
- package/manifest/components/cue-portal-frame.json +65 -0
- package/manifest/components/data-row.json +222 -0
- package/manifest/components/data-table-pagination.json +97 -0
- package/manifest/components/data-table-toolbar.json +127 -0
- package/manifest/components/data-tree.json +185 -0
- package/manifest/components/date-field.json +93 -0
- package/manifest/components/date-picker.json +255 -0
- package/manifest/components/date-range-picker.json +255 -0
- package/manifest/components/day-separator.json +63 -0
- package/manifest/components/delegation-card.json +196 -0
- package/manifest/components/density.json +93 -0
- package/manifest/components/description-list.json +91 -0
- package/manifest/components/diagram.json +126 -0
- package/manifest/components/dialog.json +222 -0
- package/manifest/components/disclosure.json +134 -0
- package/manifest/components/dmx-bar.json +107 -0
- package/manifest/components/dmx-strip.json +117 -0
- package/manifest/components/document-reference.json +108 -0
- package/manifest/components/draft-restore.json +96 -0
- package/manifest/components/drawer.json +204 -0
- package/manifest/components/dropdown-menu.json +275 -0
- package/manifest/components/edit-message.json +131 -0
- package/manifest/components/elements-command-palette.json +122 -0
- package/manifest/components/elements-composer.json +71 -0
- package/manifest/components/elements-data-table.json +75 -0
- package/manifest/components/elements-timeline.json +77 -0
- package/manifest/components/elicitation-form.json +130 -0
- package/manifest/components/empty-state-composer.json +71 -0
- package/manifest/components/empty-state-greeting.json +49 -0
- package/manifest/components/empty-state-suggestion.json +60 -0
- package/manifest/components/empty-state-suggestions.json +49 -0
- package/manifest/components/empty-state.json +111 -0
- package/manifest/components/end-of-turn-summary.json +89 -0
- package/manifest/components/env-var-input.json +194 -0
- package/manifest/components/error-state.json +93 -0
- package/manifest/components/export-dialog.json +101 -0
- package/manifest/components/eyebrow.json +59 -0
- package/manifest/components/feedback-dialog.json +133 -0
- package/manifest/components/field-description.json +66 -0
- package/manifest/components/field-error.json +87 -0
- package/manifest/components/field-label.json +66 -0
- package/manifest/components/field.json +82 -0
- package/manifest/components/file-tree.json +96 -0
- package/manifest/components/file-upload.json +204 -0
- package/manifest/components/flow-background.json +50 -0
- package/manifest/components/flow-controls.json +50 -0
- package/manifest/components/flow-graph.json +86 -0
- package/manifest/components/folder-icon.json +46 -0
- package/manifest/components/footer.json +133 -0
- package/manifest/components/frac.json +68 -0
- package/manifest/components/frames.json +210 -0
- package/manifest/components/generation-loader.json +78 -0
- package/manifest/components/generative-ui.json +125 -0
- package/manifest/components/grid.json +132 -0
- package/manifest/components/group-bar.json +122 -0
- package/manifest/components/guardrail-notice.json +109 -0
- package/manifest/components/hover-card.json +189 -0
- package/manifest/components/icon-button.json +106 -0
- package/manifest/components/image-generation.json +73 -0
- package/manifest/components/info-tip.json +133 -0
- package/manifest/components/inline-citation.json +90 -0
- package/manifest/components/input-group.json +112 -0
- package/manifest/components/input.json +121 -0
- package/manifest/components/inspector.json +199 -0
- package/manifest/components/item.json +163 -0
- package/manifest/components/job-progress.json +116 -0
- package/manifest/components/kbd.json +52 -0
- package/manifest/components/launcher-bubble.json +130 -0
- package/manifest/components/ledger.json +330 -0
- package/manifest/components/link.json +94 -0
- package/manifest/components/live-region-announcer.json +95 -0
- package/manifest/components/log-viewer.json +172 -0
- package/manifest/components/map-answer.json +97 -0
- package/manifest/components/markdown-text.json +126 -0
- package/manifest/components/math-block.json +84 -0
- package/manifest/components/mcp-server-icon.json +46 -0
- package/manifest/components/mcp-server-panel.json +102 -0
- package/manifest/components/memory-chips.json +73 -0
- package/manifest/components/menubar.json +184 -0
- package/manifest/components/message-actions.json +125 -0
- package/manifest/components/message-attachments.json +71 -0
- package/manifest/components/message-branches.json +83 -0
- package/manifest/components/message-list.json +121 -0
- package/manifest/components/message-pair.json +107 -0
- package/manifest/components/message-queue.json +85 -0
- package/manifest/components/message-timing.json +69 -0
- package/manifest/components/message.json +149 -0
- package/manifest/components/meter.json +150 -0
- package/manifest/components/mobile-composer.json +163 -0
- package/manifest/components/model-picker.json +87 -0
- package/manifest/components/multi-select.json +255 -0
- package/manifest/components/musical-time-input.json +141 -0
- package/manifest/components/navigation-menu.json +269 -0
- package/manifest/components/node-card.json +144 -0
- package/manifest/components/node-handle.json +84 -0
- package/manifest/components/number-field.json +131 -0
- package/manifest/components/number-ticker.json +67 -0
- package/manifest/components/onboarding.json +100 -0
- package/manifest/components/otp-field.json +163 -0
- package/manifest/components/page-shell.json +129 -0
- package/manifest/components/pagination.json +108 -0
- package/manifest/components/panel-header.json +89 -0
- package/manifest/components/panel.json +71 -0
- package/manifest/components/password-input.json +171 -0
- package/manifest/components/permission-grant.json +115 -0
- package/manifest/components/permission-scopes.json +184 -0
- package/manifest/components/piano-keyboard.json +149 -0
- package/manifest/components/plussie.json +140 -0
- package/manifest/components/popover.json +231 -0
- package/manifest/components/preset-section.json +80 -0
- package/manifest/components/preview.json +294 -0
- package/manifest/components/progress.json +114 -0
- package/manifest/components/prompt-library.json +122 -0
- package/manifest/components/queue-dock.json +139 -0
- package/manifest/components/quota-banner.json +113 -0
- package/manifest/components/quote-reply.json +129 -0
- package/manifest/components/radio-group.json +83 -0
- package/manifest/components/radio.json +94 -0
- package/manifest/components/rating.json +188 -0
- package/manifest/components/read-aloud.json +139 -0
- package/manifest/components/reasoning-effort.json +95 -0
- package/manifest/components/reasoning-panel.json +135 -0
- package/manifest/components/recommendation-card.json +133 -0
- package/manifest/components/regenerate-menu.json +107 -0
- package/manifest/components/replay-player.json +124 -0
- package/manifest/components/research-report.json +87 -0
- package/manifest/components/resizable.json +91 -0
- package/manifest/components/retrieval-chunks.json +98 -0
- package/manifest/components/revert-dock.json +197 -0
- package/manifest/components/reviewable-diff.json +113 -0
- package/manifest/components/risk-badge.json +89 -0
- package/manifest/components/row.json +122 -0
- package/manifest/components/schedule-card.json +121 -0
- package/manifest/components/score-breakdown.json +108 -0
- package/manifest/components/scroll-anchor.json +84 -0
- package/manifest/components/scroll-area.json +114 -0
- package/manifest/components/scrollable-tabs-list.json +91 -0
- package/manifest/components/scrub-input.json +268 -0
- package/manifest/components/seam-cell.json +91 -0
- package/manifest/components/seam-grid.json +84 -0
- package/manifest/components/seam-list.json +56 -0
- package/manifest/components/search-input.json +195 -0
- package/manifest/components/section-header.json +140 -0
- package/manifest/components/segmented-control.json +178 -0
- package/manifest/components/select.json +253 -0
- package/manifest/components/separator.json +56 -0
- package/manifest/components/settings-panel.json +152 -0
- package/manifest/components/shape-section.json +70 -0
- package/manifest/components/shared-conversation.json +107 -0
- package/manifest/components/sheet.json +210 -0
- package/manifest/components/shimmer-label.json +61 -0
- package/manifest/components/sidebar.json +245 -0
- package/manifest/components/signal-edge.json +56 -0
- package/manifest/components/skeleton.json +46 -0
- package/manifest/components/skill-icon.json +46 -0
- package/manifest/components/slider.json +106 -0
- package/manifest/components/sources.json +97 -0
- package/manifest/components/sparkline.json +89 -0
- package/manifest/components/speaker-identity.json +66 -0
- package/manifest/components/spec-sheet.json +93 -0
- package/manifest/components/spectrum-visualizer.json +147 -0
- package/manifest/components/spinner.json +71 -0
- package/manifest/components/stack-icon.json +46 -0
- package/manifest/components/stack.json +143 -0
- package/manifest/components/stacks-matrix-icon.json +46 -0
- package/manifest/components/stat.json +111 -0
- package/manifest/components/status-bar.json +233 -0
- package/manifest/components/status-dot.json +97 -0
- package/manifest/components/stepper.json +107 -0
- package/manifest/components/stopped-run.json +97 -0
- package/manifest/components/streaming-text.json +82 -0
- package/manifest/components/sub.json +45 -0
- package/manifest/components/subagent-list.json +106 -0
- package/manifest/components/suggestions.json +106 -0
- package/manifest/components/sup.json +45 -0
- package/manifest/components/swap-label.json +86 -0
- package/manifest/components/switch.json +102 -0
- package/manifest/components/table-scroll-region.json +78 -0
- package/manifest/components/table.json +306 -0
- package/manifest/components/tabs.json +156 -0
- package/manifest/components/tags-input.json +255 -0
- package/manifest/components/tail-status.json +138 -0
- package/manifest/components/terminal-block.json +111 -0
- package/manifest/components/terminal-frame.json +146 -0
- package/manifest/components/textarea.json +104 -0
- package/manifest/components/theme-configurator.json +158 -0
- package/manifest/components/theme-provider.json +228 -0
- package/manifest/components/thinking-indicator.json +69 -0
- package/manifest/components/thread-list.json +87 -0
- package/manifest/components/thread-search.json +108 -0
- package/manifest/components/threshold-rail.json +223 -0
- package/manifest/components/time-boundary.json +68 -0
- package/manifest/components/time-field.json +93 -0
- package/manifest/components/timeline-ruler.json +178 -0
- package/manifest/components/timeline.json +131 -0
- package/manifest/components/title-bar.json +97 -0
- package/manifest/components/toast.json +140 -0
- package/manifest/components/todo-list.json +76 -0
- package/manifest/components/toggle-group.json +134 -0
- package/manifest/components/toggle.json +140 -0
- package/manifest/components/token-editor.json +106 -0
- package/manifest/components/tool-call-card.json +268 -0
- package/manifest/components/tool-call.json +147 -0
- package/manifest/components/tool-error.json +141 -0
- package/manifest/components/tool-group.json +97 -0
- package/manifest/components/tool-timeline.json +147 -0
- package/manifest/components/toolbar.json +192 -0
- package/manifest/components/tooltip.json +199 -0
- package/manifest/components/trace-waterfall.json +84 -0
- package/manifest/components/tree-visibility-toggle.json +99 -0
- package/manifest/components/tree.json +182 -0
- package/manifest/components/turn-footer.json +133 -0
- package/manifest/components/two-step-button.json +150 -0
- package/manifest/components/typing-indicator.json +60 -0
- package/manifest/components/universe-grid.json +155 -0
- package/manifest/components/unread-divider.json +58 -0
- package/manifest/components/usage-chart.json +162 -0
- package/manifest/components/verdict-row.json +106 -0
- package/manifest/components/voice-conversation.json +141 -0
- package/manifest/components/web-preview.json +105 -0
- package/manifest/components/web-search.json +108 -0
- package/manifest/components/work-collapse.json +125 -0
- package/manifest/fixtures.json +776 -0
- package/manifest/manifest.json +5037 -0
- package/manifest/tokens.json +288 -0
- 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 };
|