@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,81 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { ShimmerLabel, field, mono, paper } from "./surfaces.js";
|
|
4
|
+
import { pct, take } from "./range.js";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { DatabaseIcon } from "lucide-react";
|
|
7
|
+
//#region src/elements/retrieval-chunks.tsx
|
|
8
|
+
/**
|
|
9
|
+
* The passages a retrieval answer stands on, scored, before the answer itself arrives.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* import { RetrievalChunks } from "@cueplusplus/ui/elements";
|
|
13
|
+
*
|
|
14
|
+
* <RetrievalChunks
|
|
15
|
+
* query="how does draft restore work"
|
|
16
|
+
* chunks={chunks}
|
|
17
|
+
* visibleCount={3}
|
|
18
|
+
* searching={false}
|
|
19
|
+
* />
|
|
20
|
+
*/
|
|
21
|
+
function RetrievalChunks({ query, chunks, visibleCount, searching, className, ...props }) {
|
|
22
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
23
|
+
"data-slot": "retrieval-chunks",
|
|
24
|
+
className: cn("flex w-full max-w-sm flex-col gap-2.5", className),
|
|
25
|
+
...props,
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ jsxs("span", {
|
|
28
|
+
className: cn(field, "text-fg-muted inline-flex w-fit items-center gap-1.5 rounded-full px-3.5 py-2 text-(length:--cue-text-ui)"),
|
|
29
|
+
children: [/* @__PURE__ */ jsx(DatabaseIcon, { className: "text-fg-subtle size-3" }), query]
|
|
30
|
+
}),
|
|
31
|
+
/* @__PURE__ */ jsx("div", {
|
|
32
|
+
className: "text-fg-muted text-(length:--cue-text-ui)",
|
|
33
|
+
children: searching ? /* @__PURE__ */ jsx(ShimmerLabel, {
|
|
34
|
+
className: "relative inline-block leading-none",
|
|
35
|
+
children: "Retrieving"
|
|
36
|
+
}) : /* @__PURE__ */ jsxs("span", {
|
|
37
|
+
className: "cue-elements-fade-in cue-elements-animate-in duration-300",
|
|
38
|
+
children: [chunks.length, " passages above threshold"]
|
|
39
|
+
})
|
|
40
|
+
}),
|
|
41
|
+
/* @__PURE__ */ jsx("div", {
|
|
42
|
+
className: "flex min-h-[7rem] flex-col gap-1.5",
|
|
43
|
+
children: take(chunks, visibleCount).map((chunk) => /* @__PURE__ */ jsxs("div", {
|
|
44
|
+
className: cn(paper, "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in cue-elements-fill-mode-both flex flex-col gap-1.5 rounded-(--radius-overlay) px-3.5 py-2.5 duration-300"),
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ jsxs("div", {
|
|
47
|
+
className: "flex items-baseline gap-2",
|
|
48
|
+
children: [
|
|
49
|
+
/* @__PURE__ */ jsx("span", {
|
|
50
|
+
className: "text-fg min-w-0 flex-1 truncate text-(length:--cue-text-body) font-medium",
|
|
51
|
+
children: chunk.source
|
|
52
|
+
}),
|
|
53
|
+
/* @__PURE__ */ jsx("span", {
|
|
54
|
+
className: cn(mono, "text-fg-subtle shrink-0"),
|
|
55
|
+
children: chunk.locator
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ jsx("span", {
|
|
58
|
+
className: cn(mono, "shrink-0 tabular-nums", chunk.score >= .8 ? "text-ok" : "text-fg-subtle"),
|
|
59
|
+
children: chunk.score.toFixed(2)
|
|
60
|
+
})
|
|
61
|
+
]
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ jsx("p", {
|
|
64
|
+
className: "text-fg-muted line-clamp-2 text-(length:--cue-text-ui) leading-(--cue-leading-ui)",
|
|
65
|
+
children: chunk.text
|
|
66
|
+
}),
|
|
67
|
+
/* @__PURE__ */ jsx("span", {
|
|
68
|
+
className: "bg-surface-2 h-[2px] w-full overflow-hidden rounded-full",
|
|
69
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
70
|
+
className: "block h-full rounded-full bg-stream/70 transition-[width] duration-500",
|
|
71
|
+
style: { width: `${pct(chunk.score, 1)}%` }
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
]
|
|
75
|
+
}, chunk.id))
|
|
76
|
+
})
|
|
77
|
+
]
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { RetrievalChunks };
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { RevertLabels, RevertScope } from "./vocabulary.js";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
//#region src/elements/revert-dock.d.ts
|
|
4
|
+
/** How far back a restore from this point would reach. */
|
|
5
|
+
interface RevertReach {
|
|
6
|
+
/** Files changed since the point. Omit when it is not counted. */
|
|
7
|
+
files?: number;
|
|
8
|
+
/** Messages written since the point. Omit when it is not counted. */
|
|
9
|
+
messages?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* What a restore would undo, in one line: `6 files · 12 messages since this point`.
|
|
13
|
+
*
|
|
14
|
+
* The number that makes the decision. "Restore" on its own asks a person to
|
|
15
|
+
* agree to something whose size they cannot see, and the two counts are exactly
|
|
16
|
+
* the two axes the scopes act on — which is why they are formatted together
|
|
17
|
+
* here and drawn on the summary line a collapsed dock shows.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* formatRevertSummary({ files: 6, messages: 12 }); // "6 files · 12 messages since this point"
|
|
21
|
+
* formatRevertSummary({ files: 1 }); // "1 file since this point"
|
|
22
|
+
* formatRevertSummary({}); // "Nothing since this point"
|
|
23
|
+
*/
|
|
24
|
+
declare function formatRevertSummary({ files, messages }: RevertReach): string;
|
|
25
|
+
interface RevertDockProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children"> {
|
|
26
|
+
/** What the point is called: `Six fixtures addressed`, `Before the patch`. */
|
|
27
|
+
label?: string;
|
|
28
|
+
/** Files changed since the point. Omit when it is not counted. */
|
|
29
|
+
files?: number;
|
|
30
|
+
/** Messages written since the point. Omit when it is not counted. */
|
|
31
|
+
messages?: number;
|
|
32
|
+
/**
|
|
33
|
+
* The summary line, replacing the one {@link formatRevertSummary} would
|
|
34
|
+
* build.
|
|
35
|
+
*/
|
|
36
|
+
summary?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Which axes this product can actually restore, in the order they are
|
|
39
|
+
* offered. `REVERT_SCOPES` (all three) by default; Roo and Cline each ship
|
|
40
|
+
* two, and a runtime with no workspace to put back ships `["conversation"]`.
|
|
41
|
+
*/
|
|
42
|
+
scopes?: readonly RevertScope[];
|
|
43
|
+
/** Whether the scopes are showing, or only the summary line. */
|
|
44
|
+
open: boolean;
|
|
45
|
+
/** Called when the dock is expanded or collapsed. */
|
|
46
|
+
onOpenChange?: (open: boolean) => void;
|
|
47
|
+
/**
|
|
48
|
+
* The scope waiting to be confirmed, or `null` for the step before that.
|
|
49
|
+
*
|
|
50
|
+
* The gate. Pressing a scope reports it here and nothing else happens; the
|
|
51
|
+
* restore itself is a second, separate press. Keeping it a prop rather than
|
|
52
|
+
* internal state is what lets a test — or a replay — sit in the armed state
|
|
53
|
+
* and look at it.
|
|
54
|
+
*/
|
|
55
|
+
confirming?: RevertScope | null;
|
|
56
|
+
/**
|
|
57
|
+
* Called when a scope is armed, and again with `null` every way the dock
|
|
58
|
+
* leaves the armed state: `Keep everything`, `Escape`, folding the dock away,
|
|
59
|
+
* and the restore itself.
|
|
60
|
+
*/
|
|
61
|
+
onConfirmingChange?: (scope: RevertScope | null) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Do it. Called **only** from the confirm control, never from the control
|
|
64
|
+
* that picks a scope, and at most once per arm.
|
|
65
|
+
*/
|
|
66
|
+
onRestore?: (scope: RevertScope) => void;
|
|
67
|
+
/**
|
|
68
|
+
* Copy for the dock's own six strings, merged over `REVERT_LABELS` —
|
|
69
|
+
* including `warning`, the sentence this element refuses to render without.
|
|
70
|
+
*/
|
|
71
|
+
labels?: Partial<RevertLabels>;
|
|
72
|
+
/** What each scope is called, merged over `REVERT_SCOPE_LABELS`. */
|
|
73
|
+
scopeLabels?: Partial<Record<RevertScope, string>>;
|
|
74
|
+
/** What each scope does, merged over `REVERT_SCOPE_DESCRIPTIONS`. */
|
|
75
|
+
scopeDescriptions?: Partial<Record<RevertScope, string>>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Put it back — and say, in the interface, that this cannot be taken back.
|
|
79
|
+
*
|
|
80
|
+
* The second of the two docks nobody ships, and the only destructive control in
|
|
81
|
+
* this family. Four things make it that rather than a button called Restore.
|
|
82
|
+
*
|
|
83
|
+
* The **axis**: a run changes the files and the conversation about them, and
|
|
84
|
+
* putting one back is not putting the other back. Every product in the study
|
|
85
|
+
* that has checkpoints has this axis, and every one of them names it in its
|
|
86
|
+
* copy — `Restore Files` against `Restore Files & Task`, `Reset Code` against
|
|
87
|
+
* `Reset Chat`. So the scopes are the controls: each one says what it does and
|
|
88
|
+
* what it costs, and the two sentences come from `REVERT_SCOPE_LABELS` and
|
|
89
|
+
* `REVERT_SCOPE_DESCRIPTIONS`, which a console can extend.
|
|
90
|
+
*
|
|
91
|
+
* The **gate**: `onRestore` fires from one control only, the one that answers
|
|
92
|
+
* "Discard all changes up to this checkpoint?". Picking a scope arms the dock
|
|
93
|
+
* and does nothing else. `This action cannot be undone.` is on the screen the
|
|
94
|
+
* whole time the dock is open, above both steps — an irreversibility that lives
|
|
95
|
+
* only in a props table is an irreversibility somebody meets for the first time
|
|
96
|
+
* afterwards.
|
|
97
|
+
*
|
|
98
|
+
* The **geometry**, which is the half a gate cannot do on its own: arming must
|
|
99
|
+
* not put the destructive control where the hand already is. This dock used to
|
|
100
|
+
* swap the scope list for the confirm inside the same box, and measured in
|
|
101
|
+
* Chromium at the bench's own 448 px the whole of `Discard and restore`
|
|
102
|
+
* (x13–170, y131–161) landed inside `Restore conversation` (x13–435,
|
|
103
|
+
* y121–175) — true at 280, 320, 360, 448, 520, 640 and 800 px and at all five
|
|
104
|
+
* densities, so a double click on a scope armed the dock with its first press
|
|
105
|
+
* and destroyed the work with its second. Now nothing above the confirm moves:
|
|
106
|
+
* the scope list stays exactly where it was, dimmed and `disabled` — so the
|
|
107
|
+
* coordinates that armed the dock hold a control that no longer answers a
|
|
108
|
+
* click — and the question is *appended under* it, a hairline and two lines of
|
|
109
|
+
* copy below the last scope. Three defences, not one: the arming control stops
|
|
110
|
+
* taking presses, the destructive control is somewhere else, and it refuses
|
|
111
|
+
* presses for {@link SETTLE_MS} after it arrives. It fires once per arm.
|
|
112
|
+
*
|
|
113
|
+
* And the **way out**, which is `TwoStepButton`'s ruling rather than a second
|
|
114
|
+
* one: focus lands on `Keep everything` when the dock arms, never on the
|
|
115
|
+
* destructive half — so a stuck Enter cannot walk through both steps, and a
|
|
116
|
+
* reader whose button was just unmounted is not left on `<body>`; `Keep
|
|
117
|
+
* everything` hands focus back to the scope that armed it; `Escape` disarms
|
|
118
|
+
* from inside the panel and stops there, so an armed dock inside a dialog does
|
|
119
|
+
* not also close the dialog, *and* from the document while the dock is armed,
|
|
120
|
+
* because a press on a disabled control drops focus to `<body>` and an exit
|
|
121
|
+
* that only listens to its own subtree is no exit at all after a double click;
|
|
122
|
+
* and folding the dock away disarms it, because an armed state nobody can see
|
|
123
|
+
* is one somebody re-opens into. Focus moves on the *transition* into the armed
|
|
124
|
+
* state only — a page that renders three of these as stills steals nothing.
|
|
125
|
+
*
|
|
126
|
+
* Two of that button's four exits are deliberately not taken. There is no
|
|
127
|
+
* **timeout**: an inline two-step's armed state is two words, and four seconds
|
|
128
|
+
* is longer than reading them, while this one is a question, a scope, what it
|
|
129
|
+
* costs and a sentence about irreversibility — a panel that disarms itself
|
|
130
|
+
* while it is being read teaches people to hurry past exactly the copy that
|
|
131
|
+
* matters. And there is no **blur exit**: `confirming` is the caller's state,
|
|
132
|
+
* so leaving would rewrite a prop the caller owns on a gesture as ordinary as
|
|
133
|
+
* tabbing into the transcript, and an armed dock is a labelled panel in the
|
|
134
|
+
* page rather than a button lying in wait.
|
|
135
|
+
*
|
|
136
|
+
* State is a prop, as everywhere here: `open` and `confirming` are the caller's,
|
|
137
|
+
* which is what lets the armed state be benched, tested and replayed instead of
|
|
138
|
+
* being a thing that only exists between two clicks.
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* import { RevertDock } from "@cueplusplus/ui/elements";
|
|
142
|
+
*
|
|
143
|
+
* <RevertDock
|
|
144
|
+
* label="Six fixtures addressed"
|
|
145
|
+
* files={6}
|
|
146
|
+
* messages={12}
|
|
147
|
+
* open={open}
|
|
148
|
+
* onOpenChange={setOpen}
|
|
149
|
+
* confirming={armed}
|
|
150
|
+
* onConfirmingChange={setArmed}
|
|
151
|
+
* onRestore={(scope) => restore(scope)}
|
|
152
|
+
* />
|
|
153
|
+
* @example
|
|
154
|
+
* // A runtime with no workspace to put back: one axis, and it says so.
|
|
155
|
+
* <RevertDock label="Before the plan" messages={9} scopes={["conversation"]} open />
|
|
156
|
+
*/
|
|
157
|
+
declare const RevertDock: React.ForwardRefExoticComponent<RevertDockProps & React.RefAttributes<HTMLDivElement>>;
|
|
158
|
+
//#endregion
|
|
159
|
+
export { RevertDock, RevertDockProps, RevertReach, formatRevertSummary };
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { field, fieldInteractive, ghostButton, mono, paper } from "./surfaces.js";
|
|
4
|
+
import { REVERT_LABELS, REVERT_SCOPES, REVERT_SCOPE_DESCRIPTIONS, REVERT_SCOPE_LABELS } from "./vocabulary.js";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { HistoryIcon, RotateCcwIcon, TriangleAlertIcon } from "lucide-react";
|
|
8
|
+
//#region src/elements/revert-dock.tsx
|
|
9
|
+
/**
|
|
10
|
+
* ms the confirm refuses a press for after the dock arms.
|
|
11
|
+
*
|
|
12
|
+
* The third defence, and the smallest: long enough to outlast the 200–400 ms
|
|
13
|
+
* between the two halves of a double click, short enough to read as the panel
|
|
14
|
+
* arriving rather than as a control that is broken.
|
|
15
|
+
*
|
|
16
|
+
* It runs on the *transition* into the armed state only. A dock that mounts
|
|
17
|
+
* already armed — a specimen still, a replay parked on this step, a test that
|
|
18
|
+
* renders `confirming="both"` — has nobody's second click in flight, and
|
|
19
|
+
* disabling its confirm for the first frames of a page would be a lie about
|
|
20
|
+
* why.
|
|
21
|
+
*/
|
|
22
|
+
const SETTLE_MS = 400;
|
|
23
|
+
/**
|
|
24
|
+
* What a restore would undo, in one line: `6 files · 12 messages since this point`.
|
|
25
|
+
*
|
|
26
|
+
* The number that makes the decision. "Restore" on its own asks a person to
|
|
27
|
+
* agree to something whose size they cannot see, and the two counts are exactly
|
|
28
|
+
* the two axes the scopes act on — which is why they are formatted together
|
|
29
|
+
* here and drawn on the summary line a collapsed dock shows.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* formatRevertSummary({ files: 6, messages: 12 }); // "6 files · 12 messages since this point"
|
|
33
|
+
* formatRevertSummary({ files: 1 }); // "1 file since this point"
|
|
34
|
+
* formatRevertSummary({}); // "Nothing since this point"
|
|
35
|
+
*/
|
|
36
|
+
function formatRevertSummary({ files, messages }) {
|
|
37
|
+
const parts = [];
|
|
38
|
+
if (files !== void 0) parts.push(`${files} file${files === 1 ? "" : "s"}`);
|
|
39
|
+
if (messages !== void 0) parts.push(`${messages} message${messages === 1 ? "" : "s"}`);
|
|
40
|
+
if (parts.length === 0) return "Nothing since this point";
|
|
41
|
+
return `${parts.join(" · ")} since this point`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Put it back — and say, in the interface, that this cannot be taken back.
|
|
45
|
+
*
|
|
46
|
+
* The second of the two docks nobody ships, and the only destructive control in
|
|
47
|
+
* this family. Four things make it that rather than a button called Restore.
|
|
48
|
+
*
|
|
49
|
+
* The **axis**: a run changes the files and the conversation about them, and
|
|
50
|
+
* putting one back is not putting the other back. Every product in the study
|
|
51
|
+
* that has checkpoints has this axis, and every one of them names it in its
|
|
52
|
+
* copy — `Restore Files` against `Restore Files & Task`, `Reset Code` against
|
|
53
|
+
* `Reset Chat`. So the scopes are the controls: each one says what it does and
|
|
54
|
+
* what it costs, and the two sentences come from `REVERT_SCOPE_LABELS` and
|
|
55
|
+
* `REVERT_SCOPE_DESCRIPTIONS`, which a console can extend.
|
|
56
|
+
*
|
|
57
|
+
* The **gate**: `onRestore` fires from one control only, the one that answers
|
|
58
|
+
* "Discard all changes up to this checkpoint?". Picking a scope arms the dock
|
|
59
|
+
* and does nothing else. `This action cannot be undone.` is on the screen the
|
|
60
|
+
* whole time the dock is open, above both steps — an irreversibility that lives
|
|
61
|
+
* only in a props table is an irreversibility somebody meets for the first time
|
|
62
|
+
* afterwards.
|
|
63
|
+
*
|
|
64
|
+
* The **geometry**, which is the half a gate cannot do on its own: arming must
|
|
65
|
+
* not put the destructive control where the hand already is. This dock used to
|
|
66
|
+
* swap the scope list for the confirm inside the same box, and measured in
|
|
67
|
+
* Chromium at the bench's own 448 px the whole of `Discard and restore`
|
|
68
|
+
* (x13–170, y131–161) landed inside `Restore conversation` (x13–435,
|
|
69
|
+
* y121–175) — true at 280, 320, 360, 448, 520, 640 and 800 px and at all five
|
|
70
|
+
* densities, so a double click on a scope armed the dock with its first press
|
|
71
|
+
* and destroyed the work with its second. Now nothing above the confirm moves:
|
|
72
|
+
* the scope list stays exactly where it was, dimmed and `disabled` — so the
|
|
73
|
+
* coordinates that armed the dock hold a control that no longer answers a
|
|
74
|
+
* click — and the question is *appended under* it, a hairline and two lines of
|
|
75
|
+
* copy below the last scope. Three defences, not one: the arming control stops
|
|
76
|
+
* taking presses, the destructive control is somewhere else, and it refuses
|
|
77
|
+
* presses for {@link SETTLE_MS} after it arrives. It fires once per arm.
|
|
78
|
+
*
|
|
79
|
+
* And the **way out**, which is `TwoStepButton`'s ruling rather than a second
|
|
80
|
+
* one: focus lands on `Keep everything` when the dock arms, never on the
|
|
81
|
+
* destructive half — so a stuck Enter cannot walk through both steps, and a
|
|
82
|
+
* reader whose button was just unmounted is not left on `<body>`; `Keep
|
|
83
|
+
* everything` hands focus back to the scope that armed it; `Escape` disarms
|
|
84
|
+
* from inside the panel and stops there, so an armed dock inside a dialog does
|
|
85
|
+
* not also close the dialog, *and* from the document while the dock is armed,
|
|
86
|
+
* because a press on a disabled control drops focus to `<body>` and an exit
|
|
87
|
+
* that only listens to its own subtree is no exit at all after a double click;
|
|
88
|
+
* and folding the dock away disarms it, because an armed state nobody can see
|
|
89
|
+
* is one somebody re-opens into. Focus moves on the *transition* into the armed
|
|
90
|
+
* state only — a page that renders three of these as stills steals nothing.
|
|
91
|
+
*
|
|
92
|
+
* Two of that button's four exits are deliberately not taken. There is no
|
|
93
|
+
* **timeout**: an inline two-step's armed state is two words, and four seconds
|
|
94
|
+
* is longer than reading them, while this one is a question, a scope, what it
|
|
95
|
+
* costs and a sentence about irreversibility — a panel that disarms itself
|
|
96
|
+
* while it is being read teaches people to hurry past exactly the copy that
|
|
97
|
+
* matters. And there is no **blur exit**: `confirming` is the caller's state,
|
|
98
|
+
* so leaving would rewrite a prop the caller owns on a gesture as ordinary as
|
|
99
|
+
* tabbing into the transcript, and an armed dock is a labelled panel in the
|
|
100
|
+
* page rather than a button lying in wait.
|
|
101
|
+
*
|
|
102
|
+
* State is a prop, as everywhere here: `open` and `confirming` are the caller's,
|
|
103
|
+
* which is what lets the armed state be benched, tested and replayed instead of
|
|
104
|
+
* being a thing that only exists between two clicks.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* import { RevertDock } from "@cueplusplus/ui/elements";
|
|
108
|
+
*
|
|
109
|
+
* <RevertDock
|
|
110
|
+
* label="Six fixtures addressed"
|
|
111
|
+
* files={6}
|
|
112
|
+
* messages={12}
|
|
113
|
+
* open={open}
|
|
114
|
+
* onOpenChange={setOpen}
|
|
115
|
+
* confirming={armed}
|
|
116
|
+
* onConfirmingChange={setArmed}
|
|
117
|
+
* onRestore={(scope) => restore(scope)}
|
|
118
|
+
* />
|
|
119
|
+
* @example
|
|
120
|
+
* // A runtime with no workspace to put back: one axis, and it says so.
|
|
121
|
+
* <RevertDock label="Before the plan" messages={9} scopes={["conversation"]} open />
|
|
122
|
+
*/
|
|
123
|
+
const RevertDock = React.forwardRef(function RevertDock({ label = "Revert to this point", files, messages, summary, scopes = REVERT_SCOPES, open, onOpenChange, confirming = null, onConfirmingChange, onRestore, labels, scopeLabels, scopeDescriptions, className, onKeyDown, ...elementProps }, ref) {
|
|
124
|
+
const copy = {
|
|
125
|
+
...REVERT_LABELS,
|
|
126
|
+
...labels
|
|
127
|
+
};
|
|
128
|
+
const scopeCopy = {
|
|
129
|
+
...REVERT_SCOPE_LABELS,
|
|
130
|
+
...scopeLabels
|
|
131
|
+
};
|
|
132
|
+
const scopeWhat = {
|
|
133
|
+
...REVERT_SCOPE_DESCRIPTIONS,
|
|
134
|
+
...scopeDescriptions
|
|
135
|
+
};
|
|
136
|
+
const said = summary ?? formatRevertSummary({
|
|
137
|
+
files,
|
|
138
|
+
messages
|
|
139
|
+
});
|
|
140
|
+
const ids = React.useId();
|
|
141
|
+
const warningId = `${ids}warning`;
|
|
142
|
+
const questionId = `${ids}question`;
|
|
143
|
+
const scopeId = `${ids}scope`;
|
|
144
|
+
const dock = React.useRef(null);
|
|
145
|
+
const cancel = React.useRef(null);
|
|
146
|
+
const scopeButtons = React.useRef(/* @__PURE__ */ new Map());
|
|
147
|
+
const armedBefore = React.useRef(confirming);
|
|
148
|
+
const restored = React.useRef(false);
|
|
149
|
+
const settledAt = React.useRef(0);
|
|
150
|
+
const [settling, setSettling] = React.useState(false);
|
|
151
|
+
const setDock = React.useCallback((element) => {
|
|
152
|
+
dock.current = element;
|
|
153
|
+
if (typeof ref === "function") ref(element);
|
|
154
|
+
else if (ref !== null) ref.current = element;
|
|
155
|
+
}, [ref]);
|
|
156
|
+
/**
|
|
157
|
+
* Whether this dock is still the place focus belongs.
|
|
158
|
+
*
|
|
159
|
+
* `<body>` counts: a button that has just been disabled or unmounted hands
|
|
160
|
+
* the document back its default, which is precisely the state finding 2 was
|
|
161
|
+
* about. Anything else is somewhere a person chose, and moving them out of it
|
|
162
|
+
* would be the trap rather than the fix.
|
|
163
|
+
*/
|
|
164
|
+
const holdsFocus = React.useCallback(() => {
|
|
165
|
+
const element = dock.current;
|
|
166
|
+
if (element === null) return false;
|
|
167
|
+
const active = element.ownerDocument.activeElement;
|
|
168
|
+
return active === null || active === element.ownerDocument.body || element.contains(active);
|
|
169
|
+
}, []);
|
|
170
|
+
React.useEffect(() => {
|
|
171
|
+
const before = armedBefore.current;
|
|
172
|
+
armedBefore.current = confirming;
|
|
173
|
+
if (before === confirming) return void 0;
|
|
174
|
+
restored.current = false;
|
|
175
|
+
if (confirming === null) {
|
|
176
|
+
settledAt.current = 0;
|
|
177
|
+
setSettling(false);
|
|
178
|
+
if (before !== null && holdsFocus()) scopeButtons.current.get(before)?.focus();
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
settledAt.current = Date.now() + SETTLE_MS;
|
|
182
|
+
setSettling(true);
|
|
183
|
+
if (holdsFocus()) cancel.current?.focus();
|
|
184
|
+
const timer = setTimeout(() => {
|
|
185
|
+
settledAt.current = 0;
|
|
186
|
+
setSettling(false);
|
|
187
|
+
}, SETTLE_MS);
|
|
188
|
+
return () => clearTimeout(timer);
|
|
189
|
+
}, [confirming, holdsFocus]);
|
|
190
|
+
React.useEffect(() => {
|
|
191
|
+
if (confirming === null) return void 0;
|
|
192
|
+
const owner = dock.current?.ownerDocument ?? globalThis.document;
|
|
193
|
+
const disarm = (event) => {
|
|
194
|
+
if (event.key !== "Escape" || event.defaultPrevented) return;
|
|
195
|
+
onConfirmingChange?.(null);
|
|
196
|
+
};
|
|
197
|
+
owner.addEventListener("keydown", disarm);
|
|
198
|
+
return () => owner.removeEventListener("keydown", disarm);
|
|
199
|
+
}, [confirming, onConfirmingChange]);
|
|
200
|
+
React.useEffect(() => {
|
|
201
|
+
if (open || confirming === null) return;
|
|
202
|
+
onConfirmingChange?.(null);
|
|
203
|
+
}, [
|
|
204
|
+
confirming,
|
|
205
|
+
onConfirmingChange,
|
|
206
|
+
open
|
|
207
|
+
]);
|
|
208
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
209
|
+
ref: setDock,
|
|
210
|
+
"data-slot": "revert-dock",
|
|
211
|
+
"data-open": String(open),
|
|
212
|
+
"data-confirming": confirming ?? "none",
|
|
213
|
+
className: cn(paper, "flex w-full flex-col rounded-(--radius-overlay)", className),
|
|
214
|
+
onKeyDown: (event) => {
|
|
215
|
+
onKeyDown?.(event);
|
|
216
|
+
if (event.key !== "Escape" || confirming === null) return;
|
|
217
|
+
event.stopPropagation();
|
|
218
|
+
onConfirmingChange?.(null);
|
|
219
|
+
},
|
|
220
|
+
...elementProps,
|
|
221
|
+
children: [/* @__PURE__ */ jsxs("button", {
|
|
222
|
+
type: "button",
|
|
223
|
+
"aria-expanded": open,
|
|
224
|
+
title: open ? copy.collapse : copy.expand,
|
|
225
|
+
onClick: () => {
|
|
226
|
+
if (open && confirming !== null) onConfirmingChange?.(null);
|
|
227
|
+
onOpenChange?.(!open);
|
|
228
|
+
},
|
|
229
|
+
className: "hover:bg-surface-2 flex items-center gap-2.5 rounded-(--radius-overlay) px-3 py-2 text-start transition-colors focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-2 focus-visible:outline-accent motion-reduce:transition-none",
|
|
230
|
+
children: [
|
|
231
|
+
/* @__PURE__ */ jsx(HistoryIcon, {
|
|
232
|
+
"aria-hidden": true,
|
|
233
|
+
className: "text-fg-subtle size-3.5 shrink-0"
|
|
234
|
+
}),
|
|
235
|
+
/* @__PURE__ */ jsx("span", {
|
|
236
|
+
className: "text-fg min-w-0 flex-1 truncate text-(length:--cue-text-ui)",
|
|
237
|
+
children: label
|
|
238
|
+
}),
|
|
239
|
+
/* @__PURE__ */ jsx("span", {
|
|
240
|
+
"data-slot": "revert-summary",
|
|
241
|
+
className: cn(mono, "text-fg-subtle shrink-0"),
|
|
242
|
+
children: said
|
|
243
|
+
})
|
|
244
|
+
]
|
|
245
|
+
}), open ? /* @__PURE__ */ jsxs("div", {
|
|
246
|
+
className: "flex flex-col gap-2 px-3 pb-3",
|
|
247
|
+
children: [
|
|
248
|
+
/* @__PURE__ */ jsxs("p", {
|
|
249
|
+
"data-slot": "revert-warning",
|
|
250
|
+
id: warningId,
|
|
251
|
+
className: "text-warn flex items-center gap-1.5 text-(length:--cue-text-ui)",
|
|
252
|
+
children: [/* @__PURE__ */ jsx(TriangleAlertIcon, {
|
|
253
|
+
"aria-hidden": true,
|
|
254
|
+
className: "size-3.5 shrink-0"
|
|
255
|
+
}), copy.warning]
|
|
256
|
+
}),
|
|
257
|
+
/* @__PURE__ */ jsx("div", {
|
|
258
|
+
"data-slot": "revert-scopes",
|
|
259
|
+
className: "flex flex-col gap-1.5",
|
|
260
|
+
children: scopes.map((scope) => {
|
|
261
|
+
const armed = confirming === scope;
|
|
262
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
263
|
+
ref: (element) => {
|
|
264
|
+
if (element === null) scopeButtons.current.delete(scope);
|
|
265
|
+
else scopeButtons.current.set(scope, element);
|
|
266
|
+
},
|
|
267
|
+
type: "button",
|
|
268
|
+
"data-scope": scope,
|
|
269
|
+
"data-armed": String(armed),
|
|
270
|
+
disabled: confirming !== null,
|
|
271
|
+
id: armed ? scopeId : void 0,
|
|
272
|
+
onClick: () => onConfirmingChange?.(scope),
|
|
273
|
+
className: cn(confirming === null ? fieldInteractive : armed ? "bg-danger/10" : cn(field, "opacity-60"), "flex flex-col items-start gap-0.5 rounded-(--radius-control) px-3 py-2 text-start outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-2 focus-visible:outline-accent"),
|
|
274
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
275
|
+
className: "text-fg text-(length:--cue-text-ui) font-medium",
|
|
276
|
+
children: scopeCopy[scope]
|
|
277
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
278
|
+
className: "text-fg-subtle text-(length:--cue-text-ui)",
|
|
279
|
+
children: scopeWhat[scope]
|
|
280
|
+
})]
|
|
281
|
+
}, scope);
|
|
282
|
+
})
|
|
283
|
+
}),
|
|
284
|
+
confirming === null ? null : /* @__PURE__ */ jsxs("div", {
|
|
285
|
+
"data-slot": "revert-confirm",
|
|
286
|
+
role: "group",
|
|
287
|
+
"aria-labelledby": questionId,
|
|
288
|
+
className: "border-border flex flex-col gap-2 border-t pt-2",
|
|
289
|
+
children: [/* @__PURE__ */ jsx("p", {
|
|
290
|
+
id: questionId,
|
|
291
|
+
className: "text-fg text-(length:--cue-text-ui)",
|
|
292
|
+
children: copy.question
|
|
293
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
294
|
+
className: "flex items-center gap-2",
|
|
295
|
+
children: [/* @__PURE__ */ jsx("button", {
|
|
296
|
+
ref: cancel,
|
|
297
|
+
type: "button",
|
|
298
|
+
"data-slot": "revert-cancel",
|
|
299
|
+
onClick: () => onConfirmingChange?.(null),
|
|
300
|
+
className: cn(ghostButton, "h-7 px-3 text-(length:--cue-text-ui) font-medium"),
|
|
301
|
+
children: copy.cancel
|
|
302
|
+
}), /* @__PURE__ */ jsxs("button", {
|
|
303
|
+
type: "button",
|
|
304
|
+
"data-slot": "revert-restore",
|
|
305
|
+
"data-settling": String(settling),
|
|
306
|
+
disabled: settling,
|
|
307
|
+
"aria-describedby": scopes.includes(confirming) ? `${scopeId} ${warningId}` : warningId,
|
|
308
|
+
onClick: () => {
|
|
309
|
+
if (Date.now() < settledAt.current || restored.current) return;
|
|
310
|
+
restored.current = true;
|
|
311
|
+
onConfirmingChange?.(null);
|
|
312
|
+
onRestore?.(confirming);
|
|
313
|
+
},
|
|
314
|
+
className: "bg-danger text-danger-fg flex items-center gap-1.5 rounded-(--radius-control) px-3 py-1.5 text-(length:--cue-text-ui) font-medium outline-none transition-[opacity,scale] duration-150 enabled:hover:opacity-90 enabled:active:scale-[0.96] disabled:opacity-60 focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent motion-reduce:transition-none",
|
|
315
|
+
children: [/* @__PURE__ */ jsx(RotateCcwIcon, {
|
|
316
|
+
"aria-hidden": true,
|
|
317
|
+
className: "size-3.5"
|
|
318
|
+
}), copy.confirm]
|
|
319
|
+
})]
|
|
320
|
+
})]
|
|
321
|
+
})
|
|
322
|
+
]
|
|
323
|
+
}) : null]
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
//#endregion
|
|
327
|
+
export { RevertDock, formatRevertSummary };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { DiffLine } from "./code-diff.js";
|
|
2
|
+
import { ComponentProps } from "react";
|
|
3
|
+
//#region src/elements/reviewable-diff.d.ts
|
|
4
|
+
/** What the reviewer has decided about one hunk, `pending` until they act. */
|
|
5
|
+
type HunkDecision = "pending" | "kept" | "discarded";
|
|
6
|
+
/** One reviewable block of a diff: its range, its rows, and the decision standing on it. */
|
|
7
|
+
interface DiffHunk {
|
|
8
|
+
/** Stable identity, reported back by onKeep and onDiscard. */
|
|
9
|
+
id: string;
|
|
10
|
+
/** Unified-diff range header, shown in mono. */
|
|
11
|
+
range: string;
|
|
12
|
+
/** Discarded hunks stay visible at reduced opacity so the review reads as a whole. */
|
|
13
|
+
decision: HunkDecision;
|
|
14
|
+
/** Reuses the DiffLine shape from the code diff element. */
|
|
15
|
+
lines: readonly DiffLine[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The same diff, but each hunk is a decision: keep it, discard it, apply what
|
|
19
|
+
* survived.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* import { ReviewableDiff } from "@cueplusplus/ui/elements";
|
|
23
|
+
*
|
|
24
|
+
* <ReviewableDiff
|
|
25
|
+
* filename="composer.tsx"
|
|
26
|
+
* hunks={hunks}
|
|
27
|
+
* onKeep={(id) => decide(id, "kept")}
|
|
28
|
+
* onDiscard={(id) => decide(id, "discarded")}
|
|
29
|
+
* onApply={commit}
|
|
30
|
+
* />
|
|
31
|
+
*/
|
|
32
|
+
declare function ReviewableDiff({ filename, hunks, onKeep, onDiscard, onApply, className, ...props }: Omit<ComponentProps<"div">, "children" | "filename" | "hunks" | "onKeep" | "onDiscard" | "onApply"> & {
|
|
33
|
+
/** File the hunks belong to. */
|
|
34
|
+
filename: string;
|
|
35
|
+
/** Each hunk carries its own decision. Apply stays disabled until none are pending. */
|
|
36
|
+
hunks: readonly DiffHunk[];
|
|
37
|
+
/** Called when a hunk is accepted. */
|
|
38
|
+
onKeep?: (id: string) => void;
|
|
39
|
+
/** Called when a hunk is rejected. */
|
|
40
|
+
onDiscard?: (id: string) => void;
|
|
41
|
+
/** Called when the reviewed set is committed. Only kept hunks should be written. */
|
|
42
|
+
onApply?: () => void;
|
|
43
|
+
}): import("react").JSX.Element;
|
|
44
|
+
//#endregion
|
|
45
|
+
export { DiffHunk, HunkDecision, ReviewableDiff };
|