@cueplusplus/ui 0.14.0 → 0.15.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 +340 -0
- package/dist/agent-runtime/tool-call-card.js +1 -1
- package/dist/chat/message.js +1 -1
- package/dist/chrome/band.js +10 -4
- package/dist/chrome/eyebrow.js +1 -1
- package/dist/chrome/footer.js +1 -1
- package/dist/chrome/section-header.js +1 -1
- package/dist/configurator/configurator.js +1 -1
- package/dist/configurator/export-dialog.js +1 -1
- package/dist/configurator/panel-sections.js +1 -1
- package/dist/configurator/token-editor.js +1 -1
- package/dist/date/calendar.js +2 -2
- package/dist/elements/context-usage.js +3 -3
- package/dist/elements/transcript-rules.js +1 -1
- package/dist/forms/field.js +1 -1
- package/dist/forms/slider.js +1 -1
- package/dist/instruments/code-block.js +1 -1
- package/dist/instruments/ledger.js +1 -1
- package/dist/instruments/progress.js +1 -1
- package/dist/instruments/stat.js +1 -1
- package/dist/instruments/table.js +2 -2
- package/dist/instruments/terminal-frame.js +1 -1
- package/dist/layout/_ground.js +1 -1
- package/dist/layout/collapsible.js +1 -1
- package/dist/layout/description-list.js +1 -1
- package/dist/layout/preview.d.ts +13 -1
- package/dist/layout/preview.js +16 -9
- package/dist/layout/sidebar.js +1 -1
- package/dist/layout/stepper.js +1 -1
- package/dist/overlays/_surface.d.ts +1 -1
- package/dist/overlays/_surface.js +1 -1
- package/dist/overlays/command-palette.js +1 -1
- package/dist/overlays/toast.js +1 -1
- package/dist/primitives/chip.d.ts +1 -1
- package/dist/primitives/chip.js +2 -2
- package/dist/system/density.d.ts +11 -2
- package/dist/system/density.js +29 -9
- package/dist/system/portal.js +8 -2
- package/dist/system/prepaint.d.ts +18 -1
- package/dist/system/prepaint.js +8 -2
- package/dist/system/theme-provider.d.ts +42 -5
- package/dist/system/theme-provider.js +84 -19
- package/dist/system/vocabulary.d.ts +1 -1
- package/dist/system/vocabulary.js +14 -2
- 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 +16 -4
- 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 +17 -4
- 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 +15 -5
- package/manifest/components/breadcrumb.json +14 -3
- package/manifest/components/button-group.json +13 -3
- package/manifest/components/calendar.json +18 -5
- 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 +13 -4
- 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 +14 -5
- 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/chip.json +1 -0
- package/manifest/components/clamp.json +12 -3
- package/manifest/components/cli-tool-icon.json +11 -3
- package/manifest/components/code-block.json +2 -1
- package/manifest/components/code-diff.json +14 -3
- package/manifest/components/code-runner.json +13 -3
- package/manifest/components/collapsible.json +15 -4
- 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 +13 -4
- package/manifest/components/combobox.json +17 -5
- package/manifest/components/command-palette.json +2 -1
- 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 +16 -5
- package/manifest/components/context-usage.json +15 -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 +25 -2
- package/manifest/components/description-list.json +17 -5
- package/manifest/components/diagram.json +13 -3
- package/manifest/components/dialog.json +2 -1
- package/manifest/components/disclosure.json +17 -5
- package/manifest/components/dmx-bar.json +14 -4
- package/manifest/components/dmx-strip.json +13 -4
- package/manifest/components/document-reference.json +13 -3
- package/manifest/components/draft-restore.json +13 -3
- package/manifest/components/drawer.json +15 -5
- package/manifest/components/dropdown-menu.json +2 -1
- 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 +12 -3
- package/manifest/components/eyebrow.json +16 -5
- package/manifest/components/feedback-dialog.json +13 -3
- package/manifest/components/field-description.json +17 -5
- package/manifest/components/field-error.json +17 -5
- package/manifest/components/field-label.json +17 -5
- package/manifest/components/field.json +2 -1
- 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/footer.json +1 -0
- package/manifest/components/frac.json +11 -3
- package/manifest/components/frames.json +2 -1
- 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 +16 -5
- 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/ledger.json +2 -1
- 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 +15 -4
- 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 +14 -4
- package/manifest/components/mobile-composer.json +14 -3
- package/manifest/components/model-picker.json +12 -3
- package/manifest/components/multi-select.json +18 -5
- package/manifest/components/musical-time-input.json +11 -3
- package/manifest/components/navigation-menu.json +15 -4
- 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/popover.json +2 -1
- package/manifest/components/preset-section.json +13 -4
- package/manifest/components/preview.json +15 -1
- package/manifest/components/progress.json +16 -4
- 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 +16 -4
- 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 +13 -4
- package/manifest/components/shared-conversation.json +12 -3
- package/manifest/components/sheet.json +16 -5
- package/manifest/components/shimmer-label.json +12 -3
- package/manifest/components/sidebar.json +17 -5
- 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 +16 -4
- 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 +15 -3
- package/manifest/components/status-dot.json +16 -4
- package/manifest/components/stepper.json +17 -5
- 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/table-scroll-region.json +2 -1
- package/manifest/components/table.json +2 -1
- package/manifest/components/tags-input.json +17 -5
- package/manifest/components/tail-status.json +14 -3
- package/manifest/components/terminal-block.json +13 -3
- package/manifest/components/terminal-frame.json +15 -3
- package/manifest/components/textarea.json +15 -4
- package/manifest/components/theme-configurator.json +14 -4
- package/manifest/components/theme-provider.json +14 -1
- 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 +15 -4
- 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/toast.json +2 -0
- 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 +14 -4
- package/manifest/components/tool-call-card.json +2 -1
- 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/tooltip.json +2 -1
- 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 +16 -5
- 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 +667 -667
- package/manifest/tokens.json +29 -2
- package/package.json +2 -2
|
@@ -39,10 +39,19 @@
|
|
|
39
39
|
],
|
|
40
40
|
"summary": "The paperclip, as a plus.",
|
|
41
41
|
"examples": [],
|
|
42
|
-
"status": "
|
|
42
|
+
"status": "stable",
|
|
43
43
|
"url": "/docs/components/composer-attach-button",
|
|
44
44
|
"mdUrl": "/docs/components/composer-attach-button.md",
|
|
45
45
|
"jsonUrl": "/r/components/composer-attach-button.json",
|
|
46
|
+
"whenToUse": [
|
|
47
|
+
"Opening a file picker from the composer toolbar."
|
|
48
|
+
],
|
|
49
|
+
"whenNotToUse": [
|
|
50
|
+
"An affordance with nothing behind it. With no handler it renders disabled."
|
|
51
|
+
],
|
|
52
|
+
"commonMistakes": [
|
|
53
|
+
"Rendering it without a handler and expecting it to stay live. It disables itself rather than rendering a control that does nothing."
|
|
54
|
+
],
|
|
46
55
|
"specimens": [
|
|
47
56
|
{
|
|
48
57
|
"title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
|
|
@@ -60,6 +69,5 @@
|
|
|
60
69
|
"note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
|
|
61
70
|
"interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
|
|
62
71
|
}
|
|
63
|
-
]
|
|
64
|
-
"todo": true
|
|
72
|
+
]
|
|
65
73
|
}
|
|
@@ -62,10 +62,21 @@
|
|
|
62
62
|
],
|
|
63
63
|
"summary": "One attached file as a chip: an icon for its kind, its name and size, and — while it uploads — a progress hairline along the bottom edge.",
|
|
64
64
|
"examples": [],
|
|
65
|
-
"status": "
|
|
65
|
+
"status": "stable",
|
|
66
66
|
"url": "/docs/components/composer-attachment-chip",
|
|
67
67
|
"mdUrl": "/docs/components/composer-attachment-chip.md",
|
|
68
68
|
"jsonUrl": "/r/components/composer-attachment-chip.json",
|
|
69
|
+
"whenToUse": [
|
|
70
|
+
"Each file attached to a message, including while it is still uploading.",
|
|
71
|
+
"A failed upload, which says so in its own meta line."
|
|
72
|
+
],
|
|
73
|
+
"whenNotToUse": [
|
|
74
|
+
"A file the model produced rather than one the person attached."
|
|
75
|
+
],
|
|
76
|
+
"commonMistakes": [
|
|
77
|
+
"Omitting `onRemove` and expecting a remove button. Without it a finished chip shows a tick instead.",
|
|
78
|
+
"Drawing your own progress bar. The hairline along the bottom edge is the upload progress."
|
|
79
|
+
],
|
|
69
80
|
"specimens": [
|
|
70
81
|
{
|
|
71
82
|
"title": "ComposerAttachments / ComposerAttachmentChip",
|
|
@@ -78,6 +89,5 @@
|
|
|
78
89
|
"note": "The rail above the input, and one chip per file. A chip carries its own state: uploading draws a hairline of progress along its bottom edge, done offers a remove button, and a failure says why in the line that would otherwise hold a size. The icon is the file's kind, not its extension, so an unknown type still lands on something.",
|
|
79
90
|
"interaction": "remove is a labelled icon button (`Remove front-truss.pdf`) and only exists on a finished chip — there is nothing to remove from an upload that has not landed, and a failed one is removed by fixing it."
|
|
80
91
|
}
|
|
81
|
-
]
|
|
82
|
-
"todo": true
|
|
92
|
+
]
|
|
83
93
|
}
|
|
@@ -39,10 +39,19 @@
|
|
|
39
39
|
],
|
|
40
40
|
"summary": "The rail the attachment chips wrap in, above the input.",
|
|
41
41
|
"examples": [],
|
|
42
|
-
"status": "
|
|
42
|
+
"status": "stable",
|
|
43
43
|
"url": "/docs/components/composer-attachments",
|
|
44
44
|
"mdUrl": "/docs/components/composer-attachments.md",
|
|
45
45
|
"jsonUrl": "/r/components/composer-attachments.json",
|
|
46
|
+
"whenToUse": [
|
|
47
|
+
"Holding the attachment chips above the composer input."
|
|
48
|
+
],
|
|
49
|
+
"whenNotToUse": [
|
|
50
|
+
"Controls that belong in the toolbar under the input."
|
|
51
|
+
],
|
|
52
|
+
"commonMistakes": [
|
|
53
|
+
"Laying the chips out with a flex row of your own, which drops the wrapping the rail already provides."
|
|
54
|
+
],
|
|
46
55
|
"specimens": [
|
|
47
56
|
{
|
|
48
57
|
"title": "ComposerAttachments / ComposerAttachmentChip",
|
|
@@ -55,6 +64,5 @@
|
|
|
55
64
|
"note": "The rail above the input, and one chip per file. A chip carries its own state: uploading draws a hairline of progress along its bottom edge, done offers a remove button, and a failure says why in the line that would otherwise hold a size. The icon is the file's kind, not its extension, so an unknown type still lands on something.",
|
|
56
65
|
"interaction": "remove is a labelled icon button (`Remove front-truss.pdf`) and only exists on a finished chip — there is nothing to remove from an upload that has not landed, and a failed one is removed by fixing it."
|
|
57
66
|
}
|
|
58
|
-
]
|
|
59
|
-
"todo": true
|
|
67
|
+
]
|
|
60
68
|
}
|
|
@@ -50,10 +50,20 @@
|
|
|
50
50
|
],
|
|
51
51
|
"summary": "The bar itself: the paper the input, the attachments and the toolbar sit on.",
|
|
52
52
|
"examples": [],
|
|
53
|
-
"status": "
|
|
53
|
+
"status": "stable",
|
|
54
54
|
"url": "/docs/components/composer-bar",
|
|
55
55
|
"mdUrl": "/docs/components/composer-bar.md",
|
|
56
56
|
"jsonUrl": "/r/components/composer-bar.json",
|
|
57
|
+
"whenToUse": [
|
|
58
|
+
"Wrapping the input, the attachment rail and the toolbar into one surface.",
|
|
59
|
+
"Signalling a drop target: `dragActive` tints the bar while a file is over it."
|
|
60
|
+
],
|
|
61
|
+
"whenNotToUse": [
|
|
62
|
+
"A control meant to sit outside the composer surface."
|
|
63
|
+
],
|
|
64
|
+
"commonMistakes": [
|
|
65
|
+
"Leaving `dragActive` unwired. The tint is the only feedback a drop target gets before the drop."
|
|
66
|
+
],
|
|
57
67
|
"specimens": [
|
|
58
68
|
{
|
|
59
69
|
"title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
|
|
@@ -71,6 +81,5 @@
|
|
|
71
81
|
"note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
|
|
72
82
|
"interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
|
|
73
83
|
}
|
|
74
|
-
]
|
|
75
|
-
"todo": true
|
|
84
|
+
]
|
|
76
85
|
}
|
|
@@ -60,10 +60,21 @@
|
|
|
60
60
|
],
|
|
61
61
|
"summary": "A slash command in the menu: its icon, `/name`, what it does, and the return key on the active row.",
|
|
62
62
|
"examples": [],
|
|
63
|
-
"status": "
|
|
63
|
+
"status": "stable",
|
|
64
64
|
"url": "/docs/components/composer-command-item",
|
|
65
65
|
"mdUrl": "/docs/components/composer-command-item.md",
|
|
66
66
|
"jsonUrl": "/r/components/composer-command-item.json",
|
|
67
|
+
"whenToUse": [
|
|
68
|
+
"Each slash command offered in the composer menu.",
|
|
69
|
+
"The row Enter would run, which is the one that carries the return key."
|
|
70
|
+
],
|
|
71
|
+
"whenNotToUse": [
|
|
72
|
+
"An entry that is not a runnable command. `command` takes a `ComposerCommand`."
|
|
73
|
+
],
|
|
74
|
+
"commonMistakes": [
|
|
75
|
+
"Marking more than one row `active`. It is the row Enter would run, so exactly one carries it.",
|
|
76
|
+
"Drawing the return key hint yourself. It already appears on the active row."
|
|
77
|
+
],
|
|
67
78
|
"specimens": [
|
|
68
79
|
{
|
|
69
80
|
"title": "ComposerMenu / useSlashMatches / useMentionMatches",
|
|
@@ -80,6 +91,5 @@
|
|
|
80
91
|
"note": "One input, two menus, and two hooks that decide which of them has anything to say. `useSlashMatches` answers only while the value starts with a slash; `useMentionMatches` only while the caret is inside a trailing @word — so an empty result is the menu's own instruction to stay shut. `applyMention` writes the choice back into the value, which is the one piece of text editing the family does for you. Type in either field below and the menu above it follows.",
|
|
81
92
|
"interaction": "the menu animates rather than mounting, so the caret never moves under it. A row is a button and takes cue's focus ring; the active one shows the return key it would answer to."
|
|
82
93
|
}
|
|
83
|
-
]
|
|
84
|
-
"todo": true
|
|
94
|
+
]
|
|
85
95
|
}
|
|
@@ -51,10 +51,21 @@
|
|
|
51
51
|
],
|
|
52
52
|
"summary": "The context-window dial in the toolbar, with the breakdown on hover or focus.",
|
|
53
53
|
"examples": [],
|
|
54
|
-
"status": "
|
|
54
|
+
"status": "stable",
|
|
55
55
|
"url": "/docs/components/composer-context",
|
|
56
56
|
"mdUrl": "/docs/components/composer-context.md",
|
|
57
57
|
"jsonUrl": "/r/components/composer-context.json",
|
|
58
|
+
"whenToUse": [
|
|
59
|
+
"Showing how much of the context window has gone, and where, from the composer toolbar.",
|
|
60
|
+
"A usage readout that has to stay reachable by keyboard, since the breakdown opens on hover or focus."
|
|
61
|
+
],
|
|
62
|
+
"whenNotToUse": [
|
|
63
|
+
"A generic progress meter. It is shaped around a `ComposerUsage` breakdown."
|
|
64
|
+
],
|
|
65
|
+
"commonMistakes": [
|
|
66
|
+
"Adding a warning threshold of your own. It turns danger-coloured past 85%, which is the point where the next long tool result starts costing the conversation its own history.",
|
|
67
|
+
"Treating the dial as decoration and putting the breakdown out of keyboard reach. It opens on hover or focus."
|
|
68
|
+
],
|
|
58
69
|
"specimens": [
|
|
59
70
|
{
|
|
60
71
|
"title": "ComposerContext",
|
|
@@ -66,6 +77,5 @@
|
|
|
66
77
|
"note": "The context window as a dial small enough to leave in the toolbar, with the arithmetic behind it on hover or focus. It turns the danger hue past 85% — the point where the next long tool result starts costing the conversation its own history rather than its headroom. Everything is in thousands of tokens and nothing is rounded here: the element divides, the caller counts.",
|
|
67
78
|
"interaction": "the dial is a labelled button (`Context usage`) and the breakdown opens on hover *or* focus-within, so it is reachable from the keyboard without a click target that does nothing."
|
|
68
79
|
}
|
|
69
|
-
]
|
|
70
|
-
"todo": true
|
|
80
|
+
]
|
|
71
81
|
}
|
|
@@ -51,10 +51,19 @@
|
|
|
51
51
|
],
|
|
52
52
|
"summary": "The text field.",
|
|
53
53
|
"examples": [],
|
|
54
|
-
"status": "
|
|
54
|
+
"status": "stable",
|
|
55
55
|
"url": "/docs/components/composer-input",
|
|
56
56
|
"mdUrl": "/docs/components/composer-input.md",
|
|
57
57
|
"jsonUrl": "/r/components/composer-input.json",
|
|
58
|
+
"whenToUse": [
|
|
59
|
+
"The message field of a composer, where Enter submits."
|
|
60
|
+
],
|
|
61
|
+
"whenNotToUse": [
|
|
62
|
+
"A field inside a multi-step form. Enter here sends the message."
|
|
63
|
+
],
|
|
64
|
+
"commonMistakes": [
|
|
65
|
+
"Adding your own Enter handler on top of it. Submission is already guarded against IME composition, so accepting a candidate does not send — a hand-rolled handler loses that."
|
|
66
|
+
],
|
|
58
67
|
"specimens": [
|
|
59
68
|
{
|
|
60
69
|
"title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
|
|
@@ -72,6 +81,5 @@
|
|
|
72
81
|
"note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
|
|
73
82
|
"interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
|
|
74
83
|
}
|
|
75
|
-
]
|
|
76
|
-
"todo": true
|
|
84
|
+
]
|
|
77
85
|
}
|
|
@@ -50,10 +50,20 @@
|
|
|
50
50
|
],
|
|
51
51
|
"summary": "One row of a `ComposerMenu`, and the chassis the command, person and model rows are built on.",
|
|
52
52
|
"examples": [],
|
|
53
|
-
"status": "
|
|
53
|
+
"status": "stable",
|
|
54
54
|
"url": "/docs/components/composer-menu-item",
|
|
55
55
|
"mdUrl": "/docs/components/composer-menu-item.md",
|
|
56
56
|
"jsonUrl": "/r/components/composer-menu-item.json",
|
|
57
|
+
"whenToUse": [
|
|
58
|
+
"A row in a `ComposerMenu` that none of the built rows already covers."
|
|
59
|
+
],
|
|
60
|
+
"whenNotToUse": [
|
|
61
|
+
"A command, a person or a model row, which are already built on this chassis."
|
|
62
|
+
],
|
|
63
|
+
"commonMistakes": [
|
|
64
|
+
"Using `active` for selection. It says where the keyboard is, not what has been chosen.",
|
|
65
|
+
"Rebuilding the command, person or model rows from scratch. They are already built on this chassis."
|
|
66
|
+
],
|
|
57
67
|
"specimens": [
|
|
58
68
|
{
|
|
59
69
|
"title": "ComposerMenu / useSlashMatches / useMentionMatches",
|
|
@@ -70,6 +80,5 @@
|
|
|
70
80
|
"note": "One input, two menus, and two hooks that decide which of them has anything to say. `useSlashMatches` answers only while the value starts with a slash; `useMentionMatches` only while the caret is inside a trailing @word — so an empty result is the menu's own instruction to stay shut. `applyMention` writes the choice back into the value, which is the one piece of text editing the family does for you. Type in either field below and the menu above it follows.",
|
|
71
81
|
"interaction": "the menu animates rather than mounting, so the caret never moves under it. A row is a button and takes cue's focus ring; the active one shows the return key it would answer to."
|
|
72
82
|
}
|
|
73
|
-
]
|
|
74
|
-
"todo": true
|
|
83
|
+
]
|
|
75
84
|
}
|
|
@@ -64,10 +64,21 @@
|
|
|
64
64
|
],
|
|
65
65
|
"summary": "The popover the slash and mention menus are drawn in, anchored above the bar.",
|
|
66
66
|
"examples": [],
|
|
67
|
-
"status": "
|
|
67
|
+
"status": "stable",
|
|
68
68
|
"url": "/docs/components/composer-menu",
|
|
69
69
|
"mdUrl": "/docs/components/composer-menu.md",
|
|
70
70
|
"jsonUrl": "/r/components/composer-menu.json",
|
|
71
|
+
"whenToUse": [
|
|
72
|
+
"Drawing the slash or mention menu over the composer.",
|
|
73
|
+
"Hanging the menu from either edge, with `align`."
|
|
74
|
+
],
|
|
75
|
+
"whenNotToUse": [
|
|
76
|
+
"A menu that must unmount when closed. Closed is animated out, not unmounted.",
|
|
77
|
+
"A menu that should hang below the input. It is anchored above the bar."
|
|
78
|
+
],
|
|
79
|
+
"commonMistakes": [
|
|
80
|
+
"Conditionally rendering it instead of toggling `open`. It animates open rather than mounting, so the caret never moves under it."
|
|
81
|
+
],
|
|
71
82
|
"specimens": [
|
|
72
83
|
{
|
|
73
84
|
"title": "ComposerMenu / useSlashMatches / useMentionMatches",
|
|
@@ -84,6 +95,5 @@
|
|
|
84
95
|
"note": "One input, two menus, and two hooks that decide which of them has anything to say. `useSlashMatches` answers only while the value starts with a slash; `useMentionMatches` only while the caret is inside a trailing @word — so an empty result is the menu's own instruction to stay shut. `applyMention` writes the choice back into the value, which is the one piece of text editing the family does for you. Type in either field below and the menu above it follows.",
|
|
85
96
|
"interaction": "the menu animates rather than mounting, so the caret never moves under it. A row is a button and takes cue's focus ring; the active one shows the return key it would answer to."
|
|
86
97
|
}
|
|
87
|
-
]
|
|
88
|
-
"todo": true
|
|
98
|
+
]
|
|
89
99
|
}
|
|
@@ -61,10 +61,21 @@
|
|
|
61
61
|
],
|
|
62
62
|
"summary": "One model in the menu, with its metadata and a tick on the chosen one.",
|
|
63
63
|
"examples": [],
|
|
64
|
-
"status": "
|
|
64
|
+
"status": "stable",
|
|
65
65
|
"url": "/docs/components/composer-model-item",
|
|
66
66
|
"mdUrl": "/docs/components/composer-model-item.md",
|
|
67
67
|
"jsonUrl": "/r/components/composer-model-item.json",
|
|
68
|
+
"whenToUse": [
|
|
69
|
+
"Each model offered in the composer's model menu.",
|
|
70
|
+
"Showing each model's metadata beside its name, rather than in a second column."
|
|
71
|
+
],
|
|
72
|
+
"whenNotToUse": [
|
|
73
|
+
"A row whose entry is not a `ComposerModel`."
|
|
74
|
+
],
|
|
75
|
+
"commonMistakes": [
|
|
76
|
+
"Drawing your own tick beside the current model. `selected` draws it.",
|
|
77
|
+
"Using `selected` as the keyboard cursor. It marks the model in use."
|
|
78
|
+
],
|
|
68
79
|
"specimens": [
|
|
69
80
|
{
|
|
70
81
|
"title": "ComposerModelTrigger / ComposerModelItem",
|
|
@@ -77,6 +88,5 @@
|
|
|
77
88
|
"note": "The model as a word in the toolbar rather than a settings page. The trigger shows what is in use and carries `aria-expanded` for the menu it opens; each row shows the model and its one line of metadata, with a tick on the chosen one. Three rows is the point at which this stops being right and `ModelPicker` starts.",
|
|
78
89
|
"interaction": "the trigger is a plain button and the menu is the same `ComposerMenu` the slash and mention lists use — nothing here portals, so an island's values reach it without any carriage."
|
|
79
90
|
}
|
|
80
|
-
]
|
|
81
|
-
"todo": true
|
|
91
|
+
]
|
|
82
92
|
}
|
|
@@ -60,10 +60,21 @@
|
|
|
60
60
|
],
|
|
61
61
|
"summary": "The model name in the toolbar, which opens the model menu.",
|
|
62
62
|
"examples": [],
|
|
63
|
-
"status": "
|
|
63
|
+
"status": "stable",
|
|
64
64
|
"url": "/docs/components/composer-model-trigger",
|
|
65
65
|
"mdUrl": "/docs/components/composer-model-trigger.md",
|
|
66
66
|
"jsonUrl": "/r/components/composer-model-trigger.json",
|
|
67
|
+
"whenToUse": [
|
|
68
|
+
"The toolbar control that opens the model menu, labelled with the selected model.",
|
|
69
|
+
"A trigger that has to be announced correctly, since it carries `aria-expanded` from `open`."
|
|
70
|
+
],
|
|
71
|
+
"whenNotToUse": [
|
|
72
|
+
"A control that opens nothing. It carries `aria-expanded` for the menu it opens."
|
|
73
|
+
],
|
|
74
|
+
"commonMistakes": [
|
|
75
|
+
"Leaving `open` stale. It is announced as `aria-expanded`, so a wrong value lies to a screen reader.",
|
|
76
|
+
"Setting `aria-expanded` yourself. The trigger already carries it, from `open`."
|
|
77
|
+
],
|
|
67
78
|
"specimens": [
|
|
68
79
|
{
|
|
69
80
|
"title": "ComposerModelTrigger / ComposerModelItem",
|
|
@@ -76,6 +87,5 @@
|
|
|
76
87
|
"note": "The model as a word in the toolbar rather than a settings page. The trigger shows what is in use and carries `aria-expanded` for the menu it opens; each row shows the model and its one line of metadata, with a tick on the chosen one. Three rows is the point at which this stops being right and `ModelPicker` starts.",
|
|
77
88
|
"interaction": "the trigger is a plain button and the menu is the same `ComposerMenu` the slash and mention lists use — nothing here portals, so an island's values reach it without any carriage."
|
|
78
89
|
}
|
|
79
|
-
]
|
|
80
|
-
"todo": true
|
|
90
|
+
]
|
|
81
91
|
}
|
|
@@ -61,10 +61,21 @@
|
|
|
61
61
|
],
|
|
62
62
|
"summary": "A mentionable person in the menu: their initial, their name, and whether they are an agent or a human.",
|
|
63
63
|
"examples": [],
|
|
64
|
-
"status": "
|
|
64
|
+
"status": "stable",
|
|
65
65
|
"url": "/docs/components/composer-person-item",
|
|
66
66
|
"mdUrl": "/docs/components/composer-person-item.md",
|
|
67
67
|
"jsonUrl": "/r/components/composer-person-item.json",
|
|
68
|
+
"whenToUse": [
|
|
69
|
+
"Each mentionable person or agent offered in the composer menu.",
|
|
70
|
+
"A mention list that mixes agents and humans, since the row says which one it is."
|
|
71
|
+
],
|
|
72
|
+
"whenNotToUse": [
|
|
73
|
+
"An entry that is not a `ComposerPerson`."
|
|
74
|
+
],
|
|
75
|
+
"commonMistakes": [
|
|
76
|
+
"Marking several rows `active`. It is the row Enter would pick, so only one has it.",
|
|
77
|
+
"Rendering your own initial beside the name. The row already draws one."
|
|
78
|
+
],
|
|
68
79
|
"specimens": [
|
|
69
80
|
{
|
|
70
81
|
"title": "ComposerMenu / useSlashMatches / useMentionMatches",
|
|
@@ -81,6 +92,5 @@
|
|
|
81
92
|
"note": "One input, two menus, and two hooks that decide which of them has anything to say. `useSlashMatches` answers only while the value starts with a slash; `useMentionMatches` only while the caret is inside a trailing @word — so an empty result is the menu's own instruction to stay shut. `applyMention` writes the choice back into the value, which is the one piece of text editing the family does for you. Type in either field below and the menu above it follows.",
|
|
82
93
|
"interaction": "the menu animates rather than mounting, so the caret never moves under it. A row is a button and takes cue's focus ring; the active one shows the return key it would answer to."
|
|
83
94
|
}
|
|
84
|
-
]
|
|
85
|
-
"todo": true
|
|
95
|
+
]
|
|
86
96
|
}
|
|
@@ -60,10 +60,21 @@
|
|
|
60
60
|
],
|
|
61
61
|
"summary": "Send, which becomes stop while the model is streaming.",
|
|
62
62
|
"examples": [],
|
|
63
|
-
"status": "
|
|
63
|
+
"status": "stable",
|
|
64
64
|
"url": "/docs/components/composer-send",
|
|
65
65
|
"mdUrl": "/docs/components/composer-send.md",
|
|
66
66
|
"jsonUrl": "/r/components/composer-send.json",
|
|
67
|
+
"whenToUse": [
|
|
68
|
+
"The send control of a composer, which doubles as stop while a reply streams.",
|
|
69
|
+
"An empty input, where `idle` dims the control because there is nothing to send."
|
|
70
|
+
],
|
|
71
|
+
"whenNotToUse": [
|
|
72
|
+
"A second, separate stop button. The arrow and the square are the same control."
|
|
73
|
+
],
|
|
74
|
+
"commonMistakes": [
|
|
75
|
+
"Swapping in your own stop button when streaming starts. The arrow and the square cross-fade rather than swap.",
|
|
76
|
+
"Leaving `idle` false on an empty input, which keeps the button bright when there is nothing to send."
|
|
77
|
+
],
|
|
67
78
|
"specimens": [
|
|
68
79
|
{
|
|
69
80
|
"title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
|
|
@@ -81,6 +92,5 @@
|
|
|
81
92
|
"note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
|
|
82
93
|
"interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
|
|
83
94
|
}
|
|
84
|
-
]
|
|
85
|
-
"todo": true
|
|
95
|
+
]
|
|
86
96
|
}
|
|
@@ -39,10 +39,19 @@
|
|
|
39
39
|
],
|
|
40
40
|
"summary": "The row under the input, which holds the two `ComposerActions` clusters.",
|
|
41
41
|
"examples": [],
|
|
42
|
-
"status": "
|
|
42
|
+
"status": "stable",
|
|
43
43
|
"url": "/docs/components/composer-toolbar",
|
|
44
44
|
"mdUrl": "/docs/components/composer-toolbar.md",
|
|
45
45
|
"jsonUrl": "/r/components/composer-toolbar.json",
|
|
46
|
+
"whenToUse": [
|
|
47
|
+
"The control row beneath the composer input."
|
|
48
|
+
],
|
|
49
|
+
"whenNotToUse": [
|
|
50
|
+
"Anything above the input, such as the attachment rail."
|
|
51
|
+
],
|
|
52
|
+
"commonMistakes": [
|
|
53
|
+
"Putting controls straight into the toolbar. It holds two `ComposerActions` clusters, and the controls go inside them."
|
|
54
|
+
],
|
|
46
55
|
"specimens": [
|
|
47
56
|
{
|
|
48
57
|
"title": "ElementsComposer / ComposerBar / ComposerInput / ComposerToolbar",
|
|
@@ -60,6 +69,5 @@
|
|
|
60
69
|
"note": "The composer assembled from its parts, which is the only way it exists — there is no root that configures it. `ElementsComposer` positions, `ComposerBar` is the paper, and everything between the input and the send button is a facet you either compose in or leave out, so a composer with no attachments carries no attachment code. `ComposerSend` is dim while the input is empty and becomes a stop square while the model is streaming; it is the same button either way, because there is never a moment when both are wanted.",
|
|
61
70
|
"interaction": "`ComposerAttachButton` disables itself when no handler is given rather than rendering a control that does nothing. The send button is labelled by state — `Send message` or `Stop generating` — so the swap is announced and not just drawn."
|
|
62
71
|
}
|
|
63
|
-
]
|
|
64
|
-
"todo": true
|
|
72
|
+
]
|
|
65
73
|
}
|
|
@@ -50,10 +50,19 @@
|
|
|
50
50
|
],
|
|
51
51
|
"summary": "The microphone, which becomes a filled stop while recording.",
|
|
52
52
|
"examples": [],
|
|
53
|
-
"status": "
|
|
53
|
+
"status": "stable",
|
|
54
54
|
"url": "/docs/components/composer-voice-button",
|
|
55
55
|
"mdUrl": "/docs/components/composer-voice-button.md",
|
|
56
56
|
"jsonUrl": "/r/components/composer-voice-button.json",
|
|
57
|
+
"whenToUse": [
|
|
58
|
+
"The toolbar control that opens and closes the microphone."
|
|
59
|
+
],
|
|
60
|
+
"whenNotToUse": [
|
|
61
|
+
"A separate stop control. The same button becomes a filled stop while `active`."
|
|
62
|
+
],
|
|
63
|
+
"commonMistakes": [
|
|
64
|
+
"Swapping the icon yourself when recording starts. `active` already turns the microphone into a filled stop."
|
|
65
|
+
],
|
|
57
66
|
"specimens": [
|
|
58
67
|
{
|
|
59
68
|
"title": "ComposerVoice / ComposerVoiceButton",
|
|
@@ -66,6 +75,5 @@
|
|
|
66
75
|
"note": "What replaces the input while the microphone is open. Recording gives a level meter and a running clock; stopping leaves the same row with a shimmering `Transcribing` where the clock was, because the microphone closing is not the end of the work. The meter is drawn from `seconds` — the caller owns the tick, so this bench holds it still and a real one animates.",
|
|
67
76
|
"interaction": "the button is labelled by state (`Start voice input` / `Stop recording`) and fills in while live, so the control that stops a recording never looks like the one that starts it."
|
|
68
77
|
}
|
|
69
|
-
]
|
|
70
|
-
"todo": true
|
|
78
|
+
]
|
|
71
79
|
}
|
|
@@ -60,10 +60,21 @@
|
|
|
60
60
|
],
|
|
61
61
|
"summary": "What replaces the input while the microphone is open: a level meter, a running clock while recording, and a shimmering `Transcribing` once it stops.",
|
|
62
62
|
"examples": [],
|
|
63
|
-
"status": "
|
|
63
|
+
"status": "stable",
|
|
64
64
|
"url": "/docs/components/composer-voice",
|
|
65
65
|
"mdUrl": "/docs/components/composer-voice.md",
|
|
66
66
|
"jsonUrl": "/r/components/composer-voice.json",
|
|
67
|
+
"whenToUse": [
|
|
68
|
+
"The recording state of a voice composer, in place of the text input.",
|
|
69
|
+
"The transcribing state after recording stops, which is `recording={false}`."
|
|
70
|
+
],
|
|
71
|
+
"whenNotToUse": [
|
|
72
|
+
"The resting composer. `recording={false}` is the transcribing state, not the resting one — unmount it instead."
|
|
73
|
+
],
|
|
74
|
+
"commonMistakes": [
|
|
75
|
+
"Expecting it to keep its own time. `seconds` drives both the clock and the meter, so the caller owns the tick.",
|
|
76
|
+
"Reading `recording={false}` as idle, which leaves a shimmering Transcribing on screen with nothing to transcribe."
|
|
77
|
+
],
|
|
67
78
|
"specimens": [
|
|
68
79
|
{
|
|
69
80
|
"title": "ComposerVoice / ComposerVoiceButton",
|
|
@@ -76,6 +87,5 @@
|
|
|
76
87
|
"note": "What replaces the input while the microphone is open. Recording gives a level meter and a running clock; stopping leaves the same row with a shimmering `Transcribing` where the clock was, because the microphone closing is not the end of the work. The meter is drawn from `seconds` — the caller owns the tick, so this bench holds it still and a real one animates.",
|
|
77
88
|
"interaction": "the button is labelled by state (`Start voice input` / `Stop recording`) and fills in while live, so the control that stops a recording never looks like the one that starts it."
|
|
78
89
|
}
|
|
79
|
-
]
|
|
80
|
-
"todo": true
|
|
90
|
+
]
|
|
81
91
|
}
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
"--cue-text-micro",
|
|
211
211
|
"--cue-text-ui"
|
|
212
212
|
],
|
|
213
|
-
"summary": "The thing you type into: an auto-growing textarea, a send affordance, and slots
|
|
213
|
+
"summary": "The thing you type into: an auto-growing textarea, a send affordance, and slots to hang things off.",
|
|
214
214
|
"examples": [
|
|
215
215
|
{
|
|
216
216
|
"title": "Usage",
|
|
@@ -218,10 +218,21 @@
|
|
|
218
218
|
"language": "tsx"
|
|
219
219
|
}
|
|
220
220
|
],
|
|
221
|
-
"status": "
|
|
221
|
+
"status": "stable",
|
|
222
222
|
"url": "/docs/components/composer",
|
|
223
223
|
"mdUrl": "/docs/components/composer.md",
|
|
224
224
|
"jsonUrl": "/r/components/composer.json",
|
|
225
|
+
"whenToUse": [
|
|
226
|
+
"Any chat or prompt input.",
|
|
227
|
+
"Anywhere a running request must be interruptible: `busy` plus `onStop` turns send into stop."
|
|
228
|
+
],
|
|
229
|
+
"whenNotToUse": [
|
|
230
|
+
"A form field. Use `Textarea` inside a `Field`."
|
|
231
|
+
],
|
|
232
|
+
"commonMistakes": [
|
|
233
|
+
"Capping it to one line. It grows rather than scrolls on purpose — a box that hides the second half of what you wrote is the most-complained-about part of every chat UI.",
|
|
234
|
+
"Leaving `onStop` unwired while passing `busy`, which shows a stop affordance that does nothing."
|
|
235
|
+
],
|
|
225
236
|
"specimens": [
|
|
226
237
|
{
|
|
227
238
|
"title": "Composer",
|
|
@@ -233,6 +244,5 @@
|
|
|
233
244
|
"note": "An auto-growing textarea at the large control height, with an attachment slot, a toolbar slot and a Stop that reports rather than decides.",
|
|
234
245
|
"interaction": "Enter sends by default, mod+Enter when configured the other way; Shift+Enter always inserts a newline."
|
|
235
246
|
}
|
|
236
|
-
]
|
|
237
|
-
"todo": true
|
|
247
|
+
]
|
|
238
248
|
}
|
|
@@ -78,10 +78,21 @@
|
|
|
78
78
|
"language": "tsx"
|
|
79
79
|
}
|
|
80
80
|
],
|
|
81
|
-
"status": "
|
|
81
|
+
"status": "stable",
|
|
82
82
|
"url": "/docs/components/computer-use",
|
|
83
83
|
"mdUrl": "/docs/components/computer-use.md",
|
|
84
84
|
"jsonUrl": "/r/components/computer-use.json",
|
|
85
|
+
"whenToUse": [
|
|
86
|
+
"A live session an agent is operating, wrapped around whatever you use for the viewport.",
|
|
87
|
+
"Showing the ordered actions taken, with the current one called out."
|
|
88
|
+
],
|
|
89
|
+
"whenNotToUse": [
|
|
90
|
+
"A session with no viewport to show. `children` is required, and it is the thing being driven."
|
|
91
|
+
],
|
|
92
|
+
"commonMistakes": [
|
|
93
|
+
"Trimming `steps` down to the current one. The two before `activeIndex` stay as a fading trail.",
|
|
94
|
+
"Expecting the element to supply the stream. You hand it the viewport yourself — a video stream, a screenshot, an iframe."
|
|
95
|
+
],
|
|
85
96
|
"specimens": [
|
|
86
97
|
{
|
|
87
98
|
"title": "ComputerUse",
|
|
@@ -93,6 +104,5 @@
|
|
|
93
104
|
"note": "The screen the agent is driving, with a cursor trail behind it and the current action named underneath. The two steps before the live one stay as fading dots, which is what turns a jumping pointer into a path you can follow. The viewport is `children` — a screenshot, a video stream, a sandboxed iframe — so the element frames it and isolates nothing of its own.",
|
|
94
105
|
"interaction": "none, and deliberately: this is a view of a session, not a remote control. The cursor and its trail are `aria-hidden`; the action row underneath is what a screen reader gets."
|
|
95
106
|
}
|
|
96
|
-
]
|
|
97
|
-
"todo": true
|
|
107
|
+
]
|
|
98
108
|
}
|
|
@@ -66,10 +66,19 @@
|
|
|
66
66
|
"language": "tsx"
|
|
67
67
|
}
|
|
68
68
|
],
|
|
69
|
-
"status": "
|
|
69
|
+
"status": "stable",
|
|
70
70
|
"url": "/docs/components/confidence-marker",
|
|
71
71
|
"mdUrl": "/docs/components/confidence-marker.md",
|
|
72
72
|
"jsonUrl": "/r/components/confidence-marker.json",
|
|
73
|
+
"whenToUse": [
|
|
74
|
+
"Generated prose where the reader must know which sentences are grounded."
|
|
75
|
+
],
|
|
76
|
+
"whenNotToUse": [
|
|
77
|
+
"Citations. Use `InlineCitation` — where a claim came from and how confident it is are different questions."
|
|
78
|
+
],
|
|
79
|
+
"commonMistakes": [
|
|
80
|
+
"Marking only the guesses, which leaves the reader unable to tell an unmarked sourced claim from an unmarked unchecked one."
|
|
81
|
+
],
|
|
73
82
|
"specimens": [
|
|
74
83
|
{
|
|
75
84
|
"title": "ConfidenceMarker",
|
|
@@ -81,6 +90,5 @@
|
|
|
81
90
|
"note": "Which clause came from a source, which was worked out, and which is a guess — drawn as three underlines rather than three colours of text, so the sentence still reads as a sentence. The basis appears under it on hover, in a row that is always reserved so nothing below moves.",
|
|
82
91
|
"interaction": "each clause is a button that responds to hover *and* focus, so the basis is reachable from a keyboard. The chip carries role='status' and is referenced by `aria-describedby`."
|
|
83
92
|
}
|
|
84
|
-
]
|
|
85
|
-
"todo": true
|
|
93
|
+
]
|
|
86
94
|
}
|
|
@@ -83,10 +83,20 @@
|
|
|
83
83
|
"language": "tsx"
|
|
84
84
|
}
|
|
85
85
|
],
|
|
86
|
-
"status": "
|
|
86
|
+
"status": "stable",
|
|
87
87
|
"url": "/docs/components/connection-state",
|
|
88
88
|
"mdUrl": "/docs/components/connection-state.md",
|
|
89
89
|
"jsonUrl": "/r/components/connection-state.json",
|
|
90
|
+
"whenToUse": [
|
|
91
|
+
"Any streamed run, so a dropped socket does not read as a dead run.",
|
|
92
|
+
"Anywhere the user should know work continued — `resumedTokens` is what proves it."
|
|
93
|
+
],
|
|
94
|
+
"whenNotToUse": [
|
|
95
|
+
"A failed request with nothing to resume. That is an error, not a reconnection."
|
|
96
|
+
],
|
|
97
|
+
"commonMistakes": [
|
|
98
|
+
"Showing a generic 'disconnected' state. The point is that the run did not stop; a message that implies it did makes people start over."
|
|
99
|
+
],
|
|
90
100
|
"specimens": [
|
|
91
101
|
{
|
|
92
102
|
"title": "ConnectionState",
|
|
@@ -98,6 +108,5 @@
|
|
|
98
108
|
"note": "The socket drops; the run does not. Four phases, and the useful one is `online` — it renders nothing at all, so the element can stay mounted at the top of a transcript and simply have nothing to say most of the time. `dropped` offers a reconnect, `reconnecting` counts attempts, and `resumed` says how much of the stream was recovered.",
|
|
99
109
|
"interaction": "Reconnect is a plain named button. Nothing here retries on its own — the phase is the caller's, so a page can back off however it likes."
|
|
100
110
|
}
|
|
101
|
-
]
|
|
102
|
-
"todo": true
|
|
111
|
+
]
|
|
103
112
|
}
|