@cueplusplus/ui 0.16.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +825 -0
- package/README.md +1 -1
- package/dist/agent-runtime/tool-call-card.js +7 -3
- package/dist/brand/_chassis.d.ts +1 -1
- package/dist/brand/cue-mark.d.ts +1 -1
- package/dist/brand/cue-mark.js +1 -1
- package/dist/charts/ramps.js +1 -1
- package/dist/chat/agent-pile.js +2 -1
- package/dist/chat/ask-box.js +4 -3
- package/dist/chat/delegation-card.js +3 -2
- package/dist/chat/message-list.js +3 -2
- package/dist/chat/message.js +17 -7
- package/dist/chrome/_edge-scroller.js +2 -1
- package/dist/chrome/_status-bar.js +9 -3
- package/dist/chrome/_tabs-scroll.d.ts +1 -1
- package/dist/chrome/_tabs-scroll.js +1 -1
- package/dist/chrome/app-bar.js +9 -3
- package/dist/chrome/app-shell.js +2 -1
- package/dist/chrome/band.d.ts +18 -12
- package/dist/chrome/band.js +18 -32
- package/dist/chrome/eyebrow.d.ts +13 -5
- package/dist/chrome/eyebrow.js +18 -7
- package/dist/chrome/footer.d.ts +5 -0
- package/dist/chrome/footer.js +14 -3
- package/dist/chrome/navigation-menu.js +4 -2
- package/dist/chrome/page-shell.js +8 -5
- package/dist/chrome/panel.d.ts +5 -2
- package/dist/chrome/panel.js +8 -4
- package/dist/chrome/row.js +6 -3
- package/dist/chrome/scroll-area.js +2 -1
- package/dist/chrome/section-header.js +13 -4
- package/dist/chrome/segmented-control.js +12 -3
- package/dist/chrome/status-bar.js +2 -1
- package/dist/chrome/tabs.js +11 -3
- package/dist/chrome/toolbar.js +2 -1
- package/dist/chrome/tree.js +3 -2
- package/dist/color/_thumb.js +9 -3
- package/dist/color/color-area.js +1 -1
- package/dist/color/color-swatch.js +1 -1
- package/dist/configurator/_overrides.js +13 -4
- package/dist/configurator/configurator.js +4 -1
- package/dist/configurator/export-dialog.js +5 -2
- package/dist/configurator/panel-sections.js +6 -2
- package/dist/configurator/token-editor.js +4 -1
- package/dist/date/calendar.js +12 -8
- package/dist/dmx/channel-matrix.js +3 -2
- package/dist/dmx/dmx-bar.js +1 -1
- package/dist/dmx/dmx-strip.js +1 -1
- package/dist/dmx/universe-grid.js +3 -2
- package/dist/elements/activity-graph.js +3 -3
- package/dist/elements/agent-card.js +3 -3
- package/dist/elements/approval-card.js +3 -3
- package/dist/elements/artifact-card.js +2 -2
- package/dist/elements/background-inbox.js +2 -2
- package/dist/elements/canvas-split.js +2 -2
- package/dist/elements/chart.js +1 -1
- package/dist/elements/chat-panel.js +2 -2
- package/dist/elements/checkpoint-history.js +2 -2
- package/dist/elements/clamp.js +2 -1
- package/dist/elements/code-diff.js +1 -1
- package/dist/elements/code-runner.js +1 -1
- package/dist/elements/command-palette.js +6 -5
- package/dist/elements/comparison-card.js +2 -2
- package/dist/elements/composer.js +9 -8
- package/dist/elements/computer-use.js +1 -1
- package/dist/elements/confidence-marker.js +2 -1
- package/dist/elements/connection-state.js +1 -1
- package/dist/elements/context-breakdown.js +1 -1
- package/dist/elements/context-usage.js +1 -1
- package/dist/elements/conversation-search.js +4 -3
- package/dist/elements/cost-meter.js +1 -1
- package/dist/elements/data-table.js +2 -2
- package/dist/elements/day-separator.js +1 -1
- package/dist/elements/diagram.js +1 -1
- package/dist/elements/document-reference.js +3 -3
- package/dist/elements/draft-restore.js +1 -1
- package/dist/elements/edit-message.js +4 -3
- package/dist/elements/elements.css +26 -5
- package/dist/elements/elicitation-form.js +3 -3
- package/dist/elements/empty-state.js +2 -1
- package/dist/elements/error-state.js +1 -1
- package/dist/elements/feedback-dialog.js +4 -3
- package/dist/elements/file-tree.js +2 -2
- package/dist/elements/flow-graph.js +2 -2
- package/dist/elements/guardrail-notice.js +3 -3
- package/dist/elements/image-generation.js +1 -1
- package/dist/elements/inline-citation.js +3 -3
- package/dist/elements/job-progress.js +3 -3
- package/dist/elements/launcher-bubble.js +2 -2
- package/dist/elements/loading-state.js +1 -1
- package/dist/elements/map-answer.js +3 -2
- package/dist/elements/markdown.js +5 -4
- package/dist/elements/math-block.js +1 -1
- package/dist/elements/mcp-server-panel.js +3 -3
- package/dist/elements/message-attachment.js +4 -4
- package/dist/elements/message-pair.js +1 -1
- package/dist/elements/message-queue.js +2 -2
- package/dist/elements/mobile-composer.js +4 -3
- package/dist/elements/model-picker.js +3 -3
- package/dist/elements/onboarding.js +2 -2
- package/dist/elements/permission-grant.js +2 -2
- package/dist/elements/permission-scopes.js +5 -4
- package/dist/elements/prompt-library.js +7 -6
- package/dist/elements/queue-dock.js +4 -3
- package/dist/elements/quota-banner.js +1 -1
- package/dist/elements/quote-reply.js +1 -1
- package/dist/elements/read-aloud.js +2 -2
- package/dist/elements/reasoning-panel.js +2 -1
- package/dist/elements/recommendation-card.d.ts +1 -1
- package/dist/elements/recommendation-card.js +2 -2
- package/dist/elements/regenerate-menu.js +2 -2
- package/dist/elements/research-report.js +1 -1
- package/dist/elements/retrieval-chunks.js +1 -1
- package/dist/elements/revert-dock.js +5 -4
- package/dist/elements/reviewable-diff.js +1 -1
- package/dist/elements/schedule-card.js +3 -3
- package/dist/elements/score-breakdown.js +1 -1
- package/dist/elements/scroll-anchor.js +2 -2
- package/dist/elements/settings-panel.js +3 -2
- package/dist/elements/shared-conversation.js +2 -2
- package/dist/elements/sources.js +4 -3
- package/dist/elements/speaker-identity.js +1 -1
- package/dist/elements/spec-sheet.js +1 -1
- package/dist/elements/streaming-text.js +1 -1
- package/dist/elements/subagent-list.js +2 -2
- package/dist/elements/suggestions.js +1 -1
- package/dist/elements/surfaces.d.ts +1 -1
- package/dist/elements/surfaces.js +2 -1
- package/dist/elements/tail-status.js +1 -1
- package/dist/elements/terminal-block.js +1 -1
- package/dist/elements/thread-list.js +1 -1
- package/dist/elements/thread-search.js +5 -4
- package/dist/elements/timeline.js +1 -1
- package/dist/elements/todo-list.js +2 -2
- package/dist/elements/tool-call.js +4 -3
- package/dist/elements/tool-error.js +2 -2
- package/dist/elements/tool-group.js +1 -1
- package/dist/elements/tool-timeline.js +4 -3
- package/dist/elements/trace-waterfall.js +1 -1
- package/dist/elements/verdict-row.js +2 -2
- package/dist/elements/voice-conversation.js +3 -2
- package/dist/elements/web-preview.js +1 -1
- package/dist/elements/web-search.js +2 -2
- package/dist/elements/work-collapse.js +2 -1
- package/dist/flow/node-card.js +3 -2
- package/dist/flow/use-flow-theme.js +2 -1
- package/dist/forms/_chassis.d.ts +26 -6
- package/dist/forms/_chassis.js +33 -8
- package/dist/forms/_listbox.js +8 -5
- package/dist/forms/checkbox.js +8 -2
- package/dist/forms/env-var-input.js +3 -2
- package/dist/forms/field.d.ts +2 -1
- package/dist/forms/field.js +15 -4
- package/dist/forms/file-upload.js +3 -2
- package/dist/forms/number-field.js +2 -1
- package/dist/forms/password-input.js +4 -2
- package/dist/forms/radio-group.js +6 -2
- package/dist/forms/rating.js +2 -1
- package/dist/forms/scrub-input.js +2 -1
- package/dist/forms/search-input.js +2 -1
- package/dist/forms/select.js +5 -2
- package/dist/forms/slider.js +6 -2
- package/dist/forms/switch.js +6 -2
- package/dist/forms/textarea.js +2 -1
- package/dist/forms/toggle.js +3 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/instruments/_data-row.js +2 -1
- package/dist/instruments/app-window-frame.js +1 -1
- package/dist/instruments/code-block.js +8 -2
- package/dist/instruments/group-bar.js +1 -1
- package/dist/instruments/ledger.js +6 -2
- package/dist/instruments/log-viewer.js +4 -3
- package/dist/instruments/progress.js +5 -2
- package/dist/instruments/seam-grid.js +5 -3
- package/dist/instruments/stat.js +10 -3
- package/dist/instruments/table.js +28 -10
- package/dist/instruments/terminal-frame.js +4 -2
- package/dist/instruments/usage-chart.js +1 -1
- package/dist/layout/_collapse.js +6 -1
- package/dist/layout/bento.js +7 -4
- package/dist/layout/breadcrumb.js +7 -3
- package/dist/layout/card.js +12 -6
- package/dist/layout/carousel.js +3 -2
- package/dist/layout/collapsible.js +5 -1
- package/dist/layout/container.js +2 -1
- package/dist/layout/description-list.js +4 -1
- package/dist/layout/frames.js +11 -5
- package/dist/layout/item.js +3 -2
- package/dist/layout/link.d.ts +16 -0
- package/dist/layout/link.js +22 -3
- package/dist/layout/pagination.js +2 -1
- package/dist/layout/preview.d.ts +32 -12
- package/dist/layout/preview.js +149 -40
- package/dist/layout/resizable.js +2 -1
- package/dist/layout/sidebar.js +11 -3
- package/dist/layout/stepper.js +6 -2
- package/dist/lib/cn.js +29 -2
- package/dist/midi/piano-keyboard.js +3 -2
- package/dist/midi/spectrum-visualizer.js +1 -1
- package/dist/midi/threshold-rail.js +2 -1
- package/dist/midi/timeline-ruler.js +1 -1
- package/dist/overlays/_surface.d.ts +72 -12
- package/dist/overlays/_surface.js +84 -12
- package/dist/overlays/command-palette.js +9 -5
- package/dist/overlays/dialog.d.ts +5 -0
- package/dist/overlays/dialog.js +6 -1
- package/dist/overlays/info-tip.js +2 -1
- package/dist/overlays/menubar.js +3 -1
- package/dist/overlays/popover.js +2 -1
- package/dist/overlays/toast.js +6 -2
- package/dist/overlays/tooltip.js +4 -1
- package/dist/primitives/button.d.ts +15 -0
- package/dist/primitives/button.js +40 -11
- package/dist/primitives/chip.d.ts +19 -1
- package/dist/primitives/chip.js +39 -17
- package/dist/primitives/kbd.d.ts +6 -0
- package/dist/primitives/kbd.js +10 -1
- package/dist/primitives/skeleton.js +1 -1
- package/dist/system/_focus-ring-field.js +29 -0
- package/dist/system/_focus-ring.js +125 -0
- package/dist/system/_paint-glow.js +22 -3
- package/dist/system/_paint-rest-shade.js +32 -0
- package/dist/system/_paint-rim.js +22 -4
- package/dist/system/_paint-stroke-surface-1.js +1 -1
- package/dist/system/_paint-stroke-surface-2.js +14 -1
- package/dist/system/_paint-texture.js +5 -2
- package/dist/system/_style-app-bar.js +65 -0
- package/dist/system/_style-band.js +57 -0
- package/dist/system/_style-body-leading.js +21 -0
- package/dist/system/_style-body-size.js +30 -0
- package/dist/system/_style-body-weight.js +24 -0
- package/dist/system/_style-body.js +27 -0
- package/dist/system/_style-caption.js +19 -0
- package/dist/system/_style-card-pad.js +43 -0
- package/dist/system/_style-check.js +33 -0
- package/dist/system/_style-chip.js +103 -0
- package/dist/system/_style-code.js +13 -0
- package/dist/system/_style-collapse.js +14 -0
- package/dist/system/_style-control-face.js +29 -0
- package/dist/system/_style-control-label.js +22 -0
- package/dist/system/_style-control-step.js +22 -0
- package/dist/system/_style-control.js +76 -0
- package/dist/system/_style-data-face.js +28 -0
- package/dist/system/_style-description.js +23 -0
- package/dist/system/_style-eyebrow.js +43 -0
- package/dist/system/_style-footer-rule.js +47 -0
- package/dist/system/_style-gutter.js +17 -0
- package/dist/system/_style-help-ink.js +14 -0
- package/dist/system/_style-help.js +29 -0
- package/dist/system/_style-input-face.js +34 -0
- package/dist/system/_style-kbd.js +46 -0
- package/dist/system/_style-label-case.js +36 -0
- package/dist/system/_style-label-face.js +32 -0
- package/dist/system/_style-label-ink.js +29 -0
- package/dist/system/_style-label-leading.js +14 -0
- package/dist/system/_style-label-size.js +36 -0
- package/dist/system/_style-label-tracking.js +45 -0
- package/dist/system/_style-label-weight.js +40 -0
- package/dist/system/_style-lede.js +49 -0
- package/dist/system/_style-link.js +46 -0
- package/dist/system/_style-menu.js +30 -0
- package/dist/system/_style-nav-item.js +41 -0
- package/dist/system/_style-nav-voice.js +43 -0
- package/dist/system/_style-option.js +42 -0
- package/dist/system/_style-overlay-title.js +35 -0
- package/dist/system/_style-page-title.js +48 -0
- package/dist/system/_style-popover-pad.js +13 -0
- package/dist/system/_style-quiet-ink.js +13 -0
- package/dist/system/_style-row-pad.js +13 -0
- package/dist/system/_style-seam.js +43 -0
- package/dist/system/_style-section-rule.js +26 -0
- package/dist/system/_style-segment.js +30 -0
- package/dist/system/_style-segmented-control.js +86 -0
- package/dist/system/_style-selected.js +36 -0
- package/dist/system/_style-stage-marks.js +26 -0
- package/dist/system/_style-tab.js +71 -0
- package/dist/system/_style-textarea.js +21 -0
- package/dist/system/_style-title.js +37 -0
- package/dist/system/_style-tooltip.js +17 -0
- package/dist/system/density.d.ts +15 -5
- package/dist/system/density.js +188 -25
- package/dist/system/index.d.ts +2 -2
- package/dist/system/index.js +2 -2
- package/dist/system/overrides.d.ts +1 -0
- package/dist/system/overrides.js +151 -3
- package/dist/system/portal.d.ts +3 -2
- package/dist/system/portal.js +22 -10
- package/dist/system/prepaint.d.ts +21 -5
- package/dist/system/prepaint.js +3 -1
- package/dist/system/published.d.ts +1 -0
- package/dist/system/published.js +131 -0
- package/dist/system/theme-provider.d.ts +118 -21
- package/dist/system/theme-provider.js +362 -73
- package/dist/system/theme-registry.d.ts +2 -1
- package/dist/system/theme-registry.js +27 -10
- package/dist/system/use-density.js +4 -3
- package/dist/system/use-theme.d.ts +5 -2
- package/dist/system/use-theme.js +7 -4
- package/dist/system/vocabulary.js +2 -2
- package/dist/theming/create-theme.js +12 -6
- package/dist/theming/serialize.d.ts +34 -2
- package/dist/theming/serialize.js +86 -4
- package/manifest/components/accordion.json +7 -1
- package/manifest/components/agent-pile.json +3 -0
- package/manifest/components/alert-dialog.json +29 -3
- package/manifest/components/app-bar.json +19 -2
- package/manifest/components/app-shell.json +5 -0
- package/manifest/components/ask-box.json +3 -1
- package/manifest/components/autocomplete.json +38 -1
- package/manifest/components/band.json +7 -3
- package/manifest/components/bento.json +12 -1
- package/manifest/components/breadcrumb.json +8 -1
- package/manifest/components/button.json +27 -3
- package/manifest/components/calendar.json +7 -0
- package/manifest/components/card.json +22 -1
- package/manifest/components/carousel.json +4 -1
- package/manifest/components/channel-matrix.json +31 -3
- package/manifest/components/chart-tooltip-content.json +29 -3
- package/manifest/components/chat-empty-state.json +3 -1
- package/manifest/components/checkbox-group.json +14 -0
- package/manifest/components/checkbox.json +14 -0
- package/manifest/components/chip.json +16 -1
- package/manifest/components/clamp.json +3 -1
- package/manifest/components/code-block.json +10 -1
- package/manifest/components/collapsible.json +13 -2
- package/manifest/components/color-area.json +4 -2
- package/manifest/components/color-field.json +10 -0
- package/manifest/components/color-picker.json +10 -0
- package/manifest/components/color-slider.json +3 -1
- package/manifest/components/colors-section.json +9 -1
- package/manifest/components/combobox.json +38 -1
- package/manifest/components/command-palette.json +28 -3
- package/manifest/components/composer-actions.json +3 -0
- package/manifest/components/composer-attach-button.json +3 -0
- package/manifest/components/composer-attachment-chip.json +3 -0
- package/manifest/components/composer-attachments.json +3 -0
- package/manifest/components/composer-bar.json +3 -0
- package/manifest/components/composer-command-item.json +3 -0
- package/manifest/components/composer-context.json +3 -0
- package/manifest/components/composer-input.json +3 -0
- package/manifest/components/composer-menu-item.json +3 -0
- package/manifest/components/composer-menu.json +3 -0
- package/manifest/components/composer-model-item.json +3 -0
- package/manifest/components/composer-model-trigger.json +3 -0
- package/manifest/components/composer-person-item.json +3 -0
- package/manifest/components/composer-send.json +3 -0
- package/manifest/components/composer-toolbar.json +3 -0
- package/manifest/components/composer-voice-button.json +3 -0
- package/manifest/components/composer-voice.json +3 -0
- package/manifest/components/composer.json +10 -0
- package/manifest/components/confidence-marker.json +3 -1
- package/manifest/components/container.json +2 -1
- package/manifest/components/context-menu.json +29 -3
- package/manifest/components/conversation-search.json +3 -1
- package/manifest/components/cue-mark.json +2 -2
- package/manifest/components/cue-portal-frame.json +1 -1
- package/manifest/components/data-row.json +3 -1
- package/manifest/components/data-tree.json +3 -1
- package/manifest/components/date-field.json +10 -0
- package/manifest/components/date-picker.json +10 -0
- package/manifest/components/date-range-picker.json +10 -0
- package/manifest/components/delegation-card.json +3 -1
- package/manifest/components/density.json +15 -7
- package/manifest/components/description-list.json +6 -1
- package/manifest/components/dialog.json +30 -3
- package/manifest/components/disclosure.json +13 -2
- package/manifest/components/dmx-bar.json +28 -3
- package/manifest/components/dmx-strip.json +28 -3
- package/manifest/components/drawer.json +29 -3
- package/manifest/components/dropdown-menu.json +29 -3
- package/manifest/components/edit-message.json +3 -1
- package/manifest/components/elements-command-palette.json +3 -1
- package/manifest/components/elements-composer.json +3 -0
- package/manifest/components/empty-state-composer.json +3 -1
- package/manifest/components/empty-state-greeting.json +3 -1
- package/manifest/components/empty-state-suggestion.json +3 -1
- package/manifest/components/empty-state-suggestions.json +3 -1
- package/manifest/components/env-var-input.json +10 -1
- package/manifest/components/export-dialog.json +6 -1
- package/manifest/components/eyebrow.json +13 -2
- package/manifest/components/feedback-dialog.json +3 -0
- package/manifest/components/field-description.json +14 -0
- package/manifest/components/field-error.json +14 -0
- package/manifest/components/field-label.json +15 -1
- package/manifest/components/field.json +14 -0
- package/manifest/components/file-upload.json +3 -0
- package/manifest/components/footer.json +14 -1
- package/manifest/components/frames.json +14 -1
- package/manifest/components/hover-card.json +29 -3
- package/manifest/components/info-tip.json +3 -0
- package/manifest/components/input-group.json +10 -0
- package/manifest/components/input.json +10 -0
- package/manifest/components/item.json +3 -1
- package/manifest/components/kbd.json +10 -1
- package/manifest/components/ledger.json +9 -2
- package/manifest/components/link.json +10 -0
- package/manifest/components/log-viewer.json +3 -0
- package/manifest/components/map-answer.json +3 -1
- package/manifest/components/markdown-text.json +3 -0
- package/manifest/components/menubar.json +32 -4
- package/manifest/components/message-list.json +3 -0
- package/manifest/components/message.json +6 -1
- package/manifest/components/mobile-composer.json +3 -1
- package/manifest/components/multi-select.json +38 -1
- package/manifest/components/musical-time-input.json +10 -0
- package/manifest/components/navigation-menu.json +32 -3
- package/manifest/components/node-card.json +3 -0
- package/manifest/components/number-field.json +10 -1
- package/manifest/components/otp-field.json +9 -0
- package/manifest/components/page-shell.json +14 -0
- package/manifest/components/pagination.json +3 -0
- package/manifest/components/panel-header.json +10 -0
- package/manifest/components/panel.json +11 -1
- package/manifest/components/password-input.json +10 -1
- package/manifest/components/permission-scopes.json +3 -1
- package/manifest/components/piano-keyboard.json +3 -0
- package/manifest/components/popover.json +30 -3
- package/manifest/components/preset-section.json +9 -1
- package/manifest/components/preview.json +24 -10
- package/manifest/components/progress.json +6 -1
- package/manifest/components/prompt-library.json +3 -1
- package/manifest/components/queue-dock.json +3 -1
- package/manifest/components/radio-group.json +8 -0
- package/manifest/components/radio.json +8 -0
- package/manifest/components/rating.json +4 -1
- package/manifest/components/reasoning-panel.json +3 -1
- package/manifest/components/recommendation-card.json +1 -1
- package/manifest/components/resizable.json +4 -1
- package/manifest/components/revert-dock.json +3 -1
- package/manifest/components/row.json +5 -1
- package/manifest/components/scroll-area.json +4 -2
- package/manifest/components/scrollable-tabs-list.json +18 -0
- package/manifest/components/scrub-input.json +10 -1
- package/manifest/components/seam-cell.json +1 -0
- package/manifest/components/seam-grid.json +1 -0
- package/manifest/components/seam-list.json +5 -1
- package/manifest/components/search-input.json +10 -1
- package/manifest/components/section-header.json +15 -2
- package/manifest/components/segmented-control.json +16 -0
- package/manifest/components/select.json +17 -0
- package/manifest/components/settings-panel.json +3 -0
- package/manifest/components/shape-section.json +9 -1
- package/manifest/components/sheet.json +29 -3
- package/manifest/components/shimmer-label.json +3 -0
- package/manifest/components/sidebar.json +19 -2
- package/manifest/components/slider.json +8 -0
- package/manifest/components/sources.json +3 -1
- package/manifest/components/stat.json +9 -0
- package/manifest/components/status-bar.json +4 -0
- package/manifest/components/stepper.json +8 -0
- package/manifest/components/swap-label.json +3 -0
- package/manifest/components/switch.json +8 -0
- package/manifest/components/table-scroll-region.json +20 -2
- package/manifest/components/table.json +20 -2
- package/manifest/components/tabs.json +19 -1
- package/manifest/components/tags-input.json +38 -1
- package/manifest/components/terminal-frame.json +3 -0
- package/manifest/components/textarea.json +12 -0
- package/manifest/components/theme-configurator.json +29 -3
- package/manifest/components/theme-provider.json +31 -19
- package/manifest/components/thread-search.json +3 -1
- package/manifest/components/threshold-rail.json +3 -0
- package/manifest/components/time-field.json +10 -0
- package/manifest/components/toast.json +30 -2
- package/manifest/components/toggle.json +4 -0
- package/manifest/components/token-editor.json +6 -1
- package/manifest/components/tool-call-card.json +9 -2
- package/manifest/components/tool-call.json +3 -1
- package/manifest/components/tool-timeline.json +3 -1
- package/manifest/components/toolbar.json +3 -1
- package/manifest/components/tooltip.json +31 -3
- package/manifest/components/tree-visibility-toggle.json +3 -0
- package/manifest/components/tree.json +3 -0
- package/manifest/components/universe-grid.json +3 -0
- package/manifest/components/voice-conversation.json +3 -0
- package/manifest/components/work-collapse.json +3 -1
- package/manifest/manifest.json +204 -184
- package/manifest/tokens.json +241 -4
- package/package.json +5 -5
|
@@ -17,7 +17,7 @@ function ModelPicker({ models, selectedId, onSelect, className, ...props }) {
|
|
|
17
17
|
const families = [...new Set(models.map((model) => model.family))];
|
|
18
18
|
return /* @__PURE__ */ jsx("div", {
|
|
19
19
|
"data-slot": "model-picker",
|
|
20
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-1 rounded-
|
|
20
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-1 rounded-overlay p-2", className),
|
|
21
21
|
...props,
|
|
22
22
|
children: families.map((family) => /* @__PURE__ */ jsxs("div", {
|
|
23
23
|
className: "flex flex-col",
|
|
@@ -30,7 +30,7 @@ function ModelPicker({ models, selectedId, onSelect, className, ...props }) {
|
|
|
30
30
|
type: "button",
|
|
31
31
|
"aria-pressed": selected,
|
|
32
32
|
onClick: () => onSelect?.(model.id),
|
|
33
|
-
className: cn("flex items-center gap-2.5 rounded-
|
|
33
|
+
className: cn("flex items-center gap-2.5 rounded-surface px-2 py-2 text-start transition-colors", selected ? "bg-surface-2" : "hover:bg-surface-1"),
|
|
34
34
|
children: [
|
|
35
35
|
/* @__PURE__ */ jsx("span", {
|
|
36
36
|
className: "flex size-3.5 shrink-0 items-center justify-center",
|
|
@@ -44,7 +44,7 @@ function ModelPicker({ models, selectedId, onSelect, className, ...props }) {
|
|
|
44
44
|
}), /* @__PURE__ */ jsx("span", {
|
|
45
45
|
className: "flex flex-wrap gap-1",
|
|
46
46
|
children: model.capabilities.map((capability) => /* @__PURE__ */ jsx("span", {
|
|
47
|
-
className: cn(field, mono, "text-fg-muted rounded-
|
|
47
|
+
className: cn(field, mono, "text-fg-muted rounded-control px-1 py-px"),
|
|
48
48
|
children: capability
|
|
49
49
|
}, capability))
|
|
50
50
|
})]
|
|
@@ -19,7 +19,7 @@ function Onboarding({ steps, index, onNext, onSkip, className, ...props }) {
|
|
|
19
19
|
const last = current >= steps.length - 1;
|
|
20
20
|
return /* @__PURE__ */ jsxs("div", {
|
|
21
21
|
"data-slot": "onboarding",
|
|
22
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-4 rounded-
|
|
22
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-4 rounded-overlay p-5", className),
|
|
23
23
|
...props,
|
|
24
24
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
25
25
|
className: "cue-elements-fade-in cue-elements-animate-in flex flex-col gap-2 duration-300",
|
|
@@ -41,7 +41,7 @@ function Onboarding({ steps, index, onNext, onSkip, className, ...props }) {
|
|
|
41
41
|
children: step.body
|
|
42
42
|
}),
|
|
43
43
|
/* @__PURE__ */ jsx("span", {
|
|
44
|
-
className: cn(field, "text-fg-muted rounded-
|
|
44
|
+
className: cn(field, "text-fg-muted rounded-surface px-3 py-2 text-(length:--cue-text-body) leading-(--cue-leading-ui)"),
|
|
45
45
|
children: step.example
|
|
46
46
|
})
|
|
47
47
|
]
|
|
@@ -21,13 +21,13 @@ import { KeyRoundIcon } from "lucide-react";
|
|
|
21
21
|
function PermissionGrant({ capability, requester, reach, scope, onGrant, className, ...props }) {
|
|
22
22
|
return /* @__PURE__ */ jsxs("div", {
|
|
23
23
|
"data-slot": "permission-grant",
|
|
24
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-3.5 rounded-
|
|
24
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-3.5 rounded-overlay p-4", className),
|
|
25
25
|
...props,
|
|
26
26
|
children: [
|
|
27
27
|
/* @__PURE__ */ jsxs("div", {
|
|
28
28
|
className: "flex items-center gap-2.5",
|
|
29
29
|
children: [/* @__PURE__ */ jsx("span", {
|
|
30
|
-
className: "bg-surface-1 text-fg-muted flex size-7 shrink-0 items-center justify-center rounded-
|
|
30
|
+
className: "bg-surface-1 text-fg-muted flex size-7 shrink-0 items-center justify-center rounded-surface",
|
|
31
31
|
children: /* @__PURE__ */ jsx(KeyRoundIcon, { className: "size-3.5" })
|
|
32
32
|
}), /* @__PURE__ */ jsxs("div", {
|
|
33
33
|
className: "flex min-w-0 flex-1 flex-col",
|
|
@@ -1,5 +1,6 @@
|
|
|
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";
|
|
3
4
|
import { field, fieldInteractive, mono, paper } from "./surfaces.js";
|
|
4
5
|
import { PERMISSION_LABELS } from "./vocabulary.js";
|
|
5
6
|
import * as React from "react";
|
|
@@ -170,7 +171,7 @@ const PermissionScopes = React.forwardRef(function PermissionScopes({ question,
|
|
|
170
171
|
event.preventDefault();
|
|
171
172
|
answer.run();
|
|
172
173
|
},
|
|
173
|
-
className: cn(paper, "flex w-full max-w-md flex-col gap-2.5 rounded-
|
|
174
|
+
className: cn(paper, "flex w-full max-w-md flex-col gap-2.5 rounded-overlay p-3", className),
|
|
174
175
|
...elementProps,
|
|
175
176
|
children: [
|
|
176
177
|
/* @__PURE__ */ jsxs("p", {
|
|
@@ -183,7 +184,7 @@ const PermissionScopes = React.forwardRef(function PermissionScopes({ question,
|
|
|
183
184
|
}),
|
|
184
185
|
input === void 0 ? null : /* @__PURE__ */ jsx("pre", {
|
|
185
186
|
"data-slot": "permission-scopes-input",
|
|
186
|
-
className: cn(field, mono, "text-fg-muted max-h-40 overflow-auto rounded-
|
|
187
|
+
className: cn(field, mono, "text-fg-muted max-h-40 overflow-auto rounded-control px-2.5 py-2 whitespace-pre-wrap"),
|
|
187
188
|
children: input
|
|
188
189
|
}),
|
|
189
190
|
/* @__PURE__ */ jsx("ul", {
|
|
@@ -195,7 +196,7 @@ const PermissionScopes = React.forwardRef(function PermissionScopes({ question,
|
|
|
195
196
|
type: "button",
|
|
196
197
|
"data-answer": answer.id,
|
|
197
198
|
onClick: answer.run,
|
|
198
|
-
className: cn(answer.id === "always" ? fieldInteractive : "hover:bg-surface-2",
|
|
199
|
+
className: cn(answer.id === "always" ? fieldInteractive : "hover:bg-surface-2", `flex w-full items-baseline gap-1 rounded-control px-2 py-1.5 text-start text-(length:--cue-text-ui) outline-none ${FOCUS_RING_INSET_2}`, answer.id === "deny" ? "text-fg-muted" : "text-fg"),
|
|
199
200
|
children: [/* @__PURE__ */ jsx("span", {
|
|
200
201
|
className: cn(mono, "shrink-0 opacity-60"),
|
|
201
202
|
children: index + 1
|
|
@@ -211,7 +212,7 @@ const PermissionScopes = React.forwardRef(function PermissionScopes({ question,
|
|
|
211
212
|
onClick: () => {
|
|
212
213
|
onScopeChange(scopes[(scopes.indexOf(chosen) + 1) % scopes.length].id);
|
|
213
214
|
},
|
|
214
|
-
className:
|
|
215
|
+
className: `text-fg-subtle ms-6 self-start rounded-control text-start text-(length:--cue-text-ui) wrap-anywhere underline decoration-dotted underline-offset-2 outline-none hover:decoration-solid ${FOCUS_RING_OFFSET_2}`,
|
|
215
216
|
children: chosen.writes
|
|
216
217
|
}) : /* @__PURE__ */ jsx("span", {
|
|
217
218
|
"data-slot": "permission-scopes-destination",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING } from "../system/_focus-ring.js";
|
|
3
4
|
import { field, paper } from "./surfaces.js";
|
|
4
5
|
import { useId } from "react";
|
|
5
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -46,11 +47,11 @@ function PromptLibrary({ prompts, query, selectedId, onQueryChange, onSelect, on
|
|
|
46
47
|
};
|
|
47
48
|
return /* @__PURE__ */ jsxs("div", {
|
|
48
49
|
"data-slot": "prompt-library",
|
|
49
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-2 rounded-
|
|
50
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-2 rounded-overlay p-3", className),
|
|
50
51
|
...props,
|
|
51
52
|
children: [
|
|
52
53
|
/* @__PURE__ */ jsxs("div", {
|
|
53
|
-
className: cn(field, "flex items-center gap-2 rounded-
|
|
54
|
+
className: cn(field, "flex items-center gap-2 rounded-surface px-2.5 py-1.5"),
|
|
54
55
|
children: [/* @__PURE__ */ jsx(BookmarkIcon, { className: "text-fg-subtle size-3.5 shrink-0" }), /* @__PURE__ */ jsx("input", {
|
|
55
56
|
value: query,
|
|
56
57
|
onChange: (event) => onQueryChange?.(event.target.value),
|
|
@@ -62,7 +63,7 @@ function PromptLibrary({ prompts, query, selectedId, onQueryChange, onSelect, on
|
|
|
62
63
|
"aria-controls": listId,
|
|
63
64
|
"aria-autocomplete": "list",
|
|
64
65
|
"aria-activedescendant": selected ? optionId(selected.id) : void 0,
|
|
65
|
-
className:
|
|
66
|
+
className: `text-fg-muted placeholder:text-fg-subtle min-w-0 flex-1 bg-transparent text-(length:--cue-text-body) outline-none ${FOCUS_RING}`
|
|
66
67
|
})]
|
|
67
68
|
}),
|
|
68
69
|
/* @__PURE__ */ jsx("div", {
|
|
@@ -79,7 +80,7 @@ function PromptLibrary({ prompts, query, selectedId, onQueryChange, onSelect, on
|
|
|
79
80
|
onMouseDown: (event) => event.preventDefault(),
|
|
80
81
|
onClick: () => onSelect?.(prompt.id),
|
|
81
82
|
onDoubleClick: () => onInsert?.(prompt.id),
|
|
82
|
-
className: cn("flex items-center gap-2 rounded-
|
|
83
|
+
className: cn("flex items-center gap-2 rounded-surface px-2 py-1.5 text-start transition-colors", prompt.id === selectedId ? "bg-surface-1" : "hover:bg-surface-1"),
|
|
83
84
|
children: [/* @__PURE__ */ jsx("span", {
|
|
84
85
|
className: "min-w-0 flex-1 truncate text-(length:--cue-text-body)",
|
|
85
86
|
children: prompt.name
|
|
@@ -98,14 +99,14 @@ function PromptLibrary({ prompts, query, selectedId, onQueryChange, onSelect, on
|
|
|
98
99
|
]
|
|
99
100
|
}),
|
|
100
101
|
selected && /* @__PURE__ */ jsxs("div", {
|
|
101
|
-
className: cn("bg-fg/[0.06]", "cue-elements-fade-in cue-elements-animate-in flex flex-col gap-2 rounded-
|
|
102
|
+
className: cn("bg-fg/[0.06]", "cue-elements-fade-in cue-elements-animate-in flex flex-col gap-2 rounded-surface p-2.5 duration-200"),
|
|
102
103
|
children: [/* @__PURE__ */ jsx("p", {
|
|
103
104
|
className: "text-fg-muted text-(length:--cue-text-ui) leading-(--cue-leading-ui) break-words",
|
|
104
105
|
children: selected.body
|
|
105
106
|
}), selected.variables.length > 0 && /* @__PURE__ */ jsx("div", {
|
|
106
107
|
className: "flex flex-wrap gap-1",
|
|
107
108
|
children: selected.variables.map((variable) => /* @__PURE__ */ jsx("span", {
|
|
108
|
-
className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "bg-bg text-fg-muted rounded-
|
|
109
|
+
className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "bg-bg text-fg-muted rounded-control px-1.5 py-0.5"),
|
|
109
110
|
children: `{${variable}}`
|
|
110
111
|
}, variable))
|
|
111
112
|
})]
|
|
@@ -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 { field, ghostButton, mono, paper } from "./surfaces.js";
|
|
4
5
|
import { QUEUE_LABELS } from "./vocabulary.js";
|
|
5
6
|
import * as React from "react";
|
|
@@ -73,14 +74,14 @@ const QueueDock = React.forwardRef(function QueueDock({ messages, open, onOpenCh
|
|
|
73
74
|
ref,
|
|
74
75
|
"data-slot": "queue-dock",
|
|
75
76
|
"data-open": String(open),
|
|
76
|
-
className: cn(paper, "flex w-full flex-col rounded-
|
|
77
|
+
className: cn(paper, "flex w-full flex-col rounded-overlay", className),
|
|
77
78
|
...elementProps,
|
|
78
79
|
children: [/* @__PURE__ */ jsxs("button", {
|
|
79
80
|
type: "button",
|
|
80
81
|
"aria-expanded": open,
|
|
81
82
|
title: open ? copy.collapse : copy.expand,
|
|
82
83
|
onClick: () => onOpenChange?.(!open),
|
|
83
|
-
className:
|
|
84
|
+
className: `hover:bg-surface-2 flex items-center gap-2.5 rounded-overlay px-3 py-2 text-start transition-colors ${FOCUS_RING_INSET_2} motion-reduce:transition-none`,
|
|
84
85
|
children: [/* @__PURE__ */ jsx(ChevronRightIcon, {
|
|
85
86
|
"aria-hidden": true,
|
|
86
87
|
className: cn("text-fg-subtle size-3 shrink-0 transition-transform duration-200 motion-reduce:transition-none", open && "rotate-90")
|
|
@@ -92,7 +93,7 @@ const QueueDock = React.forwardRef(function QueueDock({ messages, open, onOpenCh
|
|
|
92
93
|
"data-slot": "queue-dock-entries",
|
|
93
94
|
className: "flex flex-col gap-1 px-2 pb-2",
|
|
94
95
|
children: messages.map((message, index) => /* @__PURE__ */ jsxs("li", {
|
|
95
|
-
className: cn(field, "flex items-center gap-2 rounded-
|
|
96
|
+
className: cn(field, "flex items-center gap-2 rounded-control py-1.5 pe-1.5 ps-2.5"),
|
|
96
97
|
children: [
|
|
97
98
|
/* @__PURE__ */ jsx("span", {
|
|
98
99
|
className: cn(mono, "text-fg-subtle w-3 shrink-0 tabular-nums"),
|
|
@@ -17,7 +17,7 @@ function QuotaBanner({ used, limit, unit, resetsIn, upgradeLabel, onUpgrade, cla
|
|
|
17
17
|
const tight = (limit === 0 ? 0 : used / limit) >= .9;
|
|
18
18
|
return /* @__PURE__ */ jsxs("div", {
|
|
19
19
|
"data-slot": "quota-banner",
|
|
20
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-2.5 rounded-
|
|
20
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-2.5 rounded-overlay p-3.5", className),
|
|
21
21
|
...props,
|
|
22
22
|
children: [
|
|
23
23
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -38,7 +38,7 @@ function QuoteReply({ before, selection, after, actions, toolbarVisible, quoted,
|
|
|
38
38
|
children: before
|
|
39
39
|
}),
|
|
40
40
|
/* @__PURE__ */ jsx("span", {
|
|
41
|
-
className: "text-fg rounded-
|
|
41
|
+
className: "text-fg rounded-control bg-stream/25 px-0.5",
|
|
42
42
|
children: selection
|
|
43
43
|
}),
|
|
44
44
|
/* @__PURE__ */ jsx("span", {
|
|
@@ -26,12 +26,12 @@ function ReadAloud({ words, spokenIndex, playing, rate, elapsed, duration, onTog
|
|
|
26
26
|
const progress = pct(spokenIndex, words.length);
|
|
27
27
|
return /* @__PURE__ */ jsxs("div", {
|
|
28
28
|
"data-slot": "read-aloud",
|
|
29
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-
|
|
29
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-3.5", className),
|
|
30
30
|
...props,
|
|
31
31
|
children: [/* @__PURE__ */ jsx("p", {
|
|
32
32
|
className: "text-(length:--cue-text-body) leading-(--cue-leading-ui)",
|
|
33
33
|
children: words.map((word, i) => /* @__PURE__ */ jsxs("span", {
|
|
34
|
-
className: cn("transition-colors duration-200 motion-reduce:transition-none", i < spokenIndex ? "text-fg-subtle" : i === spokenIndex ? "text-fg rounded-
|
|
34
|
+
className: cn("transition-colors duration-200 motion-reduce:transition-none", i < spokenIndex ? "text-fg-subtle" : i === spokenIndex ? "text-fg rounded-control bg-stream/15" : "text-fg-muted"),
|
|
35
35
|
children: [word, " "]
|
|
36
36
|
}, `${i}-${word}`))
|
|
37
37
|
}), /* @__PURE__ */ jsxs("div", {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING } from "../system/_focus-ring.js";
|
|
3
4
|
import { ShimmerLabel, SwapLabel, collapsePanel } from "./surfaces.js";
|
|
4
5
|
import { take } from "./range.js";
|
|
5
6
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -31,7 +32,7 @@ function ReasoningPanel({ steps, visibleSteps, streaming, open, onOpenChange, re
|
|
|
31
32
|
onOpenChange,
|
|
32
33
|
className: cn("w-full max-w-sm", className),
|
|
33
34
|
children: [/* @__PURE__ */ jsxs(Collapsible.Trigger, {
|
|
34
|
-
className:
|
|
35
|
+
className: `group/trigger text-fg-muted hover:text-fg flex items-center gap-1.5 py-1 text-(length:--cue-text-body) transition-[color,scale] outline-none active:scale-[0.98] ${FOCUS_RING}`,
|
|
35
36
|
children: [/* @__PURE__ */ jsxs(SwapLabel, {
|
|
36
37
|
active: streaming ? 0 : 1,
|
|
37
38
|
className: "text-start",
|
|
@@ -19,7 +19,7 @@ type RecommendationState = "idle" | "accepted";
|
|
|
19
19
|
* onAccept={() => accept()}
|
|
20
20
|
* >
|
|
21
21
|
* Wire{" "}
|
|
22
|
-
* <span className="bg-surface-2 text-fg-muted rounded-
|
|
22
|
+
* <span className="bg-surface-2 text-fg-muted rounded-control px-1.5 py-0.5 font-mono text-(length:--cue-text-label)">
|
|
23
23
|
* runtime.drafts
|
|
24
24
|
* </span>{" "}
|
|
25
25
|
* with three lines.
|
|
@@ -23,7 +23,7 @@ const CONFIDENCE_BARS = [
|
|
|
23
23
|
* onAccept={() => accept()}
|
|
24
24
|
* >
|
|
25
25
|
* Wire{" "}
|
|
26
|
-
* <span className="bg-surface-2 text-fg-muted rounded-
|
|
26
|
+
* <span className="bg-surface-2 text-fg-muted rounded-control px-1.5 py-0.5 font-mono text-(length:--cue-text-label)">
|
|
27
27
|
* runtime.drafts
|
|
28
28
|
* </span>{" "}
|
|
29
29
|
* with three lines.
|
|
@@ -32,7 +32,7 @@ const CONFIDENCE_BARS = [
|
|
|
32
32
|
function RecommendationCard({ state, question, children, confidenceLabel, acceptedLabel, onAccept, onAlternatives, className, ...props }) {
|
|
33
33
|
return /* @__PURE__ */ jsxs("div", {
|
|
34
34
|
"data-slot": "recommendation-card",
|
|
35
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-
|
|
35
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-4", className),
|
|
36
36
|
...props,
|
|
37
37
|
children: [
|
|
38
38
|
/* @__PURE__ */ jsx("p", {
|
|
@@ -31,11 +31,11 @@ function RegenerateMenu({ options, open, currentId, onOpenChange, onPick, classN
|
|
|
31
31
|
className: cn(ghostButton, "size-7 self-start", open && "bg-surface-2 text-fg"),
|
|
32
32
|
children: /* @__PURE__ */ jsx(RefreshCwIcon, { className: "size-3.5" })
|
|
33
33
|
}), open && /* @__PURE__ */ jsx("div", {
|
|
34
|
-
className: cn("bg-surface-2 border border-border-overlay", "cue-elements-fade-in cue-elements-zoom-in-95 cue-elements-slide-in-from-top-1 cue-elements-animate-in flex flex-col gap-0.5 rounded-
|
|
34
|
+
className: cn("bg-surface-2 border border-border-overlay", "cue-elements-fade-in cue-elements-zoom-in-95 cue-elements-slide-in-from-top-1 cue-elements-animate-in flex flex-col gap-0.5 rounded-overlay p-1.5 duration-200"),
|
|
35
35
|
children: options.map((option) => /* @__PURE__ */ jsxs("button", {
|
|
36
36
|
type: "button",
|
|
37
37
|
onClick: () => onPick?.(option.id),
|
|
38
|
-
className: "hover:bg-surface-1 flex items-baseline gap-2 rounded-
|
|
38
|
+
className: "hover:bg-surface-1 flex items-baseline gap-2 rounded-surface px-2.5 py-1.5 text-start transition-colors",
|
|
39
39
|
children: [/* @__PURE__ */ jsx("span", {
|
|
40
40
|
className: "min-w-0 flex-1 truncate text-(length:--cue-text-body)",
|
|
41
41
|
children: option.label
|
|
@@ -16,7 +16,7 @@ function ResearchReport({ title, sections, sourcesRead, className, ...props }) {
|
|
|
16
16
|
const done = sections.filter((section) => section.state === "done").length;
|
|
17
17
|
return /* @__PURE__ */ jsxs("div", {
|
|
18
18
|
"data-slot": "research-report",
|
|
19
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-
|
|
19
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-4", className),
|
|
20
20
|
...props,
|
|
21
21
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
22
22
|
className: "flex flex-col gap-1",
|
|
@@ -41,7 +41,7 @@ function RetrievalChunks({ query, chunks, visibleCount, searching, className, ..
|
|
|
41
41
|
/* @__PURE__ */ jsx("div", {
|
|
42
42
|
className: "flex min-h-[7rem] flex-col gap-1.5",
|
|
43
43
|
children: take(chunks, visibleCount).map((chunk) => /* @__PURE__ */ jsxs("div", {
|
|
44
|
-
className: cn(paper, "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in cue-elements-fill-mode-both flex flex-col gap-1.5 rounded-
|
|
44
|
+
className: cn(paper, "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in cue-elements-fill-mode-both flex flex-col gap-1.5 rounded-overlay px-3.5 py-2.5 duration-300"),
|
|
45
45
|
children: [
|
|
46
46
|
/* @__PURE__ */ jsxs("div", {
|
|
47
47
|
className: "flex items-baseline gap-2",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING, FOCUS_RING_INSET_2 } from "../system/_focus-ring.js";
|
|
3
4
|
import { field, fieldInteractive, ghostButton, mono, paper } from "./surfaces.js";
|
|
4
5
|
import { REVERT_LABELS, REVERT_SCOPES, REVERT_SCOPE_DESCRIPTIONS, REVERT_SCOPE_LABELS } from "./vocabulary.js";
|
|
5
6
|
import * as React from "react";
|
|
@@ -210,7 +211,7 @@ const RevertDock = React.forwardRef(function RevertDock({ label = "Revert to thi
|
|
|
210
211
|
"data-slot": "revert-dock",
|
|
211
212
|
"data-open": String(open),
|
|
212
213
|
"data-confirming": confirming ?? "none",
|
|
213
|
-
className: cn(paper, "flex w-full flex-col rounded-
|
|
214
|
+
className: cn(paper, "flex w-full flex-col rounded-overlay", className),
|
|
214
215
|
onKeyDown: (event) => {
|
|
215
216
|
onKeyDown?.(event);
|
|
216
217
|
if (event.key !== "Escape" || confirming === null) return;
|
|
@@ -226,7 +227,7 @@ const RevertDock = React.forwardRef(function RevertDock({ label = "Revert to thi
|
|
|
226
227
|
if (open && confirming !== null) onConfirmingChange?.(null);
|
|
227
228
|
onOpenChange?.(!open);
|
|
228
229
|
},
|
|
229
|
-
className:
|
|
230
|
+
className: `hover:bg-surface-2 flex items-center gap-2.5 rounded-overlay px-3 py-2 text-start transition-colors ${FOCUS_RING_INSET_2} motion-reduce:transition-none`,
|
|
230
231
|
children: [
|
|
231
232
|
/* @__PURE__ */ jsx(HistoryIcon, {
|
|
232
233
|
"aria-hidden": true,
|
|
@@ -270,7 +271,7 @@ const RevertDock = React.forwardRef(function RevertDock({ label = "Revert to thi
|
|
|
270
271
|
disabled: confirming !== null,
|
|
271
272
|
id: armed ? scopeId : void 0,
|
|
272
273
|
onClick: () => onConfirmingChange?.(scope),
|
|
273
|
-
className: cn(confirming === null ? fieldInteractive : armed ? "bg-danger/10" : cn(field, "opacity-60"),
|
|
274
|
+
className: cn(confirming === null ? fieldInteractive : armed ? "bg-danger/10" : cn(field, "opacity-60"), `flex flex-col items-start gap-0.5 rounded-control px-3 py-2 text-start outline-none ${FOCUS_RING_INSET_2}`),
|
|
274
275
|
children: [/* @__PURE__ */ jsx("span", {
|
|
275
276
|
className: "text-fg text-(length:--cue-text-ui) font-medium",
|
|
276
277
|
children: scopeCopy[scope]
|
|
@@ -311,7 +312,7 @@ const RevertDock = React.forwardRef(function RevertDock({ label = "Revert to thi
|
|
|
311
312
|
onConfirmingChange?.(null);
|
|
312
313
|
onRestore?.(confirming);
|
|
313
314
|
},
|
|
314
|
-
className:
|
|
315
|
+
className: `bg-danger text-danger-fg flex items-center gap-1.5 rounded-control px-3 py-1.5 text-(length:--cue-text-ui) font-medium outline-none transition-[opacity,scale] duration-150 enabled:hover:opacity-90 enabled:active:scale-[0.96] disabled:opacity-60 ${FOCUS_RING} motion-reduce:transition-none`,
|
|
315
316
|
children: [/* @__PURE__ */ jsx(RotateCcwIcon, {
|
|
316
317
|
"aria-hidden": true,
|
|
317
318
|
className: "size-3.5"
|
|
@@ -29,7 +29,7 @@ function ReviewableDiff({ filename, hunks, onKeep, onDiscard, onApply, className
|
|
|
29
29
|
const pending = hunks.filter((hunk) => hunk.decision === "pending").length;
|
|
30
30
|
return /* @__PURE__ */ jsxs("div", {
|
|
31
31
|
"data-slot": "reviewable-diff",
|
|
32
|
-
className: cn(paper, "flex w-full max-w-md flex-col overflow-hidden rounded-
|
|
32
|
+
className: cn(paper, "flex w-full max-w-md flex-col overflow-hidden rounded-overlay", className),
|
|
33
33
|
...props,
|
|
34
34
|
children: [
|
|
35
35
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -22,14 +22,14 @@ import { CheckIcon, ClockIcon, XIcon } from "lucide-react";
|
|
|
22
22
|
function ScheduleCard({ name, cadence, nextRun, enabled, history, onToggle, className, ...props }) {
|
|
23
23
|
return /* @__PURE__ */ jsxs("div", {
|
|
24
24
|
"data-slot": "schedule-card",
|
|
25
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-
|
|
25
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-4", className),
|
|
26
26
|
...props,
|
|
27
27
|
children: [
|
|
28
28
|
/* @__PURE__ */ jsxs("div", {
|
|
29
29
|
className: "flex items-center gap-2.5",
|
|
30
30
|
children: [
|
|
31
31
|
/* @__PURE__ */ jsx("span", {
|
|
32
|
-
className: "bg-surface-1 text-fg-muted flex size-7 shrink-0 items-center justify-center rounded-
|
|
32
|
+
className: "bg-surface-1 text-fg-muted flex size-7 shrink-0 items-center justify-center rounded-surface",
|
|
33
33
|
children: /* @__PURE__ */ jsx(ClockIcon, { className: "size-3.5" })
|
|
34
34
|
}),
|
|
35
35
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -54,7 +54,7 @@ function ScheduleCard({ name, cadence, nextRun, enabled, history, onToggle, clas
|
|
|
54
54
|
]
|
|
55
55
|
}),
|
|
56
56
|
/* @__PURE__ */ jsxs("div", {
|
|
57
|
-
className: cn(field, "flex items-baseline gap-2 rounded-
|
|
57
|
+
className: cn(field, "flex items-baseline gap-2 rounded-surface px-3 py-2", !enabled && "opacity-45"),
|
|
58
58
|
children: [/* @__PURE__ */ jsx("span", {
|
|
59
59
|
className: cn(mono, "text-fg-subtle"),
|
|
60
60
|
children: "next"
|
|
@@ -22,7 +22,7 @@ function ScoreBreakdown({ verdict, total, outOf, criteria, visibleCount, classNa
|
|
|
22
22
|
const ratio = outOf === 0 ? 0 : total / outOf;
|
|
23
23
|
return /* @__PURE__ */ jsxs("div", {
|
|
24
24
|
"data-slot": "score-breakdown",
|
|
25
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-
|
|
25
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-4", className),
|
|
26
26
|
...props,
|
|
27
27
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
28
28
|
className: "flex items-baseline gap-2",
|
|
@@ -90,14 +90,14 @@ function ScrollAnchor({ messages, paused = false, onSettled, className, ...props
|
|
|
90
90
|
const newCount = count - seenCount;
|
|
91
91
|
return /* @__PURE__ */ jsxs("div", {
|
|
92
92
|
"data-slot": "scroll-anchor",
|
|
93
|
-
className: cn(paper, "relative h-64 w-full max-w-sm overflow-hidden rounded-
|
|
93
|
+
className: cn(paper, "relative h-64 w-full max-w-sm overflow-hidden rounded-overlay", className),
|
|
94
94
|
...props,
|
|
95
95
|
children: [
|
|
96
96
|
/* @__PURE__ */ jsx("div", {
|
|
97
97
|
ref: viewportRef,
|
|
98
98
|
className: "flex h-full flex-col gap-2.5 overflow-y-hidden scroll-smooth motion-reduce:scroll-auto p-4",
|
|
99
99
|
children: messages.slice(0, count).map((message, i) => /* @__PURE__ */ jsx("div", {
|
|
100
|
-
className: cn("cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in max-w-[85%] text-(length:--cue-text-ui) leading-(--cue-leading-ui) duration-300 motion-reduce:animate-none", message.role === "user" ? cn(field, "self-end rounded-
|
|
100
|
+
className: cn("cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in max-w-[85%] text-(length:--cue-text-ui) leading-(--cue-leading-ui) duration-300 motion-reduce:animate-none", message.role === "user" ? cn(field, "self-end rounded-overlay px-3 py-1.5") : "text-fg-muted self-start"),
|
|
101
101
|
children: message.text
|
|
102
102
|
}, i))
|
|
103
103
|
}),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING } from "../system/_focus-ring.js";
|
|
3
4
|
import { field, mono, paper } from "./surfaces.js";
|
|
4
5
|
import { clamp } from "./range.js";
|
|
5
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -22,7 +23,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
22
23
|
function SettingsPanel({ model, models, systemPrompt, temperature, toggles, onModelChange, onSystemPromptChange, onTemperatureChange, onToggle, className, ...props }) {
|
|
23
24
|
return /* @__PURE__ */ jsxs("div", {
|
|
24
25
|
"data-slot": "settings-panel",
|
|
25
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-4 rounded-
|
|
26
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-4 rounded-overlay p-4", className),
|
|
26
27
|
...props,
|
|
27
28
|
children: [
|
|
28
29
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -51,7 +52,7 @@ function SettingsPanel({ model, models, systemPrompt, temperature, toggles, onMo
|
|
|
51
52
|
onChange: (event) => onSystemPromptChange?.(event.target.value),
|
|
52
53
|
rows: 3,
|
|
53
54
|
"aria-label": "System prompt",
|
|
54
|
-
className: cn(field,
|
|
55
|
+
className: cn(field, `text-fg-muted ${FOCUS_RING} resize-none rounded-surface px-3 py-2 text-(length:--cue-text-ui) leading-(--cue-leading-ui) outline-none`)
|
|
55
56
|
})]
|
|
56
57
|
}),
|
|
57
58
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -21,7 +21,7 @@ import { LinkIcon } from "lucide-react";
|
|
|
21
21
|
function SharedConversation({ title, sharedBy, sharedAt, turns, onContinue, className, ...props }) {
|
|
22
22
|
return /* @__PURE__ */ jsxs("div", {
|
|
23
23
|
"data-slot": "shared-conversation",
|
|
24
|
-
className: cn(paper, "flex w-full max-w-sm flex-col overflow-hidden rounded-
|
|
24
|
+
className: cn(paper, "flex w-full max-w-sm flex-col overflow-hidden rounded-overlay", className),
|
|
25
25
|
...props,
|
|
26
26
|
children: [
|
|
27
27
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -45,7 +45,7 @@ function SharedConversation({ title, sharedBy, sharedAt, turns, onContinue, clas
|
|
|
45
45
|
/* @__PURE__ */ jsx("div", {
|
|
46
46
|
className: "border-border flex flex-col gap-2.5 border-t px-4 py-3.5",
|
|
47
47
|
children: turns.map((turn) => /* @__PURE__ */ jsx("div", {
|
|
48
|
-
className: cn("text-(length:--cue-text-body) leading-(--cue-leading-ui)", turn.role === "user" ? "bg-surface-1 ms-auto max-w-[85%] rounded-
|
|
48
|
+
className: cn("text-(length:--cue-text-body) leading-(--cue-leading-ui)", turn.role === "user" ? "bg-surface-1 ms-auto max-w-[85%] rounded-overlay px-3 py-2" : "text-fg-muted"),
|
|
49
49
|
children: turn.text
|
|
50
50
|
}, turn.id))
|
|
51
51
|
}),
|
package/dist/elements/sources.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING } from "../system/_focus-ring.js";
|
|
3
4
|
import { collapsePanel, fieldInteractive, mono, paper } from "./surfaces.js";
|
|
4
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
6
|
import { Collapsible } from "@base-ui/react/collapsible";
|
|
@@ -24,7 +25,7 @@ function Sources({ sources, open, onOpenChange, className }) {
|
|
|
24
25
|
onOpenChange,
|
|
25
26
|
className: cn("w-full max-w-sm", className),
|
|
26
27
|
children: [/* @__PURE__ */ jsxs(Collapsible.Trigger, {
|
|
27
|
-
className: cn(fieldInteractive,
|
|
28
|
+
className: cn(fieldInteractive, `group/trigger text-fg-muted hover:text-fg inline-flex w-fit items-center gap-1.5 rounded-full px-3.5 py-2 text-(length:--cue-text-ui) outline-none ${FOCUS_RING}`),
|
|
28
29
|
children: [
|
|
29
30
|
/* @__PURE__ */ jsx("span", { children: "Sources" }),
|
|
30
31
|
/* @__PURE__ */ jsx("span", {
|
|
@@ -38,11 +39,11 @@ function Sources({ sources, open, onOpenChange, className }) {
|
|
|
38
39
|
children: /* @__PURE__ */ jsx("div", {
|
|
39
40
|
className: "grid grid-cols-2 gap-2 pt-2.5",
|
|
40
41
|
children: sources.map((source) => /* @__PURE__ */ jsxs("div", {
|
|
41
|
-
className: cn(paper, "flex flex-col gap-1.5 rounded-
|
|
42
|
+
className: cn(paper, "flex flex-col gap-1.5 rounded-overlay p-3 transition-transform hover:-translate-y-px"),
|
|
42
43
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
43
44
|
className: "flex items-center gap-1.5",
|
|
44
45
|
children: [/* @__PURE__ */ jsx("span", {
|
|
45
|
-
className: "bg-surface-2 text-fg-muted flex size-4 shrink-0 items-center justify-center rounded-
|
|
46
|
+
className: "bg-surface-2 text-fg-muted flex size-4 shrink-0 items-center justify-center rounded-control text-(length:--cue-text-micro) font-medium",
|
|
46
47
|
children: source.domain.charAt(0).toUpperCase()
|
|
47
48
|
}), /* @__PURE__ */ jsx("span", {
|
|
48
49
|
className: cn(mono, "text-fg-subtle truncate"),
|
|
@@ -26,7 +26,7 @@ function SpeakerIdentity({ turns, className, ...props }) {
|
|
|
26
26
|
children: turns.map((turn) => /* @__PURE__ */ jsxs("div", {
|
|
27
27
|
className: "flex gap-2.5",
|
|
28
28
|
children: [/* @__PURE__ */ jsx("span", {
|
|
29
|
-
className: cn("flex size-6 shrink-0 items-center justify-center rounded-
|
|
29
|
+
className: cn("flex size-6 shrink-0 items-center justify-center rounded-surface", TONE[turn.kind], turn.kind === "subagent" && "rounded-full"),
|
|
30
30
|
children: turn.kind === "user" ? /* @__PURE__ */ jsx(UserIcon, { className: "size-3" }) : turn.kind === "tool" ? /* @__PURE__ */ jsx(WrenchIcon, { className: "size-3" }) : /* @__PURE__ */ jsx(BotIcon, { className: "size-3" })
|
|
31
31
|
}), /* @__PURE__ */ jsxs("div", {
|
|
32
32
|
className: "flex min-w-0 flex-1 flex-col gap-0.5",
|
|
@@ -15,7 +15,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
15
15
|
function SpecSheet({ title, subtitle, rows, visibleCount, className, ...props }) {
|
|
16
16
|
return /* @__PURE__ */ jsxs("div", {
|
|
17
17
|
"data-slot": "spec-sheet",
|
|
18
|
-
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-
|
|
18
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-overlay p-4", className),
|
|
19
19
|
...props,
|
|
20
20
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
21
21
|
className: "flex flex-col gap-0.5",
|
|
@@ -31,7 +31,7 @@ function StreamingText({ segments, count, streaming, className, ...props }) {
|
|
|
31
31
|
return /* @__PURE__ */ jsxs("span", {
|
|
32
32
|
className: "cue-elements-fade-in cue-elements-animate-in cue-elements-fill-mode-both duration-500 motion-reduce:animate-none",
|
|
33
33
|
children: [/* @__PURE__ */ jsx("span", {
|
|
34
|
-
className: cn("transition-colors duration-700 motion-reduce:transition-none", fresh && "text-stream", isMono && "bg-surface-2 rounded-
|
|
34
|
+
className: cn("transition-colors duration-700 motion-reduce:transition-none", fresh && "text-stream", isMono && "bg-surface-2 rounded-control px-1.5 py-0.5 font-mono text-[0.85em]"),
|
|
35
35
|
children: word
|
|
36
36
|
}), " "]
|
|
37
37
|
}, i);
|
|
@@ -28,7 +28,7 @@ function SubagentList({ agents, completedCount, progress, showSummary, summaryAg
|
|
|
28
28
|
const done = index < completedCount;
|
|
29
29
|
const width = progress[index] ?? 0;
|
|
30
30
|
return /* @__PURE__ */ jsxs("div", {
|
|
31
|
-
className: cn(paper, "flex flex-col gap-2 rounded-
|
|
31
|
+
className: cn(paper, "flex flex-col gap-2 rounded-overlay px-3.5 py-2.5"),
|
|
32
32
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
33
33
|
className: "flex items-center gap-2",
|
|
34
34
|
children: [
|
|
@@ -51,7 +51,7 @@ function SubagentList({ agents, completedCount, progress, showSummary, summaryAg
|
|
|
51
51
|
})]
|
|
52
52
|
}, agent.name);
|
|
53
53
|
}), showSummary && /* @__PURE__ */ jsxs("div", {
|
|
54
|
-
className: cn("bg-surface-1 border border-border", "cue-elements-fade-in cue-elements-slide-in-from-bottom-2 cue-elements-animate-in flex flex-col gap-2 rounded-
|
|
54
|
+
className: cn("bg-surface-1 border border-border", "cue-elements-fade-in cue-elements-slide-in-from-bottom-2 cue-elements-animate-in flex flex-col gap-2 rounded-overlay px-3.5 py-2.5 duration-300"),
|
|
55
55
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
56
56
|
className: "flex items-center gap-2",
|
|
57
57
|
children: [
|
|
@@ -26,7 +26,7 @@ function Suggestions({ suggestions, selectedSuggestion, cycle, onSuggestion, var
|
|
|
26
26
|
type: "button",
|
|
27
27
|
"aria-pressed": selectedSuggestion === suggestion,
|
|
28
28
|
onClick: () => onSuggestion(suggestion),
|
|
29
|
-
className: cn(paper, "cue-elements-fade-in cue-elements-slide-in-from-bottom-2 cue-elements-animate-in cue-elements-fill-mode-both flex cursor-pointer items-center text-(length:--cue-text-body) transition-transform duration-300 hover:-translate-y-px active:scale-[0.96] motion-reduce:animate-none", list ? "w-full rounded-
|
|
29
|
+
className: cn(paper, "cue-elements-fade-in cue-elements-slide-in-from-bottom-2 cue-elements-animate-in cue-elements-fill-mode-both flex cursor-pointer items-center text-(length:--cue-text-body) transition-transform duration-300 hover:-translate-y-px active:scale-[0.96] motion-reduce:animate-none", list ? "w-full rounded-overlay px-4 py-2.5 text-start" : "rounded-full px-4 py-2", selectedSuggestion === suggestion && "bg-accent text-accent-fg"),
|
|
30
30
|
style: { animationDelay: `${index * 70}ms` },
|
|
31
31
|
children: suggestion
|
|
32
32
|
}, suggestion))
|
|
@@ -11,7 +11,7 @@ declare const fieldInteractive = "bg-fg/[0.06] transition-colors hover:bg-fg/[0.
|
|
|
11
11
|
/** The press affordance: a 4% squash on pointer-down, stilled under reduced motion. */
|
|
12
12
|
declare const pressable = "transition-transform duration-150 ease-[cubic-bezier(0.23,1,0.32,1)] active:scale-[0.96] motion-reduce:transition-none";
|
|
13
13
|
/** A round chromeless icon button, with the ring cue puts on everything focusable. */
|
|
14
|
-
declare const ghostButton = "flex items-center justify-center rounded-full text-fg-muted outline-none transition-[background-color,color,scale] duration-150 hover:bg-surface-2 hover:text-fg active:scale-[0.96] focus-visible:outline-
|
|
14
|
+
declare const ghostButton = "flex items-center justify-center rounded-full text-fg-muted outline-none transition-[background-color,color,scale] duration-150 hover:bg-surface-2 hover:text-fg active:scale-[0.96] focus-visible:outline-solid focus-visible:outline-[length:var(--cue-style-focus-width,var(--cue-focus-ring))] focus-visible:outline-(--cue-focus) focus-visible:outline-offset-1 motion-reduce:transition-none";
|
|
15
15
|
/** The inverse fill: accent ground, accent ink — the one loud button in a panel. */
|
|
16
16
|
declare const inkButton = "bg-accent text-accent-fg transition-[background-color,scale] duration-150 ease-[cubic-bezier(0.23,1,0.32,1)] hover:bg-accent-hover active:scale-[0.96] motion-reduce:transition-none";
|
|
17
17
|
/** The stacked layer of an icon crossfade. Both layers share one grid cell. */
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { FOCUS_RING } from "../system/_focus-ring.js";
|
|
3
4
|
import { useLayoutEffect, useRef, useState } from "react";
|
|
4
5
|
import { jsx } from "react/jsx-runtime";
|
|
5
6
|
//#region src/elements/surfaces.tsx
|
|
@@ -14,7 +15,7 @@ const fieldInteractive = "bg-fg/[0.06] transition-colors hover:bg-fg/[0.09]";
|
|
|
14
15
|
/** The press affordance: a 4% squash on pointer-down, stilled under reduced motion. */
|
|
15
16
|
const pressable = "transition-transform duration-150 ease-[cubic-bezier(0.23,1,0.32,1)] active:scale-[0.96] motion-reduce:transition-none";
|
|
16
17
|
/** A round chromeless icon button, with the ring cue puts on everything focusable. */
|
|
17
|
-
const ghostButton =
|
|
18
|
+
const ghostButton = `flex items-center justify-center rounded-full text-fg-muted outline-none transition-[background-color,color,scale] duration-150 hover:bg-surface-2 hover:text-fg active:scale-[0.96] ${FOCUS_RING} motion-reduce:transition-none`;
|
|
18
19
|
/** The inverse fill: accent ground, accent ink — the one loud button in a panel. */
|
|
19
20
|
const inkButton = "bg-accent text-accent-fg transition-[background-color,scale] duration-150 ease-[cubic-bezier(0.23,1,0.32,1)] hover:bg-accent-hover active:scale-[0.96] motion-reduce:transition-none";
|
|
20
21
|
/** The stacked layer of an icon crossfade. Both layers share one grid cell. */
|
|
@@ -84,7 +84,7 @@ const TailStatus = React.forwardRef(function TailStatus({ action, detail, active
|
|
|
84
84
|
onCancel === void 0 ? null : /* @__PURE__ */ jsx("button", {
|
|
85
85
|
type: "button",
|
|
86
86
|
onClick: onCancel,
|
|
87
|
-
className: cn(ghostButton, mono, "shrink-0 rounded-
|
|
87
|
+
className: cn(ghostButton, mono, "shrink-0 rounded-control px-2 py-1 uppercase"),
|
|
88
88
|
children: cancelLabel
|
|
89
89
|
})
|
|
90
90
|
]
|