@cueplusplus/ui 0.15.0 → 0.17.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 +1083 -0
- package/README.md +26 -0
- 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 +4 -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 +17 -1
- package/dist/chrome/_tabs-scroll.js +20 -3
- package/dist/chrome/app-bar.js +10 -3
- package/dist/chrome/app-shell.js +2 -1
- package/dist/chrome/band.d.ts +18 -12
- package/dist/chrome/band.js +19 -31
- 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 +4 -2
- package/dist/chrome/page-shell.js +8 -5
- package/dist/chrome/panel.d.ts +5 -2
- package/dist/chrome/panel.js +9 -4
- package/dist/chrome/row.js +6 -3
- package/dist/chrome/scroll-area.js +2 -1
- package/dist/chrome/section-header.js +13 -4
- package/dist/chrome/segmented-control.js +12 -3
- package/dist/chrome/status-bar.js +2 -1
- package/dist/chrome/tabs.js +11 -3
- package/dist/chrome/toolbar.js +2 -1
- 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-field.d.ts +2 -1
- package/dist/color/color-picker.d.ts +2 -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/calendar.js +12 -8
- package/dist/date/date-field.d.ts +2 -1
- package/dist/date/date-picker.d.ts +2 -1
- package/dist/date/date-range-picker.d.ts +2 -1
- package/dist/date/time-field.d.ts +2 -1
- 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-size.d.ts +22 -0
- package/dist/forms/_chassis.d.ts +28 -15
- package/dist/forms/_chassis.js +34 -8
- package/dist/forms/_listbox.js +8 -5
- package/dist/forms/autocomplete.d.ts +2 -1
- package/dist/forms/checkbox.js +8 -2
- package/dist/forms/combobox.d.ts +2 -1
- package/dist/forms/env-var-input.d.ts +2 -1
- package/dist/forms/env-var-input.js +3 -2
- package/dist/forms/field.d.ts +2 -1
- package/dist/forms/field.js +15 -4
- package/dist/forms/file-upload.js +3 -2
- package/dist/forms/index.d.ts +2 -1
- package/dist/forms/input-group.d.ts +2 -1
- package/dist/forms/input.d.ts +2 -1
- package/dist/forms/multi-select.d.ts +2 -1
- package/dist/forms/number-field.js +2 -1
- package/dist/forms/otp-field.d.ts +2 -1
- package/dist/forms/password-input.d.ts +2 -1
- package/dist/forms/password-input.js +4 -2
- package/dist/forms/radio-group.js +6 -2
- package/dist/forms/rating.js +2 -1
- package/dist/forms/scrub-input.d.ts +2 -1
- package/dist/forms/scrub-input.js +2 -1
- package/dist/forms/search-input.d.ts +2 -1
- package/dist/forms/search-input.js +2 -1
- package/dist/forms/select.d.ts +2 -1
- package/dist/forms/select.js +6 -2
- package/dist/forms/slider.js +6 -2
- package/dist/forms/switch.js +6 -2
- package/dist/forms/tags-input.d.ts +2 -1
- package/dist/forms/textarea.js +2 -1
- package/dist/forms/toggle-group.d.ts +1 -1
- package/dist/forms/toggle.d.ts +1 -1
- package/dist/forms/toggle.js +3 -1
- package/dist/index.d.ts +4 -3
- 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 +5 -3
- package/dist/instruments/progress.js +5 -2
- package/dist/instruments/seam-grid.js +5 -3
- package/dist/instruments/stat.js +10 -3
- package/dist/instruments/table.js +28 -10
- package/dist/instruments/terminal-frame.js +4 -2
- package/dist/instruments/usage-chart.js +1 -1
- package/dist/layout/_collapse.js +6 -1
- package/dist/layout/bento.js +7 -4
- package/dist/layout/breadcrumb.js +7 -3
- package/dist/layout/card.js +14 -6
- package/dist/layout/carousel.js +3 -2
- package/dist/layout/collapsible.js +5 -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 +16 -0
- package/dist/layout/link.js +22 -3
- package/dist/layout/pagination.js +2 -1
- 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/musical-time-input.d.ts +2 -1
- 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 +72 -12
- package/dist/overlays/_surface.js +86 -12
- package/dist/overlays/command-palette.js +9 -5
- package/dist/overlays/dialog.d.ts +5 -0
- package/dist/overlays/dialog.js +6 -1
- package/dist/overlays/info-tip.js +2 -1
- package/dist/overlays/menubar.js +3 -1
- package/dist/overlays/popover.js +2 -1
- package/dist/overlays/toast.js +6 -2
- package/dist/overlays/tooltip.js +4 -1
- package/dist/primitives/button.d.ts +15 -0
- package/dist/primitives/button.js +40 -10
- package/dist/primitives/chip.d.ts +20 -2
- package/dist/primitives/chip.js +39 -17
- package/dist/primitives/kbd.d.ts +6 -0
- package/dist/primitives/kbd.js +10 -1
- package/dist/primitives/skeleton.js +1 -1
- package/dist/system/_focus-ring-field.js +29 -0
- package/dist/system/_focus-ring.js +125 -0
- package/dist/system/_paint-elevation.js +9 -0
- package/dist/system/_paint-glass.js +46 -0
- package/dist/system/_paint-glow.js +51 -0
- package/dist/system/_paint-ground-pattern.js +30 -0
- package/dist/system/_paint-rest-shade.js +32 -0
- package/dist/system/_paint-rim.js +59 -0
- package/dist/system/_paint-stroke-sunken.js +19 -0
- package/dist/system/_paint-stroke-surface-1.js +19 -0
- package/dist/system/_paint-stroke-surface-2.js +40 -0
- package/dist/system/_paint-texture.js +56 -0
- package/dist/system/_style-app-bar.js +65 -0
- package/dist/system/_style-band.js +57 -0
- package/dist/system/_style-body-leading.js +21 -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 +27 -0
- package/dist/system/_style-caption.js +19 -0
- package/dist/system/_style-card-pad.js +43 -0
- package/dist/system/_style-check.js +33 -0
- package/dist/system/_style-chip.js +103 -0
- package/dist/system/_style-code.js +13 -0
- package/dist/system/_style-collapse.js +14 -0
- package/dist/system/_style-control-face.js +29 -0
- package/dist/system/_style-control-label.js +22 -0
- package/dist/system/_style-control-step.js +22 -0
- package/dist/system/_style-control.js +76 -0
- package/dist/system/_style-data-face.js +28 -0
- package/dist/system/_style-description.js +23 -0
- package/dist/system/_style-eyebrow.js +43 -0
- package/dist/system/_style-footer-rule.js +47 -0
- package/dist/system/_style-gutter.js +17 -0
- package/dist/system/_style-help-ink.js +14 -0
- package/dist/system/_style-help.js +29 -0
- package/dist/system/_style-input-face.js +34 -0
- package/dist/system/_style-kbd.js +46 -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 +46 -0
- package/dist/system/_style-menu.js +30 -0
- package/dist/system/_style-nav-item.js +41 -0
- package/dist/system/_style-nav-voice.js +43 -0
- package/dist/system/_style-option.js +42 -0
- package/dist/system/_style-overlay-title.js +35 -0
- package/dist/system/_style-page-title.js +48 -0
- package/dist/system/_style-popover-pad.js +13 -0
- package/dist/system/_style-quiet-ink.js +13 -0
- package/dist/system/_style-row-pad.js +13 -0
- package/dist/system/_style-seam.js +43 -0
- package/dist/system/_style-section-rule.js +26 -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-stage-marks.js +26 -0
- package/dist/system/_style-tab.js +71 -0
- package/dist/system/_style-textarea.js +21 -0
- package/dist/system/_style-title.js +37 -0
- package/dist/system/_style-tooltip.js +17 -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 +168 -60
- package/dist/system/theme-provider.js +375 -79
- 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 +7 -1
- package/manifest/components/agent-pile.json +3 -0
- package/manifest/components/alert-dialog.json +38 -1
- package/manifest/components/app-bar.json +23 -2
- package/manifest/components/app-shell.json +5 -0
- package/manifest/components/ask-box.json +3 -1
- package/manifest/components/autocomplete.json +49 -1
- package/manifest/components/band.json +14 -3
- package/manifest/components/bento.json +12 -1
- package/manifest/components/breadcrumb.json +8 -1
- package/manifest/components/button.json +31 -3
- package/manifest/components/calendar.json +7 -0
- package/manifest/components/card.json +28 -1
- package/manifest/components/carousel.json +4 -1
- package/manifest/components/channel-matrix.json +40 -1
- package/manifest/components/chart-tooltip-content.json +38 -1
- package/manifest/components/chat-empty-state.json +3 -1
- package/manifest/components/checkbox-group.json +14 -0
- package/manifest/components/checkbox.json +14 -0
- package/manifest/components/chip.json +16 -1
- package/manifest/components/clamp.json +3 -1
- package/manifest/components/code-block.json +10 -1
- package/manifest/components/collapsible.json +13 -2
- package/manifest/components/color-area.json +4 -2
- package/manifest/components/color-field.json +14 -0
- package/manifest/components/color-picker.json +14 -0
- package/manifest/components/color-slider.json +3 -1
- package/manifest/components/colors-section.json +9 -1
- package/manifest/components/combobox.json +49 -1
- package/manifest/components/command-palette.json +37 -1
- 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 +14 -0
- package/manifest/components/confidence-marker.json +3 -1
- package/manifest/components/container.json +2 -1
- package/manifest/components/context-menu.json +38 -1
- 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 +14 -0
- package/manifest/components/date-picker.json +14 -0
- package/manifest/components/date-range-picker.json +14 -0
- package/manifest/components/delegation-card.json +3 -1
- package/manifest/components/density.json +21 -7
- package/manifest/components/description-list.json +6 -1
- package/manifest/components/dialog.json +39 -1
- package/manifest/components/disclosure.json +13 -2
- package/manifest/components/dmx-bar.json +37 -1
- package/manifest/components/dmx-strip.json +37 -1
- package/manifest/components/drawer.json +38 -1
- package/manifest/components/dropdown-menu.json +38 -1
- 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/env-var-input.json +14 -1
- 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 +14 -0
- package/manifest/components/field-error.json +14 -0
- package/manifest/components/field-label.json +15 -1
- package/manifest/components/field.json +14 -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 +38 -1
- package/manifest/components/info-tip.json +3 -0
- package/manifest/components/input-group.json +14 -0
- package/manifest/components/input.json +14 -0
- package/manifest/components/item.json +3 -1
- package/manifest/components/kbd.json +10 -1
- package/manifest/components/ledger.json +9 -2
- package/manifest/components/link.json +10 -0
- package/manifest/components/log-viewer.json +10 -0
- package/manifest/components/map-answer.json +3 -1
- package/manifest/components/markdown-text.json +3 -0
- package/manifest/components/menubar.json +41 -2
- package/manifest/components/message-list.json +10 -0
- package/manifest/components/message.json +6 -1
- package/manifest/components/mobile-composer.json +3 -1
- package/manifest/components/multi-select.json +49 -1
- package/manifest/components/musical-time-input.json +14 -0
- package/manifest/components/navigation-menu.json +41 -1
- package/manifest/components/node-card.json +3 -0
- package/manifest/components/number-field.json +14 -1
- package/manifest/components/otp-field.json +13 -0
- package/manifest/components/page-shell.json +14 -0
- package/manifest/components/pagination.json +3 -0
- package/manifest/components/panel-header.json +12 -0
- package/manifest/components/panel.json +13 -1
- package/manifest/components/password-input.json +14 -1
- package/manifest/components/permission-scopes.json +3 -1
- package/manifest/components/piano-keyboard.json +3 -0
- package/manifest/components/popover.json +39 -1
- package/manifest/components/preset-section.json +9 -1
- package/manifest/components/preview.json +30 -10
- package/manifest/components/progress.json +6 -1
- package/manifest/components/prompt-library.json +3 -1
- package/manifest/components/queue-dock.json +3 -1
- package/manifest/components/radio-group.json +8 -0
- package/manifest/components/radio.json +8 -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 +5 -1
- package/manifest/components/scroll-area.json +4 -2
- package/manifest/components/scrollable-tabs-list.json +19 -0
- package/manifest/components/scrub-input.json +14 -1
- package/manifest/components/seam-cell.json +1 -0
- package/manifest/components/seam-grid.json +1 -0
- package/manifest/components/seam-list.json +5 -1
- package/manifest/components/search-input.json +14 -1
- package/manifest/components/section-header.json +15 -2
- package/manifest/components/segmented-control.json +17 -0
- package/manifest/components/select.json +28 -0
- package/manifest/components/settings-panel.json +3 -0
- package/manifest/components/shape-section.json +9 -1
- package/manifest/components/sheet.json +38 -1
- package/manifest/components/shimmer-label.json +3 -0
- package/manifest/components/sidebar.json +19 -2
- package/manifest/components/slider.json +8 -0
- package/manifest/components/sources.json +3 -1
- package/manifest/components/stat.json +9 -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 +8 -0
- package/manifest/components/table-scroll-region.json +20 -2
- package/manifest/components/table.json +20 -2
- package/manifest/components/tabs.json +20 -1
- package/manifest/components/tags-input.json +49 -1
- package/manifest/components/terminal-frame.json +3 -0
- package/manifest/components/textarea.json +16 -0
- package/manifest/components/theme-configurator.json +38 -1
- package/manifest/components/theme-provider.json +37 -19
- package/manifest/components/thread-search.json +3 -1
- package/manifest/components/threshold-rail.json +3 -0
- package/manifest/components/time-field.json +14 -0
- package/manifest/components/toast.json +39 -0
- package/manifest/components/toggle-group.json +1 -19
- package/manifest/components/toggle.json +3 -5
- 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 +4 -1
- package/manifest/components/tooltip.json +40 -1
- 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/manifest.json +205 -185
- package/manifest/tokens.json +260 -4
- package/package.json +6 -6
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//#region src/system/_style-nav-voice.ts
|
|
2
|
+
/**
|
|
3
|
+
* The voice a navigation link speaks in — face, case, tracking, size and
|
|
4
|
+
* weight — each the style set's choice, each falling back to what its reader
|
|
5
|
+
* rendered before this existed.
|
|
6
|
+
*
|
|
7
|
+
* Spec 2026-09-26-looks-fidelity §3.8 (plan R4). `AppBar.Link` and `Footer`'s
|
|
8
|
+
* column both said `font-mono text-(length:--cue-text-ui)` and nothing more,
|
|
9
|
+
* so a Look whose header links are sans (tender, kiln, porcelain), uppercase
|
|
10
|
+
* and tracked (zine) or medium (porcelain) could only say so with a class at
|
|
11
|
+
* every call site, which a Look does not follow.
|
|
12
|
+
*
|
|
13
|
+
* **The fallbacks are the old classes, spelt out**, for the reason
|
|
14
|
+
* `_style-control-face.ts` gives: none of these names is declared on `:root`,
|
|
15
|
+
* and every set that declines one resets it to `initial` on the shared
|
|
16
|
+
* `[data-style]` block (spec §3.0), so a reader resolves its own fallback at
|
|
17
|
+
* itself. `font-mono` compiled to `var(--cue-font-mono)` and
|
|
18
|
+
* `text-(length:--cue-text-ui)` to `var(--cue-text-ui)`. Case, tracking and
|
|
19
|
+
* weight were inherited, and computed `none`, `normal` and `400` at both
|
|
20
|
+
* readers under every shipped set — spec §3.8's three fallbacks.
|
|
21
|
+
*
|
|
22
|
+
* **Weight is written `font-[number:…]`.** A bare `font-[var(…)]` is read as a
|
|
23
|
+
* family (plan §R1), and the `number` label makes it a weight to Tailwind —
|
|
24
|
+
* which emits exactly what `font-medium` emits, `--tw-font-weight` included —
|
|
25
|
+
* and to `tailwind-merge`, so a caller's `className="font-medium"` replaces it
|
|
26
|
+
* through `cn()`. Spelt as an arbitrary `[font-weight:…]` property it survived
|
|
27
|
+
* the merge beside the caller's class and won the cascade, because Tailwind
|
|
28
|
+
* emits it after `font-medium`: `<AppBar.Link className="font-medium">` drew
|
|
29
|
+
* 400. Case is an arbitrary property for the reason `_style-label-case.ts`
|
|
30
|
+
* gives — no case utility takes a value — and nothing merges it with a
|
|
31
|
+
* caller's `uppercase`, but Tailwind emits it before `uppercase`,
|
|
32
|
+
* `normal-case` and the rest, so the caller's case still wins the cascade.
|
|
33
|
+
*
|
|
34
|
+
* **Its own module**, because `@repo/docgen` credits a component with every
|
|
35
|
+
* `--cue-*` in each `_`-prefixed file it imports (`_style-control-face.ts`'s
|
|
36
|
+
* note). `Footer` reads this voice and none of `AppBar.Link`'s own names, which
|
|
37
|
+
* live in `_style-app-bar.ts`.
|
|
38
|
+
*
|
|
39
|
+
* @internal Not part of the public API.
|
|
40
|
+
*/
|
|
41
|
+
const NAV_VOICE = "font-[family-name:var(--cue-style-nav-face,var(--cue-font-mono))] [text-transform:var(--cue-style-nav-case,none)] tracking-[var(--cue-style-nav-tracking,normal)] text-[length:var(--cue-style-nav-size,var(--cue-text-ui))] font-[number:var(--cue-style-nav-weight,400)]";
|
|
42
|
+
//#endregion
|
|
43
|
+
export { NAV_VOICE };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//#region src/system/_style-option.ts
|
|
2
|
+
/**
|
|
3
|
+
* One row of a list a control opens: `Select`'s items and the filterable
|
|
4
|
+
* lists' (`Combobox`, `Autocomplete`, `MultiSelect`, `TagsInput`).
|
|
5
|
+
*
|
|
6
|
+
* Plan V.2 (T112, P112, P127). The two shared one class string —
|
|
7
|
+
* `text-fg-muted … data-[highlighted]:bg-accent-soft … data-[selected]:text-accent`
|
|
8
|
+
* — which no Look could reach, so a select under Tender drew a lilac selected
|
|
9
|
+
* row on a lilac highlight where the source draws navy on a 5% wash, and under
|
|
10
|
+
* Porcelain a square muted row where the source draws a rounded `fg` one.
|
|
11
|
+
*
|
|
12
|
+
* | part | reads | fallback |
|
|
13
|
+
* |-----------------|-----------------------------------------------|------------------------------|
|
|
14
|
+
* | idle ink | `style-option-ink` | `var(--cue-fg-muted)` |
|
|
15
|
+
* | highlight | `style-menu-highlight`, as a menu row's does | `var(--cue-accent-soft)` |
|
|
16
|
+
* | selected ink | `style-option-selected-ink` | `var(--cue-accent)` |
|
|
17
|
+
* | idle weight | `style-body-weight`, on an unselected row | `inherit` |
|
|
18
|
+
* | corner | `style-menu-item-radius` | `0px` |
|
|
19
|
+
*
|
|
20
|
+
* **Its own two inks**, not `style-quiet-ink` and `style-selected-ink`. The
|
|
21
|
+
* quiet ink is a ghost button's and a menu row's; Tender's is `fg`, and its
|
|
22
|
+
* select rows measure a 55% share of `fg` into `fg-muted`. The selected ink is
|
|
23
|
+
* the sidebar's active item's and a table's selected row's; Tender's option
|
|
24
|
+
* ink is navy where its sidebar keeps the lilac accent. Porcelain's rows,
|
|
25
|
+
* which do measure `fg`, declare the option ink as `var(--cue-fg)`.
|
|
26
|
+
*
|
|
27
|
+
* **The weight goes on the unselected row only**, at zero specificity
|
|
28
|
+
* (`[:where(&:not([data-selected]))]:`): Tender's body copy is 300 and its
|
|
29
|
+
* selected row keeps the 400 it inherits, and a caller's `font-*` class on a
|
|
30
|
+
* row still beats both, as it beat nothing before.
|
|
31
|
+
*
|
|
32
|
+
* `data-[highlighted]:text-fg` stays a class: every Look's highlighted row is
|
|
33
|
+
* `fg`. The weight is spelt out whole rather than composed from
|
|
34
|
+
* `_style-body-weight.ts`: a variant prefixed onto an interpolated constant is
|
|
35
|
+
* a class that appears in no source file, and a consumer's Tailwind, which
|
|
36
|
+
* scans this package's build for candidates, would never generate it.
|
|
37
|
+
*
|
|
38
|
+
* @internal Not part of the public API.
|
|
39
|
+
*/
|
|
40
|
+
const OPTION_ROW = "rounded-[var(--cue-style-menu-item-radius,0px)] text-[color:var(--cue-style-option-ink,var(--cue-fg-muted))] [:where(&:not([data-selected]))]:font-[number:var(--cue-style-body-weight,inherit)] data-[highlighted]:bg-[color:var(--cue-style-menu-highlight,var(--cue-accent-soft))] data-[highlighted]:text-fg data-[selected]:text-[color:var(--cue-style-option-selected-ink,var(--cue-accent))]";
|
|
41
|
+
//#endregion
|
|
42
|
+
export { OPTION_ROW };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region src/system/_style-overlay-title.ts
|
|
2
|
+
/**
|
|
3
|
+
* The heading line of a dialog, an alert dialog, a drawer, a sheet or a popover:
|
|
4
|
+
* the title voice's face, weight, ink and variation, at its own size.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.3, plan R1. `overlayTitleClasses` spelt
|
|
7
|
+
* `font-mono text-(length:--cue-text-emphasis) font-medium text-fg`. It reads
|
|
8
|
+
* `style-title-face` and `style-title-weight` because a Look's dialog title is
|
|
9
|
+
* its card title's face and weight, but `style-overlay-title-size` rather than
|
|
10
|
+
* `style-title-size`, because the one Look that sizes it measured them apart
|
|
11
|
+
* (Porcelain: a 20px dialog title over 16px card titles, P42). It reads no
|
|
12
|
+
* tracking and no leading: no Look measured either on an overlay.
|
|
13
|
+
*
|
|
14
|
+
* | property | reads | fallback (the class it replaced) |
|
|
15
|
+
* |-------------------------|----------------------------|----------------------------------|
|
|
16
|
+
* | font-family | `style-title-face` | `var(--cue-font-mono)` (`font-mono`) |
|
|
17
|
+
* | font-size | `style-overlay-title-size` | `var(--cue-text-emphasis)` |
|
|
18
|
+
* | font-weight | `style-title-weight` | `500` (`font-medium`) |
|
|
19
|
+
* | font-variation-settings | `style-display-variation` | `normal` |
|
|
20
|
+
* | color | `style-heading-ink` | `var(--cue-fg)` (`text-fg`) |
|
|
21
|
+
*
|
|
22
|
+
* `style-display-variation` is here although the plan's R1 list for this site
|
|
23
|
+
* leaves it out: the spec (§3.1) names "the title-voice readers" as its readers,
|
|
24
|
+
* and §3.3 names this title as one of them.
|
|
25
|
+
*
|
|
26
|
+
* **Every name is optional** (spec §3.0), so under every shipped set each
|
|
27
|
+
* `var()` resolves its fallback at the title. A module of its own and not an
|
|
28
|
+
* import of `_style-title.ts`, which would publish that file's size, tracking and
|
|
29
|
+
* leading as tokens every overlay paints.
|
|
30
|
+
*
|
|
31
|
+
* @internal Not part of the public API.
|
|
32
|
+
*/
|
|
33
|
+
const OVERLAY_TITLE_VOICE = "font-[family-name:var(--cue-style-title-face,var(--cue-font-mono))] text-[length:var(--cue-style-overlay-title-size,var(--cue-text-emphasis))] leading-[var(--cue-style-overlay-title-leading,inherit)] font-[number:var(--cue-style-title-weight,500)] [font-variation-settings:var(--cue-style-display-variation,normal)] text-[color:var(--cue-style-heading-ink,var(--cue-fg))]";
|
|
34
|
+
//#endregion
|
|
35
|
+
export { OVERLAY_TITLE_VOICE };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//#region src/system/_style-page-title.ts
|
|
2
|
+
/**
|
|
3
|
+
* The `PageShell` h1's voice: mono, `text-title`, weight 500, at the page's own
|
|
4
|
+
* tracking and leading, in `fg`, until a style set says otherwise.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.2 (and §3.1 for the ink and the variation),
|
|
7
|
+
* plan R1. The page title and a card's title are separate voices, because three
|
|
8
|
+
* Looks measure them apart: Porcelain 36px against 16px, Kiln 64px against 32px,
|
|
9
|
+
* Zine a display face against a sans. So the h1 reads its own five
|
|
10
|
+
* `style-page-title-*` names rather than the title voice's
|
|
11
|
+
* (`_style-title.ts`), and shares only the two names every heading shares:
|
|
12
|
+
* `style-heading-ink` and `style-display-variation`.
|
|
13
|
+
*
|
|
14
|
+
* | property | reads | fallback (the class it replaced) |
|
|
15
|
+
* |-------------------------|--------------------------------|----------------------------------|
|
|
16
|
+
* | font-family | `style-page-title-face` | `var(--cue-font-mono)` (`font-mono`) |
|
|
17
|
+
* | font-size | `style-page-title-size` | `var(--cue-text-title)` |
|
|
18
|
+
* | font-weight | `style-page-title-weight` | `500` (`font-medium`) |
|
|
19
|
+
* | letter-spacing | `style-page-title-tracking` | `normal` |
|
|
20
|
+
* | line-height | `style-page-title-leading` | `inherit` |
|
|
21
|
+
* | font-variation-settings | `style-display-variation` | `normal` |
|
|
22
|
+
* | color | `style-heading-ink` | `var(--cue-fg)` (`text-fg`) |
|
|
23
|
+
*
|
|
24
|
+
* **Every name is optional** (spec §3.0): none is declared on `:root`, `console`
|
|
25
|
+
* declines each, and every shipped set leaves them at the shared
|
|
26
|
+
* `[data-style] { …: initial }` reset, so each `var()` resolves its fallback at
|
|
27
|
+
* the h1 itself — the value the old class computed there, under every set and in
|
|
28
|
+
* every density island.
|
|
29
|
+
*
|
|
30
|
+
* **Weight is `font-[number:…]`**, the typed form: a bare `font-[var(…)]` is
|
|
31
|
+
* read as a family by `tailwind-merge`, and the arbitrary property
|
|
32
|
+
* `[font-weight:…]` is in no `tailwind-merge` group at all, so a caller's
|
|
33
|
+
* `font-bold` would no longer replace it — and it sorts after `font-bold` in the
|
|
34
|
+
* built stylesheet, so it would win. `number:` keeps both Tailwind and
|
|
35
|
+
* `tailwind-merge` reading a weight.
|
|
36
|
+
*
|
|
37
|
+
* **Size before leading**, because `tailwind-merge` drops a `leading-*` that
|
|
38
|
+
* precedes a font size in the same list.
|
|
39
|
+
*
|
|
40
|
+
* **Its own module**, because `@repo/docgen` attributes a token to a component by
|
|
41
|
+
* the file its class string lives in, following only `_`-prefixed imports:
|
|
42
|
+
* every name here is one the page title spends, and nothing else imports it.
|
|
43
|
+
*
|
|
44
|
+
* @internal Not part of the public API.
|
|
45
|
+
*/
|
|
46
|
+
const PAGE_TITLE_VOICE = "font-[family-name:var(--cue-style-page-title-face,var(--cue-font-mono))] text-[length:var(--cue-style-page-title-size,var(--cue-text-title))] font-[number:var(--cue-style-page-title-weight,500)] tracking-[var(--cue-style-page-title-tracking,normal)] leading-[var(--cue-style-page-title-leading,inherit)] [font-variation-settings:var(--cue-style-display-variation,normal)] text-[color:var(--cue-style-heading-ink,var(--cue-fg))] [overflow-wrap:anywhere]";
|
|
47
|
+
//#endregion
|
|
48
|
+
export { PAGE_TITLE_VOICE };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/system/_style-popover-pad.ts
|
|
2
|
+
/**
|
|
3
|
+
* The popover's padding (plan V.2, P131): the `space-4` rung times
|
|
4
|
+
* `style-popover-pad`, `1` under a set that has none. Porcelain's popover is
|
|
5
|
+
* 16px in.
|
|
6
|
+
*
|
|
7
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason.
|
|
8
|
+
*
|
|
9
|
+
* @internal Not part of the public API.
|
|
10
|
+
*/
|
|
11
|
+
const POPOVER_PAD = "p-[calc(var(--cue-space-4)*var(--cue-style-popover-pad,1))]";
|
|
12
|
+
//#endregion
|
|
13
|
+
export { POPOVER_PAD };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/system/_style-quiet-ink.ts
|
|
2
|
+
/**
|
|
3
|
+
* The quiet ink, for a site that reads it without the rest of the control
|
|
4
|
+
* vocabulary: the disclosure trigger (plan V.2, P125) — `style-quiet-ink`,
|
|
5
|
+
* falling back to the `fg-muted` it drew. The same class `_style-control.ts`
|
|
6
|
+
* spells as `GHOST_INK`, restated in a module of its own so docgen does not
|
|
7
|
+
* publish every button name as a token of an accordion.
|
|
8
|
+
*
|
|
9
|
+
* @internal Not part of the public API.
|
|
10
|
+
*/
|
|
11
|
+
const QUIET_INK = "text-[color:var(--cue-style-quiet-ink,var(--cue-fg-muted))]";
|
|
12
|
+
//#endregion
|
|
13
|
+
export { QUIET_INK };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/system/_style-row-pad.ts
|
|
2
|
+
/**
|
|
3
|
+
* A table row's block padding (plan V.2, P121): the `pad-row-y` rung times
|
|
4
|
+
* `style-row-pad`, `1` under a set that has none. Porcelain's table rows are
|
|
5
|
+
* 40px, half again its rung's padding.
|
|
6
|
+
*
|
|
7
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason.
|
|
8
|
+
*
|
|
9
|
+
* @internal Not part of the public API.
|
|
10
|
+
*/
|
|
11
|
+
const ROW_PAD_Y = "py-[calc(var(--cue-pad-row-y)*var(--cue-style-row-pad,1))]";
|
|
12
|
+
//#endregion
|
|
13
|
+
export { ROW_PAD_Y };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//#region src/system/_style-seam.ts
|
|
2
|
+
/**
|
|
3
|
+
* The seam idiom's ink: the colour that shows through a 1px gap and becomes the
|
|
4
|
+
* hairline between two filled cells.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26 R-8. `SeamGrid`, `SeamList` and `<Card seam>` each hard-coded
|
|
7
|
+
* `bg-border` for it, so a style set could say how its bands are ruled
|
|
8
|
+
* (`--cue-band-rule-color`) and had no way to say that the line INSIDE a
|
|
9
|
+
* component is lighter than a box edge — which is what every site in the
|
|
10
|
+
* 2026-09-22 corpus that draws seams does (agent-native's seam is its subtle
|
|
11
|
+
* line, not its default border). `--cue-style-seam-color` is that statement.
|
|
12
|
+
*
|
|
13
|
+
* **The fallback is the old class, spelt out.** `bg-border` compiles to
|
|
14
|
+
* `background-color: var(--cue-border)`, and `--cue-style-seam-color` is on no
|
|
15
|
+
* `:root` — a `:root` `var(--cue-border)` would be substituted at `<html>` and
|
|
16
|
+
* freeze the page's border into every theme island. Under no set this resolves
|
|
17
|
+
* at the grid itself, exactly as `bg-border` did.
|
|
18
|
+
*
|
|
19
|
+
* @internal Not part of the public API.
|
|
20
|
+
*/
|
|
21
|
+
const SEAM_INK = "bg-[color:var(--cue-style-seam-color,var(--cue-border))]";
|
|
22
|
+
/**
|
|
23
|
+
* The rim a bordered seam container draws around its cells, in the seam's ink.
|
|
24
|
+
*
|
|
25
|
+
* The rim is part of the idiom rather than an unrelated border: `SeamGrid`'s
|
|
26
|
+
* `bordered` is "a hairline rim around the whole grid as well as between the
|
|
27
|
+
* cells", and a rim in the box-edge colour around seams in a lighter one reads
|
|
28
|
+
* as a box drawn around a grid — the one thing the idiom exists not to be.
|
|
29
|
+
*
|
|
30
|
+
* **`bg-clip-padding` is what keeps a translucent seam honest.** The container's
|
|
31
|
+
* own background is the seam, and by default it paints under the border too; an
|
|
32
|
+
* opaque ink hides that, but a share over transparency — graphite's
|
|
33
|
+
* `color-mix(in oklch, var(--cue-border) 60%, transparent)` — would lay the rim
|
|
34
|
+
* over a second copy of itself and draw it darker than the seams it encloses.
|
|
35
|
+
* Under an opaque ink, which is every set but graphite and every page under no
|
|
36
|
+
* set, the clip changes nothing a reader can see: the border covers exactly the
|
|
37
|
+
* area it removes the background from.
|
|
38
|
+
*
|
|
39
|
+
* @internal Not part of the public API.
|
|
40
|
+
*/
|
|
41
|
+
const SEAM_RIM = "border-[color:var(--cue-style-seam-color,var(--cue-border))] bg-clip-padding";
|
|
42
|
+
//#endregion
|
|
43
|
+
export { SEAM_INK, SEAM_RIM };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/system/_style-section-rule.ts
|
|
2
|
+
/**
|
|
3
|
+
* The ink of a rule that divides a section: `SectionHeader`'s hairline and the
|
|
4
|
+
* rule over `Footer`'s fine print.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.11 (plan R4). Both drew `var(--cue-border)`
|
|
7
|
+
* through `bg-border` and `border-border`, and a Look that sets its sections
|
|
8
|
+
* apart by space alone (kiln) had no way to take the line away without taking
|
|
9
|
+
* the box edges with it. `--cue-style-section-rule` says it, and these read it.
|
|
10
|
+
*
|
|
11
|
+
* **The fallbacks are the old classes, spelt out**, for the reason
|
|
12
|
+
* `_style-control-face.ts` gives. Two exports because the two readers paint
|
|
13
|
+
* the same ink through two properties: the header's rule is a `h-px` block
|
|
14
|
+
* with a ground, the footer's is a top border.
|
|
15
|
+
*
|
|
16
|
+
* **Its own module**, for the docgen reason `_style-nav-voice.ts` gives: both
|
|
17
|
+
* readers read exactly this one name.
|
|
18
|
+
*
|
|
19
|
+
* @internal Not part of the public API.
|
|
20
|
+
*/
|
|
21
|
+
/** A rule drawn as a filled hairline block (`SectionHeader`). */
|
|
22
|
+
const SECTION_RULE_FILL = "bg-[color:var(--cue-style-section-rule,var(--cue-border))]";
|
|
23
|
+
/** A rule drawn as a border (`Footer`'s fine print); the element sets which side. */
|
|
24
|
+
const SECTION_RULE_EDGE = "border-[color:var(--cue-style-section-rule,var(--cue-border))]";
|
|
25
|
+
//#endregion
|
|
26
|
+
export { SECTION_RULE_EDGE, SECTION_RULE_FILL };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region src/system/_style-segment.ts
|
|
2
|
+
/**
|
|
3
|
+
* The segment family's shared half: the ink of a choice that is not the
|
|
4
|
+
* current one — read by `SegmentedControl` and `Tabs` alike.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.8 and §3.10 (plan R4). Both components
|
|
7
|
+
* mark the current choice their own way — a tinted segment, an underlined
|
|
8
|
+
* tab — and two Looks draw both as one object: a filled track with the choice
|
|
9
|
+
* raised on it as a pill with an edge and a resting shade (kiln, porcelain).
|
|
10
|
+
* The segment names say it, in both components at once. Where each component
|
|
11
|
+
* draws the track, and what it reads for its current choice, has a fallback of
|
|
12
|
+
* its own, so it lives with that component: `SegmentedControl`'s frame and
|
|
13
|
+
* pressed segment in `_style-segmented-control.ts`, the `Tabs` list and active
|
|
14
|
+
* tab in `_style-tab.ts`.
|
|
15
|
+
*
|
|
16
|
+
* **The fallback is the class it replaced**, for the reason
|
|
17
|
+
* `_style-control-face.ts` gives: an idle choice was `text-fg-muted`.
|
|
18
|
+
*
|
|
19
|
+
* **Its own module, holding only what both read**, because `@repo/docgen`
|
|
20
|
+
* credits a component with every `--cue-*` in each `_`-prefixed file it
|
|
21
|
+
* imports (`_style-nav-voice.ts`'s note). When the pressed segment's constants
|
|
22
|
+
* lived here, `Tabs` was published as a user of `--cue-accent-soft`, the
|
|
23
|
+
* pressed segment's fallback, which no tab paints.
|
|
24
|
+
*
|
|
25
|
+
* @internal Not part of the public API.
|
|
26
|
+
*/
|
|
27
|
+
/** A choice that is not the current one. */
|
|
28
|
+
const SEGMENT_IDLE_INK = "text-[color:var(--cue-style-segment-idle-ink,var(--cue-fg-muted))]";
|
|
29
|
+
//#endregion
|
|
30
|
+
export { SEGMENT_IDLE_INK };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
//#region src/system/_style-segmented-control.ts
|
|
2
|
+
/**
|
|
3
|
+
* What `SegmentedControl` reads from the style set: the track its segments sit
|
|
4
|
+
* in, and the pressed segment's ground, ink, weight, edge, resting shade and
|
|
5
|
+
* corners.
|
|
6
|
+
*
|
|
7
|
+
* Spec 2026-09-26-looks-fidelity §3.8 and §3.10 (plan R4). The shared half of
|
|
8
|
+
* the segment family — the track and the idle ink — is `_style-segment.ts`,
|
|
9
|
+
* whose docblock tells the family's story; the active tab's counterpart is in
|
|
10
|
+
* `_style-tab.ts`.
|
|
11
|
+
*
|
|
12
|
+
* **The track is the frame.** Spec §3.8 names "the list" as the reader of
|
|
13
|
+
* `style-segment-track` and `style-segment-inset`, and R4 first read them on
|
|
14
|
+
* the `ToggleGroup` inside the frame. That box has no corners and sits inside
|
|
15
|
+
* the frame's own ground, border and padding, so a Look's track (kiln's
|
|
16
|
+
* `surface-3`, porcelain's tint inset 2px) drew a square box within a rounded
|
|
17
|
+
* `surface-1` rim instead of a rounded track with the pill on it. The frame is
|
|
18
|
+
* the rounded object — `rounded-control`, the rim, the ground, the inset — so
|
|
19
|
+
* it reads both names, with its own classes as the fallbacks:
|
|
20
|
+
* `var(--cue-surface-1)` and `var(--cue-space-1)`. The list reads nothing.
|
|
21
|
+
* The overflow chevrons sit in the frame's padding over the segments, so their
|
|
22
|
+
* ground follows the track too, laid over an opaque `surface-1` so a
|
|
23
|
+
* translucent track (porcelain's) still hides the segments scrolled beneath.
|
|
24
|
+
*
|
|
25
|
+
* **Every fallback is the class it replaced**, for the reason
|
|
26
|
+
* `_style-control-face.ts` gives:
|
|
27
|
+
*
|
|
28
|
+
* - the frame: `bg-surface-1` and `p-(--cue-space-1)`; the chevrons:
|
|
29
|
+
* `bg-surface-1`, under a transparent layer;
|
|
30
|
+
* - the ground and ink: `bg-accent-soft` and `text-accent`;
|
|
31
|
+
* - weight `400`, which the segment inherited and computed under every
|
|
32
|
+
* shipped set;
|
|
33
|
+
* - the edge: `transparent`, drawn as an inset ring so it never moves layout;
|
|
34
|
+
* - the resting shade: `paint-rest-shade`, `transparent` under every pack but
|
|
35
|
+
* glaze;
|
|
36
|
+
* - the corners: `rounded-control`'s own value (below).
|
|
37
|
+
*
|
|
38
|
+
* **The edge and the rest shade are one `shadow-[…]` list**, and it is written
|
|
39
|
+
* out in full rather than built from `REST_SHADE`: Tailwind finds a class by
|
|
40
|
+
* scanning source text, so a class assembled at runtime is a class it never
|
|
41
|
+
* generates (`_focus-ring.ts` records the failure). `test/system/style-navigation.test.tsx`
|
|
42
|
+
* holds the literal to `REST_SHADE`, spaces as underscores. A transparent
|
|
43
|
+
* layer paints nothing, so the list is a rendered no-op until a Look names an
|
|
44
|
+
* edge or a pack a shade.
|
|
45
|
+
*
|
|
46
|
+
* **What the segment never had yields to a caller's class.** The ground and
|
|
47
|
+
* ink replaced `data-[pressed]:bg-accent-soft` and `data-[pressed]:text-accent`
|
|
48
|
+
* and keep the standing those classes had. The weight and the shadow are
|
|
49
|
+
* declarations the segment had in no state, so a caller's
|
|
50
|
+
* `itemClassName="font-medium shadow-sm"` applied to the pressed segment as to
|
|
51
|
+
* the others. A `data-[pressed]:` utility is `(0,2,0)` and would beat such a
|
|
52
|
+
* class on the pressed segment alone, so these are written
|
|
53
|
+
* `[:where(&[data-pressed])]:` — the same state at zero specificity — and a
|
|
54
|
+
* caller's class wins in every state again. The weight is `font-[number:…]`
|
|
55
|
+
* for `_style-nav-voice.ts`'s reason.
|
|
56
|
+
*
|
|
57
|
+
* **The segment's radius nests in the track's inset**:
|
|
58
|
+
* `radius-control` less `style-segment-inset`, so a pill inset 2px into its
|
|
59
|
+
* track keeps concentric corners. Its fallback is `0px`, not the frame's
|
|
60
|
+
* `space-1`: at `0px` it is `rounded-control`'s own value, which is what the
|
|
61
|
+
* segment drew, and one name's readers keep their own fallbacks (spec §3.0).
|
|
62
|
+
* Only a set that names an inset nests the corners.
|
|
63
|
+
*
|
|
64
|
+
* **Its own module**, for the docgen reason `_style-segment.ts` gives: the
|
|
65
|
+
* frame, the `accent-soft` fallback and the nested radius are this
|
|
66
|
+
* component's alone.
|
|
67
|
+
*
|
|
68
|
+
* @internal Not part of the public API.
|
|
69
|
+
*/
|
|
70
|
+
/** The frame, which is the track: its ground and its inset. */
|
|
71
|
+
const SEGMENTED_TRACK = "bg-[color:var(--cue-style-segment-track,var(--cue-surface-1))] p-[var(--cue-style-segment-inset,var(--cue-space-1))]";
|
|
72
|
+
/** The overflow chevrons' ground: the track's colour over an opaque `surface-1`. */
|
|
73
|
+
const SEGMENTED_CHEVRON_GROUND = "bg-surface-1 bg-[image:linear-gradient(var(--cue-style-segment-track,transparent),var(--cue-style-segment-track,transparent))]";
|
|
74
|
+
/** A segment's corners, nested inside the track's inset. */
|
|
75
|
+
const SEGMENT_RADIUS = "rounded-[calc(var(--cue-radius-control)*var(--cue-radius-scale)-var(--cue-style-segment-inset,0px))]";
|
|
76
|
+
/** `SegmentedControl`'s pressed segment. */
|
|
77
|
+
const SEGMENT_PRESSED = "data-[pressed]:bg-[color:var(--cue-style-segment-ground,var(--cue-accent-soft))] data-[pressed]:text-[color:var(--cue-style-segment-ink,var(--cue-accent))] [:where(&[data-pressed])]:font-[number:var(--cue-style-segment-weight,400)] [:where(&[data-pressed])]:shadow-[inset_0_0_0_var(--cue-border-width)_var(--cue-style-segment-edge,transparent),0_calc(2px*var(--cue-paint-shadow-scale))_calc(4px*var(--cue-paint-shadow-scale))_var(--cue-paint-rest-shade,transparent)]";
|
|
78
|
+
/**
|
|
79
|
+
* The frame's rim (plan V.2, K129): `style-segment-rim`, falling back to the
|
|
80
|
+
* `border-border` the frame drew. Kiln's source draws its segmented track with
|
|
81
|
+
* no rim at all — a `surface-3` ground and nothing around it — and the frame's
|
|
82
|
+
* border was the one part of the control no name reached.
|
|
83
|
+
*/
|
|
84
|
+
const SEGMENTED_RIM = "border-[color:var(--cue-style-segment-rim,var(--cue-border))]";
|
|
85
|
+
//#endregion
|
|
86
|
+
export { SEGMENTED_CHEVRON_GROUND, SEGMENTED_RIM, SEGMENTED_TRACK, SEGMENT_PRESSED, SEGMENT_RADIUS };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region src/system/_style-selected.ts
|
|
2
|
+
/**
|
|
3
|
+
* The ground and ink of a selected table row.
|
|
4
|
+
*
|
|
5
|
+
* Spec 2026-09-26-looks-fidelity §3.8 (plan R4). `Table.Row` said
|
|
6
|
+
* `data-[selected]:bg-accent-soft` and set no ink of its own. Spec §3.8 names
|
|
7
|
+
* this row as a reader of both `style-selected-ground` and
|
|
8
|
+
* `style-selected-ink`, and the two travel together for a reason a Look makes
|
|
9
|
+
* concrete: kiln's selection is inverted, `var(--cue-fg)` behind
|
|
10
|
+
* `var(--cue-bg)`, and a row that took the ground without the ink would set
|
|
11
|
+
* the table's `fg` text on an `fg` ground.
|
|
12
|
+
*
|
|
13
|
+
* **Each fallback is this reader's own value**, which is not the sidebar's
|
|
14
|
+
* (spec §3.0: readers of one name keep their own fallbacks). The ground was
|
|
15
|
+
* `var(--cue-accent-soft)`. The ink was inherited from the table's `text-fg`,
|
|
16
|
+
* so its fallback is `currentColor`, which on `color` computes exactly the
|
|
17
|
+
* inherited value — under no set and every set that declines the name, the
|
|
18
|
+
* row renders what it did.
|
|
19
|
+
*
|
|
20
|
+
* **The ink yields to a caller's own ink.** The row set no colour, so
|
|
21
|
+
* `<Table.Row selected className="text-fg-muted">` stayed muted when selected.
|
|
22
|
+
* A `data-[selected]:` ink is `(0,2,0)` and would beat that class, and
|
|
23
|
+
* `currentColor` on `color` takes the PARENT's colour, not the row's own class;
|
|
24
|
+
* so the ink is written `[:where(&[data-selected])]:` — the same state at zero
|
|
25
|
+
* specificity — and a caller's ink class wins again. The ground replaced
|
|
26
|
+
* `data-[selected]:bg-accent-soft` and keeps its standing, as that did.
|
|
27
|
+
*
|
|
28
|
+
* **Its own module**, for the docgen reason `_style-nav-voice.ts` gives: the
|
|
29
|
+
* table reads neither `style-nav-active-ground` nor `style-selected-weight`,
|
|
30
|
+
* so it does not share `_style-nav-item.ts`.
|
|
31
|
+
*
|
|
32
|
+
* @internal Not part of the public API.
|
|
33
|
+
*/
|
|
34
|
+
const SELECTED_ROW = "data-[selected]:bg-[color:var(--cue-style-selected-ground,var(--cue-accent-soft))] [:where(&[data-selected])]:text-[color:var(--cue-style-selected-ink,currentColor)]";
|
|
35
|
+
//#endregion
|
|
36
|
+
export { SELECTED_ROW };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/system/_style-stage-marks.ts
|
|
2
|
+
/**
|
|
3
|
+
* Whether a preview frame draws its registration marks — spec
|
|
4
|
+
* 2026-09-26-looks-fidelity §3.11, `style-stage-marks` (row P52).
|
|
5
|
+
*
|
|
6
|
+
* The four crosshairs at a frame's stage corners are this library's own
|
|
7
|
+
* furniture, and four of the measured Looks' sources draw nothing there. A
|
|
8
|
+
* mark is decoration, so a set says `none` and the marks go; `inline` keeps
|
|
9
|
+
* them.
|
|
10
|
+
*
|
|
11
|
+
* **The fallback is the old value, spelt out.** A mark is an absolutely
|
|
12
|
+
* positioned `<span>`, which the engine blockifies: `inline` computes
|
|
13
|
+
* `display: block`, exactly what the span computed with no `display` class at
|
|
14
|
+
* all. `--cue-style-stage-marks` is on no `:root` (contract round 2's optional
|
|
15
|
+
* names are reset to `initial` under every `[data-style]` that declines them),
|
|
16
|
+
* so under no set and every shipped set today the marks draw as they did.
|
|
17
|
+
*
|
|
18
|
+
* **Its own module**, because `@repo/docgen` attributes a token to a component
|
|
19
|
+
* by the file its class string lives in, following only `_`-prefixed imports.
|
|
20
|
+
* `Preview` is this file's only reader.
|
|
21
|
+
*
|
|
22
|
+
* @internal Not part of the public API.
|
|
23
|
+
*/
|
|
24
|
+
const STAGE_MARKS = "[display:var(--cue-style-stage-marks,inline)]";
|
|
25
|
+
//#endregion
|
|
26
|
+
export { STAGE_MARKS };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
//#region src/system/_style-tab.ts
|
|
2
|
+
/**
|
|
3
|
+
* The `Tabs` list's rule and track, and the active tab: its underline, and its
|
|
4
|
+
* ground, ink, weight and shadow when a Look raises it as a segment.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.8 (plan R4). The list hung its tabs off a
|
|
7
|
+
* 1px `border-b`, and the active tab laid an accent `::after` over it. A Look
|
|
8
|
+
* that draws its tabs as a segmented track (kiln, porcelain) has neither, and
|
|
9
|
+
* `style-tab-rule` and `style-tab-underline` take them away.
|
|
10
|
+
*
|
|
11
|
+
* **The fallbacks are the classes they replace**: `border-b` is 1px wide, and
|
|
12
|
+
* the underline was the accent, `var(--cue-accent)`. The width utility keeps
|
|
13
|
+
* `border-b`'s solid style, so it replaces it whole.
|
|
14
|
+
*
|
|
15
|
+
* **The list is the track.** `Tabs` has no frame, so the list reads
|
|
16
|
+
* `style-segment-track` and `style-segment-inset`, and falls back to what it
|
|
17
|
+
* had: no ground and no padding (`transparent`, `0px`). Its corners are
|
|
18
|
+
* square, and stay so: a radius on the list would curl the ends of its 1px
|
|
19
|
+
* rule under every set. A Look that draws its tabs on a track (kiln,
|
|
20
|
+
* porcelain) takes the rule away and owes the track its corners; spec §3.8
|
|
21
|
+
* leaves how to the Look lanes.
|
|
22
|
+
*
|
|
23
|
+
* **The active tab**, raised as a segment by a Look that draws its tabs on a
|
|
24
|
+
* track: its ground, ink, weight, edge and resting shade, read through the
|
|
25
|
+
* segment names (`_style-segment.ts` tells the family's story). The ink
|
|
26
|
+
* replaced `data-[active]:text-accent` and keeps that class's standing. The
|
|
27
|
+
* ground falls back to none (`transparent`, spec §3.8): a tab is marked by its
|
|
28
|
+
* underline. The ground, the weight (`400`, inherited and computed under every
|
|
29
|
+
* shipped set) and the shadow (a `transparent` inset edge and the paint axis's
|
|
30
|
+
* resting shade, one list written out for the reason
|
|
31
|
+
* `_style-segmented-control.ts` gives) are declarations the tab had in no
|
|
32
|
+
* state, so they are written `[:where(&[data-active])]:` — the active state at
|
|
33
|
+
* zero specificity — and a caller's `className="font-medium bg-surface-2
|
|
34
|
+
* shadow-sm"` still applies to the active tab as to the others.
|
|
35
|
+
*
|
|
36
|
+
* **Its own module**, for the docgen reason `_style-nav-voice.ts` gives:
|
|
37
|
+
* `SegmentedControl` shares `_style-segment.ts` with the tabs, and reads
|
|
38
|
+
* none of these.
|
|
39
|
+
*
|
|
40
|
+
* @internal Not part of the public API.
|
|
41
|
+
*/
|
|
42
|
+
/** The list behind the tabs, which is the track: its ground and its inset. */
|
|
43
|
+
const TAB_TRACK = "bg-[color:var(--cue-style-segment-track,transparent)] p-[var(--cue-style-segment-inset,0px)] rounded-[var(--cue-style-tab-radius,0px)]";
|
|
44
|
+
/**
|
|
45
|
+
* A tab's corners and its resting weight (plan V.2, P41).
|
|
46
|
+
*
|
|
47
|
+
* Under a set that names `style-tab-radius` the list above is a rounded track
|
|
48
|
+
* and every tab a pill inside it, rounded on all four corners at the track's
|
|
49
|
+
* radius less the inset, as a pressed segment nests inside its frame. Under a
|
|
50
|
+
* set that does not, a tab keeps the `rounded-t-control` it drew: its top two
|
|
51
|
+
* corners at the control corner, its bottom two square on the list's rule.
|
|
52
|
+
* Both are one expression per edge, so neither needs a class the other lacks:
|
|
53
|
+
*
|
|
54
|
+
* - top: `tab-radius`, else the control corner **plus** the inset, less the
|
|
55
|
+
* inset — which is the control corner exactly, whether or not the set names
|
|
56
|
+
* an inset (Porcelain names one, 2px, before it names a tab radius);
|
|
57
|
+
* - bottom: `tab-radius`, else the inset, less the inset — `0px`.
|
|
58
|
+
*
|
|
59
|
+
* The weight is the segment weight on every tab, not only the active one —
|
|
60
|
+
* Porcelain's idle tabs are 500 too — falling back to 400. A caller's
|
|
61
|
+
* `font-*` class on a tab replaces it through `tailwind-merge`.
|
|
62
|
+
*/
|
|
63
|
+
const TAB_SHAPE = "rounded-t-[calc(var(--cue-style-tab-radius,calc(var(--cue-radius-control)*var(--cue-radius-scale)+var(--cue-style-segment-inset,0px)))-var(--cue-style-segment-inset,0px))] rounded-b-[calc(var(--cue-style-tab-radius,var(--cue-style-segment-inset,0px))-var(--cue-style-segment-inset,0px))] font-[number:var(--cue-style-segment-weight,400)]";
|
|
64
|
+
/** The list's bottom rule, as a width. */
|
|
65
|
+
const TAB_RULE = "border-b-[length:var(--cue-style-tab-rule,1px)]";
|
|
66
|
+
/** The active tab's underline ink, on its `::after`. */
|
|
67
|
+
const TAB_UNDERLINE = "data-[active]:after:bg-[color:var(--cue-style-tab-underline,var(--cue-accent))]";
|
|
68
|
+
/** The `Tabs` active tab. Its ground falls back to none: a tab is marked by its underline. */
|
|
69
|
+
const TAB_ACTIVE = "[:where(&[data-active])]:bg-[color:var(--cue-style-segment-ground,transparent)] data-[active]:text-[color:var(--cue-style-segment-ink,var(--cue-accent))] [:where(&[data-active])]:font-[number:var(--cue-style-segment-weight,400)] [:where(&[data-active])]:shadow-[inset_0_0_0_var(--cue-border-width)_var(--cue-style-segment-edge,transparent),0_calc(2px*var(--cue-paint-shadow-scale))_calc(4px*var(--cue-paint-shadow-scale))_var(--cue-paint-rest-shade,transparent)]";
|
|
70
|
+
//#endregion
|
|
71
|
+
export { TAB_ACTIVE, TAB_RULE, TAB_SHAPE, TAB_TRACK, TAB_UNDERLINE };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/system/_style-textarea.ts
|
|
2
|
+
/**
|
|
3
|
+
* A textarea's leading and block padding (plan V.2, P139):
|
|
4
|
+
* `style-input-leading`, falling back to the `leading-ui` it drew, and the
|
|
5
|
+
* `space-3` rung times `style-textarea-pad`, `1` under a set that has none.
|
|
6
|
+
* Porcelain's textarea sets 1.45 and 5.5px.
|
|
7
|
+
*
|
|
8
|
+
* The padding is a name of its own and not `style-control-pad`, the button's
|
|
9
|
+
* inline proportion: Tender, Zine and Kiln declare that one (1.5, 1.625,
|
|
10
|
+
* 0.75), and a textarea that read it would move in every one of them where
|
|
11
|
+
* no row measured it.
|
|
12
|
+
*
|
|
13
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason.
|
|
14
|
+
*
|
|
15
|
+
* @internal Not part of the public API.
|
|
16
|
+
*/
|
|
17
|
+
const TEXTAREA_LEADING = "leading-[var(--cue-style-input-leading,var(--cue-leading-ui))]";
|
|
18
|
+
/** @see TEXTAREA_LEADING */
|
|
19
|
+
const TEXTAREA_PAD_Y = "py-[calc(var(--cue-space-3)*var(--cue-style-textarea-pad,1))]";
|
|
20
|
+
//#endregion
|
|
21
|
+
export { TEXTAREA_LEADING, TEXTAREA_PAD_Y };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//#region src/system/_style-title.ts
|
|
2
|
+
/**
|
|
3
|
+
* The title voice: a `Card`, `Panel` or `Bento` tile's name — mono,
|
|
4
|
+
* `text-emphasis`, weight 500, in `fg`, until a style set says otherwise.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.3 (and §3.1 for the ink and the variation),
|
|
7
|
+
* plan R1. `CardTitle`, `PanelHeader`'s title and `Bento.Tile`'s title each
|
|
8
|
+
* spelt `font-mono text-(length:--cue-text-emphasis) font-medium text-fg`, so a
|
|
9
|
+
* Look could not move a card's name without a per-call-site class — and every
|
|
10
|
+
* Look the fidelity round measured draws it differently (Tender 26px at 300,
|
|
11
|
+
* Kiln 32px at 400, Porcelain 16px at 700, three of the four in sans).
|
|
12
|
+
*
|
|
13
|
+
* | property | reads | fallback (the class it replaced) |
|
|
14
|
+
* |-------------------------|---------------------------|----------------------------------|
|
|
15
|
+
* | font-family | `style-title-face` | `var(--cue-font-mono)` (`font-mono`) |
|
|
16
|
+
* | font-size | `style-title-size` | `var(--cue-text-emphasis)` |
|
|
17
|
+
* | font-weight | `style-title-weight` | `500` (`font-medium`) |
|
|
18
|
+
* | letter-spacing | `style-title-tracking` | `normal` |
|
|
19
|
+
* | line-height | `style-title-leading` | `inherit` |
|
|
20
|
+
* | font-variation-settings | `style-display-variation` | `normal` |
|
|
21
|
+
* | color | `style-heading-ink` | `var(--cue-fg)` (`text-fg`) |
|
|
22
|
+
*
|
|
23
|
+
* **Every name is optional** (spec §3.0), declared on no `:root` and left at the
|
|
24
|
+
* shared `[data-style]` reset by every shipped set, so each `var()` resolves its
|
|
25
|
+
* fallback at the title — what the old classes computed there.
|
|
26
|
+
*
|
|
27
|
+
* An overlay's title shares the face, the weight, the ink and the variation but
|
|
28
|
+
* not the size, the tracking or the leading, so it is `_style-overlay-title.ts`
|
|
29
|
+
* and not an import of this: docgen would publish every name in this file as a
|
|
30
|
+
* token of every overlay. `_style-page-title.ts` says why the weight is
|
|
31
|
+
* `font-[number:…]` and why the size comes before the leading.
|
|
32
|
+
*
|
|
33
|
+
* @internal Not part of the public API.
|
|
34
|
+
*/
|
|
35
|
+
const TITLE_VOICE = "font-[family-name:var(--cue-style-title-face,var(--cue-font-mono))] text-[length:var(--cue-style-title-size,var(--cue-text-emphasis))] font-[number:var(--cue-style-title-weight,500)] tracking-[var(--cue-style-title-tracking,normal)] leading-[var(--cue-style-title-leading,inherit)] [font-variation-settings:var(--cue-style-title-variation,var(--cue-style-display-variation,normal))] text-[color:var(--cue-style-heading-ink,var(--cue-fg))]";
|
|
36
|
+
//#endregion
|
|
37
|
+
export { TITLE_VOICE };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/system/_style-tooltip.ts
|
|
2
|
+
/**
|
|
3
|
+
* A tooltip's size and padding (plan V.2, P129): the help size, falling back
|
|
4
|
+
* to the `text-label` rung the tooltip drew, and `style-tooltip-pad`, one or
|
|
5
|
+
* two rem lengths, falling back to the `space-2` block and `space-3` inline
|
|
6
|
+
* padding it drew. Porcelain's tooltip is 12px type, 4px by 8px in. Its
|
|
7
|
+
* leading is the body leading (`_style-body-leading.ts`).
|
|
8
|
+
*
|
|
9
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason.
|
|
10
|
+
*
|
|
11
|
+
* @internal Not part of the public API.
|
|
12
|
+
*/
|
|
13
|
+
const TOOLTIP_SIZE = "text-[length:var(--cue-style-help-size,var(--cue-text-label))]";
|
|
14
|
+
/** @see TOOLTIP_SIZE */
|
|
15
|
+
const TOOLTIP_PAD = "p-[var(--cue-style-tooltip-pad,var(--cue-space-2)_var(--cue-space-3))]";
|
|
16
|
+
//#endregion
|
|
17
|
+
export { TOOLTIP_PAD, TOOLTIP_SIZE };
|