@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
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "JobProgress",
|
|
3
|
+
"slug": "job-progress",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "Work measured in minutes: weighted stages, an ETA, and a way out.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "title",
|
|
14
|
+
"type": "string",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "What the job is doing."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "stages",
|
|
21
|
+
"type": "readonly JobStage[]",
|
|
22
|
+
"required": true,
|
|
23
|
+
"defaultValue": null,
|
|
24
|
+
"description": "Stages with relative weights, so a long install does not read the same as a fast\nclone."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "stageIndex",
|
|
28
|
+
"type": "number",
|
|
29
|
+
"required": true,
|
|
30
|
+
"defaultValue": null,
|
|
31
|
+
"description": "Which stage is running. Passing stages.length marks the job finished, and the bar\nnever runs past its track."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "stageProgress",
|
|
35
|
+
"type": "number",
|
|
36
|
+
"required": true,
|
|
37
|
+
"defaultValue": null,
|
|
38
|
+
"description": "Progress inside the current stage, 0 to 1."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "eta",
|
|
42
|
+
"type": "string",
|
|
43
|
+
"required": true,
|
|
44
|
+
"defaultValue": null,
|
|
45
|
+
"description": "Pre-formatted estimate. Replaced by done once finished."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "onCancel",
|
|
49
|
+
"type": "(() => void)",
|
|
50
|
+
"required": false,
|
|
51
|
+
"defaultValue": null,
|
|
52
|
+
"description": "Called to stop the job. Hidden once it finishes."
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"typeReferences": [
|
|
56
|
+
"Omit<\n ComponentProps<\"div\">,\n | \"children\"\n | \"title\"\n | \"stages\"\n | \"stageIndex\"\n | \"stageProgress\"\n | \"eta\"\n | \"onCancel\"\n> & {\n /** What the job is doing. */\n title: string;\n /**\n * Stages with relative weights, so a long install does not read the same as a fast\n * clone.\n */\n stages: readonly JobStage[];\n /**\n * Which stage is running. Passing stages.length marks the job finished, and the bar\n * never runs past its track.\n */\n stageIndex: number;\n /** Progress inside the current stage, 0 to 1. */\n stageProgress: number;\n /** Pre-formatted estimate. Replaced by done once finished. */\n eta: string;\n /** Called to stop the job. Hidden once it finishes. */\n onCancel?: () => void;\n}"
|
|
57
|
+
],
|
|
58
|
+
"subcomponents": [],
|
|
59
|
+
"parts": [],
|
|
60
|
+
"variants": {},
|
|
61
|
+
"defaultVariants": {},
|
|
62
|
+
"tokensUsed": [
|
|
63
|
+
"--cue-fg",
|
|
64
|
+
"--cue-fg-subtle",
|
|
65
|
+
"--cue-ok",
|
|
66
|
+
"--cue-radius-overlay",
|
|
67
|
+
"--cue-stream",
|
|
68
|
+
"--cue-surface-2",
|
|
69
|
+
"--cue-text-body"
|
|
70
|
+
],
|
|
71
|
+
"summary": "Work measured in minutes: weighted stages, an ETA, and a way out.",
|
|
72
|
+
"examples": [
|
|
73
|
+
{
|
|
74
|
+
"title": "Usage",
|
|
75
|
+
"code": "import { JobProgress } from \"@cueplusplus/ui/elements\";\n\n<JobProgress\n title=\"Verify the fix on CI\"\n stages={stages}\n stageIndex={1}\n stageProgress={0.6}\n eta=\"about 3 min\"\n/>",
|
|
76
|
+
"language": "tsx"
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"status": "todo-docs",
|
|
80
|
+
"url": "/docs/components/job-progress",
|
|
81
|
+
"mdUrl": "/docs/components/job-progress.md",
|
|
82
|
+
"jsonUrl": "/r/components/job-progress.json",
|
|
83
|
+
"specimens": [
|
|
84
|
+
{
|
|
85
|
+
"title": "JobProgress",
|
|
86
|
+
"group": "elements-agents",
|
|
87
|
+
"components": [
|
|
88
|
+
"JobProgress"
|
|
89
|
+
],
|
|
90
|
+
"code": "<Specimens>\n <Specimen label=\"rendering\" wide>\n <JobProgress\n title=\"Overnight patch and pre-vis\"\n stages={STAGES}\n stageIndex={2}\n stageProgress={0.42}\n eta=\"4m left\"\n onCancel={() => undefined}\n />\n </Specimen>\n <Specimen label=\"done\" wide>\n <JobProgress\n title=\"Overnight patch and pre-vis\"\n stages={STAGES}\n stageIndex={STAGES.length}\n stageProgress={1}\n eta=\"4m left\"\n />\n </Specimen>\n</Specimens>",
|
|
91
|
+
"note": "Work measured in minutes rather than steps. The stages are weighted, so a six-minute render does not read the same length as a one-second export, and the bar is filled from those weights plus the fraction of the current stage — which is why it never jumps backwards when a short stage ends.",
|
|
92
|
+
"interaction": "cancel is a labelled icon button and disappears once the job finishes: there is nothing left to stop, and a dead X beside a green tick reads as an error."
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"todo": true
|
|
96
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Kbd",
|
|
3
|
+
"slug": "kbd",
|
|
4
|
+
"group": "primitives",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": false,
|
|
8
|
+
"description": "A key cap for documenting shortcuts inline: `⌘K`, `Esc`, `Shift`.\n\nStatic markup — no `\"use client\"`, so it renders on the server. Sized off the\nchip height so a `Kbd` and a `Chip` line up on the same row, and set in the\nmicro type step because shortcut hints are reference material, not content.",
|
|
9
|
+
"props": [],
|
|
10
|
+
"typeReferences": [
|
|
11
|
+
"React.ComponentPropsWithoutRef<\"kbd\">"
|
|
12
|
+
],
|
|
13
|
+
"subcomponents": [],
|
|
14
|
+
"parts": [],
|
|
15
|
+
"variants": {},
|
|
16
|
+
"defaultVariants": {},
|
|
17
|
+
"tokensUsed": [
|
|
18
|
+
"--cue-border",
|
|
19
|
+
"--cue-chip-h",
|
|
20
|
+
"--cue-fg-muted",
|
|
21
|
+
"--cue-font-mono",
|
|
22
|
+
"--cue-radius-control",
|
|
23
|
+
"--cue-space-2",
|
|
24
|
+
"--cue-surface-2",
|
|
25
|
+
"--cue-text-micro"
|
|
26
|
+
],
|
|
27
|
+
"summary": "A key cap for documenting shortcuts inline: `⌘K`, `Esc`, `Shift`.",
|
|
28
|
+
"examples": [
|
|
29
|
+
{
|
|
30
|
+
"title": "Usage",
|
|
31
|
+
"code": "<span>Press <Kbd>⌘</Kbd><Kbd>K</Kbd> to search</span>",
|
|
32
|
+
"language": "tsx"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"status": "todo-docs",
|
|
36
|
+
"url": "/docs/components/kbd",
|
|
37
|
+
"mdUrl": "/docs/components/kbd.md",
|
|
38
|
+
"jsonUrl": "/r/components/kbd.json",
|
|
39
|
+
"specimens": [
|
|
40
|
+
{
|
|
41
|
+
"title": "Kbd",
|
|
42
|
+
"group": "primitives",
|
|
43
|
+
"components": [
|
|
44
|
+
"Kbd"
|
|
45
|
+
],
|
|
46
|
+
"code": "<Specimens>\n <Specimen label=\"single\">\n <Kbd>G</Kbd>\n </Specimen>\n <Specimen label=\"chord\">\n <Kbd>⌘K</Kbd>\n </Specimen>\n <Specimen label=\"in a line\">\n <span className=\"font-mono text-(length:--cue-text-ui) text-fg-muted\">\n Press <Kbd>⌘</Kbd> <Kbd>⇧</Kbd> <Kbd>P</Kbd> to open the palette.\n </span>\n </Specimen>\n</Specimens>",
|
|
47
|
+
"note": "A key cap, in the mono face. Static markup, so it renders on the server.",
|
|
48
|
+
"interaction": "none."
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"todo": true
|
|
52
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "LauncherBubble",
|
|
3
|
+
"slug": "launcher-bubble",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "The floating entry point, and the panel it opens into.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "open",
|
|
14
|
+
"type": "boolean",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "Whether the panel is showing. The trigger icon crossfades either way."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "unread",
|
|
21
|
+
"type": "number",
|
|
22
|
+
"required": true,
|
|
23
|
+
"defaultValue": null,
|
|
24
|
+
"description": "Badge count on the closed bubble. Hidden at zero and while open."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "greeting",
|
|
28
|
+
"type": "string",
|
|
29
|
+
"required": true,
|
|
30
|
+
"defaultValue": null,
|
|
31
|
+
"description": "Opening line in the panel."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "prompts",
|
|
35
|
+
"type": "readonly string[]",
|
|
36
|
+
"required": true,
|
|
37
|
+
"defaultValue": null,
|
|
38
|
+
"description": "Ways in, so the first message does not have to be invented."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "onToggle",
|
|
42
|
+
"type": "(() => void)",
|
|
43
|
+
"required": false,
|
|
44
|
+
"defaultValue": null,
|
|
45
|
+
"description": "Called when the bubble is pressed."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "onPick",
|
|
49
|
+
"type": "((prompt: string) => void)",
|
|
50
|
+
"required": false,
|
|
51
|
+
"defaultValue": null,
|
|
52
|
+
"description": "Called when a starter prompt is chosen."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "onStart",
|
|
56
|
+
"type": "(() => void)",
|
|
57
|
+
"required": false,
|
|
58
|
+
"defaultValue": null,
|
|
59
|
+
"description": "Called from the Start a conversation action, for opening an empty thread."
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"typeReferences": [
|
|
63
|
+
"Omit<\n ComponentProps<\"div\">,\n | \"children\"\n | \"open\"\n | \"unread\"\n | \"greeting\"\n | \"prompts\"\n | \"onToggle\"\n | \"onPick\"\n | \"onStart\"\n> & {\n /** Whether the panel is showing. The trigger icon crossfades either way. */\n open: boolean;\n /** Badge count on the closed bubble. Hidden at zero and while open. */\n unread: number;\n /** Opening line in the panel. */\n greeting: string;\n /** Ways in, so the first message does not have to be invented. */\n prompts: readonly string[];\n /** Called when the bubble is pressed. */\n onToggle?: () => void;\n /** Called when a starter prompt is chosen. */\n onPick?: (prompt: string) => void;\n /** Called from the Start a conversation action, for opening an empty thread. */\n onStart?: () => void;\n}"
|
|
64
|
+
],
|
|
65
|
+
"subcomponents": [],
|
|
66
|
+
"parts": [],
|
|
67
|
+
"variants": {},
|
|
68
|
+
"defaultVariants": {},
|
|
69
|
+
"tokensUsed": [
|
|
70
|
+
"--cue-bg",
|
|
71
|
+
"--cue-fg",
|
|
72
|
+
"--cue-fg-muted",
|
|
73
|
+
"--cue-fg-subtle",
|
|
74
|
+
"--cue-radius-overlay",
|
|
75
|
+
"--cue-radius-surface",
|
|
76
|
+
"--cue-surface-2",
|
|
77
|
+
"--cue-text-body",
|
|
78
|
+
"--cue-text-ui"
|
|
79
|
+
],
|
|
80
|
+
"summary": "The floating entry point, and the panel it opens into.",
|
|
81
|
+
"examples": [
|
|
82
|
+
{
|
|
83
|
+
"title": "Usage",
|
|
84
|
+
"code": "import { LauncherBubble } from \"@cueplusplus/ui/elements\";\n\n<LauncherBubble\n open={open}\n unread={2}\n greeting=\"Need a hand?\"\n prompts={prompts}\n onToggle={toggle}\n/>",
|
|
85
|
+
"language": "tsx"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"status": "todo-docs",
|
|
89
|
+
"url": "/docs/components/launcher-bubble",
|
|
90
|
+
"mdUrl": "/docs/components/launcher-bubble.md",
|
|
91
|
+
"jsonUrl": "/r/components/launcher-bubble.json",
|
|
92
|
+
"specimens": [
|
|
93
|
+
{
|
|
94
|
+
"title": "LauncherBubble",
|
|
95
|
+
"group": "elements-composer",
|
|
96
|
+
"components": [
|
|
97
|
+
"LauncherBubble"
|
|
98
|
+
],
|
|
99
|
+
"code": "<Specimens>\n <Specimen label=\"open\" wide>\n <LauncherBubble\n open={launcher}\n unread={2}\n greeting=\"Ask us about the venue\"\n prompts={[\"What is the rig?\", \"Can I bring my own desk?\", \"Who is the LX contact?\"]}\n onToggle={() => setLauncher((open) => !open)}\n onPick={() => setLauncher(false)}\n onStart={() => setLauncher(false)}\n />\n </Specimen>\n <Specimen label=\"closed, two waiting\" wide>\n <LauncherBubble\n open={false}\n unread={2}\n greeting=\"Ask us about the venue\"\n prompts={[\"What is the rig?\"]}\n />\n </Specimen>\n</Specimens>",
|
|
100
|
+
"note": "The floating entry point and the panel it opens into — the shape an assistant takes on somebody else's site. The badge counts unread and disappears the moment the panel is open, because a count of things you are currently looking at is noise. The starter prompts exist so the first message does not have to be invented by a visitor who has no idea what this thing knows.",
|
|
101
|
+
"interaction": "the bubble carries `aria-expanded` and its label changes with it (`Open the assistant` / `Close the assistant`); the two icons cross-fade in one grid cell so nothing reflows."
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"todo": true
|
|
105
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Link",
|
|
3
|
+
"slug": "link",
|
|
4
|
+
"group": "layout",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "A text link: accent on hover, no rule unless you ask for one.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "external",
|
|
12
|
+
"type": "boolean",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": "false",
|
|
15
|
+
"description": "Open in a new tab, mark the anchor `rel=\"noreferrer noopener\"` and append a\n`↗`. The glyph is not decoration: a link that replaces the user's context\nwithout warning is a WCAG 3.2.5 failure, and the arrow is the warning."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "render",
|
|
19
|
+
"type": "RenderProp<Record<string, unknown>>",
|
|
20
|
+
"required": false,
|
|
21
|
+
"defaultValue": null,
|
|
22
|
+
"description": "Replace the rendered element (Base UI render prop). Accepts an element —\n`render={<NextLink href=\"/x\" />}` — or a function returning one. This is\nhow the design system composes with a router without depending on one."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "variant",
|
|
26
|
+
"type": "\"plain\" | \"underline\"",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": "plain",
|
|
29
|
+
"description": ""
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"typeReferences": [
|
|
33
|
+
"React.ComponentPropsWithoutRef<\"a\">",
|
|
34
|
+
"VariantProps<typeof linkVariants>"
|
|
35
|
+
],
|
|
36
|
+
"subcomponents": [],
|
|
37
|
+
"parts": [],
|
|
38
|
+
"variants": {
|
|
39
|
+
"variant": [
|
|
40
|
+
"plain",
|
|
41
|
+
"underline"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"defaultVariants": {
|
|
45
|
+
"variant": "plain"
|
|
46
|
+
},
|
|
47
|
+
"tokensUsed": [
|
|
48
|
+
"--cue-accent",
|
|
49
|
+
"--cue-border",
|
|
50
|
+
"--cue-fg",
|
|
51
|
+
"--cue-font-mono",
|
|
52
|
+
"--cue-radius-control",
|
|
53
|
+
"--cue-space-1",
|
|
54
|
+
"--cue-text-micro"
|
|
55
|
+
],
|
|
56
|
+
"summary": "A text link: accent on hover, no rule unless you ask for one.",
|
|
57
|
+
"examples": [
|
|
58
|
+
{
|
|
59
|
+
"title": "Usage",
|
|
60
|
+
"code": "<Link href=\"/patch\">Patch</Link>\n<Link href=\"https://base-ui.com\" external variant=\"underline\">Base UI</Link>\n<Link render={<NextLink href=\"/cues\" />}>Cues</Link>",
|
|
61
|
+
"language": "tsx"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"status": "todo-docs",
|
|
65
|
+
"url": "/docs/components/link",
|
|
66
|
+
"mdUrl": "/docs/components/link.md",
|
|
67
|
+
"jsonUrl": "/r/components/link.json",
|
|
68
|
+
"specimens": [
|
|
69
|
+
{
|
|
70
|
+
"title": "Link",
|
|
71
|
+
"group": "layout",
|
|
72
|
+
"components": [
|
|
73
|
+
"Link"
|
|
74
|
+
],
|
|
75
|
+
"code": "<Specimens>\n <Specimen label=\"plain\">\n <Link href=\"#patch\">Open the patch</Link>\n </Specimen>\n <Specimen label=\"underline\">\n <Link href=\"#patch\" variant=\"underline\">\n Open the patch\n </Link>\n </Specimen>\n <Specimen label=\"external\">\n <Link href=\"https://cueplusplus.com\" external>\n cueplusplus.com\n </Link>\n </Specimen>\n</Specimens>",
|
|
76
|
+
"note": "Two variants. Links do not underline by default; the underline variant offsets by 4px so descenders survive.",
|
|
77
|
+
"interaction": "hover moves the ink to the accent."
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"todo": true
|
|
81
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "LiveRegionAnnouncer",
|
|
3
|
+
"slug": "live-region-announcer",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "One polite region, and a queue that makes it audible.\n\nThe element in this family with no visual design at all, and the one that\ndecides whether the rest of it can be used without a screen. An agent\ntranscript is a stream of state changes, and the naive wiring — an\n`aria-live` region bound to the current status — announces almost none of\nthem: polite announcements replace each other, so a region updated four times\na second speaks once and swallows the rest.\n\nSo this is a queue with four rules, all of them the reference's:\n\n- **Spacing.** One announcement every `spacing` milliseconds, so each is\n spoken instead of overwritten.\n- **Depth, oldest dropped.** A backlog behind a busy run is history; the\n newest five are what a reader needs.\n- **Paused while the page is hidden**, so a background tab does not read a\n run out over whatever the reader is actually doing, and paused on demand\n through `paused` while a modal has their attention. Both are in force from\n the first render rather than the first effect, so an announcer mounted into\n a hidden tab with a backlog does not spend a line of it learning where it\n is.\n- **The trailing space.** A screen reader ignores a live region set to the\n text it already holds; the same message twice is announced twice by\n appending a space to the second, which changes the string without changing\n a word of it.\n\nThe region itself is mounted empty and stays mounted. A live region added to\nthe document at the same moment as its text is a region most assistive\ntechnologies never announce, which is the most common way this fails in\npractice.\n\nWhat to say is the caller's: {@link ANNOUNCEMENTS } carries the nine\ntransitions the study found announced, as templates a console can extend or\ntranslate.\n\n**It is the surface's one speaker.** `TailStatus` is a `role=\"status\"` too,\nand a console that mounts both — which is the ordinary shape of an agent\nconsole — would have every state read out twice. So mounting this hands the\nspeaking to it: a `TailStatus` anywhere on the page notices (through\n{@link useAnnouncerPresent}) and renders as an ordinary row, keeping its words\non the screen and taking them out of the accessibility tree. Feed this the\ntransitions that row would have narrated, or set `announce` on the row to\ndecide the other way.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "messages",
|
|
12
|
+
"type": "readonly string[]",
|
|
13
|
+
"required": true,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "The log of things worth saying, oldest first. Everything that arrives at\nthe end of it after the announcer last looked is queued and read out in\norder.\n\nAn **append-only** list: the announcer remembers how much of it it has\nseen, so a list that is trimmed at the head loses the announcements that\nwere trimmed with it. Keep the run's log growing, or remount the announcer\nwith a new `key` when you start a new one."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "spacing",
|
|
19
|
+
"type": "number",
|
|
20
|
+
"required": false,
|
|
21
|
+
"defaultValue": "400",
|
|
22
|
+
"description": "Milliseconds between announcements. Defaults to `400`, the reference's own\nspacing, which is roughly how long a short phrase takes to speak.\n\nThis is the whole point of the component: a polite announcement that\narrives while another is being spoken replaces it, so an unspaced queue is\na queue most of which is never heard."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "depth",
|
|
26
|
+
"type": "number",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": "5",
|
|
29
|
+
"description": "How many announcements may wait at once. Defaults to `5`, and the **oldest**\nare dropped past it — five deep behind a busy run, the newest is the true\none and the backlog is history."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "paused",
|
|
33
|
+
"type": "boolean",
|
|
34
|
+
"required": false,
|
|
35
|
+
"defaultValue": "false",
|
|
36
|
+
"description": "Hold everything without dropping it: a modal is open, or the surface is\nbehind something a reader is working in. The queue drains from where it\nstopped when this goes back to `false`.\n\nA prop rather than an internal ref-count of open overlays, deliberately:\nthis library has its own portal and overlay contract, and an announcer with\na second opinion about what is on screen would be wrong exactly when it\nmattered."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "announceOnMount",
|
|
40
|
+
"type": "boolean",
|
|
41
|
+
"required": false,
|
|
42
|
+
"defaultValue": "false",
|
|
43
|
+
"description": "Announce the messages that are already in the list at mount. Defaults to\n`false` — the reference's \"skip the first observation\" guard, and the\nreason restoring a session does not read the whole transcript aloud.\n\nThe pause rules still hold over it: a backlog handed to an announcer that\nmounts into a hidden tab, or with `paused` already set, waits there rather\nthan spending its first line. Restoring a session into a background tab is\nthe case, and it is the one the rules exist for."
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"typeReferences": [
|
|
47
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
|
|
48
|
+
],
|
|
49
|
+
"subcomponents": [],
|
|
50
|
+
"parts": [],
|
|
51
|
+
"variants": {},
|
|
52
|
+
"defaultVariants": {},
|
|
53
|
+
"tokensUsed": [],
|
|
54
|
+
"summary": "One polite region, and a queue that makes it audible.",
|
|
55
|
+
"examples": [
|
|
56
|
+
{
|
|
57
|
+
"title": "Usage",
|
|
58
|
+
"code": "import { ANNOUNCEMENTS, LiveRegionAnnouncer } from \"@cueplusplus/ui/elements\";\n\n// One per surface, mounted for the life of the transcript.\n<LiveRegionAnnouncer messages={log} paused={dialogOpen} />\n// Composed with the transcript's live row: the row draws, this one speaks.\n<>\n <TailStatus action={TAIL_ACTIONS.searchingCode} detail=\"composer.tsx\" />\n <LiveRegionAnnouncer messages={log} />\n</>\n// The log is a caller's append-only list of what happened.\nsetLog((was) => [...was, ANNOUNCEMENTS.working]);",
|
|
59
|
+
"language": "tsx"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"status": "todo-docs",
|
|
63
|
+
"url": "/docs/components/live-region-announcer",
|
|
64
|
+
"mdUrl": "/docs/components/live-region-announcer.md",
|
|
65
|
+
"jsonUrl": "/r/components/live-region-announcer.json",
|
|
66
|
+
"specimens": [
|
|
67
|
+
{
|
|
68
|
+
"title": "LiveRegionAnnouncer",
|
|
69
|
+
"group": "elements",
|
|
70
|
+
"components": [
|
|
71
|
+
"LiveRegionAnnouncer"
|
|
72
|
+
],
|
|
73
|
+
"code": "<Specimens>\n <Specimen label=\"what a run says out loud\" wide>\n <div className=\"flex w-full max-w-md flex-col gap-(--cue-space-3)\">\n <LiveRegionAnnouncer messages={announced} />\n <Button\n size=\"sm\"\n className=\"self-start\"\n onClick={() =>\n setAnnounced((was) => [\n ...was,\n TRANSITIONS[was.length % TRANSITIONS.length] as string,\n ])\n }\n >\n Next transition\n </Button>\n <ol className=\"flex flex-col gap-(--cue-space-1) text-fg-muted text-(length:--cue-text-ui)\">\n {announced.length === 0 ? (\n <li className=\"text-fg-subtle\">Nothing announced yet.</li>\n ) : (\n announced.map((line, index) => (\n <li key={`${line}-${String(index)}`} className=\"truncate\">\n {line}\n </li>\n ))\n )}\n </ol>\n </div>\n </Specimen>\n <Specimen label=\"composed with the transcript's live row\" wide>\n {/*\n * The composition every agent console reaches for, and the one\n * that used to say everything twice: both of these are live\n * regions. Mounted together the row hands the speaking over — it\n * keeps its words on the screen and drops its `role=\"status\"`,\n * which is what `data-announces=\"false\"` on it says.\n */}\n <div className=\"flex w-full max-w-md flex-col gap-(--cue-space-3)\">\n <TailStatus\n action={announced.length === 0 ? TAIL_ACTIONS.thinking : TAIL_ACTIONS.running}\n detail=\"ola-patch --universe 3\"\n active={announced.length !== TRANSITIONS.length}\n />\n <LiveRegionAnnouncer messages={announced} />\n <p className=\"text-fg-subtle text-(length:--cue-text-ui)\">\n The row above is drawn, not announced: one region speaks for\n this surface and it is the queue.\n </p>\n </div>\n </Specimen>\n</Specimens>",
|
|
74
|
+
"note": "The element with no visual design at all, and the one that decides whether the rest of this family can be used without a screen. An agent transcript is a stream of state changes, and a live region wired straight to it announces almost none of them: polite announcements replace each other, so a region updated four times a second speaks once and swallows the rest. So it is a queue — 400ms of spacing, five deep with the oldest dropped, held while the page is hidden or a modal has the reader, and an identical sentence re-announced by appending a space, which changes the string without changing a word of it.",
|
|
75
|
+
"interaction": "press the button and nothing visible happens, which is the point — the list below is a mirror of what the region said, drawn only so the bench has something to look at. Press it twice quickly and the second announcement waits its 400ms rather than replacing the first; press it faster than five times and the oldest waiting one is dropped, because five deep behind a busy run the newest is the true one. The second specimen is the composition with TailStatus: that row is a role=status too, so mounting this takes the speaking off it — inspect the row and it carries data-announces=false and no role, which is how a console gets one voice instead of two."
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"todo": true
|
|
79
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "LogViewer",
|
|
3
|
+
"slug": "log-viewer",
|
|
4
|
+
"group": "instruments",
|
|
5
|
+
"importPath": "@cueplusplus/ui/instruments/log-viewer",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"@tanstack/react-virtual",
|
|
8
|
+
"anser"
|
|
9
|
+
],
|
|
10
|
+
"clientOnly": true,
|
|
11
|
+
"description": "A virtualised log tail: ANSI colour, level filters, and stick-to-bottom.\n\nThe four things a log pane has to get right, and the reasons each one is not\noptional:\n\n- **Virtualised.** Five thousand DOM rows is a frozen tab. Rows are fixed at\n the short control rung so the virtualiser never has to measure, which is\n also what keeps the scrollbar honest while lines stream in.\n- **ANSI as data, never as HTML.** `anser` will happily hand back a markup\n string, and the moment that reaches `dangerouslySetInnerHTML` any process\n that prints a `<script>` owns the console watching it. Colour arrives here\n as spans of *text* with resolved token colours (see `_ansi.ts`).\n- **Following is a mode, not a scroll.** While pinned to the bottom the view\n follows; scroll up and it stops and starts counting, so reading something\n is never fought by the stream. The count comes back as a pill, not as a\n jump.\n- **A cap.** An unbounded buffer is a memory leak with a progress bar. The\n head is dropped past `maxLines`.\n\nShips from `@cueplusplus/ui/instruments/log-viewer`: it needs\n`@tanstack/react-virtual` and `anser`, both optional peers, and neither\nbelongs in the bundle of an app that renders no logs.",
|
|
12
|
+
"props": [
|
|
13
|
+
{
|
|
14
|
+
"name": "lines",
|
|
15
|
+
"type": "readonly LogLine[]",
|
|
16
|
+
"required": true,
|
|
17
|
+
"defaultValue": null,
|
|
18
|
+
"description": "The buffer, oldest first."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "follow",
|
|
22
|
+
"type": "boolean",
|
|
23
|
+
"required": false,
|
|
24
|
+
"defaultValue": "true",
|
|
25
|
+
"description": "Stick to the bottom as lines arrive. Defaults to `true`."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "filters",
|
|
29
|
+
"type": "false | readonly LogLevel[]",
|
|
30
|
+
"required": false,
|
|
31
|
+
"defaultValue": null,
|
|
32
|
+
"description": "Which levels get a filter chip. Defaults to the levels present in `lines`;\n`false` hides the strip entirely. Levels with no chip are always shown."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "height",
|
|
36
|
+
"type": "number",
|
|
37
|
+
"required": true,
|
|
38
|
+
"defaultValue": null,
|
|
39
|
+
"description": "Viewer height in px at the 16px root."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "rowHeight",
|
|
43
|
+
"type": "number",
|
|
44
|
+
"required": false,
|
|
45
|
+
"defaultValue": null,
|
|
46
|
+
"description": "Row height in px. Defaults to the short control rung at the ambient density."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "maxLines",
|
|
50
|
+
"type": "number",
|
|
51
|
+
"required": false,
|
|
52
|
+
"defaultValue": "5000",
|
|
53
|
+
"description": "Cap on retained lines; the oldest are dropped. Defaults to `5000`."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "formatTimestamp",
|
|
57
|
+
"type": "((ts: number) => string)",
|
|
58
|
+
"required": false,
|
|
59
|
+
"defaultValue": "defaultTimestamp",
|
|
60
|
+
"description": "Render a line's timestamp. Defaults to a local `HH:MM:SS`."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "emptyLabel",
|
|
64
|
+
"type": "string",
|
|
65
|
+
"required": false,
|
|
66
|
+
"defaultValue": "No output",
|
|
67
|
+
"description": "What to say when there is nothing to show. Defaults to `\"No output\"`."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "newLinesLabel",
|
|
71
|
+
"type": "((count: number) => string)",
|
|
72
|
+
"required": false,
|
|
73
|
+
"defaultValue": "(count) => `${count} new line${count === 1 ? \"\" : \"s\"}`",
|
|
74
|
+
"description": "Label for the catch-up pill. Defaults to `\"3 new lines\"`."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "aria-label",
|
|
78
|
+
"type": "string",
|
|
79
|
+
"required": false,
|
|
80
|
+
"defaultValue": null,
|
|
81
|
+
"description": "Accessible name for the log region. Required in practice — name the stream."
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"typeReferences": [
|
|
85
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\" | \"onScroll\">"
|
|
86
|
+
],
|
|
87
|
+
"subcomponents": [],
|
|
88
|
+
"parts": [],
|
|
89
|
+
"variants": {},
|
|
90
|
+
"defaultVariants": {},
|
|
91
|
+
"tokensUsed": [
|
|
92
|
+
"--cue-accent",
|
|
93
|
+
"--cue-border",
|
|
94
|
+
"--cue-border-overlay",
|
|
95
|
+
"--cue-danger",
|
|
96
|
+
"--cue-fg",
|
|
97
|
+
"--cue-fg-muted",
|
|
98
|
+
"--cue-fg-subtle",
|
|
99
|
+
"--cue-font-mono",
|
|
100
|
+
"--cue-info",
|
|
101
|
+
"--cue-ok",
|
|
102
|
+
"--cue-pad-row-x",
|
|
103
|
+
"--cue-radius-control",
|
|
104
|
+
"--cue-radius-surface",
|
|
105
|
+
"--cue-space-2",
|
|
106
|
+
"--cue-space-3",
|
|
107
|
+
"--cue-space-4",
|
|
108
|
+
"--cue-sunken",
|
|
109
|
+
"--cue-surface-1",
|
|
110
|
+
"--cue-surface-2",
|
|
111
|
+
"--cue-text-label",
|
|
112
|
+
"--cue-warn"
|
|
113
|
+
],
|
|
114
|
+
"summary": "A virtualised log tail: ANSI colour, level filters, and stick-to-bottom.",
|
|
115
|
+
"examples": [
|
|
116
|
+
{
|
|
117
|
+
"title": "Usage",
|
|
118
|
+
"code": "<LogViewer aria-label=\"Build output\" height={320} lines={lines} />\n<LogViewer aria-label=\"Worker\" height={200} follow={false} filters={[\"warn\", \"error\"]} lines={lines} />",
|
|
119
|
+
"language": "tsx"
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"status": "todo-docs",
|
|
123
|
+
"url": "/docs/components/log-viewer",
|
|
124
|
+
"mdUrl": "/docs/components/log-viewer.md",
|
|
125
|
+
"jsonUrl": "/r/components/log-viewer.json",
|
|
126
|
+
"specimens": [
|
|
127
|
+
{
|
|
128
|
+
"title": "LogViewer",
|
|
129
|
+
"group": "instruments",
|
|
130
|
+
"components": [
|
|
131
|
+
"LogViewer"
|
|
132
|
+
],
|
|
133
|
+
"code": "<div className=\"flex w-full flex-col gap-(--cue-space-5)\">\n <LogViewer lines={LOG_LINES} height={220} follow />\n <LogViewer lines={[]} height={120} emptyLabel={COPY.empty.title} />\n</div>",
|
|
134
|
+
"note": "Virtualised rows at the small control height, ANSI decoded to text nodes (never innerHTML), level filter chips, and a stick-to-bottom scroller that offers a `N new lines` pill once you scroll away.",
|
|
135
|
+
"interaction": "the filter chips are toggles; the new-lines pill is a button that returns you to the tail."
|
|
136
|
+
}
|
|
137
|
+
],
|
|
138
|
+
"todo": true
|
|
139
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "MapAnswer",
|
|
3
|
+
"slug": "map-answer",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "A location answer: pins, a route between them, and the list they came from.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "pins",
|
|
12
|
+
"type": "readonly MapPin[]",
|
|
13
|
+
"required": true,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "Places in the answer, positioned as percentages so the element needs no tiles."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "activeId",
|
|
19
|
+
"type": "string",
|
|
20
|
+
"required": true,
|
|
21
|
+
"defaultValue": null,
|
|
22
|
+
"description": "Which pin is selected, in both the plot and the list."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "route",
|
|
26
|
+
"type": "boolean",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": null,
|
|
29
|
+
"description": "Draws a dashed path through the pins in order."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "onSelect",
|
|
33
|
+
"type": "((id: string) => void)",
|
|
34
|
+
"required": false,
|
|
35
|
+
"defaultValue": null,
|
|
36
|
+
"description": "Called when a pin or its list row is chosen. Both surfaces report the same id."
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"typeReferences": [
|
|
40
|
+
"Omit<\n ComponentProps<\"div\">,\n \"children\" | \"pins\" | \"activeId\" | \"route\" | \"onSelect\"\n> & {\n /** Places in the answer, positioned as percentages so the element needs no tiles. */\n pins: readonly MapPin[];\n /** Which pin is selected, in both the plot and the list. */\n activeId: string;\n /** Draws a dashed path through the pins in order. */\n route?: boolean;\n /** Called when a pin or its list row is chosen. Both surfaces report the same id. */\n onSelect?: (id: string) => void;\n}"
|
|
41
|
+
],
|
|
42
|
+
"subcomponents": [],
|
|
43
|
+
"parts": [],
|
|
44
|
+
"variants": {},
|
|
45
|
+
"defaultVariants": {},
|
|
46
|
+
"tokensUsed": [
|
|
47
|
+
"--cue-accent",
|
|
48
|
+
"--cue-bg",
|
|
49
|
+
"--cue-border",
|
|
50
|
+
"--cue-fg-muted",
|
|
51
|
+
"--cue-fg-subtle",
|
|
52
|
+
"--cue-radius-overlay",
|
|
53
|
+
"--cue-stream",
|
|
54
|
+
"--cue-surface-1",
|
|
55
|
+
"--cue-surface-3",
|
|
56
|
+
"--cue-text-body"
|
|
57
|
+
],
|
|
58
|
+
"summary": "A location answer: pins, a route between them, and the list they came from.",
|
|
59
|
+
"examples": [
|
|
60
|
+
{
|
|
61
|
+
"title": "Usage",
|
|
62
|
+
"code": "import { MapAnswer } from \"@cueplusplus/ui/elements\";\n\n<MapAnswer pins={pins} activeId=\"b\" route onSelect={setActive} />",
|
|
63
|
+
"language": "tsx"
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"status": "todo-docs",
|
|
67
|
+
"url": "/docs/components/map-answer",
|
|
68
|
+
"mdUrl": "/docs/components/map-answer.md",
|
|
69
|
+
"jsonUrl": "/r/components/map-answer.json",
|
|
70
|
+
"specimens": [
|
|
71
|
+
{
|
|
72
|
+
"title": "MapAnswer",
|
|
73
|
+
"group": "elements-knowledge",
|
|
74
|
+
"components": [
|
|
75
|
+
"MapAnswer"
|
|
76
|
+
],
|
|
77
|
+
"code": "<Specimens>\n <Specimen label=\"three houses, routed\" wide>\n <MapAnswer pins={PINS} activeId={pin} route onSelect={setPin} />\n </Specimen>\n <Specimen label=\"no route\" wide>\n <MapAnswer pins={PINS.slice(0, 2)} activeId=\"studio\" />\n </Specimen>\n</Specimens>",
|
|
78
|
+
"note": "A location answer as a plan and a list at once: pins on a ruled ground, the same pins as rows underneath, and one selection driving both. The grid is drawn, not tiled — there is no map provider here, and `x`/`y` are percentages the caller decides.",
|
|
79
|
+
"interaction": "pin and row are both buttons for the same id, and both carry `aria-current`; the pin's own label is what a screen reader gets, since the plan itself is aria-hidden."
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"todo": true
|
|
83
|
+
}
|