@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,524 @@
|
|
|
1
|
+
import { formatColorString } from "../color/_convert.js";
|
|
2
|
+
import { WCAG_AA_NON_TEXT, WCAG_AA_TEXT, contrastRatio, contrastReport } from "./contrast.js";
|
|
3
|
+
import { RESOLVED_MONO, assertCssValue, assertThemeName, derivedTokens, serializeSystemModeAliases, serializeThemeCss, themeSelector, tokenProperty } from "./serialize.js";
|
|
4
|
+
import { COLOR_CONTRACT, resolve } from "@cueplusplus/theme-base";
|
|
5
|
+
import { clampChroma, converter, formatHex, inGamut, parse } from "culori";
|
|
6
|
+
import tokensBase from "@cueplusplus/tokens/base.json" with { type: "json" };
|
|
7
|
+
//#region src/theming/create-theme.ts
|
|
8
|
+
/**
|
|
9
|
+
* `createTheme()` — the typed generator behind the spec's second theming tier.
|
|
10
|
+
*
|
|
11
|
+
* Three things it is not, because each of them is a trap this deliberately
|
|
12
|
+
* avoids:
|
|
13
|
+
*
|
|
14
|
+
* - **Not a runtime engine.** It is a pure function of its arguments, called at
|
|
15
|
+
* build time (or once, in the configurator's export dialog), and what comes
|
|
16
|
+
* out is a plain `[data-theme]` stylesheet — tier 1, the guaranteed contract.
|
|
17
|
+
* Nothing about a shipped app depends on this module existing.
|
|
18
|
+
* - **Not a palette generator.** Handed a preset and nothing else it returns the
|
|
19
|
+
* preset, byte for byte. Derivation is what happens to the tokens hanging off
|
|
20
|
+
* an anchor you actually moved, and only those: swap the accent and the hover,
|
|
21
|
+
* the ink on it, the focus ring and the selection wash follow; the ground, the
|
|
22
|
+
* ink and the five status tones do not. That rule is the whole reason
|
|
23
|
+
* "start from `terminal`, make it orange" is a two-line call rather than a
|
|
24
|
+
* fork of a palette.
|
|
25
|
+
* - **Not a colour opinion.** Every derivation happens in oklch, where a
|
|
26
|
+
* lightness step is a step the eye agrees with, and every result is measured
|
|
27
|
+
* against WCAG before you are told it is fine. A failing pair comes back in
|
|
28
|
+
* the report rather than being silently repaired — with one exception, noted
|
|
29
|
+
* below, where the value was this module's invention in the first place.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* The colour tokens every theme block declares, in the order the contract lists
|
|
33
|
+
* them.
|
|
34
|
+
*
|
|
35
|
+
* Not a list this module owns any more, and not a copy of one: it *is*
|
|
36
|
+
* `COLOR_CONTRACT`, re-exported under the name this package's public API has
|
|
37
|
+
* always used. The two were byte-identical — twenty-six names, same order —
|
|
38
|
+
* because the copy was written from the contract in the first place, and a
|
|
39
|
+
* second list that has to agree with the first is a drift test waiting to be
|
|
40
|
+
* written. `test/theming/create-theme.test.ts` asserts the identity, so a future
|
|
41
|
+
* edit that quietly reintroduces a local array fails rather than diverges.
|
|
42
|
+
*/
|
|
43
|
+
const THEME_COLOR_TOKENS = COLOR_CONTRACT;
|
|
44
|
+
/**
|
|
45
|
+
* The radius multiplier each density level contributes.
|
|
46
|
+
*
|
|
47
|
+
* Geometry belongs to the density axis, so a theme that wants rounder corners
|
|
48
|
+
* cannot simply declare `--cue-radius-scale`: its block would outrank the density
|
|
49
|
+
* block and freeze ultra-compact's 0.75 at 1. {@link createTheme} instead
|
|
50
|
+
* multiplies the two and emits one crossed rule per density that differs from the
|
|
51
|
+
* default — which is why this ladder has to be known here.
|
|
52
|
+
*
|
|
53
|
+
* `Number(…)` because `base.json` is DTCG, where every value is text: the scale
|
|
54
|
+
* arrives as `"0.75"` and what happens to it next is arithmetic. Keyed by the
|
|
55
|
+
* base five alone, because those are the rungs a build-time generator can know
|
|
56
|
+
* the geometry of; a rung a theme adds carries its own radius in its manifest.
|
|
57
|
+
*/
|
|
58
|
+
const DENSITY_RADIUS_SCALE = Object.fromEntries(Object.keys(tokensBase.densities).map((rung) => [rung, Number(tokensBase.densities[rung]["radius-scale"])]));
|
|
59
|
+
/** The default density, whose radius scale the uncrossed theme block carries. */
|
|
60
|
+
const DEFAULT_DENSITY_LEVEL = tokensBase.defaults.density;
|
|
61
|
+
/**
|
|
62
|
+
* How far the sunken ground sits below the page, in oklch lightness.
|
|
63
|
+
*
|
|
64
|
+
* Small on purpose: sunken is a well, not a second theme. Across the ten
|
|
65
|
+
* shipped presets the authored gap runs −0.011 to −0.031.
|
|
66
|
+
*/
|
|
67
|
+
const SUNKEN_LIGHTNESS_STEP = -.02;
|
|
68
|
+
/**
|
|
69
|
+
* The three raised surfaces, as lightness above the ground.
|
|
70
|
+
*
|
|
71
|
+
* Even spacing, because the ladder encodes *elevation* and a reader counts
|
|
72
|
+
* rungs. The shipped presets cluster around these three values.
|
|
73
|
+
*/
|
|
74
|
+
const SURFACE_LIGHTNESS_STEPS = [
|
|
75
|
+
.03,
|
|
76
|
+
.05,
|
|
77
|
+
.07
|
|
78
|
+
];
|
|
79
|
+
/**
|
|
80
|
+
* The hairline and its stronger sibling, as lightness above the ground.
|
|
81
|
+
*
|
|
82
|
+
* Above the top surface, so a border still reads as a line when it is drawn on
|
|
83
|
+
* `surface-3`. `border-overlay` reuses the strong value: an overlay floats over
|
|
84
|
+
* everything, so its rim has to hold against the brightest thing under it.
|
|
85
|
+
*/
|
|
86
|
+
const BORDER_LIGHTNESS_STEPS = [.08, .14];
|
|
87
|
+
/** How far secondary ink recedes from primary ink. */
|
|
88
|
+
const FG_MUTED_LIGHTNESS_STEP = -.25;
|
|
89
|
+
/** How far tertiary ink recedes from primary ink. */
|
|
90
|
+
const FG_SUBTLE_LIGHTNESS_STEP = -.45;
|
|
91
|
+
/**
|
|
92
|
+
* Chroma each rung of the ink ramp keeps from the rung above.
|
|
93
|
+
*
|
|
94
|
+
* Ink greys as it recedes rather than staying saturated: a muted label that held
|
|
95
|
+
* full chroma would read as a *coloured* label — a status, a link — instead of a
|
|
96
|
+
* quiet one. The hue is preserved throughout, so the ramp still belongs to the
|
|
97
|
+
* theme. `fg-subtle` takes the square, being two rungs down.
|
|
98
|
+
*/
|
|
99
|
+
const INK_RAMP_CHROMA_SCALE = .6;
|
|
100
|
+
/** How far the accent darkens on hover. */
|
|
101
|
+
const ACCENT_HOVER_LIGHTNESS_STEP = -.05;
|
|
102
|
+
/** How much accent a derived selection wash carries. */
|
|
103
|
+
const SELECTION_ACCENT_PERCENT = 22;
|
|
104
|
+
/** What a label on a solid accent has to reach before this module accepts it. */
|
|
105
|
+
const ACCENT_FG_MINIMUM = WCAG_AA_TEXT;
|
|
106
|
+
/**
|
|
107
|
+
* How much of the dark ground's lightness survives the flip to paper.
|
|
108
|
+
*
|
|
109
|
+
* A ground's job is to be the extreme, so inverting it means going to the *other*
|
|
110
|
+
* extreme rather than to the arithmetic mirror: `1 − L` of a 0.16 near-black is a
|
|
111
|
+
* 0.84 mid-grey, which is not a page. Compressing instead maps the ladder of
|
|
112
|
+
* dark grounds onto a narrow paper band — a deeper dark theme gets a cleaner
|
|
113
|
+
* white page — and lands within 0.01 of all ten authored light presets.
|
|
114
|
+
*/
|
|
115
|
+
const LIGHT_GROUND_COMPRESSION = .1;
|
|
116
|
+
/** Lightness a derived light colour steps down by while hunting for contrast. */
|
|
117
|
+
const LIGHT_DARKEN_STEP = .02;
|
|
118
|
+
/** How many steps that hunt may take before it gives up and returns its darkest. */
|
|
119
|
+
const LIGHT_DARKEN_LIMIT = 40;
|
|
120
|
+
const toOklch = converter("oklch");
|
|
121
|
+
const inSrgb = inGamut("rgb");
|
|
122
|
+
/** Read an anchor into oklch, or say which anchor could not be read. */
|
|
123
|
+
function readColor(value, label) {
|
|
124
|
+
const color = toOklch(parse(value));
|
|
125
|
+
if (color === void 0) throw new TypeError(`${label} is not a colour: ${JSON.stringify(value)}`);
|
|
126
|
+
return {
|
|
127
|
+
mode: "oklch",
|
|
128
|
+
l: color.l,
|
|
129
|
+
c: color.c,
|
|
130
|
+
h: color.h ?? 0
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Print a derived colour.
|
|
135
|
+
*
|
|
136
|
+
* Chroma is **clamped** into sRGB rather than clipped — clipping a too-saturated
|
|
137
|
+
* step turns it into a different hue, whereas clamping only gives up the
|
|
138
|
+
* saturation no display was going to show. Then it goes out through the same
|
|
139
|
+
* formatter the colour picker writes with, so a generated token and a
|
|
140
|
+
* hand-picked one are spelled the same way.
|
|
141
|
+
*/
|
|
142
|
+
function emit(color) {
|
|
143
|
+
const hex = formatHex(inSrgb(color) ? color : clampChroma(color, "oklch", "rgb"));
|
|
144
|
+
return formatColorString(hex, "oklch") ?? hex;
|
|
145
|
+
}
|
|
146
|
+
const clampLightness = (lightness) => Math.min(1, Math.max(0, lightness));
|
|
147
|
+
/** The same hue, moved along the lightness axis and optionally greyed. */
|
|
148
|
+
function shift(color, delta, chromaScale = 1) {
|
|
149
|
+
return emit({
|
|
150
|
+
mode: "oklch",
|
|
151
|
+
l: clampLightness(color.l + delta),
|
|
152
|
+
c: color.c * chromaScale,
|
|
153
|
+
h: color.h
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* The candidate that can be read on `ground`, preferring the theme's own ink.
|
|
158
|
+
*
|
|
159
|
+
* Tried in order: the colours the theme already owns, then pure black and white
|
|
160
|
+
* as a last resort. A theme's own ground or ink keeps the palette coherent; the
|
|
161
|
+
* fallback exists because an accent at mid lightness contrasts with neither.
|
|
162
|
+
*/
|
|
163
|
+
function pickInk(ground, candidates) {
|
|
164
|
+
let best = candidates[0] ?? "#000000";
|
|
165
|
+
let bestRatio = -1;
|
|
166
|
+
for (const candidate of candidates) {
|
|
167
|
+
const ratio = contrastRatio(candidate, ground);
|
|
168
|
+
if (ratio > bestRatio) [best, bestRatio] = [candidate, ratio];
|
|
169
|
+
}
|
|
170
|
+
if (bestRatio >= ACCENT_FG_MINIMUM) return best;
|
|
171
|
+
for (const candidate of ["#000000", "#ffffff"]) {
|
|
172
|
+
const ratio = contrastRatio(candidate, ground);
|
|
173
|
+
if (ratio > bestRatio) [best, bestRatio] = [candidate, ratio];
|
|
174
|
+
}
|
|
175
|
+
return best;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Darken a colour until it can be read on `ground`.
|
|
179
|
+
*
|
|
180
|
+
* Only ever applied to values this module invented — the light variant's accent
|
|
181
|
+
* and status tones, which have to survive being moved from a near-black ground
|
|
182
|
+
* to paper. An authored colour is never quietly adjusted; it is reported.
|
|
183
|
+
*/
|
|
184
|
+
function darkenToContrast(value, ground, minimum, label) {
|
|
185
|
+
const start = readColor(value, label);
|
|
186
|
+
for (let step = 0; step <= LIGHT_DARKEN_LIMIT; step += 1) {
|
|
187
|
+
const candidate = emit({
|
|
188
|
+
...start,
|
|
189
|
+
l: clampLightness(start.l - step * LIGHT_DARKEN_STEP)
|
|
190
|
+
});
|
|
191
|
+
if (contrastRatio(candidate, ground) >= minimum) return candidate;
|
|
192
|
+
}
|
|
193
|
+
return emit({
|
|
194
|
+
...start,
|
|
195
|
+
l: clampLightness(start.l - LIGHT_DARKEN_LIMIT * LIGHT_DARKEN_STEP)
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/** Own-property lookup that admits a token may be absent. */
|
|
199
|
+
function lookup(map, token) {
|
|
200
|
+
return map != null && Object.hasOwn(map, token) ? map[token] : void 0;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* A derived selection wash, as a live expression rather than a resolved colour.
|
|
204
|
+
*
|
|
205
|
+
* `var(--cue-accent)` is a self-reference — it resolves inside whichever block
|
|
206
|
+
* declares it — so one string is correct in the dark block and the light one,
|
|
207
|
+
* and stays correct if a consumer overrides the accent in tier 1 later.
|
|
208
|
+
*/
|
|
209
|
+
const SELECTION_WASH = `color-mix(in oklch, var(--cue-accent) 22%, transparent)`;
|
|
210
|
+
/**
|
|
211
|
+
* The five tones plus the live hue, in the order the colour contract lists them.
|
|
212
|
+
*
|
|
213
|
+
* `stream` resolves exactly like a status — authored, never derived from the
|
|
214
|
+
* accent, and darkened to the non-text floor when a light block has to be
|
|
215
|
+
* invented — but it is not a `tone` any component takes. See
|
|
216
|
+
* `ThemeAnchors.status`.
|
|
217
|
+
*/
|
|
218
|
+
const TINTED = [...[
|
|
219
|
+
"ok",
|
|
220
|
+
"busy",
|
|
221
|
+
"warn",
|
|
222
|
+
"danger",
|
|
223
|
+
"info"
|
|
224
|
+
], "stream"];
|
|
225
|
+
/**
|
|
226
|
+
* The tones that are also *grounds*, in contract order.
|
|
227
|
+
*
|
|
228
|
+
* Every other status colour is only ever a signal — a dot, a rim, a wash — and
|
|
229
|
+
* whatever text sits near it sits on a surface. These two get filled: the amber
|
|
230
|
+
* carries the confirm on a consequential press and the red the confirm on an
|
|
231
|
+
* irreversible one, and text on a fill is text. So each gets an ink derived
|
|
232
|
+
* against itself, `warn-fg` and `danger-fg`.
|
|
233
|
+
*/
|
|
234
|
+
const INKED = ["warn", "danger"];
|
|
235
|
+
/** The three raised surfaces, in ladder order. */
|
|
236
|
+
const SURFACES = [
|
|
237
|
+
"surface-1",
|
|
238
|
+
"surface-2",
|
|
239
|
+
"surface-3"
|
|
240
|
+
];
|
|
241
|
+
/**
|
|
242
|
+
* Resolve the dark block.
|
|
243
|
+
*
|
|
244
|
+
* The shape of every branch is the same: an explicit override wins; otherwise
|
|
245
|
+
* the preset's value stands *unless the anchor this token hangs off has moved*;
|
|
246
|
+
* only then is anything derived.
|
|
247
|
+
*/
|
|
248
|
+
function resolveDark(anchors, preset) {
|
|
249
|
+
const colors = {};
|
|
250
|
+
const authored = /* @__PURE__ */ new Set();
|
|
251
|
+
const surfaces = anchors.surfaces ?? {};
|
|
252
|
+
const status = anchors.status ?? {};
|
|
253
|
+
/**
|
|
254
|
+
* One token. `derive` is omitted for the anchors themselves — a preset that
|
|
255
|
+
* declares no ground is not something to paper over with an invented one.
|
|
256
|
+
*/
|
|
257
|
+
const define = (token, explicit, moved, derive) => {
|
|
258
|
+
if (explicit !== void 0) {
|
|
259
|
+
readColor(explicit, token);
|
|
260
|
+
colors[token] = explicit;
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
const inherited = lookup(preset, token);
|
|
264
|
+
if (!moved && inherited !== void 0) {
|
|
265
|
+
colors[token] = inherited;
|
|
266
|
+
authored.add(token);
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
if (derive === void 0) throw new TypeError(`the base preset declares no ${token}`);
|
|
270
|
+
colors[token] = derive();
|
|
271
|
+
};
|
|
272
|
+
const groundMoved = anchors.bg !== void 0;
|
|
273
|
+
const inkMoved = anchors.fg !== void 0;
|
|
274
|
+
const accentMoved = anchors.accent !== void 0;
|
|
275
|
+
define("bg", anchors.bg, false);
|
|
276
|
+
const ground = readColor(colors["bg"], "bg");
|
|
277
|
+
define("sunken", surfaces.sunken, groundMoved, () => shift(ground, SUNKEN_LIGHTNESS_STEP));
|
|
278
|
+
SURFACES.forEach((token, index) => {
|
|
279
|
+
define(token, surfaces[token], groundMoved, () => shift(ground, SURFACE_LIGHTNESS_STEPS[index]));
|
|
280
|
+
});
|
|
281
|
+
define("fg", anchors.fg, false);
|
|
282
|
+
const ink = readColor(colors["fg"], "fg");
|
|
283
|
+
define("fg-muted", void 0, inkMoved, () => shift(ink, FG_MUTED_LIGHTNESS_STEP, INK_RAMP_CHROMA_SCALE));
|
|
284
|
+
define("fg-subtle", void 0, inkMoved, () => shift(ink, FG_SUBTLE_LIGHTNESS_STEP, INK_RAMP_CHROMA_SCALE ** 2));
|
|
285
|
+
define("border", void 0, groundMoved, () => shift(ground, BORDER_LIGHTNESS_STEPS[0]));
|
|
286
|
+
define("border-strong", void 0, groundMoved, () => shift(ground, BORDER_LIGHTNESS_STEPS[1]));
|
|
287
|
+
define("border-overlay", void 0, groundMoved, () => colors["border-strong"]);
|
|
288
|
+
define("accent", anchors.accent, false);
|
|
289
|
+
const accent = colors["accent"];
|
|
290
|
+
define("accent-hover", void 0, accentMoved, () => shift(readColor(accent, "accent"), ACCENT_HOVER_LIGHTNESS_STEP));
|
|
291
|
+
define("accent-fg", void 0, accentMoved, () => pickInk(accent, [colors["bg"], colors["fg"]]));
|
|
292
|
+
for (const tone of TINTED) define(tone, status[tone], false);
|
|
293
|
+
for (const tone of INKED) define(`${tone}-fg`, void 0, status[tone] !== void 0, () => pickInk(colors[tone], [
|
|
294
|
+
colors["bg"],
|
|
295
|
+
colors["sunken"],
|
|
296
|
+
colors["fg"]
|
|
297
|
+
]));
|
|
298
|
+
define("selection", void 0, accentMoved, () => SELECTION_WASH);
|
|
299
|
+
define("focus", void 0, accentMoved, () => accent);
|
|
300
|
+
define("data-ground", void 0, false);
|
|
301
|
+
define("scrim", void 0, false);
|
|
302
|
+
return {
|
|
303
|
+
colors,
|
|
304
|
+
authored
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Resolve the light block.
|
|
309
|
+
*
|
|
310
|
+
* Per token: if the dark value came from the preset untouched and the preset
|
|
311
|
+
* ships a light block, the authored light value stands. Everything else is
|
|
312
|
+
* inverted — which is guesswork, and is why any derivation here marks the report
|
|
313
|
+
* provisional.
|
|
314
|
+
*
|
|
315
|
+
* The inversion is not `1 − L` across the board. The ground goes to paper (see
|
|
316
|
+
* {@link LIGHT_GROUND_COMPRESSION}) and the ladder then steps *down* from it,
|
|
317
|
+
* because paper leaves no headroom above: a "raised" surface on a white page is
|
|
318
|
+
* the slightly grey one, and the sunken well — the one rung that cannot keep its
|
|
319
|
+
* sign — folds to the far end, which is still the deepest thing on the page.
|
|
320
|
+
*/
|
|
321
|
+
function resolveLight(dark, preset) {
|
|
322
|
+
const colors = {};
|
|
323
|
+
let provisional = false;
|
|
324
|
+
const define = (token, derive) => {
|
|
325
|
+
const inherited = dark.authored.has(token) ? lookup(preset, token) : void 0;
|
|
326
|
+
if (inherited !== void 0) {
|
|
327
|
+
colors[token] = inherited;
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
colors[token] = derive();
|
|
331
|
+
provisional = true;
|
|
332
|
+
};
|
|
333
|
+
const darkGround = readColor(dark.colors["bg"], "bg");
|
|
334
|
+
define("bg", () => emit({
|
|
335
|
+
mode: "oklch",
|
|
336
|
+
l: clampLightness(1 - LIGHT_GROUND_COMPRESSION * darkGround.l),
|
|
337
|
+
c: darkGround.c,
|
|
338
|
+
h: darkGround.h
|
|
339
|
+
}));
|
|
340
|
+
const paper = readColor(colors["bg"], "bg");
|
|
341
|
+
/** Deepest rung: past the top surface by the sunken step. */
|
|
342
|
+
const sunkenDepth = (SURFACE_LIGHTNESS_STEPS.at(-1) ?? 0) + Math.abs(SUNKEN_LIGHTNESS_STEP);
|
|
343
|
+
define("sunken", () => shift(paper, -sunkenDepth));
|
|
344
|
+
SURFACES.forEach((token, index) => {
|
|
345
|
+
define(token, () => shift(paper, -SURFACE_LIGHTNESS_STEPS[index]));
|
|
346
|
+
});
|
|
347
|
+
const darkInk = readColor(dark.colors["fg"], "fg");
|
|
348
|
+
define("fg", () => emit({
|
|
349
|
+
mode: "oklch",
|
|
350
|
+
l: clampLightness(1 - darkInk.l),
|
|
351
|
+
c: darkInk.c,
|
|
352
|
+
h: darkInk.h
|
|
353
|
+
}));
|
|
354
|
+
const ink = readColor(colors["fg"], "fg");
|
|
355
|
+
define("fg-muted", () => shift(ink, .25, INK_RAMP_CHROMA_SCALE));
|
|
356
|
+
define("fg-subtle", () => shift(ink, .45, INK_RAMP_CHROMA_SCALE ** 2));
|
|
357
|
+
define("border", () => shift(paper, -BORDER_LIGHTNESS_STEPS[0]));
|
|
358
|
+
define("border-strong", () => shift(paper, -BORDER_LIGHTNESS_STEPS[1]));
|
|
359
|
+
define("border-overlay", () => colors["border-strong"]);
|
|
360
|
+
const paperGround = colors["bg"];
|
|
361
|
+
define("accent", () => darkenToContrast(dark.colors["accent"], paperGround, WCAG_AA_TEXT, "accent"));
|
|
362
|
+
const accent = colors["accent"];
|
|
363
|
+
define("accent-hover", () => shift(readColor(accent, "accent"), ACCENT_HOVER_LIGHTNESS_STEP));
|
|
364
|
+
define("accent-fg", () => pickInk(accent, [colors["bg"], colors["fg"]]));
|
|
365
|
+
for (const tone of TINTED) define(tone, () => darkenToContrast(dark.colors[tone], paperGround, WCAG_AA_NON_TEXT, tone));
|
|
366
|
+
for (const tone of INKED) define(`${tone}-fg`, () => pickInk(colors[tone], [
|
|
367
|
+
colors["bg"],
|
|
368
|
+
colors["sunken"],
|
|
369
|
+
colors["fg"]
|
|
370
|
+
]));
|
|
371
|
+
define("selection", () => SELECTION_WASH);
|
|
372
|
+
define("focus", () => accent);
|
|
373
|
+
define("data-ground", () => dark.colors["data-ground"]);
|
|
374
|
+
define("scrim", () => dark.colors["scrim"]);
|
|
375
|
+
return {
|
|
376
|
+
colors,
|
|
377
|
+
provisional
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* The font declarations a theme block carries.
|
|
382
|
+
*
|
|
383
|
+
* The monospace lands on `--cue-font-theme-mono`, not on `--cue-font-mono`, and
|
|
384
|
+
* the shared token is restated as the resolution of the two axes' halves —
|
|
385
|
+
* exactly what a shipped preset's block does. A generated theme that wrote the
|
|
386
|
+
* shared token directly would beat a `[data-font]` pairing stamped on any
|
|
387
|
+
* ancestor, purely by sitting nearer to the text, and a consumer's own preset
|
|
388
|
+
* would be the one preset in the system the typeface picker could not move.
|
|
389
|
+
*/
|
|
390
|
+
function resolveFonts$1(anchors, preset) {
|
|
391
|
+
const fonts = anchors.fonts ?? {};
|
|
392
|
+
const declared = [];
|
|
393
|
+
if (fonts.sans !== void 0) declared.push(["font-sans", fonts.sans]);
|
|
394
|
+
declared.push(["font-theme-mono", fonts.mono ?? lookup(preset, "font-mono") ?? tokensBase.base["font-mono"]]);
|
|
395
|
+
if (fonts.display !== void 0) declared.push(["font-display", fonts.display]);
|
|
396
|
+
return [...declared.map(([name, value]) => [tokenProperty(name), assertCssValue(name, value)]), [tokenProperty("font-mono"), RESOLVED_MONO]];
|
|
397
|
+
}
|
|
398
|
+
/** Round a product of two scales to something a stylesheet can print. */
|
|
399
|
+
const scaled = (a, b) => String(Number((a * b).toFixed(4)));
|
|
400
|
+
/**
|
|
401
|
+
* The radius rules for a theme that asked for one.
|
|
402
|
+
*
|
|
403
|
+
* Geometry belongs to the density axis, so the multiplier is **crossed** with it
|
|
404
|
+
* rather than declared flat: an uncrossed `--cue-radius-scale` in a theme block
|
|
405
|
+
* outranks the density block that set it and would freeze `ultra-compact`'s 0.75
|
|
406
|
+
* at 1. The base block carries the product for the default density — that is the
|
|
407
|
+
* value an unstamped document falls back to — and every density whose own scale
|
|
408
|
+
* differs gets one crossed rule.
|
|
409
|
+
*/
|
|
410
|
+
function radiusBlocks(name, radiusScale) {
|
|
411
|
+
const property = tokenProperty("radius-scale");
|
|
412
|
+
const fallback = DENSITY_RADIUS_SCALE[DEFAULT_DENSITY_LEVEL];
|
|
413
|
+
const blocks = [];
|
|
414
|
+
for (const [level, scale] of Object.entries(DENSITY_RADIUS_SCALE)) {
|
|
415
|
+
if (scale === fallback) continue;
|
|
416
|
+
blocks.push({
|
|
417
|
+
selector: themeSelector(name, {
|
|
418
|
+
density: level,
|
|
419
|
+
pair: true
|
|
420
|
+
}),
|
|
421
|
+
sections: [{ declarations: [[property, scaled(radiusScale, scale)]] }]
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
return {
|
|
425
|
+
base: [[property, scaled(radiusScale, fallback)]],
|
|
426
|
+
blocks
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
/** `[--cue-token, value]` pairs, in the order the contract lists them. */
|
|
430
|
+
function colorDeclarations(colors) {
|
|
431
|
+
return THEME_COLOR_TOKENS.map((token) => [tokenProperty(token), colors[token]]);
|
|
432
|
+
}
|
|
433
|
+
const DERIVED_COMMENT = "derived — kept inside the block so color-mix() reads this theme's values";
|
|
434
|
+
const FONT_COMMENT = "font — the theme's override, or the base stack restated";
|
|
435
|
+
const SHAPE_COMMENT = "shape — crossed with the density ladder below, never flat";
|
|
436
|
+
/**
|
|
437
|
+
* Generate a theme: a stylesheet, its token map, and a contrast report.
|
|
438
|
+
*
|
|
439
|
+
* Pure and synchronous. Call it in a build script, in a test, or in the
|
|
440
|
+
* configurator's export dialog — never in a render path, because there is
|
|
441
|
+
* nothing here a stylesheet is not already doing faster.
|
|
442
|
+
*
|
|
443
|
+
* @param anchors - The name, the manifest to start from, and whatever you moved.
|
|
444
|
+
* @returns The stylesheet, the resolved tokens for both modes, and the report.
|
|
445
|
+
* @throws TypeError if the name is not a CSS identifier, an anchor is not a
|
|
446
|
+
* colour, a font stack carries CSS punctuation, or `base` is a theme *name*
|
|
447
|
+
* rather than a manifest.
|
|
448
|
+
* @example
|
|
449
|
+
* const { css, report } = createTheme({ name: "acme", accent: "#ff8800" });
|
|
450
|
+
* if (!report.passes) console.warn(report.failures);
|
|
451
|
+
*/
|
|
452
|
+
function createTheme(anchors) {
|
|
453
|
+
const name = assertThemeName(anchors.name);
|
|
454
|
+
if (typeof anchors.base === "string") throw new TypeError(`base is a manifest, not a name — import it from @cueplusplus/theme-${anchors.base}`);
|
|
455
|
+
const base = anchors.base ?? null;
|
|
456
|
+
const preset = {
|
|
457
|
+
dark: resolve(base, { mode: "dark" }).colors,
|
|
458
|
+
light: base === null || base.supportsLight ? resolve(base, { mode: "light" }).colors : null,
|
|
459
|
+
fonts: base?.fonts ?? {}
|
|
460
|
+
};
|
|
461
|
+
if (anchors.radiusScale !== void 0 && !(anchors.radiusScale > 0)) throw new TypeError(`radiusScale must be a positive number, got ${anchors.radiusScale}`);
|
|
462
|
+
const dark = resolveDark(anchors, preset.dark);
|
|
463
|
+
const light = anchors.supportsLight ?? preset.light !== null ? resolveLight(dark, preset.light) : null;
|
|
464
|
+
const derived = Object.entries(derivedTokens());
|
|
465
|
+
const fonts = resolveFonts$1(anchors, preset.fonts);
|
|
466
|
+
const radius = anchors.radiusScale === void 0 ? null : radiusBlocks(name, anchors.radiusScale);
|
|
467
|
+
const darkPaletteSections = [
|
|
468
|
+
{ declarations: colorDeclarations(dark.colors) },
|
|
469
|
+
{
|
|
470
|
+
comment: DERIVED_COMMENT,
|
|
471
|
+
declarations: derived
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
comment: FONT_COMMENT,
|
|
475
|
+
declarations: fonts
|
|
476
|
+
}
|
|
477
|
+
];
|
|
478
|
+
const darkSections = [...darkPaletteSections, ...radius === null ? [] : [{
|
|
479
|
+
comment: SHAPE_COMMENT,
|
|
480
|
+
declarations: radius.base
|
|
481
|
+
}]];
|
|
482
|
+
const lightSections = light === null ? null : [{ declarations: colorDeclarations(light.colors) }, {
|
|
483
|
+
comment: DERIVED_COMMENT,
|
|
484
|
+
declarations: derived
|
|
485
|
+
}];
|
|
486
|
+
const blocks = [
|
|
487
|
+
{
|
|
488
|
+
selector: themeSelector(name),
|
|
489
|
+
colorScheme: "dark",
|
|
490
|
+
sections: darkSections
|
|
491
|
+
},
|
|
492
|
+
...lightSections === null ? [] : [{
|
|
493
|
+
selector: themeSelector(name, { mode: "light" }),
|
|
494
|
+
colorScheme: "light",
|
|
495
|
+
sections: lightSections
|
|
496
|
+
}],
|
|
497
|
+
...radius?.blocks ?? []
|
|
498
|
+
];
|
|
499
|
+
const inputs = [{
|
|
500
|
+
mode: "dark",
|
|
501
|
+
tokens: dark.colors
|
|
502
|
+
}, ...light === null ? [] : [{
|
|
503
|
+
mode: "light",
|
|
504
|
+
tokens: light.colors,
|
|
505
|
+
provisional: light.provisional
|
|
506
|
+
}]];
|
|
507
|
+
return {
|
|
508
|
+
name,
|
|
509
|
+
css: `${serializeThemeCss(blocks, { banner: `@cueplusplus/ui — theme "${name}"` }).trimEnd()}\n\n${serializeSystemModeAliases(name, [{
|
|
510
|
+
mode: "dark",
|
|
511
|
+
colorScheme: "light dark",
|
|
512
|
+
sections: darkPaletteSections
|
|
513
|
+
}, {
|
|
514
|
+
mode: "light",
|
|
515
|
+
colorScheme: "light dark",
|
|
516
|
+
sections: lightSections ?? darkPaletteSections
|
|
517
|
+
}])}\n`,
|
|
518
|
+
tokens: Object.fromEntries(darkSections.flatMap((section) => section.declarations)),
|
|
519
|
+
light: light === null ? null : Object.fromEntries([...colorDeclarations(light.colors), ...derived]),
|
|
520
|
+
report: contrastReport(inputs)
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
//#endregion
|
|
524
|
+
export { ACCENT_FG_MINIMUM, ACCENT_HOVER_LIGHTNESS_STEP, BORDER_LIGHTNESS_STEPS, DEFAULT_DENSITY_LEVEL, DENSITY_RADIUS_SCALE, FG_MUTED_LIGHTNESS_STEP, FG_SUBTLE_LIGHTNESS_STEP, INK_RAMP_CHROMA_SCALE, LIGHT_GROUND_COMPRESSION, SELECTION_ACCENT_PERCENT, SUNKEN_LIGHTNESS_STEP, SURFACE_LIGHTNESS_STEPS, THEME_COLOR_TOKENS, createTheme };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CONTRAST_REQUIREMENTS, ContrastCheck, ContrastInput, ContrastReport, ContrastRequirement, WCAG_AAA_TEXT, WCAG_AA_NON_TEXT, WCAG_AA_TEXT, contrastRatio, contrastReport, relativeLuminance } from "./contrast.js";
|
|
2
|
+
import { ACCENT_FG_MINIMUM, ACCENT_HOVER_LIGHTNESS_STEP, BORDER_LIGHTNESS_STEPS, CreatedTheme, FG_MUTED_LIGHTNESS_STEP, FG_SUBTLE_LIGHTNESS_STEP, INK_RAMP_CHROMA_SCALE, LIGHT_GROUND_COMPRESSION, SELECTION_ACCENT_PERCENT, SUNKEN_LIGHTNESS_STEP, SURFACE_LIGHTNESS_STEPS, THEME_COLOR_TOKENS, ThemeAnchors, ThemeColorToken, createTheme } from "./create-theme.js";
|
|
3
|
+
import { CUE_TOKEN_PREFIX, DERIVED_TOKEN_TEMPLATES, RESOLVED_MONO, SerializeThemeCssOptions, THEME_NAME_PATTERN, ThemeBlock, ThemeBlockSection, ThemeSelectorOptions, assertCssValue, assertThemeName, derivedTokens, serializeThemeBlock, serializeThemeCss, themeSelector, tokenProperty } from "./serialize.js";
|
|
4
|
+
export { ACCENT_FG_MINIMUM, ACCENT_HOVER_LIGHTNESS_STEP, BORDER_LIGHTNESS_STEPS, CONTRAST_REQUIREMENTS, CUE_TOKEN_PREFIX, type ContrastCheck, type ContrastInput, type ContrastReport, type ContrastRequirement, type CreatedTheme, DERIVED_TOKEN_TEMPLATES, FG_MUTED_LIGHTNESS_STEP, FG_SUBTLE_LIGHTNESS_STEP, INK_RAMP_CHROMA_SCALE, LIGHT_GROUND_COMPRESSION, RESOLVED_MONO, SELECTION_ACCENT_PERCENT, SUNKEN_LIGHTNESS_STEP, SURFACE_LIGHTNESS_STEPS, type SerializeThemeCssOptions, THEME_COLOR_TOKENS, THEME_NAME_PATTERN, type ThemeAnchors, type ThemeBlock, type ThemeBlockSection, type ThemeColorToken, type ThemeSelectorOptions, WCAG_AAA_TEXT, WCAG_AA_NON_TEXT, WCAG_AA_TEXT, assertCssValue, assertThemeName, contrastRatio, contrastReport, createTheme, derivedTokens, relativeLuminance, serializeThemeBlock, serializeThemeCss, themeSelector, tokenProperty };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CONTRAST_REQUIREMENTS, WCAG_AAA_TEXT, WCAG_AA_NON_TEXT, WCAG_AA_TEXT, contrastRatio, contrastReport, relativeLuminance } from "./contrast.js";
|
|
2
|
+
import { CUE_TOKEN_PREFIX, DERIVED_TOKEN_TEMPLATES, RESOLVED_MONO, THEME_NAME_PATTERN, assertCssValue, assertThemeName, derivedTokens, serializeThemeBlock, serializeThemeCss, themeSelector, tokenProperty } from "./serialize.js";
|
|
3
|
+
import { ACCENT_FG_MINIMUM, ACCENT_HOVER_LIGHTNESS_STEP, BORDER_LIGHTNESS_STEPS, FG_MUTED_LIGHTNESS_STEP, FG_SUBTLE_LIGHTNESS_STEP, INK_RAMP_CHROMA_SCALE, LIGHT_GROUND_COMPRESSION, SELECTION_ACCENT_PERCENT, SUNKEN_LIGHTNESS_STEP, SURFACE_LIGHTNESS_STEPS, THEME_COLOR_TOKENS, createTheme } from "./create-theme.js";
|
|
4
|
+
export { ACCENT_FG_MINIMUM, ACCENT_HOVER_LIGHTNESS_STEP, BORDER_LIGHTNESS_STEPS, CONTRAST_REQUIREMENTS, CUE_TOKEN_PREFIX, DERIVED_TOKEN_TEMPLATES, FG_MUTED_LIGHTNESS_STEP, FG_SUBTLE_LIGHTNESS_STEP, INK_RAMP_CHROMA_SCALE, LIGHT_GROUND_COMPRESSION, RESOLVED_MONO, SELECTION_ACCENT_PERCENT, SUNKEN_LIGHTNESS_STEP, SURFACE_LIGHTNESS_STEPS, THEME_COLOR_TOKENS, THEME_NAME_PATTERN, WCAG_AAA_TEXT, WCAG_AA_NON_TEXT, WCAG_AA_TEXT, assertCssValue, assertThemeName, contrastRatio, contrastReport, createTheme, derivedTokens, relativeLuminance, serializeThemeBlock, serializeThemeCss, themeSelector, tokenProperty };
|