@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,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "MarkdownText",
|
|
3
|
+
"slug": "markdown-text",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements/markdown",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"react-markdown",
|
|
8
|
+
"rehype-sanitize"
|
|
9
|
+
],
|
|
10
|
+
"clientOnly": true,
|
|
11
|
+
"description": "Model output, rendered.\n\nThe one component in this library that turns a string into markup, and the\nonly one that has to be argued for rather than described. Everywhere else —\n`Message`, `AskBox`, every element in this group — text is text: a string\narrives from a model and is placed in the DOM as characters, because a\ncomponent that quietly parsed it would put every consumer of this library one\nprompt away from an injection. This one parses, so it states in full what it\nwill and will not do with what it is given.\n\n**Threat model.** The input is hostile. Assume the string was written by a\nmodel that was told to write it by a web page it fetched, a file it read, or\na tool result it did not verify — the practical shape of prompt injection is\nnot \"the model turned evil\", it is \"the model faithfully relayed an\nattacker's bytes\". Three things follow.\n\n- **No raw HTML, ever, and not by filtering it.** Markup in the source has no\n path to the DOM, and the first reason is an absence rather than a setting.\n `react-markdown` hands `remark-rehype` its own `allowDangerousHtml: true`\n and spreads it *over* whatever `remarkRehypeOptions` says, so the option\n cannot be turned off from here and `<img onerror=…>` does become a `raw`\n node. A `raw` node is a span of source text rather than an element, and the\n one thing that turns it into markup is `rehype-raw`. Nothing in this package\n depends on that plugin, and a test asserts it never will — so the string has\n no parser to reach. `rehype-sanitize` then drops the `raw` type outright,\n and react-markdown's own `skipHtml` removes whatever is left. Three gates,\n none of which is a deny-list of dangerous tags. A `<script>`, an\n `<iframe>`, an `<svg>` and an `onclick=` are all the same non-event: there\n is nothing in the tree for them to be.\n- **Attributes are enumerated, not filtered.** An element that is not in the\n schema renders nothing; an element that is renders only the attributes\n named beside it — `href`/`title` on a link, `src`/`alt`/`title` on an\n image, `language-…` on a `code`. No element in the subset accepts `id`,\n `style`, `srcset`, `formaction` or any `on*` handler, so none of them has\n an attribute to arrive on.\n- **URLs are allow-listed twice.** `http`, `https` and `mailto` on both\n `href` and `src`; a relative URL stays relative; everything else — a\n `javascript:` link, a `data:text/html` image, `vbscript:`, `blob:`,\n `file:`, `//host` — loses the attribute and leaves an inert element\n behind. Every link also carries `rel=\"noopener noreferrer nofollow\"`,\n which is not a prop: reverse tabnabbing, referrer leakage of a private\n console URL, and SEO laundering through a transcript are all things a\n caller should not be able to turn off by accident.\n\n**The subset.** Paragraphs, ATX and setext headings, bullet and ordered\nlists, block quotes, thematic breaks, fenced and indented code, inline code,\nemphasis, strong, strikethrough, links, images, and hard breaks. No GFM\nplugin is enabled, so no tables, task lists, footnotes or autolink literals —\nan explicit `<https://…>` autolink still works. Fenced blocks are plain text\nunless {@link MarkdownTextProps.renderCodeBlock} is given.\n\n**Streaming.** Pass `streaming` while the turn is arriving and the token the\nmodel is halfway through typing is hidden rather than rendered as\npunctuation: no asterisks flickering through every bold run, no half-written\nURL, no fence that opens a code block one frame and closes it the next. The\nwords appear as they arrive; only their formatting waits for the closing\ntoken.\n\n`react-markdown` and `rehype-sanitize` are optional peers of this subpath\nalone, which is why this component is not re-exported from\n`@cueplusplus/ui/elements`: a console that renders a transcript without\nmarkdown should install neither.",
|
|
12
|
+
"props": [
|
|
13
|
+
{
|
|
14
|
+
"name": "children",
|
|
15
|
+
"type": "string",
|
|
16
|
+
"required": true,
|
|
17
|
+
"defaultValue": null,
|
|
18
|
+
"description": "The markdown source. Untrusted model output is precisely what this prop is\nfor — see the component's own documentation for what is and is not\nrendered."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "streaming",
|
|
22
|
+
"type": "boolean",
|
|
23
|
+
"required": false,
|
|
24
|
+
"defaultValue": "false",
|
|
25
|
+
"description": "The turn is still arriving, so hide the token being typed.\n\nOff by default, because sealing is a small edit to the source and a\nsettled document should be rendered as written. Turn it on for the tail of\na stream and off again when the turn completes; the rendered output is\nidentical once nothing is half-written."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "target",
|
|
29
|
+
"type": "\"_self\" | \"_blank\"",
|
|
30
|
+
"required": false,
|
|
31
|
+
"defaultValue": "_blank",
|
|
32
|
+
"description": "Where a link opens. `_blank` by default: a transcript that navigates away\nloses the run. `rel` is not configurable — every link gets\n`noopener noreferrer nofollow` whatever this says."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "headingLevel",
|
|
36
|
+
"type": "4 | 2 | 3",
|
|
37
|
+
"required": false,
|
|
38
|
+
"defaultValue": "2",
|
|
39
|
+
"description": "The heading level `#` renders at; `##` and below follow it, clamped at\n`h6`. Defaults to `2`, because model output is a passage inside a page\nthat already owns its `h1`."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "renderCodeBlock",
|
|
43
|
+
"type": "((block: MarkdownCodeBlock) => ReactNode)",
|
|
44
|
+
"required": false,
|
|
45
|
+
"defaultValue": null,
|
|
46
|
+
"description": "Render fenced code blocks with something other than plain text — a\nhighlighter, a copy button, a diff view.\n\nUnset, a block is a `<pre><code>` containing the model's characters and\nnothing else. That is the default on purpose: a highlighter is a second\nparser over the same untrusted string, usually one that emits HTML, and\nopting into it should be a line of code somebody wrote rather than a\nbehaviour they inherited."
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"typeReferences": [
|
|
50
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
|
|
51
|
+
],
|
|
52
|
+
"subcomponents": [],
|
|
53
|
+
"parts": [],
|
|
54
|
+
"variants": {},
|
|
55
|
+
"defaultVariants": {},
|
|
56
|
+
"tokensUsed": [
|
|
57
|
+
"--cue-border",
|
|
58
|
+
"--cue-radius-control",
|
|
59
|
+
"--cue-space-1",
|
|
60
|
+
"--cue-space-2",
|
|
61
|
+
"--cue-space-3",
|
|
62
|
+
"--cue-space-5",
|
|
63
|
+
"--cue-text-body",
|
|
64
|
+
"--cue-text-emphasis",
|
|
65
|
+
"--cue-text-label",
|
|
66
|
+
"--cue-text-title",
|
|
67
|
+
"--cue-text-ui"
|
|
68
|
+
],
|
|
69
|
+
"summary": "Model output, rendered.",
|
|
70
|
+
"examples": [
|
|
71
|
+
{
|
|
72
|
+
"title": "Usage",
|
|
73
|
+
"code": "<Message agent=\"researcher\">\n <MarkdownText>{turn.text}</MarkdownText>\n</Message>\n<MarkdownText streaming={turn.status === \"running\"}>{turn.text}</MarkdownText>\n<MarkdownText renderCodeBlock={({ language, code }) => <Highlight lang={language} code={code} />}>\n {answer}\n</MarkdownText>",
|
|
74
|
+
"language": "tsx"
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"status": "todo-docs",
|
|
78
|
+
"url": "/docs/components/markdown-text",
|
|
79
|
+
"mdUrl": "/docs/components/markdown-text.md",
|
|
80
|
+
"jsonUrl": "/r/components/markdown-text.json",
|
|
81
|
+
"specimens": [
|
|
82
|
+
{
|
|
83
|
+
"title": "MarkdownText",
|
|
84
|
+
"group": "elements-thread",
|
|
85
|
+
"components": [
|
|
86
|
+
"MarkdownText"
|
|
87
|
+
],
|
|
88
|
+
"code": "<Specimens>\n <Specimen label=\"settled\" wide>\n <MarkdownText>{MARKDOWN_ANSWER}</MarkdownText>\n </Specimen>\n <Specimen label=\"mid-stream\" wide>\n <MarkdownText streaming>{MARKDOWN_MID_STREAM}</MarkdownText>\n </Specimen>\n <Specimen label=\"mid-fence\" wide>\n <MarkdownText streaming>{MARKDOWN_MID_FENCE}</MarkdownText>\n </Specimen>\n</Specimens>",
|
|
89
|
+
"note": "The one component in the library that turns a string into markup, and the only one that has to be argued for. No raw HTML reaches the DOM — not filtered out, but never parsed: the img tag on the last line of the settled specimen is a real injection shape and renders as nothing. Links are http/https/mailto only and always carry rel='noopener noreferrer nofollow'; code blocks are plain text until a highlighter is passed. It ships from @cueplusplus/ui/elements/markdown so its parser and sanitizer stay off the elements barrel.",
|
|
90
|
+
"interaction": "none — it is a document, and it stays selectable, copyable text. Headings start at h2 by default so a turn never claims a page's title, and links are keyboard-reachable with the house focus ring."
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"todo": true
|
|
94
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "MathBlock",
|
|
3
|
+
"slug": "math-block",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "Rendered expressions with the working shown, one step at a time.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "label",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "Optional eyebrow above the working."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "steps",
|
|
19
|
+
"type": "readonly MathStep[]",
|
|
20
|
+
"required": true,
|
|
21
|
+
"defaultValue": null,
|
|
22
|
+
"description": "Each step is a node, so you compose expressions from the exported Frac, Sup, and\nSub helpers rather than passing a string to parse."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "visibleSteps",
|
|
26
|
+
"type": "number",
|
|
27
|
+
"required": true,
|
|
28
|
+
"defaultValue": null,
|
|
29
|
+
"description": "How much of the derivation has been shown."
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"typeReferences": [
|
|
33
|
+
"Omit<\n ComponentProps<\"div\">,\n \"children\" | \"label\" | \"steps\" | \"visibleSteps\"\n> & {\n /** Optional eyebrow above the working. */\n label?: string;\n /**\n * Each step is a node, so you compose expressions from the exported Frac, Sup, and\n * Sub helpers rather than passing a string to parse.\n */\n steps: readonly MathStep[];\n /** How much of the derivation has been shown. */\n visibleSteps: number;\n}"
|
|
34
|
+
],
|
|
35
|
+
"subcomponents": [],
|
|
36
|
+
"parts": [],
|
|
37
|
+
"variants": {},
|
|
38
|
+
"defaultVariants": {},
|
|
39
|
+
"tokensUsed": [
|
|
40
|
+
"--cue-border-strong",
|
|
41
|
+
"--cue-fg",
|
|
42
|
+
"--cue-fg-subtle",
|
|
43
|
+
"--cue-radius-overlay",
|
|
44
|
+
"--cue-text-emphasis"
|
|
45
|
+
],
|
|
46
|
+
"summary": "Rendered expressions with the working shown, one step at a time.",
|
|
47
|
+
"examples": [
|
|
48
|
+
{
|
|
49
|
+
"title": "Usage",
|
|
50
|
+
"code": "import { MathBlock, Frac, Sup } from \"@cueplusplus/ui/elements\";\n\n<MathBlock label=\"derivation\" steps={steps} visibleSteps={2} />",
|
|
51
|
+
"language": "tsx"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"status": "todo-docs",
|
|
55
|
+
"url": "/docs/components/math-block",
|
|
56
|
+
"mdUrl": "/docs/components/math-block.md",
|
|
57
|
+
"jsonUrl": "/r/components/math-block.json",
|
|
58
|
+
"specimens": [
|
|
59
|
+
{
|
|
60
|
+
"title": "MathBlock",
|
|
61
|
+
"group": "elements-knowledge",
|
|
62
|
+
"components": [
|
|
63
|
+
"MathBlock",
|
|
64
|
+
"Frac",
|
|
65
|
+
"Sub",
|
|
66
|
+
"Sup"
|
|
67
|
+
],
|
|
68
|
+
"code": "<Specimens>\n <Specimen label=\"worked through\" wide>\n <MathBlock label=\"illuminance at the deck\" steps={MATH} visibleSteps={MATH.length} />\n </Specimen>\n <Specimen label=\"first step only\" wide>\n <MathBlock steps={MATH} visibleSteps={1} />\n </Specimen>\n</Specimens>",
|
|
69
|
+
"note": "Maths with the working shown, a step at a time. The expressions are nodes rather than a string, so there is no parser and no KaTeX in the bundle — `Frac` stacks a numerator over a rule, `Sup` and `Sub` set an index upright inside the serif italic, and anything else is text.",
|
|
70
|
+
"interaction": "none. Each step's note says what justified it, which is what turns three lines of algebra into an explanation."
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"todo": true
|
|
74
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "McpServerIcon",
|
|
3
|
+
"slug": "mcp-server-icon",
|
|
4
|
+
"group": "icons",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": false,
|
|
8
|
+
"description": "An MCP server in the registry: a thing an agent connects *to*.\n\nTwo rack units with a status lamp each. It is drawn as hardware on purpose —\nan MCP server is the one entry in a catalogue of files that is a running\nprocess somewhere, with an address and a session, and a row that looked like\na document would hide the only fact about it that matters operationally.",
|
|
9
|
+
"props": [],
|
|
10
|
+
"typeReferences": [
|
|
11
|
+
"React.SVGProps<SVGSVGElement>"
|
|
12
|
+
],
|
|
13
|
+
"subcomponents": [],
|
|
14
|
+
"parts": [],
|
|
15
|
+
"variants": {},
|
|
16
|
+
"defaultVariants": {},
|
|
17
|
+
"tokensUsed": [
|
|
18
|
+
"--cue-danger",
|
|
19
|
+
"--cue-fg",
|
|
20
|
+
"--cue-icon-",
|
|
21
|
+
"--cue-icon-md",
|
|
22
|
+
"--cue-icon-sm"
|
|
23
|
+
],
|
|
24
|
+
"summary": "An MCP server in the registry: a thing an agent connects *to*.",
|
|
25
|
+
"examples": [],
|
|
26
|
+
"status": "todo-docs",
|
|
27
|
+
"url": "/docs/components/mcp-server-icon",
|
|
28
|
+
"mdUrl": "/docs/components/mcp-server-icon.md",
|
|
29
|
+
"jsonUrl": "/r/components/mcp-server-icon.json",
|
|
30
|
+
"specimens": [
|
|
31
|
+
{
|
|
32
|
+
"title": "The container icon set",
|
|
33
|
+
"group": "icons",
|
|
34
|
+
"components": [
|
|
35
|
+
"CatalogueIcon",
|
|
36
|
+
"StackIcon",
|
|
37
|
+
"StacksMatrixIcon",
|
|
38
|
+
"AudienceIcon",
|
|
39
|
+
"ChannelReleasedIcon",
|
|
40
|
+
"ChannelBetaIcon",
|
|
41
|
+
"FolderIcon",
|
|
42
|
+
"McpServerIcon",
|
|
43
|
+
"CliToolIcon",
|
|
44
|
+
"SkillIcon"
|
|
45
|
+
],
|
|
46
|
+
"code": "<Specimens>\n {CONTAINERS.map(([label, name, Icon]) => (\n <Specimen key={name} label={label}>\n <Icon className=\"size-icon-md text-fg\" />\n </Specimen>\n ))}\n</Specimens>\n<Specimens>\n <Specimen label=\"icon-sm\">\n <SkillIcon className=\"size-icon-sm text-fg\" />\n </Specimen>\n <Specimen label=\"icon-md\">\n <SkillIcon className=\"size-icon-md text-fg\" />\n </Specimen>\n <Specimen label=\"inherited\">\n <SkillIcon className=\"size-icon-md\" />\n </Specimen>\n <Specimen label=\"muted\">\n <SkillIcon className=\"size-icon-md text-fg-muted\" />\n </Specimen>\n <Specimen label=\"accent\">\n <SkillIcon className=\"size-icon-md text-accent\" />\n </Specimen>\n <Specimen label=\"danger\">\n <SkillIcon className=\"size-icon-md text-danger\" />\n </Specimen>\n</Specimens>\n<Specimens>\n <Specimen label=\"in a row\" wide>\n <span className=\"inline-flex items-center gap-(--cue-space-2) font-mono text-(length:--cue-text-ui) text-fg-muted\">\n <ChannelReleasedIcon className=\"size-icon-md shrink-0\" />\n Our skills · released\n </span>\n </Specimen>\n <Specimen label=\"current row\" wide>\n <span className=\"inline-flex items-center gap-(--cue-space-2) font-mono text-(length:--cue-text-ui) text-fg\">\n <ChannelBetaIcon className=\"size-icon-md shrink-0\" />\n Our skills · beta\n </span>\n </Specimen>\n</Specimens>",
|
|
47
|
+
"note": "One grid and one weight across all ten, at size-icon-md — the size a navigation row draws them at. Each is a plain <svg> that takes every SVG prop.",
|
|
48
|
+
"interaction": "none. They are decorative by default: aria-hidden, announced by nothing, because the row they mark already carries its name."
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"todo": true
|
|
52
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "McpServerPanel",
|
|
3
|
+
"slug": "mcp-server-panel",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "Which servers are connected, what each one brought, and which is still waiting on\nyou.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "servers",
|
|
14
|
+
"type": "readonly McpServer[]",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "Every configured server, connected or not. The header counts how many are live."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "expandedId",
|
|
21
|
+
"type": "string",
|
|
22
|
+
"required": false,
|
|
23
|
+
"defaultValue": null,
|
|
24
|
+
"description": "Which server is open. Only one expands at a time; omit for an all-collapsed list."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "onToggle",
|
|
28
|
+
"type": "((id: string) => void)",
|
|
29
|
+
"required": false,
|
|
30
|
+
"defaultValue": null,
|
|
31
|
+
"description": "Called when a server row is expanded or collapsed."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "onAuthorize",
|
|
35
|
+
"type": "((id: string) => void)",
|
|
36
|
+
"required": false,
|
|
37
|
+
"defaultValue": null,
|
|
38
|
+
"description": "Called from the Authorize button, shown only while a server needs auth."
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"typeReferences": [
|
|
42
|
+
"Omit<\n ComponentProps<\"div\">,\n \"children\" | \"servers\" | \"expandedId\" | \"onToggle\" | \"onAuthorize\"\n> & {\n /** Every configured server, connected or not. The header counts how many are live. */\n servers: readonly McpServer[];\n /** Which server is open. Only one expands at a time; omit for an all-collapsed list. */\n expandedId?: string;\n /** Called when a server row is expanded or collapsed. */\n onToggle?: (id: string) => void;\n /** Called from the Authorize button, shown only while a server needs auth. */\n onAuthorize?: (id: string) => void;\n}"
|
|
43
|
+
],
|
|
44
|
+
"subcomponents": [],
|
|
45
|
+
"parts": [],
|
|
46
|
+
"variants": {},
|
|
47
|
+
"defaultVariants": {},
|
|
48
|
+
"tokensUsed": [
|
|
49
|
+
"--cue-danger",
|
|
50
|
+
"--cue-fg-muted",
|
|
51
|
+
"--cue-fg-subtle",
|
|
52
|
+
"--cue-ok",
|
|
53
|
+
"--cue-radius-control",
|
|
54
|
+
"--cue-radius-overlay",
|
|
55
|
+
"--cue-radius-surface",
|
|
56
|
+
"--cue-surface-1",
|
|
57
|
+
"--cue-surface-3",
|
|
58
|
+
"--cue-text-body",
|
|
59
|
+
"--cue-text-label",
|
|
60
|
+
"--cue-warn"
|
|
61
|
+
],
|
|
62
|
+
"summary": "Which servers are connected, what each one brought, and which is still waiting on you.",
|
|
63
|
+
"examples": [
|
|
64
|
+
{
|
|
65
|
+
"title": "Usage",
|
|
66
|
+
"code": "import { McpServerPanel } from \"@cueplusplus/ui/elements\";\n\n<McpServerPanel\n servers={servers}\n expandedId={expandedId}\n onToggle={setExpandedId}\n onAuthorize={startOAuth}\n/>",
|
|
67
|
+
"language": "tsx"
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"status": "todo-docs",
|
|
71
|
+
"url": "/docs/components/mcp-server-panel",
|
|
72
|
+
"mdUrl": "/docs/components/mcp-server-panel.md",
|
|
73
|
+
"jsonUrl": "/r/components/mcp-server-panel.json",
|
|
74
|
+
"specimens": [
|
|
75
|
+
{
|
|
76
|
+
"title": "McpServerPanel",
|
|
77
|
+
"group": "elements-composer",
|
|
78
|
+
"components": [
|
|
79
|
+
"McpServerPanel"
|
|
80
|
+
],
|
|
81
|
+
"code": "<Specimens>\n <Specimen label=\"one needs authorising\" wide>\n <McpServerPanel\n servers={SERVERS}\n expandedId={server}\n onToggle={(id) => setServer((current) => (current === id ? undefined : id))}\n onAuthorize={() => setServer(undefined)}\n />\n </Specimen>\n <Specimen label=\"all collapsed\" wide>\n <McpServerPanel servers={SERVERS} />\n </Specimen>\n <Specimen label=\"one server, healthy\" wide>\n <McpServerPanel servers={SERVERS.slice(0, 1)} expandedId=\"srv-show\" />\n </Specimen>\n</Specimens>",
|
|
82
|
+
"note": "Which servers are connected, what each one brought, and which is still waiting on you. The header counts the live ones against the configured ones, and the status dot has a `sr-only` word beside it — a colour is not a status for everybody. Authorize only exists on a server that needs it, so the row that wants something from you is the only one offering an action.",
|
|
83
|
+
"interaction": "each server row carries `aria-expanded`; one expands at a time, and `expandedId` undefined is a legitimate all-collapsed state rather than a missing value."
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"todo": true
|
|
87
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "MemoryChips",
|
|
3
|
+
"slug": "memory-chips",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "What it now remembers about you, written during the turn and removable.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "chips",
|
|
14
|
+
"type": "readonly MemoryChip[]",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "What is remembered. Anything not marked existing is counted as new this turn and\ntinted."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "onForget",
|
|
21
|
+
"type": "((id: string) => void)",
|
|
22
|
+
"required": false,
|
|
23
|
+
"defaultValue": null,
|
|
24
|
+
"description": "Called to drop a fact. Every chip is removable, including ones it just learned."
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"typeReferences": [
|
|
28
|
+
"Omit<ComponentProps<\"div\">, \"children\" | \"chips\" | \"onForget\"> & {\n /**\n * What is remembered. Anything not marked existing is counted as new this turn and\n * tinted.\n */\n chips: readonly MemoryChip[];\n /** Called to drop a fact. Every chip is removable, including ones it just learned. */\n onForget?: (id: string) => void;\n}"
|
|
29
|
+
],
|
|
30
|
+
"subcomponents": [],
|
|
31
|
+
"parts": [],
|
|
32
|
+
"variants": {},
|
|
33
|
+
"defaultVariants": {},
|
|
34
|
+
"tokensUsed": [
|
|
35
|
+
"--cue-fg-muted",
|
|
36
|
+
"--cue-fg-subtle",
|
|
37
|
+
"--cue-stream",
|
|
38
|
+
"--cue-text-ui"
|
|
39
|
+
],
|
|
40
|
+
"summary": "What it now remembers about you, written during the turn and removable.",
|
|
41
|
+
"examples": [
|
|
42
|
+
{
|
|
43
|
+
"title": "Usage",
|
|
44
|
+
"code": "import { MemoryChips } from \"@cueplusplus/ui/elements\";\n\n<MemoryChips chips={chips} onForget={forget} />",
|
|
45
|
+
"language": "tsx"
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"status": "todo-docs",
|
|
49
|
+
"url": "/docs/components/memory-chips",
|
|
50
|
+
"mdUrl": "/docs/components/memory-chips.md",
|
|
51
|
+
"jsonUrl": "/r/components/memory-chips.json",
|
|
52
|
+
"specimens": [
|
|
53
|
+
{
|
|
54
|
+
"title": "MemoryChips",
|
|
55
|
+
"group": "elements-composer",
|
|
56
|
+
"components": [
|
|
57
|
+
"MemoryChips"
|
|
58
|
+
],
|
|
59
|
+
"code": "<Specimens>\n <Specimen label=\"two new this turn\" wide>\n <MemoryChips\n chips={memory}\n onForget={(id) => setForgotten((current) => [...current, id])}\n />\n </Specimen>\n <Specimen label=\"nothing new\" wide>\n <MemoryChips chips={MEMORY.map((chip) => ({ ...chip, change: \"existing\" as const }))} />\n </Specimen>\n</Specimens>",
|
|
60
|
+
"note": "What it now remembers about you, written during the turn it learned it. The header counts what is new rather than what is stored — `remembered 2` is the fact worth showing — and anything not marked `existing` takes the streaming hue so a new memory is visibly new. Every chip is removable, including the one it just learned, which is the only version of this control that is honest.",
|
|
61
|
+
"interaction": "each chip's remove button is labelled with the fact it would forget — `Forget ESPRITEs run in mode 8` — so the control names its consequence rather than saying 'remove'."
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"todo": true
|
|
65
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Menubar",
|
|
3
|
+
"slug": "menubar",
|
|
4
|
+
"group": "overlays",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "The desktop-application menu bar: a row of words, each dropping a menu.\n\nWraps Base UI's `Menubar` around the same `Menu` parts {@link DropdownMenu}\nuses, so the rows here *are* the dropdown's rows — one menu language across\nthe whole system — and the bar-level behaviour (hover to switch menus once one\nis open, arrow keys across the bar, typeahead inside a menu) is the\nprimitive's.\n\nUse it for an application shell that genuinely has a dozen-plus commands to\nfile away. A view with six actions wants a `Toolbar`; a menubar with two words\non it is a toolbar wearing a costume.",
|
|
9
|
+
"props": [],
|
|
10
|
+
"typeReferences": [],
|
|
11
|
+
"subcomponents": [
|
|
12
|
+
"Root",
|
|
13
|
+
"Menu",
|
|
14
|
+
"Trigger",
|
|
15
|
+
"Content"
|
|
16
|
+
],
|
|
17
|
+
"parts": [
|
|
18
|
+
{
|
|
19
|
+
"name": "Root",
|
|
20
|
+
"usage": "Menubar.Root",
|
|
21
|
+
"description": "The bar itself: chrome-toolbar tall, hairline underneath, surface fill.\n\nSized from `--cue-chrome-toolbar` rather than the control ladder, exactly like\n`Toolbar` and `TitleBar` — a menubar is window furniture, and window furniture\nkeeps its own rung of the density scale so it stays legible when the controls\ninside the view shrink.",
|
|
22
|
+
"props": [
|
|
23
|
+
{
|
|
24
|
+
"name": "className",
|
|
25
|
+
"type": "string",
|
|
26
|
+
"required": false,
|
|
27
|
+
"defaultValue": null,
|
|
28
|
+
"description": "Extra classes for the bar."
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"typeReferences": [
|
|
32
|
+
"Omit<BaseMenubar.Props, \"className\">"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "Menu",
|
|
37
|
+
"usage": "Menubar.Menu",
|
|
38
|
+
"description": "One menu of the bar — its trigger and its content. Renders no element.\n\nBase UI reads the enclosing menubar from context: once one menu is open,\nhovering a sibling trigger switches to it without a second click, and the\narrow keys walk the bar. None of that needs wiring here.",
|
|
39
|
+
"props": [],
|
|
40
|
+
"typeReferences": [
|
|
41
|
+
"BaseMenu.Root.Props"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "Trigger",
|
|
46
|
+
"usage": "Menubar.Trigger",
|
|
47
|
+
"description": "A top-level word on the bar: `Show`, `Edit`, `View`.\n\nOpen is `accent-soft` plus full-strength ink, not a solid accent fill — the\nsame ruling as the active tab and the highlighted menu row. A filled block on\na bar of five words reads as a button someone left pressed.",
|
|
48
|
+
"props": [
|
|
49
|
+
{
|
|
50
|
+
"name": "className",
|
|
51
|
+
"type": "string",
|
|
52
|
+
"required": false,
|
|
53
|
+
"defaultValue": null,
|
|
54
|
+
"description": "Extra classes for the trigger."
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"typeReferences": [
|
|
58
|
+
"Omit<BaseMenu.Trigger.Props, \"className\">"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "Content",
|
|
63
|
+
"usage": "Menubar.Content",
|
|
64
|
+
"description": "One menu's portal, positioner and popup.\n\nAlways drops from the bottom of its word — a menubar menu that flipped\nupward would break the one spatial promise the pattern makes — and is\nportalled through {@link useCuePortalProps} so it renders at the caller's\ntheme and density.",
|
|
65
|
+
"props": [
|
|
66
|
+
{
|
|
67
|
+
"name": "className",
|
|
68
|
+
"type": "string",
|
|
69
|
+
"required": false,
|
|
70
|
+
"defaultValue": null,
|
|
71
|
+
"description": "Extra classes for the popup surface."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "align",
|
|
75
|
+
"type": "\"center\" | \"end\" | \"start\"",
|
|
76
|
+
"required": false,
|
|
77
|
+
"defaultValue": "start",
|
|
78
|
+
"description": "Alignment along the bottom of the trigger. Defaults to `\"start\"`."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "keepMounted",
|
|
82
|
+
"type": "boolean",
|
|
83
|
+
"required": false,
|
|
84
|
+
"defaultValue": null,
|
|
85
|
+
"description": "Keep the popup mounted while closed."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "positionerClassName",
|
|
89
|
+
"type": "string",
|
|
90
|
+
"required": false,
|
|
91
|
+
"defaultValue": null,
|
|
92
|
+
"description": "Extra classes for the positioner that places the popup."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "sideOffset",
|
|
96
|
+
"type": "number | OffsetFunction",
|
|
97
|
+
"required": false,
|
|
98
|
+
"defaultValue": "4",
|
|
99
|
+
"description": "Gap in px between trigger and popup. Defaults to `4`."
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"typeReferences": [
|
|
103
|
+
"Omit<BaseMenu.Popup.Props, \"className\">"
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"variants": {},
|
|
108
|
+
"defaultVariants": {},
|
|
109
|
+
"tokensUsed": [
|
|
110
|
+
"--cue-accent",
|
|
111
|
+
"--cue-accent-soft",
|
|
112
|
+
"--cue-border",
|
|
113
|
+
"--cue-border-overlay",
|
|
114
|
+
"--cue-chrome-toolbar",
|
|
115
|
+
"--cue-control-sm",
|
|
116
|
+
"--cue-fg",
|
|
117
|
+
"--cue-fg-muted",
|
|
118
|
+
"--cue-fg-subtle",
|
|
119
|
+
"--cue-font-mono",
|
|
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-surface-1",
|
|
127
|
+
"--cue-surface-2",
|
|
128
|
+
"--cue-text-emphasis",
|
|
129
|
+
"--cue-text-label",
|
|
130
|
+
"--cue-text-ui"
|
|
131
|
+
],
|
|
132
|
+
"summary": "The desktop-application menu bar: a row of words, each dropping a menu.",
|
|
133
|
+
"examples": [
|
|
134
|
+
{
|
|
135
|
+
"title": "Usage",
|
|
136
|
+
"code": "<Menubar.Root>\n <Menubar.Menu>\n <Menubar.Trigger>Show</Menubar.Trigger>\n <Menubar.Content>\n <Menubar.Item onClick={newShow}>New show</Menubar.Item>\n <Menubar.Separator />\n <Menubar.Item trailing={<Kbd>⌘S</Kbd>} onClick={save}>Save</Menubar.Item>\n </Menubar.Content>\n </Menubar.Menu>\n</Menubar.Root>",
|
|
137
|
+
"language": "tsx"
|
|
138
|
+
}
|
|
139
|
+
],
|
|
140
|
+
"status": "todo-docs",
|
|
141
|
+
"url": "/docs/components/menubar",
|
|
142
|
+
"mdUrl": "/docs/components/menubar.md",
|
|
143
|
+
"jsonUrl": "/r/components/menubar.json",
|
|
144
|
+
"specimens": [
|
|
145
|
+
{
|
|
146
|
+
"title": "Menubar",
|
|
147
|
+
"group": "overlays",
|
|
148
|
+
"components": [
|
|
149
|
+
"Menubar"
|
|
150
|
+
],
|
|
151
|
+
"code": "<Menubar.Root>\n <Menubar.Menu>\n <Menubar.Trigger>File</Menubar.Trigger>\n <Menubar.Content>\n <Menubar.Item trailing={<Kbd>⌘N</Kbd>}>New show</Menubar.Item>\n <Menubar.Item trailing={<Kbd>⌘O</Kbd>}>Open</Menubar.Item>\n <Menubar.Separator />\n <Menubar.Item trailing={<Kbd>⌘S</Kbd>}>Save</Menubar.Item>\n </Menubar.Content>\n </Menubar.Menu>\n <Menubar.Menu>\n <Menubar.Trigger>View</Menubar.Trigger>\n <Menubar.Content>\n <Menubar.CheckboxItem checked={follow} onCheckedChange={setFollow}>\n Follow playhead\n </Menubar.CheckboxItem>\n <Menubar.Item>Reset zoom</Menubar.Item>\n </Menubar.Content>\n </Menubar.Menu>\n</Menubar.Root>",
|
|
152
|
+
"note": "The desktop bar: once one menu is open, hovering the next one opens it.",
|
|
153
|
+
"interaction": "left and right arrows move between menus, up and down move inside one."
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
"todo": true
|
|
157
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "MessageActions",
|
|
3
|
+
"slug": "message-actions",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "Copy, rate, and regenerate. Each action confirms itself with a small state change.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "copied",
|
|
14
|
+
"type": "boolean",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "When true the copy button shows a green check confirmation."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "reaction",
|
|
21
|
+
"type": "Reaction",
|
|
22
|
+
"required": true,
|
|
23
|
+
"defaultValue": null,
|
|
24
|
+
"description": "Active thumbs reaction, or null when none is selected."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "regenerating",
|
|
28
|
+
"type": "boolean",
|
|
29
|
+
"required": true,
|
|
30
|
+
"defaultValue": null,
|
|
31
|
+
"description": "When true the regenerate icon spins to show work in progress."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "onCopy",
|
|
35
|
+
"type": "() => void",
|
|
36
|
+
"required": true,
|
|
37
|
+
"defaultValue": null,
|
|
38
|
+
"description": "Called when the copy control is pressed."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "onReactionChange",
|
|
42
|
+
"type": "(reaction: Reaction) => void",
|
|
43
|
+
"required": true,
|
|
44
|
+
"defaultValue": null,
|
|
45
|
+
"description": "Called when the user toggles thumbs up or thumbs down."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "onRegenerate",
|
|
49
|
+
"type": "() => void",
|
|
50
|
+
"required": true,
|
|
51
|
+
"defaultValue": null,
|
|
52
|
+
"description": "Called when the regenerate control is pressed."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "onMore",
|
|
56
|
+
"type": "() => void",
|
|
57
|
+
"required": true,
|
|
58
|
+
"defaultValue": null,
|
|
59
|
+
"description": "Called when the overflow menu control is pressed."
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"typeReferences": [
|
|
63
|
+
"Omit<\n ComponentProps<\"div\">,\n \"children\"\n>"
|
|
64
|
+
],
|
|
65
|
+
"subcomponents": [],
|
|
66
|
+
"parts": [],
|
|
67
|
+
"variants": {},
|
|
68
|
+
"defaultVariants": {},
|
|
69
|
+
"tokensUsed": [
|
|
70
|
+
"--cue-fg",
|
|
71
|
+
"--cue-ok",
|
|
72
|
+
"--cue-surface-2"
|
|
73
|
+
],
|
|
74
|
+
"summary": "Copy, rate, and regenerate.",
|
|
75
|
+
"examples": [
|
|
76
|
+
{
|
|
77
|
+
"title": "Usage",
|
|
78
|
+
"code": "import { MessageActions } from \"@cueplusplus/ui/elements\";\n\n<MessageActions\n copied={false}\n reaction={null}\n regenerating={false}\n onCopy={() => {}}\n onReactionChange={setReaction}\n onRegenerate={() => {}}\n onMore={() => {}}\n/>",
|
|
79
|
+
"language": "tsx"
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"status": "todo-docs",
|
|
83
|
+
"url": "/docs/components/message-actions",
|
|
84
|
+
"mdUrl": "/docs/components/message-actions.md",
|
|
85
|
+
"jsonUrl": "/r/components/message-actions.json",
|
|
86
|
+
"specimens": [
|
|
87
|
+
{
|
|
88
|
+
"title": "MessageActions",
|
|
89
|
+
"group": "elements-thread",
|
|
90
|
+
"components": [
|
|
91
|
+
"MessageActions"
|
|
92
|
+
],
|
|
93
|
+
"code": "<Specimens>\n <Specimen label=\"resting\" wide>\n <MessageActions\n copied={copied}\n reaction={reaction}\n regenerating={regenerating}\n onCopy={() => setCopied((current) => !current)}\n onReactionChange={setReaction}\n onRegenerate={() => setRegenerating((current) => !current)}\n onMore={() => undefined}\n />\n </Specimen>\n <Specimen label=\"copied\" wide>\n <MessageActions\n copied\n reaction={null}\n regenerating={false}\n onCopy={() => undefined}\n onReactionChange={() => undefined}\n onRegenerate={() => undefined}\n onMore={() => undefined}\n />\n </Specimen>\n <Specimen label=\"rated, regenerating\" wide>\n <MessageActions\n copied={false}\n reaction=\"up\"\n regenerating\n onCopy={() => undefined}\n onReactionChange={() => undefined}\n onRegenerate={() => undefined}\n onMore={() => undefined}\n />\n </Specimen>\n</Specimens>",
|
|
94
|
+
"note": "The row under an answer: copy, rate it, run it again, or ask for more. Every action confirms itself in place — copy swaps to a check and turns green, a rating latches, regenerate spins while it is out — so nothing needs a toast to say it worked.",
|
|
95
|
+
"interaction": "all five are named icon buttons; the two ratings carry aria-pressed and toggle off when pressed again. The copy swap is a crossfade between two icons in one cell, not a re-mount."
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"todo": true
|
|
99
|
+
}
|