@cueplusplus/ui 0.20.1 → 0.21.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 +115 -0
- package/dist/chat/agent-pile.js +2 -2
- package/dist/chrome/_status-bar.js +1 -1
- package/dist/chrome/app-shell.js +1 -1
- package/dist/chrome/navigation-menu.js +3 -3
- package/dist/chrome/row.js +1 -1
- package/dist/chrome/scroll-area.js +1 -1
- package/dist/chrome/section-header.js +1 -1
- package/dist/chrome/segmented-control.js +1 -1
- package/dist/chrome/tabs.js +1 -1
- package/dist/chrome/toolbar.js +1 -1
- package/dist/chrome/tree.js +3 -3
- package/dist/date/calendar.js +3 -3
- package/dist/dmx/channel-matrix.js +1 -1
- package/dist/dmx/universe-grid.js +1 -1
- package/dist/elements/agent-handoff.js +3 -3
- package/dist/elements/agent-plan.js +1 -1
- package/dist/elements/agent-status.js +1 -1
- package/dist/elements/agent-surface.d.ts +9 -6
- package/dist/elements/agent-surface.js +3 -2
- package/dist/elements/approval-card.d.ts +29 -3
- package/dist/elements/approval-card.js +18 -8
- package/dist/elements/artifact-card.js +2 -2
- package/dist/elements/canvas-split.js +3 -3
- package/dist/elements/chart.js +1 -1
- package/dist/elements/chat-panel.js +2 -2
- package/dist/elements/checkpoint-history.js +1 -1
- package/dist/elements/code-diff.js +1 -1
- package/dist/elements/code-runner.js +1 -1
- package/dist/elements/composer.d.ts +8 -2
- package/dist/elements/composer.js +20 -12
- package/dist/elements/computer-use.js +2 -2
- package/dist/elements/confidence-marker.js +1 -1
- package/dist/elements/connection-state.js +2 -2
- package/dist/elements/context-breakdown.js +1 -1
- package/dist/elements/context-usage.js +1 -1
- package/dist/elements/conversation-search.js +2 -2
- package/dist/elements/cost-meter.js +1 -1
- package/dist/elements/data-table.js +1 -1
- package/dist/elements/diagram.js +1 -1
- package/dist/elements/draft-restore.js +2 -2
- package/dist/elements/edit-message.js +1 -1
- package/dist/elements/elements.css +134 -0
- package/dist/elements/elicitation-form.d.ts +8 -1
- package/dist/elements/elicitation-form.js +24 -16
- package/dist/elements/empty-state.js +3 -3
- package/dist/elements/error-state.js +2 -2
- package/dist/elements/event-feed.d.ts +88 -0
- package/dist/elements/event-feed.js +190 -0
- package/dist/elements/feedback-dialog.js +2 -2
- package/dist/elements/file-tree.js +1 -1
- package/dist/elements/flow-graph.js +2 -2
- package/dist/elements/generative.css +13 -0
- package/dist/elements/generative.d.ts +8 -6
- package/dist/elements/generative.js +4 -3
- package/dist/elements/image-generation.js +2 -2
- package/dist/elements/index.d.ts +7 -3
- package/dist/elements/index.js +5 -2
- package/dist/elements/inline-citation.js +1 -1
- package/dist/elements/job-progress.js +1 -1
- package/dist/elements/launcher-bubble.js +3 -3
- package/dist/elements/loading-state.js +1 -1
- package/dist/elements/map-answer.js +1 -1
- package/dist/elements/math-block.js +1 -1
- package/dist/elements/mcp-server-panel.js +3 -3
- package/dist/elements/memory-chips.js +1 -1
- package/dist/elements/message-attachment.js +3 -3
- package/dist/elements/message-branches.js +1 -1
- package/dist/elements/message-pair.js +2 -2
- package/dist/elements/message-queue.js +1 -1
- package/dist/elements/message-timing.js +1 -1
- package/dist/elements/mobile-composer.js +1 -1
- package/dist/elements/model-picker.js +1 -1
- package/dist/elements/number-ticker.js +1 -1
- package/dist/elements/onboarding.js +3 -3
- package/dist/elements/permission-grant.js +3 -3
- package/dist/elements/prompt-library.js +1 -1
- package/dist/elements/question-card.d.ts +50 -0
- package/dist/elements/question-card.js +117 -0
- package/dist/elements/queue-dock.js +1 -1
- package/dist/elements/quota-banner.js +1 -1
- package/dist/elements/quote-reply.js +3 -3
- package/dist/elements/read-aloud.js +2 -2
- package/dist/elements/reasoning-effort.js +2 -2
- package/dist/elements/reasoning-panel.js +3 -3
- package/dist/elements/recommendation-card.js +2 -2
- package/dist/elements/regenerate-menu.js +1 -1
- package/dist/elements/request-delivery.js +31 -0
- package/dist/elements/research-report.js +1 -1
- package/dist/elements/retrieval-chunks.js +3 -3
- package/dist/elements/revert-dock.js +1 -1
- package/dist/elements/reviewable-diff.js +4 -4
- package/dist/elements/schedule-card.js +2 -2
- package/dist/elements/score-breakdown.js +2 -2
- package/dist/elements/scroll-anchor.js +2 -2
- package/dist/elements/settings-panel.js +3 -3
- package/dist/elements/sources.js +1 -1
- package/dist/elements/spec-sheet.js +1 -1
- package/dist/elements/stopped-run.js +2 -2
- package/dist/elements/streaming-text.js +2 -2
- package/dist/elements/subagent-list.js +4 -4
- package/dist/elements/suggestions.js +1 -1
- package/dist/elements/surfaces.d.ts +6 -6
- package/dist/elements/surfaces.js +7 -7
- package/dist/elements/tail-status.js +1 -1
- package/dist/elements/terminal-block.js +1 -1
- package/dist/elements/thinking-indicator.js +1 -1
- package/dist/elements/timeline.js +1 -1
- package/dist/elements/todo-list.js +1 -1
- package/dist/elements/tool-call.d.ts +18 -2
- package/dist/elements/tool-call.js +20 -11
- package/dist/elements/tool-error.js +2 -2
- package/dist/elements/tool-group.d.ts +11 -3
- package/dist/elements/tool-group.js +62 -38
- package/dist/elements/tool-state.d.ts +13 -0
- package/dist/elements/tool-state.js +44 -0
- package/dist/elements/tool-timeline.js +2 -2
- package/dist/elements/trace-waterfall.js +2 -2
- package/dist/elements/unsupported-request-card.d.ts +31 -0
- package/dist/elements/unsupported-request-card.js +80 -0
- package/dist/elements/vocabulary.d.ts +50 -1
- package/dist/elements/vocabulary.js +50 -1
- package/dist/elements/voice-conversation.js +5 -5
- package/dist/elements/web-preview.js +1 -1
- package/dist/elements/web-search.js +2 -2
- package/dist/elements/work-collapse.js +1 -1
- package/dist/forms/file-upload.js +1 -1
- package/dist/forms/rating.js +1 -1
- package/dist/forms/select.js +1 -1
- package/dist/forms/switch.js +2 -2
- package/dist/forms/toggle.js +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/instruments/_ledger-disclosure.js +1 -1
- package/dist/instruments/data-tree.js +1 -1
- package/dist/instruments/meter.js +1 -1
- package/dist/instruments/seam-grid.js +1 -1
- package/dist/layout/_collapse.js +3 -3
- package/dist/layout/bento.js +1 -1
- package/dist/layout/breadcrumb.js +1 -1
- package/dist/layout/carousel.js +1 -1
- package/dist/layout/collapsible.js +1 -1
- package/dist/layout/index.d.ts +3 -1
- package/dist/layout/index.js +3 -1
- package/dist/layout/item.js +1 -1
- package/dist/layout/link.js +1 -1
- package/dist/layout/pagination.js +1 -1
- package/dist/layout/pane-seam.d.ts +75 -0
- package/dist/layout/pane-seam.js +127 -0
- package/dist/layout/resizable.d.ts +2 -1
- package/dist/layout/resizable.js +3 -2
- package/dist/layout/sidebar.js +3 -3
- package/dist/layout/split-pane.d.ts +74 -0
- package/dist/layout/split-pane.js +135 -0
- package/dist/layout/stepper.js +1 -1
- package/dist/lib/auto-grow.js +42 -0
- package/dist/overlays/_surface.d.ts +4 -4
- package/dist/overlays/_surface.js +4 -4
- package/dist/overlays/drawer.js +1 -1
- package/dist/overlays/menubar.js +1 -1
- package/dist/overlays/sheet.js +1 -1
- package/dist/overlays/toast.js +1 -1
- package/dist/primitives/button.js +1 -1
- package/dist/primitives/chip.d.ts +1 -1
- package/dist/system/agent-skin.d.ts +11 -5
- package/manifest/components/agent-surface.json +5 -4
- package/manifest/components/approval-card.json +45 -7
- package/manifest/components/composer-input.json +16 -2
- package/manifest/components/elicitation-form.json +16 -1
- package/manifest/components/event-feed.json +171 -0
- package/manifest/components/event-row.json +116 -0
- package/manifest/components/generative-ui.json +4 -3
- package/manifest/components/pane-seam.json +171 -0
- package/manifest/components/question-card.json +157 -0
- package/manifest/components/resizable.json +1 -1
- package/manifest/components/split-pane.json +224 -0
- package/manifest/components/tool-call.json +46 -2
- package/manifest/components/tool-group.json +15 -3
- package/manifest/components/unsupported-request-card.json +117 -0
- package/manifest/fixtures.json +16 -0
- package/manifest/manifest.json +88 -10
- package/manifest/tokens.json +9 -2
- package/package.json +2 -2
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "SplitPane",
|
|
3
|
+
"slug": "split-pane",
|
|
4
|
+
"group": "layout",
|
|
5
|
+
"importPath": "@cueplusplus/ui",
|
|
6
|
+
"peerDependencies": [],
|
|
7
|
+
"clientOnly": true,
|
|
8
|
+
"description": "A list beside its detail, which stacks into a drill-in when narrow (#102).\n\nThe master-detail opinion on top of {@link PaneSeam}. Side by side while\nthe detail would be at least twice the list, measured on the frame rather\nthan the window, so it works in any column. Below that it stacks the way a\nphone does: the list, or the detail with a Back button, and Escape inside the\ndetail goes back too. `detailOpen` says which shows; selection and the list's\nown keyboard stay with the list.\n\nThe frame measures itself with a `ResizeObserver` and draws side by side\nuntil it has, so a server render and a browser without one get the split.",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "list",
|
|
12
|
+
"type": "ReactNode",
|
|
13
|
+
"required": true,
|
|
14
|
+
"defaultValue": null,
|
|
15
|
+
"description": "The master: a list of rows, a tree, a feed. It owns its own keyboard.",
|
|
16
|
+
"control": {
|
|
17
|
+
"kind": "node",
|
|
18
|
+
"fixture": "children.text"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "detail",
|
|
23
|
+
"type": "ReactNode",
|
|
24
|
+
"required": true,
|
|
25
|
+
"defaultValue": null,
|
|
26
|
+
"description": "The detail for whatever the list has selected.",
|
|
27
|
+
"control": {
|
|
28
|
+
"kind": "node",
|
|
29
|
+
"fixture": "children.text"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "listLabel",
|
|
34
|
+
"type": "string",
|
|
35
|
+
"required": true,
|
|
36
|
+
"defaultValue": null,
|
|
37
|
+
"description": "What the list is, in a word or two: `events`. It names the seam (`Resize\nthe events`), the Back button (`Back to events`) and the fold (`Hide\nevents`), so each control says what it acts on.",
|
|
38
|
+
"control": {
|
|
39
|
+
"kind": "string"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "listSize",
|
|
44
|
+
"type": "number",
|
|
45
|
+
"required": false,
|
|
46
|
+
"defaultValue": null,
|
|
47
|
+
"description": "The list's width in pixels, when the caller holds it.",
|
|
48
|
+
"control": {
|
|
49
|
+
"kind": "number"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "defaultListSize",
|
|
54
|
+
"type": "number",
|
|
55
|
+
"required": false,
|
|
56
|
+
"defaultValue": "320",
|
|
57
|
+
"description": "The list's starting width when nothing controls it. Defaults to 320.",
|
|
58
|
+
"control": {
|
|
59
|
+
"kind": "number"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "onListSizeChange",
|
|
64
|
+
"type": "((size: number) => void)",
|
|
65
|
+
"required": false,
|
|
66
|
+
"defaultValue": null,
|
|
67
|
+
"description": "Called with every new list width, clamped to `minListSize` and `maxListSize`.",
|
|
68
|
+
"control": {
|
|
69
|
+
"kind": "callback",
|
|
70
|
+
"fixture": "callback.log"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "minListSize",
|
|
75
|
+
"type": "number",
|
|
76
|
+
"required": false,
|
|
77
|
+
"defaultValue": "200",
|
|
78
|
+
"description": "The narrowest the list may be dragged, in pixels. Defaults to 200.",
|
|
79
|
+
"control": {
|
|
80
|
+
"kind": "number"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "maxListSize",
|
|
85
|
+
"type": "number",
|
|
86
|
+
"required": false,
|
|
87
|
+
"defaultValue": "480",
|
|
88
|
+
"description": "The widest the list may be dragged, in pixels. Defaults to 480.",
|
|
89
|
+
"control": {
|
|
90
|
+
"kind": "number"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "stackBelow",
|
|
95
|
+
"type": "number",
|
|
96
|
+
"required": false,
|
|
97
|
+
"defaultValue": null,
|
|
98
|
+
"description": "The frame width, in pixels, below which the panes stack. Unset, they stack\nonce the detail would be narrower than twice the list.",
|
|
99
|
+
"control": {
|
|
100
|
+
"kind": "number"
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "detailOpen",
|
|
105
|
+
"type": "boolean",
|
|
106
|
+
"required": false,
|
|
107
|
+
"defaultValue": "false",
|
|
108
|
+
"description": "Which pane shows when stacked: the detail when `true`, the list when not.\nSide by side, both always show.",
|
|
109
|
+
"control": {
|
|
110
|
+
"kind": "boolean"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"name": "onBack",
|
|
115
|
+
"type": "(() => void)",
|
|
116
|
+
"required": false,
|
|
117
|
+
"defaultValue": null,
|
|
118
|
+
"description": "Called by the stacked detail's Back button and by Escape inside it.",
|
|
119
|
+
"control": {
|
|
120
|
+
"kind": "callback",
|
|
121
|
+
"fixture": "callback.log"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"name": "collapsible",
|
|
126
|
+
"type": "boolean",
|
|
127
|
+
"required": false,
|
|
128
|
+
"defaultValue": "false",
|
|
129
|
+
"description": "Whether the list can fold to a thin tab while side by side.",
|
|
130
|
+
"control": {
|
|
131
|
+
"kind": "boolean"
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"name": "collapsed",
|
|
136
|
+
"type": "boolean",
|
|
137
|
+
"required": false,
|
|
138
|
+
"defaultValue": null,
|
|
139
|
+
"description": "Whether the list is folded, when the caller holds it.",
|
|
140
|
+
"control": {
|
|
141
|
+
"kind": "boolean"
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"name": "defaultCollapsed",
|
|
146
|
+
"type": "boolean",
|
|
147
|
+
"required": false,
|
|
148
|
+
"defaultValue": "false",
|
|
149
|
+
"description": "Whether the list starts folded when nothing controls it.",
|
|
150
|
+
"control": {
|
|
151
|
+
"kind": "boolean"
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "onCollapsedChange",
|
|
156
|
+
"type": "((collapsed: boolean) => void)",
|
|
157
|
+
"required": false,
|
|
158
|
+
"defaultValue": null,
|
|
159
|
+
"description": "Called when the list folds (`true`) or opens (`false`).",
|
|
160
|
+
"control": {
|
|
161
|
+
"kind": "callback",
|
|
162
|
+
"fixture": "callback.log"
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
],
|
|
166
|
+
"typeReferences": [
|
|
167
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
|
|
168
|
+
],
|
|
169
|
+
"subcomponents": [],
|
|
170
|
+
"parts": [],
|
|
171
|
+
"variants": {},
|
|
172
|
+
"defaultVariants": {},
|
|
173
|
+
"tokensUsed": [
|
|
174
|
+
"--cue-border",
|
|
175
|
+
"--cue-fg",
|
|
176
|
+
"--cue-fg-muted",
|
|
177
|
+
"--cue-focus",
|
|
178
|
+
"--cue-focus-ring",
|
|
179
|
+
"--cue-radius-control",
|
|
180
|
+
"--cue-space-1",
|
|
181
|
+
"--cue-space-2",
|
|
182
|
+
"--cue-space-6",
|
|
183
|
+
"--cue-style-focus-width",
|
|
184
|
+
"--cue-surface-2",
|
|
185
|
+
"--cue-text-ui"
|
|
186
|
+
],
|
|
187
|
+
"summary": "A list beside its detail, stacking into a drill-in with Back when the frame is narrow.",
|
|
188
|
+
"examples": [
|
|
189
|
+
{
|
|
190
|
+
"title": "Usage",
|
|
191
|
+
"code": "const [selected, setSelected] = React.useState<string | null>(null);\n\n<SplitPane\n listLabel=\"events\"\n list={<EventFeed events={events} selectedId={selected} onSelect={setSelected} />}\n detail={selected ? <EventDetail id={selected} /> : <EmptyState title=\"Pick an event\" />}\n detailOpen={selected !== null}\n onBack={() => setSelected(null)}\n collapsible\n/>",
|
|
192
|
+
"language": "tsx"
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
"status": "stable",
|
|
196
|
+
"url": "/docs/components/split-pane",
|
|
197
|
+
"mdUrl": "/docs/components/split-pane.md",
|
|
198
|
+
"jsonUrl": "/r/components/split-pane.json",
|
|
199
|
+
"whenToUse": [
|
|
200
|
+
"A list and an inspector: events, logs, jobs, an inbox, an MCP catalogue.",
|
|
201
|
+
"One layout for a wide console and a narrow column. It measures its own frame, so it stacks inside a sidebar as readily as on a phone."
|
|
202
|
+
],
|
|
203
|
+
"whenNotToUse": [
|
|
204
|
+
"Two panes that are equals rather than a list and its detail. Use `Resizable`.",
|
|
205
|
+
"A single side pane with no stacking. `PaneSeam` alone is lighter."
|
|
206
|
+
],
|
|
207
|
+
"commonMistakes": [
|
|
208
|
+
"Leaving `detailOpen` true with nothing selected. When stacked, it decides which pane shows, so tie it to the selection.",
|
|
209
|
+
"Omitting `onBack`. When stacked, Back and Escape are the only ways out of the detail, and both call it.",
|
|
210
|
+
"A `listLabel` that is a sentence. It is spliced into three controls (`Resize the …`, `Back to …`, `Hide …`), so give it a noun: `events`."
|
|
211
|
+
],
|
|
212
|
+
"specimens": [
|
|
213
|
+
{
|
|
214
|
+
"title": "SplitPane",
|
|
215
|
+
"group": "layout",
|
|
216
|
+
"components": [
|
|
217
|
+
"SplitPane"
|
|
218
|
+
],
|
|
219
|
+
"code": "<Specimens>\n <Specimen label=\"side by side\" wide>\n <SplitPane\n listLabel=\"cues\"\n defaultListSize={180}\n minListSize={140}\n maxListSize={260}\n collapsible\n detailOpen={cue !== null}\n onBack={() => setCue(null)}\n list={cueList}\n detail={cueDetail}\n className=\"h-[11rem] w-full max-w-[36rem] overflow-hidden rounded-(--radius-surface) border border-border\"\n />\n </Specimen>\n <Specimen label=\"stacked, under twice the list\" wide>\n <SplitPane\n listLabel=\"cues\"\n defaultListSize={180}\n detailOpen={cue !== null}\n onBack={() => setCue(null)}\n list={cueList}\n detail={cueDetail}\n className=\"h-[11rem] w-full max-w-[22rem] overflow-hidden rounded-(--radius-surface) border border-border\"\n />\n </Specimen>\n</Specimens>",
|
|
220
|
+
"note": "A list beside its detail, on PaneSeam. Side by side while the detail is at least twice the list, measured on the frame, not the window; below that it stacks like a phone, the list or the detail with Back. Both specimens share one selection: the wide one splits, and the narrow one is the same split stacked.",
|
|
221
|
+
"interaction": "pick a cue. In the narrow frame that opens the detail, and Back or Escape returns to the list. In the wide frame drag or arrow the seam, or fold the list to its tab with the chevron."
|
|
222
|
+
}
|
|
223
|
+
]
|
|
224
|
+
}
|
|
@@ -62,13 +62,58 @@
|
|
|
62
62
|
{
|
|
63
63
|
"name": "running",
|
|
64
64
|
"type": "boolean",
|
|
65
|
-
"required":
|
|
65
|
+
"required": false,
|
|
66
66
|
"defaultValue": null,
|
|
67
67
|
"description": "When true a spinner replaces the success check on the trigger.",
|
|
68
68
|
"control": {
|
|
69
69
|
"kind": "boolean"
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
|
+
{
|
|
73
|
+
"name": "state",
|
|
74
|
+
"type": "\"done\" | \"failed\" | \"running\" | \"refused\"",
|
|
75
|
+
"required": false,
|
|
76
|
+
"defaultValue": null,
|
|
77
|
+
"description": "Where the call got to: `running`, `done`, `failed` or `refused`. Each settled\nstate ends the row with its own mark. Supersedes `running`.",
|
|
78
|
+
"control": {
|
|
79
|
+
"kind": "enum",
|
|
80
|
+
"members": [
|
|
81
|
+
"done",
|
|
82
|
+
"failed",
|
|
83
|
+
"running",
|
|
84
|
+
"refused"
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "variant",
|
|
90
|
+
"type": "\"inline\" | \"card\"",
|
|
91
|
+
"required": false,
|
|
92
|
+
"defaultValue": "card",
|
|
93
|
+
"description": "`card` (the default) or `inline`, a denser row that spans its column, for a\ntranscript of many calls.",
|
|
94
|
+
"control": {
|
|
95
|
+
"kind": "enum",
|
|
96
|
+
"members": [
|
|
97
|
+
"inline",
|
|
98
|
+
"card"
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"name": "absence",
|
|
104
|
+
"type": "\"none\" | \"refused\" | \"unanswered\"",
|
|
105
|
+
"required": false,
|
|
106
|
+
"defaultValue": null,
|
|
107
|
+
"description": "What an empty `result` means: `none` (it returned nothing), `refused` or\n`unanswered`. Read only when `result` is empty.",
|
|
108
|
+
"control": {
|
|
109
|
+
"kind": "enum",
|
|
110
|
+
"members": [
|
|
111
|
+
"none",
|
|
112
|
+
"refused",
|
|
113
|
+
"unanswered"
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
},
|
|
72
117
|
{
|
|
73
118
|
"name": "open",
|
|
74
119
|
"type": "boolean",
|
|
@@ -113,7 +158,6 @@
|
|
|
113
158
|
"--cue-focus",
|
|
114
159
|
"--cue-focus-ring",
|
|
115
160
|
"--cue-font-mono",
|
|
116
|
-
"--cue-ok",
|
|
117
161
|
"--cue-radius-control",
|
|
118
162
|
"--cue-radius-overlay",
|
|
119
163
|
"--cue-style-focus-width",
|
|
@@ -50,10 +50,24 @@
|
|
|
50
50
|
"kind": "callback",
|
|
51
51
|
"fixture": "callback.log"
|
|
52
52
|
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "variant",
|
|
56
|
+
"type": "\"inline\" | \"card\"",
|
|
57
|
+
"required": false,
|
|
58
|
+
"defaultValue": "card",
|
|
59
|
+
"description": "`card` (the default) or `inline`, a row in its column without the paper, for a\ntranscript of many groups.",
|
|
60
|
+
"control": {
|
|
61
|
+
"kind": "enum",
|
|
62
|
+
"members": [
|
|
63
|
+
"inline",
|
|
64
|
+
"card"
|
|
65
|
+
]
|
|
66
|
+
}
|
|
53
67
|
}
|
|
54
68
|
],
|
|
55
69
|
"typeReferences": [
|
|
56
|
-
"Omit<\n ComponentProps<\"div\">,\n \"children\" | \"label\" | \"tools\" | \"open\" | \"onOpenChange\"\n> & {\n /** What the group did, as one line. */\n label: string;\n /**\n * Calls issued together. The header summarizes them: progress while any run,\n * failures if any failed, otherwise the count.\n */\n tools: readonly GroupedTool[];\n /** Whether the per-call list is expanded. */\n open: boolean;\n /** Called when the group is expanded or collapsed. */\n onOpenChange?: (open: boolean) => void;\n}"
|
|
70
|
+
"Omit<\n ComponentProps<\"div\">,\n \"children\" | \"label\" | \"tools\" | \"open\" | \"onOpenChange\"\n> & {\n /** What the group did, as one line. */\n label: string;\n /**\n * Calls issued together. The header summarizes them: progress while any run,\n * failures if any failed, otherwise the count.\n */\n tools: readonly GroupedTool[];\n /** Whether the per-call list is expanded. */\n open: boolean;\n /** Called when the group is expanded or collapsed. */\n onOpenChange?: (open: boolean) => void;\n /**\n * `card` (the default) or `inline`, a row in its column without the paper, for a\n * transcript of many groups.\n */\n variant?: \"card\" | \"inline\";\n}"
|
|
57
71
|
],
|
|
58
72
|
"subcomponents": [],
|
|
59
73
|
"parts": [],
|
|
@@ -61,10 +75,8 @@
|
|
|
61
75
|
"defaultVariants": {},
|
|
62
76
|
"tokensUsed": [
|
|
63
77
|
"--cue-border",
|
|
64
|
-
"--cue-danger",
|
|
65
78
|
"--cue-fg-muted",
|
|
66
79
|
"--cue-fg-subtle",
|
|
67
|
-
"--cue-ok",
|
|
68
80
|
"--cue-radius-overlay",
|
|
69
81
|
"--cue-surface-1",
|
|
70
82
|
"--cue-text-body"
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "UnsupportedRequestCard",
|
|
3
|
+
"slug": "unsupported-request-card",
|
|
4
|
+
"group": "elements",
|
|
5
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
6
|
+
"peerDependencies": [
|
|
7
|
+
"lucide-react"
|
|
8
|
+
],
|
|
9
|
+
"clientOnly": true,
|
|
10
|
+
"description": "A request this client cannot answer, said plainly, with no answer offered.",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "title",
|
|
14
|
+
"type": "string",
|
|
15
|
+
"required": true,
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"description": "What the agent asked for, in its words: `Pick a file`, `Open a browser`.",
|
|
18
|
+
"control": {
|
|
19
|
+
"kind": "string"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "kind",
|
|
24
|
+
"type": "string",
|
|
25
|
+
"required": false,
|
|
26
|
+
"defaultValue": null,
|
|
27
|
+
"description": "The request's kind as the protocol names it, printed in mono so it can be reported.",
|
|
28
|
+
"control": {
|
|
29
|
+
"kind": "string"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "detail",
|
|
34
|
+
"type": "string",
|
|
35
|
+
"required": false,
|
|
36
|
+
"defaultValue": null,
|
|
37
|
+
"description": "A supporting line: which agent asked, or what it was doing.",
|
|
38
|
+
"control": {
|
|
39
|
+
"kind": "string"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "onDismiss",
|
|
44
|
+
"type": "(() => void)",
|
|
45
|
+
"required": false,
|
|
46
|
+
"defaultValue": null,
|
|
47
|
+
"description": "Called when the person clears the card. Dismiss is drawn only when this is set.",
|
|
48
|
+
"control": {
|
|
49
|
+
"kind": "callback",
|
|
50
|
+
"fixture": "callback.log"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "labels",
|
|
55
|
+
"type": "Partial<UnsupportedRequestLabels>",
|
|
56
|
+
"required": false,
|
|
57
|
+
"defaultValue": null,
|
|
58
|
+
"description": "Replace any of the card's own copy.",
|
|
59
|
+
"control": {
|
|
60
|
+
"kind": "opaque"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"typeReferences": [
|
|
65
|
+
"Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">"
|
|
66
|
+
],
|
|
67
|
+
"subcomponents": [],
|
|
68
|
+
"parts": [],
|
|
69
|
+
"variants": {},
|
|
70
|
+
"defaultVariants": {},
|
|
71
|
+
"tokensUsed": [
|
|
72
|
+
"--cue-fg",
|
|
73
|
+
"--cue-fg-muted",
|
|
74
|
+
"--cue-fg-subtle",
|
|
75
|
+
"--cue-radius-overlay",
|
|
76
|
+
"--cue-radius-surface",
|
|
77
|
+
"--cue-surface-1",
|
|
78
|
+
"--cue-surface-2",
|
|
79
|
+
"--cue-text-body",
|
|
80
|
+
"--cue-text-ui"
|
|
81
|
+
],
|
|
82
|
+
"summary": "A request this app cannot answer, said plainly, with no answer offered.",
|
|
83
|
+
"examples": [
|
|
84
|
+
{
|
|
85
|
+
"title": "Usage",
|
|
86
|
+
"code": "import { UnsupportedRequestCard } from \"@cueplusplus/ui/elements\";\n\n<UnsupportedRequestCard\n title=\"Pick a file\"\n kind=\"file-picker\"\n detail=\"Asked by the coding agent\"\n onDismiss={() => dismiss(request.id)}\n/>",
|
|
87
|
+
"language": "tsx"
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"status": "stable",
|
|
91
|
+
"url": "/docs/components/unsupported-request-card",
|
|
92
|
+
"mdUrl": "/docs/components/unsupported-request-card.md",
|
|
93
|
+
"jsonUrl": "/r/components/unsupported-request-card.json",
|
|
94
|
+
"whenToUse": [
|
|
95
|
+
"An agent request your client has no way to fulfil: a file picker, a browser session, or a request kind newer than the client.",
|
|
96
|
+
"Keeping the transcript honest. The request stays visible, and `kind` names it so the person can report it."
|
|
97
|
+
],
|
|
98
|
+
"whenNotToUse": [
|
|
99
|
+
"A request you can answer but have not built yet. Answer it with `ApprovalCard`, `QuestionCard` or `ElicitationForm` rather than calling it unsupported."
|
|
100
|
+
],
|
|
101
|
+
"commonMistakes": [
|
|
102
|
+
"Drawing an unsupported request as an approval or a question. A button the client cannot deliver is a false statement.",
|
|
103
|
+
"Leaving `kind` off. It is the one detail the person can pass on to whoever runs the agent."
|
|
104
|
+
],
|
|
105
|
+
"specimens": [
|
|
106
|
+
{
|
|
107
|
+
"title": "UnsupportedRequestCard",
|
|
108
|
+
"group": "elements",
|
|
109
|
+
"components": [
|
|
110
|
+
"UnsupportedRequestCard"
|
|
111
|
+
],
|
|
112
|
+
"code": "<Specimens>\n <Specimen label=\"with dismiss\" wide>\n <UnsupportedRequestCard\n title=\"Pick a show file\"\n kind=\"file-picker\"\n detail=\"Asked by the patcher\"\n onDismiss={() => {}}\n />\n </Specimen>\n <Specimen label=\"nothing to press\" wide>\n <UnsupportedRequestCard title=\"Open a browser\" kind=\"browser-session\" />\n </Specimen>\n</Specimens>",
|
|
113
|
+
"note": "A request this app cannot answer, said plainly and with nothing offered. A card drawn as an approval or a question would invite an answer nothing can deliver. The request's kind is printed in mono, so a reader can name it to whoever runs the agent.",
|
|
114
|
+
"interaction": "Dismiss is drawn only when the caller can clear the card."
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
}
|
package/manifest/fixtures.json
CHANGED
|
@@ -686,6 +686,22 @@
|
|
|
686
686
|
"readonly QueuedFollowUp[]"
|
|
687
687
|
]
|
|
688
688
|
},
|
|
689
|
+
{
|
|
690
|
+
"id": "agents.feed",
|
|
691
|
+
"kind": "array",
|
|
692
|
+
"label": "5 run events",
|
|
693
|
+
"accepts": [
|
|
694
|
+
"readonly FeedEvent[]"
|
|
695
|
+
]
|
|
696
|
+
},
|
|
697
|
+
{
|
|
698
|
+
"id": "agents.feed-event",
|
|
699
|
+
"kind": "opaque",
|
|
700
|
+
"label": "One run event",
|
|
701
|
+
"accepts": [
|
|
702
|
+
"FeedEvent"
|
|
703
|
+
]
|
|
704
|
+
},
|
|
689
705
|
{
|
|
690
706
|
"id": "composer.attachment",
|
|
691
707
|
"kind": "opaque",
|
package/manifest/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"library": "@cueplusplus/ui",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.21.0",
|
|
5
5
|
"generatedAt": "1970-01-01T00:00:00.000Z",
|
|
6
6
|
"themes": [
|
|
7
7
|
"command",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
],
|
|
39
39
|
"tokens": {
|
|
40
40
|
"path": "./tokens.json",
|
|
41
|
-
"sha256": "
|
|
41
|
+
"sha256": "1ee30869c3173d29b483b2e19987225414be834c7709d67428049f47f4958232"
|
|
42
42
|
},
|
|
43
43
|
"systemApis": [
|
|
44
44
|
{
|
|
@@ -1267,7 +1267,7 @@
|
|
|
1267
1267
|
"mdUrl": "/docs/components/agent-surface.md",
|
|
1268
1268
|
"jsonUrl": "/r/components/agent-surface.json",
|
|
1269
1269
|
"path": "./components/agent-surface.json",
|
|
1270
|
-
"sha256": "
|
|
1270
|
+
"sha256": "7753e9333128f1a5b6248d0d5fc090495ad48d80e0e5135dff30b90db71649c8"
|
|
1271
1271
|
},
|
|
1272
1272
|
{
|
|
1273
1273
|
"name": "AnimatedNumber",
|
|
@@ -1293,7 +1293,7 @@
|
|
|
1293
1293
|
"mdUrl": "/docs/components/approval-card.md",
|
|
1294
1294
|
"jsonUrl": "/r/components/approval-card.json",
|
|
1295
1295
|
"path": "./components/approval-card.json",
|
|
1296
|
-
"sha256": "
|
|
1296
|
+
"sha256": "3ab3125c2dc6b8884e632223b2fd2c281ed0fbc030c93d4d7cf294f60893e0ed"
|
|
1297
1297
|
},
|
|
1298
1298
|
{
|
|
1299
1299
|
"name": "ArtifactCard",
|
|
@@ -1696,7 +1696,7 @@
|
|
|
1696
1696
|
"mdUrl": "/docs/components/composer-input.md",
|
|
1697
1697
|
"jsonUrl": "/r/components/composer-input.json",
|
|
1698
1698
|
"path": "./components/composer-input.json",
|
|
1699
|
-
"sha256": "
|
|
1699
|
+
"sha256": "b781307481ff234f2661875f6d79a04a5ccfb5dfb27674734121a4cda7c1cc3f"
|
|
1700
1700
|
},
|
|
1701
1701
|
{
|
|
1702
1702
|
"name": "ComposerMenu",
|
|
@@ -2034,7 +2034,7 @@
|
|
|
2034
2034
|
"mdUrl": "/docs/components/elicitation-form.md",
|
|
2035
2035
|
"jsonUrl": "/r/components/elicitation-form.json",
|
|
2036
2036
|
"path": "./components/elicitation-form.json",
|
|
2037
|
-
"sha256": "
|
|
2037
|
+
"sha256": "25e8dd14dd879d714765aaf1ae9bde9e480a089b6131367ec9d37b008273f030"
|
|
2038
2038
|
},
|
|
2039
2039
|
{
|
|
2040
2040
|
"name": "EmptyStateComposer",
|
|
@@ -2114,6 +2114,32 @@
|
|
|
2114
2114
|
"path": "./components/error-state.json",
|
|
2115
2115
|
"sha256": "ca9343aad8bc399fb51f250cae2e0e26c10a396a9e172db32492f9e878b6dd21"
|
|
2116
2116
|
},
|
|
2117
|
+
{
|
|
2118
|
+
"name": "EventFeed",
|
|
2119
|
+
"slug": "event-feed",
|
|
2120
|
+
"group": "elements",
|
|
2121
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
2122
|
+
"summary": "A filterable activity feed: typed, timestamped records with a one-line preview and a selection.",
|
|
2123
|
+
"status": "stable",
|
|
2124
|
+
"url": "/docs/components/event-feed",
|
|
2125
|
+
"mdUrl": "/docs/components/event-feed.md",
|
|
2126
|
+
"jsonUrl": "/r/components/event-feed.json",
|
|
2127
|
+
"path": "./components/event-feed.json",
|
|
2128
|
+
"sha256": "60dac4b68ce1f592cb807400a8952acd36f3c6dff413587f0c120d456a810a56"
|
|
2129
|
+
},
|
|
2130
|
+
{
|
|
2131
|
+
"name": "EventRow",
|
|
2132
|
+
"slug": "event-row",
|
|
2133
|
+
"group": "elements",
|
|
2134
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
2135
|
+
"summary": "One event as an activity feed draws it, for a list of your own.",
|
|
2136
|
+
"status": "stable",
|
|
2137
|
+
"url": "/docs/components/event-row",
|
|
2138
|
+
"mdUrl": "/docs/components/event-row.md",
|
|
2139
|
+
"jsonUrl": "/r/components/event-row.json",
|
|
2140
|
+
"path": "./components/event-row.json",
|
|
2141
|
+
"sha256": "be87405cd3312c68331af8120e4eef45bf01ef1253babf30da4e36f2e065f582"
|
|
2142
|
+
},
|
|
2117
2143
|
{
|
|
2118
2144
|
"name": "FeedbackDialog",
|
|
2119
2145
|
"slug": "feedback-dialog",
|
|
@@ -2190,7 +2216,7 @@
|
|
|
2190
2216
|
"mdUrl": "/docs/components/generative-ui.md",
|
|
2191
2217
|
"jsonUrl": "/r/components/generative-ui.json",
|
|
2192
2218
|
"path": "./components/generative-ui.json",
|
|
2193
|
-
"sha256": "
|
|
2219
|
+
"sha256": "a53d11591269a2454ca156cb625368b75c0a365d333db6b032b13b6f7ca80795"
|
|
2194
2220
|
},
|
|
2195
2221
|
{
|
|
2196
2222
|
"name": "GuardrailNotice",
|
|
@@ -2504,6 +2530,19 @@
|
|
|
2504
2530
|
"path": "./components/prompt-library.json",
|
|
2505
2531
|
"sha256": "0b759a5553a334acef9e5acb18d784a335a3c04a4189d3044959aa462c1ea025"
|
|
2506
2532
|
},
|
|
2533
|
+
{
|
|
2534
|
+
"name": "QuestionCard",
|
|
2535
|
+
"slug": "question-card",
|
|
2536
|
+
"group": "elements",
|
|
2537
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
2538
|
+
"summary": "An agent's free-text question, answered in place, with where the answer has got to.",
|
|
2539
|
+
"status": "stable",
|
|
2540
|
+
"url": "/docs/components/question-card",
|
|
2541
|
+
"mdUrl": "/docs/components/question-card.md",
|
|
2542
|
+
"jsonUrl": "/r/components/question-card.json",
|
|
2543
|
+
"path": "./components/question-card.json",
|
|
2544
|
+
"sha256": "f1cc206d8ee958218ab8f6d201faf127b32a3ac93b551de6fbe96f76dba31194"
|
|
2545
|
+
},
|
|
2507
2546
|
{
|
|
2508
2547
|
"name": "QueueDock",
|
|
2509
2548
|
"slug": "queue-dock",
|
|
@@ -2996,7 +3035,7 @@
|
|
|
2996
3035
|
"mdUrl": "/docs/components/tool-call.md",
|
|
2997
3036
|
"jsonUrl": "/r/components/tool-call.json",
|
|
2998
3037
|
"path": "./components/tool-call.json",
|
|
2999
|
-
"sha256": "
|
|
3038
|
+
"sha256": "e476576ad31ab0e9120e6ee28d641ab56b543f0e16a9133b1a7bd5f061ea86cb"
|
|
3000
3039
|
},
|
|
3001
3040
|
{
|
|
3002
3041
|
"name": "ToolError",
|
|
@@ -3022,7 +3061,7 @@
|
|
|
3022
3061
|
"mdUrl": "/docs/components/tool-group.md",
|
|
3023
3062
|
"jsonUrl": "/r/components/tool-group.json",
|
|
3024
3063
|
"path": "./components/tool-group.json",
|
|
3025
|
-
"sha256": "
|
|
3064
|
+
"sha256": "9f7bc4eba57b4621043f31dcb9e4e895ca3ae48d30c9934fbb79a467a20a4d6f"
|
|
3026
3065
|
},
|
|
3027
3066
|
{
|
|
3028
3067
|
"name": "ToolTimeline",
|
|
@@ -3089,6 +3128,19 @@
|
|
|
3089
3128
|
"path": "./components/unread-divider.json",
|
|
3090
3129
|
"sha256": "3b6134e7f2ce506314f6ef6b75ac6c157df6b9729b17244d27ea15c9cd5a4a05"
|
|
3091
3130
|
},
|
|
3131
|
+
{
|
|
3132
|
+
"name": "UnsupportedRequestCard",
|
|
3133
|
+
"slug": "unsupported-request-card",
|
|
3134
|
+
"group": "elements",
|
|
3135
|
+
"importPath": "@cueplusplus/ui/elements",
|
|
3136
|
+
"summary": "A request this app cannot answer, said plainly, with no answer offered.",
|
|
3137
|
+
"status": "stable",
|
|
3138
|
+
"url": "/docs/components/unsupported-request-card",
|
|
3139
|
+
"mdUrl": "/docs/components/unsupported-request-card.md",
|
|
3140
|
+
"jsonUrl": "/r/components/unsupported-request-card.json",
|
|
3141
|
+
"path": "./components/unsupported-request-card.json",
|
|
3142
|
+
"sha256": "618123a0f491876a7d70577aa061ade01f797b1c965981b5f83178e33a7035ba"
|
|
3143
|
+
},
|
|
3092
3144
|
{
|
|
3093
3145
|
"name": "VerdictRow",
|
|
3094
3146
|
"slug": "verdict-row",
|
|
@@ -4181,6 +4233,19 @@
|
|
|
4181
4233
|
"path": "./components/pagination.json",
|
|
4182
4234
|
"sha256": "aeb9510959fc9c9014399a0039dc6de2c15cccd3c1357d88e5b4b45b00b5ef26"
|
|
4183
4235
|
},
|
|
4236
|
+
{
|
|
4237
|
+
"name": "PaneSeam",
|
|
4238
|
+
"slug": "pane-seam",
|
|
4239
|
+
"group": "layout",
|
|
4240
|
+
"importPath": "@cueplusplus/ui",
|
|
4241
|
+
"summary": "One accessible seam that resizes one pane, with no dependency.",
|
|
4242
|
+
"status": "stable",
|
|
4243
|
+
"url": "/docs/components/pane-seam",
|
|
4244
|
+
"mdUrl": "/docs/components/pane-seam.md",
|
|
4245
|
+
"jsonUrl": "/r/components/pane-seam.json",
|
|
4246
|
+
"path": "./components/pane-seam.json",
|
|
4247
|
+
"sha256": "5cd0587137f4259c9c54926b9e2c8b68fb4c48c4cef5e08f8b323390a6d576bf"
|
|
4248
|
+
},
|
|
4184
4249
|
{
|
|
4185
4250
|
"name": "Preview",
|
|
4186
4251
|
"slug": "preview",
|
|
@@ -4205,7 +4270,7 @@
|
|
|
4205
4270
|
"mdUrl": "/docs/components/resizable.md",
|
|
4206
4271
|
"jsonUrl": "/r/components/resizable.json",
|
|
4207
4272
|
"path": "./components/resizable.json",
|
|
4208
|
-
"sha256": "
|
|
4273
|
+
"sha256": "3a334f88d4e107fc5f14b17d7813c4e372b56108f12e6478bc979f680bcd4671"
|
|
4209
4274
|
},
|
|
4210
4275
|
{
|
|
4211
4276
|
"name": "Reveal",
|
|
@@ -4233,6 +4298,19 @@
|
|
|
4233
4298
|
"path": "./components/sidebar.json",
|
|
4234
4299
|
"sha256": "5a49a67db2069dd3b15ed078494c17d01fc9f067d536c57ad492c489d0ade68e"
|
|
4235
4300
|
},
|
|
4301
|
+
{
|
|
4302
|
+
"name": "SplitPane",
|
|
4303
|
+
"slug": "split-pane",
|
|
4304
|
+
"group": "layout",
|
|
4305
|
+
"importPath": "@cueplusplus/ui",
|
|
4306
|
+
"summary": "A list beside its detail, stacking into a drill-in with Back when the frame is narrow.",
|
|
4307
|
+
"status": "stable",
|
|
4308
|
+
"url": "/docs/components/split-pane",
|
|
4309
|
+
"mdUrl": "/docs/components/split-pane.md",
|
|
4310
|
+
"jsonUrl": "/r/components/split-pane.json",
|
|
4311
|
+
"path": "./components/split-pane.json",
|
|
4312
|
+
"sha256": "e80940179e5b6db0edf56d5146416767b5b0de10928d54eab5b5052d4278abff"
|
|
4313
|
+
},
|
|
4236
4314
|
{
|
|
4237
4315
|
"name": "Stack",
|
|
4238
4316
|
"slug": "stack",
|