@cueplusplus/ui 0.3.0 → 0.5.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 +2229 -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/app-shell.d.ts +52 -2
- package/dist/chrome/app-shell.js +80 -8
- package/dist/chrome/index.d.ts +2 -2
- 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 +37 -2
- 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/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 +6 -4
- package/dist/index.js +2 -1
- 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 +71 -8
- 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 +99 -7
- 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/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/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/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/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/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/job-progress.json +96 -0
- package/manifest/components/launcher-bubble.json +105 -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/node-card.json +1 -1
- package/manifest/components/node-handle.json +1 -1
- package/manifest/components/number-ticker.json +61 -0
- package/manifest/components/onboarding.json +84 -0
- package/manifest/components/otp-field.json +7 -7
- 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/search-input.json +7 -7
- package/manifest/components/segmented-control.json +21 -21
- 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-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/tail-status.json +109 -0
- package/manifest/components/terminal-block.json +91 -0
- 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/timeline.json +1 -1
- package/manifest/components/todo-list.json +69 -0
- package/manifest/components/toggle-group.json +7 -7
- 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 +2670 -33
- package/manifest/tokens.json +22 -1
- package/package.json +46 -4
package/dist/theming/_presets.js
CHANGED
|
@@ -21,8 +21,11 @@ const THEME_COLOR_TOKENS = [
|
|
|
21
21
|
"ok",
|
|
22
22
|
"busy",
|
|
23
23
|
"warn",
|
|
24
|
+
"warn-fg",
|
|
24
25
|
"danger",
|
|
26
|
+
"danger-fg",
|
|
25
27
|
"info",
|
|
28
|
+
"stream",
|
|
26
29
|
"selection",
|
|
27
30
|
"focus",
|
|
28
31
|
"data-ground",
|
|
@@ -46,11 +49,14 @@ const THEME_PRESETS = {
|
|
|
46
49
|
"accent": "#ffffff",
|
|
47
50
|
"accent-hover": "rgba(255,255,255,0.85)",
|
|
48
51
|
"accent-fg": "#0a0a0a",
|
|
49
|
-
"ok": "
|
|
50
|
-
"busy": "
|
|
51
|
-
"warn": "
|
|
52
|
+
"ok": "oklch(0.72 0.17 149)",
|
|
53
|
+
"busy": "oklch(0.78 0.13 220)",
|
|
54
|
+
"warn": "oklch(0.8 0.17 75)",
|
|
55
|
+
"warn-fg": "#000000",
|
|
52
56
|
"danger": "#ff5f57",
|
|
53
|
-
"
|
|
57
|
+
"danger-fg": "#000000",
|
|
58
|
+
"info": "oklch(0.75 0.12 252)",
|
|
59
|
+
"stream": "oklch(0.707 0.165 254.624)",
|
|
54
60
|
"selection": "rgba(255,255,255,0.20)",
|
|
55
61
|
"focus": "#ffffff",
|
|
56
62
|
"data-ground": "#000000",
|
|
@@ -71,11 +77,14 @@ const THEME_PRESETS = {
|
|
|
71
77
|
"accent": "#0a0a0a",
|
|
72
78
|
"accent-hover": "rgba(0,0,0,0.85)",
|
|
73
79
|
"accent-fg": "#fcfcfc",
|
|
74
|
-
"ok": "
|
|
75
|
-
"busy": "
|
|
76
|
-
"warn": "
|
|
80
|
+
"ok": "oklch(0.53 0.14 149)",
|
|
81
|
+
"busy": "oklch(0.54 0.1 225)",
|
|
82
|
+
"warn": "oklch(0.55 0.115 70)",
|
|
83
|
+
"warn-fg": "#fcfcfc",
|
|
77
84
|
"danger": "#d03030",
|
|
78
|
-
"
|
|
85
|
+
"danger-fg": "#fcfcfc",
|
|
86
|
+
"info": "oklch(0.55 0.16 258)",
|
|
87
|
+
"stream": "oklch(0.55 0.21 259.815)",
|
|
79
88
|
"selection": "rgba(0,0,0,0.20)",
|
|
80
89
|
"focus": "#0a0a0a",
|
|
81
90
|
"data-ground": "#000000",
|
|
@@ -102,8 +111,11 @@ const THEME_PRESETS = {
|
|
|
102
111
|
"ok": "hsl(142 76% 50%)",
|
|
103
112
|
"busy": "hsl(180 100% 50%)",
|
|
104
113
|
"warn": "hsl(38 100% 55%)",
|
|
114
|
+
"warn-fg": "hsl(240 12% 4%)",
|
|
105
115
|
"danger": "hsl(0 72% 51%)",
|
|
116
|
+
"danger-fg": "#ffffff",
|
|
106
117
|
"info": "hsl(180 100% 50%)",
|
|
118
|
+
"stream": "hsl(190 100% 55%)",
|
|
107
119
|
"selection": "hsl(180 100% 50% / 0.25)",
|
|
108
120
|
"focus": "hsl(180 100% 50%)",
|
|
109
121
|
"data-ground": "#000000",
|
|
@@ -127,8 +139,11 @@ const THEME_PRESETS = {
|
|
|
127
139
|
"ok": "hsl(142 71% 45%)",
|
|
128
140
|
"busy": "hsl(187 100% 33%)",
|
|
129
141
|
"warn": "hsl(38 92% 50%)",
|
|
142
|
+
"warn-fg": "hsl(240 6% 10%)",
|
|
130
143
|
"danger": "hsl(0 72% 45%)",
|
|
144
|
+
"danger-fg": "hsl(0 0% 99%)",
|
|
131
145
|
"info": "hsl(187 100% 33%)",
|
|
146
|
+
"stream": "hsl(196 100% 32%)",
|
|
132
147
|
"selection": "hsl(187 100% 33% / 0.18)",
|
|
133
148
|
"focus": "hsl(240 6% 10%)",
|
|
134
149
|
"data-ground": "#000000",
|
|
@@ -155,8 +170,11 @@ const THEME_PRESETS = {
|
|
|
155
170
|
"ok": "#00cc66",
|
|
156
171
|
"busy": "#ff6a2e",
|
|
157
172
|
"warn": "#ff9500",
|
|
173
|
+
"warn-fg": "#141414",
|
|
158
174
|
"danger": "#ff3333",
|
|
175
|
+
"danger-fg": "#141414",
|
|
159
176
|
"info": "#3b82f6",
|
|
177
|
+
"stream": "#5b9dff",
|
|
160
178
|
"selection": "rgba(255,106,46,0.16)",
|
|
161
179
|
"focus": "#ff6a2e",
|
|
162
180
|
"data-ground": "#000000",
|
|
@@ -180,8 +198,11 @@ const THEME_PRESETS = {
|
|
|
180
198
|
"ok": "#009e50",
|
|
181
199
|
"busy": "#d9541a",
|
|
182
200
|
"warn": "#cc7700",
|
|
201
|
+
"warn-fg": "#1f1f1f",
|
|
183
202
|
"danger": "#d42020",
|
|
203
|
+
"danger-fg": "#f5f5f5",
|
|
184
204
|
"info": "#1a6fd4",
|
|
205
|
+
"stream": "#1560c4",
|
|
185
206
|
"selection": "rgba(217,84,26,0.18)",
|
|
186
207
|
"focus": "#d9541a",
|
|
187
208
|
"data-ground": "#000000",
|
|
@@ -208,8 +229,11 @@ const THEME_PRESETS = {
|
|
|
208
229
|
"ok": "hsl(166 79% 38%)",
|
|
209
230
|
"busy": "hsl(27 94% 53%)",
|
|
210
231
|
"warn": "hsl(27 88% 52%)",
|
|
232
|
+
"warn-fg": "hsl(0 0% 7%)",
|
|
211
233
|
"danger": "hsl(0 87% 62%)",
|
|
234
|
+
"danger-fg": "hsl(0 0% 7%)",
|
|
212
235
|
"info": "hsl(209 89% 54%)",
|
|
236
|
+
"stream": "hsl(206 92% 66%)",
|
|
213
237
|
"selection": "hsl(212 63% 23%)",
|
|
214
238
|
"focus": "hsl(27 94% 53%)",
|
|
215
239
|
"data-ground": "#000000",
|
|
@@ -233,8 +257,11 @@ const THEME_PRESETS = {
|
|
|
233
257
|
"ok": "#0e8c70",
|
|
234
258
|
"busy": "#e06510",
|
|
235
259
|
"warn": "#c05e10",
|
|
260
|
+
"warn-fg": "#000000",
|
|
236
261
|
"danger": "#cc2f2f",
|
|
262
|
+
"danger-fg": "#f5f5f5",
|
|
237
263
|
"info": "#1a75d2",
|
|
264
|
+
"stream": "hsl(212 78% 42%)",
|
|
238
265
|
"selection": "#cce0ff",
|
|
239
266
|
"focus": "#e06510",
|
|
240
267
|
"data-ground": "#000000",
|
|
@@ -261,8 +288,11 @@ const THEME_PRESETS = {
|
|
|
261
288
|
"ok": "hsl(142 76% 36%)",
|
|
262
289
|
"busy": "hsl(38 92% 50%)",
|
|
263
290
|
"warn": "hsl(38 92% 50%)",
|
|
291
|
+
"warn-fg": "hsl(222 47% 4%)",
|
|
264
292
|
"danger": "hsl(0 72% 51%)",
|
|
293
|
+
"danger-fg": "hsl(0 0% 98%)",
|
|
265
294
|
"info": "hsl(221 83% 62%)",
|
|
295
|
+
"stream": "hsl(217 91% 68%)",
|
|
266
296
|
"selection": "hsl(27 94% 53% / 0.2)",
|
|
267
297
|
"focus": "hsl(27 94% 53%)",
|
|
268
298
|
"data-ground": "#000000",
|
|
@@ -286,8 +316,11 @@ const THEME_PRESETS = {
|
|
|
286
316
|
"ok": "hsl(142 70% 30%)",
|
|
287
317
|
"busy": "hsl(38 92% 40%)",
|
|
288
318
|
"warn": "hsl(38 92% 40%)",
|
|
319
|
+
"warn-fg": "hsl(222 30% 12%)",
|
|
289
320
|
"danger": "#c62828",
|
|
321
|
+
"danger-fg": "hsl(222 30% 97%)",
|
|
290
322
|
"info": "#2f6fd0",
|
|
323
|
+
"stream": "hsl(221 78% 45%)",
|
|
291
324
|
"selection": "rgba(224,101,16,0.15)",
|
|
292
325
|
"focus": "#e06510",
|
|
293
326
|
"data-ground": "#000000",
|
|
@@ -314,8 +347,11 @@ const THEME_PRESETS = {
|
|
|
314
347
|
"ok": "#6BBF95",
|
|
315
348
|
"busy": "#D98E4B",
|
|
316
349
|
"warn": "#D98E4B",
|
|
350
|
+
"warn-fg": "#08100D",
|
|
317
351
|
"danger": "#D9694B",
|
|
352
|
+
"danger-fg": "#08100D",
|
|
318
353
|
"info": "#5B8DEF",
|
|
354
|
+
"stream": "#6FA0FF",
|
|
319
355
|
"selection": "#1B1F16",
|
|
320
356
|
"focus": "#E8A33D",
|
|
321
357
|
"data-ground": "#000000",
|
|
@@ -339,8 +375,11 @@ const THEME_PRESETS = {
|
|
|
339
375
|
"ok": "#2C7D55",
|
|
340
376
|
"busy": "#96591D",
|
|
341
377
|
"warn": "#96591D",
|
|
378
|
+
"warn-fg": "#F4F5F1",
|
|
342
379
|
"danger": "#A23C22",
|
|
380
|
+
"danger-fg": "#F4F5F1",
|
|
343
381
|
"info": "#2563EB",
|
|
382
|
+
"stream": "#1D4FD8",
|
|
344
383
|
"selection": "rgba(154,101,22,0.18)",
|
|
345
384
|
"focus": "#9A6516",
|
|
346
385
|
"data-ground": "#000000",
|
|
@@ -367,8 +406,11 @@ const THEME_PRESETS = {
|
|
|
367
406
|
"ok": "#15ac91",
|
|
368
407
|
"busy": "#edbd6a",
|
|
369
408
|
"warn": "#ea7620",
|
|
409
|
+
"warn-fg": "#111111",
|
|
370
410
|
"danger": "#f14c4c",
|
|
411
|
+
"danger-fg": "#111111",
|
|
371
412
|
"info": "#228df2",
|
|
413
|
+
"stream": "#4aa5ff",
|
|
372
414
|
"selection": "rgba(237,189,106,0.22)",
|
|
373
415
|
"focus": "#edbd6a",
|
|
374
416
|
"data-ground": "#000000",
|
|
@@ -392,8 +434,11 @@ const THEME_PRESETS = {
|
|
|
392
434
|
"ok": "#0e8c70",
|
|
393
435
|
"busy": "#b8862f",
|
|
394
436
|
"warn": "#d06a10",
|
|
437
|
+
"warn-fg": "#1a1a1a",
|
|
395
438
|
"danger": "#d03030",
|
|
439
|
+
"danger-fg": "#f5f5f5",
|
|
396
440
|
"info": "#1a75d2",
|
|
441
|
+
"stream": "#0f6ac4",
|
|
397
442
|
"selection": "rgba(184,134,47,0.20)",
|
|
398
443
|
"focus": "#b8862f",
|
|
399
444
|
"data-ground": "#000000",
|
|
@@ -420,8 +465,11 @@ const THEME_PRESETS = {
|
|
|
420
465
|
"ok": "#7bc47f",
|
|
421
466
|
"busy": "#e6c53a",
|
|
422
467
|
"warn": "#e6c53a",
|
|
468
|
+
"warn-fg": "#141414",
|
|
423
469
|
"danger": "#e0563b",
|
|
470
|
+
"danger-fg": "#141414",
|
|
424
471
|
"info": "#5ac8fa",
|
|
472
|
+
"stream": "#6ec0ff",
|
|
425
473
|
"selection": "#e0568a",
|
|
426
474
|
"focus": "#e0568a",
|
|
427
475
|
"data-ground": "#000000",
|
|
@@ -445,8 +493,11 @@ const THEME_PRESETS = {
|
|
|
445
493
|
"ok": "#3d8b41",
|
|
446
494
|
"busy": "#8f7a14",
|
|
447
495
|
"warn": "#8f7a14",
|
|
496
|
+
"warn-fg": "#000000",
|
|
448
497
|
"danger": "#b8402b",
|
|
498
|
+
"danger-fg": "#f6f6f6",
|
|
449
499
|
"info": "#157fb3",
|
|
500
|
+
"stream": "#0f6f9e",
|
|
450
501
|
"selection": "rgba(184,53,96,0.18)",
|
|
451
502
|
"focus": "#b83560",
|
|
452
503
|
"data-ground": "#000000",
|
|
@@ -473,8 +524,11 @@ const THEME_PRESETS = {
|
|
|
473
524
|
"ok": "#63b482",
|
|
474
525
|
"busy": "#9a8cdb",
|
|
475
526
|
"warn": "#d6a65a",
|
|
527
|
+
"warn-fg": "#07090a",
|
|
476
528
|
"danger": "#dc6d69",
|
|
529
|
+
"danger-fg": "#07090a",
|
|
477
530
|
"info": "#6eb7d9",
|
|
531
|
+
"stream": "#7cc4e8",
|
|
478
532
|
"selection": "rgba(230,106,69,0.18)",
|
|
479
533
|
"focus": "#e66a45",
|
|
480
534
|
"data-ground": "#000000",
|
|
@@ -498,8 +552,11 @@ const THEME_PRESETS = {
|
|
|
498
552
|
"ok": "#247746",
|
|
499
553
|
"busy": "#604aaa",
|
|
500
554
|
"warn": "#8a5b00",
|
|
555
|
+
"warn-fg": "#f4f3ef",
|
|
501
556
|
"danger": "#aa2f2b",
|
|
557
|
+
"danger-fg": "#f4f3ef",
|
|
502
558
|
"info": "#1d6587",
|
|
559
|
+
"stream": "#15607f",
|
|
503
560
|
"selection": "rgba(184,73,43,0.18)",
|
|
504
561
|
"focus": "#b8492b",
|
|
505
562
|
"data-ground": "#000000",
|
|
@@ -526,8 +583,11 @@ const THEME_PRESETS = {
|
|
|
526
583
|
"ok": "#22d967",
|
|
527
584
|
"busy": "#00e5e5",
|
|
528
585
|
"warn": "#ffab1a",
|
|
586
|
+
"warn-fg": "#09090c",
|
|
529
587
|
"danger": "#e13d3d",
|
|
588
|
+
"danger-fg": "#09090c",
|
|
530
589
|
"info": "#4a9eff",
|
|
590
|
+
"stream": "#5fb0ff",
|
|
531
591
|
"selection": "rgba(0,229,229,0.18)",
|
|
532
592
|
"focus": "#00e5e5",
|
|
533
593
|
"data-ground": "#000000",
|
|
@@ -551,8 +611,11 @@ const THEME_PRESETS = {
|
|
|
551
611
|
"ok": "#17914a",
|
|
552
612
|
"busy": "#0d7d7d",
|
|
553
613
|
"warn": "#b46a00",
|
|
614
|
+
"warn-fg": "#000000",
|
|
554
615
|
"danger": "#c22d2d",
|
|
616
|
+
"danger-fg": "#fcfcfd",
|
|
555
617
|
"info": "#1f6fd4",
|
|
618
|
+
"stream": "#0f63c8",
|
|
556
619
|
"selection": "rgba(13,125,125,0.16)",
|
|
557
620
|
"focus": "#0d7d7d",
|
|
558
621
|
"data-ground": "#ffffff",
|
|
@@ -49,13 +49,25 @@ interface ContrastRequirement {
|
|
|
49
49
|
reason: string;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
|
-
* The
|
|
52
|
+
* The eleven pairs that decide whether a theme is usable.
|
|
53
53
|
*
|
|
54
54
|
* Not every pair in the palette: the ones a reader's comprehension actually
|
|
55
55
|
* depends on. Primary ink is held to AAA because it carries the prose; secondary
|
|
56
|
-
* ink and accent ink to AA because they carry labels; the five status colours
|
|
57
|
-
* the non-text AA floor because they are read as *signals*
|
|
58
|
-
* — never as body copy.
|
|
56
|
+
* ink and accent ink to AA because they carry labels; the five status colours
|
|
57
|
+
* and the live hue to the non-text AA floor because they are read as *signals*
|
|
58
|
+
* — a dot, a rim, a bar — never as body copy.
|
|
59
|
+
*
|
|
60
|
+
* `danger` and `warn` each appear twice, and they are the only tones that do.
|
|
61
|
+
* `ok`, `busy`, `info` and `stream` are *only* ever signals, so the non-text
|
|
62
|
+
* floor is the whole truth about them. The red and the amber are also grounds:
|
|
63
|
+
* they are the two tones this system fills a control with, and what they fill is
|
|
64
|
+
* the confirm on something irreversible and the confirm on something merely
|
|
65
|
+
* consequential. Text on either fill is text, so its ink is held to the text
|
|
66
|
+
* floor against the tone it sits on rather than against the page.
|
|
67
|
+
*
|
|
68
|
+
* `stream` is measured for the same reason `ok` is: `createTheme()` darkens it
|
|
69
|
+
* to this floor when it has to invent a light block, and a report that did not
|
|
70
|
+
* check what the derivation targets would be checking the wrong thing.
|
|
59
71
|
*/
|
|
60
72
|
declare const CONTRAST_REQUIREMENTS: readonly ContrastRequirement[];
|
|
61
73
|
/** One measured pair. */
|
package/dist/theming/contrast.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { converter, parse } from "culori";
|
|
2
2
|
//#region src/theming/contrast.ts
|
|
3
3
|
/**
|
|
4
|
-
* WCAG contrast, and the
|
|
4
|
+
* WCAG contrast, and the eleven pairs a theme is judged on.
|
|
5
5
|
*
|
|
6
6
|
* A generator that only derived colours would be a colour toy: the reason to
|
|
7
7
|
* compute a palette instead of picking one is that the computer can then *check*
|
|
@@ -82,13 +82,25 @@ function contrastRatio(foreground, background) {
|
|
|
82
82
|
return (high + .05) / (low + .05);
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
|
-
* The
|
|
85
|
+
* The eleven pairs that decide whether a theme is usable.
|
|
86
86
|
*
|
|
87
87
|
* Not every pair in the palette: the ones a reader's comprehension actually
|
|
88
88
|
* depends on. Primary ink is held to AAA because it carries the prose; secondary
|
|
89
|
-
* ink and accent ink to AA because they carry labels; the five status colours
|
|
90
|
-
* the non-text AA floor because they are read as *signals*
|
|
91
|
-
* — never as body copy.
|
|
89
|
+
* ink and accent ink to AA because they carry labels; the five status colours
|
|
90
|
+
* and the live hue to the non-text AA floor because they are read as *signals*
|
|
91
|
+
* — a dot, a rim, a bar — never as body copy.
|
|
92
|
+
*
|
|
93
|
+
* `danger` and `warn` each appear twice, and they are the only tones that do.
|
|
94
|
+
* `ok`, `busy`, `info` and `stream` are *only* ever signals, so the non-text
|
|
95
|
+
* floor is the whole truth about them. The red and the amber are also grounds:
|
|
96
|
+
* they are the two tones this system fills a control with, and what they fill is
|
|
97
|
+
* the confirm on something irreversible and the confirm on something merely
|
|
98
|
+
* consequential. Text on either fill is text, so its ink is held to the text
|
|
99
|
+
* floor against the tone it sits on rather than against the page.
|
|
100
|
+
*
|
|
101
|
+
* `stream` is measured for the same reason `ok` is: `createTheme()` darkens it
|
|
102
|
+
* to this floor when it has to invent a light block, and a report that did not
|
|
103
|
+
* check what the derivation targets would be checking the wrong thing.
|
|
92
104
|
*/
|
|
93
105
|
const CONTRAST_REQUIREMENTS = [
|
|
94
106
|
{
|
|
@@ -112,12 +124,27 @@ const CONTRAST_REQUIREMENTS = [
|
|
|
112
124
|
minimum: WCAG_AA_TEXT,
|
|
113
125
|
reason: "The label on a solid accent button has to be readable."
|
|
114
126
|
},
|
|
127
|
+
{
|
|
128
|
+
id: "danger-fg/danger",
|
|
129
|
+
foreground: "danger-fg",
|
|
130
|
+
background: "danger",
|
|
131
|
+
minimum: WCAG_AA_TEXT,
|
|
132
|
+
reason: "The label on a solid destructive fill is read before something irreversible happens."
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
id: "warn-fg/warn",
|
|
136
|
+
foreground: "warn-fg",
|
|
137
|
+
background: "warn",
|
|
138
|
+
minimum: WCAG_AA_TEXT,
|
|
139
|
+
reason: "The label on a solid warning fill is read before a consequential press lands."
|
|
140
|
+
},
|
|
115
141
|
...[
|
|
116
142
|
"ok",
|
|
117
143
|
"busy",
|
|
118
144
|
"warn",
|
|
119
145
|
"danger",
|
|
120
|
-
"info"
|
|
146
|
+
"info",
|
|
147
|
+
"stream"
|
|
121
148
|
].map((status) => ({
|
|
122
149
|
id: `${status}/bg`,
|
|
123
150
|
foreground: status,
|
|
@@ -103,8 +103,12 @@ interface ThemeAnchors {
|
|
|
103
103
|
accent?: string;
|
|
104
104
|
/** Individual rungs of the surface ladder, overriding whatever would be derived. */
|
|
105
105
|
surfaces?: Partial<Record<"sunken" | "surface-1" | "surface-2" | "surface-3", string>>;
|
|
106
|
-
/**
|
|
107
|
-
|
|
106
|
+
/**
|
|
107
|
+
* Individual status tones, plus `stream` — the live hue an agent surface
|
|
108
|
+
* paints a token still arriving with. Never derived: a signal colour is a
|
|
109
|
+
* decision.
|
|
110
|
+
*/
|
|
111
|
+
status?: Partial<Record<"ok" | "busy" | "warn" | "danger" | "info" | "stream", string>>;
|
|
108
112
|
/**
|
|
109
113
|
* Font stacks. `mono` is the one the presets themselves override; `sans` and
|
|
110
114
|
* `display` are emitted only when given. Values pass through verbatim, so they
|
|
@@ -178,14 +178,31 @@ function lookup(map, token) {
|
|
|
178
178
|
* and stays correct if a consumer overrides the accent in tier 1 later.
|
|
179
179
|
*/
|
|
180
180
|
const SELECTION_WASH = `color-mix(in oklch, var(--cue-accent) 22%, transparent)`;
|
|
181
|
-
/**
|
|
182
|
-
|
|
181
|
+
/**
|
|
182
|
+
* The five tones plus the live hue, in the order the colour contract lists them.
|
|
183
|
+
*
|
|
184
|
+
* `stream` resolves exactly like a status — authored, never derived from the
|
|
185
|
+
* accent, and darkened to the non-text floor when a light block has to be
|
|
186
|
+
* invented — but it is not a `tone` any component takes. See
|
|
187
|
+
* `ThemeAnchors.status`.
|
|
188
|
+
*/
|
|
189
|
+
const TINTED = [...[
|
|
183
190
|
"ok",
|
|
184
191
|
"busy",
|
|
185
192
|
"warn",
|
|
186
193
|
"danger",
|
|
187
194
|
"info"
|
|
188
|
-
];
|
|
195
|
+
], "stream"];
|
|
196
|
+
/**
|
|
197
|
+
* The tones that are also *grounds*, in contract order.
|
|
198
|
+
*
|
|
199
|
+
* Every other status colour is only ever a signal — a dot, a rim, a wash — and
|
|
200
|
+
* whatever text sits near it sits on a surface. These two get filled: the amber
|
|
201
|
+
* carries the confirm on a consequential press and the red the confirm on an
|
|
202
|
+
* irreversible one, and text on a fill is text. So each gets an ink derived
|
|
203
|
+
* against itself, `warn-fg` and `danger-fg`.
|
|
204
|
+
*/
|
|
205
|
+
const INKED = ["warn", "danger"];
|
|
189
206
|
/** The three raised surfaces, in ladder order. */
|
|
190
207
|
const SURFACES = [
|
|
191
208
|
"surface-1",
|
|
@@ -243,7 +260,12 @@ function resolveDark(anchors, preset) {
|
|
|
243
260
|
const accent = colors["accent"];
|
|
244
261
|
define("accent-hover", void 0, accentMoved, () => shift(readColor(accent, "accent"), ACCENT_HOVER_LIGHTNESS_STEP));
|
|
245
262
|
define("accent-fg", void 0, accentMoved, () => pickInk(accent, [colors["bg"], colors["fg"]]));
|
|
246
|
-
for (const tone of
|
|
263
|
+
for (const tone of TINTED) define(tone, status[tone], false);
|
|
264
|
+
for (const tone of INKED) define(`${tone}-fg`, void 0, status[tone] !== void 0, () => pickInk(colors[tone], [
|
|
265
|
+
colors["bg"],
|
|
266
|
+
colors["sunken"],
|
|
267
|
+
colors["fg"]
|
|
268
|
+
]));
|
|
247
269
|
define("selection", void 0, accentMoved, () => SELECTION_WASH);
|
|
248
270
|
define("focus", void 0, accentMoved, () => accent);
|
|
249
271
|
define("data-ground", void 0, false);
|
|
@@ -311,7 +333,12 @@ function resolveLight(dark, preset) {
|
|
|
311
333
|
const accent = colors["accent"];
|
|
312
334
|
define("accent-hover", () => shift(readColor(accent, "accent"), ACCENT_HOVER_LIGHTNESS_STEP));
|
|
313
335
|
define("accent-fg", () => pickInk(accent, [colors["bg"], colors["fg"]]));
|
|
314
|
-
for (const tone of
|
|
336
|
+
for (const tone of TINTED) define(tone, () => darkenToContrast(dark.colors[tone], paperGround, 3, tone));
|
|
337
|
+
for (const tone of INKED) define(`${tone}-fg`, () => pickInk(colors[tone], [
|
|
338
|
+
colors["bg"],
|
|
339
|
+
colors["sunken"],
|
|
340
|
+
colors["fg"]
|
|
341
|
+
]));
|
|
315
342
|
define("selection", () => SELECTION_WASH);
|
|
316
343
|
define("focus", () => accent);
|
|
317
344
|
define("data-ground", () => dark.colors["data-ground"]);
|
|
@@ -88,12 +88,21 @@ declare function themeSelector(name: string, options?: ThemeSelectorOptions): st
|
|
|
88
88
|
* `:root`, for the same reason the build does it: a custom property's `var()`
|
|
89
89
|
* references are substituted at the element that declares it, so a `:root`-level
|
|
90
90
|
* mix would freeze the default theme's accent into every nested theme.
|
|
91
|
+
*
|
|
92
|
+
* This is deliberately a second copy of the `DERIVED` table in
|
|
93
|
+
* `packages/tokens/build.mjs`. It has to be one: that table runs at publish time
|
|
94
|
+
* over DTCG files under Style Dictionary, this one runs in a browser over a
|
|
95
|
+
* palette somebody just typed, and neither package can import the other's. What
|
|
96
|
+
* keeps a copy from drifting is not discipline but
|
|
97
|
+
* `test/theming/serialize.test.ts`, which compares this list against the
|
|
98
|
+
* compiled stylesheet in both directions — a derivation added to one side alone
|
|
99
|
+
* fails there rather than in a consumer's app six weeks later.
|
|
91
100
|
*/
|
|
92
101
|
declare const DERIVED_TOKEN_TEMPLATES: ReadonlyArray<readonly [string, string]>;
|
|
93
102
|
/**
|
|
94
103
|
* {@link DERIVED_TOKEN_TEMPLATES} as a property → value map.
|
|
95
104
|
*
|
|
96
|
-
* @returns The
|
|
105
|
+
* @returns The sixteen derived declarations, keyed by custom property.
|
|
97
106
|
* @example
|
|
98
107
|
* derivedTokens()["--cue-accent-soft"];
|
|
99
108
|
*/
|
|
@@ -97,6 +97,53 @@ function themeSelector(name, options = {}) {
|
|
|
97
97
|
density === void 0 ? "" : `[data-density="${density}"]`
|
|
98
98
|
].join("");
|
|
99
99
|
}
|
|
100
|
+
/** The tone vocabulary that gets a soft fill and a soft border in every theme. */
|
|
101
|
+
const STATUSES = [
|
|
102
|
+
"ok",
|
|
103
|
+
"busy",
|
|
104
|
+
"warn",
|
|
105
|
+
"danger",
|
|
106
|
+
"info"
|
|
107
|
+
];
|
|
108
|
+
/**
|
|
109
|
+
* The live hue — a token still arriving, a tool still running, a cursor that
|
|
110
|
+
* has not stopped.
|
|
111
|
+
*
|
|
112
|
+
* Not a member of {@link STATUSES}, because a status is something a `Chip` or a
|
|
113
|
+
* `StatusDot` can be *told to be* and "streaming" is not a tone a caller picks:
|
|
114
|
+
* it is a property of a surface while the model is talking. What it shares with
|
|
115
|
+
* the statuses is the shape of its family — a full-strength ink, a soft fill and
|
|
116
|
+
* a rim — so it derives alongside them. `packages/tokens/build.mjs` carries the
|
|
117
|
+
* same pair of constants for the same reason; see the note on
|
|
118
|
+
* {@link DERIVED_TOKEN_TEMPLATES}.
|
|
119
|
+
*/
|
|
120
|
+
const STREAM = "stream";
|
|
121
|
+
/** Every tone that earns a derived soft fill and a derived rim. */
|
|
122
|
+
const TINTED = [...STATUSES, STREAM];
|
|
123
|
+
/**
|
|
124
|
+
* The three shares of the foreground the list idioms are ruled with.
|
|
125
|
+
*
|
|
126
|
+
* `--cue-border` is an authored anchor, and what a preset authors is a *box
|
|
127
|
+
* edge* — the line around a card, an input, a panel. Repeated down thirty rows a
|
|
128
|
+
* box edge reads as a stack of boxes rather than as a list, so a rule between
|
|
129
|
+
* things is drawn lighter than the edge around a thing.
|
|
130
|
+
*
|
|
131
|
+
* Mixed from `--cue-fg` rather than authored, which is what makes them hold for
|
|
132
|
+
* a preset `createTheme()` produced from a palette nobody vetted: the rules keep
|
|
133
|
+
* their relationship to the type they separate whatever the palette turned out
|
|
134
|
+
* to be, in both modes, with nothing to get wrong.
|
|
135
|
+
*
|
|
136
|
+
* `row-hover` is the same measurement from the other side — the faintest wash
|
|
137
|
+
* that still reads as one row picked out of a list. It does not replace the
|
|
138
|
+
* surface ramp: a row sitting *on* a surface still lifts to the next rung
|
|
139
|
+
* (`hover:bg-surface-2`), which is what this library's own rows do. This is for
|
|
140
|
+
* rows drawn directly on `--cue-bg`, where the next rung is a visible step.
|
|
141
|
+
*/
|
|
142
|
+
const HAIRLINE_TEMPLATES = [
|
|
143
|
+
["hair", "color-mix(in oklch, var(--cue-fg) 6%, transparent)"],
|
|
144
|
+
["hair-strong", "color-mix(in oklch, var(--cue-fg) 12%, transparent)"],
|
|
145
|
+
["row-hover", "color-mix(in oklch, var(--cue-fg) 3.5%, transparent)"]
|
|
146
|
+
];
|
|
100
147
|
/**
|
|
101
148
|
* The derived colours every theme block carries, as `[token, value]` pairs.
|
|
102
149
|
*
|
|
@@ -105,18 +152,25 @@ function themeSelector(name, options = {}) {
|
|
|
105
152
|
* `:root`, for the same reason the build does it: a custom property's `var()`
|
|
106
153
|
* references are substituted at the element that declares it, so a `:root`-level
|
|
107
154
|
* mix would freeze the default theme's accent into every nested theme.
|
|
155
|
+
*
|
|
156
|
+
* This is deliberately a second copy of the `DERIVED` table in
|
|
157
|
+
* `packages/tokens/build.mjs`. It has to be one: that table runs at publish time
|
|
158
|
+
* over DTCG files under Style Dictionary, this one runs in a browser over a
|
|
159
|
+
* palette somebody just typed, and neither package can import the other's. What
|
|
160
|
+
* keeps a copy from drifting is not discipline but
|
|
161
|
+
* `test/theming/serialize.test.ts`, which compares this list against the
|
|
162
|
+
* compiled stylesheet in both directions — a derivation added to one side alone
|
|
163
|
+
* fails there rather than in a consumer's app six weeks later.
|
|
108
164
|
*/
|
|
109
|
-
const DERIVED_TOKEN_TEMPLATES = [
|
|
110
|
-
"
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
"info"
|
|
115
|
-
].flatMap((status) => [[`${status}-soft`, `color-mix(in oklch, var(--cue-${status}) 12%, transparent)`], [`${status}-border`, `color-mix(in oklch, var(--cue-${status}) 35%, transparent)`]])];
|
|
165
|
+
const DERIVED_TOKEN_TEMPLATES = [
|
|
166
|
+
["accent-soft", "color-mix(in oklch, var(--cue-accent) 14%, transparent)"],
|
|
167
|
+
...TINTED.flatMap((tone) => [[`${tone}-soft`, `color-mix(in oklch, var(--cue-${tone}) 12%, transparent)`], [`${tone}-border`, `color-mix(in oklch, var(--cue-${tone}) 35%, transparent)`]]),
|
|
168
|
+
...HAIRLINE_TEMPLATES
|
|
169
|
+
];
|
|
116
170
|
/**
|
|
117
171
|
* {@link DERIVED_TOKEN_TEMPLATES} as a property → value map.
|
|
118
172
|
*
|
|
119
|
-
* @returns The
|
|
173
|
+
* @returns The sixteen derived declarations, keyed by custom property.
|
|
120
174
|
* @example
|
|
121
175
|
* derivedTokens()["--cue-accent-soft"];
|
|
122
176
|
*/
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ActivityGraph",
|
|
3
|
+
"slug": "activity-graph",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"heat-graph"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "A half-year of runs as a calendar of cells, dense where the work was.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "data",
|
|
14
|
+
"type": "readonly DataPoint[]",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "Date and count pairs from the heat-graph package. Levels are classified for you;\ngaps are filled as empty cells."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "start",
|
|
21
|
+
"type": "string | Date",
|
|
22
|
+
"required": true,
|
|
23
|
+
"defaultValue": null,
|
|
24
|
+
"description": "First day of the window. Pass it explicitly: left unset, heat-graph draws a full\nyear ending today, which will not match your data."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "end",
|
|
28
|
+
"type": "string | Date",
|
|
29
|
+
"required": true,
|
|
30
|
+
"defaultValue": null,
|
|
31
|
+
"description": "Last day of the window. Cells are fixed-size, so a long window scrolls\nhorizontally rather than shrinking."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "title",
|
|
35
|
+
"type": "string",
|
|
36
|
+
"required": true,
|
|
37
|
+
"defaultValue": null,
|
|
38
|
+
"description": "What is being counted."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "total",
|
|
42
|
+
"type": "string",
|
|
43
|
+
"required": true,
|
|
44
|
+
"defaultValue": null,
|
|
45
|
+
"description": "Pre-formatted summary shown opposite the title."
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"typeReferences": [
|
|
49
|
+
"Omit<\n ComponentProps<\"div\">,\n \"children\" | \"data\" | \"start\" | \"end\" | \"title\" | \"total\"\n> & {\n /**\n * Date and count pairs from the heat-graph package. Levels are classified for you;\n * gaps are filled as empty cells.\n */\n data: readonly HeatGraph.DataPoint[];\n /**\n * First day of the window. Pass it explicitly: left unset, heat-graph draws a full\n * year ending today, which will not match your data.\n */\n start: string | Date;\n /**\n * Last day of the window. Cells are fixed-size, so a long window scrolls\n * horizontally rather than shrinking.\n */\n end: string | Date;\n /** What is being counted. */\n title: string;\n /** Pre-formatted summary shown opposite the title. */\n total: string;\n}"
|
|
50
|
+
],
|
|
51
|
+
"subcomponents": [],
|
|
52
|
+
"parts": [],
|
|
53
|
+
"variants": {},
|
|
54
|
+
"defaultVariants": {},
|
|
55
|
+
"tokensUsed": [
|
|
56
|
+
"--cue-fg-subtle",
|
|
57
|
+
"--cue-radius-control",
|
|
58
|
+
"--cue-radius-overlay",
|
|
59
|
+
"--cue-stream",
|
|
60
|
+
"--cue-surface-2",
|
|
61
|
+
"--cue-text-body"
|
|
62
|
+
],
|
|
63
|
+
"summary": "A half-year of runs as a calendar of cells, dense where the work was.",
|
|
64
|
+
"examples": [
|
|
65
|
+
{
|
|
66
|
+
"title": "Usage",
|
|
67
|
+
"code": "import { ActivityGraph } from \"@cueplusplus/ui/elements\";\n\n<ActivityGraph\n data={data}\n start={start}\n end={end}\n title=\"Agent runs\"\n total=\"1,204 in 6 months\"\n/>",
|
|
68
|
+
"language": "tsx"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"status": "todo-docs",
|
|
72
|
+
"url": "/docs/components/activity-graph",
|
|
73
|
+
"mdUrl": "/docs/components/activity-graph.md",
|
|
74
|
+
"jsonUrl": "/r/components/activity-graph.json",
|
|
75
|
+
"specimens": [
|
|
76
|
+
{
|
|
77
|
+
"title": "ActivityGraph",
|
|
78
|
+
"group": "elements-agents",
|
|
79
|
+
"components": [
|
|
80
|
+
"ActivityGraph"
|
|
81
|
+
],
|
|
82
|
+
"code": "<Specimens>\n <Specimen label=\"six months\" wide>\n <ActivityGraph\n data={RUN_DAYS}\n start=\"2026-02-01\"\n end=\"2026-08-21\"\n title=\"Agent runs\"\n total=\"1,204 in 6 months\"\n />\n </Specimen>\n <Specimen label=\"a fortnight\" wide>\n <ActivityGraph\n data={RECENT_DAYS}\n start={RECENT_DAYS[0]!.date}\n end={RECENT_DAYS[RECENT_DAYS.length - 1]!.date}\n title=\"Agent runs\"\n total=\"63 in 14 days\"\n />\n </Specimen>\n</Specimens>",
|
|
83
|
+
"note": "Half a year of runs as a calendar of cells, dense where the work was. It is the one element in the family with a runtime dependency of its own — `heat-graph`, an optional peer — which does the calendar arithmetic and the levelling; everything you can see here is cue's, from the five-step ramp in the streaming hue down to the legend. Cells are a fixed size, so a long window scrolls sideways rather than shrinking into a smudge.",
|
|
84
|
+
"interaction": "none. The five legend swatches are `aria-hidden` and sit between the words less and more, which is what carries the scale."
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"todo": true
|
|
88
|
+
}
|