@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "react";
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
//#region src/system/published.ts
|
|
5
|
+
/**
|
|
6
|
+
* One per provider instance and context, for the provider's whole life.
|
|
7
|
+
*
|
|
8
|
+
* Internal.
|
|
9
|
+
*/
|
|
10
|
+
var Overlay = class {
|
|
11
|
+
posted = null;
|
|
12
|
+
listeners = /* @__PURE__ */ new Set();
|
|
13
|
+
subscribe = (listener) => {
|
|
14
|
+
this.listeners.add(listener);
|
|
15
|
+
return () => {
|
|
16
|
+
this.listeners.delete(listener);
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
/** The value `held` stands for now: its correction if one is posted for it, else its own value. */
|
|
20
|
+
resolve(held) {
|
|
21
|
+
const posted = this.posted;
|
|
22
|
+
return posted !== null && posted.key === held ? posted.value : held.value;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Say that `held` now stands for `value`.
|
|
26
|
+
*
|
|
27
|
+
* Nothing is told when nothing changes for a reader of `held`: a value equal
|
|
28
|
+
* to `held.value` clears only a post made for `held`, and one made for an
|
|
29
|
+
* older key is left alone, because no reader of the current key reads it.
|
|
30
|
+
*/
|
|
31
|
+
post(held, value) {
|
|
32
|
+
const posted = this.posted;
|
|
33
|
+
if (Object.is(value, held.value)) {
|
|
34
|
+
if (posted === null || posted.key !== held) return;
|
|
35
|
+
this.posted = null;
|
|
36
|
+
} else {
|
|
37
|
+
if (posted !== null && posted.key === held && Object.is(posted.value, value)) return;
|
|
38
|
+
this.posted = {
|
|
39
|
+
key: held,
|
|
40
|
+
value
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
for (const listener of [...this.listeners]) listener();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
/** A value published once and never corrected: a context's value outside any provider. */
|
|
47
|
+
function published(value) {
|
|
48
|
+
return {
|
|
49
|
+
value,
|
|
50
|
+
server: value,
|
|
51
|
+
overlay: new Overlay()
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function sameInputs(a, b) {
|
|
55
|
+
if (a.length !== b.length) return false;
|
|
56
|
+
for (let i = 0; i < a.length; i += 1) if (!Object.is(a[i], b[i])) return false;
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Publish `value` from a provider.
|
|
61
|
+
*
|
|
62
|
+
* `inputs` are what may move the context: the provider's props and the edits
|
|
63
|
+
* its setters make, and the `Published` objects it read from the providers
|
|
64
|
+
* around it (`React.useContext`, not {@link useRead} — the object, whose
|
|
65
|
+
* identity changes only when theirs did). What must NOT be among them is
|
|
66
|
+
* anything a client-only correction moves: a root's restored state, the OS
|
|
67
|
+
* colour scheme, or a value read through {@link useRead}.
|
|
68
|
+
*
|
|
69
|
+
* When `inputs` change and `value` differs from what readers see now, the
|
|
70
|
+
* published object is new and holds this render's `value`: the context moves,
|
|
71
|
+
* as any context moves when its value does. When `value` is what readers
|
|
72
|
+
* already see — an edit that changed nothing this context carries — the object
|
|
73
|
+
* stays, so a new pack is no news to a reader of the rungs on offer. And when
|
|
74
|
+
* `inputs` did not change and `value` moved anyway, it moved because a
|
|
75
|
+
* correction reached this provider: the object stays, and the new value is
|
|
76
|
+
* posted to the overlay after the commit (the layout phase, still before the
|
|
77
|
+
* browser paints), for the readers below to pick up. A missing input therefore
|
|
78
|
+
* costs a synchronous catch-up render, never a wrong value.
|
|
79
|
+
*
|
|
80
|
+
* `served`, when given, is what this provider's first render put in the
|
|
81
|
+
* server's HTML where that differs from `value` — the one root whose first
|
|
82
|
+
* client render knowingly differs from the server's (see `ThemeProvider`'s
|
|
83
|
+
* pairing). Called once, on mount.
|
|
84
|
+
*/
|
|
85
|
+
function usePublish(value, inputs, served) {
|
|
86
|
+
const [overlay] = React.useState(() => new Overlay());
|
|
87
|
+
const [held, setHeld] = React.useState(() => ({
|
|
88
|
+
inputs,
|
|
89
|
+
published: {
|
|
90
|
+
value,
|
|
91
|
+
server: served === void 0 ? value : served(),
|
|
92
|
+
overlay
|
|
93
|
+
}
|
|
94
|
+
}));
|
|
95
|
+
let current = held.published;
|
|
96
|
+
if (!sameInputs(held.inputs, inputs)) {
|
|
97
|
+
if (!Object.is(value, overlay.resolve(held.published))) current = {
|
|
98
|
+
value,
|
|
99
|
+
server: held.published.server,
|
|
100
|
+
overlay
|
|
101
|
+
};
|
|
102
|
+
setHeld({
|
|
103
|
+
inputs,
|
|
104
|
+
published: current
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
useIsomorphicLayoutEffect(() => {
|
|
108
|
+
overlay.post(current, value);
|
|
109
|
+
});
|
|
110
|
+
return current;
|
|
111
|
+
}
|
|
112
|
+
/** Read what a provider published: against the server's value while hydrating, corrected after. */
|
|
113
|
+
function useRead(context) {
|
|
114
|
+
const held = React.useContext(context);
|
|
115
|
+
return React.useSyncExternalStore(held.overlay.subscribe, () => held.overlay.resolve(held), () => held.server);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Read one slice of what a provider published, and re-render only when that
|
|
119
|
+
* slice changes.
|
|
120
|
+
*
|
|
121
|
+
* `select` must return the same object for the same input — a field of the
|
|
122
|
+
* value, not a copy of it. A reader that needs one part of a larger value (the
|
|
123
|
+
* registered themes, which no restore moves, out of a registry rebuilt for every
|
|
124
|
+
* active theme) then sits out every correction it does not read.
|
|
125
|
+
*/
|
|
126
|
+
function useReadSelected(context, select) {
|
|
127
|
+
const held = React.useContext(context);
|
|
128
|
+
return React.useSyncExternalStore(held.overlay.subscribe, () => select(held.overlay.resolve(held)), () => select(held.server));
|
|
129
|
+
}
|
|
130
|
+
//#endregion
|
|
131
|
+
export { Overlay, published, usePublish, useRead, useReadSelected };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import "./published.js";
|
|
1
2
|
import { TokenOverrides } from "./overrides.js";
|
|
2
3
|
import * as React from "react";
|
|
3
4
|
import { Paint, StyleSet } from "@cueplusplus/tokens";
|
|
@@ -15,7 +16,11 @@ interface ThemeContextValue {
|
|
|
15
16
|
* one a `setTheme` for an unknown preset leaves behind.
|
|
16
17
|
*/
|
|
17
18
|
manifest: ThemeManifest | null;
|
|
18
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Density the *provider* holds — a nested `<Density>` island does not change
|
|
21
|
+
* it. In a nested provider that names none, the rung stamped around it, which
|
|
22
|
+
* is what its subtree inherits.
|
|
23
|
+
*/
|
|
19
24
|
density: Density$1;
|
|
20
25
|
/** Mode as chosen, including the literal `"system"`. */
|
|
21
26
|
mode: Mode;
|
|
@@ -34,7 +39,7 @@ interface ThemeContextValue {
|
|
|
34
39
|
*/
|
|
35
40
|
styleSet: StyleSet | null;
|
|
36
41
|
/**
|
|
37
|
-
* The
|
|
42
|
+
* The paint pack in force on this subtree, or `null`.
|
|
38
43
|
*
|
|
39
44
|
* *In force*, not *named here*, exactly as `styleSet` is: a provider that
|
|
40
45
|
* names no pack reports the one stamped around it, so this and the
|
|
@@ -55,10 +60,11 @@ interface ThemeContextValue {
|
|
|
55
60
|
* Switch the style set this provider names, and persist the preference.
|
|
56
61
|
*
|
|
57
62
|
* `null` means *this provider names none* — not *no set applies*. The
|
|
58
|
-
* provider stops stamping
|
|
59
|
-
* `editorial` page goes back to
|
|
60
|
-
*
|
|
61
|
-
*
|
|
63
|
+
* provider stops stamping a set of its own, so a nested one under an outer
|
|
64
|
+
* `editorial` page goes back to `editorial` — inherited, or restated beside
|
|
65
|
+
* the theme if it names one — and `styleSet` above reports it, because that
|
|
66
|
+
* is what the DOM resolves to. At the root, where nothing is stamped around
|
|
67
|
+
* it, `null` and "no set" coincide.
|
|
62
68
|
*
|
|
63
69
|
* To positively leave an inherited set rather than stop naming one, pass
|
|
64
70
|
* {@link DEFAULT_STYLE_SET}: it stamps an attribute whose block restates the
|
|
@@ -66,7 +72,11 @@ interface ThemeContextValue {
|
|
|
66
72
|
* out-specify an ancestor's in a cascade.
|
|
67
73
|
*/
|
|
68
74
|
setStyleSet: (next: StyleSet | null) => void;
|
|
69
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Switch the paint pack this provider names, and persist it at the root.
|
|
77
|
+
* `null` clears the attribute; in a nested provider that means following the
|
|
78
|
+
* pack stamped around it again, exactly as `setStyleSet(null)` does.
|
|
79
|
+
*/
|
|
70
80
|
setPaint: (next: Paint | null) => void;
|
|
71
81
|
}
|
|
72
82
|
/** Provider-owned font-family overrides that detached portals must republish. */
|
|
@@ -112,6 +122,13 @@ interface ThemeProviderProps {
|
|
|
112
122
|
/**
|
|
113
123
|
* Initial theme preset. Defaults to the first registered manifest's name, or
|
|
114
124
|
* `"cue"` with nothing registered. Changing it after mount adopts the new value.
|
|
125
|
+
*
|
|
126
|
+
* A nested provider that names **none** holds none: it stamps no
|
|
127
|
+
* `data-theme`, so the theme around it inherits through its element, and
|
|
128
|
+
* `useTheme().theme` inside it — and every portal opened inside it — follows
|
|
129
|
+
* that theme **live**, a theme the root restores from storage after mount
|
|
130
|
+
* included. Naming one makes it this provider's, stamped with the rung and
|
|
131
|
+
* mode in force beside it, whatever the root does.
|
|
115
132
|
*/
|
|
116
133
|
theme?: ThemeName;
|
|
117
134
|
/**
|
|
@@ -126,9 +143,23 @@ interface ThemeProviderProps {
|
|
|
126
143
|
*
|
|
127
144
|
* Changing it after mount adopts the new value; dropping it does not — a
|
|
128
145
|
* parent that stops naming a rung is not asking to move back to the theme's.
|
|
146
|
+
*
|
|
147
|
+
* A nested provider that names **none** follows the rung stamped around it
|
|
148
|
+
* live — the outer provider's, or a `<Density>` island's between them — and
|
|
149
|
+
* stamps none unless it re-themes or re-modes, in which case it restates the
|
|
150
|
+
* rung it follows. Naming one stamps it as a `<Density>` island would.
|
|
129
151
|
*/
|
|
130
152
|
density?: Density$1;
|
|
131
|
-
/**
|
|
153
|
+
/**
|
|
154
|
+
* Initial mode. Defaults to `"dark"` at the root; `"system"` tracks
|
|
155
|
+
* `prefers-color-scheme`.
|
|
156
|
+
*
|
|
157
|
+
* A nested provider that names **none** follows the mode around it live and
|
|
158
|
+
* stamps no `data-mode` or `color-scheme` of its own; `useTheme().mode` and
|
|
159
|
+
* `resolvedMode` inside it report the ambient pair. Naming one stamps it
|
|
160
|
+
* beside the theme in force, because a theme's light block is the compound
|
|
161
|
+
* `[data-theme][data-mode]`.
|
|
162
|
+
*/
|
|
132
163
|
mode?: Mode;
|
|
133
164
|
/**
|
|
134
165
|
* Initial font pairing.
|
|
@@ -146,12 +177,13 @@ interface ThemeProviderProps {
|
|
|
146
177
|
* **Root-level only.** There is no font island: a nested provider forwards
|
|
147
178
|
* this axis to the root, ignores this prop, and its `setFont` drives the root.
|
|
148
179
|
* A page that changed face halfway down is a page with a bug, and a specimen
|
|
149
|
-
* that genuinely wants one — a picker row, a docs page showing all
|
|
180
|
+
* that genuinely wants one — a picker row, a docs page showing all twelve —
|
|
150
181
|
* needs nothing from this library but `data-font` on a `<div>`.
|
|
151
182
|
*/
|
|
152
183
|
font?: FontName;
|
|
153
184
|
/**
|
|
154
|
-
* Page composition for this subtree: `console`, `editorial` or
|
|
185
|
+
* Page composition for this subtree: `console`, `editorial`, `marketing` or
|
|
186
|
+
* `graphite`.
|
|
155
187
|
*
|
|
156
188
|
* **`styleSet`, not `style`.** This interface already has a
|
|
157
189
|
* `style?: React.CSSProperties` a few lines below, applied to the provider
|
|
@@ -171,15 +203,39 @@ interface ThemeProviderProps {
|
|
|
171
203
|
* Like the other three axes this is an *initial* value the provider then holds
|
|
172
204
|
* as state, so `setStyleSet` can drive it; a changed prop is adopted after
|
|
173
205
|
* mount. Unlike the font pairing it has an island form, so a nested provider
|
|
174
|
-
* holds its own rather than handing the axis up to the root.
|
|
206
|
+
* that names a set holds its own rather than handing the axis up to the root.
|
|
207
|
+
*
|
|
208
|
+
* A nested provider that names **none** holds none: the set around it
|
|
209
|
+
* inherits through its element, and `useTheme().styleSet` inside it reports
|
|
210
|
+
* that set **live** — a stored set the root restores after mount, or a later
|
|
211
|
+
* `setStyleSet` at the root, reaches it and its portals. If it names a
|
|
212
|
+
* `theme` or a `mode`, it also restates that set as `data-style` on its
|
|
213
|
+
* element — still the page's set, followed live, never its own — because a
|
|
214
|
+
* set's block declares values that read the theme (a band's rule and
|
|
215
|
+
* ground), and a custom property resolves where it is declared: restated,
|
|
216
|
+
* they resolve against this island's theme instead of the page's.
|
|
175
217
|
*/
|
|
176
218
|
styleSet?: StyleSet;
|
|
177
219
|
/**
|
|
178
|
-
* A
|
|
179
|
-
* `data-paint
|
|
220
|
+
* A paint pack for this subtree. Opt-in: a provider that names none stamps no
|
|
221
|
+
* `data-paint` of its own. A nested one that names none follows the pack
|
|
222
|
+
* stamped around it **live**, through inheritance in the DOM and through
|
|
223
|
+
* `useTheme().paint` and its portals in React — and, if it names a `theme` or
|
|
224
|
+
* a `mode`, restates that pack as `data-paint` on its element, so the pack's
|
|
225
|
+
* strokes and inks (mixes of the theme's colours) resolve against this
|
|
226
|
+
* island's theme rather than the page's. One that names a pack keeps it
|
|
227
|
+
* whatever the root does.
|
|
180
228
|
*/
|
|
181
229
|
paint?: Paint;
|
|
182
|
-
/**
|
|
230
|
+
/**
|
|
231
|
+
* Multiplier on every text token, published as `--cue-font-scale`. Defaults to `1`.
|
|
232
|
+
*
|
|
233
|
+
* At a root that persists, pass the same number to
|
|
234
|
+
* `prepaintScript({ fontScale })`: until the root has restored the visitor's
|
|
235
|
+
* preferences, the type tokens the page reads are declared on `<html>`, and
|
|
236
|
+
* the script is what puts the scale there for the first frame. The root keeps
|
|
237
|
+
* it on `<html>` after that.
|
|
238
|
+
*/
|
|
183
239
|
fontScale?: number;
|
|
184
240
|
/** Optional app-owned font stacks, published as inline CUE font custom properties. */
|
|
185
241
|
fontFamilies?: FontFamilies;
|
|
@@ -199,6 +255,13 @@ interface ThemeProviderProps {
|
|
|
199
255
|
* onto portal containers — which mount on `<body>` and inherit nothing from
|
|
200
256
|
* here. They do not leak *out* of this provider: a nested provider's colour
|
|
201
257
|
* edit is scoped to its own subtree, and to portals opened from inside it.
|
|
258
|
+
* Under a root that persists, the server cannot know the visitor's mode, so
|
|
259
|
+
* until a root has restored, and until a nested provider whose mode is the
|
|
260
|
+
* root's has mounted, the colours are instead one small `<style>` beside this
|
|
261
|
+
* element, keyed on it and on `<html>`'s mode (and on `<html>`'s theme,
|
|
262
|
+
* where that decides the mode): the first frame is the visitor's mode with
|
|
263
|
+
* that mode's edit, never the other mode's. It carries `nonce`; refused by a
|
|
264
|
+
* policy, the edit waits for the mount.
|
|
202
265
|
*
|
|
203
266
|
* **Densities are one document-scoped `<style>` element**, because a rung is
|
|
204
267
|
* selected by attribute rather than inherited, and because
|
|
@@ -244,7 +307,9 @@ interface ThemeProviderProps {
|
|
|
244
307
|
*/
|
|
245
308
|
overrides?: TokenOverrides;
|
|
246
309
|
/**
|
|
247
|
-
* localStorage key holding `{ theme, density, font, mode }
|
|
310
|
+
* localStorage key holding `{ theme, density, font, mode }`, plus `style` when a
|
|
311
|
+
* style set has been chosen and `paint` when a pack has — each omitted, never
|
|
312
|
+
* stored as `null`, when none has. Defaults to `"cue-ui"`.
|
|
248
313
|
* Only the outermost provider reads or writes it — a nested provider is an
|
|
249
314
|
* island whose explicit props are the point, not a second preference store.
|
|
250
315
|
*/
|
|
@@ -265,7 +330,10 @@ interface ThemeProviderProps {
|
|
|
265
330
|
* {@link ThemeProviderProps.overrides}) — takes its nonce **from this prop
|
|
266
331
|
* alone**: not from an outer `CSPProvider`, and not from an outer
|
|
267
332
|
* `ThemeProvider`. A nested provider that sets its own `overrides.densities`
|
|
268
|
-
* needs its own `nonce`.
|
|
333
|
+
* needs its own `nonce`. So does the colour layer — one `<style
|
|
334
|
+
* data-cue-colors-for>` while `overrides.colors` waits on a mode that is
|
|
335
|
+
* `<html>`'s (see {@link ThemeProviderProps.overrides}); refused, the edit
|
|
336
|
+
* applies from the restore or the mount instead of the first frame.
|
|
269
337
|
*
|
|
270
338
|
* Base UI's scrollbar rule gets the nonce wherever React creates it in the
|
|
271
339
|
* browser. **It does not get it in server-rendered HTML** under a framework
|
|
@@ -307,7 +375,16 @@ interface ThemeProviderProps {
|
|
|
307
375
|
* warning of its own.
|
|
308
376
|
*/
|
|
309
377
|
nonce?: string;
|
|
310
|
-
/**
|
|
378
|
+
/**
|
|
379
|
+
* Stamp the single child element instead of rendering a wrapper `<div>`.
|
|
380
|
+
*
|
|
381
|
+
* A nested provider over a host element (`<section>`, `<main>`) behaves as
|
|
382
|
+
* its `<div>` would. Over a component it follows nothing from a persisting
|
|
383
|
+
* root before it mounts: it stamps the root's theme, mode and density from
|
|
384
|
+
* the server's first render, because the re-render that would correct them
|
|
385
|
+
* renders the component again, and a `<Suspense>` boundary the component
|
|
386
|
+
* creates would lose its streamed server HTML to it.
|
|
387
|
+
*/
|
|
311
388
|
asChild?: boolean;
|
|
312
389
|
/** Extra classes for the provider root. */
|
|
313
390
|
className?: string;
|
|
@@ -324,21 +401,41 @@ interface ThemeProviderProps {
|
|
|
324
401
|
*
|
|
325
402
|
* Rendering: `<div data-cue-root data-theme data-density data-mode style={{ colorScheme, --cue-font-scale }}>`
|
|
326
403
|
* (or the single child when `asChild`), plus `data-style` when — and only when —
|
|
327
|
-
* a style set is in force
|
|
404
|
+
* a style set is in force, and `data-paint` on the same terms for a pack. The
|
|
405
|
+
* `theme`/`density`/`font`/`mode`/`styleSet`/`paint` props are
|
|
328
406
|
* *initial* values — the provider holds the state so `setTheme` and friends can
|
|
329
407
|
* drive it — but a changed prop is adopted after mount, so a controlling parent
|
|
330
408
|
* still works.
|
|
331
409
|
*
|
|
410
|
+
* A **nested** provider stamps only what it names. One that names no theme,
|
|
411
|
+
* rung, mode, set or pack follows each of them from around it, live — a
|
|
412
|
+
* preference the root restores after mount, or a setter called at the root,
|
|
413
|
+
* reaches it, its `useTheme()` and its portals — and restates none of them on
|
|
414
|
+
* its element, so inheritance carries the outer attributes through. Naming a
|
|
415
|
+
* theme or a mode stamps theme, rung and mode together (a theme's light block
|
|
416
|
+
* and its rung rules are compound selectors), and restates the set and the pack
|
|
417
|
+
* in force beside them, so their blocks — whose values read the theme — resolve
|
|
418
|
+
* against this element's theme rather than the page's; naming only a rung
|
|
419
|
+
* stamps it as a `<Density>` island does.
|
|
420
|
+
*
|
|
332
421
|
* The font pairing is the one axis that never lands on this element: it has no
|
|
333
422
|
* island form, `<html>` is its only home, and restating it here would shadow the
|
|
334
423
|
* pre-paint stamp for the whole page on the first frame. See the `stamp` object
|
|
335
424
|
* below.
|
|
336
425
|
*
|
|
426
|
+
* The other axes wait for the same reason at a root that persists: its server
|
|
427
|
+
* markup, and its first client render, carry `data-cue-root` and no axis
|
|
428
|
+
* attribute or `color-scheme`, so the page inherits the visitor's stored axes
|
|
429
|
+
* from the pre-paint stamp on `<html>`. The restore lands before the first
|
|
430
|
+
* paint, and the element then states what it restored. Read the document's
|
|
431
|
+
* axes off `<html>`, not off this element, before hydration.
|
|
432
|
+
*
|
|
337
433
|
* Persistence and the pre-paint contract: setters write
|
|
338
434
|
* `{ theme, density, font, mode }` to `localStorage[storageKey]`, plus a `style`
|
|
339
|
-
* key holding the style set when there is one
|
|
340
|
-
*
|
|
341
|
-
*
|
|
435
|
+
* key holding the style set when there is one and a `paint` key holding the pack
|
|
436
|
+
* when there is one — each omitted entirely when there is not, so an application
|
|
437
|
+
* that never touches either axis writes the same four-key object it always
|
|
438
|
+
* wrote. That is exactly what
|
|
342
439
|
* {@link prepaintScript} reads to stamp `<html>` before the first paint. The
|
|
343
440
|
* outermost provider keeps `<html>` in sync while the app runs (and restores the
|
|
344
441
|
* previous stamp on unmount) so the page ground, UA scrollbars and form controls
|