@cueplusplus/ui 0.3.0 → 0.6.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 (541) hide show
  1. package/CHANGELOG.md +2263 -0
  2. package/dist/agent-runtime/_glyphs.js +43 -0
  3. package/dist/agent-runtime/branch-picker.d.ts +45 -0
  4. package/dist/agent-runtime/branch-picker.js +87 -0
  5. package/dist/agent-runtime/index.d.ts +4 -0
  6. package/dist/agent-runtime/index.js +4 -0
  7. package/dist/agent-runtime/tool-call-card.d.ts +69 -0
  8. package/dist/agent-runtime/tool-call-card.js +187 -0
  9. package/dist/agent-runtime/use-agent-thread.d.ts +164 -0
  10. package/dist/agent-runtime/use-agent-thread.js +251 -0
  11. package/dist/chat/index.d.ts +2 -2
  12. package/dist/chat/message-list.d.ts +6 -0
  13. package/dist/chat/message-list.js +35 -0
  14. package/dist/chrome/_drag.js +59 -0
  15. package/dist/chrome/_status-bar-item.js +85 -0
  16. package/dist/chrome/_status-bar.d.ts +15 -0
  17. package/dist/chrome/_status-bar.js +171 -0
  18. package/dist/chrome/app-shell.d.ts +120 -2
  19. package/dist/chrome/app-shell.js +107 -8
  20. package/dist/chrome/index.d.ts +4 -3
  21. package/dist/chrome/status-bar.d.ts +87 -4
  22. package/dist/chrome/status-bar.js +80 -16
  23. package/dist/chrome/title-bar.d.ts +11 -1
  24. package/dist/chrome/title-bar.js +1 -3
  25. package/dist/configurator/_export.js +3 -2
  26. package/dist/configurator/_overrides.d.ts +1 -1
  27. package/dist/configurator/token-editor.js +4 -1
  28. package/dist/date/_segments.js +52 -6
  29. package/dist/elements/activity-graph.d.ts +40 -0
  30. package/dist/elements/activity-graph.js +81 -0
  31. package/dist/elements/agent-card.d.ts +49 -0
  32. package/dist/elements/agent-card.js +91 -0
  33. package/dist/elements/agent-handoff.d.ts +24 -0
  34. package/dist/elements/agent-handoff.js +53 -0
  35. package/dist/elements/agent-mode-badge.d.ts +72 -0
  36. package/dist/elements/agent-mode-badge.js +110 -0
  37. package/dist/elements/agent-plan.d.ts +24 -0
  38. package/dist/elements/agent-plan.js +74 -0
  39. package/dist/elements/agent-status.d.ts +29 -0
  40. package/dist/elements/agent-status.js +46 -0
  41. package/dist/elements/agent-surface.d.ts +65 -0
  42. package/dist/elements/agent-surface.js +68 -0
  43. package/dist/elements/animated-number.d.ts +86 -0
  44. package/dist/elements/animated-number.js +118 -0
  45. package/dist/elements/approval-card.d.ts +40 -0
  46. package/dist/elements/approval-card.js +78 -0
  47. package/dist/elements/artifact-card.d.ts +30 -0
  48. package/dist/elements/artifact-card.js +58 -0
  49. package/dist/elements/background-inbox.d.ts +39 -0
  50. package/dist/elements/background-inbox.js +60 -0
  51. package/dist/elements/canvas-split.d.ts +77 -0
  52. package/dist/elements/canvas-split.js +138 -0
  53. package/dist/elements/chart.d.ts +41 -0
  54. package/dist/elements/chart.js +117 -0
  55. package/dist/elements/chat-panel.d.ts +46 -0
  56. package/dist/elements/chat-panel.js +104 -0
  57. package/dist/elements/checkpoint-history.d.ts +31 -0
  58. package/dist/elements/checkpoint-history.js +65 -0
  59. package/dist/elements/clamp.d.ts +90 -0
  60. package/dist/elements/clamp.js +109 -0
  61. package/dist/elements/code-diff.d.ts +42 -0
  62. package/dist/elements/code-diff.js +69 -0
  63. package/dist/elements/code-runner.d.ts +38 -0
  64. package/dist/elements/code-runner.js +84 -0
  65. package/dist/elements/command-palette.d.ts +48 -0
  66. package/dist/elements/command-palette.js +129 -0
  67. package/dist/elements/compaction-row.d.ts +63 -0
  68. package/dist/elements/compaction-row.js +110 -0
  69. package/dist/elements/comparison-card.d.ts +47 -0
  70. package/dist/elements/comparison-card.js +69 -0
  71. package/dist/elements/composer.d.ts +274 -0
  72. package/dist/elements/composer.js +505 -0
  73. package/dist/elements/computer-use.d.ts +40 -0
  74. package/dist/elements/computer-use.js +92 -0
  75. package/dist/elements/confidence-marker.d.ts +39 -0
  76. package/dist/elements/confidence-marker.js +64 -0
  77. package/dist/elements/connection-state.d.ts +29 -0
  78. package/dist/elements/connection-state.js +66 -0
  79. package/dist/elements/context-breakdown.d.ts +30 -0
  80. package/dist/elements/context-breakdown.js +86 -0
  81. package/dist/elements/context-usage.d.ts +99 -0
  82. package/dist/elements/context-usage.js +225 -0
  83. package/dist/elements/conversation-search.d.ts +48 -0
  84. package/dist/elements/conversation-search.js +88 -0
  85. package/dist/elements/cost-meter.d.ts +33 -0
  86. package/dist/elements/cost-meter.js +75 -0
  87. package/dist/elements/data-table.d.ts +31 -0
  88. package/dist/elements/data-table.js +67 -0
  89. package/dist/elements/day-separator.d.ts +34 -0
  90. package/dist/elements/day-separator.js +50 -0
  91. package/dist/elements/diagram.d.ts +34 -0
  92. package/dist/elements/diagram.js +75 -0
  93. package/dist/elements/document-reference.d.ts +37 -0
  94. package/dist/elements/document-reference.js +66 -0
  95. package/dist/elements/draft-restore.d.ts +27 -0
  96. package/dist/elements/draft-restore.js +54 -0
  97. package/dist/elements/edit-message.d.ts +36 -0
  98. package/dist/elements/edit-message.js +77 -0
  99. package/dist/elements/elements.css +459 -0
  100. package/dist/elements/elicitation-form.d.ts +48 -0
  101. package/dist/elements/elicitation-form.js +106 -0
  102. package/dist/elements/empty-state.d.ts +52 -0
  103. package/dist/elements/empty-state.js +98 -0
  104. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  105. package/dist/elements/end-of-turn-summary.js +75 -0
  106. package/dist/elements/error-state.d.ts +29 -0
  107. package/dist/elements/error-state.js +55 -0
  108. package/dist/elements/feedback-dialog.d.ts +36 -0
  109. package/dist/elements/feedback-dialog.js +81 -0
  110. package/dist/elements/file-tree.d.ts +45 -0
  111. package/dist/elements/file-tree.js +84 -0
  112. package/dist/elements/flow-graph.d.ts +45 -0
  113. package/dist/elements/flow-graph.js +78 -0
  114. package/dist/elements/generative/chart.js +200 -0
  115. package/dist/elements/generative/faults.js +111 -0
  116. package/dist/elements/generative/icons.d.ts +41 -0
  117. package/dist/elements/generative/icons.js +190 -0
  118. package/dist/elements/generative/intrinsics.js +483 -0
  119. package/dist/elements/generative/spec.d.ts +110 -0
  120. package/dist/elements/generative/spec.js +366 -0
  121. package/dist/elements/generative.css +1145 -0
  122. package/dist/elements/generative.d.ts +144 -0
  123. package/dist/elements/generative.js +126 -0
  124. package/dist/elements/guardrail-notice.d.ts +29 -0
  125. package/dist/elements/guardrail-notice.js +63 -0
  126. package/dist/elements/image-generation.d.ts +18 -0
  127. package/dist/elements/image-generation.js +64 -0
  128. package/dist/elements/index.d.ts +116 -0
  129. package/dist/elements/index.js +115 -0
  130. package/dist/elements/inline-citation.d.ts +43 -0
  131. package/dist/elements/inline-citation.js +93 -0
  132. package/dist/elements/job-progress.d.ts +49 -0
  133. package/dist/elements/job-progress.js +74 -0
  134. package/dist/elements/launcher-bubble.d.ts +34 -0
  135. package/dist/elements/launcher-bubble.js +72 -0
  136. package/dist/elements/live-region-announcer.d.ts +130 -0
  137. package/dist/elements/live-region-announcer.js +230 -0
  138. package/dist/elements/loading-state.d.ts +27 -0
  139. package/dist/elements/loading-state.js +36 -0
  140. package/dist/elements/map-answer.d.ts +38 -0
  141. package/dist/elements/map-answer.js +93 -0
  142. package/dist/elements/markdown.d.ts +131 -0
  143. package/dist/elements/markdown.js +528 -0
  144. package/dist/elements/math-block.d.ts +51 -0
  145. package/dist/elements/math-block.js +70 -0
  146. package/dist/elements/mcp-server-panel.d.ts +41 -0
  147. package/dist/elements/mcp-server-panel.js +115 -0
  148. package/dist/elements/memory-chips.d.ts +30 -0
  149. package/dist/elements/memory-chips.js +43 -0
  150. package/dist/elements/message-actions.d.ts +38 -0
  151. package/dist/elements/message-actions.js +71 -0
  152. package/dist/elements/message-attachment.d.ts +48 -0
  153. package/dist/elements/message-attachment.js +63 -0
  154. package/dist/elements/message-branches.d.ts +25 -0
  155. package/dist/elements/message-branches.js +65 -0
  156. package/dist/elements/message-pair.d.ts +33 -0
  157. package/dist/elements/message-pair.js +65 -0
  158. package/dist/elements/message-queue.d.ts +31 -0
  159. package/dist/elements/message-queue.js +80 -0
  160. package/dist/elements/message-timing.d.ts +33 -0
  161. package/dist/elements/message-timing.js +37 -0
  162. package/dist/elements/mobile-composer.d.ts +44 -0
  163. package/dist/elements/mobile-composer.js +88 -0
  164. package/dist/elements/model-picker.d.ts +38 -0
  165. package/dist/elements/model-picker.js +69 -0
  166. package/dist/elements/number-ticker.d.ts +18 -0
  167. package/dist/elements/number-ticker.js +47 -0
  168. package/dist/elements/onboarding.d.ts +30 -0
  169. package/dist/elements/onboarding.js +75 -0
  170. package/dist/elements/permission-grant.d.ts +35 -0
  171. package/dist/elements/permission-grant.js +86 -0
  172. package/dist/elements/permission-scopes.d.ts +215 -0
  173. package/dist/elements/permission-scopes.js +249 -0
  174. package/dist/elements/prompt-library.d.ts +43 -0
  175. package/dist/elements/prompt-library.js +117 -0
  176. package/dist/elements/queue-dock.d.ts +101 -0
  177. package/dist/elements/queue-dock.js +132 -0
  178. package/dist/elements/quota-banner.d.ts +26 -0
  179. package/dist/elements/quota-banner.js +66 -0
  180. package/dist/elements/quote-reply.d.ts +44 -0
  181. package/dist/elements/quote-reply.js +79 -0
  182. package/dist/elements/range.d.ts +29 -0
  183. package/dist/elements/range.js +45 -0
  184. package/dist/elements/read-aloud.d.ts +45 -0
  185. package/dist/elements/read-aloud.js +75 -0
  186. package/dist/elements/reasoning-effort.d.ts +36 -0
  187. package/dist/elements/reasoning-effort.js +67 -0
  188. package/dist/elements/reasoning-panel.d.ts +46 -0
  189. package/dist/elements/reasoning-panel.js +75 -0
  190. package/dist/elements/recommendation-card.d.ts +45 -0
  191. package/dist/elements/recommendation-card.js +83 -0
  192. package/dist/elements/regenerate-menu.d.ts +45 -0
  193. package/dist/elements/regenerate-menu.js +51 -0
  194. package/dist/elements/replay.d.ts +217 -0
  195. package/dist/elements/replay.js +498 -0
  196. package/dist/elements/research-report.d.ts +38 -0
  197. package/dist/elements/research-report.js +69 -0
  198. package/dist/elements/retrieval-chunks.d.ts +43 -0
  199. package/dist/elements/retrieval-chunks.js +81 -0
  200. package/dist/elements/revert-dock.d.ts +159 -0
  201. package/dist/elements/revert-dock.js +327 -0
  202. package/dist/elements/reviewable-diff.d.ts +45 -0
  203. package/dist/elements/reviewable-diff.js +110 -0
  204. package/dist/elements/risk-badge.d.ts +52 -0
  205. package/dist/elements/risk-badge.js +91 -0
  206. package/dist/elements/schedule-card.d.ts +42 -0
  207. package/dist/elements/schedule-card.js +90 -0
  208. package/dist/elements/score-breakdown.d.ts +47 -0
  209. package/dist/elements/score-breakdown.js +82 -0
  210. package/dist/elements/scroll-anchor.d.ts +32 -0
  211. package/dist/elements/scroll-anchor.js +121 -0
  212. package/dist/elements/settings-panel.d.ts +52 -0
  213. package/dist/elements/settings-panel.js +107 -0
  214. package/dist/elements/shared-conversation.d.ts +39 -0
  215. package/dist/elements/shared-conversation.js +68 -0
  216. package/dist/elements/sources.d.ts +33 -0
  217. package/dist/elements/sources.js +61 -0
  218. package/dist/elements/speaker-identity.d.ts +32 -0
  219. package/dist/elements/speaker-identity.js +51 -0
  220. package/dist/elements/spec-sheet.d.ts +31 -0
  221. package/dist/elements/spec-sheet.js +45 -0
  222. package/dist/elements/stopped-run.d.ts +22 -0
  223. package/dist/elements/stopped-run.js +50 -0
  224. package/dist/elements/streaming-text.d.ts +31 -0
  225. package/dist/elements/streaming-text.js +45 -0
  226. package/dist/elements/subagent-list.d.ts +37 -0
  227. package/dist/elements/subagent-list.js +79 -0
  228. package/dist/elements/suggestions.d.ts +30 -0
  229. package/dist/elements/suggestions.js +36 -0
  230. package/dist/elements/surfaces.d.ts +85 -0
  231. package/dist/elements/surfaces.js +107 -0
  232. package/dist/elements/tail-status.d.ts +131 -0
  233. package/dist/elements/tail-status.js +94 -0
  234. package/dist/elements/terminal-block.d.ts +29 -0
  235. package/dist/elements/terminal-block.js +54 -0
  236. package/dist/elements/thinking-indicator.d.ts +18 -0
  237. package/dist/elements/thinking-indicator.js +36 -0
  238. package/dist/elements/thread-list.d.ts +35 -0
  239. package/dist/elements/thread-list.js +68 -0
  240. package/dist/elements/thread-search.d.ts +42 -0
  241. package/dist/elements/thread-search.js +99 -0
  242. package/dist/elements/timeline.d.ts +37 -0
  243. package/dist/elements/timeline.js +46 -0
  244. package/dist/elements/todo-list.d.ts +42 -0
  245. package/dist/elements/todo-list.js +59 -0
  246. package/dist/elements/tool-call.d.ts +41 -0
  247. package/dist/elements/tool-call.js +85 -0
  248. package/dist/elements/tool-error.d.ts +39 -0
  249. package/dist/elements/tool-error.js +76 -0
  250. package/dist/elements/tool-group.d.ts +45 -0
  251. package/dist/elements/tool-group.js +71 -0
  252. package/dist/elements/tool-timeline.d.ts +65 -0
  253. package/dist/elements/tool-timeline.js +88 -0
  254. package/dist/elements/trace-waterfall.d.ts +37 -0
  255. package/dist/elements/trace-waterfall.js +69 -0
  256. package/dist/elements/transcript-rules.d.ts +67 -0
  257. package/dist/elements/transcript-rules.js +95 -0
  258. package/dist/elements/turn-footer.d.ts +74 -0
  259. package/dist/elements/turn-footer.js +101 -0
  260. package/dist/elements/typing-indicator.d.ts +16 -0
  261. package/dist/elements/typing-indicator.js +51 -0
  262. package/dist/elements/verdict-row.d.ts +89 -0
  263. package/dist/elements/verdict-row.js +150 -0
  264. package/dist/elements/vocabulary.d.ts +612 -0
  265. package/dist/elements/vocabulary.js +611 -0
  266. package/dist/elements/voice-conversation.d.ts +49 -0
  267. package/dist/elements/voice-conversation.js +123 -0
  268. package/dist/elements/web-preview.d.ts +32 -0
  269. package/dist/elements/web-preview.js +66 -0
  270. package/dist/elements/web-search.d.ts +37 -0
  271. package/dist/elements/web-search.js +66 -0
  272. package/dist/elements/work-collapse.d.ts +103 -0
  273. package/dist/elements/work-collapse.js +131 -0
  274. package/dist/forms/_chassis.d.ts +104 -4
  275. package/dist/forms/_chassis.js +104 -4
  276. package/dist/forms/input-group.d.ts +8 -3
  277. package/dist/forms/input-group.js +8 -3
  278. package/dist/forms/number-field.d.ts +3 -2
  279. package/dist/forms/number-field.js +3 -2
  280. package/dist/icons/containers.d.ts +89 -0
  281. package/dist/icons/containers.js +295 -0
  282. package/dist/icons/index.d.ts +2 -0
  283. package/dist/index.d.ts +12 -6
  284. package/dist/index.js +5 -1
  285. package/dist/instruments/_data-row.js +118 -0
  286. package/dist/instruments/data-row.d.ts +94 -0
  287. package/dist/instruments/data-row.js +151 -0
  288. package/dist/instruments/data-tree.d.ts +126 -0
  289. package/dist/instruments/data-tree.js +303 -0
  290. package/dist/instruments/index.d.ts +5 -2
  291. package/dist/instruments/index.js +4 -1
  292. package/dist/instruments/ledger.d.ts +105 -0
  293. package/dist/instruments/ledger.js +114 -0
  294. package/dist/instruments/table.d.ts +70 -2
  295. package/dist/instruments/table.js +133 -39
  296. package/dist/instruments/two-step-button.js +25 -6
  297. package/dist/layout/sidebar.d.ts +19 -1
  298. package/dist/layout/sidebar.js +19 -1
  299. package/dist/primitives/button.js +11 -1
  300. package/dist/primitives/chip.d.ts +35 -9
  301. package/dist/primitives/chip.js +97 -11
  302. package/dist/system/agent-skin.d.ts +27 -0
  303. package/dist/system/agent-skin.js +20 -0
  304. package/dist/system/portal.d.ts +5 -3
  305. package/dist/system/portal.js +19 -5
  306. package/dist/system/theme-provider.js +54 -9
  307. package/dist/system/use-density.d.ts +9 -0
  308. package/dist/system/use-density.js +9 -0
  309. package/dist/system/use-isomorphic-layout-effect.js +19 -1
  310. package/dist/theming/_presets.d.ts +1 -1
  311. package/dist/theming/_presets.js +74 -11
  312. package/dist/theming/contrast.d.ts +16 -4
  313. package/dist/theming/contrast.js +33 -6
  314. package/dist/theming/create-theme.d.ts +6 -2
  315. package/dist/theming/create-theme.js +32 -5
  316. package/dist/theming/serialize.d.ts +10 -1
  317. package/dist/theming/serialize.js +62 -8
  318. package/manifest/components/activity-graph.json +88 -0
  319. package/manifest/components/agent-card.json +120 -0
  320. package/manifest/components/agent-handoff.json +87 -0
  321. package/manifest/components/agent-mode-badge.json +84 -0
  322. package/manifest/components/agent-plan.json +67 -0
  323. package/manifest/components/agent-status.json +73 -0
  324. package/manifest/components/agent-surface.json +78 -0
  325. package/manifest/components/alert-dialog.json +1 -1
  326. package/manifest/components/animated-number.json +67 -0
  327. package/manifest/components/app-shell.json +142 -9
  328. package/manifest/components/approval-card.json +106 -0
  329. package/manifest/components/artifact-card.json +81 -0
  330. package/manifest/components/audience-icon.json +52 -0
  331. package/manifest/components/autocomplete.json +2 -0
  332. package/manifest/components/background-inbox.json +71 -0
  333. package/manifest/components/branch-picker.json +124 -0
  334. package/manifest/components/button.json +1 -0
  335. package/manifest/components/canvas-split-body.json +62 -0
  336. package/manifest/components/canvas-split-document.json +54 -0
  337. package/manifest/components/canvas-split-header.json +83 -0
  338. package/manifest/components/canvas-split-line.json +62 -0
  339. package/manifest/components/canvas-split-message.json +62 -0
  340. package/manifest/components/canvas-split-thread.json +54 -0
  341. package/manifest/components/canvas-split.json +60 -0
  342. package/manifest/components/catalogue-icon.json +52 -0
  343. package/manifest/components/channel-beta-icon.json +52 -0
  344. package/manifest/components/channel-released-icon.json +52 -0
  345. package/manifest/components/chart.json +93 -0
  346. package/manifest/components/chat-empty-state.json +55 -0
  347. package/manifest/components/chat-panel-assistant-message.json +51 -0
  348. package/manifest/components/chat-panel-composer.json +66 -0
  349. package/manifest/components/chat-panel-messages.json +51 -0
  350. package/manifest/components/chat-panel-typing.json +51 -0
  351. package/manifest/components/chat-panel-user-message.json +51 -0
  352. package/manifest/components/chat-panel.json +57 -0
  353. package/manifest/components/checkpoint-history.json +80 -0
  354. package/manifest/components/chip.json +24 -12
  355. package/manifest/components/clamp.json +102 -0
  356. package/manifest/components/cli-tool-icon.json +52 -0
  357. package/manifest/components/code-diff.json +87 -0
  358. package/manifest/components/code-runner.json +97 -0
  359. package/manifest/components/color-field.json +2 -0
  360. package/manifest/components/color-picker.json +2 -0
  361. package/manifest/components/combobox.json +2 -0
  362. package/manifest/components/compaction-row.json +100 -0
  363. package/manifest/components/comparison-card.json +83 -0
  364. package/manifest/components/composer-actions.json +65 -0
  365. package/manifest/components/composer-attach-button.json +65 -0
  366. package/manifest/components/composer-attachment-chip.json +75 -0
  367. package/manifest/components/composer-attachments.json +60 -0
  368. package/manifest/components/composer-bar.json +73 -0
  369. package/manifest/components/composer-command-item.json +79 -0
  370. package/manifest/components/composer-context.json +67 -0
  371. package/manifest/components/composer-input.json +73 -0
  372. package/manifest/components/composer-menu-item.json +72 -0
  373. package/manifest/components/composer-menu.json +79 -0
  374. package/manifest/components/composer-model-item.json +75 -0
  375. package/manifest/components/composer-model-trigger.json +75 -0
  376. package/manifest/components/composer-person-item.json +79 -0
  377. package/manifest/components/composer-send.json +80 -0
  378. package/manifest/components/composer-toolbar.json +65 -0
  379. package/manifest/components/composer-voice-button.json +68 -0
  380. package/manifest/components/composer-voice.json +75 -0
  381. package/manifest/components/composer.json +2 -0
  382. package/manifest/components/computer-use.json +84 -0
  383. package/manifest/components/confidence-marker.json +74 -0
  384. package/manifest/components/connection-state.json +84 -0
  385. package/manifest/components/context-breakdown.json +65 -0
  386. package/manifest/components/context-usage.json +85 -0
  387. package/manifest/components/conversation-search.json +92 -0
  388. package/manifest/components/cost-meter.json +74 -0
  389. package/manifest/components/cue-portal-frame.json +1 -1
  390. package/manifest/components/data-row.json +203 -0
  391. package/manifest/components/data-tree.json +151 -0
  392. package/manifest/components/date-field.json +2 -0
  393. package/manifest/components/date-picker.json +2 -0
  394. package/manifest/components/date-range-picker.json +2 -0
  395. package/manifest/components/day-separator.json +58 -0
  396. package/manifest/components/delegation-card.json +1 -1
  397. package/manifest/components/density.json +1 -1
  398. package/manifest/components/diagram.json +100 -0
  399. package/manifest/components/document-reference.json +90 -0
  400. package/manifest/components/draft-restore.json +82 -0
  401. package/manifest/components/drawer.json +1 -1
  402. package/manifest/components/dropdown-menu.json +1 -1
  403. package/manifest/components/edit-message.json +105 -0
  404. package/manifest/components/elements-command-palette.json +100 -0
  405. package/manifest/components/elements-composer.json +71 -0
  406. package/manifest/components/elements-data-table.json +68 -0
  407. package/manifest/components/elements-timeline.json +69 -0
  408. package/manifest/components/elicitation-form.json +103 -0
  409. package/manifest/components/empty-state-composer.json +64 -0
  410. package/manifest/components/empty-state-greeting.json +49 -0
  411. package/manifest/components/empty-state-suggestion.json +57 -0
  412. package/manifest/components/empty-state-suggestions.json +49 -0
  413. package/manifest/components/end-of-turn-summary.json +77 -0
  414. package/manifest/components/env-var-input.json +2 -0
  415. package/manifest/components/error-state.json +80 -0
  416. package/manifest/components/feedback-dialog.json +107 -0
  417. package/manifest/components/file-tree.json +83 -0
  418. package/manifest/components/flow-graph.json +75 -0
  419. package/manifest/components/folder-icon.json +52 -0
  420. package/manifest/components/frac.json +59 -0
  421. package/manifest/components/generation-loader.json +64 -0
  422. package/manifest/components/generative-ui.json +93 -0
  423. package/manifest/components/guardrail-notice.json +91 -0
  424. package/manifest/components/hover-card.json +1 -1
  425. package/manifest/components/image-generation.json +67 -0
  426. package/manifest/components/info-tip.json +1 -1
  427. package/manifest/components/inline-citation.json +77 -0
  428. package/manifest/components/input-group.json +4 -2
  429. package/manifest/components/input.json +3 -1
  430. package/manifest/components/job-progress.json +96 -0
  431. package/manifest/components/launcher-bubble.json +105 -0
  432. package/manifest/components/ledger.json +187 -0
  433. package/manifest/components/live-region-announcer.json +79 -0
  434. package/manifest/components/map-answer.json +83 -0
  435. package/manifest/components/markdown-text.json +94 -0
  436. package/manifest/components/math-block.json +74 -0
  437. package/manifest/components/mcp-server-icon.json +52 -0
  438. package/manifest/components/mcp-server-panel.json +87 -0
  439. package/manifest/components/memory-chips.json +65 -0
  440. package/manifest/components/message-actions.json +99 -0
  441. package/manifest/components/message-attachments.json +63 -0
  442. package/manifest/components/message-branches.json +71 -0
  443. package/manifest/components/message-list.json +1 -1
  444. package/manifest/components/message-pair.json +86 -0
  445. package/manifest/components/message-queue.json +74 -0
  446. package/manifest/components/message-timing.json +62 -0
  447. package/manifest/components/mobile-composer.json +126 -0
  448. package/manifest/components/model-picker.json +76 -0
  449. package/manifest/components/multi-select.json +2 -0
  450. package/manifest/components/musical-time-input.json +2 -0
  451. package/manifest/components/node-card.json +1 -1
  452. package/manifest/components/node-handle.json +1 -1
  453. package/manifest/components/number-field.json +3 -1
  454. package/manifest/components/number-ticker.json +61 -0
  455. package/manifest/components/onboarding.json +84 -0
  456. package/manifest/components/otp-field.json +9 -7
  457. package/manifest/components/password-input.json +2 -0
  458. package/manifest/components/permission-grant.json +92 -0
  459. package/manifest/components/permission-scopes.json +139 -0
  460. package/manifest/components/popover.json +1 -1
  461. package/manifest/components/prompt-library.json +99 -0
  462. package/manifest/components/queue-dock.json +110 -0
  463. package/manifest/components/quota-banner.json +94 -0
  464. package/manifest/components/quote-reply.json +105 -0
  465. package/manifest/components/read-aloud.json +111 -0
  466. package/manifest/components/reasoning-effort.json +81 -0
  467. package/manifest/components/reasoning-panel.json +108 -0
  468. package/manifest/components/recommendation-card.json +107 -0
  469. package/manifest/components/regenerate-menu.json +89 -0
  470. package/manifest/components/replay-player.json +102 -0
  471. package/manifest/components/research-report.json +76 -0
  472. package/manifest/components/retrieval-chunks.json +84 -0
  473. package/manifest/components/revert-dock.json +150 -0
  474. package/manifest/components/reviewable-diff.json +93 -0
  475. package/manifest/components/risk-badge.json +74 -0
  476. package/manifest/components/schedule-card.json +101 -0
  477. package/manifest/components/score-breakdown.json +91 -0
  478. package/manifest/components/scroll-anchor.json +72 -0
  479. package/manifest/components/scroll-area.json +7 -7
  480. package/manifest/components/scrub-input.json +2 -0
  481. package/manifest/components/search-input.json +9 -7
  482. package/manifest/components/segmented-control.json +21 -21
  483. package/manifest/components/select.json +1 -0
  484. package/manifest/components/settings-panel.json +118 -0
  485. package/manifest/components/shared-conversation.json +89 -0
  486. package/manifest/components/shimmer-label.json +59 -0
  487. package/manifest/components/skill-icon.json +52 -0
  488. package/manifest/components/sources.json +83 -0
  489. package/manifest/components/speaker-identity.json +61 -0
  490. package/manifest/components/spec-sheet.json +80 -0
  491. package/manifest/components/stack-icon.json +52 -0
  492. package/manifest/components/stacks-matrix-icon.json +52 -0
  493. package/manifest/components/stat.json +1 -1
  494. package/manifest/components/status-bar.json +146 -12
  495. package/manifest/components/status-dot.json +1 -1
  496. package/manifest/components/stopped-run.json +81 -0
  497. package/manifest/components/streaming-text.json +71 -0
  498. package/manifest/components/sub.json +44 -0
  499. package/manifest/components/subagent-list.json +88 -0
  500. package/manifest/components/suggestions.json +84 -0
  501. package/manifest/components/sup.json +44 -0
  502. package/manifest/components/swap-label.json +71 -0
  503. package/manifest/components/table-scroll-region.json +6 -0
  504. package/manifest/components/table.json +88 -4
  505. package/manifest/components/tags-input.json +2 -0
  506. package/manifest/components/tail-status.json +109 -0
  507. package/manifest/components/terminal-block.json +91 -0
  508. package/manifest/components/textarea.json +3 -1
  509. package/manifest/components/theme-provider.json +2 -2
  510. package/manifest/components/thinking-indicator.json +63 -0
  511. package/manifest/components/thread-list.json +76 -0
  512. package/manifest/components/thread-search.json +90 -0
  513. package/manifest/components/threshold-rail.json +2 -2
  514. package/manifest/components/time-boundary.json +62 -0
  515. package/manifest/components/time-field.json +2 -0
  516. package/manifest/components/timeline.json +1 -1
  517. package/manifest/components/title-bar.json +1 -1
  518. package/manifest/components/todo-list.json +69 -0
  519. package/manifest/components/toggle-group.json +9 -7
  520. package/manifest/components/toggle.json +2 -0
  521. package/manifest/components/token-editor.json +1 -1
  522. package/manifest/components/tool-call-card.json +200 -0
  523. package/manifest/components/tool-call.json +119 -0
  524. package/manifest/components/tool-error.json +114 -0
  525. package/manifest/components/tool-group.json +83 -0
  526. package/manifest/components/tool-timeline.json +119 -0
  527. package/manifest/components/toolbar.json +7 -7
  528. package/manifest/components/tooltip.json +1 -1
  529. package/manifest/components/trace-waterfall.json +74 -0
  530. package/manifest/components/turn-footer.json +105 -0
  531. package/manifest/components/typing-indicator.json +53 -0
  532. package/manifest/components/unread-divider.json +55 -0
  533. package/manifest/components/usage-chart.json +1 -1
  534. package/manifest/components/verdict-row.json +91 -0
  535. package/manifest/components/voice-conversation.json +109 -0
  536. package/manifest/components/web-preview.json +87 -0
  537. package/manifest/components/web-search.json +92 -0
  538. package/manifest/components/work-collapse.json +102 -0
  539. package/manifest/manifest.json +2736 -60
  540. package/manifest/tokens.json +22 -1
  541. package/package.json +44 -2
@@ -20,10 +20,84 @@ type FormControlSize = "sm" | "md" | "lg";
20
20
  * raising them off it, which is the portfolio-wide convention for anything the
21
21
  * user types into.
22
22
  *
23
+ * **Focus is one signal, not two.** The rim walks one rung up the border ladder
24
+ * on `:focus` — `border-border` to `border-border-strong` — and `:focus-visible`
25
+ * adds a single 2px outline, pulled back over that rim with
26
+ * `-outline-offset-1` so it sits flush against the control instead of floating
27
+ * a pixel clear of it. The recipe this replaced painted a saturated accent rim
28
+ * *and* an offset accent ring simultaneously, which in a dark, dense console
29
+ * reads as an error or a selection rather than as "the caret is here". No
30
+ * shipping system draws both: Carbon and Radix each draw one flush ring, and
31
+ * shadcn moved off the offset-ring default it used to ship.
32
+ *
33
+ * Flush is also the cheap way to stay correct. WCAG 2.4.13 accepts a 2px
34
+ * perimeter only when it touches the component's own outer edge; an indicator
35
+ * inset further, floating on a gap, has to be 3px thick to cover the same area.
36
+ * And because an outline is painted outside the layout box, none of this moves
37
+ * a control by a pixel or reflows the row it sits in.
38
+ *
39
+ * There is no quieter pointer path to fall back on, which is why the single
40
+ * treatment has to be quiet itself: every engine puts typing surfaces on the
41
+ * `:focus-visible` allowlist, so a text input matches it on a mouse click just
42
+ * as it does on Tab. Only the non-typing controls that ride this chassis — the
43
+ * `Select` trigger, the date triggers — actually distinguish the two.
44
+ *
45
+ * `--cue-focus`, not `--cue-accent`. Every theme ships both roles, and keeping
46
+ * them separable is what WCAG 1.4.11 needs: one role whose job is "read at 3:1
47
+ * against the surface behind the ring", independent of the role whose job is
48
+ * "look like the brand". Seventeen of the twenty theme blocks still set the two
49
+ * to the same value, so there the separation costs nothing on screen — but three
50
+ * light presets can no longer afford it. luma.light, venu.light and hivehub.light
51
+ * each read below 3:1 against surfaces a field actually sits on (luma.light as
52
+ * low as 2.45, and against four of its five grounds), so each now carries its
53
+ * own ring — the accent's hue stepped darker — while the accent itself stays
54
+ * put. Measured across all five grounds a field can land on — the sunken fill,
55
+ * the page background and the three surface rungs — every preset now clears
56
+ * 3:1, the thinnest being signal.light's 3.27. Pointing the ring at the focus
57
+ * role is what made that retune possible without repainting every accent
58
+ * surface in the theme.
59
+ *
60
+ * (Named in prose rather than as `--cue-*` on purpose: `tokensUsed` in the
61
+ * published manifest is scanned out of this file's text, so spelling the other
62
+ * four grounds as tokens would have every control on this chassis claim it
63
+ * paints a surface it never touches.)
64
+ *
65
+ * `--cue-danger` carries the same obligation on an invalid field, where it is
66
+ * the ring rather than only the rim — a 1.4.11 surface, not purely a semantic
67
+ * colour. It needed no retune: the red already clears 3:1 on all five grounds in
68
+ * every preset, thinnest at terminal.dark's 3.13. Both floors are held by
69
+ * `test/theming/contrast.test.ts`, which measures every block on every ground —
70
+ * the guard that was missing when these three shipped a ring nobody could see.
71
+ *
72
+ * The ring is an `outline` and never a `box-shadow`: `forced-colors: active`
73
+ * discards box shadows outright and repaints outlines in the user's own
74
+ * highlight colour, so an outline is the only indicator that survives
75
+ * high-contrast mode.
76
+ *
77
+ * **Invalid and focused: the ring turns red, it does not sit beside the rim.**
78
+ * `data-[invalid]:border-danger` does win the cascade over the focus rim, but
79
+ * winning it changes nothing on screen: an outline's band runs from
80
+ * `border-edge + offset` outward by its own width, so a 2px ring at
81
+ * `-outline-offset-1` spans from one pixel inside the border box to one pixel
82
+ * outside it — the whole 1px rim — and outlines paint after borders. Measured
83
+ * in both engines: an invalid control paints 456 danger pixels at rest and zero
84
+ * while focused. Pushing the ring off the rim would mean either floating it on
85
+ * a gap (WCAG 2.4.13 then wants 3px, and the halo is back) or insetting it
86
+ * further (which buries it deeper). So the ring takes the danger colour instead
87
+ * — `data-[invalid]:focus-visible:outline-danger` — which is the ruling shadcn
88
+ * and Radix both reached: the border stays danger, the ring communicates focus,
89
+ * and red communicates invalid whichever of the two is painting.
90
+ *
91
+ * The compound modifier outranks the plain one on specificity — an attribute
92
+ * selector and a pseudo-class against one pseudo-class — so its position in
93
+ * Tailwind's utility order cannot decide it. `focus-visible:outline-solid` and
94
+ * `focus-visible:outline-2` still supply the style and the width in both cases,
95
+ * which is why only the colour is restated.
96
+ *
23
97
  * `focus-visible:outline-solid` re-declares the outline style the sibling
24
98
  * `outline-none` switched off — see the note on `buttonChassis`.
25
99
  */
26
- declare const controlSurface = "w-full rounded-(--radius-control) border border-border bg-sunken font-mono text-fg placeholder:text-fg-subtle outline-none focus:border-accent focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent disabled:opacity-40 data-[disabled]:opacity-40 data-[invalid]:border-danger";
100
+ declare const controlSurface = "w-full rounded-(--radius-control) border border-border bg-sunken font-mono text-fg placeholder:text-fg-subtle outline-none focus:border-border-strong focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-1 focus-visible:outline-(--cue-focus) disabled:opacity-40 data-[disabled]:opacity-40 data-[invalid]:border-danger data-[invalid]:focus-visible:outline-danger";
27
101
  /**
28
102
  * The full recessed-control recipe, one variant per rung of the control ladder.
29
103
  *
@@ -56,9 +130,35 @@ declare const controlClasses: string;
56
130
  declare const bareControlClasses = "min-w-0 flex-1 border-0 bg-transparent p-0 font-mono text-[length:inherit] text-fg placeholder:text-fg-subtle outline-none disabled:opacity-40";
57
131
  /**
58
132
  * Focus feedback for a wrapper that owns the rim on behalf of an inner control.
59
- * A `<div>` never matches `:focus-visible`, so the group has to watch its
60
- * descendants instead.
133
+ *
134
+ * A `<div>` never matches `:focus-visible` itself, so a group has to read the
135
+ * state off its descendants — and the two halves of {@link controlSurface}'s
136
+ * treatment want two different questions asked of them.
137
+ *
138
+ * The rim follows plain `:focus-within`: anything focused inside strengthens the
139
+ * border. That is the quiet half, and it is the right answer however the focus
140
+ * arrived. The ring follows `:has(:focus-visible)`, so it paints only when the
141
+ * descendant that has focus is itself showing a focus ring. Using
142
+ * `:focus-within` for *both* — the recipe this replaced — is what made a mouse
143
+ * click inside a `SearchInput` or a `NumberField` light the whole cluster up
144
+ * with a saturated block, the single loudest thing in a console form.
145
+ *
146
+ * `:has()` is Baseline — Chrome 105, Safari 15.4, Firefox 121 — so no
147
+ * `:focus-within` fallback layer is needed at the floor this library supports.
148
+ *
149
+ * Geometry matches {@link controlSurface} exactly, down to the negative offset:
150
+ * a grouped field and a plain one are the same control, and a rim that differed
151
+ * by a pixel between them would say otherwise. The inner control stays ringless
152
+ * — see {@link bareControlClasses} — because two concentric rings on one field
153
+ * is the halo this treatment exists to remove.
154
+ *
155
+ * The invalid ruling comes with the geometry, for the same reason: at
156
+ * `-outline-offset-1` the ring covers the rim it is drawn over, so an invalid
157
+ * group in focus recolours the ring rather than pretending the red under it is
158
+ * still visible. `data-invalid` is read off the wrapper, which is where Base
159
+ * UI's `Field` stamps it and where the group already takes
160
+ * `data-[invalid]:border-danger` from {@link controlVariants}.
61
161
  */
62
- declare const controlGroupFocusClasses = "focus-within:border-accent focus-within:outline-2 focus-within:outline-solid focus-within:outline-offset-1 focus-within:outline-accent";
162
+ declare const controlGroupFocusClasses = "focus-within:border-border-strong has-focus-visible:outline-2 has-focus-visible:outline-solid has-focus-visible:-outline-offset-1 has-focus-visible:outline-(--cue-focus) data-[invalid]:has-focus-visible:outline-danger";
63
163
  //#endregion
64
164
  export { ControlVariantProps, FormControlSize, bareControlClasses, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants };
@@ -12,10 +12,84 @@ import { cva } from "../lib/cva.js";
12
12
  * raising them off it, which is the portfolio-wide convention for anything the
13
13
  * user types into.
14
14
  *
15
+ * **Focus is one signal, not two.** The rim walks one rung up the border ladder
16
+ * on `:focus` — `border-border` to `border-border-strong` — and `:focus-visible`
17
+ * adds a single 2px outline, pulled back over that rim with
18
+ * `-outline-offset-1` so it sits flush against the control instead of floating
19
+ * a pixel clear of it. The recipe this replaced painted a saturated accent rim
20
+ * *and* an offset accent ring simultaneously, which in a dark, dense console
21
+ * reads as an error or a selection rather than as "the caret is here". No
22
+ * shipping system draws both: Carbon and Radix each draw one flush ring, and
23
+ * shadcn moved off the offset-ring default it used to ship.
24
+ *
25
+ * Flush is also the cheap way to stay correct. WCAG 2.4.13 accepts a 2px
26
+ * perimeter only when it touches the component's own outer edge; an indicator
27
+ * inset further, floating on a gap, has to be 3px thick to cover the same area.
28
+ * And because an outline is painted outside the layout box, none of this moves
29
+ * a control by a pixel or reflows the row it sits in.
30
+ *
31
+ * There is no quieter pointer path to fall back on, which is why the single
32
+ * treatment has to be quiet itself: every engine puts typing surfaces on the
33
+ * `:focus-visible` allowlist, so a text input matches it on a mouse click just
34
+ * as it does on Tab. Only the non-typing controls that ride this chassis — the
35
+ * `Select` trigger, the date triggers — actually distinguish the two.
36
+ *
37
+ * `--cue-focus`, not `--cue-accent`. Every theme ships both roles, and keeping
38
+ * them separable is what WCAG 1.4.11 needs: one role whose job is "read at 3:1
39
+ * against the surface behind the ring", independent of the role whose job is
40
+ * "look like the brand". Seventeen of the twenty theme blocks still set the two
41
+ * to the same value, so there the separation costs nothing on screen — but three
42
+ * light presets can no longer afford it. luma.light, venu.light and hivehub.light
43
+ * each read below 3:1 against surfaces a field actually sits on (luma.light as
44
+ * low as 2.45, and against four of its five grounds), so each now carries its
45
+ * own ring — the accent's hue stepped darker — while the accent itself stays
46
+ * put. Measured across all five grounds a field can land on — the sunken fill,
47
+ * the page background and the three surface rungs — every preset now clears
48
+ * 3:1, the thinnest being signal.light's 3.27. Pointing the ring at the focus
49
+ * role is what made that retune possible without repainting every accent
50
+ * surface in the theme.
51
+ *
52
+ * (Named in prose rather than as `--cue-*` on purpose: `tokensUsed` in the
53
+ * published manifest is scanned out of this file's text, so spelling the other
54
+ * four grounds as tokens would have every control on this chassis claim it
55
+ * paints a surface it never touches.)
56
+ *
57
+ * `--cue-danger` carries the same obligation on an invalid field, where it is
58
+ * the ring rather than only the rim — a 1.4.11 surface, not purely a semantic
59
+ * colour. It needed no retune: the red already clears 3:1 on all five grounds in
60
+ * every preset, thinnest at terminal.dark's 3.13. Both floors are held by
61
+ * `test/theming/contrast.test.ts`, which measures every block on every ground —
62
+ * the guard that was missing when these three shipped a ring nobody could see.
63
+ *
64
+ * The ring is an `outline` and never a `box-shadow`: `forced-colors: active`
65
+ * discards box shadows outright and repaints outlines in the user's own
66
+ * highlight colour, so an outline is the only indicator that survives
67
+ * high-contrast mode.
68
+ *
69
+ * **Invalid and focused: the ring turns red, it does not sit beside the rim.**
70
+ * `data-[invalid]:border-danger` does win the cascade over the focus rim, but
71
+ * winning it changes nothing on screen: an outline's band runs from
72
+ * `border-edge + offset` outward by its own width, so a 2px ring at
73
+ * `-outline-offset-1` spans from one pixel inside the border box to one pixel
74
+ * outside it — the whole 1px rim — and outlines paint after borders. Measured
75
+ * in both engines: an invalid control paints 456 danger pixels at rest and zero
76
+ * while focused. Pushing the ring off the rim would mean either floating it on
77
+ * a gap (WCAG 2.4.13 then wants 3px, and the halo is back) or insetting it
78
+ * further (which buries it deeper). So the ring takes the danger colour instead
79
+ * — `data-[invalid]:focus-visible:outline-danger` — which is the ruling shadcn
80
+ * and Radix both reached: the border stays danger, the ring communicates focus,
81
+ * and red communicates invalid whichever of the two is painting.
82
+ *
83
+ * The compound modifier outranks the plain one on specificity — an attribute
84
+ * selector and a pseudo-class against one pseudo-class — so its position in
85
+ * Tailwind's utility order cannot decide it. `focus-visible:outline-solid` and
86
+ * `focus-visible:outline-2` still supply the style and the width in both cases,
87
+ * which is why only the colour is restated.
88
+ *
15
89
  * `focus-visible:outline-solid` re-declares the outline style the sibling
16
90
  * `outline-none` switched off — see the note on `buttonChassis`.
17
91
  */
18
- const controlSurface = "w-full rounded-(--radius-control) border border-border bg-sunken font-mono text-fg placeholder:text-fg-subtle outline-none focus:border-accent focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent disabled:opacity-40 data-[disabled]:opacity-40 data-[invalid]:border-danger";
92
+ const controlSurface = "w-full rounded-(--radius-control) border border-border bg-sunken font-mono text-fg placeholder:text-fg-subtle outline-none focus:border-border-strong focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-1 focus-visible:outline-(--cue-focus) disabled:opacity-40 data-[disabled]:opacity-40 data-[invalid]:border-danger data-[invalid]:focus-visible:outline-danger";
19
93
  /**
20
94
  * The full recessed-control recipe, one variant per rung of the control ladder.
21
95
  *
@@ -51,9 +125,35 @@ const controlClasses = controlVariants();
51
125
  const bareControlClasses = "min-w-0 flex-1 border-0 bg-transparent p-0 font-mono text-[length:inherit] text-fg placeholder:text-fg-subtle outline-none disabled:opacity-40";
52
126
  /**
53
127
  * Focus feedback for a wrapper that owns the rim on behalf of an inner control.
54
- * A `<div>` never matches `:focus-visible`, so the group has to watch its
55
- * descendants instead.
128
+ *
129
+ * A `<div>` never matches `:focus-visible` itself, so a group has to read the
130
+ * state off its descendants — and the two halves of {@link controlSurface}'s
131
+ * treatment want two different questions asked of them.
132
+ *
133
+ * The rim follows plain `:focus-within`: anything focused inside strengthens the
134
+ * border. That is the quiet half, and it is the right answer however the focus
135
+ * arrived. The ring follows `:has(:focus-visible)`, so it paints only when the
136
+ * descendant that has focus is itself showing a focus ring. Using
137
+ * `:focus-within` for *both* — the recipe this replaced — is what made a mouse
138
+ * click inside a `SearchInput` or a `NumberField` light the whole cluster up
139
+ * with a saturated block, the single loudest thing in a console form.
140
+ *
141
+ * `:has()` is Baseline — Chrome 105, Safari 15.4, Firefox 121 — so no
142
+ * `:focus-within` fallback layer is needed at the floor this library supports.
143
+ *
144
+ * Geometry matches {@link controlSurface} exactly, down to the negative offset:
145
+ * a grouped field and a plain one are the same control, and a rim that differed
146
+ * by a pixel between them would say otherwise. The inner control stays ringless
147
+ * — see {@link bareControlClasses} — because two concentric rings on one field
148
+ * is the halo this treatment exists to remove.
149
+ *
150
+ * The invalid ruling comes with the geometry, for the same reason: at
151
+ * `-outline-offset-1` the ring covers the rim it is drawn over, so an invalid
152
+ * group in focus recolours the ring rather than pretending the red under it is
153
+ * still visible. `data-invalid` is read off the wrapper, which is where Base
154
+ * UI's `Field` stamps it and where the group already takes
155
+ * `data-[invalid]:border-danger` from {@link controlVariants}.
56
156
  */
57
- const controlGroupFocusClasses = "focus-within:border-accent focus-within:outline-2 focus-within:outline-solid focus-within:outline-offset-1 focus-within:outline-accent";
157
+ const controlGroupFocusClasses = "focus-within:border-border-strong has-focus-visible:outline-2 has-focus-visible:outline-solid has-focus-visible:-outline-offset-1 has-focus-visible:outline-(--cue-focus) data-[invalid]:has-focus-visible:outline-danger";
58
158
  //#endregion
59
159
  export { bareControlClasses, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants };
@@ -17,9 +17,14 @@ interface InputGroupProps extends React.ComponentPropsWithoutRef<"div"> {
17
17
  * The group — not the input — owns the chassis, so there is exactly one rim and
18
18
  * one fill however many affordances are bolted on. It publishes that fact
19
19
  * through context: an {@link Input} rendered inside strips its own border,
20
- * background, height and padding and inherits the group's font size. Focus
21
- * feedback moves to `focus-within`, since a `<div>` never matches
22
- * `:focus-visible`.
20
+ * background, height and padding and inherits the group's font size.
21
+ *
22
+ * Focus feedback splits in two, because a `<div>` matches neither `:focus` nor
23
+ * `:focus-visible` itself. The rim strengthens on `:focus-within` — anything
24
+ * focused inside, however it got there — while the ring waits for
25
+ * `:has(:focus-visible)`, so a mouse click into the field does not light the
26
+ * whole cluster up. Both halves live on the wrapper; the inner control paints
27
+ * no ring of its own.
23
28
  *
24
29
  * @example
25
30
  * <InputGroup leading={<Search />} trailing={<Kbd>⌘K</Kbd>}>
@@ -17,9 +17,14 @@ const InputGroupContext = React.createContext(false);
17
17
  * The group — not the input — owns the chassis, so there is exactly one rim and
18
18
  * one fill however many affordances are bolted on. It publishes that fact
19
19
  * through context: an {@link Input} rendered inside strips its own border,
20
- * background, height and padding and inherits the group's font size. Focus
21
- * feedback moves to `focus-within`, since a `<div>` never matches
22
- * `:focus-visible`.
20
+ * background, height and padding and inherits the group's font size.
21
+ *
22
+ * Focus feedback splits in two, because a `<div>` matches neither `:focus` nor
23
+ * `:focus-visible` itself. The rim strengthens on `:focus-within` — anything
24
+ * focused inside, however it got there — while the ring waits for
25
+ * `:has(:focus-visible)`, so a mouse click into the field does not light the
26
+ * whole cluster up. Both halves live on the wrapper; the inner control paints
27
+ * no ring of its own.
23
28
  *
24
29
  * @example
25
30
  * <InputGroup leading={<Search />} trailing={<Kbd>⌘K</Kbd>}>
@@ -25,8 +25,9 @@ interface NumberFieldProps extends Omit<NumberField.Root.Props, "className"> {
25
25
  * and values typed out of range are clamped to `min`/`max` on blur.
26
26
  *
27
27
  * The group owns the rim; the input and both buttons render bare inside it, so
28
- * the whole cluster reads as one field and focus feedback moves to
29
- * `focus-within`.
28
+ * the whole cluster reads as one field. Focus feedback follows the group's
29
+ * split: the rim strengthens on `:focus-within`, and the ring waits for
30
+ * `:has(:focus-visible)` so a click on a stepper does not paint one.
30
31
  *
31
32
  * @example
32
33
  * <NumberField aria-label="Fade time" defaultValue={3} min={0} max={600} step={0.5} />
@@ -17,8 +17,9 @@ const stepperClasses = "flex shrink-0 items-center justify-center border-0 bg-tr
17
17
  * and values typed out of range are clamped to `min`/`max` on blur.
18
18
  *
19
19
  * The group owns the rim; the input and both buttons render bare inside it, so
20
- * the whole cluster reads as one field and focus feedback moves to
21
- * `focus-within`.
20
+ * the whole cluster reads as one field. Focus feedback follows the group's
21
+ * split: the rim strengthens on `:focus-within`, and the ring waits for
22
+ * `:has(:focus-visible)` so a click on a stepper does not paint one.
22
23
  *
23
24
  * @example
24
25
  * <NumberField aria-label="Fade time" defaultValue={3} min={0} max={600} step={0.5} />
@@ -0,0 +1,89 @@
1
+ import * as React from "react";
2
+ //#region src/icons/containers.d.ts
3
+ /**
4
+ * The catalogue itself: everything there is, before anything has been narrowed.
5
+ *
6
+ * One tile repeated over a 2×2 rather than a stack of rows, because the row
7
+ * this marks is the one that *undoes* a filter — "all of it" is a shape, and a
8
+ * list glyph would have promised an ordering the row does not have.
9
+ */
10
+ declare function CatalogueIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
11
+ /**
12
+ * One person's stack: the set of things they have actually installed.
13
+ *
14
+ * Plates seen edge-on — the layers idiom — because a stack is an accumulation
15
+ * and not a container: things go into it one at a time and the order they went
16
+ * in is part of what it is.
17
+ */
18
+ declare function StackIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
19
+ /**
20
+ * Every stack at once, one column each: who has what, read across.
21
+ *
22
+ * A table rather than more plates. The head rule and the name column are what
23
+ * make it a matrix instead of a grid — the question it answers is "which of
24
+ * these does that person not have", and that is a question with two axes.
25
+ */
26
+ declare function StacksMatrixIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
27
+ /**
28
+ * An audience: a named group of people something is published to.
29
+ *
30
+ * People, not an abstract shape. An audience is the one container in this set
31
+ * whose members are humans rather than artefacts, and drawing it as a diamond
32
+ * or a tag would have filed it with the folders — which is exactly the mistake
33
+ * a reader makes when deciding where to publish something.
34
+ */
35
+ declare function AudienceIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
36
+ /**
37
+ * The released channel: what a colleague gets when they install without asking
38
+ * for anything in particular.
39
+ *
40
+ * A ring filled solid. Its pair, {@link ChannelBetaIcon}, is the same ring
41
+ * filled halfway — the two are one mark told twice, so a reader never has to
42
+ * learn which of two unrelated pictures means "finished".
43
+ */
44
+ declare function ChannelReleasedIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
45
+ /**
46
+ * The beta channel: the same things, one merge earlier.
47
+ *
48
+ * The released ring at half fill. Half rather than empty because a beta is not
49
+ * an absence of a release — it is a release that has not finished happening,
50
+ * and an empty ring would have read as "nothing here yet".
51
+ */
52
+ declare function ChannelBetaIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
53
+ /**
54
+ * A folder somebody made: a shelf of bookmarks, filed by hand.
55
+ *
56
+ * The tab is the whole glyph. A plain rounded box in this library is a panel,
57
+ * a card or a dialog, and the one thing a folder has to say is that a person
58
+ * put these here on purpose rather than a query having returned them.
59
+ */
60
+ declare function FolderIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
61
+ /**
62
+ * An MCP server in the registry: a thing an agent connects *to*.
63
+ *
64
+ * Two rack units with a status lamp each. It is drawn as hardware on purpose —
65
+ * an MCP server is the one entry in a catalogue of files that is a running
66
+ * process somewhere, with an address and a session, and a row that looked like
67
+ * a document would hide the only fact about it that matters operationally.
68
+ */
69
+ declare function McpServerIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
70
+ /**
71
+ * A CLI tool in the registry: a thing that runs in a terminal.
72
+ *
73
+ * A window with a prompt in it, rather than a bare chevron. A chevron on its
74
+ * own is a disclosure everywhere else in this library, and a navigation row
75
+ * that appeared to expand and then navigated instead is a worse failure than a
76
+ * slightly busier glyph at 10px.
77
+ */
78
+ declare function CliToolIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
79
+ /**
80
+ * A skill: the thing every other container in this set holds.
81
+ *
82
+ * One mark, and a spark rather than a document, because what is being filed is
83
+ * a capability. The file it happens to be written in is an implementation
84
+ * detail of how it travels, and a page glyph would have made the catalogue look
85
+ * like a folder of documents rather than a list of things an agent can now do.
86
+ */
87
+ declare function SkillIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
88
+ //#endregion
89
+ export { AudienceIcon, CatalogueIcon, ChannelBetaIcon, ChannelReleasedIcon, CliToolIcon, FolderIcon, McpServerIcon, SkillIcon, StackIcon, StacksMatrixIcon };