@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
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
-
import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
|
|
3
|
+
import { useIsomorphicInsertionEffect, useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect.js";
|
|
4
4
|
import { DEFAULT_DENSITY as DEFAULT_DENSITY$1, DENSITY_LEVELS, DensityContext } from "./density.js";
|
|
5
5
|
import { DEFAULT_STORAGE_KEY } from "./prepaint.js";
|
|
6
6
|
import * as React from "react";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
8
|
-
import { DEFAULT_FONT, FONTS } from "@cueplusplus/tokens";
|
|
8
|
+
import { DEFAULT_FONT, FONTS, THEMES } from "@cueplusplus/tokens";
|
|
9
9
|
//#region src/system/theme-provider.tsx
|
|
10
|
-
const MODES = [
|
|
10
|
+
const MODES$1 = [
|
|
11
11
|
"dark",
|
|
12
12
|
"light",
|
|
13
13
|
"system"
|
|
@@ -34,6 +34,8 @@ const ThemeContext = React.createContext(null);
|
|
|
34
34
|
* Internal: not part of the public API.
|
|
35
35
|
*/
|
|
36
36
|
const FontScaleContext = React.createContext(null);
|
|
37
|
+
/** Effective font-family overrides from the nearest provider chain. */
|
|
38
|
+
const FontFamiliesContext = React.createContext(null);
|
|
37
39
|
function isOneOf(allowed, value) {
|
|
38
40
|
return typeof value === "string" && allowed.includes(value);
|
|
39
41
|
}
|
|
@@ -49,6 +51,30 @@ function readPreferences(storageKey) {
|
|
|
49
51
|
return {};
|
|
50
52
|
}
|
|
51
53
|
}
|
|
54
|
+
/** Resolve `"system"` the way {@link prepaintScript} resolves it: against the media query. */
|
|
55
|
+
function resolveMode(mode) {
|
|
56
|
+
if (mode !== "system") return mode;
|
|
57
|
+
if (typeof matchMedia !== "function") return DEFAULT_RESOLVED_MODE;
|
|
58
|
+
return matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The stamp {@link prepaintScript} put on `<html>`, recomputed from the storage
|
|
62
|
+
* it read.
|
|
63
|
+
*
|
|
64
|
+
* Not read back off the element, because by the time anything here runs it is
|
|
65
|
+
* no longer there — see the `<html>` stamp below. Same key, same validation,
|
|
66
|
+
* same fallbacks, so this returns what the script decided rather than a second
|
|
67
|
+
* opinion about it.
|
|
68
|
+
*/
|
|
69
|
+
function prepaintStamp(storageKey, fallback) {
|
|
70
|
+
const stored = readPreferences(storageKey);
|
|
71
|
+
return {
|
|
72
|
+
theme: typeof stored.theme === "string" && stored.theme.length > 0 ? stored.theme : fallback.theme,
|
|
73
|
+
density: isOneOf(DENSITY_LEVELS, stored.density) ? stored.density : fallback.density,
|
|
74
|
+
font: isOneOf(FONT_NAMES, stored.font) ? stored.font : fallback.font,
|
|
75
|
+
mode: resolveMode(isOneOf(MODES$1, stored.mode) ? stored.mode : fallback.mode)
|
|
76
|
+
};
|
|
77
|
+
}
|
|
52
78
|
function writePreferences(storageKey, preferences) {
|
|
53
79
|
if (typeof localStorage === "undefined") return;
|
|
54
80
|
try {
|
|
@@ -84,14 +110,14 @@ function writePreferences(storageKey, preferences) {
|
|
|
84
110
|
* <App />
|
|
85
111
|
* </ThemeProvider>
|
|
86
112
|
*/
|
|
87
|
-
function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp = DEFAULT_DENSITY$1, mode: modeProp = DEFAULT_MODE, font: fontProp = DEFAULT_FONT, fontScale = 1, storageKey = DEFAULT_STORAGE_KEY, asChild = false, className, style: styleProp, children }) {
|
|
113
|
+
function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp = DEFAULT_DENSITY$1, mode: modeProp = DEFAULT_MODE, font: fontProp = DEFAULT_FONT, fontScale = 1, fontFamilies, storageKey = DEFAULT_STORAGE_KEY, persistPreferences = true, asChild = false, className, style: styleProp, children }) {
|
|
88
114
|
const ambient = React.useContext(ThemeContext);
|
|
89
115
|
const isRoot = ambient === null;
|
|
90
116
|
const [theme, setThemeState] = React.useState(themeProp);
|
|
91
117
|
const [density, setDensityState] = React.useState(densityProp);
|
|
92
118
|
const [mode, setModeState] = React.useState(modeProp);
|
|
93
119
|
const [rootFont, setRootFontState] = React.useState(() => {
|
|
94
|
-
if (!isRoot) return fontProp;
|
|
120
|
+
if (!isRoot || !persistPreferences) return fontProp;
|
|
95
121
|
const stored = readPreferences(storageKey).font;
|
|
96
122
|
return isOneOf(FONT_NAMES, stored) ? stored : fontProp;
|
|
97
123
|
});
|
|
@@ -101,15 +127,24 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
|
|
|
101
127
|
const restoredKey = React.useRef(null);
|
|
102
128
|
const [restored, setRestored] = React.useState(false);
|
|
103
129
|
useIsomorphicLayoutEffect(() => {
|
|
104
|
-
if (!isRoot
|
|
130
|
+
if (!isRoot) return;
|
|
131
|
+
if (!persistPreferences) {
|
|
132
|
+
setRestored(true);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (restoredKey.current === storageKey) return;
|
|
105
136
|
restoredKey.current = storageKey;
|
|
106
137
|
setRestored(true);
|
|
107
138
|
const stored = readPreferences(storageKey);
|
|
108
|
-
if (
|
|
139
|
+
if (isOneOf(THEMES, stored.theme)) setThemeState(stored.theme);
|
|
109
140
|
if (isOneOf(DENSITY_LEVELS, stored.density)) setDensityState(stored.density);
|
|
110
141
|
if (isOneOf(FONT_NAMES, stored.font)) setRootFontState(stored.font);
|
|
111
|
-
if (isOneOf(MODES, stored.mode)) setModeState(stored.mode);
|
|
112
|
-
}, [
|
|
142
|
+
if (isOneOf(MODES$1, stored.mode)) setModeState(stored.mode);
|
|
143
|
+
}, [
|
|
144
|
+
isRoot,
|
|
145
|
+
persistPreferences,
|
|
146
|
+
storageKey
|
|
147
|
+
]);
|
|
113
148
|
const lastProps = React.useRef({
|
|
114
149
|
theme: themeProp,
|
|
115
150
|
density: densityProp,
|
|
@@ -162,9 +197,13 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
|
|
|
162
197
|
...patch
|
|
163
198
|
};
|
|
164
199
|
stateRef.current = next;
|
|
165
|
-
if (!isRoot) return;
|
|
200
|
+
if (!isRoot || !persistPreferences) return;
|
|
166
201
|
writePreferences(storageKey, next);
|
|
167
|
-
}, [
|
|
202
|
+
}, [
|
|
203
|
+
isRoot,
|
|
204
|
+
persistPreferences,
|
|
205
|
+
storageKey
|
|
206
|
+
]);
|
|
168
207
|
const setTheme = React.useCallback((next) => {
|
|
169
208
|
setThemeState(next);
|
|
170
209
|
persist({ theme: next });
|
|
@@ -184,9 +223,20 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
|
|
|
184
223
|
/** Nested providers hand the axis straight up: one document, one pairing. */
|
|
185
224
|
const setFont = isRoot ? rootSetFont : ambient.setFont;
|
|
186
225
|
const originalStamp = React.useRef(null);
|
|
187
|
-
|
|
188
|
-
if (!isRoot ||
|
|
226
|
+
useIsomorphicInsertionEffect(() => {
|
|
227
|
+
if (!isRoot || typeof document === "undefined") return;
|
|
189
228
|
const root = document.documentElement;
|
|
229
|
+
const next = restored || !persistPreferences ? {
|
|
230
|
+
theme,
|
|
231
|
+
density,
|
|
232
|
+
font,
|
|
233
|
+
mode
|
|
234
|
+
} : prepaintStamp(storageKey, {
|
|
235
|
+
theme: themeProp,
|
|
236
|
+
density: densityProp,
|
|
237
|
+
font: fontProp,
|
|
238
|
+
mode: modeProp
|
|
239
|
+
});
|
|
190
240
|
originalStamp.current ??= {
|
|
191
241
|
theme: root.getAttribute("data-theme"),
|
|
192
242
|
density: root.getAttribute("data-density"),
|
|
@@ -194,18 +244,28 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
|
|
|
194
244
|
mode: root.getAttribute("data-mode"),
|
|
195
245
|
colorScheme: root.style.colorScheme
|
|
196
246
|
};
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
247
|
+
const write = (name, value) => {
|
|
248
|
+
if (root.getAttribute(name) !== value) root.setAttribute(name, value);
|
|
249
|
+
};
|
|
250
|
+
write("data-theme", next.theme);
|
|
251
|
+
write("data-density", next.density);
|
|
252
|
+
write("data-font", next.font);
|
|
253
|
+
write("data-mode", next.mode);
|
|
254
|
+
const scheme = next.mode === "system" ? "light dark" : next.mode;
|
|
255
|
+
if (root.style.colorScheme !== scheme) root.style.colorScheme = scheme;
|
|
202
256
|
}, [
|
|
203
257
|
isRoot,
|
|
204
258
|
restored,
|
|
259
|
+
persistPreferences,
|
|
260
|
+
storageKey,
|
|
205
261
|
theme,
|
|
206
262
|
density,
|
|
207
263
|
font,
|
|
208
|
-
|
|
264
|
+
mode,
|
|
265
|
+
themeProp,
|
|
266
|
+
densityProp,
|
|
267
|
+
fontProp,
|
|
268
|
+
modeProp
|
|
209
269
|
]);
|
|
210
270
|
React.useEffect(() => () => {
|
|
211
271
|
const original = originalStamp.current;
|
|
@@ -243,20 +303,38 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
|
|
|
243
303
|
setMode,
|
|
244
304
|
setFont
|
|
245
305
|
]);
|
|
306
|
+
const parentFontFamilies = React.useContext(FontFamiliesContext);
|
|
307
|
+
const effectiveFontFamilies = React.useMemo(() => {
|
|
308
|
+
const sans = fontFamilies?.sans ?? parentFontFamilies?.sans;
|
|
309
|
+
const mono = fontFamilies?.mono ?? parentFontFamilies?.mono;
|
|
310
|
+
return sans === void 0 && mono === void 0 ? null : {
|
|
311
|
+
sans,
|
|
312
|
+
mono
|
|
313
|
+
};
|
|
314
|
+
}, [
|
|
315
|
+
fontFamilies?.sans,
|
|
316
|
+
fontFamilies?.mono,
|
|
317
|
+
parentFontFamilies?.sans,
|
|
318
|
+
parentFontFamilies?.mono
|
|
319
|
+
]);
|
|
246
320
|
const style = React.useMemo(() => ({
|
|
247
|
-
colorScheme:
|
|
321
|
+
colorScheme: mode === "system" ? "light dark" : mode,
|
|
248
322
|
"--cue-font-scale": fontScale,
|
|
323
|
+
...fontFamilies?.sans === void 0 ? null : { "--cue-font-sans": fontFamilies.sans },
|
|
324
|
+
...fontFamilies?.mono === void 0 ? null : { "--cue-font-mono": fontFamilies.mono },
|
|
249
325
|
...styleProp
|
|
250
326
|
}), [
|
|
251
|
-
|
|
327
|
+
mode,
|
|
252
328
|
fontScale,
|
|
329
|
+
fontFamilies?.sans,
|
|
330
|
+
fontFamilies?.mono,
|
|
253
331
|
styleProp
|
|
254
332
|
]);
|
|
255
333
|
const stamp = {
|
|
256
334
|
"data-cue-root": "",
|
|
257
335
|
"data-theme": theme,
|
|
258
336
|
"data-density": density,
|
|
259
|
-
"data-mode":
|
|
337
|
+
"data-mode": mode
|
|
260
338
|
};
|
|
261
339
|
let root;
|
|
262
340
|
if (asChild) {
|
|
@@ -279,12 +357,15 @@ function ThemeProvider({ theme: themeProp = DEFAULT_THEME, density: densityProp
|
|
|
279
357
|
value: contextValue,
|
|
280
358
|
children: /* @__PURE__ */ jsx(FontScaleContext.Provider, {
|
|
281
359
|
value: fontScale,
|
|
282
|
-
children: /* @__PURE__ */ jsx(
|
|
283
|
-
value:
|
|
284
|
-
children:
|
|
360
|
+
children: /* @__PURE__ */ jsx(FontFamiliesContext.Provider, {
|
|
361
|
+
value: effectiveFontFamilies,
|
|
362
|
+
children: /* @__PURE__ */ jsx(DensityContext.Provider, {
|
|
363
|
+
value: density,
|
|
364
|
+
children: root
|
|
365
|
+
})
|
|
285
366
|
})
|
|
286
367
|
})
|
|
287
368
|
});
|
|
288
369
|
}
|
|
289
370
|
//#endregion
|
|
290
|
-
export { FontScaleContext, ThemeContext, ThemeProvider };
|
|
371
|
+
export { FontFamiliesContext, FontScaleContext, ThemeContext, ThemeProvider };
|
|
@@ -11,6 +11,15 @@ type ControlSize = "sm" | "md" | "lg";
|
|
|
11
11
|
* per-rung variants (`density-ultra-compact:` … `density-ultra-large:`) instead.
|
|
12
12
|
*
|
|
13
13
|
* @returns The applicable density level.
|
|
14
|
+
* @example
|
|
15
|
+
* const density = useDensity();
|
|
16
|
+
* const rowHeight = useControlHeight("sm");
|
|
17
|
+
* // Shorter rows mean more of them on screen, so the reserve moves with the level.
|
|
18
|
+
* useVirtualizer({
|
|
19
|
+
* count: rows.length,
|
|
20
|
+
* estimateSize: () => rowHeight,
|
|
21
|
+
* overscan: density === "ultra-compact" ? 12 : 6,
|
|
22
|
+
* });
|
|
14
23
|
*/
|
|
15
24
|
declare function useDensity(): Density;
|
|
16
25
|
/**
|
|
@@ -63,6 +63,15 @@ function measureControlHeight(density, size) {
|
|
|
63
63
|
* per-rung variants (`density-ultra-compact:` … `density-ultra-large:`) instead.
|
|
64
64
|
*
|
|
65
65
|
* @returns The applicable density level.
|
|
66
|
+
* @example
|
|
67
|
+
* const density = useDensity();
|
|
68
|
+
* const rowHeight = useControlHeight("sm");
|
|
69
|
+
* // Shorter rows mean more of them on screen, so the reserve moves with the level.
|
|
70
|
+
* useVirtualizer({
|
|
71
|
+
* count: rows.length,
|
|
72
|
+
* estimateSize: () => rowHeight,
|
|
73
|
+
* overscan: density === "ultra-compact" ? 12 : 6,
|
|
74
|
+
* });
|
|
66
75
|
*/
|
|
67
76
|
function useDensity() {
|
|
68
77
|
return React.useContext(DensityContext) ?? "compact";
|
|
@@ -11,5 +11,23 @@ import * as React from "react";
|
|
|
11
11
|
* (never-invoked) passive variant instead.
|
|
12
12
|
*/
|
|
13
13
|
const useIsomorphicLayoutEffect = typeof document === "undefined" ? React.useEffect : React.useLayoutEffect;
|
|
14
|
+
/**
|
|
15
|
+
* `useInsertionEffect` in the browser, `useEffect` on the server.
|
|
16
|
+
*
|
|
17
|
+
* One step earlier than the layout variant above, and the difference is the
|
|
18
|
+
* whole reason it exists. React runs **every** insertion effect in the tree
|
|
19
|
+
* during the mutation phase, before **any** layout effect runs; layout effects
|
|
20
|
+
* then run child-first, so a provider near the root is the last thing in the
|
|
21
|
+
* commit to get one. Anything a descendant's layout effect measures — Base UI
|
|
22
|
+
* calls `getComputedStyle` in several — is measured against whatever the
|
|
23
|
+
* document element is wearing at that moment.
|
|
24
|
+
*
|
|
25
|
+
* That matters exactly once: putting back what React 19 takes off `<html>` when
|
|
26
|
+
* it hydrates the document element. See the `<html>` stamp in
|
|
27
|
+
* `theme-provider.tsx`.
|
|
28
|
+
*
|
|
29
|
+
* Write only. An insertion effect must not read layout or schedule state.
|
|
30
|
+
*/
|
|
31
|
+
const useIsomorphicInsertionEffect = typeof document === "undefined" ? React.useEffect : React.useInsertionEffect;
|
|
14
32
|
//#endregion
|
|
15
|
-
export { useIsomorphicLayoutEffect };
|
|
33
|
+
export { useIsomorphicInsertionEffect, useIsomorphicLayoutEffect };
|
|
@@ -4,7 +4,7 @@ import { Density, ThemeName } from "@cueplusplus/tokens";
|
|
|
4
4
|
* The colour tokens every theme block declares, in the order the tokens build
|
|
5
5
|
* emits them. A generated theme is complete exactly when it covers this list.
|
|
6
6
|
*/
|
|
7
|
-
declare const THEME_COLOR_TOKENS: readonly ["bg", "sunken", "surface-1", "surface-2", "surface-3", "fg", "fg-muted", "fg-subtle", "border", "border-strong", "border-overlay", "accent", "accent-hover", "accent-fg", "ok", "busy", "warn", "danger", "info", "selection", "focus", "data-ground", "scrim"];
|
|
7
|
+
declare const THEME_COLOR_TOKENS: readonly ["bg", "sunken", "surface-1", "surface-2", "surface-3", "fg", "fg-muted", "fg-subtle", "border", "border-strong", "border-overlay", "accent", "accent-hover", "accent-fg", "ok", "busy", "warn", "warn-fg", "danger", "danger-fg", "info", "stream", "selection", "focus", "data-ground", "scrim"];
|
|
8
8
|
/** One of the colour tokens a theme block owns. */
|
|
9
9
|
type ThemeColorToken = (typeof THEME_COLOR_TOKENS)[number];
|
|
10
10
|
//#endregion
|
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",
|
|
@@ -454,6 +505,65 @@ const THEME_PRESETS = {
|
|
|
454
505
|
},
|
|
455
506
|
fonts: { "font-mono": "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" }
|
|
456
507
|
},
|
|
508
|
+
requestport: {
|
|
509
|
+
dark: {
|
|
510
|
+
"bg": "#0a0d0e",
|
|
511
|
+
"sunken": "#07090a",
|
|
512
|
+
"surface-1": "#101416",
|
|
513
|
+
"surface-2": "#151a1d",
|
|
514
|
+
"surface-3": "#1a2024",
|
|
515
|
+
"fg": "#f0eee9",
|
|
516
|
+
"fg-muted": "#a3a6a8",
|
|
517
|
+
"fg-subtle": "#81868a",
|
|
518
|
+
"border": "#293034",
|
|
519
|
+
"border-strong": "#61686d",
|
|
520
|
+
"border-overlay": "#3f484e",
|
|
521
|
+
"accent": "#e66a45",
|
|
522
|
+
"accent-hover": "#f07a53",
|
|
523
|
+
"accent-fg": "#160d09",
|
|
524
|
+
"ok": "#63b482",
|
|
525
|
+
"busy": "#9a8cdb",
|
|
526
|
+
"warn": "#d6a65a",
|
|
527
|
+
"warn-fg": "#07090a",
|
|
528
|
+
"danger": "#dc6d69",
|
|
529
|
+
"danger-fg": "#07090a",
|
|
530
|
+
"info": "#6eb7d9",
|
|
531
|
+
"stream": "#7cc4e8",
|
|
532
|
+
"selection": "rgba(230,106,69,0.18)",
|
|
533
|
+
"focus": "#e66a45",
|
|
534
|
+
"data-ground": "#000000",
|
|
535
|
+
"scrim": "rgba(0,0,0,0.72)"
|
|
536
|
+
},
|
|
537
|
+
light: {
|
|
538
|
+
"bg": "#f4f3ef",
|
|
539
|
+
"sunken": "#e7e6e1",
|
|
540
|
+
"surface-1": "#faf9f6",
|
|
541
|
+
"surface-2": "#ffffff",
|
|
542
|
+
"surface-3": "#deddd8",
|
|
543
|
+
"fg": "#1a1d1e",
|
|
544
|
+
"fg-muted": "#53595c",
|
|
545
|
+
"fg-subtle": "#62696d",
|
|
546
|
+
"border": "#d0d2cf",
|
|
547
|
+
"border-strong": "#7f8689",
|
|
548
|
+
"border-overlay": "#aeb4b5",
|
|
549
|
+
"accent": "#b8492b",
|
|
550
|
+
"accent-hover": "#963b23",
|
|
551
|
+
"accent-fg": "#ffffff",
|
|
552
|
+
"ok": "#247746",
|
|
553
|
+
"busy": "#604aaa",
|
|
554
|
+
"warn": "#8a5b00",
|
|
555
|
+
"warn-fg": "#f4f3ef",
|
|
556
|
+
"danger": "#aa2f2b",
|
|
557
|
+
"danger-fg": "#f4f3ef",
|
|
558
|
+
"info": "#1d6587",
|
|
559
|
+
"stream": "#15607f",
|
|
560
|
+
"selection": "rgba(184,73,43,0.18)",
|
|
561
|
+
"focus": "#b8492b",
|
|
562
|
+
"data-ground": "#000000",
|
|
563
|
+
"scrim": "rgba(20,18,15,0.45)"
|
|
564
|
+
},
|
|
565
|
+
fonts: { "font-mono": "\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" }
|
|
566
|
+
},
|
|
457
567
|
quotamate: {
|
|
458
568
|
dark: {
|
|
459
569
|
"bg": "#0e0e12",
|
|
@@ -473,8 +583,11 @@ const THEME_PRESETS = {
|
|
|
473
583
|
"ok": "#22d967",
|
|
474
584
|
"busy": "#00e5e5",
|
|
475
585
|
"warn": "#ffab1a",
|
|
586
|
+
"warn-fg": "#09090c",
|
|
476
587
|
"danger": "#e13d3d",
|
|
588
|
+
"danger-fg": "#09090c",
|
|
477
589
|
"info": "#4a9eff",
|
|
590
|
+
"stream": "#5fb0ff",
|
|
478
591
|
"selection": "rgba(0,229,229,0.18)",
|
|
479
592
|
"focus": "#00e5e5",
|
|
480
593
|
"data-ground": "#000000",
|
|
@@ -498,8 +611,11 @@ const THEME_PRESETS = {
|
|
|
498
611
|
"ok": "#17914a",
|
|
499
612
|
"busy": "#0d7d7d",
|
|
500
613
|
"warn": "#b46a00",
|
|
614
|
+
"warn-fg": "#000000",
|
|
501
615
|
"danger": "#c22d2d",
|
|
616
|
+
"danger-fg": "#fcfcfd",
|
|
502
617
|
"info": "#1f6fd4",
|
|
618
|
+
"stream": "#0f63c8",
|
|
503
619
|
"selection": "rgba(13,125,125,0.16)",
|
|
504
620
|
"focus": "#0d7d7d",
|
|
505
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. */
|