@cueplusplus/ui 0.2.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2250 -0
- package/dist/agent-runtime/_glyphs.js +43 -0
- package/dist/agent-runtime/branch-picker.d.ts +45 -0
- package/dist/agent-runtime/branch-picker.js +87 -0
- package/dist/agent-runtime/index.d.ts +4 -0
- package/dist/agent-runtime/index.js +4 -0
- package/dist/agent-runtime/tool-call-card.d.ts +69 -0
- package/dist/agent-runtime/tool-call-card.js +187 -0
- package/dist/agent-runtime/use-agent-thread.d.ts +164 -0
- package/dist/agent-runtime/use-agent-thread.js +251 -0
- package/dist/brand/_chassis.d.ts +1 -1
- package/dist/brand/cue-mark.d.ts +1 -1
- package/dist/brand/cue-mark.js +1 -1
- package/dist/chat/index.d.ts +2 -2
- package/dist/chat/message-list.d.ts +6 -0
- package/dist/chat/message-list.js +35 -0
- package/dist/chrome/_edge-scroller.js +12 -1
- package/dist/chrome/_tabs-scroll.d.ts +1 -1
- package/dist/chrome/_tabs-scroll.js +1 -1
- package/dist/chrome/app-shell.d.ts +52 -2
- package/dist/chrome/app-shell.js +80 -8
- package/dist/chrome/index.d.ts +2 -2
- package/dist/configurator/_export.js +3 -2
- package/dist/configurator/_overrides.d.ts +1 -1
- package/dist/configurator/_overrides.js +18 -6
- package/dist/configurator/token-editor.js +4 -1
- package/dist/date/_segments.js +37 -2
- package/dist/elements/activity-graph.d.ts +40 -0
- package/dist/elements/activity-graph.js +81 -0
- package/dist/elements/agent-card.d.ts +49 -0
- package/dist/elements/agent-card.js +91 -0
- package/dist/elements/agent-handoff.d.ts +24 -0
- package/dist/elements/agent-handoff.js +53 -0
- package/dist/elements/agent-mode-badge.d.ts +72 -0
- package/dist/elements/agent-mode-badge.js +110 -0
- package/dist/elements/agent-plan.d.ts +24 -0
- package/dist/elements/agent-plan.js +74 -0
- package/dist/elements/agent-status.d.ts +29 -0
- package/dist/elements/agent-status.js +46 -0
- package/dist/elements/agent-surface.d.ts +65 -0
- package/dist/elements/agent-surface.js +68 -0
- package/dist/elements/animated-number.d.ts +86 -0
- package/dist/elements/animated-number.js +118 -0
- package/dist/elements/approval-card.d.ts +40 -0
- package/dist/elements/approval-card.js +78 -0
- package/dist/elements/artifact-card.d.ts +30 -0
- package/dist/elements/artifact-card.js +58 -0
- package/dist/elements/background-inbox.d.ts +39 -0
- package/dist/elements/background-inbox.js +60 -0
- package/dist/elements/canvas-split.d.ts +77 -0
- package/dist/elements/canvas-split.js +138 -0
- package/dist/elements/chart.d.ts +41 -0
- package/dist/elements/chart.js +117 -0
- package/dist/elements/chat-panel.d.ts +46 -0
- package/dist/elements/chat-panel.js +104 -0
- package/dist/elements/checkpoint-history.d.ts +31 -0
- package/dist/elements/checkpoint-history.js +65 -0
- package/dist/elements/clamp.d.ts +90 -0
- package/dist/elements/clamp.js +109 -0
- package/dist/elements/code-diff.d.ts +42 -0
- package/dist/elements/code-diff.js +69 -0
- package/dist/elements/code-runner.d.ts +38 -0
- package/dist/elements/code-runner.js +84 -0
- package/dist/elements/command-palette.d.ts +48 -0
- package/dist/elements/command-palette.js +129 -0
- package/dist/elements/compaction-row.d.ts +63 -0
- package/dist/elements/compaction-row.js +110 -0
- package/dist/elements/comparison-card.d.ts +47 -0
- package/dist/elements/comparison-card.js +69 -0
- package/dist/elements/composer.d.ts +274 -0
- package/dist/elements/composer.js +505 -0
- package/dist/elements/computer-use.d.ts +40 -0
- package/dist/elements/computer-use.js +92 -0
- package/dist/elements/confidence-marker.d.ts +39 -0
- package/dist/elements/confidence-marker.js +64 -0
- package/dist/elements/connection-state.d.ts +29 -0
- package/dist/elements/connection-state.js +66 -0
- package/dist/elements/context-breakdown.d.ts +30 -0
- package/dist/elements/context-breakdown.js +86 -0
- package/dist/elements/context-usage.d.ts +99 -0
- package/dist/elements/context-usage.js +225 -0
- package/dist/elements/conversation-search.d.ts +48 -0
- package/dist/elements/conversation-search.js +88 -0
- package/dist/elements/cost-meter.d.ts +33 -0
- package/dist/elements/cost-meter.js +75 -0
- package/dist/elements/data-table.d.ts +31 -0
- package/dist/elements/data-table.js +67 -0
- package/dist/elements/day-separator.d.ts +34 -0
- package/dist/elements/day-separator.js +50 -0
- package/dist/elements/diagram.d.ts +34 -0
- package/dist/elements/diagram.js +75 -0
- package/dist/elements/document-reference.d.ts +37 -0
- package/dist/elements/document-reference.js +66 -0
- package/dist/elements/draft-restore.d.ts +27 -0
- package/dist/elements/draft-restore.js +54 -0
- package/dist/elements/edit-message.d.ts +36 -0
- package/dist/elements/edit-message.js +77 -0
- package/dist/elements/elements.css +459 -0
- package/dist/elements/elicitation-form.d.ts +48 -0
- package/dist/elements/elicitation-form.js +106 -0
- package/dist/elements/empty-state.d.ts +52 -0
- package/dist/elements/empty-state.js +98 -0
- package/dist/elements/end-of-turn-summary.d.ts +60 -0
- package/dist/elements/end-of-turn-summary.js +75 -0
- package/dist/elements/error-state.d.ts +29 -0
- package/dist/elements/error-state.js +55 -0
- package/dist/elements/feedback-dialog.d.ts +36 -0
- package/dist/elements/feedback-dialog.js +81 -0
- package/dist/elements/file-tree.d.ts +45 -0
- package/dist/elements/file-tree.js +84 -0
- package/dist/elements/flow-graph.d.ts +45 -0
- package/dist/elements/flow-graph.js +78 -0
- package/dist/elements/generative/chart.js +200 -0
- package/dist/elements/generative/faults.js +111 -0
- package/dist/elements/generative/icons.d.ts +41 -0
- package/dist/elements/generative/icons.js +190 -0
- package/dist/elements/generative/intrinsics.js +483 -0
- package/dist/elements/generative/spec.d.ts +110 -0
- package/dist/elements/generative/spec.js +366 -0
- package/dist/elements/generative.css +1145 -0
- package/dist/elements/generative.d.ts +144 -0
- package/dist/elements/generative.js +126 -0
- package/dist/elements/guardrail-notice.d.ts +29 -0
- package/dist/elements/guardrail-notice.js +63 -0
- package/dist/elements/image-generation.d.ts +18 -0
- package/dist/elements/image-generation.js +64 -0
- package/dist/elements/index.d.ts +116 -0
- package/dist/elements/index.js +115 -0
- package/dist/elements/inline-citation.d.ts +43 -0
- package/dist/elements/inline-citation.js +93 -0
- package/dist/elements/job-progress.d.ts +49 -0
- package/dist/elements/job-progress.js +74 -0
- package/dist/elements/launcher-bubble.d.ts +34 -0
- package/dist/elements/launcher-bubble.js +72 -0
- package/dist/elements/live-region-announcer.d.ts +130 -0
- package/dist/elements/live-region-announcer.js +230 -0
- package/dist/elements/loading-state.d.ts +27 -0
- package/dist/elements/loading-state.js +36 -0
- package/dist/elements/map-answer.d.ts +38 -0
- package/dist/elements/map-answer.js +93 -0
- package/dist/elements/markdown.d.ts +131 -0
- package/dist/elements/markdown.js +528 -0
- package/dist/elements/math-block.d.ts +51 -0
- package/dist/elements/math-block.js +70 -0
- package/dist/elements/mcp-server-panel.d.ts +41 -0
- package/dist/elements/mcp-server-panel.js +115 -0
- package/dist/elements/memory-chips.d.ts +30 -0
- package/dist/elements/memory-chips.js +43 -0
- package/dist/elements/message-actions.d.ts +38 -0
- package/dist/elements/message-actions.js +71 -0
- package/dist/elements/message-attachment.d.ts +48 -0
- package/dist/elements/message-attachment.js +63 -0
- package/dist/elements/message-branches.d.ts +25 -0
- package/dist/elements/message-branches.js +65 -0
- package/dist/elements/message-pair.d.ts +33 -0
- package/dist/elements/message-pair.js +65 -0
- package/dist/elements/message-queue.d.ts +31 -0
- package/dist/elements/message-queue.js +80 -0
- package/dist/elements/message-timing.d.ts +33 -0
- package/dist/elements/message-timing.js +37 -0
- package/dist/elements/mobile-composer.d.ts +44 -0
- package/dist/elements/mobile-composer.js +88 -0
- package/dist/elements/model-picker.d.ts +38 -0
- package/dist/elements/model-picker.js +69 -0
- package/dist/elements/number-ticker.d.ts +18 -0
- package/dist/elements/number-ticker.js +47 -0
- package/dist/elements/onboarding.d.ts +30 -0
- package/dist/elements/onboarding.js +75 -0
- package/dist/elements/permission-grant.d.ts +35 -0
- package/dist/elements/permission-grant.js +86 -0
- package/dist/elements/permission-scopes.d.ts +215 -0
- package/dist/elements/permission-scopes.js +249 -0
- package/dist/elements/prompt-library.d.ts +43 -0
- package/dist/elements/prompt-library.js +117 -0
- package/dist/elements/queue-dock.d.ts +101 -0
- package/dist/elements/queue-dock.js +132 -0
- package/dist/elements/quota-banner.d.ts +26 -0
- package/dist/elements/quota-banner.js +66 -0
- package/dist/elements/quote-reply.d.ts +44 -0
- package/dist/elements/quote-reply.js +79 -0
- package/dist/elements/range.d.ts +29 -0
- package/dist/elements/range.js +45 -0
- package/dist/elements/read-aloud.d.ts +45 -0
- package/dist/elements/read-aloud.js +75 -0
- package/dist/elements/reasoning-effort.d.ts +36 -0
- package/dist/elements/reasoning-effort.js +67 -0
- package/dist/elements/reasoning-panel.d.ts +46 -0
- package/dist/elements/reasoning-panel.js +75 -0
- package/dist/elements/recommendation-card.d.ts +45 -0
- package/dist/elements/recommendation-card.js +83 -0
- package/dist/elements/regenerate-menu.d.ts +45 -0
- package/dist/elements/regenerate-menu.js +51 -0
- package/dist/elements/replay.d.ts +217 -0
- package/dist/elements/replay.js +498 -0
- package/dist/elements/research-report.d.ts +38 -0
- package/dist/elements/research-report.js +69 -0
- package/dist/elements/retrieval-chunks.d.ts +43 -0
- package/dist/elements/retrieval-chunks.js +81 -0
- package/dist/elements/revert-dock.d.ts +159 -0
- package/dist/elements/revert-dock.js +327 -0
- package/dist/elements/reviewable-diff.d.ts +45 -0
- package/dist/elements/reviewable-diff.js +110 -0
- package/dist/elements/risk-badge.d.ts +52 -0
- package/dist/elements/risk-badge.js +91 -0
- package/dist/elements/schedule-card.d.ts +42 -0
- package/dist/elements/schedule-card.js +90 -0
- package/dist/elements/score-breakdown.d.ts +47 -0
- package/dist/elements/score-breakdown.js +82 -0
- package/dist/elements/scroll-anchor.d.ts +32 -0
- package/dist/elements/scroll-anchor.js +121 -0
- package/dist/elements/settings-panel.d.ts +52 -0
- package/dist/elements/settings-panel.js +107 -0
- package/dist/elements/shared-conversation.d.ts +39 -0
- package/dist/elements/shared-conversation.js +68 -0
- package/dist/elements/sources.d.ts +33 -0
- package/dist/elements/sources.js +61 -0
- package/dist/elements/speaker-identity.d.ts +32 -0
- package/dist/elements/speaker-identity.js +51 -0
- package/dist/elements/spec-sheet.d.ts +31 -0
- package/dist/elements/spec-sheet.js +45 -0
- package/dist/elements/stopped-run.d.ts +22 -0
- package/dist/elements/stopped-run.js +50 -0
- package/dist/elements/streaming-text.d.ts +31 -0
- package/dist/elements/streaming-text.js +45 -0
- package/dist/elements/subagent-list.d.ts +37 -0
- package/dist/elements/subagent-list.js +79 -0
- package/dist/elements/suggestions.d.ts +30 -0
- package/dist/elements/suggestions.js +36 -0
- package/dist/elements/surfaces.d.ts +85 -0
- package/dist/elements/surfaces.js +107 -0
- package/dist/elements/tail-status.d.ts +131 -0
- package/dist/elements/tail-status.js +94 -0
- package/dist/elements/terminal-block.d.ts +29 -0
- package/dist/elements/terminal-block.js +54 -0
- package/dist/elements/thinking-indicator.d.ts +18 -0
- package/dist/elements/thinking-indicator.js +36 -0
- package/dist/elements/thread-list.d.ts +35 -0
- package/dist/elements/thread-list.js +68 -0
- package/dist/elements/thread-search.d.ts +42 -0
- package/dist/elements/thread-search.js +99 -0
- package/dist/elements/timeline.d.ts +37 -0
- package/dist/elements/timeline.js +46 -0
- package/dist/elements/todo-list.d.ts +42 -0
- package/dist/elements/todo-list.js +59 -0
- package/dist/elements/tool-call.d.ts +41 -0
- package/dist/elements/tool-call.js +85 -0
- package/dist/elements/tool-error.d.ts +39 -0
- package/dist/elements/tool-error.js +76 -0
- package/dist/elements/tool-group.d.ts +45 -0
- package/dist/elements/tool-group.js +71 -0
- package/dist/elements/tool-timeline.d.ts +65 -0
- package/dist/elements/tool-timeline.js +88 -0
- package/dist/elements/trace-waterfall.d.ts +37 -0
- package/dist/elements/trace-waterfall.js +69 -0
- package/dist/elements/transcript-rules.d.ts +67 -0
- package/dist/elements/transcript-rules.js +95 -0
- package/dist/elements/turn-footer.d.ts +74 -0
- package/dist/elements/turn-footer.js +101 -0
- package/dist/elements/typing-indicator.d.ts +16 -0
- package/dist/elements/typing-indicator.js +51 -0
- package/dist/elements/verdict-row.d.ts +89 -0
- package/dist/elements/verdict-row.js +150 -0
- package/dist/elements/vocabulary.d.ts +612 -0
- package/dist/elements/vocabulary.js +611 -0
- package/dist/elements/voice-conversation.d.ts +49 -0
- package/dist/elements/voice-conversation.js +123 -0
- package/dist/elements/web-preview.d.ts +32 -0
- package/dist/elements/web-preview.js +66 -0
- package/dist/elements/web-search.d.ts +37 -0
- package/dist/elements/web-search.js +66 -0
- package/dist/elements/work-collapse.d.ts +103 -0
- package/dist/elements/work-collapse.js +131 -0
- package/dist/icons/containers.d.ts +89 -0
- package/dist/icons/containers.js +295 -0
- package/dist/icons/index.d.ts +2 -0
- package/dist/index.d.ts +9 -7
- package/dist/index.js +3 -2
- package/dist/instruments/index.d.ts +2 -2
- package/dist/instruments/index.js +2 -2
- package/dist/instruments/table.d.ts +14 -1
- package/dist/instruments/table.js +20 -1
- package/dist/instruments/two-step-button.js +25 -6
- package/dist/layout/sidebar.d.ts +19 -1
- package/dist/layout/sidebar.js +19 -1
- package/dist/primitives/button.js +11 -1
- package/dist/primitives/chip.d.ts +34 -8
- package/dist/primitives/chip.js +97 -11
- package/dist/styles.css +11 -1
- package/dist/system/agent-skin.d.ts +27 -0
- package/dist/system/agent-skin.js +20 -0
- package/dist/system/index.d.ts +3 -3
- package/dist/system/portal.d.ts +5 -3
- package/dist/system/portal.js +36 -8
- package/dist/system/prepaint.d.ts +20 -2
- package/dist/system/prepaint.js +39 -33
- package/dist/system/theme-provider.d.ts +13 -2
- package/dist/system/theme-provider.js +107 -26
- package/dist/system/use-density.d.ts +9 -0
- package/dist/system/use-density.js +9 -0
- package/dist/system/use-isomorphic-layout-effect.js +19 -1
- package/dist/theming/_presets.d.ts +1 -1
- package/dist/theming/_presets.js +124 -8
- package/dist/theming/contrast.d.ts +16 -4
- package/dist/theming/contrast.js +33 -6
- package/dist/theming/create-theme.d.ts +8 -4
- package/dist/theming/create-theme.js +56 -20
- package/dist/theming/serialize.d.ts +11 -2
- package/dist/theming/serialize.js +87 -9
- package/manifest/components/accordion.json +154 -0
- package/manifest/components/activity-graph.json +88 -0
- package/manifest/components/agent-card.json +120 -0
- package/manifest/components/agent-handoff.json +87 -0
- package/manifest/components/agent-mode-badge.json +84 -0
- package/manifest/components/agent-pile.json +116 -0
- package/manifest/components/agent-plan.json +67 -0
- package/manifest/components/agent-status.json +73 -0
- package/manifest/components/agent-surface.json +78 -0
- package/manifest/components/alert-dialog.json +190 -0
- package/manifest/components/animated-number.json +67 -0
- package/manifest/components/app-bar.json +244 -0
- package/manifest/components/app-shell.json +383 -0
- package/manifest/components/app-window-frame.json +102 -0
- package/manifest/components/approval-card.json +106 -0
- package/manifest/components/artifact-card.json +81 -0
- package/manifest/components/ask-box.json +209 -0
- package/manifest/components/audience-icon.json +52 -0
- package/manifest/components/autocomplete.json +197 -0
- package/manifest/components/avatar-group.json +72 -0
- package/manifest/components/avatar.json +95 -0
- package/manifest/components/background-inbox.json +71 -0
- package/manifest/components/branch-picker.json +124 -0
- package/manifest/components/breadcrumb.json +74 -0
- package/manifest/components/button-group.json +74 -0
- package/manifest/components/button.json +126 -0
- package/manifest/components/calendar.json +65 -0
- package/manifest/components/canvas-split-body.json +62 -0
- package/manifest/components/canvas-split-document.json +54 -0
- package/manifest/components/canvas-split-header.json +83 -0
- package/manifest/components/canvas-split-line.json +62 -0
- package/manifest/components/canvas-split-message.json +62 -0
- package/manifest/components/canvas-split-thread.json +54 -0
- package/manifest/components/canvas-split.json +60 -0
- package/manifest/components/card.json +140 -0
- package/manifest/components/carousel.json +200 -0
- package/manifest/components/catalogue-icon.json +52 -0
- package/manifest/components/channel-beta-icon.json +52 -0
- package/manifest/components/channel-matrix.json +173 -0
- package/manifest/components/channel-released-icon.json +52 -0
- package/manifest/components/chart-container.json +111 -0
- package/manifest/components/chart-ramp.json +72 -0
- package/manifest/components/chart-swatch.json +65 -0
- package/manifest/components/chart-tooltip-content.json +114 -0
- package/manifest/components/chart.json +93 -0
- package/manifest/components/chat-empty-state.json +55 -0
- package/manifest/components/chat-panel-assistant-message.json +51 -0
- package/manifest/components/chat-panel-composer.json +66 -0
- package/manifest/components/chat-panel-messages.json +51 -0
- package/manifest/components/chat-panel-typing.json +51 -0
- package/manifest/components/chat-panel-user-message.json +51 -0
- package/manifest/components/chat-panel.json +57 -0
- package/manifest/components/checkbox-group.json +68 -0
- package/manifest/components/checkbox.json +93 -0
- package/manifest/components/checkpoint-history.json +80 -0
- package/manifest/components/chip.json +144 -0
- package/manifest/components/clamp.json +102 -0
- package/manifest/components/cli-tool-icon.json +52 -0
- package/manifest/components/code-diff.json +87 -0
- package/manifest/components/code-runner.json +97 -0
- package/manifest/components/collapsible.json +120 -0
- package/manifest/components/color-area.json +59 -0
- package/manifest/components/color-field.json +79 -0
- package/manifest/components/color-picker.json +175 -0
- package/manifest/components/color-slider.json +75 -0
- package/manifest/components/color-swatch.json +68 -0
- package/manifest/components/colors-section.json +66 -0
- package/manifest/components/combobox.json +198 -0
- package/manifest/components/command-palette.json +177 -0
- package/manifest/components/compaction-row.json +100 -0
- package/manifest/components/comparison-card.json +83 -0
- package/manifest/components/composer-actions.json +65 -0
- package/manifest/components/composer-attach-button.json +65 -0
- package/manifest/components/composer-attachment-chip.json +75 -0
- package/manifest/components/composer-attachments.json +60 -0
- package/manifest/components/composer-bar.json +73 -0
- package/manifest/components/composer-command-item.json +79 -0
- package/manifest/components/composer-context.json +67 -0
- package/manifest/components/composer-input.json +73 -0
- package/manifest/components/composer-menu-item.json +72 -0
- package/manifest/components/composer-menu.json +79 -0
- package/manifest/components/composer-model-item.json +75 -0
- package/manifest/components/composer-model-trigger.json +75 -0
- package/manifest/components/composer-person-item.json +79 -0
- package/manifest/components/composer-send.json +80 -0
- package/manifest/components/composer-toolbar.json +65 -0
- package/manifest/components/composer-voice-button.json +68 -0
- package/manifest/components/composer-voice.json +75 -0
- package/manifest/components/composer.json +176 -0
- package/manifest/components/computer-use.json +84 -0
- package/manifest/components/confidence-marker.json +74 -0
- package/manifest/components/connection-state.json +84 -0
- package/manifest/components/container.json +60 -0
- package/manifest/components/context-breakdown.json +65 -0
- package/manifest/components/context-menu.json +121 -0
- package/manifest/components/context-usage.json +85 -0
- package/manifest/components/conversation-search.json +92 -0
- package/manifest/components/copy-button.json +93 -0
- package/manifest/components/cost-meter.json +74 -0
- package/manifest/components/cue-logotype.json +96 -0
- package/manifest/components/cue-mark.json +97 -0
- package/manifest/components/cue-portal-frame.json +55 -0
- package/manifest/components/data-table-pagination.json +83 -0
- package/manifest/components/data-table-toolbar.json +104 -0
- package/manifest/components/date-field.json +80 -0
- package/manifest/components/date-picker.json +191 -0
- package/manifest/components/date-range-picker.json +191 -0
- package/manifest/components/day-separator.json +58 -0
- package/manifest/components/delegation-card.json +144 -0
- package/manifest/components/density.json +58 -0
- package/manifest/components/description-list.json +84 -0
- package/manifest/components/diagram.json +100 -0
- package/manifest/components/dialog.json +198 -0
- package/manifest/components/disclosure.json +109 -0
- package/manifest/components/dmx-bar.json +94 -0
- package/manifest/components/dmx-strip.json +101 -0
- package/manifest/components/document-reference.json +90 -0
- package/manifest/components/draft-restore.json +82 -0
- package/manifest/components/drawer.json +179 -0
- package/manifest/components/dropdown-menu.json +229 -0
- package/manifest/components/edit-message.json +105 -0
- package/manifest/components/elements-command-palette.json +100 -0
- package/manifest/components/elements-composer.json +71 -0
- package/manifest/components/elements-data-table.json +68 -0
- package/manifest/components/elements-timeline.json +69 -0
- package/manifest/components/elicitation-form.json +103 -0
- package/manifest/components/empty-state-composer.json +64 -0
- package/manifest/components/empty-state-greeting.json +49 -0
- package/manifest/components/empty-state-suggestion.json +57 -0
- package/manifest/components/empty-state-suggestions.json +49 -0
- package/manifest/components/empty-state.json +90 -0
- package/manifest/components/end-of-turn-summary.json +77 -0
- package/manifest/components/env-var-input.json +150 -0
- package/manifest/components/error-state.json +80 -0
- package/manifest/components/export-dialog.json +84 -0
- package/manifest/components/eyebrow.json +56 -0
- package/manifest/components/feedback-dialog.json +107 -0
- package/manifest/components/field-description.json +63 -0
- package/manifest/components/field-error.json +77 -0
- package/manifest/components/field-label.json +63 -0
- package/manifest/components/field.json +79 -0
- package/manifest/components/file-tree.json +83 -0
- package/manifest/components/file-upload.json +159 -0
- package/manifest/components/flow-background.json +50 -0
- package/manifest/components/flow-controls.json +50 -0
- package/manifest/components/flow-graph.json +75 -0
- package/manifest/components/folder-icon.json +52 -0
- package/manifest/components/footer.json +112 -0
- package/manifest/components/frac.json +59 -0
- package/manifest/components/generation-loader.json +64 -0
- package/manifest/components/generative-ui.json +93 -0
- package/manifest/components/grid.json +81 -0
- package/manifest/components/group-bar.json +102 -0
- package/manifest/components/guardrail-notice.json +91 -0
- package/manifest/components/hover-card.json +151 -0
- package/manifest/components/icon-button.json +88 -0
- package/manifest/components/image-generation.json +67 -0
- package/manifest/components/info-tip.json +98 -0
- package/manifest/components/inline-citation.json +77 -0
- package/manifest/components/input-group.json +91 -0
- package/manifest/components/input.json +89 -0
- package/manifest/components/item.json +129 -0
- package/manifest/components/job-progress.json +96 -0
- package/manifest/components/kbd.json +52 -0
- package/manifest/components/launcher-bubble.json +105 -0
- package/manifest/components/link.json +81 -0
- package/manifest/components/live-region-announcer.json +79 -0
- package/manifest/components/log-viewer.json +139 -0
- package/manifest/components/map-answer.json +83 -0
- package/manifest/components/markdown-text.json +94 -0
- package/manifest/components/math-block.json +74 -0
- package/manifest/components/mcp-server-icon.json +52 -0
- package/manifest/components/mcp-server-panel.json +87 -0
- package/manifest/components/memory-chips.json +65 -0
- package/manifest/components/menubar.json +157 -0
- package/manifest/components/message-actions.json +99 -0
- package/manifest/components/message-attachments.json +63 -0
- package/manifest/components/message-branches.json +71 -0
- package/manifest/components/message-list.json +100 -0
- package/manifest/components/message-pair.json +86 -0
- package/manifest/components/message-queue.json +74 -0
- package/manifest/components/message-timing.json +62 -0
- package/manifest/components/message.json +116 -0
- package/manifest/components/meter.json +114 -0
- package/manifest/components/mobile-composer.json +126 -0
- package/manifest/components/model-picker.json +76 -0
- package/manifest/components/multi-select.json +190 -0
- package/manifest/components/musical-time-input.json +113 -0
- package/manifest/components/navigation-menu.json +226 -0
- package/manifest/components/node-card.json +109 -0
- package/manifest/components/node-handle.json +69 -0
- package/manifest/components/number-field.json +107 -0
- package/manifest/components/number-ticker.json +61 -0
- package/manifest/components/onboarding.json +84 -0
- package/manifest/components/otp-field.json +128 -0
- package/manifest/components/page-shell.json +96 -0
- package/manifest/components/pagination.json +92 -0
- package/manifest/components/panel-header.json +77 -0
- package/manifest/components/panel.json +71 -0
- package/manifest/components/password-input.json +119 -0
- package/manifest/components/permission-grant.json +92 -0
- package/manifest/components/permission-scopes.json +139 -0
- package/manifest/components/piano-keyboard.json +120 -0
- package/manifest/components/plussie.json +111 -0
- package/manifest/components/popover.json +193 -0
- package/manifest/components/preset-section.json +73 -0
- package/manifest/components/progress.json +95 -0
- package/manifest/components/prompt-library.json +99 -0
- package/manifest/components/queue-dock.json +110 -0
- package/manifest/components/quota-banner.json +94 -0
- package/manifest/components/quote-reply.json +105 -0
- package/manifest/components/radio-group.json +73 -0
- package/manifest/components/radio.json +80 -0
- package/manifest/components/rating.json +141 -0
- package/manifest/components/read-aloud.json +111 -0
- package/manifest/components/reasoning-effort.json +81 -0
- package/manifest/components/reasoning-panel.json +108 -0
- package/manifest/components/recommendation-card.json +107 -0
- package/manifest/components/regenerate-menu.json +89 -0
- package/manifest/components/replay-player.json +102 -0
- package/manifest/components/research-report.json +76 -0
- package/manifest/components/resizable.json +88 -0
- package/manifest/components/retrieval-chunks.json +84 -0
- package/manifest/components/revert-dock.json +150 -0
- package/manifest/components/reviewable-diff.json +93 -0
- package/manifest/components/risk-badge.json +74 -0
- package/manifest/components/row.json +109 -0
- package/manifest/components/schedule-card.json +101 -0
- package/manifest/components/score-breakdown.json +91 -0
- package/manifest/components/scroll-anchor.json +72 -0
- package/manifest/components/scroll-area.json +91 -0
- package/manifest/components/scrollable-tabs-list.json +83 -0
- package/manifest/components/scrub-input.json +200 -0
- package/manifest/components/seam-cell.json +75 -0
- package/manifest/components/seam-grid.json +75 -0
- package/manifest/components/seam-list.json +56 -0
- package/manifest/components/search-input.json +134 -0
- package/manifest/components/section-header.json +112 -0
- package/manifest/components/segmented-control.json +138 -0
- package/manifest/components/select.json +194 -0
- package/manifest/components/separator.json +53 -0
- package/manifest/components/settings-panel.json +118 -0
- package/manifest/components/shape-section.json +66 -0
- package/manifest/components/shared-conversation.json +89 -0
- package/manifest/components/sheet.json +186 -0
- package/manifest/components/shimmer-label.json +59 -0
- package/manifest/components/sidebar.json +198 -0
- package/manifest/components/signal-edge.json +56 -0
- package/manifest/components/skeleton.json +46 -0
- package/manifest/components/skill-icon.json +52 -0
- package/manifest/components/slider.json +89 -0
- package/manifest/components/sources.json +83 -0
- package/manifest/components/sparkline.json +76 -0
- package/manifest/components/speaker-identity.json +61 -0
- package/manifest/components/spec-sheet.json +80 -0
- package/manifest/components/spectrum-visualizer.json +115 -0
- package/manifest/components/spinner.json +61 -0
- package/manifest/components/stack-icon.json +52 -0
- package/manifest/components/stack.json +96 -0
- package/manifest/components/stacks-matrix-icon.json +52 -0
- package/manifest/components/stat.json +87 -0
- package/manifest/components/status-bar.json +58 -0
- package/manifest/components/status-dot.json +78 -0
- package/manifest/components/stepper.json +89 -0
- package/manifest/components/stopped-run.json +81 -0
- package/manifest/components/streaming-text.json +71 -0
- package/manifest/components/sub.json +44 -0
- package/manifest/components/subagent-list.json +88 -0
- package/manifest/components/suggestions.json +84 -0
- package/manifest/components/sup.json +44 -0
- package/manifest/components/swap-label.json +71 -0
- package/manifest/components/switch.json +87 -0
- package/manifest/components/table-scroll-region.json +69 -0
- package/manifest/components/table.json +155 -0
- package/manifest/components/tabs.json +145 -0
- package/manifest/components/tags-input.json +190 -0
- package/manifest/components/tail-status.json +109 -0
- package/manifest/components/terminal-block.json +91 -0
- package/manifest/components/terminal-frame.json +119 -0
- package/manifest/components/textarea.json +76 -0
- package/manifest/components/theme-configurator.json +124 -0
- package/manifest/components/theme-provider.json +134 -0
- package/manifest/components/thinking-indicator.json +63 -0
- package/manifest/components/thread-list.json +76 -0
- package/manifest/components/thread-search.json +90 -0
- package/manifest/components/threshold-rail.json +160 -0
- package/manifest/components/time-boundary.json +62 -0
- package/manifest/components/time-field.json +80 -0
- package/manifest/components/timeline-ruler.json +139 -0
- package/manifest/components/timeline.json +115 -0
- package/manifest/components/title-bar.json +82 -0
- package/manifest/components/toast.json +130 -0
- package/manifest/components/todo-list.json +69 -0
- package/manifest/components/toggle-group.json +106 -0
- package/manifest/components/toggle.json +109 -0
- package/manifest/components/token-editor.json +90 -0
- package/manifest/components/tool-call-card.json +200 -0
- package/manifest/components/tool-call.json +119 -0
- package/manifest/components/tool-error.json +114 -0
- package/manifest/components/tool-group.json +83 -0
- package/manifest/components/tool-timeline.json +119 -0
- package/manifest/components/toolbar.json +163 -0
- package/manifest/components/tooltip.json +164 -0
- package/manifest/components/trace-waterfall.json +74 -0
- package/manifest/components/tree-visibility-toggle.json +84 -0
- package/manifest/components/tree.json +140 -0
- package/manifest/components/turn-footer.json +105 -0
- package/manifest/components/two-step-button.json +113 -0
- package/manifest/components/typing-indicator.json +53 -0
- package/manifest/components/universe-grid.json +127 -0
- package/manifest/components/unread-divider.json +55 -0
- package/manifest/components/usage-chart.json +124 -0
- package/manifest/components/verdict-row.json +91 -0
- package/manifest/components/voice-conversation.json +109 -0
- package/manifest/components/web-preview.json +87 -0
- package/manifest/components/web-search.json +92 -0
- package/manifest/components/work-collapse.json +102 -0
- package/manifest/manifest.json +4779 -0
- package/manifest/tokens.json +159 -0
- package/package.json +54 -5
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "PermissionGrant",
|
|
3
|
+
"slug": "permission-grant",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "Granting a capability rather than approving one action, with the reach spelled out.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "capability",
|
|
14
|
+
"type": "string",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "What is being granted, named as a capability rather than an action."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "requester",
|
|
21
|
+
"type": "string",
|
|
22
|
+
"required": true,
|
|
23
|
+
"defaultValue": null,
|
|
24
|
+
"description": "Who is asking."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "reach",
|
|
28
|
+
"type": "readonly string[]",
|
|
29
|
+
"required": true,
|
|
30
|
+
"defaultValue": null,
|
|
31
|
+
"description": "Exactly what the grant covers, and what it does not. Write the limits in too."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "scope",
|
|
35
|
+
"type": "\"pending\" | \"always\" | \"denied\" | \"session\"",
|
|
36
|
+
"required": true,
|
|
37
|
+
"defaultValue": null,
|
|
38
|
+
"description": "pending shows the choices; anything else shows the settled outcome."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "onGrant",
|
|
42
|
+
"type": "((scope: GrantScope) => void)",
|
|
43
|
+
"required": false,
|
|
44
|
+
"defaultValue": null,
|
|
45
|
+
"description": "Called with the scope the user chose."
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"typeReferences": [
|
|
49
|
+
"Omit<\n ComponentProps<\"div\">,\n \"children\" | \"capability\" | \"requester\" | \"reach\" | \"scope\" | \"onGrant\"\n> & {\n /** What is being granted, named as a capability rather than an action. */\n capability: string;\n /** Who is asking. */\n requester: string;\n /** Exactly what the grant covers, and what it does not. Write the limits in too. */\n reach: readonly string[];\n /** pending shows the choices; anything else shows the settled outcome. */\n scope: GrantScope | \"pending\";\n /** Called with the scope the user chose. */\n onGrant?: (scope: GrantScope) => void;\n}"
|
|
50
|
+
],
|
|
51
|
+
"subcomponents": [],
|
|
52
|
+
"parts": [],
|
|
53
|
+
"variants": {},
|
|
54
|
+
"defaultVariants": {},
|
|
55
|
+
"tokensUsed": [
|
|
56
|
+
"--cue-fg",
|
|
57
|
+
"--cue-fg-muted",
|
|
58
|
+
"--cue-fg-subtle",
|
|
59
|
+
"--cue-radius-overlay",
|
|
60
|
+
"--cue-radius-surface",
|
|
61
|
+
"--cue-surface-1",
|
|
62
|
+
"--cue-surface-2",
|
|
63
|
+
"--cue-surface-3",
|
|
64
|
+
"--cue-text-body",
|
|
65
|
+
"--cue-text-ui"
|
|
66
|
+
],
|
|
67
|
+
"summary": "Granting a capability rather than approving one action, with the reach spelled out.",
|
|
68
|
+
"examples": [
|
|
69
|
+
{
|
|
70
|
+
"title": "Usage",
|
|
71
|
+
"code": "import { PermissionGrant } from \"@cueplusplus/ui/elements\";\n\n<PermissionGrant\n capability=\"Filesystem access\"\n requester=\"filesystem-mcp\"\n reach={reach}\n scope=\"pending\"\n onGrant={setScope}\n/>",
|
|
72
|
+
"language": "tsx"
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"status": "todo-docs",
|
|
76
|
+
"url": "/docs/components/permission-grant",
|
|
77
|
+
"mdUrl": "/docs/components/permission-grant.md",
|
|
78
|
+
"jsonUrl": "/r/components/permission-grant.json",
|
|
79
|
+
"specimens": [
|
|
80
|
+
{
|
|
81
|
+
"title": "PermissionGrant",
|
|
82
|
+
"group": "elements",
|
|
83
|
+
"components": [
|
|
84
|
+
"PermissionGrant"
|
|
85
|
+
],
|
|
86
|
+
"code": "<Specimens>\n {SCOPES.map((scope) => (\n <Specimen key={scope} label={scope} wide>\n <PermissionGrant\n capability=\"Write show files\"\n requester=\"Patcher\"\n reach={REACH}\n scope={grants[scope] ?? scope}\n onGrant={grant(scope)}\n />\n </Specimen>\n ))}\n</Specimens>",
|
|
87
|
+
"note": "The other half of the loop: granting a capability rather than approving one action. The reach is a list the caller writes, and the limits belong in it, because a grant a reader cannot bound is a grant they cannot give.",
|
|
88
|
+
"interaction": "the three answers are Deny, this session and Always. Answer any card and it settles into the scope you chose."
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"todo": true
|
|
92
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "PermissionScopes",
|
|
3
|
+
"slug": "permission-scopes",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "Approval that says how far it reaches and where that is written down.\n\nEvery product in the study offers a scope at the moment of approval, and\nevery one of them labels it the same static way — `Always allow` — which is\nthe least informative string in an agent UI: it is the only control on the\nscreen whose consequences outlive the conversation, and it says nothing about\nwhat it grants or where the grant goes. So this one writes its own label.\n`Yes, allow Bash(git commit:*) for this project (just you)` names the rule\nand the reach; the line under it names the file, in a sentence, permanently\nvisible.\n\nNothing is shortened. Claude Code elides a long rule and strips the `:*` off\na prefix rule, and both cuts land on the part that says how much is being\ngranted, so the label here wraps instead. When there are more rules than the\nsentence can name, every one of them is listed under the answer — `and 3\nmore` is a count, and a count is not an account.\n\nThe three answers are numbered, and the numbers are real **while focus is\ninside the card**: `1`, `2` and `3` fire whichever answers are rendered,\nbuilt from the same list that draws them, so a card with no always-allow has\n`2` on its deny, and `Escape` denies. The handler is the card's own\n`onKeyDown` and nothing is ever bound to the document, so the keys answer for\na reader who has tabbed to an answer or been handed the card, and for nobody\nelse.\n\nThat is narrower than the reference, and the narrowing is the point. Claude\nCode disables its buttons for 500ms after mount and *then* takes focus, so\nits digits answer from anywhere; this card never claims focus at all, because\na card that arrives mid-sentence and starts answering keystrokes is the bug\nthat delay exists to prevent — and a row in a library cannot know whether the\nreader is halfway through typing `1` into a composer above it. A product that\nwants the digits to answer from anywhere has the information to decide that\nsafely and this element does not: it routes its own key handler to the same\nthree callbacks, or hands the card focus itself with a `ref` and a `tabIndex`\nof its own.\n\nThere is no settled state. An answered permission is not a card any more; the\nrow that survives is the tool call's own, with its status changed. Every\nproduct that modelled approval as an overlay ended up with the bug where the\nnext message hides the answer.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "question",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"required": true,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "The question, in the words of the thing being asked for: `Run this\ncommand?`, `Edit this file?`. One step up in size, as the reference sets\nit: it is the only sentence on the card that has to be read."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "subject",
|
|
19
|
+
"type": "string",
|
|
20
|
+
"required": false,
|
|
21
|
+
"defaultValue": null,
|
|
22
|
+
"description": "The file, host or command the question is about, set in mono beside it.\nOmit for a question that names its own subject."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "input",
|
|
26
|
+
"type": "string",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": null,
|
|
29
|
+
"description": "The exact input the call would run with, drawn in a recessed mono box —\nthe command, the patch, the URL. Shown verbatim and never parsed."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "rules",
|
|
33
|
+
"type": "readonly string[]",
|
|
34
|
+
"required": false,
|
|
35
|
+
"defaultValue": "[]",
|
|
36
|
+
"description": "The rules a standing grant would write, exactly as they will be written.\nThe always-allow answer's label is built from these; when there are more\nthan the label can name, all of them are listed under it."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "ruleKind",
|
|
40
|
+
"type": "\"directory\" | \"rule\"",
|
|
41
|
+
"required": false,
|
|
42
|
+
"defaultValue": "rule",
|
|
43
|
+
"description": "Whether `rules` are rules or directories, which changes the phrasing."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "scopes",
|
|
47
|
+
"type": "readonly PermissionScope[]",
|
|
48
|
+
"required": false,
|
|
49
|
+
"defaultValue": "[]",
|
|
50
|
+
"description": "Where a standing grant can be written, in the order they are offered.\n**No scopes means no always-allow answer**: a permanent grant that cannot\nsay where it is saved is not one this element will offer."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "scope",
|
|
54
|
+
"type": "string",
|
|
55
|
+
"required": false,
|
|
56
|
+
"defaultValue": null,
|
|
57
|
+
"description": "Which scope is chosen, by `id`. Defaults to the first. Claude Code\npersists this choice across prompts and so should a console — which is why\nit is a prop here rather than state: this element never remembers anything."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "onScopeChange",
|
|
61
|
+
"type": "((id: string) => void)",
|
|
62
|
+
"required": false,
|
|
63
|
+
"defaultValue": null,
|
|
64
|
+
"description": "Called with the next scope's `id` when the destination is cycled."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "onAllowOnce",
|
|
68
|
+
"type": "(() => void)",
|
|
69
|
+
"required": false,
|
|
70
|
+
"defaultValue": null,
|
|
71
|
+
"description": "Yes, once. The answer exists only when this is given."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "onAlwaysAllow",
|
|
75
|
+
"type": "((scope: string) => void)",
|
|
76
|
+
"required": false,
|
|
77
|
+
"defaultValue": null,
|
|
78
|
+
"description": "Yes, and write the rules to the chosen scope — reported by `id`. The\nanswer exists only when this **and** at least one scope are given."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "onDeny",
|
|
82
|
+
"type": "(() => void)",
|
|
83
|
+
"required": false,
|
|
84
|
+
"defaultValue": null,
|
|
85
|
+
"description": "No. Also what `Escape` does, while focus is inside the card. The answer\nexists only when this is given."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "labels",
|
|
89
|
+
"type": "Partial<PermissionLabels>",
|
|
90
|
+
"required": false,
|
|
91
|
+
"defaultValue": null,
|
|
92
|
+
"description": "The card's own six strings, merged over `PERMISSION_LABELS`."
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"typeReferences": [
|
|
96
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\" | \"onSelect\">"
|
|
97
|
+
],
|
|
98
|
+
"subcomponents": [],
|
|
99
|
+
"parts": [],
|
|
100
|
+
"variants": {},
|
|
101
|
+
"defaultVariants": {},
|
|
102
|
+
"tokensUsed": [
|
|
103
|
+
"--cue-accent",
|
|
104
|
+
"--cue-fg",
|
|
105
|
+
"--cue-fg-muted",
|
|
106
|
+
"--cue-fg-subtle",
|
|
107
|
+
"--cue-radius-control",
|
|
108
|
+
"--cue-radius-overlay",
|
|
109
|
+
"--cue-surface-2",
|
|
110
|
+
"--cue-surface-3",
|
|
111
|
+
"--cue-text-body",
|
|
112
|
+
"--cue-text-ui"
|
|
113
|
+
],
|
|
114
|
+
"summary": "Approval that says how far it reaches and where that is written down.",
|
|
115
|
+
"examples": [
|
|
116
|
+
{
|
|
117
|
+
"title": "Usage",
|
|
118
|
+
"code": "import { PermissionScopes, PERMISSION_SCOPE_LABELS } from \"@cueplusplus/ui/elements\";\n\n<PermissionScopes\n question=\"Run this command?\"\n subject=\"cue-cli\"\n input='cue patch --universe 3 --fixtures 6'\n rules={[\"Bash(cue patch:*)\"]}\n scopes={[\n { id: \"session\", label: PERMISSION_SCOPE_LABELS.session, writes: \"Not saved. Gone when this run ends.\" },\n { id: \"project\", label: PERMISSION_SCOPE_LABELS.project, writes: \"Saves to .cue/settings.local.json (gitignored)\" },\n ]}\n scope={scope}\n onScopeChange={setScope}\n onAllowOnce={() => allow()}\n onAlwaysAllow={(id) => remember(id)}\n onDeny={() => deny()}\n/>\n// No scopes: the card asks, and the only answers are once and no.\n<PermissionScopes question=\"Delete this file?\" subject=\"cues/old.cue\" onAllowOnce={allow} onDeny={deny} />",
|
|
119
|
+
"language": "tsx"
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"status": "todo-docs",
|
|
123
|
+
"url": "/docs/components/permission-scopes",
|
|
124
|
+
"mdUrl": "/docs/components/permission-scopes.md",
|
|
125
|
+
"jsonUrl": "/r/components/permission-scopes.json",
|
|
126
|
+
"specimens": [
|
|
127
|
+
{
|
|
128
|
+
"title": "PermissionScopes",
|
|
129
|
+
"group": "elements",
|
|
130
|
+
"components": [
|
|
131
|
+
"PermissionScopes"
|
|
132
|
+
],
|
|
133
|
+
"code": "<Specimens>\n <Specimen label={answered === null ? \"asking\" : `answered: ${answered}`} wide>\n <div className=\"flex w-full max-w-md flex-col gap-(--cue-space-2)\">\n <PermissionScopes\n question=\"Run this command?\"\n subject=\"cue-cli\"\n input=\"cue patch --universe 3 --fixtures 6 --start 1\"\n rules={[\"Bash(cue patch:*)\"]}\n scopes={SAVES_TO}\n scope={saveTo}\n onScopeChange={setSaveTo}\n onAllowOnce={() => setAnswered(\"once\")}\n onAlwaysAllow={(id) => setAnswered(`always · ${id}`)}\n onDeny={() => setAnswered(\"denied\")}\n />\n <p className=\"text-(length:--cue-text-label) text-fg-subtle\">\n last answer: {answered ?? \"none yet\"}\n </p>\n </div>\n </Specimen>\n <Specimen label=\"one destination, so no choice to make\" wide>\n <div className=\"w-full max-w-md\">\n <PermissionScopes\n question=\"Write this file?\"\n subject=\"shows/rig.cue\"\n rules={[\"Write(shows/**)\"]}\n scopes={[SAVES_TO[0] as PermissionScope]}\n onAllowOnce={() => {}}\n onAlwaysAllow={() => {}}\n onDeny={() => {}}\n />\n </div>\n </Specimen>\n <Specimen label=\"four rules, and all four named\" wide>\n <div className=\"w-full max-w-md\">\n <PermissionScopes\n question=\"Read these paths?\"\n rules={[\"Read(plots/**)\", \"Read(shows/**)\", \"Read(cues/**)\", \"Read(docs/**)\"]}\n scopes={SAVES_TO}\n scope=\"everywhere\"\n onAlwaysAllow={() => {}}\n onDeny={() => {}}\n />\n </div>\n </Specimen>\n <Specimen label=\"one directory, and nowhere to break the line\" wide>\n <div className=\"w-full max-w-md\">\n <PermissionScopes\n question=\"Allow access to this directory?\"\n rules={[\n \"/Users/kit/rig/shows/2026_midsummer_transfer_technical_rehearsal_moving_heads\",\n ]}\n ruleKind=\"directory\"\n scopes={SAVES_TO}\n scope=\"project\"\n onAlwaysAllow={() => {}}\n onDeny={() => {}}\n />\n </div>\n </Specimen>\n <Specimen label=\"the destination is the long word this time\" wide>\n <div className=\"flex w-full max-w-md flex-col gap-(--cue-space-2)\">\n <PermissionScopes\n question=\"Write this file?\"\n subject=\"shows/2026_midsummer_transfer_technical_rehearsal_moving_heads.cue\"\n rules={[\"Write(shows/**)\"]}\n scopes={SAVES_TO_A_LONG_WAY}\n scope={savedFar}\n onScopeChange={setSavedFar}\n onAlwaysAllow={() => {}}\n onDeny={() => {}}\n />\n <PermissionScopes\n question=\"Write this file?\"\n subject=\"shows/2026_midsummer_transfer_technical_rehearsal_moving_heads.cue\"\n rules={[\"Write(shows/**)\"]}\n scopes={[SAVES_TO_A_LONG_WAY[1] as PermissionScope]}\n onAlwaysAllow={() => {}}\n onDeny={() => {}}\n />\n </div>\n </Specimen>\n</Specimens>",
|
|
134
|
+
"note": "The one control in an agent UI whose label has to be computed, because what it grants is different every time it appears. `Yes, allow Bash(cue patch:*) for this project (just you)` is written from the rules it would add and the reach it would add them to, and the sentence under it names the file — permanently, not on hover. Nothing is shortened: the reference elides a long rule and strips the `:*` off a prefix rule, and both cuts land on the part that says how far the grant reaches, so this one wraps instead. When there are more rules than the sentence can name, every one of them is listed underneath, because `and 3 more` is a count and a count is not an account. The last card is what that costs: one directory of seventy-seven characters that a line breaker reads as a single word — it would take a hyphen if the name had one, and an underscored path has none — so the sentence breaks mid-path rather than running out of the card. It is also the card where the sentence is the whole account, since a grant naming one directory draws no rule list under it. The card after it moves the long word to the other two caller strings that can carry one — the subject beside the question, and the destination naming the file the grant is written into — and draws the destination both ways: the top card cycles it, so it is a button sized to its own text, and the bottom card has one destination and draws a span. Cycle the top one onto the project and the sentence breaks mid-path instead of leaving the card, which is the whole point of drawing where a permission is saved rather than hiding it behind a hover.",
|
|
135
|
+
"interaction": "tab into the card and the numbers work — 1, 2, 3 fire whichever answers are rendered, built from the same list that drew them, and Escape denies. They are the card's own keys, not the document's: nothing here answers a digit typed into a composer somewhere above it, and a console that wants them to answer from anywhere routes them there itself. Press the dotted line to move the grant to another destination and watch the answer above it change with it: there is one resolved scope behind the label, the sentence and the callback, so they cannot disagree about what is being granted."
|
|
136
|
+
}
|
|
137
|
+
],
|
|
138
|
+
"todo": true
|
|
139
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "PianoKeyboard",
|
|
3
|
+
"slug": "piano-keyboard",
|
|
4
|
+
"group": "midi",
|
|
5
|
+
"importPath": "@cueplusplus/ui/midi",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "A piano keyboard as a range control: drag the markers, or arrow the edges.\n\nPorted from ableton-sync's note-range picker, geometry intact — 16px whites,\n10px blacks over the seams — and rebuilt around three things the original did\nnot have:\n\n1. **The edges are sliders.** The port moved its markers with `mousedown` and\n a window listener, which means no keyboard, no screen reader and no touch.\n Here each marker is a `role=\"slider\"` announcing its note by name, so\n \"set the low end to C2\" is reachable without a pointer.\n2. **The board holds still while you drag.** The window is centred on the\n selection, so moving an edge moves the window, which moves the note under\n the cursor — the port's markers slid away from the pointer mid-drag. The\n window is frozen for the length of a gesture instead.\n3. **It is drawn in console materials, not in white and black.** A photo of a\n piano inverts in a light theme; a `surface-3` white key and a\n `--cue-data-ground` black key read the same in both. The information — what\n is in range, what is sounding — is carried by the accent, which is the only\n thing here that a theme is allowed to move.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "range",
|
|
12
|
+
"type": "NoteRange",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "The selected range. Use with `onRangeChange` for a controlled widget."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "defaultRange",
|
|
19
|
+
"type": "NoteRange",
|
|
20
|
+
"required": false,
|
|
21
|
+
"defaultValue": "{ start: 48, end: 72 }",
|
|
22
|
+
"description": "Initial range for an uncontrolled widget. Defaults to C2–C4."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "onRangeChange",
|
|
26
|
+
"type": "((range: NoteRange) => void)",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": null,
|
|
29
|
+
"description": "Called with the range each edit produces."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "octaves",
|
|
33
|
+
"type": "number",
|
|
34
|
+
"required": false,
|
|
35
|
+
"defaultValue": "3",
|
|
36
|
+
"description": "How many octaves to draw. Defaults to `3`."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "highlight",
|
|
40
|
+
"type": "readonly number[]",
|
|
41
|
+
"required": false,
|
|
42
|
+
"defaultValue": null,
|
|
43
|
+
"description": "Notes sounding right now, painted solid."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "keyHeight",
|
|
47
|
+
"type": "number",
|
|
48
|
+
"required": false,
|
|
49
|
+
"defaultValue": "48",
|
|
50
|
+
"description": "White-key height in px at the 16px root, emitted as `rem`. Defaults to `48`."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "label",
|
|
54
|
+
"type": "string",
|
|
55
|
+
"required": false,
|
|
56
|
+
"defaultValue": "Note range",
|
|
57
|
+
"description": "What the range is *of*. Names the group and both markers. Defaults to `\"Note range\"`."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "readout",
|
|
61
|
+
"type": "boolean",
|
|
62
|
+
"required": false,
|
|
63
|
+
"defaultValue": "true",
|
|
64
|
+
"description": "Print the range and its size under the board. Defaults to `true`."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "disabled",
|
|
68
|
+
"type": "boolean",
|
|
69
|
+
"required": false,
|
|
70
|
+
"defaultValue": "false",
|
|
71
|
+
"description": "Refuse every edit. The board still draws."
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"typeReferences": [
|
|
75
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\" | \"onChange\">"
|
|
76
|
+
],
|
|
77
|
+
"subcomponents": [],
|
|
78
|
+
"parts": [],
|
|
79
|
+
"variants": {},
|
|
80
|
+
"defaultVariants": {},
|
|
81
|
+
"tokensUsed": [
|
|
82
|
+
"--cue-accent",
|
|
83
|
+
"--cue-accent-soft",
|
|
84
|
+
"--cue-border",
|
|
85
|
+
"--cue-border-strong",
|
|
86
|
+
"--cue-data-ground",
|
|
87
|
+
"--cue-fg-subtle",
|
|
88
|
+
"--cue-font-mono",
|
|
89
|
+
"--cue-radius-control",
|
|
90
|
+
"--cue-space-1",
|
|
91
|
+
"--cue-sunken",
|
|
92
|
+
"--cue-surface-3",
|
|
93
|
+
"--cue-text-micro"
|
|
94
|
+
],
|
|
95
|
+
"summary": "A piano keyboard as a range control: drag the markers, or arrow the edges.",
|
|
96
|
+
"examples": [
|
|
97
|
+
{
|
|
98
|
+
"title": "Usage",
|
|
99
|
+
"code": "<PianoKeyboard range={range} onRangeChange={setRange} highlight={sounding} />",
|
|
100
|
+
"language": "tsx"
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"status": "todo-docs",
|
|
104
|
+
"url": "/docs/components/piano-keyboard",
|
|
105
|
+
"mdUrl": "/docs/components/piano-keyboard.md",
|
|
106
|
+
"jsonUrl": "/r/components/piano-keyboard.json",
|
|
107
|
+
"specimens": [
|
|
108
|
+
{
|
|
109
|
+
"title": "PianoKeyboard",
|
|
110
|
+
"group": "midi",
|
|
111
|
+
"components": [
|
|
112
|
+
"PianoKeyboard"
|
|
113
|
+
],
|
|
114
|
+
"code": "<div className=\"flex w-full flex-col gap-(--cue-space-4)\">\n <PianoKeyboard\n range={range}\n onRangeChange={setRange}\n octaves={4}\n label=\"Trigger range\"\n />\n <span className=\"font-mono text-(length:--cue-text-micro) text-fg-subtle\">\n {noteName(range.start)} to {noteName(range.end)}\n </span>\n <PianoKeyboard\n octaves={2}\n highlight={[60, 64, 67]}\n keyHeight={56}\n readout={false}\n label=\"Chord highlight\"\n />\n <PianoKeyboard octaves={2} disabled label=\"Keyboard, disabled\" />\n</div>",
|
|
115
|
+
"note": "Exact key geometry from the shared layout module, in-range tinting, and draggable start and end markers.",
|
|
116
|
+
"interaction": "each marker is a `role=slider` that announces the note it sits on, so the drag is a fast path rather than the only path."
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"todo": true
|
|
120
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Plussie",
|
|
3
|
+
"slug": "plussie",
|
|
4
|
+
"group": "brand",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": false,
|
|
8
|
+
"description": "Plussie, the CUE++ character — the mark, with its eyes free to move.\n\nThe same circle and the same two \"+\" glyphs {@link CueMark } draws, out of the\nsame geometry module, because they are the same drawing: the mark's glyphs\n*are* the character's eyes. What this adds is that the eyes are their own\ngroups, so an `expression` can slide or shut them.\n\nStatic-first. The eight Remotion animations this character was rigged for\nstay in the site that renders video; a heavy, video-oriented peer has no\nbusiness in a component library, so what is ported here is the geometry and\nthe poses. Everything else a caller wants — a look that follows the cursor, a\nblink on a timer of their own — is a `expression` prop away, driven by their\nown runtime.\n\nStatic markup — no `\"use client\"`.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "expression",
|
|
12
|
+
"type": "\"default\" | \"blink\" | \"wink\" | \"look-left\" | \"look-right\" | \"look-up\" | \"look-down\"",
|
|
13
|
+
"required": false,
|
|
14
|
+
"defaultValue": "default",
|
|
15
|
+
"description": "Which pose to hold. Defaults to `\"default\"`, eyes open and level.\n\nEvery pose is a still from the character's own animations rather than a\nnew drawing, so a screen that holds one and a video that plays through it\nagree."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "idle",
|
|
19
|
+
"type": "boolean",
|
|
20
|
+
"required": false,
|
|
21
|
+
"defaultValue": "false",
|
|
22
|
+
"description": "Blink every few seconds, on a CSS keyframe. Defaults to `false`.\n\nOff by default because a mark that moves in the corner of the eye is a\ndistraction on a console screen, and off again for a reader who has asked\nfor reduced motion — the rule that drives it is inside a\n`prefers-reduced-motion` guard, so there is no state to keep and nothing to\nturn off a second time.\n\nIt composes with `expression`: a winking Plussie blinks its open eye."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "size",
|
|
26
|
+
"type": "number | BrandSize",
|
|
27
|
+
"required": false,
|
|
28
|
+
"defaultValue": "md",
|
|
29
|
+
"description": "Rung of the density control ladder to draw at, or an explicit height in px.\nDefaults to `\"md\"`.\n\nHeight, always — every asset here keeps its own aspect ratio, so the width\nfollows from the artwork rather than from the caller."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "tone",
|
|
33
|
+
"type": "\"inherit\" | \"fg\" | \"accent\"",
|
|
34
|
+
"required": false,
|
|
35
|
+
"defaultValue": "inherit",
|
|
36
|
+
"description": "Where the ink comes from: `currentColor`, the foreground token, or the\naccent. Defaults to `\"inherit\"`."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "title",
|
|
40
|
+
"type": "string",
|
|
41
|
+
"required": false,
|
|
42
|
+
"defaultValue": null,
|
|
43
|
+
"description": "The accessible name.\n\nOmit it and the asset is decorative — `aria-hidden`, announced by nothing.\nPass one only when the mark is the *only* thing naming what it sits on: a\nbare logo link, a splash screen with no heading."
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"typeReferences": [
|
|
47
|
+
"BrandAssetProps"
|
|
48
|
+
],
|
|
49
|
+
"subcomponents": [],
|
|
50
|
+
"parts": [],
|
|
51
|
+
"variants": {},
|
|
52
|
+
"defaultVariants": {},
|
|
53
|
+
"tokensUsed": [
|
|
54
|
+
"--cue-accent",
|
|
55
|
+
"--cue-accent-fg",
|
|
56
|
+
"--cue-bg",
|
|
57
|
+
"--cue-control-lg",
|
|
58
|
+
"--cue-control-md",
|
|
59
|
+
"--cue-control-sm",
|
|
60
|
+
"--cue-fg"
|
|
61
|
+
],
|
|
62
|
+
"summary": "Plussie, the CUE++ character: the mark with its eyes free to move.",
|
|
63
|
+
"examples": [
|
|
64
|
+
{
|
|
65
|
+
"title": "An empty state",
|
|
66
|
+
"code": "import { Plussie } from \"@cueplusplus/ui\";\n\n<div className=\"flex flex-col items-center gap-(--cue-space-4)\">\n <Plussie size={96} expression=\"look-down\" />\n <p>No cues yet.</p>\n</div>;",
|
|
67
|
+
"language": "tsx"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"title": "With the optional idle blink",
|
|
71
|
+
"code": "<Plussie size={96} idle title=\"Plussie\" />;",
|
|
72
|
+
"language": "tsx"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"title": "Usage",
|
|
76
|
+
"code": "<Plussie size=\"lg\" title=\"Plussie\" />\n<Plussie expression=\"wink\" tone=\"accent\" />\n<Plussie size={96} idle />",
|
|
77
|
+
"language": "tsx"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"status": "stable",
|
|
81
|
+
"url": "/docs/components/plussie",
|
|
82
|
+
"mdUrl": "/docs/components/plussie.md",
|
|
83
|
+
"jsonUrl": "/r/components/plussie.json",
|
|
84
|
+
"whenToUse": [
|
|
85
|
+
"An empty state, an onboarding step, an error page — somewhere a screen has room for a face.",
|
|
86
|
+
"A long-running job's companion, where `expression` says what the job is doing without a second sentence.",
|
|
87
|
+
"Anywhere you would have embedded the character's video and only needed one frame of it."
|
|
88
|
+
],
|
|
89
|
+
"whenNotToUse": [
|
|
90
|
+
"In dense console chrome. A face in a toolbar is a distraction; use `CueMark`.",
|
|
91
|
+
"As a loading indicator. Use `Spinner` or `Progress`, which announce themselves.",
|
|
92
|
+
"For an animation with a script. The eight rigged animations live in the site that renders video, and this library will not take Remotion as a peer."
|
|
93
|
+
],
|
|
94
|
+
"commonMistakes": [
|
|
95
|
+
"Inventing a pose by nudging the eyes with CSS. Every value `expression` holds is a still from a real animation, and a hand-tuned one will not match the video.",
|
|
96
|
+
"Turning `idle` on across a page. It is off by default because a mark moving in the corner of the eye is a distraction, and it is off again under `prefers-reduced-motion`.",
|
|
97
|
+
"Expecting `expression` to animate between poses. It sets a pose; transitions belong to the caller."
|
|
98
|
+
],
|
|
99
|
+
"specimens": [
|
|
100
|
+
{
|
|
101
|
+
"title": "Plussie",
|
|
102
|
+
"group": "brand",
|
|
103
|
+
"components": [
|
|
104
|
+
"Plussie"
|
|
105
|
+
],
|
|
106
|
+
"code": "<Specimens>\n {EXPRESSIONS.map((expression) => (\n <Specimen key={expression} label={expression}>\n <Plussie size={56} expression={expression} />\n </Specimen>\n ))}\n</Specimens>\n<Specimens>\n {SIZES.map((size) => (\n <Specimen key={size} label={`size ${size}`}>\n <Plussie size={size} />\n </Specimen>\n ))}\n <Specimen label=\"tone accent\">\n <Plussie size={56} tone=\"accent\" expression=\"wink\" />\n </Specimen>\n <Specimen label=\"idle\">\n <Plussie size={56} idle title=\"Plussie\" />\n </Specimen>\n</Specimens>",
|
|
107
|
+
"note": "The same circle and the same two '+' the mark draws, out of the same geometry module, with the eyes in their own groups so a pose can move them. Every pose is a still from one of the character's own animations.",
|
|
108
|
+
"interaction": "none by default. Pass `idle` for a CSS-only blink, which stops for a reader who has asked for reduced motion."
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|