@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,541 @@
|
|
|
1
|
+
import { THEME_NAME_PATTERN as THEME_NAME_PATTERN$1, assertCssValue, serializeSystemModeAliases, serializeThemeBlock, tokenProperty } from "../theming/serialize.js";
|
|
2
|
+
import { DEFAULT_DENSITY_LEVEL, DENSITY_RADIUS_SCALE, THEME_COLOR_TOKENS } from "../theming/create-theme.js";
|
|
3
|
+
import { resolve } from "@cueplusplus/theme-base";
|
|
4
|
+
//#region src/configurator/_overrides.ts
|
|
5
|
+
/**
|
|
6
|
+
* The override model behind the theme configurator: what a user may move, where
|
|
7
|
+
* the declaration has to land for it to win, and how the whole thing survives a
|
|
8
|
+
* reload.
|
|
9
|
+
*
|
|
10
|
+
* Everything here is a pure function of an immutable `ThemeOverrides` value,
|
|
11
|
+
* apart from the three functions at the bottom that talk to the document and to
|
|
12
|
+
* `localStorage`. That split is deliberate — the panel is a view over this
|
|
13
|
+
* model, the export dialog is a second view over the same model, and neither is
|
|
14
|
+
* allowed a private opinion about what the tokens are.
|
|
15
|
+
*
|
|
16
|
+
* ## Why the scoping is this fussy
|
|
17
|
+
*
|
|
18
|
+
* The token layer declares its values under *attribute* selectors on two
|
|
19
|
+
* disjoint axes (`[data-theme]` for colour, `[data-density]` for geometry), and
|
|
20
|
+
* both axes are re-declared at every element that carries the attribute — the
|
|
21
|
+
* `<html>` element, the provider root, a `<Density>` island, a portal container.
|
|
22
|
+
* An override is therefore not "set the variable on `:root`": that loses in
|
|
23
|
+
* three separate ways.
|
|
24
|
+
*
|
|
25
|
+
* - A colour written under a bare `[data-theme="x"]` (0,1,0) is outranked by the
|
|
26
|
+
* shipped `[data-theme="x"][data-mode="light"]` block (0,2,0), so the moment
|
|
27
|
+
* the user switches to light the override vanishes. Colours are therefore
|
|
28
|
+
* written **crossed with the mode**, which is also honest: a theme's two modes
|
|
29
|
+
* are two palettes, and editing one should not silently edit the other.
|
|
30
|
+
* - A geometry multiplier written flat outranks the density block that set it,
|
|
31
|
+
* freezing `ultra-compact`'s 0.75 radius scale at 1 — the same trap
|
|
32
|
+
* `createTheme()` documents. Multipliers are therefore **crossed with the
|
|
33
|
+
* density ladder**, one rule per level, with the level's own value folded in.
|
|
34
|
+
* - `--cue-font-scale` is published by `<ThemeProvider>` as an *inline* custom
|
|
35
|
+
* property, and no stylesheet outranks an inline declaration. It is the one
|
|
36
|
+
* token here that needs `!important`, and it gets its own rule so that the
|
|
37
|
+
* flag never spreads to anything that does not need it.
|
|
38
|
+
*
|
|
39
|
+
* @internal Not part of the public API; `./configurator` re-exports what a host
|
|
40
|
+
* app needs.
|
|
41
|
+
*/
|
|
42
|
+
/** The one style element the configurator writes into. */
|
|
43
|
+
const OVERRIDE_STYLE_ID = "cue-configurator-overrides";
|
|
44
|
+
/** Default `localStorage` key for the persisted snapshot. */
|
|
45
|
+
const DEFAULT_CONFIGURATOR_STORAGE_KEY = "cue-configurator";
|
|
46
|
+
/**
|
|
47
|
+
* Schema version of the persisted snapshot.
|
|
48
|
+
*
|
|
49
|
+
* A blob from another version is discarded rather than migrated: the payload is
|
|
50
|
+
* a design preference a user can rebuild in a minute, and a wrong migration
|
|
51
|
+
* would paint a page with values nobody chose.
|
|
52
|
+
*/
|
|
53
|
+
const CONFIGURATOR_VERSION = 1;
|
|
54
|
+
/** Banner printed at the top of the applied — and exported — stylesheet. */
|
|
55
|
+
const OVERRIDE_BANNER = "@cueplusplus/ui — theme configurator overrides";
|
|
56
|
+
/**
|
|
57
|
+
* The unitless density multiplier each level publishes.
|
|
58
|
+
*
|
|
59
|
+
* A copy of `packages/tokens/src/density/*.tokens.json`: the tokens package
|
|
60
|
+
* emits CSS, and a value this module has to *multiply* cannot be read out of a
|
|
61
|
+
* stylesheet. `test/configurator/overrides.test.ts` re-reads the DTCG sources
|
|
62
|
+
* and fails on the first number that has drifted.
|
|
63
|
+
*/
|
|
64
|
+
const DENSITY_FACTOR = {
|
|
65
|
+
"ultra-compact": .85,
|
|
66
|
+
"compact": 1,
|
|
67
|
+
"normal": 1.3,
|
|
68
|
+
"large": 1.6,
|
|
69
|
+
"ultra-large": 1.9
|
|
70
|
+
};
|
|
71
|
+
/** The authored label tracking, and the value the "reset" arrow returns to. */
|
|
72
|
+
const BASE_TRACKING_LABEL = "0.12em";
|
|
73
|
+
/** The colour tokens the panel edits — the same list a theme block declares. */
|
|
74
|
+
const COLOR_TOKENS = THEME_COLOR_TOKENS;
|
|
75
|
+
/** The type stacks the panel edits. Mode-independent: a typeface is not a palette. */
|
|
76
|
+
const FONT_TOKENS = [
|
|
77
|
+
"font-sans",
|
|
78
|
+
"font-mono",
|
|
79
|
+
"font-display"
|
|
80
|
+
];
|
|
81
|
+
/**
|
|
82
|
+
* The multipliers that have to be crossed with the density ladder, and the
|
|
83
|
+
* per-level values they are crossed with.
|
|
84
|
+
*/
|
|
85
|
+
const SCALED_TOKENS = {
|
|
86
|
+
"radius-scale": DENSITY_RADIUS_SCALE,
|
|
87
|
+
"density": DENSITY_FACTOR
|
|
88
|
+
};
|
|
89
|
+
/** Axis-free tokens: one declaration covers every level. */
|
|
90
|
+
const FLAT_TOKENS = ["tracking-label"];
|
|
91
|
+
/** Tokens the provider publishes inline, which a stylesheet can only reach with `!important`. */
|
|
92
|
+
const INLINE_TOKENS = ["font-scale"];
|
|
93
|
+
/** Every token the configurator is allowed to write, as `--cue-*` properties, in contract order. */
|
|
94
|
+
const MANAGED_TOKENS = [
|
|
95
|
+
...COLOR_TOKENS,
|
|
96
|
+
...FONT_TOKENS,
|
|
97
|
+
...Object.keys(SCALED_TOKENS),
|
|
98
|
+
...FLAT_TOKENS,
|
|
99
|
+
...INLINE_TOKENS
|
|
100
|
+
].map(tokenProperty);
|
|
101
|
+
const KINDS = Object.fromEntries([
|
|
102
|
+
...COLOR_TOKENS.map((token) => [tokenProperty(token), "color"]),
|
|
103
|
+
...FONT_TOKENS.map((token) => [tokenProperty(token), "font"]),
|
|
104
|
+
...Object.keys(SCALED_TOKENS).map((token) => [tokenProperty(token), "scaled"]),
|
|
105
|
+
...FLAT_TOKENS.map((token) => [tokenProperty(token), "flat"]),
|
|
106
|
+
...INLINE_TOKENS.map((token) => [tokenProperty(token), "inline"])
|
|
107
|
+
]);
|
|
108
|
+
/** The density levels, default first — the order the crossed rules are emitted in. */
|
|
109
|
+
const DENSITY_LEVELS = [DEFAULT_DENSITY_LEVEL, ...Object.keys(DENSITY_FACTOR).filter((level) => level !== DEFAULT_DENSITY_LEVEL)];
|
|
110
|
+
/** The nothing-has-moved state. Frozen: it is shared by every caller. */
|
|
111
|
+
const EMPTY_OVERRIDES = Object.freeze({
|
|
112
|
+
themes: Object.freeze({}),
|
|
113
|
+
global: Object.freeze({})
|
|
114
|
+
});
|
|
115
|
+
/** Which of the five buckets a token belongs to, or `null` if it is not ours to write. */
|
|
116
|
+
function tokenKind(token) {
|
|
117
|
+
return KINDS[tokenProperty(token)] ?? null;
|
|
118
|
+
}
|
|
119
|
+
/** The key a theme+mode pair is stored under. */
|
|
120
|
+
function scopeKey(scope) {
|
|
121
|
+
return `${scope.theme}/${scope.mode}`;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* The inverse of {@link scopeKey}, rejecting anything that would not be safe in
|
|
125
|
+
* a selector.
|
|
126
|
+
*
|
|
127
|
+
* A bare `{ theme, mode }` rather than a {@link ThemeScope}: a storage key
|
|
128
|
+
* carries a *name*, and this module has no registry to look a manifest up in.
|
|
129
|
+
* Both callers below want only the selector halves. A caller that needs the
|
|
130
|
+
* manifest attaches it from the registry it holds.
|
|
131
|
+
*/
|
|
132
|
+
function parseScopeKey(key) {
|
|
133
|
+
const slash = key.lastIndexOf("/");
|
|
134
|
+
if (slash === -1) return null;
|
|
135
|
+
const theme = key.slice(0, slash);
|
|
136
|
+
const mode = key.slice(slash + 1);
|
|
137
|
+
if (!THEME_NAME_PATTERN$1.test(theme)) return null;
|
|
138
|
+
if (mode !== "dark" && mode !== "light") return null;
|
|
139
|
+
return {
|
|
140
|
+
theme,
|
|
141
|
+
mode
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Whether a value can be printed into a declaration without escaping it.
|
|
146
|
+
*
|
|
147
|
+
* Colours arrive from the picker already re-formatted, but a font stack is free
|
|
148
|
+
* text a user typed, and it ends up inside a stylesheet. This is the same check
|
|
149
|
+
* `theming/serialize.ts` makes — asked as a question instead of thrown as an
|
|
150
|
+
* error, so a field can mark itself invalid while the user is still typing.
|
|
151
|
+
*
|
|
152
|
+
* @param value - The proposed declaration value.
|
|
153
|
+
* @returns `true` when it stays inside its declaration.
|
|
154
|
+
* @example
|
|
155
|
+
* isSafeCssValue("Iosevka, monospace"); // → true
|
|
156
|
+
*/
|
|
157
|
+
function isSafeCssValue(value) {
|
|
158
|
+
try {
|
|
159
|
+
assertCssValue("value", value);
|
|
160
|
+
return true;
|
|
161
|
+
} catch {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The value a token has before the user touches anything.
|
|
167
|
+
*
|
|
168
|
+
* Everything a theme actually declares comes from `theme-base`'s `resolve()`,
|
|
169
|
+
* which is the one implementation of the layering rule — the theme's block for
|
|
170
|
+
* this mode, the theme's own font override under the base stack — so the panel
|
|
171
|
+
* and the runtime cannot disagree about what "shipped" means. A `null` manifest
|
|
172
|
+
* is the blank base, which resolves to the neutral ramp rather than to nothing:
|
|
173
|
+
* every scope answers, including one naming a theme no manifest was passed for.
|
|
174
|
+
* The multipliers are 1 by definition, because what the panel edits is the
|
|
175
|
+
* multiplier and not the ladder underneath it.
|
|
176
|
+
*
|
|
177
|
+
* @param scope - Theme, mode and manifest being edited.
|
|
178
|
+
* @param token - A bare token name or a `--cue-*` property.
|
|
179
|
+
* @returns The shipped value, as a CSS string.
|
|
180
|
+
* @example
|
|
181
|
+
* baseValue({ theme: "terminal", mode: "dark", manifest: terminal }, "accent");
|
|
182
|
+
* // → "hsl(180 100% 50%)"
|
|
183
|
+
*/
|
|
184
|
+
function baseValue(scope, token) {
|
|
185
|
+
const property = tokenProperty(token);
|
|
186
|
+
const name = property.slice(6);
|
|
187
|
+
switch (tokenKind(property)) {
|
|
188
|
+
case "color": return resolve(scope.manifest, { mode: scope.mode }).colors[name] ?? "";
|
|
189
|
+
case "font": return resolve(scope.manifest, { mode: scope.mode }).fonts[name] ?? "";
|
|
190
|
+
case "scaled":
|
|
191
|
+
case "inline": return "1";
|
|
192
|
+
case "flat": return BASE_TRACKING_LABEL;
|
|
193
|
+
default: return "";
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/** The scope keys a token's declaration is stored under: both modes for a font, else one. */
|
|
197
|
+
function storageScopes(scope, kind) {
|
|
198
|
+
if (kind === "font") return [scopeKey({
|
|
199
|
+
...scope,
|
|
200
|
+
mode: "dark"
|
|
201
|
+
}), scopeKey({
|
|
202
|
+
...scope,
|
|
203
|
+
mode: "light"
|
|
204
|
+
})];
|
|
205
|
+
return [scopeKey(scope)];
|
|
206
|
+
}
|
|
207
|
+
/** A shallow clone deep enough to edit one scope without aliasing the rest. */
|
|
208
|
+
function cloneOverrides(overrides) {
|
|
209
|
+
const themes = {};
|
|
210
|
+
for (const [key, entries] of Object.entries(overrides.themes)) themes[key] = { ...entries };
|
|
211
|
+
return {
|
|
212
|
+
themes,
|
|
213
|
+
global: { ...overrides.global }
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/** Drop scopes that no longer hold anything, so `serializeOverrideCss` emits no empty rules. */
|
|
217
|
+
function prune(overrides) {
|
|
218
|
+
for (const [key, entries] of Object.entries(overrides.themes)) if (Object.keys(entries).length === 0) delete overrides.themes[key];
|
|
219
|
+
return overrides;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Move a token, returning a new state.
|
|
223
|
+
*
|
|
224
|
+
* Setting a token back to the value the preset ships is a *reset*, not an
|
|
225
|
+
* override — otherwise "I put it back" would still export a declaration and the
|
|
226
|
+
* user would carry a no-op forever.
|
|
227
|
+
*
|
|
228
|
+
* @param overrides - Current state. Never mutated.
|
|
229
|
+
* @param scope - Theme and mode being edited.
|
|
230
|
+
* @param token - A bare token name or a `--cue-*` property.
|
|
231
|
+
* @param value - The new CSS value.
|
|
232
|
+
* @returns The new state.
|
|
233
|
+
* @throws TypeError if the token is not one the configurator manages, or the
|
|
234
|
+
* value could break out of its declaration.
|
|
235
|
+
* @example
|
|
236
|
+
* setOverride(overrides, { theme: "terminal", mode: "dark" }, "accent", "#ff8800");
|
|
237
|
+
*/
|
|
238
|
+
function setOverride(overrides, scope, token, value) {
|
|
239
|
+
const property = tokenProperty(token);
|
|
240
|
+
const kind = tokenKind(property);
|
|
241
|
+
if (kind === null) throw new TypeError(`${property} is not a token the configurator manages`);
|
|
242
|
+
assertCssValue(property, value);
|
|
243
|
+
if (value === baseValue(scope, property)) return clearOverride(overrides, scope, property);
|
|
244
|
+
const next = cloneOverrides(overrides);
|
|
245
|
+
if (kind === "color" || kind === "font") for (const key of storageScopes(scope, kind)) next.themes[key] = {
|
|
246
|
+
...next.themes[key],
|
|
247
|
+
[property]: value
|
|
248
|
+
};
|
|
249
|
+
else next.global[property] = value;
|
|
250
|
+
return prune(next);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Put a token back to its shipped value, returning a new state.
|
|
254
|
+
*
|
|
255
|
+
* @param overrides - Current state. Never mutated.
|
|
256
|
+
* @param scope - Theme and mode being edited.
|
|
257
|
+
* @param token - A bare token name or a `--cue-*` property.
|
|
258
|
+
* @returns The new state.
|
|
259
|
+
* @example
|
|
260
|
+
* clearOverride(overrides, scope, "--cue-accent");
|
|
261
|
+
*/
|
|
262
|
+
function clearOverride(overrides, scope, token) {
|
|
263
|
+
const property = tokenProperty(token);
|
|
264
|
+
const kind = tokenKind(property);
|
|
265
|
+
if (kind === null) return overrides;
|
|
266
|
+
const next = cloneOverrides(overrides);
|
|
267
|
+
if (kind === "color" || kind === "font") for (const key of storageScopes(scope, kind)) delete next.themes[key]?.[property];
|
|
268
|
+
else delete next.global[property];
|
|
269
|
+
return prune(next);
|
|
270
|
+
}
|
|
271
|
+
/** Whether a token currently carries an override in this scope. */
|
|
272
|
+
function isOverridden(overrides, scope, token) {
|
|
273
|
+
const property = tokenProperty(token);
|
|
274
|
+
const kind = tokenKind(property);
|
|
275
|
+
if (kind === null) return false;
|
|
276
|
+
if (kind === "color" || kind === "font") return overrides.themes[scopeKey(scope)]?.[property] !== void 0;
|
|
277
|
+
return overrides.global[property] !== void 0;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* How many declarations the user has made.
|
|
281
|
+
*
|
|
282
|
+
* Counted as declarations rather than as decisions: a font family is one choice
|
|
283
|
+
* that produces two declarations, one per mode, and the number in the panel is
|
|
284
|
+
* the number that will appear in the export.
|
|
285
|
+
*/
|
|
286
|
+
function overrideCount(overrides) {
|
|
287
|
+
let total = Object.keys(overrides.global).length;
|
|
288
|
+
for (const entries of Object.values(overrides.themes)) total += Object.keys(entries).length;
|
|
289
|
+
return total;
|
|
290
|
+
}
|
|
291
|
+
/** The value a token has right now: the override if there is one, else the shipped value. */
|
|
292
|
+
function resolveValue(overrides, scope, token) {
|
|
293
|
+
const property = tokenProperty(token);
|
|
294
|
+
const kind = tokenKind(property);
|
|
295
|
+
if (kind === null) return "";
|
|
296
|
+
return (kind === "color" || kind === "font" ? overrides.themes[scopeKey(scope)]?.[property] : overrides.global[property]) ?? baseValue(scope, property);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Every token the configurator manages, resolved for one scope.
|
|
300
|
+
*
|
|
301
|
+
* This is what `onChange` hands a host app and what the registry export writes:
|
|
302
|
+
* a complete picture, not a diff, so a consumer never has to know which preset
|
|
303
|
+
* the values came from.
|
|
304
|
+
*
|
|
305
|
+
* @param overrides - Current state.
|
|
306
|
+
* @param scope - Theme and mode to resolve for.
|
|
307
|
+
* @returns `--cue-*` property → CSS value.
|
|
308
|
+
*/
|
|
309
|
+
function resolvedTokens(overrides, scope) {
|
|
310
|
+
return Object.fromEntries(MANAGED_TOKENS.map((property) => [property, resolveValue(overrides, scope, property)]));
|
|
311
|
+
}
|
|
312
|
+
/** Declarations of one scope, ordered by the token contract rather than by edit order. */
|
|
313
|
+
function orderedDeclarations(entries) {
|
|
314
|
+
return MANAGED_TOKENS.filter((property) => entries[property] !== void 0).map((property) => [property, entries[property]]);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* The selector a theme-scoped declaration lands under.
|
|
318
|
+
*
|
|
319
|
+
* Not `themeSelector()` from the theming group, which emits the *authoring*
|
|
320
|
+
* form: a bare `[data-theme="x"]` for dark, because that is the block a
|
|
321
|
+
* stylesheet writes first. An override has to beat that block **and** the light
|
|
322
|
+
* block above it, so it always names the mode.
|
|
323
|
+
*/
|
|
324
|
+
function overrideSelector(theme, mode) {
|
|
325
|
+
return `[data-theme="${theme}"][data-mode="${mode}"]`;
|
|
326
|
+
}
|
|
327
|
+
/** Round a product of two scales to something a stylesheet can print. */
|
|
328
|
+
const scaled = (a, b) => String(Number((a * b).toFixed(4)));
|
|
329
|
+
/** A multiplier, crossed with one density level's own value. */
|
|
330
|
+
function crossed(property, value, level) {
|
|
331
|
+
const ladder = SCALED_TOKENS[property.slice(6)];
|
|
332
|
+
const factor = Number(value);
|
|
333
|
+
if (ladder === void 0 || !Number.isFinite(factor)) return value;
|
|
334
|
+
return scaled(factor, ladder[level]);
|
|
335
|
+
}
|
|
336
|
+
const THEME_COMMENT = "the mode is named so the override outranks the shipped light block";
|
|
337
|
+
const CROSSED_COMMENT = "crossed with the density ladder — flat would freeze ultra-compact's 0.75";
|
|
338
|
+
const INLINE_COMMENT = "the provider inlines this one; !important is the only lever left";
|
|
339
|
+
/**
|
|
340
|
+
* Print the overrides as a stylesheet.
|
|
341
|
+
*
|
|
342
|
+
* Returns `""` when nothing has moved — an empty stylesheet is not a stylesheet
|
|
343
|
+
* with an empty rule in it, and the runtime uses the empty string as its signal
|
|
344
|
+
* to remove the style element entirely.
|
|
345
|
+
*
|
|
346
|
+
* @param overrides - Current state.
|
|
347
|
+
* @param options - Banner text.
|
|
348
|
+
* @returns The stylesheet, newline-terminated, or `""`.
|
|
349
|
+
* @example
|
|
350
|
+
* serializeOverrideCss(overrides, { banner: OVERRIDE_BANNER });
|
|
351
|
+
*/
|
|
352
|
+
function serializeOverrideCss(overrides, options = {}) {
|
|
353
|
+
const blocks = [];
|
|
354
|
+
const aliases = /* @__PURE__ */ new Map();
|
|
355
|
+
for (const key of Object.keys(overrides.themes).toSorted()) {
|
|
356
|
+
const scope = parseScopeKey(key);
|
|
357
|
+
const declarations = orderedDeclarations(overrides.themes[key] ?? {});
|
|
358
|
+
if (scope === null || declarations.length === 0) continue;
|
|
359
|
+
const sections = [{
|
|
360
|
+
comment: blocks.length === 0 ? THEME_COMMENT : void 0,
|
|
361
|
+
declarations
|
|
362
|
+
}];
|
|
363
|
+
blocks.push({
|
|
364
|
+
selector: overrideSelector(scope.theme, scope.mode),
|
|
365
|
+
sections
|
|
366
|
+
});
|
|
367
|
+
aliases.set(scope.theme, [...aliases.get(scope.theme) ?? [], {
|
|
368
|
+
mode: scope.mode,
|
|
369
|
+
sections
|
|
370
|
+
}]);
|
|
371
|
+
}
|
|
372
|
+
const global = orderedDeclarations(overrides.global);
|
|
373
|
+
const scaledDeclarations = global.filter(([property]) => tokenKind(property) === "scaled");
|
|
374
|
+
const flatDeclarations = global.filter(([property]) => tokenKind(property) === "flat");
|
|
375
|
+
const inlineDeclarations = global.filter(([property]) => tokenKind(property) === "inline");
|
|
376
|
+
if (scaledDeclarations.length > 0) for (const level of DENSITY_LEVELS) {
|
|
377
|
+
const isDefault = level === DEFAULT_DENSITY_LEVEL;
|
|
378
|
+
blocks.push({
|
|
379
|
+
selector: isDefault ? `:root,\n[data-density="${level}"]` : `[data-density="${level}"]`,
|
|
380
|
+
sections: [{
|
|
381
|
+
comment: isDefault ? CROSSED_COMMENT : void 0,
|
|
382
|
+
declarations: scaledDeclarations.map(([property, value]) => [property, crossed(property, value, level)])
|
|
383
|
+
}]
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
if (flatDeclarations.length > 0) blocks.push({
|
|
387
|
+
selector: ":root,\n[data-density]",
|
|
388
|
+
sections: [{ declarations: flatDeclarations }]
|
|
389
|
+
});
|
|
390
|
+
if (inlineDeclarations.length > 0) blocks.push({
|
|
391
|
+
selector: ":root,\n[data-cue-root],\n[data-cue-portal]",
|
|
392
|
+
sections: [{
|
|
393
|
+
comment: INLINE_COMMENT,
|
|
394
|
+
declarations: inlineDeclarations.map(([property, value]) => [property, `${value} !important`])
|
|
395
|
+
}]
|
|
396
|
+
});
|
|
397
|
+
if (blocks.length === 0) return "";
|
|
398
|
+
const banner = options.banner === void 0 ? [] : [`/*! ${options.banner}\n * Written by <ThemeConfigurator>. Paste it, do not edit it.\n */`];
|
|
399
|
+
const systemAliases = [...aliases.entries()].map(([theme, modes]) => serializeSystemModeAliases(theme, modes));
|
|
400
|
+
return `${[
|
|
401
|
+
...banner,
|
|
402
|
+
...blocks.map(serializeThemeBlock),
|
|
403
|
+
...systemAliases
|
|
404
|
+
].join("\n\n")}\n`;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* The stylesheet the panel applies — and, byte for byte, the one its CSS export
|
|
408
|
+
* hands you. One function so the two can never drift.
|
|
409
|
+
*
|
|
410
|
+
* @param overrides - Current state.
|
|
411
|
+
* @returns The banner-topped stylesheet, or `""` when nothing has moved.
|
|
412
|
+
*/
|
|
413
|
+
function configuratorCss(overrides) {
|
|
414
|
+
return serializeOverrideCss(overrides, { banner: OVERRIDE_BANNER });
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Put the stylesheet into the document, creating the style element if needed.
|
|
418
|
+
*
|
|
419
|
+
* One element, identified by {@link OVERRIDE_STYLE_ID}, appended to `<head>`
|
|
420
|
+
* after everything else — later in the cascade is half of how these overrides
|
|
421
|
+
* win. An empty stylesheet removes the element instead of leaving an empty one
|
|
422
|
+
* behind, so "reset all" leaves the document exactly as it found it.
|
|
423
|
+
*
|
|
424
|
+
* @param css - The stylesheet, from {@link configuratorCss}.
|
|
425
|
+
* @param doc - Document to write into. Defaults to the ambient one.
|
|
426
|
+
* @returns The style element, or `null` when there was nothing to apply.
|
|
427
|
+
*/
|
|
428
|
+
function applyOverrideCss(css, doc = globalThis.document) {
|
|
429
|
+
if (doc === void 0) return null;
|
|
430
|
+
if (css === "") {
|
|
431
|
+
removeOverrideStyles(doc);
|
|
432
|
+
return null;
|
|
433
|
+
}
|
|
434
|
+
let element = doc.getElementById(OVERRIDE_STYLE_ID);
|
|
435
|
+
if (element === null) {
|
|
436
|
+
element = doc.createElement("style");
|
|
437
|
+
element.id = OVERRIDE_STYLE_ID;
|
|
438
|
+
doc.head.appendChild(element);
|
|
439
|
+
}
|
|
440
|
+
if (element.textContent !== css) element.textContent = css;
|
|
441
|
+
return element;
|
|
442
|
+
}
|
|
443
|
+
/** Take the override stylesheet back out of the document. */
|
|
444
|
+
function removeOverrideStyles(doc = globalThis.document) {
|
|
445
|
+
doc?.getElementById(OVERRIDE_STYLE_ID)?.remove();
|
|
446
|
+
}
|
|
447
|
+
/** Keep only the entries this module is willing to print into a stylesheet. */
|
|
448
|
+
function sanitizeEntries(input) {
|
|
449
|
+
const entries = {};
|
|
450
|
+
if (input === null || typeof input !== "object") return entries;
|
|
451
|
+
for (const [property, value] of Object.entries(input)) {
|
|
452
|
+
if (typeof value !== "string") continue;
|
|
453
|
+
if (!MANAGED_TOKENS.includes(property)) continue;
|
|
454
|
+
if (!isSafeCssValue(value)) continue;
|
|
455
|
+
entries[property] = value;
|
|
456
|
+
}
|
|
457
|
+
return entries;
|
|
458
|
+
}
|
|
459
|
+
/** The persisted blob, read defensively — it is user-editable text that becomes CSS. */
|
|
460
|
+
function sanitizeOverrides(input) {
|
|
461
|
+
const overrides = {
|
|
462
|
+
themes: {},
|
|
463
|
+
global: {}
|
|
464
|
+
};
|
|
465
|
+
if (input === null || typeof input !== "object") return overrides;
|
|
466
|
+
const source = input;
|
|
467
|
+
if (source.themes !== null && typeof source.themes === "object") for (const [key, entries] of Object.entries(source.themes)) {
|
|
468
|
+
if (parseScopeKey(key) === null) continue;
|
|
469
|
+
const clean = sanitizeEntries(entries);
|
|
470
|
+
if (Object.keys(clean).length > 0) overrides.themes[key] = clean;
|
|
471
|
+
}
|
|
472
|
+
overrides.global = sanitizeEntries(source.global);
|
|
473
|
+
return overrides;
|
|
474
|
+
}
|
|
475
|
+
/** The snapshot a first-time visitor gets. */
|
|
476
|
+
function defaultSnapshot() {
|
|
477
|
+
return {
|
|
478
|
+
version: 1,
|
|
479
|
+
overrides: EMPTY_OVERRIDES,
|
|
480
|
+
zoom: 1,
|
|
481
|
+
panel: {
|
|
482
|
+
position: "floating",
|
|
483
|
+
x: 24,
|
|
484
|
+
y: 24,
|
|
485
|
+
collapsed: false
|
|
486
|
+
}
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Read the persisted snapshot.
|
|
491
|
+
*
|
|
492
|
+
* Every field is validated, and anything that fails validation is dropped
|
|
493
|
+
* rather than repaired — the blob is text a user can edit in devtools, and its
|
|
494
|
+
* values are printed straight into a stylesheet.
|
|
495
|
+
*
|
|
496
|
+
* @param storageKey - The `localStorage` key.
|
|
497
|
+
* @returns The snapshot, or `null` when there is nothing usable stored.
|
|
498
|
+
*/
|
|
499
|
+
function readSnapshot(storageKey) {
|
|
500
|
+
if (typeof localStorage === "undefined") return null;
|
|
501
|
+
let parsed;
|
|
502
|
+
try {
|
|
503
|
+
const raw = localStorage.getItem(storageKey);
|
|
504
|
+
if (raw === null) return null;
|
|
505
|
+
parsed = JSON.parse(raw);
|
|
506
|
+
} catch {
|
|
507
|
+
return null;
|
|
508
|
+
}
|
|
509
|
+
if (parsed === null || typeof parsed !== "object") return null;
|
|
510
|
+
const stored = parsed;
|
|
511
|
+
if (stored.version !== 1) return null;
|
|
512
|
+
const fallback = defaultSnapshot();
|
|
513
|
+
const panel = stored.panel ?? {};
|
|
514
|
+
const number = (value, or) => typeof value === "number" && Number.isFinite(value) ? value : or;
|
|
515
|
+
return {
|
|
516
|
+
version: 1,
|
|
517
|
+
overrides: sanitizeOverrides(stored.overrides),
|
|
518
|
+
zoom: number(stored.zoom, fallback.zoom),
|
|
519
|
+
panel: {
|
|
520
|
+
position: panel["position"] === "docked-right" ? "docked-right" : "floating",
|
|
521
|
+
x: number(panel["x"], fallback.panel.x),
|
|
522
|
+
y: number(panel["y"], fallback.panel.y),
|
|
523
|
+
collapsed: panel["collapsed"] === true
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Persist the snapshot. A full quota or a private-mode failure is swallowed —
|
|
529
|
+
* a preference is a nicety, never a hard failure.
|
|
530
|
+
*
|
|
531
|
+
* @param storageKey - The `localStorage` key.
|
|
532
|
+
* @param snapshot - What to store.
|
|
533
|
+
*/
|
|
534
|
+
function writeSnapshot(storageKey, snapshot) {
|
|
535
|
+
if (typeof localStorage === "undefined") return;
|
|
536
|
+
try {
|
|
537
|
+
localStorage.setItem(storageKey, JSON.stringify(snapshot));
|
|
538
|
+
} catch {}
|
|
539
|
+
}
|
|
540
|
+
//#endregion
|
|
541
|
+
export { BASE_TRACKING_LABEL, COLOR_TOKENS, CONFIGURATOR_VERSION, DEFAULT_CONFIGURATOR_STORAGE_KEY, DENSITY_FACTOR, EMPTY_OVERRIDES, FLAT_TOKENS, FONT_TOKENS, INLINE_TOKENS, MANAGED_TOKENS, OVERRIDE_BANNER, OVERRIDE_STYLE_ID, SCALED_TOKENS, applyOverrideCss, baseValue, clearOverride, configuratorCss, defaultSnapshot, isOverridden, isSafeCssValue, overrideCount, readSnapshot, removeOverrideStyles, resolveValue, resolvedTokens, scopeKey, serializeOverrideCss, setOverride, tokenKind, writeSnapshot };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ConfiguratorPosition } from "./_overrides.js";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
//#region src/configurator/configurator.d.ts
|
|
4
|
+
interface ThemeConfiguratorProps {
|
|
5
|
+
/** Placement, controlled. Pair with `onPositionChange`. */
|
|
6
|
+
position?: ConfiguratorPosition;
|
|
7
|
+
/** Initial placement. A stored one wins. Defaults to `"floating"`. */
|
|
8
|
+
defaultPosition?: ConfiguratorPosition;
|
|
9
|
+
/** Called when the user docks or floats the panel. */
|
|
10
|
+
onPositionChange?: (position: ConfiguratorPosition) => void;
|
|
11
|
+
/** Start furled to the title bar. A stored value wins. Defaults to `false`. */
|
|
12
|
+
defaultCollapsed?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* `localStorage` key holding the overrides, the placement and the zoom.
|
|
15
|
+
* Defaults to `"cue-configurator"`.
|
|
16
|
+
*/
|
|
17
|
+
storageKey?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Called with the full resolved `--cue-*` map — never a diff — whenever the
|
|
20
|
+
* overrides, the theme or the mode change, and once on mount.
|
|
21
|
+
*/
|
|
22
|
+
onChange?: (tokens: Record<string, string>) => void;
|
|
23
|
+
/** Bind ⌘/Ctrl with `+`, `-` and `0` to the zoom valve. Defaults to `true`. */
|
|
24
|
+
zoomShortcuts?: boolean;
|
|
25
|
+
/** Panel heading. Defaults to `"Theme"`. */
|
|
26
|
+
title?: React.ReactNode;
|
|
27
|
+
/** Extra classes for the panel. */
|
|
28
|
+
className?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The floating theme configurator: the panel that edits the design system it is
|
|
32
|
+
* drawn with.
|
|
33
|
+
*
|
|
34
|
+
* It is a **component**, not a devtool bolted onto the kitchensink — mount it in
|
|
35
|
+
* any app behind a flag and a designer can retune that app's theme in place. The
|
|
36
|
+
* whole thing rests on one rule, and the rule is what keeps it from being a toy:
|
|
37
|
+
* *everything it does is a `--cue-*` declaration in one stylesheet.* No inline
|
|
38
|
+
* styles on the root, no parallel token vocabulary, no runtime theme engine. The
|
|
39
|
+
* CSS it exports is byte for byte the CSS the page is wearing, which is the only
|
|
40
|
+
* reason the export dialog can promise a round trip at all.
|
|
41
|
+
*
|
|
42
|
+
* What it owns:
|
|
43
|
+
*
|
|
44
|
+
* - **Preset, mode and density** are the provider's, driven through `useTheme()`
|
|
45
|
+
* so a switch restamps `<html>`, every portal, and the persisted preference.
|
|
46
|
+
* - **Colour, type and geometry overrides** go into
|
|
47
|
+
* `<style id="cue-configurator-overrides">`, scoped so they win where they
|
|
48
|
+
* have to and lose where they should — the cascade reasoning is in
|
|
49
|
+
* `_overrides.ts`, and it is the interesting part of this group.
|
|
50
|
+
* - **Text scale and root zoom**, the two relief valves the density ladder is
|
|
51
|
+
* paired with.
|
|
52
|
+
* - **Its own placement**, furled state and every override, in `localStorage`
|
|
53
|
+
* under one key.
|
|
54
|
+
*
|
|
55
|
+
* Renders in place as a `position: fixed` region, so mount it inside the
|
|
56
|
+
* provider — it needs the theme context — but outside any transformed ancestor,
|
|
57
|
+
* which would turn `fixed` into `absolute` and take the panel with the page.
|
|
58
|
+
*
|
|
59
|
+
* @throws If rendered outside a `<ThemeProvider>`: there is no theme to
|
|
60
|
+
* configure, which is a wiring bug rather than a fallback situation.
|
|
61
|
+
* @example
|
|
62
|
+
* <ThemeProvider>
|
|
63
|
+
* <App />
|
|
64
|
+
* {devMode ? <ThemeConfigurator /> : null}
|
|
65
|
+
* </ThemeProvider>
|
|
66
|
+
* @example
|
|
67
|
+
* <ThemeConfigurator position="docked-right" onChange={(tokens) => report(tokens)} />
|
|
68
|
+
*/
|
|
69
|
+
declare function ThemeConfigurator({ position: positionProp, defaultPosition, onPositionChange, defaultCollapsed, storageKey, onChange, zoomShortcuts, title, className }: ThemeConfiguratorProps): React.JSX.Element;
|
|
70
|
+
//#endregion
|
|
71
|
+
export { ThemeConfigurator, ThemeConfiguratorProps };
|