@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
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
|
*
|
package/dist/chrome/eyebrow.js
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { LABEL_CASE } from "../system/_style-label-case.js";
|
|
3
|
+
import { LABEL_TRACKING_LOOSE } from "../system/_style-label-tracking.js";
|
|
4
|
+
import { EYEBROW_FACE, EYEBROW_GLYPH, EYEBROW_INK, EYEBROW_SIZE, EYEBROW_WEIGHT } from "../system/_style-eyebrow.js";
|
|
2
5
|
import * as React from "react";
|
|
3
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
7
|
//#region src/chrome/eyebrow.tsx
|
|
5
8
|
/**
|
|
6
9
|
* The small accent kicker that sits above a title: `// PATCH`.
|
|
7
10
|
*
|
|
8
|
-
* Mono, uppercase and widely tracked
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* ever
|
|
11
|
+
* Mono, uppercase and widely tracked by default — the style set's choice
|
|
12
|
+
* inside one — in the theme's accent: the one place where the accent is used
|
|
13
|
+
* for pure typography rather than for a control. The slashes are marked
|
|
14
|
+
* `aria-hidden` and `select-none`, so a screen reader reads "patch" and a
|
|
15
|
+
* copy-paste of the page does not carry punctuation that was only ever
|
|
16
|
+
* decoration.
|
|
17
|
+
*
|
|
18
|
+
* A style set can restyle it apart from its other captions: its face, size,
|
|
19
|
+
* ink and weight (`--cue-style-eyebrow-face`, `-size`, `-ink`, `-weight`, each
|
|
20
|
+
* falling back through the label names to the console's voice), and whether
|
|
21
|
+
* the slashes print at all (`--cue-style-eyebrow-glyph: none` drops them, as
|
|
22
|
+
* every measured Look does). `slashes={false}` still removes them from the
|
|
23
|
+
* markup under any set.
|
|
13
24
|
*
|
|
14
25
|
* Static markup — no `"use client"`.
|
|
15
26
|
*
|
|
@@ -22,12 +33,12 @@ const Eyebrow = React.forwardRef(function Eyebrow({ className, slashes = true, c
|
|
|
22
33
|
return /* @__PURE__ */ jsxs("span", {
|
|
23
34
|
ref,
|
|
24
35
|
"data-slot": "eyebrow",
|
|
25
|
-
className: cn("inline-flex items-center gap-(--cue-space-2)
|
|
36
|
+
className: cn("inline-flex items-center gap-(--cue-space-2)", EYEBROW_SIZE, EYEBROW_INK, EYEBROW_WEIGHT, EYEBROW_FACE, LABEL_TRACKING_LOOSE, LABEL_CASE, className),
|
|
26
37
|
...elementProps,
|
|
27
38
|
children: [slashes ? /* @__PURE__ */ jsx("span", {
|
|
28
39
|
"data-slot": "eyebrow-glyph",
|
|
29
40
|
"aria-hidden": "true",
|
|
30
|
-
className: "select-none",
|
|
41
|
+
className: cn("select-none", EYEBROW_GLYPH),
|
|
31
42
|
children: "//"
|
|
32
43
|
}) : null, children]
|
|
33
44
|
});
|
package/dist/chrome/footer.d.ts
CHANGED
|
@@ -66,6 +66,11 @@ interface FooterProps extends React.ComponentPropsWithoutRef<"footer"> {
|
|
|
66
66
|
* docblock says why that is a fact about the published manifest and not only
|
|
67
67
|
* about the markup.
|
|
68
68
|
*
|
|
69
|
+
* Both rules are solid unless a style set says otherwise: `style-footer-rule-style`
|
|
70
|
+
* dashes the rule across the top and the rule over the fine print together,
|
|
71
|
+
* through the slot their borders already read, so a caller's own
|
|
72
|
+
* `className="border-dotted"` still wins. `Band`'s rule does not read it.
|
|
73
|
+
*
|
|
69
74
|
* Static markup — no `"use client"`.
|
|
70
75
|
*
|
|
71
76
|
* @example
|
package/dist/chrome/footer.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { LABEL_INK_SUBTLE } from "../system/_style-label-ink.js";
|
|
3
|
+
import { LABEL_FACE } from "../system/_style-label-face.js";
|
|
4
|
+
import { NAV_VOICE } from "../system/_style-nav-voice.js";
|
|
5
|
+
import { LABEL_SIZE } from "../system/_style-label-size.js";
|
|
2
6
|
import { Container } from "../layout/container.js";
|
|
3
7
|
import { bandClasses } from "./_band.js";
|
|
8
|
+
import { FOOTER_RULE, FOOTER_RULE_STYLE } from "../system/_style-footer-rule.js";
|
|
9
|
+
import { SECTION_RULE_EDGE } from "../system/_style-section-rule.js";
|
|
4
10
|
import * as React from "react";
|
|
5
11
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
12
|
//#region src/chrome/footer.tsx
|
|
@@ -44,6 +50,11 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
44
50
|
* docblock says why that is a fact about the published manifest and not only
|
|
45
51
|
* about the markup.
|
|
46
52
|
*
|
|
53
|
+
* Both rules are solid unless a style set says otherwise: `style-footer-rule-style`
|
|
54
|
+
* dashes the rule across the top and the rule over the fine print together,
|
|
55
|
+
* through the slot their borders already read, so a caller's own
|
|
56
|
+
* `className="border-dotted"` still wins. `Band`'s rule does not read it.
|
|
57
|
+
*
|
|
47
58
|
* Static markup — no `"use client"`.
|
|
48
59
|
*
|
|
49
60
|
* @example
|
|
@@ -66,14 +77,14 @@ const Footer = React.forwardRef(function Footer({ className, columnClassName, wi
|
|
|
66
77
|
ref,
|
|
67
78
|
"data-slot": "footer",
|
|
68
79
|
"data-separation": "rule",
|
|
69
|
-
className: cn(bandClasses("rule"), "border-(--cue-band-rule-color)", className),
|
|
80
|
+
className: cn(bandClasses("rule"), FOOTER_RULE, FOOTER_RULE_STYLE, "border-(--cue-band-rule-color)", className),
|
|
70
81
|
...elementProps,
|
|
71
82
|
children: /* @__PURE__ */ jsxs(Container, {
|
|
72
83
|
width,
|
|
73
|
-
className: cn(
|
|
84
|
+
className: cn(`flex flex-col gap-(--cue-space-6) ${NAV_VOICE}`, columnClassName),
|
|
74
85
|
children: [children, meta === void 0 ? null : /* @__PURE__ */ jsx("div", {
|
|
75
86
|
"data-slot": "footer-meta",
|
|
76
|
-
className:
|
|
87
|
+
className: cn(`flex flex-wrap items-center justify-between gap-(--cue-space-3) border-t pt-(--cue-space-5) ${LABEL_SIZE} ${LABEL_INK_SUBTLE}`, SECTION_RULE_EDGE, FOOTER_RULE_STYLE, LABEL_FACE),
|
|
77
88
|
children: meta
|
|
78
89
|
})]
|
|
79
90
|
})
|
|
@@ -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 { CaretDownGlyph } from "./_glyphs.js";
|
|
4
6
|
import { useCuePortalProps } from "../system/portal.js";
|
|
5
7
|
import { overlayPopupTransitionClasses, overlayPositionerClasses, overlaySurfaceClasses } from "../overlays/_surface.js";
|
|
@@ -64,7 +66,7 @@ const NavigationMenu$1 = {
|
|
|
64
66
|
return /* @__PURE__ */ jsxs(NavigationMenu.Trigger, {
|
|
65
67
|
ref,
|
|
66
68
|
"data-slot": "navigation-menu-trigger",
|
|
67
|
-
className: cn(
|
|
69
|
+
className: cn(`inline-flex h-control-md cursor-default items-center gap-(--cue-space-2) rounded-control px-(--cue-space-3) text-(length:--cue-text-ui) whitespace-nowrap text-fg-muted no-underline 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`, CONTROL_FACE, className),
|
|
68
70
|
...elementProps,
|
|
69
71
|
children: [children, caret ? /* @__PURE__ */ jsx(NavigationMenu.Icon, {
|
|
70
72
|
className: "flex items-center transition-transform duration-150 data-[popup-open]:rotate-180 motion-reduce:transition-none",
|
|
@@ -86,7 +88,7 @@ const NavigationMenu$1 = {
|
|
|
86
88
|
"data-slot": "navigation-menu-link",
|
|
87
89
|
"data-active": active === true ? "" : void 0,
|
|
88
90
|
"aria-current": active === true ? "page" : void 0,
|
|
89
|
-
className: cn(
|
|
91
|
+
className: cn(`flex cursor-pointer flex-col gap-(--cue-space-1) rounded-control px-(--cue-space-3) py-(--cue-space-2) text-(length:--cue-text-ui) text-fg-muted no-underline transition-colors duration-150 outline-none select-none hover:bg-surface-3 hover:text-fg ${FOCUS_RING_INSET} data-[active]:text-accent`, CONTROL_FACE, className),
|
|
90
92
|
...elementProps,
|
|
91
93
|
children: [/* @__PURE__ */ jsx("span", { children }), description === void 0 ? null : /* @__PURE__ */ jsx("span", {
|
|
92
94
|
className: "text-(length:--cue-text-label) leading-(--cue-leading-ui) text-fg-subtle",
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { BODY_VOICE } from "../system/_style-body.js";
|
|
3
|
+
import { LEDE_INK, LEDE_LEADING, LEDE_SIZE, LEDE_TRACKING } from "../system/_style-lede.js";
|
|
4
|
+
import { PAGE_TITLE_VOICE } from "../system/_style-page-title.js";
|
|
2
5
|
import * as React from "react";
|
|
3
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
7
|
//#region src/chrome/page-shell.tsx
|
|
@@ -48,25 +51,25 @@ const PageShell = React.forwardRef(function PageShell({ className, width = "narr
|
|
|
48
51
|
...elementProps,
|
|
49
52
|
children: [hasHeader ? /* @__PURE__ */ jsxs("header", {
|
|
50
53
|
"data-slot": "page-shell-header",
|
|
51
|
-
className: "flex items-start justify-between gap-(--cue-space-4)",
|
|
54
|
+
className: "flex flex-wrap items-start justify-between gap-(--cue-space-4)",
|
|
52
55
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
53
|
-
className: "flex min-w-
|
|
56
|
+
className: "flex min-w-[min(100%,20rem)] flex-col gap-(--cue-space-2)",
|
|
54
57
|
children: [
|
|
55
58
|
eyebrow,
|
|
56
59
|
title === void 0 ? null : /* @__PURE__ */ jsx("h1", {
|
|
57
60
|
"data-slot": "page-shell-title",
|
|
58
|
-
className:
|
|
61
|
+
className: PAGE_TITLE_VOICE,
|
|
59
62
|
children: title
|
|
60
63
|
}),
|
|
61
64
|
subtitle === void 0 ? null : /* @__PURE__ */ jsx("p", {
|
|
62
65
|
"data-slot": "page-shell-subtitle",
|
|
63
|
-
className:
|
|
66
|
+
className: `${BODY_VOICE} ${LEDE_SIZE} ${LEDE_LEADING} ${LEDE_TRACKING} ${LEDE_INK}`,
|
|
64
67
|
children: subtitle
|
|
65
68
|
})
|
|
66
69
|
]
|
|
67
70
|
}), actions === void 0 ? null : /* @__PURE__ */ jsx("div", {
|
|
68
71
|
"data-slot": "page-shell-actions",
|
|
69
|
-
className: "flex
|
|
72
|
+
className: "flex min-w-0 flex-wrap items-center gap-(--cue-space-2)",
|
|
70
73
|
children: actions
|
|
71
74
|
})]
|
|
72
75
|
}) : null, children]
|
package/dist/chrome/panel.d.ts
CHANGED
|
@@ -12,8 +12,11 @@ type PanelProps = React.ComponentPropsWithoutRef<"div">;
|
|
|
12
12
|
* panel's radius, which is what makes a stack of hairline rows read as one
|
|
13
13
|
* object.
|
|
14
14
|
*
|
|
15
|
-
* Deliberately flat: no
|
|
16
|
-
* dialog, a menu, a toast) is allowed one — see `overlays/_surface.ts`.
|
|
15
|
+
* Deliberately flat: no elevation. In this system only a floating surface (a
|
|
16
|
+
* dialog, a menu, a toast) is allowed one — see `overlays/_surface.ts`. What a
|
|
17
|
+
* panel does carry is the paint axis's rim and its resting shade, both in
|
|
18
|
+
* `RIM_INSET` and both transparent until a pack tints them: a one-stop contact
|
|
19
|
+
* shade that sets the panel on the page, not a ladder rung that lifts it off.
|
|
17
20
|
*
|
|
18
21
|
* Static markup — no `"use client"`.
|
|
19
22
|
*
|
package/dist/chrome/panel.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { RIM_INSET } from "../system/_paint-rim.js";
|
|
3
|
+
import { TITLE_VOICE } from "../system/_style-title.js";
|
|
2
4
|
import * as React from "react";
|
|
3
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
6
|
//#region src/chrome/panel.tsx
|
|
@@ -12,8 +14,11 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
12
14
|
* panel's radius, which is what makes a stack of hairline rows read as one
|
|
13
15
|
* object.
|
|
14
16
|
*
|
|
15
|
-
* Deliberately flat: no
|
|
16
|
-
* dialog, a menu, a toast) is allowed one — see `overlays/_surface.ts`.
|
|
17
|
+
* Deliberately flat: no elevation. In this system only a floating surface (a
|
|
18
|
+
* dialog, a menu, a toast) is allowed one — see `overlays/_surface.ts`. What a
|
|
19
|
+
* panel does carry is the paint axis's rim and its resting shade, both in
|
|
20
|
+
* `RIM_INSET` and both transparent until a pack tints them: a one-stop contact
|
|
21
|
+
* shade that sets the panel on the page, not a ladder rung that lifts it off.
|
|
17
22
|
*
|
|
18
23
|
* Static markup — no `"use client"`.
|
|
19
24
|
*
|
|
@@ -28,7 +33,7 @@ const Panel = React.forwardRef(function Panel({ className, ...elementProps }, re
|
|
|
28
33
|
return /* @__PURE__ */ jsx("div", {
|
|
29
34
|
ref,
|
|
30
35
|
"data-slot": "panel",
|
|
31
|
-
className: cn(
|
|
36
|
+
className: cn(`overflow-hidden rounded-surface border border-border bg-surface-1 ${RIM_INSET}`, className),
|
|
32
37
|
...elementProps
|
|
33
38
|
});
|
|
34
39
|
});
|
|
@@ -53,7 +58,7 @@ const PanelHeader = React.forwardRef(function PanelHeader({ className, title, ac
|
|
|
53
58
|
className: "flex min-w-0 items-center gap-(--cue-space-3)",
|
|
54
59
|
children: [title === void 0 ? null : /* @__PURE__ */ jsx("span", {
|
|
55
60
|
"data-slot": "panel-header-title",
|
|
56
|
-
className:
|
|
61
|
+
className: `overflow-x-clip text-ellipsis whitespace-nowrap ${TITLE_VOICE}`,
|
|
57
62
|
children: title
|
|
58
63
|
}), children]
|
|
59
64
|
}), actions === void 0 ? null : /* @__PURE__ */ jsx("div", {
|
package/dist/chrome/row.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { FOCUS_RING_INSET_2 } from "../system/_focus-ring.js";
|
|
2
3
|
import { cva } from "../lib/cva.js";
|
|
4
|
+
import { DATA_FACE } from "../system/_style-data-face.js";
|
|
5
|
+
import { SEAM_INK, SEAM_RIM } from "../system/_style-seam.js";
|
|
3
6
|
import * as React from "react";
|
|
4
7
|
import { jsx } from "react/jsx-runtime";
|
|
5
8
|
//#region src/chrome/row.tsx
|
|
@@ -18,14 +21,14 @@ import { jsx } from "react/jsx-runtime";
|
|
|
18
21
|
* @example
|
|
19
22
|
* <li className={rowVariants({ interactive: true })} />
|
|
20
23
|
*/
|
|
21
|
-
const rowVariants = cva(
|
|
24
|
+
const rowVariants = cva(`flex w-full items-center gap-(--cue-space-3) px-(--cue-pad-row-x) py-(--cue-pad-row-y) ${DATA_FACE} text-(length:--cue-text-ui) text-fg`, {
|
|
22
25
|
variants: {
|
|
23
26
|
seam: {
|
|
24
27
|
true: "bg-bg",
|
|
25
28
|
false: "border-t border-border first:border-t-0 [[data-slot=panel-header]+&]:border-t-0"
|
|
26
29
|
},
|
|
27
30
|
interactive: {
|
|
28
|
-
true:
|
|
31
|
+
true: `cursor-pointer text-left transition-colors duration-150 outline-none hover:bg-surface-2 ${FOCUS_RING_INSET_2} disabled:pointer-events-none disabled:opacity-40`,
|
|
29
32
|
false: ""
|
|
30
33
|
}
|
|
31
34
|
},
|
|
@@ -98,7 +101,7 @@ const SeamList = React.forwardRef(function SeamList({ className, ...elementProps
|
|
|
98
101
|
return /* @__PURE__ */ jsx("div", {
|
|
99
102
|
ref,
|
|
100
103
|
"data-slot": "seam-list",
|
|
101
|
-
className: cn(
|
|
104
|
+
className: cn(`flex flex-col gap-px overflow-hidden rounded-surface border ${SEAM_RIM} ${SEAM_INK}`, className),
|
|
102
105
|
...elementProps
|
|
103
106
|
});
|
|
104
107
|
});
|
|
@@ -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 * as React from "react";
|
|
4
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
6
|
import { ScrollArea } from "@base-ui/react/scroll-area";
|
|
@@ -36,7 +37,7 @@ const ScrollArea$1 = React.forwardRef(function ScrollArea$2({ className, viewpor
|
|
|
36
37
|
/* @__PURE__ */ jsx(ScrollArea.Viewport, {
|
|
37
38
|
ref: viewportRef,
|
|
38
39
|
"data-slot": "scroll-area-viewport",
|
|
39
|
-
className: cn(
|
|
40
|
+
className: cn(`size-full overscroll-contain outline-none ${FOCUS_RING_INSET_2}`, viewportClassName),
|
|
40
41
|
children: /* @__PURE__ */ jsx(ScrollArea.Content, {
|
|
41
42
|
"data-slot": "scroll-area-content",
|
|
42
43
|
children
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
|
|
4
|
+
import { LABEL_INK } from "../system/_style-label-ink.js";
|
|
5
|
+
import { LABEL_FACE } from "../system/_style-label-face.js";
|
|
6
|
+
import { LABEL_WEIGHT } from "../system/_style-label-weight.js";
|
|
7
|
+
import { LABEL_CASE } from "../system/_style-label-case.js";
|
|
8
|
+
import { LABEL_TRACKING } from "../system/_style-label-tracking.js";
|
|
3
9
|
import { ChevronRightGlyph } from "./_glyphs.js";
|
|
10
|
+
import { LABEL_SIZE } from "../system/_style-label-size.js";
|
|
11
|
+
import { SECTION_RULE_FILL } from "../system/_style-section-rule.js";
|
|
12
|
+
import { DATA_FACE } from "../system/_style-data-face.js";
|
|
4
13
|
import * as React from "react";
|
|
5
14
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
15
|
//#region src/chrome/section-header.tsx
|
|
@@ -35,18 +44,18 @@ const SectionHeader = React.forwardRef(function SectionHeader({ className, label
|
|
|
35
44
|
}) : null,
|
|
36
45
|
/* @__PURE__ */ jsx("span", {
|
|
37
46
|
"data-slot": "section-header-label",
|
|
38
|
-
className: "shrink-0
|
|
47
|
+
className: cn("shrink-0", LABEL_SIZE, LABEL_INK, LABEL_WEIGHT, LABEL_FACE, LABEL_TRACKING, LABEL_CASE),
|
|
39
48
|
children: label
|
|
40
49
|
}),
|
|
41
50
|
count === void 0 ? null : /* @__PURE__ */ jsx("span", {
|
|
42
51
|
"data-slot": "section-header-count",
|
|
43
|
-
className:
|
|
52
|
+
className: `shrink-0 ${DATA_FACE} text-(length:--cue-text-label) tabular-nums text-fg-subtle`,
|
|
44
53
|
children: count
|
|
45
54
|
}),
|
|
46
55
|
/* @__PURE__ */ jsx("span", {
|
|
47
56
|
"data-slot": "section-header-rule",
|
|
48
57
|
"aria-hidden": "true",
|
|
49
|
-
className: "h-px min-w-(--cue-space-4) flex-1
|
|
58
|
+
className: cn("h-px min-w-(--cue-space-4) flex-1", SECTION_RULE_FILL)
|
|
50
59
|
})
|
|
51
60
|
] });
|
|
52
61
|
const headClasses = "flex min-w-0 flex-1 items-center gap-(--cue-space-3)";
|
|
@@ -62,7 +71,7 @@ const SectionHeader = React.forwardRef(function SectionHeader({ className, label
|
|
|
62
71
|
"aria-expanded": open,
|
|
63
72
|
onClick: toggle,
|
|
64
73
|
"data-slot": "section-header-toggle",
|
|
65
|
-
className: cn(headClasses,
|
|
74
|
+
className: cn(headClasses, `cursor-pointer text-left outline-none hover:text-fg ${FOCUS_RING_OFFSET_2}`),
|
|
66
75
|
children: headContent
|
|
67
76
|
}) : /* @__PURE__ */ jsx("div", {
|
|
68
77
|
className: headClasses,
|
|
@@ -1,7 +1,11 @@
|
|
|
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 { useComposedRefs } from "../lib/compose.js";
|
|
4
6
|
import { EDGE_SCROLLER_CLASSES, EdgeChevrons, useEdgeScroll } from "./_edge-scroller.js";
|
|
7
|
+
import { SEGMENT_IDLE_INK } from "../system/_style-segment.js";
|
|
8
|
+
import { SEGMENTED_CHEVRON_GROUND, SEGMENTED_RIM, SEGMENTED_TRACK, SEGMENT_PRESSED, SEGMENT_RADIUS } from "../system/_style-segmented-control.js";
|
|
5
9
|
import * as React from "react";
|
|
6
10
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
11
|
import { Toggle } from "@base-ui/react/toggle";
|
|
@@ -17,8 +21,13 @@ const ITEM_SIZES = {
|
|
|
17
21
|
* solid accent fill. A solid bar inside a small control reads as a second,
|
|
18
22
|
* louder button and drowns the labels around it (the luma defect ruling); the
|
|
19
23
|
* soft tint says "this one" at exactly the volume a view switcher deserves.
|
|
24
|
+
*
|
|
25
|
+
* That is the default. A style set may draw the choice as a raised pill on a
|
|
26
|
+
* filled track instead — its ground, ink, edge, weight and resting shade, the
|
|
27
|
+
* track and its inset — through the segment names: `_style-segmented-control.ts`
|
|
28
|
+
* for the pressed segment, and `_style-segment.ts` for the half `Tabs` shares.
|
|
20
29
|
*/
|
|
21
|
-
const ITEM_CLASSES =
|
|
30
|
+
const ITEM_CLASSES = `inline-flex shrink-0 cursor-pointer select-none items-center justify-center gap-(--cue-space-2) whitespace-nowrap ${SEGMENT_RADIUS} ${CONTROL_FACE} ${SEGMENT_IDLE_INK} transition-colors duration-150 outline-none hover:text-fg ${SEGMENT_PRESSED} ${FOCUS_RING_INSET} disabled:pointer-events-none disabled:opacity-40 data-[disabled]:pointer-events-none data-[disabled]:opacity-40`;
|
|
22
31
|
/**
|
|
23
32
|
* A one-of-N switch drawn as a row of segments: the console's view picker.
|
|
24
33
|
*
|
|
@@ -57,7 +66,7 @@ const SegmentedControl = React.forwardRef(function SegmentedControl({ items, val
|
|
|
57
66
|
const iconSize = size === "sm" ? "size-icon-sm" : "size-icon-md";
|
|
58
67
|
return /* @__PURE__ */ jsxs("div", {
|
|
59
68
|
"data-slot": "segmented-control-frame",
|
|
60
|
-
className: cn(
|
|
69
|
+
className: cn(`relative inline-flex max-w-full min-w-0 shrink-0 items-center rounded-control border ${SEGMENTED_RIM} ${SEGMENTED_TRACK}`, className),
|
|
61
70
|
children: [/* @__PURE__ */ jsx(ToggleGroup, {
|
|
62
71
|
ref: groupRef,
|
|
63
72
|
value: value === void 0 ? [] : [value],
|
|
@@ -87,7 +96,7 @@ const SegmentedControl = React.forwardRef(function SegmentedControl({ items, val
|
|
|
87
96
|
onNudge: scroll.nudge,
|
|
88
97
|
previousLabel,
|
|
89
98
|
nextLabel,
|
|
90
|
-
className:
|
|
99
|
+
className: `rounded-control ${SEGMENTED_CHEVRON_GROUND}`
|
|
91
100
|
})]
|
|
92
101
|
});
|
|
93
102
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { LABEL_FACE } from "../system/_style-label-face.js";
|
|
2
3
|
import { STATUS_BAR_GROUP_CLASSES, statusBarItemClasses } from "./_status-bar.js";
|
|
3
4
|
import { StatusBarInteractiveItem } from "./_status-bar-item.js";
|
|
4
5
|
import * as React from "react";
|
|
@@ -8,7 +9,7 @@ const StatusBarRoot = React.forwardRef(function StatusBar({ className, ...elemen
|
|
|
8
9
|
return /* @__PURE__ */ jsx("div", {
|
|
9
10
|
ref,
|
|
10
11
|
"data-slot": "status-bar",
|
|
11
|
-
className: cn("flex h-(--cue-chrome-statusbar) w-full shrink-0 items-center gap-(--cue-space-4) overflow-x-clip border-t border-border bg-surface-1 px-(--cue-pad-row-x)
|
|
12
|
+
className: cn("flex h-(--cue-chrome-statusbar) w-full shrink-0 items-center gap-(--cue-space-4) overflow-x-clip border-t border-border bg-surface-1 px-(--cue-pad-row-x) text-(length:--cue-text-label) text-fg-subtle", LABEL_FACE, className),
|
|
12
13
|
...elementProps
|
|
13
14
|
});
|
|
14
15
|
});
|
package/dist/chrome/tabs.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING_INSET_2, FOCUS_RING_OFFSET_2 } from "../system/_focus-ring.js";
|
|
4
|
+
import { CONTROL_FACE } from "../system/_style-control-face.js";
|
|
3
5
|
import { EDGE_SCROLLER_CLASSES, EdgeChevrons, useEdgeScroll } from "./_edge-scroller.js";
|
|
6
|
+
import { SEGMENT_IDLE_INK } from "../system/_style-segment.js";
|
|
7
|
+
import { TAB_ACTIVE, TAB_RULE, TAB_SHAPE, TAB_TRACK, TAB_UNDERLINE } from "../system/_style-tab.js";
|
|
4
8
|
import * as React from "react";
|
|
5
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
10
|
import { Tabs } from "@base-ui/react/tabs";
|
|
@@ -25,7 +29,7 @@ const TabsList = React.forwardRef(function TabsList({ className, ...elementProps
|
|
|
25
29
|
return /* @__PURE__ */ jsx(Tabs.List, {
|
|
26
30
|
ref,
|
|
27
31
|
"data-slot": "tabs-list",
|
|
28
|
-
className: cn(
|
|
32
|
+
className: cn(`relative flex items-center gap-(--cue-space-1) ${TAB_RULE} border-border ${TAB_TRACK} data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch data-[orientation=vertical]:border-b-0 data-[orientation=vertical]:border-r`, className),
|
|
29
33
|
...elementProps
|
|
30
34
|
});
|
|
31
35
|
});
|
|
@@ -33,12 +37,16 @@ const TabsList = React.forwardRef(function TabsList({ className, ...elementProps
|
|
|
33
37
|
* One tab. Selected state is an accent underline sitting on the list's rule —
|
|
34
38
|
* never a filled pill, which at console density turns a row of four tabs into a
|
|
35
39
|
* row of four buttons and loses the "one surface, several views" reading.
|
|
40
|
+
*
|
|
41
|
+
* That is the default. A Look that draws its tabs as a segmented track says so
|
|
42
|
+
* through the style set's segment names, and takes the rule and the underline
|
|
43
|
+
* away with `style-tab-rule` and `style-tab-underline`.
|
|
36
44
|
*/
|
|
37
45
|
const TabsTab = React.forwardRef(function TabsTab({ className, ...elementProps }, ref) {
|
|
38
46
|
return /* @__PURE__ */ jsx(Tabs.Tab, {
|
|
39
47
|
ref,
|
|
40
48
|
"data-slot": "tabs-tab",
|
|
41
|
-
className: cn(
|
|
49
|
+
className: cn(`relative inline-flex h-control-md shrink-0 cursor-pointer items-center justify-center gap-(--cue-space-2) ${TAB_SHAPE} px-(--cue-space-4) text-(length:--cue-text-ui) whitespace-nowrap ${SEGMENT_IDLE_INK} transition-colors duration-150 outline-none select-none`, CONTROL_FACE, `hover:text-fg ${FOCUS_RING_INSET_2}`, "data-[disabled]:pointer-events-none data-[disabled]:opacity-40", "after:absolute after:inset-x-0 after:-bottom-px after:h-px after:bg-transparent after:content-['']", `${TAB_ACTIVE} ${TAB_UNDERLINE}`, className),
|
|
42
50
|
...elementProps
|
|
43
51
|
});
|
|
44
52
|
});
|
|
@@ -47,7 +55,7 @@ const TabsPanel = React.forwardRef(function TabsPanel({ className, ...elementPro
|
|
|
47
55
|
return /* @__PURE__ */ jsx(Tabs.Panel, {
|
|
48
56
|
ref,
|
|
49
57
|
"data-slot": "tabs-panel",
|
|
50
|
-
className: cn(
|
|
58
|
+
className: cn(`min-w-0 outline-none ${FOCUS_RING_OFFSET_2}`, className),
|
|
51
59
|
...elementProps
|
|
52
60
|
});
|
|
53
61
|
});
|
package/dist/chrome/toolbar.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING_INSET } from "../system/_focus-ring.js";
|
|
3
4
|
import { useComposedRefs } from "../lib/compose.js";
|
|
4
5
|
import { EDGE_SCROLLER_CLASSES, EdgeChevrons, useEdgeScroll } from "./_edge-scroller.js";
|
|
5
6
|
import * as React from "react";
|
|
@@ -54,7 +55,7 @@ const Toolbar$1 = {
|
|
|
54
55
|
return /* @__PURE__ */ jsxs(Toolbar.Button, {
|
|
55
56
|
ref,
|
|
56
57
|
"data-slot": "toolbar-button",
|
|
57
|
-
className: cn(
|
|
58
|
+
className: cn(`inline-flex h-control-md shrink-0 cursor-pointer items-center justify-center gap-(--cue-space-2) rounded-control px-(--cue-space-3) font-mono text-(length:--cue-text-ui) whitespace-nowrap text-fg-muted transition-colors duration-150 outline-none select-none hover:bg-surface-2 hover:text-fg ${FOCUS_RING_INSET} data-[disabled]:pointer-events-none data-[disabled]:opacity-40`, className),
|
|
58
59
|
...elementProps,
|
|
59
60
|
children: [Icon === void 0 ? null : /* @__PURE__ */ jsx(Icon, {
|
|
60
61
|
"aria-hidden": "true",
|
package/dist/chrome/tree.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING, FOCUS_RING_INSET } from "../system/_focus-ring.js";
|
|
3
4
|
import { TREE_GUIDE_GLYPHS, flattenTree } from "./_tree.js";
|
|
4
5
|
import { ChevronRightGlyph, EyeGlyph, EyeOffGlyph, GhostGlyph } from "./_glyphs.js";
|
|
5
6
|
import * as React from "react";
|
|
@@ -145,7 +146,7 @@ const Tree = React.forwardRef(function Tree({ className, items, expanded: expand
|
|
|
145
146
|
"data-disabled": item.disabled === true ? "" : void 0,
|
|
146
147
|
onFocus: () => setActiveId(item.id),
|
|
147
148
|
onClick: () => select(row),
|
|
148
|
-
className:
|
|
149
|
+
className: `group/tree-row flex h-control-sm cursor-default items-center gap-(--cue-space-1) rounded-control pr-(--cue-space-2) font-mono text-(length:--cue-text-ui) whitespace-nowrap text-fg-muted outline-none select-none hover:bg-surface-2 hover:text-fg ${FOCUS_RING_INSET} data-[selected]:bg-accent-soft data-[selected]:text-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-40`,
|
|
149
150
|
children: [
|
|
150
151
|
guides ? row.guides.map((guide, depth) => /* @__PURE__ */ jsx("span", {
|
|
151
152
|
"aria-hidden": "true",
|
|
@@ -239,7 +240,7 @@ const TreeVisibilityToggle = React.forwardRef(function TreeVisibilityToggle({ cl
|
|
|
239
240
|
if (event.defaultPrevented) return;
|
|
240
241
|
onValueChange(NEXT_VISIBILITY[value]);
|
|
241
242
|
},
|
|
242
|
-
className: cn(
|
|
243
|
+
className: cn(`flex size-icon-md shrink-0 cursor-pointer items-center justify-center rounded-control border-0 bg-transparent p-0 outline-none transition-colors duration-150 hover:text-fg ${FOCUS_RING} motion-reduce:transition-none data-[state=visible]:text-fg-subtle data-[state=ghost]:text-info data-[state=hidden]:text-warn`, className),
|
|
243
244
|
...elementProps,
|
|
244
245
|
children: /* @__PURE__ */ jsx(Glyph, { className: "size-icon-sm" })
|
|
245
246
|
});
|
package/dist/color/_thumb.js
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
|
+
import { FOCUS_RING_DATA_OFFSET_2 } from "../system/_focus-ring.js";
|
|
1
2
|
//#region src/color/_thumb.ts
|
|
2
3
|
/**
|
|
3
4
|
* The draggable puck shared by the colour area and every colour rail.
|
|
4
5
|
*
|
|
5
|
-
* The one place in this system where
|
|
6
|
+
* The one place in this system where the RIM is not a token colour: the thumb
|
|
6
7
|
* sits on top of arbitrary user colour, so it needs a light rim *and* a dark
|
|
7
8
|
* halo to stay visible against both ends of the spectrum. `--cue-fg` /
|
|
8
9
|
* `--cue-bg` supply the pair, which keeps it theme-driven without pretending a
|
|
9
|
-
* single token could do the job.
|
|
10
|
+
* single token could do the job. The keyboard ring is a different question —
|
|
11
|
+
* it is an indicator, not decoration — and reads `--cue-focus` like every
|
|
12
|
+
* other ring in this system (spec 2026-09-26-looks-fidelity §3.12, F-9): three
|
|
13
|
+
* shipped presets (hivehub, luma, venu, all light) fail WCAG 1.4.11 with the
|
|
14
|
+
* un-gated accent here, since the puck is exactly the small, thin indicator
|
|
15
|
+
* that clause guards.
|
|
10
16
|
*
|
|
11
17
|
* @internal Not part of the public API.
|
|
12
18
|
*/
|
|
13
|
-
const colorThumbClasses =
|
|
19
|
+
const colorThumbClasses = `size-[0.875rem] rounded-full border-2 border-fg shadow-[0_0_0_1px_var(--cue-bg)] outline-none ${FOCUS_RING_DATA_OFFSET_2} data-[dragging]:scale-110 data-[disabled]:opacity-40`;
|
|
14
20
|
//#endregion
|
|
15
21
|
export { colorThumbClasses };
|
package/dist/color/color-area.js
CHANGED
|
@@ -26,7 +26,7 @@ import { ColorArea, ColorThumb } from "react-aria-components";
|
|
|
26
26
|
function ColorArea$1({ className, thumbClassName, value, defaultValue, ...areaProps }) {
|
|
27
27
|
return /* @__PURE__ */ jsx(ColorArea, {
|
|
28
28
|
"data-slot": "color-area",
|
|
29
|
-
className: ariaClassName("relative h-[9rem] w-full touch-none rounded-
|
|
29
|
+
className: ariaClassName("relative h-[9rem] w-full touch-none rounded-control border border-border outline-none data-[disabled]:opacity-40", className),
|
|
30
30
|
value: toAriaColor(value),
|
|
31
31
|
defaultValue: toAriaColor(defaultValue),
|
|
32
32
|
...areaProps,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { FormControlSize } from "../forms/_chassis.js";
|
|
1
|
+
import { FormControlSize } from "../forms/_chassis-size.js";
|
|
2
|
+
import "../forms/_chassis.js";
|
|
2
3
|
import * as React from "react";
|
|
3
4
|
import { ColorFieldProps, InputProps } from "react-aria-components";
|
|
4
5
|
//#region src/color/color-field.d.ts
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ColorFormat } from "./_convert.js";
|
|
2
|
-
import { FormControlSize } from "../forms/_chassis.js";
|
|
2
|
+
import { FormControlSize } from "../forms/_chassis-size.js";
|
|
3
|
+
import "../forms/_chassis.js";
|
|
3
4
|
import * as React from "react";
|
|
4
5
|
//#region src/color/color-picker.d.ts
|
|
5
6
|
interface ColorPickerProps {
|
|
@@ -32,7 +32,7 @@ const SWATCH_SIZES = {
|
|
|
32
32
|
function ColorSwatch$1({ size = "md", className, color, ...swatchProps }) {
|
|
33
33
|
return /* @__PURE__ */ jsx("span", {
|
|
34
34
|
"data-slot": "color-swatch",
|
|
35
|
-
className: cn("relative inline-block shrink-0 overflow-hidden rounded-
|
|
35
|
+
className: cn("relative inline-block shrink-0 overflow-hidden rounded-control border border-border", SWATCH_SIZES[size], checkerClasses, className),
|
|
36
36
|
children: /* @__PURE__ */ jsx(ColorSwatch, {
|
|
37
37
|
color: toAriaColor(color),
|
|
38
38
|
className: "block size-full",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { THEME_NAME_PATTERN as THEME_NAME_PATTERN$1, assertCssValue, serializeSystemModeAliases, serializeThemeBlock, tokenProperty } from "../theming/serialize.js";
|
|
1
|
+
import { THEME_NAME_PATTERN as THEME_NAME_PATTERN$1, assertCssValue, followerSelector, serializeSystemModeAliases, serializeThemeBlock, themeFollowerSelector, tokenProperty } from "../theming/serialize.js";
|
|
2
2
|
import { DEFAULT_DENSITY_LEVEL, DENSITY_RADIUS_SCALE, THEME_COLOR_TOKENS } from "../theming/create-theme.js";
|
|
3
3
|
import { resolve } from "@cueplusplus/theme-base";
|
|
4
4
|
//#region src/configurator/_overrides.ts
|
|
@@ -320,9 +320,18 @@ function orderedDeclarations(entries) {
|
|
|
320
320
|
* form: a bare `[data-theme="x"]` for dark, because that is the block a
|
|
321
321
|
* stylesheet writes first. An override has to beat that block **and** the light
|
|
322
322
|
* block above it, so it always names the mode.
|
|
323
|
+
*
|
|
324
|
+
* Which is why it carries the follower's twin in both modes, not only in light:
|
|
325
|
+
* a theme island that follows a persisting root's mode stamps no `data-mode`
|
|
326
|
+
* until it mounts, and a compound naming `dark` misses it exactly as one naming
|
|
327
|
+
* `light` does (see `followerSelector`). And the theme follower's twin for the
|
|
328
|
+
* same reason one axis over: an island that names a mode and follows the
|
|
329
|
+
* root's theme stamps no `data-theme` until it mounts (see
|
|
330
|
+
* `themeFollowerSelector`). Same specificity, so source order still puts these
|
|
331
|
+
* after every theme's own blocks.
|
|
323
332
|
*/
|
|
324
333
|
function overrideSelector(theme, mode) {
|
|
325
|
-
return
|
|
334
|
+
return `${themeFollowerSelector(theme, mode)},\n${followerSelector(theme, "mode", mode)},\n[data-theme="${theme}"][data-mode="${mode}"]`;
|
|
326
335
|
}
|
|
327
336
|
/** Round a product of two scales to something a stylesheet can print. */
|
|
328
337
|
const scaled = (a, b) => String(Number((a * b).toFixed(4)));
|
|
@@ -376,7 +385,7 @@ function serializeOverrideCss(overrides, options = {}) {
|
|
|
376
385
|
if (scaledDeclarations.length > 0) for (const level of DENSITY_LEVELS) {
|
|
377
386
|
const isDefault = level === DEFAULT_DENSITY_LEVEL;
|
|
378
387
|
blocks.push({
|
|
379
|
-
selector:
|
|
388
|
+
selector: `:where(:root[data-density="${level}"]) [data-cue-follows~="density"],\n${isDefault ? ":root,\n" : ""}[data-density="${level}"]`,
|
|
380
389
|
sections: [{
|
|
381
390
|
comment: isDefault ? CROSSED_COMMENT : void 0,
|
|
382
391
|
declarations: scaledDeclarations.map(([property, value]) => [property, crossed(property, value, level)])
|
|
@@ -384,7 +393,7 @@ function serializeOverrideCss(overrides, options = {}) {
|
|
|
384
393
|
});
|
|
385
394
|
}
|
|
386
395
|
if (flatDeclarations.length > 0) blocks.push({
|
|
387
|
-
selector: ":root,\n[data-density]",
|
|
396
|
+
selector: "[data-cue-follows~=\"density\"],\n:root,\n[data-density]",
|
|
388
397
|
sections: [{ declarations: flatDeclarations }]
|
|
389
398
|
});
|
|
390
399
|
if (inlineDeclarations.length > 0) blocks.push({
|