@cueplusplus/ui 0.2.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 +2250 -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/brand/_chassis.d.ts +1 -1
- package/dist/brand/cue-mark.d.ts +1 -1
- package/dist/brand/cue-mark.js +1 -1
- package/dist/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/_edge-scroller.js +12 -1
- package/dist/chrome/_tabs-scroll.d.ts +1 -1
- package/dist/chrome/_tabs-scroll.js +1 -1
- 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/_overrides.js +18 -6
- 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 +9 -7
- package/dist/index.js +3 -2
- package/dist/instruments/index.d.ts +2 -2
- package/dist/instruments/index.js +2 -2
- package/dist/instruments/table.d.ts +14 -1
- package/dist/instruments/table.js +20 -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 +34 -8
- package/dist/primitives/chip.js +97 -11
- package/dist/styles.css +11 -1
- package/dist/system/agent-skin.d.ts +27 -0
- package/dist/system/agent-skin.js +20 -0
- package/dist/system/index.d.ts +3 -3
- package/dist/system/portal.d.ts +5 -3
- package/dist/system/portal.js +36 -8
- package/dist/system/prepaint.d.ts +20 -2
- package/dist/system/prepaint.js +39 -33
- package/dist/system/theme-provider.d.ts +13 -2
- package/dist/system/theme-provider.js +107 -26
- 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 +124 -8
- package/dist/theming/contrast.d.ts +16 -4
- package/dist/theming/contrast.js +33 -6
- package/dist/theming/create-theme.d.ts +8 -4
- package/dist/theming/create-theme.js +56 -20
- package/dist/theming/serialize.d.ts +11 -2
- package/dist/theming/serialize.js +87 -9
- package/manifest/components/accordion.json +154 -0
- 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-pile.json +116 -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 +190 -0
- package/manifest/components/animated-number.json +67 -0
- package/manifest/components/app-bar.json +244 -0
- package/manifest/components/app-shell.json +383 -0
- package/manifest/components/app-window-frame.json +102 -0
- package/manifest/components/approval-card.json +106 -0
- package/manifest/components/artifact-card.json +81 -0
- package/manifest/components/ask-box.json +209 -0
- package/manifest/components/audience-icon.json +52 -0
- package/manifest/components/autocomplete.json +197 -0
- package/manifest/components/avatar-group.json +72 -0
- package/manifest/components/avatar.json +95 -0
- package/manifest/components/background-inbox.json +71 -0
- package/manifest/components/branch-picker.json +124 -0
- package/manifest/components/breadcrumb.json +74 -0
- package/manifest/components/button-group.json +74 -0
- package/manifest/components/button.json +126 -0
- package/manifest/components/calendar.json +65 -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/card.json +140 -0
- package/manifest/components/carousel.json +200 -0
- package/manifest/components/catalogue-icon.json +52 -0
- package/manifest/components/channel-beta-icon.json +52 -0
- package/manifest/components/channel-matrix.json +173 -0
- package/manifest/components/channel-released-icon.json +52 -0
- package/manifest/components/chart-container.json +111 -0
- package/manifest/components/chart-ramp.json +72 -0
- package/manifest/components/chart-swatch.json +65 -0
- package/manifest/components/chart-tooltip-content.json +114 -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/checkbox-group.json +68 -0
- package/manifest/components/checkbox.json +93 -0
- package/manifest/components/checkpoint-history.json +80 -0
- package/manifest/components/chip.json +144 -0
- 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/collapsible.json +120 -0
- package/manifest/components/color-area.json +59 -0
- package/manifest/components/color-field.json +79 -0
- package/manifest/components/color-picker.json +175 -0
- package/manifest/components/color-slider.json +75 -0
- package/manifest/components/color-swatch.json +68 -0
- package/manifest/components/colors-section.json +66 -0
- package/manifest/components/combobox.json +198 -0
- package/manifest/components/command-palette.json +177 -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 +176 -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/container.json +60 -0
- package/manifest/components/context-breakdown.json +65 -0
- package/manifest/components/context-menu.json +121 -0
- package/manifest/components/context-usage.json +85 -0
- package/manifest/components/conversation-search.json +92 -0
- package/manifest/components/copy-button.json +93 -0
- package/manifest/components/cost-meter.json +74 -0
- package/manifest/components/cue-logotype.json +96 -0
- package/manifest/components/cue-mark.json +97 -0
- package/manifest/components/cue-portal-frame.json +55 -0
- package/manifest/components/data-table-pagination.json +83 -0
- package/manifest/components/data-table-toolbar.json +104 -0
- package/manifest/components/date-field.json +80 -0
- package/manifest/components/date-picker.json +191 -0
- package/manifest/components/date-range-picker.json +191 -0
- package/manifest/components/day-separator.json +58 -0
- package/manifest/components/delegation-card.json +144 -0
- package/manifest/components/density.json +58 -0
- package/manifest/components/description-list.json +84 -0
- package/manifest/components/diagram.json +100 -0
- package/manifest/components/dialog.json +198 -0
- package/manifest/components/disclosure.json +109 -0
- package/manifest/components/dmx-bar.json +94 -0
- package/manifest/components/dmx-strip.json +101 -0
- package/manifest/components/document-reference.json +90 -0
- package/manifest/components/draft-restore.json +82 -0
- package/manifest/components/drawer.json +179 -0
- package/manifest/components/dropdown-menu.json +229 -0
- 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/empty-state.json +90 -0
- package/manifest/components/end-of-turn-summary.json +77 -0
- package/manifest/components/env-var-input.json +150 -0
- package/manifest/components/error-state.json +80 -0
- package/manifest/components/export-dialog.json +84 -0
- package/manifest/components/eyebrow.json +56 -0
- package/manifest/components/feedback-dialog.json +107 -0
- package/manifest/components/field-description.json +63 -0
- package/manifest/components/field-error.json +77 -0
- package/manifest/components/field-label.json +63 -0
- package/manifest/components/field.json +79 -0
- package/manifest/components/file-tree.json +83 -0
- package/manifest/components/file-upload.json +159 -0
- package/manifest/components/flow-background.json +50 -0
- package/manifest/components/flow-controls.json +50 -0
- package/manifest/components/flow-graph.json +75 -0
- package/manifest/components/folder-icon.json +52 -0
- package/manifest/components/footer.json +112 -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/grid.json +81 -0
- package/manifest/components/group-bar.json +102 -0
- package/manifest/components/guardrail-notice.json +91 -0
- package/manifest/components/hover-card.json +151 -0
- package/manifest/components/icon-button.json +88 -0
- package/manifest/components/image-generation.json +67 -0
- package/manifest/components/info-tip.json +98 -0
- package/manifest/components/inline-citation.json +77 -0
- package/manifest/components/input-group.json +91 -0
- package/manifest/components/input.json +89 -0
- package/manifest/components/item.json +129 -0
- package/manifest/components/job-progress.json +96 -0
- package/manifest/components/kbd.json +52 -0
- package/manifest/components/launcher-bubble.json +105 -0
- package/manifest/components/link.json +81 -0
- package/manifest/components/live-region-announcer.json +79 -0
- package/manifest/components/log-viewer.json +139 -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/menubar.json +157 -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 +100 -0
- 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/message.json +116 -0
- package/manifest/components/meter.json +114 -0
- package/manifest/components/mobile-composer.json +126 -0
- package/manifest/components/model-picker.json +76 -0
- package/manifest/components/multi-select.json +190 -0
- package/manifest/components/musical-time-input.json +113 -0
- package/manifest/components/navigation-menu.json +226 -0
- package/manifest/components/node-card.json +109 -0
- package/manifest/components/node-handle.json +69 -0
- package/manifest/components/number-field.json +107 -0
- package/manifest/components/number-ticker.json +61 -0
- package/manifest/components/onboarding.json +84 -0
- package/manifest/components/otp-field.json +128 -0
- package/manifest/components/page-shell.json +96 -0
- package/manifest/components/pagination.json +92 -0
- package/manifest/components/panel-header.json +77 -0
- package/manifest/components/panel.json +71 -0
- package/manifest/components/password-input.json +119 -0
- package/manifest/components/permission-grant.json +92 -0
- package/manifest/components/permission-scopes.json +139 -0
- package/manifest/components/piano-keyboard.json +120 -0
- package/manifest/components/plussie.json +111 -0
- package/manifest/components/popover.json +193 -0
- package/manifest/components/preset-section.json +73 -0
- package/manifest/components/progress.json +95 -0
- 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/radio-group.json +73 -0
- package/manifest/components/radio.json +80 -0
- package/manifest/components/rating.json +141 -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/resizable.json +88 -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/row.json +109 -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 +91 -0
- package/manifest/components/scrollable-tabs-list.json +83 -0
- package/manifest/components/scrub-input.json +200 -0
- package/manifest/components/seam-cell.json +75 -0
- package/manifest/components/seam-grid.json +75 -0
- package/manifest/components/seam-list.json +56 -0
- package/manifest/components/search-input.json +134 -0
- package/manifest/components/section-header.json +112 -0
- package/manifest/components/segmented-control.json +138 -0
- package/manifest/components/select.json +194 -0
- package/manifest/components/separator.json +53 -0
- package/manifest/components/settings-panel.json +118 -0
- package/manifest/components/shape-section.json +66 -0
- package/manifest/components/shared-conversation.json +89 -0
- package/manifest/components/sheet.json +186 -0
- package/manifest/components/shimmer-label.json +59 -0
- package/manifest/components/sidebar.json +198 -0
- package/manifest/components/signal-edge.json +56 -0
- package/manifest/components/skeleton.json +46 -0
- package/manifest/components/skill-icon.json +52 -0
- package/manifest/components/slider.json +89 -0
- package/manifest/components/sources.json +83 -0
- package/manifest/components/sparkline.json +76 -0
- package/manifest/components/speaker-identity.json +61 -0
- package/manifest/components/spec-sheet.json +80 -0
- package/manifest/components/spectrum-visualizer.json +115 -0
- package/manifest/components/spinner.json +61 -0
- package/manifest/components/stack-icon.json +52 -0
- package/manifest/components/stack.json +96 -0
- package/manifest/components/stacks-matrix-icon.json +52 -0
- package/manifest/components/stat.json +87 -0
- package/manifest/components/status-bar.json +58 -0
- package/manifest/components/status-dot.json +78 -0
- package/manifest/components/stepper.json +89 -0
- 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/switch.json +87 -0
- package/manifest/components/table-scroll-region.json +69 -0
- package/manifest/components/table.json +155 -0
- package/manifest/components/tabs.json +145 -0
- package/manifest/components/tags-input.json +190 -0
- package/manifest/components/tail-status.json +109 -0
- package/manifest/components/terminal-block.json +91 -0
- package/manifest/components/terminal-frame.json +119 -0
- package/manifest/components/textarea.json +76 -0
- package/manifest/components/theme-configurator.json +124 -0
- package/manifest/components/theme-provider.json +134 -0
- 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 +160 -0
- package/manifest/components/time-boundary.json +62 -0
- package/manifest/components/time-field.json +80 -0
- package/manifest/components/timeline-ruler.json +139 -0
- package/manifest/components/timeline.json +115 -0
- package/manifest/components/title-bar.json +82 -0
- package/manifest/components/toast.json +130 -0
- package/manifest/components/todo-list.json +69 -0
- package/manifest/components/toggle-group.json +106 -0
- package/manifest/components/toggle.json +109 -0
- package/manifest/components/token-editor.json +90 -0
- 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 +163 -0
- package/manifest/components/tooltip.json +164 -0
- package/manifest/components/trace-waterfall.json +74 -0
- package/manifest/components/tree-visibility-toggle.json +84 -0
- package/manifest/components/tree.json +140 -0
- package/manifest/components/turn-footer.json +105 -0
- package/manifest/components/two-step-button.json +113 -0
- package/manifest/components/typing-indicator.json +53 -0
- package/manifest/components/universe-grid.json +127 -0
- package/manifest/components/unread-divider.json +55 -0
- package/manifest/components/usage-chart.json +124 -0
- 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 +4779 -0
- package/manifest/tokens.json +159 -0
- package/package.json +54 -5
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,
|
|
@@ -30,7 +30,7 @@ declare const DEFAULT_THEME_BASE: ThemeName;
|
|
|
30
30
|
/**
|
|
31
31
|
* How far the sunken ground sits below the page, in oklch lightness.
|
|
32
32
|
*
|
|
33
|
-
* Small on purpose: sunken is a well, not a second theme. Across the
|
|
33
|
+
* Small on purpose: sunken is a well, not a second theme. Across the ten
|
|
34
34
|
* shipped presets the authored gap runs −0.011 to −0.031.
|
|
35
35
|
*/
|
|
36
36
|
declare const SUNKEN_LIGHTNESS_STEP = -0.02;
|
|
@@ -75,7 +75,7 @@ declare const ACCENT_FG_MINIMUM = 4.5;
|
|
|
75
75
|
* extreme rather than to the arithmetic mirror: `1 − L` of a 0.16 near-black is a
|
|
76
76
|
* 0.84 mid-grey, which is not a page. Compressing instead maps the ladder of
|
|
77
77
|
* dark grounds onto a narrow paper band — a deeper dark theme gets a cleaner
|
|
78
|
-
* white page — and lands within 0.01 of all
|
|
78
|
+
* white page — and lands within 0.01 of all ten authored light presets.
|
|
79
79
|
*/
|
|
80
80
|
declare const LIGHT_GROUND_COMPRESSION = 0.1;
|
|
81
81
|
interface ThemeAnchors {
|
|
@@ -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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { formatColorString } from "../color/_convert.js";
|
|
2
2
|
import { BASE_FONT_STACKS, DEFAULT_DENSITY_LEVEL, DENSITY_RADIUS_SCALE, RESOLVED_MONO, THEME_COLOR_TOKENS, THEME_PRESETS } from "./_presets.js";
|
|
3
3
|
import { WCAG_AA_TEXT, contrastRatio, contrastReport } from "./contrast.js";
|
|
4
|
-
import { assertCssValue, assertThemeName, derivedTokens, serializeThemeCss, themeSelector, tokenProperty } from "./serialize.js";
|
|
4
|
+
import { assertCssValue, assertThemeName, derivedTokens, serializeSystemModeAliases, serializeThemeCss, themeSelector, tokenProperty } from "./serialize.js";
|
|
5
5
|
import { clampChroma, converter, formatHex, inGamut, parse } from "culori";
|
|
6
6
|
//#region src/theming/create-theme.ts
|
|
7
7
|
/**
|
|
@@ -32,7 +32,7 @@ const DEFAULT_THEME_BASE = "cue";
|
|
|
32
32
|
/**
|
|
33
33
|
* How far the sunken ground sits below the page, in oklch lightness.
|
|
34
34
|
*
|
|
35
|
-
* Small on purpose: sunken is a well, not a second theme. Across the
|
|
35
|
+
* Small on purpose: sunken is a well, not a second theme. Across the ten
|
|
36
36
|
* shipped presets the authored gap runs −0.011 to −0.031.
|
|
37
37
|
*/
|
|
38
38
|
const SUNKEN_LIGHTNESS_STEP = -.02;
|
|
@@ -81,7 +81,7 @@ const ACCENT_FG_MINIMUM = WCAG_AA_TEXT;
|
|
|
81
81
|
* extreme rather than to the arithmetic mirror: `1 − L` of a 0.16 near-black is a
|
|
82
82
|
* 0.84 mid-grey, which is not a page. Compressing instead maps the ladder of
|
|
83
83
|
* dark grounds onto a narrow paper band — a deeper dark theme gets a cleaner
|
|
84
|
-
* white page — and lands within 0.01 of all
|
|
84
|
+
* white page — and lands within 0.01 of all ten authored light presets.
|
|
85
85
|
*/
|
|
86
86
|
const LIGHT_GROUND_COMPRESSION = .1;
|
|
87
87
|
/** Lightness a derived light colour steps down by while hunting for contrast. */
|
|
@@ -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"]);
|
|
@@ -400,7 +427,7 @@ function createTheme(anchors) {
|
|
|
400
427
|
const derived = Object.entries(derivedTokens());
|
|
401
428
|
const fonts = resolveFonts(anchors, preset.fonts);
|
|
402
429
|
const radius = anchors.radiusScale === void 0 ? null : radiusBlocks(name, anchors.radiusScale);
|
|
403
|
-
const
|
|
430
|
+
const darkPaletteSections = [
|
|
404
431
|
{ declarations: colorDeclarations(dark.colors) },
|
|
405
432
|
{
|
|
406
433
|
comment: DERIVED_COMMENT,
|
|
@@ -409,25 +436,26 @@ function createTheme(anchors) {
|
|
|
409
436
|
{
|
|
410
437
|
comment: FONT_COMMENT,
|
|
411
438
|
declarations: fonts
|
|
412
|
-
}
|
|
413
|
-
...radius === null ? [] : [{
|
|
414
|
-
comment: SHAPE_COMMENT,
|
|
415
|
-
declarations: radius.base
|
|
416
|
-
}]
|
|
439
|
+
}
|
|
417
440
|
];
|
|
441
|
+
const darkSections = [...darkPaletteSections, ...radius === null ? [] : [{
|
|
442
|
+
comment: SHAPE_COMMENT,
|
|
443
|
+
declarations: radius.base
|
|
444
|
+
}]];
|
|
445
|
+
const lightSections = light === null ? null : [{ declarations: colorDeclarations(light.colors) }, {
|
|
446
|
+
comment: DERIVED_COMMENT,
|
|
447
|
+
declarations: derived
|
|
448
|
+
}];
|
|
418
449
|
const blocks = [
|
|
419
450
|
{
|
|
420
451
|
selector: themeSelector(name),
|
|
421
452
|
colorScheme: "dark",
|
|
422
453
|
sections: darkSections
|
|
423
454
|
},
|
|
424
|
-
...
|
|
455
|
+
...lightSections === null ? [] : [{
|
|
425
456
|
selector: themeSelector(name, { mode: "light" }),
|
|
426
457
|
colorScheme: "light",
|
|
427
|
-
sections:
|
|
428
|
-
comment: DERIVED_COMMENT,
|
|
429
|
-
declarations: derived
|
|
430
|
-
}]
|
|
458
|
+
sections: lightSections
|
|
431
459
|
}],
|
|
432
460
|
...radius?.blocks ?? []
|
|
433
461
|
];
|
|
@@ -441,7 +469,15 @@ function createTheme(anchors) {
|
|
|
441
469
|
}]];
|
|
442
470
|
return {
|
|
443
471
|
name,
|
|
444
|
-
css: serializeThemeCss(blocks, { banner: `@cueplusplus/ui — theme "${name}"` }),
|
|
472
|
+
css: `${serializeThemeCss(blocks, { banner: `@cueplusplus/ui — theme "${name}"` }).trimEnd()}\n\n${serializeSystemModeAliases(name, [{
|
|
473
|
+
mode: "dark",
|
|
474
|
+
colorScheme: "light dark",
|
|
475
|
+
sections: darkPaletteSections
|
|
476
|
+
}, {
|
|
477
|
+
mode: "light",
|
|
478
|
+
colorScheme: "light dark",
|
|
479
|
+
sections: lightSections ?? darkPaletteSections
|
|
480
|
+
}])}\n`,
|
|
445
481
|
tokens: Object.fromEntries(darkSections.flatMap((section) => section.declarations)),
|
|
446
482
|
light: light === null ? null : Object.fromEntries([...colorDeclarations(light.colors), ...derived]),
|
|
447
483
|
report: contrastReport(inputs)
|
|
@@ -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
|
*/
|
|
@@ -110,7 +119,7 @@ interface ThemeBlock {
|
|
|
110
119
|
/** The selector the rule declares under. */
|
|
111
120
|
selector: string;
|
|
112
121
|
/** Emitted as `color-scheme`, ahead of the custom properties. Omit to skip it. */
|
|
113
|
-
colorScheme?: "dark" | "light";
|
|
122
|
+
colorScheme?: "dark" | "light" | "light dark";
|
|
114
123
|
/** The declarations, grouped into commented sections. */
|
|
115
124
|
sections: readonly ThemeBlockSection[];
|
|
116
125
|
}
|
|
@@ -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
|
*/
|
|
@@ -148,6 +202,30 @@ function serializeThemeBlock(block) {
|
|
|
148
202
|
}
|
|
149
203
|
return `${block.selector} {\n${lines.join("\n")}\n}`;
|
|
150
204
|
}
|
|
205
|
+
/** Indent a complete rule once so it can live inside an at-rule. */
|
|
206
|
+
function indentRule(rule) {
|
|
207
|
+
return rule.split("\n").map((line) => ` ${line}`).join("\n");
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Alias resolved dark/light palettes onto the preserved logical `system` mode.
|
|
211
|
+
*
|
|
212
|
+
* Both `createTheme()` and the configurator call this function. Keeping the
|
|
213
|
+
* selector and media-query spelling here prevents exported overrides from
|
|
214
|
+
* drifting away from generated custom themes.
|
|
215
|
+
*
|
|
216
|
+
* @internal Used by package-owned theme serializers; not part of the public
|
|
217
|
+
* `@cueplusplus/ui/theming` barrel.
|
|
218
|
+
*/
|
|
219
|
+
function serializeSystemModeAliases(theme, aliases) {
|
|
220
|
+
const name = assertThemeName(theme);
|
|
221
|
+
return aliases.map(({ mode, colorScheme, sections }) => {
|
|
222
|
+
return `@media (prefers-color-scheme: ${mode}) {\n${indentRule(serializeThemeBlock({
|
|
223
|
+
selector: `[data-theme="${name}"][data-mode="system"]`,
|
|
224
|
+
colorScheme,
|
|
225
|
+
sections
|
|
226
|
+
}))}\n}`;
|
|
227
|
+
}).join("\n\n");
|
|
228
|
+
}
|
|
151
229
|
/**
|
|
152
230
|
* A whole generated stylesheet: banner, then one rule per block.
|
|
153
231
|
*
|
|
@@ -162,4 +240,4 @@ function serializeThemeCss(blocks, options = {}) {
|
|
|
162
240
|
return `${[...options.banner === void 0 ? [] : [`/*! ${options.banner}\n * Generated by createTheme(). Do not edit by hand.\n */`], ...rules].join("\n\n")}\n`;
|
|
163
241
|
}
|
|
164
242
|
//#endregion
|
|
165
|
-
export { CUE_TOKEN_PREFIX, DERIVED_TOKEN_TEMPLATES, THEME_NAME_PATTERN, assertCssValue, assertThemeName, derivedTokens, serializeThemeBlock, serializeThemeCss, themeSelector, tokenProperty };
|
|
243
|
+
export { CUE_TOKEN_PREFIX, DERIVED_TOKEN_TEMPLATES, THEME_NAME_PATTERN, assertCssValue, assertThemeName, derivedTokens, serializeSystemModeAliases, serializeThemeBlock, serializeThemeCss, themeSelector, tokenProperty };
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Accordion",
|
|
3
|
+
"slug": "accordion",
|
|
4
|
+
"group": "layout",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "A stack of sections, one (or several) open at a time.\n\nWraps Base UI's `Accordion`, so the disclosure ARIA, keyboard handling and\nopen-state bookkeeping are the primitive's. This layer adds the console skin:\nhairline separation, mono summary rows on the control ladder, and a height\ntransition that respects `prefers-reduced-motion`.",
|
|
9
|
+
"props": [],
|
|
10
|
+
"typeReferences": [],
|
|
11
|
+
"subcomponents": [
|
|
12
|
+
"Root",
|
|
13
|
+
"Item",
|
|
14
|
+
"Header",
|
|
15
|
+
"Trigger",
|
|
16
|
+
"Panel"
|
|
17
|
+
],
|
|
18
|
+
"parts": [
|
|
19
|
+
{
|
|
20
|
+
"name": "Root",
|
|
21
|
+
"usage": "Accordion.Root",
|
|
22
|
+
"description": "Groups the sections and owns which of them are open.",
|
|
23
|
+
"props": [
|
|
24
|
+
{
|
|
25
|
+
"name": "className",
|
|
26
|
+
"type": "string",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": null,
|
|
29
|
+
"description": "Extra classes for the accordion frame."
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"typeReferences": [
|
|
33
|
+
"Omit<BaseAccordion.Root.Props, \"className\">"
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "Item",
|
|
38
|
+
"usage": "Accordion.Item",
|
|
39
|
+
"description": "One section.\n\nSeparation is a hairline the section draws above itself, dropped on the first\none — so a stack shows rules *between* sections and none against the rim of\nwhatever contains them. Same rule as `Row`, for the same reason.",
|
|
40
|
+
"props": [
|
|
41
|
+
{
|
|
42
|
+
"name": "className",
|
|
43
|
+
"type": "string",
|
|
44
|
+
"required": false,
|
|
45
|
+
"defaultValue": null,
|
|
46
|
+
"description": "Extra classes for the section."
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"typeReferences": [
|
|
50
|
+
"Omit<BaseAccordion.Item.Props, \"className\">"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "Header",
|
|
55
|
+
"usage": "Accordion.Header",
|
|
56
|
+
"description": "The heading that labels a section's panel. An `<h3>` with no type of its own.",
|
|
57
|
+
"props": [
|
|
58
|
+
{
|
|
59
|
+
"name": "className",
|
|
60
|
+
"type": "string",
|
|
61
|
+
"required": false,
|
|
62
|
+
"defaultValue": null,
|
|
63
|
+
"description": "Extra classes for the heading."
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"typeReferences": [
|
|
67
|
+
"Omit<BaseAccordion.Header.Props, \"className\">"
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "Trigger",
|
|
72
|
+
"usage": "Accordion.Trigger",
|
|
73
|
+
"description": "The summary row that opens a section.\n\nA mono row on the control ladder, padded to the same gutters as a `Row`, with\na caret that rotates off the trigger's own `data-panel-open` — nothing in\nReact has to know the section is open for the arrow to turn.",
|
|
74
|
+
"props": [
|
|
75
|
+
{
|
|
76
|
+
"name": "className",
|
|
77
|
+
"type": "string",
|
|
78
|
+
"required": false,
|
|
79
|
+
"defaultValue": null,
|
|
80
|
+
"description": "Extra classes for the summary row."
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"typeReferences": [
|
|
84
|
+
"Omit<BaseAccordion.Trigger.Props, \"className\">"
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "Panel",
|
|
89
|
+
"usage": "Accordion.Panel",
|
|
90
|
+
"description": "A section's body.\n\nHeight is animated from `--accordion-panel-height`, which Base UI measures.\nThe animating element carries no padding — padding is part of the box height,\nso it would be counted into the `0 → measured` transition and make the panel\njump at both ends — hence the inner body element.",
|
|
91
|
+
"props": [
|
|
92
|
+
{
|
|
93
|
+
"name": "className",
|
|
94
|
+
"type": "string",
|
|
95
|
+
"required": false,
|
|
96
|
+
"defaultValue": null,
|
|
97
|
+
"description": "Extra classes for the animating box. Padding belongs on `bodyClassName`."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"name": "bodyClassName",
|
|
101
|
+
"type": "string",
|
|
102
|
+
"required": false,
|
|
103
|
+
"defaultValue": null,
|
|
104
|
+
"description": "Extra classes for the padded body inside it."
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"typeReferences": [
|
|
108
|
+
"Omit<BaseAccordion.Panel.Props, \"className\">"
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"variants": {},
|
|
113
|
+
"defaultVariants": {},
|
|
114
|
+
"tokensUsed": [
|
|
115
|
+
"--cue-accent",
|
|
116
|
+
"--cue-border",
|
|
117
|
+
"--cue-control-md",
|
|
118
|
+
"--cue-fg",
|
|
119
|
+
"--cue-fg-muted",
|
|
120
|
+
"--cue-fg-subtle",
|
|
121
|
+
"--cue-font-mono",
|
|
122
|
+
"--cue-icon-sm",
|
|
123
|
+
"--cue-pad-row-x",
|
|
124
|
+
"--cue-space-1",
|
|
125
|
+
"--cue-space-3",
|
|
126
|
+
"--cue-space-4",
|
|
127
|
+
"--cue-text-ui"
|
|
128
|
+
],
|
|
129
|
+
"summary": "A stack of sections, one (or several) open at a time.",
|
|
130
|
+
"examples": [
|
|
131
|
+
{
|
|
132
|
+
"title": "Usage",
|
|
133
|
+
"code": "<Accordion.Root>\n <Accordion.Item value=\"routing\">\n <Accordion.Header><Accordion.Trigger>routing</Accordion.Trigger></Accordion.Header>\n <Accordion.Panel>…</Accordion.Panel>\n </Accordion.Item>\n</Accordion.Root>\n<Accordion.Root multiple defaultValue={[\"routing\"]}>…</Accordion.Root>",
|
|
134
|
+
"language": "tsx"
|
|
135
|
+
}
|
|
136
|
+
],
|
|
137
|
+
"status": "todo-docs",
|
|
138
|
+
"url": "/docs/components/accordion",
|
|
139
|
+
"mdUrl": "/docs/components/accordion.md",
|
|
140
|
+
"jsonUrl": "/r/components/accordion.json",
|
|
141
|
+
"specimens": [
|
|
142
|
+
{
|
|
143
|
+
"title": "Accordion",
|
|
144
|
+
"group": "layout",
|
|
145
|
+
"components": [
|
|
146
|
+
"Accordion"
|
|
147
|
+
],
|
|
148
|
+
"code": "<Accordion.Root className=\"w-full max-w-[36rem]\" defaultValue={[\"patch\"]}>\n <Accordion.Item value=\"patch\">\n <Accordion.Header>\n <Accordion.Trigger>Patch</Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Panel>48 fixtures across 4 universes.</Accordion.Panel>\n </Accordion.Item>\n <Accordion.Item value=\"cues\">\n <Accordion.Header>\n <Accordion.Trigger>Cues</Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Panel>12 cues, last edited 4 minutes ago.</Accordion.Panel>\n </Accordion.Item>\n <Accordion.Item value=\"network\" disabled>\n <Accordion.Header>\n <Accordion.Trigger>Network</Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Panel>Art-Net on 10.0.0.42.</Accordion.Panel>\n </Accordion.Item>\n</Accordion.Root>",
|
|
149
|
+
"note": "Hairline-separated items with mono summary rows. Several can be open at once.",
|
|
150
|
+
"interaction": "the whole header row is the trigger; the panel animates its height and stills under prefers-reduced-motion."
|
|
151
|
+
}
|
|
152
|
+
],
|
|
153
|
+
"todo": true
|
|
154
|
+
}
|
|
@@ -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
|
+
}
|