@cueplusplus/ui 0.16.0 → 0.18.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 +901 -0
- package/README.md +1 -1
- package/dist/agent-runtime/tool-call-card.js +7 -3
- package/dist/brand/_chassis.d.ts +1 -1
- package/dist/brand/cue-mark.d.ts +1 -1
- package/dist/brand/cue-mark.js +1 -1
- package/dist/charts/ramps.js +1 -1
- package/dist/chat/agent-pile.js +2 -1
- package/dist/chat/ask-box.js +4 -3
- package/dist/chat/delegation-card.js +3 -2
- package/dist/chat/message-list.js +3 -2
- package/dist/chat/message.js +17 -7
- package/dist/chrome/_edge-scroller.js +2 -1
- package/dist/chrome/_status-bar.js +9 -3
- package/dist/chrome/_tabs-scroll.d.ts +1 -1
- package/dist/chrome/_tabs-scroll.js +1 -1
- package/dist/chrome/app-bar.js +9 -3
- package/dist/chrome/app-shell.js +2 -1
- package/dist/chrome/band.d.ts +18 -12
- package/dist/chrome/band.js +18 -32
- package/dist/chrome/empty-state.js +8 -4
- package/dist/chrome/eyebrow.d.ts +13 -5
- package/dist/chrome/eyebrow.js +18 -7
- package/dist/chrome/footer.d.ts +5 -0
- package/dist/chrome/footer.js +14 -3
- package/dist/chrome/navigation-menu.js +6 -3
- package/dist/chrome/page-shell.js +8 -5
- package/dist/chrome/panel.d.ts +5 -2
- package/dist/chrome/panel.js +10 -5
- package/dist/chrome/row.js +9 -5
- package/dist/chrome/scroll-area.js +6 -4
- package/dist/chrome/section-header.js +13 -4
- package/dist/chrome/segmented-control.js +14 -4
- package/dist/chrome/status-bar.js +2 -1
- package/dist/chrome/tabs.js +14 -3
- package/dist/chrome/toolbar.js +6 -3
- package/dist/chrome/tree.js +3 -2
- package/dist/color/_thumb.js +9 -3
- package/dist/color/color-area.js +1 -1
- package/dist/color/color-swatch.js +1 -1
- package/dist/configurator/_overrides.js +13 -4
- package/dist/configurator/configurator.js +4 -1
- package/dist/configurator/export-dialog.js +5 -2
- package/dist/configurator/panel-sections.js +6 -2
- package/dist/configurator/token-editor.js +4 -1
- package/dist/date/_trigger.js +4 -1
- package/dist/date/calendar.js +22 -12
- package/dist/dmx/channel-matrix.js +3 -2
- package/dist/dmx/dmx-bar.js +1 -1
- package/dist/dmx/dmx-strip.js +1 -1
- package/dist/dmx/universe-grid.js +3 -2
- package/dist/elements/activity-graph.js +3 -3
- package/dist/elements/agent-card.js +3 -3
- package/dist/elements/approval-card.js +3 -3
- package/dist/elements/artifact-card.js +2 -2
- package/dist/elements/background-inbox.js +2 -2
- package/dist/elements/canvas-split.js +2 -2
- package/dist/elements/chart.js +1 -1
- package/dist/elements/chat-panel.js +2 -2
- package/dist/elements/checkpoint-history.js +2 -2
- package/dist/elements/clamp.js +2 -1
- package/dist/elements/code-diff.js +1 -1
- package/dist/elements/code-runner.js +1 -1
- package/dist/elements/command-palette.js +6 -5
- package/dist/elements/comparison-card.js +2 -2
- package/dist/elements/composer.js +9 -8
- package/dist/elements/computer-use.js +1 -1
- package/dist/elements/confidence-marker.js +2 -1
- package/dist/elements/connection-state.js +1 -1
- package/dist/elements/context-breakdown.js +1 -1
- package/dist/elements/context-usage.js +1 -1
- package/dist/elements/conversation-search.js +4 -3
- package/dist/elements/cost-meter.js +1 -1
- package/dist/elements/data-table.js +2 -2
- package/dist/elements/day-separator.js +1 -1
- package/dist/elements/diagram.js +1 -1
- package/dist/elements/document-reference.js +3 -3
- package/dist/elements/draft-restore.js +1 -1
- package/dist/elements/edit-message.js +4 -3
- package/dist/elements/elements.css +26 -5
- package/dist/elements/elicitation-form.js +3 -3
- package/dist/elements/empty-state.js +2 -1
- package/dist/elements/error-state.js +1 -1
- package/dist/elements/feedback-dialog.js +4 -3
- package/dist/elements/file-tree.js +2 -2
- package/dist/elements/flow-graph.js +2 -2
- package/dist/elements/guardrail-notice.js +3 -3
- package/dist/elements/image-generation.js +1 -1
- package/dist/elements/inline-citation.js +3 -3
- package/dist/elements/job-progress.js +3 -3
- package/dist/elements/launcher-bubble.js +2 -2
- package/dist/elements/loading-state.js +1 -1
- package/dist/elements/map-answer.js +3 -2
- package/dist/elements/markdown.js +5 -4
- package/dist/elements/math-block.js +1 -1
- package/dist/elements/mcp-server-panel.js +3 -3
- package/dist/elements/message-attachment.js +4 -4
- package/dist/elements/message-pair.js +1 -1
- package/dist/elements/message-queue.js +2 -2
- package/dist/elements/mobile-composer.js +4 -3
- package/dist/elements/model-picker.js +3 -3
- package/dist/elements/onboarding.js +2 -2
- package/dist/elements/permission-grant.js +2 -2
- package/dist/elements/permission-scopes.js +5 -4
- package/dist/elements/prompt-library.js +7 -6
- package/dist/elements/queue-dock.js +4 -3
- package/dist/elements/quota-banner.js +1 -1
- package/dist/elements/quote-reply.js +1 -1
- package/dist/elements/read-aloud.js +2 -2
- package/dist/elements/reasoning-panel.js +2 -1
- package/dist/elements/recommendation-card.d.ts +1 -1
- package/dist/elements/recommendation-card.js +2 -2
- package/dist/elements/regenerate-menu.js +2 -2
- package/dist/elements/research-report.js +1 -1
- package/dist/elements/retrieval-chunks.js +1 -1
- package/dist/elements/revert-dock.js +5 -4
- package/dist/elements/reviewable-diff.js +1 -1
- package/dist/elements/schedule-card.js +3 -3
- package/dist/elements/score-breakdown.js +1 -1
- package/dist/elements/scroll-anchor.js +2 -2
- package/dist/elements/settings-panel.js +3 -2
- package/dist/elements/shared-conversation.js +2 -2
- package/dist/elements/sources.js +4 -3
- package/dist/elements/speaker-identity.js +1 -1
- package/dist/elements/spec-sheet.js +1 -1
- package/dist/elements/streaming-text.js +1 -1
- package/dist/elements/subagent-list.js +2 -2
- package/dist/elements/suggestions.js +1 -1
- package/dist/elements/surfaces.d.ts +1 -1
- package/dist/elements/surfaces.js +2 -1
- package/dist/elements/tail-status.js +1 -1
- package/dist/elements/terminal-block.js +1 -1
- package/dist/elements/thread-list.js +1 -1
- package/dist/elements/thread-search.js +5 -4
- package/dist/elements/timeline.js +1 -1
- package/dist/elements/todo-list.js +2 -2
- package/dist/elements/tool-call.js +4 -3
- package/dist/elements/tool-error.js +2 -2
- package/dist/elements/tool-group.js +1 -1
- package/dist/elements/tool-timeline.js +4 -3
- package/dist/elements/trace-waterfall.js +1 -1
- package/dist/elements/verdict-row.js +2 -2
- package/dist/elements/voice-conversation.js +3 -2
- package/dist/elements/web-preview.js +1 -1
- package/dist/elements/web-search.js +2 -2
- package/dist/elements/work-collapse.js +2 -1
- package/dist/flow/node-card.js +3 -2
- package/dist/flow/use-flow-theme.js +2 -1
- package/dist/forms/_chassis.d.ts +34 -6
- package/dist/forms/_chassis.js +44 -9
- package/dist/forms/_listbox.js +22 -14
- package/dist/forms/checkbox.js +13 -4
- package/dist/forms/env-var-input.js +3 -2
- package/dist/forms/field.d.ts +2 -1
- package/dist/forms/field.js +16 -5
- package/dist/forms/file-upload.js +3 -2
- package/dist/forms/input-group.js +11 -2
- package/dist/forms/multi-select.js +4 -3
- package/dist/forms/number-field.js +7 -3
- package/dist/forms/otp-field.js +15 -6
- package/dist/forms/password-input.js +4 -2
- package/dist/forms/radio-group.js +10 -4
- package/dist/forms/rating.js +2 -1
- package/dist/forms/scrub-input.js +2 -1
- package/dist/forms/search-input.js +2 -1
- package/dist/forms/select.js +10 -4
- package/dist/forms/slider.js +9 -3
- package/dist/forms/switch.js +9 -3
- package/dist/forms/tags-input.js +4 -3
- package/dist/forms/textarea.js +3 -1
- package/dist/forms/toggle-group.js +2 -1
- package/dist/forms/toggle.js +5 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/instruments/_data-row.js +2 -1
- package/dist/instruments/app-window-frame.js +1 -1
- package/dist/instruments/code-block.js +8 -2
- package/dist/instruments/group-bar.js +1 -1
- package/dist/instruments/ledger.js +6 -2
- package/dist/instruments/log-viewer.js +4 -3
- package/dist/instruments/meter.js +2 -1
- package/dist/instruments/progress.js +9 -3
- package/dist/instruments/seam-grid.js +5 -3
- package/dist/instruments/stat.js +13 -4
- package/dist/instruments/table.js +29 -10
- package/dist/instruments/terminal-frame.js +4 -2
- package/dist/instruments/usage-chart.js +1 -1
- package/dist/layout/_collapse.js +26 -5
- package/dist/layout/accordion.js +2 -1
- package/dist/layout/bento.js +7 -4
- package/dist/layout/breadcrumb.js +10 -5
- package/dist/layout/card.js +14 -7
- package/dist/layout/carousel.js +3 -2
- package/dist/layout/collapsible.js +6 -1
- package/dist/layout/container.js +2 -1
- package/dist/layout/description-list.js +4 -1
- package/dist/layout/frames.js +11 -5
- package/dist/layout/item.js +3 -2
- package/dist/layout/link.d.ts +30 -0
- package/dist/layout/link.js +22 -3
- package/dist/layout/pagination.js +8 -8
- package/dist/layout/preview.d.ts +32 -12
- package/dist/layout/preview.js +149 -40
- package/dist/layout/resizable.js +2 -1
- package/dist/layout/sidebar.js +11 -3
- package/dist/layout/stepper.js +6 -2
- package/dist/lib/cn.js +29 -2
- package/dist/midi/piano-keyboard.js +3 -2
- package/dist/midi/spectrum-visualizer.js +1 -1
- package/dist/midi/threshold-rail.js +2 -1
- package/dist/midi/timeline-ruler.js +1 -1
- package/dist/overlays/_surface.d.ts +74 -14
- package/dist/overlays/_surface.js +87 -14
- package/dist/overlays/alert-dialog.js +1 -1
- package/dist/overlays/command-palette.js +28 -9
- package/dist/overlays/dialog.d.ts +5 -0
- package/dist/overlays/dialog.js +6 -1
- package/dist/overlays/drawer.js +8 -1
- package/dist/overlays/hover-card.js +3 -1
- package/dist/overlays/info-tip.js +2 -1
- package/dist/overlays/menubar.js +3 -1
- package/dist/overlays/popover.js +3 -1
- package/dist/overlays/toast.js +14 -6
- package/dist/overlays/tooltip.js +3 -1
- package/dist/primitives/avatar.js +6 -2
- package/dist/primitives/button.d.ts +16 -1
- package/dist/primitives/button.js +44 -12
- package/dist/primitives/chip.d.ts +11 -29
- package/dist/primitives/chip.js +40 -50
- package/dist/primitives/icon-button.d.ts +1 -1
- package/dist/primitives/kbd.d.ts +6 -0
- package/dist/primitives/kbd.js +10 -1
- package/dist/primitives/skeleton.js +2 -1
- package/dist/system/_focus-ring-field.js +29 -0
- package/dist/system/_focus-ring.js +125 -0
- package/dist/system/_paint-glow.js +22 -3
- package/dist/system/_paint-rest-shade.js +32 -0
- package/dist/system/_paint-rim.js +22 -4
- package/dist/system/_paint-stroke-surface-1.js +1 -1
- package/dist/system/_paint-stroke-surface-2.js +14 -1
- package/dist/system/_paint-texture.js +5 -2
- package/dist/system/_style-accordion-rule.js +32 -0
- package/dist/system/_style-app-bar.js +65 -0
- package/dist/system/_style-avatar.js +20 -0
- package/dist/system/_style-band.js +57 -0
- package/dist/system/_style-body-leading.js +19 -0
- package/dist/system/_style-body-size.js +30 -0
- package/dist/system/_style-body-weight.js +24 -0
- package/dist/system/_style-body.js +32 -0
- package/dist/system/_style-caption-ink.js +17 -0
- package/dist/system/_style-caption-size.js +19 -0
- package/dist/system/_style-caption-weight.js +18 -0
- package/dist/system/_style-caption.js +19 -0
- package/dist/system/_style-card-gap.js +14 -0
- package/dist/system/_style-card-pad.js +43 -0
- package/dist/system/_style-cell.js +18 -0
- package/dist/system/_style-check-glyph.js +14 -0
- package/dist/system/_style-check.js +40 -0
- package/dist/system/_style-chip.js +143 -0
- package/dist/system/_style-choice-gap.js +15 -0
- package/dist/system/_style-code.js +13 -0
- package/dist/system/_style-collapse.js +94 -0
- package/dist/system/_style-control-face.js +29 -0
- package/dist/system/_style-control-gap.js +14 -0
- package/dist/system/_style-control-label.js +29 -0
- package/dist/system/_style-control-step.js +22 -0
- package/dist/system/_style-control.js +76 -0
- package/dist/system/_style-crumb.js +44 -0
- package/dist/system/_style-data-face.js +28 -0
- package/dist/system/_style-day.js +25 -0
- package/dist/system/_style-description.js +23 -0
- package/dist/system/_style-disabled.js +70 -0
- package/dist/system/_style-disclosure.js +21 -0
- package/dist/system/_style-empty-state.js +42 -0
- package/dist/system/_style-eyebrow.js +43 -0
- package/dist/system/_style-field-chassis.js +38 -0
- package/dist/system/_style-field-gap.js +12 -0
- package/dist/system/_style-footer-rule.js +47 -0
- package/dist/system/_style-glyph-ink.js +20 -0
- package/dist/system/_style-glyph-opacity.js +20 -0
- package/dist/system/_style-glyph-size.js +21 -0
- package/dist/system/_style-group-gap.js +15 -0
- package/dist/system/_style-group-label-pad.js +14 -0
- package/dist/system/_style-group-label.js +24 -0
- package/dist/system/_style-gutter.js +17 -0
- package/dist/system/_style-help-ink.js +14 -0
- package/dist/system/_style-help.js +38 -0
- package/dist/system/_style-hover-card-width.js +15 -0
- package/dist/system/_style-input-face.js +34 -0
- package/dist/system/_style-kbd.js +58 -0
- package/dist/system/_style-label-case.js +36 -0
- package/dist/system/_style-label-face.js +32 -0
- package/dist/system/_style-label-ink.js +29 -0
- package/dist/system/_style-label-leading.js +14 -0
- package/dist/system/_style-label-size.js +36 -0
- package/dist/system/_style-label-tracking.js +45 -0
- package/dist/system/_style-label-weight.js +40 -0
- package/dist/system/_style-lede.js +49 -0
- package/dist/system/_style-link.js +58 -0
- package/dist/system/_style-menu.js +43 -0
- package/dist/system/_style-meter.js +15 -0
- package/dist/system/_style-nav-item.js +41 -0
- package/dist/system/_style-nav-menu.js +48 -0
- package/dist/system/_style-nav-voice.js +43 -0
- package/dist/system/_style-option.js +99 -0
- package/dist/system/_style-otp.js +15 -0
- package/dist/system/_style-outline-hover.js +18 -0
- package/dist/system/_style-overlay-title.js +35 -0
- package/dist/system/_style-page-title.js +48 -0
- package/dist/system/_style-page.js +17 -0
- package/dist/system/_style-palette.js +18 -0
- package/dist/system/_style-panel.js +21 -0
- package/dist/system/_style-popover-pad.js +13 -0
- package/dist/system/_style-popover-width.js +15 -0
- package/dist/system/_style-quiet-ink.js +13 -0
- package/dist/system/_style-radio.js +19 -0
- package/dist/system/_style-row-disabled.js +17 -0
- package/dist/system/_style-row-pad.js +13 -0
- package/dist/system/_style-row.js +30 -0
- package/dist/system/_style-scrollbar.js +19 -0
- package/dist/system/_style-seam.js +43 -0
- package/dist/system/_style-section-rule.js +26 -0
- package/dist/system/_style-segment-pad.js +15 -0
- package/dist/system/_style-segment.js +30 -0
- package/dist/system/_style-segmented-control.js +86 -0
- package/dist/system/_style-selected.js +36 -0
- package/dist/system/_style-skeleton.js +15 -0
- package/dist/system/_style-slider.js +26 -0
- package/dist/system/_style-stage-marks.js +26 -0
- package/dist/system/_style-stat.js +31 -0
- package/dist/system/_style-stepper.js +16 -0
- package/dist/system/_style-switch.js +26 -0
- package/dist/system/_style-tab-hover.js +15 -0
- package/dist/system/_style-tab.js +71 -0
- package/dist/system/_style-text-focus.js +26 -0
- package/dist/system/_style-textarea.js +21 -0
- package/dist/system/_style-title.js +37 -0
- package/dist/system/_style-toast.js +22 -0
- package/dist/system/_style-toggle.js +50 -0
- package/dist/system/_style-toolbar.js +23 -0
- package/dist/system/_style-tooltip.js +46 -0
- package/dist/system/density.d.ts +15 -5
- package/dist/system/density.js +188 -25
- package/dist/system/index.d.ts +2 -2
- package/dist/system/index.js +2 -2
- package/dist/system/overrides.d.ts +1 -0
- package/dist/system/overrides.js +151 -3
- package/dist/system/portal.d.ts +3 -2
- package/dist/system/portal.js +22 -10
- package/dist/system/prepaint.d.ts +21 -5
- package/dist/system/prepaint.js +3 -1
- package/dist/system/published.d.ts +1 -0
- package/dist/system/published.js +131 -0
- package/dist/system/theme-provider.d.ts +118 -21
- package/dist/system/theme-provider.js +362 -73
- package/dist/system/theme-registry.d.ts +2 -1
- package/dist/system/theme-registry.js +27 -10
- package/dist/system/use-density.js +4 -3
- package/dist/system/use-theme.d.ts +5 -2
- package/dist/system/use-theme.js +7 -4
- package/dist/system/vocabulary.js +2 -2
- package/dist/theming/create-theme.js +12 -6
- package/dist/theming/serialize.d.ts +34 -2
- package/dist/theming/serialize.js +86 -4
- package/manifest/components/accordion.json +29 -2
- package/manifest/components/agent-pile.json +3 -0
- package/manifest/components/alert-dialog.json +36 -3
- package/manifest/components/app-bar.json +61 -2
- package/manifest/components/app-shell.json +5 -0
- package/manifest/components/ask-box.json +3 -1
- package/manifest/components/autocomplete.json +85 -1
- package/manifest/components/avatar-group.json +7 -0
- package/manifest/components/avatar.json +7 -0
- package/manifest/components/band.json +7 -3
- package/manifest/components/bento.json +12 -1
- package/manifest/components/breadcrumb.json +12 -0
- package/manifest/components/button.json +43 -4
- package/manifest/components/calendar.json +13 -0
- package/manifest/components/card.json +23 -1
- package/manifest/components/carousel.json +4 -1
- package/manifest/components/channel-matrix.json +37 -3
- package/manifest/components/chart-tooltip-content.json +35 -3
- package/manifest/components/chat-empty-state.json +3 -1
- package/manifest/components/checkbox-group.json +36 -1
- package/manifest/components/checkbox.json +36 -1
- package/manifest/components/chip.json +22 -1
- package/manifest/components/clamp.json +3 -1
- package/manifest/components/code-block.json +10 -1
- package/manifest/components/collapsible.json +35 -2
- package/manifest/components/color-area.json +4 -2
- package/manifest/components/color-field.json +29 -0
- package/manifest/components/color-picker.json +29 -0
- package/manifest/components/color-slider.json +3 -1
- package/manifest/components/colors-section.json +9 -1
- package/manifest/components/combobox.json +85 -1
- package/manifest/components/command-palette.json +39 -3
- package/manifest/components/composer-actions.json +3 -0
- package/manifest/components/composer-attach-button.json +3 -0
- package/manifest/components/composer-attachment-chip.json +3 -0
- package/manifest/components/composer-attachments.json +3 -0
- package/manifest/components/composer-bar.json +3 -0
- package/manifest/components/composer-command-item.json +3 -0
- package/manifest/components/composer-context.json +3 -0
- package/manifest/components/composer-input.json +3 -0
- package/manifest/components/composer-menu-item.json +3 -0
- package/manifest/components/composer-menu.json +3 -0
- package/manifest/components/composer-model-item.json +3 -0
- package/manifest/components/composer-model-trigger.json +3 -0
- package/manifest/components/composer-person-item.json +3 -0
- package/manifest/components/composer-send.json +3 -0
- package/manifest/components/composer-toolbar.json +3 -0
- package/manifest/components/composer-voice-button.json +3 -0
- package/manifest/components/composer-voice.json +3 -0
- package/manifest/components/composer.json +29 -0
- package/manifest/components/confidence-marker.json +3 -1
- package/manifest/components/container.json +2 -1
- package/manifest/components/context-menu.json +35 -3
- package/manifest/components/conversation-search.json +3 -1
- package/manifest/components/cue-mark.json +2 -2
- package/manifest/components/cue-portal-frame.json +1 -1
- package/manifest/components/data-row.json +3 -1
- package/manifest/components/data-tree.json +3 -1
- package/manifest/components/date-field.json +28 -0
- package/manifest/components/date-picker.json +32 -0
- package/manifest/components/date-range-picker.json +32 -0
- package/manifest/components/delegation-card.json +3 -1
- package/manifest/components/density.json +15 -7
- package/manifest/components/description-list.json +6 -1
- package/manifest/components/dialog.json +37 -3
- package/manifest/components/disclosure.json +35 -2
- package/manifest/components/dmx-bar.json +34 -3
- package/manifest/components/dmx-strip.json +34 -3
- package/manifest/components/drawer.json +36 -3
- package/manifest/components/dropdown-menu.json +35 -3
- package/manifest/components/edit-message.json +3 -1
- package/manifest/components/elements-command-palette.json +3 -1
- package/manifest/components/elements-composer.json +3 -0
- package/manifest/components/empty-state-composer.json +3 -1
- package/manifest/components/empty-state-greeting.json +3 -1
- package/manifest/components/empty-state-suggestion.json +3 -1
- package/manifest/components/empty-state-suggestions.json +3 -1
- package/manifest/components/empty-state.json +13 -0
- package/manifest/components/env-var-input.json +28 -0
- package/manifest/components/export-dialog.json +6 -1
- package/manifest/components/eyebrow.json +13 -2
- package/manifest/components/feedback-dialog.json +3 -0
- package/manifest/components/field-description.json +15 -0
- package/manifest/components/field-error.json +15 -0
- package/manifest/components/field-label.json +16 -1
- package/manifest/components/field.json +15 -0
- package/manifest/components/file-upload.json +3 -0
- package/manifest/components/footer.json +14 -1
- package/manifest/components/frames.json +14 -1
- package/manifest/components/hover-card.json +37 -3
- package/manifest/components/info-tip.json +3 -0
- package/manifest/components/input-group.json +31 -0
- package/manifest/components/input.json +29 -0
- package/manifest/components/item.json +3 -1
- package/manifest/components/kbd.json +12 -1
- package/manifest/components/ledger.json +9 -2
- package/manifest/components/link.json +33 -0
- package/manifest/components/log-viewer.json +3 -0
- package/manifest/components/map-answer.json +3 -1
- package/manifest/components/markdown-text.json +3 -0
- package/manifest/components/menubar.json +38 -4
- package/manifest/components/message-list.json +3 -0
- package/manifest/components/message.json +6 -1
- package/manifest/components/meter.json +1 -0
- package/manifest/components/mobile-composer.json +3 -1
- package/manifest/components/multi-select.json +86 -1
- package/manifest/components/musical-time-input.json +29 -0
- package/manifest/components/navigation-menu.json +48 -3
- package/manifest/components/node-card.json +3 -0
- package/manifest/components/number-field.json +30 -0
- package/manifest/components/otp-field.json +29 -0
- package/manifest/components/page-shell.json +14 -0
- package/manifest/components/pagination.json +22 -0
- package/manifest/components/panel-header.json +13 -0
- package/manifest/components/panel.json +14 -1
- package/manifest/components/password-input.json +28 -0
- package/manifest/components/permission-scopes.json +3 -1
- package/manifest/components/piano-keyboard.json +3 -0
- package/manifest/components/popover.json +37 -3
- package/manifest/components/preset-section.json +9 -1
- package/manifest/components/preview.json +24 -10
- package/manifest/components/progress.json +10 -1
- package/manifest/components/prompt-library.json +3 -1
- package/manifest/components/queue-dock.json +3 -1
- package/manifest/components/radio-group.json +14 -0
- package/manifest/components/radio.json +14 -0
- package/manifest/components/rating.json +4 -1
- package/manifest/components/reasoning-panel.json +3 -1
- package/manifest/components/recommendation-card.json +1 -1
- package/manifest/components/resizable.json +4 -1
- package/manifest/components/revert-dock.json +3 -1
- package/manifest/components/row.json +8 -1
- package/manifest/components/scroll-area.json +6 -2
- package/manifest/components/scrollable-tabs-list.json +21 -0
- package/manifest/components/scrub-input.json +28 -0
- package/manifest/components/seam-cell.json +1 -0
- package/manifest/components/seam-grid.json +1 -0
- package/manifest/components/seam-list.json +8 -1
- package/manifest/components/search-input.json +28 -0
- package/manifest/components/section-header.json +15 -2
- package/manifest/components/segmented-control.json +17 -0
- package/manifest/components/select.json +42 -0
- package/manifest/components/settings-panel.json +3 -0
- package/manifest/components/shape-section.json +9 -1
- package/manifest/components/sheet.json +35 -3
- package/manifest/components/shimmer-label.json +3 -0
- package/manifest/components/sidebar.json +19 -2
- package/manifest/components/skeleton.json +2 -0
- package/manifest/components/slider.json +16 -0
- package/manifest/components/sources.json +3 -1
- package/manifest/components/stat.json +17 -0
- package/manifest/components/status-bar.json +4 -0
- package/manifest/components/stepper.json +8 -0
- package/manifest/components/swap-label.json +3 -0
- package/manifest/components/switch.json +30 -0
- package/manifest/components/table-scroll-region.json +22 -2
- package/manifest/components/table.json +22 -2
- package/manifest/components/tabs.json +22 -1
- package/manifest/components/tags-input.json +86 -1
- package/manifest/components/terminal-frame.json +3 -0
- package/manifest/components/textarea.json +31 -0
- package/manifest/components/theme-configurator.json +35 -3
- package/manifest/components/theme-provider.json +31 -19
- package/manifest/components/thread-search.json +3 -1
- package/manifest/components/threshold-rail.json +3 -0
- package/manifest/components/time-field.json +28 -0
- package/manifest/components/toast.json +39 -2
- package/manifest/components/toggle-group.json +2 -1
- package/manifest/components/toggle.json +32 -0
- package/manifest/components/token-editor.json +6 -1
- package/manifest/components/tool-call-card.json +9 -2
- package/manifest/components/tool-call.json +3 -1
- package/manifest/components/tool-timeline.json +3 -1
- package/manifest/components/toolbar.json +22 -1
- package/manifest/components/tooltip.json +42 -3
- package/manifest/components/tree-visibility-toggle.json +3 -0
- package/manifest/components/tree.json +3 -0
- package/manifest/components/universe-grid.json +3 -0
- package/manifest/components/voice-conversation.json +3 -0
- package/manifest/components/work-collapse.json +3 -1
- package/manifest/fixtures.json +15 -0
- package/manifest/manifest.json +210 -190
- package/manifest/tokens.json +395 -4
- package/package.json +6 -6
|
@@ -1,13 +1,30 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { published, useReadSelected } from "./published.js";
|
|
2
3
|
import "./vocabulary.js";
|
|
3
4
|
import * as React from "react";
|
|
4
5
|
//#region src/system/theme-registry.tsx
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Internal: consumers read it through the three hooks. `null` outside a provider.
|
|
8
|
+
*
|
|
9
|
+
* Carried as a `Published` (see `published.ts`): the registry is built for the
|
|
10
|
+
* active theme, which a root's restore can change while streamed boundaries
|
|
11
|
+
* below are still hydrating.
|
|
12
|
+
*/
|
|
13
|
+
const ThemeRegistryContext = React.createContext(published(null));
|
|
14
|
+
/** What a slice reads outside any provider — never a value a registry can hold. */
|
|
15
|
+
const NO_REGISTRY = Symbol("no registry");
|
|
16
|
+
/**
|
|
17
|
+
* One slice of the registry. The registry is rebuilt for every active theme,
|
|
18
|
+
* but the themes a registry lists do not change with it — so a `useThemes()`
|
|
19
|
+
* reader sits out the restore entirely: the rebuilt registry is posted beside
|
|
20
|
+
* the context (see `published.ts`), and this reader re-renders only if its own
|
|
21
|
+
* slice moved. An edit that switches the theme moves the context itself, and
|
|
22
|
+
* that re-renders every reader of it, as any context does.
|
|
23
|
+
*/
|
|
24
|
+
function useRegistry(hook, select) {
|
|
25
|
+
const slice = useReadSelected(ThemeRegistryContext, (registry) => registry === null ? NO_REGISTRY : select(registry));
|
|
26
|
+
if (slice === NO_REGISTRY) throw new Error(`${hook}() must be called inside a <ThemeProvider>.`);
|
|
27
|
+
return slice;
|
|
11
28
|
}
|
|
12
29
|
/**
|
|
13
30
|
* Every registered manifest, in registration order.
|
|
@@ -27,7 +44,7 @@ function useRegistry(hook) {
|
|
|
27
44
|
* ));
|
|
28
45
|
*/
|
|
29
46
|
function useThemes() {
|
|
30
|
-
return useRegistry("useThemes").themes;
|
|
47
|
+
return useRegistry("useThemes", (registry) => registry.themes);
|
|
31
48
|
}
|
|
32
49
|
/**
|
|
33
50
|
* The rungs an app may offer right now: the base five, then the ACTIVE theme's
|
|
@@ -48,10 +65,10 @@ function useThemes() {
|
|
|
48
65
|
* />
|
|
49
66
|
*/
|
|
50
67
|
function useDensities() {
|
|
51
|
-
return useRegistry("useDensities").densities;
|
|
68
|
+
return useRegistry("useDensities", (registry) => registry.densities);
|
|
52
69
|
}
|
|
53
70
|
/**
|
|
54
|
-
* The font pairings, by the same rule: the base
|
|
71
|
+
* The font pairings, by the same rule: the base twelve, then the active theme's.
|
|
55
72
|
*
|
|
56
73
|
* @throws If called outside a `<ThemeProvider>`.
|
|
57
74
|
* @example
|
|
@@ -60,7 +77,7 @@ function useDensities() {
|
|
|
60
77
|
* const sans = useFonts().find((f) => f.name === font)?.stacks["font-sans"];
|
|
61
78
|
*/
|
|
62
79
|
function useFonts() {
|
|
63
|
-
return useRegistry("useFonts").fonts;
|
|
80
|
+
return useRegistry("useFonts", (registry) => registry.fonts);
|
|
64
81
|
}
|
|
65
82
|
//#endregion
|
|
66
83
|
export { ThemeRegistryContext, useDensities, useFonts, useThemes };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
|
|
3
|
+
import { useRead } from "./published.js";
|
|
3
4
|
import { DEFAULT_DENSITY, DensityContext } from "./density.js";
|
|
4
5
|
import { warnOnce } from "./vocabulary.js";
|
|
5
6
|
import { ThemeRegistryContext } from "./theme-registry.js";
|
|
@@ -181,7 +182,7 @@ function measureControlHeight(ladder, density, theme, size) {
|
|
|
181
182
|
* });
|
|
182
183
|
*/
|
|
183
184
|
function useDensity() {
|
|
184
|
-
return
|
|
185
|
+
return useRead(DensityContext) ?? "compact";
|
|
185
186
|
}
|
|
186
187
|
/**
|
|
187
188
|
* The pixel height of a control at the ambient density — what a virtualiser or a
|
|
@@ -208,8 +209,8 @@ function useDensity() {
|
|
|
208
209
|
*/
|
|
209
210
|
function useControlHeight(size = "md") {
|
|
210
211
|
const density = useDensity();
|
|
211
|
-
const theme =
|
|
212
|
-
const ladder = ladderFor(
|
|
212
|
+
const theme = useRead(ThemeContext)?.theme ?? null;
|
|
213
|
+
const ladder = ladderFor(useRead(ThemeRegistryContext), density);
|
|
213
214
|
const { sm, md, lg } = ladder;
|
|
214
215
|
const [height, setHeight] = React.useState(() => ladder[size] * ASSUMED_ROOT_FONT_SIZE);
|
|
215
216
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -3,8 +3,8 @@ import { ThemeContextValue } from "./theme-provider.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* Read and drive the ambient theme state.
|
|
5
5
|
*
|
|
6
|
-
* Returns `{ theme, manifest, density, mode, font, styleSet, resolvedMode,
|
|
7
|
-
* setTheme, setDensity, setMode, setFont, setStyleSet }`.
|
|
6
|
+
* Returns `{ theme, manifest, density, mode, font, styleSet, paint, resolvedMode,
|
|
7
|
+
* setTheme, setDensity, setMode, setFont, setStyleSet, setPaint }`.
|
|
8
8
|
* `density` here is the *provider's* level — a nested `<Density>` island does not
|
|
9
9
|
* change it; use `useDensity()` when you want the level that actually applies
|
|
10
10
|
* where you are. `font` is the pairing the provider holds; it has no island, so
|
|
@@ -19,6 +19,9 @@ import { ThemeContextValue } from "./theme-provider.js";
|
|
|
19
19
|
* provider included — exactly as the DOM resolves it, so this and the set a
|
|
20
20
|
* portal or a `<Preview>` stage carries are one value.
|
|
21
21
|
*
|
|
22
|
+
* `paint` is the pack in force on the same terms: `null` when nothing has
|
|
23
|
+
* chosen one, and the pack stamped around a provider that names none.
|
|
24
|
+
*
|
|
22
25
|
* @throws If called outside a `<ThemeProvider>`. Theme state is never guessed:
|
|
23
26
|
* a missing provider is a wiring bug, not a fallback situation.
|
|
24
27
|
* @example
|
package/dist/system/use-theme.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { useRead } from "./published.js";
|
|
2
3
|
import { ThemeContext } from "./theme-provider.js";
|
|
3
|
-
import * as React from "react";
|
|
4
4
|
//#region src/system/use-theme.ts
|
|
5
5
|
/**
|
|
6
6
|
* Read and drive the ambient theme state.
|
|
7
7
|
*
|
|
8
|
-
* Returns `{ theme, manifest, density, mode, font, styleSet, resolvedMode,
|
|
9
|
-
* setTheme, setDensity, setMode, setFont, setStyleSet }`.
|
|
8
|
+
* Returns `{ theme, manifest, density, mode, font, styleSet, paint, resolvedMode,
|
|
9
|
+
* setTheme, setDensity, setMode, setFont, setStyleSet, setPaint }`.
|
|
10
10
|
* `density` here is the *provider's* level — a nested `<Density>` island does not
|
|
11
11
|
* change it; use `useDensity()` when you want the level that actually applies
|
|
12
12
|
* where you are. `font` is the pairing the provider holds; it has no island, so
|
|
@@ -21,6 +21,9 @@ import * as React from "react";
|
|
|
21
21
|
* provider included — exactly as the DOM resolves it, so this and the set a
|
|
22
22
|
* portal or a `<Preview>` stage carries are one value.
|
|
23
23
|
*
|
|
24
|
+
* `paint` is the pack in force on the same terms: `null` when nothing has
|
|
25
|
+
* chosen one, and the pack stamped around a provider that names none.
|
|
26
|
+
*
|
|
24
27
|
* @throws If called outside a `<ThemeProvider>`. Theme state is never guessed:
|
|
25
28
|
* a missing provider is a wiring bug, not a fallback situation.
|
|
26
29
|
* @example
|
|
@@ -28,7 +31,7 @@ import * as React from "react";
|
|
|
28
31
|
* <Switch checked={resolvedMode === "light"} onCheckedChange={(on) => setMode(on ? "light" : "dark")} />
|
|
29
32
|
*/
|
|
30
33
|
function useTheme() {
|
|
31
|
-
const context =
|
|
34
|
+
const context = useRead(ThemeContext);
|
|
32
35
|
if (context === null) throw new Error("useTheme() must be called inside a <ThemeProvider>.");
|
|
33
36
|
return context;
|
|
34
37
|
}
|
|
@@ -69,7 +69,7 @@ function vocabulary(themes) {
|
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
|
-
* Whether a value is one of the
|
|
72
|
+
* Whether a value is one of the eight style sets.
|
|
73
73
|
*
|
|
74
74
|
* A standalone function rather than a member of {@link Vocabulary}, and the
|
|
75
75
|
* asymmetry is the point: every other axis is asked *under a theme*, because a
|
|
@@ -83,7 +83,7 @@ function isStyleSet(value) {
|
|
|
83
83
|
return typeof value === "string" && STYLE_SETS.includes(value);
|
|
84
84
|
}
|
|
85
85
|
/**
|
|
86
|
-
* Whether a value is one of the
|
|
86
|
+
* Whether a value is one of the paint packs.
|
|
87
87
|
*
|
|
88
88
|
* Standalone for exactly the reason {@link isStyleSet} is, and the reason reads
|
|
89
89
|
* the same one axis over: no theme can add a pack. The vocabulary is emitted by
|
|
@@ -416,7 +416,8 @@ function radiusBlocks(name, radiusScale) {
|
|
|
416
416
|
blocks.push({
|
|
417
417
|
selector: themeSelector(name, {
|
|
418
418
|
density: level,
|
|
419
|
-
pair: true
|
|
419
|
+
pair: true,
|
|
420
|
+
follows: true
|
|
420
421
|
}),
|
|
421
422
|
sections: [{ declarations: [[property, scaled(radiusScale, scale)]] }]
|
|
422
423
|
});
|
|
@@ -485,12 +486,15 @@ function createTheme(anchors) {
|
|
|
485
486
|
}];
|
|
486
487
|
const blocks = [
|
|
487
488
|
{
|
|
488
|
-
selector: themeSelector(name),
|
|
489
|
+
selector: themeSelector(name, { follows: true }),
|
|
489
490
|
colorScheme: "dark",
|
|
490
491
|
sections: darkSections
|
|
491
492
|
},
|
|
492
493
|
...lightSections === null ? [] : [{
|
|
493
|
-
selector: themeSelector(name, {
|
|
494
|
+
selector: themeSelector(name, {
|
|
495
|
+
mode: "light",
|
|
496
|
+
follows: true
|
|
497
|
+
}),
|
|
494
498
|
colorScheme: "light",
|
|
495
499
|
sections: lightSections
|
|
496
500
|
}],
|
|
@@ -504,15 +508,17 @@ function createTheme(anchors) {
|
|
|
504
508
|
tokens: light.colors,
|
|
505
509
|
provisional: light.provisional
|
|
506
510
|
}]];
|
|
511
|
+
const explicitCss = serializeThemeCss(blocks, { banner: `@cueplusplus/ui — theme "${name}"` }).trimEnd();
|
|
512
|
+
const systemScheme = lightSections === null ? "dark" : "light dark";
|
|
507
513
|
return {
|
|
508
514
|
name,
|
|
509
|
-
css: `${
|
|
515
|
+
css: `${explicitCss}\n\n${serializeSystemModeAliases(name, [{
|
|
510
516
|
mode: "dark",
|
|
511
|
-
colorScheme:
|
|
517
|
+
colorScheme: systemScheme,
|
|
512
518
|
sections: darkPaletteSections
|
|
513
519
|
}, {
|
|
514
520
|
mode: "light",
|
|
515
|
-
colorScheme:
|
|
521
|
+
colorScheme: systemScheme,
|
|
516
522
|
sections: lightSections ?? darkPaletteSections
|
|
517
523
|
}])}\n`,
|
|
518
524
|
tokens: Object.fromEntries(darkSections.flatMap((section) => section.declarations)),
|
|
@@ -56,8 +56,13 @@ declare function assertCssValue(name: string, value: string): string;
|
|
|
56
56
|
*/
|
|
57
57
|
declare function tokenProperty(name: string): string;
|
|
58
58
|
interface ThemeSelectorOptions {
|
|
59
|
-
/**
|
|
60
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Cross with the mode axis. `"dark"` is the base block and needs none;
|
|
61
|
+
* `"light"` does, and so does `"system"` — the block a theme writes once
|
|
62
|
+
* inside each `prefers-color-scheme` query, for a document that stamps
|
|
63
|
+
* `data-mode="system"`.
|
|
64
|
+
*/
|
|
65
|
+
mode?: "dark" | "light" | "system";
|
|
61
66
|
/** Cross with the density axis. Used only for the radius multiplier. */
|
|
62
67
|
density?: Density;
|
|
63
68
|
/**
|
|
@@ -76,6 +81,31 @@ interface ThemeSelectorOptions {
|
|
|
76
81
|
* match the root itself.
|
|
77
82
|
*/
|
|
78
83
|
pair?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Put the follower's twins in front of the selector, one a line, as every
|
|
86
|
+
* stylesheet this library and `@cueplusplus/theme-tools` write does.
|
|
87
|
+
*
|
|
88
|
+
* Under a root `ThemeProvider` that persists, a nested provider or a
|
|
89
|
+
* `Preview` stage that names a theme and not a mode (or a mode and not a
|
|
90
|
+
* theme, or no rung) leaves the axis it did not name to `<html>` until it
|
|
91
|
+
* has mounted: it stamps no `data-mode` (or `data-theme`, or `data-density`)
|
|
92
|
+
* and carries `data-cue-follows` naming what it left out, because on the
|
|
93
|
+
* server the only value it could stamp is the root's default, while `<html>`
|
|
94
|
+
* already carries the visitor's. A compound block such as
|
|
95
|
+
* `[data-theme="x"][data-mode="light"]` does not match such an island; its
|
|
96
|
+
* twin, keyed on `<html>`'s value and the marker, does — at the same
|
|
97
|
+
* specificity, so every precedence relation carries over. Without it a
|
|
98
|
+
* hand-assembled theme paints its dark block for a light visitor until the
|
|
99
|
+
* island mounts.
|
|
100
|
+
*
|
|
101
|
+
* The twins depend on which block this is: the dark block's reaches an
|
|
102
|
+
* island that follows `<html>`'s theme; the light and system blocks' also
|
|
103
|
+
* reach one that follows `<html>`'s mode; a rung's reach one that follows
|
|
104
|
+
* `<html>`'s rung. A mode crossed with a rung is refused with a `TypeError`:
|
|
105
|
+
* an island can follow either axis without the other, so no single list is
|
|
106
|
+
* right for the compound.
|
|
107
|
+
*/
|
|
108
|
+
follows?: boolean;
|
|
79
109
|
}
|
|
80
110
|
/**
|
|
81
111
|
* The selector a theme's declarations live under.
|
|
@@ -89,6 +119,8 @@ interface ThemeSelectorOptions {
|
|
|
89
119
|
* @returns The CSS selector.
|
|
90
120
|
* @example
|
|
91
121
|
* themeSelector("acme", { mode: "light" }); // → '[data-theme="acme"][data-mode="light"]'
|
|
122
|
+
* themeSelector("acme", { mode: "light", follows: true });
|
|
123
|
+
* // → ':where(:root[data-theme="acme"]) [data-mode="light"][data-cue-follows~="theme"],\n:where(:root[data-mode="light"]) [data-theme="acme"][data-cue-follows~="mode"],\n[data-theme="acme"][data-mode="light"]'
|
|
92
124
|
* themeSelector("acme", { density: "compact", pair: true });
|
|
93
125
|
* // → '[data-theme="acme"] [data-density="compact"]:where([data-cue-theme="acme"]), [data-theme="acme"] [data-density="compact"]:where(:not([data-cue-theme]):not([data-theme]:not([data-theme="acme"])):not([data-theme="acme"] [data-theme]:not([data-theme="acme"]) *)), [data-theme="acme"][data-density="compact"]'
|
|
94
126
|
*/
|
|
@@ -83,18 +83,93 @@ function tokenProperty(name) {
|
|
|
83
83
|
* @returns The CSS selector.
|
|
84
84
|
* @example
|
|
85
85
|
* themeSelector("acme", { mode: "light" }); // → '[data-theme="acme"][data-mode="light"]'
|
|
86
|
+
* themeSelector("acme", { mode: "light", follows: true });
|
|
87
|
+
* // → ':where(:root[data-theme="acme"]) [data-mode="light"][data-cue-follows~="theme"],\n:where(:root[data-mode="light"]) [data-theme="acme"][data-cue-follows~="mode"],\n[data-theme="acme"][data-mode="light"]'
|
|
86
88
|
* themeSelector("acme", { density: "compact", pair: true });
|
|
87
89
|
* // → '[data-theme="acme"] [data-density="compact"]:where([data-cue-theme="acme"]), [data-theme="acme"] [data-density="compact"]:where(:not([data-cue-theme]):not([data-theme]:not([data-theme="acme"])):not([data-theme="acme"] [data-theme]:not([data-theme="acme"]) *)), [data-theme="acme"][data-density="compact"]'
|
|
88
90
|
*/
|
|
89
91
|
function themeSelector(name, options = {}) {
|
|
92
|
+
const { mode, density, follows } = options;
|
|
93
|
+
const crossed = mode === "light" || mode === "system" ? mode : null;
|
|
94
|
+
const selector = compoundSelector(name, options);
|
|
95
|
+
if (follows !== true) return selector;
|
|
96
|
+
if (density !== void 0 && crossed !== null) throw new TypeError(`themeSelector: follows cannot be combined with mode "${crossed}" and density "${density}"; an island can follow either axis without the other`);
|
|
97
|
+
return [...density !== void 0 ? [rungFollowerSelector(name, density), followerSelector(name, "density", density)] : crossed === null ? [themeFollowerSelector(name, null)] : [themeFollowerSelector(name, crossed), followerSelector(name, "mode", crossed)], selector].join(",\n");
|
|
98
|
+
}
|
|
99
|
+
/** {@link themeSelector} without the twins: the compound, and the paired forms beside it. */
|
|
100
|
+
function compoundSelector(name, options) {
|
|
90
101
|
const { mode, density, pair } = options;
|
|
91
102
|
const themeAttr = `[data-theme="${name}"]`;
|
|
92
|
-
const theme = `${themeAttr}${mode === "light" ?
|
|
103
|
+
const theme = `${themeAttr}${mode === "light" || mode === "system" ? `[data-mode="${mode}"]` : ""}`;
|
|
93
104
|
if (density === void 0) return theme;
|
|
94
105
|
const crossed = `[data-density="${density}"]`;
|
|
95
106
|
if (pair !== true) return `${theme}${crossed}`;
|
|
96
107
|
return `${`${theme} ${crossed}:where([data-cue-theme="${name}"])`}, ${`${theme} ${crossed}:where(:not([data-cue-theme]):not([data-theme]:not(${themeAttr})):not(${themeAttr} [data-theme]:not(${themeAttr}) *))`}, ${theme}${crossed}`;
|
|
97
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* The selector a theme island matches while it follows a persisting root's
|
|
111
|
+
* `axis` before it mounts, when `<html>` carries `value` — written first, on
|
|
112
|
+
* its own line, in the selector list of the compound block it stands in for.
|
|
113
|
+
*
|
|
114
|
+
* `ThemeProvider` renders a persisting root's PROPS on the server, while the
|
|
115
|
+
* pre-paint script has already stamped the visitor's stored axes on `<html>`.
|
|
116
|
+
* A nested provider that names a theme and no mode (or no rung), and a
|
|
117
|
+
* `Preview` stage that names a theme and no mode, would have to stamp the only
|
|
118
|
+
* mode it knows there — the root's prop. So until its own layout effect runs it
|
|
119
|
+
* stamps neither `data-mode` nor `data-density` of the root's, and carries
|
|
120
|
+
* `data-cue-follows="mode density"` (the axes it has left to the document)
|
|
121
|
+
* instead. `@cueplusplus/theme-tools`' `follows` emits the same line for every
|
|
122
|
+
* packaged theme, and its docblock carries the argument for anchoring on
|
|
123
|
+
* `:root`: the runtime marks only an axis that is the persisting root's, and
|
|
124
|
+
* that root mirrors the axis onto `<html>`, so `<html>`'s value is the one the
|
|
125
|
+
* island is about to stamp. `:where()` keeps it at the compound's (0,2,0).
|
|
126
|
+
*
|
|
127
|
+
* The public route to it is `themeSelector(name, { mode, follows: true })`,
|
|
128
|
+
* which puts it, and the theme follower's twin, in front of the compound —
|
|
129
|
+
* what `createTheme()` and the system aliases below write. The configurator's
|
|
130
|
+
* override blocks, which name both modes, compose it themselves.
|
|
131
|
+
*
|
|
132
|
+
* @internal Used by package-owned serializers; not part of the public
|
|
133
|
+
* `@cueplusplus/ui/theming` barrel.
|
|
134
|
+
*/
|
|
135
|
+
function followerSelector(name, axis, value) {
|
|
136
|
+
return `:where(:root[data-${axis}="${value}"]) [data-theme="${name}"][data-cue-follows~="${axis}"]`;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* The same twin one axis over: what an island matches while it follows a
|
|
140
|
+
* persisting root's THEME before it mounts, when `<html>` carries `name` —
|
|
141
|
+
* written first in the selector list of the colour block of theme `name` for
|
|
142
|
+
* the island's own `mode`.
|
|
143
|
+
*
|
|
144
|
+
* A nested provider or a `Preview` stage that names a mode and no theme stamps
|
|
145
|
+
* its mode and, until it mounts, no `data-theme`, carrying
|
|
146
|
+
* `data-cue-follows~="theme"` instead (theme-tools' `followsTheme` is the
|
|
147
|
+
* packaged half, and says why). `mode` is the half of the compound the twin
|
|
148
|
+
* stands in for: `"light"` or `"system"` for those blocks, and `null` for the
|
|
149
|
+
* bare dark block, whose twin asks only that the island carry a mode —
|
|
150
|
+
* `:where([data-mode])`, weightless, so the twin weighs (0,1,0) like
|
|
151
|
+
* `[data-theme="x"]` itself, and the others (0,2,0) like their compounds.
|
|
152
|
+
*
|
|
153
|
+
* @internal Used by package-owned serializers; not part of the public
|
|
154
|
+
* `@cueplusplus/ui/theming` barrel.
|
|
155
|
+
*/
|
|
156
|
+
function themeFollowerSelector(name, mode) {
|
|
157
|
+
return `:where(:root[data-theme="${name}"]) ${mode === null ? ":where([data-mode])" : `[data-mode="${mode}"]`}[data-cue-follows~="theme"]`;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* The rung twin for an island that follows BOTH the persisting root's theme and
|
|
161
|
+
* its rung before it mounts (a provider that names only a mode): keyed on
|
|
162
|
+
* `<html>`'s theme and rung together, for a theme's own retune of that rung.
|
|
163
|
+
* The rung's base values it re-declares through `@cueplusplus/tokens`' own
|
|
164
|
+
* follower twin; an island that names the theme is reached by
|
|
165
|
+
* {@link followerSelector}'s density form instead.
|
|
166
|
+
*
|
|
167
|
+
* @internal Used by package-owned serializers; not part of the public
|
|
168
|
+
* `@cueplusplus/ui/theming` barrel.
|
|
169
|
+
*/
|
|
170
|
+
function rungFollowerSelector(name, density) {
|
|
171
|
+
return `:where(:root[data-theme="${name}"][data-density="${density}"]) [data-cue-follows~="theme"][data-cue-follows~="density"]`;
|
|
172
|
+
}
|
|
98
173
|
/** The tone vocabulary that gets a soft fill and a soft border in every theme. */
|
|
99
174
|
const STATUSES = [
|
|
100
175
|
"ok",
|
|
@@ -163,7 +238,11 @@ const HAIRLINE_TEMPLATES = [
|
|
|
163
238
|
const DERIVED_TOKEN_TEMPLATES = [
|
|
164
239
|
["accent-soft", "color-mix(in oklch, var(--cue-accent) 14%, transparent)"],
|
|
165
240
|
...TINTED.flatMap((tone) => [[`${tone}-soft`, `color-mix(in oklch, var(--cue-${tone}) 12%, transparent)`], [`${tone}-border`, `color-mix(in oklch, var(--cue-${tone}) 35%, transparent)`]]),
|
|
166
|
-
...HAIRLINE_TEMPLATES
|
|
241
|
+
...HAIRLINE_TEMPLATES,
|
|
242
|
+
["accent-fill", "var(--cue-accent)"],
|
|
243
|
+
["accent-fill-fg", "var(--cue-accent-fg)"],
|
|
244
|
+
["accent-fill-hover", "var(--cue-accent-hover)"],
|
|
245
|
+
["shade", "var(--cue-fg)"]
|
|
167
246
|
];
|
|
168
247
|
/**
|
|
169
248
|
* {@link DERIVED_TOKEN_TEMPLATES} as a property → value map.
|
|
@@ -218,7 +297,10 @@ function serializeSystemModeAliases(theme, aliases) {
|
|
|
218
297
|
const name = assertThemeName(theme);
|
|
219
298
|
return aliases.map(({ mode, colorScheme, sections }) => {
|
|
220
299
|
return `@media (prefers-color-scheme: ${mode}) {\n${indentRule(serializeThemeBlock({
|
|
221
|
-
selector:
|
|
300
|
+
selector: themeSelector(name, {
|
|
301
|
+
mode: "system",
|
|
302
|
+
follows: true
|
|
303
|
+
}),
|
|
222
304
|
colorScheme,
|
|
223
305
|
sections
|
|
224
306
|
}))}\n}`;
|
|
@@ -238,4 +320,4 @@ function serializeThemeCss(blocks, options = {}) {
|
|
|
238
320
|
return `${[...options.banner === void 0 ? [] : [`/*! ${options.banner}\n * Generated by createTheme(). Do not edit by hand.\n */`], ...rules].join("\n\n")}\n`;
|
|
239
321
|
}
|
|
240
322
|
//#endregion
|
|
241
|
-
export { CUE_TOKEN_PREFIX, DERIVED_TOKEN_TEMPLATES, RESOLVED_MONO, THEME_NAME_PATTERN$1 as THEME_NAME_PATTERN, assertCssValue, assertThemeName, derivedTokens, serializeSystemModeAliases, serializeThemeBlock, serializeThemeCss, themeSelector, tokenProperty };
|
|
323
|
+
export { CUE_TOKEN_PREFIX, DERIVED_TOKEN_TEMPLATES, RESOLVED_MONO, THEME_NAME_PATTERN$1 as THEME_NAME_PATTERN, assertCssValue, assertThemeName, derivedTokens, followerSelector, rungFollowerSelector, serializeSystemModeAliases, serializeThemeBlock, serializeThemeCss, themeFollowerSelector, themeSelector, tokenProperty };
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
{
|
|
40
40
|
"name": "Item",
|
|
41
41
|
"usage": "Accordion.Item",
|
|
42
|
-
"description": "One section.\n\nSeparation is a hairline the section draws above itself, dropped on the first\none — so a stack shows rules *between* sections and none against the rim of\nwhatever contains them. Same rule as `Row`, for the same reason.",
|
|
42
|
+
"description": "One section.\n\nSeparation is a hairline the section draws above itself, dropped on the first\none — so a stack shows rules *between* sections and none against the rim of\nwhatever contains them. Same rule as `Row`, for the same reason. Its line\nstyle is the style set's (`style-accordion-rule-style`), solid by default,\nand so is its ink (`style-accordion-rule-ink`, round 6 lane R6.Z), `border`\nby default.",
|
|
43
43
|
"props": [
|
|
44
44
|
{
|
|
45
45
|
"name": "className",
|
|
@@ -130,12 +130,13 @@
|
|
|
130
130
|
"variants": {},
|
|
131
131
|
"defaultVariants": {},
|
|
132
132
|
"tokensUsed": [
|
|
133
|
-
"--cue-accent",
|
|
134
133
|
"--cue-border",
|
|
135
134
|
"--cue-control-md",
|
|
136
135
|
"--cue-fg",
|
|
137
136
|
"--cue-fg-muted",
|
|
138
137
|
"--cue-fg-subtle",
|
|
138
|
+
"--cue-focus",
|
|
139
|
+
"--cue-focus-ring",
|
|
139
140
|
"--cue-font-mono",
|
|
140
141
|
"--cue-icon-sm",
|
|
141
142
|
"--cue-leading-ui",
|
|
@@ -143,6 +144,32 @@
|
|
|
143
144
|
"--cue-space-1",
|
|
144
145
|
"--cue-space-3",
|
|
145
146
|
"--cue-space-4",
|
|
147
|
+
"--cue-style-accordion-rule-ink",
|
|
148
|
+
"--cue-style-accordion-rule-style",
|
|
149
|
+
"--cue-style-body-face",
|
|
150
|
+
"--cue-style-collapse-body-ink",
|
|
151
|
+
"--cue-style-collapse-body-leading",
|
|
152
|
+
"--cue-style-collapse-body-pad",
|
|
153
|
+
"--cue-style-collapse-body-size",
|
|
154
|
+
"--cue-style-collapse-body-tracking",
|
|
155
|
+
"--cue-style-collapse-caret-ink",
|
|
156
|
+
"--cue-style-collapse-caret-opacity",
|
|
157
|
+
"--cue-style-collapse-caret-size",
|
|
158
|
+
"--cue-style-collapse-gap",
|
|
159
|
+
"--cue-style-collapse-height",
|
|
160
|
+
"--cue-style-collapse-hover-ground",
|
|
161
|
+
"--cue-style-collapse-hover-ink",
|
|
162
|
+
"--cue-style-collapse-leading",
|
|
163
|
+
"--cue-style-collapse-open-ink",
|
|
164
|
+
"--cue-style-collapse-pad",
|
|
165
|
+
"--cue-style-collapse-radius",
|
|
166
|
+
"--cue-style-collapse-size",
|
|
167
|
+
"--cue-style-collapse-weight",
|
|
168
|
+
"--cue-style-control-face",
|
|
169
|
+
"--cue-style-focus-width",
|
|
170
|
+
"--cue-style-label-weight",
|
|
171
|
+
"--cue-style-quiet-ink",
|
|
172
|
+
"--cue-style-text-focus-offset",
|
|
146
173
|
"--cue-text-ui"
|
|
147
174
|
],
|
|
148
175
|
"summary": "A stack of sections, one or several open at a time.",
|
|
@@ -111,8 +111,11 @@
|
|
|
111
111
|
"--cue-control-md",
|
|
112
112
|
"--cue-control-sm",
|
|
113
113
|
"--cue-fg-muted",
|
|
114
|
+
"--cue-focus",
|
|
115
|
+
"--cue-focus-ring",
|
|
114
116
|
"--cue-font-mono",
|
|
115
117
|
"--cue-icon-sm",
|
|
118
|
+
"--cue-style-focus-width",
|
|
116
119
|
"--cue-surface-2",
|
|
117
120
|
"--cue-surface-3",
|
|
118
121
|
"--cue-text-label",
|
|
@@ -175,6 +175,7 @@
|
|
|
175
175
|
"--cue-font-mono",
|
|
176
176
|
"--cue-leading-ui",
|
|
177
177
|
"--cue-paint-rim-width",
|
|
178
|
+
"--cue-paint-scrim-filter",
|
|
178
179
|
"--cue-paint-shade-far",
|
|
179
180
|
"--cue-paint-shade-hairline",
|
|
180
181
|
"--cue-paint-shade-near",
|
|
@@ -182,22 +183,54 @@
|
|
|
182
183
|
"--cue-paint-shadow-spread",
|
|
183
184
|
"--cue-paint-sheen-ink",
|
|
184
185
|
"--cue-paint-stroke-angle",
|
|
185
|
-
"--cue-paint-stroke-from",
|
|
186
|
-
"--cue-paint-stroke-to",
|
|
186
|
+
"--cue-paint-stroke-overlay-from",
|
|
187
|
+
"--cue-paint-stroke-overlay-to",
|
|
187
188
|
"--cue-paint-stroke-width",
|
|
188
189
|
"--cue-radius-control",
|
|
189
190
|
"--cue-radius-overlay",
|
|
191
|
+
"--cue-radius-scale",
|
|
190
192
|
"--cue-scrim",
|
|
191
193
|
"--cue-space-1",
|
|
192
194
|
"--cue-space-2",
|
|
193
195
|
"--cue-space-3",
|
|
194
196
|
"--cue-space-4",
|
|
195
197
|
"--cue-space-6",
|
|
198
|
+
"--cue-style-body-face",
|
|
199
|
+
"--cue-style-body-leading",
|
|
200
|
+
"--cue-style-body-size",
|
|
201
|
+
"--cue-style-body-weight",
|
|
202
|
+
"--cue-style-control-face",
|
|
203
|
+
"--cue-style-dialog-radius",
|
|
204
|
+
"--cue-style-display-variation",
|
|
205
|
+
"--cue-style-group-label-ink",
|
|
206
|
+
"--cue-style-group-label-pad",
|
|
207
|
+
"--cue-style-group-label-size",
|
|
208
|
+
"--cue-style-heading-ink",
|
|
209
|
+
"--cue-style-label-case",
|
|
210
|
+
"--cue-style-label-face",
|
|
211
|
+
"--cue-style-label-ink",
|
|
212
|
+
"--cue-style-label-size",
|
|
213
|
+
"--cue-style-label-tracking",
|
|
214
|
+
"--cue-style-label-weight",
|
|
215
|
+
"--cue-style-menu-highlight",
|
|
216
|
+
"--cue-style-menu-item-radius",
|
|
217
|
+
"--cue-style-menu-min-width",
|
|
218
|
+
"--cue-style-menu-separator-inset",
|
|
219
|
+
"--cue-style-overlay-ground",
|
|
220
|
+
"--cue-style-overlay-title-leading",
|
|
221
|
+
"--cue-style-overlay-title-size",
|
|
222
|
+
"--cue-style-quiet-ink",
|
|
223
|
+
"--cue-style-row-disabled-opacity",
|
|
224
|
+
"--cue-style-title-face",
|
|
225
|
+
"--cue-style-title-weight",
|
|
196
226
|
"--cue-surface-2",
|
|
197
227
|
"--cue-text-emphasis",
|
|
198
228
|
"--cue-text-label",
|
|
229
|
+
"--cue-text-micro",
|
|
199
230
|
"--cue-text-ui",
|
|
200
|
-
"--cue-tracking-caps"
|
|
231
|
+
"--cue-tracking-caps",
|
|
232
|
+
"--cue-tracking-caps-loose",
|
|
233
|
+
"--cue-tracking-caps-tight"
|
|
201
234
|
],
|
|
202
235
|
"summary": "A modal that asks one question with two answers, for anything irreversible.",
|
|
203
236
|
"examples": [
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
{
|
|
21
21
|
"name": "Root",
|
|
22
22
|
"usage": "AppBar.Root",
|
|
23
|
-
"description": "The bar across the top of a document: brand, navigation, actions.\n\nOne rung of the chrome ladder tall, from `--cue-chrome-toolbar` — the same\ntoken `Toolbar` and the docs site's hand-rolled header use, so a page that\nstacks a bar on a toolbar gets two equal strips rather than two guesses.\n\nSticky by default, and translucent because of it: a bar pinned over scrolling\ncontent needs a ground, and `bg-surface-1/95` plus `backdrop-blur` says\n\"there is content under this\" where an opaque fill would claim the content\nends here. `z-40` is above the page and below the `z-50` this library's\noverlays float at, so a menu opened from the bar is never behind it.\n\n**This is a bar, not a menu.** `NavigationMenu` is the mega-menu — triggers\nthat open panels — and it goes *inside* an `AppBar.Nav` when a section has\nchildren. This component is the strip it sits in.\n\nStatic markup — no `\"use client\"` on this module, deliberately: a site header\nis where a framework reads its data, so the bar has to be renderable from a\nserver component. The one part with state is the navigation's scroller, and\nthe client boundary is drawn around that alone (`_edge-scroller.tsx`).\n\nIt adds **no viewport breakpoint**. `AppShell` holds the library's only one,\nfor navigation shape, and a horizontal bar does not need it: the brand and\nthe actions are `shrink-0`, the navigation between them takes the remaining\nwidth and scrolls inside it, so a 390px viewport gets the same bar with a\nshorter window onto the same links rather than a second layout to maintain.",
|
|
23
|
+
"description": "The bar across the top of a document: brand, navigation, actions.\n\nOne rung of the chrome ladder tall, from `--cue-chrome-toolbar` — the same\ntoken `Toolbar` and the docs site's hand-rolled header use, so a page that\nstacks a bar on a toolbar gets two equal strips rather than two guesses.\nA style set may make it taller, lighten, drop or dash its rule and widen its\ninline inset (`style-appbar-height`, `style-chrome-rule`,\n`style-chrome-rule-style`, `style-appbar-inset`); under a set that names\nnone of them it is exactly this.\n\nSticky by default, and translucent because of it: a bar pinned over scrolling\ncontent needs a ground, and `bg-surface-1/95` plus `backdrop-blur` says\n\"there is content under this\" where an opaque fill would claim the content\nends here. `z-40` is above the page and below the `z-50` this library's\noverlays float at, so a menu opened from the bar is never behind it.\n\n**This is a bar, not a menu.** `NavigationMenu` is the mega-menu — triggers\nthat open panels — and it goes *inside* an `AppBar.Nav` when a section has\nchildren. This component is the strip it sits in.\n\nStatic markup — no `\"use client\"` on this module, deliberately: a site header\nis where a framework reads its data, so the bar has to be renderable from a\nserver component. The one part with state is the navigation's scroller, and\nthe client boundary is drawn around that alone (`_edge-scroller.tsx`).\n\nIt adds **no viewport breakpoint**. `AppShell` holds the library's only one,\nfor navigation shape, and a horizontal bar does not need it: the brand and\nthe actions are `shrink-0`, the navigation between them takes the remaining\nwidth and scrolls inside it, so a 390px viewport gets the same bar with a\nshorter window onto the same links rather than a second layout to maintain.",
|
|
24
24
|
"props": [
|
|
25
25
|
{
|
|
26
26
|
"name": "sticky",
|
|
@@ -42,6 +42,27 @@
|
|
|
42
42
|
"usage": "AppBar.Brand",
|
|
43
43
|
"description": "The leading slot, and the way home.\n\nA link rather than a box, because that is what a brand in a bar is: pass\n`href`, or `render={<NextLink href=\"/\" />}` to go through a router. It sets\nthe bar's own type register (mono, UI size, full-contrast ink) so a wordmark\nand a version chip sit on one baseline without a class of their own.\n\n`shrink-0`: the brand is the one thing in the bar that must never be\ncompressed, because a half-drawn wordmark reads as a broken page.",
|
|
44
44
|
"props": [
|
|
45
|
+
{
|
|
46
|
+
"name": "children",
|
|
47
|
+
"type": "ReactNode",
|
|
48
|
+
"required": false,
|
|
49
|
+
"defaultValue": null,
|
|
50
|
+
"description": "The link's text. Restated for the same reason: without it the props table\nomitted it and no propSet could name it, so the docs' Link tile drew an\nempty anchor (round 6 of the Looks' fidelity plan found it, measuring\nKiln's plain link, K161).",
|
|
51
|
+
"control": {
|
|
52
|
+
"kind": "node",
|
|
53
|
+
"fixture": "children.text"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "href",
|
|
58
|
+
"type": "string",
|
|
59
|
+
"required": false,
|
|
60
|
+
"defaultValue": null,
|
|
61
|
+
"description": "Where the link goes. Restated from the anchor's own attributes, as\n`children` is below: docgen documents a prop only where the library\ndeclares it, and an anchor without an `href` is not a link to the\nkeyboard or to a screen reader.",
|
|
62
|
+
"control": {
|
|
63
|
+
"kind": "string"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
45
66
|
{
|
|
46
67
|
"name": "render",
|
|
47
68
|
"type": "RenderProp<Record<string, unknown>>",
|
|
@@ -140,7 +161,7 @@
|
|
|
140
161
|
{
|
|
141
162
|
"name": "Link",
|
|
142
163
|
"usage": "AppBar.Link",
|
|
143
|
-
"description": "One destination in the bar.\n\nA `Link`, so `render={<NextLink href=\"/x\" />}` composes it with a router and\n`external` gives an outbound link its `↗`, plus the bar's type register and\nthe `shrink-0` that keeps a label from being squeezed into an ellipsis while\nthe navigation around it scrolls.",
|
|
164
|
+
"description": "One destination in the bar.\n\nA `Link`, so `render={<NextLink href=\"/x\" />}` composes it with a router and\n`external` gives an outbound link its `↗`, plus the bar's type register and\nthe `shrink-0` that keeps a label from being squeezed into an ellipsis while\nthe navigation around it scrolls.\n\nThe register is mono at the UI size by default. A style set may change its\nface, case, tracking, size and weight, pad it, and give it a hover ground\n(the `style-nav-*` names), which is how a Look's header links follow it.",
|
|
144
165
|
"props": [
|
|
145
166
|
{
|
|
146
167
|
"name": "register",
|
|
@@ -185,6 +206,27 @@
|
|
|
185
206
|
"control": {
|
|
186
207
|
"kind": "opaque"
|
|
187
208
|
}
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"name": "href",
|
|
212
|
+
"type": "string",
|
|
213
|
+
"required": false,
|
|
214
|
+
"defaultValue": null,
|
|
215
|
+
"description": "Where the link goes. Restated from the anchor's own attributes, as\n`children` is below: docgen documents a prop only where the library\ndeclares it, and an anchor without an `href` is not a link to the\nkeyboard or to a screen reader.",
|
|
216
|
+
"control": {
|
|
217
|
+
"kind": "string"
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"name": "children",
|
|
222
|
+
"type": "ReactNode",
|
|
223
|
+
"required": false,
|
|
224
|
+
"defaultValue": null,
|
|
225
|
+
"description": "The link's text. Restated for the same reason: without it the props table\nomitted it and no propSet could name it, so the docs' Link tile drew an\nempty anchor (round 6 of the Looks' fidelity plan found it, measuring\nKiln's plain link, K161).",
|
|
226
|
+
"control": {
|
|
227
|
+
"kind": "node",
|
|
228
|
+
"fixture": "children.text"
|
|
229
|
+
}
|
|
188
230
|
}
|
|
189
231
|
],
|
|
190
232
|
"typeReferences": [
|
|
@@ -230,15 +272,32 @@
|
|
|
230
272
|
"--cue-edge-fade",
|
|
231
273
|
"--cue-fg",
|
|
232
274
|
"--cue-fg-muted",
|
|
275
|
+
"--cue-focus",
|
|
276
|
+
"--cue-focus-ring",
|
|
233
277
|
"--cue-font-mono",
|
|
234
278
|
"--cue-icon-sm",
|
|
235
279
|
"--cue-paint-fade-length",
|
|
236
280
|
"--cue-paint-glass-fallback-ink",
|
|
237
281
|
"--cue-paint-glass-filter",
|
|
238
282
|
"--cue-paint-glass-ink",
|
|
283
|
+
"--cue-radius-control",
|
|
239
284
|
"--cue-space-3",
|
|
240
285
|
"--cue-space-4",
|
|
241
286
|
"--cue-space-5",
|
|
287
|
+
"--cue-style-appbar-height",
|
|
288
|
+
"--cue-style-appbar-inset",
|
|
289
|
+
"--cue-style-chrome-rule",
|
|
290
|
+
"--cue-style-chrome-rule-style",
|
|
291
|
+
"--cue-style-focus-width",
|
|
292
|
+
"--cue-style-hover-ink",
|
|
293
|
+
"--cue-style-nav-case",
|
|
294
|
+
"--cue-style-nav-face",
|
|
295
|
+
"--cue-style-nav-hover-ground",
|
|
296
|
+
"--cue-style-nav-pad",
|
|
297
|
+
"--cue-style-nav-size",
|
|
298
|
+
"--cue-style-nav-tracking",
|
|
299
|
+
"--cue-style-nav-weight",
|
|
300
|
+
"--cue-style-quiet-ink",
|
|
242
301
|
"--cue-surface-1",
|
|
243
302
|
"--cue-text-ui"
|
|
244
303
|
],
|