@cueplusplus/ui 0.3.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 +2229 -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/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/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/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 +6 -4
- package/dist/index.js +2 -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 +35 -9
- package/dist/primitives/chip.js +97 -11
- package/dist/system/agent-skin.d.ts +27 -0
- package/dist/system/agent-skin.js +20 -0
- package/dist/system/portal.d.ts +5 -3
- package/dist/system/portal.js +19 -5
- package/dist/system/theme-provider.js +54 -9
- 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 +71 -8
- package/dist/theming/contrast.d.ts +16 -4
- package/dist/theming/contrast.js +33 -6
- package/dist/theming/create-theme.d.ts +6 -2
- package/dist/theming/create-theme.js +32 -5
- package/dist/theming/serialize.d.ts +10 -1
- package/dist/theming/serialize.js +62 -8
- 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-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 +1 -1
- package/manifest/components/animated-number.json +67 -0
- package/manifest/components/app-shell.json +99 -7
- package/manifest/components/approval-card.json +106 -0
- package/manifest/components/artifact-card.json +81 -0
- package/manifest/components/audience-icon.json +52 -0
- package/manifest/components/background-inbox.json +71 -0
- package/manifest/components/branch-picker.json +124 -0
- package/manifest/components/button.json +1 -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/catalogue-icon.json +52 -0
- package/manifest/components/channel-beta-icon.json +52 -0
- package/manifest/components/channel-released-icon.json +52 -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/checkpoint-history.json +80 -0
- package/manifest/components/chip.json +24 -12
- 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/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/computer-use.json +84 -0
- package/manifest/components/confidence-marker.json +74 -0
- package/manifest/components/connection-state.json +84 -0
- package/manifest/components/context-breakdown.json +65 -0
- package/manifest/components/context-usage.json +85 -0
- package/manifest/components/conversation-search.json +92 -0
- package/manifest/components/cost-meter.json +74 -0
- package/manifest/components/cue-portal-frame.json +1 -1
- package/manifest/components/day-separator.json +58 -0
- package/manifest/components/delegation-card.json +1 -1
- package/manifest/components/density.json +1 -1
- package/manifest/components/diagram.json +100 -0
- package/manifest/components/document-reference.json +90 -0
- package/manifest/components/draft-restore.json +82 -0
- package/manifest/components/drawer.json +1 -1
- package/manifest/components/dropdown-menu.json +1 -1
- 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/end-of-turn-summary.json +77 -0
- package/manifest/components/error-state.json +80 -0
- package/manifest/components/feedback-dialog.json +107 -0
- package/manifest/components/file-tree.json +83 -0
- package/manifest/components/flow-graph.json +75 -0
- package/manifest/components/folder-icon.json +52 -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/guardrail-notice.json +91 -0
- package/manifest/components/hover-card.json +1 -1
- package/manifest/components/image-generation.json +67 -0
- package/manifest/components/info-tip.json +1 -1
- package/manifest/components/inline-citation.json +77 -0
- package/manifest/components/job-progress.json +96 -0
- package/manifest/components/launcher-bubble.json +105 -0
- package/manifest/components/live-region-announcer.json +79 -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/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 +1 -1
- 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/mobile-composer.json +126 -0
- package/manifest/components/model-picker.json +76 -0
- package/manifest/components/node-card.json +1 -1
- package/manifest/components/node-handle.json +1 -1
- package/manifest/components/number-ticker.json +61 -0
- package/manifest/components/onboarding.json +84 -0
- package/manifest/components/otp-field.json +7 -7
- package/manifest/components/permission-grant.json +92 -0
- package/manifest/components/permission-scopes.json +139 -0
- package/manifest/components/popover.json +1 -1
- 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/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/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/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 +7 -7
- package/manifest/components/search-input.json +7 -7
- package/manifest/components/segmented-control.json +21 -21
- package/manifest/components/settings-panel.json +118 -0
- package/manifest/components/shared-conversation.json +89 -0
- package/manifest/components/shimmer-label.json +59 -0
- package/manifest/components/skill-icon.json +52 -0
- package/manifest/components/sources.json +83 -0
- package/manifest/components/speaker-identity.json +61 -0
- package/manifest/components/spec-sheet.json +80 -0
- package/manifest/components/stack-icon.json +52 -0
- package/manifest/components/stacks-matrix-icon.json +52 -0
- package/manifest/components/stat.json +1 -1
- package/manifest/components/status-dot.json +1 -1
- 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/tail-status.json +109 -0
- package/manifest/components/terminal-block.json +91 -0
- package/manifest/components/theme-provider.json +2 -2
- 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 +2 -2
- package/manifest/components/time-boundary.json +62 -0
- package/manifest/components/timeline.json +1 -1
- package/manifest/components/todo-list.json +69 -0
- package/manifest/components/toggle-group.json +7 -7
- package/manifest/components/token-editor.json +1 -1
- 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 +7 -7
- package/manifest/components/tooltip.json +1 -1
- package/manifest/components/trace-waterfall.json +74 -0
- package/manifest/components/turn-footer.json +105 -0
- package/manifest/components/typing-indicator.json +53 -0
- package/manifest/components/unread-divider.json +55 -0
- package/manifest/components/usage-chart.json +1 -1
- 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 +2670 -33
- package/manifest/tokens.json +22 -1
- package/package.json +46 -4
package/dist/date/_segments.js
CHANGED
|
@@ -36,11 +36,46 @@ function segmentGroupClasses(size) {
|
|
|
36
36
|
* through data attributes.
|
|
37
37
|
*/
|
|
38
38
|
const segmentClasses = "rounded-[2px] px-[0.0625rem] tabular-nums outline-none data-[focused]:bg-accent data-[focused]:text-accent-fg data-[placeholder]:text-fg-subtle data-[disabled]:opacity-40 data-[type=literal]:px-0 data-[type=literal]:text-fg-subtle";
|
|
39
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* The `DateInput` children render prop, wired to the segment skin.
|
|
41
|
+
*
|
|
42
|
+
* `suppressHydrationWarning`, and it is not papering over a bug of ours. A
|
|
43
|
+
* segment's text comes from `Intl.DateTimeFormat`, which resolves against the
|
|
44
|
+
* *ICU data of whatever is rendering* — and a server and a browser update their
|
|
45
|
+
* ICU on different schedules. Today, `en-US` at 7:30 PM is `7:30\u202FPM` from
|
|
46
|
+
* Node 24 (CLDR 48) and `7:30\u0020PM` from Chrome 151: one narrow no-break
|
|
47
|
+
* space against one ordinary one, identical on screen, different to React.
|
|
48
|
+
*
|
|
49
|
+
* Without this, that one character is a hydration mismatch, and a mismatch is
|
|
50
|
+
* not a warning — React throws away the server's HTML and re-renders the whole
|
|
51
|
+
* document on the client. That re-mounts `<html>`, which React treats as a
|
|
52
|
+
* singleton and therefore strips every attribute off, including the four the
|
|
53
|
+
* pre-paint script wrote. Measured on this repository's own docs site: 208 ms
|
|
54
|
+
* with no theme, density, mode or pairing on the document, 6,423 elements
|
|
55
|
+
* resolving to a monospace nobody selected, and 40 KB of webfont fetched for it
|
|
56
|
+
* that painted zero glyphs.
|
|
57
|
+
*
|
|
58
|
+
* So the mismatch is declared expected, on the one element whose text can
|
|
59
|
+
* legitimately differ. The server's spelling of the space is kept; nobody can
|
|
60
|
+
* see which one it is.
|
|
61
|
+
*
|
|
62
|
+
* It needs the extra `<span>` because React Aria runs its props through
|
|
63
|
+
* `filterDOMProps`, which drops `suppressHydrationWarning` before the segment's
|
|
64
|
+
* own element ever sees it — and React only honours the flag on the element
|
|
65
|
+
* that directly contains the differing text. Only **literal** segments are
|
|
66
|
+
* wrapped: they are the separators, `aria-hidden` and not focusable, while the
|
|
67
|
+
* value segments React Aria makes `contentEditable` are left exactly as they
|
|
68
|
+
* were. Digits and `AM`/`PM` are spelled the same by every ICU there has been;
|
|
69
|
+
* it is only ever the space between them that moves.
|
|
70
|
+
*/
|
|
40
71
|
function renderSegment(segment) {
|
|
41
72
|
return /* @__PURE__ */ jsx(DateSegment, {
|
|
42
73
|
segment,
|
|
43
|
-
className: segmentClasses
|
|
74
|
+
className: segmentClasses,
|
|
75
|
+
children: ({ text }) => segment.type === "literal" ? /* @__PURE__ */ jsx("span", {
|
|
76
|
+
suppressHydrationWarning: true,
|
|
77
|
+
children: text
|
|
78
|
+
}) : text
|
|
44
79
|
});
|
|
45
80
|
}
|
|
46
81
|
/** The `DateInput` both fields render, dressed and wired to the segment skin. */
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
import * as HeatGraph from "heat-graph";
|
|
3
|
+
//#region src/elements/activity-graph.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* A half-year of runs as a calendar of cells, dense where the work was.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* import { ActivityGraph } from "@cueplusplus/ui/elements";
|
|
9
|
+
*
|
|
10
|
+
* <ActivityGraph
|
|
11
|
+
* data={data}
|
|
12
|
+
* start={start}
|
|
13
|
+
* end={end}
|
|
14
|
+
* title="Agent runs"
|
|
15
|
+
* total="1,204 in 6 months"
|
|
16
|
+
* />
|
|
17
|
+
*/
|
|
18
|
+
declare function ActivityGraph({ data, start, end, title, total, className, ...props }: Omit<ComponentProps<"div">, "children" | "data" | "start" | "end" | "title" | "total"> & {
|
|
19
|
+
/**
|
|
20
|
+
* Date and count pairs from the heat-graph package. Levels are classified for you;
|
|
21
|
+
* gaps are filled as empty cells.
|
|
22
|
+
*/
|
|
23
|
+
data: readonly HeatGraph.DataPoint[];
|
|
24
|
+
/**
|
|
25
|
+
* First day of the window. Pass it explicitly: left unset, heat-graph draws a full
|
|
26
|
+
* year ending today, which will not match your data.
|
|
27
|
+
*/
|
|
28
|
+
start: string | Date;
|
|
29
|
+
/**
|
|
30
|
+
* Last day of the window. Cells are fixed-size, so a long window scrolls
|
|
31
|
+
* horizontally rather than shrinking.
|
|
32
|
+
*/
|
|
33
|
+
end: string | Date;
|
|
34
|
+
/** What is being counted. */
|
|
35
|
+
title: string;
|
|
36
|
+
/** Pre-formatted summary shown opposite the title. */
|
|
37
|
+
total: string;
|
|
38
|
+
}): import("react").JSX.Element;
|
|
39
|
+
//#endregion
|
|
40
|
+
export { ActivityGraph };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { mono, paper } from "./surfaces.js";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import * as HeatGraph from "heat-graph";
|
|
6
|
+
//#region src/elements/activity-graph.tsx
|
|
7
|
+
const LEVEL_TINT = [
|
|
8
|
+
"bg-surface-2",
|
|
9
|
+
"bg-stream/25",
|
|
10
|
+
"bg-stream/45",
|
|
11
|
+
"bg-stream/70",
|
|
12
|
+
"bg-stream"
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* A half-year of runs as a calendar of cells, dense where the work was.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* import { ActivityGraph } from "@cueplusplus/ui/elements";
|
|
19
|
+
*
|
|
20
|
+
* <ActivityGraph
|
|
21
|
+
* data={data}
|
|
22
|
+
* start={start}
|
|
23
|
+
* end={end}
|
|
24
|
+
* title="Agent runs"
|
|
25
|
+
* total="1,204 in 6 months"
|
|
26
|
+
* />
|
|
27
|
+
*/
|
|
28
|
+
function ActivityGraph({ data, start, end, title, total, className, ...props }) {
|
|
29
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
30
|
+
"data-slot": "activity-graph",
|
|
31
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-4", className),
|
|
32
|
+
...props,
|
|
33
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
34
|
+
className: "flex items-baseline justify-between",
|
|
35
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
36
|
+
className: "text-(length:--cue-text-body) font-medium",
|
|
37
|
+
children: title
|
|
38
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
39
|
+
className: cn(mono, "text-fg-subtle tabular-nums"),
|
|
40
|
+
children: total
|
|
41
|
+
})]
|
|
42
|
+
}), /* @__PURE__ */ jsxs(HeatGraph.Root, {
|
|
43
|
+
data: [...data],
|
|
44
|
+
start,
|
|
45
|
+
end,
|
|
46
|
+
weekStart: "monday",
|
|
47
|
+
className: "flex flex-col gap-2",
|
|
48
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
49
|
+
className: "flex gap-2 overflow-x-auto",
|
|
50
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
51
|
+
className: "flex shrink-0 flex-col gap-[3px]",
|
|
52
|
+
children: /* @__PURE__ */ jsx(HeatGraph.DayLabels, { children: ({ label }) => /* @__PURE__ */ jsx("span", {
|
|
53
|
+
className: cn(mono, "text-fg-subtle flex h-[9px] items-center leading-none"),
|
|
54
|
+
children: label.row % 2 === 1 ? HeatGraph.DAY_SHORT[label.dayOfWeek] : ""
|
|
55
|
+
}) })
|
|
56
|
+
}), /* @__PURE__ */ jsx(HeatGraph.Grid, {
|
|
57
|
+
className: "gap-[3px]",
|
|
58
|
+
children: ({ cell }) => /* @__PURE__ */ jsx(HeatGraph.Cell, { className: cn("size-[9px] rounded-(--radius-control)", LEVEL_TINT[cell.level] ?? LEVEL_TINT[0]) })
|
|
59
|
+
})]
|
|
60
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
61
|
+
className: "flex items-center gap-1.5 self-end",
|
|
62
|
+
children: [
|
|
63
|
+
/* @__PURE__ */ jsx("span", {
|
|
64
|
+
className: cn(mono, "text-fg-subtle"),
|
|
65
|
+
children: "less"
|
|
66
|
+
}),
|
|
67
|
+
LEVEL_TINT.map((tint, level) => /* @__PURE__ */ jsx("span", {
|
|
68
|
+
"aria-hidden": true,
|
|
69
|
+
className: cn("size-[9px] rounded-(--radius-control)", tint)
|
|
70
|
+
}, level)),
|
|
71
|
+
/* @__PURE__ */ jsx("span", {
|
|
72
|
+
className: cn(mono, "text-fg-subtle"),
|
|
73
|
+
children: "more"
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
})]
|
|
77
|
+
})]
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { ActivityGraph };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
//#region src/elements/agent-card.d.ts
|
|
3
|
+
/** One thing an agent says it can do: the verb it answers to, and the line under it. */
|
|
4
|
+
interface AgentSkill {
|
|
5
|
+
/** What the skill is called. Drawn as a mono chip, and the row's key. */
|
|
6
|
+
name: string;
|
|
7
|
+
/** One line on what it does, truncated to the row rather than wrapped. */
|
|
8
|
+
description: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Who you are about to talk to: its skills, its model, and the endpoint behind it.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* import { AgentCard } from "@cueplusplus/ui/elements";
|
|
15
|
+
*
|
|
16
|
+
* <AgentCard
|
|
17
|
+
* name="Maintainer"
|
|
18
|
+
* description="Reproduces the report, writes the fix, opens the PR."
|
|
19
|
+
* provider="assistant-ui"
|
|
20
|
+
* version="1.4.0"
|
|
21
|
+
* model="opus"
|
|
22
|
+
* endpoint="https://agents.example.com/a2a"
|
|
23
|
+
* skills={skills}
|
|
24
|
+
* connected={false}
|
|
25
|
+
* onConnect={connect}
|
|
26
|
+
* />
|
|
27
|
+
*/
|
|
28
|
+
declare function AgentCard({ name, description, provider, version, model, endpoint, skills, connected, onConnect, className, ...props }: Omit<ComponentProps<"div">, "children" | "name" | "description" | "provider" | "version" | "model" | "endpoint" | "skills" | "connected" | "onConnect"> & {
|
|
29
|
+
/** Display name of the agent. */
|
|
30
|
+
name: string;
|
|
31
|
+
/** What it does, in one or two sentences. */
|
|
32
|
+
description: string;
|
|
33
|
+
/** Who publishes it. */
|
|
34
|
+
provider: string;
|
|
35
|
+
/** Card version, printed next to the name. */
|
|
36
|
+
version: string;
|
|
37
|
+
/** Model the agent runs on. */
|
|
38
|
+
model: string;
|
|
39
|
+
/** Where it is reached. Truncates rather than wraps. */
|
|
40
|
+
endpoint: string;
|
|
41
|
+
/** Named capabilities the card advertises. */
|
|
42
|
+
skills: readonly AgentSkill[];
|
|
43
|
+
/** Swaps the action for a settled Connected state and disables it. */
|
|
44
|
+
connected: boolean;
|
|
45
|
+
/** Called when the agent is added. */
|
|
46
|
+
onConnect?: () => void;
|
|
47
|
+
}): import("react").JSX.Element;
|
|
48
|
+
//#endregion
|
|
49
|
+
export { AgentCard, AgentSkill };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { field, inkButton, mono, paper } from "./surfaces.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { BotIcon, CheckIcon } from "lucide-react";
|
|
6
|
+
//#region src/elements/agent-card.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Who you are about to talk to: its skills, its model, and the endpoint behind it.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* import { AgentCard } from "@cueplusplus/ui/elements";
|
|
12
|
+
*
|
|
13
|
+
* <AgentCard
|
|
14
|
+
* name="Maintainer"
|
|
15
|
+
* description="Reproduces the report, writes the fix, opens the PR."
|
|
16
|
+
* provider="assistant-ui"
|
|
17
|
+
* version="1.4.0"
|
|
18
|
+
* model="opus"
|
|
19
|
+
* endpoint="https://agents.example.com/a2a"
|
|
20
|
+
* skills={skills}
|
|
21
|
+
* connected={false}
|
|
22
|
+
* onConnect={connect}
|
|
23
|
+
* />
|
|
24
|
+
*/
|
|
25
|
+
function AgentCard({ name, description, provider, version, model, endpoint, skills, connected, onConnect, className, ...props }) {
|
|
26
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
27
|
+
"data-slot": "agent-card",
|
|
28
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-3.5 rounded-(--radius-overlay) p-4", className),
|
|
29
|
+
...props,
|
|
30
|
+
children: [
|
|
31
|
+
/* @__PURE__ */ jsxs("div", {
|
|
32
|
+
className: "flex items-start gap-3",
|
|
33
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
34
|
+
className: "bg-surface-1 text-fg-muted flex size-9 shrink-0 items-center justify-center rounded-(--radius-surface)",
|
|
35
|
+
children: /* @__PURE__ */ jsx(BotIcon, { className: "size-4" })
|
|
36
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
37
|
+
className: "flex min-w-0 flex-1 flex-col",
|
|
38
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
39
|
+
className: "flex items-baseline gap-2",
|
|
40
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
41
|
+
className: "truncate text-(length:--cue-text-body) font-medium",
|
|
42
|
+
children: name
|
|
43
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
44
|
+
className: cn(mono, "text-fg-subtle shrink-0"),
|
|
45
|
+
children: ["v", version]
|
|
46
|
+
})]
|
|
47
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
48
|
+
className: "text-fg-muted truncate text-(length:--cue-text-ui)",
|
|
49
|
+
children: provider
|
|
50
|
+
})]
|
|
51
|
+
})]
|
|
52
|
+
}),
|
|
53
|
+
/* @__PURE__ */ jsx("p", {
|
|
54
|
+
className: "text-fg-muted text-(length:--cue-text-ui) leading-relaxed",
|
|
55
|
+
children: description
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ jsx("div", {
|
|
58
|
+
className: "flex flex-col gap-1.5",
|
|
59
|
+
children: skills.map((skill) => /* @__PURE__ */ jsxs("div", {
|
|
60
|
+
className: "flex items-baseline gap-2",
|
|
61
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
62
|
+
className: cn(field, mono, "text-fg-muted shrink-0 rounded-(--radius-control) px-1.5 py-0.5"),
|
|
63
|
+
children: skill.name
|
|
64
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
65
|
+
className: "text-fg-muted min-w-0 flex-1 truncate text-(length:--cue-text-ui)",
|
|
66
|
+
children: skill.description
|
|
67
|
+
})]
|
|
68
|
+
}, skill.name))
|
|
69
|
+
}),
|
|
70
|
+
/* @__PURE__ */ jsxs("div", {
|
|
71
|
+
className: "border-border flex items-center gap-2 border-t pt-3",
|
|
72
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
73
|
+
className: cn(mono, "text-fg-subtle min-w-0 flex-1 truncate"),
|
|
74
|
+
children: endpoint
|
|
75
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
76
|
+
className: cn(mono, "text-fg-subtle shrink-0"),
|
|
77
|
+
children: model
|
|
78
|
+
})]
|
|
79
|
+
}),
|
|
80
|
+
/* @__PURE__ */ jsx("button", {
|
|
81
|
+
type: "button",
|
|
82
|
+
onClick: onConnect,
|
|
83
|
+
disabled: connected,
|
|
84
|
+
className: cn(connected ? cn(field, "text-fg-muted") : cn(inkButton, "justify-center"), "flex h-8 items-center justify-center gap-1.5 rounded-full px-3.5 text-(length:--cue-text-ui) font-medium disabled:pointer-events-none"),
|
|
85
|
+
children: connected ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5 text-ok" }), "Connected"] }) : "Connect"
|
|
86
|
+
})
|
|
87
|
+
]
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { AgentCard };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
//#region src/elements/agent-handoff.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Control passing between agents, with the reason and what came along.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* import { AgentHandoff } from "@cueplusplus/ui/elements";
|
|
8
|
+
*
|
|
9
|
+
* <AgentHandoff from="Triage" to="Maintainer" reason={reason} carried={carried} settled />
|
|
10
|
+
*/
|
|
11
|
+
declare function AgentHandoff({ from, to, reason, carried, settled, className, ...props }: Omit<ComponentProps<"div">, "children" | "from" | "to" | "reason" | "carried" | "settled"> & {
|
|
12
|
+
/** Agent giving up control. */
|
|
13
|
+
from: string;
|
|
14
|
+
/** Agent taking it. */
|
|
15
|
+
to: string;
|
|
16
|
+
/** Why the baton moved. Without it a handoff reads as an unexplained jump. */
|
|
17
|
+
reason: string;
|
|
18
|
+
/** Context that travelled across. Pass an empty array to hide the section. */
|
|
19
|
+
carried: readonly string[];
|
|
20
|
+
/** Cools the arrow and the receiving badge once the new agent is underway. */
|
|
21
|
+
settled: boolean;
|
|
22
|
+
}): import("react").JSX.Element;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { AgentHandoff };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { field } from "./surfaces.js";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { ArrowRightIcon, BotIcon } from "lucide-react";
|
|
6
|
+
//#region src/elements/agent-handoff.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Control passing between agents, with the reason and what came along.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* import { AgentHandoff } from "@cueplusplus/ui/elements";
|
|
12
|
+
*
|
|
13
|
+
* <AgentHandoff from="Triage" to="Maintainer" reason={reason} carried={carried} settled />
|
|
14
|
+
*/
|
|
15
|
+
function AgentHandoff({ from, to, reason, carried, settled, className, ...props }) {
|
|
16
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
17
|
+
"data-slot": "agent-handoff",
|
|
18
|
+
className: cn("flex w-full max-w-sm flex-col gap-2", className),
|
|
19
|
+
...props,
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ jsxs("div", {
|
|
22
|
+
className: "flex items-center gap-2",
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ jsxs("span", {
|
|
25
|
+
className: cn(field, "text-fg-muted flex items-center gap-1.5 rounded-full px-2.5 py-1 text-(length:--cue-text-ui) transition-opacity duration-500", settled && "opacity-45"),
|
|
26
|
+
children: [/* @__PURE__ */ jsx(BotIcon, { className: "size-3" }), from]
|
|
27
|
+
}),
|
|
28
|
+
/* @__PURE__ */ jsx(ArrowRightIcon, { className: cn("size-3.5 shrink-0 transition-colors duration-500", settled ? "text-fg-subtle" : "text-stream") }),
|
|
29
|
+
/* @__PURE__ */ jsxs("span", {
|
|
30
|
+
className: cn("flex items-center gap-1.5 rounded-full px-2.5 py-1 text-(length:--cue-text-ui) transition-colors duration-500", settled ? cn(field, "text-fg-muted") : "bg-stream/15 text-stream"),
|
|
31
|
+
children: [/* @__PURE__ */ jsx(BotIcon, { className: "size-3" }), to]
|
|
32
|
+
})
|
|
33
|
+
]
|
|
34
|
+
}),
|
|
35
|
+
/* @__PURE__ */ jsx("p", {
|
|
36
|
+
className: "text-fg-muted text-(length:--cue-text-ui) leading-relaxed",
|
|
37
|
+
children: reason
|
|
38
|
+
}),
|
|
39
|
+
carried.length > 0 && /* @__PURE__ */ jsxs("div", {
|
|
40
|
+
className: "flex flex-col gap-1",
|
|
41
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
42
|
+
className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle"),
|
|
43
|
+
children: "carried over"
|
|
44
|
+
}), carried.map((item) => /* @__PURE__ */ jsx("span", {
|
|
45
|
+
className: "text-fg-muted border-border border-s ps-2.5 text-(length:--cue-text-ui) leading-relaxed",
|
|
46
|
+
children: item
|
|
47
|
+
}, item))]
|
|
48
|
+
})
|
|
49
|
+
]
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { AgentHandoff };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { AgentMode } from "./vocabulary.js";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
4
|
+
//#region src/elements/agent-mode-badge.d.ts
|
|
5
|
+
interface AgentModeBadgeProps extends Omit<React.ComponentPropsWithoutRef<"span">, "children"> {
|
|
6
|
+
/**
|
|
7
|
+
* How much authority the run is holding: `manual`, `auto-edit`, `plan` or
|
|
8
|
+
* `unsafe`. Stamped as `data-agent-mode`, which is what the quadruple in
|
|
9
|
+
* `@cueplusplus/ui/elements.css` is keyed on.
|
|
10
|
+
*/
|
|
11
|
+
mode: AgentMode;
|
|
12
|
+
/**
|
|
13
|
+
* The product's own word for it — `Agent`, `Build`, `YOLO`, `Bypass
|
|
14
|
+
* permissions`. Defaults to `AGENT_MODE_LABELS[mode]`, and it is the reason
|
|
15
|
+
* a nine-mode product needs no more than these four rungs.
|
|
16
|
+
*/
|
|
17
|
+
label?: string;
|
|
18
|
+
/**
|
|
19
|
+
* What the mode actually does, as the badge's `title`. Defaults to
|
|
20
|
+
* `AGENT_MODE_DESCRIPTIONS[mode]`. Pass `""` for no tooltip at all.
|
|
21
|
+
*/
|
|
22
|
+
description?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Replace the rendered element (Base UI render prop) — `render={<button
|
|
25
|
+
* type="button" onClick={cycle} />}` for a picker that cycles, which is what
|
|
26
|
+
* every product with more than two modes ships.
|
|
27
|
+
*/
|
|
28
|
+
render?: useRender.RenderProp;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* What the run is allowed to do, said in one chip and one attribute.
|
|
32
|
+
*
|
|
33
|
+
* Agent authority is the fact a person most needs from the corner of their eye
|
|
34
|
+
* and the one every catalogue leaves to prose. This is the readout: a glyph, a
|
|
35
|
+
* word, and `data-agent-mode` on the element. The attribute is the part that
|
|
36
|
+
* travels — `@cueplusplus/ui/elements.css` declares four custom properties
|
|
37
|
+
* under it, so putting the same attribute on a composer tints its focus ring,
|
|
38
|
+
* its send button and its rail from one place, and a console adds a
|
|
39
|
+
* mode-aware surface by reading a property rather than by threading a prop:
|
|
40
|
+
*
|
|
41
|
+
* ```css
|
|
42
|
+
* .composer:focus-within { border-color: var(--cue-elements-mode-icon); }
|
|
43
|
+
* .send-button { background: var(--cue-elements-mode-icon); color: var(--cue-elements-mode-background); }
|
|
44
|
+
* .turn-rail { background: var(--cue-elements-mode-border); }
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* The ladder is four rungs and the mode set is open. Every product in the study
|
|
48
|
+
* paints six, seven or nine modes in exactly four accents — will it ask me, is
|
|
49
|
+
* it writing, is it only planning, are the guardrails off — so the rung is what
|
|
50
|
+
* `mode` carries and the product's own word is what `label` carries.
|
|
51
|
+
*
|
|
52
|
+
* The properties resolve against the *element that carries the attribute*, not
|
|
53
|
+
* against the page: a badge inside an `<AgentSurface skin="aui">` takes the
|
|
54
|
+
* island's palette, because the quadruple is declared on `[data-agent-mode]`
|
|
55
|
+
* rather than at `:root` where a `var()` would have been substituted before it
|
|
56
|
+
* ever reached the island.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* import { AgentModeBadge } from "@cueplusplus/ui/elements";
|
|
60
|
+
*
|
|
61
|
+
* <AgentModeBadge mode="plan" />
|
|
62
|
+
* @example
|
|
63
|
+
* // A product's own word on cue's rung, and a chip that cycles.
|
|
64
|
+
* <AgentModeBadge
|
|
65
|
+
* mode="unsafe"
|
|
66
|
+
* label="YOLO"
|
|
67
|
+
* render={<button type="button" onClick={cycle} />}
|
|
68
|
+
* />
|
|
69
|
+
*/
|
|
70
|
+
declare const AgentModeBadge: React.ForwardRefExoticComponent<AgentModeBadgeProps & React.RefAttributes<HTMLSpanElement>>;
|
|
71
|
+
//#endregion
|
|
72
|
+
export { AgentModeBadge, AgentModeBadgeProps };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { AGENT_MODE_DESCRIPTIONS, AGENT_MODE_LABELS } from "./vocabulary.js";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
7
|
+
import { HandIcon, MapIcon, PencilIcon, ShieldOffIcon } from "lucide-react";
|
|
8
|
+
//#region src/elements/agent-mode-badge.tsx
|
|
9
|
+
/**
|
|
10
|
+
* The glyph per rung, so the ladder survives a colour-blind reader and a
|
|
11
|
+
* monochrome screenshot.
|
|
12
|
+
*
|
|
13
|
+
* A hand for the mode that stops and asks, a pencil for the one that writes, a
|
|
14
|
+
* map for the one that only reads and plans, and a shield with a line through
|
|
15
|
+
* it for the one that does not stop. Colour alone cannot carry authority — this
|
|
16
|
+
* is the same argument that puts a label beside it.
|
|
17
|
+
*/
|
|
18
|
+
const MODE_GLYPH = {
|
|
19
|
+
manual: HandIcon,
|
|
20
|
+
"auto-edit": PencilIcon,
|
|
21
|
+
plan: MapIcon,
|
|
22
|
+
unsafe: ShieldOffIcon
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The four properties the quadruple publishes, with a token behind each.
|
|
26
|
+
*
|
|
27
|
+
* The fallbacks are not decoration: `elements.css` is a consumer import, and
|
|
28
|
+
* without it these four are undeclared. A badge that resolved to nothing would
|
|
29
|
+
* be an invisible chip, so the fallback is the family's neutral — the mode is
|
|
30
|
+
* then carried by the glyph and the label, which is where it has to be carried
|
|
31
|
+
* anyway.
|
|
32
|
+
*/
|
|
33
|
+
const MODE_PAINT = {
|
|
34
|
+
backgroundColor: "var(--cue-elements-mode-background, var(--cue-surface-2))",
|
|
35
|
+
color: "var(--cue-elements-mode-text, var(--cue-fg-muted))",
|
|
36
|
+
borderColor: "var(--cue-elements-mode-border, var(--cue-border))"
|
|
37
|
+
};
|
|
38
|
+
/** The icon's own property, which is the one a rail and a spinner also read. */
|
|
39
|
+
const MODE_ICON = { color: "var(--cue-elements-mode-icon, var(--cue-fg-subtle))" };
|
|
40
|
+
/**
|
|
41
|
+
* What the run is allowed to do, said in one chip and one attribute.
|
|
42
|
+
*
|
|
43
|
+
* Agent authority is the fact a person most needs from the corner of their eye
|
|
44
|
+
* and the one every catalogue leaves to prose. This is the readout: a glyph, a
|
|
45
|
+
* word, and `data-agent-mode` on the element. The attribute is the part that
|
|
46
|
+
* travels — `@cueplusplus/ui/elements.css` declares four custom properties
|
|
47
|
+
* under it, so putting the same attribute on a composer tints its focus ring,
|
|
48
|
+
* its send button and its rail from one place, and a console adds a
|
|
49
|
+
* mode-aware surface by reading a property rather than by threading a prop:
|
|
50
|
+
*
|
|
51
|
+
* ```css
|
|
52
|
+
* .composer:focus-within { border-color: var(--cue-elements-mode-icon); }
|
|
53
|
+
* .send-button { background: var(--cue-elements-mode-icon); color: var(--cue-elements-mode-background); }
|
|
54
|
+
* .turn-rail { background: var(--cue-elements-mode-border); }
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* The ladder is four rungs and the mode set is open. Every product in the study
|
|
58
|
+
* paints six, seven or nine modes in exactly four accents — will it ask me, is
|
|
59
|
+
* it writing, is it only planning, are the guardrails off — so the rung is what
|
|
60
|
+
* `mode` carries and the product's own word is what `label` carries.
|
|
61
|
+
*
|
|
62
|
+
* The properties resolve against the *element that carries the attribute*, not
|
|
63
|
+
* against the page: a badge inside an `<AgentSurface skin="aui">` takes the
|
|
64
|
+
* island's palette, because the quadruple is declared on `[data-agent-mode]`
|
|
65
|
+
* rather than at `:root` where a `var()` would have been substituted before it
|
|
66
|
+
* ever reached the island.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* import { AgentModeBadge } from "@cueplusplus/ui/elements";
|
|
70
|
+
*
|
|
71
|
+
* <AgentModeBadge mode="plan" />
|
|
72
|
+
* @example
|
|
73
|
+
* // A product's own word on cue's rung, and a chip that cycles.
|
|
74
|
+
* <AgentModeBadge
|
|
75
|
+
* mode="unsafe"
|
|
76
|
+
* label="YOLO"
|
|
77
|
+
* render={<button type="button" onClick={cycle} />}
|
|
78
|
+
* />
|
|
79
|
+
*/
|
|
80
|
+
const AgentModeBadge = React.forwardRef(function AgentModeBadge({ mode, label, description, render, className, style, ...elementProps }, ref) {
|
|
81
|
+
const Glyph = MODE_GLYPH[mode];
|
|
82
|
+
const said = label ?? AGENT_MODE_LABELS[mode];
|
|
83
|
+
const explained = description ?? AGENT_MODE_DESCRIPTIONS[mode];
|
|
84
|
+
return useRender({
|
|
85
|
+
render,
|
|
86
|
+
ref,
|
|
87
|
+
defaultTagName: "span",
|
|
88
|
+
props: {
|
|
89
|
+
...elementProps,
|
|
90
|
+
"data-slot": "agent-mode-badge",
|
|
91
|
+
"data-agent-mode": mode,
|
|
92
|
+
title: explained === "" ? void 0 : explained,
|
|
93
|
+
style: {
|
|
94
|
+
...MODE_PAINT,
|
|
95
|
+
...style
|
|
96
|
+
},
|
|
97
|
+
className: cn("inline-flex shrink-0 items-center gap-1.5 rounded-full border px-2 py-0.5 text-(length:--cue-text-ui) font-medium", className),
|
|
98
|
+
children: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Glyph, {
|
|
99
|
+
"aria-hidden": true,
|
|
100
|
+
className: "size-3.5 shrink-0",
|
|
101
|
+
style: MODE_ICON
|
|
102
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
103
|
+
className: "min-w-0 truncate",
|
|
104
|
+
children: said
|
|
105
|
+
})] })
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//#endregion
|
|
110
|
+
export { AgentModeBadge };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
//#region src/elements/agent-plan.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* A checklist the agent works through, with progress you can glance.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* import { AgentPlan } from "@cueplusplus/ui/elements";
|
|
8
|
+
*
|
|
9
|
+
* <AgentPlan
|
|
10
|
+
* steps={["Read the file", "Draft the fix", "Run tests"]}
|
|
11
|
+
* activeIndex={1}
|
|
12
|
+
* />
|
|
13
|
+
*/
|
|
14
|
+
declare function AgentPlan({ steps, activeIndex, className, ...props }: Omit<ComponentProps<"div">, "children" | "steps" | "activeIndex"> & {
|
|
15
|
+
/** Checklist items the agent works through in order. */
|
|
16
|
+
steps: readonly string[];
|
|
17
|
+
/**
|
|
18
|
+
* Index of the step currently running. Values past the end mark every step done, and
|
|
19
|
+
* values before the start mark none.
|
|
20
|
+
*/
|
|
21
|
+
activeIndex: number;
|
|
22
|
+
}): import("react").JSX.Element;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { AgentPlan };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { mono } from "./surfaces.js";
|
|
4
|
+
import { pct, progressOf } from "./range.js";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { CheckIcon, Loader2Icon } from "lucide-react";
|
|
7
|
+
//#region src/elements/agent-plan.tsx
|
|
8
|
+
/**
|
|
9
|
+
* A checklist the agent works through, with progress you can glance.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* import { AgentPlan } from "@cueplusplus/ui/elements";
|
|
13
|
+
*
|
|
14
|
+
* <AgentPlan
|
|
15
|
+
* steps={["Read the file", "Draft the fix", "Run tests"]}
|
|
16
|
+
* activeIndex={1}
|
|
17
|
+
* />
|
|
18
|
+
*/
|
|
19
|
+
function AgentPlan({ steps, activeIndex, className, ...props }) {
|
|
20
|
+
const total = steps.length;
|
|
21
|
+
const completed = progressOf(activeIndex, total);
|
|
22
|
+
const allDone = completed >= total;
|
|
23
|
+
const progress = pct(completed, total);
|
|
24
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
25
|
+
"data-slot": "agent-plan",
|
|
26
|
+
className: cn("flex w-full max-w-sm flex-col gap-3", className),
|
|
27
|
+
...props,
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ jsxs("div", {
|
|
30
|
+
className: "flex items-center justify-between",
|
|
31
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
32
|
+
className: "text-(length:--cue-text-body) font-medium",
|
|
33
|
+
children: "Plan"
|
|
34
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
35
|
+
className: cn(mono, "text-fg-subtle tabular-nums"),
|
|
36
|
+
children: [
|
|
37
|
+
completed,
|
|
38
|
+
" of ",
|
|
39
|
+
total
|
|
40
|
+
]
|
|
41
|
+
})]
|
|
42
|
+
}),
|
|
43
|
+
/* @__PURE__ */ jsx("div", {
|
|
44
|
+
className: "bg-surface-2 h-[3px] w-full overflow-hidden rounded-full",
|
|
45
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
46
|
+
className: "bg-accent block h-full rounded-full transition-[width] duration-500",
|
|
47
|
+
style: { width: `${progress}%` }
|
|
48
|
+
})
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ jsx("ul", {
|
|
51
|
+
className: "flex flex-col gap-2.5",
|
|
52
|
+
children: steps.map((step, i) => {
|
|
53
|
+
const done = allDone || i < completed;
|
|
54
|
+
const active = !allDone && i === completed;
|
|
55
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
56
|
+
className: "flex items-center gap-2.5 text-(length:--cue-text-body)",
|
|
57
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
58
|
+
className: "flex size-4 shrink-0 items-center justify-center",
|
|
59
|
+
children: done ? /* @__PURE__ */ jsx(CheckIcon, { className: "text-fg-subtle size-3.5" }) : active ? /* @__PURE__ */ jsx(Loader2Icon, { className: "text-fg size-3.5 animate-spin motion-reduce:animate-none" }) : /* @__PURE__ */ jsx("span", {
|
|
60
|
+
"aria-hidden": true,
|
|
61
|
+
className: "bg-surface-3 size-1.5 rounded-full"
|
|
62
|
+
})
|
|
63
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
64
|
+
className: cn(done && "text-fg-subtle", active && "text-fg", !done && !active && "text-fg-subtle"),
|
|
65
|
+
children: step
|
|
66
|
+
})]
|
|
67
|
+
}, step);
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { AgentPlan };
|