@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
|
@@ -2,21 +2,36 @@ import { ClassProp, VariantProps } from "../lib/cva.js";
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
//#region src/primitives/chip.d.ts
|
|
4
4
|
/**
|
|
5
|
-
* The tinted-chip recipe: `bg-<tone>/10 border-<tone>/35 text-<tone
|
|
5
|
+
* The tinted-chip recipe: `bg-<tone>/10 border-<tone>/35 text-<tone>`, and the
|
|
6
|
+
* two quieter readings of it — `outline`, which drops the fill, and `tag`,
|
|
7
|
+
* which drops the fill and the voice with it.
|
|
6
8
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* `bg-transparent`
|
|
10
|
-
* utilities in the class string and
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* Every property that varies is emitted from exactly one place: one rim, one
|
|
10
|
+
* ink, one fill, one gutter, one type size, always. Emitting `bg-<tone>/10`
|
|
11
|
+
* from the tone map and then cancelling it with `bg-transparent` would leave
|
|
12
|
+
* two competing utilities in the class string, and `chipVariants` is exported —
|
|
13
|
+
* a caller who uses it without `cn` gets a raw string where the winner is
|
|
14
|
+
* decided by stylesheet order rather than by which utility was written last.
|
|
15
|
+
* `h-chip h-4` proves the point at the other end: `tailwind-merge` cannot even
|
|
16
|
+
* see that as a conflict, because `chip` is a token name and not a scale step.
|
|
17
|
+
* So nothing here cancels anything. What varies moves into `variants` or
|
|
18
|
+
* `compoundVariants` until only one of it is ever emitted.
|
|
19
|
+
*
|
|
20
|
+
* That is why `neutral` carries no rim of its own. The other six tones rim
|
|
21
|
+
* themselves at `/35` in all three variants, but the neutral line has two
|
|
22
|
+
* weights in this system: `--cue-border` is a box edge, and a chip is a box;
|
|
23
|
+
* `--cue-hair-strong` is the rule between things, and a tag is a mark on the
|
|
24
|
+
* page rather than a container. The rim is therefore a compound of tone and
|
|
25
|
+
* variant, exactly as the fill is.
|
|
13
26
|
*
|
|
14
27
|
* @example
|
|
15
28
|
* <span className={chipVariants({ tone: "danger", variant: "outline" })}>fault</span>
|
|
29
|
+
* @example
|
|
30
|
+
* <span className={chipVariants({ variant: "tag" })}>mcp</span>
|
|
16
31
|
*/
|
|
17
32
|
declare const chipVariants: (props?: ({
|
|
18
|
-
tone?: "
|
|
19
|
-
variant?: "outline" | "tinted" | null | undefined;
|
|
33
|
+
tone?: "danger" | "info" | "warn" | "accent" | "ok" | "busy" | "neutral" | null | undefined;
|
|
34
|
+
variant?: "outline" | "tinted" | "tag" | null | undefined;
|
|
20
35
|
interactive?: boolean | null | undefined;
|
|
21
36
|
} & ClassProp) | undefined) => string;
|
|
22
37
|
interface ChipProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof chipVariants> {
|
|
@@ -37,10 +52,21 @@ interface ChipProps extends React.HTMLAttributes<HTMLElement>, VariantProps<type
|
|
|
37
52
|
* plus `neutral` and `accent`, so a chip, a `StatusDot` and a `Meter` always
|
|
38
53
|
* agree on what "warn" looks like.
|
|
39
54
|
*
|
|
55
|
+
* `variant` sets how loudly it says it. `tinted` is the chip proper — a tone
|
|
56
|
+
* tint behind tone ink. `outline` drops the fill and keeps the voice, for a
|
|
57
|
+
* chip on an already-busy ground. `tag` drops both: a hairline rim, micro type
|
|
58
|
+
* and closed tracking, for the facts that sit *beside* a row's name — a kind, a
|
|
59
|
+
* lifecycle, a scope — where a row full of tinted chips would read as a row of
|
|
60
|
+
* buttons. All three keep `h-chip`, so a mixed row still has one baseline.
|
|
61
|
+
*
|
|
40
62
|
* @example
|
|
41
63
|
* <Chip tone="ok">online</Chip>
|
|
42
64
|
* @example
|
|
43
65
|
* <Chip tone="accent" variant="outline" interactive onClick={toggle}>dimmer</Chip>
|
|
66
|
+
* @example
|
|
67
|
+
* <Chip variant="tag">mcp</Chip>
|
|
68
|
+
* @example
|
|
69
|
+
* <Chip tone="danger" variant="tag">needs auth</Chip>
|
|
44
70
|
*/
|
|
45
71
|
declare const Chip: React.ForwardRefExoticComponent<ChipProps & React.RefAttributes<HTMLElement>>;
|
|
46
72
|
//#endregion
|
package/dist/primitives/chip.js
CHANGED
|
@@ -5,22 +5,37 @@ import * as React from "react";
|
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
//#region src/primitives/chip.tsx
|
|
7
7
|
/**
|
|
8
|
-
* The tinted-chip recipe: `bg-<tone>/10 border-<tone>/35 text-<tone
|
|
8
|
+
* The tinted-chip recipe: `bg-<tone>/10 border-<tone>/35 text-<tone>`, and the
|
|
9
|
+
* two quieter readings of it — `outline`, which drops the fill, and `tag`,
|
|
10
|
+
* which drops the fill and the voice with it.
|
|
9
11
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* `bg-transparent`
|
|
13
|
-
* utilities in the class string and
|
|
14
|
-
*
|
|
15
|
-
*
|
|
12
|
+
* Every property that varies is emitted from exactly one place: one rim, one
|
|
13
|
+
* ink, one fill, one gutter, one type size, always. Emitting `bg-<tone>/10`
|
|
14
|
+
* from the tone map and then cancelling it with `bg-transparent` would leave
|
|
15
|
+
* two competing utilities in the class string, and `chipVariants` is exported —
|
|
16
|
+
* a caller who uses it without `cn` gets a raw string where the winner is
|
|
17
|
+
* decided by stylesheet order rather than by which utility was written last.
|
|
18
|
+
* `h-chip h-4` proves the point at the other end: `tailwind-merge` cannot even
|
|
19
|
+
* see that as a conflict, because `chip` is a token name and not a scale step.
|
|
20
|
+
* So nothing here cancels anything. What varies moves into `variants` or
|
|
21
|
+
* `compoundVariants` until only one of it is ever emitted.
|
|
22
|
+
*
|
|
23
|
+
* That is why `neutral` carries no rim of its own. The other six tones rim
|
|
24
|
+
* themselves at `/35` in all three variants, but the neutral line has two
|
|
25
|
+
* weights in this system: `--cue-border` is a box edge, and a chip is a box;
|
|
26
|
+
* `--cue-hair-strong` is the rule between things, and a tag is a mark on the
|
|
27
|
+
* page rather than a container. The rim is therefore a compound of tone and
|
|
28
|
+
* variant, exactly as the fill is.
|
|
16
29
|
*
|
|
17
30
|
* @example
|
|
18
31
|
* <span className={chipVariants({ tone: "danger", variant: "outline" })}>fault</span>
|
|
32
|
+
* @example
|
|
33
|
+
* <span className={chipVariants({ variant: "tag" })}>mcp</span>
|
|
19
34
|
*/
|
|
20
|
-
const chipVariants = cva("inline-flex h-chip select-none items-center justify-center gap-(--cue-space-2) whitespace-nowrap rounded-(--radius-control) border
|
|
35
|
+
const chipVariants = cva("inline-flex h-chip select-none items-center justify-center gap-(--cue-space-2) whitespace-nowrap rounded-(--radius-control) border font-mono leading-none uppercase outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent", {
|
|
21
36
|
variants: {
|
|
22
37
|
tone: {
|
|
23
|
-
neutral: "
|
|
38
|
+
neutral: "text-fg-muted",
|
|
24
39
|
accent: "border-accent/35 text-accent",
|
|
25
40
|
ok: "border-ok/35 text-ok",
|
|
26
41
|
busy: "border-busy/35 text-busy",
|
|
@@ -29,8 +44,9 @@ const chipVariants = cva("inline-flex h-chip select-none items-center justify-ce
|
|
|
29
44
|
info: "border-info/35 text-info"
|
|
30
45
|
},
|
|
31
46
|
variant: {
|
|
32
|
-
tinted: "",
|
|
33
|
-
outline: "bg-transparent"
|
|
47
|
+
tinted: "px-(--cue-space-3) text-(length:--cue-text-label) tracking-[0.15em]",
|
|
48
|
+
outline: "bg-transparent px-(--cue-space-3) text-(length:--cue-text-label) tracking-[0.15em]",
|
|
49
|
+
tag: "bg-transparent px-(--cue-space-2) text-(length:--cue-text-micro) tracking-[0.06em]"
|
|
34
50
|
},
|
|
35
51
|
interactive: {
|
|
36
52
|
true: "cursor-pointer disabled:pointer-events-none disabled:opacity-40",
|
|
@@ -38,6 +54,16 @@ const chipVariants = cva("inline-flex h-chip select-none items-center justify-ce
|
|
|
38
54
|
}
|
|
39
55
|
},
|
|
40
56
|
compoundVariants: [
|
|
57
|
+
{
|
|
58
|
+
tone: "neutral",
|
|
59
|
+
variant: ["tinted", "outline"],
|
|
60
|
+
class: "border-border"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
tone: "neutral",
|
|
64
|
+
variant: "tag",
|
|
65
|
+
class: "border-(--cue-hair-strong)"
|
|
66
|
+
},
|
|
41
67
|
{
|
|
42
68
|
tone: "neutral",
|
|
43
69
|
variant: "tinted",
|
|
@@ -75,38 +101,87 @@ const chipVariants = cva("inline-flex h-chip select-none items-center justify-ce
|
|
|
75
101
|
},
|
|
76
102
|
{
|
|
77
103
|
tone: "neutral",
|
|
104
|
+
variant: ["tinted", "outline"],
|
|
78
105
|
interactive: true,
|
|
79
106
|
class: "hover:border-border-strong hover:text-fg"
|
|
80
107
|
},
|
|
108
|
+
{
|
|
109
|
+
tone: "neutral",
|
|
110
|
+
variant: "tag",
|
|
111
|
+
interactive: true,
|
|
112
|
+
class: "hover:border-border hover:text-fg"
|
|
113
|
+
},
|
|
81
114
|
{
|
|
82
115
|
tone: "accent",
|
|
116
|
+
variant: ["tinted", "outline"],
|
|
83
117
|
interactive: true,
|
|
84
118
|
class: "hover:border-accent/60 hover:bg-accent/20"
|
|
85
119
|
},
|
|
120
|
+
{
|
|
121
|
+
tone: "accent",
|
|
122
|
+
variant: "tag",
|
|
123
|
+
interactive: true,
|
|
124
|
+
class: "hover:border-accent/60"
|
|
125
|
+
},
|
|
86
126
|
{
|
|
87
127
|
tone: "ok",
|
|
128
|
+
variant: ["tinted", "outline"],
|
|
88
129
|
interactive: true,
|
|
89
130
|
class: "hover:border-ok/60 hover:bg-ok/20"
|
|
90
131
|
},
|
|
132
|
+
{
|
|
133
|
+
tone: "ok",
|
|
134
|
+
variant: "tag",
|
|
135
|
+
interactive: true,
|
|
136
|
+
class: "hover:border-ok/60"
|
|
137
|
+
},
|
|
91
138
|
{
|
|
92
139
|
tone: "busy",
|
|
140
|
+
variant: ["tinted", "outline"],
|
|
93
141
|
interactive: true,
|
|
94
142
|
class: "hover:border-busy/60 hover:bg-busy/20"
|
|
95
143
|
},
|
|
144
|
+
{
|
|
145
|
+
tone: "busy",
|
|
146
|
+
variant: "tag",
|
|
147
|
+
interactive: true,
|
|
148
|
+
class: "hover:border-busy/60"
|
|
149
|
+
},
|
|
96
150
|
{
|
|
97
151
|
tone: "warn",
|
|
152
|
+
variant: ["tinted", "outline"],
|
|
98
153
|
interactive: true,
|
|
99
154
|
class: "hover:border-warn/60 hover:bg-warn/20"
|
|
100
155
|
},
|
|
156
|
+
{
|
|
157
|
+
tone: "warn",
|
|
158
|
+
variant: "tag",
|
|
159
|
+
interactive: true,
|
|
160
|
+
class: "hover:border-warn/60"
|
|
161
|
+
},
|
|
101
162
|
{
|
|
102
163
|
tone: "danger",
|
|
164
|
+
variant: ["tinted", "outline"],
|
|
103
165
|
interactive: true,
|
|
104
166
|
class: "hover:border-danger/60 hover:bg-danger/20"
|
|
105
167
|
},
|
|
168
|
+
{
|
|
169
|
+
tone: "danger",
|
|
170
|
+
variant: "tag",
|
|
171
|
+
interactive: true,
|
|
172
|
+
class: "hover:border-danger/60"
|
|
173
|
+
},
|
|
106
174
|
{
|
|
107
175
|
tone: "info",
|
|
176
|
+
variant: ["tinted", "outline"],
|
|
108
177
|
interactive: true,
|
|
109
178
|
class: "hover:border-info/60 hover:bg-info/20"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
tone: "info",
|
|
182
|
+
variant: "tag",
|
|
183
|
+
interactive: true,
|
|
184
|
+
class: "hover:border-info/60"
|
|
110
185
|
}
|
|
111
186
|
],
|
|
112
187
|
defaultVariants: {
|
|
@@ -122,10 +197,21 @@ const chipVariants = cva("inline-flex h-chip select-none items-center justify-ce
|
|
|
122
197
|
* plus `neutral` and `accent`, so a chip, a `StatusDot` and a `Meter` always
|
|
123
198
|
* agree on what "warn" looks like.
|
|
124
199
|
*
|
|
200
|
+
* `variant` sets how loudly it says it. `tinted` is the chip proper — a tone
|
|
201
|
+
* tint behind tone ink. `outline` drops the fill and keeps the voice, for a
|
|
202
|
+
* chip on an already-busy ground. `tag` drops both: a hairline rim, micro type
|
|
203
|
+
* and closed tracking, for the facts that sit *beside* a row's name — a kind, a
|
|
204
|
+
* lifecycle, a scope — where a row full of tinted chips would read as a row of
|
|
205
|
+
* buttons. All three keep `h-chip`, so a mixed row still has one baseline.
|
|
206
|
+
*
|
|
125
207
|
* @example
|
|
126
208
|
* <Chip tone="ok">online</Chip>
|
|
127
209
|
* @example
|
|
128
210
|
* <Chip tone="accent" variant="outline" interactive onClick={toggle}>dimmer</Chip>
|
|
211
|
+
* @example
|
|
212
|
+
* <Chip variant="tag">mcp</Chip>
|
|
213
|
+
* @example
|
|
214
|
+
* <Chip tone="danger" variant="tag">needs auth</Chip>
|
|
129
215
|
*/
|
|
130
216
|
const Chip = React.forwardRef(function Chip({ className, tone, variant, interactive = false, disabled, children, ...elementProps }, ref) {
|
|
131
217
|
const classes = cn(chipVariants({
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import "react";
|
|
2
|
+
//#region src/system/agent-skin.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Which value-set paints the elements family inside this subtree.
|
|
5
|
+
*
|
|
6
|
+
* - `cue` — the default, and the one that needs no stylesheet: the vendored
|
|
7
|
+
* elements were rewritten onto `--cue-*` tokens, so they are already this
|
|
8
|
+
* system's components.
|
|
9
|
+
* - `aui` — supersede mode. `@cueplusplus/ui/elements.css` re-points those same
|
|
10
|
+
* tokens to assistant-ui's own values under `[data-cue-skin="aui"]`, so one
|
|
11
|
+
* DOM paints two ways with no branching in any component.
|
|
12
|
+
*/
|
|
13
|
+
type AgentSkin = "cue" | "aui";
|
|
14
|
+
/**
|
|
15
|
+
* How far the supersede island goes: colour only, or colour and geometry.
|
|
16
|
+
*
|
|
17
|
+
* - `cue-metrics` — the default. Colour is re-pointed; cue's type scale, radius
|
|
18
|
+
* ladder and density ladder still apply, so an island tracks the density of
|
|
19
|
+
* the console around it.
|
|
20
|
+
* - `upstream` — assistant-ui's metrics too: their radii, their literal 13.5 /
|
|
21
|
+
* 12 / 11 px type, `--spacing` pinned at Tailwind's default. Density stops at
|
|
22
|
+
* the island edge, which is the point — this is the mode for showing an
|
|
23
|
+
* element exactly as its authors drew it.
|
|
24
|
+
*/
|
|
25
|
+
type AgentFidelity = "upstream" | "cue-metrics";
|
|
26
|
+
//#endregion
|
|
27
|
+
export { AgentFidelity, AgentSkin };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
//#region src/system/agent-skin.ts
|
|
4
|
+
/**
|
|
5
|
+
* Nearest ambient skin island. `null` means there is none, which is the case
|
|
6
|
+
* for almost every tree — and is why the portal stamp *removes* these two
|
|
7
|
+
* attributes rather than defaulting them.
|
|
8
|
+
*
|
|
9
|
+
* It lives in `system/` rather than beside `AgentSurface` for one reason: the
|
|
10
|
+
* portal stamp reads its axes from React context, never from the DOM (a portal
|
|
11
|
+
* is mounted outside its owner's subtree, so DOM discovery would read the
|
|
12
|
+
* body's values). `system/portal.tsx` is in the core barrel's import graph and
|
|
13
|
+
* `elements/` is behind an optional peer, so the context has to sit on the side
|
|
14
|
+
* that both can reach.
|
|
15
|
+
*
|
|
16
|
+
* @internal Consumers use `<AgentSurface>` from `@cueplusplus/ui/elements`.
|
|
17
|
+
*/
|
|
18
|
+
const AgentSkinContext = React.createContext(null);
|
|
19
|
+
//#endregion
|
|
20
|
+
export { AgentSkinContext };
|
package/dist/system/portal.d.ts
CHANGED
|
@@ -6,7 +6,9 @@ import * as React from "react";
|
|
|
6
6
|
*
|
|
7
7
|
* Returns a `container` element appended to `document.body` and stamped with
|
|
8
8
|
* `data-theme` / `data-density` / `data-font` / `data-mode` (plus
|
|
9
|
-
* `--cue-font-scale`) copied from the nearest provider and density island
|
|
9
|
+
* `--cue-font-scale`) copied from the nearest provider and density island, and
|
|
10
|
+
* with `data-cue-skin` / `data-cue-fidelity` when the caller sits inside an
|
|
11
|
+
* `AgentSurface` island. The container is
|
|
10
12
|
* `display: contents`, so it changes no layout and creates no containing block —
|
|
11
13
|
* fixed-position overlay content behaves exactly as if it were a direct child of
|
|
12
14
|
* `<body>`.
|
|
@@ -38,8 +40,8 @@ interface CuePortalFrameProps {
|
|
|
38
40
|
* chosen (a third-party overlay, or content already portaled by something else).
|
|
39
41
|
*
|
|
40
42
|
* Wraps `children` in a `display: contents` element carrying the same
|
|
41
|
-
* `data-theme` / `data-density` / `data-font` / `data-mode`
|
|
42
|
-
* `--cue-font-scale` as {@link useCuePortalProps}. Prefer the hook — a stamped container costs one
|
|
43
|
+
* `data-theme` / `data-density` / `data-font` / `data-mode` / `data-cue-skin` /
|
|
44
|
+
* `data-cue-fidelity` stamp and `--cue-font-scale` as {@link useCuePortalProps}. Prefer the hook — a stamped container costs one
|
|
43
45
|
* element per overlay instead of one per render tree — and reach for this only
|
|
44
46
|
* when the container prop is not available.
|
|
45
47
|
*
|
package/dist/system/portal.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
|
|
3
|
+
import { AgentSkinContext } from "./agent-skin.js";
|
|
3
4
|
import { DensityContext } from "./density.js";
|
|
4
5
|
import { FontFamiliesContext, FontScaleContext, ThemeContext } from "./theme-provider.js";
|
|
5
6
|
import * as React from "react";
|
|
@@ -25,13 +26,16 @@ function usePortalStamp() {
|
|
|
25
26
|
const island = React.useContext(DensityContext);
|
|
26
27
|
const fontScale = React.useContext(FontScaleContext);
|
|
27
28
|
const fontFamilies = React.useContext(FontFamiliesContext);
|
|
29
|
+
const skin = React.useContext(AgentSkinContext);
|
|
28
30
|
return {
|
|
29
31
|
theme: theme?.theme ?? DEFAULT_THEME,
|
|
30
32
|
density: island ?? theme?.density ?? "compact",
|
|
31
33
|
mode: theme?.mode ?? DEFAULT_MODE,
|
|
32
34
|
font: theme?.font ?? DEFAULT_FONT,
|
|
33
35
|
fontScale,
|
|
34
|
-
fontFamilies
|
|
36
|
+
fontFamilies,
|
|
37
|
+
skin: skin?.skin ?? null,
|
|
38
|
+
fidelity: skin?.fidelity ?? null
|
|
35
39
|
};
|
|
36
40
|
}
|
|
37
41
|
/**
|
|
@@ -40,7 +44,9 @@ function usePortalStamp() {
|
|
|
40
44
|
*
|
|
41
45
|
* Returns a `container` element appended to `document.body` and stamped with
|
|
42
46
|
* `data-theme` / `data-density` / `data-font` / `data-mode` (plus
|
|
43
|
-
* `--cue-font-scale`) copied from the nearest provider and density island
|
|
47
|
+
* `--cue-font-scale`) copied from the nearest provider and density island, and
|
|
48
|
+
* with `data-cue-skin` / `data-cue-fidelity` when the caller sits inside an
|
|
49
|
+
* `AgentSurface` island. The container is
|
|
44
50
|
* `display: contents`, so it changes no layout and creates no containing block —
|
|
45
51
|
* fixed-position overlay content behaves exactly as if it were a direct child of
|
|
46
52
|
* `<body>`.
|
|
@@ -85,7 +91,9 @@ function useCuePortalProps() {
|
|
|
85
91
|
stamp.mode,
|
|
86
92
|
stamp.fontScale,
|
|
87
93
|
stamp.fontFamilies?.sans,
|
|
88
|
-
stamp.fontFamilies?.mono
|
|
94
|
+
stamp.fontFamilies?.mono,
|
|
95
|
+
stamp.skin,
|
|
96
|
+
stamp.fidelity
|
|
89
97
|
]);
|
|
90
98
|
return React.useMemo(() => container === null ? {} : { container }, [container]);
|
|
91
99
|
}
|
|
@@ -95,6 +103,10 @@ function applyStamp(element, stamp) {
|
|
|
95
103
|
element.setAttribute("data-density", stamp.density);
|
|
96
104
|
element.setAttribute("data-font", stamp.font);
|
|
97
105
|
element.setAttribute("data-mode", stamp.mode);
|
|
106
|
+
if (stamp.skin === null) element.removeAttribute("data-cue-skin");
|
|
107
|
+
else element.setAttribute("data-cue-skin", stamp.skin);
|
|
108
|
+
if (stamp.fidelity === null) element.removeAttribute("data-cue-fidelity");
|
|
109
|
+
else element.setAttribute("data-cue-fidelity", stamp.fidelity);
|
|
98
110
|
if (stamp.fontScale === null) element.style.removeProperty(FONT_SCALE_PROPERTY);
|
|
99
111
|
else element.style.setProperty(FONT_SCALE_PROPERTY, String(stamp.fontScale));
|
|
100
112
|
setOptionalProperty(element, FONT_SANS_PROPERTY, stamp.fontFamilies?.sans);
|
|
@@ -109,8 +121,8 @@ function setOptionalProperty(element, property, value) {
|
|
|
109
121
|
* chosen (a third-party overlay, or content already portaled by something else).
|
|
110
122
|
*
|
|
111
123
|
* Wraps `children` in a `display: contents` element carrying the same
|
|
112
|
-
* `data-theme` / `data-density` / `data-font` / `data-mode`
|
|
113
|
-
* `--cue-font-scale` as {@link useCuePortalProps}. Prefer the hook — a stamped container costs one
|
|
124
|
+
* `data-theme` / `data-density` / `data-font` / `data-mode` / `data-cue-skin` /
|
|
125
|
+
* `data-cue-fidelity` stamp and `--cue-font-scale` as {@link useCuePortalProps}. Prefer the hook — a stamped container costs one
|
|
114
126
|
* element per overlay instead of one per render tree — and reach for this only
|
|
115
127
|
* when the container prop is not available.
|
|
116
128
|
*
|
|
@@ -132,6 +144,8 @@ function CuePortalFrame({ children, className, style }) {
|
|
|
132
144
|
"data-density": stamp.density,
|
|
133
145
|
"data-font": stamp.font,
|
|
134
146
|
"data-mode": stamp.mode,
|
|
147
|
+
"data-cue-skin": stamp.skin ?? void 0,
|
|
148
|
+
"data-cue-fidelity": stamp.fidelity ?? void 0,
|
|
135
149
|
className,
|
|
136
150
|
style: frameStyle,
|
|
137
151
|
children
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
-
import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
|
|
3
|
+
import { useIsomorphicInsertionEffect, useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
|
|
4
4
|
import { DEFAULT_DENSITY as DEFAULT_DENSITY$1, DENSITY_LEVELS, DensityContext } from "./density.js";
|
|
5
5
|
import { DEFAULT_STORAGE_KEY } from "./prepaint.js";
|
|
6
6
|
import * as React from "react";
|
|
@@ -51,6 +51,30 @@ function readPreferences(storageKey) {
|
|
|
51
51
|
return {};
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
+
/** Resolve `"system"` the way {@link prepaintScript} resolves it: against the media query. */
|
|
55
|
+
function resolveMode(mode) {
|
|
56
|
+
if (mode !== "system") return mode;
|
|
57
|
+
if (typeof matchMedia !== "function") return DEFAULT_RESOLVED_MODE;
|
|
58
|
+
return matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The stamp {@link prepaintScript} put on `<html>`, recomputed from the storage
|
|
62
|
+
* it read.
|
|
63
|
+
*
|
|
64
|
+
* Not read back off the element, because by the time anything here runs it is
|
|
65
|
+
* no longer there — see the `<html>` stamp below. Same key, same validation,
|
|
66
|
+
* same fallbacks, so this returns what the script decided rather than a second
|
|
67
|
+
* opinion about it.
|
|
68
|
+
*/
|
|
69
|
+
function prepaintStamp(storageKey, fallback) {
|
|
70
|
+
const stored = readPreferences(storageKey);
|
|
71
|
+
return {
|
|
72
|
+
theme: typeof stored.theme === "string" && stored.theme.length > 0 ? stored.theme : fallback.theme,
|
|
73
|
+
density: isOneOf(DENSITY_LEVELS, stored.density) ? stored.density : fallback.density,
|
|
74
|
+
font: isOneOf(FONT_NAMES, stored.font) ? stored.font : fallback.font,
|
|
75
|
+
mode: resolveMode(isOneOf(MODES$1, stored.mode) ? stored.mode : fallback.mode)
|
|
76
|
+
};
|
|
77
|
+
}
|
|
54
78
|
function writePreferences(storageKey, preferences) {
|
|
55
79
|
if (typeof localStorage === "undefined") return;
|
|
56
80
|
try {
|
|
@@ -199,9 +223,20 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
|
|
|
199
223
|
/** Nested providers hand the axis straight up: one document, one pairing. */
|
|
200
224
|
const setFont = isRoot ? rootSetFont : ambient.setFont;
|
|
201
225
|
const originalStamp = React.useRef(null);
|
|
202
|
-
|
|
203
|
-
if (!isRoot ||
|
|
226
|
+
useIsomorphicInsertionEffect(() => {
|
|
227
|
+
if (!isRoot || typeof document === "undefined") return;
|
|
204
228
|
const root = document.documentElement;
|
|
229
|
+
const next = restored || !persistPreferences ? {
|
|
230
|
+
theme,
|
|
231
|
+
density,
|
|
232
|
+
font,
|
|
233
|
+
mode
|
|
234
|
+
} : prepaintStamp(storageKey, {
|
|
235
|
+
theme: themeProp,
|
|
236
|
+
density: densityProp,
|
|
237
|
+
font: fontProp,
|
|
238
|
+
mode: modeProp
|
|
239
|
+
});
|
|
205
240
|
originalStamp.current ??= {
|
|
206
241
|
theme: root.getAttribute("data-theme"),
|
|
207
242
|
density: root.getAttribute("data-density"),
|
|
@@ -209,18 +244,28 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
|
|
|
209
244
|
mode: root.getAttribute("data-mode"),
|
|
210
245
|
colorScheme: root.style.colorScheme
|
|
211
246
|
};
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
247
|
+
const write = (name, value) => {
|
|
248
|
+
if (root.getAttribute(name) !== value) root.setAttribute(name, value);
|
|
249
|
+
};
|
|
250
|
+
write("data-theme", next.theme);
|
|
251
|
+
write("data-density", next.density);
|
|
252
|
+
write("data-font", next.font);
|
|
253
|
+
write("data-mode", next.mode);
|
|
254
|
+
const scheme = next.mode === "system" ? "light dark" : next.mode;
|
|
255
|
+
if (root.style.colorScheme !== scheme) root.style.colorScheme = scheme;
|
|
217
256
|
}, [
|
|
218
257
|
isRoot,
|
|
219
258
|
restored,
|
|
259
|
+
persistPreferences,
|
|
260
|
+
storageKey,
|
|
220
261
|
theme,
|
|
221
262
|
density,
|
|
222
263
|
font,
|
|
223
|
-
mode
|
|
264
|
+
mode,
|
|
265
|
+
themeProp,
|
|
266
|
+
densityProp,
|
|
267
|
+
fontProp,
|
|
268
|
+
modeProp
|
|
224
269
|
]);
|
|
225
270
|
React.useEffect(() => () => {
|
|
226
271
|
const original = originalStamp.current;
|
|
@@ -11,6 +11,15 @@ type ControlSize = "sm" | "md" | "lg";
|
|
|
11
11
|
* per-rung variants (`density-ultra-compact:` … `density-ultra-large:`) instead.
|
|
12
12
|
*
|
|
13
13
|
* @returns The applicable density level.
|
|
14
|
+
* @example
|
|
15
|
+
* const density = useDensity();
|
|
16
|
+
* const rowHeight = useControlHeight("sm");
|
|
17
|
+
* // Shorter rows mean more of them on screen, so the reserve moves with the level.
|
|
18
|
+
* useVirtualizer({
|
|
19
|
+
* count: rows.length,
|
|
20
|
+
* estimateSize: () => rowHeight,
|
|
21
|
+
* overscan: density === "ultra-compact" ? 12 : 6,
|
|
22
|
+
* });
|
|
14
23
|
*/
|
|
15
24
|
declare function useDensity(): Density;
|
|
16
25
|
/**
|
|
@@ -63,6 +63,15 @@ function measureControlHeight(density, size) {
|
|
|
63
63
|
* per-rung variants (`density-ultra-compact:` … `density-ultra-large:`) instead.
|
|
64
64
|
*
|
|
65
65
|
* @returns The applicable density level.
|
|
66
|
+
* @example
|
|
67
|
+
* const density = useDensity();
|
|
68
|
+
* const rowHeight = useControlHeight("sm");
|
|
69
|
+
* // Shorter rows mean more of them on screen, so the reserve moves with the level.
|
|
70
|
+
* useVirtualizer({
|
|
71
|
+
* count: rows.length,
|
|
72
|
+
* estimateSize: () => rowHeight,
|
|
73
|
+
* overscan: density === "ultra-compact" ? 12 : 6,
|
|
74
|
+
* });
|
|
66
75
|
*/
|
|
67
76
|
function useDensity() {
|
|
68
77
|
return React.useContext(DensityContext) ?? "compact";
|
|
@@ -11,5 +11,23 @@ import * as React from "react";
|
|
|
11
11
|
* (never-invoked) passive variant instead.
|
|
12
12
|
*/
|
|
13
13
|
const useIsomorphicLayoutEffect = typeof document === "undefined" ? React.useEffect : React.useLayoutEffect;
|
|
14
|
+
/**
|
|
15
|
+
* `useInsertionEffect` in the browser, `useEffect` on the server.
|
|
16
|
+
*
|
|
17
|
+
* One step earlier than the layout variant above, and the difference is the
|
|
18
|
+
* whole reason it exists. React runs **every** insertion effect in the tree
|
|
19
|
+
* during the mutation phase, before **any** layout effect runs; layout effects
|
|
20
|
+
* then run child-first, so a provider near the root is the last thing in the
|
|
21
|
+
* commit to get one. Anything a descendant's layout effect measures — Base UI
|
|
22
|
+
* calls `getComputedStyle` in several — is measured against whatever the
|
|
23
|
+
* document element is wearing at that moment.
|
|
24
|
+
*
|
|
25
|
+
* That matters exactly once: putting back what React 19 takes off `<html>` when
|
|
26
|
+
* it hydrates the document element. See the `<html>` stamp in
|
|
27
|
+
* `theme-provider.tsx`.
|
|
28
|
+
*
|
|
29
|
+
* Write only. An insertion effect must not read layout or schedule state.
|
|
30
|
+
*/
|
|
31
|
+
const useIsomorphicInsertionEffect = typeof document === "undefined" ? React.useEffect : React.useInsertionEffect;
|
|
14
32
|
//#endregion
|
|
15
|
-
export { useIsomorphicLayoutEffect };
|
|
33
|
+
export { useIsomorphicInsertionEffect, useIsomorphicLayoutEffect };
|
|
@@ -4,7 +4,7 @@ import { Density, ThemeName } from "@cueplusplus/tokens";
|
|
|
4
4
|
* The colour tokens every theme block declares, in the order the tokens build
|
|
5
5
|
* emits them. A generated theme is complete exactly when it covers this list.
|
|
6
6
|
*/
|
|
7
|
-
declare const THEME_COLOR_TOKENS: readonly ["bg", "sunken", "surface-1", "surface-2", "surface-3", "fg", "fg-muted", "fg-subtle", "border", "border-strong", "border-overlay", "accent", "accent-hover", "accent-fg", "ok", "busy", "warn", "danger", "info", "selection", "focus", "data-ground", "scrim"];
|
|
7
|
+
declare const THEME_COLOR_TOKENS: readonly ["bg", "sunken", "surface-1", "surface-2", "surface-3", "fg", "fg-muted", "fg-subtle", "border", "border-strong", "border-overlay", "accent", "accent-hover", "accent-fg", "ok", "busy", "warn", "warn-fg", "danger", "danger-fg", "info", "stream", "selection", "focus", "data-ground", "scrim"];
|
|
8
8
|
/** One of the colour tokens a theme block owns. */
|
|
9
9
|
type ThemeColorToken = (typeof THEME_COLOR_TOKENS)[number];
|
|
10
10
|
//#endregion
|