@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,143 @@
|
|
|
1
|
+
//#region src/system/_style-chip.ts
|
|
2
|
+
/**
|
|
3
|
+
* The chip's voice and recipe: its case, tracking and radius, and the share of
|
|
4
|
+
* each tone its fill and its rim take — the console's by default, the style
|
|
5
|
+
* set's choice inside one.
|
|
6
|
+
*
|
|
7
|
+
* Spec 2026-09-26-looks-fidelity §3.6 (R2), F-15. A tinted chip was
|
|
8
|
+
* `bg-<tone>/10 border-<tone>/35 text-<tone>`, mono, uppercase and caps-tracked
|
|
9
|
+
* on the control radius, and under a sans Look it was the most visible console
|
|
10
|
+
* voice left (K44). The four measured Looks each draw their tags differently —
|
|
11
|
+
* kiln's are sentence-case pills at a 12% fill with no rim, porcelain's a 8%
|
|
12
|
+
* fill with no rim on a tighter radius, zine's rimless and 0.1em-tracked — and
|
|
13
|
+
* none of that follows the Look unless the chip reads it. So it reads:
|
|
14
|
+
*
|
|
15
|
+
* - `--cue-style-chip-case`, falling back through `--cue-style-label-case` to
|
|
16
|
+
* `uppercase`: a chip shouts when the set's captions do, unless the set says
|
|
17
|
+
* otherwise (kiln's tags are sentence case while its captions are caps);
|
|
18
|
+
* - `--cue-style-chip-tracking`, falling back to each variant's own tracking —
|
|
19
|
+
* the caps rung for `tinted` and `outline`, `0.06em` for `tag`;
|
|
20
|
+
* - `--cue-style-chip-size`, falling back to each variant's own rung — the
|
|
21
|
+
* label rung for `tinted` and `outline`, the micro rung for `tag` (`Kbd`
|
|
22
|
+
* reads it too, from `_style-kbd.ts`);
|
|
23
|
+
* - `--cue-style-chip-radius`, falling back to what `rounded-control` compiles
|
|
24
|
+
* to — the control rung times the radius scale, resolved at the chip;
|
|
25
|
+
* - `--cue-style-chip-fill` and `--cue-style-chip-edge`, the share of the tone
|
|
26
|
+
* in the fill and in the rim, falling back to `10%` and `35%`.
|
|
27
|
+
*
|
|
28
|
+
* Every name is optional (spec §3.0, F-3), emitted as `initial` on the shared
|
|
29
|
+
* `[data-style]` reset, so under no set and every set that declines them each
|
|
30
|
+
* reader resolves to exactly what the class it replaced resolved to.
|
|
31
|
+
*
|
|
32
|
+
* **The tone recipe mixes in `oklab`, not the spec's `oklch`.** `bg-accent/10`
|
|
33
|
+
* compiles to `color-mix(in oklab, var(--cue-accent) 10%, transparent)`, and a
|
|
34
|
+
* mix with `transparent` lands on the same colour in either space — but an
|
|
35
|
+
* engine serialises the result in the space it mixed in, so an `oklch` recipe
|
|
36
|
+
* reads `oklch(…)` where the chip read `oklab(…)`, and the fallback would not
|
|
37
|
+
* be the site's value byte for byte. `oklab` is.
|
|
38
|
+
*
|
|
39
|
+
* `neutral` is not here: its fill (`surface-2`) and its rims (`border`,
|
|
40
|
+
* `hair-strong`) are theme roles rather than a share of a tone, and keep their
|
|
41
|
+
* own classes. The hover rims and fills (`/60`, `/20`) stay the tone's own too.
|
|
42
|
+
*
|
|
43
|
+
* **Every entry is a complete literal**, for the reason `_focus-ring.ts` gives
|
|
44
|
+
* at length: Tailwind generates a class only when some source spells it out in
|
|
45
|
+
* one contiguous string, so the per-tone recipe is written out six times and
|
|
46
|
+
* never assembled from the tone's name at runtime.
|
|
47
|
+
*
|
|
48
|
+
* **One module for the chip's own names**, because `Chip` is their only
|
|
49
|
+
* importer: `@repo/docgen` credits every importer with every token in a file,
|
|
50
|
+
* which is why `Kbd`'s read of `--cue-style-chip-size` lives in `_style-kbd.ts`.
|
|
51
|
+
*
|
|
52
|
+
* **Where the size sits decides the line box.** `tailwind-merge` drops a
|
|
53
|
+
* `leading-*` class that a later font-size class follows. The chip's base
|
|
54
|
+
* string carries `leading-none` and its variants the size, so `Chip`'s own
|
|
55
|
+
* `cn()` drops the `leading-none` — exactly as it did when the variants spelt
|
|
56
|
+
* `text-(length:--cue-text-label)` — and a rendered chip's line box is the
|
|
57
|
+
* inherited one. The sizes stay in the variants for that reason: moving them
|
|
58
|
+
* ahead of the base would restore `leading-none` and move every chip.
|
|
59
|
+
*
|
|
60
|
+
* @internal Not part of the public API.
|
|
61
|
+
*/
|
|
62
|
+
const CHIP_CASE = "[text-transform:var(--cue-style-chip-case,var(--cue-style-label-case,uppercase))]";
|
|
63
|
+
/** @see CHIP_CASE — the `tinted` and `outline` variants' size; the label rung by default. */
|
|
64
|
+
const CHIP_SIZE = "text-[length:var(--cue-style-chip-size,var(--cue-text-label))]";
|
|
65
|
+
/** @see CHIP_CASE — the `tag` variant's size; the micro rung by default. */
|
|
66
|
+
const CHIP_SIZE_MICRO = "text-[length:var(--cue-style-chip-size,var(--cue-text-micro))]";
|
|
67
|
+
/** @see CHIP_CASE — the `tinted` and `outline` variants' tracking; the caps rung by default. */
|
|
68
|
+
const CHIP_TRACKING = "tracking-[var(--cue-style-chip-tracking,var(--cue-tracking-caps))]";
|
|
69
|
+
/** @see CHIP_CASE — the `tag` variant's tracking; its own closed `0.06em` by default. */
|
|
70
|
+
const CHIP_TRACKING_TAG = "tracking-[var(--cue-style-chip-tracking,0.06em)]";
|
|
71
|
+
/** @see CHIP_CASE — the chip's radius; what `rounded-control` compiles to by default. */
|
|
72
|
+
const CHIP_RADIUS = "rounded-[var(--cue-style-chip-radius,calc(var(--cue-radius-control)*var(--cue-radius-scale)))]";
|
|
73
|
+
/** @see CHIP_CASE — each tone's fill: `var(--cue-style-chip-fill, 10%)` of the tone over transparent. */
|
|
74
|
+
const CHIP_FILL = {
|
|
75
|
+
accent: "bg-[color:color-mix(in_oklab,var(--cue-accent)_var(--cue-style-chip-fill,10%),transparent)]",
|
|
76
|
+
ok: "bg-[color:color-mix(in_oklab,var(--cue-ok)_var(--cue-style-chip-fill,10%),transparent)]",
|
|
77
|
+
busy: "bg-[color:color-mix(in_oklab,var(--cue-busy)_var(--cue-style-chip-fill,10%),transparent)]",
|
|
78
|
+
warn: "bg-[color:color-mix(in_oklab,var(--cue-warn)_var(--cue-style-chip-fill,10%),transparent)]",
|
|
79
|
+
danger: "bg-[color:color-mix(in_oklab,var(--cue-danger)_var(--cue-style-chip-fill,10%),transparent)]",
|
|
80
|
+
info: "bg-[color:color-mix(in_oklab,var(--cue-info)_var(--cue-style-chip-fill,10%),transparent)]"
|
|
81
|
+
};
|
|
82
|
+
/** @see CHIP_CASE — each tone's rim: `var(--cue-style-chip-edge, 35%)` of the tone over transparent. */
|
|
83
|
+
const CHIP_EDGE = {
|
|
84
|
+
accent: "border-[color:color-mix(in_oklab,var(--cue-accent)_var(--cue-style-chip-edge,35%),transparent)]",
|
|
85
|
+
ok: "border-[color:color-mix(in_oklab,var(--cue-ok)_var(--cue-style-chip-edge,35%),transparent)]",
|
|
86
|
+
busy: "border-[color:color-mix(in_oklab,var(--cue-busy)_var(--cue-style-chip-edge,35%),transparent)]",
|
|
87
|
+
warn: "border-[color:color-mix(in_oklab,var(--cue-warn)_var(--cue-style-chip-edge,35%),transparent)]",
|
|
88
|
+
danger: "border-[color:color-mix(in_oklab,var(--cue-danger)_var(--cue-style-chip-edge,35%),transparent)]",
|
|
89
|
+
info: "border-[color:color-mix(in_oklab,var(--cue-info)_var(--cue-style-chip-edge,35%),transparent)]"
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* The chip's own height and inline padding (plan V.2, P14):
|
|
93
|
+
* `style-chip-height`, falling back to the `h-chip` rung, and `style-chip-pad`,
|
|
94
|
+
* falling back to the `space-3` the tinted and outline variants pad at (the
|
|
95
|
+
* `tag` variant keeps its `space-2`). Porcelain's chips are 22px on a phone and
|
|
96
|
+
* 18px on a desktop, 3px in — shorter than the `chip-h` rung its key caps
|
|
97
|
+
* share, which is why this is the chip's name and not the rung's.
|
|
98
|
+
*/
|
|
99
|
+
const CHIP_HEIGHT = "h-[var(--cue-style-chip-height,var(--cue-chip-h))]";
|
|
100
|
+
/** @see CHIP_HEIGHT */
|
|
101
|
+
const CHIP_PAD = "px-[var(--cue-style-chip-pad,var(--cue-space-3))]";
|
|
102
|
+
/**
|
|
103
|
+
* The chip's leading (round 6, spec §11, lane R6.T: `style-chip-leading`).
|
|
104
|
+
* stripe.com's tag sets 14px on a 19.6px line, 1.4 (T134). A nowrap, centred
|
|
105
|
+
* chip lays its glyphs in the same place at any leading.
|
|
106
|
+
*
|
|
107
|
+
* Two fallbacks, because the recipe's two users rendered two leadings. The
|
|
108
|
+
* recipe spelled `leading-none`, so `chipVariants()` on a consumer's own
|
|
109
|
+
* element drew a line of 1: {@link CHIP_LEADING}, composed after the size so
|
|
110
|
+
* it survives, falls back to `1`. `Chip` merged that recipe in `cn()`, where
|
|
111
|
+
* `tailwind-merge` dropped `leading-none` because a font-size class follows
|
|
112
|
+
* it, so a `Chip` inherited its leading: it appends
|
|
113
|
+
* {@link CHIP_LEADING_INHERIT}, which replaces the recipe's in the merge (the
|
|
114
|
+
* closing pass's adversarial review).
|
|
115
|
+
*/
|
|
116
|
+
const CHIP_LEADING = "leading-[var(--cue-style-chip-leading,1)]";
|
|
117
|
+
/** @see CHIP_LEADING — `Chip`'s own, falling back to the leading it inherited. */
|
|
118
|
+
const CHIP_LEADING_INHERIT = "leading-[var(--cue-style-chip-leading,inherit)]";
|
|
119
|
+
/**
|
|
120
|
+
* The tag volume's own gutter (round 6: `style-tag-pad`, PAD2), falling back
|
|
121
|
+
* to the `space-2` it drew. stripe.com's small tag pads 4px (T135).
|
|
122
|
+
*/
|
|
123
|
+
const TAG_PAD = "px-[var(--cue-style-tag-pad,var(--cue-space-2))]";
|
|
124
|
+
/**
|
|
125
|
+
* The neutral tag's rim (round 6: `style-tag-edge`), falling back to the
|
|
126
|
+
* `hair-strong` it drew. stripe.com rims its small tag in its quiet border
|
|
127
|
+
* ink, #e5edf5, the md tag's own (T135).
|
|
128
|
+
*/
|
|
129
|
+
const TAG_EDGE = "border-[color:var(--cue-style-tag-edge,var(--cue-hair-strong))]";
|
|
130
|
+
/**
|
|
131
|
+
* The neutral chip's ink (round 6, spec §11, lane R6.K: `style-chip-ink`),
|
|
132
|
+
* falling back to the `fg-muted` it drew. The tinted tones keep their own ink.
|
|
133
|
+
* replit.com's tags are near-black, #151618, on a warm tint (K156).
|
|
134
|
+
*/
|
|
135
|
+
const CHIP_INK_NEUTRAL = "text-[color:var(--cue-style-chip-ink,var(--cue-fg-muted))]";
|
|
136
|
+
/**
|
|
137
|
+
* The gap between a chip's icon and its label (round 6, spec §11, lane R6.P:
|
|
138
|
+
* `style-chip-gap`), falling back to the `space-2` it drew. coss.com/ui's badge
|
|
139
|
+
* sets it 4px (P190.gap).
|
|
140
|
+
*/
|
|
141
|
+
const CHIP_GAP = "gap-[var(--cue-style-chip-gap,var(--cue-space-2))]";
|
|
142
|
+
//#endregion
|
|
143
|
+
export { CHIP_CASE, CHIP_EDGE, CHIP_FILL, CHIP_GAP, CHIP_HEIGHT, CHIP_INK_NEUTRAL, CHIP_LEADING, CHIP_LEADING_INHERIT, CHIP_PAD, CHIP_RADIUS, CHIP_SIZE, CHIP_SIZE_MICRO, CHIP_TRACKING, CHIP_TRACKING_TAG, TAG_EDGE, TAG_PAD };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/system/_style-choice-gap.ts
|
|
2
|
+
/**
|
|
3
|
+
* The gap between a stacked CheckboxGroup's or RadioGroup's items (round 6,
|
|
4
|
+
* spec §11, lane R6.P: `style-choice-gap`), falling back to the `space-2`
|
|
5
|
+
* both drew. coss.com/ui stacks both 12px apart (P148, P171.gap). A horizontal
|
|
6
|
+
* radio group keeps its own `space-5`.
|
|
7
|
+
*
|
|
8
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason: one token per
|
|
9
|
+
* file, so only the components that read it are credited with it.
|
|
10
|
+
*
|
|
11
|
+
* @internal Not part of the public API.
|
|
12
|
+
*/
|
|
13
|
+
const CHOICE_GAP = "gap-[var(--cue-style-choice-gap,var(--cue-space-2))]";
|
|
14
|
+
//#endregion
|
|
15
|
+
export { CHOICE_GAP };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/system/_style-code.ts
|
|
2
|
+
/**
|
|
3
|
+
* Code's weight (plan V.2, T74): `style-code-weight` on a `CodeBlock`'s code,
|
|
4
|
+
* falling back to `inherit` — the block declared none. Tender's source serves
|
|
5
|
+
* one code face, SourceCodePro-Medium, so its code is 500 wherever it appears.
|
|
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 CODE_WEIGHT = "font-[number:var(--cue-style-code-weight,inherit)]";
|
|
12
|
+
//#endregion
|
|
13
|
+
export { CODE_WEIGHT };
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
//#region src/system/_style-collapse.ts
|
|
2
|
+
/**
|
|
3
|
+
* The disclosure trigger's height (plan V.2, P125): `style-collapse-height`,
|
|
4
|
+
* falling back to the `control-md` rung it drew. Porcelain's accordion rows
|
|
5
|
+
* are 52px. Shared by `Accordion`, `Collapsible` and `Disclosure`, which ride
|
|
6
|
+
* one trigger recipe (`layout/_collapse.ts`).
|
|
7
|
+
*
|
|
8
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason.
|
|
9
|
+
*
|
|
10
|
+
* @internal Not part of the public API.
|
|
11
|
+
*/
|
|
12
|
+
const COLLAPSE_HEIGHT = "h-[var(--cue-style-collapse-height,var(--cue-control-md))]";
|
|
13
|
+
/**
|
|
14
|
+
* The disclosure trigger's and panel's inline padding (round 6, spec §11,
|
|
15
|
+
* lane R6.T: `style-collapse-pad`), falling back to the row gutter
|
|
16
|
+
* `--cue-pad-row-x` they drew. stripe.com's accordion summary and content sit
|
|
17
|
+
* flush with the rule between sections, so tender sets `0px` (T127, T130).
|
|
18
|
+
*/
|
|
19
|
+
const COLLAPSE_PAD = "px-[var(--cue-style-collapse-pad,var(--cue-pad-row-x))]";
|
|
20
|
+
/** The gap between the trigger's label and its caret (`style-collapse-gap`), falling back to `space-3` (T127). */
|
|
21
|
+
const COLLAPSE_GAP = "gap-[var(--cue-style-collapse-gap,var(--cue-space-3))]";
|
|
22
|
+
/** The trigger's hover ink (`style-collapse-hover-ink`), falling back to the `fg` it hovered to (T128). */
|
|
23
|
+
const COLLAPSE_HOVER_INK = "hover:text-[color:var(--cue-style-collapse-hover-ink,var(--cue-fg))]";
|
|
24
|
+
/** An open section's trigger ink (`style-collapse-open-ink`), falling back to `fg` (T129). */
|
|
25
|
+
const COLLAPSE_OPEN_INK = "data-[panel-open]:text-[color:var(--cue-style-collapse-open-ink,var(--cue-fg))]";
|
|
26
|
+
/**
|
|
27
|
+
* The panel body's block padding, start then end (`style-collapse-body-pad`,
|
|
28
|
+
* PAD2), falling back to the `space-1` over `space-4` it drew. stripe.com's
|
|
29
|
+
* content starts under the summary's own padding and ends 16px above the
|
|
30
|
+
* rule (T130).
|
|
31
|
+
*/
|
|
32
|
+
const COLLAPSE_BODY_PAD = "[padding-block:var(--cue-style-collapse-body-pad,var(--cue-space-1)_var(--cue-space-4))]";
|
|
33
|
+
/**
|
|
34
|
+
* The trigger's text size (round 6, spec §11, lane R6.K: `style-collapse-size`,
|
|
35
|
+
* a SIZE the font scale moves), falling back to the `text-ui` rung it drew.
|
|
36
|
+
* replit.com's FAQ rows set their question at 20px on a 28px line (K142); greptile.com's
|
|
37
|
+
* FAQ toggles are its 16px copy, 14px on a phone (Z112).
|
|
38
|
+
*/
|
|
39
|
+
const COLLAPSE_SIZE = "text-[length:var(--cue-style-collapse-size,var(--cue-text-ui))]";
|
|
40
|
+
/** The trigger's leading (`style-collapse-leading`), falling back to the `inherit` it drew (no leading class of its own). */
|
|
41
|
+
const COLLAPSE_LEADING = "leading-[var(--cue-style-collapse-leading,inherit)]";
|
|
42
|
+
/**
|
|
43
|
+
* The trigger's hover ground (`style-collapse-hover-ground`), falling back to
|
|
44
|
+
* the `transparent` it drew: the trigger painted no ground under the pointer.
|
|
45
|
+
* replit.com's FAQ rows fill with its recessed ground on hover (K143).
|
|
46
|
+
*/
|
|
47
|
+
const COLLAPSE_HOVER_GROUND = "hover:bg-[color:var(--cue-style-collapse-hover-ground,transparent)]";
|
|
48
|
+
/**
|
|
49
|
+
* The panel body's ink (`style-collapse-body-ink`), falling back to the
|
|
50
|
+
* `fg-muted` it drew. replit.com's FAQ answers are set in its quiet ink,
|
|
51
|
+
* #37383c, the ink of its headings and quiet controls (K144).
|
|
52
|
+
*/
|
|
53
|
+
const COLLAPSE_BODY_INK = "text-[color:var(--cue-style-collapse-body-ink,var(--cue-fg-muted))]";
|
|
54
|
+
/**
|
|
55
|
+
* The panel body's face: the body face (`style-body-face`, spec §3.5), falling back to the `font-mono` the body
|
|
56
|
+
* drew. The body was the one part of the disclosure still hard-coded mono under a sans Look (K144, the K44
|
|
57
|
+
* finding).
|
|
58
|
+
*/
|
|
59
|
+
const COLLAPSE_BODY_FACE = "font-[family-name:var(--cue-style-body-face,var(--cue-font-mono))]";
|
|
60
|
+
/**
|
|
61
|
+
* The disclosure trigger's corner (round 6, spec §11, lane R6.K: `style-collapse-radius`), falling
|
|
62
|
+
* back to the square it drew. replit.com's FAQ rows round their hover ground 6px (K141.radius).
|
|
63
|
+
*/
|
|
64
|
+
const COLLAPSE_RADIUS = "rounded-[var(--cue-style-collapse-radius,0px)]";
|
|
65
|
+
/**
|
|
66
|
+
* The trigger's weight (`style-collapse-weight`), falling back through the
|
|
67
|
+
* label weight to the `400` it drew (`LABEL_WEIGHT_NORMAL`). greptile.com's
|
|
68
|
+
* FAQ toggles are 600 beside its 400 labels, so the two are apart (Z112).
|
|
69
|
+
*/
|
|
70
|
+
const COLLAPSE_WEIGHT = "font-[number:var(--cue-style-collapse-weight,var(--cue-style-label-weight,400))]";
|
|
71
|
+
/** The caret's size (`style-collapse-caret-size`), falling back to the `icon-sm` it drew; greptile.com's chevron is 16px (Z113). */
|
|
72
|
+
const COLLAPSE_CARET_SIZE = "size-[var(--cue-style-collapse-caret-size,var(--cue-icon-sm))]";
|
|
73
|
+
/** The caret's ink (`style-collapse-caret-ink`), falling back to the `fg-subtle` it drew; greptile.com's chevron takes the label's slate (Z113). */
|
|
74
|
+
/**
|
|
75
|
+
* The caret's fade (round 6, spec §11, lane R6.P: `style-collapse-caret-opacity`),
|
|
76
|
+
* falling back to the opacity 1 it drew. coss.com/ui's accordion chevron sits
|
|
77
|
+
* at 0.8 (P150.caret-opacity).
|
|
78
|
+
*/
|
|
79
|
+
const COLLAPSE_CARET_OPACITY = "opacity-[var(--cue-style-collapse-caret-opacity,1)]";
|
|
80
|
+
/** @see COLLAPSE_CARET_SIZE */
|
|
81
|
+
const COLLAPSE_CARET_INK = "text-[color:var(--cue-style-collapse-caret-ink,var(--cue-fg-subtle))]";
|
|
82
|
+
/**
|
|
83
|
+
* The panel body's size, leading and tracking (round 6, spec §11, lane R6.Z: `style-collapse-body-size`,
|
|
84
|
+
* a type size the font scale moves, `-body-leading`, `-body-tracking`), each falling back to the class it
|
|
85
|
+
* replaced: the `text-ui` rung on `leading-ui`, and the tracking it inherited (no class of its own). greptile.com's FAQ answers are its running
|
|
86
|
+
* copy, 16px on 24px at −0.01em (Z114).
|
|
87
|
+
*/
|
|
88
|
+
const COLLAPSE_BODY_SIZE = "text-[length:var(--cue-style-collapse-body-size,var(--cue-text-ui))]";
|
|
89
|
+
/** @see COLLAPSE_BODY_SIZE */
|
|
90
|
+
const COLLAPSE_BODY_LEADING = "leading-[var(--cue-style-collapse-body-leading,var(--cue-leading-ui))]";
|
|
91
|
+
/** @see COLLAPSE_BODY_SIZE */
|
|
92
|
+
const COLLAPSE_BODY_TRACKING = "tracking-[var(--cue-style-collapse-body-tracking,inherit)]";
|
|
93
|
+
//#endregion
|
|
94
|
+
export { COLLAPSE_BODY_FACE, COLLAPSE_BODY_INK, COLLAPSE_BODY_LEADING, COLLAPSE_BODY_PAD, COLLAPSE_BODY_SIZE, COLLAPSE_BODY_TRACKING, COLLAPSE_CARET_INK, COLLAPSE_CARET_OPACITY, COLLAPSE_CARET_SIZE, COLLAPSE_GAP, COLLAPSE_HEIGHT, COLLAPSE_HOVER_GROUND, COLLAPSE_HOVER_INK, COLLAPSE_LEADING, COLLAPSE_OPEN_INK, COLLAPSE_PAD, COLLAPSE_RADIUS, COLLAPSE_SIZE, COLLAPSE_WEIGHT };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/system/_style-control-face.ts
|
|
2
|
+
/**
|
|
3
|
+
* The face a control wears: mono by default, the style set's choice inside one.
|
|
4
|
+
*
|
|
5
|
+
* Spec 2026-09-26 R-8. Every control in this library spoke mono before this
|
|
6
|
+
* existed — `font-mono` on `Button`'s chassis and on the `Tabs` trigger — and
|
|
7
|
+
* that voice is the default and stays so. What was missing was a way for a
|
|
8
|
+
* sans-voiced Look (stripe's, replit's, coss's) to change it, and a face chosen
|
|
9
|
+
* per call site would not follow the Look. So the style set says it, through
|
|
10
|
+
* `--cue-style-control-face`, and this reads it.
|
|
11
|
+
*
|
|
12
|
+
* **The fallback is the old class, spelt out.** `font-mono` compiles to
|
|
13
|
+
* `font-family: var(--cue-font-mono)` through the Tailwind bridge, and
|
|
14
|
+
* `--cue-style-control-face` is declared on no `:root` — deliberately, because
|
|
15
|
+
* a `:root` `var(--cue-font-mono)` would be substituted at `<html>` and freeze
|
|
16
|
+
* the page's mono into every `<Preview font>` stage. So under no set this
|
|
17
|
+
* resolves to exactly what `font-mono` resolved to, at the control itself; and
|
|
18
|
+
* every shipped set but a sans-voiced one restates `var(--cue-font-mono)`, which
|
|
19
|
+
* `@cueplusplus/tokens` refuses to build otherwise for `console`.
|
|
20
|
+
*
|
|
21
|
+
* **Its own module**, because `@repo/docgen` attributes a token to a component
|
|
22
|
+
* by the file its class string lives in, following only `_`-prefixed imports —
|
|
23
|
+
* the rule `_paint-glow.ts` records. One reader per file.
|
|
24
|
+
*
|
|
25
|
+
* @internal Not part of the public API.
|
|
26
|
+
*/
|
|
27
|
+
const CONTROL_FACE = "font-[family-name:var(--cue-style-control-face,var(--cue-font-mono))]";
|
|
28
|
+
//#endregion
|
|
29
|
+
export { CONTROL_FACE };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/system/_style-control-gap.ts
|
|
2
|
+
/**
|
|
3
|
+
* The gap between a button's icon and its label (round 6, spec §11, lane
|
|
4
|
+
* R6.P: `style-control-gap`), falling back to the `0.4em` the chassis drew.
|
|
5
|
+
* coss.com/ui's buttons set it 8px (`gap-2`, P145.gap).
|
|
6
|
+
*
|
|
7
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason: one token per
|
|
8
|
+
* file, so only the components that read it are credited with it.
|
|
9
|
+
*
|
|
10
|
+
* @internal Not part of the public API.
|
|
11
|
+
*/
|
|
12
|
+
const CONTROL_GAP = "gap-[var(--cue-style-control-gap,0.4em)]";
|
|
13
|
+
//#endregion
|
|
14
|
+
export { CONTROL_GAP };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/system/_style-control-label.ts
|
|
2
|
+
/**
|
|
3
|
+
* A control's own label — the text beside a `Switch`, a `Checkbox` or a
|
|
4
|
+
* `Radio` — at the body weight first and the label weight after it (plan V.2,
|
|
5
|
+
* T114, P126).
|
|
6
|
+
*
|
|
7
|
+
* The label beside a control is body copy in Tender's source (300, its body
|
|
8
|
+
* weight) and a caption-weight label in Porcelain's (500, its label weight),
|
|
9
|
+
* so the reader tries the body weight, then the label weight, then `inherit`
|
|
10
|
+
* — `LABEL_WEIGHT`'s fallback, what the label drew before either name
|
|
11
|
+
* existed. Only Tender declares the body weight, so every other Look keeps
|
|
12
|
+
* its label weight here.
|
|
13
|
+
*
|
|
14
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason: every
|
|
15
|
+
* importer of `_style-label-weight.ts` would otherwise publish
|
|
16
|
+
* `style-body-weight` as a token it reads.
|
|
17
|
+
*
|
|
18
|
+
* @internal Not part of the public API.
|
|
19
|
+
*/
|
|
20
|
+
const CONTROL_LABEL_WEIGHT = "font-[number:var(--cue-style-body-weight,var(--cue-style-label-weight,inherit))]";
|
|
21
|
+
/**
|
|
22
|
+
* A checkbox's, a switch's and a radio's label leading (round 6, spec §11,
|
|
23
|
+
* lane R6.T: `style-control-label-leading`), falling back to the `inherit` it
|
|
24
|
+
* drew (no leading class of its own). stripe.com sets its checkbox and switch
|
|
25
|
+
* labels at 16px on a 19.2px line, 1.2 (T145, T146).
|
|
26
|
+
*/
|
|
27
|
+
const CONTROL_LABEL_LEADING = "leading-[var(--cue-style-control-label-leading,inherit)]";
|
|
28
|
+
//#endregion
|
|
29
|
+
export { CONTROL_LABEL_LEADING, CONTROL_LABEL_WEIGHT };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/system/_style-control-step.ts
|
|
2
|
+
/**
|
|
3
|
+
* The control rungs' step size (plan V.2, P130): the `sm` field and the `lg`
|
|
4
|
+
* field and button read `style-control-step-size`, each falling back to the
|
|
5
|
+
* rung it drew — `text-label`, `text-body` and `text-emphasis`. Porcelain's
|
|
6
|
+
* source sets every control's text at one size that steps from 16px on a
|
|
7
|
+
* phone to 14px on a desktop, whichever rung the control is.
|
|
8
|
+
*
|
|
9
|
+
* A type size, so the build wraps a set's value in the font scale's `calc()`.
|
|
10
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason: the field
|
|
11
|
+
* chassis reads it, and `_style-control.ts`'s button names are not the
|
|
12
|
+
* field's.
|
|
13
|
+
*
|
|
14
|
+
* @internal Not part of the public API.
|
|
15
|
+
*/
|
|
16
|
+
const CONTROL_STEP_SIZE_SM = "text-[length:var(--cue-style-control-step-size,var(--cue-text-label))]";
|
|
17
|
+
/** @see CONTROL_STEP_SIZE_SM */
|
|
18
|
+
const CONTROL_STEP_SIZE_BODY = "text-[length:var(--cue-style-control-step-size,var(--cue-text-body))]";
|
|
19
|
+
/** @see CONTROL_STEP_SIZE_SM */
|
|
20
|
+
const CONTROL_STEP_SIZE_LG = "text-[length:var(--cue-style-control-step-size,var(--cue-text-emphasis))]";
|
|
21
|
+
//#endregion
|
|
22
|
+
export { CONTROL_STEP_SIZE_BODY, CONTROL_STEP_SIZE_LG, CONTROL_STEP_SIZE_SM };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
//#region src/system/_style-control.ts
|
|
2
|
+
/**
|
|
3
|
+
* `Button`'s voice, padding and tones, each a style-set name read with the
|
|
4
|
+
* class it replaced as its fallback.
|
|
5
|
+
*
|
|
6
|
+
* Fidelity spec 2026-09-26 §3.7 (plan R3), and §10.4 for `CONTROL_CASE`. Four
|
|
7
|
+
* Looks draw their buttons differently from the console: tender and zine at
|
|
8
|
+
* weight 400, kiln tracked in, tender and zine padded out and kiln and
|
|
9
|
+
* porcelain drawn in, tender's label trimmed to its cap height, graphite in
|
|
10
|
+
* capitals; and each gives its secondary, ghost and outline tones an ink, a
|
|
11
|
+
* ground or an edge of its own. None of that is a value one call site could
|
|
12
|
+
* choose, so the style set says it and these read it.
|
|
13
|
+
*
|
|
14
|
+
* **Every fallback is what the site rendered before this existed**, so under
|
|
15
|
+
* no set and under every set that declines a name the reader is a no-op:
|
|
16
|
+
*
|
|
17
|
+
* - `CONTROL_WEIGHT` is `font-medium`'s 500. It is spelt
|
|
18
|
+
* `font-[number:…]`: a bare `font-[…]` is read as a family, and the
|
|
19
|
+
* `number` label makes it a weight to Tailwind (which emits exactly what
|
|
20
|
+
* `font-medium` emitted, `--tw-font-weight` included) and to `twMerge`, so a
|
|
21
|
+
* caller's `className="font-semibold"` still replaces it. Spelt as an
|
|
22
|
+
* arbitrary `[font-weight:…]` property instead, it would survive the merge
|
|
23
|
+
* and win the cascade: Tailwind emits it after `font-semibold`.
|
|
24
|
+
* - `CONTROL_TRACKING`, `CONTROL_TRIM` and `CONTROL_CASE` fall back to
|
|
25
|
+
* `normal`, `normal` and `none`, the spec's fallbacks: the chassis set none
|
|
26
|
+
* of the three, so a button drew each property's initial value unless an
|
|
27
|
+
* ancestor set a letter-spacing or a case for it to inherit. It now draws
|
|
28
|
+
* the initial value under such an ancestor too, which is what a control
|
|
29
|
+
* should: its voice is the set's, not the caption's it happens to sit in.
|
|
30
|
+
* - The three `CONTROL_PAD_*` multiply the rung each size read (`space-4`,
|
|
31
|
+
* `-5`, `-6`) by the set's multiplier, `1` when it has none.
|
|
32
|
+
* - The tone readers keep each tone's own ink, ground and edge:
|
|
33
|
+
* `style-quiet-ink` in particular falls back to `fg-muted` on the ghost and
|
|
34
|
+
* to `fg` on the outline, the two values the spec's §3.0 names as the reason
|
|
35
|
+
* a name like it cannot be declared on `console`.
|
|
36
|
+
*
|
|
37
|
+
* `style-control-case` is not in the contract yet (spec §10.4: it enters in
|
|
38
|
+
* L5.1). Until then no set declares it and `CONTROL_CASE` renders its
|
|
39
|
+
* fallback.
|
|
40
|
+
*
|
|
41
|
+
* **Its own module, and `Button`'s alone.** `@repo/docgen` attributes every
|
|
42
|
+
* token a file spells to each component that imports it, following only
|
|
43
|
+
* `_`-prefixed imports; the rule `_style-control-face.ts` records. Only
|
|
44
|
+
* `primitives/button.tsx` imports this, and `IconButton` reads it through
|
|
45
|
+
* `buttonChassis` and `buttonTones` as it always has.
|
|
46
|
+
*
|
|
47
|
+
* @internal Not part of the public API.
|
|
48
|
+
*/
|
|
49
|
+
/** The control's weight: 500, or the set's `style-control-weight`. */
|
|
50
|
+
const CONTROL_WEIGHT = "font-[number:var(--cue-style-control-weight,500)]";
|
|
51
|
+
/** The control's tracking: `normal`, or the set's `style-control-tracking`. */
|
|
52
|
+
const CONTROL_TRACKING = "tracking-[var(--cue-style-control-tracking,normal)]";
|
|
53
|
+
/** The label's box trim: `normal`, or the set's `style-control-trim`. */
|
|
54
|
+
const CONTROL_TRIM = "[text-box:var(--cue-style-control-trim,normal)]";
|
|
55
|
+
/** The label's case: `none`, or the set's `style-control-case` (spec §10.4). */
|
|
56
|
+
const CONTROL_CASE = "[text-transform:var(--cue-style-control-case,none)]";
|
|
57
|
+
/** `size="sm"`'s inline padding: `space-4` times the set's `style-control-pad`. */
|
|
58
|
+
const CONTROL_PAD_SM = "px-[calc(var(--cue-space-4)*var(--cue-style-control-pad,1))]";
|
|
59
|
+
/** `size="md"`'s inline padding: `space-5` times the set's `style-control-pad`. */
|
|
60
|
+
const CONTROL_PAD_MD = "px-[calc(var(--cue-space-5)*var(--cue-style-control-pad,1))]";
|
|
61
|
+
/** `size="lg"`'s inline padding: `space-6` times the set's `style-control-pad`. */
|
|
62
|
+
const CONTROL_PAD_LG = "px-[calc(var(--cue-space-6)*var(--cue-style-control-pad,1))]";
|
|
63
|
+
/** The secondary tone's ink: `fg-muted`, or the set's `style-secondary-ink`. */
|
|
64
|
+
const SECONDARY_INK = "text-[color:var(--cue-style-secondary-ink,var(--cue-fg-muted))]";
|
|
65
|
+
/** The secondary tone's ground: `surface-2`, or the set's `style-secondary-ground`. */
|
|
66
|
+
const SECONDARY_GROUND = "bg-[color:var(--cue-style-secondary-ground,var(--cue-surface-2))]";
|
|
67
|
+
/** The secondary tone's edge: `border`, or the set's `style-secondary-edge`. */
|
|
68
|
+
const SECONDARY_EDGE = "border-[color:var(--cue-style-secondary-edge,var(--cue-border))]";
|
|
69
|
+
/** The ghost tone's ink: `fg-muted`, or the set's `style-quiet-ink`. */
|
|
70
|
+
const GHOST_INK = "text-[color:var(--cue-style-quiet-ink,var(--cue-fg-muted))]";
|
|
71
|
+
/** The outline tone's ink: `fg`, or the set's `style-quiet-ink`. */
|
|
72
|
+
const OUTLINE_INK = "text-[color:var(--cue-style-quiet-ink,var(--cue-fg))]";
|
|
73
|
+
/** The outline tone's edge: `border`, or the set's `style-outline-edge`. */
|
|
74
|
+
const OUTLINE_EDGE = "border-[color:var(--cue-style-outline-edge,var(--cue-border))]";
|
|
75
|
+
//#endregion
|
|
76
|
+
export { CONTROL_CASE, CONTROL_PAD_LG, CONTROL_PAD_MD, CONTROL_PAD_SM, CONTROL_TRACKING, CONTROL_TRIM, CONTROL_WEIGHT, GHOST_INK, OUTLINE_EDGE, OUTLINE_INK, SECONDARY_EDGE, SECONDARY_GROUND, SECONDARY_INK };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
//#region src/system/_style-crumb.ts
|
|
2
|
+
/**
|
|
3
|
+
* The breadcrumb's own voice (round 6, spec §11, lane R6.Z): its face
|
|
4
|
+
* (`style-crumb-face`), falling back through the control face to the mono it
|
|
5
|
+
* drew; a crumb's hover ink (`style-crumb-hover-ink`), falling back to the
|
|
6
|
+
* `accent` it hovered to; and the gap between crumbs (`style-crumb-gap`),
|
|
7
|
+
* falling back to the `space-2` it drew. greptile.com's blog trail is Space
|
|
8
|
+
* Mono beside its DM Sans buttons, hovers to `fg`, and spaces its crumbs 8px
|
|
9
|
+
* apart at 1440 and 6px at 390 (Z126). Its size is `style-body-size`'s
|
|
10
|
+
* (`_style-body-size.ts`).
|
|
11
|
+
*
|
|
12
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason: one token per
|
|
13
|
+
* file, so `Breadcrumb` alone is credited with these.
|
|
14
|
+
*
|
|
15
|
+
* @internal Not part of the public API.
|
|
16
|
+
*/
|
|
17
|
+
const CRUMB_FACE = "font-[family-name:var(--cue-style-crumb-face,var(--cue-style-control-face,var(--cue-font-mono)))]";
|
|
18
|
+
/** @see CRUMB_FACE */
|
|
19
|
+
const CRUMB_HOVER_INK = "hover:text-[color:var(--cue-style-crumb-hover-ink,var(--cue-accent))]";
|
|
20
|
+
/** @see CRUMB_FACE */
|
|
21
|
+
const CRUMB_GAP = "gap-[var(--cue-style-crumb-gap,var(--cue-space-2))]";
|
|
22
|
+
/**
|
|
23
|
+
* A crumb's ink (round 6, spec §11, lane R6.Z: `style-crumb-ink`): the links fall back to the
|
|
24
|
+
* `fg-muted` they drew and the current crumb to its full-strength `fg`. greptile.com's blog
|
|
25
|
+
* sets both in one grey, #6a6a6a (Z126.ink, Z126.current).
|
|
26
|
+
*/
|
|
27
|
+
const CRUMB_INK = "text-[color:var(--cue-style-crumb-ink,var(--cue-fg-muted))]";
|
|
28
|
+
/** @see CRUMB_INK */
|
|
29
|
+
const CRUMB_CURRENT_INK = "text-[color:var(--cue-style-crumb-ink,var(--cue-fg))]";
|
|
30
|
+
/**
|
|
31
|
+
* The trail's type size (`style-crumb-size`, a type size the font scale moves), falling back through
|
|
32
|
+
* the body size to the `text-label` rung it drew (`BODY_SIZE_LABEL`). greptile.com's crumbs are
|
|
33
|
+
* 14px, 12px on a phone (Z126.size).
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* The separator's fade (round 6, spec §11, lane R6.P:
|
|
37
|
+
* `style-crumb-separator-opacity`), falling back to the opacity 1 it drew.
|
|
38
|
+
* coss.com/ui's separators sit at 0.8 (P144.opacity).
|
|
39
|
+
*/
|
|
40
|
+
const CRUMB_SEPARATOR_OPACITY = "opacity-[var(--cue-style-crumb-separator-opacity,1)]";
|
|
41
|
+
/** @see CRUMB_INK */
|
|
42
|
+
const CRUMB_SIZE = "text-[length:var(--cue-style-crumb-size,var(--cue-style-body-size,var(--cue-text-label)))]";
|
|
43
|
+
//#endregion
|
|
44
|
+
export { CRUMB_CURRENT_INK, CRUMB_FACE, CRUMB_GAP, CRUMB_HOVER_INK, CRUMB_INK, CRUMB_SEPARATOR_OPACITY, CRUMB_SIZE };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/system/_style-data-face.ts
|
|
2
|
+
/**
|
|
3
|
+
* The face figures and records are set in: mono, until a style set names another.
|
|
4
|
+
*
|
|
5
|
+
* Spec 2026-09-26-looks-fidelity §3.5, plan R1. A `Stat`'s value and detail, a
|
|
6
|
+
* `Table`, a `Row`, a `Bento` tile's eyebrow and a `SectionHeader`'s count all
|
|
7
|
+
* spelt `font-mono`. In the console that is the data's voice; in Tender, Kiln
|
|
8
|
+
* and Porcelain the same numbers are set in the Look's sans (T15, K44, P46), and
|
|
9
|
+
* a face chosen per call site would not follow the Look.
|
|
10
|
+
*
|
|
11
|
+
* `tabular-nums` stays at each call site: a sans figure column still has to line
|
|
12
|
+
* up. Code, timecode and DMX values do not read this — they are content, and stay
|
|
13
|
+
* `font-mono` whatever the Look.
|
|
14
|
+
*
|
|
15
|
+
* **The fallback is the old class, spelt out**: `font-mono` compiles to
|
|
16
|
+
* `font-family: var(--cue-font-mono)`, and `--cue-style-data-face` is optional
|
|
17
|
+
* (spec §3.0) — on no `:root`, and left at the shared `[data-style]` reset by
|
|
18
|
+
* every shipped set — so the reader resolves the element's own mono, exactly as
|
|
19
|
+
* `font-mono` did, in every set and every font island.
|
|
20
|
+
*
|
|
21
|
+
* **Its own module**, one name per file, so `@repo/docgen` attributes exactly
|
|
22
|
+
* this token to exactly the components that import it.
|
|
23
|
+
*
|
|
24
|
+
* @internal Not part of the public API.
|
|
25
|
+
*/
|
|
26
|
+
const DATA_FACE = "font-[family-name:var(--cue-style-data-face,var(--cue-font-mono))]";
|
|
27
|
+
//#endregion
|
|
28
|
+
export { DATA_FACE };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/system/_style-day.ts
|
|
2
|
+
/**
|
|
3
|
+
* A calendar day's cell and ink (round 6, spec §11, lane R6.P: `style-day-size`,
|
|
4
|
+
* `style-day-ink`). The size sets the day buttons, the weekday heads above
|
|
5
|
+
* them, the month-nav buttons and the caption row they sit in, falling back to
|
|
6
|
+
* the `control-sm` box they drew. coss.com/ui's days and its nav buttons are
|
|
7
|
+
* 36px squares (40px on a phone) (P189, P189.nav).
|
|
8
|
+
*
|
|
9
|
+
* **Optional** (spec §3.0): each name is declared by `porcelain` alone and each
|
|
10
|
+
* reader falls back to what the component drew. Its own module for docgen's
|
|
11
|
+
* reason: one component's tokens per file.
|
|
12
|
+
*
|
|
13
|
+
* @internal Not part of the public API.
|
|
14
|
+
*/
|
|
15
|
+
const DAY_SIZE = "size-[var(--cue-style-day-size,var(--cue-control-sm))]";
|
|
16
|
+
/** @see DAY_SIZE — the caption row's and the nav row's height. */
|
|
17
|
+
const DAY_HEIGHT = "h-[var(--cue-style-day-size,var(--cue-control-sm))]";
|
|
18
|
+
/**
|
|
19
|
+
* A day's ink at rest (`style-day-ink`), falling back to the `fg-muted` the days
|
|
20
|
+
* drew. coss.com/ui draws its days in `fg` (P189.day-ink); the outside days,
|
|
21
|
+
* the selected day and a hovered day keep their own inks.
|
|
22
|
+
*/
|
|
23
|
+
const DAY_INK = "text-[color:var(--cue-style-day-ink,var(--cue-fg-muted))]";
|
|
24
|
+
//#endregion
|
|
25
|
+
export { DAY_HEIGHT, DAY_INK, DAY_SIZE };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/system/_style-description.ts
|
|
2
|
+
/**
|
|
3
|
+
* `Card.Description`'s leading and tracking (plan V.2, Z104, T117, P8).
|
|
4
|
+
*
|
|
5
|
+
* The description reads `style-description-leading` first and then the body
|
|
6
|
+
* leading, so Zine can set a card's supporting line apart from the rest of its
|
|
7
|
+
* body copy (a clamp the description alone measured) while Tender and
|
|
8
|
+
* Porcelain move it with their body leading; with neither named it keeps the
|
|
9
|
+
* `leading-ui` it drew. The tracking is the description's own name rather
|
|
10
|
+
* than `style-prose-tracking`, which Kiln declares at -0.02em for its prose:
|
|
11
|
+
* reading that here would have moved every Kiln card's copy with it. It falls
|
|
12
|
+
* back to `inherit`, which is what the description drew, since it declared no
|
|
13
|
+
* tracking before.
|
|
14
|
+
*
|
|
15
|
+
* **Optional** (spec §3.0). Its own module for docgen's reason.
|
|
16
|
+
*
|
|
17
|
+
* @internal Not part of the public API.
|
|
18
|
+
*/
|
|
19
|
+
const DESCRIPTION_LEADING = "leading-[var(--cue-style-description-leading,var(--cue-style-body-leading,var(--cue-leading-ui)))]";
|
|
20
|
+
/** @see DESCRIPTION_LEADING */
|
|
21
|
+
const DESCRIPTION_TRACKING = "tracking-[var(--cue-style-description-tracking,inherit)]";
|
|
22
|
+
//#endregion
|
|
23
|
+
export { DESCRIPTION_LEADING, DESCRIPTION_TRACKING };
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
//#region src/system/_style-disabled.ts
|
|
2
|
+
/**
|
|
3
|
+
* A disabled control's opacity, fill and ink (round 6, spec §11, lane R6.T:
|
|
4
|
+
* `style-disabled-opacity`, `style-disabled-fill`, `style-disabled-ink`).
|
|
5
|
+
*
|
|
6
|
+
* The chassis marks a disabled control by fading it to 40%, whatever the Look.
|
|
7
|
+
* stripe.com's system paints its disabled controls instead: a button, a
|
|
8
|
+
* checkbox, a switch's track and a text field fill with its quiet surface
|
|
9
|
+
* (`--hds-color-input-bg-disabled`, #e5edf5 over white), a disabled label and
|
|
10
|
+
* button text take a pale ink (`--hds-color-input-text-disabled`, #95a4ba),
|
|
11
|
+
* and nothing fades (T143, T132, T145, T146). So a set may lift the fade and
|
|
12
|
+
* name the fill and the ink.
|
|
13
|
+
*
|
|
14
|
+
* **Every reader falls back to what its control drew before**: the fade to
|
|
15
|
+
* `0.4`, each fill and ink to the resting value of the same control and
|
|
16
|
+
* state, spelled here byte for byte, so a disabled control under a set that
|
|
17
|
+
* declines all three is exactly the faded control it was. Each is spelled
|
|
18
|
+
* out whole, because Tailwind reads class names from source text and cannot
|
|
19
|
+
* see one built at run time.
|
|
20
|
+
*
|
|
21
|
+
* **Its own module**, because docgen credits every `--cue-*` in a module to
|
|
22
|
+
* each component that imports it: the button chassis, the field chassis, the
|
|
23
|
+
* checkbox and the switch each import the constants they spend.
|
|
24
|
+
*
|
|
25
|
+
* @internal Not part of the public API.
|
|
26
|
+
*/
|
|
27
|
+
/** The fade on `:disabled` (a native control). */
|
|
28
|
+
const DISABLED_OPACITY = "disabled:opacity-[var(--cue-style-disabled-opacity,0.4)]";
|
|
29
|
+
/** The fade on `[data-disabled]` (Base UI's own attribute). */
|
|
30
|
+
const DATA_DISABLED_OPACITY = "data-[disabled]:opacity-[var(--cue-style-disabled-opacity,0.4)]";
|
|
31
|
+
/** The fade on a control's label, which holds the disabled control. */
|
|
32
|
+
const LABEL_DISABLED_OPACITY = "has-[[data-disabled]]:opacity-[var(--cue-style-disabled-opacity,0.4)]";
|
|
33
|
+
/** A disabled control label's ink, falling back to the label ink it drew (`LABEL_INK`). */
|
|
34
|
+
const LABEL_DISABLED_INK = "has-[[data-disabled]]:text-[color:var(--cue-style-disabled-ink,var(--cue-style-label-ink,var(--cue-fg-muted)))]";
|
|
35
|
+
/**
|
|
36
|
+
* The field chassis's fill when disabled: its own two layers (`STROKE_SUNKEN`),
|
|
37
|
+
* with the fill layer's `sunken` read through `style-disabled-fill`, on
|
|
38
|
+
* `:disabled` and on `[data-disabled]`.
|
|
39
|
+
*/
|
|
40
|
+
const FIELD_DISABLED_FILL = "disabled:bg-[linear-gradient(var(--cue-style-disabled-fill,var(--cue-sunken)),var(--cue-style-disabled-fill,var(--cue-sunken))),linear-gradient(var(--cue-paint-stroke-angle),var(--cue-paint-stroke-from,var(--cue-border)),var(--cue-paint-stroke-to,var(--cue-border)))] data-[disabled]:bg-[linear-gradient(var(--cue-style-disabled-fill,var(--cue-sunken)),var(--cue-style-disabled-fill,var(--cue-sunken))),linear-gradient(var(--cue-paint-stroke-angle),var(--cue-paint-stroke-from,var(--cue-border)),var(--cue-paint-stroke-to,var(--cue-border)))]";
|
|
41
|
+
/**
|
|
42
|
+
* The button tones' fill and ink when disabled, each falling back to the tone's own resting fill and ink.
|
|
43
|
+
* The two transparent tones keep their ground and take an edge instead (`style-disabled-edge`, falling
|
|
44
|
+
* back to the edge each drew): stripe.com's disabled icon button stays on its ground and draws a 1px rim
|
|
45
|
+
* in its disabled border ink (T139), where its filled buttons fill (T143).
|
|
46
|
+
*/
|
|
47
|
+
const DISABLED_TONES = {
|
|
48
|
+
primary: "disabled:bg-[color:var(--cue-style-disabled-fill,var(--cue-accent-fill))] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-accent-fill-fg))]",
|
|
49
|
+
secondary: "disabled:bg-[color:var(--cue-style-disabled-fill,var(--cue-style-secondary-ground,var(--cue-surface-2)))] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-style-secondary-ink,var(--cue-fg-muted)))]",
|
|
50
|
+
ghost: "disabled:border-[color:var(--cue-style-disabled-edge,transparent)] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-style-quiet-ink,var(--cue-fg-muted)))]",
|
|
51
|
+
outline: "disabled:border-[color:var(--cue-style-disabled-edge,var(--cue-style-outline-edge,var(--cue-border)))] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-style-quiet-ink,var(--cue-fg)))]",
|
|
52
|
+
danger: "disabled:bg-[color:var(--cue-style-disabled-fill,var(--cue-danger))] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-danger-fg))]",
|
|
53
|
+
"danger-outline": "disabled:bg-[color:var(--cue-style-disabled-fill,transparent)] disabled:text-[color:var(--cue-style-disabled-ink,var(--cue-danger))]"
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The checkbox's box when disabled: its fill, and its edge, which a disabled
|
|
57
|
+
* box draws in its own fill (the source's disabled box draws no border, so
|
|
58
|
+
* the two read as one square). Each state keeps its own fallback: the
|
|
59
|
+
* resting `sunken` and edge, and the checked and indeterminate `accent`.
|
|
60
|
+
*
|
|
61
|
+
* The checked and indeterminate edges skip an invalid box: they name two
|
|
62
|
+
* attributes and so outrank `data-[invalid]:border-danger`, and a disabled,
|
|
63
|
+
* checked, invalid box drew `danger` before round 6 (the closing pass's
|
|
64
|
+
* adversarial review).
|
|
65
|
+
*/
|
|
66
|
+
const CHECK_DISABLED = "data-[disabled]:bg-[color:var(--cue-style-disabled-fill,var(--cue-sunken))] data-[disabled]:border-[color:var(--cue-style-disabled-fill,var(--cue-style-check-edge,var(--cue-border)))] data-[disabled]:data-[checked]:bg-[color:var(--cue-style-disabled-fill,var(--cue-accent))] data-[disabled]:data-[checked]:not-data-[invalid]:border-[color:var(--cue-style-disabled-fill,var(--cue-accent))] data-[disabled]:data-[indeterminate]:bg-[color:var(--cue-style-disabled-fill,var(--cue-accent))] data-[disabled]:data-[indeterminate]:not-data-[invalid]:border-[color:var(--cue-style-disabled-fill,var(--cue-accent))]";
|
|
67
|
+
/** The switch's track when disabled, unchecked and checked, each state keeping its own fallback. */
|
|
68
|
+
const SWITCH_DISABLED_TRACK = "data-[disabled]:bg-[color:var(--cue-style-disabled-fill,var(--cue-surface-3))] data-[disabled]:data-[checked]:bg-[color:var(--cue-style-disabled-fill,var(--cue-accent))]";
|
|
69
|
+
//#endregion
|
|
70
|
+
export { CHECK_DISABLED, DATA_DISABLED_OPACITY, DISABLED_OPACITY, DISABLED_TONES, FIELD_DISABLED_FILL, LABEL_DISABLED_INK, LABEL_DISABLED_OPACITY, SWITCH_DISABLED_TRACK };
|