@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,86 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { field, inkButton, mono, paper } from "./surfaces.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { KeyRoundIcon } from "lucide-react";
|
|
6
|
+
//#region src/elements/permission-grant.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Granting a capability rather than approving one action, with the reach spelled out.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* import { PermissionGrant } from "@cueplusplus/ui/elements";
|
|
12
|
+
*
|
|
13
|
+
* <PermissionGrant
|
|
14
|
+
* capability="Filesystem access"
|
|
15
|
+
* requester="filesystem-mcp"
|
|
16
|
+
* reach={reach}
|
|
17
|
+
* scope="pending"
|
|
18
|
+
* onGrant={setScope}
|
|
19
|
+
* />
|
|
20
|
+
*/
|
|
21
|
+
function PermissionGrant({ capability, requester, reach, scope, onGrant, className, ...props }) {
|
|
22
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
23
|
+
"data-slot": "permission-grant",
|
|
24
|
+
className: cn(paper, "flex w-full max-w-sm flex-col gap-3.5 rounded-(--radius-overlay) p-4", className),
|
|
25
|
+
...props,
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ jsxs("div", {
|
|
28
|
+
className: "flex items-center gap-2.5",
|
|
29
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
30
|
+
className: "bg-surface-1 text-fg-muted flex size-7 shrink-0 items-center justify-center rounded-(--radius-surface)",
|
|
31
|
+
children: /* @__PURE__ */ jsx(KeyRoundIcon, { className: "size-3.5" })
|
|
32
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
33
|
+
className: "flex min-w-0 flex-1 flex-col",
|
|
34
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
35
|
+
className: "truncate text-(length:--cue-text-body) font-medium",
|
|
36
|
+
children: capability
|
|
37
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
38
|
+
className: "text-fg-muted truncate text-(length:--cue-text-ui)",
|
|
39
|
+
children: ["requested by ", requester]
|
|
40
|
+
})]
|
|
41
|
+
})]
|
|
42
|
+
}),
|
|
43
|
+
/* @__PURE__ */ jsxs("div", {
|
|
44
|
+
className: "flex flex-col gap-1",
|
|
45
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
46
|
+
className: cn(mono, "text-fg-subtle"),
|
|
47
|
+
children: "this grants"
|
|
48
|
+
}), reach.map((item) => /* @__PURE__ */ jsxs("span", {
|
|
49
|
+
className: "text-fg-muted flex items-baseline gap-2 text-(length:--cue-text-ui)",
|
|
50
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
51
|
+
"aria-hidden": true,
|
|
52
|
+
className: "bg-surface-3 size-1 rounded-full"
|
|
53
|
+
}), item]
|
|
54
|
+
}, item))]
|
|
55
|
+
}),
|
|
56
|
+
/* @__PURE__ */ jsx("div", {
|
|
57
|
+
className: "flex h-8 items-center justify-end gap-2",
|
|
58
|
+
children: scope === "pending" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
59
|
+
/* @__PURE__ */ jsx("button", {
|
|
60
|
+
type: "button",
|
|
61
|
+
onClick: () => onGrant?.("denied"),
|
|
62
|
+
className: "text-fg-muted hover:bg-surface-2 hover:text-fg h-8 rounded-full px-3 text-(length:--cue-text-ui) font-medium transition-[background-color,color,scale] duration-150 active:scale-[0.96]",
|
|
63
|
+
children: "Deny"
|
|
64
|
+
}),
|
|
65
|
+
/* @__PURE__ */ jsx("button", {
|
|
66
|
+
type: "button",
|
|
67
|
+
onClick: () => onGrant?.("session"),
|
|
68
|
+
className: "text-fg-muted hover:bg-surface-2 hover:text-fg h-8 rounded-full px-3 text-(length:--cue-text-ui) font-medium transition-[background-color,color,scale] duration-150 active:scale-[0.96]",
|
|
69
|
+
children: "This session"
|
|
70
|
+
}),
|
|
71
|
+
/* @__PURE__ */ jsx("button", {
|
|
72
|
+
type: "button",
|
|
73
|
+
onClick: () => onGrant?.("always"),
|
|
74
|
+
className: cn(inkButton, "flex h-8 items-center rounded-full px-3 text-(length:--cue-text-ui) font-medium"),
|
|
75
|
+
children: "Always"
|
|
76
|
+
})
|
|
77
|
+
] }) : /* @__PURE__ */ jsx("span", {
|
|
78
|
+
className: cn(field, mono, "cue-elements-fade-in cue-elements-animate-in text-fg-muted rounded-full px-2.5 py-1.5 duration-300"),
|
|
79
|
+
children: scope === "denied" ? "denied" : `granted · ${scope}`
|
|
80
|
+
}, scope)
|
|
81
|
+
})
|
|
82
|
+
]
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
//#endregion
|
|
86
|
+
export { PermissionGrant };
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { PermissionLabels } from "./vocabulary.js";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
//#region src/elements/permission-scopes.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* One destination a standing grant can be written to.
|
|
6
|
+
*
|
|
7
|
+
* `writes` has no default anywhere in this package and never will.
|
|
8
|
+
* `PERMISSION_SCOPE_LABELS` ships the four reaches in words — `this session`,
|
|
9
|
+
* `this project (just you)`, `this project (shared)`, `all projects` — because
|
|
10
|
+
* those are the same everywhere; where a grant lands is the product's own
|
|
11
|
+
* answer, and a design system that guessed at a path would be committing the
|
|
12
|
+
* exact defect this element exists to prevent.
|
|
13
|
+
*/
|
|
14
|
+
interface PermissionScope {
|
|
15
|
+
/** Identifies it, and what `onAlwaysAllow` reports. */
|
|
16
|
+
id: string;
|
|
17
|
+
/**
|
|
18
|
+
* The words that go inside the answer: `this project (just you)`.
|
|
19
|
+
* `PERMISSION_SCOPE_LABELS` is the shipped set.
|
|
20
|
+
*/
|
|
21
|
+
label: string;
|
|
22
|
+
/**
|
|
23
|
+
* What choosing it writes, and where, as a sentence a person can act on:
|
|
24
|
+
* `Saves to .cue/settings.local.json (gitignored)`, `Not saved. Gone when
|
|
25
|
+
* this run ends.` Drawn under the answer, never hidden behind a hover, and
|
|
26
|
+
* wrapped inside the word if the path leaves it nowhere else to break — it
|
|
27
|
+
* is the card's only account of where the grant lands, so it is never
|
|
28
|
+
* shortened and never allowed off the edge.
|
|
29
|
+
*/
|
|
30
|
+
writes: string;
|
|
31
|
+
}
|
|
32
|
+
/** What {@link formatAlwaysAllow} was asked to write a label for. */
|
|
33
|
+
interface AlwaysAllowInput {
|
|
34
|
+
/**
|
|
35
|
+
* The rules the grant would write, exactly as they will be written:
|
|
36
|
+
* `Bash(git commit:*)`, `Read(src/**)`. Never shortened.
|
|
37
|
+
*/
|
|
38
|
+
rules: readonly string[];
|
|
39
|
+
/** The chosen scope's words: `this project (just you)`. */
|
|
40
|
+
scope: string;
|
|
41
|
+
/**
|
|
42
|
+
* Whether the rules are rules or directories. Directories get their own
|
|
43
|
+
* phrasing — the study's only other form — because `allow /Users/kit/rig/`
|
|
44
|
+
* reads as a path and `allow access to /Users/kit/rig/` reads as a grant.
|
|
45
|
+
*/
|
|
46
|
+
kind?: "rule" | "directory";
|
|
47
|
+
/** What to say when there is no rule to name. `PERMISSION_LABELS.fallback`. */
|
|
48
|
+
fallback?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The self-writing label, in the three pieces the control renders it in.
|
|
52
|
+
*
|
|
53
|
+
* The scope is separated out because it is the one part of the sentence that
|
|
54
|
+
* can change without the answer changing: the reader picks a different
|
|
55
|
+
* destination and the same grant goes somewhere else. `text` is all three
|
|
56
|
+
* joined, and it is what the control's accessible name is built from, so the
|
|
57
|
+
* sentence a screen reader hears and the sentence on the screen cannot drift.
|
|
58
|
+
*/
|
|
59
|
+
interface AlwaysAllowLabel {
|
|
60
|
+
/** Everything before the scope: `Yes, allow Bash(git commit:*) for `. */
|
|
61
|
+
lead: string;
|
|
62
|
+
/** The scope's own words, which the control draws as its destination. */
|
|
63
|
+
scope: string;
|
|
64
|
+
/**
|
|
65
|
+
* Everything after it. Empty in every form the study found, and present
|
|
66
|
+
* because a table translated into a language that puts the scope first will
|
|
67
|
+
* need it.
|
|
68
|
+
*/
|
|
69
|
+
trail: string;
|
|
70
|
+
/** The three joined: the whole sentence. */
|
|
71
|
+
text: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Write the "always allow" answer's label from what it would actually grant.
|
|
75
|
+
*
|
|
76
|
+
* The four forms are Claude Code's, and the reason they are worth copying is
|
|
77
|
+
* that they degrade in the right order: name one rule, name two, then count.
|
|
78
|
+
* What this does **not** do is shorten — no 17-character elision, no stripping
|
|
79
|
+
* the `:*` off a prefix rule — because the elided part is the part that says
|
|
80
|
+
* how far the grant reaches. When there are more rules than the label can name,
|
|
81
|
+
* {@link PermissionScopes} lists every one of them underneath rather than
|
|
82
|
+
* leaving `and 3 more` as the only account of what was granted.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* formatAlwaysAllow({ rules: ["Bash(git commit:*)"], scope: "this project (just you)" }).text;
|
|
86
|
+
* // "Yes, allow Bash(git commit:*) for this project (just you)"
|
|
87
|
+
* @example
|
|
88
|
+
* formatAlwaysAllow({ rules: ["Read(src/**)", "Read(docs/**)", "Read(test/**)"], scope: "all projects" }).text;
|
|
89
|
+
* // "Yes, allow Read(src/**) and 2 more for all projects"
|
|
90
|
+
* @example
|
|
91
|
+
* formatAlwaysAllow({ rules: ["/Users/kit/rig"], scope: "this session", kind: "directory" }).text;
|
|
92
|
+
* // "Yes, allow access to /Users/kit/rig/ for this session"
|
|
93
|
+
*/
|
|
94
|
+
declare function formatAlwaysAllow({ rules, scope, kind, fallback }: AlwaysAllowInput): AlwaysAllowLabel;
|
|
95
|
+
interface PermissionScopesProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children" | "onSelect"> {
|
|
96
|
+
/**
|
|
97
|
+
* The question, in the words of the thing being asked for: `Run this
|
|
98
|
+
* command?`, `Edit this file?`. One step up in size, as the reference sets
|
|
99
|
+
* it: it is the only sentence on the card that has to be read.
|
|
100
|
+
*/
|
|
101
|
+
question: string;
|
|
102
|
+
/**
|
|
103
|
+
* The file, host or command the question is about, set in mono beside it.
|
|
104
|
+
* Omit for a question that names its own subject.
|
|
105
|
+
*/
|
|
106
|
+
subject?: string;
|
|
107
|
+
/**
|
|
108
|
+
* The exact input the call would run with, drawn in a recessed mono box —
|
|
109
|
+
* the command, the patch, the URL. Shown verbatim and never parsed.
|
|
110
|
+
*/
|
|
111
|
+
input?: string;
|
|
112
|
+
/**
|
|
113
|
+
* The rules a standing grant would write, exactly as they will be written.
|
|
114
|
+
* The always-allow answer's label is built from these; when there are more
|
|
115
|
+
* than the label can name, all of them are listed under it.
|
|
116
|
+
*/
|
|
117
|
+
rules?: readonly string[];
|
|
118
|
+
/** Whether `rules` are rules or directories, which changes the phrasing. */
|
|
119
|
+
ruleKind?: "rule" | "directory";
|
|
120
|
+
/**
|
|
121
|
+
* Where a standing grant can be written, in the order they are offered.
|
|
122
|
+
* **No scopes means no always-allow answer**: a permanent grant that cannot
|
|
123
|
+
* say where it is saved is not one this element will offer.
|
|
124
|
+
*/
|
|
125
|
+
scopes?: readonly PermissionScope[];
|
|
126
|
+
/**
|
|
127
|
+
* Which scope is chosen, by `id`. Defaults to the first. Claude Code
|
|
128
|
+
* persists this choice across prompts and so should a console — which is why
|
|
129
|
+
* it is a prop here rather than state: this element never remembers anything.
|
|
130
|
+
*/
|
|
131
|
+
scope?: string;
|
|
132
|
+
/** Called with the next scope's `id` when the destination is cycled. */
|
|
133
|
+
onScopeChange?: (id: string) => void;
|
|
134
|
+
/** Yes, once. The answer exists only when this is given. */
|
|
135
|
+
onAllowOnce?: () => void;
|
|
136
|
+
/**
|
|
137
|
+
* Yes, and write the rules to the chosen scope — reported by `id`. The
|
|
138
|
+
* answer exists only when this **and** at least one scope are given.
|
|
139
|
+
*/
|
|
140
|
+
onAlwaysAllow?: (scope: string) => void;
|
|
141
|
+
/**
|
|
142
|
+
* No. Also what `Escape` does, while focus is inside the card. The answer
|
|
143
|
+
* exists only when this is given.
|
|
144
|
+
*/
|
|
145
|
+
onDeny?: () => void;
|
|
146
|
+
/** The card's own six strings, merged over `PERMISSION_LABELS`. */
|
|
147
|
+
labels?: Partial<PermissionLabels>;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Approval that says how far it reaches and where that is written down.
|
|
151
|
+
*
|
|
152
|
+
* Every product in the study offers a scope at the moment of approval, and
|
|
153
|
+
* every one of them labels it the same static way — `Always allow` — which is
|
|
154
|
+
* the least informative string in an agent UI: it is the only control on the
|
|
155
|
+
* screen whose consequences outlive the conversation, and it says nothing about
|
|
156
|
+
* what it grants or where the grant goes. So this one writes its own label.
|
|
157
|
+
* `Yes, allow Bash(git commit:*) for this project (just you)` names the rule
|
|
158
|
+
* and the reach; the line under it names the file, in a sentence, permanently
|
|
159
|
+
* visible.
|
|
160
|
+
*
|
|
161
|
+
* Nothing is shortened. Claude Code elides a long rule and strips the `:*` off
|
|
162
|
+
* a prefix rule, and both cuts land on the part that says how much is being
|
|
163
|
+
* granted, so the label here wraps instead. When there are more rules than the
|
|
164
|
+
* sentence can name, every one of them is listed under the answer — `and 3
|
|
165
|
+
* more` is a count, and a count is not an account.
|
|
166
|
+
*
|
|
167
|
+
* The three answers are numbered, and the numbers are real **while focus is
|
|
168
|
+
* inside the card**: `1`, `2` and `3` fire whichever answers are rendered,
|
|
169
|
+
* built from the same list that draws them, so a card with no always-allow has
|
|
170
|
+
* `2` on its deny, and `Escape` denies. The handler is the card's own
|
|
171
|
+
* `onKeyDown` and nothing is ever bound to the document, so the keys answer for
|
|
172
|
+
* a reader who has tabbed to an answer or been handed the card, and for nobody
|
|
173
|
+
* else.
|
|
174
|
+
*
|
|
175
|
+
* That is narrower than the reference, and the narrowing is the point. Claude
|
|
176
|
+
* Code disables its buttons for 500ms after mount and *then* takes focus, so
|
|
177
|
+
* its digits answer from anywhere; this card never claims focus at all, because
|
|
178
|
+
* a card that arrives mid-sentence and starts answering keystrokes is the bug
|
|
179
|
+
* that delay exists to prevent — and a row in a library cannot know whether the
|
|
180
|
+
* reader is halfway through typing `1` into a composer above it. A product that
|
|
181
|
+
* wants the digits to answer from anywhere has the information to decide that
|
|
182
|
+
* safely and this element does not: it routes its own key handler to the same
|
|
183
|
+
* three callbacks, or hands the card focus itself with a `ref` and a `tabIndex`
|
|
184
|
+
* of its own.
|
|
185
|
+
*
|
|
186
|
+
* There is no settled state. An answered permission is not a card any more; the
|
|
187
|
+
* row that survives is the tool call's own, with its status changed. Every
|
|
188
|
+
* product that modelled approval as an overlay ended up with the bug where the
|
|
189
|
+
* next message hides the answer.
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* import { PermissionScopes, PERMISSION_SCOPE_LABELS } from "@cueplusplus/ui/elements";
|
|
193
|
+
*
|
|
194
|
+
* <PermissionScopes
|
|
195
|
+
* question="Run this command?"
|
|
196
|
+
* subject="cue-cli"
|
|
197
|
+
* input='cue patch --universe 3 --fixtures 6'
|
|
198
|
+
* rules={["Bash(cue patch:*)"]}
|
|
199
|
+
* scopes={[
|
|
200
|
+
* { id: "session", label: PERMISSION_SCOPE_LABELS.session, writes: "Not saved. Gone when this run ends." },
|
|
201
|
+
* { id: "project", label: PERMISSION_SCOPE_LABELS.project, writes: "Saves to .cue/settings.local.json (gitignored)" },
|
|
202
|
+
* ]}
|
|
203
|
+
* scope={scope}
|
|
204
|
+
* onScopeChange={setScope}
|
|
205
|
+
* onAllowOnce={() => allow()}
|
|
206
|
+
* onAlwaysAllow={(id) => remember(id)}
|
|
207
|
+
* onDeny={() => deny()}
|
|
208
|
+
* />
|
|
209
|
+
* @example
|
|
210
|
+
* // No scopes: the card asks, and the only answers are once and no.
|
|
211
|
+
* <PermissionScopes question="Delete this file?" subject="cues/old.cue" onAllowOnce={allow} onDeny={deny} />
|
|
212
|
+
*/
|
|
213
|
+
declare const PermissionScopes: React.ForwardRefExoticComponent<PermissionScopesProps & React.RefAttributes<HTMLDivElement>>;
|
|
214
|
+
//#endregion
|
|
215
|
+
export { AlwaysAllowInput, AlwaysAllowLabel, PermissionScope, PermissionScopes, PermissionScopesProps, formatAlwaysAllow };
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { field, fieldInteractive, mono, paper } from "./surfaces.js";
|
|
4
|
+
import { PERMISSION_LABELS } from "./vocabulary.js";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
//#region src/elements/permission-scopes.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Write the "always allow" answer's label from what it would actually grant.
|
|
10
|
+
*
|
|
11
|
+
* The four forms are Claude Code's, and the reason they are worth copying is
|
|
12
|
+
* that they degrade in the right order: name one rule, name two, then count.
|
|
13
|
+
* What this does **not** do is shorten — no 17-character elision, no stripping
|
|
14
|
+
* the `:*` off a prefix rule — because the elided part is the part that says
|
|
15
|
+
* how far the grant reaches. When there are more rules than the label can name,
|
|
16
|
+
* {@link PermissionScopes} lists every one of them underneath rather than
|
|
17
|
+
* leaving `and 3 more` as the only account of what was granted.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* formatAlwaysAllow({ rules: ["Bash(git commit:*)"], scope: "this project (just you)" }).text;
|
|
21
|
+
* // "Yes, allow Bash(git commit:*) for this project (just you)"
|
|
22
|
+
* @example
|
|
23
|
+
* formatAlwaysAllow({ rules: ["Read(src/**)", "Read(docs/**)", "Read(test/**)"], scope: "all projects" }).text;
|
|
24
|
+
* // "Yes, allow Read(src/**) and 2 more for all projects"
|
|
25
|
+
* @example
|
|
26
|
+
* formatAlwaysAllow({ rules: ["/Users/kit/rig"], scope: "this session", kind: "directory" }).text;
|
|
27
|
+
* // "Yes, allow access to /Users/kit/rig/ for this session"
|
|
28
|
+
*/
|
|
29
|
+
function formatAlwaysAllow({ rules, scope, kind = "rule", fallback = PERMISSION_LABELS.fallback }) {
|
|
30
|
+
const named = rules.filter((rule) => rule.trim() !== "");
|
|
31
|
+
const join = (lead) => ({
|
|
32
|
+
lead,
|
|
33
|
+
scope,
|
|
34
|
+
trail: "",
|
|
35
|
+
text: `${lead}${scope}`
|
|
36
|
+
});
|
|
37
|
+
if (named.length === 0) return {
|
|
38
|
+
lead: fallback,
|
|
39
|
+
scope: "",
|
|
40
|
+
trail: "",
|
|
41
|
+
text: fallback
|
|
42
|
+
};
|
|
43
|
+
if (kind === "directory") {
|
|
44
|
+
const first = named[0];
|
|
45
|
+
if (named.length === 1) return join(`Yes, allow access to ${first.endsWith("/") ? first : `${first}/`} for `);
|
|
46
|
+
return join(`Yes, allow access to ${named.length} directories for `);
|
|
47
|
+
}
|
|
48
|
+
if (named.length === 1) return join(`Yes, allow ${named[0]} for `);
|
|
49
|
+
if (named.length === 2) return join(`Yes, allow ${named[0]} and ${named[1]} for `);
|
|
50
|
+
return join(`Yes, allow ${named[0]} and ${named.length - 1} more for `);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Approval that says how far it reaches and where that is written down.
|
|
54
|
+
*
|
|
55
|
+
* Every product in the study offers a scope at the moment of approval, and
|
|
56
|
+
* every one of them labels it the same static way — `Always allow` — which is
|
|
57
|
+
* the least informative string in an agent UI: it is the only control on the
|
|
58
|
+
* screen whose consequences outlive the conversation, and it says nothing about
|
|
59
|
+
* what it grants or where the grant goes. So this one writes its own label.
|
|
60
|
+
* `Yes, allow Bash(git commit:*) for this project (just you)` names the rule
|
|
61
|
+
* and the reach; the line under it names the file, in a sentence, permanently
|
|
62
|
+
* visible.
|
|
63
|
+
*
|
|
64
|
+
* Nothing is shortened. Claude Code elides a long rule and strips the `:*` off
|
|
65
|
+
* a prefix rule, and both cuts land on the part that says how much is being
|
|
66
|
+
* granted, so the label here wraps instead. When there are more rules than the
|
|
67
|
+
* sentence can name, every one of them is listed under the answer — `and 3
|
|
68
|
+
* more` is a count, and a count is not an account.
|
|
69
|
+
*
|
|
70
|
+
* The three answers are numbered, and the numbers are real **while focus is
|
|
71
|
+
* inside the card**: `1`, `2` and `3` fire whichever answers are rendered,
|
|
72
|
+
* built from the same list that draws them, so a card with no always-allow has
|
|
73
|
+
* `2` on its deny, and `Escape` denies. The handler is the card's own
|
|
74
|
+
* `onKeyDown` and nothing is ever bound to the document, so the keys answer for
|
|
75
|
+
* a reader who has tabbed to an answer or been handed the card, and for nobody
|
|
76
|
+
* else.
|
|
77
|
+
*
|
|
78
|
+
* That is narrower than the reference, and the narrowing is the point. Claude
|
|
79
|
+
* Code disables its buttons for 500ms after mount and *then* takes focus, so
|
|
80
|
+
* its digits answer from anywhere; this card never claims focus at all, because
|
|
81
|
+
* a card that arrives mid-sentence and starts answering keystrokes is the bug
|
|
82
|
+
* that delay exists to prevent — and a row in a library cannot know whether the
|
|
83
|
+
* reader is halfway through typing `1` into a composer above it. A product that
|
|
84
|
+
* wants the digits to answer from anywhere has the information to decide that
|
|
85
|
+
* safely and this element does not: it routes its own key handler to the same
|
|
86
|
+
* three callbacks, or hands the card focus itself with a `ref` and a `tabIndex`
|
|
87
|
+
* of its own.
|
|
88
|
+
*
|
|
89
|
+
* There is no settled state. An answered permission is not a card any more; the
|
|
90
|
+
* row that survives is the tool call's own, with its status changed. Every
|
|
91
|
+
* product that modelled approval as an overlay ended up with the bug where the
|
|
92
|
+
* next message hides the answer.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* import { PermissionScopes, PERMISSION_SCOPE_LABELS } from "@cueplusplus/ui/elements";
|
|
96
|
+
*
|
|
97
|
+
* <PermissionScopes
|
|
98
|
+
* question="Run this command?"
|
|
99
|
+
* subject="cue-cli"
|
|
100
|
+
* input='cue patch --universe 3 --fixtures 6'
|
|
101
|
+
* rules={["Bash(cue patch:*)"]}
|
|
102
|
+
* scopes={[
|
|
103
|
+
* { id: "session", label: PERMISSION_SCOPE_LABELS.session, writes: "Not saved. Gone when this run ends." },
|
|
104
|
+
* { id: "project", label: PERMISSION_SCOPE_LABELS.project, writes: "Saves to .cue/settings.local.json (gitignored)" },
|
|
105
|
+
* ]}
|
|
106
|
+
* scope={scope}
|
|
107
|
+
* onScopeChange={setScope}
|
|
108
|
+
* onAllowOnce={() => allow()}
|
|
109
|
+
* onAlwaysAllow={(id) => remember(id)}
|
|
110
|
+
* onDeny={() => deny()}
|
|
111
|
+
* />
|
|
112
|
+
* @example
|
|
113
|
+
* // No scopes: the card asks, and the only answers are once and no.
|
|
114
|
+
* <PermissionScopes question="Delete this file?" subject="cues/old.cue" onAllowOnce={allow} onDeny={deny} />
|
|
115
|
+
*/
|
|
116
|
+
const PermissionScopes = React.forwardRef(function PermissionScopes({ question, subject, input, rules = [], ruleKind = "rule", scopes = [], scope, onScopeChange, onAllowOnce, onAlwaysAllow, onDeny, labels, className, onKeyDown, ...elementProps }, ref) {
|
|
117
|
+
const copy = {
|
|
118
|
+
...PERMISSION_LABELS,
|
|
119
|
+
...labels
|
|
120
|
+
};
|
|
121
|
+
const chosen = scopes.find((entry) => entry.id === scope) ?? scopes[0];
|
|
122
|
+
const always = chosen === void 0 ? void 0 : formatAlwaysAllow({
|
|
123
|
+
rules,
|
|
124
|
+
scope: chosen.label,
|
|
125
|
+
kind: ruleKind,
|
|
126
|
+
fallback: copy.fallback
|
|
127
|
+
});
|
|
128
|
+
const answers = [];
|
|
129
|
+
if (onAllowOnce !== void 0) answers.push({
|
|
130
|
+
id: "once",
|
|
131
|
+
label: copy.allowOnce,
|
|
132
|
+
run: onAllowOnce
|
|
133
|
+
});
|
|
134
|
+
if (onAlwaysAllow !== void 0 && chosen !== void 0 && always !== void 0) answers.push({
|
|
135
|
+
id: "always",
|
|
136
|
+
label: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
137
|
+
always.lead,
|
|
138
|
+
always.scope === "" ? null : /* @__PURE__ */ jsx("span", {
|
|
139
|
+
className: "font-medium underline decoration-dotted underline-offset-2",
|
|
140
|
+
children: always.scope
|
|
141
|
+
}),
|
|
142
|
+
always.trail
|
|
143
|
+
] }),
|
|
144
|
+
run: () => onAlwaysAllow(chosen.id)
|
|
145
|
+
});
|
|
146
|
+
if (onDeny !== void 0) answers.push({
|
|
147
|
+
id: "deny",
|
|
148
|
+
label: copy.deny,
|
|
149
|
+
run: onDeny
|
|
150
|
+
});
|
|
151
|
+
const listed = rules.filter((rule) => rule.trim() !== "");
|
|
152
|
+
const namesAtMost = ruleKind === "directory" ? 1 : 2;
|
|
153
|
+
const spelled = answers.some((answer) => answer.id === "always") && listed.length > namesAtMost;
|
|
154
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
155
|
+
ref,
|
|
156
|
+
"data-slot": "permission-scopes",
|
|
157
|
+
"data-scope": chosen?.id,
|
|
158
|
+
onKeyDown: (event) => {
|
|
159
|
+
onKeyDown?.(event);
|
|
160
|
+
if (event.defaultPrevented) return;
|
|
161
|
+
if (event.key === "Escape" && onDeny !== void 0) {
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
onDeny();
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (event.metaKey || event.ctrlKey || event.altKey) return;
|
|
167
|
+
const at = Number.parseInt(event.key, 10);
|
|
168
|
+
const answer = Number.isNaN(at) ? void 0 : answers[at - 1];
|
|
169
|
+
if (answer === void 0) return;
|
|
170
|
+
event.preventDefault();
|
|
171
|
+
answer.run();
|
|
172
|
+
},
|
|
173
|
+
className: cn(paper, "flex w-full max-w-md flex-col gap-2.5 rounded-(--radius-overlay) p-3", className),
|
|
174
|
+
...elementProps,
|
|
175
|
+
children: [
|
|
176
|
+
/* @__PURE__ */ jsxs("p", {
|
|
177
|
+
className: "text-fg text-(length:--cue-text-body) font-bold wrap-anywhere",
|
|
178
|
+
children: [question, subject === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [" ", /* @__PURE__ */ jsx("span", {
|
|
179
|
+
"data-slot": "permission-scopes-subject",
|
|
180
|
+
className: cn(mono, "font-normal"),
|
|
181
|
+
children: subject
|
|
182
|
+
})] })]
|
|
183
|
+
}),
|
|
184
|
+
input === void 0 ? null : /* @__PURE__ */ jsx("pre", {
|
|
185
|
+
"data-slot": "permission-scopes-input",
|
|
186
|
+
className: cn(field, mono, "text-fg-muted max-h-40 overflow-auto rounded-(--radius-control) px-2.5 py-2 whitespace-pre-wrap"),
|
|
187
|
+
children: input
|
|
188
|
+
}),
|
|
189
|
+
/* @__PURE__ */ jsx("ul", {
|
|
190
|
+
"data-slot": "permission-scopes-answers",
|
|
191
|
+
className: "flex flex-col gap-1",
|
|
192
|
+
children: answers.map((answer, index) => /* @__PURE__ */ jsxs("li", {
|
|
193
|
+
className: "flex flex-col gap-1",
|
|
194
|
+
children: [/* @__PURE__ */ jsxs("button", {
|
|
195
|
+
type: "button",
|
|
196
|
+
"data-answer": answer.id,
|
|
197
|
+
onClick: answer.run,
|
|
198
|
+
className: cn(answer.id === "always" ? fieldInteractive : "hover:bg-surface-2", "flex w-full items-baseline gap-1 rounded-(--radius-control) px-2 py-1.5 text-start text-(length:--cue-text-ui) outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-2 focus-visible:outline-accent", answer.id === "deny" ? "text-fg-muted" : "text-fg"),
|
|
199
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
200
|
+
className: cn(mono, "shrink-0 opacity-60"),
|
|
201
|
+
children: index + 1
|
|
202
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
203
|
+
className: "min-w-0 flex-1 wrap-anywhere",
|
|
204
|
+
children: answer.label
|
|
205
|
+
})]
|
|
206
|
+
}), answer.id === "always" && chosen !== void 0 ? onScopeChange !== void 0 && scopes.length > 1 ? /* @__PURE__ */ jsx("button", {
|
|
207
|
+
type: "button",
|
|
208
|
+
"data-slot": "permission-scopes-destination",
|
|
209
|
+
"aria-label": `${chosen.writes}. ${copy.change}.`,
|
|
210
|
+
title: copy.change,
|
|
211
|
+
onClick: () => {
|
|
212
|
+
onScopeChange(scopes[(scopes.indexOf(chosen) + 1) % scopes.length].id);
|
|
213
|
+
},
|
|
214
|
+
className: "text-fg-subtle ms-6 self-start rounded-(--radius-control) text-start text-(length:--cue-text-ui) wrap-anywhere underline decoration-dotted underline-offset-2 outline-none hover:decoration-solid focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent",
|
|
215
|
+
children: chosen.writes
|
|
216
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
217
|
+
"data-slot": "permission-scopes-destination",
|
|
218
|
+
className: "text-fg-subtle ms-6 text-(length:--cue-text-ui) wrap-anywhere",
|
|
219
|
+
children: chosen.writes
|
|
220
|
+
}) : null]
|
|
221
|
+
}, answer.id))
|
|
222
|
+
}),
|
|
223
|
+
spelled ? /* @__PURE__ */ jsxs("div", {
|
|
224
|
+
className: "flex flex-col gap-1",
|
|
225
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
226
|
+
className: cn(mono, "text-fg-subtle wrap-anywhere"),
|
|
227
|
+
children: copy.rules
|
|
228
|
+
}), /* @__PURE__ */ jsx("ul", {
|
|
229
|
+
"data-slot": "permission-scopes-rules",
|
|
230
|
+
className: "flex flex-col gap-0.5",
|
|
231
|
+
children: listed.map((rule) => /* @__PURE__ */ jsxs("li", {
|
|
232
|
+
className: cn(mono, "text-fg-muted flex items-baseline gap-2 break-all"),
|
|
233
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
234
|
+
"aria-hidden": true,
|
|
235
|
+
className: "bg-surface-3 size-1 shrink-0 rounded-full"
|
|
236
|
+
}), rule]
|
|
237
|
+
}, rule))
|
|
238
|
+
})]
|
|
239
|
+
}) : null,
|
|
240
|
+
onDeny === void 0 ? null : /* @__PURE__ */ jsx("p", {
|
|
241
|
+
"data-slot": "permission-scopes-hint",
|
|
242
|
+
className: cn(mono, "text-fg-subtle wrap-anywhere"),
|
|
243
|
+
children: copy.hint
|
|
244
|
+
})
|
|
245
|
+
]
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
//#endregion
|
|
249
|
+
export { PermissionScopes, formatAlwaysAllow };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
//#region src/elements/prompt-library.d.ts
|
|
3
|
+
interface SavedPrompt {
|
|
4
|
+
/** Stable identity, compared against selectedId. */
|
|
5
|
+
id: string;
|
|
6
|
+
/** Prompt name, and the only field the search filters on. */
|
|
7
|
+
name: string;
|
|
8
|
+
/** The prompt text, shown in the preview below the list. */
|
|
9
|
+
body: string;
|
|
10
|
+
/** Placeholder names in the body, listed so you know what the prompt will ask for. */
|
|
11
|
+
variables: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Prompts you saved, searchable, with their variables shown before you insert one.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* import { PromptLibrary } from "@cueplusplus/ui/elements";
|
|
18
|
+
*
|
|
19
|
+
* <PromptLibrary
|
|
20
|
+
* prompts={prompts}
|
|
21
|
+
* query={query}
|
|
22
|
+
* selectedId={selectedId}
|
|
23
|
+
* onQueryChange={setQuery}
|
|
24
|
+
* onSelect={setSelectedId}
|
|
25
|
+
* onInsert={insert}
|
|
26
|
+
* />
|
|
27
|
+
*/
|
|
28
|
+
declare function PromptLibrary({ prompts, query, selectedId, onQueryChange, onSelect, onInsert, className, ...props }: Omit<ComponentProps<"div">, "children" | "prompts" | "query" | "selectedId" | "onQueryChange" | "onSelect" | "onInsert"> & {
|
|
29
|
+
/** Everything saved. Filtering happens inside against the name. */
|
|
30
|
+
prompts: readonly SavedPrompt[];
|
|
31
|
+
/** Current search text. */
|
|
32
|
+
query: string;
|
|
33
|
+
/** Which prompt is previewed below the list. */
|
|
34
|
+
selectedId: string;
|
|
35
|
+
/** Called as the search is typed. */
|
|
36
|
+
onQueryChange?: (query: string) => void;
|
|
37
|
+
/** Called when a prompt is highlighted. */
|
|
38
|
+
onSelect?: (id: string) => void;
|
|
39
|
+
/** Called on double click, to drop the prompt into the composer. */
|
|
40
|
+
onInsert?: (id: string) => void;
|
|
41
|
+
}): import("react").JSX.Element;
|
|
42
|
+
//#endregion
|
|
43
|
+
export { PromptLibrary, SavedPrompt };
|