@cueplusplus/ui 0.15.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1083 -0
- package/README.md +26 -0
- package/dist/agent-runtime/tool-call-card.js +7 -3
- package/dist/brand/_chassis.d.ts +1 -1
- package/dist/brand/cue-mark.d.ts +1 -1
- package/dist/brand/cue-mark.js +1 -1
- package/dist/charts/ramps.js +1 -1
- package/dist/chat/agent-pile.js +2 -1
- package/dist/chat/ask-box.js +4 -3
- package/dist/chat/delegation-card.js +3 -2
- package/dist/chat/message-list.js +4 -2
- package/dist/chat/message.js +17 -7
- package/dist/chrome/_edge-scroller.js +2 -1
- package/dist/chrome/_status-bar.js +9 -3
- package/dist/chrome/_tabs-scroll.d.ts +17 -1
- package/dist/chrome/_tabs-scroll.js +20 -3
- package/dist/chrome/app-bar.js +10 -3
- package/dist/chrome/app-shell.js +2 -1
- package/dist/chrome/band.d.ts +18 -12
- package/dist/chrome/band.js +19 -31
- package/dist/chrome/eyebrow.d.ts +13 -5
- package/dist/chrome/eyebrow.js +18 -7
- package/dist/chrome/footer.d.ts +5 -0
- package/dist/chrome/footer.js +14 -3
- package/dist/chrome/navigation-menu.js +4 -2
- package/dist/chrome/page-shell.js +8 -5
- package/dist/chrome/panel.d.ts +5 -2
- package/dist/chrome/panel.js +9 -4
- package/dist/chrome/row.js +6 -3
- package/dist/chrome/scroll-area.js +2 -1
- package/dist/chrome/section-header.js +13 -4
- package/dist/chrome/segmented-control.js +12 -3
- package/dist/chrome/status-bar.js +2 -1
- package/dist/chrome/tabs.js +11 -3
- package/dist/chrome/toolbar.js +2 -1
- package/dist/chrome/tree.js +3 -2
- package/dist/color/_thumb.js +9 -3
- package/dist/color/color-area.js +1 -1
- package/dist/color/color-field.d.ts +2 -1
- package/dist/color/color-picker.d.ts +2 -1
- package/dist/color/color-swatch.js +1 -1
- package/dist/configurator/_overrides.js +13 -4
- package/dist/configurator/configurator.js +4 -1
- package/dist/configurator/export-dialog.js +5 -2
- package/dist/configurator/panel-sections.js +6 -2
- package/dist/configurator/token-editor.js +4 -1
- package/dist/date/calendar.js +12 -8
- package/dist/date/date-field.d.ts +2 -1
- package/dist/date/date-picker.d.ts +2 -1
- package/dist/date/date-range-picker.d.ts +2 -1
- package/dist/date/time-field.d.ts +2 -1
- package/dist/dmx/channel-matrix.js +3 -2
- package/dist/dmx/dmx-bar.js +1 -1
- package/dist/dmx/dmx-strip.js +1 -1
- package/dist/dmx/universe-grid.js +3 -2
- package/dist/elements/activity-graph.js +3 -3
- package/dist/elements/agent-card.js +3 -3
- package/dist/elements/approval-card.js +3 -3
- package/dist/elements/artifact-card.js +2 -2
- package/dist/elements/background-inbox.js +2 -2
- package/dist/elements/canvas-split.js +2 -2
- package/dist/elements/chart.js +1 -1
- package/dist/elements/chat-panel.js +2 -2
- package/dist/elements/checkpoint-history.js +2 -2
- package/dist/elements/clamp.js +2 -1
- package/dist/elements/code-diff.js +1 -1
- package/dist/elements/code-runner.js +1 -1
- package/dist/elements/command-palette.js +6 -5
- package/dist/elements/comparison-card.js +2 -2
- package/dist/elements/composer.js +9 -8
- package/dist/elements/computer-use.js +1 -1
- package/dist/elements/confidence-marker.js +2 -1
- package/dist/elements/connection-state.js +1 -1
- package/dist/elements/context-breakdown.js +1 -1
- package/dist/elements/context-usage.js +1 -1
- package/dist/elements/conversation-search.js +4 -3
- package/dist/elements/cost-meter.js +1 -1
- package/dist/elements/data-table.js +2 -2
- package/dist/elements/day-separator.js +1 -1
- package/dist/elements/diagram.js +1 -1
- package/dist/elements/document-reference.js +3 -3
- package/dist/elements/draft-restore.js +1 -1
- package/dist/elements/edit-message.js +4 -3
- package/dist/elements/elements.css +26 -5
- package/dist/elements/elicitation-form.js +3 -3
- package/dist/elements/empty-state.js +2 -1
- package/dist/elements/error-state.js +1 -1
- package/dist/elements/feedback-dialog.js +4 -3
- package/dist/elements/file-tree.js +2 -2
- package/dist/elements/flow-graph.js +2 -2
- package/dist/elements/guardrail-notice.js +3 -3
- package/dist/elements/image-generation.js +1 -1
- package/dist/elements/inline-citation.js +3 -3
- package/dist/elements/job-progress.js +3 -3
- package/dist/elements/launcher-bubble.js +2 -2
- package/dist/elements/loading-state.js +1 -1
- package/dist/elements/map-answer.js +3 -2
- package/dist/elements/markdown.js +5 -4
- package/dist/elements/math-block.js +1 -1
- package/dist/elements/mcp-server-panel.js +3 -3
- package/dist/elements/message-attachment.js +4 -4
- package/dist/elements/message-pair.js +1 -1
- package/dist/elements/message-queue.js +2 -2
- package/dist/elements/mobile-composer.js +4 -3
- package/dist/elements/model-picker.js +3 -3
- package/dist/elements/onboarding.js +2 -2
- package/dist/elements/permission-grant.js +2 -2
- package/dist/elements/permission-scopes.js +5 -4
- package/dist/elements/prompt-library.js +7 -6
- package/dist/elements/queue-dock.js +4 -3
- package/dist/elements/quota-banner.js +1 -1
- package/dist/elements/quote-reply.js +1 -1
- package/dist/elements/read-aloud.js +2 -2
- package/dist/elements/reasoning-panel.js +2 -1
- package/dist/elements/recommendation-card.d.ts +1 -1
- package/dist/elements/recommendation-card.js +2 -2
- package/dist/elements/regenerate-menu.js +2 -2
- package/dist/elements/research-report.js +1 -1
- package/dist/elements/retrieval-chunks.js +1 -1
- package/dist/elements/revert-dock.js +5 -4
- package/dist/elements/reviewable-diff.js +1 -1
- package/dist/elements/schedule-card.js +3 -3
- package/dist/elements/score-breakdown.js +1 -1
- package/dist/elements/scroll-anchor.js +2 -2
- package/dist/elements/settings-panel.js +3 -2
- package/dist/elements/shared-conversation.js +2 -2
- package/dist/elements/sources.js +4 -3
- package/dist/elements/speaker-identity.js +1 -1
- package/dist/elements/spec-sheet.js +1 -1
- package/dist/elements/streaming-text.js +1 -1
- package/dist/elements/subagent-list.js +2 -2
- package/dist/elements/suggestions.js +1 -1
- package/dist/elements/surfaces.d.ts +1 -1
- package/dist/elements/surfaces.js +2 -1
- package/dist/elements/tail-status.js +1 -1
- package/dist/elements/terminal-block.js +1 -1
- package/dist/elements/thread-list.js +1 -1
- package/dist/elements/thread-search.js +5 -4
- package/dist/elements/timeline.js +1 -1
- package/dist/elements/todo-list.js +2 -2
- package/dist/elements/tool-call.js +4 -3
- package/dist/elements/tool-error.js +2 -2
- package/dist/elements/tool-group.js +1 -1
- package/dist/elements/tool-timeline.js +4 -3
- package/dist/elements/trace-waterfall.js +1 -1
- package/dist/elements/verdict-row.js +2 -2
- package/dist/elements/voice-conversation.js +3 -2
- package/dist/elements/web-preview.js +1 -1
- package/dist/elements/web-search.js +2 -2
- package/dist/elements/work-collapse.js +2 -1
- package/dist/flow/node-card.js +3 -2
- package/dist/flow/use-flow-theme.js +2 -1
- package/dist/forms/_chassis-size.d.ts +22 -0
- package/dist/forms/_chassis.d.ts +28 -15
- package/dist/forms/_chassis.js +34 -8
- package/dist/forms/_listbox.js +8 -5
- package/dist/forms/autocomplete.d.ts +2 -1
- package/dist/forms/checkbox.js +8 -2
- package/dist/forms/combobox.d.ts +2 -1
- package/dist/forms/env-var-input.d.ts +2 -1
- package/dist/forms/env-var-input.js +3 -2
- package/dist/forms/field.d.ts +2 -1
- package/dist/forms/field.js +15 -4
- package/dist/forms/file-upload.js +3 -2
- package/dist/forms/index.d.ts +2 -1
- package/dist/forms/input-group.d.ts +2 -1
- package/dist/forms/input.d.ts +2 -1
- package/dist/forms/multi-select.d.ts +2 -1
- package/dist/forms/number-field.js +2 -1
- package/dist/forms/otp-field.d.ts +2 -1
- package/dist/forms/password-input.d.ts +2 -1
- package/dist/forms/password-input.js +4 -2
- package/dist/forms/radio-group.js +6 -2
- package/dist/forms/rating.js +2 -1
- package/dist/forms/scrub-input.d.ts +2 -1
- package/dist/forms/scrub-input.js +2 -1
- package/dist/forms/search-input.d.ts +2 -1
- package/dist/forms/search-input.js +2 -1
- package/dist/forms/select.d.ts +2 -1
- package/dist/forms/select.js +6 -2
- package/dist/forms/slider.js +6 -2
- package/dist/forms/switch.js +6 -2
- package/dist/forms/tags-input.d.ts +2 -1
- package/dist/forms/textarea.js +2 -1
- package/dist/forms/toggle-group.d.ts +1 -1
- package/dist/forms/toggle.d.ts +1 -1
- package/dist/forms/toggle.js +3 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +2 -2
- package/dist/instruments/_data-row.js +2 -1
- package/dist/instruments/app-window-frame.js +1 -1
- package/dist/instruments/code-block.js +8 -2
- package/dist/instruments/group-bar.js +1 -1
- package/dist/instruments/ledger.js +6 -2
- package/dist/instruments/log-viewer.js +5 -3
- package/dist/instruments/progress.js +5 -2
- package/dist/instruments/seam-grid.js +5 -3
- package/dist/instruments/stat.js +10 -3
- package/dist/instruments/table.js +28 -10
- package/dist/instruments/terminal-frame.js +4 -2
- package/dist/instruments/usage-chart.js +1 -1
- package/dist/layout/_collapse.js +6 -1
- package/dist/layout/bento.js +7 -4
- package/dist/layout/breadcrumb.js +7 -3
- package/dist/layout/card.js +14 -6
- package/dist/layout/carousel.js +3 -2
- package/dist/layout/collapsible.js +5 -1
- package/dist/layout/container.js +2 -1
- package/dist/layout/description-list.js +4 -1
- package/dist/layout/frames.js +11 -5
- package/dist/layout/item.js +3 -2
- package/dist/layout/link.d.ts +16 -0
- package/dist/layout/link.js +22 -3
- package/dist/layout/pagination.js +2 -1
- package/dist/layout/preview.d.ts +32 -12
- package/dist/layout/preview.js +149 -40
- package/dist/layout/resizable.js +2 -1
- package/dist/layout/sidebar.js +11 -3
- package/dist/layout/stepper.js +6 -2
- package/dist/lib/cn.js +29 -2
- package/dist/midi/musical-time-input.d.ts +2 -1
- package/dist/midi/piano-keyboard.js +3 -2
- package/dist/midi/spectrum-visualizer.js +1 -1
- package/dist/midi/threshold-rail.js +2 -1
- package/dist/midi/timeline-ruler.js +1 -1
- package/dist/overlays/_surface.d.ts +72 -12
- package/dist/overlays/_surface.js +86 -12
- package/dist/overlays/command-palette.js +9 -5
- package/dist/overlays/dialog.d.ts +5 -0
- package/dist/overlays/dialog.js +6 -1
- package/dist/overlays/info-tip.js +2 -1
- package/dist/overlays/menubar.js +3 -1
- package/dist/overlays/popover.js +2 -1
- package/dist/overlays/toast.js +6 -2
- package/dist/overlays/tooltip.js +4 -1
- package/dist/primitives/button.d.ts +15 -0
- package/dist/primitives/button.js +40 -10
- package/dist/primitives/chip.d.ts +20 -2
- package/dist/primitives/chip.js +39 -17
- package/dist/primitives/kbd.d.ts +6 -0
- package/dist/primitives/kbd.js +10 -1
- package/dist/primitives/skeleton.js +1 -1
- package/dist/system/_focus-ring-field.js +29 -0
- package/dist/system/_focus-ring.js +125 -0
- package/dist/system/_paint-elevation.js +9 -0
- package/dist/system/_paint-glass.js +46 -0
- package/dist/system/_paint-glow.js +51 -0
- package/dist/system/_paint-ground-pattern.js +30 -0
- package/dist/system/_paint-rest-shade.js +32 -0
- package/dist/system/_paint-rim.js +59 -0
- package/dist/system/_paint-stroke-sunken.js +19 -0
- package/dist/system/_paint-stroke-surface-1.js +19 -0
- package/dist/system/_paint-stroke-surface-2.js +40 -0
- package/dist/system/_paint-texture.js +56 -0
- package/dist/system/_style-app-bar.js +65 -0
- package/dist/system/_style-band.js +57 -0
- package/dist/system/_style-body-leading.js +21 -0
- package/dist/system/_style-body-size.js +30 -0
- package/dist/system/_style-body-weight.js +24 -0
- package/dist/system/_style-body.js +27 -0
- package/dist/system/_style-caption.js +19 -0
- package/dist/system/_style-card-pad.js +43 -0
- package/dist/system/_style-check.js +33 -0
- package/dist/system/_style-chip.js +103 -0
- package/dist/system/_style-code.js +13 -0
- package/dist/system/_style-collapse.js +14 -0
- package/dist/system/_style-control-face.js +29 -0
- package/dist/system/_style-control-label.js +22 -0
- package/dist/system/_style-control-step.js +22 -0
- package/dist/system/_style-control.js +76 -0
- package/dist/system/_style-data-face.js +28 -0
- package/dist/system/_style-description.js +23 -0
- package/dist/system/_style-eyebrow.js +43 -0
- package/dist/system/_style-footer-rule.js +47 -0
- package/dist/system/_style-gutter.js +17 -0
- package/dist/system/_style-help-ink.js +14 -0
- package/dist/system/_style-help.js +29 -0
- package/dist/system/_style-input-face.js +34 -0
- package/dist/system/_style-kbd.js +46 -0
- package/dist/system/_style-label-case.js +36 -0
- package/dist/system/_style-label-face.js +32 -0
- package/dist/system/_style-label-ink.js +29 -0
- package/dist/system/_style-label-leading.js +14 -0
- package/dist/system/_style-label-size.js +36 -0
- package/dist/system/_style-label-tracking.js +45 -0
- package/dist/system/_style-label-weight.js +40 -0
- package/dist/system/_style-lede.js +49 -0
- package/dist/system/_style-link.js +46 -0
- package/dist/system/_style-menu.js +30 -0
- package/dist/system/_style-nav-item.js +41 -0
- package/dist/system/_style-nav-voice.js +43 -0
- package/dist/system/_style-option.js +42 -0
- package/dist/system/_style-overlay-title.js +35 -0
- package/dist/system/_style-page-title.js +48 -0
- package/dist/system/_style-popover-pad.js +13 -0
- package/dist/system/_style-quiet-ink.js +13 -0
- package/dist/system/_style-row-pad.js +13 -0
- package/dist/system/_style-seam.js +43 -0
- package/dist/system/_style-section-rule.js +26 -0
- package/dist/system/_style-segment.js +30 -0
- package/dist/system/_style-segmented-control.js +86 -0
- package/dist/system/_style-selected.js +36 -0
- package/dist/system/_style-stage-marks.js +26 -0
- package/dist/system/_style-tab.js +71 -0
- package/dist/system/_style-textarea.js +21 -0
- package/dist/system/_style-title.js +37 -0
- package/dist/system/_style-tooltip.js +17 -0
- package/dist/system/density.d.ts +15 -5
- package/dist/system/density.js +188 -25
- package/dist/system/index.d.ts +2 -2
- package/dist/system/index.js +2 -2
- package/dist/system/overrides.d.ts +1 -0
- package/dist/system/overrides.js +151 -3
- package/dist/system/portal.d.ts +3 -2
- package/dist/system/portal.js +22 -10
- package/dist/system/prepaint.d.ts +21 -5
- package/dist/system/prepaint.js +3 -1
- package/dist/system/published.d.ts +1 -0
- package/dist/system/published.js +131 -0
- package/dist/system/theme-provider.d.ts +168 -60
- package/dist/system/theme-provider.js +375 -79
- package/dist/system/theme-registry.d.ts +2 -1
- package/dist/system/theme-registry.js +27 -10
- package/dist/system/use-density.js +4 -3
- package/dist/system/use-theme.d.ts +5 -2
- package/dist/system/use-theme.js +7 -4
- package/dist/system/vocabulary.js +2 -2
- package/dist/theming/create-theme.js +12 -6
- package/dist/theming/serialize.d.ts +34 -2
- package/dist/theming/serialize.js +86 -4
- package/manifest/components/accordion.json +7 -1
- package/manifest/components/agent-pile.json +3 -0
- package/manifest/components/alert-dialog.json +38 -1
- package/manifest/components/app-bar.json +23 -2
- package/manifest/components/app-shell.json +5 -0
- package/manifest/components/ask-box.json +3 -1
- package/manifest/components/autocomplete.json +49 -1
- package/manifest/components/band.json +14 -3
- package/manifest/components/bento.json +12 -1
- package/manifest/components/breadcrumb.json +8 -1
- package/manifest/components/button.json +31 -3
- package/manifest/components/calendar.json +7 -0
- package/manifest/components/card.json +28 -1
- package/manifest/components/carousel.json +4 -1
- package/manifest/components/channel-matrix.json +40 -1
- package/manifest/components/chart-tooltip-content.json +38 -1
- package/manifest/components/chat-empty-state.json +3 -1
- package/manifest/components/checkbox-group.json +14 -0
- package/manifest/components/checkbox.json +14 -0
- package/manifest/components/chip.json +16 -1
- package/manifest/components/clamp.json +3 -1
- package/manifest/components/code-block.json +10 -1
- package/manifest/components/collapsible.json +13 -2
- package/manifest/components/color-area.json +4 -2
- package/manifest/components/color-field.json +14 -0
- package/manifest/components/color-picker.json +14 -0
- package/manifest/components/color-slider.json +3 -1
- package/manifest/components/colors-section.json +9 -1
- package/manifest/components/combobox.json +49 -1
- package/manifest/components/command-palette.json +37 -1
- package/manifest/components/composer-actions.json +3 -0
- package/manifest/components/composer-attach-button.json +3 -0
- package/manifest/components/composer-attachment-chip.json +3 -0
- package/manifest/components/composer-attachments.json +3 -0
- package/manifest/components/composer-bar.json +3 -0
- package/manifest/components/composer-command-item.json +3 -0
- package/manifest/components/composer-context.json +3 -0
- package/manifest/components/composer-input.json +3 -0
- package/manifest/components/composer-menu-item.json +3 -0
- package/manifest/components/composer-menu.json +3 -0
- package/manifest/components/composer-model-item.json +3 -0
- package/manifest/components/composer-model-trigger.json +3 -0
- package/manifest/components/composer-person-item.json +3 -0
- package/manifest/components/composer-send.json +3 -0
- package/manifest/components/composer-toolbar.json +3 -0
- package/manifest/components/composer-voice-button.json +3 -0
- package/manifest/components/composer-voice.json +3 -0
- package/manifest/components/composer.json +14 -0
- package/manifest/components/confidence-marker.json +3 -1
- package/manifest/components/container.json +2 -1
- package/manifest/components/context-menu.json +38 -1
- package/manifest/components/conversation-search.json +3 -1
- package/manifest/components/cue-mark.json +2 -2
- package/manifest/components/cue-portal-frame.json +1 -1
- package/manifest/components/data-row.json +3 -1
- package/manifest/components/data-tree.json +3 -1
- package/manifest/components/date-field.json +14 -0
- package/manifest/components/date-picker.json +14 -0
- package/manifest/components/date-range-picker.json +14 -0
- package/manifest/components/delegation-card.json +3 -1
- package/manifest/components/density.json +21 -7
- package/manifest/components/description-list.json +6 -1
- package/manifest/components/dialog.json +39 -1
- package/manifest/components/disclosure.json +13 -2
- package/manifest/components/dmx-bar.json +37 -1
- package/manifest/components/dmx-strip.json +37 -1
- package/manifest/components/drawer.json +38 -1
- package/manifest/components/dropdown-menu.json +38 -1
- package/manifest/components/edit-message.json +3 -1
- package/manifest/components/elements-command-palette.json +3 -1
- package/manifest/components/elements-composer.json +3 -0
- package/manifest/components/empty-state-composer.json +3 -1
- package/manifest/components/empty-state-greeting.json +3 -1
- package/manifest/components/empty-state-suggestion.json +3 -1
- package/manifest/components/empty-state-suggestions.json +3 -1
- package/manifest/components/env-var-input.json +14 -1
- package/manifest/components/export-dialog.json +6 -1
- package/manifest/components/eyebrow.json +13 -2
- package/manifest/components/feedback-dialog.json +3 -0
- package/manifest/components/field-description.json +14 -0
- package/manifest/components/field-error.json +14 -0
- package/manifest/components/field-label.json +15 -1
- package/manifest/components/field.json +14 -0
- package/manifest/components/file-upload.json +3 -0
- package/manifest/components/footer.json +14 -1
- package/manifest/components/frames.json +14 -1
- package/manifest/components/hover-card.json +38 -1
- package/manifest/components/info-tip.json +3 -0
- package/manifest/components/input-group.json +14 -0
- package/manifest/components/input.json +14 -0
- package/manifest/components/item.json +3 -1
- package/manifest/components/kbd.json +10 -1
- package/manifest/components/ledger.json +9 -2
- package/manifest/components/link.json +10 -0
- package/manifest/components/log-viewer.json +10 -0
- package/manifest/components/map-answer.json +3 -1
- package/manifest/components/markdown-text.json +3 -0
- package/manifest/components/menubar.json +41 -2
- package/manifest/components/message-list.json +10 -0
- package/manifest/components/message.json +6 -1
- package/manifest/components/mobile-composer.json +3 -1
- package/manifest/components/multi-select.json +49 -1
- package/manifest/components/musical-time-input.json +14 -0
- package/manifest/components/navigation-menu.json +41 -1
- package/manifest/components/node-card.json +3 -0
- package/manifest/components/number-field.json +14 -1
- package/manifest/components/otp-field.json +13 -0
- package/manifest/components/page-shell.json +14 -0
- package/manifest/components/pagination.json +3 -0
- package/manifest/components/panel-header.json +12 -0
- package/manifest/components/panel.json +13 -1
- package/manifest/components/password-input.json +14 -1
- package/manifest/components/permission-scopes.json +3 -1
- package/manifest/components/piano-keyboard.json +3 -0
- package/manifest/components/popover.json +39 -1
- package/manifest/components/preset-section.json +9 -1
- package/manifest/components/preview.json +30 -10
- package/manifest/components/progress.json +6 -1
- package/manifest/components/prompt-library.json +3 -1
- package/manifest/components/queue-dock.json +3 -1
- package/manifest/components/radio-group.json +8 -0
- package/manifest/components/radio.json +8 -0
- package/manifest/components/rating.json +4 -1
- package/manifest/components/reasoning-panel.json +3 -1
- package/manifest/components/recommendation-card.json +1 -1
- package/manifest/components/resizable.json +4 -1
- package/manifest/components/revert-dock.json +3 -1
- package/manifest/components/row.json +5 -1
- package/manifest/components/scroll-area.json +4 -2
- package/manifest/components/scrollable-tabs-list.json +19 -0
- package/manifest/components/scrub-input.json +14 -1
- package/manifest/components/seam-cell.json +1 -0
- package/manifest/components/seam-grid.json +1 -0
- package/manifest/components/seam-list.json +5 -1
- package/manifest/components/search-input.json +14 -1
- package/manifest/components/section-header.json +15 -2
- package/manifest/components/segmented-control.json +17 -0
- package/manifest/components/select.json +28 -0
- package/manifest/components/settings-panel.json +3 -0
- package/manifest/components/shape-section.json +9 -1
- package/manifest/components/sheet.json +38 -1
- package/manifest/components/shimmer-label.json +3 -0
- package/manifest/components/sidebar.json +19 -2
- package/manifest/components/slider.json +8 -0
- package/manifest/components/sources.json +3 -1
- package/manifest/components/stat.json +9 -0
- package/manifest/components/status-bar.json +4 -0
- package/manifest/components/stepper.json +8 -0
- package/manifest/components/swap-label.json +3 -0
- package/manifest/components/switch.json +8 -0
- package/manifest/components/table-scroll-region.json +20 -2
- package/manifest/components/table.json +20 -2
- package/manifest/components/tabs.json +20 -1
- package/manifest/components/tags-input.json +49 -1
- package/manifest/components/terminal-frame.json +3 -0
- package/manifest/components/textarea.json +16 -0
- package/manifest/components/theme-configurator.json +38 -1
- package/manifest/components/theme-provider.json +37 -19
- package/manifest/components/thread-search.json +3 -1
- package/manifest/components/threshold-rail.json +3 -0
- package/manifest/components/time-field.json +14 -0
- package/manifest/components/toast.json +39 -0
- package/manifest/components/toggle-group.json +1 -19
- package/manifest/components/toggle.json +3 -5
- package/manifest/components/token-editor.json +6 -1
- package/manifest/components/tool-call-card.json +9 -2
- package/manifest/components/tool-call.json +3 -1
- package/manifest/components/tool-timeline.json +3 -1
- package/manifest/components/toolbar.json +4 -1
- package/manifest/components/tooltip.json +40 -1
- package/manifest/components/tree-visibility-toggle.json +3 -0
- package/manifest/components/tree.json +3 -0
- package/manifest/components/universe-grid.json +3 -0
- package/manifest/components/voice-conversation.json +3 -0
- package/manifest/components/work-collapse.json +3 -1
- package/manifest/manifest.json +205 -185
- package/manifest/tokens.json +260 -4
- package/package.json +6 -6
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
import { CONTROL_FACE } from "../system/_style-control-face.js";
|
|
2
|
+
import { LABEL_INK_SUBTLE } from "../system/_style-label-ink.js";
|
|
3
|
+
import { LABEL_FACE } from "../system/_style-label-face.js";
|
|
4
|
+
import { LABEL_WEIGHT } from "../system/_style-label-weight.js";
|
|
5
|
+
import { LABEL_CASE } from "../system/_style-label-case.js";
|
|
6
|
+
import { LABEL_TRACKING } from "../system/_style-label-tracking.js";
|
|
7
|
+
import { ELEVATION_2 } from "../system/_paint-elevation.js";
|
|
8
|
+
import { LABEL_SIZE } from "../system/_style-label-size.js";
|
|
9
|
+
import { STROKE_SURFACE_2 } from "../system/_paint-stroke-surface-2.js";
|
|
10
|
+
import { BODY_VOICE } from "../system/_style-body.js";
|
|
11
|
+
import { MENU_ITEM_INK, MENU_ITEM_RADIUS } from "../system/_style-menu.js";
|
|
12
|
+
import { OVERLAY_TITLE_VOICE } from "../system/_style-overlay-title.js";
|
|
13
|
+
import { BODY_LEADING } from "../system/_style-body-leading.js";
|
|
14
|
+
import { BODY_SIZE } from "../system/_style-body-size.js";
|
|
1
15
|
//#region src/overlays/_surface.ts
|
|
2
16
|
/**
|
|
3
17
|
* The conventions every floating surface in this system shares.
|
|
@@ -18,12 +32,64 @@
|
|
|
18
32
|
* @example
|
|
19
33
|
* <Popover.Popup className={cn(overlaySurfaceClasses, className)} />
|
|
20
34
|
*/
|
|
21
|
-
const overlaySurfaceClasses =
|
|
35
|
+
const overlaySurfaceClasses = `rounded-overlay ${STROKE_SURFACE_2} ${ELEVATION_2}`;
|
|
22
36
|
/**
|
|
23
37
|
* The full-viewport dim behind a modal surface. `--cue-scrim` is theme-owned —
|
|
24
38
|
* dusk and hivehub tune their own — so the value is never hard-coded here.
|
|
39
|
+
*
|
|
40
|
+
* **The scrim's own filter (spec §3.10, P0.6) lives on a `::before`
|
|
41
|
+
* pseudo-element, never on `backdrop-filter` of the scrim itself.** Every
|
|
42
|
+
* element here is public through `backdropClassName` (dialog, sheet, drawer,
|
|
43
|
+
* alert-dialog and command-palette all feed it into
|
|
44
|
+
* `cn(scrimClasses, backdropClassName)`), which exists precisely so a consumer
|
|
45
|
+
* can put their own `backdrop-blur-*` on this element — so the scrim's own
|
|
46
|
+
* `backdrop-filter` is a slot this recipe must never write to at all, not a
|
|
47
|
+
* slot to compose into.
|
|
48
|
+
*
|
|
49
|
+
* **Why not fill one of Tailwind's own composition slots instead (the
|
|
50
|
+
* `_paint-glass.ts` technique).** Measured, and it does not survive
|
|
51
|
+
* `paint-scrim-filter: none`, which is every shipped pack's value but
|
|
52
|
+
* glaze's (`blur(8px)`, the Porcelain Look's dialog backdrop).
|
|
53
|
+
* Tailwind's composed `backdrop-filter: var(--tw-backdrop-blur,)
|
|
54
|
+
* var(--tw-backdrop-brightness,) … var(--tw-backdrop-grayscale,) …` accepts
|
|
55
|
+
* only `<filter-function>`s in that list; `none` is not one, so a slot filled
|
|
56
|
+
* with the literal text `none` sitting beside a consumer's `blur(8px)` is an
|
|
57
|
+
* **invalid** `backdrop-filter` value as a whole — not "no extra blur" but a
|
|
58
|
+
* parse failure that drops the entire declaration, computing `none` even for
|
|
59
|
+
* the consumer's own choice. `_paint-glass.ts` never meets this: its slot's
|
|
60
|
+
* default is a real filter function (`blur(8px)`), never the keyword `none`.
|
|
61
|
+
*
|
|
62
|
+
* **The pseudo-element has no such slot to collide over.** Its own
|
|
63
|
+
* `backdrop-filter: var(--cue-paint-scrim-filter, none)` is the only
|
|
64
|
+
* declaration for that property on that box, so `none` is simply valid and
|
|
65
|
+
* inert there, exactly as intended, whatever the scrim element's own
|
|
66
|
+
* `backdrop-filter` (via `backdropClassName`) computes. `content-['']` gives
|
|
67
|
+
* it a box; `absolute inset-0` sizes it to the scrim, whose own `fixed`
|
|
68
|
+
* positioning is a containing block for it; `pointer-events-none` keeps it out
|
|
69
|
+
* of the scrim's own click handling. The pseudo paints after the scrim's own
|
|
70
|
+
* `bg-(--cue-scrim)`, so a real filter blurs that tint together with the page
|
|
71
|
+
* — a flat tint, so the blur of it is the same tint.
|
|
72
|
+
*
|
|
73
|
+
* **The scrim never fades by its own opacity, because that would isolate the
|
|
74
|
+
* pseudo's backdrop.** An ancestor with opacity under 1 is a backdrop root: a
|
|
75
|
+
* descendant's `backdrop-filter` sees only what is painted inside it. When the
|
|
76
|
+
* scrim faded in by `opacity`, glaze's blur on the pseudo therefore had
|
|
77
|
+
* nothing to blur for the whole fade — the page stayed sharp while it dimmed,
|
|
78
|
+
* snapped to 8px the frame opacity reached 1, and lost the blur on the first
|
|
79
|
+
* frame of the exit (measured in Chromium; `paint-noop.spec.ts`'s P43 case
|
|
80
|
+
* reads the pixels halfway through). So the scrim holds opacity 1 and fades
|
|
81
|
+
* its parts: its background from `transparent`, the pseudo by its *own*
|
|
82
|
+
* opacity (an element's own opacity does not isolate its own backdrop), and
|
|
83
|
+
* its own `backdrop-filter` from `none` — the last only so a consumer's
|
|
84
|
+
* `backdrop-blur-*`, which faded with the scrim's opacity before, still fades
|
|
85
|
+
* rather than snapping in. That one is written for the starting and ending
|
|
86
|
+
* frames alone, where a whole-property `none` outranks the consumer's
|
|
87
|
+
* composed declaration without entering it; at rest the property is theirs.
|
|
88
|
+
* The pseudo's `transition` and timing are its own classes: Tailwind
|
|
89
|
+
* registers `--tw-duration` and `--tw-ease` with `inherits: false`, so the
|
|
90
|
+
* scrim's `duration-150 ease-out` never reach it.
|
|
25
91
|
*/
|
|
26
|
-
const scrimClasses = "fixed inset-0 z-50 bg-(--cue-scrim) transition-opacity duration-150 ease-out motion-reduce:transition-none data-[starting-style]:opacity-0 data-[ending-style]:opacity-0";
|
|
92
|
+
const scrimClasses = "fixed inset-0 z-50 bg-(--cue-scrim) before:absolute before:inset-0 before:content-[''] before:pointer-events-none before:[backdrop-filter:var(--cue-paint-scrim-filter,none)] transition-[background-color,backdrop-filter] duration-150 ease-out before:transition-opacity before:duration-150 before:ease-out motion-reduce:transition-none motion-reduce:before:transition-none data-[starting-style]:bg-transparent data-[ending-style]:bg-transparent data-[starting-style]:[backdrop-filter:none] data-[ending-style]:[backdrop-filter:none] data-[starting-style]:before:opacity-0 data-[ending-style]:before:opacity-0";
|
|
27
93
|
/**
|
|
28
94
|
* What a Base UI `Positioner` needs and nothing more: it is a layout box, not a
|
|
29
95
|
* painted one. The stacking context lives here so the popup itself can stay
|
|
@@ -44,22 +110,30 @@ const overlayPopupTransitionClasses = "origin-(--transform-origin) transition-[o
|
|
|
44
110
|
* transition property list to name both.
|
|
45
111
|
*/
|
|
46
112
|
const overlayModalTransitionClasses = "transition-[opacity,scale] duration-150 ease-out motion-reduce:transition-none data-[starting-style]:scale-[0.98] data-[starting-style]:opacity-0 data-[ending-style]:scale-[0.98] data-[ending-style]:opacity-0";
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
113
|
+
/**
|
|
114
|
+
* Body copy inside an overlay: the body voice (mono unless a style set names
|
|
115
|
+
* another face — `_style-body.ts`), one rung under the panel's own text.
|
|
116
|
+
*/
|
|
117
|
+
const overlayTextClasses = `${BODY_VOICE} text-(length:--cue-text-ui) text-fg`;
|
|
118
|
+
/**
|
|
119
|
+
* The heading line of a dialog, an alert dialog or a popover: the title voice's
|
|
120
|
+
* face, weight and ink at the overlay title's own size (`_style-overlay-title.ts`).
|
|
121
|
+
*/
|
|
122
|
+
const overlayTitleClasses = OVERLAY_TITLE_VOICE;
|
|
123
|
+
/** The supporting line under an overlay title, in the body voice. */
|
|
124
|
+
const overlayDescriptionClasses = `${BODY_VOICE} ${BODY_SIZE} ${BODY_LEADING} text-fg-muted`;
|
|
53
125
|
/** The action strip at the foot of a modal surface. */
|
|
54
126
|
const overlayFooterClasses = "flex items-center justify-end gap-(--cue-space-3) pt-(--cue-space-2)";
|
|
55
127
|
/**
|
|
56
128
|
* One row of a menu: the short rung of the density control ladder, highlighted
|
|
57
129
|
* with `accent-soft` rather than a solid fill (the luma defect ruling — a solid
|
|
58
|
-
* accent bar on a hovered row is too loud at console density).
|
|
130
|
+
* accent bar on a hovered row is too loud at console density). The row's ink
|
|
131
|
+
* and the highlight are the style set's, with those as their defaults
|
|
132
|
+
* (`_style-menu.ts`).
|
|
59
133
|
*/
|
|
60
|
-
const menuItemClasses =
|
|
61
|
-
/** The uppercase mono caption over a group of menu rows. */
|
|
62
|
-
const menuLabelClasses =
|
|
134
|
+
const menuItemClasses = `flex h-control-sm cursor-default items-center gap-(--cue-space-2) ${MENU_ITEM_RADIUS} px-(--cue-space-3) ${CONTROL_FACE} text-(length:--cue-text-ui) ${MENU_ITEM_INK} outline-none select-none data-[highlighted]:text-fg data-[disabled]:pointer-events-none data-[disabled]:opacity-40`;
|
|
135
|
+
/** The uppercase mono caption over a group of menu rows — by default. */
|
|
136
|
+
const menuLabelClasses = `flex h-control-sm items-center px-(--cue-space-3) ${LABEL_FACE} ${LABEL_SIZE} ${LABEL_TRACKING} ${LABEL_INK_SUBTLE} ${LABEL_WEIGHT} ${LABEL_CASE} select-none`;
|
|
63
137
|
/** The hairline between menu groups. */
|
|
64
138
|
const menuSeparatorClasses = "my-(--cue-space-1) h-px bg-border";
|
|
65
139
|
/** Padding of a menu popup — a single space unit so rows reach the rim. */
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { CONTROL_FACE } from "../system/_style-control-face.js";
|
|
4
|
+
import { LABEL_FACE } from "../system/_style-label-face.js";
|
|
5
|
+
import { LABEL_CASE } from "../system/_style-label-case.js";
|
|
6
|
+
import { LABEL_TRACKING } from "../system/_style-label-tracking.js";
|
|
3
7
|
import { SearchGlyph } from "./_glyphs.js";
|
|
4
8
|
import { useCuePortalProps } from "../system/portal.js";
|
|
5
9
|
import { overlayModalTransitionClasses, overlaySurfaceClasses, scrimClasses } from "./_surface.js";
|
|
@@ -48,7 +52,7 @@ function groupCommands(items) {
|
|
|
48
52
|
return groups;
|
|
49
53
|
}
|
|
50
54
|
/** The row: same rhythm as a menu row, with a reserved gutter for the icon. */
|
|
51
|
-
const commandItemClasses =
|
|
55
|
+
const commandItemClasses = `flex h-control-md cursor-default items-center gap-(--cue-space-3) rounded-control px-(--cue-space-3) ${CONTROL_FACE} text-(length:--cue-text-ui) text-fg-muted outline-none select-none data-[highlighted]:bg-accent-soft data-[highlighted]:text-fg data-[disabled]:pointer-events-none data-[disabled]:opacity-40`;
|
|
52
56
|
/**
|
|
53
57
|
* The ⌘K surface: type a few letters, run a command.
|
|
54
58
|
*
|
|
@@ -140,12 +144,12 @@ function CommandPalette({ items, onSelect, open: openProp, defaultOpen = false,
|
|
|
140
144
|
"aria-label": label,
|
|
141
145
|
placeholder,
|
|
142
146
|
"data-slot": "command-palette-input",
|
|
143
|
-
className: "h-full w-full min-w-0 border-0 bg-transparent p-0
|
|
147
|
+
className: cn("h-full w-full min-w-0 border-0 bg-transparent p-0 text-(length:--cue-text-body) text-fg outline-none placeholder:text-fg-subtle", CONTROL_FACE)
|
|
144
148
|
})]
|
|
145
149
|
}),
|
|
146
150
|
/* @__PURE__ */ jsx(Combobox.Empty, {
|
|
147
151
|
"data-slot": "command-palette-empty",
|
|
148
|
-
className: "flex h-control-lg items-center px-(--cue-space-4)
|
|
152
|
+
className: cn("flex h-control-lg items-center px-(--cue-space-4) text-(length:--cue-text-ui) text-fg-subtle select-none", CONTROL_FACE),
|
|
149
153
|
children: emptyMessage
|
|
150
154
|
}),
|
|
151
155
|
/* @__PURE__ */ jsx(Combobox.List, {
|
|
@@ -155,7 +159,7 @@ function CommandPalette({ items, onSelect, open: openProp, defaultOpen = false,
|
|
|
155
159
|
items: group.items,
|
|
156
160
|
className: "block",
|
|
157
161
|
children: [group.value === "" ? null : /* @__PURE__ */ jsx(Combobox.GroupLabel, {
|
|
158
|
-
className: "flex h-control-sm items-center px-(--cue-space-3)
|
|
162
|
+
className: cn("flex h-control-sm items-center px-(--cue-space-3) text-(length:--cue-text-micro) text-fg-subtle select-none", LABEL_FACE, LABEL_TRACKING, LABEL_CASE),
|
|
159
163
|
children: group.value
|
|
160
164
|
}), /* @__PURE__ */ jsx(Combobox.Collection, { children: (item) => /* @__PURE__ */ jsxs(Combobox.Item, {
|
|
161
165
|
value: item,
|
|
@@ -182,7 +186,7 @@ function CommandPalette({ items, onSelect, open: openProp, defaultOpen = false,
|
|
|
182
186
|
]
|
|
183
187
|
}), footer === null ? null : /* @__PURE__ */ jsx("div", {
|
|
184
188
|
"data-slot": "command-palette-footer",
|
|
185
|
-
className: "flex shrink-0 items-center gap-(--cue-space-4) border-t border-border bg-surface-1 px-(--cue-space-4) py-(--cue-space-2)
|
|
189
|
+
className: cn("flex shrink-0 items-center gap-(--cue-space-4) border-t border-border bg-surface-1 px-(--cue-space-4) py-(--cue-space-2) text-(length:--cue-text-micro) text-fg-subtle select-none", CONTROL_FACE),
|
|
186
190
|
children: footer
|
|
187
191
|
})]
|
|
188
192
|
})]
|
|
@@ -8,6 +8,11 @@ import { Dialog } from "@base-ui/react/dialog";
|
|
|
8
8
|
* Centring is `top/left 50%` plus a translate rather than a flex-centred
|
|
9
9
|
* wrapper: the popup owns its own position, so nothing else has to cover the
|
|
10
10
|
* viewport and steal pointer events from the scrim.
|
|
11
|
+
*
|
|
12
|
+
* Its corner is `DIALOG_RADIUS`, the style set's `--cue-style-dialog-radius`
|
|
13
|
+
* over the overlay rung, spent after `overlaySurfaceClasses` so the popup's
|
|
14
|
+
* own `cn` drops the shared `rounded-overlay`: only the dialog reads the name,
|
|
15
|
+
* and every other overlay keeps the rung.
|
|
11
16
|
*/
|
|
12
17
|
declare const dialogPopupVariants: (props?: ({
|
|
13
18
|
width?: "sm" | "md" | "lg" | null | undefined;
|
package/dist/overlays/dialog.js
CHANGED
|
@@ -15,8 +15,13 @@ import { Dialog } from "@base-ui/react/dialog";
|
|
|
15
15
|
* Centring is `top/left 50%` plus a translate rather than a flex-centred
|
|
16
16
|
* wrapper: the popup owns its own position, so nothing else has to cover the
|
|
17
17
|
* viewport and steal pointer events from the scrim.
|
|
18
|
+
*
|
|
19
|
+
* Its corner is `DIALOG_RADIUS`, the style set's `--cue-style-dialog-radius`
|
|
20
|
+
* over the overlay rung, spent after `overlaySurfaceClasses` so the popup's
|
|
21
|
+
* own `cn` drops the shared `rounded-overlay`: only the dialog reads the name,
|
|
22
|
+
* and every other overlay keeps the rung.
|
|
18
23
|
*/
|
|
19
|
-
const dialogPopupVariants = cva(`${overlaySurfaceClasses} ${overlayModalTransitionClasses} fixed top-1/2 left-1/2 z-50 flex max-h-[85vh] w-[calc(100vw-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col gap-(--cue-space-4) overflow-y-auto p-(--cue-space-6) outline-none`, {
|
|
24
|
+
const dialogPopupVariants = cva(`${overlaySurfaceClasses} rounded-[calc(var(--cue-style-dialog-radius,var(--cue-radius-overlay))*var(--cue-radius-scale))] ${overlayModalTransitionClasses} fixed top-1/2 left-1/2 z-50 flex max-h-[85vh] w-[calc(100vw-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col gap-(--cue-space-4) overflow-y-auto p-(--cue-space-6) outline-none`, {
|
|
20
25
|
variants: { width: {
|
|
21
26
|
sm: "max-w-[20rem]",
|
|
22
27
|
md: "max-w-[28rem]",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING } from "../system/_focus-ring.js";
|
|
3
4
|
import { Tooltip } from "./tooltip.js";
|
|
4
5
|
import "react";
|
|
5
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -27,7 +28,7 @@ function InfoTip({ text, width = 224, label = "More information", side = "top",
|
|
|
27
28
|
delay,
|
|
28
29
|
"aria-label": label,
|
|
29
30
|
"data-slot": "info-tip-trigger",
|
|
30
|
-
className: cn(
|
|
31
|
+
className: cn(`inline-flex size-[0.8125rem] shrink-0 cursor-help items-center justify-center rounded-full border border-border-strong bg-transparent font-mono text-(length:--cue-text-micro) leading-none font-bold text-fg-muted italic outline-none select-none hover:border-accent hover:text-accent ${FOCUS_RING}`, className),
|
|
31
32
|
children: "i"
|
|
32
33
|
}), /* @__PURE__ */ jsx(Tooltip.Content, {
|
|
33
34
|
side,
|
package/dist/overlays/menubar.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING_INSET } from "../system/_focus-ring.js";
|
|
4
|
+
import { CONTROL_FACE } from "../system/_style-control-face.js";
|
|
3
5
|
import { useCuePortalProps } from "../system/portal.js";
|
|
4
6
|
import { menuPopupClasses, overlayPopupTransitionClasses, overlayPositionerClasses, overlaySurfaceClasses } from "./_surface.js";
|
|
5
7
|
import { DropdownMenu } from "./dropdown-menu.js";
|
|
@@ -66,7 +68,7 @@ const Menubar$1 = {
|
|
|
66
68
|
return /* @__PURE__ */ jsx(Menu.Trigger, {
|
|
67
69
|
ref,
|
|
68
70
|
"data-slot": "menubar-trigger",
|
|
69
|
-
className: cn(
|
|
71
|
+
className: cn(`inline-flex h-control-sm shrink-0 cursor-default items-center rounded-control px-(--cue-space-3) text-(length:--cue-text-ui) whitespace-nowrap text-fg-muted transition-colors duration-150 outline-none select-none hover:text-fg ${FOCUS_RING_INSET} data-[popup-open]:bg-accent-soft data-[popup-open]:text-fg data-[disabled]:pointer-events-none data-[disabled]:opacity-40`, CONTROL_FACE, className),
|
|
70
72
|
...elementProps
|
|
71
73
|
});
|
|
72
74
|
}),
|
package/dist/overlays/popover.js
CHANGED
|
@@ -4,6 +4,7 @@ import { useComposedRefs } from "../lib/compose.js";
|
|
|
4
4
|
import { useCuePortalProps } from "../system/portal.js";
|
|
5
5
|
import { overlayDescriptionClasses, overlayPopupTransitionClasses, overlayPositionerClasses, overlaySurfaceClasses, overlayTitleClasses } from "./_surface.js";
|
|
6
6
|
import { useCloseOnWheel } from "./_wheel.js";
|
|
7
|
+
import { POPOVER_PAD } from "../system/_style-popover-pad.js";
|
|
7
8
|
import * as React from "react";
|
|
8
9
|
import { jsx } from "react/jsx-runtime";
|
|
9
10
|
import { Popover } from "@base-ui/react/popover";
|
|
@@ -78,7 +79,7 @@ const Popover$1 = {
|
|
|
78
79
|
children: /* @__PURE__ */ jsx(Popover.Popup, {
|
|
79
80
|
ref: composedRef,
|
|
80
81
|
"data-slot": "popover-popup",
|
|
81
|
-
className: cn(overlaySurfaceClasses, overlayPopupTransitionClasses,
|
|
82
|
+
className: cn(overlaySurfaceClasses, overlayPopupTransitionClasses, `flex max-w-[calc(100vw-2rem)] flex-col gap-(--cue-space-3) ${POPOVER_PAD} outline-none`, className),
|
|
82
83
|
...popupProps,
|
|
83
84
|
children
|
|
84
85
|
})
|
package/dist/overlays/toast.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING } from "../system/_focus-ring.js";
|
|
4
|
+
import { LABEL_FACE } from "../system/_style-label-face.js";
|
|
5
|
+
import { LABEL_CASE } from "../system/_style-label-case.js";
|
|
6
|
+
import { LABEL_TRACKING_TIGHT } from "../system/_style-label-tracking.js";
|
|
3
7
|
import { CrossGlyph } from "./_glyphs.js";
|
|
4
8
|
import { useCuePortalProps } from "../system/portal.js";
|
|
5
9
|
import { overlaySurfaceClasses } from "./_surface.js";
|
|
@@ -87,12 +91,12 @@ function ToastItem({ toast, className, closeLabel }) {
|
|
|
87
91
|
}),
|
|
88
92
|
/* @__PURE__ */ jsx(Toast.Action, {
|
|
89
93
|
"data-slot": "toast-action",
|
|
90
|
-
className:
|
|
94
|
+
className: cn(`mt-(--cue-space-1) inline-flex h-control-sm w-fit cursor-pointer items-center justify-center rounded-control border border-border px-(--cue-space-3) text-(length:--cue-text-label) text-fg-muted transition-colors outline-none hover:border-border-strong hover:text-fg ${FOCUS_RING}`, LABEL_FACE, LABEL_TRACKING_TIGHT, LABEL_CASE)
|
|
91
95
|
}),
|
|
92
96
|
/* @__PURE__ */ jsx(Toast.Close, {
|
|
93
97
|
"aria-label": closeLabel,
|
|
94
98
|
"data-slot": "toast-close",
|
|
95
|
-
className:
|
|
99
|
+
className: `absolute top-(--cue-space-2) right-(--cue-space-2) flex size-icon-md cursor-pointer items-center justify-center rounded-control text-fg-subtle outline-none transition-colors hover:text-fg ${FOCUS_RING}`,
|
|
96
100
|
children: /* @__PURE__ */ jsx(CrossGlyph, { className: "size-icon-sm" })
|
|
97
101
|
})
|
|
98
102
|
]
|
package/dist/overlays/tooltip.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { CONTROL_FACE } from "../system/_style-control-face.js";
|
|
3
4
|
import { useCuePortalProps } from "../system/portal.js";
|
|
5
|
+
import { BODY_LEADING } from "../system/_style-body-leading.js";
|
|
4
6
|
import { overlayPopupTransitionClasses, overlayPositionerClasses, overlaySurfaceClasses } from "./_surface.js";
|
|
7
|
+
import { TOOLTIP_PAD, TOOLTIP_SIZE } from "../system/_style-tooltip.js";
|
|
5
8
|
import * as React from "react";
|
|
6
9
|
import { jsx } from "react/jsx-runtime";
|
|
7
10
|
import { Tooltip } from "@base-ui/react/tooltip";
|
|
@@ -83,7 +86,7 @@ const Tooltip$1 = {
|
|
|
83
86
|
id,
|
|
84
87
|
role: "tooltip",
|
|
85
88
|
"data-slot": "tooltip-popup",
|
|
86
|
-
className: cn(overlaySurfaceClasses, overlayPopupTransitionClasses,
|
|
89
|
+
className: cn(overlaySurfaceClasses, overlayPopupTransitionClasses, `max-w-[16rem] ${TOOLTIP_PAD} ${TOOLTIP_SIZE} ${BODY_LEADING} text-fg`, CONTROL_FACE, className),
|
|
87
90
|
...popupProps,
|
|
88
91
|
children
|
|
89
92
|
})
|
|
@@ -6,6 +6,16 @@ import { useRender } from "@base-ui/react/use-render";
|
|
|
6
6
|
* The `Button` class recipe, exported so other surfaces (a link that must look
|
|
7
7
|
* like a button, a third-party trigger) can borrow the exact same classes.
|
|
8
8
|
*
|
|
9
|
+
* **It returns the recipe unmerged**, and its `className` option only appends.
|
|
10
|
+
* A class concatenated onto it — by a template string, `clsx`, or that option —
|
|
11
|
+
* does not replace the recipe's own; the two compete by the order Tailwind
|
|
12
|
+
* emits them in, which is not a contract. The inline padding in particular is
|
|
13
|
+
* a `px-[calc(…)]` reader of the style set's `style-control-pad`, and Tailwind
|
|
14
|
+
* emits it after every numeric `px-*`, so a concatenated `px-2` no longer wins
|
|
15
|
+
* the way it did over the `px-(--cue-space-*)` rung it replaced. To override a
|
|
16
|
+
* class of the recipe, pass `className` to `Button` itself, which merges, or
|
|
17
|
+
* merge the result with `tailwind-merge`.
|
|
18
|
+
*
|
|
9
19
|
* @example
|
|
10
20
|
* <a className={buttonVariants({ variant: "primary", size: "sm" })} href="/go">Go</a>
|
|
11
21
|
*/
|
|
@@ -47,6 +57,11 @@ interface ButtonProps extends React.ComponentPropsWithoutRef<"button">, VariantP
|
|
|
47
57
|
* The focus ring is an `outline`, never a `box-shadow`, so it survives inside
|
|
48
58
|
* `overflow: hidden` panels.
|
|
49
59
|
*
|
|
60
|
+
* `className` is merged with `tailwind-merge`, so a caller's `px-2`,
|
|
61
|
+
* `font-semibold` or `shadow-none` replaces the class the recipe set for the
|
|
62
|
+
* same property. Only here: `buttonVariants()` concatenates, and says what that
|
|
63
|
+
* costs.
|
|
64
|
+
*
|
|
50
65
|
* @example
|
|
51
66
|
* <Button variant="primary" size="sm" icon={Play}>Run cue</Button>
|
|
52
67
|
* @example
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING_PAINT } from "../system/_focus-ring.js";
|
|
4
|
+
import { CONTROL_FACE } from "../system/_style-control-face.js";
|
|
5
|
+
import { REST_SHADE_CLASS } from "../system/_paint-rest-shade.js";
|
|
3
6
|
import { cva } from "../lib/cva.js";
|
|
7
|
+
import { CONTROL_STEP_SIZE_LG } from "../system/_style-control-step.js";
|
|
8
|
+
import { GLOW_CLASSES, GLOW_DANGER_CLASSES } from "../system/_paint-glow.js";
|
|
9
|
+
import { 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 } from "../system/_style-control.js";
|
|
4
10
|
import * as React from "react";
|
|
5
11
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
12
|
import { useRender } from "@base-ui/react/use-render";
|
|
7
13
|
//#region src/primitives/button.tsx
|
|
8
14
|
/**
|
|
9
|
-
* The chassis every control-shaped primitive shares: layout,
|
|
15
|
+
* The chassis every control-shaped primitive shares: layout, the control face
|
|
16
|
+
* (mono, unless a style set names another — `CONTROL_FACE` says why), the
|
|
17
|
+
* control's weight, tracking, label trim and case (500, `normal`, `normal` and
|
|
18
|
+
* `none` unless a style set names others — `_style-control.ts` says why), the
|
|
10
19
|
* density radius, the transition and the focus ring. Deliberately carries no
|
|
11
20
|
* size and no colour so `Button` (height + horizontal padding) and `IconButton`
|
|
12
21
|
* (one square token) can each add their own without fighting `tailwind-merge`.
|
|
@@ -18,9 +27,15 @@ import { useRender } from "@base-ui/react/use-render";
|
|
|
18
27
|
* Restoring the style at ring time is what makes the focus indicator exist
|
|
19
28
|
* (WCAG 2.4.7). `test/focus-ring.test.ts` guards every occurrence.
|
|
20
29
|
*
|
|
30
|
+
* The ring's width and colour are {@link FOCUS_RING_PAINT} — `_focus-ring.ts`
|
|
31
|
+
* says why every site but this one reads a fixed offset from there too. This
|
|
32
|
+
* one reads `--cue-style-focus-offset` instead, because the offset here is a
|
|
33
|
+
* style-set knob (kiln pulls it to -1px) rather than one of that module's three
|
|
34
|
+
* fixed shapes; `1px` is the offset this chassis drew before either existed.
|
|
35
|
+
*
|
|
21
36
|
* @internal Not part of the public API; imported by `icon-button.tsx`.
|
|
22
37
|
*/
|
|
23
|
-
const buttonChassis =
|
|
38
|
+
const buttonChassis = `inline-flex select-none items-center justify-center gap-[0.4em] whitespace-nowrap rounded-control ${CONTROL_FACE} ${CONTROL_WEIGHT} ${CONTROL_TRACKING} ${CONTROL_TRIM} ${CONTROL_CASE} transition-colors duration-150 outline-none ${FOCUS_RING_PAINT} focus-visible:outline-offset-[var(--cue-style-focus-offset,1px)] disabled:pointer-events-none disabled:opacity-40`;
|
|
24
39
|
/**
|
|
25
40
|
* The shared colour vocabulary. `accent` is theme-controlled, so `primary`
|
|
26
41
|
* reads as white-on-black in `cue` and cyan-on-near-black in `terminal` with no
|
|
@@ -39,17 +54,27 @@ const buttonChassis = "inline-flex select-none items-center justify-center gap-[
|
|
|
39
54
|
* @internal Not part of the public API; imported by `icon-button.tsx`.
|
|
40
55
|
*/
|
|
41
56
|
const buttonTones = {
|
|
42
|
-
primary:
|
|
43
|
-
secondary:
|
|
44
|
-
ghost:
|
|
45
|
-
outline:
|
|
46
|
-
danger:
|
|
57
|
+
primary: `bg-accent-fill text-accent-fill-fg hover:bg-accent-fill-hover border border-transparent ${GLOW_CLASSES}`,
|
|
58
|
+
secondary: `border ${SECONDARY_EDGE} ${SECONDARY_INK} hover:text-[color:var(--cue-style-secondary-hover-ink,var(--cue-fg))] hover:border-[color:var(--cue-style-secondary-hover-edge,var(--cue-border-strong))] ${SECONDARY_GROUND}`,
|
|
59
|
+
ghost: `${GHOST_INK} hover:text-fg hover:bg-surface-2 border border-transparent`,
|
|
60
|
+
outline: `border ${OUTLINE_EDGE} ${OUTLINE_INK} hover:border-accent hover:text-accent bg-transparent ${REST_SHADE_CLASS}`,
|
|
61
|
+
danger: `bg-danger text-danger-fg hover:opacity-90 border border-transparent ${GLOW_DANGER_CLASSES}`,
|
|
47
62
|
"danger-outline": "border text-danger bg-transparent hover:bg-danger/10 border-danger/40"
|
|
48
63
|
};
|
|
49
64
|
/**
|
|
50
65
|
* The `Button` class recipe, exported so other surfaces (a link that must look
|
|
51
66
|
* like a button, a third-party trigger) can borrow the exact same classes.
|
|
52
67
|
*
|
|
68
|
+
* **It returns the recipe unmerged**, and its `className` option only appends.
|
|
69
|
+
* A class concatenated onto it — by a template string, `clsx`, or that option —
|
|
70
|
+
* does not replace the recipe's own; the two compete by the order Tailwind
|
|
71
|
+
* emits them in, which is not a contract. The inline padding in particular is
|
|
72
|
+
* a `px-[calc(…)]` reader of the style set's `style-control-pad`, and Tailwind
|
|
73
|
+
* emits it after every numeric `px-*`, so a concatenated `px-2` no longer wins
|
|
74
|
+
* the way it did over the `px-(--cue-space-*)` rung it replaced. To override a
|
|
75
|
+
* class of the recipe, pass `className` to `Button` itself, which merges, or
|
|
76
|
+
* merge the result with `tailwind-merge`.
|
|
77
|
+
*
|
|
53
78
|
* @example
|
|
54
79
|
* <a className={buttonVariants({ variant: "primary", size: "sm" })} href="/go">Go</a>
|
|
55
80
|
*/
|
|
@@ -57,9 +82,9 @@ const buttonVariants = cva(buttonChassis, {
|
|
|
57
82
|
variants: {
|
|
58
83
|
variant: buttonTones,
|
|
59
84
|
size: {
|
|
60
|
-
sm:
|
|
61
|
-
md:
|
|
62
|
-
lg:
|
|
85
|
+
sm: `h-control-sm ${CONTROL_PAD_SM} text-(length:--cue-text-ui)`,
|
|
86
|
+
md: `h-control-md ${CONTROL_PAD_MD} text-(length:--cue-text-ui)`,
|
|
87
|
+
lg: `h-control-lg ${CONTROL_PAD_LG} ${CONTROL_STEP_SIZE_LG}`
|
|
63
88
|
}
|
|
64
89
|
},
|
|
65
90
|
defaultVariants: {
|
|
@@ -75,6 +100,11 @@ const buttonVariants = cva(buttonChassis, {
|
|
|
75
100
|
* The focus ring is an `outline`, never a `box-shadow`, so it survives inside
|
|
76
101
|
* `overflow: hidden` panels.
|
|
77
102
|
*
|
|
103
|
+
* `className` is merged with `tailwind-merge`, so a caller's `px-2`,
|
|
104
|
+
* `font-semibold` or `shadow-none` replaces the class the recipe set for the
|
|
105
|
+
* same property. Only here: `buttonVariants()` concatenates, and says what that
|
|
106
|
+
* costs.
|
|
107
|
+
*
|
|
78
108
|
* @example
|
|
79
109
|
* <Button variant="primary" size="sm" icon={Play}>Run cue</Button>
|
|
80
110
|
* @example
|
|
@@ -24,13 +24,21 @@ import * as React from "react";
|
|
|
24
24
|
* page rather than a container. The rim is therefore a compound of tone and
|
|
25
25
|
* variant, exactly as the fill is.
|
|
26
26
|
*
|
|
27
|
+
* **The recipe reads the style set** (spec 2026-09-26-looks-fidelity §3.6,
|
|
28
|
+
* `system/_style-chip.ts`): the six tones' fill and rim are
|
|
29
|
+
* `color-mix(in oklab, var(--cue-<tone>) var(--cue-style-chip-fill, 10%), transparent)`
|
|
30
|
+
* and the same with `--cue-style-chip-edge` at `35%` — exactly `bg-<tone>/10`
|
|
31
|
+
* and `border-<tone>/35` under no set, and a set's own shares inside one. The
|
|
32
|
+
* case, tracking, radius, size and weight read `--cue-style-chip-case`,
|
|
33
|
+
* `-tracking`, `-radius`, `-size` and `--cue-style-label-weight` the same way.
|
|
34
|
+
*
|
|
27
35
|
* @example
|
|
28
36
|
* <span className={chipVariants({ tone: "danger", variant: "outline" })}>fault</span>
|
|
29
37
|
* @example
|
|
30
38
|
* <span className={chipVariants({ variant: "tag" })}>mcp</span>
|
|
31
39
|
*/
|
|
32
40
|
declare const chipVariants: (props?: ({
|
|
33
|
-
tone?: "
|
|
41
|
+
tone?: "danger" | "info" | "warn" | "accent" | "ok" | "busy" | "neutral" | null | undefined;
|
|
34
42
|
variant?: "outline" | "tinted" | "tag" | null | undefined;
|
|
35
43
|
interactive?: boolean | null | undefined;
|
|
36
44
|
} & ClassProp) | undefined) => string;
|
|
@@ -46,7 +54,17 @@ interface ChipProps extends React.HTMLAttributes<HTMLElement>, VariantProps<type
|
|
|
46
54
|
children?: React.ReactNode;
|
|
47
55
|
}
|
|
48
56
|
/**
|
|
49
|
-
* A compact status/label pill: mono, uppercase, wide-tracked, one line tall
|
|
57
|
+
* A compact status/label pill: mono, uppercase, wide-tracked, one line tall —
|
|
58
|
+
* by default, the style set's choice inside one.
|
|
59
|
+
*
|
|
60
|
+
* A chip speaks in the label voice: it reads the label face
|
|
61
|
+
* (`--cue-style-label-face`) and its own case (`--cue-style-chip-case`, which
|
|
62
|
+
* falls back to the label case), so under a sans, sentence-case Look its text
|
|
63
|
+
* is sans and sentence case like the captions around it. This reverses the
|
|
64
|
+
* earlier ruling that a tag's text is the value being shown and stays mono
|
|
65
|
+
* (spec 2026-09-26-looks-fidelity F-15): under a sans Look a mono uppercase
|
|
66
|
+
* chip was the most visible console voice left on the page. A consumer that
|
|
67
|
+
* wants a chip mono under every set passes `className="font-mono uppercase"`.
|
|
50
68
|
*
|
|
51
69
|
* `tone` uses the shared status vocabulary (`ok | busy | warn | danger | info`)
|
|
52
70
|
* plus `neutral` and `accent`, so a chip, a `StatusDot` and a `Meter` always
|
package/dist/primitives/chip.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING } from "../system/_focus-ring.js";
|
|
3
4
|
import { cva } from "../lib/cva.js";
|
|
5
|
+
import { CHIP_CASE, CHIP_EDGE, CHIP_FILL, CHIP_HEIGHT, CHIP_PAD, CHIP_RADIUS, CHIP_SIZE, CHIP_SIZE_MICRO, CHIP_TRACKING, CHIP_TRACKING_TAG } from "../system/_style-chip.js";
|
|
6
|
+
import { LABEL_FACE } from "../system/_style-label-face.js";
|
|
7
|
+
import { LABEL_WEIGHT } from "../system/_style-label-weight.js";
|
|
4
8
|
import * as React from "react";
|
|
5
9
|
import { jsx } from "react/jsx-runtime";
|
|
6
10
|
//#region src/primitives/chip.tsx
|
|
@@ -27,26 +31,34 @@ import { jsx } from "react/jsx-runtime";
|
|
|
27
31
|
* page rather than a container. The rim is therefore a compound of tone and
|
|
28
32
|
* variant, exactly as the fill is.
|
|
29
33
|
*
|
|
34
|
+
* **The recipe reads the style set** (spec 2026-09-26-looks-fidelity §3.6,
|
|
35
|
+
* `system/_style-chip.ts`): the six tones' fill and rim are
|
|
36
|
+
* `color-mix(in oklab, var(--cue-<tone>) var(--cue-style-chip-fill, 10%), transparent)`
|
|
37
|
+
* and the same with `--cue-style-chip-edge` at `35%` — exactly `bg-<tone>/10`
|
|
38
|
+
* and `border-<tone>/35` under no set, and a set's own shares inside one. The
|
|
39
|
+
* case, tracking, radius, size and weight read `--cue-style-chip-case`,
|
|
40
|
+
* `-tracking`, `-radius`, `-size` and `--cue-style-label-weight` the same way.
|
|
41
|
+
*
|
|
30
42
|
* @example
|
|
31
43
|
* <span className={chipVariants({ tone: "danger", variant: "outline" })}>fault</span>
|
|
32
44
|
* @example
|
|
33
45
|
* <span className={chipVariants({ variant: "tag" })}>mcp</span>
|
|
34
46
|
*/
|
|
35
|
-
const chipVariants = cva(
|
|
47
|
+
const chipVariants = cva(`inline-flex ${CHIP_HEIGHT} select-none items-center justify-center gap-(--cue-space-2) whitespace-nowrap ${CHIP_RADIUS} border ${LABEL_FACE} ${LABEL_WEIGHT} leading-none ${CHIP_CASE} outline-none ${FOCUS_RING}`, {
|
|
36
48
|
variants: {
|
|
37
49
|
tone: {
|
|
38
50
|
neutral: "text-fg-muted",
|
|
39
|
-
accent:
|
|
40
|
-
ok:
|
|
41
|
-
busy:
|
|
42
|
-
warn:
|
|
43
|
-
danger:
|
|
44
|
-
info:
|
|
51
|
+
accent: `${CHIP_EDGE.accent} text-accent`,
|
|
52
|
+
ok: `${CHIP_EDGE.ok} text-ok`,
|
|
53
|
+
busy: `${CHIP_EDGE.busy} text-busy`,
|
|
54
|
+
warn: `${CHIP_EDGE.warn} text-warn`,
|
|
55
|
+
danger: `${CHIP_EDGE.danger} text-danger`,
|
|
56
|
+
info: `${CHIP_EDGE.info} text-info`
|
|
45
57
|
},
|
|
46
58
|
variant: {
|
|
47
|
-
tinted:
|
|
48
|
-
outline:
|
|
49
|
-
tag:
|
|
59
|
+
tinted: `${CHIP_PAD} ${CHIP_SIZE} ${CHIP_TRACKING}`,
|
|
60
|
+
outline: `bg-transparent ${CHIP_PAD} ${CHIP_SIZE} ${CHIP_TRACKING}`,
|
|
61
|
+
tag: `bg-transparent px-(--cue-space-2) ${CHIP_SIZE_MICRO} ${CHIP_TRACKING_TAG}`
|
|
50
62
|
},
|
|
51
63
|
interactive: {
|
|
52
64
|
true: "cursor-pointer disabled:pointer-events-none disabled:opacity-40",
|
|
@@ -72,32 +84,32 @@ const chipVariants = cva("inline-flex h-chip select-none items-center justify-ce
|
|
|
72
84
|
{
|
|
73
85
|
tone: "accent",
|
|
74
86
|
variant: "tinted",
|
|
75
|
-
class:
|
|
87
|
+
class: CHIP_FILL.accent
|
|
76
88
|
},
|
|
77
89
|
{
|
|
78
90
|
tone: "ok",
|
|
79
91
|
variant: "tinted",
|
|
80
|
-
class:
|
|
92
|
+
class: CHIP_FILL.ok
|
|
81
93
|
},
|
|
82
94
|
{
|
|
83
95
|
tone: "busy",
|
|
84
96
|
variant: "tinted",
|
|
85
|
-
class:
|
|
97
|
+
class: CHIP_FILL.busy
|
|
86
98
|
},
|
|
87
99
|
{
|
|
88
100
|
tone: "warn",
|
|
89
101
|
variant: "tinted",
|
|
90
|
-
class:
|
|
102
|
+
class: CHIP_FILL.warn
|
|
91
103
|
},
|
|
92
104
|
{
|
|
93
105
|
tone: "danger",
|
|
94
106
|
variant: "tinted",
|
|
95
|
-
class:
|
|
107
|
+
class: CHIP_FILL.danger
|
|
96
108
|
},
|
|
97
109
|
{
|
|
98
110
|
tone: "info",
|
|
99
111
|
variant: "tinted",
|
|
100
|
-
class:
|
|
112
|
+
class: CHIP_FILL.info
|
|
101
113
|
},
|
|
102
114
|
{
|
|
103
115
|
tone: "neutral",
|
|
@@ -191,7 +203,17 @@ const chipVariants = cva("inline-flex h-chip select-none items-center justify-ce
|
|
|
191
203
|
}
|
|
192
204
|
});
|
|
193
205
|
/**
|
|
194
|
-
* A compact status/label pill: mono, uppercase, wide-tracked, one line tall
|
|
206
|
+
* A compact status/label pill: mono, uppercase, wide-tracked, one line tall —
|
|
207
|
+
* by default, the style set's choice inside one.
|
|
208
|
+
*
|
|
209
|
+
* A chip speaks in the label voice: it reads the label face
|
|
210
|
+
* (`--cue-style-label-face`) and its own case (`--cue-style-chip-case`, which
|
|
211
|
+
* falls back to the label case), so under a sans, sentence-case Look its text
|
|
212
|
+
* is sans and sentence case like the captions around it. This reverses the
|
|
213
|
+
* earlier ruling that a tag's text is the value being shown and stays mono
|
|
214
|
+
* (spec 2026-09-26-looks-fidelity F-15): under a sans Look a mono uppercase
|
|
215
|
+
* chip was the most visible console voice left on the page. A consumer that
|
|
216
|
+
* wants a chip mono under every set passes `className="font-mono uppercase"`.
|
|
195
217
|
*
|
|
196
218
|
* `tone` uses the shared status vocabulary (`ok | busy | warn | danger | info`)
|
|
197
219
|
* plus `neutral` and `accent`, so a chip, a `StatusDot` and a `Meter` always
|
package/dist/primitives/kbd.d.ts
CHANGED
|
@@ -9,6 +9,12 @@ type KbdProps = React.ComponentPropsWithoutRef<"kbd">;
|
|
|
9
9
|
* chip height so a `Kbd` and a `Chip` line up on the same row, and set in the
|
|
10
10
|
* micro type step because shortcut hints are reference material, not content.
|
|
11
11
|
*
|
|
12
|
+
* A key label is a control's voice, so it wears the control face
|
|
13
|
+
* (`--cue-style-control-face`, mono by default) rather than a fixed mono
|
|
14
|
+
* (spec 2026-09-26-looks-fidelity F-16), and a style set can move its rim
|
|
15
|
+
* (`--cue-style-kbd-edge`), its size (`--cue-style-chip-size`, shared with the
|
|
16
|
+
* chip it sits beside) and its weight (`--cue-style-label-weight`).
|
|
17
|
+
*
|
|
12
18
|
* @example
|
|
13
19
|
* <span>Press <Kbd>⌘</Kbd><Kbd>K</Kbd> to search</span>
|
|
14
20
|
*/
|