@cueplusplus/ui 0.3.0 → 0.6.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 +2263 -0
- package/dist/agent-runtime/_glyphs.js +43 -0
- package/dist/agent-runtime/branch-picker.d.ts +45 -0
- package/dist/agent-runtime/branch-picker.js +87 -0
- package/dist/agent-runtime/index.d.ts +4 -0
- package/dist/agent-runtime/index.js +4 -0
- package/dist/agent-runtime/tool-call-card.d.ts +69 -0
- package/dist/agent-runtime/tool-call-card.js +187 -0
- package/dist/agent-runtime/use-agent-thread.d.ts +164 -0
- package/dist/agent-runtime/use-agent-thread.js +251 -0
- package/dist/chat/index.d.ts +2 -2
- package/dist/chat/message-list.d.ts +6 -0
- package/dist/chat/message-list.js +35 -0
- package/dist/chrome/_drag.js +59 -0
- package/dist/chrome/_status-bar-item.js +85 -0
- package/dist/chrome/_status-bar.d.ts +15 -0
- package/dist/chrome/_status-bar.js +171 -0
- package/dist/chrome/app-shell.d.ts +120 -2
- package/dist/chrome/app-shell.js +107 -8
- package/dist/chrome/index.d.ts +4 -3
- package/dist/chrome/status-bar.d.ts +87 -4
- package/dist/chrome/status-bar.js +80 -16
- package/dist/chrome/title-bar.d.ts +11 -1
- package/dist/chrome/title-bar.js +1 -3
- package/dist/configurator/_export.js +3 -2
- package/dist/configurator/_overrides.d.ts +1 -1
- package/dist/configurator/token-editor.js +4 -1
- package/dist/date/_segments.js +52 -6
- package/dist/elements/activity-graph.d.ts +40 -0
- package/dist/elements/activity-graph.js +81 -0
- package/dist/elements/agent-card.d.ts +49 -0
- package/dist/elements/agent-card.js +91 -0
- package/dist/elements/agent-handoff.d.ts +24 -0
- package/dist/elements/agent-handoff.js +53 -0
- package/dist/elements/agent-mode-badge.d.ts +72 -0
- package/dist/elements/agent-mode-badge.js +110 -0
- package/dist/elements/agent-plan.d.ts +24 -0
- package/dist/elements/agent-plan.js +74 -0
- package/dist/elements/agent-status.d.ts +29 -0
- package/dist/elements/agent-status.js +46 -0
- package/dist/elements/agent-surface.d.ts +65 -0
- package/dist/elements/agent-surface.js +68 -0
- package/dist/elements/animated-number.d.ts +86 -0
- package/dist/elements/animated-number.js +118 -0
- package/dist/elements/approval-card.d.ts +40 -0
- package/dist/elements/approval-card.js +78 -0
- package/dist/elements/artifact-card.d.ts +30 -0
- package/dist/elements/artifact-card.js +58 -0
- package/dist/elements/background-inbox.d.ts +39 -0
- package/dist/elements/background-inbox.js +60 -0
- package/dist/elements/canvas-split.d.ts +77 -0
- package/dist/elements/canvas-split.js +138 -0
- package/dist/elements/chart.d.ts +41 -0
- package/dist/elements/chart.js +117 -0
- package/dist/elements/chat-panel.d.ts +46 -0
- package/dist/elements/chat-panel.js +104 -0
- package/dist/elements/checkpoint-history.d.ts +31 -0
- package/dist/elements/checkpoint-history.js +65 -0
- package/dist/elements/clamp.d.ts +90 -0
- package/dist/elements/clamp.js +109 -0
- package/dist/elements/code-diff.d.ts +42 -0
- package/dist/elements/code-diff.js +69 -0
- package/dist/elements/code-runner.d.ts +38 -0
- package/dist/elements/code-runner.js +84 -0
- package/dist/elements/command-palette.d.ts +48 -0
- package/dist/elements/command-palette.js +129 -0
- package/dist/elements/compaction-row.d.ts +63 -0
- package/dist/elements/compaction-row.js +110 -0
- package/dist/elements/comparison-card.d.ts +47 -0
- package/dist/elements/comparison-card.js +69 -0
- package/dist/elements/composer.d.ts +274 -0
- package/dist/elements/composer.js +505 -0
- package/dist/elements/computer-use.d.ts +40 -0
- package/dist/elements/computer-use.js +92 -0
- package/dist/elements/confidence-marker.d.ts +39 -0
- package/dist/elements/confidence-marker.js +64 -0
- package/dist/elements/connection-state.d.ts +29 -0
- package/dist/elements/connection-state.js +66 -0
- package/dist/elements/context-breakdown.d.ts +30 -0
- package/dist/elements/context-breakdown.js +86 -0
- package/dist/elements/context-usage.d.ts +99 -0
- package/dist/elements/context-usage.js +225 -0
- package/dist/elements/conversation-search.d.ts +48 -0
- package/dist/elements/conversation-search.js +88 -0
- package/dist/elements/cost-meter.d.ts +33 -0
- package/dist/elements/cost-meter.js +75 -0
- package/dist/elements/data-table.d.ts +31 -0
- package/dist/elements/data-table.js +67 -0
- package/dist/elements/day-separator.d.ts +34 -0
- package/dist/elements/day-separator.js +50 -0
- package/dist/elements/diagram.d.ts +34 -0
- package/dist/elements/diagram.js +75 -0
- package/dist/elements/document-reference.d.ts +37 -0
- package/dist/elements/document-reference.js +66 -0
- package/dist/elements/draft-restore.d.ts +27 -0
- package/dist/elements/draft-restore.js +54 -0
- package/dist/elements/edit-message.d.ts +36 -0
- package/dist/elements/edit-message.js +77 -0
- package/dist/elements/elements.css +459 -0
- package/dist/elements/elicitation-form.d.ts +48 -0
- package/dist/elements/elicitation-form.js +106 -0
- package/dist/elements/empty-state.d.ts +52 -0
- package/dist/elements/empty-state.js +98 -0
- package/dist/elements/end-of-turn-summary.d.ts +60 -0
- package/dist/elements/end-of-turn-summary.js +75 -0
- package/dist/elements/error-state.d.ts +29 -0
- package/dist/elements/error-state.js +55 -0
- package/dist/elements/feedback-dialog.d.ts +36 -0
- package/dist/elements/feedback-dialog.js +81 -0
- package/dist/elements/file-tree.d.ts +45 -0
- package/dist/elements/file-tree.js +84 -0
- package/dist/elements/flow-graph.d.ts +45 -0
- package/dist/elements/flow-graph.js +78 -0
- package/dist/elements/generative/chart.js +200 -0
- package/dist/elements/generative/faults.js +111 -0
- package/dist/elements/generative/icons.d.ts +41 -0
- package/dist/elements/generative/icons.js +190 -0
- package/dist/elements/generative/intrinsics.js +483 -0
- package/dist/elements/generative/spec.d.ts +110 -0
- package/dist/elements/generative/spec.js +366 -0
- package/dist/elements/generative.css +1145 -0
- package/dist/elements/generative.d.ts +144 -0
- package/dist/elements/generative.js +126 -0
- package/dist/elements/guardrail-notice.d.ts +29 -0
- package/dist/elements/guardrail-notice.js +63 -0
- package/dist/elements/image-generation.d.ts +18 -0
- package/dist/elements/image-generation.js +64 -0
- package/dist/elements/index.d.ts +116 -0
- package/dist/elements/index.js +115 -0
- package/dist/elements/inline-citation.d.ts +43 -0
- package/dist/elements/inline-citation.js +93 -0
- package/dist/elements/job-progress.d.ts +49 -0
- package/dist/elements/job-progress.js +74 -0
- package/dist/elements/launcher-bubble.d.ts +34 -0
- package/dist/elements/launcher-bubble.js +72 -0
- package/dist/elements/live-region-announcer.d.ts +130 -0
- package/dist/elements/live-region-announcer.js +230 -0
- package/dist/elements/loading-state.d.ts +27 -0
- package/dist/elements/loading-state.js +36 -0
- package/dist/elements/map-answer.d.ts +38 -0
- package/dist/elements/map-answer.js +93 -0
- package/dist/elements/markdown.d.ts +131 -0
- package/dist/elements/markdown.js +528 -0
- package/dist/elements/math-block.d.ts +51 -0
- package/dist/elements/math-block.js +70 -0
- package/dist/elements/mcp-server-panel.d.ts +41 -0
- package/dist/elements/mcp-server-panel.js +115 -0
- package/dist/elements/memory-chips.d.ts +30 -0
- package/dist/elements/memory-chips.js +43 -0
- package/dist/elements/message-actions.d.ts +38 -0
- package/dist/elements/message-actions.js +71 -0
- package/dist/elements/message-attachment.d.ts +48 -0
- package/dist/elements/message-attachment.js +63 -0
- package/dist/elements/message-branches.d.ts +25 -0
- package/dist/elements/message-branches.js +65 -0
- package/dist/elements/message-pair.d.ts +33 -0
- package/dist/elements/message-pair.js +65 -0
- package/dist/elements/message-queue.d.ts +31 -0
- package/dist/elements/message-queue.js +80 -0
- package/dist/elements/message-timing.d.ts +33 -0
- package/dist/elements/message-timing.js +37 -0
- package/dist/elements/mobile-composer.d.ts +44 -0
- package/dist/elements/mobile-composer.js +88 -0
- package/dist/elements/model-picker.d.ts +38 -0
- package/dist/elements/model-picker.js +69 -0
- package/dist/elements/number-ticker.d.ts +18 -0
- package/dist/elements/number-ticker.js +47 -0
- package/dist/elements/onboarding.d.ts +30 -0
- package/dist/elements/onboarding.js +75 -0
- package/dist/elements/permission-grant.d.ts +35 -0
- package/dist/elements/permission-grant.js +86 -0
- package/dist/elements/permission-scopes.d.ts +215 -0
- package/dist/elements/permission-scopes.js +249 -0
- package/dist/elements/prompt-library.d.ts +43 -0
- package/dist/elements/prompt-library.js +117 -0
- package/dist/elements/queue-dock.d.ts +101 -0
- package/dist/elements/queue-dock.js +132 -0
- package/dist/elements/quota-banner.d.ts +26 -0
- package/dist/elements/quota-banner.js +66 -0
- package/dist/elements/quote-reply.d.ts +44 -0
- package/dist/elements/quote-reply.js +79 -0
- package/dist/elements/range.d.ts +29 -0
- package/dist/elements/range.js +45 -0
- package/dist/elements/read-aloud.d.ts +45 -0
- package/dist/elements/read-aloud.js +75 -0
- package/dist/elements/reasoning-effort.d.ts +36 -0
- package/dist/elements/reasoning-effort.js +67 -0
- package/dist/elements/reasoning-panel.d.ts +46 -0
- package/dist/elements/reasoning-panel.js +75 -0
- package/dist/elements/recommendation-card.d.ts +45 -0
- package/dist/elements/recommendation-card.js +83 -0
- package/dist/elements/regenerate-menu.d.ts +45 -0
- package/dist/elements/regenerate-menu.js +51 -0
- package/dist/elements/replay.d.ts +217 -0
- package/dist/elements/replay.js +498 -0
- package/dist/elements/research-report.d.ts +38 -0
- package/dist/elements/research-report.js +69 -0
- package/dist/elements/retrieval-chunks.d.ts +43 -0
- package/dist/elements/retrieval-chunks.js +81 -0
- package/dist/elements/revert-dock.d.ts +159 -0
- package/dist/elements/revert-dock.js +327 -0
- package/dist/elements/reviewable-diff.d.ts +45 -0
- package/dist/elements/reviewable-diff.js +110 -0
- package/dist/elements/risk-badge.d.ts +52 -0
- package/dist/elements/risk-badge.js +91 -0
- package/dist/elements/schedule-card.d.ts +42 -0
- package/dist/elements/schedule-card.js +90 -0
- package/dist/elements/score-breakdown.d.ts +47 -0
- package/dist/elements/score-breakdown.js +82 -0
- package/dist/elements/scroll-anchor.d.ts +32 -0
- package/dist/elements/scroll-anchor.js +121 -0
- package/dist/elements/settings-panel.d.ts +52 -0
- package/dist/elements/settings-panel.js +107 -0
- package/dist/elements/shared-conversation.d.ts +39 -0
- package/dist/elements/shared-conversation.js +68 -0
- package/dist/elements/sources.d.ts +33 -0
- package/dist/elements/sources.js +61 -0
- package/dist/elements/speaker-identity.d.ts +32 -0
- package/dist/elements/speaker-identity.js +51 -0
- package/dist/elements/spec-sheet.d.ts +31 -0
- package/dist/elements/spec-sheet.js +45 -0
- package/dist/elements/stopped-run.d.ts +22 -0
- package/dist/elements/stopped-run.js +50 -0
- package/dist/elements/streaming-text.d.ts +31 -0
- package/dist/elements/streaming-text.js +45 -0
- package/dist/elements/subagent-list.d.ts +37 -0
- package/dist/elements/subagent-list.js +79 -0
- package/dist/elements/suggestions.d.ts +30 -0
- package/dist/elements/suggestions.js +36 -0
- package/dist/elements/surfaces.d.ts +85 -0
- package/dist/elements/surfaces.js +107 -0
- package/dist/elements/tail-status.d.ts +131 -0
- package/dist/elements/tail-status.js +94 -0
- package/dist/elements/terminal-block.d.ts +29 -0
- package/dist/elements/terminal-block.js +54 -0
- package/dist/elements/thinking-indicator.d.ts +18 -0
- package/dist/elements/thinking-indicator.js +36 -0
- package/dist/elements/thread-list.d.ts +35 -0
- package/dist/elements/thread-list.js +68 -0
- package/dist/elements/thread-search.d.ts +42 -0
- package/dist/elements/thread-search.js +99 -0
- package/dist/elements/timeline.d.ts +37 -0
- package/dist/elements/timeline.js +46 -0
- package/dist/elements/todo-list.d.ts +42 -0
- package/dist/elements/todo-list.js +59 -0
- package/dist/elements/tool-call.d.ts +41 -0
- package/dist/elements/tool-call.js +85 -0
- package/dist/elements/tool-error.d.ts +39 -0
- package/dist/elements/tool-error.js +76 -0
- package/dist/elements/tool-group.d.ts +45 -0
- package/dist/elements/tool-group.js +71 -0
- package/dist/elements/tool-timeline.d.ts +65 -0
- package/dist/elements/tool-timeline.js +88 -0
- package/dist/elements/trace-waterfall.d.ts +37 -0
- package/dist/elements/trace-waterfall.js +69 -0
- package/dist/elements/transcript-rules.d.ts +67 -0
- package/dist/elements/transcript-rules.js +95 -0
- package/dist/elements/turn-footer.d.ts +74 -0
- package/dist/elements/turn-footer.js +101 -0
- package/dist/elements/typing-indicator.d.ts +16 -0
- package/dist/elements/typing-indicator.js +51 -0
- package/dist/elements/verdict-row.d.ts +89 -0
- package/dist/elements/verdict-row.js +150 -0
- package/dist/elements/vocabulary.d.ts +612 -0
- package/dist/elements/vocabulary.js +611 -0
- package/dist/elements/voice-conversation.d.ts +49 -0
- package/dist/elements/voice-conversation.js +123 -0
- package/dist/elements/web-preview.d.ts +32 -0
- package/dist/elements/web-preview.js +66 -0
- package/dist/elements/web-search.d.ts +37 -0
- package/dist/elements/web-search.js +66 -0
- package/dist/elements/work-collapse.d.ts +103 -0
- package/dist/elements/work-collapse.js +131 -0
- package/dist/forms/_chassis.d.ts +104 -4
- package/dist/forms/_chassis.js +104 -4
- package/dist/forms/input-group.d.ts +8 -3
- package/dist/forms/input-group.js +8 -3
- package/dist/forms/number-field.d.ts +3 -2
- package/dist/forms/number-field.js +3 -2
- package/dist/icons/containers.d.ts +89 -0
- package/dist/icons/containers.js +295 -0
- package/dist/icons/index.d.ts +2 -0
- package/dist/index.d.ts +12 -6
- package/dist/index.js +5 -1
- package/dist/instruments/_data-row.js +118 -0
- package/dist/instruments/data-row.d.ts +94 -0
- package/dist/instruments/data-row.js +151 -0
- package/dist/instruments/data-tree.d.ts +126 -0
- package/dist/instruments/data-tree.js +303 -0
- package/dist/instruments/index.d.ts +5 -2
- package/dist/instruments/index.js +4 -1
- package/dist/instruments/ledger.d.ts +105 -0
- package/dist/instruments/ledger.js +114 -0
- package/dist/instruments/table.d.ts +70 -2
- package/dist/instruments/table.js +133 -39
- package/dist/instruments/two-step-button.js +25 -6
- package/dist/layout/sidebar.d.ts +19 -1
- package/dist/layout/sidebar.js +19 -1
- package/dist/primitives/button.js +11 -1
- package/dist/primitives/chip.d.ts +35 -9
- package/dist/primitives/chip.js +97 -11
- package/dist/system/agent-skin.d.ts +27 -0
- package/dist/system/agent-skin.js +20 -0
- package/dist/system/portal.d.ts +5 -3
- package/dist/system/portal.js +19 -5
- package/dist/system/theme-provider.js +54 -9
- package/dist/system/use-density.d.ts +9 -0
- package/dist/system/use-density.js +9 -0
- package/dist/system/use-isomorphic-layout-effect.js +19 -1
- package/dist/theming/_presets.d.ts +1 -1
- package/dist/theming/_presets.js +74 -11
- package/dist/theming/contrast.d.ts +16 -4
- package/dist/theming/contrast.js +33 -6
- package/dist/theming/create-theme.d.ts +6 -2
- package/dist/theming/create-theme.js +32 -5
- package/dist/theming/serialize.d.ts +10 -1
- package/dist/theming/serialize.js +62 -8
- package/manifest/components/activity-graph.json +88 -0
- package/manifest/components/agent-card.json +120 -0
- package/manifest/components/agent-handoff.json +87 -0
- package/manifest/components/agent-mode-badge.json +84 -0
- package/manifest/components/agent-plan.json +67 -0
- package/manifest/components/agent-status.json +73 -0
- package/manifest/components/agent-surface.json +78 -0
- package/manifest/components/alert-dialog.json +1 -1
- package/manifest/components/animated-number.json +67 -0
- package/manifest/components/app-shell.json +142 -9
- package/manifest/components/approval-card.json +106 -0
- package/manifest/components/artifact-card.json +81 -0
- package/manifest/components/audience-icon.json +52 -0
- package/manifest/components/autocomplete.json +2 -0
- package/manifest/components/background-inbox.json +71 -0
- package/manifest/components/branch-picker.json +124 -0
- package/manifest/components/button.json +1 -0
- package/manifest/components/canvas-split-body.json +62 -0
- package/manifest/components/canvas-split-document.json +54 -0
- package/manifest/components/canvas-split-header.json +83 -0
- package/manifest/components/canvas-split-line.json +62 -0
- package/manifest/components/canvas-split-message.json +62 -0
- package/manifest/components/canvas-split-thread.json +54 -0
- package/manifest/components/canvas-split.json +60 -0
- package/manifest/components/catalogue-icon.json +52 -0
- package/manifest/components/channel-beta-icon.json +52 -0
- package/manifest/components/channel-released-icon.json +52 -0
- package/manifest/components/chart.json +93 -0
- package/manifest/components/chat-empty-state.json +55 -0
- package/manifest/components/chat-panel-assistant-message.json +51 -0
- package/manifest/components/chat-panel-composer.json +66 -0
- package/manifest/components/chat-panel-messages.json +51 -0
- package/manifest/components/chat-panel-typing.json +51 -0
- package/manifest/components/chat-panel-user-message.json +51 -0
- package/manifest/components/chat-panel.json +57 -0
- package/manifest/components/checkpoint-history.json +80 -0
- package/manifest/components/chip.json +24 -12
- package/manifest/components/clamp.json +102 -0
- package/manifest/components/cli-tool-icon.json +52 -0
- package/manifest/components/code-diff.json +87 -0
- package/manifest/components/code-runner.json +97 -0
- package/manifest/components/color-field.json +2 -0
- package/manifest/components/color-picker.json +2 -0
- package/manifest/components/combobox.json +2 -0
- package/manifest/components/compaction-row.json +100 -0
- package/manifest/components/comparison-card.json +83 -0
- package/manifest/components/composer-actions.json +65 -0
- package/manifest/components/composer-attach-button.json +65 -0
- package/manifest/components/composer-attachment-chip.json +75 -0
- package/manifest/components/composer-attachments.json +60 -0
- package/manifest/components/composer-bar.json +73 -0
- package/manifest/components/composer-command-item.json +79 -0
- package/manifest/components/composer-context.json +67 -0
- package/manifest/components/composer-input.json +73 -0
- package/manifest/components/composer-menu-item.json +72 -0
- package/manifest/components/composer-menu.json +79 -0
- package/manifest/components/composer-model-item.json +75 -0
- package/manifest/components/composer-model-trigger.json +75 -0
- package/manifest/components/composer-person-item.json +79 -0
- package/manifest/components/composer-send.json +80 -0
- package/manifest/components/composer-toolbar.json +65 -0
- package/manifest/components/composer-voice-button.json +68 -0
- package/manifest/components/composer-voice.json +75 -0
- package/manifest/components/composer.json +2 -0
- package/manifest/components/computer-use.json +84 -0
- package/manifest/components/confidence-marker.json +74 -0
- package/manifest/components/connection-state.json +84 -0
- package/manifest/components/context-breakdown.json +65 -0
- package/manifest/components/context-usage.json +85 -0
- package/manifest/components/conversation-search.json +92 -0
- package/manifest/components/cost-meter.json +74 -0
- package/manifest/components/cue-portal-frame.json +1 -1
- package/manifest/components/data-row.json +203 -0
- package/manifest/components/data-tree.json +151 -0
- package/manifest/components/date-field.json +2 -0
- package/manifest/components/date-picker.json +2 -0
- package/manifest/components/date-range-picker.json +2 -0
- package/manifest/components/day-separator.json +58 -0
- package/manifest/components/delegation-card.json +1 -1
- package/manifest/components/density.json +1 -1
- package/manifest/components/diagram.json +100 -0
- package/manifest/components/document-reference.json +90 -0
- package/manifest/components/draft-restore.json +82 -0
- package/manifest/components/drawer.json +1 -1
- package/manifest/components/dropdown-menu.json +1 -1
- package/manifest/components/edit-message.json +105 -0
- package/manifest/components/elements-command-palette.json +100 -0
- package/manifest/components/elements-composer.json +71 -0
- package/manifest/components/elements-data-table.json +68 -0
- package/manifest/components/elements-timeline.json +69 -0
- package/manifest/components/elicitation-form.json +103 -0
- package/manifest/components/empty-state-composer.json +64 -0
- package/manifest/components/empty-state-greeting.json +49 -0
- package/manifest/components/empty-state-suggestion.json +57 -0
- package/manifest/components/empty-state-suggestions.json +49 -0
- package/manifest/components/end-of-turn-summary.json +77 -0
- package/manifest/components/env-var-input.json +2 -0
- package/manifest/components/error-state.json +80 -0
- package/manifest/components/feedback-dialog.json +107 -0
- package/manifest/components/file-tree.json +83 -0
- package/manifest/components/flow-graph.json +75 -0
- package/manifest/components/folder-icon.json +52 -0
- package/manifest/components/frac.json +59 -0
- package/manifest/components/generation-loader.json +64 -0
- package/manifest/components/generative-ui.json +93 -0
- package/manifest/components/guardrail-notice.json +91 -0
- package/manifest/components/hover-card.json +1 -1
- package/manifest/components/image-generation.json +67 -0
- package/manifest/components/info-tip.json +1 -1
- package/manifest/components/inline-citation.json +77 -0
- package/manifest/components/input-group.json +4 -2
- package/manifest/components/input.json +3 -1
- package/manifest/components/job-progress.json +96 -0
- package/manifest/components/launcher-bubble.json +105 -0
- package/manifest/components/ledger.json +187 -0
- package/manifest/components/live-region-announcer.json +79 -0
- package/manifest/components/map-answer.json +83 -0
- package/manifest/components/markdown-text.json +94 -0
- package/manifest/components/math-block.json +74 -0
- package/manifest/components/mcp-server-icon.json +52 -0
- package/manifest/components/mcp-server-panel.json +87 -0
- package/manifest/components/memory-chips.json +65 -0
- package/manifest/components/message-actions.json +99 -0
- package/manifest/components/message-attachments.json +63 -0
- package/manifest/components/message-branches.json +71 -0
- package/manifest/components/message-list.json +1 -1
- package/manifest/components/message-pair.json +86 -0
- package/manifest/components/message-queue.json +74 -0
- package/manifest/components/message-timing.json +62 -0
- package/manifest/components/mobile-composer.json +126 -0
- package/manifest/components/model-picker.json +76 -0
- package/manifest/components/multi-select.json +2 -0
- package/manifest/components/musical-time-input.json +2 -0
- package/manifest/components/node-card.json +1 -1
- package/manifest/components/node-handle.json +1 -1
- package/manifest/components/number-field.json +3 -1
- package/manifest/components/number-ticker.json +61 -0
- package/manifest/components/onboarding.json +84 -0
- package/manifest/components/otp-field.json +9 -7
- package/manifest/components/password-input.json +2 -0
- package/manifest/components/permission-grant.json +92 -0
- package/manifest/components/permission-scopes.json +139 -0
- package/manifest/components/popover.json +1 -1
- package/manifest/components/prompt-library.json +99 -0
- package/manifest/components/queue-dock.json +110 -0
- package/manifest/components/quota-banner.json +94 -0
- package/manifest/components/quote-reply.json +105 -0
- package/manifest/components/read-aloud.json +111 -0
- package/manifest/components/reasoning-effort.json +81 -0
- package/manifest/components/reasoning-panel.json +108 -0
- package/manifest/components/recommendation-card.json +107 -0
- package/manifest/components/regenerate-menu.json +89 -0
- package/manifest/components/replay-player.json +102 -0
- package/manifest/components/research-report.json +76 -0
- package/manifest/components/retrieval-chunks.json +84 -0
- package/manifest/components/revert-dock.json +150 -0
- package/manifest/components/reviewable-diff.json +93 -0
- package/manifest/components/risk-badge.json +74 -0
- package/manifest/components/schedule-card.json +101 -0
- package/manifest/components/score-breakdown.json +91 -0
- package/manifest/components/scroll-anchor.json +72 -0
- package/manifest/components/scroll-area.json +7 -7
- package/manifest/components/scrub-input.json +2 -0
- package/manifest/components/search-input.json +9 -7
- package/manifest/components/segmented-control.json +21 -21
- package/manifest/components/select.json +1 -0
- package/manifest/components/settings-panel.json +118 -0
- package/manifest/components/shared-conversation.json +89 -0
- package/manifest/components/shimmer-label.json +59 -0
- package/manifest/components/skill-icon.json +52 -0
- package/manifest/components/sources.json +83 -0
- package/manifest/components/speaker-identity.json +61 -0
- package/manifest/components/spec-sheet.json +80 -0
- package/manifest/components/stack-icon.json +52 -0
- package/manifest/components/stacks-matrix-icon.json +52 -0
- package/manifest/components/stat.json +1 -1
- package/manifest/components/status-bar.json +146 -12
- package/manifest/components/status-dot.json +1 -1
- package/manifest/components/stopped-run.json +81 -0
- package/manifest/components/streaming-text.json +71 -0
- package/manifest/components/sub.json +44 -0
- package/manifest/components/subagent-list.json +88 -0
- package/manifest/components/suggestions.json +84 -0
- package/manifest/components/sup.json +44 -0
- package/manifest/components/swap-label.json +71 -0
- package/manifest/components/table-scroll-region.json +6 -0
- package/manifest/components/table.json +88 -4
- package/manifest/components/tags-input.json +2 -0
- package/manifest/components/tail-status.json +109 -0
- package/manifest/components/terminal-block.json +91 -0
- package/manifest/components/textarea.json +3 -1
- package/manifest/components/theme-provider.json +2 -2
- package/manifest/components/thinking-indicator.json +63 -0
- package/manifest/components/thread-list.json +76 -0
- package/manifest/components/thread-search.json +90 -0
- package/manifest/components/threshold-rail.json +2 -2
- package/manifest/components/time-boundary.json +62 -0
- package/manifest/components/time-field.json +2 -0
- package/manifest/components/timeline.json +1 -1
- package/manifest/components/title-bar.json +1 -1
- package/manifest/components/todo-list.json +69 -0
- package/manifest/components/toggle-group.json +9 -7
- package/manifest/components/toggle.json +2 -0
- package/manifest/components/token-editor.json +1 -1
- package/manifest/components/tool-call-card.json +200 -0
- package/manifest/components/tool-call.json +119 -0
- package/manifest/components/tool-error.json +114 -0
- package/manifest/components/tool-group.json +83 -0
- package/manifest/components/tool-timeline.json +119 -0
- package/manifest/components/toolbar.json +7 -7
- package/manifest/components/tooltip.json +1 -1
- package/manifest/components/trace-waterfall.json +74 -0
- package/manifest/components/turn-footer.json +105 -0
- package/manifest/components/typing-indicator.json +53 -0
- package/manifest/components/unread-divider.json +55 -0
- package/manifest/components/usage-chart.json +1 -1
- package/manifest/components/verdict-row.json +91 -0
- package/manifest/components/voice-conversation.json +109 -0
- package/manifest/components/web-preview.json +87 -0
- package/manifest/components/web-search.json +92 -0
- package/manifest/components/work-collapse.json +102 -0
- package/manifest/manifest.json +2736 -60
- package/manifest/tokens.json +22 -1
- package/package.json +44 -2
package/dist/forms/_chassis.d.ts
CHANGED
|
@@ -20,10 +20,84 @@ type FormControlSize = "sm" | "md" | "lg";
|
|
|
20
20
|
* raising them off it, which is the portfolio-wide convention for anything the
|
|
21
21
|
* user types into.
|
|
22
22
|
*
|
|
23
|
+
* **Focus is one signal, not two.** The rim walks one rung up the border ladder
|
|
24
|
+
* on `:focus` — `border-border` to `border-border-strong` — and `:focus-visible`
|
|
25
|
+
* adds a single 2px outline, pulled back over that rim with
|
|
26
|
+
* `-outline-offset-1` so it sits flush against the control instead of floating
|
|
27
|
+
* a pixel clear of it. The recipe this replaced painted a saturated accent rim
|
|
28
|
+
* *and* an offset accent ring simultaneously, which in a dark, dense console
|
|
29
|
+
* reads as an error or a selection rather than as "the caret is here". No
|
|
30
|
+
* shipping system draws both: Carbon and Radix each draw one flush ring, and
|
|
31
|
+
* shadcn moved off the offset-ring default it used to ship.
|
|
32
|
+
*
|
|
33
|
+
* Flush is also the cheap way to stay correct. WCAG 2.4.13 accepts a 2px
|
|
34
|
+
* perimeter only when it touches the component's own outer edge; an indicator
|
|
35
|
+
* inset further, floating on a gap, has to be 3px thick to cover the same area.
|
|
36
|
+
* And because an outline is painted outside the layout box, none of this moves
|
|
37
|
+
* a control by a pixel or reflows the row it sits in.
|
|
38
|
+
*
|
|
39
|
+
* There is no quieter pointer path to fall back on, which is why the single
|
|
40
|
+
* treatment has to be quiet itself: every engine puts typing surfaces on the
|
|
41
|
+
* `:focus-visible` allowlist, so a text input matches it on a mouse click just
|
|
42
|
+
* as it does on Tab. Only the non-typing controls that ride this chassis — the
|
|
43
|
+
* `Select` trigger, the date triggers — actually distinguish the two.
|
|
44
|
+
*
|
|
45
|
+
* `--cue-focus`, not `--cue-accent`. Every theme ships both roles, and keeping
|
|
46
|
+
* them separable is what WCAG 1.4.11 needs: one role whose job is "read at 3:1
|
|
47
|
+
* against the surface behind the ring", independent of the role whose job is
|
|
48
|
+
* "look like the brand". Seventeen of the twenty theme blocks still set the two
|
|
49
|
+
* to the same value, so there the separation costs nothing on screen — but three
|
|
50
|
+
* light presets can no longer afford it. luma.light, venu.light and hivehub.light
|
|
51
|
+
* each read below 3:1 against surfaces a field actually sits on (luma.light as
|
|
52
|
+
* low as 2.45, and against four of its five grounds), so each now carries its
|
|
53
|
+
* own ring — the accent's hue stepped darker — while the accent itself stays
|
|
54
|
+
* put. Measured across all five grounds a field can land on — the sunken fill,
|
|
55
|
+
* the page background and the three surface rungs — every preset now clears
|
|
56
|
+
* 3:1, the thinnest being signal.light's 3.27. Pointing the ring at the focus
|
|
57
|
+
* role is what made that retune possible without repainting every accent
|
|
58
|
+
* surface in the theme.
|
|
59
|
+
*
|
|
60
|
+
* (Named in prose rather than as `--cue-*` on purpose: `tokensUsed` in the
|
|
61
|
+
* published manifest is scanned out of this file's text, so spelling the other
|
|
62
|
+
* four grounds as tokens would have every control on this chassis claim it
|
|
63
|
+
* paints a surface it never touches.)
|
|
64
|
+
*
|
|
65
|
+
* `--cue-danger` carries the same obligation on an invalid field, where it is
|
|
66
|
+
* the ring rather than only the rim — a 1.4.11 surface, not purely a semantic
|
|
67
|
+
* colour. It needed no retune: the red already clears 3:1 on all five grounds in
|
|
68
|
+
* every preset, thinnest at terminal.dark's 3.13. Both floors are held by
|
|
69
|
+
* `test/theming/contrast.test.ts`, which measures every block on every ground —
|
|
70
|
+
* the guard that was missing when these three shipped a ring nobody could see.
|
|
71
|
+
*
|
|
72
|
+
* The ring is an `outline` and never a `box-shadow`: `forced-colors: active`
|
|
73
|
+
* discards box shadows outright and repaints outlines in the user's own
|
|
74
|
+
* highlight colour, so an outline is the only indicator that survives
|
|
75
|
+
* high-contrast mode.
|
|
76
|
+
*
|
|
77
|
+
* **Invalid and focused: the ring turns red, it does not sit beside the rim.**
|
|
78
|
+
* `data-[invalid]:border-danger` does win the cascade over the focus rim, but
|
|
79
|
+
* winning it changes nothing on screen: an outline's band runs from
|
|
80
|
+
* `border-edge + offset` outward by its own width, so a 2px ring at
|
|
81
|
+
* `-outline-offset-1` spans from one pixel inside the border box to one pixel
|
|
82
|
+
* outside it — the whole 1px rim — and outlines paint after borders. Measured
|
|
83
|
+
* in both engines: an invalid control paints 456 danger pixels at rest and zero
|
|
84
|
+
* while focused. Pushing the ring off the rim would mean either floating it on
|
|
85
|
+
* a gap (WCAG 2.4.13 then wants 3px, and the halo is back) or insetting it
|
|
86
|
+
* further (which buries it deeper). So the ring takes the danger colour instead
|
|
87
|
+
* — `data-[invalid]:focus-visible:outline-danger` — which is the ruling shadcn
|
|
88
|
+
* and Radix both reached: the border stays danger, the ring communicates focus,
|
|
89
|
+
* and red communicates invalid whichever of the two is painting.
|
|
90
|
+
*
|
|
91
|
+
* The compound modifier outranks the plain one on specificity — an attribute
|
|
92
|
+
* selector and a pseudo-class against one pseudo-class — so its position in
|
|
93
|
+
* Tailwind's utility order cannot decide it. `focus-visible:outline-solid` and
|
|
94
|
+
* `focus-visible:outline-2` still supply the style and the width in both cases,
|
|
95
|
+
* which is why only the colour is restated.
|
|
96
|
+
*
|
|
23
97
|
* `focus-visible:outline-solid` re-declares the outline style the sibling
|
|
24
98
|
* `outline-none` switched off — see the note on `buttonChassis`.
|
|
25
99
|
*/
|
|
26
|
-
declare const controlSurface = "w-full rounded-(--radius-control) border border-border bg-sunken font-mono text-fg placeholder:text-fg-subtle outline-none focus:border-
|
|
100
|
+
declare const controlSurface = "w-full rounded-(--radius-control) border border-border bg-sunken font-mono text-fg placeholder:text-fg-subtle outline-none focus:border-border-strong focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-1 focus-visible:outline-(--cue-focus) disabled:opacity-40 data-[disabled]:opacity-40 data-[invalid]:border-danger data-[invalid]:focus-visible:outline-danger";
|
|
27
101
|
/**
|
|
28
102
|
* The full recessed-control recipe, one variant per rung of the control ladder.
|
|
29
103
|
*
|
|
@@ -56,9 +130,35 @@ declare const controlClasses: string;
|
|
|
56
130
|
declare const bareControlClasses = "min-w-0 flex-1 border-0 bg-transparent p-0 font-mono text-[length:inherit] text-fg placeholder:text-fg-subtle outline-none disabled:opacity-40";
|
|
57
131
|
/**
|
|
58
132
|
* Focus feedback for a wrapper that owns the rim on behalf of an inner control.
|
|
59
|
-
*
|
|
60
|
-
*
|
|
133
|
+
*
|
|
134
|
+
* A `<div>` never matches `:focus-visible` itself, so a group has to read the
|
|
135
|
+
* state off its descendants — and the two halves of {@link controlSurface}'s
|
|
136
|
+
* treatment want two different questions asked of them.
|
|
137
|
+
*
|
|
138
|
+
* The rim follows plain `:focus-within`: anything focused inside strengthens the
|
|
139
|
+
* border. That is the quiet half, and it is the right answer however the focus
|
|
140
|
+
* arrived. The ring follows `:has(:focus-visible)`, so it paints only when the
|
|
141
|
+
* descendant that has focus is itself showing a focus ring. Using
|
|
142
|
+
* `:focus-within` for *both* — the recipe this replaced — is what made a mouse
|
|
143
|
+
* click inside a `SearchInput` or a `NumberField` light the whole cluster up
|
|
144
|
+
* with a saturated block, the single loudest thing in a console form.
|
|
145
|
+
*
|
|
146
|
+
* `:has()` is Baseline — Chrome 105, Safari 15.4, Firefox 121 — so no
|
|
147
|
+
* `:focus-within` fallback layer is needed at the floor this library supports.
|
|
148
|
+
*
|
|
149
|
+
* Geometry matches {@link controlSurface} exactly, down to the negative offset:
|
|
150
|
+
* a grouped field and a plain one are the same control, and a rim that differed
|
|
151
|
+
* by a pixel between them would say otherwise. The inner control stays ringless
|
|
152
|
+
* — see {@link bareControlClasses} — because two concentric rings on one field
|
|
153
|
+
* is the halo this treatment exists to remove.
|
|
154
|
+
*
|
|
155
|
+
* The invalid ruling comes with the geometry, for the same reason: at
|
|
156
|
+
* `-outline-offset-1` the ring covers the rim it is drawn over, so an invalid
|
|
157
|
+
* group in focus recolours the ring rather than pretending the red under it is
|
|
158
|
+
* still visible. `data-invalid` is read off the wrapper, which is where Base
|
|
159
|
+
* UI's `Field` stamps it and where the group already takes
|
|
160
|
+
* `data-[invalid]:border-danger` from {@link controlVariants}.
|
|
61
161
|
*/
|
|
62
|
-
declare const controlGroupFocusClasses = "focus-within:border-
|
|
162
|
+
declare const controlGroupFocusClasses = "focus-within:border-border-strong has-focus-visible:outline-2 has-focus-visible:outline-solid has-focus-visible:-outline-offset-1 has-focus-visible:outline-(--cue-focus) data-[invalid]:has-focus-visible:outline-danger";
|
|
63
163
|
//#endregion
|
|
64
164
|
export { ControlVariantProps, FormControlSize, bareControlClasses, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants };
|
package/dist/forms/_chassis.js
CHANGED
|
@@ -12,10 +12,84 @@ import { cva } from "../lib/cva.js";
|
|
|
12
12
|
* raising them off it, which is the portfolio-wide convention for anything the
|
|
13
13
|
* user types into.
|
|
14
14
|
*
|
|
15
|
+
* **Focus is one signal, not two.** The rim walks one rung up the border ladder
|
|
16
|
+
* on `:focus` — `border-border` to `border-border-strong` — and `:focus-visible`
|
|
17
|
+
* adds a single 2px outline, pulled back over that rim with
|
|
18
|
+
* `-outline-offset-1` so it sits flush against the control instead of floating
|
|
19
|
+
* a pixel clear of it. The recipe this replaced painted a saturated accent rim
|
|
20
|
+
* *and* an offset accent ring simultaneously, which in a dark, dense console
|
|
21
|
+
* reads as an error or a selection rather than as "the caret is here". No
|
|
22
|
+
* shipping system draws both: Carbon and Radix each draw one flush ring, and
|
|
23
|
+
* shadcn moved off the offset-ring default it used to ship.
|
|
24
|
+
*
|
|
25
|
+
* Flush is also the cheap way to stay correct. WCAG 2.4.13 accepts a 2px
|
|
26
|
+
* perimeter only when it touches the component's own outer edge; an indicator
|
|
27
|
+
* inset further, floating on a gap, has to be 3px thick to cover the same area.
|
|
28
|
+
* And because an outline is painted outside the layout box, none of this moves
|
|
29
|
+
* a control by a pixel or reflows the row it sits in.
|
|
30
|
+
*
|
|
31
|
+
* There is no quieter pointer path to fall back on, which is why the single
|
|
32
|
+
* treatment has to be quiet itself: every engine puts typing surfaces on the
|
|
33
|
+
* `:focus-visible` allowlist, so a text input matches it on a mouse click just
|
|
34
|
+
* as it does on Tab. Only the non-typing controls that ride this chassis — the
|
|
35
|
+
* `Select` trigger, the date triggers — actually distinguish the two.
|
|
36
|
+
*
|
|
37
|
+
* `--cue-focus`, not `--cue-accent`. Every theme ships both roles, and keeping
|
|
38
|
+
* them separable is what WCAG 1.4.11 needs: one role whose job is "read at 3:1
|
|
39
|
+
* against the surface behind the ring", independent of the role whose job is
|
|
40
|
+
* "look like the brand". Seventeen of the twenty theme blocks still set the two
|
|
41
|
+
* to the same value, so there the separation costs nothing on screen — but three
|
|
42
|
+
* light presets can no longer afford it. luma.light, venu.light and hivehub.light
|
|
43
|
+
* each read below 3:1 against surfaces a field actually sits on (luma.light as
|
|
44
|
+
* low as 2.45, and against four of its five grounds), so each now carries its
|
|
45
|
+
* own ring — the accent's hue stepped darker — while the accent itself stays
|
|
46
|
+
* put. Measured across all five grounds a field can land on — the sunken fill,
|
|
47
|
+
* the page background and the three surface rungs — every preset now clears
|
|
48
|
+
* 3:1, the thinnest being signal.light's 3.27. Pointing the ring at the focus
|
|
49
|
+
* role is what made that retune possible without repainting every accent
|
|
50
|
+
* surface in the theme.
|
|
51
|
+
*
|
|
52
|
+
* (Named in prose rather than as `--cue-*` on purpose: `tokensUsed` in the
|
|
53
|
+
* published manifest is scanned out of this file's text, so spelling the other
|
|
54
|
+
* four grounds as tokens would have every control on this chassis claim it
|
|
55
|
+
* paints a surface it never touches.)
|
|
56
|
+
*
|
|
57
|
+
* `--cue-danger` carries the same obligation on an invalid field, where it is
|
|
58
|
+
* the ring rather than only the rim — a 1.4.11 surface, not purely a semantic
|
|
59
|
+
* colour. It needed no retune: the red already clears 3:1 on all five grounds in
|
|
60
|
+
* every preset, thinnest at terminal.dark's 3.13. Both floors are held by
|
|
61
|
+
* `test/theming/contrast.test.ts`, which measures every block on every ground —
|
|
62
|
+
* the guard that was missing when these three shipped a ring nobody could see.
|
|
63
|
+
*
|
|
64
|
+
* The ring is an `outline` and never a `box-shadow`: `forced-colors: active`
|
|
65
|
+
* discards box shadows outright and repaints outlines in the user's own
|
|
66
|
+
* highlight colour, so an outline is the only indicator that survives
|
|
67
|
+
* high-contrast mode.
|
|
68
|
+
*
|
|
69
|
+
* **Invalid and focused: the ring turns red, it does not sit beside the rim.**
|
|
70
|
+
* `data-[invalid]:border-danger` does win the cascade over the focus rim, but
|
|
71
|
+
* winning it changes nothing on screen: an outline's band runs from
|
|
72
|
+
* `border-edge + offset` outward by its own width, so a 2px ring at
|
|
73
|
+
* `-outline-offset-1` spans from one pixel inside the border box to one pixel
|
|
74
|
+
* outside it — the whole 1px rim — and outlines paint after borders. Measured
|
|
75
|
+
* in both engines: an invalid control paints 456 danger pixels at rest and zero
|
|
76
|
+
* while focused. Pushing the ring off the rim would mean either floating it on
|
|
77
|
+
* a gap (WCAG 2.4.13 then wants 3px, and the halo is back) or insetting it
|
|
78
|
+
* further (which buries it deeper). So the ring takes the danger colour instead
|
|
79
|
+
* — `data-[invalid]:focus-visible:outline-danger` — which is the ruling shadcn
|
|
80
|
+
* and Radix both reached: the border stays danger, the ring communicates focus,
|
|
81
|
+
* and red communicates invalid whichever of the two is painting.
|
|
82
|
+
*
|
|
83
|
+
* The compound modifier outranks the plain one on specificity — an attribute
|
|
84
|
+
* selector and a pseudo-class against one pseudo-class — so its position in
|
|
85
|
+
* Tailwind's utility order cannot decide it. `focus-visible:outline-solid` and
|
|
86
|
+
* `focus-visible:outline-2` still supply the style and the width in both cases,
|
|
87
|
+
* which is why only the colour is restated.
|
|
88
|
+
*
|
|
15
89
|
* `focus-visible:outline-solid` re-declares the outline style the sibling
|
|
16
90
|
* `outline-none` switched off — see the note on `buttonChassis`.
|
|
17
91
|
*/
|
|
18
|
-
const controlSurface = "w-full rounded-(--radius-control) border border-border bg-sunken font-mono text-fg placeholder:text-fg-subtle outline-none focus:border-
|
|
92
|
+
const controlSurface = "w-full rounded-(--radius-control) border border-border bg-sunken font-mono text-fg placeholder:text-fg-subtle outline-none focus:border-border-strong focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-1 focus-visible:outline-(--cue-focus) disabled:opacity-40 data-[disabled]:opacity-40 data-[invalid]:border-danger data-[invalid]:focus-visible:outline-danger";
|
|
19
93
|
/**
|
|
20
94
|
* The full recessed-control recipe, one variant per rung of the control ladder.
|
|
21
95
|
*
|
|
@@ -51,9 +125,35 @@ const controlClasses = controlVariants();
|
|
|
51
125
|
const bareControlClasses = "min-w-0 flex-1 border-0 bg-transparent p-0 font-mono text-[length:inherit] text-fg placeholder:text-fg-subtle outline-none disabled:opacity-40";
|
|
52
126
|
/**
|
|
53
127
|
* Focus feedback for a wrapper that owns the rim on behalf of an inner control.
|
|
54
|
-
*
|
|
55
|
-
*
|
|
128
|
+
*
|
|
129
|
+
* A `<div>` never matches `:focus-visible` itself, so a group has to read the
|
|
130
|
+
* state off its descendants — and the two halves of {@link controlSurface}'s
|
|
131
|
+
* treatment want two different questions asked of them.
|
|
132
|
+
*
|
|
133
|
+
* The rim follows plain `:focus-within`: anything focused inside strengthens the
|
|
134
|
+
* border. That is the quiet half, and it is the right answer however the focus
|
|
135
|
+
* arrived. The ring follows `:has(:focus-visible)`, so it paints only when the
|
|
136
|
+
* descendant that has focus is itself showing a focus ring. Using
|
|
137
|
+
* `:focus-within` for *both* — the recipe this replaced — is what made a mouse
|
|
138
|
+
* click inside a `SearchInput` or a `NumberField` light the whole cluster up
|
|
139
|
+
* with a saturated block, the single loudest thing in a console form.
|
|
140
|
+
*
|
|
141
|
+
* `:has()` is Baseline — Chrome 105, Safari 15.4, Firefox 121 — so no
|
|
142
|
+
* `:focus-within` fallback layer is needed at the floor this library supports.
|
|
143
|
+
*
|
|
144
|
+
* Geometry matches {@link controlSurface} exactly, down to the negative offset:
|
|
145
|
+
* a grouped field and a plain one are the same control, and a rim that differed
|
|
146
|
+
* by a pixel between them would say otherwise. The inner control stays ringless
|
|
147
|
+
* — see {@link bareControlClasses} — because two concentric rings on one field
|
|
148
|
+
* is the halo this treatment exists to remove.
|
|
149
|
+
*
|
|
150
|
+
* The invalid ruling comes with the geometry, for the same reason: at
|
|
151
|
+
* `-outline-offset-1` the ring covers the rim it is drawn over, so an invalid
|
|
152
|
+
* group in focus recolours the ring rather than pretending the red under it is
|
|
153
|
+
* still visible. `data-invalid` is read off the wrapper, which is where Base
|
|
154
|
+
* UI's `Field` stamps it and where the group already takes
|
|
155
|
+
* `data-[invalid]:border-danger` from {@link controlVariants}.
|
|
56
156
|
*/
|
|
57
|
-
const controlGroupFocusClasses = "focus-within:border-
|
|
157
|
+
const controlGroupFocusClasses = "focus-within:border-border-strong has-focus-visible:outline-2 has-focus-visible:outline-solid has-focus-visible:-outline-offset-1 has-focus-visible:outline-(--cue-focus) data-[invalid]:has-focus-visible:outline-danger";
|
|
58
158
|
//#endregion
|
|
59
159
|
export { bareControlClasses, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants };
|
|
@@ -17,9 +17,14 @@ interface InputGroupProps extends React.ComponentPropsWithoutRef<"div"> {
|
|
|
17
17
|
* The group — not the input — owns the chassis, so there is exactly one rim and
|
|
18
18
|
* one fill however many affordances are bolted on. It publishes that fact
|
|
19
19
|
* through context: an {@link Input} rendered inside strips its own border,
|
|
20
|
-
* background, height and padding and inherits the group's font size.
|
|
21
|
-
*
|
|
22
|
-
* `:focus
|
|
20
|
+
* background, height and padding and inherits the group's font size.
|
|
21
|
+
*
|
|
22
|
+
* Focus feedback splits in two, because a `<div>` matches neither `:focus` nor
|
|
23
|
+
* `:focus-visible` itself. The rim strengthens on `:focus-within` — anything
|
|
24
|
+
* focused inside, however it got there — while the ring waits for
|
|
25
|
+
* `:has(:focus-visible)`, so a mouse click into the field does not light the
|
|
26
|
+
* whole cluster up. Both halves live on the wrapper; the inner control paints
|
|
27
|
+
* no ring of its own.
|
|
23
28
|
*
|
|
24
29
|
* @example
|
|
25
30
|
* <InputGroup leading={<Search />} trailing={<Kbd>⌘K</Kbd>}>
|
|
@@ -17,9 +17,14 @@ const InputGroupContext = React.createContext(false);
|
|
|
17
17
|
* The group — not the input — owns the chassis, so there is exactly one rim and
|
|
18
18
|
* one fill however many affordances are bolted on. It publishes that fact
|
|
19
19
|
* through context: an {@link Input} rendered inside strips its own border,
|
|
20
|
-
* background, height and padding and inherits the group's font size.
|
|
21
|
-
*
|
|
22
|
-
* `:focus
|
|
20
|
+
* background, height and padding and inherits the group's font size.
|
|
21
|
+
*
|
|
22
|
+
* Focus feedback splits in two, because a `<div>` matches neither `:focus` nor
|
|
23
|
+
* `:focus-visible` itself. The rim strengthens on `:focus-within` — anything
|
|
24
|
+
* focused inside, however it got there — while the ring waits for
|
|
25
|
+
* `:has(:focus-visible)`, so a mouse click into the field does not light the
|
|
26
|
+
* whole cluster up. Both halves live on the wrapper; the inner control paints
|
|
27
|
+
* no ring of its own.
|
|
23
28
|
*
|
|
24
29
|
* @example
|
|
25
30
|
* <InputGroup leading={<Search />} trailing={<Kbd>⌘K</Kbd>}>
|
|
@@ -25,8 +25,9 @@ interface NumberFieldProps extends Omit<NumberField.Root.Props, "className"> {
|
|
|
25
25
|
* and values typed out of range are clamped to `min`/`max` on blur.
|
|
26
26
|
*
|
|
27
27
|
* The group owns the rim; the input and both buttons render bare inside it, so
|
|
28
|
-
* the whole cluster reads as one field
|
|
29
|
-
*
|
|
28
|
+
* the whole cluster reads as one field. Focus feedback follows the group's
|
|
29
|
+
* split: the rim strengthens on `:focus-within`, and the ring waits for
|
|
30
|
+
* `:has(:focus-visible)` so a click on a stepper does not paint one.
|
|
30
31
|
*
|
|
31
32
|
* @example
|
|
32
33
|
* <NumberField aria-label="Fade time" defaultValue={3} min={0} max={600} step={0.5} />
|
|
@@ -17,8 +17,9 @@ const stepperClasses = "flex shrink-0 items-center justify-center border-0 bg-tr
|
|
|
17
17
|
* and values typed out of range are clamped to `min`/`max` on blur.
|
|
18
18
|
*
|
|
19
19
|
* The group owns the rim; the input and both buttons render bare inside it, so
|
|
20
|
-
* the whole cluster reads as one field
|
|
21
|
-
*
|
|
20
|
+
* the whole cluster reads as one field. Focus feedback follows the group's
|
|
21
|
+
* split: the rim strengthens on `:focus-within`, and the ring waits for
|
|
22
|
+
* `:has(:focus-visible)` so a click on a stepper does not paint one.
|
|
22
23
|
*
|
|
23
24
|
* @example
|
|
24
25
|
* <NumberField aria-label="Fade time" defaultValue={3} min={0} max={600} step={0.5} />
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
//#region src/icons/containers.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* The catalogue itself: everything there is, before anything has been narrowed.
|
|
5
|
+
*
|
|
6
|
+
* One tile repeated over a 2×2 rather than a stack of rows, because the row
|
|
7
|
+
* this marks is the one that *undoes* a filter — "all of it" is a shape, and a
|
|
8
|
+
* list glyph would have promised an ordering the row does not have.
|
|
9
|
+
*/
|
|
10
|
+
declare function CatalogueIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
11
|
+
/**
|
|
12
|
+
* One person's stack: the set of things they have actually installed.
|
|
13
|
+
*
|
|
14
|
+
* Plates seen edge-on — the layers idiom — because a stack is an accumulation
|
|
15
|
+
* and not a container: things go into it one at a time and the order they went
|
|
16
|
+
* in is part of what it is.
|
|
17
|
+
*/
|
|
18
|
+
declare function StackIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
19
|
+
/**
|
|
20
|
+
* Every stack at once, one column each: who has what, read across.
|
|
21
|
+
*
|
|
22
|
+
* A table rather than more plates. The head rule and the name column are what
|
|
23
|
+
* make it a matrix instead of a grid — the question it answers is "which of
|
|
24
|
+
* these does that person not have", and that is a question with two axes.
|
|
25
|
+
*/
|
|
26
|
+
declare function StacksMatrixIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
27
|
+
/**
|
|
28
|
+
* An audience: a named group of people something is published to.
|
|
29
|
+
*
|
|
30
|
+
* People, not an abstract shape. An audience is the one container in this set
|
|
31
|
+
* whose members are humans rather than artefacts, and drawing it as a diamond
|
|
32
|
+
* or a tag would have filed it with the folders — which is exactly the mistake
|
|
33
|
+
* a reader makes when deciding where to publish something.
|
|
34
|
+
*/
|
|
35
|
+
declare function AudienceIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
36
|
+
/**
|
|
37
|
+
* The released channel: what a colleague gets when they install without asking
|
|
38
|
+
* for anything in particular.
|
|
39
|
+
*
|
|
40
|
+
* A ring filled solid. Its pair, {@link ChannelBetaIcon}, is the same ring
|
|
41
|
+
* filled halfway — the two are one mark told twice, so a reader never has to
|
|
42
|
+
* learn which of two unrelated pictures means "finished".
|
|
43
|
+
*/
|
|
44
|
+
declare function ChannelReleasedIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
45
|
+
/**
|
|
46
|
+
* The beta channel: the same things, one merge earlier.
|
|
47
|
+
*
|
|
48
|
+
* The released ring at half fill. Half rather than empty because a beta is not
|
|
49
|
+
* an absence of a release — it is a release that has not finished happening,
|
|
50
|
+
* and an empty ring would have read as "nothing here yet".
|
|
51
|
+
*/
|
|
52
|
+
declare function ChannelBetaIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
53
|
+
/**
|
|
54
|
+
* A folder somebody made: a shelf of bookmarks, filed by hand.
|
|
55
|
+
*
|
|
56
|
+
* The tab is the whole glyph. A plain rounded box in this library is a panel,
|
|
57
|
+
* a card or a dialog, and the one thing a folder has to say is that a person
|
|
58
|
+
* put these here on purpose rather than a query having returned them.
|
|
59
|
+
*/
|
|
60
|
+
declare function FolderIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
61
|
+
/**
|
|
62
|
+
* An MCP server in the registry: a thing an agent connects *to*.
|
|
63
|
+
*
|
|
64
|
+
* Two rack units with a status lamp each. It is drawn as hardware on purpose —
|
|
65
|
+
* an MCP server is the one entry in a catalogue of files that is a running
|
|
66
|
+
* process somewhere, with an address and a session, and a row that looked like
|
|
67
|
+
* a document would hide the only fact about it that matters operationally.
|
|
68
|
+
*/
|
|
69
|
+
declare function McpServerIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
70
|
+
/**
|
|
71
|
+
* A CLI tool in the registry: a thing that runs in a terminal.
|
|
72
|
+
*
|
|
73
|
+
* A window with a prompt in it, rather than a bare chevron. A chevron on its
|
|
74
|
+
* own is a disclosure everywhere else in this library, and a navigation row
|
|
75
|
+
* that appeared to expand and then navigated instead is a worse failure than a
|
|
76
|
+
* slightly busier glyph at 10px.
|
|
77
|
+
*/
|
|
78
|
+
declare function CliToolIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
79
|
+
/**
|
|
80
|
+
* A skill: the thing every other container in this set holds.
|
|
81
|
+
*
|
|
82
|
+
* One mark, and a spark rather than a document, because what is being filed is
|
|
83
|
+
* a capability. The file it happens to be written in is an implementation
|
|
84
|
+
* detail of how it travels, and a page glyph would have made the catalogue look
|
|
85
|
+
* like a folder of documents rather than a list of things an agent can now do.
|
|
86
|
+
*/
|
|
87
|
+
declare function SkillIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
|
|
88
|
+
//#endregion
|
|
89
|
+
export { AudienceIcon, CatalogueIcon, ChannelBetaIcon, ChannelReleasedIcon, CliToolIcon, FolderIcon, McpServerIcon, SkillIcon, StackIcon, StacksMatrixIcon };
|