@cueplusplus/ui 0.16.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +825 -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/eyebrow.d.ts +13 -5
- package/dist/chrome/eyebrow.js +18 -7
- package/dist/chrome/footer.d.ts +5 -0
- package/dist/chrome/footer.js +14 -3
- package/dist/chrome/navigation-menu.js +4 -2
- package/dist/chrome/page-shell.js +8 -5
- package/dist/chrome/panel.d.ts +5 -2
- package/dist/chrome/panel.js +8 -4
- package/dist/chrome/row.js +6 -3
- package/dist/chrome/scroll-area.js +2 -1
- package/dist/chrome/section-header.js +13 -4
- package/dist/chrome/segmented-control.js +12 -3
- package/dist/chrome/status-bar.js +2 -1
- package/dist/chrome/tabs.js +11 -3
- package/dist/chrome/toolbar.js +2 -1
- package/dist/chrome/tree.js +3 -2
- package/dist/color/_thumb.js +9 -3
- package/dist/color/color-area.js +1 -1
- package/dist/color/color-swatch.js +1 -1
- package/dist/configurator/_overrides.js +13 -4
- package/dist/configurator/configurator.js +4 -1
- package/dist/configurator/export-dialog.js +5 -2
- package/dist/configurator/panel-sections.js +6 -2
- package/dist/configurator/token-editor.js +4 -1
- package/dist/date/calendar.js +12 -8
- package/dist/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 +26 -6
- package/dist/forms/_chassis.js +33 -8
- package/dist/forms/_listbox.js +8 -5
- package/dist/forms/checkbox.js +8 -2
- package/dist/forms/env-var-input.js +3 -2
- package/dist/forms/field.d.ts +2 -1
- package/dist/forms/field.js +15 -4
- package/dist/forms/file-upload.js +3 -2
- package/dist/forms/number-field.js +2 -1
- package/dist/forms/password-input.js +4 -2
- package/dist/forms/radio-group.js +6 -2
- package/dist/forms/rating.js +2 -1
- package/dist/forms/scrub-input.js +2 -1
- package/dist/forms/search-input.js +2 -1
- package/dist/forms/select.js +5 -2
- package/dist/forms/slider.js +6 -2
- package/dist/forms/switch.js +6 -2
- package/dist/forms/textarea.js +2 -1
- package/dist/forms/toggle.js +3 -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/progress.js +5 -2
- package/dist/instruments/seam-grid.js +5 -3
- package/dist/instruments/stat.js +10 -3
- package/dist/instruments/table.js +28 -10
- package/dist/instruments/terminal-frame.js +4 -2
- package/dist/instruments/usage-chart.js +1 -1
- package/dist/layout/_collapse.js +6 -1
- package/dist/layout/bento.js +7 -4
- package/dist/layout/breadcrumb.js +7 -3
- package/dist/layout/card.js +12 -6
- package/dist/layout/carousel.js +3 -2
- package/dist/layout/collapsible.js +5 -1
- package/dist/layout/container.js +2 -1
- package/dist/layout/description-list.js +4 -1
- package/dist/layout/frames.js +11 -5
- package/dist/layout/item.js +3 -2
- package/dist/layout/link.d.ts +16 -0
- package/dist/layout/link.js +22 -3
- package/dist/layout/pagination.js +2 -1
- package/dist/layout/preview.d.ts +32 -12
- package/dist/layout/preview.js +149 -40
- package/dist/layout/resizable.js +2 -1
- package/dist/layout/sidebar.js +11 -3
- package/dist/layout/stepper.js +6 -2
- package/dist/lib/cn.js +29 -2
- package/dist/midi/piano-keyboard.js +3 -2
- package/dist/midi/spectrum-visualizer.js +1 -1
- package/dist/midi/threshold-rail.js +2 -1
- package/dist/midi/timeline-ruler.js +1 -1
- package/dist/overlays/_surface.d.ts +72 -12
- package/dist/overlays/_surface.js +84 -12
- package/dist/overlays/command-palette.js +9 -5
- package/dist/overlays/dialog.d.ts +5 -0
- package/dist/overlays/dialog.js +6 -1
- package/dist/overlays/info-tip.js +2 -1
- package/dist/overlays/menubar.js +3 -1
- package/dist/overlays/popover.js +2 -1
- package/dist/overlays/toast.js +6 -2
- package/dist/overlays/tooltip.js +4 -1
- package/dist/primitives/button.d.ts +15 -0
- package/dist/primitives/button.js +40 -11
- package/dist/primitives/chip.d.ts +19 -1
- package/dist/primitives/chip.js +39 -17
- package/dist/primitives/kbd.d.ts +6 -0
- package/dist/primitives/kbd.js +10 -1
- package/dist/primitives/skeleton.js +1 -1
- package/dist/system/_focus-ring-field.js +29 -0
- package/dist/system/_focus-ring.js +125 -0
- package/dist/system/_paint-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-app-bar.js +65 -0
- package/dist/system/_style-band.js +57 -0
- package/dist/system/_style-body-leading.js +21 -0
- package/dist/system/_style-body-size.js +30 -0
- package/dist/system/_style-body-weight.js +24 -0
- package/dist/system/_style-body.js +27 -0
- package/dist/system/_style-caption.js +19 -0
- package/dist/system/_style-card-pad.js +43 -0
- package/dist/system/_style-check.js +33 -0
- package/dist/system/_style-chip.js +103 -0
- package/dist/system/_style-code.js +13 -0
- package/dist/system/_style-collapse.js +14 -0
- package/dist/system/_style-control-face.js +29 -0
- package/dist/system/_style-control-label.js +22 -0
- package/dist/system/_style-control-step.js +22 -0
- package/dist/system/_style-control.js +76 -0
- package/dist/system/_style-data-face.js +28 -0
- package/dist/system/_style-description.js +23 -0
- package/dist/system/_style-eyebrow.js +43 -0
- package/dist/system/_style-footer-rule.js +47 -0
- package/dist/system/_style-gutter.js +17 -0
- package/dist/system/_style-help-ink.js +14 -0
- package/dist/system/_style-help.js +29 -0
- package/dist/system/_style-input-face.js +34 -0
- package/dist/system/_style-kbd.js +46 -0
- package/dist/system/_style-label-case.js +36 -0
- package/dist/system/_style-label-face.js +32 -0
- package/dist/system/_style-label-ink.js +29 -0
- package/dist/system/_style-label-leading.js +14 -0
- package/dist/system/_style-label-size.js +36 -0
- package/dist/system/_style-label-tracking.js +45 -0
- package/dist/system/_style-label-weight.js +40 -0
- package/dist/system/_style-lede.js +49 -0
- package/dist/system/_style-link.js +46 -0
- package/dist/system/_style-menu.js +30 -0
- package/dist/system/_style-nav-item.js +41 -0
- package/dist/system/_style-nav-voice.js +43 -0
- package/dist/system/_style-option.js +42 -0
- package/dist/system/_style-overlay-title.js +35 -0
- package/dist/system/_style-page-title.js +48 -0
- package/dist/system/_style-popover-pad.js +13 -0
- package/dist/system/_style-quiet-ink.js +13 -0
- package/dist/system/_style-row-pad.js +13 -0
- package/dist/system/_style-seam.js +43 -0
- package/dist/system/_style-section-rule.js +26 -0
- package/dist/system/_style-segment.js +30 -0
- package/dist/system/_style-segmented-control.js +86 -0
- package/dist/system/_style-selected.js +36 -0
- package/dist/system/_style-stage-marks.js +26 -0
- package/dist/system/_style-tab.js +71 -0
- package/dist/system/_style-textarea.js +21 -0
- package/dist/system/_style-title.js +37 -0
- package/dist/system/_style-tooltip.js +17 -0
- package/dist/system/density.d.ts +15 -5
- package/dist/system/density.js +188 -25
- package/dist/system/index.d.ts +2 -2
- package/dist/system/index.js +2 -2
- package/dist/system/overrides.d.ts +1 -0
- package/dist/system/overrides.js +151 -3
- package/dist/system/portal.d.ts +3 -2
- package/dist/system/portal.js +22 -10
- package/dist/system/prepaint.d.ts +21 -5
- package/dist/system/prepaint.js +3 -1
- package/dist/system/published.d.ts +1 -0
- package/dist/system/published.js +131 -0
- package/dist/system/theme-provider.d.ts +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 +7 -1
- package/manifest/components/agent-pile.json +3 -0
- package/manifest/components/alert-dialog.json +29 -3
- package/manifest/components/app-bar.json +19 -2
- package/manifest/components/app-shell.json +5 -0
- package/manifest/components/ask-box.json +3 -1
- package/manifest/components/autocomplete.json +38 -1
- package/manifest/components/band.json +7 -3
- package/manifest/components/bento.json +12 -1
- package/manifest/components/breadcrumb.json +8 -1
- package/manifest/components/button.json +27 -3
- package/manifest/components/calendar.json +7 -0
- package/manifest/components/card.json +22 -1
- package/manifest/components/carousel.json +4 -1
- package/manifest/components/channel-matrix.json +31 -3
- package/manifest/components/chart-tooltip-content.json +29 -3
- package/manifest/components/chat-empty-state.json +3 -1
- package/manifest/components/checkbox-group.json +14 -0
- package/manifest/components/checkbox.json +14 -0
- package/manifest/components/chip.json +16 -1
- package/manifest/components/clamp.json +3 -1
- package/manifest/components/code-block.json +10 -1
- package/manifest/components/collapsible.json +13 -2
- package/manifest/components/color-area.json +4 -2
- package/manifest/components/color-field.json +10 -0
- package/manifest/components/color-picker.json +10 -0
- package/manifest/components/color-slider.json +3 -1
- package/manifest/components/colors-section.json +9 -1
- package/manifest/components/combobox.json +38 -1
- package/manifest/components/command-palette.json +28 -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 +10 -0
- package/manifest/components/confidence-marker.json +3 -1
- package/manifest/components/container.json +2 -1
- package/manifest/components/context-menu.json +29 -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 +10 -0
- package/manifest/components/date-picker.json +10 -0
- package/manifest/components/date-range-picker.json +10 -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 +30 -3
- package/manifest/components/disclosure.json +13 -2
- package/manifest/components/dmx-bar.json +28 -3
- package/manifest/components/dmx-strip.json +28 -3
- package/manifest/components/drawer.json +29 -3
- package/manifest/components/dropdown-menu.json +29 -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/env-var-input.json +10 -1
- package/manifest/components/export-dialog.json +6 -1
- package/manifest/components/eyebrow.json +13 -2
- package/manifest/components/feedback-dialog.json +3 -0
- package/manifest/components/field-description.json +14 -0
- package/manifest/components/field-error.json +14 -0
- package/manifest/components/field-label.json +15 -1
- package/manifest/components/field.json +14 -0
- package/manifest/components/file-upload.json +3 -0
- package/manifest/components/footer.json +14 -1
- package/manifest/components/frames.json +14 -1
- package/manifest/components/hover-card.json +29 -3
- package/manifest/components/info-tip.json +3 -0
- package/manifest/components/input-group.json +10 -0
- package/manifest/components/input.json +10 -0
- package/manifest/components/item.json +3 -1
- package/manifest/components/kbd.json +10 -1
- package/manifest/components/ledger.json +9 -2
- package/manifest/components/link.json +10 -0
- package/manifest/components/log-viewer.json +3 -0
- package/manifest/components/map-answer.json +3 -1
- package/manifest/components/markdown-text.json +3 -0
- package/manifest/components/menubar.json +32 -4
- package/manifest/components/message-list.json +3 -0
- package/manifest/components/message.json +6 -1
- package/manifest/components/mobile-composer.json +3 -1
- package/manifest/components/multi-select.json +38 -1
- package/manifest/components/musical-time-input.json +10 -0
- package/manifest/components/navigation-menu.json +32 -3
- package/manifest/components/node-card.json +3 -0
- package/manifest/components/number-field.json +10 -1
- package/manifest/components/otp-field.json +9 -0
- package/manifest/components/page-shell.json +14 -0
- package/manifest/components/pagination.json +3 -0
- package/manifest/components/panel-header.json +10 -0
- package/manifest/components/panel.json +11 -1
- package/manifest/components/password-input.json +10 -1
- package/manifest/components/permission-scopes.json +3 -1
- package/manifest/components/piano-keyboard.json +3 -0
- package/manifest/components/popover.json +30 -3
- package/manifest/components/preset-section.json +9 -1
- package/manifest/components/preview.json +24 -10
- package/manifest/components/progress.json +6 -1
- package/manifest/components/prompt-library.json +3 -1
- package/manifest/components/queue-dock.json +3 -1
- package/manifest/components/radio-group.json +8 -0
- package/manifest/components/radio.json +8 -0
- package/manifest/components/rating.json +4 -1
- package/manifest/components/reasoning-panel.json +3 -1
- package/manifest/components/recommendation-card.json +1 -1
- package/manifest/components/resizable.json +4 -1
- package/manifest/components/revert-dock.json +3 -1
- package/manifest/components/row.json +5 -1
- package/manifest/components/scroll-area.json +4 -2
- package/manifest/components/scrollable-tabs-list.json +18 -0
- package/manifest/components/scrub-input.json +10 -1
- package/manifest/components/seam-cell.json +1 -0
- package/manifest/components/seam-grid.json +1 -0
- package/manifest/components/seam-list.json +5 -1
- package/manifest/components/search-input.json +10 -1
- package/manifest/components/section-header.json +15 -2
- package/manifest/components/segmented-control.json +16 -0
- package/manifest/components/select.json +17 -0
- package/manifest/components/settings-panel.json +3 -0
- package/manifest/components/shape-section.json +9 -1
- package/manifest/components/sheet.json +29 -3
- package/manifest/components/shimmer-label.json +3 -0
- package/manifest/components/sidebar.json +19 -2
- package/manifest/components/slider.json +8 -0
- package/manifest/components/sources.json +3 -1
- package/manifest/components/stat.json +9 -0
- package/manifest/components/status-bar.json +4 -0
- package/manifest/components/stepper.json +8 -0
- package/manifest/components/swap-label.json +3 -0
- package/manifest/components/switch.json +8 -0
- package/manifest/components/table-scroll-region.json +20 -2
- package/manifest/components/table.json +20 -2
- package/manifest/components/tabs.json +19 -1
- package/manifest/components/tags-input.json +38 -1
- package/manifest/components/terminal-frame.json +3 -0
- package/manifest/components/textarea.json +12 -0
- package/manifest/components/theme-configurator.json +29 -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 +10 -0
- package/manifest/components/toast.json +30 -2
- package/manifest/components/toggle.json +4 -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 +3 -1
- package/manifest/components/tooltip.json +31 -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/manifest.json +204 -184
- package/manifest/tokens.json +241 -4
- package/package.json +5 -5
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/system/_style-help-ink.ts
|
|
2
|
+
/**
|
|
3
|
+
* The help ink, for a site that reads it without the help size: a table's
|
|
4
|
+
* caption and the breadcrumb's separator (plan V.2, P122, P128) —
|
|
5
|
+
* `style-help-ink`, falling back to the `fg-subtle` both drew. The same class
|
|
6
|
+
* `_style-help.ts`'s `HELP_INK` spells for a field's description, restated in
|
|
7
|
+
* a module of its own so docgen does not publish `style-help-size` as a
|
|
8
|
+
* token of a table or a breadcrumb.
|
|
9
|
+
*
|
|
10
|
+
* @internal Not part of the public API.
|
|
11
|
+
*/
|
|
12
|
+
const HELP_INK = "text-[color:var(--cue-style-help-ink,var(--cue-fg-subtle))]";
|
|
13
|
+
//#endregion
|
|
14
|
+
export { HELP_INK };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/system/_style-help.ts
|
|
2
|
+
/**
|
|
3
|
+
* The size and ink of a field's helper text: the micro rung in `fg-subtle`,
|
|
4
|
+
* until a style set says otherwise.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.5, plan R1. `FieldDescription` and
|
|
7
|
+
* `FieldError` each spelt `font-mono text-(length:--cue-text-micro)`, the
|
|
8
|
+
* description in `fg-subtle` and the error in `danger`. Tender and Porcelain set
|
|
9
|
+
* helper text a rung larger and a step darker (T55, P48), in the Look's label
|
|
10
|
+
* face — so both lines now wear `LABEL_FACE` and read the size here, and the
|
|
11
|
+
* description reads the ink. The error keeps `danger`: a Look's helper ink is
|
|
12
|
+
* not a reason to quieten a validation message.
|
|
13
|
+
*
|
|
14
|
+
* | property | reads | fallback |
|
|
15
|
+
* |-----------|-------------------|---------------------------|
|
|
16
|
+
* | font-size | `style-help-size` | `var(--cue-text-micro)` |
|
|
17
|
+
* | color | `style-help-ink` | `var(--cue-fg-subtle)` |
|
|
18
|
+
*
|
|
19
|
+
* **Both names are optional** (spec §3.0), declared on no `:root` and left at the
|
|
20
|
+
* shared `[data-style]` reset by every shipped set, so each reader computes the
|
|
21
|
+
* old class's value at the element.
|
|
22
|
+
*
|
|
23
|
+
* @internal Not part of the public API.
|
|
24
|
+
*/
|
|
25
|
+
const HELP_SIZE = "text-[length:var(--cue-style-help-size,var(--cue-text-micro))]";
|
|
26
|
+
/** @see HELP_SIZE — the description's ink; `FieldError` keeps `text-danger`. */
|
|
27
|
+
const HELP_INK = "text-[color:var(--cue-style-help-ink,var(--cue-fg-subtle))]";
|
|
28
|
+
//#endregion
|
|
29
|
+
export { HELP_INK, HELP_SIZE };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region src/system/_style-input-face.ts
|
|
2
|
+
/**
|
|
3
|
+
* The face a typing surface wears: mono by default, the style set's choice
|
|
4
|
+
* inside one.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26 (the label-voice brief). `forms/_chassis.ts`'s
|
|
7
|
+
* `controlSurface` and `bareControlClasses` — the shared recessed-control
|
|
8
|
+
* chassis a text field, a textarea, a number field, a combobox, a select
|
|
9
|
+
* trigger and everything else a person types into all ride — spoke
|
|
10
|
+
* `font-mono` before this existed, the same fact `_style-control-face.ts`
|
|
11
|
+
* records for `Button`. What was missing was a way for a sans-voiced Look to
|
|
12
|
+
* change the ONE surface that is neither a control nor a caption: text a
|
|
13
|
+
* person types, which a face chosen per call site would not follow. So the
|
|
14
|
+
* style set says it, through `--cue-style-input-face`, and this reads it.
|
|
15
|
+
*
|
|
16
|
+
* **The fallback is the old class, spelt out**, for the identical reason
|
|
17
|
+
* `_style-control-face.ts` gives: `font-mono` compiles to
|
|
18
|
+
* `font-family: var(--cue-font-mono)`, and `--cue-style-input-face` is
|
|
19
|
+
* declared on no `:root`, so under no set this resolves to exactly what
|
|
20
|
+
* `font-mono` resolved to, at the control itself. A call site that
|
|
21
|
+
* deliberately keeps a typed value in mono regardless of the set — a hex
|
|
22
|
+
* colour code, a DMX value, anything code-shaped rather than prose — restates
|
|
23
|
+
* `font-mono` directly instead of importing this, exactly as `color-picker.tsx`
|
|
24
|
+
* already did for its hex field before this axis existed.
|
|
25
|
+
*
|
|
26
|
+
* **Its own module**, for the reason `_style-control-face.ts` gives: one
|
|
27
|
+
* reader per file, so `@repo/docgen` attributes exactly this token to exactly
|
|
28
|
+
* the components that import it.
|
|
29
|
+
*
|
|
30
|
+
* @internal Not part of the public API.
|
|
31
|
+
*/
|
|
32
|
+
const INPUT_FACE = "font-[family-name:var(--cue-style-input-face,var(--cue-font-mono))]";
|
|
33
|
+
//#endregion
|
|
34
|
+
export { INPUT_FACE };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region src/system/_style-kbd.ts
|
|
2
|
+
/**
|
|
3
|
+
* A key cap's rim and size: the box edge and the micro rung by default, the
|
|
4
|
+
* style set's choice inside one.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.6 (R2), F-16. `Kbd` spent `border-border`
|
|
7
|
+
* and `text-(length:--cue-text-micro)`. Porcelain's `MenuShortcut` key caps
|
|
8
|
+
* have no rim at all and sit at 0.75rem (coss.md, P55), which a set says as
|
|
9
|
+
* `--cue-style-kbd-edge: transparent` and `--cue-style-chip-size: 0.75rem` —
|
|
10
|
+
* the chip's size name, because `Kbd` is sized off `h-chip` to sit on a chip's
|
|
11
|
+
* row, and a Look that retunes one retunes both. The border's width stays, so
|
|
12
|
+
* a key cap keeps its box and its baseline in every Look.
|
|
13
|
+
*
|
|
14
|
+
* Both names are optional (spec §3.0, F-3): under no set, `console` and every
|
|
15
|
+
* set that declines them each reader resolves to exactly what the class it
|
|
16
|
+
* replaced resolved to, at the key cap itself.
|
|
17
|
+
*
|
|
18
|
+
* **Put {@link KBD_SIZE} before `leading-none` in the same `cn()`**, as
|
|
19
|
+
* `_style-label-size.ts` explains: `tailwind-merge` drops a `leading-*` that a
|
|
20
|
+
* later font-size follows.
|
|
21
|
+
*
|
|
22
|
+
* **Its own module**, apart from `_style-chip.ts` though it reads one of the
|
|
23
|
+
* chip's names, because `@repo/docgen` credits every importer with every token
|
|
24
|
+
* in a file, and `Kbd` reads none of the chip's other names.
|
|
25
|
+
*
|
|
26
|
+
* @internal Not part of the public API.
|
|
27
|
+
*/
|
|
28
|
+
const KBD_EDGE = "border-[color:var(--cue-style-kbd-edge,var(--cue-border))]";
|
|
29
|
+
/** @see KBD_EDGE — the key cap's size: the chip's size name, the micro rung by default. */
|
|
30
|
+
const KBD_SIZE = "text-[length:var(--cue-style-kbd-size,var(--cue-style-chip-size,var(--cue-text-micro)))]";
|
|
31
|
+
/**
|
|
32
|
+
* The key cap's own box (plan V.2, P55, P111): its height and minimum width
|
|
33
|
+
* (`style-kbd-height`, the `chip-h` it shared with the chip), its inline
|
|
34
|
+
* padding (`style-kbd-pad`, `space-2`) and its corner (`style-kbd-radius`, the
|
|
35
|
+
* `rounded-control` corner). Porcelain's key caps are 20px, 4px in and
|
|
36
|
+
* rounded at 0.4 of its control corner, while its chips are a phone-to-desktop
|
|
37
|
+
* clamp — so the cap stopped riding the chip's `h-chip`.
|
|
38
|
+
*
|
|
39
|
+
* The size above reads `style-kbd-size` first for the same reason (P14):
|
|
40
|
+
* Porcelain's chip text ramps from 14px on a phone to 12px on a desktop,
|
|
41
|
+
* where its key caps stay 12px. It falls back through the chip's size, so a
|
|
42
|
+
* Look that names only the chip's keeps its key caps beside it.
|
|
43
|
+
*/
|
|
44
|
+
const KBD_BOX = "h-[var(--cue-style-kbd-height,var(--cue-chip-h))] min-w-[var(--cue-style-kbd-height,var(--cue-chip-h))] px-[var(--cue-style-kbd-pad,var(--cue-space-2))] rounded-[var(--cue-style-kbd-radius,calc(var(--cue-radius-control)*var(--cue-radius-scale)))]";
|
|
45
|
+
//#endregion
|
|
46
|
+
export { KBD_BOX, KBD_EDGE, KBD_SIZE };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region src/system/_style-label-case.ts
|
|
2
|
+
/**
|
|
3
|
+
* The `text-transform` a chassis caption wears: `uppercase` by default, the
|
|
4
|
+
* style set's choice inside one.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26 (the label-voice brief). Every mono-uppercase chassis
|
|
7
|
+
* caption spent a literal `uppercase` utility before this existed, and a face
|
|
8
|
+
* changed to sans through {@link LABEL_FACE} alone still shouts — a sentence-
|
|
9
|
+
* case label rendered in a sans face and still transformed to caps is a sans
|
|
10
|
+
* label wearing the console's voice, not the source site's. So the two travel
|
|
11
|
+
* together at every call site.
|
|
12
|
+
*
|
|
13
|
+
* **The fallback is the old class, spelt out.** `uppercase` compiles to
|
|
14
|
+
* `text-transform: uppercase`, and `--cue-style-label-case` is declared on no
|
|
15
|
+
* `:root` — deliberately, for the identical reason `_style-control-face.ts`
|
|
16
|
+
* gives for its own name: a `:root` declaration would freeze the page's
|
|
17
|
+
* choice into every nested font or theme island. So under no set this
|
|
18
|
+
* resolves to exactly what `uppercase` resolved to, at the label itself; and
|
|
19
|
+
* every shipped set but a sans-voiced one restates `uppercase`, which
|
|
20
|
+
* `@cueplusplus/tokens` refuses to build otherwise for `console`.
|
|
21
|
+
*
|
|
22
|
+
* Written as a bare arbitrary property (`[text-transform:…]`) rather than a
|
|
23
|
+
* named Tailwind utility because none of Tailwind's `uppercase` / `lowercase`
|
|
24
|
+
* / `capitalize` / `normal-case` utilities take a dynamic value — the same
|
|
25
|
+
* reason `_paint-*` readers reach for `[mask-image:…]` and `[background-*:…]`
|
|
26
|
+
* instead of a utility that does not exist for a `var()`-driven keyword.
|
|
27
|
+
*
|
|
28
|
+
* **Its own module**, for the reason `_style-control-face.ts` gives: one
|
|
29
|
+
* reader per file, so `@repo/docgen` attributes exactly this token to exactly
|
|
30
|
+
* the components that import it.
|
|
31
|
+
*
|
|
32
|
+
* @internal Not part of the public API.
|
|
33
|
+
*/
|
|
34
|
+
const LABEL_CASE = "[text-transform:var(--cue-style-label-case,uppercase)]";
|
|
35
|
+
//#endregion
|
|
36
|
+
export { LABEL_CASE };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/system/_style-label-face.ts
|
|
2
|
+
/**
|
|
3
|
+
* The face a chassis caption wears: mono by default, the style set's choice inside one.
|
|
4
|
+
*
|
|
5
|
+
* Spec 2026-09-26 (the label-voice brief). `FieldLabel`, `Eyebrow`, a table head,
|
|
6
|
+
* a `Stat` label, a group or section heading and a dozen more chassis sites all
|
|
7
|
+
* spoke `font-mono … uppercase` before this existed — the same fact
|
|
8
|
+
* `_style-control-face.ts` records for `Button` and the `Tabs` trigger, one
|
|
9
|
+
* layer over. What was missing was a way for a sans-voiced Look (stripe's,
|
|
10
|
+
* replit's, coss's) to change a LABEL's face rather than only a control's, and
|
|
11
|
+
* a face chosen per call site would not follow the Look. So the style set says
|
|
12
|
+
* it, through `--cue-style-label-face`, and this reads it.
|
|
13
|
+
*
|
|
14
|
+
* Always paired with {@link LABEL_CASE}: a sans face still shouting in caps is
|
|
15
|
+
* still the console's voice, not the source site's, so the two travel
|
|
16
|
+
* together at every call site.
|
|
17
|
+
*
|
|
18
|
+
* **The fallback is the old class, spelt out**, for the identical reason
|
|
19
|
+
* `_style-control-face.ts` gives: `font-mono` compiles to
|
|
20
|
+
* `font-family: var(--cue-font-mono)`, and `--cue-style-label-face` is
|
|
21
|
+
* declared on no `:root`, so under no set this resolves to exactly what
|
|
22
|
+
* `font-mono` resolved to, at the label itself.
|
|
23
|
+
*
|
|
24
|
+
* **Its own module**, because `@repo/docgen` attributes a token to a component
|
|
25
|
+
* by the file its class string lives in, following only `_`-prefixed imports.
|
|
26
|
+
* One reader per file — see `_style-control-face.ts`'s note.
|
|
27
|
+
*
|
|
28
|
+
* @internal Not part of the public API.
|
|
29
|
+
*/
|
|
30
|
+
const LABEL_FACE = "font-[family-name:var(--cue-style-label-face,var(--cue-font-mono))]";
|
|
31
|
+
//#endregion
|
|
32
|
+
export { LABEL_FACE };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/system/_style-label-ink.ts
|
|
2
|
+
/**
|
|
3
|
+
* A chassis caption's ink: its own historic role by default, one shared ink
|
|
4
|
+
* inside a style set that declares `--cue-style-label-ink`.
|
|
5
|
+
*
|
|
6
|
+
* Spec 2026-09-26-looks-fidelity §3.6 (R2). Two inks, both already on the
|
|
7
|
+
* page: `FieldLabel`, a `SectionHeader` label and the `Checkbox` and `Switch`
|
|
8
|
+
* labels spent `text-fg-muted`; a table head and a group row, a
|
|
9
|
+
* `Sidebar.Section` label, a `Stat` label and a menu group label spent the
|
|
10
|
+
* quieter `text-fg-subtle`. Tender and porcelain draw every caption in the
|
|
11
|
+
* body ink (`var(--cue-fg)`), kiln in the muted one — one value a set says
|
|
12
|
+
* once, which is why the name exists.
|
|
13
|
+
*
|
|
14
|
+
* **Optional, so each reader keeps its own fallback** (spec §3.0, F-3): under
|
|
15
|
+
* no set, `console` and every set that declines the name this resolves to
|
|
16
|
+
* exactly what `text-fg-muted` or `text-fg-subtle` resolved to, at the label
|
|
17
|
+
* itself — so a nested theme island still repaints it.
|
|
18
|
+
*
|
|
19
|
+
* **Its own module**, for the reason `_style-control-face.ts` gives: one
|
|
20
|
+
* token per file, so `@repo/docgen` credits exactly the components that read
|
|
21
|
+
* the label ink with it.
|
|
22
|
+
*
|
|
23
|
+
* @internal Not part of the public API.
|
|
24
|
+
*/
|
|
25
|
+
const LABEL_INK = "text-[color:var(--cue-style-label-ink,var(--cue-fg-muted))]";
|
|
26
|
+
/** @see LABEL_INK — for a reader that spent `text-fg-subtle` before this existed. */
|
|
27
|
+
const LABEL_INK_SUBTLE = "text-[color:var(--cue-style-label-ink,var(--cue-fg-subtle))]";
|
|
28
|
+
//#endregion
|
|
29
|
+
export { LABEL_INK, LABEL_INK_SUBTLE };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/system/_style-label-leading.ts
|
|
2
|
+
/**
|
|
3
|
+
* A field label's leading (plan V.2, P10): `style-label-leading`, falling back
|
|
4
|
+
* to the `leading-none` (`1`) the label drew. Porcelain's field label is 16px
|
|
5
|
+
* on 14px type, a 1.143 leading.
|
|
6
|
+
*
|
|
7
|
+
* **Optional** (spec §3.0). Its own module because docgen attributes a token
|
|
8
|
+
* to a component by the file its class string lives in.
|
|
9
|
+
*
|
|
10
|
+
* @internal Not part of the public API.
|
|
11
|
+
*/
|
|
12
|
+
const LABEL_LEADING = "leading-[var(--cue-style-label-leading,1)]";
|
|
13
|
+
//#endregion
|
|
14
|
+
export { LABEL_LEADING };
|
|
@@ -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,46 @@
|
|
|
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
|
+
/** Every link's hover ink: the accent, or the set's `style-hover-ink`. */
|
|
44
|
+
const HOVER_INK = "hover:text-[color:var(--cue-style-hover-ink,var(--cue-accent))]";
|
|
45
|
+
//#endregion
|
|
46
|
+
export { HOVER_INK, INLINE_LINK_INK, LINK_INK, LINK_OFFSET, LINK_RULE, LINK_WEIGHT };
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
//#endregion
|
|
30
|
+
export { MENU_ITEM_INK, MENU_ITEM_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,43 @@
|
|
|
1
|
+
//#region src/system/_style-nav-voice.ts
|
|
2
|
+
/**
|
|
3
|
+
* The voice a navigation link speaks in — face, case, tracking, size and
|
|
4
|
+
* weight — each the style set's choice, each falling back to what its reader
|
|
5
|
+
* rendered before this existed.
|
|
6
|
+
*
|
|
7
|
+
* Spec 2026-09-26-looks-fidelity §3.8 (plan R4). `AppBar.Link` and `Footer`'s
|
|
8
|
+
* column both said `font-mono text-(length:--cue-text-ui)` and nothing more,
|
|
9
|
+
* so a Look whose header links are sans (tender, kiln, porcelain), uppercase
|
|
10
|
+
* and tracked (zine) or medium (porcelain) could only say so with a class at
|
|
11
|
+
* every call site, which a Look does not follow.
|
|
12
|
+
*
|
|
13
|
+
* **The fallbacks are the old classes, spelt out**, for the reason
|
|
14
|
+
* `_style-control-face.ts` gives: none of these names is declared on `:root`,
|
|
15
|
+
* and every set that declines one resets it to `initial` on the shared
|
|
16
|
+
* `[data-style]` block (spec §3.0), so a reader resolves its own fallback at
|
|
17
|
+
* itself. `font-mono` compiled to `var(--cue-font-mono)` and
|
|
18
|
+
* `text-(length:--cue-text-ui)` to `var(--cue-text-ui)`. Case, tracking and
|
|
19
|
+
* weight were inherited, and computed `none`, `normal` and `400` at both
|
|
20
|
+
* readers under every shipped set — spec §3.8's three fallbacks.
|
|
21
|
+
*
|
|
22
|
+
* **Weight is written `font-[number:…]`.** A bare `font-[var(…)]` is read as a
|
|
23
|
+
* family (plan §R1), and the `number` label makes it a weight to Tailwind —
|
|
24
|
+
* which emits exactly what `font-medium` emits, `--tw-font-weight` included —
|
|
25
|
+
* and to `tailwind-merge`, so a caller's `className="font-medium"` replaces it
|
|
26
|
+
* through `cn()`. Spelt as an arbitrary `[font-weight:…]` property it survived
|
|
27
|
+
* the merge beside the caller's class and won the cascade, because Tailwind
|
|
28
|
+
* emits it after `font-medium`: `<AppBar.Link className="font-medium">` drew
|
|
29
|
+
* 400. Case is an arbitrary property for the reason `_style-label-case.ts`
|
|
30
|
+
* gives — no case utility takes a value — and nothing merges it with a
|
|
31
|
+
* caller's `uppercase`, but Tailwind emits it before `uppercase`,
|
|
32
|
+
* `normal-case` and the rest, so the caller's case still wins the cascade.
|
|
33
|
+
*
|
|
34
|
+
* **Its own module**, because `@repo/docgen` credits a component with every
|
|
35
|
+
* `--cue-*` in each `_`-prefixed file it imports (`_style-control-face.ts`'s
|
|
36
|
+
* note). `Footer` reads this voice and none of `AppBar.Link`'s own names, which
|
|
37
|
+
* live in `_style-app-bar.ts`.
|
|
38
|
+
*
|
|
39
|
+
* @internal Not part of the public API.
|
|
40
|
+
*/
|
|
41
|
+
const NAV_VOICE = "font-[family-name:var(--cue-style-nav-face,var(--cue-font-mono))] [text-transform:var(--cue-style-nav-case,none)] tracking-[var(--cue-style-nav-tracking,normal)] text-[length:var(--cue-style-nav-size,var(--cue-text-ui))] font-[number:var(--cue-style-nav-weight,400)]";
|
|
42
|
+
//#endregion
|
|
43
|
+
export { NAV_VOICE };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//#region src/system/_style-option.ts
|
|
2
|
+
/**
|
|
3
|
+
* One row of a list a control opens: `Select`'s items and the filterable
|
|
4
|
+
* lists' (`Combobox`, `Autocomplete`, `MultiSelect`, `TagsInput`).
|
|
5
|
+
*
|
|
6
|
+
* Plan V.2 (T112, P112, P127). The two shared one class string —
|
|
7
|
+
* `text-fg-muted … data-[highlighted]:bg-accent-soft … data-[selected]:text-accent`
|
|
8
|
+
* — which no Look could reach, so a select under Tender drew a lilac selected
|
|
9
|
+
* row on a lilac highlight where the source draws navy on a 5% wash, and under
|
|
10
|
+
* Porcelain a square muted row where the source draws a rounded `fg` one.
|
|
11
|
+
*
|
|
12
|
+
* | part | reads | fallback |
|
|
13
|
+
* |-----------------|-----------------------------------------------|------------------------------|
|
|
14
|
+
* | idle ink | `style-option-ink` | `var(--cue-fg-muted)` |
|
|
15
|
+
* | highlight | `style-menu-highlight`, as a menu row's does | `var(--cue-accent-soft)` |
|
|
16
|
+
* | selected ink | `style-option-selected-ink` | `var(--cue-accent)` |
|
|
17
|
+
* | idle weight | `style-body-weight`, on an unselected row | `inherit` |
|
|
18
|
+
* | corner | `style-menu-item-radius` | `0px` |
|
|
19
|
+
*
|
|
20
|
+
* **Its own two inks**, not `style-quiet-ink` and `style-selected-ink`. The
|
|
21
|
+
* quiet ink is a ghost button's and a menu row's; Tender's is `fg`, and its
|
|
22
|
+
* select rows measure a 55% share of `fg` into `fg-muted`. The selected ink is
|
|
23
|
+
* the sidebar's active item's and a table's selected row's; Tender's option
|
|
24
|
+
* ink is navy where its sidebar keeps the lilac accent. Porcelain's rows,
|
|
25
|
+
* which do measure `fg`, declare the option ink as `var(--cue-fg)`.
|
|
26
|
+
*
|
|
27
|
+
* **The weight goes on the unselected row only**, at zero specificity
|
|
28
|
+
* (`[:where(&:not([data-selected]))]:`): Tender's body copy is 300 and its
|
|
29
|
+
* selected row keeps the 400 it inherits, and a caller's `font-*` class on a
|
|
30
|
+
* row still beats both, as it beat nothing before.
|
|
31
|
+
*
|
|
32
|
+
* `data-[highlighted]:text-fg` stays a class: every Look's highlighted row is
|
|
33
|
+
* `fg`. The weight is spelt out whole rather than composed from
|
|
34
|
+
* `_style-body-weight.ts`: a variant prefixed onto an interpolated constant is
|
|
35
|
+
* a class that appears in no source file, and a consumer's Tailwind, which
|
|
36
|
+
* scans this package's build for candidates, would never generate it.
|
|
37
|
+
*
|
|
38
|
+
* @internal Not part of the public API.
|
|
39
|
+
*/
|
|
40
|
+
const OPTION_ROW = "rounded-[var(--cue-style-menu-item-radius,0px)] text-[color:var(--cue-style-option-ink,var(--cue-fg-muted))] [:where(&:not([data-selected]))]:font-[number:var(--cue-style-body-weight,inherit)] data-[highlighted]:bg-[color:var(--cue-style-menu-highlight,var(--cue-accent-soft))] data-[highlighted]:text-fg data-[selected]:text-[color:var(--cue-style-option-selected-ink,var(--cue-accent))]";
|
|
41
|
+
//#endregion
|
|
42
|
+
export { OPTION_ROW };
|