@cueplusplus/ui 0.13.0 → 0.14.1
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 +307 -0
- package/README.md +2 -19
- package/dist/index.d.ts +2 -2
- package/dist/layout/frames.d.ts +19 -1
- package/dist/layout/frames.js +21 -7
- package/dist/layout/index.d.ts +2 -2
- package/dist/primitives/chip.d.ts +1 -1
- package/dist/system/theme-provider.d.ts +46 -1
- package/dist/system/theme-provider.js +29 -3
- package/manifest/components/accordion.json +16 -4
- package/manifest/components/activity-graph.json +15 -3
- package/manifest/components/agent-card.json +15 -3
- package/manifest/components/agent-handoff.json +14 -3
- package/manifest/components/agent-mode-badge.json +12 -3
- package/manifest/components/agent-pile.json +13 -3
- package/manifest/components/agent-plan.json +13 -3
- package/manifest/components/agent-status.json +14 -3
- package/manifest/components/agent-surface.json +12 -3
- package/manifest/components/alert-dialog.json +14 -3
- package/manifest/components/animated-number.json +12 -3
- package/manifest/components/app-window-frame.json +13 -3
- package/manifest/components/approval-card.json +14 -3
- package/manifest/components/artifact-card.json +14 -3
- package/manifest/components/ask-box.json +13 -3
- package/manifest/components/audience-icon.json +11 -3
- package/manifest/components/autocomplete.json +15 -3
- package/manifest/components/avatar-group.json +15 -4
- package/manifest/components/avatar.json +16 -4
- package/manifest/components/background-inbox.json +14 -3
- package/manifest/components/band.json +14 -4
- package/manifest/components/breadcrumb.json +14 -3
- package/manifest/components/button-group.json +13 -3
- package/manifest/components/calendar.json +15 -4
- package/manifest/components/canvas-split-body.json +13 -3
- package/manifest/components/canvas-split-document.json +11 -3
- package/manifest/components/canvas-split-header.json +13 -3
- package/manifest/components/canvas-split-line.json +13 -3
- package/manifest/components/canvas-split-message.json +13 -3
- package/manifest/components/canvas-split-thread.json +11 -3
- package/manifest/components/canvas-split.json +13 -3
- package/manifest/components/card.json +14 -3
- package/manifest/components/carousel.json +12 -3
- package/manifest/components/catalogue-icon.json +11 -3
- package/manifest/components/channel-beta-icon.json +11 -3
- package/manifest/components/channel-matrix.json +11 -3
- package/manifest/components/channel-released-icon.json +11 -3
- package/manifest/components/chart-container.json +11 -3
- package/manifest/components/chart-ramp.json +12 -3
- package/manifest/components/chart-swatch.json +11 -3
- package/manifest/components/chart-tooltip-content.json +12 -4
- package/manifest/components/chart.json +14 -3
- package/manifest/components/chat-empty-state.json +13 -3
- package/manifest/components/chat-panel-assistant-message.json +11 -3
- package/manifest/components/chat-panel-composer.json +11 -3
- package/manifest/components/chat-panel-messages.json +11 -3
- package/manifest/components/chat-panel-typing.json +11 -3
- package/manifest/components/chat-panel-user-message.json +11 -3
- package/manifest/components/chat-panel.json +13 -3
- package/manifest/components/checkbox-group.json +15 -4
- package/manifest/components/checkpoint-history.json +13 -3
- package/manifest/components/clamp.json +12 -3
- package/manifest/components/cli-tool-icon.json +11 -3
- package/manifest/components/code-diff.json +14 -3
- package/manifest/components/code-runner.json +13 -3
- package/manifest/components/collapsible.json +13 -3
- package/manifest/components/color-area.json +12 -4
- package/manifest/components/color-field.json +12 -3
- package/manifest/components/color-picker.json +14 -4
- package/manifest/components/color-slider.json +12 -3
- package/manifest/components/color-swatch.json +13 -3
- package/manifest/components/colors-section.json +11 -3
- package/manifest/components/combobox.json +15 -4
- package/manifest/components/compaction-row.json +12 -3
- package/manifest/components/comparison-card.json +12 -3
- package/manifest/components/composer-actions.json +11 -3
- package/manifest/components/composer-attach-button.json +11 -3
- package/manifest/components/composer-attachment-chip.json +13 -3
- package/manifest/components/composer-attachments.json +11 -3
- package/manifest/components/composer-bar.json +12 -3
- package/manifest/components/composer-command-item.json +13 -3
- package/manifest/components/composer-context.json +13 -3
- package/manifest/components/composer-input.json +11 -3
- package/manifest/components/composer-menu-item.json +12 -3
- package/manifest/components/composer-menu.json +13 -3
- package/manifest/components/composer-model-item.json +13 -3
- package/manifest/components/composer-model-trigger.json +13 -3
- package/manifest/components/composer-person-item.json +13 -3
- package/manifest/components/composer-send.json +13 -3
- package/manifest/components/composer-toolbar.json +11 -3
- package/manifest/components/composer-voice-button.json +11 -3
- package/manifest/components/composer-voice.json +13 -3
- package/manifest/components/composer.json +14 -4
- package/manifest/components/computer-use.json +13 -3
- package/manifest/components/confidence-marker.json +11 -3
- package/manifest/components/connection-state.json +12 -3
- package/manifest/components/container.json +12 -3
- package/manifest/components/context-breakdown.json +12 -4
- package/manifest/components/context-menu.json +14 -4
- package/manifest/components/context-usage.json +14 -4
- package/manifest/components/conversation-search.json +13 -3
- package/manifest/components/copy-button.json +14 -3
- package/manifest/components/cost-meter.json +12 -3
- package/manifest/components/cue-portal-frame.json +12 -3
- package/manifest/components/data-table-pagination.json +13 -3
- package/manifest/components/data-table-toolbar.json +12 -3
- package/manifest/components/date-field.json +12 -3
- package/manifest/components/date-picker.json +13 -3
- package/manifest/components/date-range-picker.json +11 -3
- package/manifest/components/day-separator.json +12 -3
- package/manifest/components/delegation-card.json +14 -4
- package/manifest/components/density.json +12 -2
- package/manifest/components/description-list.json +15 -4
- package/manifest/components/diagram.json +13 -3
- package/manifest/components/disclosure.json +15 -4
- package/manifest/components/dmx-bar.json +12 -3
- package/manifest/components/dmx-strip.json +11 -3
- package/manifest/components/document-reference.json +13 -3
- package/manifest/components/draft-restore.json +13 -3
- package/manifest/components/drawer.json +13 -4
- package/manifest/components/edit-message.json +13 -3
- package/manifest/components/elements-command-palette.json +13 -3
- package/manifest/components/elements-composer.json +13 -3
- package/manifest/components/elements-data-table.json +11 -3
- package/manifest/components/elements-timeline.json +13 -3
- package/manifest/components/elicitation-form.json +13 -3
- package/manifest/components/empty-state-composer.json +11 -3
- package/manifest/components/empty-state-greeting.json +11 -3
- package/manifest/components/empty-state-suggestion.json +11 -3
- package/manifest/components/empty-state-suggestions.json +11 -3
- package/manifest/components/empty-state.json +15 -4
- package/manifest/components/end-of-turn-summary.json +14 -3
- package/manifest/components/env-var-input.json +15 -4
- package/manifest/components/error-state.json +13 -3
- package/manifest/components/export-dialog.json +10 -2
- package/manifest/components/eyebrow.json +14 -4
- package/manifest/components/feedback-dialog.json +13 -3
- package/manifest/components/field-description.json +15 -4
- package/manifest/components/field-error.json +15 -4
- package/manifest/components/field-label.json +15 -4
- package/manifest/components/file-tree.json +13 -3
- package/manifest/components/file-upload.json +14 -4
- package/manifest/components/flow-background.json +11 -3
- package/manifest/components/flow-controls.json +11 -3
- package/manifest/components/flow-graph.json +13 -3
- package/manifest/components/folder-icon.json +12 -3
- package/manifest/components/frac.json +11 -3
- package/manifest/components/frames.json +14 -0
- package/manifest/components/generation-loader.json +13 -3
- package/manifest/components/generative-ui.json +16 -4
- package/manifest/components/grid.json +14 -3
- package/manifest/components/group-bar.json +13 -3
- package/manifest/components/guardrail-notice.json +13 -3
- package/manifest/components/hover-card.json +14 -4
- package/manifest/components/icon-button.json +15 -3
- package/manifest/components/image-generation.json +13 -3
- package/manifest/components/info-tip.json +15 -4
- package/manifest/components/inline-citation.json +13 -3
- package/manifest/components/input-group.json +15 -4
- package/manifest/components/item.json +15 -4
- package/manifest/components/job-progress.json +14 -3
- package/manifest/components/kbd.json +14 -3
- package/manifest/components/launcher-bubble.json +14 -3
- package/manifest/components/link.json +13 -3
- package/manifest/components/live-region-announcer.json +16 -4
- package/manifest/components/log-viewer.json +15 -3
- package/manifest/components/map-answer.json +13 -3
- package/manifest/components/markdown-text.json +16 -4
- package/manifest/components/math-block.json +13 -3
- package/manifest/components/mcp-server-icon.json +12 -3
- package/manifest/components/mcp-server-panel.json +13 -3
- package/manifest/components/memory-chips.json +12 -3
- package/manifest/components/menubar.json +13 -3
- package/manifest/components/message-actions.json +14 -4
- package/manifest/components/message-attachments.json +12 -3
- package/manifest/components/message-branches.json +12 -3
- package/manifest/components/message-list.json +12 -3
- package/manifest/components/message-pair.json +12 -3
- package/manifest/components/message-queue.json +13 -3
- package/manifest/components/message-timing.json +13 -3
- package/manifest/components/message.json +12 -3
- package/manifest/components/mobile-composer.json +14 -3
- package/manifest/components/model-picker.json +12 -3
- package/manifest/components/multi-select.json +16 -4
- package/manifest/components/musical-time-input.json +11 -3
- package/manifest/components/navigation-menu.json +13 -3
- package/manifest/components/node-card.json +11 -3
- package/manifest/components/node-handle.json +11 -3
- package/manifest/components/number-field.json +15 -3
- package/manifest/components/number-ticker.json +12 -3
- package/manifest/components/onboarding.json +12 -3
- package/manifest/components/otp-field.json +14 -3
- package/manifest/components/page-shell.json +14 -4
- package/manifest/components/pagination.json +14 -3
- package/manifest/components/panel-header.json +14 -4
- package/manifest/components/password-input.json +15 -4
- package/manifest/components/permission-grant.json +13 -3
- package/manifest/components/permission-scopes.json +14 -3
- package/manifest/components/piano-keyboard.json +11 -3
- package/manifest/components/preset-section.json +11 -3
- package/manifest/components/progress.json +14 -3
- package/manifest/components/prompt-library.json +12 -3
- package/manifest/components/queue-dock.json +14 -3
- package/manifest/components/quota-banner.json +12 -3
- package/manifest/components/quote-reply.json +12 -3
- package/manifest/components/radio-group.json +15 -4
- package/manifest/components/radio.json +15 -4
- package/manifest/components/rating.json +15 -4
- package/manifest/components/read-aloud.json +13 -3
- package/manifest/components/reasoning-effort.json +12 -3
- package/manifest/components/reasoning-panel.json +13 -3
- package/manifest/components/recommendation-card.json +12 -3
- package/manifest/components/regenerate-menu.json +12 -3
- package/manifest/components/replay-player.json +14 -3
- package/manifest/components/research-report.json +12 -3
- package/manifest/components/resizable.json +13 -3
- package/manifest/components/retrieval-chunks.json +13 -3
- package/manifest/components/revert-dock.json +14 -3
- package/manifest/components/reviewable-diff.json +12 -3
- package/manifest/components/risk-badge.json +14 -3
- package/manifest/components/schedule-card.json +12 -3
- package/manifest/components/score-breakdown.json +13 -3
- package/manifest/components/scroll-anchor.json +12 -3
- package/manifest/components/scroll-area.json +13 -3
- package/manifest/components/scrollable-tabs-list.json +14 -4
- package/manifest/components/seam-cell.json +13 -4
- package/manifest/components/seam-grid.json +14 -3
- package/manifest/components/seam-list.json +13 -3
- package/manifest/components/search-input.json +15 -4
- package/manifest/components/section-header.json +14 -3
- package/manifest/components/segmented-control.json +15 -3
- package/manifest/components/separator.json +14 -3
- package/manifest/components/settings-panel.json +13 -3
- package/manifest/components/shape-section.json +11 -3
- package/manifest/components/shared-conversation.json +12 -3
- package/manifest/components/sheet.json +14 -4
- package/manifest/components/shimmer-label.json +12 -3
- package/manifest/components/sidebar.json +15 -4
- package/manifest/components/signal-edge.json +13 -4
- package/manifest/components/skeleton.json +16 -4
- package/manifest/components/skill-icon.json +12 -3
- package/manifest/components/slider.json +14 -3
- package/manifest/components/sources.json +12 -3
- package/manifest/components/sparkline.json +14 -4
- package/manifest/components/speaker-identity.json +11 -3
- package/manifest/components/spec-sheet.json +13 -4
- package/manifest/components/spectrum-visualizer.json +11 -3
- package/manifest/components/spinner.json +16 -4
- package/manifest/components/stack-icon.json +12 -3
- package/manifest/components/stack.json +14 -3
- package/manifest/components/stacks-matrix-icon.json +11 -3
- package/manifest/components/stat.json +14 -3
- package/manifest/components/status-dot.json +16 -4
- package/manifest/components/stepper.json +15 -4
- package/manifest/components/stopped-run.json +13 -4
- package/manifest/components/streaming-text.json +12 -3
- package/manifest/components/sub.json +11 -3
- package/manifest/components/subagent-list.json +13 -3
- package/manifest/components/suggestions.json +12 -3
- package/manifest/components/sup.json +11 -3
- package/manifest/components/swap-label.json +12 -3
- package/manifest/components/tags-input.json +15 -4
- package/manifest/components/tail-status.json +14 -3
- package/manifest/components/terminal-block.json +13 -3
- package/manifest/components/terminal-frame.json +14 -3
- package/manifest/components/textarea.json +15 -4
- package/manifest/components/theme-configurator.json +12 -3
- package/manifest/components/theme-provider.json +10 -0
- package/manifest/components/thinking-indicator.json +12 -3
- package/manifest/components/thread-list.json +12 -3
- package/manifest/components/thread-search.json +12 -3
- package/manifest/components/threshold-rail.json +13 -3
- package/manifest/components/time-boundary.json +13 -3
- package/manifest/components/time-field.json +15 -4
- package/manifest/components/timeline-ruler.json +13 -3
- package/manifest/components/timeline.json +13 -3
- package/manifest/components/title-bar.json +13 -3
- package/manifest/components/todo-list.json +12 -3
- package/manifest/components/toggle-group.json +15 -4
- package/manifest/components/toggle.json +15 -4
- package/manifest/components/token-editor.json +12 -3
- package/manifest/components/tool-call.json +13 -3
- package/manifest/components/tool-error.json +14 -4
- package/manifest/components/tool-group.json +12 -3
- package/manifest/components/tool-timeline.json +14 -4
- package/manifest/components/toolbar.json +14 -4
- package/manifest/components/trace-waterfall.json +12 -3
- package/manifest/components/tree-visibility-toggle.json +13 -3
- package/manifest/components/tree.json +14 -3
- package/manifest/components/turn-footer.json +14 -3
- package/manifest/components/two-step-button.json +14 -3
- package/manifest/components/typing-indicator.json +12 -3
- package/manifest/components/universe-grid.json +14 -4
- package/manifest/components/unread-divider.json +14 -4
- package/manifest/components/usage-chart.json +14 -3
- package/manifest/components/verdict-row.json +14 -3
- package/manifest/components/voice-conversation.json +13 -3
- package/manifest/components/web-preview.json +13 -3
- package/manifest/components/web-search.json +13 -3
- package/manifest/components/work-collapse.json +15 -4
- package/manifest/manifest.json +651 -651
- package/manifest/tokens.json +1 -1
- package/package.json +5 -5
|
@@ -66,10 +66,21 @@
|
|
|
66
66
|
"language": "tsx"
|
|
67
67
|
}
|
|
68
68
|
],
|
|
69
|
-
"status": "
|
|
69
|
+
"status": "stable",
|
|
70
70
|
"url": "/docs/components/flow-graph",
|
|
71
71
|
"mdUrl": "/docs/components/flow-graph.md",
|
|
72
72
|
"jsonUrl": "/r/components/flow-graph.json",
|
|
73
|
+
"whenToUse": [
|
|
74
|
+
"Work that branches and rejoins, where a list would lose the shape.",
|
|
75
|
+
"A graph drawn progressively, where an edge stays dim until both of its ends have been reached."
|
|
76
|
+
],
|
|
77
|
+
"whenNotToUse": [
|
|
78
|
+
"A graph you want laid out for you. Layout is explicit and the element runs no solver."
|
|
79
|
+
],
|
|
80
|
+
"commonMistakes": [
|
|
81
|
+
"Leaving grid positions off the nodes. Every node carries its own, because nothing solves the layout.",
|
|
82
|
+
"Wondering why an edge is dim. An edge dims until both of its ends are visible, which `visibleCount` controls."
|
|
83
|
+
],
|
|
73
84
|
"specimens": [
|
|
74
85
|
{
|
|
75
86
|
"title": "FlowGraph",
|
|
@@ -81,6 +92,5 @@
|
|
|
81
92
|
"note": "Work as a graph rather than a list, for the runs that fan out and rejoin — here the two trusses are patched in parallel and the render waits for both. Layout is explicit: every node carries its own column and row and the element runs no solver, which is what keeps a re-render from rearranging a diagram somebody was reading.",
|
|
82
93
|
"interaction": "none. `visibleCount` is what makes the graph arrive a node at a time, and an edge stays dim until both of its ends have been reached."
|
|
83
94
|
}
|
|
84
|
-
]
|
|
85
|
-
"todo": true
|
|
95
|
+
]
|
|
86
96
|
}
|
|
@@ -17,10 +17,20 @@
|
|
|
17
17
|
"tokensUsed": [],
|
|
18
18
|
"summary": "A folder somebody made: a shelf of bookmarks, filed by hand.",
|
|
19
19
|
"examples": [],
|
|
20
|
-
"status": "
|
|
20
|
+
"status": "stable",
|
|
21
21
|
"url": "/docs/components/folder-icon",
|
|
22
22
|
"mdUrl": "/docs/components/folder-icon.md",
|
|
23
23
|
"jsonUrl": "/r/components/folder-icon.json",
|
|
24
|
+
"whenToUse": [
|
|
25
|
+
"A collection a person curated deliberately."
|
|
26
|
+
],
|
|
27
|
+
"whenNotToUse": [
|
|
28
|
+
"A result set a query returned. The tab is what says a person put these here on purpose.",
|
|
29
|
+
"An audience. Use `AudienceIcon` — its members are people, not artefacts."
|
|
30
|
+
],
|
|
31
|
+
"commonMistakes": [
|
|
32
|
+
"Replacing it with a plain rounded box, which in this library is a panel, a card or a dialog — and which drops the one thing a folder has to say."
|
|
33
|
+
],
|
|
24
34
|
"specimens": [
|
|
25
35
|
{
|
|
26
36
|
"title": "The container icon set",
|
|
@@ -41,6 +51,5 @@
|
|
|
41
51
|
"note": "One grid and one weight across all ten, at size-icon-md — the size a navigation row draws them at. Each is a plain <svg> that takes every SVG prop.",
|
|
42
52
|
"interaction": "none. They are decorative by default: aria-hidden, announced by nothing, because the row they mark already carries its name."
|
|
43
53
|
}
|
|
44
|
-
]
|
|
45
|
-
"todo": true
|
|
54
|
+
]
|
|
46
55
|
}
|
|
@@ -45,10 +45,19 @@
|
|
|
45
45
|
],
|
|
46
46
|
"summary": "A fraction inside an expression — numerator, rule, denominator — set inline and aligned to the middle.",
|
|
47
47
|
"examples": [],
|
|
48
|
-
"status": "
|
|
48
|
+
"status": "stable",
|
|
49
49
|
"url": "/docs/components/frac",
|
|
50
50
|
"mdUrl": "/docs/components/frac.md",
|
|
51
51
|
"jsonUrl": "/r/components/frac.json",
|
|
52
|
+
"whenToUse": [
|
|
53
|
+
"A fraction set inside a line of an expression."
|
|
54
|
+
],
|
|
55
|
+
"whenNotToUse": [
|
|
56
|
+
"A display-sized equation of its own. This sets inline and aligns to the middle of the line."
|
|
57
|
+
],
|
|
58
|
+
"commonMistakes": [
|
|
59
|
+
"Writing the fraction as text with a slash instead of passing `over` and `under`, which loses the rule and the middle alignment."
|
|
60
|
+
],
|
|
52
61
|
"specimens": [
|
|
53
62
|
{
|
|
54
63
|
"title": "MathBlock",
|
|
@@ -63,6 +72,5 @@
|
|
|
63
72
|
"note": "Maths with the working shown, a step at a time. The expressions are nodes rather than a string, so there is no parser and no KaTeX in the bundle — `Frac` stacks a numerator over a rule, `Sup` and `Sub` set an index upright inside the serif italic, and anything else is text.",
|
|
64
73
|
"interaction": "none. Each step's note says what justified it, which is what turns three lines of algebra into an explanation."
|
|
65
74
|
}
|
|
66
|
-
]
|
|
67
|
-
"todo": true
|
|
75
|
+
]
|
|
68
76
|
}
|
|
@@ -88,6 +88,20 @@
|
|
|
88
88
|
"control": {
|
|
89
89
|
"kind": "boolean"
|
|
90
90
|
}
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "layout",
|
|
94
|
+
"type": "\"column\" | \"board\"",
|
|
95
|
+
"required": false,
|
|
96
|
+
"defaultValue": "board",
|
|
97
|
+
"description": "How the frames are arranged. Defaults to `\"board\"`.\n\n`\"board\"` is the original: a short, wide, sideways scroller a reader drags\nthrough — right where the frames are a set you *browse*, on a homepage wall\nor a design surface.\n\n`\"column\"` stacks them one under the next, each at the full width it is\ngiven, and the canvas grows to whatever it holds. It exists for the page\nthat *reads*: a documentation page scrolls vertically already, and asking a\nreader to pan a second axis to reach the fifth variant of a component —\nwith that fifth variant clipped at the board's edge until they do — hides\nthe examples behind an interaction. A column has no fixed height, so\n`height` is ignored, and nothing pans, so `pan` and `hint` are moot.",
|
|
98
|
+
"control": {
|
|
99
|
+
"kind": "enum",
|
|
100
|
+
"members": [
|
|
101
|
+
"column",
|
|
102
|
+
"board"
|
|
103
|
+
]
|
|
104
|
+
}
|
|
91
105
|
}
|
|
92
106
|
],
|
|
93
107
|
"typeReferences": [
|
|
@@ -58,10 +58,21 @@
|
|
|
58
58
|
],
|
|
59
59
|
"summary": "The wait before there is anything to show.",
|
|
60
60
|
"examples": [],
|
|
61
|
-
"status": "
|
|
61
|
+
"status": "stable",
|
|
62
62
|
"url": "/docs/components/generation-loader",
|
|
63
63
|
"mdUrl": "/docs/components/generation-loader.md",
|
|
64
64
|
"jsonUrl": "/r/components/generation-loader.json",
|
|
65
|
+
"whenToUse": [
|
|
66
|
+
"The gap before the model has produced anything at all, under a shimmering status label.",
|
|
67
|
+
"A replay you can pause: the caller advances `tick`, so a paused replay pauses the loader too."
|
|
68
|
+
],
|
|
69
|
+
"whenNotToUse": [
|
|
70
|
+
"Work with named stages and an estimate. This is the empty wait, not a progress bar."
|
|
71
|
+
],
|
|
72
|
+
"commonMistakes": [
|
|
73
|
+
"Expecting it to animate on its own. `tick` drives both the pixel pattern and the elapsed seconds counter.",
|
|
74
|
+
"Leaving it on screen once content arrives. It is for the wait before there is anything to show."
|
|
75
|
+
],
|
|
65
76
|
"specimens": [
|
|
66
77
|
{
|
|
67
78
|
"title": "GenerationLoader",
|
|
@@ -73,6 +84,5 @@
|
|
|
73
84
|
"note": "The wait before there is anything at all to show. Nine cells keep time under a shimmering label, driven by a tick the caller advances — so a paused replay pauses the loader too, which a CSS animation could never do. The three variants are three shapes for the same clock.",
|
|
74
85
|
"interaction": "none. The matrix is aria-hidden; the label is the only thing a screen reader gets, which is the right amount."
|
|
75
86
|
}
|
|
76
|
-
]
|
|
77
|
-
"todo": true
|
|
87
|
+
]
|
|
78
88
|
}
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"variants": {},
|
|
98
98
|
"defaultVariants": {},
|
|
99
99
|
"tokensUsed": [],
|
|
100
|
-
"summary": "The vocabulary a model composes at runtime.",
|
|
100
|
+
"summary": "The vocabulary a model composes at runtime: a JSON tree of intrinsic names, turned into elements.",
|
|
101
101
|
"examples": [
|
|
102
102
|
{
|
|
103
103
|
"title": "Usage",
|
|
@@ -105,10 +105,23 @@
|
|
|
105
105
|
"language": "tsx"
|
|
106
106
|
}
|
|
107
107
|
],
|
|
108
|
-
"status": "
|
|
108
|
+
"status": "stable",
|
|
109
109
|
"url": "/docs/components/generative-ui",
|
|
110
110
|
"mdUrl": "/docs/components/generative-ui.md",
|
|
111
111
|
"jsonUrl": "/r/components/generative-ui.json",
|
|
112
|
+
"whenToUse": [
|
|
113
|
+
"Rendering a component tree a language model emitted as JSON, where there is no compile step between the two and there cannot be one.",
|
|
114
|
+
"A widget that has to draw inside somebody else's console: the stylesheet is plain `[data-aui]` CSS and the tree it draws carries no `class` attribute anywhere."
|
|
115
|
+
],
|
|
116
|
+
"whenNotToUse": [
|
|
117
|
+
"A tree a programmer wrote. Every other component in the library is handed props at a call site, where a wrong one costs a type error.",
|
|
118
|
+
"Markdown you expect parsed. This subpath ships no parser and will not acquire one — pass `renderMarkdown`, which is shaped for `@cueplusplus/ui/elements/markdown`."
|
|
119
|
+
],
|
|
120
|
+
"commonMistakes": [
|
|
121
|
+
"Casting the parsed tool result to `GenerativeNode` before passing it. `spec` is `unknown` on purpose, because a cast is a claim about the bytes that nobody is in a position to make.",
|
|
122
|
+
"Wrapping it in an error boundary and expecting throws. It never throws: an unknown `$type` draws an in-place notice and its siblings still render, a spec that is not a tree draws a legible error state rather than a blank box, and a tree past `GENERATIVE_MAX_DEPTH` stops and says so.",
|
|
123
|
+
"Passing `skin` and `fidelity` inside an `AgentSurface`, which has already stamped the subtree and whose values inherit through CSS with nothing threaded."
|
|
124
|
+
],
|
|
112
125
|
"specimens": [
|
|
113
126
|
{
|
|
114
127
|
"title": "GenerativeUI",
|
|
@@ -120,6 +133,5 @@
|
|
|
120
133
|
"note": "The one component here nobody wrote props for. A model emits a tree of 27 intrinsic names as JSON and this draws it, with no compile step in between and none possible, so the specimens are the spec objects themselves: a dashboard the model composed out of facts, a chart and a table; a patch form whose confirm hands back every named field at once; and a chart on its own. The last two are wrong on purpose. A $type from a newer catalogue draws an in-place notice and its siblings still render; a spec that is not a tree at all draws a legible error rather than the blank box that reads as a message still streaming. Neither throws, which is the whole contract. It draws from plain [data-aui] CSS with no utilities and no icon or chart package behind it, because the console a model is talking to is usually somebody else's app.",
|
|
121
134
|
"interaction": "every control is a real control and takes the house focus ring; text fires on blur rather than per keystroke, since $action is a message to the model. The form specimen is live: submit it and the model's own card gains a success alert with what the desk received."
|
|
122
135
|
}
|
|
123
|
-
]
|
|
124
|
-
"todo": true
|
|
136
|
+
]
|
|
125
137
|
}
|
|
@@ -112,10 +112,22 @@
|
|
|
112
112
|
"language": "tsx"
|
|
113
113
|
}
|
|
114
114
|
],
|
|
115
|
-
"status": "
|
|
115
|
+
"status": "stable",
|
|
116
116
|
"url": "/docs/components/grid",
|
|
117
117
|
"mdUrl": "/docs/components/grid.md",
|
|
118
118
|
"jsonUrl": "/r/components/grid.json",
|
|
119
|
+
"whenToUse": [
|
|
120
|
+
"A card grid, a tile wall, any set of peers laid out in both directions.",
|
|
121
|
+
"Responsive column counts without media queries: give `minItemWidth` and let it fit as many as it can."
|
|
122
|
+
],
|
|
123
|
+
"whenNotToUse": [
|
|
124
|
+
"A single row or column. Use `Stack`.",
|
|
125
|
+
"A table. Use the data-table instruments, which carry the semantics a grid of divs cannot."
|
|
126
|
+
],
|
|
127
|
+
"commonMistakes": [
|
|
128
|
+
"Setting `cols` and `minItemWidth` together and expecting both to apply.",
|
|
129
|
+
"Hand-picking the gap. It is a rung of the density ladder for the same reason `Stack`'s is — a card grid should tighten with the rest of the console."
|
|
130
|
+
],
|
|
119
131
|
"specimens": [
|
|
120
132
|
{
|
|
121
133
|
"title": "Grid",
|
|
@@ -127,6 +139,5 @@
|
|
|
127
139
|
"note": "Fixed columns, or auto-fit from a minimum item width.",
|
|
128
140
|
"interaction": "none."
|
|
129
141
|
}
|
|
130
|
-
]
|
|
131
|
-
"todo": true
|
|
142
|
+
]
|
|
132
143
|
}
|
|
@@ -102,10 +102,21 @@
|
|
|
102
102
|
"language": "tsx"
|
|
103
103
|
}
|
|
104
104
|
],
|
|
105
|
-
"status": "
|
|
105
|
+
"status": "stable",
|
|
106
106
|
"url": "/docs/components/group-bar",
|
|
107
107
|
"mdUrl": "/docs/components/group-bar.md",
|
|
108
108
|
"jsonUrl": "/r/components/group-bar.json",
|
|
109
|
+
"whenToUse": [
|
|
110
|
+
"A breakdown where the proportions are the reading and exact numbers are not.",
|
|
111
|
+
"Anywhere a stacked bar should carry no axis — the shape is the answer."
|
|
112
|
+
],
|
|
113
|
+
"whenNotToUse": [
|
|
114
|
+
"Values that must be compared precisely. Use a table or a labelled chart.",
|
|
115
|
+
"A single value against a maximum. Use `Progress`."
|
|
116
|
+
],
|
|
117
|
+
"commonMistakes": [
|
|
118
|
+
"Rendering zero-valued groups. Empty groups get no cell: a minimum width is what makes a two-pixel sliver visible, and a minimum width on a zero draws a group that is not there."
|
|
119
|
+
],
|
|
109
120
|
"specimens": [
|
|
110
121
|
{
|
|
111
122
|
"title": "GroupBar",
|
|
@@ -117,6 +128,5 @@
|
|
|
117
128
|
"note": "The distribution strip: one flex cell per item, coloured by tone, with a legend that names each share.",
|
|
118
129
|
"interaction": "none. It is a picture of a breakdown, and the legend is the text version of it."
|
|
119
130
|
}
|
|
120
|
-
]
|
|
121
|
-
"todo": true
|
|
131
|
+
]
|
|
122
132
|
}
|
|
@@ -89,10 +89,21 @@
|
|
|
89
89
|
"language": "tsx"
|
|
90
90
|
}
|
|
91
91
|
],
|
|
92
|
-
"status": "
|
|
92
|
+
"status": "stable",
|
|
93
93
|
"url": "/docs/components/guardrail-notice",
|
|
94
94
|
"mdUrl": "/docs/components/guardrail-notice.md",
|
|
95
95
|
"jsonUrl": "/r/components/guardrail-notice.json",
|
|
96
|
+
"whenToUse": [
|
|
97
|
+
"A refusal that should say where the line actually sits and offer the nearest things it can do."
|
|
98
|
+
],
|
|
99
|
+
"whenNotToUse": [
|
|
100
|
+
"A failure the system could simply try again.",
|
|
101
|
+
"A refusal with no rule behind it. `policy` is a required short label for the rule that applied."
|
|
102
|
+
],
|
|
103
|
+
"commonMistakes": [
|
|
104
|
+
"Writing an apology into `title`. It is the refusal in one line, stated plainly rather than apologetically.",
|
|
105
|
+
"Omitting `alternatives` to hide the section. Pass an empty array; it is a required prop."
|
|
106
|
+
],
|
|
96
107
|
"specimens": [
|
|
97
108
|
{
|
|
98
109
|
"title": "GuardrailNotice",
|
|
@@ -104,6 +115,5 @@
|
|
|
104
115
|
"note": "A refusal in its own shape: what it will not do, why, the rule that applied, and the nearest things it *can* do. The alternatives are the whole point — a refusal that ends at 'no' hands the work back with nothing attached, and this one hands back three next moves.",
|
|
105
116
|
"interaction": "each alternative is a button reporting its own text to `onPick`. With an empty list the section disappears rather than leaving an empty rule."
|
|
106
117
|
}
|
|
107
|
-
]
|
|
108
|
-
"todo": true
|
|
118
|
+
]
|
|
109
119
|
}
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
"--cue-text-label",
|
|
162
162
|
"--cue-text-ui"
|
|
163
163
|
],
|
|
164
|
-
"summary": "A richer preview than a tooltip, revealed by hovering a link or a name
|
|
164
|
+
"summary": "A richer preview than a tooltip, revealed by hovering a link or a name.",
|
|
165
165
|
"examples": [
|
|
166
166
|
{
|
|
167
167
|
"title": "Usage",
|
|
@@ -169,10 +169,21 @@
|
|
|
169
169
|
"language": "tsx"
|
|
170
170
|
}
|
|
171
171
|
],
|
|
172
|
-
"status": "
|
|
172
|
+
"status": "stable",
|
|
173
173
|
"url": "/docs/components/hover-card",
|
|
174
174
|
"mdUrl": "/docs/components/hover-card.md",
|
|
175
175
|
"jsonUrl": "/r/components/hover-card.json",
|
|
176
|
+
"whenToUse": [
|
|
177
|
+
"A preview the pointer can travel into — the fixture behind a profile string, the operator behind an initial.",
|
|
178
|
+
"Content with its own links or controls."
|
|
179
|
+
],
|
|
180
|
+
"whenNotToUse": [
|
|
181
|
+
"A short description of a control. Use `Tooltip`, which is announced as the trigger's description.",
|
|
182
|
+
"Anything that must be reachable by keyboard alone. Hover is the trigger."
|
|
183
|
+
],
|
|
184
|
+
"commonMistakes": [
|
|
185
|
+
"Using it as a big tooltip. It is deliberately not one: the card is reachable and its content is not announced as the trigger's description."
|
|
186
|
+
],
|
|
176
187
|
"specimens": [
|
|
177
188
|
{
|
|
178
189
|
"title": "HoverCard",
|
|
@@ -184,6 +195,5 @@
|
|
|
184
195
|
"note": "A preview card: richer than a tooltip, and never the only way to reach the information.",
|
|
185
196
|
"interaction": "opens on hover after a delay and on focus; the card itself is hoverable, so a link inside it is reachable."
|
|
186
197
|
}
|
|
187
|
-
]
|
|
188
|
-
"todo": true
|
|
198
|
+
]
|
|
189
199
|
}
|
|
@@ -86,10 +86,23 @@
|
|
|
86
86
|
"language": "tsx"
|
|
87
87
|
}
|
|
88
88
|
],
|
|
89
|
-
"status": "
|
|
89
|
+
"status": "stable",
|
|
90
90
|
"url": "/docs/components/icon-button",
|
|
91
91
|
"mdUrl": "/docs/components/icon-button.md",
|
|
92
92
|
"jsonUrl": "/r/components/icon-button.json",
|
|
93
|
+
"whenToUse": [
|
|
94
|
+
"A control whose meaning is carried by a familiar glyph in a place with no room for a label: a close, a copy, a kebab menu.",
|
|
95
|
+
"A dense toolbar where visible rims would be noise. The default `ghost` variant stays invisible until hovered."
|
|
96
|
+
],
|
|
97
|
+
"whenNotToUse": [
|
|
98
|
+
"An action whose icon is not unambiguous on its own. Use `Button` with `icon` and real text.",
|
|
99
|
+
"A destructive action that deserves confirmation in place. Use `TwoStepButton`."
|
|
100
|
+
],
|
|
101
|
+
"commonMistakes": [
|
|
102
|
+
"Treating `aria-label` as optional because the icon 'obviously' means close. It is required, and it is the only name the control has.",
|
|
103
|
+
"Putting a title or tooltip on the icon instead of labelling the button. The tooltip is a hint; the label is the accessible name.",
|
|
104
|
+
"Wrapping the icon in extra sizing markup. Pass the component to `icon` and it is rendered `aria-hidden` at the right rung."
|
|
105
|
+
],
|
|
93
106
|
"specimens": [
|
|
94
107
|
{
|
|
95
108
|
"title": "IconButton",
|
|
@@ -101,6 +114,5 @@
|
|
|
101
114
|
"note": "A square button with a required accessible name. There is no unlabelled variant.",
|
|
102
115
|
"interaction": "same ring as Button; the hit target stays at the control height even when the glyph shrinks."
|
|
103
116
|
}
|
|
104
|
-
]
|
|
105
|
-
"todo": true
|
|
117
|
+
]
|
|
106
118
|
}
|
|
@@ -53,10 +53,21 @@
|
|
|
53
53
|
"language": "tsx"
|
|
54
54
|
}
|
|
55
55
|
],
|
|
56
|
-
"status": "
|
|
56
|
+
"status": "stable",
|
|
57
57
|
"url": "/docs/components/image-generation",
|
|
58
58
|
"mdUrl": "/docs/components/image-generation.md",
|
|
59
59
|
"jsonUrl": "/r/components/image-generation.json",
|
|
60
|
+
"whenToUse": [
|
|
61
|
+
"An image being generated, where the frame should hold its size before there is anything in it.",
|
|
62
|
+
"A result that should stay tied to its prompt, which is printed under the frame."
|
|
63
|
+
],
|
|
64
|
+
"whenNotToUse": [
|
|
65
|
+
"An image that already exists and has no generating phase."
|
|
66
|
+
],
|
|
67
|
+
"commonMistakes": [
|
|
68
|
+
"Leaving `generating` true after the image lands, which keeps a pulsing dot grid over a finished picture.",
|
|
69
|
+
"Dropping the prompt. It is shown under the frame, and it is what ties the result back to what was asked."
|
|
70
|
+
],
|
|
60
71
|
"specimens": [
|
|
61
72
|
{
|
|
62
73
|
"title": "ImageGeneration",
|
|
@@ -68,6 +79,5 @@
|
|
|
68
79
|
"note": "A dot grid holds the square while the image resolves out of a blur — the frame is the right size from the first frame, so nothing below it moves when the picture lands. While generating, the prompt is replaced by a shimmering label; when it settles, the prompt is what is left under the image.",
|
|
69
80
|
"interaction": "regenerate is a labelled icon button. The grid and the image are both `aria-hidden`: the prompt underneath is the description, and a decorative placeholder should not be announced as a picture."
|
|
70
81
|
}
|
|
71
|
-
]
|
|
72
|
-
"todo": true
|
|
82
|
+
]
|
|
73
83
|
}
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"--cue-font-mono",
|
|
105
105
|
"--cue-text-micro"
|
|
106
106
|
],
|
|
107
|
-
"summary": "The 13px circular
|
|
107
|
+
"summary": "The 13px circular 'i' badge: a footnote marker for a field, a column or a number.",
|
|
108
108
|
"examples": [
|
|
109
109
|
{
|
|
110
110
|
"title": "Usage",
|
|
@@ -112,10 +112,22 @@
|
|
|
112
112
|
"language": "tsx"
|
|
113
113
|
}
|
|
114
114
|
],
|
|
115
|
-
"status": "
|
|
115
|
+
"status": "stable",
|
|
116
116
|
"url": "/docs/components/info-tip",
|
|
117
117
|
"mdUrl": "/docs/components/info-tip.md",
|
|
118
118
|
"jsonUrl": "/r/components/info-tip.json",
|
|
119
|
+
"whenToUse": [
|
|
120
|
+
"A definition that is not obvious and does not deserve permanent space.",
|
|
121
|
+
"Anywhere the explanation must be reachable from the keyboard — it is a real `<button>`."
|
|
122
|
+
],
|
|
123
|
+
"whenNotToUse": [
|
|
124
|
+
"Text the reader needs. Use `FieldDescription`; a footnote most people never open is the wrong home for a requirement.",
|
|
125
|
+
"A control's name. Use a label."
|
|
126
|
+
],
|
|
127
|
+
"commonMistakes": [
|
|
128
|
+
"Rebuilding it as a `<span>` with a hover handler, which puts the explanation out of keyboard reach.",
|
|
129
|
+
"Filling it with a paragraph. It is a footnote marker, not a panel."
|
|
130
|
+
],
|
|
119
131
|
"specimens": [
|
|
120
132
|
{
|
|
121
133
|
"title": "Tooltip / InfoTip",
|
|
@@ -128,6 +140,5 @@
|
|
|
128
140
|
"note": "A tooltip names a control; an InfoTip is the 13px `i` badge that explains one.",
|
|
129
141
|
"interaction": "tooltips open on hover and on keyboard focus, and never on touch; the InfoTip badge is a real button."
|
|
130
142
|
}
|
|
131
|
-
]
|
|
132
|
-
"todo": true
|
|
143
|
+
]
|
|
133
144
|
}
|
|
@@ -70,10 +70,21 @@
|
|
|
70
70
|
"language": "tsx"
|
|
71
71
|
}
|
|
72
72
|
],
|
|
73
|
-
"status": "
|
|
73
|
+
"status": "stable",
|
|
74
74
|
"url": "/docs/components/inline-citation",
|
|
75
75
|
"mdUrl": "/docs/components/inline-citation.md",
|
|
76
76
|
"jsonUrl": "/r/components/inline-citation.json",
|
|
77
|
+
"whenToUse": [
|
|
78
|
+
"Numbered markers set in a sentence, each previewing the source behind it.",
|
|
79
|
+
"A preview that carries the source's domain, title and snippet without leaving the sentence."
|
|
80
|
+
],
|
|
81
|
+
"whenNotToUse": [
|
|
82
|
+
"A standalone source card outside a sentence. These markers live inline."
|
|
83
|
+
],
|
|
84
|
+
"commonMistakes": [
|
|
85
|
+
"Using `-1` for closed. `openIndex` is `number | null`, and `null` is the closed value.",
|
|
86
|
+
"Leaving `onOpenIndexChange` off. It is required, because which preview is open is state you hold rather than state the element keeps."
|
|
87
|
+
],
|
|
77
88
|
"specimens": [
|
|
78
89
|
{
|
|
79
90
|
"title": "InlineCitation",
|
|
@@ -85,6 +96,5 @@
|
|
|
85
96
|
"note": "The marker inside the sentence, rather than the list under it: a numbered chip the paragraph flows around, and behind each one the page it stands on. `Sources` is the bibliography; this is the footnote, and the two are meant to be read together — the chip says a claim is attributable without spending a clause saying so.",
|
|
86
97
|
"interaction": "each marker is a button, so the preview is reachable from a keyboard as well as a pointer; the open one inverts to the accent fill. The card is the family's one portal, and it carries the island stamp — opened inside an `AgentSurface`, it paints in that island's values rather than the document's."
|
|
87
98
|
}
|
|
88
|
-
]
|
|
89
|
-
"todo": true
|
|
99
|
+
]
|
|
90
100
|
}
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"--cue-text-label",
|
|
85
85
|
"--cue-text-ui"
|
|
86
86
|
],
|
|
87
|
-
"summary": "A control and its adornments, drawn as a single field.",
|
|
87
|
+
"summary": "A control and its adornments, drawn as a single field — one rim, one fill, however many affordances.",
|
|
88
88
|
"examples": [
|
|
89
89
|
{
|
|
90
90
|
"title": "Usage",
|
|
@@ -92,10 +92,22 @@
|
|
|
92
92
|
"language": "tsx"
|
|
93
93
|
}
|
|
94
94
|
],
|
|
95
|
-
"status": "
|
|
95
|
+
"status": "stable",
|
|
96
96
|
"url": "/docs/components/input-group",
|
|
97
97
|
"mdUrl": "/docs/components/input-group.md",
|
|
98
98
|
"jsonUrl": "/r/components/input-group.json",
|
|
99
|
+
"whenToUse": [
|
|
100
|
+
"A prefix or suffix that belongs to the field: a unit, a currency, a copy button, a scheme.",
|
|
101
|
+
"Anywhere two controls must read as one: the group owns the chassis and publishes that through context."
|
|
102
|
+
],
|
|
103
|
+
"whenNotToUse": [
|
|
104
|
+
"Two independent fields. Give them their own rims; a shared one says they are one value.",
|
|
105
|
+
"A label. Use `FieldLabel`; `leading` is part of the control, not its name."
|
|
106
|
+
],
|
|
107
|
+
"commonMistakes": [
|
|
108
|
+
"Styling the `Input` inside. It strips its own border, background, height and padding by design and inherits the group's font size — restyling it puts the rim back and breaks the single-field illusion.",
|
|
109
|
+
"Assuming focus styling comes free. A `<div>` matches neither `:focus` nor `:focus-visible`, which is why the group handles it; do not reimplement it with `:focus-within`."
|
|
110
|
+
],
|
|
99
111
|
"specimens": [
|
|
100
112
|
{
|
|
101
113
|
"title": "InputGroup",
|
|
@@ -107,6 +119,5 @@
|
|
|
107
119
|
"note": "One rim around a control and its adornments, so the group focuses as a unit.",
|
|
108
120
|
"interaction": "any focus inside strengthens the whole rim; the ring waits for a keyboard-visible descendant, so a click on an adornment does not light the cluster up. The inner control never rings — the group owns the rim."
|
|
109
121
|
}
|
|
110
|
-
]
|
|
111
|
-
"todo": true
|
|
122
|
+
]
|
|
112
123
|
}
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
"--cue-text-label",
|
|
136
136
|
"--cue-text-ui"
|
|
137
137
|
],
|
|
138
|
-
"summary": "One thing in a list, with room for a glyph, a name, a line of detail and a control
|
|
138
|
+
"summary": "One thing in a list, with room for a glyph, a name, a line of detail and a control.",
|
|
139
139
|
"examples": [
|
|
140
140
|
{
|
|
141
141
|
"title": "Usage",
|
|
@@ -143,10 +143,22 @@
|
|
|
143
143
|
"language": "tsx"
|
|
144
144
|
}
|
|
145
145
|
],
|
|
146
|
-
"status": "
|
|
146
|
+
"status": "stable",
|
|
147
147
|
"url": "/docs/components/item",
|
|
148
148
|
"mdUrl": "/docs/components/item.md",
|
|
149
149
|
"jsonUrl": "/r/components/item.json",
|
|
150
|
+
"whenToUse": [
|
|
151
|
+
"A settings entry, a search hit, a device row — a self-contained object that can stand alone, sit in a `Stack` or fill a `Grid` cell.",
|
|
152
|
+
"Anything clickable: it renders a real `<button>` when interactive, so keyboard users get it for free."
|
|
153
|
+
],
|
|
154
|
+
"whenNotToUse": [
|
|
155
|
+
"A line of a hairline table. Use `Row` — that is a row of a grid, this is an object.",
|
|
156
|
+
"A whole summary surface. Use `Card`."
|
|
157
|
+
],
|
|
158
|
+
"commonMistakes": [
|
|
159
|
+
"Wrapping a non-interactive `Item` in a `<div onClick>`. Pass `interactive` and let it be a button.",
|
|
160
|
+
"Putting the control inside `children` instead of `actions`, which loses the reserved slot and the alignment with every other row."
|
|
161
|
+
],
|
|
150
162
|
"specimens": [
|
|
151
163
|
{
|
|
152
164
|
"title": "Item",
|
|
@@ -158,6 +170,5 @@
|
|
|
158
170
|
"note": "A media, title, description and actions row. Three variants, plus interactive and disabled.",
|
|
159
171
|
"interaction": "the interactive variant takes a hover ground and a focus ring; it is a button, so Enter and Space activate it."
|
|
160
172
|
}
|
|
161
|
-
]
|
|
162
|
-
"todo": true
|
|
173
|
+
]
|
|
163
174
|
}
|
|
@@ -96,10 +96,22 @@
|
|
|
96
96
|
"language": "tsx"
|
|
97
97
|
}
|
|
98
98
|
],
|
|
99
|
-
"status": "
|
|
99
|
+
"status": "stable",
|
|
100
100
|
"url": "/docs/components/job-progress",
|
|
101
101
|
"mdUrl": "/docs/components/job-progress.md",
|
|
102
102
|
"jsonUrl": "/r/components/job-progress.json",
|
|
103
|
+
"whenToUse": [
|
|
104
|
+
"Long work with named stages, where a long install should not read the same as a fast clone.",
|
|
105
|
+
"Anything a person may need to abandon — `onCancel` is the way out, and it hides once the job finishes."
|
|
106
|
+
],
|
|
107
|
+
"whenNotToUse": [
|
|
108
|
+
"A wait short enough that stages and an estimate are noise."
|
|
109
|
+
],
|
|
110
|
+
"commonMistakes": [
|
|
111
|
+
"Giving every stage the same weight, which is exactly what the relative weights exist to avoid.",
|
|
112
|
+
"Special-casing the finished state. Passing `stages.length` as `stageIndex` marks the job finished, and the bar never runs past its track.",
|
|
113
|
+
"Passing a duration object to `eta`. It is a pre-formatted estimate, replaced by done once finished."
|
|
114
|
+
],
|
|
103
115
|
"specimens": [
|
|
104
116
|
{
|
|
105
117
|
"title": "JobProgress",
|
|
@@ -111,6 +123,5 @@
|
|
|
111
123
|
"note": "Work measured in minutes rather than steps. The stages are weighted, so a six-minute render does not read the same length as a one-second export, and the bar is filled from those weights plus the fraction of the current stage — which is why it never jumps backwards when a short stage ends.",
|
|
112
124
|
"interaction": "cancel is a labelled icon button and disappears once the job finishes: there is nothing left to stop, and a dead X beside a green tick reads as an error."
|
|
113
125
|
}
|
|
114
|
-
]
|
|
115
|
-
"todo": true
|
|
126
|
+
]
|
|
116
127
|
}
|
|
@@ -32,10 +32,22 @@
|
|
|
32
32
|
"language": "tsx"
|
|
33
33
|
}
|
|
34
34
|
],
|
|
35
|
-
"status": "
|
|
35
|
+
"status": "stable",
|
|
36
36
|
"url": "/docs/components/kbd",
|
|
37
37
|
"mdUrl": "/docs/components/kbd.md",
|
|
38
38
|
"jsonUrl": "/r/components/kbd.json",
|
|
39
|
+
"whenToUse": [
|
|
40
|
+
"Naming a shortcut in prose, a menu row or an empty state — reference material the reader's eye can skip.",
|
|
41
|
+
"Anywhere a `Chip` sits on the same row. It is sized off the chip height so the two line up."
|
|
42
|
+
],
|
|
43
|
+
"whenNotToUse": [
|
|
44
|
+
"A button. This is static markup that renders on the server and has no press behaviour.",
|
|
45
|
+
"A code fragment or a token name. Use inline code; a key cap says 'press this'."
|
|
46
|
+
],
|
|
47
|
+
"commonMistakes": [
|
|
48
|
+
"Building a chord out of one `Kbd` containing `⌘ + K`. Emit one per key and put the separator between them, so each cap reads as a key.",
|
|
49
|
+
"Reaching for it as a small badge. It is set in the micro type step on purpose; `Chip` is the badge."
|
|
50
|
+
],
|
|
39
51
|
"specimens": [
|
|
40
52
|
{
|
|
41
53
|
"title": "Kbd",
|
|
@@ -47,6 +59,5 @@
|
|
|
47
59
|
"note": "A key cap, in the mono face. Static markup, so it renders on the server.",
|
|
48
60
|
"interaction": "none."
|
|
49
61
|
}
|
|
50
|
-
]
|
|
51
|
-
"todo": true
|
|
62
|
+
]
|
|
52
63
|
}
|
|
@@ -110,10 +110,22 @@
|
|
|
110
110
|
"language": "tsx"
|
|
111
111
|
}
|
|
112
112
|
],
|
|
113
|
-
"status": "
|
|
113
|
+
"status": "stable",
|
|
114
114
|
"url": "/docs/components/launcher-bubble",
|
|
115
115
|
"mdUrl": "/docs/components/launcher-bubble.md",
|
|
116
116
|
"jsonUrl": "/r/components/launcher-bubble.json",
|
|
117
|
+
"whenToUse": [
|
|
118
|
+
"An assistant that lives in the corner of a product rather than owning the page: a bubble that opens into a greeting and a few ways in.",
|
|
119
|
+
"A first run with nothing typed yet — `prompts` exists so the first message does not have to be invented."
|
|
120
|
+
],
|
|
121
|
+
"whenNotToUse": [
|
|
122
|
+
"A launcher with no starters to offer. `prompts` is required, and an empty panel is the case the component is shaped against.",
|
|
123
|
+
"A panel whose open state lives inside it. `open` is required and the bubble only reports the press through `onToggle`."
|
|
124
|
+
],
|
|
125
|
+
"commonMistakes": [
|
|
126
|
+
"Driving `unread` to zero and expecting a `0` badge. It is hidden at zero, and hidden again the whole time the panel is open.",
|
|
127
|
+
"Wiring the panel's Start a conversation action to `onPick`. That callback fires only for a starter prompt; the empty thread is `onStart`."
|
|
128
|
+
],
|
|
117
129
|
"specimens": [
|
|
118
130
|
{
|
|
119
131
|
"title": "LauncherBubble",
|
|
@@ -125,6 +137,5 @@
|
|
|
125
137
|
"note": "The floating entry point and the panel it opens into — the shape an assistant takes on somebody else's site. The badge counts unread and disappears the moment the panel is open, because a count of things you are currently looking at is noise. The starter prompts exist so the first message does not have to be invented by a visitor who has no idea what this thing knows.",
|
|
126
138
|
"interaction": "the bubble carries `aria-expanded` and its label changes with it (`Open the assistant` / `Close the assistant`); the two icons cross-fade in one grid cell so nothing reflows."
|
|
127
139
|
}
|
|
128
|
-
]
|
|
129
|
-
"todo": true
|
|
140
|
+
]
|
|
130
141
|
}
|