@cueplusplus/ui 0.13.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 +4028 -0
- package/LICENSE +21 -0
- package/NOTICE.md +34 -0
- package/README.md +237 -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 +54 -0
- package/dist/brand/_chassis.js +81 -0
- package/dist/brand/_geometry.js +41 -0
- package/dist/brand/cue-logotype.d.ts +29 -0
- package/dist/brand/cue-logotype.js +60 -0
- package/dist/brand/cue-mark.d.ts +30 -0
- package/dist/brand/cue-mark.js +61 -0
- package/dist/brand/index.d.ts +5 -0
- package/dist/brand/plussie.d.ts +67 -0
- package/dist/brand/plussie.js +125 -0
- package/dist/charts/_token.js +39 -0
- package/dist/charts/container.d.ts +58 -0
- package/dist/charts/container.js +77 -0
- package/dist/charts/index.d.ts +5 -0
- package/dist/charts/index.js +5 -0
- package/dist/charts/ramps.d.ts +140 -0
- package/dist/charts/ramps.js +615 -0
- package/dist/charts/theme.d.ts +112 -0
- package/dist/charts/theme.js +165 -0
- package/dist/charts/tones.d.ts +111 -0
- package/dist/charts/tones.js +127 -0
- package/dist/chat/_glyphs.js +55 -0
- package/dist/chat/agent-color.d.ts +84 -0
- package/dist/chat/agent-color.js +101 -0
- package/dist/chat/agent-pile.d.ts +55 -0
- package/dist/chat/agent-pile.js +121 -0
- package/dist/chat/ask-box.d.ts +88 -0
- package/dist/chat/ask-box.js +341 -0
- package/dist/chat/composer.d.ts +66 -0
- package/dist/chat/composer.js +144 -0
- package/dist/chat/delegation-card.d.ts +60 -0
- package/dist/chat/delegation-card.js +129 -0
- package/dist/chat/index.d.ts +8 -0
- package/dist/chat/index.js +8 -0
- package/dist/chat/message-list.d.ts +45 -0
- package/dist/chat/message-list.js +141 -0
- package/dist/chat/message.d.ts +47 -0
- package/dist/chat/message.js +108 -0
- package/dist/chrome/_band.js +54 -0
- package/dist/chrome/_drag.js +59 -0
- package/dist/chrome/_edge-scroller.d.ts +45 -0
- package/dist/chrome/_edge-scroller.js +149 -0
- package/dist/chrome/_glyphs.js +119 -0
- package/dist/chrome/_status-bar-item.js +85 -0
- package/dist/chrome/_status-bar.d.ts +15 -0
- package/dist/chrome/_status-bar.js +171 -0
- package/dist/chrome/_tabs-scroll.d.ts +67 -0
- package/dist/chrome/_tabs-scroll.js +73 -0
- package/dist/chrome/_tree.d.ts +75 -0
- package/dist/chrome/_tree.js +49 -0
- package/dist/chrome/app-bar.d.ts +103 -0
- package/dist/chrome/app-bar.js +175 -0
- package/dist/chrome/app-shell.d.ts +243 -0
- package/dist/chrome/app-shell.js +266 -0
- package/dist/chrome/band.d.ts +106 -0
- package/dist/chrome/band.js +97 -0
- package/dist/chrome/empty-state.d.ts +37 -0
- package/dist/chrome/empty-state.js +57 -0
- package/dist/chrome/eyebrow.d.ts +29 -0
- package/dist/chrome/eyebrow.js +36 -0
- package/dist/chrome/footer.d.ts +88 -0
- package/dist/chrome/footer.js +83 -0
- package/dist/chrome/index.d.ts +24 -0
- package/dist/chrome/index.js +22 -0
- package/dist/chrome/inspector.d.ts +61 -0
- package/dist/chrome/inspector.js +121 -0
- package/dist/chrome/navigation-menu.d.ts +80 -0
- package/dist/chrome/navigation-menu.js +121 -0
- package/dist/chrome/page-shell.d.ts +38 -0
- package/dist/chrome/page-shell.js +76 -0
- package/dist/chrome/panel.d.ts +55 -0
- package/dist/chrome/panel.js +67 -0
- package/dist/chrome/row.d.ts +82 -0
- package/dist/chrome/row.js +106 -0
- package/dist/chrome/scroll-area.d.ts +39 -0
- package/dist/chrome/scroll-area.js +70 -0
- package/dist/chrome/section-header.d.ts +42 -0
- package/dist/chrome/section-header.js +79 -0
- package/dist/chrome/segmented-control.d.ts +77 -0
- package/dist/chrome/segmented-control.js +95 -0
- package/dist/chrome/status-bar.d.ts +129 -0
- package/dist/chrome/status-bar.js +120 -0
- package/dist/chrome/tabs.d.ts +80 -0
- package/dist/chrome/tabs.js +132 -0
- package/dist/chrome/title-bar.d.ts +47 -0
- package/dist/chrome/title-bar.js +43 -0
- package/dist/chrome/toolbar.d.ts +68 -0
- package/dist/chrome/toolbar.js +83 -0
- package/dist/chrome/tree.d.ts +98 -0
- package/dist/chrome/tree.js +248 -0
- package/dist/color/_checker.js +14 -0
- package/dist/color/_convert.d.ts +52 -0
- package/dist/color/_convert.js +66 -0
- package/dist/color/_glyphs.js +28 -0
- package/dist/color/_thumb.js +15 -0
- package/dist/color/_value.js +28 -0
- package/dist/color/color-area.d.ts +27 -0
- package/dist/color/color-area.js +40 -0
- package/dist/color/color-field.d.ts +32 -0
- package/dist/color/color-field.js +43 -0
- package/dist/color/color-picker.d.ts +71 -0
- package/dist/color/color-picker.js +178 -0
- package/dist/color/color-slider.d.ts +31 -0
- package/dist/color/color-slider.js +51 -0
- package/dist/color/color-swatch.d.ts +32 -0
- package/dist/color/color-swatch.js +44 -0
- package/dist/color/index.d.ts +7 -0
- package/dist/color/index.js +7 -0
- package/dist/configurator/_export.d.ts +78 -0
- package/dist/configurator/_export.js +302 -0
- package/dist/configurator/_glyphs.js +92 -0
- package/dist/configurator/_overrides.d.ts +266 -0
- package/dist/configurator/_overrides.js +541 -0
- package/dist/configurator/configurator.d.ts +71 -0
- package/dist/configurator/configurator.js +284 -0
- package/dist/configurator/export-dialog.d.ts +30 -0
- package/dist/configurator/export-dialog.js +121 -0
- package/dist/configurator/index.d.ts +8 -0
- package/dist/configurator/index.js +8 -0
- package/dist/configurator/panel-sections.d.ts +86 -0
- package/dist/configurator/panel-sections.js +352 -0
- package/dist/configurator/token-editor.d.ts +74 -0
- package/dist/configurator/token-editor.js +152 -0
- package/dist/configurator/use-zoom.d.ts +87 -0
- package/dist/configurator/use-zoom.js +113 -0
- package/dist/date/_glyphs.js +34 -0
- package/dist/date/_segments.js +101 -0
- package/dist/date/_trigger.js +31 -0
- package/dist/date/calendar.d.ts +25 -0
- package/dist/date/calendar.js +125 -0
- package/dist/date/date-field.d.ts +34 -0
- package/dist/date/date-field.js +41 -0
- package/dist/date/date-picker.d.ts +69 -0
- package/dist/date/date-picker.js +89 -0
- package/dist/date/date-range-picker.d.ts +65 -0
- package/dist/date/date-range-picker.js +92 -0
- package/dist/date/index.d.ts +6 -0
- package/dist/date/index.js +6 -0
- package/dist/date/time-field.d.ts +29 -0
- package/dist/date/time-field.js +36 -0
- package/dist/dmx/_ramp.d.ts +77 -0
- package/dist/dmx/_ramp.js +169 -0
- package/dist/dmx/_readout.js +53 -0
- package/dist/dmx/_universe.d.ts +105 -0
- package/dist/dmx/_universe.js +112 -0
- package/dist/dmx/channel-matrix.d.ts +81 -0
- package/dist/dmx/channel-matrix.js +285 -0
- package/dist/dmx/dmx-bar.d.ts +50 -0
- package/dist/dmx/dmx-bar.js +107 -0
- package/dist/dmx/dmx-strip.d.ts +41 -0
- package/dist/dmx/dmx-strip.js +196 -0
- package/dist/dmx/index.d.ts +7 -0
- package/dist/dmx/index.js +7 -0
- package/dist/dmx/universe-grid.d.ts +61 -0
- package/dist/dmx/universe-grid.js +182 -0
- 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 +123 -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 +108 -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/flow/_frame.d.ts +52 -0
- package/dist/flow/_frame.js +38 -0
- package/dist/flow/controls.d.ts +41 -0
- package/dist/flow/controls.js +53 -0
- package/dist/flow/flow.css +121 -0
- package/dist/flow/handles.d.ts +40 -0
- package/dist/flow/handles.js +61 -0
- package/dist/flow/index.d.ts +7 -0
- package/dist/flow/index.js +7 -0
- package/dist/flow/node-card.d.ts +71 -0
- package/dist/flow/node-card.js +102 -0
- package/dist/flow/signal-edge.d.ts +60 -0
- package/dist/flow/signal-edge.js +108 -0
- package/dist/flow/use-flow-theme.d.ts +69 -0
- package/dist/flow/use-flow-theme.js +109 -0
- package/dist/forms/_chassis.d.ts +164 -0
- package/dist/forms/_chassis.js +159 -0
- package/dist/forms/_glyphs.js +143 -0
- package/dist/forms/_listbox.js +55 -0
- package/dist/forms/autocomplete.d.ts +61 -0
- package/dist/forms/autocomplete.js +88 -0
- package/dist/forms/button-group.d.ts +47 -0
- package/dist/forms/button-group.js +52 -0
- package/dist/forms/checkbox.d.ts +51 -0
- package/dist/forms/checkbox.js +98 -0
- package/dist/forms/combobox.d.ts +73 -0
- package/dist/forms/combobox.js +108 -0
- package/dist/forms/env-var-input.d.ts +74 -0
- package/dist/forms/env-var-input.js +116 -0
- package/dist/forms/field.d.ts +89 -0
- package/dist/forms/field.js +102 -0
- package/dist/forms/file-upload.d.ts +113 -0
- package/dist/forms/file-upload.js +232 -0
- package/dist/forms/index.d.ts +26 -0
- package/dist/forms/index.js +26 -0
- package/dist/forms/input-group.d.ts +36 -0
- package/dist/forms/input-group.js +59 -0
- package/dist/forms/input.d.ts +45 -0
- package/dist/forms/input.js +36 -0
- package/dist/forms/multi-select.d.ts +62 -0
- package/dist/forms/multi-select.js +107 -0
- package/dist/forms/number-field.d.ts +39 -0
- package/dist/forms/number-field.js +65 -0
- package/dist/forms/otp-field.d.ts +54 -0
- package/dist/forms/otp-field.js +59 -0
- package/dist/forms/password-input.d.ts +46 -0
- package/dist/forms/password-input.js +62 -0
- package/dist/forms/radio-group.d.ts +50 -0
- package/dist/forms/radio-group.js +64 -0
- package/dist/forms/rating.d.ts +69 -0
- package/dist/forms/rating.js +103 -0
- package/dist/forms/scrub-input.d.ts +81 -0
- package/dist/forms/scrub-input.js +249 -0
- package/dist/forms/search-input.d.ts +54 -0
- package/dist/forms/search-input.js +112 -0
- package/dist/forms/select.d.ts +75 -0
- package/dist/forms/select.js +91 -0
- package/dist/forms/slider.d.ts +44 -0
- package/dist/forms/slider.js +65 -0
- package/dist/forms/switch.d.ts +36 -0
- package/dist/forms/switch.js +71 -0
- package/dist/forms/tags-input.d.ts +69 -0
- package/dist/forms/tags-input.js +148 -0
- package/dist/forms/textarea.d.ts +39 -0
- package/dist/forms/textarea.js +37 -0
- package/dist/forms/toggle-group.d.ts +41 -0
- package/dist/forms/toggle-group.js +56 -0
- package/dist/forms/toggle.d.ts +47 -0
- package/dist/forms/toggle.js +100 -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 +138 -0
- package/dist/index.js +124 -0
- package/dist/instruments/_ansi.js +116 -0
- package/dist/instruments/_data-row.d.ts +68 -0
- package/dist/instruments/_data-row.js +139 -0
- package/dist/instruments/_glyphs.js +90 -0
- package/dist/instruments/_ledger-disclosure.js +103 -0
- package/dist/instruments/_ledger.d.ts +21 -0
- package/dist/instruments/_ledger.js +5 -0
- package/dist/instruments/_motion.js +56 -0
- package/dist/instruments/_rem.js +21 -0
- package/dist/instruments/app-window-frame.d.ts +48 -0
- package/dist/instruments/app-window-frame.js +76 -0
- package/dist/instruments/code-block.d.ts +35 -0
- package/dist/instruments/code-block.js +173 -0
- package/dist/instruments/copy-button.d.ts +41 -0
- package/dist/instruments/copy-button.js +112 -0
- package/dist/instruments/data-row.d.ts +94 -0
- package/dist/instruments/data-row.js +151 -0
- package/dist/instruments/data-table.d.ts +168 -0
- package/dist/instruments/data-table.js +212 -0
- package/dist/instruments/data-tree.d.ts +126 -0
- package/dist/instruments/data-tree.js +303 -0
- package/dist/instruments/group-bar.d.ts +63 -0
- package/dist/instruments/group-bar.js +122 -0
- package/dist/instruments/index.d.ts +18 -0
- package/dist/instruments/index.js +18 -0
- package/dist/instruments/ledger.d.ts +204 -0
- package/dist/instruments/ledger.js +204 -0
- package/dist/instruments/log-viewer.d.ts +74 -0
- package/dist/instruments/log-viewer.js +215 -0
- package/dist/instruments/meter.d.ts +81 -0
- package/dist/instruments/meter.js +96 -0
- package/dist/instruments/progress.d.ts +61 -0
- package/dist/instruments/progress.js +79 -0
- package/dist/instruments/seam-grid.d.ts +66 -0
- package/dist/instruments/seam-grid.js +78 -0
- package/dist/instruments/sparkline.d.ts +39 -0
- package/dist/instruments/sparkline.js +85 -0
- package/dist/instruments/stat.d.ts +35 -0
- package/dist/instruments/stat.js +59 -0
- package/dist/instruments/table.d.ts +170 -0
- package/dist/instruments/table.js +237 -0
- package/dist/instruments/terminal-frame.d.ts +89 -0
- package/dist/instruments/terminal-frame.js +256 -0
- package/dist/instruments/two-step-button.d.ts +47 -0
- package/dist/instruments/two-step-button.js +166 -0
- package/dist/instruments/usage-chart.d.ts +55 -0
- package/dist/instruments/usage-chart.js +235 -0
- package/dist/layout/_collapse.js +46 -0
- package/dist/layout/_glyphs.js +45 -0
- package/dist/layout/_ground.d.ts +22 -0
- package/dist/layout/_ground.js +9 -0
- package/dist/layout/accordion.d.ts +52 -0
- package/dist/layout/accordion.js +81 -0
- package/dist/layout/bento.d.ts +144 -0
- package/dist/layout/bento.js +266 -0
- package/dist/layout/breadcrumb.d.ts +35 -0
- package/dist/layout/breadcrumb.js +67 -0
- package/dist/layout/card.d.ts +51 -0
- package/dist/layout/card.js +76 -0
- package/dist/layout/carousel.d.ts +96 -0
- package/dist/layout/carousel.js +211 -0
- package/dist/layout/collapsible.d.ts +74 -0
- package/dist/layout/collapsible.js +126 -0
- package/dist/layout/container.d.ts +27 -0
- package/dist/layout/container.js +43 -0
- package/dist/layout/description-list.d.ts +24 -0
- package/dist/layout/description-list.js +37 -0
- package/dist/layout/frames.d.ts +70 -0
- package/dist/layout/frames.js +298 -0
- package/dist/layout/grid.d.ts +40 -0
- package/dist/layout/grid.js +48 -0
- package/dist/layout/index.d.ts +19 -0
- package/dist/layout/index.js +18 -0
- package/dist/layout/item.d.ts +65 -0
- package/dist/layout/item.js +100 -0
- package/dist/layout/link.d.ts +48 -0
- package/dist/layout/link.js +63 -0
- package/dist/layout/pagination.d.ts +54 -0
- package/dist/layout/pagination.js +121 -0
- package/dist/layout/preview.d.ts +177 -0
- package/dist/layout/preview.js +628 -0
- package/dist/layout/resizable.d.ts +38 -0
- package/dist/layout/resizable.js +68 -0
- package/dist/layout/sidebar.d.ts +105 -0
- package/dist/layout/sidebar.js +158 -0
- package/dist/layout/stack.d.ts +46 -0
- package/dist/layout/stack.js +62 -0
- package/dist/layout/stepper.d.ts +49 -0
- package/dist/layout/stepper.js +81 -0
- package/dist/layout/timeline.d.ts +43 -0
- package/dist/layout/timeline.js +63 -0
- package/dist/lib/aria-class.js +24 -0
- package/dist/lib/cn.js +18 -0
- package/dist/lib/compose.js +38 -0
- package/dist/lib/cva.d.ts +18 -0
- package/dist/lib/cva.js +65 -0
- package/dist/midi/_notes.d.ts +101 -0
- package/dist/midi/_notes.js +183 -0
- package/dist/midi/_ruler.d.ts +100 -0
- package/dist/midi/_ruler.js +105 -0
- package/dist/midi/_time.d.ts +107 -0
- package/dist/midi/_time.js +130 -0
- package/dist/midi/index.d.ts +9 -0
- package/dist/midi/index.js +9 -0
- package/dist/midi/musical-time-input.d.ts +48 -0
- package/dist/midi/musical-time-input.js +154 -0
- package/dist/midi/piano-keyboard.d.ts +50 -0
- package/dist/midi/piano-keyboard.js +197 -0
- package/dist/midi/spectrum-visualizer.d.ts +65 -0
- package/dist/midi/spectrum-visualizer.js +213 -0
- package/dist/midi/threshold-rail.d.ts +72 -0
- package/dist/midi/threshold-rail.js +214 -0
- package/dist/midi/timeline-ruler.d.ts +83 -0
- package/dist/midi/timeline-ruler.js +152 -0
- package/dist/overlays/_debounce.js +34 -0
- package/dist/overlays/_glyphs.js +59 -0
- package/dist/overlays/_surface.d.ts +70 -0
- package/dist/overlays/_surface.js +70 -0
- package/dist/overlays/_wheel.js +42 -0
- package/dist/overlays/alert-dialog.d.ts +67 -0
- package/dist/overlays/alert-dialog.js +117 -0
- package/dist/overlays/command-palette.d.ts +93 -0
- package/dist/overlays/command-palette.js +193 -0
- package/dist/overlays/context-menu.d.ts +64 -0
- package/dist/overlays/context-menu.js +78 -0
- package/dist/overlays/dialog.d.ts +72 -0
- package/dist/overlays/dialog.js +124 -0
- package/dist/overlays/drawer.d.ts +75 -0
- package/dist/overlays/drawer.js +151 -0
- package/dist/overlays/dropdown-menu.d.ts +79 -0
- package/dist/overlays/dropdown-menu.js +156 -0
- package/dist/overlays/hover-card.d.ts +58 -0
- package/dist/overlays/hover-card.js +91 -0
- package/dist/overlays/index.d.ts +15 -0
- package/dist/overlays/index.js +15 -0
- package/dist/overlays/info-tip.d.ts +41 -0
- package/dist/overlays/info-tip.js +45 -0
- package/dist/overlays/menubar.d.ts +72 -0
- package/dist/overlays/menubar.js +100 -0
- package/dist/overlays/popover.d.ts +66 -0
- package/dist/overlays/popover.js +114 -0
- package/dist/overlays/sheet.d.ts +78 -0
- package/dist/overlays/sheet.js +131 -0
- package/dist/overlays/toast.d.ts +106 -0
- package/dist/overlays/toast.js +146 -0
- package/dist/overlays/tooltip.d.ts +57 -0
- package/dist/overlays/tooltip.js +95 -0
- package/dist/primitives/avatar.d.ts +51 -0
- package/dist/primitives/avatar.js +93 -0
- package/dist/primitives/button.d.ts +58 -0
- package/dist/primitives/button.js +104 -0
- package/dist/primitives/chip.d.ts +73 -0
- package/dist/primitives/chip.js +238 -0
- package/dist/primitives/icon-button.d.ts +41 -0
- package/dist/primitives/icon-button.js +59 -0
- package/dist/primitives/index.d.ts +10 -0
- package/dist/primitives/index.js +10 -0
- package/dist/primitives/kbd.d.ts +17 -0
- package/dist/primitives/kbd.js +24 -0
- package/dist/primitives/separator.d.ts +25 -0
- package/dist/primitives/separator.js +30 -0
- package/dist/primitives/skeleton.d.ts +20 -0
- package/dist/primitives/skeleton.js +27 -0
- package/dist/primitives/spinner.d.ts +26 -0
- package/dist/primitives/spinner.js +31 -0
- package/dist/primitives/status-dot.d.ts +51 -0
- package/dist/primitives/status-dot.js +57 -0
- package/dist/styles.css +97 -0
- package/dist/system/agent-skin.d.ts +27 -0
- package/dist/system/agent-skin.js +20 -0
- package/dist/system/density.d.ts +73 -0
- package/dist/system/density.js +111 -0
- package/dist/system/index.d.ts +12 -0
- package/dist/system/index.js +10 -0
- package/dist/system/overrides.d.ts +80 -0
- package/dist/system/overrides.js +277 -0
- package/dist/system/portal.d.ts +56 -0
- package/dist/system/portal.js +193 -0
- package/dist/system/prepaint.d.ts +134 -0
- package/dist/system/prepaint.js +120 -0
- package/dist/system/theme-provider.d.ts +290 -0
- package/dist/system/theme-provider.js +543 -0
- package/dist/system/theme-registry.d.ts +53 -0
- package/dist/system/theme-registry.js +66 -0
- package/dist/system/use-density.d.ts +50 -0
- package/dist/system/use-density.js +232 -0
- package/dist/system/use-isomorphic-layout-effect.js +33 -0
- package/dist/system/use-theme.d.ts +30 -0
- package/dist/system/use-theme.js +36 -0
- package/dist/system/vocabulary.d.ts +16 -0
- package/dist/system/vocabulary.js +125 -0
- package/dist/theming/contrast.d.ts +2 -0
- package/dist/theming/contrast.js +2 -0
- package/dist/theming/create-theme.d.ts +195 -0
- package/dist/theming/create-theme.js +524 -0
- package/dist/theming/index.d.ts +4 -0
- package/dist/theming/index.js +4 -0
- package/dist/theming/serialize.d.ts +167 -0
- package/dist/theming/serialize.js +241 -0
- package/manifest/components/accordion.json +173 -0
- package/manifest/components/activity-graph.json +104 -0
- package/manifest/components/agent-card.json +150 -0
- package/manifest/components/agent-handoff.json +104 -0
- package/manifest/components/agent-mode-badge.json +102 -0
- package/manifest/components/agent-pile.json +147 -0
- package/manifest/components/agent-plan.json +74 -0
- package/manifest/components/agent-status.json +87 -0
- package/manifest/components/agent-surface.json +93 -0
- package/manifest/components/alert-dialog.json +215 -0
- package/manifest/components/animated-number.json +75 -0
- package/manifest/components/app-bar.json +297 -0
- package/manifest/components/app-shell.json +526 -0
- package/manifest/components/app-window-frame.json +124 -0
- package/manifest/components/approval-card.json +136 -0
- package/manifest/components/artifact-card.json +93 -0
- package/manifest/components/ask-box.json +288 -0
- package/manifest/components/audience-icon.json +46 -0
- package/manifest/components/autocomplete.json +262 -0
- package/manifest/components/avatar-group.json +83 -0
- package/manifest/components/avatar.json +113 -0
- package/manifest/components/background-inbox.json +79 -0
- package/manifest/components/band.json +104 -0
- package/manifest/components/bento.json +306 -0
- package/manifest/components/branch-picker.json +146 -0
- package/manifest/components/breadcrumb.json +85 -0
- package/manifest/components/button-group.json +91 -0
- package/manifest/components/button.json +163 -0
- package/manifest/components/calendar.json +65 -0
- package/manifest/components/canvas-split-body.json +66 -0
- package/manifest/components/canvas-split-document.json +55 -0
- package/manifest/components/canvas-split-header.json +97 -0
- package/manifest/components/canvas-split-line.json +66 -0
- package/manifest/components/canvas-split-message.json +70 -0
- package/manifest/components/canvas-split-thread.json +55 -0
- package/manifest/components/canvas-split.json +61 -0
- package/manifest/components/card.json +152 -0
- package/manifest/components/carousel.json +242 -0
- package/manifest/components/catalogue-icon.json +46 -0
- package/manifest/components/channel-beta-icon.json +46 -0
- package/manifest/components/channel-matrix.json +239 -0
- package/manifest/components/channel-released-icon.json +46 -0
- package/manifest/components/chart-container.json +127 -0
- package/manifest/components/chart-ramp.json +82 -0
- package/manifest/components/chart-swatch.json +72 -0
- package/manifest/components/chart-tooltip-content.json +140 -0
- package/manifest/components/chart.json +117 -0
- package/manifest/components/chat-empty-state.json +55 -0
- package/manifest/components/chat-panel-assistant-message.json +52 -0
- package/manifest/components/chat-panel-composer.json +74 -0
- package/manifest/components/chat-panel-messages.json +52 -0
- package/manifest/components/chat-panel-typing.json +52 -0
- package/manifest/components/chat-panel-user-message.json +52 -0
- package/manifest/components/chat-panel.json +58 -0
- package/manifest/components/checkbox-group.json +70 -0
- package/manifest/components/checkbox.json +106 -0
- package/manifest/components/checkpoint-history.json +91 -0
- package/manifest/components/chip.json +174 -0
- package/manifest/components/clamp.json +125 -0
- package/manifest/components/cli-tool-icon.json +46 -0
- package/manifest/components/code-block.json +107 -0
- package/manifest/components/code-diff.json +104 -0
- package/manifest/components/code-runner.json +124 -0
- package/manifest/components/collapsible.json +133 -0
- package/manifest/components/color-area.json +62 -0
- package/manifest/components/color-field.json +91 -0
- package/manifest/components/color-picker.json +235 -0
- package/manifest/components/color-slider.json +84 -0
- package/manifest/components/color-swatch.json +79 -0
- package/manifest/components/colors-section.json +70 -0
- package/manifest/components/combobox.json +265 -0
- package/manifest/components/command-palette.json +222 -0
- package/manifest/components/compaction-row.json +128 -0
- package/manifest/components/comparison-card.json +98 -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 +83 -0
- package/manifest/components/composer-attachments.json +60 -0
- package/manifest/components/composer-bar.json +76 -0
- package/manifest/components/composer-command-item.json +85 -0
- package/manifest/components/composer-context.json +71 -0
- package/manifest/components/composer-input.json +77 -0
- package/manifest/components/composer-menu-item.json +75 -0
- package/manifest/components/composer-menu.json +89 -0
- package/manifest/components/composer-model-item.json +82 -0
- package/manifest/components/composer-model-trigger.json +81 -0
- package/manifest/components/composer-person-item.json +86 -0
- package/manifest/components/composer-send.json +86 -0
- package/manifest/components/composer-toolbar.json +65 -0
- package/manifest/components/composer-voice-button.json +71 -0
- package/manifest/components/composer-voice.json +81 -0
- package/manifest/components/composer.json +238 -0
- package/manifest/components/computer-use.json +98 -0
- package/manifest/components/confidence-marker.json +86 -0
- package/manifest/components/connection-state.json +103 -0
- package/manifest/components/container.json +75 -0
- package/manifest/components/context-breakdown.json +72 -0
- package/manifest/components/context-menu.json +134 -0
- package/manifest/components/context-usage.json +98 -0
- package/manifest/components/conversation-search.json +111 -0
- package/manifest/components/copy-button.json +118 -0
- package/manifest/components/cost-meter.json +84 -0
- package/manifest/components/cue-logotype.json +110 -0
- package/manifest/components/cue-mark.json +111 -0
- package/manifest/components/cue-portal-frame.json +65 -0
- package/manifest/components/data-row.json +222 -0
- package/manifest/components/data-table-pagination.json +97 -0
- package/manifest/components/data-table-toolbar.json +127 -0
- package/manifest/components/data-tree.json +185 -0
- package/manifest/components/date-field.json +93 -0
- package/manifest/components/date-picker.json +255 -0
- package/manifest/components/date-range-picker.json +255 -0
- package/manifest/components/day-separator.json +63 -0
- package/manifest/components/delegation-card.json +196 -0
- package/manifest/components/density.json +93 -0
- package/manifest/components/description-list.json +91 -0
- package/manifest/components/diagram.json +126 -0
- package/manifest/components/dialog.json +222 -0
- package/manifest/components/disclosure.json +134 -0
- package/manifest/components/dmx-bar.json +107 -0
- package/manifest/components/dmx-strip.json +117 -0
- package/manifest/components/document-reference.json +108 -0
- package/manifest/components/draft-restore.json +96 -0
- package/manifest/components/drawer.json +204 -0
- package/manifest/components/dropdown-menu.json +275 -0
- package/manifest/components/edit-message.json +131 -0
- package/manifest/components/elements-command-palette.json +122 -0
- package/manifest/components/elements-composer.json +71 -0
- package/manifest/components/elements-data-table.json +75 -0
- package/manifest/components/elements-timeline.json +77 -0
- package/manifest/components/elicitation-form.json +130 -0
- package/manifest/components/empty-state-composer.json +71 -0
- package/manifest/components/empty-state-greeting.json +49 -0
- package/manifest/components/empty-state-suggestion.json +60 -0
- package/manifest/components/empty-state-suggestions.json +49 -0
- package/manifest/components/empty-state.json +111 -0
- package/manifest/components/end-of-turn-summary.json +89 -0
- package/manifest/components/env-var-input.json +194 -0
- package/manifest/components/error-state.json +93 -0
- package/manifest/components/export-dialog.json +101 -0
- package/manifest/components/eyebrow.json +59 -0
- package/manifest/components/feedback-dialog.json +133 -0
- package/manifest/components/field-description.json +66 -0
- package/manifest/components/field-error.json +87 -0
- package/manifest/components/field-label.json +66 -0
- package/manifest/components/field.json +82 -0
- package/manifest/components/file-tree.json +96 -0
- package/manifest/components/file-upload.json +204 -0
- package/manifest/components/flow-background.json +50 -0
- package/manifest/components/flow-controls.json +50 -0
- package/manifest/components/flow-graph.json +86 -0
- package/manifest/components/folder-icon.json +46 -0
- package/manifest/components/footer.json +133 -0
- package/manifest/components/frac.json +68 -0
- package/manifest/components/frames.json +210 -0
- package/manifest/components/generation-loader.json +78 -0
- package/manifest/components/generative-ui.json +125 -0
- package/manifest/components/grid.json +132 -0
- package/manifest/components/group-bar.json +122 -0
- package/manifest/components/guardrail-notice.json +109 -0
- package/manifest/components/hover-card.json +189 -0
- package/manifest/components/icon-button.json +106 -0
- package/manifest/components/image-generation.json +73 -0
- package/manifest/components/info-tip.json +133 -0
- package/manifest/components/inline-citation.json +90 -0
- package/manifest/components/input-group.json +112 -0
- package/manifest/components/input.json +121 -0
- package/manifest/components/inspector.json +199 -0
- package/manifest/components/item.json +163 -0
- package/manifest/components/job-progress.json +116 -0
- package/manifest/components/kbd.json +52 -0
- package/manifest/components/launcher-bubble.json +130 -0
- package/manifest/components/ledger.json +330 -0
- package/manifest/components/link.json +94 -0
- package/manifest/components/live-region-announcer.json +95 -0
- package/manifest/components/log-viewer.json +172 -0
- package/manifest/components/map-answer.json +97 -0
- package/manifest/components/markdown-text.json +126 -0
- package/manifest/components/math-block.json +84 -0
- package/manifest/components/mcp-server-icon.json +46 -0
- package/manifest/components/mcp-server-panel.json +102 -0
- package/manifest/components/memory-chips.json +73 -0
- package/manifest/components/menubar.json +184 -0
- package/manifest/components/message-actions.json +125 -0
- package/manifest/components/message-attachments.json +71 -0
- package/manifest/components/message-branches.json +83 -0
- package/manifest/components/message-list.json +121 -0
- package/manifest/components/message-pair.json +107 -0
- package/manifest/components/message-queue.json +85 -0
- package/manifest/components/message-timing.json +69 -0
- package/manifest/components/message.json +149 -0
- package/manifest/components/meter.json +150 -0
- package/manifest/components/mobile-composer.json +163 -0
- package/manifest/components/model-picker.json +87 -0
- package/manifest/components/multi-select.json +255 -0
- package/manifest/components/musical-time-input.json +141 -0
- package/manifest/components/navigation-menu.json +269 -0
- package/manifest/components/node-card.json +144 -0
- package/manifest/components/node-handle.json +84 -0
- package/manifest/components/number-field.json +131 -0
- package/manifest/components/number-ticker.json +67 -0
- package/manifest/components/onboarding.json +100 -0
- package/manifest/components/otp-field.json +163 -0
- package/manifest/components/page-shell.json +129 -0
- package/manifest/components/pagination.json +108 -0
- package/manifest/components/panel-header.json +89 -0
- package/manifest/components/panel.json +71 -0
- package/manifest/components/password-input.json +171 -0
- package/manifest/components/permission-grant.json +115 -0
- package/manifest/components/permission-scopes.json +184 -0
- package/manifest/components/piano-keyboard.json +149 -0
- package/manifest/components/plussie.json +140 -0
- package/manifest/components/popover.json +231 -0
- package/manifest/components/preset-section.json +80 -0
- package/manifest/components/preview.json +294 -0
- package/manifest/components/progress.json +114 -0
- package/manifest/components/prompt-library.json +122 -0
- package/manifest/components/queue-dock.json +139 -0
- package/manifest/components/quota-banner.json +113 -0
- package/manifest/components/quote-reply.json +129 -0
- package/manifest/components/radio-group.json +83 -0
- package/manifest/components/radio.json +94 -0
- package/manifest/components/rating.json +188 -0
- package/manifest/components/read-aloud.json +139 -0
- package/manifest/components/reasoning-effort.json +95 -0
- package/manifest/components/reasoning-panel.json +135 -0
- package/manifest/components/recommendation-card.json +133 -0
- package/manifest/components/regenerate-menu.json +107 -0
- package/manifest/components/replay-player.json +124 -0
- package/manifest/components/research-report.json +87 -0
- package/manifest/components/resizable.json +91 -0
- package/manifest/components/retrieval-chunks.json +98 -0
- package/manifest/components/revert-dock.json +197 -0
- package/manifest/components/reviewable-diff.json +113 -0
- package/manifest/components/risk-badge.json +89 -0
- package/manifest/components/row.json +122 -0
- package/manifest/components/schedule-card.json +121 -0
- package/manifest/components/score-breakdown.json +108 -0
- package/manifest/components/scroll-anchor.json +84 -0
- package/manifest/components/scroll-area.json +114 -0
- package/manifest/components/scrollable-tabs-list.json +91 -0
- package/manifest/components/scrub-input.json +268 -0
- package/manifest/components/seam-cell.json +91 -0
- package/manifest/components/seam-grid.json +84 -0
- package/manifest/components/seam-list.json +56 -0
- package/manifest/components/search-input.json +195 -0
- package/manifest/components/section-header.json +140 -0
- package/manifest/components/segmented-control.json +178 -0
- package/manifest/components/select.json +253 -0
- package/manifest/components/separator.json +56 -0
- package/manifest/components/settings-panel.json +152 -0
- package/manifest/components/shape-section.json +70 -0
- package/manifest/components/shared-conversation.json +107 -0
- package/manifest/components/sheet.json +210 -0
- package/manifest/components/shimmer-label.json +61 -0
- package/manifest/components/sidebar.json +245 -0
- package/manifest/components/signal-edge.json +56 -0
- package/manifest/components/skeleton.json +46 -0
- package/manifest/components/skill-icon.json +46 -0
- package/manifest/components/slider.json +106 -0
- package/manifest/components/sources.json +97 -0
- package/manifest/components/sparkline.json +89 -0
- package/manifest/components/speaker-identity.json +66 -0
- package/manifest/components/spec-sheet.json +93 -0
- package/manifest/components/spectrum-visualizer.json +147 -0
- package/manifest/components/spinner.json +71 -0
- package/manifest/components/stack-icon.json +46 -0
- package/manifest/components/stack.json +143 -0
- package/manifest/components/stacks-matrix-icon.json +46 -0
- package/manifest/components/stat.json +111 -0
- package/manifest/components/status-bar.json +233 -0
- package/manifest/components/status-dot.json +97 -0
- package/manifest/components/stepper.json +107 -0
- package/manifest/components/stopped-run.json +97 -0
- package/manifest/components/streaming-text.json +82 -0
- package/manifest/components/sub.json +45 -0
- package/manifest/components/subagent-list.json +106 -0
- package/manifest/components/suggestions.json +106 -0
- package/manifest/components/sup.json +45 -0
- package/manifest/components/swap-label.json +86 -0
- package/manifest/components/switch.json +102 -0
- package/manifest/components/table-scroll-region.json +78 -0
- package/manifest/components/table.json +306 -0
- package/manifest/components/tabs.json +156 -0
- package/manifest/components/tags-input.json +255 -0
- package/manifest/components/tail-status.json +138 -0
- package/manifest/components/terminal-block.json +111 -0
- package/manifest/components/terminal-frame.json +146 -0
- package/manifest/components/textarea.json +104 -0
- package/manifest/components/theme-configurator.json +158 -0
- package/manifest/components/theme-provider.json +228 -0
- package/manifest/components/thinking-indicator.json +69 -0
- package/manifest/components/thread-list.json +87 -0
- package/manifest/components/thread-search.json +108 -0
- package/manifest/components/threshold-rail.json +223 -0
- package/manifest/components/time-boundary.json +68 -0
- package/manifest/components/time-field.json +93 -0
- package/manifest/components/timeline-ruler.json +178 -0
- package/manifest/components/timeline.json +131 -0
- package/manifest/components/title-bar.json +97 -0
- package/manifest/components/toast.json +140 -0
- package/manifest/components/todo-list.json +76 -0
- package/manifest/components/toggle-group.json +134 -0
- package/manifest/components/toggle.json +140 -0
- package/manifest/components/token-editor.json +106 -0
- package/manifest/components/tool-call-card.json +268 -0
- package/manifest/components/tool-call.json +147 -0
- package/manifest/components/tool-error.json +141 -0
- package/manifest/components/tool-group.json +97 -0
- package/manifest/components/tool-timeline.json +147 -0
- package/manifest/components/toolbar.json +192 -0
- package/manifest/components/tooltip.json +199 -0
- package/manifest/components/trace-waterfall.json +84 -0
- package/manifest/components/tree-visibility-toggle.json +99 -0
- package/manifest/components/tree.json +182 -0
- package/manifest/components/turn-footer.json +133 -0
- package/manifest/components/two-step-button.json +150 -0
- package/manifest/components/typing-indicator.json +60 -0
- package/manifest/components/universe-grid.json +155 -0
- package/manifest/components/unread-divider.json +58 -0
- package/manifest/components/usage-chart.json +162 -0
- package/manifest/components/verdict-row.json +106 -0
- package/manifest/components/voice-conversation.json +141 -0
- package/manifest/components/web-preview.json +105 -0
- package/manifest/components/web-search.json +108 -0
- package/manifest/components/work-collapse.json +125 -0
- package/manifest/fixtures.json +776 -0
- package/manifest/manifest.json +5037 -0
- package/manifest/tokens.json +288 -0
- package/package.json +278 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
//#region src/chat/agent-pile.d.ts
|
|
3
|
+
/** Rung of the control ladder the avatars sit on. */
|
|
4
|
+
type AgentPileSize = "sm" | "md" | "lg";
|
|
5
|
+
/** One agent in the roster. */
|
|
6
|
+
interface AgentPileEntry {
|
|
7
|
+
/** Stable identifier. Decides the colour, and comes back through `onSelect`. */
|
|
8
|
+
slug: string;
|
|
9
|
+
/** Display name. Defaults to `slug`. */
|
|
10
|
+
name?: string;
|
|
11
|
+
/** A run of this agent's is in flight — draws the working arc. */
|
|
12
|
+
working?: boolean;
|
|
13
|
+
/** This agent is waiting on the user — draws the `?` badge. */
|
|
14
|
+
asking?: boolean;
|
|
15
|
+
}
|
|
16
|
+
interface AgentPileProps extends Omit<React.ComponentPropsWithoutRef<"div">, "onSelect"> {
|
|
17
|
+
/** The roster, in the order it should read. Renders nothing when empty. */
|
|
18
|
+
agents: readonly AgentPileEntry[];
|
|
19
|
+
/** Slug of the orchestrator: takes the theme accent and wears the crown. */
|
|
20
|
+
root?: string;
|
|
21
|
+
/** Slug of the lane currently open — that avatar gets a ring. */
|
|
22
|
+
selected?: string;
|
|
23
|
+
/** Called with a slug when an avatar is pressed. Omit for a read-only pile. */
|
|
24
|
+
onSelect?: (slug: string) => void;
|
|
25
|
+
/** Show at most this many; the rest collapse into a `+N` chip. */
|
|
26
|
+
max?: number;
|
|
27
|
+
/** Force the fan open or shut. Omit to let hover and focus decide. */
|
|
28
|
+
fanned?: boolean;
|
|
29
|
+
/** Rung of the control ladder. Defaults to `"md"`. */
|
|
30
|
+
size?: AgentPileSize;
|
|
31
|
+
/** Accessible name for the group. Required in practice — name the roster. */
|
|
32
|
+
"aria-label"?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The roster of agents working on a thread, stacked into one object.
|
|
36
|
+
*
|
|
37
|
+
* Three states ride on each avatar, and none of them is colour-only: the
|
|
38
|
+
* orchestrator wears a crown, a working agent gets a spinning arc, and an agent
|
|
39
|
+
* waiting on the user gets a `?` badge — each of them also spelled into the
|
|
40
|
+
* avatar's accessible name, so a screen reader hears "Researcher · working"
|
|
41
|
+
* rather than nothing at all.
|
|
42
|
+
*
|
|
43
|
+
* Avatars are outlined in the agent's colour rather than filled with it. A fill
|
|
44
|
+
* would put arbitrary-hue ink on an arbitrary-hue ground at 20px; the outline
|
|
45
|
+
* treatment is the same tinted-chip recipe the rest of the system uses and
|
|
46
|
+
* stays legible on every theme.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* <AgentPile aria-label="Agents" agents={roster} root="chief" onSelect={openLane} />
|
|
50
|
+
* @example
|
|
51
|
+
* <AgentPile aria-label="Agents" agents={roster} max={5} fanned />
|
|
52
|
+
*/
|
|
53
|
+
declare const AgentPile: React.ForwardRefExoticComponent<AgentPileProps & React.RefAttributes<HTMLDivElement>>;
|
|
54
|
+
//#endregion
|
|
55
|
+
export { AgentPile, AgentPileEntry, AgentPileProps, AgentPileSize };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { agentColor } from "./agent-color.js";
|
|
4
|
+
import { CrownGlyph } from "./_glyphs.js";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
//#region src/chat/agent-pile.tsx
|
|
8
|
+
const AVATAR_SIZES = {
|
|
9
|
+
sm: "size-control-sm text-(length:--cue-text-micro)",
|
|
10
|
+
md: "size-control-md text-(length:--cue-text-label)",
|
|
11
|
+
lg: "size-control-lg text-(length:--cue-text-ui)"
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* The fan.
|
|
15
|
+
*
|
|
16
|
+
* Collapsed, avatars overlap by 12px so a roster of eight still reads as one
|
|
17
|
+
* object; hovering (or focusing into) the pile pushes them out to a 4px gap so
|
|
18
|
+
* every face is clickable. Logical margins, so the stack flips in RTL, and the
|
|
19
|
+
* transition stills under `prefers-reduced-motion`.
|
|
20
|
+
*/
|
|
21
|
+
const OVERLAP = "[margin-inline-start:-0.75rem]";
|
|
22
|
+
const FANNED = "[margin-inline-start:0.25rem]";
|
|
23
|
+
const FAN_ON_HOVER = "group-hover/pile:[margin-inline-start:0.25rem] group-focus-within/pile:[margin-inline-start:0.25rem]";
|
|
24
|
+
/**
|
|
25
|
+
* The roster of agents working on a thread, stacked into one object.
|
|
26
|
+
*
|
|
27
|
+
* Three states ride on each avatar, and none of them is colour-only: the
|
|
28
|
+
* orchestrator wears a crown, a working agent gets a spinning arc, and an agent
|
|
29
|
+
* waiting on the user gets a `?` badge — each of them also spelled into the
|
|
30
|
+
* avatar's accessible name, so a screen reader hears "Researcher · working"
|
|
31
|
+
* rather than nothing at all.
|
|
32
|
+
*
|
|
33
|
+
* Avatars are outlined in the agent's colour rather than filled with it. A fill
|
|
34
|
+
* would put arbitrary-hue ink on an arbitrary-hue ground at 20px; the outline
|
|
35
|
+
* treatment is the same tinted-chip recipe the rest of the system uses and
|
|
36
|
+
* stays legible on every theme.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* <AgentPile aria-label="Agents" agents={roster} root="chief" onSelect={openLane} />
|
|
40
|
+
* @example
|
|
41
|
+
* <AgentPile aria-label="Agents" agents={roster} max={5} fanned />
|
|
42
|
+
*/
|
|
43
|
+
const AgentPile = React.forwardRef(function AgentPile({ className, agents, root, selected, onSelect, max, fanned, size = "md", "aria-label": ariaLabel, ...elementProps }, ref) {
|
|
44
|
+
if (agents.length === 0) return null;
|
|
45
|
+
const visible = max === void 0 ? agents : agents.slice(0, Math.max(0, max));
|
|
46
|
+
const overflow = agents.length - visible.length;
|
|
47
|
+
const spacing = fanned === true ? FANNED : fanned === false ? OVERLAP : cn(OVERLAP, FAN_ON_HOVER);
|
|
48
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
49
|
+
ref,
|
|
50
|
+
role: "group",
|
|
51
|
+
"aria-label": ariaLabel,
|
|
52
|
+
"data-slot": "agent-pile",
|
|
53
|
+
"data-fanned": fanned === void 0 ? void 0 : String(fanned),
|
|
54
|
+
className: cn("group/pile flex min-w-0 items-center", className),
|
|
55
|
+
...elementProps,
|
|
56
|
+
children: [visible.map((agent, index) => {
|
|
57
|
+
const isRoot = agent.slug === root;
|
|
58
|
+
const name = agent.name ?? agent.slug;
|
|
59
|
+
const label = [
|
|
60
|
+
name,
|
|
61
|
+
isRoot ? "orchestrator" : null,
|
|
62
|
+
agent.working === true ? "working" : null,
|
|
63
|
+
agent.asking === true ? "asking a question" : null
|
|
64
|
+
].filter(Boolean).join(" · ");
|
|
65
|
+
const avatarClasses = cn("relative flex shrink-0 items-center justify-center rounded-full border border-(--agent-color) bg-surface-2 font-mono leading-none text-(--agent-color) uppercase outline-none", AVATAR_SIZES[size], selected === agent.slug ? "ring-2 ring-(--agent-color)" : null, onSelect === void 0 ? null : "cursor-pointer transition-colors hover:bg-surface-3 focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent");
|
|
66
|
+
const initial = name.slice(0, 1).toUpperCase();
|
|
67
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
68
|
+
"data-slot": "agent-pile-item",
|
|
69
|
+
"data-slug": agent.slug,
|
|
70
|
+
"data-root": isRoot ? "" : void 0,
|
|
71
|
+
"data-working": agent.working === true ? "" : void 0,
|
|
72
|
+
"data-asking": agent.asking === true ? "" : void 0,
|
|
73
|
+
"data-selected": selected === agent.slug ? "" : void 0,
|
|
74
|
+
className: cn("relative inline-flex rounded-full ring-1 ring-bg transition-[margin] duration-150 ease-out motion-reduce:transition-none", index === 0 ? null : spacing, agent.working === true ? "z-10" : null),
|
|
75
|
+
style: { "--agent-color": agentColor(agent.slug, { root }) },
|
|
76
|
+
children: [
|
|
77
|
+
onSelect === void 0 ? /* @__PURE__ */ jsx("span", {
|
|
78
|
+
role: "img",
|
|
79
|
+
"aria-label": label,
|
|
80
|
+
className: avatarClasses,
|
|
81
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
82
|
+
"aria-hidden": "true",
|
|
83
|
+
children: initial
|
|
84
|
+
})
|
|
85
|
+
}) : /* @__PURE__ */ jsx("button", {
|
|
86
|
+
type: "button",
|
|
87
|
+
"aria-label": label,
|
|
88
|
+
"aria-pressed": selected === void 0 ? void 0 : selected === agent.slug,
|
|
89
|
+
className: avatarClasses,
|
|
90
|
+
onClick: () => onSelect(agent.slug),
|
|
91
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
92
|
+
"aria-hidden": "true",
|
|
93
|
+
children: initial
|
|
94
|
+
})
|
|
95
|
+
}),
|
|
96
|
+
isRoot ? /* @__PURE__ */ jsx(CrownGlyph, {
|
|
97
|
+
"data-slot": "agent-pile-crown",
|
|
98
|
+
className: "pointer-events-none absolute -top-[0.3rem] -start-[0.2rem] size-icon-sm -rotate-[18deg] text-(--agent-color)"
|
|
99
|
+
}) : null,
|
|
100
|
+
agent.working === true ? /* @__PURE__ */ jsx("span", {
|
|
101
|
+
"aria-hidden": "true",
|
|
102
|
+
"data-slot": "agent-pile-arc",
|
|
103
|
+
className: "pointer-events-none absolute -inset-[2px] animate-spin rounded-full border border-transparent [border-inline-end-color:var(--agent-color)] [border-top-color:var(--agent-color)] motion-reduce:animate-none"
|
|
104
|
+
}) : null,
|
|
105
|
+
agent.asking === true ? /* @__PURE__ */ jsx("span", {
|
|
106
|
+
"aria-hidden": "true",
|
|
107
|
+
"data-slot": "agent-pile-asking",
|
|
108
|
+
className: "pointer-events-none absolute -top-[0.15rem] -end-[0.15rem] flex size-[0.75rem] items-center justify-center rounded-full bg-accent font-mono text-[0.5rem] leading-none text-accent-fg ring-1 ring-bg",
|
|
109
|
+
children: "?"
|
|
110
|
+
}) : null
|
|
111
|
+
]
|
|
112
|
+
}, agent.slug);
|
|
113
|
+
}), overflow > 0 ? /* @__PURE__ */ jsx("span", {
|
|
114
|
+
"data-slot": "agent-pile-overflow",
|
|
115
|
+
className: cn("relative inline-flex shrink-0 items-center justify-center rounded-full border border-border bg-surface-3 font-mono leading-none text-fg-muted ring-1 ring-bg transition-[margin] duration-150 ease-out motion-reduce:transition-none", AVATAR_SIZES[size], spacing),
|
|
116
|
+
children: `+${overflow}`
|
|
117
|
+
}) : null]
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
//#endregion
|
|
121
|
+
export { AgentPile };
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
//#region src/chat/ask-box.d.ts
|
|
3
|
+
/** The shapes an answer can take. `text` is the fallback for anything unmodelled. */
|
|
4
|
+
type AskKind = "text" | "single" | "multi" | "boolean" | "number";
|
|
5
|
+
/** How much damage saying yes could do. Rated by the asker, painted in the shared tones. */
|
|
6
|
+
type AskDanger = "low" | "high" | "critical";
|
|
7
|
+
/** What comes back through `onAnswer`, shaped by {@link AskKind}. */
|
|
8
|
+
type AskAnswer = string | readonly string[] | boolean | number;
|
|
9
|
+
/** One choice offered by a `single` or `multi` question. */
|
|
10
|
+
interface AskOption {
|
|
11
|
+
/** The value handed back through `onAnswer`. */
|
|
12
|
+
value: string;
|
|
13
|
+
/** What the reader sees. Defaults to `value`. */
|
|
14
|
+
label?: React.ReactNode;
|
|
15
|
+
/** A second line under the label — when the choice needs explaining. */
|
|
16
|
+
description?: React.ReactNode;
|
|
17
|
+
}
|
|
18
|
+
interface AskBoxProps extends Omit<React.ComponentPropsWithoutRef<"div">, "onSubmit" | "defaultValue"> {
|
|
19
|
+
/** The question, as text or nodes. Rendered verbatim — never parsed. */
|
|
20
|
+
question: React.ReactNode;
|
|
21
|
+
/** Which widget to offer. Defaults to `"text"`. */
|
|
22
|
+
kind?: AskKind;
|
|
23
|
+
/** Choices for a `single` or `multi` question. */
|
|
24
|
+
options?: readonly AskOption[];
|
|
25
|
+
/** Fired once with the answer. The host is responsible for resuming the run. */
|
|
26
|
+
onAnswer: (value: AskAnswer) => void;
|
|
27
|
+
/**
|
|
28
|
+
* The answer, once there is one. Present means answered: the box collapses to
|
|
29
|
+
* a one-line summary and stops accepting input.
|
|
30
|
+
*/
|
|
31
|
+
answer?: AskAnswer;
|
|
32
|
+
/** Slug of the agent asking, for the byline and the box's colour. */
|
|
33
|
+
asker?: string;
|
|
34
|
+
/** Slug of the orchestrator, so its questions take the theme accent. */
|
|
35
|
+
rootAgent?: string;
|
|
36
|
+
/** Tool this question is approving, if it is an approval. */
|
|
37
|
+
tool?: string;
|
|
38
|
+
/** Risk rating for the tool call. Omit for a plain question. */
|
|
39
|
+
danger?: AskDanger;
|
|
40
|
+
/** Initial widget value. A string for `text`/`single`, an array for `multi`, a number for `number`. */
|
|
41
|
+
defaultValue?: AskAnswer;
|
|
42
|
+
/** Placeholder for the `text` widget. */
|
|
43
|
+
placeholder?: string;
|
|
44
|
+
/** Lower bound for the `number` widget. */
|
|
45
|
+
min?: number;
|
|
46
|
+
/** Upper bound for the `number` widget. */
|
|
47
|
+
max?: number;
|
|
48
|
+
/** Increment the `number` widget's stepper moves by. */
|
|
49
|
+
step?: number;
|
|
50
|
+
/** Unit shown beside a number, and in the answered summary. */
|
|
51
|
+
unit?: string;
|
|
52
|
+
/** Label on the affirmative half of a `boolean`. Defaults to `"Confirm"`. */
|
|
53
|
+
confirmLabel?: string;
|
|
54
|
+
/** Label on the negative half of a `boolean`. Defaults to `"Reject"`. */
|
|
55
|
+
rejectLabel?: string;
|
|
56
|
+
/** Label on the submit button. Defaults to `"Submit"`. */
|
|
57
|
+
submitLabel?: React.ReactNode;
|
|
58
|
+
/** The answer is in flight: locks the widget and says so. */
|
|
59
|
+
busy?: boolean;
|
|
60
|
+
/** Expand the answered summary from the start. Defaults to `false`. */
|
|
61
|
+
defaultOpen?: boolean;
|
|
62
|
+
/** Accessible name for the widget when `question` is not plain text. */
|
|
63
|
+
"aria-label"?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The human-in-the-loop question: an agent stops, asks, and waits.
|
|
67
|
+
*
|
|
68
|
+
* Controlled by design. The box holds the *draft* answer while the user is
|
|
69
|
+
* choosing, but it never holds the fact of having answered — that comes back as
|
|
70
|
+
* the `answer` prop once the host has recorded it. Anything else and a
|
|
71
|
+
* component's local state becomes the source of truth for a decision the run
|
|
72
|
+
* depends on, which survives exactly until the pane unmounts.
|
|
73
|
+
*
|
|
74
|
+
* Answered questions collapse to `question · answer ✓` and expand on click, so
|
|
75
|
+
* a long thread reads as a decision log rather than a wall of settled forms.
|
|
76
|
+
*
|
|
77
|
+
* The prompt is rendered verbatim, never parsed as markup: an approval prompt
|
|
78
|
+
* interpolates model-controlled text, and a `` in a consent statement
|
|
79
|
+
* is an exfiltration channel.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* <AskBox question="Which merge mode?" kind="single" options={modes} onAnswer={resume} />
|
|
83
|
+
* @example
|
|
84
|
+
* <AskBox question="Delete the rig?" kind="boolean" tool="rig.delete" danger="critical" onAnswer={resume} />
|
|
85
|
+
*/
|
|
86
|
+
declare const AskBox: React.ForwardRefExoticComponent<AskBoxProps & React.RefAttributes<HTMLDivElement>>;
|
|
87
|
+
//#endregion
|
|
88
|
+
export { AskAnswer, AskBox, AskBoxProps, AskDanger, AskKind, AskOption };
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { AGENT_ROOT_COLOR, agentColor } from "./agent-color.js";
|
|
4
|
+
import { CheckGlyph } from "./_glyphs.js";
|
|
5
|
+
import { Checkbox } from "../forms/checkbox.js";
|
|
6
|
+
import { Input } from "../forms/input.js";
|
|
7
|
+
import { NumberField } from "../forms/number-field.js";
|
|
8
|
+
import { Radio, RadioGroup } from "../forms/radio-group.js";
|
|
9
|
+
import { Button } from "../primitives/button.js";
|
|
10
|
+
import { Chip } from "../primitives/chip.js";
|
|
11
|
+
import * as React from "react";
|
|
12
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
//#region src/chat/ask-box.tsx
|
|
14
|
+
/**
|
|
15
|
+
* Risk maps onto the tone vocabulary the rest of the system already speaks, so
|
|
16
|
+
* a "critical" approval is the same red as a failed meter. There is deliberately
|
|
17
|
+
* no `safe` level: a green "safe" chip on a card the user is being asked to
|
|
18
|
+
* approve is noise, and the tool name alone is the useful signal there.
|
|
19
|
+
*/
|
|
20
|
+
const DANGER_TONES = {
|
|
21
|
+
low: "ok",
|
|
22
|
+
high: "warn",
|
|
23
|
+
critical: "danger"
|
|
24
|
+
};
|
|
25
|
+
/** The label a reader would recognise for one option value. */
|
|
26
|
+
function labelFor(options, value) {
|
|
27
|
+
return (options?.find((entry) => entry.value === value))?.label ?? value;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The answer, spelled the way it was offered.
|
|
31
|
+
*
|
|
32
|
+
* A summary reading `question · ltp ✓` is a riddle; `question · Latest takes
|
|
33
|
+
* precedence ✓` is a record. Option labels win over raw values, booleans come
|
|
34
|
+
* back as the button the user actually pressed, and a number keeps its unit.
|
|
35
|
+
*/
|
|
36
|
+
function formatAnswer(answer, options, labels) {
|
|
37
|
+
if (typeof answer === "boolean") return answer ? labels.confirm : labels.reject;
|
|
38
|
+
if (typeof answer === "number") return labels.unit === void 0 ? String(answer) : `${answer} ${labels.unit}`;
|
|
39
|
+
if (Array.isArray(answer)) {
|
|
40
|
+
const parts = answer.map((value) => labelFor(options, value));
|
|
41
|
+
return parts.length === 0 ? "—" : parts.map((part, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [index === 0 ? null : ", ", part] }, index));
|
|
42
|
+
}
|
|
43
|
+
return labelFor(options, answer);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The human-in-the-loop question: an agent stops, asks, and waits.
|
|
47
|
+
*
|
|
48
|
+
* Controlled by design. The box holds the *draft* answer while the user is
|
|
49
|
+
* choosing, but it never holds the fact of having answered — that comes back as
|
|
50
|
+
* the `answer` prop once the host has recorded it. Anything else and a
|
|
51
|
+
* component's local state becomes the source of truth for a decision the run
|
|
52
|
+
* depends on, which survives exactly until the pane unmounts.
|
|
53
|
+
*
|
|
54
|
+
* Answered questions collapse to `question · answer ✓` and expand on click, so
|
|
55
|
+
* a long thread reads as a decision log rather than a wall of settled forms.
|
|
56
|
+
*
|
|
57
|
+
* The prompt is rendered verbatim, never parsed as markup: an approval prompt
|
|
58
|
+
* interpolates model-controlled text, and a `` in a consent statement
|
|
59
|
+
* is an exfiltration channel.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* <AskBox question="Which merge mode?" kind="single" options={modes} onAnswer={resume} />
|
|
63
|
+
* @example
|
|
64
|
+
* <AskBox question="Delete the rig?" kind="boolean" tool="rig.delete" danger="critical" onAnswer={resume} />
|
|
65
|
+
*/
|
|
66
|
+
const AskBox = React.forwardRef(function AskBox({ className, question, kind = "text", options, onAnswer, answer, asker, rootAgent, tool, danger, defaultValue, placeholder, min, max, step, unit, confirmLabel = "Confirm", rejectLabel = "Reject", submitLabel = "Submit", busy = false, defaultOpen = false, "aria-label": ariaLabel, style, ...elementProps }, ref) {
|
|
67
|
+
const questionId = React.useId();
|
|
68
|
+
const [open, setOpen] = React.useState(defaultOpen);
|
|
69
|
+
const [text, setText] = React.useState(typeof defaultValue === "string" ? defaultValue : "");
|
|
70
|
+
const [choice, setChoice] = React.useState(typeof defaultValue === "string" ? defaultValue : "");
|
|
71
|
+
const [checked, setChecked] = React.useState(Array.isArray(defaultValue) ? defaultValue : []);
|
|
72
|
+
const [number, setNumber] = React.useState(typeof defaultValue === "number" ? defaultValue : null);
|
|
73
|
+
const color = asker === void 0 ? AGENT_ROOT_COLOR : agentColor(asker, { root: rootAgent });
|
|
74
|
+
const answered = answer !== void 0;
|
|
75
|
+
const boxStyle = {
|
|
76
|
+
"--agent-color": color,
|
|
77
|
+
...style
|
|
78
|
+
};
|
|
79
|
+
const summary = answered ? formatAnswer(answer, options, {
|
|
80
|
+
confirm: confirmLabel,
|
|
81
|
+
reject: rejectLabel,
|
|
82
|
+
unit
|
|
83
|
+
}) : null;
|
|
84
|
+
const byline = asker === void 0 ? null : /* @__PURE__ */ jsxs("span", {
|
|
85
|
+
"data-slot": "ask-box-asker",
|
|
86
|
+
className: "flex min-w-0 items-center gap-(--cue-space-2) font-mono text-(length:--cue-text-micro) text-fg-subtle",
|
|
87
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
88
|
+
"aria-hidden": "true",
|
|
89
|
+
className: "text-(--agent-color)",
|
|
90
|
+
children: "●"
|
|
91
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
92
|
+
className: "truncate",
|
|
93
|
+
children: ["asked by ", /* @__PURE__ */ jsx("span", {
|
|
94
|
+
className: "text-(--agent-color)",
|
|
95
|
+
children: asker
|
|
96
|
+
})]
|
|
97
|
+
})]
|
|
98
|
+
});
|
|
99
|
+
const approval = tool === void 0 ? null : /* @__PURE__ */ jsxs("span", {
|
|
100
|
+
className: "flex min-w-0 items-center gap-(--cue-space-2)",
|
|
101
|
+
children: [/* @__PURE__ */ jsx("code", {
|
|
102
|
+
"data-slot": "ask-box-tool",
|
|
103
|
+
className: "min-w-0 truncate font-mono text-(length:--cue-text-micro) text-fg",
|
|
104
|
+
children: tool
|
|
105
|
+
}), danger === void 0 ? null : /* @__PURE__ */ jsx(Chip, {
|
|
106
|
+
"data-slot": "ask-box-danger",
|
|
107
|
+
tone: DANGER_TONES[danger],
|
|
108
|
+
"data-danger": danger,
|
|
109
|
+
children: danger
|
|
110
|
+
})]
|
|
111
|
+
});
|
|
112
|
+
if (answered) return /* @__PURE__ */ jsxs("div", {
|
|
113
|
+
ref,
|
|
114
|
+
"data-slot": "ask-box",
|
|
115
|
+
"data-answered": "true",
|
|
116
|
+
"data-kind": kind,
|
|
117
|
+
className: cn("flex min-w-0 flex-col rounded-(--radius-surface) border border-border bg-surface-1 px-(--cue-space-4) py-(--cue-space-3)", className),
|
|
118
|
+
style: boxStyle,
|
|
119
|
+
...elementProps,
|
|
120
|
+
children: [/* @__PURE__ */ jsxs("button", {
|
|
121
|
+
type: "button",
|
|
122
|
+
"data-slot": "ask-box-summary",
|
|
123
|
+
"aria-expanded": open,
|
|
124
|
+
className: "relative flex min-w-0 cursor-pointer items-center gap-(--cue-space-2) border-0 bg-transparent p-0 text-start font-mono text-(length:--cue-text-ui) outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent",
|
|
125
|
+
onClick: () => setOpen((current) => !current),
|
|
126
|
+
children: [
|
|
127
|
+
/* @__PURE__ */ jsx("span", {
|
|
128
|
+
"aria-hidden": "true",
|
|
129
|
+
className: "shrink-0 text-(--agent-color)",
|
|
130
|
+
children: "●"
|
|
131
|
+
}),
|
|
132
|
+
/* @__PURE__ */ jsx("span", {
|
|
133
|
+
className: "min-w-0 truncate text-fg-muted",
|
|
134
|
+
children: question
|
|
135
|
+
}),
|
|
136
|
+
/* @__PURE__ */ jsx("span", {
|
|
137
|
+
"aria-hidden": "true",
|
|
138
|
+
className: "shrink-0 text-fg-subtle",
|
|
139
|
+
children: "·"
|
|
140
|
+
}),
|
|
141
|
+
/* @__PURE__ */ jsx("span", {
|
|
142
|
+
"data-slot": "ask-box-answer",
|
|
143
|
+
className: "min-w-0 truncate text-fg",
|
|
144
|
+
children: summary
|
|
145
|
+
}),
|
|
146
|
+
/* @__PURE__ */ jsx(CheckGlyph, { className: "size-icon-sm shrink-0 text-ok" }),
|
|
147
|
+
/* @__PURE__ */ jsx("span", {
|
|
148
|
+
className: "sr-only",
|
|
149
|
+
children: "answered"
|
|
150
|
+
})
|
|
151
|
+
]
|
|
152
|
+
}), open ? /* @__PURE__ */ jsxs("div", {
|
|
153
|
+
"data-slot": "ask-box-detail",
|
|
154
|
+
className: "mt-(--cue-space-3) flex flex-col gap-(--cue-space-2) border-t border-border pt-(--cue-space-3)",
|
|
155
|
+
children: [
|
|
156
|
+
/* @__PURE__ */ jsx("p", {
|
|
157
|
+
className: "text-(length:--cue-text-ui) leading-(--cue-leading-ui) break-words whitespace-pre-wrap text-fg-muted",
|
|
158
|
+
children: question
|
|
159
|
+
}),
|
|
160
|
+
/* @__PURE__ */ jsx("p", {
|
|
161
|
+
className: "text-(length:--cue-text-ui) text-fg",
|
|
162
|
+
children: summary
|
|
163
|
+
}),
|
|
164
|
+
/* @__PURE__ */ jsxs("div", {
|
|
165
|
+
className: "flex flex-wrap items-center gap-(--cue-space-3)",
|
|
166
|
+
children: [byline, approval]
|
|
167
|
+
})
|
|
168
|
+
]
|
|
169
|
+
}) : null]
|
|
170
|
+
});
|
|
171
|
+
const submit = (value) => {
|
|
172
|
+
if (busy) return;
|
|
173
|
+
onAnswer(value);
|
|
174
|
+
};
|
|
175
|
+
const widget = (() => {
|
|
176
|
+
switch (kind) {
|
|
177
|
+
case "boolean": return /* @__PURE__ */ jsxs("div", {
|
|
178
|
+
className: "flex flex-wrap items-center gap-(--cue-space-3)",
|
|
179
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
180
|
+
type: "button",
|
|
181
|
+
variant: "primary",
|
|
182
|
+
size: "sm",
|
|
183
|
+
disabled: busy,
|
|
184
|
+
onClick: () => submit(true),
|
|
185
|
+
children: confirmLabel
|
|
186
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
187
|
+
type: "button",
|
|
188
|
+
variant: "outline",
|
|
189
|
+
size: "sm",
|
|
190
|
+
disabled: busy,
|
|
191
|
+
onClick: () => submit(false),
|
|
192
|
+
children: rejectLabel
|
|
193
|
+
})]
|
|
194
|
+
});
|
|
195
|
+
case "single": return /* @__PURE__ */ jsxs("div", {
|
|
196
|
+
className: "flex flex-col items-start gap-(--cue-space-3)",
|
|
197
|
+
children: [/* @__PURE__ */ jsx(RadioGroup, {
|
|
198
|
+
"aria-labelledby": questionId,
|
|
199
|
+
value: choice === "" ? null : choice,
|
|
200
|
+
onValueChange: (next) => setChoice(String(next ?? "")),
|
|
201
|
+
disabled: busy,
|
|
202
|
+
children: (options ?? []).map((option) => /* @__PURE__ */ jsx(Radio, {
|
|
203
|
+
value: option.value,
|
|
204
|
+
label: /* @__PURE__ */ jsxs("span", {
|
|
205
|
+
className: "flex flex-col",
|
|
206
|
+
children: [/* @__PURE__ */ jsx("span", { children: option.label ?? option.value }), option.description === void 0 ? null : /* @__PURE__ */ jsx("span", {
|
|
207
|
+
className: "text-(length:--cue-text-micro) text-fg-subtle",
|
|
208
|
+
children: option.description
|
|
209
|
+
})]
|
|
210
|
+
})
|
|
211
|
+
}, option.value))
|
|
212
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
213
|
+
type: "button",
|
|
214
|
+
variant: "primary",
|
|
215
|
+
size: "sm",
|
|
216
|
+
disabled: busy || choice === "",
|
|
217
|
+
onClick: () => submit(choice),
|
|
218
|
+
children: submitLabel
|
|
219
|
+
})]
|
|
220
|
+
});
|
|
221
|
+
case "multi": return /* @__PURE__ */ jsxs("div", {
|
|
222
|
+
className: "flex flex-col items-start gap-(--cue-space-3)",
|
|
223
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
224
|
+
role: "group",
|
|
225
|
+
"aria-labelledby": questionId,
|
|
226
|
+
className: "flex flex-col gap-(--cue-space-2)",
|
|
227
|
+
children: (options ?? []).map((option) => /* @__PURE__ */ jsx(Checkbox, {
|
|
228
|
+
checked: checked.includes(option.value),
|
|
229
|
+
disabled: busy,
|
|
230
|
+
label: /* @__PURE__ */ jsxs("span", {
|
|
231
|
+
className: "flex flex-col",
|
|
232
|
+
children: [/* @__PURE__ */ jsx("span", { children: option.label ?? option.value }), option.description === void 0 ? null : /* @__PURE__ */ jsx("span", {
|
|
233
|
+
className: "text-(length:--cue-text-micro) text-fg-subtle",
|
|
234
|
+
children: option.description
|
|
235
|
+
})]
|
|
236
|
+
}),
|
|
237
|
+
onCheckedChange: (next) => setChecked((current) => next ? [...current, option.value] : current.filter((entry) => entry !== option.value))
|
|
238
|
+
}, option.value))
|
|
239
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
240
|
+
type: "button",
|
|
241
|
+
variant: "primary",
|
|
242
|
+
size: "sm",
|
|
243
|
+
disabled: busy,
|
|
244
|
+
onClick: () => submit((options ?? []).filter((o) => checked.includes(o.value)).map((o) => o.value)),
|
|
245
|
+
children: submitLabel
|
|
246
|
+
})]
|
|
247
|
+
});
|
|
248
|
+
case "number": return /* @__PURE__ */ jsxs("div", {
|
|
249
|
+
className: "flex flex-wrap items-center gap-(--cue-space-3)",
|
|
250
|
+
children: [
|
|
251
|
+
/* @__PURE__ */ jsx(NumberField, {
|
|
252
|
+
"aria-label": typeof question === "string" ? question : ariaLabel ?? "Answer",
|
|
253
|
+
size: "sm",
|
|
254
|
+
value: number,
|
|
255
|
+
onValueChange: setNumber,
|
|
256
|
+
disabled: busy,
|
|
257
|
+
className: "w-[9rem]",
|
|
258
|
+
...min === void 0 ? null : { min },
|
|
259
|
+
...max === void 0 ? null : { max },
|
|
260
|
+
...step === void 0 ? null : { step }
|
|
261
|
+
}),
|
|
262
|
+
unit === void 0 ? null : /* @__PURE__ */ jsx("span", {
|
|
263
|
+
className: "font-mono text-(length:--cue-text-label) text-fg-subtle",
|
|
264
|
+
children: unit
|
|
265
|
+
}),
|
|
266
|
+
/* @__PURE__ */ jsx(Button, {
|
|
267
|
+
type: "button",
|
|
268
|
+
variant: "primary",
|
|
269
|
+
size: "sm",
|
|
270
|
+
disabled: busy || number === null,
|
|
271
|
+
onClick: () => submit(number),
|
|
272
|
+
children: submitLabel
|
|
273
|
+
})
|
|
274
|
+
]
|
|
275
|
+
});
|
|
276
|
+
default: return /* @__PURE__ */ jsxs("div", {
|
|
277
|
+
className: "flex flex-wrap items-center gap-(--cue-space-3)",
|
|
278
|
+
children: [/* @__PURE__ */ jsx(Input, {
|
|
279
|
+
"aria-labelledby": questionId,
|
|
280
|
+
size: "sm",
|
|
281
|
+
value: text,
|
|
282
|
+
placeholder,
|
|
283
|
+
disabled: busy,
|
|
284
|
+
className: "min-w-0 flex-1",
|
|
285
|
+
onChange: (event) => setText(event.target.value),
|
|
286
|
+
onKeyDown: (event) => {
|
|
287
|
+
if (event.key !== "Enter") return;
|
|
288
|
+
event.preventDefault();
|
|
289
|
+
if (text.trim().length > 0) submit(text.trim());
|
|
290
|
+
}
|
|
291
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
292
|
+
type: "button",
|
|
293
|
+
variant: "primary",
|
|
294
|
+
size: "sm",
|
|
295
|
+
disabled: busy || text.trim().length === 0,
|
|
296
|
+
onClick: () => submit(text.trim()),
|
|
297
|
+
children: submitLabel
|
|
298
|
+
})]
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
})();
|
|
302
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
303
|
+
ref,
|
|
304
|
+
"data-slot": "ask-box",
|
|
305
|
+
"data-answered": "false",
|
|
306
|
+
"data-kind": kind,
|
|
307
|
+
className: cn("flex min-w-0 flex-col gap-(--cue-space-3) rounded-(--radius-surface) border border-(--agent-color) bg-surface-1 px-(--cue-space-4) py-(--cue-space-3)", className),
|
|
308
|
+
style: boxStyle,
|
|
309
|
+
...elementProps,
|
|
310
|
+
children: [
|
|
311
|
+
/* @__PURE__ */ jsxs("div", {
|
|
312
|
+
className: "flex min-w-0 flex-wrap items-center justify-between gap-(--cue-space-3)",
|
|
313
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
314
|
+
className: "flex min-w-0 flex-wrap items-center gap-(--cue-space-3)",
|
|
315
|
+
children: [byline, approval]
|
|
316
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
317
|
+
role: "status",
|
|
318
|
+
"data-slot": "ask-box-state",
|
|
319
|
+
className: "flex shrink-0 items-center gap-(--cue-space-2) font-mono text-(length:--cue-text-micro) text-fg-subtle",
|
|
320
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
321
|
+
"aria-hidden": "true",
|
|
322
|
+
className: "size-[0.375rem] shrink-0 animate-pulse rounded-full bg-(--agent-color) motion-reduce:animate-none"
|
|
323
|
+
}), busy ? "submitting…" : "waiting for you"]
|
|
324
|
+
})]
|
|
325
|
+
}),
|
|
326
|
+
/* @__PURE__ */ jsx("p", {
|
|
327
|
+
id: questionId,
|
|
328
|
+
"data-slot": "ask-box-question",
|
|
329
|
+
className: "min-w-0 text-(length:--cue-text-body) leading-(--cue-leading-ui) break-words whitespace-pre-wrap text-fg",
|
|
330
|
+
children: question
|
|
331
|
+
}),
|
|
332
|
+
/* @__PURE__ */ jsx("div", {
|
|
333
|
+
"data-slot": "ask-box-widget",
|
|
334
|
+
className: "flex min-w-0 flex-col",
|
|
335
|
+
children: widget
|
|
336
|
+
})
|
|
337
|
+
]
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
//#endregion
|
|
341
|
+
export { AskBox };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
//#region src/chat/composer.d.ts
|
|
3
|
+
/** Which gesture sends. `"enter"` keeps Shift+Enter for a newline; `"mod+enter"` inverts the pair. */
|
|
4
|
+
type ComposerSubmitKey = "enter" | "mod+enter";
|
|
5
|
+
interface ComposerProps extends Omit<React.ComponentPropsWithoutRef<"form">, "onSubmit" | "onChange"> {
|
|
6
|
+
/** Fired with the trimmed draft. Never fired with an empty string. */
|
|
7
|
+
onSend: (value: string) => void;
|
|
8
|
+
/** Draft when the host owns it. Pass with `onValueChange`. */
|
|
9
|
+
value?: string;
|
|
10
|
+
/** Initial draft when uncontrolled. */
|
|
11
|
+
defaultValue?: string;
|
|
12
|
+
/** Called on every keystroke with the new draft. */
|
|
13
|
+
onValueChange?: (value: string) => void;
|
|
14
|
+
/** Placeholder for the empty box. Defaults to `"Message"`. */
|
|
15
|
+
placeholder?: string;
|
|
16
|
+
/** Block sending — a closed thread, a failed connection. */
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
/** A run is in flight. With `onStop`, swaps Send for Stop. */
|
|
19
|
+
busy?: boolean;
|
|
20
|
+
/** Abort the in-flight run. Renders the Stop button while `busy`. */
|
|
21
|
+
onStop?: () => void;
|
|
22
|
+
/** Which gesture submits. Defaults to `"enter"`. */
|
|
23
|
+
submitKey?: ComposerSubmitKey;
|
|
24
|
+
/** Rows the box may grow to before it scrolls. Defaults to `8`. */
|
|
25
|
+
maxRows?: number;
|
|
26
|
+
/** Label on the send button. Defaults to `"Send"`. */
|
|
27
|
+
sendLabel?: React.ReactNode;
|
|
28
|
+
/** Label on the stop button. Defaults to `"Stop"`. */
|
|
29
|
+
stopLabel?: React.ReactNode;
|
|
30
|
+
/** Tray above the input — attachment chips, a reply-to quote. */
|
|
31
|
+
attachments?: React.ReactNode;
|
|
32
|
+
/** Controls beside the send button — an attach button, a model picker. */
|
|
33
|
+
toolbar?: React.ReactNode;
|
|
34
|
+
/** Quiet strip under the input — a keyboard hint, a character count. */
|
|
35
|
+
hint?: React.ReactNode;
|
|
36
|
+
/** Accessible name for the input. Defaults to `"Message"`. */
|
|
37
|
+
"aria-label"?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The thing you type into: an auto-growing textarea, a send affordance, and
|
|
41
|
+
* slots for everything a host wants to hang off them.
|
|
42
|
+
*
|
|
43
|
+
* Three decisions worth stating:
|
|
44
|
+
*
|
|
45
|
+
* - **It grows, it does not scroll.** A one-line box that hides the second half
|
|
46
|
+
* of what you wrote is the most-complained-about part of every chat UI. The
|
|
47
|
+
* box starts at the tall control rung and grows to `maxRows` before it gives
|
|
48
|
+
* up and scrolls.
|
|
49
|
+
* - **The submit gesture is a setting.** Enter-to-send is right for a chat lane
|
|
50
|
+
* and wrong for a prompt editor where every draft is three paragraphs, so
|
|
51
|
+
* both are first-class and the *other* key always inserts a newline.
|
|
52
|
+
* - **Stop is never disabled.** While a run is in flight the composer is
|
|
53
|
+
* `disabled`, but the button that ends the run cannot inherit that — a stop
|
|
54
|
+
* you cannot press is not a stop.
|
|
55
|
+
*
|
|
56
|
+
* The ref lands on the textarea rather than the form: focusing the composer is
|
|
57
|
+
* the thing hosts actually reach for.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* <Composer onSend={send} />
|
|
61
|
+
* @example
|
|
62
|
+
* <Composer submitKey="mod+enter" busy={running} onStop={abort} onSend={send} />
|
|
63
|
+
*/
|
|
64
|
+
declare const Composer: React.ForwardRefExoticComponent<ComposerProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
65
|
+
//#endregion
|
|
66
|
+
export { Composer, ComposerProps, ComposerSubmitKey };
|