@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,177 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "CommandPalette",
|
|
3
|
+
"slug": "command-palette",
|
|
4
|
+
"group": "overlays",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "The ⌘K surface: type a few letters, run a command.\n\nA Base UI `Combobox` living inside a Base UI `Dialog`, which is what buys the\ntwo halves nobody hand-rolls correctly. The dialog gives a real focus trap,\nfocus restoration and outside-press dismissal; the combobox gives\n`role=\"listbox\"`, `aria-activedescendant` tracking the highlighted row, and\narrow/Home/End/Enter navigation that a screen reader announces — the gap in\nevery home-grown palette, snuffle's included, where the list is a `div` of\nbuttons and the input never says which one Enter would run.\n\nMatching is debounced (see {@link CommandPaletteProps.debounceMs}) while the\nfield is not, and the first surviving command is highlighted automatically, so\n\"type three letters, press Enter\" always does the obvious thing.\n\nThe whole thing is portalled through the system's portal contract, so a\npalette opened from an ultra-compact island renders at that density.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "items",
|
|
12
|
+
"type": "readonly CommandPaletteItem[]",
|
|
13
|
+
"required": true,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "Every command the palette can run, in the order they should appear."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "onSelect",
|
|
19
|
+
"type": "(item: CommandPaletteItem) => void",
|
|
20
|
+
"required": true,
|
|
21
|
+
"defaultValue": null,
|
|
22
|
+
"description": "Called with the command the user ran. The palette closes itself afterwards."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "open",
|
|
26
|
+
"type": "boolean",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": null,
|
|
29
|
+
"description": "Open state when controlled. Pass with `onOpenChange`."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "defaultOpen",
|
|
33
|
+
"type": "boolean",
|
|
34
|
+
"required": false,
|
|
35
|
+
"defaultValue": "false",
|
|
36
|
+
"description": "Initial open state when uncontrolled. Defaults to `false`."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "onOpenChange",
|
|
40
|
+
"type": "((open: boolean) => void)",
|
|
41
|
+
"required": false,
|
|
42
|
+
"defaultValue": null,
|
|
43
|
+
"description": "Called whenever the palette wants to open or close."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "placeholder",
|
|
47
|
+
"type": "string",
|
|
48
|
+
"required": false,
|
|
49
|
+
"defaultValue": "Type a command",
|
|
50
|
+
"description": "Shown while the query is empty. Defaults to `\"Type a command\"`."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "emptyMessage",
|
|
54
|
+
"type": "ReactNode",
|
|
55
|
+
"required": false,
|
|
56
|
+
"defaultValue": "No commands match",
|
|
57
|
+
"description": "Shown in place of the list when nothing matches. Defaults to `\"No commands match\"`."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "label",
|
|
61
|
+
"type": "string",
|
|
62
|
+
"required": false,
|
|
63
|
+
"defaultValue": "Command palette",
|
|
64
|
+
"description": "Accessible name for the dialog and the input. Defaults to `\"Command palette\"`."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "footer",
|
|
68
|
+
"type": "ReactNode",
|
|
69
|
+
"required": false,
|
|
70
|
+
"defaultValue": "(\n <>\n <span>↑↓ navigate</span>\n <span>⏎ run</span>\n <span>esc close</span>\n </>\n)",
|
|
71
|
+
"description": "The hint strip along the foot. Pass `null` to drop it."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "debounceMs",
|
|
75
|
+
"type": "number",
|
|
76
|
+
"required": false,
|
|
77
|
+
"defaultValue": "200",
|
|
78
|
+
"description": "Quiet period in ms before the query is re-matched. Defaults to `200`.\n\nThe field itself never waits — only the matching does — so typing stays at\none frame per keystroke however long the command list is."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "filter",
|
|
82
|
+
"type": "((items: readonly CommandPaletteItem[], query: string) => CommandPaletteItem[])",
|
|
83
|
+
"required": false,
|
|
84
|
+
"defaultValue": "defaultFilter",
|
|
85
|
+
"description": "Replace the matcher. Defaults to a case-insensitive substring match over\n`label` and `keywords`. Return the surviving commands in display order."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "className",
|
|
89
|
+
"type": "string",
|
|
90
|
+
"required": false,
|
|
91
|
+
"defaultValue": null,
|
|
92
|
+
"description": "Extra classes for the palette surface."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "backdropClassName",
|
|
96
|
+
"type": "string",
|
|
97
|
+
"required": false,
|
|
98
|
+
"defaultValue": null,
|
|
99
|
+
"description": "Extra classes for the scrim behind it."
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"typeReferences": [],
|
|
103
|
+
"subcomponents": [],
|
|
104
|
+
"parts": [],
|
|
105
|
+
"variants": {},
|
|
106
|
+
"defaultVariants": {},
|
|
107
|
+
"tokensUsed": [
|
|
108
|
+
"--cue-accent-soft",
|
|
109
|
+
"--cue-border",
|
|
110
|
+
"--cue-border-overlay",
|
|
111
|
+
"--cue-control-lg",
|
|
112
|
+
"--cue-control-md",
|
|
113
|
+
"--cue-control-sm",
|
|
114
|
+
"--cue-fg",
|
|
115
|
+
"--cue-fg-muted",
|
|
116
|
+
"--cue-fg-subtle",
|
|
117
|
+
"--cue-font-mono",
|
|
118
|
+
"--cue-icon-md",
|
|
119
|
+
"--cue-icon-sm",
|
|
120
|
+
"--cue-radius-control",
|
|
121
|
+
"--cue-radius-overlay",
|
|
122
|
+
"--cue-scrim",
|
|
123
|
+
"--cue-space-1",
|
|
124
|
+
"--cue-space-2",
|
|
125
|
+
"--cue-space-3",
|
|
126
|
+
"--cue-space-4",
|
|
127
|
+
"--cue-sunken",
|
|
128
|
+
"--cue-surface-1",
|
|
129
|
+
"--cue-surface-2",
|
|
130
|
+
"--cue-text-body",
|
|
131
|
+
"--cue-text-emphasis",
|
|
132
|
+
"--cue-text-label",
|
|
133
|
+
"--cue-text-micro",
|
|
134
|
+
"--cue-text-ui"
|
|
135
|
+
],
|
|
136
|
+
"summary": "The keyboard entry point: type, filter, run.",
|
|
137
|
+
"examples": [
|
|
138
|
+
{
|
|
139
|
+
"title": "Wired to a shortcut",
|
|
140
|
+
"code": "<CommandPalette\n open={open}\n onOpenChange={setOpen}\n items={[\n { id: \"blackout\", label: \"Blackout\", group: \"Transport\", keywords: [\"panic\"] },\n { id: \"patch\", label: \"Open patch\", group: \"Navigate\" },\n ]}\n onSelect={(item) => run(item.id)}\n/>",
|
|
141
|
+
"language": "tsx"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"title": "Usage",
|
|
145
|
+
"code": "<CommandPalette\n open={open}\n onOpenChange={setOpen}\n items={[\n { id: \"go\", label: \"Go\", group: \"Playback\", hint: <Kbd>⏎</Kbd> },\n { id: \"patch\", label: \"Patch fixture\", group: \"Patch\", keywords: [\"dmx\", \"address\"] },\n ]}\n onSelect={(command) => run(command.id)}\n/>",
|
|
146
|
+
"language": "tsx"
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"status": "stable",
|
|
150
|
+
"url": "/docs/components/command-palette",
|
|
151
|
+
"mdUrl": "/docs/components/command-palette.md",
|
|
152
|
+
"jsonUrl": "/r/components/command-palette.json",
|
|
153
|
+
"whenToUse": [
|
|
154
|
+
"An app with more commands than a toolbar can hold.",
|
|
155
|
+
"Giving power users one shortcut that reaches everything, usually Cmd/Ctrl-K."
|
|
156
|
+
],
|
|
157
|
+
"whenNotToUse": [
|
|
158
|
+
"Choosing a value in a form. Use `Combobox`.",
|
|
159
|
+
"As the only route to a command. Everything in the palette should also be reachable in the UI."
|
|
160
|
+
],
|
|
161
|
+
"commonMistakes": [
|
|
162
|
+
"Re-sorting `items` per keystroke. Commands keep the order they are given, and groups keep the order they first appear in.",
|
|
163
|
+
"Debouncing the field itself. Only the matching waits; the input stays at one frame per keystroke."
|
|
164
|
+
],
|
|
165
|
+
"specimens": [
|
|
166
|
+
{
|
|
167
|
+
"title": "CommandPalette",
|
|
168
|
+
"group": "overlays",
|
|
169
|
+
"components": [
|
|
170
|
+
"CommandPalette"
|
|
171
|
+
],
|
|
172
|
+
"code": "<Specimens>\n <Specimen label=\"trigger\">\n <Button onClick={() => setPaletteOpen(true)}>\n Open palette <Kbd>⌘K</Kbd>\n </Button>\n </Specimen>\n <Specimen label=\"last command\">\n <Chip tone={lastCommand === null ? \"neutral\" : \"accent\"}>{lastCommand ?? \"none\"}</Chip>\n </Specimen>\n</Specimens>\n<CommandPalette\n items={PALETTE_ITEMS}\n open={paletteOpen}\n onOpenChange={setPaletteOpen}\n onSelect={(item) => setLastCommand(item.label)}\n placeholder=\"Run a command\"\n emptyMessage={COPY.empty.title}\n footer={\n <span className=\"flex items-center gap-(--cue-space-2)\">\n <Kbd>↑</Kbd>\n <Kbd>↓</Kbd> to move\n <Kbd>↵</Kbd> to run\n </span>\n }\n/>",
|
|
173
|
+
"note": "A combobox inside a dialog: grouped items, a 200 ms debounce, full arrow-key navigation and `aria-activedescendant` on the input.",
|
|
174
|
+
"interaction": "the whole list is reachable from the keyboard without ever moving DOM focus off the field."
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "CompactionRow",
|
|
3
|
+
"slug": "compaction-row",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "The rule that says the conversation was compacted, and by how much.\n\nA `role=\"separator\"` like {@link TimeBoundary }, because that is what it is:\nthe transcript above it is not the transcript below it any more. What makes\nit worth a component rather than a line of prose is the pair of numbers —\nbefore and after, on both axes — since \"compacted\" alone tells a reader\nnothing they can act on, while `128k → 24k tokens · 214 → 31 messages` tells\nthem why the model stopped remembering the thing they mentioned an hour ago.\n\nFive states, which is two more than most implementations have and exactly the\ntwo that matter: a compaction that **failed** leaves the window full, and one\nthat was **skipped** leaves it full on purpose. Both are the states a reader\nmeets when something is about to go wrong, and both are the states a UI that\nonly draws the happy path renders as nothing at all.\n\nThe numbers render as far as they are known. While `started`, pass the before\nfigures and no after ones and the row reads `128k tokens · 214 messages`; the\narrows arrive with the answer.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "state",
|
|
14
|
+
"type": "\"failed\" | \"started\" | \"completed\" | \"cancelled\" | \"skipped\"",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "Where the compaction got to. See `COMPACTION_STATES`."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "tokensBefore",
|
|
21
|
+
"type": "number",
|
|
22
|
+
"required": false,
|
|
23
|
+
"defaultValue": null,
|
|
24
|
+
"description": "Tokens in the window before it ran."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "tokensAfter",
|
|
28
|
+
"type": "number",
|
|
29
|
+
"required": false,
|
|
30
|
+
"defaultValue": null,
|
|
31
|
+
"description": "Tokens after. Omit while it is running, or when it did not finish."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "messagesBefore",
|
|
35
|
+
"type": "number",
|
|
36
|
+
"required": false,
|
|
37
|
+
"defaultValue": null,
|
|
38
|
+
"description": "Messages in the window before it ran."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "messagesAfter",
|
|
42
|
+
"type": "number",
|
|
43
|
+
"required": false,
|
|
44
|
+
"defaultValue": null,
|
|
45
|
+
"description": "Messages after. Omit while it is running, or when it did not finish."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "label",
|
|
49
|
+
"type": "string",
|
|
50
|
+
"required": false,
|
|
51
|
+
"defaultValue": null,
|
|
52
|
+
"description": "What the rule says, replacing the one `COMPACTION_LABELS` supplies for this\nstate."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "reason",
|
|
56
|
+
"type": "string",
|
|
57
|
+
"required": false,
|
|
58
|
+
"defaultValue": null,
|
|
59
|
+
"description": "Why, for the two states that owe an answer: `context window still under\n60%`, `the summariser refused`. Roo's rule — a compaction that did not\nhappen, or that lost something, should say so in words rather than leave a\nreader to infer it from a number that did not move."
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"typeReferences": [
|
|
63
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
|
|
64
|
+
],
|
|
65
|
+
"subcomponents": [],
|
|
66
|
+
"parts": [],
|
|
67
|
+
"variants": {},
|
|
68
|
+
"defaultVariants": {},
|
|
69
|
+
"tokensUsed": [
|
|
70
|
+
"--cue-border",
|
|
71
|
+
"--cue-danger",
|
|
72
|
+
"--cue-fg-subtle",
|
|
73
|
+
"--cue-stream"
|
|
74
|
+
],
|
|
75
|
+
"summary": "The rule that says the conversation was compacted, and by how much.",
|
|
76
|
+
"examples": [
|
|
77
|
+
{
|
|
78
|
+
"title": "Usage",
|
|
79
|
+
"code": "import { CompactionRow } from \"@cueplusplus/ui/elements\";\n\n<CompactionRow\n state=\"completed\"\n tokensBefore={128_000}\n tokensAfter={24_000}\n messagesBefore={214}\n messagesAfter={31}\n/>\n<CompactionRow state=\"skipped\" reason=\"context window still under 60%\" />",
|
|
80
|
+
"language": "tsx"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"status": "todo-docs",
|
|
84
|
+
"url": "/docs/components/compaction-row",
|
|
85
|
+
"mdUrl": "/docs/components/compaction-row.md",
|
|
86
|
+
"jsonUrl": "/r/components/compaction-row.json",
|
|
87
|
+
"specimens": [
|
|
88
|
+
{
|
|
89
|
+
"title": "CompactionRow",
|
|
90
|
+
"group": "elements-thread",
|
|
91
|
+
"components": [
|
|
92
|
+
"CompactionRow"
|
|
93
|
+
],
|
|
94
|
+
"code": "<Specimens>\n <Specimen label=\"started\" wide>\n <div className=\"w-full max-w-md\">\n <CompactionRow state=\"started\" tokensBefore={128_000} messagesBefore={214} />\n </div>\n </Specimen>\n <Specimen label=\"completed\" wide>\n <div className=\"w-full max-w-md\">\n <CompactionRow\n state=\"completed\"\n tokensBefore={128_000}\n tokensAfter={24_000}\n messagesBefore={214}\n messagesAfter={31}\n />\n </div>\n </Specimen>\n <Specimen label=\"failed\" wide>\n <div className=\"w-full max-w-md\">\n <CompactionRow\n state=\"failed\"\n tokensBefore={128_000}\n reason=\"the summariser refused\"\n />\n </div>\n </Specimen>\n <Specimen label=\"cancelled\" wide>\n <div className=\"w-full max-w-md\">\n <CompactionRow state=\"cancelled\" tokensBefore={128_000} />\n </div>\n </Specimen>\n <Specimen label=\"skipped\" wide>\n <div className=\"w-full max-w-md\">\n <CompactionRow state=\"skipped\" reason=\"context window still under 60%\" />\n </div>\n </Specimen>\n</Specimens>",
|
|
95
|
+
"note": "A rule like TimeBoundary, because that is what it is: the transcript above it is not the transcript below it any more. What makes it a component is the pair of numbers on both axes — 'compacted' alone tells a reader nothing they can act on, while 128k → 24k tokens · 214 → 31 messages tells them why the model stopped remembering the thing they mentioned an hour ago. Five states, which is two more than most implementations have and exactly the two that matter: failed leaves the window full, and skipped leaves it full on purpose.",
|
|
96
|
+
"interaction": "none. The whole rule is one accessible name, because a separator announces its label and never its children."
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
"todo": true
|
|
100
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ComparisonCard",
|
|
3
|
+
"slug": "comparison-card",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "Two options weighed side by side, with the pick named and argued.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "traitLabels",
|
|
14
|
+
"type": "readonly string[]",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "The dimensions compared, in order. Used as the fallback label when an option lacks\na trait."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "options",
|
|
21
|
+
"type": "readonly ComparisonOption[]",
|
|
22
|
+
"required": true,
|
|
23
|
+
"defaultValue": null,
|
|
24
|
+
"description": "Two or three options. More than that wants a table, not a comparison."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "recommendedId",
|
|
28
|
+
"type": "string",
|
|
29
|
+
"required": true,
|
|
30
|
+
"defaultValue": null,
|
|
31
|
+
"description": "Which option is the pick. It is tinted and labelled rather than merely ordered first."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "reason",
|
|
35
|
+
"type": "string",
|
|
36
|
+
"required": true,
|
|
37
|
+
"defaultValue": null,
|
|
38
|
+
"description": "Why that one, in the user's terms. A comparison without a recommendation is an\nunanswered question."
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"typeReferences": [
|
|
42
|
+
"Omit<\n ComponentProps<\"div\">,\n \"children\" | \"traitLabels\" | \"options\" | \"recommendedId\" | \"reason\"\n> & {\n /**\n * The dimensions compared, in order. Used as the fallback label when an option lacks\n * a trait.\n */\n traitLabels: readonly string[];\n /** Two or three options. More than that wants a table, not a comparison. */\n options: readonly ComparisonOption[];\n /** Which option is the pick. It is tinted and labelled rather than merely ordered first. */\n recommendedId: string;\n /**\n * Why that one, in the user's terms. A comparison without a recommendation is an\n * unanswered question.\n */\n reason: string;\n}"
|
|
43
|
+
],
|
|
44
|
+
"subcomponents": [],
|
|
45
|
+
"parts": [],
|
|
46
|
+
"variants": {},
|
|
47
|
+
"defaultVariants": {},
|
|
48
|
+
"tokensUsed": [
|
|
49
|
+
"--cue-fg-muted",
|
|
50
|
+
"--cue-fg-subtle",
|
|
51
|
+
"--cue-ok",
|
|
52
|
+
"--cue-radius-overlay",
|
|
53
|
+
"--cue-radius-surface",
|
|
54
|
+
"--cue-stream",
|
|
55
|
+
"--cue-text-body",
|
|
56
|
+
"--cue-text-ui"
|
|
57
|
+
],
|
|
58
|
+
"summary": "Two options weighed side by side, with the pick named and argued.",
|
|
59
|
+
"examples": [
|
|
60
|
+
{
|
|
61
|
+
"title": "Usage",
|
|
62
|
+
"code": "import { ComparisonCard } from \"@cueplusplus/ui/elements\";\n\n<ComparisonCard\n traitLabels={traits}\n options={options}\n recommendedId=\"local\"\n reason=\"You already hold messages in your own store.\"\n/>",
|
|
63
|
+
"language": "tsx"
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"status": "todo-docs",
|
|
67
|
+
"url": "/docs/components/comparison-card",
|
|
68
|
+
"mdUrl": "/docs/components/comparison-card.md",
|
|
69
|
+
"jsonUrl": "/r/components/comparison-card.json",
|
|
70
|
+
"specimens": [
|
|
71
|
+
{
|
|
72
|
+
"title": "ComparisonCard",
|
|
73
|
+
"group": "elements-knowledge",
|
|
74
|
+
"components": [
|
|
75
|
+
"ComparisonCard"
|
|
76
|
+
],
|
|
77
|
+
"code": "<Specimens>\n <Specimen label=\"the ESPRITE picked\" wide>\n <ComparisonCard\n traitLabels={[\"Output\", \"Power\", \"Stock\", \"Shutters\"]}\n options={OPTIONS}\n recommendedId=\"esprite\"\n reason=\"The ESPRITE clears the wash at 8.4 m with zoom to spare; the S4's fixed 26° needs a second bar.\"\n />\n </Specimen>\n <Specimen label=\"the other way round\" wide>\n <ComparisonCard\n traitLabels={[\"Output\", \"Power\", \"Stock\", \"Shutters\"]}\n options={OPTIONS}\n recommendedId=\"s4\"\n reason=\"On the power installed, six S4s fit the FOH leg with 8 A to spare; six ESPRITEs do not.\"\n />\n </Specimen>\n</Specimens>",
|
|
78
|
+
"note": "Two options side by side with the pick named, argued, and tinted in the streaming hue — not left for the reader to infer from a longer column. A trait that is `false` collapses to the label in grey with a minus, so the absence lines up with the presences instead of leaving a hole.",
|
|
79
|
+
"interaction": "none. It is a read-only comparison; choosing is `RecommendationCard`'s job, one bench along."
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"todo": true
|
|
83
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ComposerActions",
|
|
3
|
+
"slug": "composer-actions",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "One cluster of controls in the toolbar. Two of them, one at each end.",
|
|
11
|
+
"props": [],
|
|
12
|
+
"typeReferences": [
|
|
13
|
+
"ComponentProps<\"div\">"
|
|
14
|
+
],
|
|
15
|
+
"subcomponents": [],
|
|
16
|
+
"parts": [],
|
|
17
|
+
"variants": {},
|
|
18
|
+
"defaultVariants": {},
|
|
19
|
+
"tokensUsed": [
|
|
20
|
+
"--cue-accent",
|
|
21
|
+
"--cue-danger",
|
|
22
|
+
"--cue-fg",
|
|
23
|
+
"--cue-fg-muted",
|
|
24
|
+
"--cue-fg-subtle",
|
|
25
|
+
"--cue-font-mono",
|
|
26
|
+
"--cue-ok",
|
|
27
|
+
"--cue-radius-control",
|
|
28
|
+
"--cue-radius-overlay",
|
|
29
|
+
"--cue-radius-surface",
|
|
30
|
+
"--cue-stream",
|
|
31
|
+
"--cue-surface-1",
|
|
32
|
+
"--cue-surface-2",
|
|
33
|
+
"--cue-surface-3",
|
|
34
|
+
"--cue-text-body",
|
|
35
|
+
"--cue-text-emphasis",
|
|
36
|
+
"--cue-text-label",
|
|
37
|
+
"--cue-text-micro",
|
|
38
|
+
"--cue-text-ui"
|
|
39
|
+
],
|
|
40
|
+
"summary": "One cluster of controls in the toolbar.",
|
|
41
|
+
"examples": [],
|
|
42
|
+
"status": "todo-docs",
|
|
43
|
+
"url": "/docs/components/composer-actions",
|
|
44
|
+
"mdUrl": "/docs/components/composer-actions.md",
|
|
45
|
+
"jsonUrl": "/r/components/composer-actions.json",
|
|
46
|
+
"specimens": [
|
|
47
|
+
{
|
|
48
|
+
"title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
|
|
49
|
+
"group": "elements-composer",
|
|
50
|
+
"components": [
|
|
51
|
+
"ElementsComposer",
|
|
52
|
+
"ComposerBar",
|
|
53
|
+
"ComposerInput",
|
|
54
|
+
"ComposerToolbar",
|
|
55
|
+
"ComposerActions",
|
|
56
|
+
"ComposerAttachButton",
|
|
57
|
+
"ComposerSend"
|
|
58
|
+
],
|
|
59
|
+
"code": "<Specimens>\n <Specimen label=\"empty\" wide>\n <ElementsComposer>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value=\"\"\n placeholder=\"Ask about the rig\"\n readOnly\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton onClick={() => undefined} />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming={false} idle />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n\n <Specimen label=\"typed\" wide>\n <ElementsComposer>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value={message}\n placeholder=\"Ask about the rig\"\n onChange={(event) => setMessage(event.target.value)}\n onSubmit={() => setMessage(\"\")}\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton onClick={() => undefined} />\n <ComposerModelTrigger model={model} open={false} />\n </ComposerActions>\n <ComposerActions>\n <ComposerContext usage={USAGE} />\n <ComposerVoiceButton active={false} />\n <ComposerSend streaming={false} idle={message === \"\"} />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n\n <Specimen label=\"streaming, file over the bar\" wide>\n <ElementsComposer>\n <ComposerBar dragActive>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value=\"\"\n placeholder=\"Drop the truss drawing here\"\n readOnly\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming idle={false} />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n</Specimens>",
|
|
60
|
+
"note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
|
|
61
|
+
"interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"todo": true
|
|
65
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ComposerAttachButton",
|
|
3
|
+
"slug": "composer-attach-button",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "The paperclip, as a plus. Disabled when no handler is given, rather than rendering a\ncontrol that does nothing.",
|
|
11
|
+
"props": [],
|
|
12
|
+
"typeReferences": [
|
|
13
|
+
"Omit<ComponentProps<\"button\">, \"children\">"
|
|
14
|
+
],
|
|
15
|
+
"subcomponents": [],
|
|
16
|
+
"parts": [],
|
|
17
|
+
"variants": {},
|
|
18
|
+
"defaultVariants": {},
|
|
19
|
+
"tokensUsed": [
|
|
20
|
+
"--cue-accent",
|
|
21
|
+
"--cue-danger",
|
|
22
|
+
"--cue-fg",
|
|
23
|
+
"--cue-fg-muted",
|
|
24
|
+
"--cue-fg-subtle",
|
|
25
|
+
"--cue-font-mono",
|
|
26
|
+
"--cue-ok",
|
|
27
|
+
"--cue-radius-control",
|
|
28
|
+
"--cue-radius-overlay",
|
|
29
|
+
"--cue-radius-surface",
|
|
30
|
+
"--cue-stream",
|
|
31
|
+
"--cue-surface-1",
|
|
32
|
+
"--cue-surface-2",
|
|
33
|
+
"--cue-surface-3",
|
|
34
|
+
"--cue-text-body",
|
|
35
|
+
"--cue-text-emphasis",
|
|
36
|
+
"--cue-text-label",
|
|
37
|
+
"--cue-text-micro",
|
|
38
|
+
"--cue-text-ui"
|
|
39
|
+
],
|
|
40
|
+
"summary": "The paperclip, as a plus.",
|
|
41
|
+
"examples": [],
|
|
42
|
+
"status": "todo-docs",
|
|
43
|
+
"url": "/docs/components/composer-attach-button",
|
|
44
|
+
"mdUrl": "/docs/components/composer-attach-button.md",
|
|
45
|
+
"jsonUrl": "/r/components/composer-attach-button.json",
|
|
46
|
+
"specimens": [
|
|
47
|
+
{
|
|
48
|
+
"title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
|
|
49
|
+
"group": "elements-composer",
|
|
50
|
+
"components": [
|
|
51
|
+
"ElementsComposer",
|
|
52
|
+
"ComposerBar",
|
|
53
|
+
"ComposerInput",
|
|
54
|
+
"ComposerToolbar",
|
|
55
|
+
"ComposerActions",
|
|
56
|
+
"ComposerAttachButton",
|
|
57
|
+
"ComposerSend"
|
|
58
|
+
],
|
|
59
|
+
"code": "<Specimens>\n <Specimen label=\"empty\" wide>\n <ElementsComposer>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value=\"\"\n placeholder=\"Ask about the rig\"\n readOnly\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton onClick={() => undefined} />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming={false} idle />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n\n <Specimen label=\"typed\" wide>\n <ElementsComposer>\n <ComposerBar>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value={message}\n placeholder=\"Ask about the rig\"\n onChange={(event) => setMessage(event.target.value)}\n onSubmit={() => setMessage(\"\")}\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton onClick={() => undefined} />\n <ComposerModelTrigger model={model} open={false} />\n </ComposerActions>\n <ComposerActions>\n <ComposerContext usage={USAGE} />\n <ComposerVoiceButton active={false} />\n <ComposerSend streaming={false} idle={message === \"\"} />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n\n <Specimen label=\"streaming, file over the bar\" wide>\n <ElementsComposer>\n <ComposerBar dragActive>\n <ComposerInput\n aria-label=\"Ask about the rig\"\n value=\"\"\n placeholder=\"Drop the truss drawing here\"\n readOnly\n />\n <ComposerToolbar>\n <ComposerActions>\n <ComposerAttachButton />\n </ComposerActions>\n <ComposerActions>\n <ComposerSend streaming idle={false} />\n </ComposerActions>\n </ComposerToolbar>\n </ComposerBar>\n </ElementsComposer>\n </Specimen>\n</Specimens>",
|
|
60
|
+
"note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
|
|
61
|
+
"interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"todo": true
|
|
65
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ComposerAttachmentChip",
|
|
3
|
+
"slug": "composer-attachment-chip",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "One attached file as a chip: an icon for its kind, its name and size, and — while it\nuploads — a progress hairline along the bottom edge. A finished one offers remove, a\nfailed one says so in its meta line.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "attachment",
|
|
14
|
+
"type": "ComposerAttachment",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "The file this chip stands for."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "onRemove",
|
|
21
|
+
"type": "((name: string) => void)",
|
|
22
|
+
"required": false,
|
|
23
|
+
"defaultValue": null,
|
|
24
|
+
"description": "Called with the attachment's name. Omit it and a finished chip shows a tick\ninstead of a remove button."
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"typeReferences": [
|
|
28
|
+
"Omit<ComponentProps<\"div\">, \"children\"> & {\n /** The file this chip stands for. */\n attachment: ComposerAttachment;\n /**\n * Called with the attachment's name. Omit it and a finished chip shows a tick\n * instead of a remove button.\n */\n onRemove?: (name: string) => void;\n}"
|
|
29
|
+
],
|
|
30
|
+
"subcomponents": [],
|
|
31
|
+
"parts": [],
|
|
32
|
+
"variants": {},
|
|
33
|
+
"defaultVariants": {},
|
|
34
|
+
"tokensUsed": [
|
|
35
|
+
"--cue-accent",
|
|
36
|
+
"--cue-danger",
|
|
37
|
+
"--cue-fg",
|
|
38
|
+
"--cue-fg-muted",
|
|
39
|
+
"--cue-fg-subtle",
|
|
40
|
+
"--cue-font-mono",
|
|
41
|
+
"--cue-ok",
|
|
42
|
+
"--cue-radius-control",
|
|
43
|
+
"--cue-radius-overlay",
|
|
44
|
+
"--cue-radius-surface",
|
|
45
|
+
"--cue-stream",
|
|
46
|
+
"--cue-surface-1",
|
|
47
|
+
"--cue-surface-2",
|
|
48
|
+
"--cue-surface-3",
|
|
49
|
+
"--cue-text-body",
|
|
50
|
+
"--cue-text-emphasis",
|
|
51
|
+
"--cue-text-label",
|
|
52
|
+
"--cue-text-micro",
|
|
53
|
+
"--cue-text-ui"
|
|
54
|
+
],
|
|
55
|
+
"summary": "One attached file as a chip: an icon for its kind, its name and size, and — while it uploads — a progress hairline along the bottom edge.",
|
|
56
|
+
"examples": [],
|
|
57
|
+
"status": "todo-docs",
|
|
58
|
+
"url": "/docs/components/composer-attachment-chip",
|
|
59
|
+
"mdUrl": "/docs/components/composer-attachment-chip.md",
|
|
60
|
+
"jsonUrl": "/r/components/composer-attachment-chip.json",
|
|
61
|
+
"specimens": [
|
|
62
|
+
{
|
|
63
|
+
"title": "ComposerAttachments / ComposerAttachmentChip",
|
|
64
|
+
"group": "elements-composer",
|
|
65
|
+
"components": [
|
|
66
|
+
"ComposerAttachments",
|
|
67
|
+
"ComposerAttachmentChip"
|
|
68
|
+
],
|
|
69
|
+
"code": "<Specimens>\n <Specimen label=\"three states\" wide>\n <ComposerAttachments>\n {chips.map((attachment) => (\n <ComposerAttachmentChip\n key={attachment.name}\n attachment={attachment}\n onRemove={(name) => setAttached((current) => [...current, name])}\n />\n ))}\n </ComposerAttachments>\n </Specimen>\n <Specimen label=\"one, settled, nothing to remove\" wide>\n <ComposerAttachments>\n <ComposerAttachmentChip\n attachment={{\n name: \"front-truss.pdf\",\n meta: \"1.2 MB\",\n state: \"done\",\n kind: \"text\",\n }}\n />\n </ComposerAttachments>\n </Specimen>\n</Specimens>",
|
|
70
|
+
"note": "The rail above the input, and one chip per file. A chip carries its own state: uploading draws a hairline of progress along its bottom edge, done offers a remove button, and a failure says why in the line that would otherwise hold a size. The icon is the file's kind, not its extension, so an unknown type still lands on something.",
|
|
71
|
+
"interaction": "remove is a labelled icon button (`Remove front-truss.pdf`) and only exists on a finished chip — there is nothing to remove from an upload that has not landed, and a failed one is removed by fixing it."
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"todo": true
|
|
75
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ComposerAttachments",
|
|
3
|
+
"slug": "composer-attachments",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "The rail the attachment chips wrap in, above the input.",
|
|
11
|
+
"props": [],
|
|
12
|
+
"typeReferences": [
|
|
13
|
+
"ComponentProps<\"div\">"
|
|
14
|
+
],
|
|
15
|
+
"subcomponents": [],
|
|
16
|
+
"parts": [],
|
|
17
|
+
"variants": {},
|
|
18
|
+
"defaultVariants": {},
|
|
19
|
+
"tokensUsed": [
|
|
20
|
+
"--cue-accent",
|
|
21
|
+
"--cue-danger",
|
|
22
|
+
"--cue-fg",
|
|
23
|
+
"--cue-fg-muted",
|
|
24
|
+
"--cue-fg-subtle",
|
|
25
|
+
"--cue-font-mono",
|
|
26
|
+
"--cue-ok",
|
|
27
|
+
"--cue-radius-control",
|
|
28
|
+
"--cue-radius-overlay",
|
|
29
|
+
"--cue-radius-surface",
|
|
30
|
+
"--cue-stream",
|
|
31
|
+
"--cue-surface-1",
|
|
32
|
+
"--cue-surface-2",
|
|
33
|
+
"--cue-surface-3",
|
|
34
|
+
"--cue-text-body",
|
|
35
|
+
"--cue-text-emphasis",
|
|
36
|
+
"--cue-text-label",
|
|
37
|
+
"--cue-text-micro",
|
|
38
|
+
"--cue-text-ui"
|
|
39
|
+
],
|
|
40
|
+
"summary": "The rail the attachment chips wrap in, above the input.",
|
|
41
|
+
"examples": [],
|
|
42
|
+
"status": "todo-docs",
|
|
43
|
+
"url": "/docs/components/composer-attachments",
|
|
44
|
+
"mdUrl": "/docs/components/composer-attachments.md",
|
|
45
|
+
"jsonUrl": "/r/components/composer-attachments.json",
|
|
46
|
+
"specimens": [
|
|
47
|
+
{
|
|
48
|
+
"title": "ComposerAttachments / ComposerAttachmentChip",
|
|
49
|
+
"group": "elements-composer",
|
|
50
|
+
"components": [
|
|
51
|
+
"ComposerAttachments",
|
|
52
|
+
"ComposerAttachmentChip"
|
|
53
|
+
],
|
|
54
|
+
"code": "<Specimens>\n <Specimen label=\"three states\" wide>\n <ComposerAttachments>\n {chips.map((attachment) => (\n <ComposerAttachmentChip\n key={attachment.name}\n attachment={attachment}\n onRemove={(name) => setAttached((current) => [...current, name])}\n />\n ))}\n </ComposerAttachments>\n </Specimen>\n <Specimen label=\"one, settled, nothing to remove\" wide>\n <ComposerAttachments>\n <ComposerAttachmentChip\n attachment={{\n name: \"front-truss.pdf\",\n meta: \"1.2 MB\",\n state: \"done\",\n kind: \"text\",\n }}\n />\n </ComposerAttachments>\n </Specimen>\n</Specimens>",
|
|
55
|
+
"note": "The rail above the input, and one chip per file. A chip carries its own state: uploading draws a hairline of progress along its bottom edge, done offers a remove button, and a failure says why in the line that would otherwise hold a size. The icon is the file's kind, not its extension, so an unknown type still lands on something.",
|
|
56
|
+
"interaction": "remove is a labelled icon button (`Remove front-truss.pdf`) and only exists on a finished chip — there is nothing to remove from an upload that has not landed, and a failed one is removed by fixing it."
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"todo": true
|
|
60
|
+
}
|