@cueplusplus/ui 0.20.1 → 0.22.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.
Files changed (236) hide show
  1. package/CHANGELOG.md +133 -0
  2. package/dist/chat/agent-pile.js +2 -2
  3. package/dist/chrome/_status-bar.js +1 -1
  4. package/dist/chrome/app-shell.js +1 -1
  5. package/dist/chrome/navigation-menu.js +3 -3
  6. package/dist/chrome/row.js +1 -1
  7. package/dist/chrome/scroll-area.js +1 -1
  8. package/dist/chrome/section-header.js +1 -1
  9. package/dist/chrome/segmented-control.js +1 -1
  10. package/dist/chrome/tabs.js +1 -1
  11. package/dist/chrome/toolbar.js +1 -1
  12. package/dist/chrome/tree.js +3 -3
  13. package/dist/date/calendar.js +3 -3
  14. package/dist/dmx/channel-matrix.js +1 -1
  15. package/dist/dmx/universe-grid.js +1 -1
  16. package/dist/elements/agent-handoff.js +3 -3
  17. package/dist/elements/agent-plan.js +1 -1
  18. package/dist/elements/agent-status.js +1 -1
  19. package/dist/elements/agent-surface.d.ts +9 -6
  20. package/dist/elements/agent-surface.js +3 -2
  21. package/dist/elements/approval-card.d.ts +29 -3
  22. package/dist/elements/approval-card.js +18 -8
  23. package/dist/elements/artifact-card.js +2 -2
  24. package/dist/elements/canvas-split.js +3 -3
  25. package/dist/elements/chart.js +1 -1
  26. package/dist/elements/chat-panel.js +2 -2
  27. package/dist/elements/checkpoint-history.js +1 -1
  28. package/dist/elements/code-diff.js +1 -1
  29. package/dist/elements/code-runner.js +1 -1
  30. package/dist/elements/composer.d.ts +8 -2
  31. package/dist/elements/composer.js +20 -12
  32. package/dist/elements/computer-use.js +2 -2
  33. package/dist/elements/confidence-marker.js +1 -1
  34. package/dist/elements/connection-state.js +2 -2
  35. package/dist/elements/context-breakdown.js +1 -1
  36. package/dist/elements/context-usage.js +1 -1
  37. package/dist/elements/conversation-search.js +2 -2
  38. package/dist/elements/cost-meter.js +1 -1
  39. package/dist/elements/data-table.js +1 -1
  40. package/dist/elements/diagram.js +1 -1
  41. package/dist/elements/draft-restore.js +2 -2
  42. package/dist/elements/edit-message.js +1 -1
  43. package/dist/elements/elements.css +134 -0
  44. package/dist/elements/elicitation-form.d.ts +8 -1
  45. package/dist/elements/elicitation-form.js +24 -16
  46. package/dist/elements/empty-state.js +3 -3
  47. package/dist/elements/error-state.js +2 -2
  48. package/dist/elements/event-feed.d.ts +88 -0
  49. package/dist/elements/event-feed.js +190 -0
  50. package/dist/elements/feedback-dialog.js +2 -2
  51. package/dist/elements/file-tree.js +1 -1
  52. package/dist/elements/flow-graph.js +2 -2
  53. package/dist/elements/generative.css +13 -0
  54. package/dist/elements/generative.d.ts +8 -6
  55. package/dist/elements/generative.js +4 -3
  56. package/dist/elements/image-generation.js +2 -2
  57. package/dist/elements/index.d.ts +7 -3
  58. package/dist/elements/index.js +5 -2
  59. package/dist/elements/inline-citation.js +1 -1
  60. package/dist/elements/job-progress.js +1 -1
  61. package/dist/elements/launcher-bubble.js +3 -3
  62. package/dist/elements/loading-state.js +1 -1
  63. package/dist/elements/map-answer.js +1 -1
  64. package/dist/elements/math-block.js +1 -1
  65. package/dist/elements/mcp-server-panel.js +3 -3
  66. package/dist/elements/memory-chips.js +1 -1
  67. package/dist/elements/message-attachment.js +3 -3
  68. package/dist/elements/message-branches.js +1 -1
  69. package/dist/elements/message-pair.js +2 -2
  70. package/dist/elements/message-queue.js +1 -1
  71. package/dist/elements/message-timing.js +1 -1
  72. package/dist/elements/mobile-composer.js +1 -1
  73. package/dist/elements/model-picker.js +1 -1
  74. package/dist/elements/number-ticker.js +1 -1
  75. package/dist/elements/onboarding.js +3 -3
  76. package/dist/elements/permission-grant.js +3 -3
  77. package/dist/elements/prompt-library.js +1 -1
  78. package/dist/elements/question-card.d.ts +50 -0
  79. package/dist/elements/question-card.js +117 -0
  80. package/dist/elements/queue-dock.js +1 -1
  81. package/dist/elements/quota-banner.js +1 -1
  82. package/dist/elements/quote-reply.js +3 -3
  83. package/dist/elements/read-aloud.js +2 -2
  84. package/dist/elements/reasoning-effort.js +2 -2
  85. package/dist/elements/reasoning-panel.js +3 -3
  86. package/dist/elements/recommendation-card.js +2 -2
  87. package/dist/elements/regenerate-menu.js +1 -1
  88. package/dist/elements/request-delivery.js +31 -0
  89. package/dist/elements/research-report.js +1 -1
  90. package/dist/elements/retrieval-chunks.js +3 -3
  91. package/dist/elements/revert-dock.js +1 -1
  92. package/dist/elements/reviewable-diff.js +4 -4
  93. package/dist/elements/schedule-card.js +2 -2
  94. package/dist/elements/score-breakdown.js +2 -2
  95. package/dist/elements/scroll-anchor.js +2 -2
  96. package/dist/elements/settings-panel.js +3 -3
  97. package/dist/elements/sources.js +1 -1
  98. package/dist/elements/spec-sheet.js +1 -1
  99. package/dist/elements/stopped-run.js +2 -2
  100. package/dist/elements/streaming-text.js +2 -2
  101. package/dist/elements/subagent-list.js +4 -4
  102. package/dist/elements/suggestions.js +1 -1
  103. package/dist/elements/surfaces.d.ts +6 -6
  104. package/dist/elements/surfaces.js +7 -7
  105. package/dist/elements/tail-status.js +1 -1
  106. package/dist/elements/terminal-block.js +1 -1
  107. package/dist/elements/thinking-indicator.js +1 -1
  108. package/dist/elements/timeline.js +1 -1
  109. package/dist/elements/todo-list.js +1 -1
  110. package/dist/elements/tool-call.d.ts +18 -2
  111. package/dist/elements/tool-call.js +20 -11
  112. package/dist/elements/tool-error.js +2 -2
  113. package/dist/elements/tool-group.d.ts +11 -3
  114. package/dist/elements/tool-group.js +62 -38
  115. package/dist/elements/tool-state.d.ts +13 -0
  116. package/dist/elements/tool-state.js +44 -0
  117. package/dist/elements/tool-timeline.js +2 -2
  118. package/dist/elements/trace-waterfall.js +2 -2
  119. package/dist/elements/unsupported-request-card.d.ts +31 -0
  120. package/dist/elements/unsupported-request-card.js +80 -0
  121. package/dist/elements/vocabulary.d.ts +50 -1
  122. package/dist/elements/vocabulary.js +50 -1
  123. package/dist/elements/voice-conversation.js +5 -5
  124. package/dist/elements/web-preview.js +1 -1
  125. package/dist/elements/web-search.js +2 -2
  126. package/dist/elements/work-collapse.js +1 -1
  127. package/dist/forms/_chassis.d.ts +6 -1
  128. package/dist/forms/_chassis.js +8 -3
  129. package/dist/forms/file-upload.js +1 -1
  130. package/dist/forms/rating.js +1 -1
  131. package/dist/forms/select.js +1 -1
  132. package/dist/forms/switch.js +2 -2
  133. package/dist/forms/toggle.js +1 -1
  134. package/dist/index.d.ts +3 -1
  135. package/dist/index.js +3 -1
  136. package/dist/instruments/_ledger-disclosure.js +1 -1
  137. package/dist/instruments/data-tree.js +1 -1
  138. package/dist/instruments/meter.js +1 -1
  139. package/dist/instruments/seam-grid.js +1 -1
  140. package/dist/layout/_collapse.js +3 -3
  141. package/dist/layout/bento.js +1 -1
  142. package/dist/layout/breadcrumb.js +1 -1
  143. package/dist/layout/carousel.js +1 -1
  144. package/dist/layout/collapsible.js +1 -1
  145. package/dist/layout/index.d.ts +3 -1
  146. package/dist/layout/index.js +3 -1
  147. package/dist/layout/item.js +1 -1
  148. package/dist/layout/link.js +1 -1
  149. package/dist/layout/pagination.js +1 -1
  150. package/dist/layout/pane-seam.d.ts +75 -0
  151. package/dist/layout/pane-seam.js +127 -0
  152. package/dist/layout/resizable.d.ts +2 -1
  153. package/dist/layout/resizable.js +3 -2
  154. package/dist/layout/sidebar.js +3 -3
  155. package/dist/layout/split-pane.d.ts +74 -0
  156. package/dist/layout/split-pane.js +135 -0
  157. package/dist/layout/stepper.js +1 -1
  158. package/dist/lib/auto-grow.js +42 -0
  159. package/dist/overlays/_surface.d.ts +5 -5
  160. package/dist/overlays/_surface.js +4 -4
  161. package/dist/overlays/drawer.js +1 -1
  162. package/dist/overlays/menubar.js +1 -1
  163. package/dist/overlays/sheet.js +1 -1
  164. package/dist/overlays/toast.js +1 -1
  165. package/dist/primitives/button.js +1 -1
  166. package/dist/primitives/chip.d.ts +1 -1
  167. package/dist/styles.css +52 -0
  168. package/dist/system/_paint-stroke-sunken.js +22 -2
  169. package/dist/system/_paint-stroke-surface-1.js +5 -1
  170. package/dist/system/_paint-stroke-surface-2.js +5 -1
  171. package/dist/system/_style-disabled.js +1 -7
  172. package/dist/system/agent-skin.d.ts +11 -5
  173. package/manifest/components/agent-surface.json +5 -4
  174. package/manifest/components/alert-dialog.json +1 -0
  175. package/manifest/components/approval-card.json +45 -7
  176. package/manifest/components/autocomplete.json +2 -0
  177. package/manifest/components/button.json +0 -3
  178. package/manifest/components/card.json +1 -0
  179. package/manifest/components/channel-matrix.json +1 -0
  180. package/manifest/components/chart-tooltip-content.json +1 -0
  181. package/manifest/components/checkbox-group.json +0 -3
  182. package/manifest/components/checkbox.json +0 -3
  183. package/manifest/components/color-field.json +1 -0
  184. package/manifest/components/color-picker.json +1 -0
  185. package/manifest/components/combobox.json +2 -0
  186. package/manifest/components/command-palette.json +1 -0
  187. package/manifest/components/composer-input.json +16 -2
  188. package/manifest/components/composer.json +1 -0
  189. package/manifest/components/context-menu.json +1 -0
  190. package/manifest/components/date-field.json +1 -0
  191. package/manifest/components/date-picker.json +1 -0
  192. package/manifest/components/date-range-picker.json +1 -0
  193. package/manifest/components/dialog.json +1 -0
  194. package/manifest/components/dmx-bar.json +1 -0
  195. package/manifest/components/dmx-strip.json +1 -0
  196. package/manifest/components/drawer.json +1 -0
  197. package/manifest/components/dropdown-menu.json +1 -0
  198. package/manifest/components/elicitation-form.json +16 -1
  199. package/manifest/components/env-var-input.json +1 -0
  200. package/manifest/components/event-feed.json +171 -0
  201. package/manifest/components/event-row.json +116 -0
  202. package/manifest/components/generative-ui.json +4 -3
  203. package/manifest/components/hover-card.json +1 -0
  204. package/manifest/components/input-group.json +1 -0
  205. package/manifest/components/input.json +1 -0
  206. package/manifest/components/menubar.json +1 -0
  207. package/manifest/components/multi-select.json +2 -0
  208. package/manifest/components/musical-time-input.json +1 -0
  209. package/manifest/components/navigation-menu.json +1 -0
  210. package/manifest/components/number-field.json +1 -0
  211. package/manifest/components/otp-field.json +1 -0
  212. package/manifest/components/pane-seam.json +171 -0
  213. package/manifest/components/password-input.json +1 -0
  214. package/manifest/components/popover.json +1 -0
  215. package/manifest/components/question-card.json +157 -0
  216. package/manifest/components/resizable.json +1 -1
  217. package/manifest/components/scrub-input.json +1 -0
  218. package/manifest/components/search-input.json +1 -0
  219. package/manifest/components/select.json +2 -0
  220. package/manifest/components/sheet.json +1 -0
  221. package/manifest/components/split-pane.json +224 -0
  222. package/manifest/components/switch.json +0 -3
  223. package/manifest/components/tags-input.json +2 -0
  224. package/manifest/components/textarea.json +1 -0
  225. package/manifest/components/theme-configurator.json +1 -0
  226. package/manifest/components/time-field.json +1 -0
  227. package/manifest/components/toast.json +1 -0
  228. package/manifest/components/toggle.json +0 -3
  229. package/manifest/components/tool-call.json +46 -2
  230. package/manifest/components/tool-group.json +15 -3
  231. package/manifest/components/tooltip.json +1 -0
  232. package/manifest/components/unsupported-request-card.json +117 -0
  233. package/manifest/fixtures.json +16 -0
  234. package/manifest/manifest.json +134 -56
  235. package/manifest/tokens.json +12 -2
  236. package/package.json +3 -3
@@ -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
+ }
@@ -65,9 +65,6 @@
65
65
  "--cue-focus",
66
66
  "--cue-focus-ring",
67
67
  "--cue-font-mono",
68
- "--cue-paint-stroke-angle",
69
- "--cue-paint-stroke-from",
70
- "--cue-paint-stroke-to",
71
68
  "--cue-space-3",
72
69
  "--cue-style-body-weight",
73
70
  "--cue-style-check-edge",
@@ -215,6 +215,7 @@
215
215
  "--cue-focus",
216
216
  "--cue-focus-ring",
217
217
  "--cue-font-mono",
218
+ "--cue-ground",
218
219
  "--cue-hair-strong",
219
220
  "--cue-icon-sm",
220
221
  "--cue-info",
@@ -268,6 +269,7 @@
268
269
  "--cue-style-disabled-ink",
269
270
  "--cue-style-disabled-opacity",
270
271
  "--cue-style-display-variation",
272
+ "--cue-style-field-fill",
271
273
  "--cue-style-field-focus-offset",
272
274
  "--cue-style-field-hover-edge",
273
275
  "--cue-style-field-pad",
@@ -92,6 +92,7 @@
92
92
  "--cue-style-disabled-fill",
93
93
  "--cue-style-disabled-ink",
94
94
  "--cue-style-disabled-opacity",
95
+ "--cue-style-field-fill",
95
96
  "--cue-style-field-focus-offset",
96
97
  "--cue-style-field-hover-edge",
97
98
  "--cue-style-field-pad",
@@ -127,6 +127,7 @@
127
127
  "--cue-fg-subtle",
128
128
  "--cue-font-mono",
129
129
  "--cue-font-sans",
130
+ "--cue-ground",
130
131
  "--cue-icon-sm",
131
132
  "--cue-leading-ui",
132
133
  "--cue-paint-rim-width",
@@ -80,6 +80,7 @@
80
80
  "--cue-style-disabled-fill",
81
81
  "--cue-style-disabled-ink",
82
82
  "--cue-style-disabled-opacity",
83
+ "--cue-style-field-fill",
83
84
  "--cue-style-field-focus-offset",
84
85
  "--cue-style-field-hover-edge",
85
86
  "--cue-style-field-pad",
@@ -78,6 +78,7 @@
78
78
  "--cue-focus",
79
79
  "--cue-focus-ring",
80
80
  "--cue-font-mono",
81
+ "--cue-ground",
81
82
  "--cue-icon-md",
82
83
  "--cue-icon-sm",
83
84
  "--cue-info",
@@ -103,9 +103,6 @@
103
103
  "--cue-font-mono",
104
104
  "--cue-icon-md",
105
105
  "--cue-icon-sm",
106
- "--cue-paint-stroke-angle",
107
- "--cue-paint-stroke-from",
108
- "--cue-paint-stroke-to",
109
106
  "--cue-radius-control",
110
107
  "--cue-space-3",
111
108
  "--cue-space-4",
@@ -62,13 +62,58 @@
62
62
  {
63
63
  "name": "running",
64
64
  "type": "boolean",
65
- "required": true,
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"
@@ -146,6 +146,7 @@
146
146
  "--cue-fg",
147
147
  "--cue-fg-muted",
148
148
  "--cue-font-mono",
149
+ "--cue-ground",
149
150
  "--cue-leading-ui",
150
151
  "--cue-paint-rim-width",
151
152
  "--cue-paint-scrim-filter",
@@ -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
+ }
@@ -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",