@kerfjs/ui 5.0.0-beta.55 → 5.0.0-beta.57

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 (418) hide show
  1. package/README.md +74 -41
  2. package/ai/application-ui-diagnostic-ids-v1.json +9 -1
  3. package/ai/application-ui-profile-sync.cjs +1 -1
  4. package/ai/application-ui-profile.defaults.json +63 -8
  5. package/ai/application-ui-profile.mjs +1 -1
  6. package/ai/compile-time-contracts-v1.json +2 -2
  7. package/ai/component-catalog.json +407 -80
  8. package/ai/component-catalog.schema.json +2 -0
  9. package/ai/component-class-owners.cjs +83 -0
  10. package/ai/component-composition-extension.d.ts +7 -0
  11. package/ai/component-composition-extension.schema.json +7 -0
  12. package/ai/{component-catalog-v2-overrides.json → component-composition-rules.json} +2 -1
  13. package/ai/{component-catalog-v2.d.ts → component-composition.d.ts} +9 -5
  14. package/ai/{component-catalog-v2.json → component-composition.json} +302 -61
  15. package/ai/{component-catalog-v2.schema.json → component-composition.schema.json} +21 -5
  16. package/ai/components/README.md +170 -0
  17. package/ai/components/application-tabs.md +65 -0
  18. package/ai/components/badge.md +72 -0
  19. package/ai/components/collapsible-panel.md +102 -0
  20. package/ai/components/content-item.md +90 -0
  21. package/ai/components/disclosure-arrow.md +77 -0
  22. package/ai/components/document-baseline.md +75 -0
  23. package/ai/components/empty-state.md +80 -0
  24. package/ai/components/feedback.md +71 -0
  25. package/ai/components/floating-toolbar.md +80 -0
  26. package/ai/components/foundation.md +65 -0
  27. package/ai/components/grid.md +93 -0
  28. package/ai/components/headers.md +63 -0
  29. package/ai/components/layout.md +75 -0
  30. package/ai/components/list-action-row.md +91 -0
  31. package/ai/components/list-header.md +89 -0
  32. package/ai/components/list-inset-control.md +74 -0
  33. package/ai/components/list-inset-text.md +72 -0
  34. package/ai/components/list-item.md +88 -0
  35. package/ai/components/list.md +103 -0
  36. package/ai/components/loading-spinner.md +72 -0
  37. package/ai/components/lucide-icon.md +66 -0
  38. package/ai/components/nav-stack.md +103 -0
  39. package/ai/components/pane.md +100 -0
  40. package/ai/components/popup-menu.md +82 -0
  41. package/ai/components/recipe-app-shell.md +57 -0
  42. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  43. package/ai/components/recipe-compact-toolbar.md +57 -0
  44. package/ai/components/recipe-composer-form.md +57 -0
  45. package/ai/components/recipe-list-detail-dialog.md +57 -0
  46. package/ai/components/recipe-list-workspace-states.md +57 -0
  47. package/ai/components/recipe-loading-inspector.md +57 -0
  48. package/ai/components/recipe-navigation-sidebar.md +57 -0
  49. package/ai/components/recipe-navigation-stack.md +57 -0
  50. package/ai/components/recipe-workspace-header.md +57 -0
  51. package/ai/components/resize.md +101 -0
  52. package/ai/components/row.md +96 -0
  53. package/ai/components/segmented-control.md +82 -0
  54. package/ai/components/select.md +107 -0
  55. package/ai/components/skeleton.md +84 -0
  56. package/ai/components/spacer.md +86 -0
  57. package/ai/components/split-view.md +102 -0
  58. package/ai/components/state-banner.md +92 -0
  59. package/ai/components/sunken-panel.md +79 -0
  60. package/ai/components/surface-scaffold.md +78 -0
  61. package/ai/components/tab-bar.md +112 -0
  62. package/ai/components/tab-scaffold.md +94 -0
  63. package/ai/components/tabs.md +90 -0
  64. package/ai/components/text.md +82 -0
  65. package/ai/components/token-search-field.md +101 -0
  66. package/ai/components/toolbar-control-group.md +100 -0
  67. package/ai/components/toolbar-text.md +76 -0
  68. package/ai/components/toolbar.md +95 -0
  69. package/ai/components/value-table.md +72 -0
  70. package/ai/components/wa-accordion-item.md +55 -0
  71. package/ai/components/wa-accordion.md +65 -0
  72. package/ai/components/wa-animated-image.md +55 -0
  73. package/ai/components/wa-animation.md +55 -0
  74. package/ai/components/wa-avatar.md +55 -0
  75. package/ai/components/wa-badge.md +55 -0
  76. package/ai/components/wa-breadcrumb-item.md +53 -0
  77. package/ai/components/wa-breadcrumb.md +55 -0
  78. package/ai/components/wa-button-group.md +59 -0
  79. package/ai/components/wa-button.md +55 -0
  80. package/ai/components/wa-callout.md +58 -0
  81. package/ai/components/wa-card.md +59 -0
  82. package/ai/components/wa-carousel-item.md +53 -0
  83. package/ai/components/wa-carousel.md +55 -0
  84. package/ai/components/wa-checkbox-group.md +55 -0
  85. package/ai/components/wa-checkbox.md +55 -0
  86. package/ai/components/wa-color-picker.md +55 -0
  87. package/ai/components/wa-comparison.md +55 -0
  88. package/ai/components/wa-copy-button.md +55 -0
  89. package/ai/components/wa-details.md +61 -0
  90. package/ai/components/wa-dialog.md +59 -0
  91. package/ai/components/wa-divider.md +53 -0
  92. package/ai/components/wa-drawer.md +55 -0
  93. package/ai/components/wa-dropdown-item.md +60 -0
  94. package/ai/components/wa-dropdown.md +60 -0
  95. package/ai/components/wa-format-bytes.md +53 -0
  96. package/ai/components/wa-format-date.md +53 -0
  97. package/ai/components/wa-format-number.md +53 -0
  98. package/ai/components/wa-icon.md +58 -0
  99. package/ai/components/wa-include.md +53 -0
  100. package/ai/components/wa-input.md +59 -0
  101. package/ai/components/wa-intersection-observer.md +53 -0
  102. package/ai/components/wa-known-date.md +53 -0
  103. package/ai/components/wa-markdown.md +53 -0
  104. package/ai/components/wa-mutation-observer.md +53 -0
  105. package/ai/components/wa-number-input.md +55 -0
  106. package/ai/components/wa-option.md +59 -0
  107. package/ai/components/wa-otp-input.md +53 -0
  108. package/ai/components/wa-page.md +53 -0
  109. package/ai/components/wa-pagination.md +55 -0
  110. package/ai/components/wa-popover.md +55 -0
  111. package/ai/components/wa-popup.md +53 -0
  112. package/ai/components/wa-progress-bar.md +53 -0
  113. package/ai/components/wa-progress-ring.md +53 -0
  114. package/ai/components/wa-qr-code.md +53 -0
  115. package/ai/components/wa-radio-group.md +59 -0
  116. package/ai/components/wa-radio.md +55 -0
  117. package/ai/components/wa-random-content.md +53 -0
  118. package/ai/components/wa-rating.md +55 -0
  119. package/ai/components/wa-relative-time.md +53 -0
  120. package/ai/components/wa-resize-observer.md +53 -0
  121. package/ai/components/wa-scroller.md +53 -0
  122. package/ai/components/wa-select.md +63 -0
  123. package/ai/components/wa-skeleton.md +53 -0
  124. package/ai/components/wa-slider.md +55 -0
  125. package/ai/components/wa-spinner.md +58 -0
  126. package/ai/components/wa-split-panel.md +58 -0
  127. package/ai/components/wa-switch.md +53 -0
  128. package/ai/components/wa-tab-group.md +69 -0
  129. package/ai/components/wa-tab-panel.md +60 -0
  130. package/ai/components/wa-tab.md +59 -0
  131. package/ai/components/wa-tag.md +59 -0
  132. package/ai/components/wa-textarea.md +53 -0
  133. package/ai/components/wa-time-input.md +55 -0
  134. package/ai/components/wa-toast-item.md +60 -0
  135. package/ai/components/wa-toast.md +60 -0
  136. package/ai/components/wa-tooltip.md +55 -0
  137. package/ai/components/wa-tree-item.md +55 -0
  138. package/ai/components/wa-tree.md +55 -0
  139. package/ai/components/wa-zoomable-frame.md +55 -0
  140. package/ai/components/workbench.md +114 -0
  141. package/ai/public-api-signatures-v1.md +572 -101
  142. package/ai/skill.md +107 -52
  143. package/ai/webawesome-jsx-signatures-v1.md +8 -2
  144. package/analyzer/component-ownership.d.mts +56 -0
  145. package/analyzer/component-ownership.mjs +184 -0
  146. package/analyzer/index.d.mts +3 -0
  147. package/analyzer/index.mjs +274 -20
  148. package/analyzer/selectors.d.mts +21 -0
  149. package/analyzer/selectors.mjs +212 -0
  150. package/dist/app-tab.js +1 -1
  151. package/dist/badge.d.ts +35 -7
  152. package/dist/badge.js +1 -1
  153. package/dist/browser/catalog.js +25 -0
  154. package/dist/browser/collapsible-panel.js +7 -0
  155. package/dist/browser/content-item.js +3 -0
  156. package/dist/browser/nav-stack.js +8 -0
  157. package/dist/browser/select.js +1 -0
  158. package/dist/browser/split-view.js +10 -0
  159. package/dist/browser/tab-scaffold.js +4 -0
  160. package/dist/browser/workbench.js +10 -0
  161. package/dist/catalog-resources.d.ts +12 -1
  162. package/dist/catalog.d.ts +14 -3
  163. package/dist/catalog.js +53 -43
  164. package/dist/catalog.js.map +1 -1
  165. package/dist/{chunk-WZ2GLEY4.js → chunk-2G2ZJQYK.js} +2 -14
  166. package/dist/chunk-2G2ZJQYK.js.map +1 -0
  167. package/dist/{chunk-R754MHXX.js → chunk-553ASUK6.js} +8 -8
  168. package/dist/chunk-553ASUK6.js.map +1 -0
  169. package/dist/{chunk-D7GWXIAS.js → chunk-5I7QGQVT.js} +1 -1
  170. package/dist/chunk-5I7QGQVT.js.map +1 -0
  171. package/dist/{chunk-RNRUVPJ3.js → chunk-63ZWBGE3.js} +3 -2
  172. package/dist/chunk-63ZWBGE3.js.map +1 -0
  173. package/dist/{chunk-44IG7PFV.js → chunk-6CINWX2E.js} +3 -3
  174. package/dist/{chunk-44IG7PFV.js.map → chunk-6CINWX2E.js.map} +1 -1
  175. package/dist/{chunk-MTM43SJO.js → chunk-6YFHCLHG.js} +2 -2
  176. package/dist/chunk-6YFHCLHG.js.map +1 -0
  177. package/dist/{chunk-C2FAYFDE.js → chunk-AGXQQFKZ.js} +2 -2
  178. package/dist/{chunk-C2FAYFDE.js.map → chunk-AGXQQFKZ.js.map} +1 -1
  179. package/dist/{chunk-ATHXW6RP.js → chunk-AHEG27M7.js} +2 -2
  180. package/dist/{chunk-ATHXW6RP.js.map → chunk-AHEG27M7.js.map} +1 -1
  181. package/dist/chunk-BFPBS5Y4.js +250 -0
  182. package/dist/chunk-BFPBS5Y4.js.map +1 -0
  183. package/dist/{chunk-5OLVUEND.js → chunk-DG6G5EPF.js} +4 -6
  184. package/dist/chunk-DG6G5EPF.js.map +1 -0
  185. package/dist/{chunk-LZXQVUGN.js → chunk-EVYKTVBQ.js} +5 -14
  186. package/dist/chunk-EVYKTVBQ.js.map +1 -0
  187. package/dist/{chunk-7GUQYHKA.js → chunk-EZVNC4J6.js} +7 -1
  188. package/dist/chunk-EZVNC4J6.js.map +1 -0
  189. package/dist/{chunk-RNZAKSME.js → chunk-F4QMLOXJ.js} +5 -4
  190. package/dist/chunk-F4QMLOXJ.js.map +1 -0
  191. package/dist/{chunk-EAX2GSS4.js → chunk-G2RKFVRB.js} +54 -20
  192. package/dist/chunk-G2RKFVRB.js.map +1 -0
  193. package/dist/chunk-JCV4GXWB.js +249 -0
  194. package/dist/chunk-JCV4GXWB.js.map +1 -0
  195. package/dist/chunk-K47P7QZC.js +17 -0
  196. package/dist/chunk-K47P7QZC.js.map +1 -0
  197. package/dist/{chunk-HMQ2ZDGG.js → chunk-KROD7KZK.js} +3 -2
  198. package/dist/chunk-KROD7KZK.js.map +1 -0
  199. package/dist/{chunk-5NDQABWK.js → chunk-M7QV3IHH.js} +3 -1
  200. package/dist/chunk-M7QV3IHH.js.map +1 -0
  201. package/dist/chunk-MA73TA6D.js +42 -0
  202. package/dist/chunk-MA73TA6D.js.map +1 -0
  203. package/dist/{chunk-ZMBU522F.js → chunk-MEY33VWB.js} +2 -2
  204. package/dist/{chunk-ZMBU522F.js.map → chunk-MEY33VWB.js.map} +1 -1
  205. package/dist/chunk-MP2GDBQZ.js +50 -0
  206. package/dist/chunk-MP2GDBQZ.js.map +1 -0
  207. package/dist/{chunk-3NBL3OUQ.js → chunk-NAPE7WUS.js} +2 -2
  208. package/dist/chunk-NAPE7WUS.js.map +1 -0
  209. package/dist/{chunk-BSKEH3UC.js → chunk-NBYTIVHS.js} +2 -2
  210. package/dist/{chunk-BSKEH3UC.js.map → chunk-NBYTIVHS.js.map} +1 -1
  211. package/dist/{chunk-T22EM4ET.js → chunk-OUK6QRDR.js} +71 -31
  212. package/dist/chunk-OUK6QRDR.js.map +1 -0
  213. package/dist/chunk-PWXNJS2B.js +115 -0
  214. package/dist/chunk-PWXNJS2B.js.map +1 -0
  215. package/dist/{chunk-GUIHMIT2.js → chunk-QOWG4ZCL.js} +5 -4
  216. package/dist/chunk-QOWG4ZCL.js.map +1 -0
  217. package/dist/{chunk-5I22LMCV.js → chunk-VZOFZPSO.js} +2 -2
  218. package/dist/chunk-VZOFZPSO.js.map +1 -0
  219. package/dist/{chunk-4BIMLITI.js → chunk-WLG6SSNT.js} +5 -3
  220. package/dist/chunk-WLG6SSNT.js.map +1 -0
  221. package/dist/{chunk-NE5JAOQS.js → chunk-WOUF7YXM.js} +3 -3
  222. package/dist/{chunk-NE5JAOQS.js.map → chunk-WOUF7YXM.js.map} +1 -1
  223. package/dist/{chunk-N7FHFNT6.js → chunk-XCO6YCYM.js} +34 -5
  224. package/dist/chunk-XCO6YCYM.js.map +1 -0
  225. package/dist/{chunk-TZ5IHWB2.js → chunk-XDKAYSVD.js} +5 -3
  226. package/dist/chunk-XDKAYSVD.js.map +1 -0
  227. package/dist/collapsible-panel.d.ts +14 -3
  228. package/dist/collapsible-panel.js +13 -16
  229. package/dist/collapsible-panel.js.map +1 -1
  230. package/dist/content-item.d.ts +46 -0
  231. package/dist/content-item.js +4 -0
  232. package/dist/content-item.js.map +1 -0
  233. package/dist/css-values.d.ts +5 -11
  234. package/dist/css-values.js +1 -1
  235. package/dist/disclosure-arrow.d.ts +4 -1
  236. package/dist/disclosure-arrow.js +1 -1
  237. package/dist/floating-toolbar.d.ts +17 -6
  238. package/dist/floating-toolbar.js +1 -1
  239. package/dist/grid.js +1 -1
  240. package/dist/help-tags-register.d.ts +13 -0
  241. package/dist/help-tags-register.js +9 -0
  242. package/dist/help-tags-register.js.map +1 -0
  243. package/dist/index.d.ts +7 -5
  244. package/dist/index.js +29 -26
  245. package/dist/list-action-row.js +2 -1
  246. package/dist/list-header.d.ts +14 -1
  247. package/dist/list-header.js +1 -1
  248. package/dist/list-inset-control.d.ts +1 -1
  249. package/dist/list-inset-control.js +1 -1
  250. package/dist/list-inset-text.d.ts +3 -10
  251. package/dist/list-inset-text.js +1 -1
  252. package/dist/list-item.js +2 -1
  253. package/dist/list.d.ts +10 -3
  254. package/dist/list.js +1 -1
  255. package/dist/nav-stack.d.ts +50 -5
  256. package/dist/nav-stack.js +4 -1
  257. package/dist/pane.d.ts +37 -2
  258. package/dist/pane.js +1 -1
  259. package/dist/{panel-toolbar-BFQxFITu.d.ts → panel-toolbar-BN4x0rth.d.ts} +13 -1
  260. package/dist/popup-menu-register.js +3 -2
  261. package/dist/popup-menu-register.js.map +1 -1
  262. package/dist/popup-menu.js +1 -1
  263. package/dist/row.d.ts +1 -1
  264. package/dist/row.js +1 -1
  265. package/dist/select-register.js +70 -3
  266. package/dist/select-register.js.map +1 -1
  267. package/dist/select.d.ts +46 -8
  268. package/dist/select.js +2 -1
  269. package/dist/{divider-sides-BzB6rphT.d.ts → sides-BPSWde0A.d.ts} +1 -3
  270. package/dist/skeleton.js +1 -1
  271. package/dist/spacer.js +1 -1
  272. package/dist/split-view.d.ts +31 -3
  273. package/dist/split-view.js +34 -5
  274. package/dist/split-view.js.map +1 -1
  275. package/dist/state-banner.js +1 -1
  276. package/dist/styles/app-tab.css +31 -0
  277. package/dist/styles/badge.css +32 -11
  278. package/dist/styles/catalog/components/catalog-example.css +1 -1
  279. package/dist/styles/catalog/components/catalog-stage.css +1 -1
  280. package/dist/styles/collapsible-panel.css +199 -42
  281. package/dist/styles/content-item.css +30 -0
  282. package/dist/styles/floating-toolbar.css +26 -2
  283. package/dist/styles/foundation.css +28 -19
  284. package/dist/styles/layout.css +1 -21
  285. package/dist/styles/list-action-row.css +13 -1
  286. package/dist/styles/list-header.css +0 -12
  287. package/dist/styles/list-inset-text.css +1 -2
  288. package/dist/styles/list-item.css +14 -1
  289. package/dist/styles/list.css +5 -5
  290. package/dist/styles/nav-stack.css +63 -71
  291. package/dist/styles/pane.css +83 -1
  292. package/dist/styles/popup-menu.css +229 -0
  293. package/dist/styles/resizable-region.css +70 -15
  294. package/dist/styles/select.css +60 -19
  295. package/dist/styles/skeleton.css +30 -3
  296. package/dist/styles/split-view.css +31 -32
  297. package/dist/styles/state-banner.css +0 -19
  298. package/dist/styles/surface-scaffold.css +8 -3
  299. package/dist/styles/tab-bar.css +79 -28
  300. package/dist/styles/tab-scaffold.css +60 -14
  301. package/dist/styles/text.css +17 -1
  302. package/dist/styles/token-search-field.css +4 -4
  303. package/dist/styles/toolbar-control-group.css +143 -69
  304. package/dist/styles/toolbar-text.css +21 -0
  305. package/dist/styles/toolbar.css +22 -37
  306. package/dist/styles/value-table.css +19 -2
  307. package/dist/styles/webawesome.css +3 -1
  308. package/dist/styles/workbench.css +145 -42
  309. package/dist/tab-scaffold.d.ts +46 -2
  310. package/dist/tab-scaffold.js +52 -16
  311. package/dist/tab-scaffold.js.map +1 -1
  312. package/dist/token-search-field.d.ts +4 -2
  313. package/dist/token-search-field.js +1 -1
  314. package/dist/toolbar-text.d.ts +7 -1
  315. package/dist/toolbar-text.js +1 -1
  316. package/dist/toolbar.d.ts +20 -5
  317. package/dist/toolbar.js +1 -1
  318. package/dist/{types-D6vzj-VT.d.ts → types-BuHELdXR.d.ts} +39 -6
  319. package/dist/value-table.js +1 -1
  320. package/dist/webawesome.d.ts +7 -1
  321. package/dist/wire-catalog.d.ts +15 -2
  322. package/dist/wire-catalog.js +12 -2
  323. package/dist/wire-catalog.js.map +1 -1
  324. package/dist/wire-scroll-dividers.d.ts +69 -0
  325. package/dist/wire-scroll-dividers.js +3 -0
  326. package/dist/wire-scroll-dividers.js.map +1 -0
  327. package/dist/wire-token-search-fields.js +1 -1
  328. package/dist/workbench.d.ts +60 -22
  329. package/dist/workbench.js +1 -1
  330. package/docs/accessibility.md +116 -7
  331. package/docs/app-layouts.md +18 -8
  332. package/docs/catalog.md +26 -7
  333. package/docs/collapsible-panel.md +32 -9
  334. package/docs/component-contract.md +182 -30
  335. package/docs/component-selection.md +59 -46
  336. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  337. package/docs/design/templates/empty-state/with-action.svg +1 -1
  338. package/docs/design/templates/empty-state-dark.svg +1 -1
  339. package/docs/design/templates/empty-state.svg +1 -1
  340. package/docs/design/templates/list/compact-dark.svg +1 -1
  341. package/docs/design/templates/list/compact.svg +1 -1
  342. package/docs/design/templates/list/stack-dark.svg +1 -1
  343. package/docs/design/templates/list/stack.svg +1 -1
  344. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  345. package/docs/design/templates/list-action-row/default.svg +1 -1
  346. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  347. package/docs/design/templates/list-action-row/selected.svg +1 -1
  348. package/docs/design/templates/list-action-row-dark.svg +1 -1
  349. package/docs/design/templates/list-action-row.svg +1 -1
  350. package/docs/design/templates/list-dark.svg +1 -1
  351. package/docs/design/templates/list-item/default-dark.svg +1 -1
  352. package/docs/design/templates/list-item/default.svg +1 -1
  353. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  354. package/docs/design/templates/list-item/selected.svg +1 -1
  355. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  356. package/docs/design/templates/list-item/trailing.svg +1 -1
  357. package/docs/design/templates/list-item-dark.svg +1 -1
  358. package/docs/design/templates/list-item.svg +1 -1
  359. package/docs/design/templates/list.svg +1 -1
  360. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  361. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  362. package/docs/design/templates/tab-bar-dark.svg +1 -1
  363. package/docs/design/templates/tab-bar.svg +1 -1
  364. package/docs/design/templates/value-table/details-dark.svg +1 -1
  365. package/docs/design/templates/value-table/details.svg +1 -1
  366. package/docs/design/templates/value-table-dark.svg +1 -1
  367. package/docs/design/templates/value-table.svg +1 -1
  368. package/docs/design-philosophy.md +31 -4
  369. package/docs/examples/application-ui-profile.json +4 -4
  370. package/docs/examples/command-palette-adapter.tsx +3 -2
  371. package/docs/examples/{component-catalog-extension-v2.json → component-composition-extension.json} +3 -3
  372. package/docs/layout.md +148 -29
  373. package/docs/nav-stack.md +77 -3
  374. package/docs/recipes.md +4 -3
  375. package/docs/split-view.md +54 -5
  376. package/docs/tab-scaffold.md +73 -2
  377. package/docs/type-contracts.md +21 -20
  378. package/docs/ui-analyzer.md +99 -5
  379. package/docs/ui-doctor.md +10 -0
  380. package/docs/ux-demo.md +2 -2
  381. package/docs/webawesome-theme.md +1 -2
  382. package/docs/workbench.md +57 -11
  383. package/doctor/index.mjs +6 -1
  384. package/llms.txt +117 -24
  385. package/package.json +29 -6
  386. package/ux-demo/recipes/collapsible-sidebar.tsx +3 -3
  387. package/ux-demo/recipes/composer-form.tsx +0 -1
  388. package/ux-demo/recipes/list-detail-dialog.tsx +0 -2
  389. package/ux-demo/recipes/list-workspace-states.tsx +0 -1
  390. package/ux-demo/recipes/loading-inspector.tsx +0 -1
  391. package/ux-demo/recipes/navigation-sidebar.tsx +3 -2
  392. package/ux-demo/recipes/navigation-stack.tsx +3 -2
  393. package/ux-demo/recipes/workspace-header.tsx +0 -1
  394. package/ai/component-catalog-extension-v2.d.ts +0 -7
  395. package/ai/component-catalog-extension-v2.schema.json +0 -7
  396. package/dist/chunk-3NBL3OUQ.js.map +0 -1
  397. package/dist/chunk-4BIMLITI.js.map +0 -1
  398. package/dist/chunk-5I22LMCV.js.map +0 -1
  399. package/dist/chunk-5NDQABWK.js.map +0 -1
  400. package/dist/chunk-5OLVUEND.js.map +0 -1
  401. package/dist/chunk-7GUQYHKA.js.map +0 -1
  402. package/dist/chunk-D7GWXIAS.js.map +0 -1
  403. package/dist/chunk-DQA5FMOX.js +0 -85
  404. package/dist/chunk-DQA5FMOX.js.map +0 -1
  405. package/dist/chunk-EAX2GSS4.js.map +0 -1
  406. package/dist/chunk-GUIHMIT2.js.map +0 -1
  407. package/dist/chunk-HMQ2ZDGG.js.map +0 -1
  408. package/dist/chunk-LZXQVUGN.js.map +0 -1
  409. package/dist/chunk-MTM43SJO.js.map +0 -1
  410. package/dist/chunk-N7FHFNT6.js.map +0 -1
  411. package/dist/chunk-R754MHXX.js.map +0 -1
  412. package/dist/chunk-RNRUVPJ3.js.map +0 -1
  413. package/dist/chunk-RNZAKSME.js.map +0 -1
  414. package/dist/chunk-T22EM4ET.js.map +0 -1
  415. package/dist/chunk-TZ5IHWB2.js.map +0 -1
  416. package/dist/chunk-WZ2GLEY4.js.map +0 -1
  417. package/dist/chunk-XD7DWYXG.js +0 -34
  418. package/dist/chunk-XD7DWYXG.js.map +0 -1
@@ -21,15 +21,17 @@
21
21
  )
22
22
  );
23
23
  --kui-toolbar-item-radius: var(--kui-control-highlight-radius);
24
- /* Internal group-to-child contract: the control slot a composed child (an
25
- icon-only Select) fills so it is inset evenly on every side and the
26
- group-owned focus ring stays concentric with the visible control. The
27
- group sizes to the child's width. A default slot is 40px tall inside the
28
- 2px inset; a compact slot is the full 32px padding box, and a lone
29
- compact child also overlaps the 1px inline padding. */
30
- --_kui-toolbar-slot-height: 2.5rem;
31
- --_kui-toolbar-slot-overlap: 0px;
32
- --_kui-toolbar-slot-radius: var(--kui-toolbar-item-radius);
24
+ /* Context the group provides to a composed child (an icon-only Select, in
25
+ select.css): the control slot the child fills so it is inset evenly on
26
+ every side and the group-owned focus ring stays concentric with the
27
+ visible control. The group sizes to the child's width. A default slot is
28
+ 40px tall inside the 2px inset; a compact slot is the full 32px padding
29
+ box, and a lone compact child also overlaps the 1px inline padding. The
30
+ values are named after the group that provides them; the child reads
31
+ them from its own stylesheet. */
32
+ --_kui-toolbar-control-group-slot-height: 2.5rem;
33
+ --_kui-toolbar-control-group-slot-overlap: 0px;
34
+ --_kui-toolbar-control-group-slot-radius: var(--kui-toolbar-item-radius);
33
35
  display: inline-flex;
34
36
  height: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
35
37
  min-width: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
@@ -44,6 +46,23 @@
44
46
  gap: 0;
45
47
  }
46
48
 
49
+ /* In a Toolbar zone, a group shorter than the toolbar's control band (the
50
+ `--_kui-toolbar-band` the Toolbar provides) takes half the difference as a
51
+ top margin, so it centers in the band by its own size. */
52
+ :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
53
+ > .kui-toolbar-control-group {
54
+ margin-block-start: max(
55
+ 0px,
56
+ calc(
57
+ (
58
+ var(--_kui-toolbar-band) -
59
+ var(--kui-toolbar-group-size, calc(2px + 2.625rem))
60
+ ) /
61
+ 2
62
+ )
63
+ );
64
+ }
65
+
47
66
  .kui-toolbar-control-group[data-visibility="compact-only"] {
48
67
  display: none;
49
68
  }
@@ -80,9 +99,9 @@
80
99
  }
81
100
  .kui-toolbar-control-group[data-size="compact"] {
82
101
  --kui-toolbar-group-size: 2.125rem;
83
- --_kui-toolbar-slot-height: 2rem;
84
- --_kui-toolbar-slot-overlap: 1px;
85
- --_kui-toolbar-slot-radius: max(
102
+ --_kui-toolbar-control-group-slot-height: 2rem;
103
+ --_kui-toolbar-control-group-slot-overlap: 1px;
104
+ --_kui-toolbar-control-group-slot-radius: max(
86
105
  0px,
87
106
  calc(var(--kui-toolbar-group-radius) - 1px)
88
107
  );
@@ -121,13 +140,15 @@
121
140
  display: flex;
122
141
  gap: var(--kui-space-xs);
123
142
  }
124
- .kui-toolbar-control-group[data-content="mixed"] wa-button {
143
+ .kui-toolbar-control-group[data-content="mixed"]
144
+ wa-button:not(:where(.kui-popup-menu > *)) {
125
145
  line-height: normal;
126
146
  }
127
147
  /* Toolbar controls never wrap. Web Awesome's label part is a plain block, so a
128
148
  slotted icon (a block SVG) and its text would otherwise stack vertically —
129
149
  lay them out on one row the way native mixed buttons already are. */
130
- .kui-toolbar-control-group wa-button::part(label) {
150
+ .kui-toolbar-control-group
151
+ wa-button:not(:where(.kui-popup-menu > *))::part(label) {
131
152
  display: inline-flex;
132
153
  align-items: center;
133
154
  gap: var(--kui-space-xs);
@@ -183,11 +204,15 @@
183
204
  background: transparent;
184
205
  }
185
206
 
186
- .kui-toolbar-control-group
187
- > :is(button, wa-button, wa-dropdown, .kui-toolbar-action-link) {
207
+ /* The group lays out its own native and raw Web Awesome children. A composed
208
+ PopupMenu (`wa-dropdown.kui-popup-menu`) or Select sizes itself in the
209
+ group's context from its own stylesheet (popup-menu.css, select.css); the
210
+ group names those children by class only to key its own state on them. */
211
+ .kui-toolbar-control-group > :is(button, wa-button, .kui-toolbar-action-link),
212
+ .kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu) {
188
213
  flex: 0 0 auto;
189
214
  }
190
- .kui-toolbar-control-group > wa-dropdown {
215
+ .kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu) {
191
216
  display: inline-flex;
192
217
  }
193
218
 
@@ -268,7 +293,7 @@
268
293
  }
269
294
 
270
295
  .kui-toolbar-control-group > button svg,
271
- .kui-toolbar-control-group wa-button > svg,
296
+ .kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) > svg,
272
297
  .kui-toolbar-control-group > .kui-toolbar-action-link svg {
273
298
  display: block;
274
299
  width: 1rem;
@@ -276,34 +301,43 @@
276
301
  }
277
302
 
278
303
  /* Nested Web Awesome buttons take the group's control height, not the theme's
279
- 44px standalone control height. */
280
- .kui-toolbar-control-group wa-button {
304
+ 44px standalone control height. The group's `wa-button` rules style only raw
305
+ buttons: a composed PopupMenu's trigger (`.kui-popup-menu > wa-button`) is
306
+ excluded inside a zero-specificity `:where()` and takes the same metrics
307
+ from popup-menu.css. */
308
+ .kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) {
281
309
  --wa-form-control-height: 2.5rem;
282
310
  }
283
- .kui-toolbar-control-group[data-size="compact"] wa-button {
311
+ .kui-toolbar-control-group[data-size="compact"]
312
+ wa-button:not(:where(.kui-popup-menu > *)) {
284
313
  --wa-form-control-height: 2rem;
285
314
  }
286
315
 
287
316
  .kui-toolbar-control-group > wa-button,
288
- .kui-toolbar-control-group > wa-dropdown,
289
- .kui-toolbar-control-group > wa-dropdown > wa-button,
290
- .kui-toolbar-control-group > wa-dropdown > wa-button::part(base) {
317
+ .kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu),
318
+ .kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu) > wa-button,
319
+ .kui-toolbar-control-group
320
+ > wa-dropdown:not(.kui-popup-menu)
321
+ > wa-button::part(base) {
291
322
  min-width: 2.5rem;
292
323
  height: 2.5rem;
293
324
  }
294
325
  .kui-toolbar-control-group[data-size="compact"] > button,
295
326
  .kui-toolbar-control-group[data-size="compact"] > .kui-toolbar-action-link,
296
327
  .kui-toolbar-control-group[data-size="compact"] > wa-button,
297
- .kui-toolbar-control-group[data-size="compact"] > wa-dropdown,
298
- .kui-toolbar-control-group[data-size="compact"] > wa-dropdown > wa-button,
299
328
  .kui-toolbar-control-group[data-size="compact"]
300
- > wa-dropdown
329
+ > wa-dropdown:not(.kui-popup-menu),
330
+ .kui-toolbar-control-group[data-size="compact"]
331
+ > wa-dropdown:not(.kui-popup-menu)
332
+ > wa-button,
333
+ .kui-toolbar-control-group[data-size="compact"]
334
+ > wa-dropdown:not(.kui-popup-menu)
301
335
  > wa-button::part(base),
302
336
  .kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
303
- wa-dropdown
337
+ wa-dropdown:not(.kui-popup-menu)
304
338
  wa-button,
305
339
  .kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
306
- wa-dropdown
340
+ wa-dropdown:not(.kui-popup-menu)
307
341
  wa-button::part(base) {
308
342
  min-width: 2rem;
309
343
  height: 2rem;
@@ -317,14 +351,20 @@
317
351
  padding-inline: 0;
318
352
  }
319
353
 
320
- .kui-toolbar-control-group[data-menu-inset="standard"] wa-dropdown::part(menu) {
354
+ /* `standard` keeps each menu's own standard inset: a raw wa-dropdown takes the
355
+ 8px surface inset, while a PopupMenu keeps the Select listbox inset it
356
+ shares (popup-menu.css). The explicit compact and list-zero choices apply to
357
+ every nested menu; a PopupMenu applies them to itself (popup-menu.css). */
358
+ .kui-toolbar-control-group[data-menu-inset="standard"]
359
+ wa-dropdown:not(.kui-popup-menu)::part(menu) {
321
360
  padding: var(--kui-wa-surface-inset, 0.5rem);
322
361
  }
323
- .kui-toolbar-control-group[data-menu-inset="compact"] wa-dropdown::part(menu) {
362
+ .kui-toolbar-control-group[data-menu-inset="compact"]
363
+ wa-dropdown:not(.kui-popup-menu)::part(menu) {
324
364
  padding: 0.25rem;
325
365
  }
326
366
  .kui-toolbar-control-group[data-menu-inset="list-zero"]
327
- wa-dropdown::part(menu) {
367
+ wa-dropdown:not(.kui-popup-menu)::part(menu) {
328
368
  padding: 0;
329
369
  }
330
370
 
@@ -345,7 +385,7 @@
345
385
  }
346
386
 
347
387
  .kui-toolbar-control-group[data-size="compact"][data-content="mixed"]
348
- > wa-dropdown,
388
+ > wa-dropdown:not(.kui-popup-menu),
349
389
  .kui-toolbar-control-group[data-size="compact"][data-content="mixed"]
350
390
  > wa-button {
351
391
  margin: -2px;
@@ -356,26 +396,26 @@
356
396
  the fixed 32px base centers both outside its host, painting the label across
357
397
  the separator and the caret beyond the group border. */
358
398
  .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
359
- > wa-dropdown
399
+ > wa-dropdown:not(.kui-popup-menu)
360
400
  > wa-button,
361
401
  .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
362
- > wa-dropdown
402
+ > wa-dropdown:not(.kui-popup-menu)
363
403
  > wa-button::part(base) {
364
404
  min-width: max-content;
365
405
  }
366
406
  .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
367
- > wa-dropdown
407
+ > wa-dropdown:not(.kui-popup-menu)
368
408
  > wa-button::part(base) {
369
409
  width: max-content;
370
410
  }
371
411
 
372
412
  .kui-toolbar-control-group[data-single="true"]
373
- > wa-dropdown
413
+ > wa-dropdown:not(.kui-popup-menu)
374
414
  > wa-button::part(base) {
375
415
  width: max-content;
376
416
  }
377
417
 
378
- .kui-toolbar-control-group wa-button {
418
+ .kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) {
379
419
  display: inline-flex;
380
420
  line-height: 0;
381
421
  align-items: center;
@@ -383,7 +423,8 @@
383
423
  --wa-color-fill-quiet: transparent;
384
424
  }
385
425
 
386
- .kui-toolbar-control-group wa-button::part(base) {
426
+ .kui-toolbar-control-group
427
+ wa-button:not(:where(.kui-popup-menu > *))::part(base) {
387
428
  /* Match min-width to the 40px height so an icon-only button's highlight is at
388
429
  least a circle, not a vertical oval — the host is 40px wide but the base
389
430
  part was sizing to its ~32px content. Text/caret buttons grow past it. */
@@ -397,20 +438,29 @@
397
438
  );
398
439
  }
399
440
 
400
- .kui-toolbar-control-group wa-button:hover::part(base) {
441
+ .kui-toolbar-control-group
442
+ wa-button:not(:where(.kui-popup-menu > *)):hover::part(base) {
401
443
  border-color: var(--kui-toolbar-control-border);
402
444
  background-color: var(--kui-toolbar-control-hover-background);
403
445
  }
404
446
 
405
447
  .kui-toolbar-control-group[data-single="true"]:has(
406
- > :is(button, wa-button, wa-dropdown, wa-select, .kui-toolbar-action-link)
448
+ > :is(
449
+ button,
450
+ wa-button,
451
+ .kui-popup-menu,
452
+ wa-dropdown:not(.kui-popup-menu),
453
+ .kui-select,
454
+ .kui-toolbar-action-link
455
+ )
407
456
  ):hover {
408
457
  background-color: var(--kui-toolbar-control-hover-background);
409
458
  }
410
459
 
411
460
  .kui-toolbar-control-group[data-single="true"]
412
461
  > :is(button, wa-button, .kui-toolbar-action-link):hover,
413
- .kui-toolbar-control-group[data-single="true"] wa-button:hover::part(base) {
462
+ .kui-toolbar-control-group[data-single="true"]
463
+ wa-button:not(:where(.kui-popup-menu > *)):hover::part(base) {
414
464
  border-color: transparent;
415
465
  background: transparent;
416
466
  }
@@ -420,7 +470,7 @@
420
470
  inner layer inset from the border (KF-J9P1ZD — a heading toolbar's lone Close/
421
471
  Done action). */
422
472
  .kui-toolbar-control-group:not([data-single="true"]):has(
423
- > :is(button, wa-button, wa-select, .kui-toolbar-action-link):only-child
473
+ > :is(button, wa-button, .kui-select, .kui-toolbar-action-link):only-child
424
474
  ):hover {
425
475
  background-color: var(--kui-toolbar-control-hover-background);
426
476
  }
@@ -432,19 +482,13 @@
432
482
  .kui-toolbar-control-group:not([data-single="true"]):has(
433
483
  > :is(button, wa-button):only-child
434
484
  )
435
- wa-button:hover::part(base) {
485
+ > wa-button:hover::part(base) {
436
486
  border-color: transparent;
437
487
  background: transparent;
438
488
  }
439
489
 
440
- /* A toolbar Select beside other controls highlights its own pill on hover,
441
- like its button and dropdown siblings; a lone Select instead lifts the whole
442
- group (above). */
443
- .kui-toolbar-control-group:not([data-single="true"])
444
- > wa-select:not(:only-child):hover::part(combobox) {
445
- border-color: var(--kui-toolbar-control-border);
446
- background: var(--kui-toolbar-control-hover-background);
447
- }
490
+ /* A toolbar Select beside other controls highlights its own pill on hover
491
+ (select.css); a lone Select instead lifts the whole group (above). */
448
492
 
449
493
  /* A plain <button> child paints its own box for the selected state. */
450
494
  .kui-toolbar-control-group[data-single="false"] > button[aria-pressed="true"] {
@@ -476,37 +520,67 @@
476
520
  outline-offset: 1px;
477
521
  }
478
522
 
479
- /* With per-control rings, a composed Select paints its own ring even when it
480
- was told the group owns it: nothing else would show focus. It matches the
481
- sibling controls' ring and offset. */
482
- .kui-toolbar-control-group[data-focus-ring="control"]
483
- > wa-select:focus-within::part(combobox) {
484
- outline: var(--kui-focus-ring);
485
- outline-offset: 1px;
486
- }
523
+ /* With per-control rings, a composed Select paints its own ring (select.css). */
487
524
 
488
- .kui-toolbar-control-group[data-focus-ring="outline"]:focus-within {
525
+ .kui-toolbar-control-group[data-focus-ring="outline"]:focus-within:not(
526
+ :where(
527
+ :has(
528
+ .kui-select[open],
529
+ .kui-popup-menu[open],
530
+ wa-dropdown:not(.kui-popup-menu)[open]
531
+ )
532
+ )
533
+ ) {
489
534
  outline: var(--kui-focus-ring);
490
535
  outline-offset: 1px;
491
536
  }
492
537
 
493
- .kui-toolbar-control-group[data-focus-ring="halo"]:focus-within {
538
+ .kui-toolbar-control-group[data-focus-ring="halo"]:focus-within:not(
539
+ :where(
540
+ :has(
541
+ .kui-select[open],
542
+ .kui-popup-menu[open],
543
+ wa-dropdown:not(.kui-popup-menu)[open]
544
+ )
545
+ )
546
+ ) {
494
547
  border-color: var(--kui-color-text-link);
495
548
  box-shadow: 0 0 0 3px
496
549
  color-mix(in srgb, var(--kui-color-text-link) 22%, transparent);
497
550
  }
498
551
 
499
- /* Chromium and WebKit do not propagate :focus-within from a focused
500
- light-DOM child (an open wa-select's active wa-option) through the host's
501
- popup shadow tree, so the group ring vanished while its Select listbox was
502
- open. A focused light-DOM descendant still owns the group ring. Kept as
503
- separate rules so an engine without :has() keeps the :focus-within ring. */
504
- .kui-toolbar-control-group[data-focus-ring="outline"]:has(:focus) {
552
+ /* A group-owned ring (outline or halo) is off while a Select listbox or a
553
+ PopupMenu inside the group is open: the open popup shows focus, as the
554
+ per-control Select and PopupMenu triggers already do, and the ring returns
555
+ when the popup closes with focus still in the group. The exclusion sits in
556
+ a forgiving :where(), so an engine without :has() keeps the ring.
557
+
558
+ Chromium and WebKit do not propagate :focus-within from a focused
559
+ light-DOM child through a host's popup shadow tree, so a focused light-DOM
560
+ descendant also owns the group ring. Kept as separate rules so an engine
561
+ without :has() keeps the :focus-within ring. */
562
+ .kui-toolbar-control-group[data-focus-ring="outline"]:has(:focus):not(
563
+ :where(
564
+ :has(
565
+ .kui-select[open],
566
+ .kui-popup-menu[open],
567
+ wa-dropdown:not(.kui-popup-menu)[open]
568
+ )
569
+ )
570
+ ) {
505
571
  outline: var(--kui-focus-ring);
506
572
  outline-offset: 1px;
507
573
  }
508
574
 
509
- .kui-toolbar-control-group[data-focus-ring="halo"]:has(:focus) {
575
+ .kui-toolbar-control-group[data-focus-ring="halo"]:has(:focus):not(
576
+ :where(
577
+ :has(
578
+ .kui-select[open],
579
+ .kui-popup-menu[open],
580
+ wa-dropdown:not(.kui-popup-menu)[open]
581
+ )
582
+ )
583
+ ) {
510
584
  border-color: var(--kui-color-text-link);
511
585
  box-shadow: 0 0 0 3px
512
586
  color-mix(in srgb, var(--kui-color-text-link) 22%, transparent);
@@ -12,6 +12,27 @@
12
12
  align-items: center;
13
13
  }
14
14
 
15
+ /* In a Toolbar zone, a title fills the toolbar's control band (the
16
+ `--_kui-toolbar-band` the Toolbar provides) and centers its first line in
17
+ it; further lines of a wrapped title continue below the band. These rules
18
+ precede the size and wrap rules below, which keep their own minimum
19
+ heights. */
20
+ :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
21
+ > .kui-toolbar-text {
22
+ height: auto;
23
+ min-height: var(--_kui-toolbar-band);
24
+ }
25
+
26
+ :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
27
+ > .kui-toolbar-text[data-wrap="true"] {
28
+ padding-block: max(0px, calc((var(--_kui-toolbar-band) - 1.25em) / 2));
29
+ }
30
+
31
+ /* A filling title grows into its row's free space and truncates there. */
32
+ .kui-toolbar-text[data-fill="true"] {
33
+ flex: 1 1 auto;
34
+ }
35
+
15
36
  /* The text lives in a block child, not directly in the flex box, so
16
37
  `text-overflow: ellipsis` actually applies (it is a no-op on a flex item). */
17
38
  .kui-toolbar-text__text {
@@ -5,7 +5,11 @@
5
5
  box-sizing: border-box;
6
6
  color: var(--kui-color-text);
7
7
  background: transparent;
8
- grid-template-columns: auto minmax(0, 1fr) auto;
8
+ /* The center track's minimum is `auto`, not 0, so it resolves to the center
9
+ zone's own min-width (its content width, below): when the zones do not all
10
+ fit, the auto leading track is what shrinks and its title truncates, and
11
+ the center group never overflows its track onto the leading identity. */
12
+ grid-template-columns: auto 1fr auto;
9
13
  align-items: start;
10
14
  gap: var(--kui-toolbar-gap, 0.5rem);
11
15
  container: kui-toolbar / inline-size;
@@ -100,31 +104,31 @@
100
104
  inset 1px 0 var(--_kui-toolbar-divider-left);
101
105
  }
102
106
 
103
- .kui-toolbar[divider-sides*="t"] {
107
+ .kui-toolbar:is([divider-sides*="t"], [data-scroll-divider*="t"]) {
104
108
  --_kui-toolbar-divider-top: var(
105
109
  --kui-toolbar-divider-color,
106
- var(--kui-color-border)
110
+ var(--kui-color-neutral-border-normal)
107
111
  );
108
112
  }
109
113
 
110
- .kui-toolbar[divider-sides*="r"] {
114
+ .kui-toolbar:is([divider-sides*="r"], [data-scroll-divider*="r"]) {
111
115
  --_kui-toolbar-divider-right: var(
112
116
  --kui-toolbar-divider-color,
113
- var(--kui-color-border)
117
+ var(--kui-color-neutral-border-normal)
114
118
  );
115
119
  }
116
120
 
117
- .kui-toolbar[divider-sides*="b"] {
121
+ .kui-toolbar:is([divider-sides*="b"], [data-scroll-divider*="b"]) {
118
122
  --_kui-toolbar-divider-bottom: var(
119
123
  --kui-toolbar-divider-color,
120
- var(--kui-color-border)
124
+ var(--kui-color-neutral-border-normal)
121
125
  );
122
126
  }
123
127
 
124
- .kui-toolbar[divider-sides*="l"] {
128
+ .kui-toolbar:is([divider-sides*="l"], [data-scroll-divider*="l"]) {
125
129
  --_kui-toolbar-divider-left: var(
126
130
  --kui-toolbar-divider-color,
127
- var(--kui-color-border)
131
+ var(--kui-color-neutral-border-normal)
128
132
  );
129
133
  }
130
134
 
@@ -136,7 +140,10 @@
136
140
  down. A growing item therefore never moves the other items or its own top.
137
141
  Centering the zones in the toolbar row instead dropped every control to the
138
142
  middle of a two-line title. The band is resolved here, on the toolbar, so a
139
- compact group's own smaller group size never redefines it. */
143
+ compact group's own smaller group size never redefines it.
144
+ `--_kui-toolbar-band` is context the toolbar provides: a ToolbarControlGroup
145
+ and a ToolbarText each center themselves in it from their own stylesheets
146
+ (toolbar-control-group.css, toolbar-text.css). */
140
147
  .kui-toolbar {
141
148
  --_kui-toolbar-band: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
142
149
  }
@@ -151,33 +158,6 @@
151
158
  gap: var(--kui-toolbar-gap, 0.5rem);
152
159
  }
153
160
 
154
- :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
155
- > [data-component="toolbar-control-group"] {
156
- margin-block-start: max(
157
- 0px,
158
- calc(
159
- (
160
- var(--_kui-toolbar-band) -
161
- var(--kui-toolbar-group-size, calc(2px + 2.625rem))
162
- ) /
163
- 2
164
- )
165
- );
166
- }
167
-
168
- /* A title fills the band and centers its first line in it; further lines of a
169
- wrapped title continue below the band. */
170
- :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
171
- > [data-component="toolbar-text"] {
172
- height: auto;
173
- min-height: var(--_kui-toolbar-band);
174
- }
175
-
176
- :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
177
- > [data-component="toolbar-text"][data-wrap="true"] {
178
- padding-block: max(0px, calc((var(--_kui-toolbar-band) - 1.25em) / 2));
179
- }
180
-
181
161
  /* Pin each zone to its column so a display:none (empty) leading or center zone
182
162
  doesn't let the trailing zone auto-place into the first column — which left an
183
163
  extra gap + empty track to the trailing zone's right (KF-5BEF2M). The trailing
@@ -190,6 +170,11 @@
190
170
  }
191
171
 
192
172
  .kui-toolbar__center {
173
+ /* The center content never compresses below its own width (a group cannot
174
+ shrink or clip its controls). The track above takes this as its minimum, so
175
+ the leading identity gives way first, the way a platform toolbar truncates
176
+ its title before it overlaps the centered controls. */
177
+ min-width: min-content;
193
178
  justify-content: center;
194
179
  grid-column: 2;
195
180
  }
@@ -1,6 +1,6 @@
1
1
  .kui-value-table {
2
2
  --kui-value-table-background: var(--kui-color-surface-lowered);
3
- --kui-value-table-border: var(--kui-color-border);
3
+ --kui-value-table-border: var(--kui-color-neutral-border-normal);
4
4
  --_kui-value-table-icon-size: var(--kui-value-table-icon-size, 1.5rem);
5
5
  display: grid;
6
6
  margin-block: 0;
@@ -22,7 +22,14 @@
22
22
  padding-block: 0.5rem;
23
23
  padding-inline: var(--_kui-value-table-inline-padding);
24
24
  box-sizing: border-box;
25
- grid-template-columns: minmax(6rem, auto) minmax(0, 1fr);
25
+ /* Two content-sized tracks share the free space equally, and each stops
26
+ growing once its content fits. A short value keeps its whole width and a
27
+ long label takes the rest (ending a word that still does not fit in an
28
+ ellipsis); a short label keeps its width beside a long, wrapping value;
29
+ when both are long they split the row. A `1fr` value track would get
30
+ nothing until the label reached its full width, starving the value to 0px
31
+ beside a long single-word label. */
32
+ grid-template-columns: minmax(0, auto) minmax(0, auto);
26
33
  align-items: center;
27
34
  gap: var(--kui-layout-item-gap, 0.5rem);
28
35
  }
@@ -42,7 +49,12 @@
42
49
  }
43
50
  .kui-value-table__row dt {
44
51
  display: flex;
52
+ /* The label hugs its content (up to its column) rather than stretching, so
53
+ its box does not change with the value's width — a placeholder row keeps
54
+ the live row's label geometry beside its skeleton value. */
55
+ max-width: 100%;
45
56
  min-width: 0;
57
+ justify-self: start;
46
58
  color: var(--kui-color-text-quiet);
47
59
  align-items: center;
48
60
  gap: var(--kui-layout-item-gap, 0.5rem);
@@ -60,6 +72,11 @@
60
72
  }
61
73
  .kui-value-table__label {
62
74
  min-width: 0;
75
+ overflow: hidden;
76
+ /* A multi-word label wraps at spaces; a single word wider than the label
77
+ column (a long component or file name) ends in an ellipsis instead of
78
+ running under the value. */
79
+ text-overflow: ellipsis;
63
80
  }
64
81
  .kui-value-table__row dd {
65
82
  display: flex;
@@ -499,7 +499,9 @@
499
499
  padding-inline: var(--kui-wa-control-inset) !important;
500
500
  }
501
501
 
502
- wa-dropdown-item {
502
+ /* A PopupMenu item owns the Select option geometry instead (popup-menu.css),
503
+ so a command menu and a value list draw identical rows. */
504
+ wa-dropdown-item:not([data-component="popup-menu"] > *) {
503
505
  padding-inline: var(--kui-wa-control-inset) !important;
504
506
  }
505
507