@cueplusplus/ui 0.16.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +901 -0
- package/README.md +1 -1
- package/dist/agent-runtime/tool-call-card.js +7 -3
- package/dist/brand/_chassis.d.ts +1 -1
- package/dist/brand/cue-mark.d.ts +1 -1
- package/dist/brand/cue-mark.js +1 -1
- package/dist/charts/ramps.js +1 -1
- package/dist/chat/agent-pile.js +2 -1
- package/dist/chat/ask-box.js +4 -3
- package/dist/chat/delegation-card.js +3 -2
- package/dist/chat/message-list.js +3 -2
- package/dist/chat/message.js +17 -7
- package/dist/chrome/_edge-scroller.js +2 -1
- package/dist/chrome/_status-bar.js +9 -3
- package/dist/chrome/_tabs-scroll.d.ts +1 -1
- package/dist/chrome/_tabs-scroll.js +1 -1
- package/dist/chrome/app-bar.js +9 -3
- package/dist/chrome/app-shell.js +2 -1
- package/dist/chrome/band.d.ts +18 -12
- package/dist/chrome/band.js +18 -32
- package/dist/chrome/empty-state.js +8 -4
- package/dist/chrome/eyebrow.d.ts +13 -5
- package/dist/chrome/eyebrow.js +18 -7
- package/dist/chrome/footer.d.ts +5 -0
- package/dist/chrome/footer.js +14 -3
- package/dist/chrome/navigation-menu.js +6 -3
- package/dist/chrome/page-shell.js +8 -5
- package/dist/chrome/panel.d.ts +5 -2
- package/dist/chrome/panel.js +10 -5
- package/dist/chrome/row.js +9 -5
- package/dist/chrome/scroll-area.js +6 -4
- package/dist/chrome/section-header.js +13 -4
- package/dist/chrome/segmented-control.js +14 -4
- package/dist/chrome/status-bar.js +2 -1
- package/dist/chrome/tabs.js +14 -3
- package/dist/chrome/toolbar.js +6 -3
- package/dist/chrome/tree.js +3 -2
- package/dist/color/_thumb.js +9 -3
- package/dist/color/color-area.js +1 -1
- package/dist/color/color-swatch.js +1 -1
- package/dist/configurator/_overrides.js +13 -4
- package/dist/configurator/configurator.js +4 -1
- package/dist/configurator/export-dialog.js +5 -2
- package/dist/configurator/panel-sections.js +6 -2
- package/dist/configurator/token-editor.js +4 -1
- package/dist/date/_trigger.js +4 -1
- package/dist/date/calendar.js +22 -12
- package/dist/dmx/channel-matrix.js +3 -2
- package/dist/dmx/dmx-bar.js +1 -1
- package/dist/dmx/dmx-strip.js +1 -1
- package/dist/dmx/universe-grid.js +3 -2
- package/dist/elements/activity-graph.js +3 -3
- package/dist/elements/agent-card.js +3 -3
- package/dist/elements/approval-card.js +3 -3
- package/dist/elements/artifact-card.js +2 -2
- package/dist/elements/background-inbox.js +2 -2
- package/dist/elements/canvas-split.js +2 -2
- package/dist/elements/chart.js +1 -1
- package/dist/elements/chat-panel.js +2 -2
- package/dist/elements/checkpoint-history.js +2 -2
- package/dist/elements/clamp.js +2 -1
- package/dist/elements/code-diff.js +1 -1
- package/dist/elements/code-runner.js +1 -1
- package/dist/elements/command-palette.js +6 -5
- package/dist/elements/comparison-card.js +2 -2
- package/dist/elements/composer.js +9 -8
- package/dist/elements/computer-use.js +1 -1
- package/dist/elements/confidence-marker.js +2 -1
- package/dist/elements/connection-state.js +1 -1
- package/dist/elements/context-breakdown.js +1 -1
- package/dist/elements/context-usage.js +1 -1
- package/dist/elements/conversation-search.js +4 -3
- package/dist/elements/cost-meter.js +1 -1
- package/dist/elements/data-table.js +2 -2
- package/dist/elements/day-separator.js +1 -1
- package/dist/elements/diagram.js +1 -1
- package/dist/elements/document-reference.js +3 -3
- package/dist/elements/draft-restore.js +1 -1
- package/dist/elements/edit-message.js +4 -3
- package/dist/elements/elements.css +26 -5
- package/dist/elements/elicitation-form.js +3 -3
- package/dist/elements/empty-state.js +2 -1
- package/dist/elements/error-state.js +1 -1
- package/dist/elements/feedback-dialog.js +4 -3
- package/dist/elements/file-tree.js +2 -2
- package/dist/elements/flow-graph.js +2 -2
- package/dist/elements/guardrail-notice.js +3 -3
- package/dist/elements/image-generation.js +1 -1
- package/dist/elements/inline-citation.js +3 -3
- package/dist/elements/job-progress.js +3 -3
- package/dist/elements/launcher-bubble.js +2 -2
- package/dist/elements/loading-state.js +1 -1
- package/dist/elements/map-answer.js +3 -2
- package/dist/elements/markdown.js +5 -4
- package/dist/elements/math-block.js +1 -1
- package/dist/elements/mcp-server-panel.js +3 -3
- package/dist/elements/message-attachment.js +4 -4
- package/dist/elements/message-pair.js +1 -1
- package/dist/elements/message-queue.js +2 -2
- package/dist/elements/mobile-composer.js +4 -3
- package/dist/elements/model-picker.js +3 -3
- package/dist/elements/onboarding.js +2 -2
- package/dist/elements/permission-grant.js +2 -2
- package/dist/elements/permission-scopes.js +5 -4
- package/dist/elements/prompt-library.js +7 -6
- package/dist/elements/queue-dock.js +4 -3
- package/dist/elements/quota-banner.js +1 -1
- package/dist/elements/quote-reply.js +1 -1
- package/dist/elements/read-aloud.js +2 -2
- package/dist/elements/reasoning-panel.js +2 -1
- package/dist/elements/recommendation-card.d.ts +1 -1
- package/dist/elements/recommendation-card.js +2 -2
- package/dist/elements/regenerate-menu.js +2 -2
- package/dist/elements/research-report.js +1 -1
- package/dist/elements/retrieval-chunks.js +1 -1
- package/dist/elements/revert-dock.js +5 -4
- package/dist/elements/reviewable-diff.js +1 -1
- package/dist/elements/schedule-card.js +3 -3
- package/dist/elements/score-breakdown.js +1 -1
- package/dist/elements/scroll-anchor.js +2 -2
- package/dist/elements/settings-panel.js +3 -2
- package/dist/elements/shared-conversation.js +2 -2
- package/dist/elements/sources.js +4 -3
- package/dist/elements/speaker-identity.js +1 -1
- package/dist/elements/spec-sheet.js +1 -1
- package/dist/elements/streaming-text.js +1 -1
- package/dist/elements/subagent-list.js +2 -2
- package/dist/elements/suggestions.js +1 -1
- package/dist/elements/surfaces.d.ts +1 -1
- package/dist/elements/surfaces.js +2 -1
- package/dist/elements/tail-status.js +1 -1
- package/dist/elements/terminal-block.js +1 -1
- package/dist/elements/thread-list.js +1 -1
- package/dist/elements/thread-search.js +5 -4
- package/dist/elements/timeline.js +1 -1
- package/dist/elements/todo-list.js +2 -2
- package/dist/elements/tool-call.js +4 -3
- package/dist/elements/tool-error.js +2 -2
- package/dist/elements/tool-group.js +1 -1
- package/dist/elements/tool-timeline.js +4 -3
- package/dist/elements/trace-waterfall.js +1 -1
- package/dist/elements/verdict-row.js +2 -2
- package/dist/elements/voice-conversation.js +3 -2
- package/dist/elements/web-preview.js +1 -1
- package/dist/elements/web-search.js +2 -2
- package/dist/elements/work-collapse.js +2 -1
- package/dist/flow/node-card.js +3 -2
- package/dist/flow/use-flow-theme.js +2 -1
- package/dist/forms/_chassis.d.ts +34 -6
- package/dist/forms/_chassis.js +44 -9
- package/dist/forms/_listbox.js +22 -14
- package/dist/forms/checkbox.js +13 -4
- package/dist/forms/env-var-input.js +3 -2
- package/dist/forms/field.d.ts +2 -1
- package/dist/forms/field.js +16 -5
- package/dist/forms/file-upload.js +3 -2
- package/dist/forms/input-group.js +11 -2
- package/dist/forms/multi-select.js +4 -3
- package/dist/forms/number-field.js +7 -3
- package/dist/forms/otp-field.js +15 -6
- package/dist/forms/password-input.js +4 -2
- package/dist/forms/radio-group.js +10 -4
- package/dist/forms/rating.js +2 -1
- package/dist/forms/scrub-input.js +2 -1
- package/dist/forms/search-input.js +2 -1
- package/dist/forms/select.js +10 -4
- package/dist/forms/slider.js +9 -3
- package/dist/forms/switch.js +9 -3
- package/dist/forms/tags-input.js +4 -3
- package/dist/forms/textarea.js +3 -1
- package/dist/forms/toggle-group.js +2 -1
- package/dist/forms/toggle.js +5 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/instruments/_data-row.js +2 -1
- package/dist/instruments/app-window-frame.js +1 -1
- package/dist/instruments/code-block.js +8 -2
- package/dist/instruments/group-bar.js +1 -1
- package/dist/instruments/ledger.js +6 -2
- package/dist/instruments/log-viewer.js +4 -3
- package/dist/instruments/meter.js +2 -1
- package/dist/instruments/progress.js +9 -3
- package/dist/instruments/seam-grid.js +5 -3
- package/dist/instruments/stat.js +13 -4
- package/dist/instruments/table.js +29 -10
- package/dist/instruments/terminal-frame.js +4 -2
- package/dist/instruments/usage-chart.js +1 -1
- package/dist/layout/_collapse.js +26 -5
- package/dist/layout/accordion.js +2 -1
- package/dist/layout/bento.js +7 -4
- package/dist/layout/breadcrumb.js +10 -5
- package/dist/layout/card.js +14 -7
- package/dist/layout/carousel.js +3 -2
- package/dist/layout/collapsible.js +6 -1
- package/dist/layout/container.js +2 -1
- package/dist/layout/description-list.js +4 -1
- package/dist/layout/frames.js +11 -5
- package/dist/layout/item.js +3 -2
- package/dist/layout/link.d.ts +30 -0
- package/dist/layout/link.js +22 -3
- package/dist/layout/pagination.js +8 -8
- package/dist/layout/preview.d.ts +32 -12
- package/dist/layout/preview.js +149 -40
- package/dist/layout/resizable.js +2 -1
- package/dist/layout/sidebar.js +11 -3
- package/dist/layout/stepper.js +6 -2
- package/dist/lib/cn.js +29 -2
- package/dist/midi/piano-keyboard.js +3 -2
- package/dist/midi/spectrum-visualizer.js +1 -1
- package/dist/midi/threshold-rail.js +2 -1
- package/dist/midi/timeline-ruler.js +1 -1
- package/dist/overlays/_surface.d.ts +74 -14
- package/dist/overlays/_surface.js +87 -14
- package/dist/overlays/alert-dialog.js +1 -1
- package/dist/overlays/command-palette.js +28 -9
- package/dist/overlays/dialog.d.ts +5 -0
- package/dist/overlays/dialog.js +6 -1
- package/dist/overlays/drawer.js +8 -1
- package/dist/overlays/hover-card.js +3 -1
- package/dist/overlays/info-tip.js +2 -1
- package/dist/overlays/menubar.js +3 -1
- package/dist/overlays/popover.js +3 -1
- package/dist/overlays/toast.js +14 -6
- package/dist/overlays/tooltip.js +3 -1
- package/dist/primitives/avatar.js +6 -2
- package/dist/primitives/button.d.ts +16 -1
- package/dist/primitives/button.js +44 -12
- package/dist/primitives/chip.d.ts +11 -29
- package/dist/primitives/chip.js +40 -50
- package/dist/primitives/icon-button.d.ts +1 -1
- package/dist/primitives/kbd.d.ts +6 -0
- package/dist/primitives/kbd.js +10 -1
- package/dist/primitives/skeleton.js +2 -1
- package/dist/system/_focus-ring-field.js +29 -0
- package/dist/system/_focus-ring.js +125 -0
- package/dist/system/_paint-glow.js +22 -3
- package/dist/system/_paint-rest-shade.js +32 -0
- package/dist/system/_paint-rim.js +22 -4
- package/dist/system/_paint-stroke-surface-1.js +1 -1
- package/dist/system/_paint-stroke-surface-2.js +14 -1
- package/dist/system/_paint-texture.js +5 -2
- package/dist/system/_style-accordion-rule.js +32 -0
- package/dist/system/_style-app-bar.js +65 -0
- package/dist/system/_style-avatar.js +20 -0
- package/dist/system/_style-band.js +57 -0
- package/dist/system/_style-body-leading.js +19 -0
- package/dist/system/_style-body-size.js +30 -0
- package/dist/system/_style-body-weight.js +24 -0
- package/dist/system/_style-body.js +32 -0
- package/dist/system/_style-caption-ink.js +17 -0
- package/dist/system/_style-caption-size.js +19 -0
- package/dist/system/_style-caption-weight.js +18 -0
- package/dist/system/_style-caption.js +19 -0
- package/dist/system/_style-card-gap.js +14 -0
- package/dist/system/_style-card-pad.js +43 -0
- package/dist/system/_style-cell.js +18 -0
- package/dist/system/_style-check-glyph.js +14 -0
- package/dist/system/_style-check.js +40 -0
- package/dist/system/_style-chip.js +143 -0
- package/dist/system/_style-choice-gap.js +15 -0
- package/dist/system/_style-code.js +13 -0
- package/dist/system/_style-collapse.js +94 -0
- package/dist/system/_style-control-face.js +29 -0
- package/dist/system/_style-control-gap.js +14 -0
- package/dist/system/_style-control-label.js +29 -0
- package/dist/system/_style-control-step.js +22 -0
- package/dist/system/_style-control.js +76 -0
- package/dist/system/_style-crumb.js +44 -0
- package/dist/system/_style-data-face.js +28 -0
- package/dist/system/_style-day.js +25 -0
- package/dist/system/_style-description.js +23 -0
- package/dist/system/_style-disabled.js +70 -0
- package/dist/system/_style-disclosure.js +21 -0
- package/dist/system/_style-empty-state.js +42 -0
- package/dist/system/_style-eyebrow.js +43 -0
- package/dist/system/_style-field-chassis.js +38 -0
- package/dist/system/_style-field-gap.js +12 -0
- package/dist/system/_style-footer-rule.js +47 -0
- package/dist/system/_style-glyph-ink.js +20 -0
- package/dist/system/_style-glyph-opacity.js +20 -0
- package/dist/system/_style-glyph-size.js +21 -0
- package/dist/system/_style-group-gap.js +15 -0
- package/dist/system/_style-group-label-pad.js +14 -0
- package/dist/system/_style-group-label.js +24 -0
- package/dist/system/_style-gutter.js +17 -0
- package/dist/system/_style-help-ink.js +14 -0
- package/dist/system/_style-help.js +38 -0
- package/dist/system/_style-hover-card-width.js +15 -0
- package/dist/system/_style-input-face.js +34 -0
- package/dist/system/_style-kbd.js +58 -0
- package/dist/system/_style-label-case.js +36 -0
- package/dist/system/_style-label-face.js +32 -0
- package/dist/system/_style-label-ink.js +29 -0
- package/dist/system/_style-label-leading.js +14 -0
- package/dist/system/_style-label-size.js +36 -0
- package/dist/system/_style-label-tracking.js +45 -0
- package/dist/system/_style-label-weight.js +40 -0
- package/dist/system/_style-lede.js +49 -0
- package/dist/system/_style-link.js +58 -0
- package/dist/system/_style-menu.js +43 -0
- package/dist/system/_style-meter.js +15 -0
- package/dist/system/_style-nav-item.js +41 -0
- package/dist/system/_style-nav-menu.js +48 -0
- package/dist/system/_style-nav-voice.js +43 -0
- package/dist/system/_style-option.js +99 -0
- package/dist/system/_style-otp.js +15 -0
- package/dist/system/_style-outline-hover.js +18 -0
- package/dist/system/_style-overlay-title.js +35 -0
- package/dist/system/_style-page-title.js +48 -0
- package/dist/system/_style-page.js +17 -0
- package/dist/system/_style-palette.js +18 -0
- package/dist/system/_style-panel.js +21 -0
- package/dist/system/_style-popover-pad.js +13 -0
- package/dist/system/_style-popover-width.js +15 -0
- package/dist/system/_style-quiet-ink.js +13 -0
- package/dist/system/_style-radio.js +19 -0
- package/dist/system/_style-row-disabled.js +17 -0
- package/dist/system/_style-row-pad.js +13 -0
- package/dist/system/_style-row.js +30 -0
- package/dist/system/_style-scrollbar.js +19 -0
- package/dist/system/_style-seam.js +43 -0
- package/dist/system/_style-section-rule.js +26 -0
- package/dist/system/_style-segment-pad.js +15 -0
- package/dist/system/_style-segment.js +30 -0
- package/dist/system/_style-segmented-control.js +86 -0
- package/dist/system/_style-selected.js +36 -0
- package/dist/system/_style-skeleton.js +15 -0
- package/dist/system/_style-slider.js +26 -0
- package/dist/system/_style-stage-marks.js +26 -0
- package/dist/system/_style-stat.js +31 -0
- package/dist/system/_style-stepper.js +16 -0
- package/dist/system/_style-switch.js +26 -0
- package/dist/system/_style-tab-hover.js +15 -0
- package/dist/system/_style-tab.js +71 -0
- package/dist/system/_style-text-focus.js +26 -0
- package/dist/system/_style-textarea.js +21 -0
- package/dist/system/_style-title.js +37 -0
- package/dist/system/_style-toast.js +22 -0
- package/dist/system/_style-toggle.js +50 -0
- package/dist/system/_style-toolbar.js +23 -0
- package/dist/system/_style-tooltip.js +46 -0
- package/dist/system/density.d.ts +15 -5
- package/dist/system/density.js +188 -25
- package/dist/system/index.d.ts +2 -2
- package/dist/system/index.js +2 -2
- package/dist/system/overrides.d.ts +1 -0
- package/dist/system/overrides.js +151 -3
- package/dist/system/portal.d.ts +3 -2
- package/dist/system/portal.js +22 -10
- package/dist/system/prepaint.d.ts +21 -5
- package/dist/system/prepaint.js +3 -1
- package/dist/system/published.d.ts +1 -0
- package/dist/system/published.js +131 -0
- package/dist/system/theme-provider.d.ts +118 -21
- package/dist/system/theme-provider.js +362 -73
- package/dist/system/theme-registry.d.ts +2 -1
- package/dist/system/theme-registry.js +27 -10
- package/dist/system/use-density.js +4 -3
- package/dist/system/use-theme.d.ts +5 -2
- package/dist/system/use-theme.js +7 -4
- package/dist/system/vocabulary.js +2 -2
- package/dist/theming/create-theme.js +12 -6
- package/dist/theming/serialize.d.ts +34 -2
- package/dist/theming/serialize.js +86 -4
- package/manifest/components/accordion.json +29 -2
- package/manifest/components/agent-pile.json +3 -0
- package/manifest/components/alert-dialog.json +36 -3
- package/manifest/components/app-bar.json +61 -2
- package/manifest/components/app-shell.json +5 -0
- package/manifest/components/ask-box.json +3 -1
- package/manifest/components/autocomplete.json +85 -1
- package/manifest/components/avatar-group.json +7 -0
- package/manifest/components/avatar.json +7 -0
- package/manifest/components/band.json +7 -3
- package/manifest/components/bento.json +12 -1
- package/manifest/components/breadcrumb.json +12 -0
- package/manifest/components/button.json +43 -4
- package/manifest/components/calendar.json +13 -0
- package/manifest/components/card.json +23 -1
- package/manifest/components/carousel.json +4 -1
- package/manifest/components/channel-matrix.json +37 -3
- package/manifest/components/chart-tooltip-content.json +35 -3
- package/manifest/components/chat-empty-state.json +3 -1
- package/manifest/components/checkbox-group.json +36 -1
- package/manifest/components/checkbox.json +36 -1
- package/manifest/components/chip.json +22 -1
- package/manifest/components/clamp.json +3 -1
- package/manifest/components/code-block.json +10 -1
- package/manifest/components/collapsible.json +35 -2
- package/manifest/components/color-area.json +4 -2
- package/manifest/components/color-field.json +29 -0
- package/manifest/components/color-picker.json +29 -0
- package/manifest/components/color-slider.json +3 -1
- package/manifest/components/colors-section.json +9 -1
- package/manifest/components/combobox.json +85 -1
- package/manifest/components/command-palette.json +39 -3
- package/manifest/components/composer-actions.json +3 -0
- package/manifest/components/composer-attach-button.json +3 -0
- package/manifest/components/composer-attachment-chip.json +3 -0
- package/manifest/components/composer-attachments.json +3 -0
- package/manifest/components/composer-bar.json +3 -0
- package/manifest/components/composer-command-item.json +3 -0
- package/manifest/components/composer-context.json +3 -0
- package/manifest/components/composer-input.json +3 -0
- package/manifest/components/composer-menu-item.json +3 -0
- package/manifest/components/composer-menu.json +3 -0
- package/manifest/components/composer-model-item.json +3 -0
- package/manifest/components/composer-model-trigger.json +3 -0
- package/manifest/components/composer-person-item.json +3 -0
- package/manifest/components/composer-send.json +3 -0
- package/manifest/components/composer-toolbar.json +3 -0
- package/manifest/components/composer-voice-button.json +3 -0
- package/manifest/components/composer-voice.json +3 -0
- package/manifest/components/composer.json +29 -0
- package/manifest/components/confidence-marker.json +3 -1
- package/manifest/components/container.json +2 -1
- package/manifest/components/context-menu.json +35 -3
- package/manifest/components/conversation-search.json +3 -1
- package/manifest/components/cue-mark.json +2 -2
- package/manifest/components/cue-portal-frame.json +1 -1
- package/manifest/components/data-row.json +3 -1
- package/manifest/components/data-tree.json +3 -1
- package/manifest/components/date-field.json +28 -0
- package/manifest/components/date-picker.json +32 -0
- package/manifest/components/date-range-picker.json +32 -0
- package/manifest/components/delegation-card.json +3 -1
- package/manifest/components/density.json +15 -7
- package/manifest/components/description-list.json +6 -1
- package/manifest/components/dialog.json +37 -3
- package/manifest/components/disclosure.json +35 -2
- package/manifest/components/dmx-bar.json +34 -3
- package/manifest/components/dmx-strip.json +34 -3
- package/manifest/components/drawer.json +36 -3
- package/manifest/components/dropdown-menu.json +35 -3
- package/manifest/components/edit-message.json +3 -1
- package/manifest/components/elements-command-palette.json +3 -1
- package/manifest/components/elements-composer.json +3 -0
- package/manifest/components/empty-state-composer.json +3 -1
- package/manifest/components/empty-state-greeting.json +3 -1
- package/manifest/components/empty-state-suggestion.json +3 -1
- package/manifest/components/empty-state-suggestions.json +3 -1
- package/manifest/components/empty-state.json +13 -0
- package/manifest/components/env-var-input.json +28 -0
- package/manifest/components/export-dialog.json +6 -1
- package/manifest/components/eyebrow.json +13 -2
- package/manifest/components/feedback-dialog.json +3 -0
- package/manifest/components/field-description.json +15 -0
- package/manifest/components/field-error.json +15 -0
- package/manifest/components/field-label.json +16 -1
- package/manifest/components/field.json +15 -0
- package/manifest/components/file-upload.json +3 -0
- package/manifest/components/footer.json +14 -1
- package/manifest/components/frames.json +14 -1
- package/manifest/components/hover-card.json +37 -3
- package/manifest/components/info-tip.json +3 -0
- package/manifest/components/input-group.json +31 -0
- package/manifest/components/input.json +29 -0
- package/manifest/components/item.json +3 -1
- package/manifest/components/kbd.json +12 -1
- package/manifest/components/ledger.json +9 -2
- package/manifest/components/link.json +33 -0
- package/manifest/components/log-viewer.json +3 -0
- package/manifest/components/map-answer.json +3 -1
- package/manifest/components/markdown-text.json +3 -0
- package/manifest/components/menubar.json +38 -4
- package/manifest/components/message-list.json +3 -0
- package/manifest/components/message.json +6 -1
- package/manifest/components/meter.json +1 -0
- package/manifest/components/mobile-composer.json +3 -1
- package/manifest/components/multi-select.json +86 -1
- package/manifest/components/musical-time-input.json +29 -0
- package/manifest/components/navigation-menu.json +48 -3
- package/manifest/components/node-card.json +3 -0
- package/manifest/components/number-field.json +30 -0
- package/manifest/components/otp-field.json +29 -0
- package/manifest/components/page-shell.json +14 -0
- package/manifest/components/pagination.json +22 -0
- package/manifest/components/panel-header.json +13 -0
- package/manifest/components/panel.json +14 -1
- package/manifest/components/password-input.json +28 -0
- package/manifest/components/permission-scopes.json +3 -1
- package/manifest/components/piano-keyboard.json +3 -0
- package/manifest/components/popover.json +37 -3
- package/manifest/components/preset-section.json +9 -1
- package/manifest/components/preview.json +24 -10
- package/manifest/components/progress.json +10 -1
- package/manifest/components/prompt-library.json +3 -1
- package/manifest/components/queue-dock.json +3 -1
- package/manifest/components/radio-group.json +14 -0
- package/manifest/components/radio.json +14 -0
- package/manifest/components/rating.json +4 -1
- package/manifest/components/reasoning-panel.json +3 -1
- package/manifest/components/recommendation-card.json +1 -1
- package/manifest/components/resizable.json +4 -1
- package/manifest/components/revert-dock.json +3 -1
- package/manifest/components/row.json +8 -1
- package/manifest/components/scroll-area.json +6 -2
- package/manifest/components/scrollable-tabs-list.json +21 -0
- package/manifest/components/scrub-input.json +28 -0
- package/manifest/components/seam-cell.json +1 -0
- package/manifest/components/seam-grid.json +1 -0
- package/manifest/components/seam-list.json +8 -1
- package/manifest/components/search-input.json +28 -0
- package/manifest/components/section-header.json +15 -2
- package/manifest/components/segmented-control.json +17 -0
- package/manifest/components/select.json +42 -0
- package/manifest/components/settings-panel.json +3 -0
- package/manifest/components/shape-section.json +9 -1
- package/manifest/components/sheet.json +35 -3
- package/manifest/components/shimmer-label.json +3 -0
- package/manifest/components/sidebar.json +19 -2
- package/manifest/components/skeleton.json +2 -0
- package/manifest/components/slider.json +16 -0
- package/manifest/components/sources.json +3 -1
- package/manifest/components/stat.json +17 -0
- package/manifest/components/status-bar.json +4 -0
- package/manifest/components/stepper.json +8 -0
- package/manifest/components/swap-label.json +3 -0
- package/manifest/components/switch.json +30 -0
- package/manifest/components/table-scroll-region.json +22 -2
- package/manifest/components/table.json +22 -2
- package/manifest/components/tabs.json +22 -1
- package/manifest/components/tags-input.json +86 -1
- package/manifest/components/terminal-frame.json +3 -0
- package/manifest/components/textarea.json +31 -0
- package/manifest/components/theme-configurator.json +35 -3
- package/manifest/components/theme-provider.json +31 -19
- package/manifest/components/thread-search.json +3 -1
- package/manifest/components/threshold-rail.json +3 -0
- package/manifest/components/time-field.json +28 -0
- package/manifest/components/toast.json +39 -2
- package/manifest/components/toggle-group.json +2 -1
- package/manifest/components/toggle.json +32 -0
- package/manifest/components/token-editor.json +6 -1
- package/manifest/components/tool-call-card.json +9 -2
- package/manifest/components/tool-call.json +3 -1
- package/manifest/components/tool-timeline.json +3 -1
- package/manifest/components/toolbar.json +22 -1
- package/manifest/components/tooltip.json +42 -3
- package/manifest/components/tree-visibility-toggle.json +3 -0
- package/manifest/components/tree.json +3 -0
- package/manifest/components/universe-grid.json +3 -0
- package/manifest/components/voice-conversation.json +3 -0
- package/manifest/components/work-collapse.json +3 -1
- package/manifest/fixtures.json +15 -0
- package/manifest/manifest.json +210 -190
- package/manifest/tokens.json +395 -4
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -74,7 +74,7 @@ export function App({ children }: { children: React.ReactNode }) {
|
|
|
74
74
|
}
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
The
|
|
77
|
+
The ten packs, where each was measured from and what each refuses:
|
|
78
78
|
<https://ui.cueplusplus.com/docs/paint>. Serving a nonce-based Content-Security-Policy? Read
|
|
79
79
|
[§4.5 of `CONSUMING.md`](https://github.com/cueplusplus/cue-ui/blob/main/docs/CONSUMING.md#45-content-security-policy-the-nonce-prop-and-what-it-does-not-reach)
|
|
80
80
|
before you ship it — `paint="grain"` alone needs `img-src data:`.
|
|
@@ -2,8 +2,12 @@
|
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
3
|
import { AGENT_ROOT_COLOR, agentColor } from "../chat/agent-color.js";
|
|
4
4
|
import { CheckGlyph } from "../chat/_glyphs.js";
|
|
5
|
+
import { FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
|
|
6
|
+
import { LABEL_FACE } from "../system/_style-label-face.js";
|
|
5
7
|
import { Chip } from "../primitives/chip.js";
|
|
6
8
|
import { Spinner } from "../primitives/spinner.js";
|
|
9
|
+
import { LABEL_CASE } from "../system/_style-label-case.js";
|
|
10
|
+
import { LABEL_TRACKING } from "../system/_style-label-tracking.js";
|
|
7
11
|
import * as React from "react";
|
|
8
12
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
13
|
//#region src/agent-runtime/tool-call-card.tsx
|
|
@@ -23,9 +27,9 @@ const DANGER_TONES = {
|
|
|
23
27
|
* card with nothing to disclose draws instead — the two must sit at exactly the
|
|
24
28
|
* same height and ink, or a list of calls ripples as some of them gain detail.
|
|
25
29
|
*/
|
|
26
|
-
const HEADER =
|
|
30
|
+
const HEADER = `flex min-w-0 items-center gap-(--cue-space-2) border-0 bg-transparent p-0 text-start font-mono text-(length:--cue-text-ui) text-fg-muted outline-none ${FOCUS_RING_OFFSET_2}`;
|
|
27
31
|
/** The label over a block in the body, in the same eyebrow as a message header. */
|
|
28
|
-
const EYEBROW =
|
|
32
|
+
const EYEBROW = `${LABEL_FACE} text-(length:--cue-text-micro) ${LABEL_TRACKING} ${LABEL_CASE} text-fg-subtle`;
|
|
29
33
|
/**
|
|
30
34
|
* An LLM's own tool call, shown while it runs and after.
|
|
31
35
|
*
|
|
@@ -96,7 +100,7 @@ const ToolCallCard = React.forwardRef(function ToolCallCard({ className, tool, a
|
|
|
96
100
|
"data-status": status,
|
|
97
101
|
"data-state": hasDetail ? open ? "open" : "closed" : void 0,
|
|
98
102
|
"data-danger": danger,
|
|
99
|
-
className: cn("flex min-w-0 flex-col gap-(--cue-space-2) rounded-
|
|
103
|
+
className: cn("flex min-w-0 flex-col gap-(--cue-space-2) rounded-control border border-border px-(--cue-space-3) py-(--cue-space-2)", className),
|
|
100
104
|
style: {
|
|
101
105
|
"--agent-color": color,
|
|
102
106
|
...style
|
package/dist/brand/_chassis.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ type BrandSize = "sm" | "md" | "lg";
|
|
|
22
22
|
*
|
|
23
23
|
* Not a light/dark pair. The source artwork ships two files that hard-code
|
|
24
24
|
* `white`, `black` and `#1E1E1E`; this library ships one component that reads
|
|
25
|
-
* the token layer, so a single element is correct in
|
|
25
|
+
* the token layer, so a single element is correct in every preset and both
|
|
26
26
|
* modes without anybody choosing a file.
|
|
27
27
|
*/
|
|
28
28
|
type BrandTone = "inherit" | "fg" | "accent";
|
package/dist/brand/cue-mark.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ interface CueMarkProps extends BrandAssetProps {}
|
|
|
8
8
|
* Square at every size, drawn from the artwork's own path data, and painted
|
|
9
9
|
* entirely from tokens — the disc takes the tone's ink and the two "+" glyphs
|
|
10
10
|
* take the ground, which is exactly the relationship the two shipped SVGs
|
|
11
|
-
* encode by hand. One element is therefore correct in
|
|
11
|
+
* encode by hand. One element is therefore correct in every preset and
|
|
12
12
|
* both modes, and there is no light/dark variant to pick.
|
|
13
13
|
*
|
|
14
14
|
* The two glyphs are {@link Plussie}'s eyes; both components read one geometry
|
package/dist/brand/cue-mark.js
CHANGED
|
@@ -10,7 +10,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
* Square at every size, drawn from the artwork's own path data, and painted
|
|
11
11
|
* entirely from tokens — the disc takes the tone's ink and the two "+" glyphs
|
|
12
12
|
* take the ground, which is exactly the relationship the two shipped SVGs
|
|
13
|
-
* encode by hand. One element is therefore correct in
|
|
13
|
+
* encode by hand. One element is therefore correct in every preset and
|
|
14
14
|
* both modes, and there is no light/dark variant to pick.
|
|
15
15
|
*
|
|
16
16
|
* The two glyphs are {@link Plussie}'s eyes; both components read one geometry
|
package/dist/charts/ramps.js
CHANGED
|
@@ -600,7 +600,7 @@ const ChartRamp = React.forwardRef(function ChartRamp({ className, colors, label
|
|
|
600
600
|
role: "img",
|
|
601
601
|
"aria-label": label,
|
|
602
602
|
"data-slot": "chart-ramp",
|
|
603
|
-
className: cn("flex w-full overflow-hidden rounded-
|
|
603
|
+
className: cn("flex w-full overflow-hidden rounded-control", className),
|
|
604
604
|
style: { height: toRem(height) },
|
|
605
605
|
...elementProps,
|
|
606
606
|
children: colors.map((color, index) => /* @__PURE__ */ jsx("span", {
|
package/dist/chat/agent-pile.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
3
|
import { agentColor } from "./agent-color.js";
|
|
4
4
|
import { CrownGlyph } from "./_glyphs.js";
|
|
5
|
+
import { FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
|
|
5
6
|
import * as React from "react";
|
|
6
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
//#region src/chat/agent-pile.tsx
|
|
@@ -62,7 +63,7 @@ const AgentPile = React.forwardRef(function AgentPile({ className, agents, root,
|
|
|
62
63
|
agent.working === true ? "working" : null,
|
|
63
64
|
agent.asking === true ? "asking a question" : null
|
|
64
65
|
].filter(Boolean).join(" · ");
|
|
65
|
-
const avatarClasses = cn("relative flex shrink-0 items-center justify-center rounded-full border border-(--agent-color) bg-surface-2 font-mono leading-none text-(--agent-color) uppercase outline-none", AVATAR_SIZES[size], selected === agent.slug ? "ring-2 ring-(--agent-color)" : null, onSelect === void 0 ? null :
|
|
66
|
+
const avatarClasses = cn("relative flex shrink-0 items-center justify-center rounded-full border border-(--agent-color) bg-surface-2 font-mono leading-none text-(--agent-color) uppercase outline-none", AVATAR_SIZES[size], selected === agent.slug ? "ring-2 ring-(--agent-color)" : null, onSelect === void 0 ? null : `cursor-pointer transition-colors hover:bg-surface-3 ${FOCUS_RING_OFFSET_2}`);
|
|
66
67
|
const initial = name.slice(0, 1).toUpperCase();
|
|
67
68
|
return /* @__PURE__ */ jsxs("span", {
|
|
68
69
|
"data-slot": "agent-pile-item",
|
package/dist/chat/ask-box.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
3
|
import { AGENT_ROOT_COLOR, agentColor } from "./agent-color.js";
|
|
4
4
|
import { CheckGlyph } from "./_glyphs.js";
|
|
5
|
+
import { FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
|
|
5
6
|
import { Checkbox } from "../forms/checkbox.js";
|
|
6
7
|
import { Input } from "../forms/input.js";
|
|
7
8
|
import { NumberField } from "../forms/number-field.js";
|
|
@@ -114,14 +115,14 @@ const AskBox = React.forwardRef(function AskBox({ className, question, kind = "t
|
|
|
114
115
|
"data-slot": "ask-box",
|
|
115
116
|
"data-answered": "true",
|
|
116
117
|
"data-kind": kind,
|
|
117
|
-
className: cn("flex min-w-0 flex-col rounded-
|
|
118
|
+
className: cn("flex min-w-0 flex-col rounded-surface border border-border bg-surface-1 px-(--cue-space-4) py-(--cue-space-3)", className),
|
|
118
119
|
style: boxStyle,
|
|
119
120
|
...elementProps,
|
|
120
121
|
children: [/* @__PURE__ */ jsxs("button", {
|
|
121
122
|
type: "button",
|
|
122
123
|
"data-slot": "ask-box-summary",
|
|
123
124
|
"aria-expanded": open,
|
|
124
|
-
className:
|
|
125
|
+
className: `relative flex min-w-0 cursor-pointer items-center gap-(--cue-space-2) border-0 bg-transparent p-0 text-start font-mono text-(length:--cue-text-ui) outline-none ${FOCUS_RING_OFFSET_2}`,
|
|
125
126
|
onClick: () => setOpen((current) => !current),
|
|
126
127
|
children: [
|
|
127
128
|
/* @__PURE__ */ jsx("span", {
|
|
@@ -304,7 +305,7 @@ const AskBox = React.forwardRef(function AskBox({ className, question, kind = "t
|
|
|
304
305
|
"data-slot": "ask-box",
|
|
305
306
|
"data-answered": "false",
|
|
306
307
|
"data-kind": kind,
|
|
307
|
-
className: cn("flex min-w-0 flex-col gap-(--cue-space-3) rounded-
|
|
308
|
+
className: cn("flex min-w-0 flex-col gap-(--cue-space-3) rounded-surface border border-(--agent-color) bg-surface-1 px-(--cue-space-4) py-(--cue-space-3)", className),
|
|
308
309
|
style: boxStyle,
|
|
309
310
|
...elementProps,
|
|
310
311
|
children: [
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
3
|
import { agentColor } from "./agent-color.js";
|
|
4
4
|
import { CheckGlyph } from "./_glyphs.js";
|
|
5
|
+
import { FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
|
|
5
6
|
import { Spinner } from "../primitives/spinner.js";
|
|
6
7
|
import * as React from "react";
|
|
7
8
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -52,7 +53,7 @@ const DelegationCard = React.forwardRef(function DelegationCard({ className, age
|
|
|
52
53
|
"data-direction": direction,
|
|
53
54
|
"data-state": open ? "open" : "closed",
|
|
54
55
|
"data-status": status,
|
|
55
|
-
className: cn("flex min-w-0 flex-col gap-(--cue-space-2) rounded-
|
|
56
|
+
className: cn("flex min-w-0 flex-col gap-(--cue-space-2) rounded-control border border-border px-(--cue-space-3) py-(--cue-space-2)", className),
|
|
56
57
|
style: {
|
|
57
58
|
"--agent-color": color,
|
|
58
59
|
...style
|
|
@@ -64,7 +65,7 @@ const DelegationCard = React.forwardRef(function DelegationCard({ className, age
|
|
|
64
65
|
"data-slot": "delegation-card-trigger",
|
|
65
66
|
"aria-expanded": open,
|
|
66
67
|
"aria-controls": open ? bodyId : void 0,
|
|
67
|
-
className:
|
|
68
|
+
className: `flex min-w-0 cursor-pointer items-center gap-(--cue-space-2) border-0 bg-transparent p-0 text-start font-mono text-(length:--cue-text-ui) text-fg-muted outline-none ${FOCUS_RING_OFFSET_2}`,
|
|
68
69
|
onClick: toggle,
|
|
69
70
|
children: [
|
|
70
71
|
/* @__PURE__ */ jsx("span", {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
3
|
import { ChevronDownGlyph } from "./_glyphs.js";
|
|
4
|
+
import { FOCUS_RING, FOCUS_RING_INSET_2 } from "../system/_focus-ring.js";
|
|
4
5
|
import { useIsomorphicLayoutEffect } from "../system/use-isomorphic-layout-effect.js";
|
|
5
6
|
import { ELEVATION_2 } from "../system/_paint-elevation.js";
|
|
6
7
|
import * as React from "react";
|
|
@@ -117,7 +118,7 @@ const MessageList = React.forwardRef(function MessageList({ className, children,
|
|
|
117
118
|
"aria-label": ariaLabel,
|
|
118
119
|
tabIndex: 0,
|
|
119
120
|
"data-slot": "message-list-scroller",
|
|
120
|
-
className:
|
|
121
|
+
className: `min-h-0 flex-1 overflow-y-auto outline-none ${FOCUS_RING_INSET_2}`,
|
|
121
122
|
onScroll,
|
|
122
123
|
children: count === 0 ? /* @__PURE__ */ jsx("div", {
|
|
123
124
|
"data-slot": "message-list-empty",
|
|
@@ -132,7 +133,7 @@ const MessageList = React.forwardRef(function MessageList({ className, children,
|
|
|
132
133
|
}), behind ? /* @__PURE__ */ jsxs("button", {
|
|
133
134
|
type: "button",
|
|
134
135
|
"data-slot": "message-list-jump",
|
|
135
|
-
className: `absolute bottom-(--cue-space-4) left-1/2 flex -translate-x-1/2 cursor-pointer items-center gap-(--cue-space-2) rounded-
|
|
136
|
+
className: `absolute bottom-(--cue-space-4) left-1/2 flex -translate-x-1/2 cursor-pointer items-center gap-(--cue-space-2) rounded-control border border-border-overlay bg-surface-2 px-(--cue-space-4) py-(--cue-space-2) font-mono text-(length:--cue-text-label) text-fg ${ELEVATION_2} outline-none hover:border-accent hover:text-accent ${FOCUS_RING}`,
|
|
136
137
|
onClick: jumpToLatest,
|
|
137
138
|
children: [/* @__PURE__ */ jsx(ChevronDownGlyph, { className: "size-icon-sm" }), jumpLabel]
|
|
138
139
|
}) : null]
|
package/dist/chat/message.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
2
|
import { AGENT_ROOT_COLOR, agentColor } from "./agent-color.js";
|
|
3
|
+
import { LABEL_FACE } from "../system/_style-label-face.js";
|
|
4
|
+
import { LABEL_CASE } from "../system/_style-label-case.js";
|
|
5
|
+
import { LABEL_TRACKING } from "../system/_style-label-tracking.js";
|
|
3
6
|
import * as React from "react";
|
|
4
7
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
8
|
//#region src/chat/message.tsx
|
|
@@ -9,14 +12,21 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
9
12
|
*
|
|
10
13
|
* The tight corner is the tail, and it points at whoever is speaking: bottom
|
|
11
14
|
* right for the right-aligned user turn, bottom left for the agent's. Written
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
+
* as the overlay rung with one corner overridden to the control rung, rather
|
|
16
|
+
* than a `[border-radius:…]` arbitrary value reading `var(--radius-*)`
|
|
17
|
+
* directly — a `--radius-*` reader bypasses the compiled bridge utilities
|
|
18
|
+
* `rounded-control`/`rounded-overlay` resolve to, so it neither shows up in
|
|
19
|
+
* the class-token scan that guards this bridge nor tightens with
|
|
20
|
+
* `--cue-radius-scale` through the same path every other radius in this
|
|
21
|
+
* system does. `rounded-br-control`/`rounded-bl-control` are ordinary
|
|
22
|
+
* per-corner bridge utilities (`packages/tokens/build.mjs`'s `SIDES` table
|
|
23
|
+
* covers every corner, not just the four edges), so the four-value shorthand
|
|
24
|
+
* upstream Tailwind has no plain form for is two ordinary utility classes.
|
|
15
25
|
*/
|
|
16
26
|
const ROLE_RADII = {
|
|
17
|
-
user: "
|
|
18
|
-
agent: "
|
|
19
|
-
system: "rounded-
|
|
27
|
+
user: "rounded-overlay rounded-br-control",
|
|
28
|
+
agent: "rounded-overlay rounded-bl-control",
|
|
29
|
+
system: "rounded-control"
|
|
20
30
|
};
|
|
21
31
|
/**
|
|
22
32
|
* Fill per role.
|
|
@@ -72,7 +82,7 @@ const Message = React.forwardRef(function Message({ className, role = "agent", a
|
|
|
72
82
|
children: [
|
|
73
83
|
hasHeader ? /* @__PURE__ */ jsxs("div", {
|
|
74
84
|
"data-slot": "message-header",
|
|
75
|
-
className: "flex min-w-0 items-baseline justify-between gap-(--cue-space-3)
|
|
85
|
+
className: cn("flex min-w-0 items-baseline justify-between gap-(--cue-space-3) text-(length:--cue-text-micro)", LABEL_FACE, LABEL_TRACKING, LABEL_CASE),
|
|
76
86
|
children: [name === void 0 ? null : /* @__PURE__ */ jsx("span", {
|
|
77
87
|
"data-slot": "message-author",
|
|
78
88
|
className: cn("min-w-0 truncate", role === "user" ? "text-accent-fg opacity-70" : "text-(--agent-color)"),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING_INSET_2 } from "../system/_focus-ring.js";
|
|
3
4
|
import { computeScrollEdges, edgeFadeMask } from "./_tabs-scroll.js";
|
|
4
5
|
import { useComposedRefs } from "../lib/compose.js";
|
|
5
6
|
import { ChevronLeftGlyph, ChevronRightGlyph } from "./_glyphs.js";
|
|
@@ -95,7 +96,7 @@ function useEdgeScroll(enabled = true) {
|
|
|
95
96
|
* `relative` frame.
|
|
96
97
|
*/
|
|
97
98
|
function EdgeChevrons({ edges, onNudge, previousLabel, nextLabel, className }) {
|
|
98
|
-
const base =
|
|
99
|
+
const base = `absolute inset-y-0 z-10 flex w-(--cue-space-5) cursor-pointer items-center justify-center text-fg-muted outline-none hover:text-fg ${FOCUS_RING_INSET_2}`;
|
|
99
100
|
return /* @__PURE__ */ jsxs(Fragment, { children: [edges.start ? /* @__PURE__ */ jsx("button", {
|
|
100
101
|
type: "button",
|
|
101
102
|
"data-slot": "edge-scroll-previous",
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { FOCUS_RING_INSET } from "../system/_focus-ring.js";
|
|
3
|
+
import { LABEL_FACE } from "../system/_style-label-face.js";
|
|
2
4
|
//#region src/chrome/_status-bar.ts
|
|
3
5
|
/**
|
|
4
6
|
* The class half of `StatusBar` (see `./status-bar.tsx`).
|
|
@@ -42,8 +44,12 @@ const ITEM_BASE = "inline-flex min-w-0 shrink-0 items-center gap-(--cue-space-2)
|
|
|
42
44
|
*
|
|
43
45
|
* The reset first: a `<button>` arrives with a border, a ground, a gutter and a
|
|
44
46
|
* font of the user agent's choosing, and none of them belong in a 24px strip.
|
|
45
|
-
* `text-(length:--cue-text-label)` and
|
|
46
|
-
* inherited for the same reason — form controls do not inherit type.
|
|
47
|
+
* `text-(length:--cue-text-label)` and the face are re-declared rather than
|
|
48
|
+
* inherited for the same reason — form controls do not inherit type. The face
|
|
49
|
+
* is the bar's own, {@link LABEL_FACE}, and not a fixed `font-mono`: the bar
|
|
50
|
+
* reads `--cue-style-label-face`, and a restatement that did not read it too
|
|
51
|
+
* left every control mono while the readings beside it went sans under a
|
|
52
|
+
* sans-voiced Look (tender, kiln, porcelain) — one bar in two faces.
|
|
47
53
|
*
|
|
48
54
|
* `h-full` is the VS Code reading of a status item and the one that makes hover
|
|
49
55
|
* legible: the fill is the height of the bar, not the height of the words, so a
|
|
@@ -58,7 +64,7 @@ const ITEM_BASE = "inline-flex min-w-0 shrink-0 items-center gap-(--cue-space-2)
|
|
|
58
64
|
* never match `:disabled` — the pseudo-class is defined on form controls — so
|
|
59
65
|
* without the data twin a disabled link would read as perfectly live.
|
|
60
66
|
*/
|
|
61
|
-
const INTERACTIVE_CHASSIS =
|
|
67
|
+
const INTERACTIVE_CHASSIS = `h-full cursor-pointer border-0 bg-transparent py-0 ${LABEL_FACE} text-(length:--cue-text-label) outline-none transition-colors duration-150 ${FOCUS_RING_INSET} disabled:pointer-events-none disabled:opacity-40 data-[disabled]:pointer-events-none data-[disabled]:opacity-40 motion-reduce:transition-none`;
|
|
62
68
|
/**
|
|
63
69
|
* A quiet control's gutter, and the negative margin that pays for it.
|
|
64
70
|
*
|
|
@@ -56,7 +56,7 @@ declare function computeScrollEdges(scrollLeft: number, scrollWidth: number, cli
|
|
|
56
56
|
* overflowing edge is often the gap between two tabs, and fading empty space is
|
|
57
57
|
* invisible — hence the chevron buttons in the component.
|
|
58
58
|
*
|
|
59
|
-
* **The default reach is a custom property, not a number**, so a
|
|
59
|
+
* **The default reach is a custom property, not a number**, so a paint pack can
|
|
60
60
|
* lengthen or shorten every edge fade in the library at once. It is written as
|
|
61
61
|
* `var(--cue-paint-fade-length,24px)` with the fallback spelled out, because an
|
|
62
62
|
* ink or a paint name is declared with a `:root` default here but the mask is
|
|
@@ -59,7 +59,7 @@ function computeScrollEdges(scrollLeft, scrollWidth, clientWidth) {
|
|
|
59
59
|
* overflowing edge is often the gap between two tabs, and fading empty space is
|
|
60
60
|
* invisible — hence the chevron buttons in the component.
|
|
61
61
|
*
|
|
62
|
-
* **The default reach is a custom property, not a number**, so a
|
|
62
|
+
* **The default reach is a custom property, not a number**, so a paint pack can
|
|
63
63
|
* lengthen or shorten every edge fade in the library at once. It is written as
|
|
64
64
|
* `var(--cue-paint-fade-length,24px)` with the fallback spelled out, because an
|
|
65
65
|
* ink or a paint name is declared with a `:root` default here but the mask is
|
package/dist/chrome/app-bar.js
CHANGED
|
@@ -3,6 +3,8 @@ import { Link } from "../layout/link.js";
|
|
|
3
3
|
import { Separator } from "../primitives/separator.js";
|
|
4
4
|
import { EdgeScrollNav } from "./_edge-scroller.js";
|
|
5
5
|
import { GLASS_CLASSES } from "../system/_paint-glass.js";
|
|
6
|
+
import { APP_BAR_CHROME, APP_BAR_LINK, APP_BAR_QUIET_INK } from "../system/_style-app-bar.js";
|
|
7
|
+
import { NAV_VOICE } from "../system/_style-nav-voice.js";
|
|
6
8
|
import * as React from "react";
|
|
7
9
|
import { jsx } from "react/jsx-runtime";
|
|
8
10
|
//#region src/chrome/app-bar.tsx
|
|
@@ -12,6 +14,10 @@ import { jsx } from "react/jsx-runtime";
|
|
|
12
14
|
* One rung of the chrome ladder tall, from `--cue-chrome-toolbar` — the same
|
|
13
15
|
* token `Toolbar` and the docs site's hand-rolled header use, so a page that
|
|
14
16
|
* stacks a bar on a toolbar gets two equal strips rather than two guesses.
|
|
17
|
+
* A style set may make it taller, lighten, drop or dash its rule and widen its
|
|
18
|
+
* inline inset (`style-appbar-height`, `style-chrome-rule`,
|
|
19
|
+
* `style-chrome-rule-style`, `style-appbar-inset`); under a set that names
|
|
20
|
+
* none of them it is exactly this.
|
|
15
21
|
*
|
|
16
22
|
* Sticky by default, and translucent because of it: a bar pinned over scrolling
|
|
17
23
|
* content needs a ground, and `bg-surface-1/95` plus `backdrop-blur` says
|
|
@@ -54,7 +60,7 @@ const AppBarRoot = React.forwardRef(function AppBarRoot({ className, sticky = tr
|
|
|
54
60
|
return /* @__PURE__ */ jsx("header", {
|
|
55
61
|
ref,
|
|
56
62
|
"data-slot": "app-bar",
|
|
57
|
-
className: cn(`flex
|
|
63
|
+
className: cn(`flex w-full shrink-0 items-center gap-(--cue-space-4) border-b ${APP_BAR_CHROME} ${GLASS_CLASSES}`, sticky ? "sticky top-0 z-40" : null, className),
|
|
58
64
|
...elementProps
|
|
59
65
|
});
|
|
60
66
|
});
|
|
@@ -109,7 +115,7 @@ const AppBarNav = React.forwardRef(function AppBarNav({ className, frameClassNam
|
|
|
109
115
|
});
|
|
110
116
|
});
|
|
111
117
|
const REGISTERS = {
|
|
112
|
-
muted:
|
|
118
|
+
muted: APP_BAR_QUIET_INK,
|
|
113
119
|
strong: "text-fg"
|
|
114
120
|
};
|
|
115
121
|
/**
|
|
@@ -151,7 +157,7 @@ const AppBar = {
|
|
|
151
157
|
ref,
|
|
152
158
|
"data-active": active ? "" : void 0,
|
|
153
159
|
"aria-current": active ? "page" : void 0,
|
|
154
|
-
className: cn(
|
|
160
|
+
className: cn(`shrink-0 rounded-control ${NAV_VOICE} ${APP_BAR_LINK}`, active ? "text-accent" : REGISTERS[register], className),
|
|
155
161
|
...linkProps
|
|
156
162
|
});
|
|
157
163
|
}),
|
package/dist/chrome/app-shell.js
CHANGED
|
@@ -5,6 +5,7 @@ import { Sidebar } from "../layout/sidebar.js";
|
|
|
5
5
|
import { CrossGlyph } from "../overlays/_glyphs.js";
|
|
6
6
|
import { Drawer } from "../overlays/drawer.js";
|
|
7
7
|
import { IconButton } from "../primitives/icon-button.js";
|
|
8
|
+
import { TEXTURE_CLASSES } from "../system/_paint-texture.js";
|
|
8
9
|
import { DRAG_CLASSES, NO_DRAG_CLASSES } from "./_drag.js";
|
|
9
10
|
import * as React from "react";
|
|
10
11
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -113,7 +114,7 @@ const AppShell = {
|
|
|
113
114
|
ref,
|
|
114
115
|
"data-slot": "app-shell",
|
|
115
116
|
"data-rail": rail ? "" : void 0,
|
|
116
|
-
className: cn("group/app-shell relative flex h-dvh flex-col overflow-clip bg-bg text-fg", className),
|
|
117
|
+
className: cn("group/app-shell relative flex h-dvh flex-col overflow-clip bg-bg text-fg", TEXTURE_CLASSES, className),
|
|
117
118
|
style: {
|
|
118
119
|
[NAV_WIDTH_PROPERTY]: rail ? railWidth : navWidth,
|
|
119
120
|
...style
|
package/dist/chrome/band.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ type BandSeparation = "rule" | "ground" | "bleed" | "none";
|
|
|
9
9
|
*
|
|
10
10
|
* `"prose"` is the default and is the only one of the five that moves with
|
|
11
11
|
* `[data-style]`: 68ch with no set and under `console`, 74ch under `editorial`,
|
|
12
|
-
* 60ch under `marketing`. The four rungs are fixed aliases and a band that
|
|
12
|
+
* 60ch under `marketing` and `graphite`. The four rungs are fixed aliases and a band that
|
|
13
13
|
* names one has opted out of the axis for its measure — which is the right
|
|
14
14
|
* answer for a band holding a `Bento` or a device frame, and the wrong one for
|
|
15
15
|
* a band holding a paragraph.
|
|
@@ -39,13 +39,15 @@ interface BandProps extends React.ComponentPropsWithoutRef<"section"> {
|
|
|
39
39
|
*
|
|
40
40
|
* | set | `"rule"` draws | `"ground"` paints |
|
|
41
41
|
* |---|---|---|
|
|
42
|
-
* | *(no set)
|
|
42
|
+
* | *(no set)*, `console`, `tender`, `zine` and `porcelain` | 1px | nothing — the ground is `transparent` |
|
|
43
43
|
* | `editorial` | a 0.5px hairline, **which Chromium paints at 1px at every DPR**; only retina WebKit draws it thinner | nothing — `transparent` |
|
|
44
44
|
* | `marketing` | **nothing — the rule is `0px`** | `--cue-surface-1` |
|
|
45
|
+
* | `kiln` | **nothing — the rule is `0px`**; `Footer` keeps its own, through `--cue-style-footer-rule` | `--cue-sunken`, the recessed ground |
|
|
46
|
+
* | `graphite` | 1px, in `--cue-border` | nothing — `transparent` |
|
|
45
47
|
*
|
|
46
|
-
* Read the diagonal: `"ground"` is the marketing separation and
|
|
47
|
-
* everyone else's. A band that wants to separate under *every* set
|
|
48
|
-
* by rhythm, which every set has.
|
|
48
|
+
* Read the diagonal: `"ground"` is the marketing and kiln separation and
|
|
49
|
+
* `"rule"` is everyone else's. A band that wants to separate under *every* set
|
|
50
|
+
* separates by rhythm, which every set has.
|
|
49
51
|
*/
|
|
50
52
|
separation?: BandSeparation;
|
|
51
53
|
/** Which measure the band's centred column takes. Defaults to `"prose"`. */
|
|
@@ -67,23 +69,27 @@ interface BandProps extends React.ComponentPropsWithoutRef<"section"> {
|
|
|
67
69
|
* Every dimension it spends belongs to the style axis, so the same markup
|
|
68
70
|
* composes differently under `[data-style]` without a prop changing: the
|
|
69
71
|
* vertical rhythm is `--cue-band-y` (one `--cue-space-7` with no set, doubled
|
|
70
|
-
* under `editorial`, trebled under `marketing`), the column is
|
|
72
|
+
* under `editorial`, trebled under `marketing` and `graphite`), the column is
|
|
71
73
|
* `--cue-measure-prose` unless `width` names a fixed rung, and the rule and the
|
|
72
74
|
* ground are `--cue-band-rule` and `--cue-band-ground`. Read `separation`'s own
|
|
73
75
|
* documentation before choosing one, because two of the four can come out to
|
|
74
76
|
* nothing and they do not vanish symmetrically: `--cue-band-ground` is
|
|
75
|
-
* `transparent` on `:root` and on
|
|
76
|
-
*
|
|
77
|
-
*
|
|
77
|
+
* `transparent` on `:root` and on every set but `marketing` and `kiln`, so a
|
|
78
|
+
* `"ground"` paints nothing on most pages, while `--cue-band-rule` is `0px`
|
|
79
|
+
* under those two alone. Both are deliberate and nothing warns.
|
|
78
80
|
*
|
|
79
81
|
* **Two substitution boundaries, because `--cue-band-y` is a `calc()` resolved
|
|
80
82
|
* at the element that declares it.** A `<Density>` island nested inside a
|
|
81
83
|
* styled page moves every `--cue-space-*` and the band rhythm does **not**
|
|
82
84
|
* follow it — the island inherits the rhythm already resolved above. Restate
|
|
83
85
|
* the set on the island (`<Density density="compact" styleSet="editorial">`) to
|
|
84
|
-
* re-resolve it against that island's rung. Likewise a
|
|
85
|
-
* under a marketing
|
|
86
|
-
* an already-resolved `--cue-band-ground
|
|
86
|
+
* re-resolve it against that island's rung. Likewise a hand-stamped
|
|
87
|
+
* `[data-theme]` element under a marketing page paints the **outer** theme's
|
|
88
|
+
* `--cue-surface-1` through an already-resolved `--cue-band-ground`, and its
|
|
89
|
+
* rule in the outer theme's border. The library's own theme islands do not: a
|
|
90
|
+
* nested `ThemeProvider` that names a theme or a mode, and a `Preview` stage
|
|
91
|
+
* with a theme, a mode or a pairing, restate the set in force beside it, so a
|
|
92
|
+
* band inside one paints that island's ground and rule.
|
|
87
93
|
*
|
|
88
94
|
* It renders a `<section>`, which is not a landmark until it has an accessible
|
|
89
95
|
* name — so a band with a heading should carry `aria-labelledby` pointing at
|
package/dist/chrome/band.js
CHANGED
|
@@ -1,36 +1,15 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { TEXTURE_CLASSES } from "../system/_paint-texture.js";
|
|
2
3
|
import { Container } from "../layout/container.js";
|
|
3
4
|
import { bandClasses } from "./_band.js";
|
|
4
|
-
import {
|
|
5
|
+
import { BAND_BROAD_WIDTH, BAND_Y_HALVES } from "../system/_style-band.js";
|
|
5
6
|
import { GROUND_PATTERN_CLASSES } from "../system/_paint-ground-pattern.js";
|
|
6
7
|
import * as React from "react";
|
|
7
8
|
import { jsx } from "react/jsx-runtime";
|
|
8
9
|
//#region src/chrome/band.tsx
|
|
9
|
-
/**
|
|
10
|
-
* What each separation adds to the frame `bandClasses` draws, and the two
|
|
11
|
-
* `--cue-*` names that live in this file rather than in the chassis beside it.
|
|
12
|
-
*
|
|
13
|
-
* `_band.ts` holds only what `Footer` can also render — the rhythm and the
|
|
14
|
-
* rule — because docgen's token scanner reads a chassis file whole and cannot
|
|
15
|
-
* see that `Footer` calls `bandClasses` with the literal `"rule"`. The ground
|
|
16
|
-
* is reachable only from `<Band separation="ground">`, so it is written here,
|
|
17
|
-
* next to the prop whose value selects it. `_band.ts`'s own docblock carries
|
|
18
|
-
* the argument.
|
|
19
|
-
*
|
|
20
|
-
* `rule`'s entry is the colour and not the width: the width is
|
|
21
|
-
* `--cue-band-rule` and belongs to the chassis, and both elements name the ink
|
|
22
|
-
* in their own class list rather than inheriting it from the other.
|
|
23
|
-
*
|
|
24
|
-
* That ink is now a token. It was the literal `border-border`, spelled here and
|
|
25
|
-
* again in `Footer`, which meant a style set could say how THICK the line
|
|
26
|
-
* between two bands is and had no way to say what colour it was — and every
|
|
27
|
-
* site measured in the 2026-09-22 corpus that separates bands by a line picks
|
|
28
|
-
* one lighter than its box edge. `--cue-band-rule-color` defaults to
|
|
29
|
-
* `var(--cue-border)` on `:root`, which is byte-for-byte what this drew before.
|
|
30
|
-
*/
|
|
31
10
|
const SEPARATION_PAINT = {
|
|
32
11
|
rule: "border-(--cue-band-rule-color)",
|
|
33
|
-
ground: `bg-(--cue-band-ground) ${GROUND_PATTERN_CLASSES} ${TEXTURE_CLASSES}`,
|
|
12
|
+
ground: `bg-(--cue-band-ground) ${GROUND_PATTERN_CLASSES} ${TEXTURE_CLASSES} before:[mask-image:linear-gradient(var(--cue-band-ground),var(--cue-band-ground)),var(--cue-paint-fade)] before:[-webkit-mask-image:linear-gradient(var(--cue-band-ground),var(--cue-band-ground)),var(--cue-paint-fade)]`,
|
|
34
13
|
bleed: null,
|
|
35
14
|
none: null
|
|
36
15
|
};
|
|
@@ -46,23 +25,27 @@ const SEPARATION_PAINT = {
|
|
|
46
25
|
* Every dimension it spends belongs to the style axis, so the same markup
|
|
47
26
|
* composes differently under `[data-style]` without a prop changing: the
|
|
48
27
|
* vertical rhythm is `--cue-band-y` (one `--cue-space-7` with no set, doubled
|
|
49
|
-
* under `editorial`, trebled under `marketing`), the column is
|
|
28
|
+
* under `editorial`, trebled under `marketing` and `graphite`), the column is
|
|
50
29
|
* `--cue-measure-prose` unless `width` names a fixed rung, and the rule and the
|
|
51
30
|
* ground are `--cue-band-rule` and `--cue-band-ground`. Read `separation`'s own
|
|
52
31
|
* documentation before choosing one, because two of the four can come out to
|
|
53
32
|
* nothing and they do not vanish symmetrically: `--cue-band-ground` is
|
|
54
|
-
* `transparent` on `:root` and on
|
|
55
|
-
*
|
|
56
|
-
*
|
|
33
|
+
* `transparent` on `:root` and on every set but `marketing` and `kiln`, so a
|
|
34
|
+
* `"ground"` paints nothing on most pages, while `--cue-band-rule` is `0px`
|
|
35
|
+
* under those two alone. Both are deliberate and nothing warns.
|
|
57
36
|
*
|
|
58
37
|
* **Two substitution boundaries, because `--cue-band-y` is a `calc()` resolved
|
|
59
38
|
* at the element that declares it.** A `<Density>` island nested inside a
|
|
60
39
|
* styled page moves every `--cue-space-*` and the band rhythm does **not**
|
|
61
40
|
* follow it — the island inherits the rhythm already resolved above. Restate
|
|
62
41
|
* the set on the island (`<Density density="compact" styleSet="editorial">`) to
|
|
63
|
-
* re-resolve it against that island's rung. Likewise a
|
|
64
|
-
* under a marketing
|
|
65
|
-
* an already-resolved `--cue-band-ground
|
|
42
|
+
* re-resolve it against that island's rung. Likewise a hand-stamped
|
|
43
|
+
* `[data-theme]` element under a marketing page paints the **outer** theme's
|
|
44
|
+
* `--cue-surface-1` through an already-resolved `--cue-band-ground`, and its
|
|
45
|
+
* rule in the outer theme's border. The library's own theme islands do not: a
|
|
46
|
+
* nested `ThemeProvider` that names a theme or a mode, and a `Preview` stage
|
|
47
|
+
* with a theme, a mode or a pairing, restate the set in force beside it, so a
|
|
48
|
+
* band inside one paints that island's ground and rule.
|
|
66
49
|
*
|
|
67
50
|
* It renders a `<section>`, which is not a landmark until it has an accessible
|
|
68
51
|
* name — so a band with a heading should carry `aria-labelledby` pointing at
|
|
@@ -84,6 +67,9 @@ const Band = React.forwardRef(function Band({ className, columnClassName, separa
|
|
|
84
67
|
const column = width === "prose" ? {
|
|
85
68
|
width: "full",
|
|
86
69
|
className: "max-w-(--cue-measure-prose)"
|
|
70
|
+
} : width === "broad" ? {
|
|
71
|
+
width: "full",
|
|
72
|
+
className: BAND_BROAD_WIDTH
|
|
87
73
|
} : {
|
|
88
74
|
width,
|
|
89
75
|
className: null
|
|
@@ -92,7 +78,7 @@ const Band = React.forwardRef(function Band({ className, columnClassName, separa
|
|
|
92
78
|
ref,
|
|
93
79
|
"data-slot": "band",
|
|
94
80
|
"data-separation": separation,
|
|
95
|
-
className: cn(bandClasses(separation), SEPARATION_PAINT[separation], className),
|
|
81
|
+
className: cn(bandClasses(separation), BAND_Y_HALVES, SEPARATION_PAINT[separation], className),
|
|
96
82
|
...elementProps,
|
|
97
83
|
children: separation === "bleed" ? children : /* @__PURE__ */ jsx(Container, {
|
|
98
84
|
width: column.width,
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { GLYPH_INK_SUBTLE } from "../system/_style-glyph-ink.js";
|
|
3
|
+
import { BODY_LEADING } from "../system/_style-body-leading.js";
|
|
4
|
+
import { BODY_SIZE } from "../system/_style-body-size.js";
|
|
5
|
+
import { EMPTY_GAP, EMPTY_HINT_VOICE, EMPTY_ICON_SIZE, EMPTY_PAD, EMPTY_TITLE_FACE, EMPTY_TITLE_LEADING, EMPTY_TITLE_SIZE, EMPTY_TITLE_WEIGHT } from "../system/_style-empty-state.js";
|
|
2
6
|
import * as React from "react";
|
|
3
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
8
|
//#region src/chrome/empty-state.tsx
|
|
@@ -26,22 +30,22 @@ const EmptyState = React.forwardRef(function EmptyState({ className, title, hint
|
|
|
26
30
|
return /* @__PURE__ */ jsxs("div", {
|
|
27
31
|
ref,
|
|
28
32
|
"data-slot": "empty-state",
|
|
29
|
-
className: cn(
|
|
33
|
+
className: cn(`flex flex-col items-center justify-center ${EMPTY_GAP} px-(--cue-space-6) ${EMPTY_PAD} text-center font-mono`, className),
|
|
30
34
|
...elementProps,
|
|
31
35
|
children: [
|
|
32
36
|
Icon === void 0 ? null : /* @__PURE__ */ jsx(Icon, {
|
|
33
37
|
"aria-hidden": "true",
|
|
34
38
|
"data-slot": "empty-state-icon",
|
|
35
|
-
className:
|
|
39
|
+
className: `${EMPTY_ICON_SIZE} shrink-0 ${GLYPH_INK_SUBTLE}`
|
|
36
40
|
}),
|
|
37
41
|
/* @__PURE__ */ jsx("span", {
|
|
38
42
|
"data-slot": "empty-state-title",
|
|
39
|
-
className:
|
|
43
|
+
className: `${EMPTY_TITLE_FACE} ${EMPTY_TITLE_SIZE} ${EMPTY_TITLE_WEIGHT} ${EMPTY_TITLE_LEADING} text-fg`,
|
|
40
44
|
children: title
|
|
41
45
|
}),
|
|
42
46
|
hint === void 0 ? null : /* @__PURE__ */ jsx("p", {
|
|
43
47
|
"data-slot": "empty-state-hint",
|
|
44
|
-
className:
|
|
48
|
+
className: `max-w-[36ch] ${EMPTY_HINT_VOICE} ${BODY_SIZE} ${BODY_LEADING} text-fg-muted`,
|
|
45
49
|
children: hint
|
|
46
50
|
}),
|
|
47
51
|
children,
|
package/dist/chrome/eyebrow.d.ts
CHANGED
|
@@ -11,11 +11,19 @@ interface EyebrowProps extends React.ComponentPropsWithoutRef<"span"> {
|
|
|
11
11
|
/**
|
|
12
12
|
* The small accent kicker that sits above a title: `// PATCH`.
|
|
13
13
|
*
|
|
14
|
-
* Mono, uppercase and widely tracked
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* ever
|
|
14
|
+
* Mono, uppercase and widely tracked by default — the style set's choice
|
|
15
|
+
* inside one — in the theme's accent: the one place where the accent is used
|
|
16
|
+
* for pure typography rather than for a control. The slashes are marked
|
|
17
|
+
* `aria-hidden` and `select-none`, so a screen reader reads "patch" and a
|
|
18
|
+
* copy-paste of the page does not carry punctuation that was only ever
|
|
19
|
+
* decoration.
|
|
20
|
+
*
|
|
21
|
+
* A style set can restyle it apart from its other captions: its face, size,
|
|
22
|
+
* ink and weight (`--cue-style-eyebrow-face`, `-size`, `-ink`, `-weight`, each
|
|
23
|
+
* falling back through the label names to the console's voice), and whether
|
|
24
|
+
* the slashes print at all (`--cue-style-eyebrow-glyph: none` drops them, as
|
|
25
|
+
* every measured Look does). `slashes={false}` still removes them from the
|
|
26
|
+
* markup under any set.
|
|
19
27
|
*
|
|
20
28
|
* Static markup — no `"use client"`.
|
|
21
29
|
*
|