@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,277 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { noteOnce, warnOnce } from "./vocabulary.js";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { THEME_NAME_PATTERN, resolve } from "@cueplusplus/theme-base";
|
|
5
|
+
import { contrastReport } from "@cueplusplus/theme-base/contrast";
|
|
6
|
+
//#region src/system/overrides.ts
|
|
7
|
+
/**
|
|
8
|
+
* `overrides` — the one theme edit an application may make without owning a
|
|
9
|
+
* theme package.
|
|
10
|
+
*
|
|
11
|
+
* A theme is a package now, and the honest way to change one is to publish
|
|
12
|
+
* another. But there is a real band of edits below that: one accent for a
|
|
13
|
+
* customer's tenant, a font stack an app already loads, a rung that needs two
|
|
14
|
+
* more pixels for a touch build. Making each of those a package would be a
|
|
15
|
+
* build step for a value that changes per request, and the alternative every
|
|
16
|
+
* application reaches for otherwise — a stray `<style>` with `!important` in it
|
|
17
|
+
* — outranks the token layer everywhere at once and takes the density islands
|
|
18
|
+
* and the portals down with it.
|
|
19
|
+
*
|
|
20
|
+
* So the edits are typed, and they land where the cascade already expects them:
|
|
21
|
+
*
|
|
22
|
+
* - **Colours and fonts are inline custom properties on the provider root.**
|
|
23
|
+
* Inline beats every stylesheet, needs no `!important`, is scoped to the
|
|
24
|
+
* subtree by inheritance, and — because a portal mounts on `<body>` and
|
|
25
|
+
* inherits nothing from its owner — is re-stamped onto the portal container
|
|
26
|
+
* through {@link OverridesContext}, exactly like `--cue-font-scale` already is.
|
|
27
|
+
* - **Densities are one document-scoped `<style>`.** A rung is selected by
|
|
28
|
+
* attribute, not inherited, so it cannot be an inline declaration at all; and
|
|
29
|
+
* `useControlHeight`'s probe hangs off `document.body`, outside every provider
|
|
30
|
+
* root, so a subtree-scoped rule would leave the measurement and the paint
|
|
31
|
+
* disagreeing by exactly the override. See {@link overridesCss}.
|
|
32
|
+
*
|
|
33
|
+
* The dev pass measures the result: an override is a colour decision made
|
|
34
|
+
* without the generator that would have checked it, so this file checks it
|
|
35
|
+
* instead. See {@link reportOverrides}.
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* The prefix every token in this system is published under.
|
|
39
|
+
*
|
|
40
|
+
* Restated here rather than imported from `../theming`: that group reaches
|
|
41
|
+
* `culori` and the whole generator, and `system/` is in the import graph of
|
|
42
|
+
* every component in the package. One six-character constant is the cheaper
|
|
43
|
+
* copy. `test/system/overrides.test.tsx` holds it to `CUE_TOKEN_PREFIX`.
|
|
44
|
+
*/
|
|
45
|
+
const PREFIX = "--cue-";
|
|
46
|
+
/**
|
|
47
|
+
* The already-flattened, referentially stable inline record the provider
|
|
48
|
+
* publishes for portals.
|
|
49
|
+
*
|
|
50
|
+
* Flattened and stable both matter. `usePortalStamp()` builds a fresh object on
|
|
51
|
+
* every render, so a `TokenOverrides` handed down raw would be a new dependency
|
|
52
|
+
* on every render of every overlay, and every open popover would re-write its
|
|
53
|
+
* container's custom properties for nothing. The provider computes this once,
|
|
54
|
+
* keyed on the serialised prop and the resolved mode, and hands the *same*
|
|
55
|
+
* object down until one of those actually moves.
|
|
56
|
+
*
|
|
57
|
+
* `null` means "nothing to stamp" — either no provider above, or a provider
|
|
58
|
+
* whose overrides publish no colour or font for this mode.
|
|
59
|
+
*
|
|
60
|
+
* Internal: consumers get this through the provider, never directly.
|
|
61
|
+
*/
|
|
62
|
+
const OverridesContext = React.createContext(null);
|
|
63
|
+
/**
|
|
64
|
+
* The inline declarations for the resolved mode: colours and fonts.
|
|
65
|
+
*
|
|
66
|
+
* Only one colour block is ever emitted. The mode is a fact about the document
|
|
67
|
+
* at this instant, and publishing both blocks would mean the dark edit sat as a
|
|
68
|
+
* dead custom property under a light palette, waiting for somebody to `var()`
|
|
69
|
+
* it by mistake.
|
|
70
|
+
*
|
|
71
|
+
* No validation of the *values* here, deliberately: these go through React's
|
|
72
|
+
* `style` prop and `CSSStyleDeclaration.setProperty`, and the CSSOM drops a
|
|
73
|
+
* declaration it cannot parse. A bad colour is a colour that does not apply,
|
|
74
|
+
* not an injection — which is exactly the difference between this half of the
|
|
75
|
+
* feature and {@link overridesCss}, where the text is written into a stylesheet
|
|
76
|
+
* by hand and has to be guarded.
|
|
77
|
+
*
|
|
78
|
+
* @param overrides - The prop, or `undefined`.
|
|
79
|
+
* @param mode - The mode after `"system"` has been resolved.
|
|
80
|
+
* @returns Custom property name → value; empty when there is nothing to say.
|
|
81
|
+
* @example
|
|
82
|
+
* inlineOverrides({ colors: { light: { accent: "#b35900" } } }, "light");
|
|
83
|
+
* // → { "--cue-accent": "#b35900" }
|
|
84
|
+
*/
|
|
85
|
+
function inlineOverrides(overrides, mode) {
|
|
86
|
+
const inline = {};
|
|
87
|
+
for (const [token, value] of Object.entries(overrides?.colors?.[mode] ?? {})) if (value !== void 0) inline[`${PREFIX}${token}`] = value;
|
|
88
|
+
const fonts = overrides?.fonts;
|
|
89
|
+
if (fonts?.sans !== void 0) inline[`${PREFIX}font-sans`] = fonts.sans;
|
|
90
|
+
if (fonts?.mono !== void 0) inline[`${PREFIX}font-mono`] = fonts.mono;
|
|
91
|
+
if (fonts?.display !== void 0) inline[`${PREFIX}font-display`] = fonts.display;
|
|
92
|
+
return inline;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* A value that can be written into a stylesheet without closing the rule.
|
|
96
|
+
*
|
|
97
|
+
* The inline half needs no such guard — the CSSOM parses each declaration on
|
|
98
|
+
* its own — but this text is concatenated into a `<style>` by hand, so a value
|
|
99
|
+
* carrying `;`, `}` or `<` would end the declaration, the block or the element
|
|
100
|
+
* and let whatever follows be parsed as CSS. An override value can easily come
|
|
101
|
+
* from a tenant record or a query string, so the check is not theoretical.
|
|
102
|
+
*/
|
|
103
|
+
const SAFE_VALUE = /^[^;{}<>\\]+$/;
|
|
104
|
+
/**
|
|
105
|
+
* Whether a string may be written into the density stylesheet this module
|
|
106
|
+
* builds.
|
|
107
|
+
*
|
|
108
|
+
* The same rule {@link overridesCss} applies at `SAFE_VALUE`, exported because a
|
|
109
|
+
* caller that builds a {@link TokenOverrides} wants to refuse a value at the
|
|
110
|
+
* *input* rather than watch it be dropped, silently and one warning later, at
|
|
111
|
+
* the sheet. A panel that cannot ask the question has two bad answers open to
|
|
112
|
+
* it: keep a second copy of this regex, which stops being this regex the first
|
|
113
|
+
* time either moves, or write the value anyway and let a reader wonder why the
|
|
114
|
+
* picture did not change.
|
|
115
|
+
*
|
|
116
|
+
* `@cueplusplus/ui/configurator` exports `isSafeCssValue` (`configurator/_overrides.ts:239`)
|
|
117
|
+
* for the configurator's own snapshot, and this is deliberately **not** that
|
|
118
|
+
* function: same rule, asked from the module that owns it, without dragging in
|
|
119
|
+
* a subpath that also carries `ThemeConfigurator`, `ExportDialog` and an
|
|
120
|
+
* optional `react-aria-components` peer. Neither imports the other, and the
|
|
121
|
+
* test beside this file is what holds them to one answer.
|
|
122
|
+
*
|
|
123
|
+
* **The one thing the rule does not cover, said out loud: an unterminated
|
|
124
|
+
* `/*`.** It carries none of the five refused characters, so it is accepted and
|
|
125
|
+
* written, and everything after it in that stylesheet — the closing brace and
|
|
126
|
+
* any later declaration — is inside a comment. That is a value of the caller's
|
|
127
|
+
* own that stops their *other* overrides applying, not an injection: with `;`,
|
|
128
|
+
* `{`, `}`, `<` and `\` all refused, no second value can close the comment and
|
|
129
|
+
* open a rule. A caller that wants to refuse it as well can say so on top of
|
|
130
|
+
* this; tightening `SAFE_VALUE` itself would change what `overridesCss` writes,
|
|
131
|
+
* which is a different release note from this one.
|
|
132
|
+
*
|
|
133
|
+
* @param value - The proposed declaration value.
|
|
134
|
+
* @returns `true` when it cannot close its declaration, its block or the
|
|
135
|
+
* `<style>` element — see the comment case above for what that does not mean.
|
|
136
|
+
* @example
|
|
137
|
+
* isSafeTokenValue("Iosevka, monospace"); // → true
|
|
138
|
+
* isSafeTokenValue("red;}"); // → false
|
|
139
|
+
*/
|
|
140
|
+
function isSafeTokenValue(value) {
|
|
141
|
+
return SAFE_VALUE.test(value);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* The document-scoped stylesheet text for the density layer.
|
|
145
|
+
*
|
|
146
|
+
* **Why the selector says the attribute twice.** A rung a theme retunes ships
|
|
147
|
+
* as `[data-theme="t"] [data-density="x"]` — specificity (0,2,0). An override
|
|
148
|
+
* that has to beat the base rung *and* tie the theme's own has to reach (0,2,0)
|
|
149
|
+
* as well, and the honest way to write that on a single element is to repeat
|
|
150
|
+
* the attribute: no invented ancestor, no `!important`, no `:is()` trick whose
|
|
151
|
+
* specificity depends on its longest argument. Tied on specificity, source
|
|
152
|
+
* order decides — and the provider's element is appended to `<body>`, after
|
|
153
|
+
* every stylesheet in `<head>`, so the override wins. The same arithmetic puts
|
|
154
|
+
* it above the configurator's persisted snapshot, which writes bare
|
|
155
|
+
* `[data-density="x"]` at (0,1,0) into `<head>`.
|
|
156
|
+
*
|
|
157
|
+
* **Why it is document-scoped rather than nested under the provider root.**
|
|
158
|
+
* `useControlHeight()` measures `--cue-control-<size>` on a throwaway element
|
|
159
|
+
* appended to `document.body`, which is outside `[data-cue-root]`. A rule
|
|
160
|
+
* scoped under the root would leave that probe reading unoverridden geometry
|
|
161
|
+
* while the control beside it painted the override, and every consumer of the
|
|
162
|
+
* measured height — virtualised rows, canvas layout, the DMX grid — would be
|
|
163
|
+
* off by exactly the override. The cost of the document scope is stated in
|
|
164
|
+
* `ThemeProviderProps.overrides`: a nested provider's rung edits reach the
|
|
165
|
+
* whole page, the same way a theme's own rung rules do.
|
|
166
|
+
*
|
|
167
|
+
* @param overrides - The prop, or `undefined`.
|
|
168
|
+
* @returns One rule per rung, newline-separated; `""` when there is nothing to
|
|
169
|
+
* emit, which is the provider's signal to render no element at all.
|
|
170
|
+
* @example
|
|
171
|
+
* overridesCss({ densities: { compact: { "control-md": "1.75rem" } } });
|
|
172
|
+
* // → '[data-density="compact"][data-density="compact"]{--cue-control-md:1.75rem}'
|
|
173
|
+
*/
|
|
174
|
+
function overridesCss(overrides) {
|
|
175
|
+
const rules = [];
|
|
176
|
+
for (const [rung, patch] of Object.entries(overrides?.densities ?? {})) {
|
|
177
|
+
if (!THEME_NAME_PATTERN.test(rung)) {
|
|
178
|
+
warnOnce(`overrides: density "${rung}" is not a usable rung name; its overrides are dropped`);
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const declarations = [];
|
|
182
|
+
for (const [token, value] of Object.entries(patch ?? {})) {
|
|
183
|
+
if (value === void 0) continue;
|
|
184
|
+
if (!SAFE_VALUE.test(value)) {
|
|
185
|
+
warnOnce(`overrides: value ${JSON.stringify(value)} for "${token}" is not a CSS value`);
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
declarations.push(`${PREFIX}${token}:${value}`);
|
|
189
|
+
}
|
|
190
|
+
if (declarations.length === 0) continue;
|
|
191
|
+
rules.push(`[data-density="${rung}"][data-density="${rung}"]{${declarations.join(";")}}`);
|
|
192
|
+
}
|
|
193
|
+
return rules.join("\n");
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Measure the palette an override actually produces, and name what it broke.
|
|
197
|
+
*
|
|
198
|
+
* `createTheme()` hands back a contrast report because a generated palette that
|
|
199
|
+
* nobody measured is a colour toy. An `overrides.colors` edit is the same
|
|
200
|
+
* decision made *without* the generator — one hex, dropped over a theme whose
|
|
201
|
+
* own build already cleared the eleven pairs — so it is measured here instead,
|
|
202
|
+
* against the palette it is layered onto.
|
|
203
|
+
*
|
|
204
|
+
* **Only what the override is answerable for is reported.** The palette is
|
|
205
|
+
* measured twice, once without the edit and once with it, and a pair is named
|
|
206
|
+
* when the edit introduced its failure, lowered its ratio, or *named either of
|
|
207
|
+
* its tokens*. Five of the ten themes this repository ships carry a **waived**
|
|
208
|
+
* required failure — a pair their own build recorded as known-bad — and
|
|
209
|
+
* reporting the overridden result flat would blame a tenant's accent for a pair
|
|
210
|
+
* it never touched, under a message that begins with the word `overrides:`. A
|
|
211
|
+
* report a reader learns to ignore is worse than no report. But a waiver covers
|
|
212
|
+
* the ink the *theme* shipped: the moment an app writes one of the two tokens
|
|
213
|
+
* itself, the pair is the app's, whichever way the ratio moved. See `caused()`.
|
|
214
|
+
*
|
|
215
|
+
* Failures `console.warn` and advisories `console.info`, matching the two tiers
|
|
216
|
+
* `contrastReport()` itself keeps: a failure is what makes a screen unreadable,
|
|
217
|
+
* an advisory is a ring nobody has been failed on yet.
|
|
218
|
+
*
|
|
219
|
+
* With no manifest registered for the active name the baseline is the blank
|
|
220
|
+
* base, which is what `resolve(null, …)` returns and what an unregistered theme
|
|
221
|
+
* can be measured against — the numbers are then the base's, not the palette
|
|
222
|
+
* the document is painted in. The message still names the theme the document is
|
|
223
|
+
* *stamped* with, because that is the screen the reader is looking at.
|
|
224
|
+
*
|
|
225
|
+
* Development only, and once per distinct message per process.
|
|
226
|
+
*
|
|
227
|
+
* @param manifest - The active theme's manifest, or `null` when unregistered.
|
|
228
|
+
* @param mode - The mode after `"system"` has been resolved.
|
|
229
|
+
* @param overrides - The prop, or `undefined`.
|
|
230
|
+
* @param theme - The name on `data-theme`, for the message.
|
|
231
|
+
*/
|
|
232
|
+
function reportOverrides(manifest, mode, overrides, theme) {
|
|
233
|
+
if (process.env.NODE_ENV === "production") return;
|
|
234
|
+
const patch = overrides?.colors?.[mode];
|
|
235
|
+
if (patch === void 0 || Object.keys(patch).length === 0) return;
|
|
236
|
+
const base = resolve(manifest, { mode }).colors;
|
|
237
|
+
let before;
|
|
238
|
+
let after;
|
|
239
|
+
try {
|
|
240
|
+
before = new Map(contrastReport([{
|
|
241
|
+
mode,
|
|
242
|
+
tokens: base
|
|
243
|
+
}]).checks.map((check) => [check.id, check]));
|
|
244
|
+
after = contrastReport([{
|
|
245
|
+
mode,
|
|
246
|
+
tokens: {
|
|
247
|
+
...base,
|
|
248
|
+
...patch
|
|
249
|
+
}
|
|
250
|
+
}]);
|
|
251
|
+
} catch {
|
|
252
|
+
warnOnce(`overrides: a value in the ${mode} block is not a colour this can measure; the contrast pass was skipped`);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* A pair the edit is answerable for.
|
|
257
|
+
*
|
|
258
|
+
* Three of these clauses are about the *result* moving — newly measurable,
|
|
259
|
+
* newly failing, failing worse. The fourth is about authorship, and it is the
|
|
260
|
+
* one that took a review to find: an override that names either token of a
|
|
261
|
+
* pair has adopted that pair, even when the theme was already failing it and
|
|
262
|
+
* even when the edit improved the ratio without clearing the floor. Under
|
|
263
|
+
* `venu`, whose own build waived `accent-fg/accent` at 2.67, an app setting
|
|
264
|
+
* `accent-fg` to something that lands at 3.60 has made a colour decision of
|
|
265
|
+
* its own and is still under the 4.5 floor — and the theme's waiver covers
|
|
266
|
+
* the theme's ink, not the app's. Without the clause the report would go
|
|
267
|
+
* quiet on exactly the pair the app just took responsibility for.
|
|
268
|
+
*/
|
|
269
|
+
const caused = (check) => {
|
|
270
|
+
const was = before.get(check.id);
|
|
271
|
+
return was === void 0 || was.passes || check.ratio < was.ratio || check.foreground in patch || check.background in patch;
|
|
272
|
+
};
|
|
273
|
+
for (const check of after.failures) if (caused(check)) warnOnce(`overrides: ${check.id} at ${check.ratio.toFixed(2)}:1 fails its ${check.minimum} floor under theme "${theme}"`);
|
|
274
|
+
for (const check of after.advisories) if (caused(check)) noteOnce(`overrides: ${check.id} at ${check.ratio.toFixed(2)}:1 misses its ${check.minimum} advisory floor under theme "${theme}"`);
|
|
275
|
+
}
|
|
276
|
+
//#endregion
|
|
277
|
+
export { OverridesContext, inlineOverrides, isSafeTokenValue, overridesCss, reportOverrides };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
//#region src/system/portal.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Props to spread onto a Base UI `Portal` part so the portal root inherits the
|
|
5
|
+
* caller's theme, density, font pairing and mode.
|
|
6
|
+
*
|
|
7
|
+
* Returns a `container` element appended to `document.body` and stamped with
|
|
8
|
+
* `data-theme` / `data-density` / `data-font` / `data-mode` (plus
|
|
9
|
+
* `--cue-font-scale` and any `ThemeProvider` `overrides` colour or font
|
|
10
|
+
* property) copied from the nearest provider and density island, with
|
|
11
|
+
* `data-style` when the caller is inside a style set, and with
|
|
12
|
+
* `data-cue-skin` / `data-cue-fidelity` when the caller sits inside an
|
|
13
|
+
* `AgentSurface` island. The container is
|
|
14
|
+
* `display: contents`, so it changes no layout and creates no containing block —
|
|
15
|
+
* fixed-position overlay content behaves exactly as if it were a direct child of
|
|
16
|
+
* `<body>`.
|
|
17
|
+
*
|
|
18
|
+
* Before the container exists (server render, first client render) the object is
|
|
19
|
+
* empty, which leaves the Base UI default (`document.body`) in place.
|
|
20
|
+
*
|
|
21
|
+
* Every overlay in this system spreads this. It is the single fix for the
|
|
22
|
+
* nested-density portal bug (spec §6).
|
|
23
|
+
*
|
|
24
|
+
* @returns `{ container }` once mounted, `{}` otherwise.
|
|
25
|
+
* @example
|
|
26
|
+
* const portalProps = useCuePortalProps();
|
|
27
|
+
* <Popover.Portal {...portalProps}><Popover.Positioner>…</Popover.Positioner></Popover.Portal>
|
|
28
|
+
*/
|
|
29
|
+
declare function useCuePortalProps(): {
|
|
30
|
+
container?: HTMLElement;
|
|
31
|
+
};
|
|
32
|
+
interface CuePortalFrameProps {
|
|
33
|
+
/** Portal content to stamp. */
|
|
34
|
+
children: React.ReactNode;
|
|
35
|
+
/** Extra classes for the frame element. */
|
|
36
|
+
className?: string;
|
|
37
|
+
/** Inline styles, merged after `display: contents`. */
|
|
38
|
+
style?: React.CSSProperties;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Inline version of the portal contract, for portals whose container cannot be
|
|
42
|
+
* chosen (a third-party overlay, or content already portaled by something else).
|
|
43
|
+
*
|
|
44
|
+
* Wraps `children` in a `display: contents` element carrying the same
|
|
45
|
+
* `data-theme` / `data-density` / `data-font` / `data-mode` / `data-style` /
|
|
46
|
+
* `data-cue-skin` / `data-cue-fidelity` stamp, `--cue-font-scale` and
|
|
47
|
+
* `overrides` properties as {@link useCuePortalProps}. Prefer the hook — a
|
|
48
|
+
* stamped container costs one element per overlay instead of one per render
|
|
49
|
+
* tree — and reach for this only when the container prop is not available.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* <SomeThirdPartyPortal><CuePortalFrame>{content}</CuePortalFrame></SomeThirdPartyPortal>
|
|
53
|
+
*/
|
|
54
|
+
declare function CuePortalFrame({ children, className, style }: CuePortalFrameProps): React.JSX.Element;
|
|
55
|
+
//#endregion
|
|
56
|
+
export { CuePortalFrame, CuePortalFrameProps, useCuePortalProps };
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
|
|
3
|
+
import { AgentSkinContext } from "./agent-skin.js";
|
|
4
|
+
import { DensityContext, StyleSetContext } from "./density.js";
|
|
5
|
+
import { OverridesContext } from "./overrides.js";
|
|
6
|
+
import { FontFamiliesContext, FontScaleContext, ThemeContext } from "./theme-provider.js";
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
import { DEFAULT_FONT } from "@cueplusplus/tokens";
|
|
10
|
+
//#region src/system/portal.tsx
|
|
11
|
+
const DEFAULT_THEME = "cue";
|
|
12
|
+
const DEFAULT_MODE = "dark";
|
|
13
|
+
/** Custom property the density text ladder multiplies by; see `FontScaleContext`. */
|
|
14
|
+
const FONT_SCALE_PROPERTY = "--cue-font-scale";
|
|
15
|
+
const FONT_SANS_PROPERTY = "--cue-font-sans";
|
|
16
|
+
const FONT_MONO_PROPERTY = "--cue-font-mono";
|
|
17
|
+
/**
|
|
18
|
+
* Read the stamp from React context — never from the DOM. A portal is mounted
|
|
19
|
+
* outside its owner's DOM subtree, so `getComputedStyle`-style discovery would
|
|
20
|
+
* read the *body's* theme, which is exactly the bug this contract exists to
|
|
21
|
+
* prevent. The same detachment is why `--cue-font-scale` travels here too: the
|
|
22
|
+
* provider publishes it as an inline custom property, which a body-level portal
|
|
23
|
+
* would otherwise never inherit — and why the provider's `overrides` do, for
|
|
24
|
+
* exactly the same reason and by the same route.
|
|
25
|
+
*/
|
|
26
|
+
function usePortalStamp() {
|
|
27
|
+
const theme = React.useContext(ThemeContext);
|
|
28
|
+
const island = React.useContext(DensityContext);
|
|
29
|
+
const fontScale = React.useContext(FontScaleContext);
|
|
30
|
+
const fontFamilies = React.useContext(FontFamiliesContext);
|
|
31
|
+
const overrides = React.useContext(OverridesContext);
|
|
32
|
+
const skin = React.useContext(AgentSkinContext);
|
|
33
|
+
const styleSet = React.useContext(StyleSetContext);
|
|
34
|
+
return {
|
|
35
|
+
theme: theme?.theme ?? DEFAULT_THEME,
|
|
36
|
+
density: island ?? theme?.density ?? "compact",
|
|
37
|
+
mode: theme?.mode ?? DEFAULT_MODE,
|
|
38
|
+
font: theme?.font ?? DEFAULT_FONT,
|
|
39
|
+
fontScale,
|
|
40
|
+
fontFamilies,
|
|
41
|
+
overrides,
|
|
42
|
+
skin: skin?.skin ?? null,
|
|
43
|
+
fidelity: skin?.fidelity ?? null,
|
|
44
|
+
styleSet
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Props to spread onto a Base UI `Portal` part so the portal root inherits the
|
|
49
|
+
* caller's theme, density, font pairing and mode.
|
|
50
|
+
*
|
|
51
|
+
* Returns a `container` element appended to `document.body` and stamped with
|
|
52
|
+
* `data-theme` / `data-density` / `data-font` / `data-mode` (plus
|
|
53
|
+
* `--cue-font-scale` and any `ThemeProvider` `overrides` colour or font
|
|
54
|
+
* property) copied from the nearest provider and density island, with
|
|
55
|
+
* `data-style` when the caller is inside a style set, and with
|
|
56
|
+
* `data-cue-skin` / `data-cue-fidelity` when the caller sits inside an
|
|
57
|
+
* `AgentSurface` island. The container is
|
|
58
|
+
* `display: contents`, so it changes no layout and creates no containing block —
|
|
59
|
+
* fixed-position overlay content behaves exactly as if it were a direct child of
|
|
60
|
+
* `<body>`.
|
|
61
|
+
*
|
|
62
|
+
* Before the container exists (server render, first client render) the object is
|
|
63
|
+
* empty, which leaves the Base UI default (`document.body`) in place.
|
|
64
|
+
*
|
|
65
|
+
* Every overlay in this system spreads this. It is the single fix for the
|
|
66
|
+
* nested-density portal bug (spec §6).
|
|
67
|
+
*
|
|
68
|
+
* @returns `{ container }` once mounted, `{}` otherwise.
|
|
69
|
+
* @example
|
|
70
|
+
* const portalProps = useCuePortalProps();
|
|
71
|
+
* <Popover.Portal {...portalProps}><Popover.Positioner>…</Popover.Positioner></Popover.Portal>
|
|
72
|
+
*/
|
|
73
|
+
function useCuePortalProps() {
|
|
74
|
+
const stamp = usePortalStamp();
|
|
75
|
+
const stampRef = React.useRef(stamp);
|
|
76
|
+
stampRef.current = stamp;
|
|
77
|
+
const [container, setContainer] = React.useState(null);
|
|
78
|
+
useIsomorphicLayoutEffect(() => {
|
|
79
|
+
if (typeof document === "undefined") return;
|
|
80
|
+
const element = document.createElement("div");
|
|
81
|
+
element.setAttribute("data-cue-portal", "");
|
|
82
|
+
element.style.display = "contents";
|
|
83
|
+
applyStamp(element, stampRef.current);
|
|
84
|
+
document.body.appendChild(element);
|
|
85
|
+
setContainer(element);
|
|
86
|
+
return () => {
|
|
87
|
+
element.remove();
|
|
88
|
+
setContainer(null);
|
|
89
|
+
};
|
|
90
|
+
}, []);
|
|
91
|
+
useIsomorphicLayoutEffect(() => {
|
|
92
|
+
if (container === null) return;
|
|
93
|
+
applyStamp(container, stamp);
|
|
94
|
+
}, [
|
|
95
|
+
container,
|
|
96
|
+
stamp.theme,
|
|
97
|
+
stamp.density,
|
|
98
|
+
stamp.font,
|
|
99
|
+
stamp.styleSet,
|
|
100
|
+
stamp.mode,
|
|
101
|
+
stamp.fontScale,
|
|
102
|
+
stamp.fontFamilies?.sans,
|
|
103
|
+
stamp.fontFamilies?.mono,
|
|
104
|
+
stamp.overrides,
|
|
105
|
+
stamp.skin,
|
|
106
|
+
stamp.fidelity
|
|
107
|
+
]);
|
|
108
|
+
return React.useMemo(() => container === null ? {} : { container }, [container]);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* The override property names last written to each container.
|
|
112
|
+
*
|
|
113
|
+
* A stamp is applied over the top of the previous one, and `style.setProperty`
|
|
114
|
+
* only ever adds. So a key that *disappears* — the app switching to a mode
|
|
115
|
+
* whose block names different tokens, or dropping the prop — would leave its
|
|
116
|
+
* `--cue-*` on the container for the life of the overlay, with the in-tree
|
|
117
|
+
* content already painting without it. This is the record of what to take off.
|
|
118
|
+
*
|
|
119
|
+
* A `WeakMap` keyed on the element rather than an attribute on it: the same
|
|
120
|
+
* bookkeeping written as `data-cue-override-keys` would be one more
|
|
121
|
+
* document-visible mutation on every write, a second place for the truth to
|
|
122
|
+
* live, and a new `data-` attribute in a file whose whole contract is which
|
|
123
|
+
* `data-` attributes a portal carries. Containers are removed with the overlay
|
|
124
|
+
* and collected with it, which is what makes the weak reference the right one.
|
|
125
|
+
*/
|
|
126
|
+
const stampedOverrides = /* @__PURE__ */ new WeakMap();
|
|
127
|
+
/** Write a stamp onto a live element (the imperative half of the contract). */
|
|
128
|
+
function applyStamp(element, stamp) {
|
|
129
|
+
element.setAttribute("data-theme", stamp.theme);
|
|
130
|
+
element.setAttribute("data-density", stamp.density);
|
|
131
|
+
element.setAttribute("data-font", stamp.font);
|
|
132
|
+
element.setAttribute("data-mode", stamp.mode);
|
|
133
|
+
if (stamp.styleSet === null) element.removeAttribute("data-style");
|
|
134
|
+
else element.setAttribute("data-style", stamp.styleSet);
|
|
135
|
+
if (stamp.skin === null) element.removeAttribute("data-cue-skin");
|
|
136
|
+
else element.setAttribute("data-cue-skin", stamp.skin);
|
|
137
|
+
if (stamp.fidelity === null) element.removeAttribute("data-cue-fidelity");
|
|
138
|
+
else element.setAttribute("data-cue-fidelity", stamp.fidelity);
|
|
139
|
+
const overrides = stamp.overrides ?? {};
|
|
140
|
+
for (const property of stampedOverrides.get(element) ?? []) if (!(property in overrides)) element.style.removeProperty(property);
|
|
141
|
+
if (stamp.fontScale === null) element.style.removeProperty(FONT_SCALE_PROPERTY);
|
|
142
|
+
else element.style.setProperty(FONT_SCALE_PROPERTY, String(stamp.fontScale));
|
|
143
|
+
setOptionalProperty(element, FONT_SANS_PROPERTY, stamp.fontFamilies?.sans);
|
|
144
|
+
setOptionalProperty(element, FONT_MONO_PROPERTY, stamp.fontFamilies?.mono);
|
|
145
|
+
for (const [property, value] of Object.entries(overrides)) element.style.setProperty(property, value);
|
|
146
|
+
const keys = Object.keys(overrides);
|
|
147
|
+
if (keys.length === 0) stampedOverrides.delete(element);
|
|
148
|
+
else stampedOverrides.set(element, keys);
|
|
149
|
+
}
|
|
150
|
+
function setOptionalProperty(element, property, value) {
|
|
151
|
+
if (value === void 0) element.style.removeProperty(property);
|
|
152
|
+
else element.style.setProperty(property, value);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Inline version of the portal contract, for portals whose container cannot be
|
|
156
|
+
* chosen (a third-party overlay, or content already portaled by something else).
|
|
157
|
+
*
|
|
158
|
+
* Wraps `children` in a `display: contents` element carrying the same
|
|
159
|
+
* `data-theme` / `data-density` / `data-font` / `data-mode` / `data-style` /
|
|
160
|
+
* `data-cue-skin` / `data-cue-fidelity` stamp, `--cue-font-scale` and
|
|
161
|
+
* `overrides` properties as {@link useCuePortalProps}. Prefer the hook — a
|
|
162
|
+
* stamped container costs one element per overlay instead of one per render
|
|
163
|
+
* tree — and reach for this only when the container prop is not available.
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* <SomeThirdPartyPortal><CuePortalFrame>{content}</CuePortalFrame></SomeThirdPartyPortal>
|
|
167
|
+
*/
|
|
168
|
+
function CuePortalFrame({ children, className, style }) {
|
|
169
|
+
const stamp = usePortalStamp();
|
|
170
|
+
const frameStyle = {
|
|
171
|
+
display: "contents",
|
|
172
|
+
...stamp.fontScale === null ? null : { [FONT_SCALE_PROPERTY]: stamp.fontScale },
|
|
173
|
+
...stamp.fontFamilies?.sans === void 0 ? null : { [FONT_SANS_PROPERTY]: stamp.fontFamilies.sans },
|
|
174
|
+
...stamp.fontFamilies?.mono === void 0 ? null : { [FONT_MONO_PROPERTY]: stamp.fontFamilies.mono },
|
|
175
|
+
...stamp.overrides,
|
|
176
|
+
...style
|
|
177
|
+
};
|
|
178
|
+
return /* @__PURE__ */ jsx("div", {
|
|
179
|
+
"data-cue-portal": "",
|
|
180
|
+
"data-theme": stamp.theme,
|
|
181
|
+
"data-density": stamp.density,
|
|
182
|
+
"data-font": stamp.font,
|
|
183
|
+
"data-mode": stamp.mode,
|
|
184
|
+
"data-style": stamp.styleSet ?? void 0,
|
|
185
|
+
"data-cue-skin": stamp.skin ?? void 0,
|
|
186
|
+
"data-cue-fidelity": stamp.fidelity ?? void 0,
|
|
187
|
+
className,
|
|
188
|
+
style: frameStyle,
|
|
189
|
+
children
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
//#endregion
|
|
193
|
+
export { CuePortalFrame, useCuePortalProps };
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { StyleSet } from "@cueplusplus/tokens";
|
|
2
|
+
import { Density as Density$1, FontName, Mode, ThemeManifest, ThemeName } from "@cueplusplus/theme-base";
|
|
3
|
+
//#region src/system/prepaint.d.ts
|
|
4
|
+
/** localStorage key the ThemeProvider and the pre-paint script share by default. */
|
|
5
|
+
declare const DEFAULT_STORAGE_KEY = "cue-ui";
|
|
6
|
+
/** Shape persisted under {@link DEFAULT_STORAGE_KEY} — kept in sync with the provider's writer. */
|
|
7
|
+
interface PersistedPreferences {
|
|
8
|
+
/** Last theme the user picked. */
|
|
9
|
+
theme?: string;
|
|
10
|
+
/** Last density level the user picked. */
|
|
11
|
+
density?: string;
|
|
12
|
+
/** Last mode the user picked, including the literal `"system"`. */
|
|
13
|
+
mode?: string;
|
|
14
|
+
/** Last font pairing the user picked. */
|
|
15
|
+
font?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Last style set the user picked, or absent — which is what "no style set"
|
|
18
|
+
* looks like in storage. Absent rather than `null`, because the key is written
|
|
19
|
+
* only when there is a set: an application that never touches the axis stores
|
|
20
|
+
* the four-key object it always stored, and the pre-paint script has no fifth
|
|
21
|
+
* value to hold an opinion about.
|
|
22
|
+
*/
|
|
23
|
+
style?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The server-authoritative fallback stamped when storage is absent or ignored.
|
|
27
|
+
*
|
|
28
|
+
* `theme` and `mode` are required because nothing else can supply them: the
|
|
29
|
+
* theme is the app's own decision and the mode has no per-theme preference to
|
|
30
|
+
* fall back to. `density` and `font` are optional on purpose — leave either out
|
|
31
|
+
* and the script opens on the rung or the pairing `defaults.theme` itself
|
|
32
|
+
* declares (§5's `densities.default` / `fontPairings.default`), which is
|
|
33
|
+
* exactly what `<ThemeProvider>` opens on when the consumer passes no `density`
|
|
34
|
+
* or `font`. Naming one here is therefore the same statement as passing the
|
|
35
|
+
* prop: it overrides the theme's preference for the first paint, and the
|
|
36
|
+
* provider must be given the matching prop or the two disagree by a frame.
|
|
37
|
+
*/
|
|
38
|
+
interface PrepaintDefaults {
|
|
39
|
+
theme: ThemeName;
|
|
40
|
+
/** Initial density rung. Omitted, the theme's own `densities.default` decides. */
|
|
41
|
+
density?: Density$1;
|
|
42
|
+
mode: Mode;
|
|
43
|
+
/** Initial document-wide font pairing. Omitted, the theme's own `fontPairings.default` decides. */
|
|
44
|
+
font?: FontName;
|
|
45
|
+
/**
|
|
46
|
+
* Initial style set. Omitted — and it is omitted by every app that has not
|
|
47
|
+
* asked for page composition — the script stamps no `data-style` at all, which
|
|
48
|
+
* is exactly what `<ThemeProvider>` does with no `styleSet` prop.
|
|
49
|
+
*
|
|
50
|
+
* Unlike `density` and `font` there is no per-theme preference behind it: no
|
|
51
|
+
* manifest can declare a style set, so the fall-through is two tiers deep
|
|
52
|
+
* (stored, then this) rather than four.
|
|
53
|
+
*/
|
|
54
|
+
styleSet?: StyleSet;
|
|
55
|
+
}
|
|
56
|
+
/** Options form for apps whose server projection, not localStorage, owns first paint. */
|
|
57
|
+
interface PrepaintOptions {
|
|
58
|
+
/** localStorage key shared with ThemeProvider. */
|
|
59
|
+
storageKey?: string;
|
|
60
|
+
/** The validated fallback: `theme` and `mode` always, `density` and `font` only to override the theme's own. */
|
|
61
|
+
defaults: PrepaintDefaults;
|
|
62
|
+
/** Whether valid stored axes may override `defaults`. Defaults to `true`. */
|
|
63
|
+
readStoredPreferences?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* The manifests this app registers, in the same order and of the same shape
|
|
66
|
+
* as `<ThemeProvider themes>`. The script inlines their names, and per theme
|
|
67
|
+
* the rungs and pairings that theme offers, so a stored preference is judged
|
|
68
|
+
* before paint by exactly the rule the provider applies after it.
|
|
69
|
+
*
|
|
70
|
+
* Omitted — and it is omitted by the positional overload, which cannot carry
|
|
71
|
+
* it — the script gets the empty-registry rule: any well-formed theme name is
|
|
72
|
+
* accepted, and density and font validate against the base axes alone. That
|
|
73
|
+
* is deliberate rather than lax. An app that registers nothing has whatever
|
|
74
|
+
* theme its stylesheet paints, and refusing the name it stored would repaint
|
|
75
|
+
* every returning visitor's first frame in a theme they did not choose.
|
|
76
|
+
*/
|
|
77
|
+
themes?: readonly ThemeManifest[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Build the blocking inline script that stamps `data-theme`, `data-density`,
|
|
81
|
+
* `data-font`, `data-mode`, `data-style` and `color-scheme` on `<html>` from
|
|
82
|
+
* localStorage before the first paint, and removes `data-style` when nothing
|
|
83
|
+
* chose one.
|
|
84
|
+
*
|
|
85
|
+
* Render it as `<script dangerouslySetInnerHTML={{ __html: prepaintScript() }} />`
|
|
86
|
+
* in `<head>`, above everything else. The output never contains `</script>` and
|
|
87
|
+
* never throws: private-mode localStorage failures degrade to the dark-first
|
|
88
|
+
* defaults (`cue` / `compact` / `system` / `dark`). Two of those four are what
|
|
89
|
+
* bare `:root` already carries — `compact` geometry and the dark palette, from
|
|
90
|
+
* `@cueplusplus/theme-base/base.css` and the `@cueplusplus/tokens/axes.css` it
|
|
91
|
+
* imports. `cue` is not: since this release no stylesheet the library ships
|
|
92
|
+
* declares a `[data-theme="cue"]` block, so stamping that name paints the blank
|
|
93
|
+
* base unless the app imported `@cueplusplus/theme-cue/theme.css` itself. The
|
|
94
|
+
* script's job is to make the first frame agree with the first commit, and it
|
|
95
|
+
* still does — both are whatever the page's stylesheets say `cue` means.
|
|
96
|
+
*
|
|
97
|
+
* What the script *accepts* out of storage is decided by the same rule the
|
|
98
|
+
* provider applies a moment later. Pass the options form with `themes` — the
|
|
99
|
+
* array `<ThemeProvider themes>` is given — and the registered names are
|
|
100
|
+
* inlined, along with the rungs and pairings each theme offers, so a rung one
|
|
101
|
+
* theme adds is not accepted on first paint under a theme that does not have
|
|
102
|
+
* it. Pass nothing and the empty-registry rule applies: any well-formed theme
|
|
103
|
+
* name, and the base density and font axes. The positional overload below
|
|
104
|
+
* cannot carry a registry and always gets that rule.
|
|
105
|
+
*
|
|
106
|
+
* What it *stamps* for a visitor with nothing stored is decided the same way.
|
|
107
|
+
* The options form needs only `defaults.theme` and `defaults.mode`: leave
|
|
108
|
+
* `defaults.density` or `defaults.font` out and the script opens on the rung
|
|
109
|
+
* and the pairing that theme itself declares (§5's `densities.default` /
|
|
110
|
+
* `fontPairings.default`), which is precisely what `<ThemeProvider>` opens on
|
|
111
|
+
* when no `density` or `font` prop names one. Name either here and you are
|
|
112
|
+
* making the same statement the prop makes — so pass the matching prop, or the
|
|
113
|
+
* first paint and the first commit disagree by a frame.
|
|
114
|
+
*
|
|
115
|
+
* @param storageKey - localStorage key to read. Must match the `storageKey`
|
|
116
|
+
* passed to `<ThemeProvider>`. Defaults to {@link DEFAULT_STORAGE_KEY}.
|
|
117
|
+
* @param defaultTheme - Theme to stamp for a visitor with nothing persisted yet.
|
|
118
|
+
* Must match the `theme` passed to `<ThemeProvider>`, or the first paint
|
|
119
|
+
* dresses `<html>` in one preset while the app renders in another. Defaults to
|
|
120
|
+
* `"cue"`.
|
|
121
|
+
* @param defaultDensity - Density level to stamp for a visitor with nothing
|
|
122
|
+
* persisted yet. Same rule as `defaultTheme`: it must match the `density`
|
|
123
|
+
* passed to `<ThemeProvider>` or the first frame is drawn at one rung and
|
|
124
|
+
* every frame after it at another. Defaults to `"compact"`, the library's own
|
|
125
|
+
* fallback, which is what an app that passes no `density` renders at.
|
|
126
|
+
* @returns One line of JavaScript, safe to inline verbatim.
|
|
127
|
+
* @example
|
|
128
|
+
* // An app whose provider is <ThemeProvider theme="terminal" density="normal">:
|
|
129
|
+
* prepaintScript(DEFAULT_STORAGE_KEY, "terminal", "normal");
|
|
130
|
+
*/
|
|
131
|
+
declare function prepaintScript(storageKey?: string, defaultTheme?: ThemeName, defaultDensity?: Density$1, defaultFont?: FontName): string;
|
|
132
|
+
declare function prepaintScript(options: PrepaintOptions): string;
|
|
133
|
+
//#endregion
|
|
134
|
+
export { DEFAULT_STORAGE_KEY, PersistedPreferences, PrepaintDefaults, PrepaintOptions, prepaintScript };
|