@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,36 @@
|
|
|
1
|
+
//#region src/system/_style-label-size.ts
|
|
2
|
+
/**
|
|
3
|
+
* A chassis caption's size: its own historic rung by default, one shared size
|
|
4
|
+
* inside a style set that declares `--cue-style-label-size`.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.6 (R2). `FieldLabel`, a `SectionHeader`
|
|
7
|
+
* label, a table head and a group row, a `Sidebar.Section` label and a menu
|
|
8
|
+
* group label all spent `text-(length:--cue-text-label)`; the `Stat` label
|
|
9
|
+
* alone spent `text-(length:--cue-text-micro)`. The four measured Looks set
|
|
10
|
+
* their captions at one size (tender and porcelain 0.875rem, zine and kiln
|
|
11
|
+
* 0.75rem), and a size chosen per call site would not follow the Look.
|
|
12
|
+
*
|
|
13
|
+
* **Optional, so each reader keeps its own fallback** (spec §3.0, F-3): the
|
|
14
|
+
* name is emitted as `initial` on the shared `[data-style]` reset, so under no
|
|
15
|
+
* set, `console` and every set that declines it this resolves to exactly what
|
|
16
|
+
* the class it replaced resolved to, at the label itself — which is also what
|
|
17
|
+
* keeps a `<Density>` island's rung reaching it.
|
|
18
|
+
*
|
|
19
|
+
* **Put it before any `leading-*` class in the same `cn()`.** `tailwind-merge`
|
|
20
|
+
* reads a font-size utility as overriding an earlier line-height one (Tailwind's
|
|
21
|
+
* named sizes carry a line-height), so `cn("leading-none", LABEL_SIZE)` drops
|
|
22
|
+
* the `leading-none`. The class this replaced had the same rule; the order at
|
|
23
|
+
* each call site is the order it already had.
|
|
24
|
+
*
|
|
25
|
+
* **Its own module**, for the reason `_style-control-face.ts` gives:
|
|
26
|
+
* `@repo/docgen` attributes a token to a component by the file its class
|
|
27
|
+
* string lives in, so a component that reads the label ink but not the label
|
|
28
|
+
* size (`Checkbox`, `Switch`) is not credited with this one.
|
|
29
|
+
*
|
|
30
|
+
* @internal Not part of the public API.
|
|
31
|
+
*/
|
|
32
|
+
const LABEL_SIZE = "text-[length:var(--cue-style-label-size,var(--cue-text-label))]";
|
|
33
|
+
/** @see LABEL_SIZE — for the `Stat` label, which read the micro rung before this existed. */
|
|
34
|
+
const LABEL_SIZE_MICRO = "text-[length:var(--cue-style-label-size,var(--cue-text-micro))]";
|
|
35
|
+
//#endregion
|
|
36
|
+
export { LABEL_SIZE, LABEL_SIZE_MICRO };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//#region src/system/_style-label-tracking.ts
|
|
2
|
+
/**
|
|
3
|
+
* A label's tracking: its own historic rung of the caps ladder by default, one
|
|
4
|
+
* shared tracking inside a style set that declares it.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26 (the label-voice brief). Unlike {@link LABEL_FACE} and the
|
|
7
|
+
* case reader beside it, this name is **optional**
|
|
8
|
+
* (`@cueplusplus/tokens`' `STYLE_SET_OPTIONAL`), because its readers do not
|
|
9
|
+
* share one fallback. `FieldLabel`, `Slider`, a calendar weekday and the
|
|
10
|
+
* stepper trail all read `tracking-caps-tight`; `Eyebrow` alone reads
|
|
11
|
+
* `tracking-caps-loose`; a table head, a `Stat` label, a group heading and
|
|
12
|
+
* most of the rest read plain `tracking-caps` — three different values, each
|
|
13
|
+
* already what that component renders today. A set that declines the name (as
|
|
14
|
+
* every mono set does) leaves every reader at its own historic tier, which is
|
|
15
|
+
* the no-op this axis promises; a set that declares one real value (`normal`,
|
|
16
|
+
* for `tender`, `kiln` and `porcelain`) overrides every reader to that SAME
|
|
17
|
+
* tracking at once, regardless of which tier it used to read — which is the
|
|
18
|
+
* point under a sans, sentence-case voice: there is no caps rung left to
|
|
19
|
+
* space out.
|
|
20
|
+
*
|
|
21
|
+
* Three exports, one token: each pairs `--cue-style-label-tracking` with the
|
|
22
|
+
* one ladder rung that call site read before this existed, so a component
|
|
23
|
+
* that switches to one of these keeps rendering its own historic value under
|
|
24
|
+
* every set that declines the name — which today is every set but the three
|
|
25
|
+
* sans ones.
|
|
26
|
+
*
|
|
27
|
+
* **Its own module**, for the reason `_style-control-face.ts` gives: one
|
|
28
|
+
* reader per file, so `@repo/docgen` attributes exactly this token to exactly
|
|
29
|
+
* the components that import it, regardless of which of the three exports a
|
|
30
|
+
* given file reaches for.
|
|
31
|
+
*
|
|
32
|
+
* @internal Not part of the public API.
|
|
33
|
+
*/
|
|
34
|
+
const LABEL_TRACKING = "tracking-[var(--cue-style-label-tracking,var(--cue-tracking-caps))]";
|
|
35
|
+
/** @see LABEL_TRACKING — for a reader that read `tracking-caps-tight` before this existed. */
|
|
36
|
+
const LABEL_TRACKING_TIGHT = "tracking-[var(--cue-style-label-tracking,var(--cue-tracking-caps-tight))]";
|
|
37
|
+
/** @see LABEL_TRACKING — for a reader that read `tracking-caps-loose` before this existed. */
|
|
38
|
+
const LABEL_TRACKING_LOOSE = "tracking-[var(--cue-style-label-tracking,var(--cue-tracking-caps-loose))]";
|
|
39
|
+
/**
|
|
40
|
+
* {@link LABEL_TRACKING} for a caption that declared no tracking of its own
|
|
41
|
+
* (plan V.2, K131): the label tracking, falling back to `inherit`.
|
|
42
|
+
*/
|
|
43
|
+
const LABEL_TRACKING_INHERIT = "tracking-[var(--cue-style-label-tracking,inherit)]";
|
|
44
|
+
//#endregion
|
|
45
|
+
export { LABEL_TRACKING, LABEL_TRACKING_INHERIT, LABEL_TRACKING_LOOSE, LABEL_TRACKING_TIGHT };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//#region src/system/_style-label-weight.ts
|
|
2
|
+
/**
|
|
3
|
+
* A chassis caption's weight: what it rendered before by default, one shared
|
|
4
|
+
* weight inside a style set that declares `--cue-style-label-weight`.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.6 (R2). Porcelain's captions, table heads,
|
|
7
|
+
* group labels, tags and key caps are `font-medium` (coss.md §4); every other
|
|
8
|
+
* Look's are regular. The label readers, `Chip` and `Kbd` read it.
|
|
9
|
+
*
|
|
10
|
+
* **Two fallbacks, because the sites declared two different things.** The
|
|
11
|
+
* table head and the table group row are `<th>` cells, whose user-agent weight
|
|
12
|
+
* is bold, and they spent `font-normal` to undo it: their reader falls back to
|
|
13
|
+
* `400`, {@link LABEL_WEIGHT_NORMAL}. Every other reader declared no weight at
|
|
14
|
+
* all and inherited its parent's, so its fallback is `inherit`,
|
|
15
|
+
* {@link LABEL_WEIGHT} — the spec's `400` is what each of them computes on a
|
|
16
|
+
* page, but a literal `400` would override the weight a `Kbd` or a `Chip`
|
|
17
|
+
* inherits from a heavier parent today, which a fallback may not do (the R
|
|
18
|
+
* lanes' rule: the fallback is the site's current value).
|
|
19
|
+
*
|
|
20
|
+
* **Written `font-[number:…]`, not as a bare `[font-weight:…]` property.** The
|
|
21
|
+
* `number:` hint is what makes Tailwind emit `font-weight` (and not a family)
|
|
22
|
+
* for a `var()`, and it is also what `tailwind-merge` reads as a font weight: a
|
|
23
|
+
* caller's `className="font-medium"` replaces this class, as it replaced
|
|
24
|
+
* `font-normal`. A bare `[font-weight:…]` would not merge, and Tailwind sorts
|
|
25
|
+
* it AFTER every named `font-*` utility (measured: a named weight declares
|
|
26
|
+
* `--tw-font-weight` too, and a rule with more declarations sorts first), so
|
|
27
|
+
* the caller's weight would silently lose — against every `className` prop's
|
|
28
|
+
* "merged over the defaults" contract.
|
|
29
|
+
*
|
|
30
|
+
* **Its own module**, for the reason `_style-control-face.ts` gives: one
|
|
31
|
+
* token per file, so `@repo/docgen` credits `Chip` and `Kbd` with the label
|
|
32
|
+
* weight and not with the label size or ink they do not read.
|
|
33
|
+
*
|
|
34
|
+
* @internal Not part of the public API.
|
|
35
|
+
*/
|
|
36
|
+
const LABEL_WEIGHT = "font-[number:var(--cue-style-label-weight,inherit)]";
|
|
37
|
+
/** @see LABEL_WEIGHT — for a `<th>` reader that spent `font-normal` before this existed. */
|
|
38
|
+
const LABEL_WEIGHT_NORMAL = "font-[number:var(--cue-style-label-weight,400)]";
|
|
39
|
+
//#endregion
|
|
40
|
+
export { LABEL_WEIGHT, LABEL_WEIGHT_NORMAL };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
//#region src/system/_style-lede.ts
|
|
2
|
+
/**
|
|
3
|
+
* The `PageShell` subtitle's size and ink: the lede under a page title.
|
|
4
|
+
*
|
|
5
|
+
* Spec 2026-09-26-looks-fidelity §3.5 and §10.4, plan R1 and its Graphite
|
|
6
|
+
* addition. The subtitle spelt `text-(length:--cue-text-ui) … text-fg-muted`.
|
|
7
|
+
* It is a lede — the one sentence under a title, which three Looks set a rung
|
|
8
|
+
* above their body copy (T2, Z43, P1) — so it reads `style-lede-size`; and a
|
|
9
|
+
* lede's ink is `style-lede-ink`, which falls back to the prose ink, which falls
|
|
10
|
+
* back to the old class. Two names for one colour because Graphite's docs body
|
|
11
|
+
* reads in `fg` while its ledes stay muted (G5 against G74), and Kiln's ledes
|
|
12
|
+
* read in `fg` with its prose (K49): so a set that names only the prose ink
|
|
13
|
+
* moves the ledes with it, and one that also names the lede ink parts them.
|
|
14
|
+
*
|
|
15
|
+
* | property | reads | fallback |
|
|
16
|
+
* |-----------|--------------------------------------------|------------------------|
|
|
17
|
+
* | font-size | `style-lede-size` | `var(--cue-text-ui)` |
|
|
18
|
+
* | color | `style-lede-ink`, then `style-prose-ink` | `var(--cue-fg-muted)` |
|
|
19
|
+
*
|
|
20
|
+
* `style-lede-ink` enters the contract with Graphite's round (plan L5.1); until
|
|
21
|
+
* it does, nothing declares it and the chain reads the prose ink, and nothing
|
|
22
|
+
* declares that either — so under every shipped set the subtitle computes
|
|
23
|
+
* `fg-muted`, as it did. The docs site's ledes size from `--docs-text-body`
|
|
24
|
+
* instead and are the docs site's own readers (spec §5.2), not this constant.
|
|
25
|
+
*
|
|
26
|
+
* Two constants, not one, because the subtitle's `leading-*` sits between them:
|
|
27
|
+
* `tailwind-merge` drops a `leading-*` that precedes a font size in one list.
|
|
28
|
+
*
|
|
29
|
+
* @internal Not part of the public API.
|
|
30
|
+
*/
|
|
31
|
+
const LEDE_SIZE = "text-[length:var(--cue-style-lede-size,var(--cue-text-ui))]";
|
|
32
|
+
/** @see LEDE_SIZE — the lede's ink, through the prose ink to `fg-muted`. */
|
|
33
|
+
const LEDE_INK = "text-[color:var(--cue-style-lede-ink,var(--cue-style-prose-ink,var(--cue-fg-muted)))]";
|
|
34
|
+
/**
|
|
35
|
+
* The lede's leading (plan V.2, T110, Z95, Z96, P1): `style-lede-leading`,
|
|
36
|
+
* falling back to the `leading-ui` the subtitle drew. Three Looks set their
|
|
37
|
+
* ledes on a leading of their own — Tender 1.4, Porcelain 1.5 and Zine a clamp
|
|
38
|
+
* from 1.4 on a phone to 1.3333 on a desktop — none of which is their body's.
|
|
39
|
+
*/
|
|
40
|
+
const LEDE_LEADING = "leading-[var(--cue-style-lede-leading,var(--cue-leading-ui))]";
|
|
41
|
+
/**
|
|
42
|
+
* The lede's tracking (plan V.2, Z96): the prose tracking, which spec §3.5
|
|
43
|
+
* already gives "the prose readers and ledes", falling back to `inherit` — the
|
|
44
|
+
* subtitle declared none. Kiln (-0.02em) and Zine (-0.01em) declare it, so
|
|
45
|
+
* their `PageShell` subtitles take their prose's tracking with this.
|
|
46
|
+
*/
|
|
47
|
+
const LEDE_TRACKING = "tracking-[var(--cue-style-prose-tracking,inherit)]";
|
|
48
|
+
//#endregion
|
|
49
|
+
export { LEDE_INK, LEDE_LEADING, LEDE_SIZE, LEDE_TRACKING };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//#region src/system/_style-link.ts
|
|
2
|
+
/**
|
|
3
|
+
* `Link`'s ink, rule, offset, weight and hover ink, each a style-set name read
|
|
4
|
+
* with the class it replaced as its fallback.
|
|
5
|
+
*
|
|
6
|
+
* Fidelity spec 2026-09-26 §3.7 (plan R3). Tender inks its links in the
|
|
7
|
+
* accent, kiln its prose links in the focus colour; four Looks rule the
|
|
8
|
+
* underline in the text's own colour rather than a hairline, tender draws it
|
|
9
|
+
* 2px under rather than 4px, porcelain sets its links at 500, and kiln and
|
|
10
|
+
* zine hover to an ink other than the accent. Each is the set's to say.
|
|
11
|
+
*
|
|
12
|
+
* **Every fallback is what the site rendered before this existed**, so under
|
|
13
|
+
* no set, and under every set that declines a name, the reader is a no-op:
|
|
14
|
+
* `fg` for the ink, `border` for the rule, `4px` for the offset, the
|
|
15
|
+
* accent on hover, and `inherit` for the weight — the link set no weight, and
|
|
16
|
+
* took its parent's.
|
|
17
|
+
*
|
|
18
|
+
* `INLINE_LINK_INK` falls back through `style-link-ink`, so a set that inks
|
|
19
|
+
* every link (tender) inks the prose link too without saying so twice, and a
|
|
20
|
+
* set that inks only prose links (kiln) leaves the plain link alone.
|
|
21
|
+
*
|
|
22
|
+
* **Its own module**, for the reason `_style-control-face.ts` gives:
|
|
23
|
+
* `@repo/docgen` attributes every token a file spells to each component that
|
|
24
|
+
* imports it. Only `layout/link.tsx` imports this.
|
|
25
|
+
*
|
|
26
|
+
* @internal Not part of the public API.
|
|
27
|
+
*/
|
|
28
|
+
/** Every link's ink: `fg`, or the set's `style-link-ink`. */
|
|
29
|
+
const LINK_INK = "text-[color:var(--cue-style-link-ink,var(--cue-fg))]";
|
|
30
|
+
/** The `underline` variant's ink: the set's `style-inline-link-ink`, else {@link LINK_INK}'s chain. */
|
|
31
|
+
const INLINE_LINK_INK = "text-[color:var(--cue-style-inline-link-ink,var(--cue-style-link-ink,var(--cue-fg)))]";
|
|
32
|
+
/** The underline's colour: `border`, or the set's `style-link-rule`. */
|
|
33
|
+
const LINK_RULE = "decoration-[color:var(--cue-style-link-rule,var(--cue-border))]";
|
|
34
|
+
/** The underline's offset: 4px, or the set's `style-link-offset`. */
|
|
35
|
+
const LINK_OFFSET = "underline-offset-[var(--cue-style-link-offset,4px)]";
|
|
36
|
+
/**
|
|
37
|
+
* Every link's weight: its parent's, or the set's `style-link-weight`.
|
|
38
|
+
* `font-[number:…]` rather than an arbitrary `[font-weight:…]`, so a caller's
|
|
39
|
+
* `font-*` weight still replaces it through `twMerge` — `_style-control.ts`'s
|
|
40
|
+
* `CONTROL_WEIGHT` says why.
|
|
41
|
+
*/
|
|
42
|
+
const LINK_WEIGHT = "font-[number:var(--cue-style-link-weight,inherit)]";
|
|
43
|
+
/**
|
|
44
|
+
* Every link's hover ink: the set's `style-link-hover-ink`, else its
|
|
45
|
+
* `style-hover-ink`, else the accent.
|
|
46
|
+
*
|
|
47
|
+
* Round 6 (spec §11, lane R6.T) splits the link's hover from the header
|
|
48
|
+
* nav's: `style-hover-ink` also colours `AppBar.Link` under the pointer, and
|
|
49
|
+
* stripe.com draws the two apart (its links hover to its brand-800, #2e2b8c;
|
|
50
|
+
* its nav's triggers stay in their solid ink, #061b31, T144, T151). So the
|
|
51
|
+
* link reads a name of its own first, falling back to the shared one, and a
|
|
52
|
+
* set that names neither renders exactly what it did.
|
|
53
|
+
*/
|
|
54
|
+
const HOVER_INK = "hover:text-[color:var(--cue-style-link-hover-ink,var(--cue-style-hover-ink,var(--cue-accent)))]";
|
|
55
|
+
/** An underlined link's rule under the pointer: the same chain as {@link HOVER_INK}. */
|
|
56
|
+
const HOVER_RULE = "hover:decoration-[color:var(--cue-style-link-hover-ink,var(--cue-style-hover-ink,var(--cue-accent)))]";
|
|
57
|
+
//#endregion
|
|
58
|
+
export { HOVER_INK, HOVER_RULE, INLINE_LINK_INK, LINK_INK, LINK_OFFSET, LINK_RULE, LINK_WEIGHT };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//#region src/system/_style-menu.ts
|
|
2
|
+
/**
|
|
3
|
+
* A menu row's resting ink and its highlight.
|
|
4
|
+
*
|
|
5
|
+
* Spec 2026-09-26-looks-fidelity §3.7 and §3.8 (plan R4). `menuItemClasses`
|
|
6
|
+
* said `text-fg-muted` and `data-[highlighted]:bg-accent-soft`. A Look whose
|
|
7
|
+
* menu rows are full-contrast (tender, porcelain) or whose highlight is a
|
|
8
|
+
* faint neutral or none (porcelain, kiln) reads these names instead.
|
|
9
|
+
*
|
|
10
|
+
* **The fallbacks are the classes they replace**: `var(--cue-fg-muted)` —
|
|
11
|
+
* spec §3.7 gives `style-quiet-ink` that fallback for a menu row — and
|
|
12
|
+
* `var(--cue-accent-soft)`.
|
|
13
|
+
*
|
|
14
|
+
* **Its own module**, for the docgen reason `_style-nav-voice.ts` gives. It is
|
|
15
|
+
* reached through `overlays/_surface.ts`, whose every importer docgen already
|
|
16
|
+
* credits with the whole overlay recipe.
|
|
17
|
+
*
|
|
18
|
+
* @internal Not part of the public API.
|
|
19
|
+
*/
|
|
20
|
+
const MENU_ITEM_INK = "text-[color:var(--cue-style-quiet-ink,var(--cue-fg-muted))] data-[highlighted]:bg-[color:var(--cue-style-menu-highlight,var(--cue-accent-soft))]";
|
|
21
|
+
/**
|
|
22
|
+
* A menu row's corner (plan V.2, P112): `style-menu-item-radius`, falling back
|
|
23
|
+
* to the `rounded-control` corner the row drew. Porcelain rounds its menu and
|
|
24
|
+
* select rows at 0.6 of its control corner. A select's and a filterable list's
|
|
25
|
+
* rows read the same name with a `0px` fallback (`_style-option.ts`), since
|
|
26
|
+
* they drew no corner.
|
|
27
|
+
*/
|
|
28
|
+
const MENU_ITEM_RADIUS = "rounded-[var(--cue-style-menu-item-radius,calc(var(--cue-radius-control)*var(--cue-radius-scale)))]";
|
|
29
|
+
/**
|
|
30
|
+
* A menu popup's minimum width (round 6, spec §11, lane R6.P:
|
|
31
|
+
* `style-menu-min-width`), falling back to the `10rem` it drew. coss.com/ui's
|
|
32
|
+
* menus start at 8rem (`min-w-32`, P163.min-width).
|
|
33
|
+
*/
|
|
34
|
+
const MENU_MIN_WIDTH = "min-w-[var(--cue-style-menu-min-width,10rem)]";
|
|
35
|
+
/**
|
|
36
|
+
* The inline inset of the rule between a menu's groups (round 6, spec §11, lane
|
|
37
|
+
* R6.P: `style-menu-separator-inset`), falling back to the `0px` it drew: the
|
|
38
|
+
* rule ran rim to rim. coss.com/ui's stops 8px short of each side
|
|
39
|
+
* (P163.separator-inset).
|
|
40
|
+
*/
|
|
41
|
+
const MENU_SEPARATOR_INSET = "mx-[var(--cue-style-menu-separator-inset,0px)]";
|
|
42
|
+
//#endregion
|
|
43
|
+
export { MENU_ITEM_INK, MENU_ITEM_RADIUS, MENU_MIN_WIDTH, MENU_SEPARATOR_INSET };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/system/_style-meter.ts
|
|
2
|
+
/**
|
|
3
|
+
* A meter track's corner (round 6, spec §11, lane R6.P: `style-meter-radius`),
|
|
4
|
+
* falling back to the `rounded-full` it drew. coss.com/ui's meter track is
|
|
5
|
+
* square (P164.radius).
|
|
6
|
+
*
|
|
7
|
+
* **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
|
|
8
|
+
* reader falls back to what the component drew. Its own module for docgen's
|
|
9
|
+
* reason: one component's tokens per file.
|
|
10
|
+
*
|
|
11
|
+
* @internal Not part of the public API.
|
|
12
|
+
*/
|
|
13
|
+
const METER_RADIUS = "rounded-[var(--cue-style-meter-radius,calc(infinity*1px))]";
|
|
14
|
+
//#endregion
|
|
15
|
+
export { METER_RADIUS };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//#region src/system/_style-nav-item.ts
|
|
2
|
+
/**
|
|
3
|
+
* What a `Sidebar.Item` reads from the style set: its resting ink, and the
|
|
4
|
+
* ground, ink and weight of the item that is the current page.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.8 and §10.4 (plan R4 and its Graphite
|
|
7
|
+
* addition). The item said `text-fg-muted` at rest and, as the current page, an
|
|
8
|
+
* `accent-soft` ground under an `accent` ink. A Look whose sidebar is a softer
|
|
9
|
+
* ink (porcelain), whose current page is inverted (kiln), tinted and medium
|
|
10
|
+
* (porcelain) or marked by ink alone (graphite) reads these names instead.
|
|
11
|
+
*
|
|
12
|
+
* **Every fallback is the class it replaced**, for the reason
|
|
13
|
+
* `_style-control-face.ts` gives: `var(--cue-fg-muted)`, `var(--cue-accent-soft)`
|
|
14
|
+
* and `var(--cue-accent)`, and `400` for the weight, which the item inherited
|
|
15
|
+
* and computed under every shipped set.
|
|
16
|
+
*
|
|
17
|
+
* **The active weight yields to a caller's own weight.** The item set no
|
|
18
|
+
* weight in any state, so `<Sidebar.Item className="font-medium">` was 500
|
|
19
|
+
* whether current or not. A `data-[active]:` weight is `(0,2,0)` and would
|
|
20
|
+
* beat that class on the current item alone, so it is written
|
|
21
|
+
* `[:where(&[data-active])]:` — the same state at zero specificity — and a
|
|
22
|
+
* caller's weight class wins in both states again. The active ground and ink
|
|
23
|
+
* replaced `data-[active]:` classes and keep their standing, as those did.
|
|
24
|
+
*
|
|
25
|
+
* **The active ground reads two names, the sidebar's own first.**
|
|
26
|
+
* `style-selected-ground` is also the selected table row's ground
|
|
27
|
+
* (`_style-selected.ts`), where `transparent` would leave a selection with no
|
|
28
|
+
* mark at all; graphite's sidebar has no fill (G57). So the item reads
|
|
29
|
+
* `style-nav-active-ground` and falls back through `style-selected-ground`,
|
|
30
|
+
* which keeps kiln's and porcelain's values here, and the table reads
|
|
31
|
+
* `style-selected-ground` alone (spec §10.4). `style-nav-active-ground`
|
|
32
|
+
* entered the contract in the fidelity plan's L5.1, and `graphite` declares it
|
|
33
|
+
* `transparent` (G57).
|
|
34
|
+
*
|
|
35
|
+
* **Its own module**, for the docgen reason `_style-nav-voice.ts` gives.
|
|
36
|
+
*
|
|
37
|
+
* @internal Not part of the public API.
|
|
38
|
+
*/
|
|
39
|
+
const NAV_ITEM = "text-[color:var(--cue-style-nav-ink,var(--cue-fg-muted))] data-[active]:bg-[color:var(--cue-style-nav-active-ground,var(--cue-style-selected-ground,var(--cue-accent-soft)))] data-[active]:text-[color:var(--cue-style-selected-ink,var(--cue-accent))] [:where(&[data-active])]:font-[number:var(--cue-style-selected-weight,400)]";
|
|
40
|
+
//#endregion
|
|
41
|
+
export { NAV_ITEM };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//#region src/system/_style-nav-menu.ts
|
|
2
|
+
/**
|
|
3
|
+
* `NavigationMenu`'s trigger (round 6, spec §11, lane R6.T): the header nav's
|
|
4
|
+
* voice, padding and resting ink, and two names of its own, `style-nav-height`
|
|
5
|
+
* and `style-nav-open-ground`.
|
|
6
|
+
*
|
|
7
|
+
* **It reads the header nav's names**, because a site's header draws its menu
|
|
8
|
+
* triggers and its plain links as one row, in one voice: stripe.com's four
|
|
9
|
+
* triggers and its Pricing link are all 14px, 400, #061b31 with no inline
|
|
10
|
+
* padding (T16, T151); replit.com's are 13.3px and 14px, one ink, one
|
|
11
|
+
* padding; greptile.com, coss.com and agent-native.com draw no header menu
|
|
12
|
+
* trigger, only links (probed 2026-09-28). So the trigger reads
|
|
13
|
+
* `style-nav-face`, `-case`, `-tracking`, `-size`, `-weight` and `-pad`,
|
|
14
|
+
* which `AppBar.Link` reads, and `style-quiet-ink`, `AppBar.Link`'s muted
|
|
15
|
+
* register. Each falls back to what the trigger drew — the control face, its
|
|
16
|
+
* own `text-ui`, an inherited weight, tracking and case, `0 space-3` and
|
|
17
|
+
* `fg-muted` — so a set that names none of them renders the trigger it did.
|
|
18
|
+
*
|
|
19
|
+
* The height and the open ground are its own: stripe.com's triggers stand
|
|
20
|
+
* 40px on the nav's own padding (ours ride the `md` control rung) and draw no
|
|
21
|
+
* ground when their panel is open (ours tint it `accent-soft`), T151.
|
|
22
|
+
*
|
|
23
|
+
* @internal Not part of the public API.
|
|
24
|
+
*/
|
|
25
|
+
const NAV_TRIGGER_VOICE = "font-[family-name:var(--cue-style-nav-face,var(--cue-style-control-face,var(--cue-font-mono)))] [text-transform:var(--cue-style-nav-case,inherit)] tracking-[var(--cue-style-nav-tracking,inherit)] text-[length:var(--cue-style-nav-size,var(--cue-text-ui))] font-[number:var(--cue-style-nav-weight,inherit)]";
|
|
26
|
+
/** The trigger's resting ink: the header nav's muted register. */
|
|
27
|
+
const NAV_TRIGGER_INK = "text-[color:var(--cue-style-quiet-ink,var(--cue-fg-muted))]";
|
|
28
|
+
/** The trigger's padding: the header nav's. */
|
|
29
|
+
const NAV_TRIGGER_PAD = "p-[var(--cue-style-nav-pad,0_var(--cue-space-3))]";
|
|
30
|
+
/** The trigger's height. */
|
|
31
|
+
const NAV_TRIGGER_HEIGHT = "h-[var(--cue-style-nav-height,var(--cue-control-md))]";
|
|
32
|
+
/** An open trigger's ground. */
|
|
33
|
+
const NAV_OPEN_GROUND = "data-[popup-open]:bg-[color:var(--cue-style-nav-open-ground,var(--cue-accent-soft))]";
|
|
34
|
+
/**
|
|
35
|
+
* The caret's ink (round 6, spec §11, lane R6.K: `style-nav-caret-ink`),
|
|
36
|
+
* falling back to the `fg-subtle` it drew. replit.com draws its menu
|
|
37
|
+
* triggers' carets in the trigger's own ink, #37383c (K159).
|
|
38
|
+
*/
|
|
39
|
+
const NAV_CARET_INK = "text-[color:var(--cue-style-nav-caret-ink,var(--cue-fg-subtle))]";
|
|
40
|
+
/**
|
|
41
|
+
* The trigger's hover ink: the header nav's `style-hover-ink`, falling back to
|
|
42
|
+
* the `fg` it hovered to. replit.com's triggers hover to #2c2e31, the same
|
|
43
|
+
* ink its header links hover to (K51, K159), so the trigger reads the name
|
|
44
|
+
* `AppBar.Link` reads rather than a fixed `fg`.
|
|
45
|
+
*/
|
|
46
|
+
const NAV_TRIGGER_HOVER_INK = "hover:text-[color:var(--cue-style-hover-ink,var(--cue-fg))]";
|
|
47
|
+
//#endregion
|
|
48
|
+
export { NAV_CARET_INK, NAV_OPEN_GROUND, NAV_TRIGGER_HEIGHT, NAV_TRIGGER_HOVER_INK, NAV_TRIGGER_INK, NAV_TRIGGER_PAD, NAV_TRIGGER_VOICE };
|
|
@@ -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,99 @@
|
|
|
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
|
+
* The highlighted row's ink reads `style-option-highlight-ink` (round 6, lane
|
|
33
|
+
* R6.G), falling back to the `fg` every Look's highlighted row drew:
|
|
34
|
+
* agent-native.com's language listbox keeps its rows' `#3d3d3d` under the
|
|
35
|
+
* pointer (G143.hover-ink). The weight is spelt out whole rather than composed from
|
|
36
|
+
* `_style-body-weight.ts`: a variant prefixed onto an interpolated constant is
|
|
37
|
+
* a class that appears in no source file, and a consumer's Tailwind, which
|
|
38
|
+
* scans this package's build for candidates, would never generate it.
|
|
39
|
+
*
|
|
40
|
+
* @internal Not part of the public API.
|
|
41
|
+
*/
|
|
42
|
+
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-[color:var(--cue-style-option-highlight-ink,var(--cue-fg))] data-[selected]:text-[color:var(--cue-style-option-selected-ink,var(--cue-accent))]";
|
|
43
|
+
/**
|
|
44
|
+
* A listbox row's box (round 6, spec §11, lane R6.T: `style-option-pad`,
|
|
45
|
+
* `style-option-leading`, `style-option-height`): the select's rows and the
|
|
46
|
+
* combobox, autocomplete and multi-select rows (`forms/_listbox.ts`).
|
|
47
|
+
*
|
|
48
|
+
* stripe.com's rows (`.hds-listbox__item`) pad 12px, set 16px at 1.25 and
|
|
49
|
+
* stand 36px tall (T149, T154), where ours pad `space-3` (8px at normal), set
|
|
50
|
+
* an inherited leading, and ride the control ladder's `sm` rung (40px). Each
|
|
51
|
+
* falls back to the class it replaced.
|
|
52
|
+
*/
|
|
53
|
+
const OPTION_PAD = "px-[calc(var(--cue-space-3)*var(--cue-style-option-pad,1))]";
|
|
54
|
+
/** A listbox row's leading. */
|
|
55
|
+
const OPTION_LEADING = "leading-[var(--cue-style-option-leading,inherit)]";
|
|
56
|
+
/** A listbox row's height. */
|
|
57
|
+
const OPTION_HEIGHT = "h-[var(--cue-style-option-height,var(--cue-control-sm))]";
|
|
58
|
+
/**
|
|
59
|
+
* A selected row's ground (round 6, spec §11, lane R6.K:
|
|
60
|
+
* `style-option-selected-ground`), falling back to the `transparent` a
|
|
61
|
+
* selected row drew: the recipe above marks selection by ink alone.
|
|
62
|
+
* replit.com's credit-tier listbox fills its selected row with a warm tint,
|
|
63
|
+
* #f5e7e2, under a deep accent ink (K147).
|
|
64
|
+
*/
|
|
65
|
+
const OPTION_SELECTED_GROUND = "data-[selected]:bg-[color:var(--cue-style-option-selected-ground,transparent)]";
|
|
66
|
+
/**
|
|
67
|
+
* A row that is selected *and* highlighted — the row a select opens on, and
|
|
68
|
+
* the selected row under the pointer — keeps the highlight ground it drew
|
|
69
|
+
* before `style-option-selected-ground` existed. The name's fallback here is
|
|
70
|
+
* the highlight's own chain, and the two attributes together outrank either
|
|
71
|
+
* alone, so the order Tailwind emits `data-[selected]` and `data-[highlighted]`
|
|
72
|
+
* in cannot decide it. A set that names a selected ground (Kiln) paints it
|
|
73
|
+
* under the pointer too. The closing pass's full runs found the gap
|
|
74
|
+
* (T112.ground): with {@link OPTION_SELECTED_GROUND} alone, the open row lost
|
|
75
|
+
* its highlight in every Look but Kiln, and in no Look at all.
|
|
76
|
+
*/
|
|
77
|
+
const OPTION_SELECTED_HIGHLIGHT_GROUND = "data-[selected]:data-[highlighted]:bg-[color:var(--cue-style-option-selected-ground,var(--cue-style-menu-highlight,var(--cue-accent-soft)))]";
|
|
78
|
+
/**
|
|
79
|
+
* A selected row under the pointer (the closing pass, lane R6.G:
|
|
80
|
+
* `style-option-selected-hover-ground`), falling back to what the row paints
|
|
81
|
+
* selected and highlighted ({@link OPTION_SELECTED_HIGHLIGHT_GROUND}), which a
|
|
82
|
+
* pointer over it always is. A list opens with its selected row highlighted, so
|
|
83
|
+
* a set that grounds that row needs the pointer's own ground to answer a hover:
|
|
84
|
+
* agent-native.com's selected option sits on its raised ground, #ffffff /
|
|
85
|
+
* #0f0f0f, until the pointer paints its hover fill over it (G143). `hover:` is
|
|
86
|
+
* the pointer's alone, so a list opened from the keyboard keeps the selected
|
|
87
|
+
* ground, and the third attribute outranks the two above.
|
|
88
|
+
*/
|
|
89
|
+
const OPTION_SELECTED_POINTER_GROUND = "data-[selected]:data-[highlighted]:hover:bg-[color:var(--cue-style-option-selected-hover-ground,var(--cue-style-option-selected-ground,var(--cue-style-menu-highlight,var(--cue-accent-soft))))]";
|
|
90
|
+
/**
|
|
91
|
+
* A listbox popup's own padding (lane R6.K: `style-listbox-pad`, PAD2),
|
|
92
|
+
* falling back to the `space-1` block and `0` inline it drew (`py-(--cue-space-1)`).
|
|
93
|
+
* replit.com's listbox pads 4px all round, so its rows sit inside the popup's
|
|
94
|
+
* edge (K146). Read by `Select`'s popup and the listbox family's
|
|
95
|
+
* (`forms/_listbox.ts`).
|
|
96
|
+
*/
|
|
97
|
+
const LISTBOX_PAD = "p-[var(--cue-style-listbox-pad,var(--cue-space-1)_0)]";
|
|
98
|
+
//#endregion
|
|
99
|
+
export { LISTBOX_PAD, OPTION_HEIGHT, OPTION_LEADING, OPTION_PAD, OPTION_ROW, OPTION_SELECTED_GROUND, OPTION_SELECTED_HIGHLIGHT_GROUND, OPTION_SELECTED_POINTER_GROUND };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/system/_style-otp.ts
|
|
2
|
+
/**
|
|
3
|
+
* The gap between an OTP field's slots (round 6, spec §11, lane R6.P:
|
|
4
|
+
* `style-otp-gap`), falling back to the `space-2` it drew. coss.com/ui sets its
|
|
5
|
+
* slots 8px apart (P166.gap).
|
|
6
|
+
*
|
|
7
|
+
* **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
|
|
8
|
+
* reader falls back to what the component drew. Its own module for docgen's
|
|
9
|
+
* reason: one component's tokens per file.
|
|
10
|
+
*
|
|
11
|
+
* @internal Not part of the public API.
|
|
12
|
+
*/
|
|
13
|
+
const OTP_GAP = "gap-[var(--cue-style-otp-gap,var(--cue-space-2))]";
|
|
14
|
+
//#endregion
|
|
15
|
+
export { OTP_GAP };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/system/_style-outline-hover.ts
|
|
2
|
+
/**
|
|
3
|
+
* An outline button's hover (round 6, spec §11, lane R6.P:
|
|
4
|
+
* `style-outline-hover-ground`, `style-outline-hover-edge`), falling back to
|
|
5
|
+
* the transparent ground and `accent` edge it drew. coss.com/ui's outline
|
|
6
|
+
* button fills a faint ink on hover and keeps its rim grey (P145.outline,
|
|
7
|
+
* P145.outline-edge).
|
|
8
|
+
*
|
|
9
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason: one token per
|
|
10
|
+
* file, so only the components that read it are credited with it.
|
|
11
|
+
*
|
|
12
|
+
* @internal Not part of the public API.
|
|
13
|
+
*/
|
|
14
|
+
const OUTLINE_HOVER_GROUND = "hover:bg-[color:var(--cue-style-outline-hover-ground,transparent)]";
|
|
15
|
+
/** @see OUTLINE_HOVER_GROUND */
|
|
16
|
+
const OUTLINE_HOVER_EDGE = "hover:border-[color:var(--cue-style-outline-hover-edge,var(--cue-accent))]";
|
|
17
|
+
//#endregion
|
|
18
|
+
export { OUTLINE_HOVER_EDGE, OUTLINE_HOVER_GROUND };
|
|
@@ -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 };
|