@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,63 @@
|
|
|
1
|
+
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { StatusDot } from "../primitives/status-dot.js";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
/**
|
|
6
|
+
* A vertical run of events on one rail: a run log, a cue history, a deploy
|
|
7
|
+
* trail.
|
|
8
|
+
*
|
|
9
|
+
* Static markup — no `"use client"`.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <Timeline.Root>
|
|
13
|
+
* <Timeline.Item>
|
|
14
|
+
* <Timeline.Marker tone="ok" label="Patched" />
|
|
15
|
+
* <Timeline.Content>Patched universe 1</Timeline.Content>
|
|
16
|
+
* </Timeline.Item>
|
|
17
|
+
* <Timeline.Item>
|
|
18
|
+
* <Timeline.Marker tone="busy" label="Focusing" pulse />
|
|
19
|
+
* <Timeline.Content>Focusing front truss</Timeline.Content>
|
|
20
|
+
* </Timeline.Item>
|
|
21
|
+
* </Timeline.Root>
|
|
22
|
+
*/
|
|
23
|
+
const Timeline = {
|
|
24
|
+
Root: React.forwardRef(function TimelineRoot({ className, ...elementProps }, ref) {
|
|
25
|
+
return /* @__PURE__ */ jsx("ol", {
|
|
26
|
+
ref,
|
|
27
|
+
"data-slot": "timeline",
|
|
28
|
+
className: cn("m-0 flex list-none flex-col p-0", className),
|
|
29
|
+
...elementProps
|
|
30
|
+
});
|
|
31
|
+
}),
|
|
32
|
+
Item: React.forwardRef(function TimelineItem({ className, ...elementProps }, ref) {
|
|
33
|
+
return /* @__PURE__ */ jsx("li", {
|
|
34
|
+
ref,
|
|
35
|
+
"data-slot": "timeline-item",
|
|
36
|
+
className: cn("relative flex gap-(--cue-space-4) pb-(--cue-space-5) last:pb-0", "before:absolute before:top-(--cue-icon-sm) before:bottom-0 before:left-[calc(var(--cue-icon-sm)/2)] before:w-px before:-translate-x-1/2 before:bg-border before:content-[''] last:before:hidden", className),
|
|
37
|
+
...elementProps
|
|
38
|
+
});
|
|
39
|
+
}),
|
|
40
|
+
Marker: React.forwardRef(function TimelineMarker({ className, tone, label, pulse, ...elementProps }, ref) {
|
|
41
|
+
return /* @__PURE__ */ jsx("span", {
|
|
42
|
+
ref,
|
|
43
|
+
"data-slot": "timeline-marker",
|
|
44
|
+
className: cn("relative z-10 flex size-icon-sm shrink-0 items-center justify-center rounded-full bg-bg", className),
|
|
45
|
+
...elementProps,
|
|
46
|
+
children: /* @__PURE__ */ jsx(StatusDot, {
|
|
47
|
+
tone,
|
|
48
|
+
label,
|
|
49
|
+
pulse
|
|
50
|
+
})
|
|
51
|
+
});
|
|
52
|
+
}),
|
|
53
|
+
Content: React.forwardRef(function TimelineContent({ className, ...elementProps }, ref) {
|
|
54
|
+
return /* @__PURE__ */ jsx("div", {
|
|
55
|
+
ref,
|
|
56
|
+
"data-slot": "timeline-content",
|
|
57
|
+
className: cn("flex min-w-0 flex-1 flex-col gap-(--cue-space-1) font-mono text-(length:--cue-text-ui) text-fg", className),
|
|
58
|
+
...elementProps
|
|
59
|
+
});
|
|
60
|
+
})
|
|
61
|
+
};
|
|
62
|
+
//#endregion
|
|
63
|
+
export { Timeline };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { cn } from "./cn.js";
|
|
2
|
+
//#region src/lib/aria-class.ts
|
|
3
|
+
/**
|
|
4
|
+
* Bridge a React Aria `className` — string *or* render prop — through `cn`.
|
|
5
|
+
*
|
|
6
|
+
* Every other component in this system merges the caller's `className` over the
|
|
7
|
+
* recipe with `cn`, which is what makes `className` a real override instead of
|
|
8
|
+
* a specificity fight. React Aria's render-prop form breaks that: the value is
|
|
9
|
+
* a function, so there is nothing to merge until it is called. This wraps the
|
|
10
|
+
* function instead, deferring the merge to render time and keeping the same
|
|
11
|
+
* last-one-wins contract on both shapes.
|
|
12
|
+
*
|
|
13
|
+
* @param base - The component's own recipe.
|
|
14
|
+
* @param className - Whatever the caller passed, if anything.
|
|
15
|
+
* @returns A string when both sides are strings, otherwise a render prop.
|
|
16
|
+
* @example
|
|
17
|
+
* <RACColorArea className={ariaClassName(colorAreaClasses, className)} />
|
|
18
|
+
*/
|
|
19
|
+
function ariaClassName(base, className) {
|
|
20
|
+
if (typeof className === "function") return (values) => cn(base, className(values));
|
|
21
|
+
return cn(base, className);
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { ariaClassName };
|
package/dist/lib/cn.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { clsx } from "clsx";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
//#region src/lib/cn.ts
|
|
4
|
+
/**
|
|
5
|
+
* Join class names and resolve conflicting Tailwind utilities, last one wins.
|
|
6
|
+
*
|
|
7
|
+
* Every component in the system funnels its computed classes plus the caller's
|
|
8
|
+
* `className` through `cn`, which is what makes `className` a real override
|
|
9
|
+
* instead of a fight with specificity.
|
|
10
|
+
*
|
|
11
|
+
* @param inputs - Any clsx-compatible values (strings, arrays, condition maps).
|
|
12
|
+
* @returns The merged, de-conflicted class string.
|
|
13
|
+
* @example
|
|
14
|
+
* cn("h-4 px-2", isLarge && "h-8") // "px-2 h-8" when isLarge
|
|
15
|
+
*/
|
|
16
|
+
const cn = (...inputs) => twMerge(clsx(inputs));
|
|
17
|
+
//#endregion
|
|
18
|
+
export { cn };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
//#region src/lib/compose.ts
|
|
4
|
+
/**
|
|
5
|
+
* Point several refs at the same node.
|
|
6
|
+
*
|
|
7
|
+
* A component that forwards a ref to a DOM element but also needs that element
|
|
8
|
+
* itself — to measure it, or to ask whether an event landed inside it — cannot
|
|
9
|
+
* simply pass the forwarded ref through. This composes them into one callback
|
|
10
|
+
* ref that writes to all of them.
|
|
11
|
+
*
|
|
12
|
+
* @param refs Any mix of callback refs, ref objects, `null` and `undefined`.
|
|
13
|
+
* @returns A callback ref to hand to the element.
|
|
14
|
+
* @example
|
|
15
|
+
* const popupRef = React.useRef<HTMLDivElement | null>(null);
|
|
16
|
+
* <Popup ref={composeRefs(forwardedRef, popupRef)} />
|
|
17
|
+
*/
|
|
18
|
+
function composeRefs(...refs) {
|
|
19
|
+
return (node) => {
|
|
20
|
+
for (const ref of refs) if (typeof ref === "function") ref(node);
|
|
21
|
+
else if (ref !== null && ref !== void 0) ref.current = node;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* {@link composeRefs}, memoised on the refs it was given.
|
|
26
|
+
*
|
|
27
|
+
* Use this in render: a fresh callback ref on every render makes React detach
|
|
28
|
+
* and re-attach the node (`null` then the element), which would tear down
|
|
29
|
+
* anything keyed off the ref each time the component re-renders.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* const ref = useComposedRefs(forwardedRef, popupRef);
|
|
33
|
+
*/
|
|
34
|
+
function useComposedRefs(...refs) {
|
|
35
|
+
return React.useCallback(composeRefs(...refs), refs);
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { composeRefs, useComposedRefs };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ClassValue, clsx } from "clsx";
|
|
2
|
+
//#region src/lib/cva.d.ts
|
|
3
|
+
type ClassPropKey = "class" | "className";
|
|
4
|
+
type ClassProp = {
|
|
5
|
+
class: ClassValue;
|
|
6
|
+
className?: never;
|
|
7
|
+
} | {
|
|
8
|
+
class?: never;
|
|
9
|
+
className: ClassValue;
|
|
10
|
+
} | {
|
|
11
|
+
class?: never;
|
|
12
|
+
className?: never;
|
|
13
|
+
};
|
|
14
|
+
type OmitUndefined<T> = T extends undefined ? never : T;
|
|
15
|
+
/** The prop surface of a `cva` recipe, minus the class escape hatches. */
|
|
16
|
+
type VariantProps<Component extends (...args: never[]) => unknown> = Omit<OmitUndefined<Parameters<Component>[0]>, ClassPropKey>;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { ClassProp, ClassPropKey, type ClassValue, OmitUndefined, VariantProps };
|
package/dist/lib/cva.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { clsx } from "clsx";
|
|
2
|
+
//#region src/lib/cva.ts
|
|
3
|
+
/**
|
|
4
|
+
* Copyright 2022 Joe Bell. All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* This file is licensed to you under the Apache License, Version 2.0
|
|
7
|
+
* (the "License"); you may not use this file except in compliance with the
|
|
8
|
+
* License. You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
14
|
+
* WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the
|
|
15
|
+
* License for the specific language governing permissions and limitations under
|
|
16
|
+
* the License.
|
|
17
|
+
*/
|
|
18
|
+
/** Upstream CVA re-exports clsx as `cx`; kept for API parity. */
|
|
19
|
+
const cx = clsx;
|
|
20
|
+
const falsyToString = (value) => typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value;
|
|
21
|
+
/**
|
|
22
|
+
* Build a class-name recipe: a base string plus a variant map, compound
|
|
23
|
+
* variants and defaults.
|
|
24
|
+
*
|
|
25
|
+
* @param base - Classes applied to every call.
|
|
26
|
+
* @param config - `variants`, `compoundVariants` and `defaultVariants`.
|
|
27
|
+
* @returns A function taking the variant props (plus `class`/`className`) and
|
|
28
|
+
* returning the resolved class string.
|
|
29
|
+
* @example
|
|
30
|
+
* const chip = cva("inline-flex", {
|
|
31
|
+
* variants: { tone: { ok: "text-ok", danger: "text-danger" } },
|
|
32
|
+
* defaultVariants: { tone: "ok" },
|
|
33
|
+
* });
|
|
34
|
+
* chip({ tone: "danger" }); // "inline-flex text-danger"
|
|
35
|
+
*/
|
|
36
|
+
const cva = (base, config) => (props) => {
|
|
37
|
+
if (config?.variants == null) return cx(base, props?.class, props?.className);
|
|
38
|
+
const { variants, defaultVariants } = config;
|
|
39
|
+
const getVariantClassNames = Object.keys(variants).map((variant) => {
|
|
40
|
+
const variantProp = props?.[variant];
|
|
41
|
+
const defaultVariantProp = defaultVariants?.[variant];
|
|
42
|
+
if (variantProp === null) return null;
|
|
43
|
+
const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);
|
|
44
|
+
return variants[variant][variantKey];
|
|
45
|
+
});
|
|
46
|
+
const propsWithoutUndefined = props && Object.entries(props).reduce((acc, [key, value]) => {
|
|
47
|
+
if (value === void 0) return acc;
|
|
48
|
+
acc[key] = value;
|
|
49
|
+
return acc;
|
|
50
|
+
}, {});
|
|
51
|
+
const getCompoundVariantClassNames = config.compoundVariants?.reduce((acc, { class: cvClass, className: cvClassName, ...compoundVariantOptions }) => Object.entries(compoundVariantOptions).every(([key, value]) => {
|
|
52
|
+
const merged = {
|
|
53
|
+
...defaultVariants,
|
|
54
|
+
...propsWithoutUndefined
|
|
55
|
+
};
|
|
56
|
+
return Array.isArray(value) ? value.includes(merged[key]) : merged[key] === value;
|
|
57
|
+
}) ? [
|
|
58
|
+
...acc,
|
|
59
|
+
cvClass,
|
|
60
|
+
cvClassName
|
|
61
|
+
] : acc, []);
|
|
62
|
+
return cx(base, getVariantClassNames, getCompoundVariantClassNames, props?.class, props?.className);
|
|
63
|
+
};
|
|
64
|
+
//#endregion
|
|
65
|
+
export { cva, cx };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
//#region src/midi/_notes.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The note layer: what a MIDI number is called, whether it is a black key, and
|
|
4
|
+
* where it sits on a drawn keyboard.
|
|
5
|
+
*
|
|
6
|
+
* Kept out of the component because key geometry is arithmetic, not rendering —
|
|
7
|
+
* a sequencer wants to hit-test a pointer against a keyboard it has not drawn
|
|
8
|
+
* yet, and a test wants to check the layout without a DOM.
|
|
9
|
+
*
|
|
10
|
+
* The geometry is ported from ableton-sync verbatim: a 16px white key, a 10px
|
|
11
|
+
* black key, and the five black keys of an octave at 11, 27, 59, 75 and 91 px
|
|
12
|
+
* from the octave's left edge. Those offsets are not arbitrary — they are what
|
|
13
|
+
* makes the black keys sit over the *seams* between white keys rather than over
|
|
14
|
+
* their centres, which is the difference between a keyboard and a barcode.
|
|
15
|
+
*
|
|
16
|
+
* @internal Not part of the public API surface beyond the `/midi` barrel.
|
|
17
|
+
*/
|
|
18
|
+
/** How many notes MIDI addresses: 0 (C-2) through 127 (G8). */
|
|
19
|
+
declare const MIDI_NOTES = 128;
|
|
20
|
+
/** The pitch classes, sharp-spelled — the spelling a piano roll uses. */
|
|
21
|
+
declare const NOTE_NAMES: readonly ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
|
|
22
|
+
/** White key width in px at the 16px root. */
|
|
23
|
+
declare const WHITE_KEY_PX = 16;
|
|
24
|
+
/** Black key width in px at the 16px root. */
|
|
25
|
+
declare const BLACK_KEY_PX = 10;
|
|
26
|
+
/** One octave's width in px at the 16px root. */
|
|
27
|
+
declare const OCTAVE_PX: number;
|
|
28
|
+
/** An inclusive run of notes: the selection, or the window drawn on screen. */
|
|
29
|
+
interface NoteRange {
|
|
30
|
+
/** First note, inclusive. */
|
|
31
|
+
start: number;
|
|
32
|
+
/** Last note, inclusive. */
|
|
33
|
+
end: number;
|
|
34
|
+
}
|
|
35
|
+
/** One drawn key. */
|
|
36
|
+
interface PianoKey {
|
|
37
|
+
/** MIDI note number. */
|
|
38
|
+
note: number;
|
|
39
|
+
/** What to print or announce: `"C#3"`. */
|
|
40
|
+
name: string;
|
|
41
|
+
/** Whether it is one of the five raised keys. */
|
|
42
|
+
black: boolean;
|
|
43
|
+
/** Distance from the board's left edge, in px at the 16px root. */
|
|
44
|
+
left: number;
|
|
45
|
+
/** Key width in px at the 16px root. */
|
|
46
|
+
width: number;
|
|
47
|
+
}
|
|
48
|
+
/** A window of the note space, placed. */
|
|
49
|
+
interface KeyboardLayout extends NoteRange {
|
|
50
|
+
/** Board width in px at the 16px root. */
|
|
51
|
+
width: number;
|
|
52
|
+
/** The keys, whites first: the blacks are painted over the seams. */
|
|
53
|
+
keys: PianoKey[];
|
|
54
|
+
}
|
|
55
|
+
/** Whether a note is one of the five raised keys of its octave. */
|
|
56
|
+
declare function isBlackKey(note: number): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* The note's name and octave: `60` → `"C3"`.
|
|
59
|
+
*
|
|
60
|
+
* @param note - MIDI note number.
|
|
61
|
+
*/
|
|
62
|
+
declare function noteName(note: number): string;
|
|
63
|
+
/**
|
|
64
|
+
* The stretch of the note space a keyboard should draw for a given selection.
|
|
65
|
+
*
|
|
66
|
+
* Always a whole number of octaves starting on a C, because a keyboard that
|
|
67
|
+
* starts on F# is unreadable — the pattern of blacks is how a player finds
|
|
68
|
+
* their place. The window is centred on the selection and then clamped, so
|
|
69
|
+
* dragging an edge past the visible end scrolls the board rather than losing
|
|
70
|
+
* the marker.
|
|
71
|
+
*
|
|
72
|
+
* @param range - The selection to centre on.
|
|
73
|
+
* @param octaves - How many octaves to show.
|
|
74
|
+
*/
|
|
75
|
+
declare function keyboardWindow(range: NoteRange, octaves: number): NoteRange;
|
|
76
|
+
/**
|
|
77
|
+
* Place every key of a window.
|
|
78
|
+
*
|
|
79
|
+
* Whites come first in the returned array and blacks second, which is the paint
|
|
80
|
+
* order: a black key overlaps the two whites it sits between, and in a flat DOM
|
|
81
|
+
* the later element wins. Positions are px at the 16px root, the same contract
|
|
82
|
+
* the instruments group uses — the component converts to `rem`.
|
|
83
|
+
*
|
|
84
|
+
* @param window - The stretch to draw. Expected to start on a C.
|
|
85
|
+
*/
|
|
86
|
+
declare function keyboardLayout(window: NoteRange): KeyboardLayout;
|
|
87
|
+
/**
|
|
88
|
+
* Which note an x offset lands on, with the black keys winning the overlap.
|
|
89
|
+
*
|
|
90
|
+
* The order matters and is the whole subtlety of a keyboard hit test: a black
|
|
91
|
+
* key is drawn *over* the white keys either side of it, so an offset inside a
|
|
92
|
+
* black key belongs to the black key even though it is also inside a white one.
|
|
93
|
+
* Testing the whites first would make the sharps unclickable.
|
|
94
|
+
*
|
|
95
|
+
* @param x - Offset from the board's left edge, in px at the 16px root.
|
|
96
|
+
* @param window - The stretch on screen.
|
|
97
|
+
* @returns A note inside `window`; offsets past either edge clamp to it.
|
|
98
|
+
*/
|
|
99
|
+
declare function noteAtOffset(x: number, window: NoteRange): number;
|
|
100
|
+
//#endregion
|
|
101
|
+
export { BLACK_KEY_PX, KeyboardLayout, MIDI_NOTES, NOTE_NAMES, NoteRange, OCTAVE_PX, PianoKey, WHITE_KEY_PX, isBlackKey, keyboardLayout, keyboardWindow, noteAtOffset, noteName };
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
//#region src/midi/_notes.ts
|
|
2
|
+
/**
|
|
3
|
+
* The note layer: what a MIDI number is called, whether it is a black key, and
|
|
4
|
+
* where it sits on a drawn keyboard.
|
|
5
|
+
*
|
|
6
|
+
* Kept out of the component because key geometry is arithmetic, not rendering —
|
|
7
|
+
* a sequencer wants to hit-test a pointer against a keyboard it has not drawn
|
|
8
|
+
* yet, and a test wants to check the layout without a DOM.
|
|
9
|
+
*
|
|
10
|
+
* The geometry is ported from ableton-sync verbatim: a 16px white key, a 10px
|
|
11
|
+
* black key, and the five black keys of an octave at 11, 27, 59, 75 and 91 px
|
|
12
|
+
* from the octave's left edge. Those offsets are not arbitrary — they are what
|
|
13
|
+
* makes the black keys sit over the *seams* between white keys rather than over
|
|
14
|
+
* their centres, which is the difference between a keyboard and a barcode.
|
|
15
|
+
*
|
|
16
|
+
* @internal Not part of the public API surface beyond the `/midi` barrel.
|
|
17
|
+
*/
|
|
18
|
+
/** How many notes MIDI addresses: 0 (C-2) through 127 (G8). */
|
|
19
|
+
const MIDI_NOTES = 128;
|
|
20
|
+
/** Semitones in an octave. */
|
|
21
|
+
const SEMITONES = 12;
|
|
22
|
+
/** The pitch classes, sharp-spelled — the spelling a piano roll uses. */
|
|
23
|
+
const NOTE_NAMES = [
|
|
24
|
+
"C",
|
|
25
|
+
"C#",
|
|
26
|
+
"D",
|
|
27
|
+
"D#",
|
|
28
|
+
"E",
|
|
29
|
+
"F",
|
|
30
|
+
"F#",
|
|
31
|
+
"G",
|
|
32
|
+
"G#",
|
|
33
|
+
"A",
|
|
34
|
+
"A#",
|
|
35
|
+
"B"
|
|
36
|
+
];
|
|
37
|
+
/**
|
|
38
|
+
* Octave numbering: middle C (note 60) is C3.
|
|
39
|
+
*
|
|
40
|
+
* This is the sequencer convention (Ableton Live, Logic), not the Yamaha one
|
|
41
|
+
* where 60 is C4. It is ported rather than chosen: a range typed against the
|
|
42
|
+
* host's own display must read the same here, and being one octave out is the
|
|
43
|
+
* kind of bug nobody notices until a show.
|
|
44
|
+
*/
|
|
45
|
+
const OCTAVE_OFFSET = 2;
|
|
46
|
+
/** White key width in px at the 16px root. */
|
|
47
|
+
const WHITE_KEY_PX = 16;
|
|
48
|
+
/** Black key width in px at the 16px root. */
|
|
49
|
+
const BLACK_KEY_PX = 10;
|
|
50
|
+
/** One octave's width in px at the 16px root. */
|
|
51
|
+
const OCTAVE_PX = 112;
|
|
52
|
+
/** Semitone offsets of the white keys, in playing order. */
|
|
53
|
+
const WHITE_SEMITONES = [
|
|
54
|
+
0,
|
|
55
|
+
2,
|
|
56
|
+
4,
|
|
57
|
+
5,
|
|
58
|
+
7,
|
|
59
|
+
9,
|
|
60
|
+
11
|
|
61
|
+
];
|
|
62
|
+
/** Left edge of each black key within its octave, in px at the 16px root. */
|
|
63
|
+
const BLACK_LEFT = {
|
|
64
|
+
1: 11,
|
|
65
|
+
3: 27,
|
|
66
|
+
6: 59,
|
|
67
|
+
8: 75,
|
|
68
|
+
10: 91
|
|
69
|
+
};
|
|
70
|
+
/** Whether a note is one of the five raised keys of its octave. */
|
|
71
|
+
function isBlackKey(note) {
|
|
72
|
+
return BLACK_LEFT[modulo(note, SEMITONES)] !== void 0;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The note's name and octave: `60` → `"C3"`.
|
|
76
|
+
*
|
|
77
|
+
* @param note - MIDI note number.
|
|
78
|
+
*/
|
|
79
|
+
function noteName(note) {
|
|
80
|
+
return `${NOTE_NAMES[modulo(note, SEMITONES)]}${Math.floor(note / SEMITONES) - OCTAVE_OFFSET}`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The stretch of the note space a keyboard should draw for a given selection.
|
|
84
|
+
*
|
|
85
|
+
* Always a whole number of octaves starting on a C, because a keyboard that
|
|
86
|
+
* starts on F# is unreadable — the pattern of blacks is how a player finds
|
|
87
|
+
* their place. The window is centred on the selection and then clamped, so
|
|
88
|
+
* dragging an edge past the visible end scrolls the board rather than losing
|
|
89
|
+
* the marker.
|
|
90
|
+
*
|
|
91
|
+
* @param range - The selection to centre on.
|
|
92
|
+
* @param octaves - How many octaves to show.
|
|
93
|
+
*/
|
|
94
|
+
function keyboardWindow(range, octaves) {
|
|
95
|
+
const span = Math.max(1, Math.round(octaves)) * SEMITONES;
|
|
96
|
+
if (span >= 128) return {
|
|
97
|
+
start: 0,
|
|
98
|
+
end: 127
|
|
99
|
+
};
|
|
100
|
+
const centre = Math.floor((range.start + range.end) / 2);
|
|
101
|
+
const wanted = Math.floor(centre / SEMITONES) - Math.floor((octaves - 1) / 2);
|
|
102
|
+
const last = Math.floor((128 - span) / SEMITONES);
|
|
103
|
+
const first = Math.min(Math.max(wanted, 0), last);
|
|
104
|
+
return {
|
|
105
|
+
start: first * SEMITONES,
|
|
106
|
+
end: Math.min(127, first * SEMITONES + span - 1)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Place every key of a window.
|
|
111
|
+
*
|
|
112
|
+
* Whites come first in the returned array and blacks second, which is the paint
|
|
113
|
+
* order: a black key overlaps the two whites it sits between, and in a flat DOM
|
|
114
|
+
* the later element wins. Positions are px at the 16px root, the same contract
|
|
115
|
+
* the instruments group uses — the component converts to `rem`.
|
|
116
|
+
*
|
|
117
|
+
* @param window - The stretch to draw. Expected to start on a C.
|
|
118
|
+
*/
|
|
119
|
+
function keyboardLayout(window) {
|
|
120
|
+
const whites = [];
|
|
121
|
+
const blacks = [];
|
|
122
|
+
let width = 0;
|
|
123
|
+
for (let note = window.start; note <= window.end; note += 1) {
|
|
124
|
+
const black = isBlackKey(note);
|
|
125
|
+
const key = {
|
|
126
|
+
note,
|
|
127
|
+
name: noteName(note),
|
|
128
|
+
black,
|
|
129
|
+
left: keyLeft(note, window.start),
|
|
130
|
+
width: black ? 10 : 16
|
|
131
|
+
};
|
|
132
|
+
if (black) blacks.push(key);
|
|
133
|
+
else {
|
|
134
|
+
whites.push(key);
|
|
135
|
+
width = Math.max(width, key.left + key.width);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
...window,
|
|
140
|
+
width,
|
|
141
|
+
keys: [...whites, ...blacks]
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Which note an x offset lands on, with the black keys winning the overlap.
|
|
146
|
+
*
|
|
147
|
+
* The order matters and is the whole subtlety of a keyboard hit test: a black
|
|
148
|
+
* key is drawn *over* the white keys either side of it, so an offset inside a
|
|
149
|
+
* black key belongs to the black key even though it is also inside a white one.
|
|
150
|
+
* Testing the whites first would make the sharps unclickable.
|
|
151
|
+
*
|
|
152
|
+
* @param x - Offset from the board's left edge, in px at the 16px root.
|
|
153
|
+
* @param window - The stretch on screen.
|
|
154
|
+
* @returns A note inside `window`; offsets past either edge clamp to it.
|
|
155
|
+
*/
|
|
156
|
+
function noteAtOffset(x, window) {
|
|
157
|
+
const clamped = Math.max(0, x);
|
|
158
|
+
const octave = Math.floor(clamped / 112);
|
|
159
|
+
const inOctave = clamped - octave * 112;
|
|
160
|
+
for (const [semitone, left] of Object.entries(BLACK_LEFT)) if (inOctave >= left && inOctave < left + 10) return clampNote(window.start + octave * SEMITONES + Number(semitone), window);
|
|
161
|
+
const index = Math.min(6, Math.floor(inOctave / 16));
|
|
162
|
+
return clampNote(window.start + octave * SEMITONES + WHITE_SEMITONES[index], window);
|
|
163
|
+
}
|
|
164
|
+
/** Left edge of a key within a board that starts at `first`. */
|
|
165
|
+
function keyLeft(note, first) {
|
|
166
|
+
const relative = note - first;
|
|
167
|
+
const octave = Math.floor(relative / SEMITONES);
|
|
168
|
+
const semitone = modulo(relative, SEMITONES);
|
|
169
|
+
const base = octave * 112;
|
|
170
|
+
const black = BLACK_LEFT[semitone];
|
|
171
|
+
if (black !== void 0) return base + black;
|
|
172
|
+
return base + WHITE_SEMITONES.indexOf(semitone) * 16;
|
|
173
|
+
}
|
|
174
|
+
/** Keep a note inside a window. */
|
|
175
|
+
function clampNote(note, window) {
|
|
176
|
+
return Math.min(window.end, Math.max(window.start, note));
|
|
177
|
+
}
|
|
178
|
+
/** Remainder that stays positive for negative input, unlike `%`. */
|
|
179
|
+
function modulo(value, divisor) {
|
|
180
|
+
return (value % divisor + divisor) % divisor;
|
|
181
|
+
}
|
|
182
|
+
//#endregion
|
|
183
|
+
export { BLACK_KEY_PX, MIDI_NOTES, NOTE_NAMES, OCTAVE_PX, WHITE_KEY_PX, isBlackKey, keyboardLayout, keyboardWindow, noteAtOffset, noteName };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { TimeSignature } from "./_time.js";
|
|
2
|
+
//#region src/midi/_ruler.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Ruler arithmetic: how far apart the ticks go at a given zoom, and which of
|
|
5
|
+
* them are actually on screen.
|
|
6
|
+
*
|
|
7
|
+
* Both halves are pure, and both are the part of a timeline that is easy to get
|
|
8
|
+
* subtly wrong — a ruler that re-picks its interval one frame late flickers, and
|
|
9
|
+
* a ruler that renders every tick of an eight-thousand-beat song locks the tab
|
|
10
|
+
* on the first scroll.
|
|
11
|
+
*
|
|
12
|
+
* @internal `chooseInterval` and `rulerTicks` are re-exported from the `/midi`
|
|
13
|
+
* barrel; the module itself is not public.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* The pixel spacing a tick aims for: one centimetre at a nominal 96 DPI.
|
|
17
|
+
*
|
|
18
|
+
* A centimetre is the density a ruler stays *readable* at — close enough to
|
|
19
|
+
* count by eye, far enough apart that the labels do not collide. Ported from
|
|
20
|
+
* ableton-sync, which then multiplied the chosen interval by four "to make
|
|
21
|
+
* markers 4x less dense", i.e. targeted 4 cm while claiming to target 1. The
|
|
22
|
+
* multiplier is gone; callers who want a sparser ruler pass a bigger target.
|
|
23
|
+
*/
|
|
24
|
+
declare const TICK_TARGET_PX = 37.8;
|
|
25
|
+
/** What is on screen, in the ruler's own pixel coordinates. */
|
|
26
|
+
interface RulerViewport {
|
|
27
|
+
/** Distance from the start of the timeline to the left edge of the view. */
|
|
28
|
+
offset: number;
|
|
29
|
+
/** Width of the view. */
|
|
30
|
+
width: number;
|
|
31
|
+
}
|
|
32
|
+
/** One placed tick. */
|
|
33
|
+
interface RulerTick {
|
|
34
|
+
/** Position in quarter-note beats from the start of the song. */
|
|
35
|
+
beat: number;
|
|
36
|
+
/** Distance from the start of the track, in px. */
|
|
37
|
+
left: number;
|
|
38
|
+
/** Bar number, counting from 1. */
|
|
39
|
+
bar: number;
|
|
40
|
+
/** Beat within the bar, counting from 1. */
|
|
41
|
+
beatInBar: number;
|
|
42
|
+
/** Sixteenth within the beat, counting from 0. */
|
|
43
|
+
sixteenth: number;
|
|
44
|
+
/** Whether this tick is a bar line. */
|
|
45
|
+
barStart: boolean;
|
|
46
|
+
/** What to print: the bar number on a bar line, the subdivision otherwise. */
|
|
47
|
+
label: string;
|
|
48
|
+
}
|
|
49
|
+
/** A ruled timeline. */
|
|
50
|
+
interface RulerTicks {
|
|
51
|
+
/** Beats between ticks at this zoom. */
|
|
52
|
+
interval: number;
|
|
53
|
+
/** Full track width in px. */
|
|
54
|
+
width: number;
|
|
55
|
+
/** The ticks that are on screen, in time order. */
|
|
56
|
+
ticks: RulerTick[];
|
|
57
|
+
}
|
|
58
|
+
/** Everything {@link rulerTicks} needs to rule a timeline. */
|
|
59
|
+
interface RulerTicksOptions {
|
|
60
|
+
/** Length of the song in quarter-note beats. */
|
|
61
|
+
totalBeats: number;
|
|
62
|
+
/** Zoom: px per quarter-note beat. */
|
|
63
|
+
pxPerBeat: number;
|
|
64
|
+
/** What is on screen. Omitted, the whole song is ruled. */
|
|
65
|
+
viewport?: RulerViewport;
|
|
66
|
+
/** The signature in force. Defaults to 4/4. */
|
|
67
|
+
timeSignature?: TimeSignature;
|
|
68
|
+
/** Pixel spacing to aim for. Defaults to {@link TICK_TARGET_PX}. */
|
|
69
|
+
targetPx?: number;
|
|
70
|
+
/** How far past the viewport to keep ruling. Defaults to `120`. */
|
|
71
|
+
bufferPx?: number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* How many beats apart the ticks should be at this zoom.
|
|
75
|
+
*
|
|
76
|
+
* The candidates are musical divisions only — sixteenth, eighth, quarter, half,
|
|
77
|
+
* then the bar and multiples of it. A ruler that ticked every 3.7 beats because
|
|
78
|
+
* that is what the arithmetic wanted would be unreadable; the whole point of a
|
|
79
|
+
* musical ruler is that the numbers on it are numbers a musician counts in.
|
|
80
|
+
*
|
|
81
|
+
* @param pxPerBeat - Current zoom.
|
|
82
|
+
* @param beatsPerBar - Length of a bar in quarter-note beats.
|
|
83
|
+
* @param targetPx - Spacing to aim for. Defaults to {@link TICK_TARGET_PX}.
|
|
84
|
+
* @returns The finest interval whose spacing reaches the target, or the coarsest
|
|
85
|
+
* candidate when even that does not — a ruler always ticks somewhere.
|
|
86
|
+
*/
|
|
87
|
+
declare function chooseInterval(pxPerBeat: number, beatsPerBar: number, targetPx?: number): number;
|
|
88
|
+
/**
|
|
89
|
+
* The ticks worth rendering, and where they go.
|
|
90
|
+
*
|
|
91
|
+
* Culling is against a **pixel** buffer either side of the viewport, not a beat
|
|
92
|
+
* buffer. The ported version kept fifty beats of margin, which at a tight zoom
|
|
93
|
+
* is a thousand pixels of work nobody will scroll to and at a loose zoom is a
|
|
94
|
+
* few pixels — the one thing a buffer must be is a constant amount of *screen*.
|
|
95
|
+
*
|
|
96
|
+
* @param options - Song length, zoom, and what is on screen.
|
|
97
|
+
*/
|
|
98
|
+
declare function rulerTicks(options: RulerTicksOptions): RulerTicks;
|
|
99
|
+
//#endregion
|
|
100
|
+
export { RulerTick, RulerTicks, RulerTicksOptions, RulerViewport, TICK_TARGET_PX, chooseInterval, rulerTicks };
|