@cueplusplus/ui 0.9.0 → 0.10.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 +195 -0
- package/README.md +91 -9
- package/dist/index.d.ts +4 -3
- package/dist/index.js +4 -2
- package/dist/instruments/meter.d.ts +5 -1
- package/dist/layout/bento.d.ts +144 -0
- package/dist/layout/bento.js +266 -0
- package/dist/layout/index.d.ts +3 -2
- package/dist/layout/index.js +3 -2
- package/dist/primitives/button.d.ts +12 -0
- package/dist/primitives/chip.d.ts +1 -1
- package/dist/system/index.d.ts +2 -2
- package/dist/system/index.js +2 -1
- package/dist/system/overrides.d.ts +38 -1
- package/dist/system/overrides.js +40 -1
- package/manifest/components/accordion.json +24 -6
- package/manifest/components/activity-graph.json +20 -5
- package/manifest/components/agent-card.json +37 -9
- package/manifest/components/agent-handoff.json +21 -5
- package/manifest/components/agent-mode-badge.json +22 -4
- package/manifest/components/agent-pile.json +38 -8
- package/manifest/components/agent-plan.json +9 -2
- package/manifest/components/agent-status.json +17 -3
- package/manifest/components/agent-surface.json +26 -11
- package/manifest/components/alert-dialog.json +29 -5
- package/manifest/components/animated-number.json +14 -6
- package/manifest/components/app-bar.json +66 -13
- package/manifest/components/app-shell.json +133 -31
- package/manifest/components/app-window-frame.json +28 -6
- package/manifest/components/approval-card.json +37 -7
- package/manifest/components/artifact-card.json +16 -4
- package/manifest/components/ask-box.json +99 -21
- package/manifest/components/audience-icon.json +1 -7
- package/manifest/components/autocomplete.json +80 -18
- package/manifest/components/avatar-group.json +13 -2
- package/manifest/components/avatar.json +22 -4
- package/manifest/components/background-inbox.json +9 -2
- package/manifest/components/bento.json +306 -0
- package/manifest/components/branch-picker.json +29 -7
- package/manifest/components/breadcrumb.json +13 -3
- package/manifest/components/button-group.json +21 -4
- package/manifest/components/button.json +41 -4
- package/manifest/components/canvas-split-body.json +4 -1
- package/manifest/components/canvas-split-header.json +17 -4
- package/manifest/components/canvas-split-line.json +4 -1
- package/manifest/components/canvas-split-message.json +8 -1
- package/manifest/components/card.json +14 -3
- package/manifest/components/carousel.json +54 -12
- package/manifest/components/catalogue-icon.json +1 -7
- package/manifest/components/channel-beta-icon.json +1 -7
- package/manifest/components/channel-matrix.json +80 -15
- package/manifest/components/channel-released-icon.json +1 -7
- package/manifest/components/chart-container.json +26 -10
- package/manifest/components/chart-ramp.json +13 -3
- package/manifest/components/chart-swatch.json +9 -2
- package/manifest/components/chart-tooltip-content.json +31 -7
- package/manifest/components/chart.json +30 -6
- package/manifest/components/chat-panel-composer.json +9 -2
- package/manifest/components/checkbox-group.json +4 -2
- package/manifest/components/checkbox.json +17 -4
- package/manifest/components/checkpoint-history.json +13 -3
- package/manifest/components/chip.json +35 -5
- package/manifest/components/clamp.json +30 -7
- package/manifest/components/cli-tool-icon.json +1 -7
- package/manifest/components/code-diff.json +20 -5
- package/manifest/components/code-runner.json +32 -6
- package/manifest/components/collapsible.json +16 -4
- package/manifest/components/color-area.json +4 -1
- package/manifest/components/color-field.json +13 -3
- package/manifest/components/color-picker.json +75 -17
- package/manifest/components/color-slider.json +12 -3
- package/manifest/components/color-swatch.json +13 -2
- package/manifest/components/colors-section.json +8 -4
- package/manifest/components/combobox.json +81 -18
- package/manifest/components/command-palette.json +57 -13
- package/manifest/components/compaction-row.json +35 -7
- package/manifest/components/comparison-card.json +17 -4
- package/manifest/components/composer-attachment-chip.json +9 -2
- package/manifest/components/composer-bar.json +4 -1
- package/manifest/components/composer-command-item.json +8 -2
- package/manifest/components/composer-context.json +4 -1
- package/manifest/components/composer-input.json +5 -1
- package/manifest/components/composer-menu-item.json +4 -1
- package/manifest/components/composer-menu.json +12 -2
- package/manifest/components/composer-model-item.json +8 -2
- package/manifest/components/composer-model-trigger.json +8 -2
- package/manifest/components/composer-person-item.json +8 -2
- package/manifest/components/composer-send.json +8 -2
- package/manifest/components/composer-voice-button.json +4 -1
- package/manifest/components/composer-voice.json +8 -2
- package/manifest/components/composer.json +76 -17
- package/manifest/components/computer-use.json +17 -4
- package/manifest/components/confidence-marker.json +13 -3
- package/manifest/components/connection-state.json +23 -4
- package/manifest/components/container.json +14 -2
- package/manifest/components/context-breakdown.json +8 -2
- package/manifest/components/context-menu.json +16 -4
- package/manifest/components/context-usage.json +16 -4
- package/manifest/components/conversation-search.json +22 -5
- package/manifest/components/copy-button.json +32 -7
- package/manifest/components/cost-meter.json +12 -3
- package/manifest/components/cue-logotype.json +17 -3
- package/manifest/components/cue-mark.json +17 -3
- package/manifest/components/cue-portal-frame.json +13 -3
- package/manifest/components/data-row.json +21 -7
- package/manifest/components/data-table-pagination.json +18 -4
- package/manifest/components/data-table-toolbar.json +30 -7
- package/manifest/components/data-tree.json +42 -9
- package/manifest/components/date-field.json +13 -2
- package/manifest/components/date-picker.json +81 -19
- package/manifest/components/date-range-picker.json +81 -19
- package/manifest/components/day-separator.json +4 -1
- package/manifest/components/delegation-card.json +64 -12
- package/manifest/components/density.json +24 -4
- package/manifest/components/description-list.json +8 -1
- package/manifest/components/diagram.json +33 -7
- package/manifest/components/dialog.json +29 -6
- package/manifest/components/disclosure.json +31 -7
- package/manifest/components/dmx-bar.json +16 -4
- package/manifest/components/dmx-strip.json +20 -5
- package/manifest/components/document-reference.json +21 -5
- package/manifest/components/draft-restore.json +18 -4
- package/manifest/components/drawer.json +30 -6
- package/manifest/components/dropdown-menu.json +55 -10
- package/manifest/components/edit-message.json +32 -7
- package/manifest/components/elements-command-palette.json +27 -6
- package/manifest/components/elements-data-table.json +9 -2
- package/manifest/components/elements-timeline.json +8 -2
- package/manifest/components/elicitation-form.json +31 -6
- package/manifest/components/empty-state-composer.json +9 -2
- package/manifest/components/empty-state-suggestion.json +4 -1
- package/manifest/components/empty-state.json +25 -5
- package/manifest/components/end-of-turn-summary.json +16 -4
- package/manifest/components/env-var-input.json +54 -12
- package/manifest/components/error-state.json +17 -4
- package/manifest/components/export-dialog.json +27 -8
- package/manifest/components/eyebrow.json +4 -1
- package/manifest/components/feedback-dialog.json +33 -7
- package/manifest/components/field-description.json +4 -1
- package/manifest/components/field-error.json +13 -3
- package/manifest/components/field-label.json +4 -1
- package/manifest/components/field.json +4 -1
- package/manifest/components/file-tree.json +16 -4
- package/manifest/components/file-upload.json +58 -13
- package/manifest/components/flow-graph.json +12 -3
- package/manifest/components/folder-icon.json +1 -7
- package/manifest/components/footer.json +24 -4
- package/manifest/components/frac.json +10 -2
- package/manifest/components/generation-loader.json +17 -3
- package/manifest/components/generative-ui.json +39 -7
- package/manifest/components/grid.json +56 -5
- package/manifest/components/group-bar.json +25 -6
- package/manifest/components/guardrail-notice.json +22 -5
- package/manifest/components/hover-card.json +45 -8
- package/manifest/components/icon-button.json +22 -4
- package/manifest/components/image-generation.json +8 -2
- package/manifest/components/info-tip.json +42 -7
- package/manifest/components/inline-citation.json +14 -3
- package/manifest/components/input-group.json +24 -5
- package/manifest/components/input.json +13 -3
- package/manifest/components/item.json +42 -8
- package/manifest/components/job-progress.json +25 -6
- package/manifest/components/launcher-bubble.json +32 -7
- package/manifest/components/ledger.json +87 -19
- package/manifest/components/link.json +16 -3
- package/manifest/components/live-region-announcer.json +21 -5
- package/manifest/components/log-viewer.json +42 -10
- package/manifest/components/map-answer.json +17 -4
- package/manifest/components/markdown-text.json +36 -5
- package/manifest/components/math-block.json +12 -3
- package/manifest/components/mcp-server-icon.json +1 -7
- package/manifest/components/mcp-server-panel.json +18 -4
- package/manifest/components/memory-chips.json +9 -2
- package/manifest/components/menubar.json +33 -7
- package/manifest/components/message-actions.json +32 -7
- package/manifest/components/message-attachments.json +9 -2
- package/manifest/components/message-branches.json +14 -3
- package/manifest/components/message-list.json +27 -6
- package/manifest/components/message-pair.json +25 -5
- package/manifest/components/message-queue.json +13 -3
- package/manifest/components/message-timing.json +8 -2
- package/manifest/components/message.json +41 -9
- package/manifest/components/meter.json +43 -7
- package/manifest/components/mobile-composer.json +47 -10
- package/manifest/components/model-picker.json +13 -3
- package/manifest/components/multi-select.json +78 -17
- package/manifest/components/musical-time-input.json +34 -8
- package/manifest/components/navigation-menu.json +54 -12
- package/manifest/components/node-card.json +42 -7
- package/manifest/components/node-handle.json +17 -2
- package/manifest/components/number-field.json +28 -6
- package/manifest/components/number-ticker.json +8 -2
- package/manifest/components/onboarding.json +18 -4
- package/manifest/components/otp-field.json +43 -10
- package/manifest/components/page-shell.json +35 -6
- package/manifest/components/pagination.json +21 -5
- package/manifest/components/panel-header.json +15 -3
- package/manifest/components/password-input.json +38 -8
- package/manifest/components/permission-grant.json +28 -5
- package/manifest/components/permission-scopes.json +57 -12
- package/manifest/components/piano-keyboard.json +38 -9
- package/manifest/components/plussie.json +34 -5
- package/manifest/components/popover.json +45 -8
- package/manifest/components/preset-section.json +12 -5
- package/manifest/components/progress.json +25 -6
- package/manifest/components/prompt-library.json +27 -6
- package/manifest/components/queue-dock.json +36 -8
- package/manifest/components/quota-banner.json +25 -6
- package/manifest/components/quote-reply.json +29 -7
- package/manifest/components/radio-group.json +12 -2
- package/manifest/components/radio.json +17 -3
- package/manifest/components/rating.json +60 -13
- package/manifest/components/read-aloud.json +35 -8
- package/manifest/components/reasoning-effort.json +17 -4
- package/manifest/components/reasoning-panel.json +33 -8
- package/manifest/components/recommendation-card.json +35 -10
- package/manifest/components/regenerate-menu.json +22 -5
- package/manifest/components/replay-player.json +29 -7
- package/manifest/components/research-report.json +12 -3
- package/manifest/components/resizable.json +4 -1
- package/manifest/components/retrieval-chunks.json +16 -4
- package/manifest/components/revert-dock.json +61 -14
- package/manifest/components/reviewable-diff.json +23 -5
- package/manifest/components/risk-badge.json +18 -3
- package/manifest/components/row.json +17 -4
- package/manifest/components/schedule-card.json +25 -6
- package/manifest/components/score-breakdown.json +20 -5
- package/manifest/components/scroll-anchor.json +13 -3
- package/manifest/components/scroll-area.json +31 -8
- package/manifest/components/scrollable-tabs-list.json +12 -4
- package/manifest/components/scrub-input.json +84 -18
- package/manifest/components/seam-cell.json +19 -3
- package/manifest/components/seam-grid.json +12 -3
- package/manifest/components/search-input.json +49 -10
- package/manifest/components/section-header.json +36 -8
- package/manifest/components/segmented-control.json +50 -11
- package/manifest/components/select.json +74 -16
- package/manifest/components/separator.json +4 -1
- package/manifest/components/settings-panel.json +41 -9
- package/manifest/components/shape-section.json +8 -4
- package/manifest/components/shared-conversation.json +21 -5
- package/manifest/components/sheet.json +29 -6
- package/manifest/components/shimmer-label.json +4 -2
- package/manifest/components/sidebar.json +60 -13
- package/manifest/components/skill-icon.json +1 -7
- package/manifest/components/slider.json +22 -5
- package/manifest/components/sources.json +17 -4
- package/manifest/components/sparkline.json +17 -4
- package/manifest/components/speaker-identity.json +4 -1
- package/manifest/components/spec-sheet.json +16 -4
- package/manifest/components/spectrum-visualizer.json +41 -10
- package/manifest/components/spinner.json +12 -2
- package/manifest/components/stack-icon.json +1 -7
- package/manifest/components/stack.json +54 -7
- package/manifest/components/stacks-matrix-icon.json +1 -7
- package/manifest/components/stat.json +28 -4
- package/manifest/components/status-bar.json +50 -9
- package/manifest/components/status-dot.json +23 -4
- package/manifest/components/stepper.json +22 -5
- package/manifest/components/stopped-run.json +19 -4
- package/manifest/components/streaming-text.json +12 -3
- package/manifest/components/subagent-list.json +21 -5
- package/manifest/components/suggestions.json +27 -5
- package/manifest/components/swap-label.json +18 -4
- package/manifest/components/switch.json +18 -3
- package/manifest/components/table-scroll-region.json +4 -1
- package/manifest/components/table.json +54 -11
- package/manifest/components/tabs.json +16 -5
- package/manifest/components/tags-input.json +79 -17
- package/manifest/components/tail-status.json +37 -8
- package/manifest/components/terminal-block.json +25 -5
- package/manifest/components/terminal-frame.json +34 -8
- package/manifest/components/textarea.json +8 -3
- package/manifest/components/theme-configurator.json +47 -11
- package/manifest/components/theme-provider.json +79 -15
- package/manifest/components/thinking-indicator.json +8 -2
- package/manifest/components/thread-list.json +13 -3
- package/manifest/components/thread-search.json +22 -5
- package/manifest/components/threshold-rail.json +77 -14
- package/manifest/components/time-boundary.json +8 -2
- package/manifest/components/time-field.json +13 -2
- package/manifest/components/timeline-ruler.json +51 -12
- package/manifest/components/timeline.json +19 -3
- package/manifest/components/title-bar.json +19 -4
- package/manifest/components/toast.json +12 -3
- package/manifest/components/todo-list.json +8 -2
- package/manifest/components/toggle-group.json +33 -7
- package/manifest/components/toggle.json +23 -4
- package/manifest/components/token-editor.json +26 -7
- package/manifest/components/tool-call-card.json +83 -16
- package/manifest/components/tool-call.json +37 -9
- package/manifest/components/tool-error.json +34 -8
- package/manifest/components/tool-group.json +17 -4
- package/manifest/components/tool-timeline.json +37 -9
- package/manifest/components/toolbar.json +37 -8
- package/manifest/components/tooltip.json +41 -7
- package/manifest/components/trace-waterfall.json +12 -3
- package/manifest/components/tree-visibility-toggle.json +18 -3
- package/manifest/components/tree.json +52 -11
- package/manifest/components/turn-footer.json +36 -8
- package/manifest/components/two-step-button.json +46 -9
- package/manifest/components/typing-indicator.json +8 -1
- package/manifest/components/universe-grid.json +37 -10
- package/manifest/components/unread-divider.json +4 -1
- package/manifest/components/usage-chart.json +46 -9
- package/manifest/components/verdict-row.json +20 -5
- package/manifest/components/voice-conversation.json +37 -7
- package/manifest/components/web-preview.json +23 -5
- package/manifest/components/web-search.json +20 -5
- package/manifest/components/work-collapse.json +30 -7
- package/manifest/fixtures.json +106 -0
- package/manifest/manifest.json +315 -297
- package/manifest/tokens.json +2 -2
- package/package.json +7 -6
|
@@ -14,56 +14,85 @@
|
|
|
14
14
|
"type": "string",
|
|
15
15
|
"required": true,
|
|
16
16
|
"defaultValue": null,
|
|
17
|
-
"description": "What is happening, in two or three words: `Running commands`,\n`Searching the codebase`. `TAIL_ACTIONS` is the shipped vocabulary and this\nprop is a plain string, so a product with its own verbs is not stuck with\nthese ten."
|
|
17
|
+
"description": "What is happening, in two or three words: `Running commands`,\n`Searching the codebase`. `TAIL_ACTIONS` is the shipped vocabulary and this\nprop is a plain string, so a product with its own verbs is not stuck with\nthese ten.",
|
|
18
|
+
"control": {
|
|
19
|
+
"kind": "string"
|
|
20
|
+
}
|
|
18
21
|
},
|
|
19
22
|
{
|
|
20
23
|
"name": "detail",
|
|
21
24
|
"type": "string",
|
|
22
25
|
"required": false,
|
|
23
26
|
"defaultValue": null,
|
|
24
|
-
"description": "The thing the action is happening to — a path, a query, a topic. Truncates\non its own so the action never has to; a sidebar transcript is 280px wide\nand a status line that elides its verb has said nothing."
|
|
27
|
+
"description": "The thing the action is happening to — a path, a query, a topic. Truncates\non its own so the action never has to; a sidebar transcript is 280px wide\nand a status line that elides its verb has said nothing.",
|
|
28
|
+
"control": {
|
|
29
|
+
"kind": "string"
|
|
30
|
+
}
|
|
25
31
|
},
|
|
26
32
|
{
|
|
27
33
|
"name": "active",
|
|
28
34
|
"type": "boolean",
|
|
29
35
|
"required": false,
|
|
30
36
|
"defaultValue": "true",
|
|
31
|
-
"description": "Whether the action is still going. `true` by default, because this row is\nthe live one; turn it off for `Idle`, `Interrupted` and `Aborted`, which\nstops the sweep and empties the spinner's slot without moving the text."
|
|
37
|
+
"description": "Whether the action is still going. `true` by default, because this row is\nthe live one; turn it off for `Idle`, `Interrupted` and `Aborted`, which\nstops the sweep and empties the spinner's slot without moving the text.",
|
|
38
|
+
"control": {
|
|
39
|
+
"kind": "boolean"
|
|
40
|
+
}
|
|
32
41
|
},
|
|
33
42
|
{
|
|
34
43
|
"name": "updatesInPlace",
|
|
35
44
|
"type": "boolean",
|
|
36
45
|
"required": false,
|
|
37
46
|
"defaultValue": "true",
|
|
38
|
-
"description": "Whether a new `action` animates into the row that is already there, or\nsimply replaces the text.\n\nCursor's flag, and the reason it needs one: a narration line that changes\nevery few hundred milliseconds should read as one row being updated, while\na line that means something *different* should read as a new row. `true`\n(the default) keys the label on its own text so each new action fades in\nwhere the last one was; `false` leaves it unkeyed, and the words change\nwith no motion at all. A reduced-motion reader gets the second behaviour\neither way."
|
|
47
|
+
"description": "Whether a new `action` animates into the row that is already there, or\nsimply replaces the text.\n\nCursor's flag, and the reason it needs one: a narration line that changes\nevery few hundred milliseconds should read as one row being updated, while\na line that means something *different* should read as a new row. `true`\n(the default) keys the label on its own text so each new action fades in\nwhere the last one was; `false` leaves it unkeyed, and the words change\nwith no motion at all. A reduced-motion reader gets the second behaviour\neither way.",
|
|
48
|
+
"control": {
|
|
49
|
+
"kind": "boolean"
|
|
50
|
+
}
|
|
39
51
|
},
|
|
40
52
|
{
|
|
41
53
|
"name": "priority",
|
|
42
54
|
"type": "\"normal\" | \"attention\"",
|
|
43
55
|
"required": false,
|
|
44
56
|
"defaultValue": "normal",
|
|
45
|
-
"description": "How loudly this row is speaking. See {@link TailPriority}."
|
|
57
|
+
"description": "How loudly this row is speaking. See {@link TailPriority}.",
|
|
58
|
+
"control": {
|
|
59
|
+
"kind": "enum",
|
|
60
|
+
"members": [
|
|
61
|
+
"normal",
|
|
62
|
+
"attention"
|
|
63
|
+
]
|
|
64
|
+
}
|
|
46
65
|
},
|
|
47
66
|
{
|
|
48
67
|
"name": "onCancel",
|
|
49
68
|
"type": "(() => void)",
|
|
50
69
|
"required": false,
|
|
51
70
|
"defaultValue": null,
|
|
52
|
-
"description": "Stop the run. The inline control exists only when this is given — Cursor's\nrule, and the right one: a Cancel that cannot cancel is worse than no\nCancel."
|
|
71
|
+
"description": "Stop the run. The inline control exists only when this is given — Cursor's\nrule, and the right one: a Cancel that cannot cancel is worse than no\nCancel.",
|
|
72
|
+
"control": {
|
|
73
|
+
"kind": "callback",
|
|
74
|
+
"fixture": "callback.log"
|
|
75
|
+
}
|
|
53
76
|
},
|
|
54
77
|
{
|
|
55
78
|
"name": "cancelLabel",
|
|
56
79
|
"type": "string",
|
|
57
80
|
"required": false,
|
|
58
81
|
"defaultValue": "Cancel",
|
|
59
|
-
"description": "What the stop control is called. `Cancel` is Cursor's word; opencode uses\n`Interrupt` and `Stop` for the same button."
|
|
82
|
+
"description": "What the stop control is called. `Cancel` is Cursor's word; opencode uses\n`Interrupt` and `Stop` for the same button.",
|
|
83
|
+
"control": {
|
|
84
|
+
"kind": "string"
|
|
85
|
+
}
|
|
60
86
|
},
|
|
61
87
|
{
|
|
62
88
|
"name": "announce",
|
|
63
89
|
"type": "boolean",
|
|
64
90
|
"required": false,
|
|
65
91
|
"defaultValue": null,
|
|
66
|
-
"description": "Whether this row is a live region — whether a screen reader is told each\ntime the action changes.\n\n**Answers itself by default, and that default is the interesting part.**\nLeft alone the row speaks when it is the only thing that can, and goes\nquiet the moment a {@link LiveRegionAnnouncer } is mounted anywhere on the\npage: the announcer's table covers the same transitions this row narrates,\nso a console with both — the ordinary composition — would otherwise have\nevery state read out twice, out of step, because the two regions update at\ndifferent moments.\n\nThe row is the one that defers because the announcer is the better speaker:\nit is a queue, spaced and depth-limited and paused while the page is hidden\nor a modal has the reader, and it is mounted empty and left mounted, which\nis the only way a live region is reliably announced. This row changes\nseveral times a second and comes and goes with the run.\n\nSet it explicitly to overrule that — `true` for a console whose announcer\nis fed something other than these actions, `false` for one that narrates\nthe foot of the transcript some other way. An explicit answer always wins."
|
|
92
|
+
"description": "Whether this row is a live region — whether a screen reader is told each\ntime the action changes.\n\n**Answers itself by default, and that default is the interesting part.**\nLeft alone the row speaks when it is the only thing that can, and goes\nquiet the moment a {@link LiveRegionAnnouncer } is mounted anywhere on the\npage: the announcer's table covers the same transitions this row narrates,\nso a console with both — the ordinary composition — would otherwise have\nevery state read out twice, out of step, because the two regions update at\ndifferent moments.\n\nThe row is the one that defers because the announcer is the better speaker:\nit is a queue, spaced and depth-limited and paused while the page is hidden\nor a modal has the reader, and it is mounted empty and left mounted, which\nis the only way a live region is reliably announced. This row changes\nseveral times a second and comes and goes with the run.\n\nSet it explicitly to overrule that — `true` for a console whose announcer\nis fed something other than these actions, `false` for one that narrates\nthe foot of the transcript some other way. An explicit answer always wins.",
|
|
93
|
+
"control": {
|
|
94
|
+
"kind": "boolean"
|
|
95
|
+
}
|
|
67
96
|
}
|
|
68
97
|
],
|
|
69
98
|
"typeReferences": [
|
|
@@ -14,35 +14,55 @@
|
|
|
14
14
|
"type": "string",
|
|
15
15
|
"required": true,
|
|
16
16
|
"defaultValue": null,
|
|
17
|
-
"description": "Command string shown in the terminal header."
|
|
17
|
+
"description": "Command string shown in the terminal header.",
|
|
18
|
+
"control": {
|
|
19
|
+
"kind": "string"
|
|
20
|
+
}
|
|
18
21
|
},
|
|
19
22
|
{
|
|
20
23
|
"name": "lines",
|
|
21
24
|
"type": "readonly string[]",
|
|
22
25
|
"required": true,
|
|
23
26
|
"defaultValue": null,
|
|
24
|
-
"description": "Output lines available to stream into the body."
|
|
27
|
+
"description": "Output lines available to stream into the body.",
|
|
28
|
+
"control": {
|
|
29
|
+
"kind": "array",
|
|
30
|
+
"fixture": "agent.transcript"
|
|
31
|
+
}
|
|
25
32
|
},
|
|
26
33
|
{
|
|
27
34
|
"name": "visibleCount",
|
|
28
35
|
"type": "number",
|
|
29
36
|
"required": true,
|
|
30
37
|
"defaultValue": null,
|
|
31
|
-
"description": "How many output lines from the start are currently shown."
|
|
38
|
+
"description": "How many output lines from the start are currently shown.",
|
|
39
|
+
"control": {
|
|
40
|
+
"kind": "number"
|
|
41
|
+
}
|
|
32
42
|
},
|
|
33
43
|
{
|
|
34
44
|
"name": "done",
|
|
35
45
|
"type": "boolean",
|
|
36
46
|
"required": true,
|
|
37
47
|
"defaultValue": null,
|
|
38
|
-
"description": "When true the header shows exit 0; otherwise a spinner keeps spinning."
|
|
48
|
+
"description": "When true the header shows exit 0; otherwise a spinner keeps spinning.",
|
|
49
|
+
"control": {
|
|
50
|
+
"kind": "boolean"
|
|
51
|
+
}
|
|
39
52
|
},
|
|
40
53
|
{
|
|
41
54
|
"name": "variant",
|
|
42
55
|
"type": "\"paper\" | \"ink\"",
|
|
43
56
|
"required": false,
|
|
44
57
|
"defaultValue": "paper",
|
|
45
|
-
"description": "paper matches the surrounding surfaces; ink renders the classic dark terminal slab."
|
|
58
|
+
"description": "paper matches the surrounding surfaces; ink renders the classic dark terminal slab.",
|
|
59
|
+
"control": {
|
|
60
|
+
"kind": "enum",
|
|
61
|
+
"members": [
|
|
62
|
+
"paper",
|
|
63
|
+
"ink"
|
|
64
|
+
]
|
|
65
|
+
}
|
|
46
66
|
}
|
|
47
67
|
],
|
|
48
68
|
"typeReferences": [
|
|
@@ -12,56 +12,82 @@
|
|
|
12
12
|
"type": "ReactNode",
|
|
13
13
|
"required": false,
|
|
14
14
|
"defaultValue": null,
|
|
15
|
-
"description": "Name above the transcript — a log file, a host, a task."
|
|
15
|
+
"description": "Name above the transcript — a log file, a host, a task.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "node",
|
|
18
|
+
"fixture": "children.text"
|
|
19
|
+
}
|
|
16
20
|
},
|
|
17
21
|
{
|
|
18
22
|
"name": "lines",
|
|
19
23
|
"type": "readonly TerminalFrameLine[]",
|
|
20
24
|
"required": false,
|
|
21
25
|
"defaultValue": null,
|
|
22
|
-
"description": "Static transcript. Rendered as a preamble when `simulate` is also set."
|
|
26
|
+
"description": "Static transcript. Rendered as a preamble when `simulate` is also set.",
|
|
27
|
+
"control": {
|
|
28
|
+
"kind": "array"
|
|
29
|
+
}
|
|
23
30
|
},
|
|
24
31
|
{
|
|
25
32
|
"name": "prompt",
|
|
26
33
|
"type": "string",
|
|
27
34
|
"required": false,
|
|
28
35
|
"defaultValue": "$",
|
|
29
|
-
"description": "The prompt glyph in front of a command line. Defaults to `\"$\"`."
|
|
36
|
+
"description": "The prompt glyph in front of a command line. Defaults to `\"$\"`.",
|
|
37
|
+
"control": {
|
|
38
|
+
"kind": "string"
|
|
39
|
+
}
|
|
30
40
|
},
|
|
31
41
|
{
|
|
32
42
|
"name": "copy",
|
|
33
43
|
"type": "boolean",
|
|
34
44
|
"required": false,
|
|
35
45
|
"defaultValue": "false",
|
|
36
|
-
"description": "Show a `CopyButton` in the title bar for the commands in the transcript."
|
|
46
|
+
"description": "Show a `CopyButton` in the title bar for the commands in the transcript.",
|
|
47
|
+
"control": {
|
|
48
|
+
"kind": "boolean"
|
|
49
|
+
}
|
|
37
50
|
},
|
|
38
51
|
{
|
|
39
52
|
"name": "copyValue",
|
|
40
53
|
"type": "string",
|
|
41
54
|
"required": false,
|
|
42
55
|
"defaultValue": null,
|
|
43
|
-
"description": "What the copy button puts on the clipboard. Defaults to the command lines, one per line."
|
|
56
|
+
"description": "What the copy button puts on the clipboard. Defaults to the command lines, one per line.",
|
|
57
|
+
"control": {
|
|
58
|
+
"kind": "string"
|
|
59
|
+
}
|
|
44
60
|
},
|
|
45
61
|
{
|
|
46
62
|
"name": "simulate",
|
|
47
63
|
"type": "TerminalScript",
|
|
48
64
|
"required": false,
|
|
49
65
|
"defaultValue": null,
|
|
50
|
-
"description": "Play the transcript out as a typed session.\n\nPass a stable reference (a module constant, or memoised) — the player\nrestarts whenever this prop changes identity. Under\n`prefers-reduced-motion` the finished transcript renders instantly and no\ntimer is ever scheduled."
|
|
66
|
+
"description": "Play the transcript out as a typed session.\n\nPass a stable reference (a module constant, or memoised) — the player\nrestarts whenever this prop changes identity. Under\n`prefers-reduced-motion` the finished transcript renders instantly and no\ntimer is ever scheduled.",
|
|
67
|
+
"control": {
|
|
68
|
+
"kind": "opaque"
|
|
69
|
+
}
|
|
51
70
|
},
|
|
52
71
|
{
|
|
53
72
|
"name": "height",
|
|
54
73
|
"type": "number",
|
|
55
74
|
"required": false,
|
|
56
75
|
"defaultValue": null,
|
|
57
|
-
"description": "Fixed body height in px at the 16px root. Leave unset to grow with the content."
|
|
76
|
+
"description": "Fixed body height in px at the 16px root. Leave unset to grow with the content.",
|
|
77
|
+
"control": {
|
|
78
|
+
"kind": "number"
|
|
79
|
+
}
|
|
58
80
|
},
|
|
59
81
|
{
|
|
60
82
|
"name": "children",
|
|
61
83
|
"type": "ReactNode",
|
|
62
84
|
"required": false,
|
|
63
85
|
"defaultValue": null,
|
|
64
|
-
"description": "Extra content under the transcript — an input row, a hint strip."
|
|
86
|
+
"description": "Extra content under the transcript — an input row, a hint strip.",
|
|
87
|
+
"control": {
|
|
88
|
+
"kind": "node",
|
|
89
|
+
"fixture": "children.text"
|
|
90
|
+
}
|
|
65
91
|
}
|
|
66
92
|
],
|
|
67
93
|
"typeReferences": [
|
|
@@ -12,14 +12,20 @@
|
|
|
12
12
|
"type": "string",
|
|
13
13
|
"required": false,
|
|
14
14
|
"defaultValue": null,
|
|
15
|
-
"description": "Extra classes, merged over the chassis."
|
|
15
|
+
"description": "Extra classes, merged over the chassis.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "string"
|
|
18
|
+
}
|
|
16
19
|
},
|
|
17
20
|
{
|
|
18
21
|
"name": "rows",
|
|
19
22
|
"type": "number",
|
|
20
23
|
"required": false,
|
|
21
24
|
"defaultValue": "3",
|
|
22
|
-
"description": "Visible rows before the box starts scrolling. Defaults to `3`."
|
|
25
|
+
"description": "Visible rows before the box starts scrolling. Defaults to `3`.",
|
|
26
|
+
"control": {
|
|
27
|
+
"kind": "number"
|
|
28
|
+
}
|
|
23
29
|
}
|
|
24
30
|
],
|
|
25
31
|
"typeReferences": [
|
|
@@ -30,7 +36,6 @@
|
|
|
30
36
|
"variants": {},
|
|
31
37
|
"defaultVariants": {},
|
|
32
38
|
"tokensUsed": [
|
|
33
|
-
"--cue-accent",
|
|
34
39
|
"--cue-border",
|
|
35
40
|
"--cue-border-strong",
|
|
36
41
|
"--cue-control-lg",
|
|
@@ -14,63 +14,101 @@
|
|
|
14
14
|
"type": "\"floating\" | \"docked-right\"",
|
|
15
15
|
"required": false,
|
|
16
16
|
"defaultValue": null,
|
|
17
|
-
"description": "Placement, controlled. Pair with `onPositionChange`."
|
|
17
|
+
"description": "Placement, controlled. Pair with `onPositionChange`.",
|
|
18
|
+
"control": {
|
|
19
|
+
"kind": "enum",
|
|
20
|
+
"members": [
|
|
21
|
+
"floating",
|
|
22
|
+
"docked-right"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
18
25
|
},
|
|
19
26
|
{
|
|
20
27
|
"name": "defaultPosition",
|
|
21
28
|
"type": "\"floating\" | \"docked-right\"",
|
|
22
29
|
"required": false,
|
|
23
30
|
"defaultValue": "floating",
|
|
24
|
-
"description": "Initial placement. A stored one wins. Defaults to `\"floating\"`."
|
|
31
|
+
"description": "Initial placement. A stored one wins. Defaults to `\"floating\"`.",
|
|
32
|
+
"control": {
|
|
33
|
+
"kind": "enum",
|
|
34
|
+
"members": [
|
|
35
|
+
"floating",
|
|
36
|
+
"docked-right"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
25
39
|
},
|
|
26
40
|
{
|
|
27
41
|
"name": "onPositionChange",
|
|
28
42
|
"type": "((position: ConfiguratorPosition) => void)",
|
|
29
43
|
"required": false,
|
|
30
44
|
"defaultValue": null,
|
|
31
|
-
"description": "Called when the user docks or floats the panel."
|
|
45
|
+
"description": "Called when the user docks or floats the panel.",
|
|
46
|
+
"control": {
|
|
47
|
+
"kind": "callback",
|
|
48
|
+
"fixture": "callback.log"
|
|
49
|
+
}
|
|
32
50
|
},
|
|
33
51
|
{
|
|
34
52
|
"name": "defaultCollapsed",
|
|
35
53
|
"type": "boolean",
|
|
36
54
|
"required": false,
|
|
37
55
|
"defaultValue": "false",
|
|
38
|
-
"description": "Start furled to the title bar. A stored value wins. Defaults to `false`."
|
|
56
|
+
"description": "Start furled to the title bar. A stored value wins. Defaults to `false`.",
|
|
57
|
+
"control": {
|
|
58
|
+
"kind": "boolean"
|
|
59
|
+
}
|
|
39
60
|
},
|
|
40
61
|
{
|
|
41
62
|
"name": "storageKey",
|
|
42
63
|
"type": "string",
|
|
43
64
|
"required": false,
|
|
44
65
|
"defaultValue": "cue-configurator",
|
|
45
|
-
"description": "`localStorage` key holding the overrides, the placement and the zoom.\nDefaults to `\"cue-configurator\"`."
|
|
66
|
+
"description": "`localStorage` key holding the overrides, the placement and the zoom.\nDefaults to `\"cue-configurator\"`.",
|
|
67
|
+
"control": {
|
|
68
|
+
"kind": "string"
|
|
69
|
+
}
|
|
46
70
|
},
|
|
47
71
|
{
|
|
48
72
|
"name": "onChange",
|
|
49
73
|
"type": "((tokens: Record<string, string>) => void)",
|
|
50
74
|
"required": false,
|
|
51
75
|
"defaultValue": null,
|
|
52
|
-
"description": "Called with the full resolved `--cue-*` map — never a diff — whenever the\noverrides, the theme or the mode change, and once on mount."
|
|
76
|
+
"description": "Called with the full resolved `--cue-*` map — never a diff — whenever the\noverrides, the theme or the mode change, and once on mount.",
|
|
77
|
+
"control": {
|
|
78
|
+
"kind": "callback",
|
|
79
|
+
"fixture": "callback.log"
|
|
80
|
+
}
|
|
53
81
|
},
|
|
54
82
|
{
|
|
55
83
|
"name": "zoomShortcuts",
|
|
56
84
|
"type": "boolean",
|
|
57
85
|
"required": false,
|
|
58
86
|
"defaultValue": "true",
|
|
59
|
-
"description": "Bind ⌘/Ctrl with `+`, `-` and `0` to the zoom valve. Defaults to `true`."
|
|
87
|
+
"description": "Bind ⌘/Ctrl with `+`, `-` and `0` to the zoom valve. Defaults to `true`.",
|
|
88
|
+
"control": {
|
|
89
|
+
"kind": "boolean"
|
|
90
|
+
}
|
|
60
91
|
},
|
|
61
92
|
{
|
|
62
93
|
"name": "title",
|
|
63
94
|
"type": "ReactNode",
|
|
64
95
|
"required": false,
|
|
65
96
|
"defaultValue": "Theme",
|
|
66
|
-
"description": "Panel heading. Defaults to `\"Theme\"`."
|
|
97
|
+
"description": "Panel heading. Defaults to `\"Theme\"`.",
|
|
98
|
+
"control": {
|
|
99
|
+
"kind": "node",
|
|
100
|
+
"fixture": "children.text"
|
|
101
|
+
}
|
|
67
102
|
},
|
|
68
103
|
{
|
|
69
104
|
"name": "className",
|
|
70
105
|
"type": "string",
|
|
71
106
|
"required": false,
|
|
72
107
|
"defaultValue": null,
|
|
73
|
-
"description": "Extra classes for the panel."
|
|
108
|
+
"description": "Extra classes for the panel.",
|
|
109
|
+
"control": {
|
|
110
|
+
"kind": "string"
|
|
111
|
+
}
|
|
74
112
|
}
|
|
75
113
|
],
|
|
76
114
|
"typeReferences": [],
|
|
@@ -79,7 +117,6 @@
|
|
|
79
117
|
"variants": {},
|
|
80
118
|
"defaultVariants": {},
|
|
81
119
|
"tokensUsed": [
|
|
82
|
-
"--cue-accent",
|
|
83
120
|
"--cue-accent-soft",
|
|
84
121
|
"--cue-border",
|
|
85
122
|
"--cue-border-overlay",
|
|
@@ -90,7 +127,6 @@
|
|
|
90
127
|
"--cue-fg-subtle",
|
|
91
128
|
"--cue-font-mono",
|
|
92
129
|
"--cue-font-sans",
|
|
93
|
-
"--cue-font-scale",
|
|
94
130
|
"--cue-icon-sm",
|
|
95
131
|
"--cue-radius-control",
|
|
96
132
|
"--cue-radius-overlay",
|
|
@@ -12,98 +12,163 @@
|
|
|
12
12
|
"type": "readonly ThemeManifest[]",
|
|
13
13
|
"required": false,
|
|
14
14
|
"defaultValue": null,
|
|
15
|
-
"description": "The registry: an ordered array of theme manifests, the first of which is\nthe default theme.\n\nA prop rather than a side effect, so the server render and the client\nrender are handed the same array and nothing depends on which module an app\nhappened to import first. Each entry is a `manifest.json` from a\n`@cueplusplus/theme-<name>` package; this library never discovers a theme by\nitself, because which themes a product ships is an application decision.\n\nOptional for one release, defaulting to `[]` with a development warning. An\napp that registers nothing gets the base axes and no registry: any\nwell-formed name is accepted as a theme (so a visitor's stored preference\nstill restores on first paint), density and font validate against the base\nladder and pairings, and `useTheme().manifest` is `null`. What it *paints*\nis a separate question with a separate answer — whichever `[data-theme]`\nblocks its stylesheets declare, which is the blank base only when none of\nthem declares the stamped name.\n\nA nested provider that passes none inherits the ambient registry.\n\nOne disclosure to be aware of: {@link prepaintScript } inlines the\nregistered **names** — and each theme's `supportsLight` flag, and the names\nof any rung or pairing it adds — into the blocking script in every page's\nHTML, because first paint has to judge a stored preference before any\nmodule loads. No colours, no geometry, no package names, and only what an\napp passes here. But an app that registers\na per-customer theme is publishing that customer's name to every visitor\nwho views source, so register per-customer themes per response rather than\nglobally."
|
|
15
|
+
"description": "The registry: an ordered array of theme manifests, the first of which is\nthe default theme.\n\nA prop rather than a side effect, so the server render and the client\nrender are handed the same array and nothing depends on which module an app\nhappened to import first. Each entry is a `manifest.json` from a\n`@cueplusplus/theme-<name>` package; this library never discovers a theme by\nitself, because which themes a product ships is an application decision.\n\nOptional for one release, defaulting to `[]` with a development warning. An\napp that registers nothing gets the base axes and no registry: any\nwell-formed name is accepted as a theme (so a visitor's stored preference\nstill restores on first paint), density and font validate against the base\nladder and pairings, and `useTheme().manifest` is `null`. What it *paints*\nis a separate question with a separate answer — whichever `[data-theme]`\nblocks its stylesheets declare, which is the blank base only when none of\nthem declares the stamped name.\n\nA nested provider that passes none inherits the ambient registry.\n\nOne disclosure to be aware of: {@link prepaintScript } inlines the\nregistered **names** — and each theme's `supportsLight` flag, and the names\nof any rung or pairing it adds — into the blocking script in every page's\nHTML, because first paint has to judge a stored preference before any\nmodule loads. No colours, no geometry, no package names, and only what an\napp passes here. But an app that registers\na per-customer theme is publishing that customer's name to every visitor\nwho views source, so register per-customer themes per response rather than\nglobally.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "array"
|
|
18
|
+
}
|
|
16
19
|
},
|
|
17
20
|
{
|
|
18
21
|
"name": "theme",
|
|
19
22
|
"type": "string",
|
|
20
23
|
"required": false,
|
|
21
24
|
"defaultValue": null,
|
|
22
|
-
"description": "Initial theme preset. Defaults to the first registered manifest's name, or\n`\"cue\"` with nothing registered. Changing it after mount adopts the new value."
|
|
25
|
+
"description": "Initial theme preset. Defaults to the first registered manifest's name, or\n`\"cue\"` with nothing registered. Changing it after mount adopts the new value.",
|
|
26
|
+
"control": {
|
|
27
|
+
"kind": "string"
|
|
28
|
+
}
|
|
23
29
|
},
|
|
24
30
|
{
|
|
25
31
|
"name": "density",
|
|
26
32
|
"type": "\"normal\" | \"large\" | \"compact\" | \"ultra-compact\" | \"ultra-large\"",
|
|
27
33
|
"required": false,
|
|
28
34
|
"defaultValue": null,
|
|
29
|
-
"description": "Initial density level.\n\nDefaults to the rung the active theme's manifest names in\n`densities.default`, and to `\"compact\"` when it names none — spec §5's\nrule, and the same one `resolve()` applies when no rung is wanted, so a\ntheme opens on the rung it prefers whether it is read from JS or painted\nby its own stylesheet. Naming a rung here overrides that for every theme:\na consumer who named one named it deliberately.\n\nChanging it after mount adopts the new value; dropping it does not — a\nparent that stops naming a rung is not asking to move back to the theme's."
|
|
35
|
+
"description": "Initial density level.\n\nDefaults to the rung the active theme's manifest names in\n`densities.default`, and to `\"compact\"` when it names none — spec §5's\nrule, and the same one `resolve()` applies when no rung is wanted, so a\ntheme opens on the rung it prefers whether it is read from JS or painted\nby its own stylesheet. Naming a rung here overrides that for every theme:\na consumer who named one named it deliberately.\n\nChanging it after mount adopts the new value; dropping it does not — a\nparent that stops naming a rung is not asking to move back to the theme's.",
|
|
36
|
+
"control": {
|
|
37
|
+
"kind": "enum",
|
|
38
|
+
"members": [
|
|
39
|
+
"normal",
|
|
40
|
+
"large",
|
|
41
|
+
"compact",
|
|
42
|
+
"ultra-compact",
|
|
43
|
+
"ultra-large"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
30
46
|
},
|
|
31
47
|
{
|
|
32
48
|
"name": "mode",
|
|
33
49
|
"type": "\"system\" | \"dark\" | \"light\"",
|
|
34
50
|
"required": false,
|
|
35
51
|
"defaultValue": "dark",
|
|
36
|
-
"description": "Initial mode. Defaults to `\"dark\"`; `\"system\"` tracks `prefers-color-scheme`."
|
|
52
|
+
"description": "Initial mode. Defaults to `\"dark\"`; `\"system\"` tracks `prefers-color-scheme`.",
|
|
53
|
+
"control": {
|
|
54
|
+
"kind": "enum",
|
|
55
|
+
"members": [
|
|
56
|
+
"system",
|
|
57
|
+
"dark",
|
|
58
|
+
"light"
|
|
59
|
+
]
|
|
60
|
+
}
|
|
37
61
|
},
|
|
38
62
|
{
|
|
39
63
|
"name": "font",
|
|
40
64
|
"type": "\"source\" | \"system\" | \"geist\" | \"inter\" | \"plex\" | \"roboto\" | \"apple\" | \"office\"",
|
|
41
65
|
"required": false,
|
|
42
66
|
"defaultValue": null,
|
|
43
|
-
"description": "Initial font pairing.\n\nDefaults to the pairing the active theme's manifest names in\n`fontPairings.default` — §5's rule, the density prop's rule one axis over\n— and to `\"system\"` when it names none: the platform's own faces, nothing\ndownloaded, and the theme keeps whatever monospace it authored.\n\nA pairing that needs delivering is a set of *names*: this library ships no\nfont files, and a pairing nobody delivers falls through its stack to the\nplatform rather than failing. See `FONT_PAIRINGS[font].faces` for the\ncustom properties an app assigns to make one resolve.\n\n**Root-level only.** There is no font island: a nested provider forwards\nthis axis to the root, ignores this prop, and its `setFont` drives the root.\nA page that changed face halfway down is a page with a bug, and a specimen\nthat genuinely wants one — a picker row, a docs page showing all eight —\nneeds nothing from this library but `data-font` on a `<div>`."
|
|
67
|
+
"description": "Initial font pairing.\n\nDefaults to the pairing the active theme's manifest names in\n`fontPairings.default` — §5's rule, the density prop's rule one axis over\n— and to `\"system\"` when it names none: the platform's own faces, nothing\ndownloaded, and the theme keeps whatever monospace it authored.\n\nA pairing that needs delivering is a set of *names*: this library ships no\nfont files, and a pairing nobody delivers falls through its stack to the\nplatform rather than failing. See `FONT_PAIRINGS[font].faces` for the\ncustom properties an app assigns to make one resolve.\n\n**Root-level only.** There is no font island: a nested provider forwards\nthis axis to the root, ignores this prop, and its `setFont` drives the root.\nA page that changed face halfway down is a page with a bug, and a specimen\nthat genuinely wants one — a picker row, a docs page showing all eight —\nneeds nothing from this library but `data-font` on a `<div>`.",
|
|
68
|
+
"control": {
|
|
69
|
+
"kind": "enum",
|
|
70
|
+
"members": [
|
|
71
|
+
"source",
|
|
72
|
+
"system",
|
|
73
|
+
"geist",
|
|
74
|
+
"inter",
|
|
75
|
+
"plex",
|
|
76
|
+
"roboto",
|
|
77
|
+
"apple",
|
|
78
|
+
"office"
|
|
79
|
+
]
|
|
80
|
+
}
|
|
44
81
|
},
|
|
45
82
|
{
|
|
46
83
|
"name": "fontScale",
|
|
47
84
|
"type": "number",
|
|
48
85
|
"required": false,
|
|
49
86
|
"defaultValue": "1",
|
|
50
|
-
"description": "Multiplier on every text token, published as `--cue-font-scale`. Defaults to `1`."
|
|
87
|
+
"description": "Multiplier on every text token, published as `--cue-font-scale`. Defaults to `1`.",
|
|
88
|
+
"control": {
|
|
89
|
+
"kind": "number"
|
|
90
|
+
}
|
|
51
91
|
},
|
|
52
92
|
{
|
|
53
93
|
"name": "fontFamilies",
|
|
54
94
|
"type": "FontFamilies",
|
|
55
95
|
"required": false,
|
|
56
96
|
"defaultValue": null,
|
|
57
|
-
"description": "Optional app-owned font stacks, published as inline CUE font custom properties."
|
|
97
|
+
"description": "Optional app-owned font stacks, published as inline CUE font custom properties.",
|
|
98
|
+
"control": {
|
|
99
|
+
"kind": "opaque"
|
|
100
|
+
}
|
|
58
101
|
},
|
|
59
102
|
{
|
|
60
103
|
"name": "overrides",
|
|
61
104
|
"type": "TokenOverrides",
|
|
62
105
|
"required": false,
|
|
63
106
|
"defaultValue": null,
|
|
64
|
-
"description": "Typed token edits layered over the active theme: colours per mode, geometry\nper rung, and the three font stacks.\n\nFor the band of edits that sit below \"publish a theme package\": one accent\nfor a tenant, a stack the app already loads, a rung with two more pixels in\na touch build. Anything larger belongs in a `@cueplusplus/theme-<name>`\npackage, where a build measures it; anything smaller than this is a\n`!important` in a stray stylesheet, which outranks the token layer\neverywhere at once.\n\n**Colours and fonts are inline on this element**, so they inherit down the\nsubtree, beat every stylesheet without `!important`, and are re-stamped\nonto portal containers — which mount on `<body>` and inherit nothing from\nhere. They do not leak *out* of this provider: a nested provider's colour\nedit is scoped to its own subtree, and to portals opened from inside it.\n\n**Densities are one document-scoped `<style>` element**, because a rung is\nselected by attribute rather than inherited, and because\n`useControlHeight()`'s measuring probe hangs off `document.body`, where\na subtree-scoped rule would not reach it — leaving the measured height and\nthe painted control disagreeing by exactly the override. The consequence is\nworth knowing before you nest one: a nested provider's `densities` edit\nreaches the whole page, exactly as a theme's own rung rules do. Colours and\nfonts in the same object do not.\n\nAnd it cuts the other way as well, which is the half that surprises: two\nproviders editing the same rung produce two document-scoped rules of equal\nspecificity, so the **later** one in document order wins everywhere — and\nthe later one is the outer provider's, because a nested provider renders\ninside it. A nested `densities` edit does not merely leak out; an ancestor\nthat edits the same rung overrules it *inside the nested subtree too*. If\nan island needs geometry of its own, it needs a rung of its own — a name no\nancestor is editing — not the same rung with different numbers.\n\nIts rules are `[data-density=\"x\"][data-density=\"x\"]` — (0,2,0), tying a\ntheme's own `[data-theme=\"t\"] [data-density=\"x\"]` and winning on source\norder — so the precedence is: **`overrides`, then the configurator's\npersisted snapshot, then the theme, then base.**\n\n**A font override shadows the pairing for this subtree.** `data-font` is\nthe document's axis and this element deliberately never restates it (see\nthe note by `stamp` below), but `overrides.fonts` writes the resolved\n`--cue-font-*` properties directly, which is a stronger claim than the\nattribute and is the point: this is how an app says \"this product's face,\nwhatever pairing the visitor picked\".\n\nIn development the resulting palette is measured, and any required contrast\npair the edit broke — or made worse — is named on the console."
|
|
107
|
+
"description": "Typed token edits layered over the active theme: colours per mode, geometry\nper rung, and the three font stacks.\n\nFor the band of edits that sit below \"publish a theme package\": one accent\nfor a tenant, a stack the app already loads, a rung with two more pixels in\na touch build. Anything larger belongs in a `@cueplusplus/theme-<name>`\npackage, where a build measures it; anything smaller than this is a\n`!important` in a stray stylesheet, which outranks the token layer\neverywhere at once.\n\n**Colours and fonts are inline on this element**, so they inherit down the\nsubtree, beat every stylesheet without `!important`, and are re-stamped\nonto portal containers — which mount on `<body>` and inherit nothing from\nhere. They do not leak *out* of this provider: a nested provider's colour\nedit is scoped to its own subtree, and to portals opened from inside it.\n\n**Densities are one document-scoped `<style>` element**, because a rung is\nselected by attribute rather than inherited, and because\n`useControlHeight()`'s measuring probe hangs off `document.body`, where\na subtree-scoped rule would not reach it — leaving the measured height and\nthe painted control disagreeing by exactly the override. The consequence is\nworth knowing before you nest one: a nested provider's `densities` edit\nreaches the whole page, exactly as a theme's own rung rules do. Colours and\nfonts in the same object do not.\n\nAnd it cuts the other way as well, which is the half that surprises: two\nproviders editing the same rung produce two document-scoped rules of equal\nspecificity, so the **later** one in document order wins everywhere — and\nthe later one is the outer provider's, because a nested provider renders\ninside it. A nested `densities` edit does not merely leak out; an ancestor\nthat edits the same rung overrules it *inside the nested subtree too*. If\nan island needs geometry of its own, it needs a rung of its own — a name no\nancestor is editing — not the same rung with different numbers.\n\nIts rules are `[data-density=\"x\"][data-density=\"x\"]` — (0,2,0), tying a\ntheme's own `[data-theme=\"t\"] [data-density=\"x\"]` and winning on source\norder — so the precedence is: **`overrides`, then the configurator's\npersisted snapshot, then the theme, then base.**\n\n**A font override shadows the pairing for this subtree.** `data-font` is\nthe document's axis and this element deliberately never restates it (see\nthe note by `stamp` below), but `overrides.fonts` writes the resolved\n`--cue-font-*` properties directly, which is a stronger claim than the\nattribute and is the point: this is how an app says \"this product's face,\nwhatever pairing the visitor picked\".\n\nIn development the resulting palette is measured, and any required contrast\npair the edit broke — or made worse — is named on the console.",
|
|
108
|
+
"control": {
|
|
109
|
+
"kind": "opaque"
|
|
110
|
+
}
|
|
65
111
|
},
|
|
66
112
|
{
|
|
67
113
|
"name": "storageKey",
|
|
68
114
|
"type": "string",
|
|
69
115
|
"required": false,
|
|
70
116
|
"defaultValue": "cue-ui",
|
|
71
|
-
"description": "localStorage key holding `{ theme, density, font, mode }`. Defaults to `\"cue-ui\"`.\nOnly the outermost provider reads or writes it — a nested provider is an\nisland whose explicit props are the point, not a second preference store."
|
|
117
|
+
"description": "localStorage key holding `{ theme, density, font, mode }`. Defaults to `\"cue-ui\"`.\nOnly the outermost provider reads or writes it — a nested provider is an\nisland whose explicit props are the point, not a second preference store.",
|
|
118
|
+
"control": {
|
|
119
|
+
"kind": "string"
|
|
120
|
+
}
|
|
72
121
|
},
|
|
73
122
|
{
|
|
74
123
|
"name": "persistPreferences",
|
|
75
124
|
"type": "boolean",
|
|
76
125
|
"required": false,
|
|
77
126
|
"defaultValue": "true",
|
|
78
|
-
"description": "Restore and write root preferences in localStorage. Defaults to `true`."
|
|
127
|
+
"description": "Restore and write root preferences in localStorage. Defaults to `true`.",
|
|
128
|
+
"control": {
|
|
129
|
+
"kind": "boolean"
|
|
130
|
+
}
|
|
79
131
|
},
|
|
80
132
|
{
|
|
81
133
|
"name": "asChild",
|
|
82
134
|
"type": "boolean",
|
|
83
135
|
"required": false,
|
|
84
136
|
"defaultValue": "false",
|
|
85
|
-
"description": "Stamp the single child element instead of rendering a wrapper `<div>`."
|
|
137
|
+
"description": "Stamp the single child element instead of rendering a wrapper `<div>`.",
|
|
138
|
+
"control": {
|
|
139
|
+
"kind": "boolean"
|
|
140
|
+
}
|
|
86
141
|
},
|
|
87
142
|
{
|
|
88
143
|
"name": "className",
|
|
89
144
|
"type": "string",
|
|
90
145
|
"required": false,
|
|
91
146
|
"defaultValue": null,
|
|
92
|
-
"description": "Extra classes for the provider root."
|
|
147
|
+
"description": "Extra classes for the provider root.",
|
|
148
|
+
"control": {
|
|
149
|
+
"kind": "string"
|
|
150
|
+
}
|
|
93
151
|
},
|
|
94
152
|
{
|
|
95
153
|
"name": "style",
|
|
96
154
|
"type": "CSSProperties",
|
|
97
155
|
"required": false,
|
|
98
156
|
"defaultValue": null,
|
|
99
|
-
"description": "Inline styles for the provider root, merged after the token style."
|
|
157
|
+
"description": "Inline styles for the provider root, merged after the token style.",
|
|
158
|
+
"control": {
|
|
159
|
+
"kind": "opaque"
|
|
160
|
+
}
|
|
100
161
|
},
|
|
101
162
|
{
|
|
102
163
|
"name": "children",
|
|
103
164
|
"type": "ReactNode",
|
|
104
165
|
"required": false,
|
|
105
166
|
"defaultValue": null,
|
|
106
|
-
"description": "The application subtree."
|
|
167
|
+
"description": "The application subtree.",
|
|
168
|
+
"control": {
|
|
169
|
+
"kind": "node",
|
|
170
|
+
"fixture": "children.text"
|
|
171
|
+
}
|
|
107
172
|
}
|
|
108
173
|
],
|
|
109
174
|
"typeReferences": [],
|
|
@@ -112,7 +177,6 @@
|
|
|
112
177
|
"variants": {},
|
|
113
178
|
"defaultVariants": {},
|
|
114
179
|
"tokensUsed": [
|
|
115
|
-
"--cue-font-",
|
|
116
180
|
"--cue-font-mono",
|
|
117
181
|
"--cue-font-sans",
|
|
118
182
|
"--cue-font-scale"
|
|
@@ -12,14 +12,20 @@
|
|
|
12
12
|
"type": "string",
|
|
13
13
|
"required": true,
|
|
14
14
|
"defaultValue": null,
|
|
15
|
-
"description": "What the agent is doing right now. Swapping it replays the entrance animation."
|
|
15
|
+
"description": "What the agent is doing right now. Swapping it replays the entrance animation.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "string"
|
|
18
|
+
}
|
|
16
19
|
},
|
|
17
20
|
{
|
|
18
21
|
"name": "elapsed",
|
|
19
22
|
"type": "string",
|
|
20
23
|
"required": false,
|
|
21
24
|
"defaultValue": null,
|
|
22
|
-
"description": "Elapsed time rendered in mono next to the label. Omit to hide the timer."
|
|
25
|
+
"description": "Elapsed time rendered in mono next to the label. Omit to hide the timer.",
|
|
26
|
+
"control": {
|
|
27
|
+
"kind": "string"
|
|
28
|
+
}
|
|
23
29
|
}
|
|
24
30
|
],
|
|
25
31
|
"typeReferences": [
|