@kerfjs/ui 5.0.0-beta.75 → 5.0.0-beta.76

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 (404) hide show
  1. package/README.md +29 -1
  2. package/ai/component-catalog.json +23 -11
  3. package/ai/component-composition.json +9 -3
  4. package/ai/components/README.md +1 -1
  5. package/ai/components/badge.md +1 -1
  6. package/ai/components/chip.md +1 -1
  7. package/ai/components/content-item.md +8 -5
  8. package/ai/components/document-baseline.md +2 -2
  9. package/ai/components/grid.md +5 -3
  10. package/ai/components/lucide-icon.md +11 -0
  11. package/ai/public-api-signatures-v1.md +92 -61
  12. package/ai/skill.md +33 -4
  13. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  14. package/analyzer/index.mjs +11 -1
  15. package/dist/app-tab.js +1 -1
  16. package/dist/badge.d.ts +5 -3
  17. package/dist/badge.js +1 -1
  18. package/dist/browser/catalog.js +7 -7
  19. package/dist/browser/collapsible-panel.js +3 -3
  20. package/dist/browser/list-header.js +1 -1
  21. package/dist/browser/nav-stack.js +1 -1
  22. package/dist/browser/select.js +1 -1
  23. package/dist/browser/split-view.js +1 -1
  24. package/dist/browser/workbench.js +4 -4
  25. package/dist/catalog-resources.d.ts +6 -6
  26. package/dist/catalog-resources.js +1 -1
  27. package/dist/catalog-resources.js.map +1 -1
  28. package/dist/catalog.d.ts +5 -5
  29. package/dist/catalog.js +13 -13
  30. package/dist/catalog.js.map +1 -1
  31. package/dist/chip.d.ts +3 -2
  32. package/dist/chip.js +1 -1
  33. package/dist/{chunk-SVLDRGPJ.js → chunk-3RE2JMZU.js} +7 -3
  34. package/dist/chunk-3RE2JMZU.js.map +1 -0
  35. package/dist/{chunk-V4WLBOVJ.js → chunk-5BZBIRQG.js} +4 -4
  36. package/dist/chunk-5BZBIRQG.js.map +1 -0
  37. package/dist/{chunk-SX7FJXPJ.js → chunk-5D3WDMIK.js} +4 -4
  38. package/dist/chunk-5D3WDMIK.js.map +1 -0
  39. package/dist/{chunk-HKVJ5MW3.js → chunk-5PAVAR4B.js} +3 -3
  40. package/dist/chunk-5PAVAR4B.js.map +1 -0
  41. package/dist/{chunk-5TTZPGUY.js → chunk-72LLWYP2.js} +6 -6
  42. package/dist/chunk-72LLWYP2.js.map +1 -0
  43. package/dist/{chunk-JA4J7Y4C.js → chunk-75I3SNUJ.js} +2 -2
  44. package/dist/chunk-75I3SNUJ.js.map +1 -0
  45. package/dist/{chunk-K47P7QZC.js → chunk-7QQ3HE47.js} +2 -2
  46. package/dist/chunk-7QQ3HE47.js.map +1 -0
  47. package/dist/{chunk-O5GM2JAM.js → chunk-7QWIJEK5.js} +9 -9
  48. package/dist/chunk-7QWIJEK5.js.map +1 -0
  49. package/dist/{chunk-5I7QGQVT.js → chunk-AN5IWMTM.js} +2 -2
  50. package/dist/chunk-AN5IWMTM.js.map +1 -0
  51. package/dist/{chunk-3BYFWTP3.js → chunk-AOAW55JN.js} +2 -2
  52. package/dist/chunk-AOAW55JN.js.map +1 -0
  53. package/dist/{chunk-5UGLKFBF.js → chunk-ARZ4RSQO.js} +5 -6
  54. package/dist/chunk-ARZ4RSQO.js.map +1 -0
  55. package/dist/{chunk-TCXDZNCX.js → chunk-BJLXE56E.js} +6 -6
  56. package/dist/chunk-BJLXE56E.js.map +1 -0
  57. package/dist/{chunk-RGS4WX2M.js → chunk-BYHGRKC3.js} +2 -2
  58. package/dist/chunk-BYHGRKC3.js.map +1 -0
  59. package/dist/{chunk-ZLKZFKLW.js → chunk-CEJ5FK6G.js} +2 -2
  60. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  61. package/dist/{chunk-SMZGAPCU.js → chunk-DQDTZE4W.js} +2 -2
  62. package/dist/chunk-DQDTZE4W.js.map +1 -0
  63. package/dist/{chunk-JGIV6ZDA.js → chunk-EFDCALR3.js} +2 -2
  64. package/dist/chunk-EFDCALR3.js.map +1 -0
  65. package/dist/{chunk-FKPKGP2H.js → chunk-G4VKQP7B.js} +2 -2
  66. package/dist/chunk-G4VKQP7B.js.map +1 -0
  67. package/dist/{chunk-TOICTHR2.js → chunk-GO2CZX4M.js} +2 -2
  68. package/dist/chunk-GO2CZX4M.js.map +1 -0
  69. package/dist/{chunk-DPAUKNB6.js → chunk-GS2QD3N7.js} +3 -3
  70. package/dist/chunk-GS2QD3N7.js.map +1 -0
  71. package/dist/{chunk-SLWCCHNP.js → chunk-H45DAZBL.js} +2 -2
  72. package/dist/chunk-H45DAZBL.js.map +1 -0
  73. package/dist/{chunk-DA3HS64I.js → chunk-H7ZJEI3H.js} +3 -3
  74. package/dist/chunk-H7ZJEI3H.js.map +1 -0
  75. package/dist/{chunk-V4GAQ74C.js → chunk-HFLGWMG3.js} +4 -4
  76. package/dist/chunk-HFLGWMG3.js.map +1 -0
  77. package/dist/{chunk-HXTAPIHQ.js → chunk-HFQDSSED.js} +6 -6
  78. package/dist/chunk-HFQDSSED.js.map +1 -0
  79. package/dist/{chunk-GRHJQWV2.js → chunk-HGSTMZZ6.js} +6 -6
  80. package/dist/chunk-HGSTMZZ6.js.map +1 -0
  81. package/dist/{chunk-WF75U3V4.js → chunk-HPREYDKV.js} +2 -2
  82. package/dist/chunk-HPREYDKV.js.map +1 -0
  83. package/dist/{chunk-VA5TN5PR.js → chunk-I4SDIMFA.js} +2 -2
  84. package/dist/chunk-I4SDIMFA.js.map +1 -0
  85. package/dist/{chunk-4SQK27MR.js → chunk-IM3GKYOG.js} +2 -2
  86. package/dist/chunk-IM3GKYOG.js.map +1 -0
  87. package/dist/{chunk-PL26TKNK.js → chunk-IVLTEBBT.js} +8 -8
  88. package/dist/chunk-IVLTEBBT.js.map +1 -0
  89. package/dist/{chunk-ALGYHYXP.js → chunk-J3AWE5I4.js} +2 -2
  90. package/dist/chunk-J3AWE5I4.js.map +1 -0
  91. package/dist/{chunk-OXO2QJWV.js → chunk-JOR5LGYE.js} +2 -2
  92. package/dist/chunk-JOR5LGYE.js.map +1 -0
  93. package/dist/{chunk-SRSJO5QE.js → chunk-LAZLBC2Q.js} +2 -2
  94. package/dist/chunk-LAZLBC2Q.js.map +1 -0
  95. package/dist/{chunk-RFGW735Q.js → chunk-LRAIS3YB.js} +2 -2
  96. package/dist/chunk-LRAIS3YB.js.map +1 -0
  97. package/dist/{chunk-AYUHMAI6.js → chunk-MXNIVEVL.js} +2 -2
  98. package/dist/chunk-MXNIVEVL.js.map +1 -0
  99. package/dist/{chunk-4NG4Y2Q6.js → chunk-NJZMR7HM.js} +2 -2
  100. package/dist/chunk-NJZMR7HM.js.map +1 -0
  101. package/dist/{chunk-DG6G5EPF.js → chunk-NMWDHZVM.js} +2 -2
  102. package/dist/chunk-NMWDHZVM.js.map +1 -0
  103. package/dist/{chunk-X5QSICJ3.js → chunk-NS2TBYM4.js} +2 -2
  104. package/dist/chunk-NS2TBYM4.js.map +1 -0
  105. package/dist/{chunk-4FEVHE7C.js → chunk-NVRJ7C3W.js} +4 -4
  106. package/dist/chunk-NVRJ7C3W.js.map +1 -0
  107. package/dist/{chunk-BFPBS5Y4.js → chunk-O27D24CA.js} +2 -2
  108. package/dist/chunk-O27D24CA.js.map +1 -0
  109. package/dist/{chunk-DUBUXJA3.js → chunk-PQQQXJGV.js} +4 -2
  110. package/dist/chunk-PQQQXJGV.js.map +1 -0
  111. package/dist/{chunk-6DFDTWGG.js → chunk-QYXKMLHO.js} +2 -2
  112. package/dist/chunk-QYXKMLHO.js.map +1 -0
  113. package/dist/{chunk-I3Q7KKYM.js → chunk-S3ECMF23.js} +2 -2
  114. package/dist/chunk-S3ECMF23.js.map +1 -0
  115. package/dist/{chunk-PSHUSWQH.js → chunk-S4ZGTDSG.js} +2 -2
  116. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  117. package/dist/{chunk-OYQIONQF.js → chunk-SJY7KC45.js} +5 -5
  118. package/dist/chunk-SJY7KC45.js.map +1 -0
  119. package/dist/{chunk-NPNSKX3K.js → chunk-VLPE6OPN.js} +2 -2
  120. package/dist/chunk-VLPE6OPN.js.map +1 -0
  121. package/dist/{chunk-NCSWXG7G.js → chunk-VLQUXZKA.js} +9 -3
  122. package/dist/chunk-VLQUXZKA.js.map +1 -0
  123. package/dist/{chunk-EHIMH4J7.js → chunk-VR7MWD2X.js} +10 -4
  124. package/dist/chunk-VR7MWD2X.js.map +1 -0
  125. package/dist/{chunk-NN6GYOA2.js → chunk-XIZRXI7N.js} +2 -2
  126. package/dist/chunk-XIZRXI7N.js.map +1 -0
  127. package/dist/{chunk-TDN5EE3S.js → chunk-Y6KT7ZTR.js} +2 -2
  128. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  129. package/dist/{chunk-LHSUPNSE.js → chunk-YLJ6X3AC.js} +2 -2
  130. package/dist/chunk-YLJ6X3AC.js.map +1 -0
  131. package/dist/{chunk-YDGNU2OD.js → chunk-ZVYA6TLR.js} +5 -2
  132. package/dist/chunk-ZVYA6TLR.js.map +1 -0
  133. package/dist/collapsible-panel.d.ts +6 -6
  134. package/dist/collapsible-panel.js +3 -3
  135. package/dist/collapsible-panel.js.map +1 -1
  136. package/dist/content-item.d.ts +13 -2
  137. package/dist/content-item.js +1 -1
  138. package/dist/css-values.js +1 -1
  139. package/dist/device-class.js +1 -1
  140. package/dist/device-class.js.map +1 -1
  141. package/dist/disclosure-arrow.js +1 -1
  142. package/dist/empty-state.js +1 -1
  143. package/dist/floating-toolbar.d.ts +1 -1
  144. package/dist/floating-toolbar.js +1 -1
  145. package/dist/grid.d.ts +10 -3
  146. package/dist/grid.js +1 -1
  147. package/dist/help-tags-register.js +1 -1
  148. package/dist/help-tags-register.js.map +1 -1
  149. package/dist/index.d.ts +27 -26
  150. package/dist/index.js +40 -40
  151. package/dist/list-action-row.js +1 -1
  152. package/dist/list-header.js +1 -1
  153. package/dist/list-inset-control.js +1 -1
  154. package/dist/list-inset-text.js +1 -1
  155. package/dist/list-item.js +1 -1
  156. package/dist/list.d.ts +2 -2
  157. package/dist/list.js +1 -1
  158. package/dist/loading-spinner.d.ts +4 -2
  159. package/dist/loading-spinner.js +1 -1
  160. package/dist/lucide-icon.d.ts +3 -1
  161. package/dist/lucide-icon.js +1 -1
  162. package/dist/nav-stack.d.ts +1 -1
  163. package/dist/nav-stack.js +1 -1
  164. package/dist/pane.js +1 -1
  165. package/dist/popup-menu-register.js +7 -7
  166. package/dist/popup-menu-register.js.map +1 -1
  167. package/dist/popup-menu.js +1 -1
  168. package/dist/resizable-region.d.ts +1 -1
  169. package/dist/resizable-region.js +1 -1
  170. package/dist/row.d.ts +2 -2
  171. package/dist/row.js +1 -1
  172. package/dist/segmented-control.js +1 -1
  173. package/dist/select-register.js +6 -6
  174. package/dist/select-register.js.map +1 -1
  175. package/dist/select.d.ts +1 -1
  176. package/dist/select.js +1 -1
  177. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  178. package/dist/skeleton.js +1 -1
  179. package/dist/spacer.js +1 -1
  180. package/dist/split-view.d.ts +2 -2
  181. package/dist/split-view.js +2 -2
  182. package/dist/split-view.js.map +1 -1
  183. package/dist/state-banner.d.ts +5 -3
  184. package/dist/state-banner.js +1 -1
  185. package/dist/styles/badge.css +1 -1
  186. package/dist/styles/chip.css +1 -1
  187. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  188. package/dist/styles/components/actions/popup-menu/popup-menu.css +285 -0
  189. package/dist/styles/components/actions/toolbar/toolbar.css +392 -0
  190. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +790 -0
  191. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +153 -0
  192. package/dist/styles/components/collections/list/list.css +133 -0
  193. package/dist/styles/components/collections/list-action-row/list-action-row.css +258 -0
  194. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  195. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  196. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  197. package/dist/styles/components/collections/list-item/list-item.css +255 -0
  198. package/dist/styles/components/data-display/value-table/value-table.css +105 -0
  199. package/dist/styles/components/feedback/badge/badge.css +118 -0
  200. package/dist/styles/components/feedback/chip/chip.css +138 -0
  201. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  202. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  203. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  204. package/dist/styles/components/feedback/state-banner/state-banner.css +248 -0
  205. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  206. package/dist/styles/components/forms/select/select.css +454 -0
  207. package/dist/styles/components/forms/token-search-field/token-search-field.css +381 -0
  208. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +575 -0
  209. package/dist/styles/components/layout/grid/grid.css +85 -0
  210. package/dist/styles/components/layout/pane/pane.css +263 -0
  211. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  212. package/dist/styles/components/layout/row/row.css +111 -0
  213. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  214. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  215. package/dist/styles/components/layout/workbench/workbench.css +1067 -0
  216. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  217. package/dist/styles/components/navigation/app-tab/app-tab.css +376 -0
  218. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  219. package/dist/styles/components/navigation/nav-stack/nav-stack.css +237 -0
  220. package/dist/styles/components/navigation/tab-bar/tab-bar.css +183 -0
  221. package/dist/styles/components/navigation/tab-scaffold/tab-scaffold.css +207 -0
  222. package/dist/styles/components/surfaces/content-item/content-item.css +120 -0
  223. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +29 -0
  224. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +56 -0
  225. package/dist/styles/components/typography/text/text.css +139 -0
  226. package/dist/styles/content-item.css +46 -1
  227. package/dist/styles/document.css +10 -0
  228. package/dist/styles/foundation.css +9 -6
  229. package/dist/styles/grid.css +50 -0
  230. package/dist/styles/lucide-icon.css +4 -0
  231. package/dist/styles/webawesome.css +23 -6
  232. package/dist/sunken-panel.d.ts +1 -1
  233. package/dist/sunken-panel.js +1 -1
  234. package/dist/surface-scaffold.js +1 -1
  235. package/dist/tab-bar.js +1 -1
  236. package/dist/tab-scaffold.d.ts +1 -1
  237. package/dist/tab-scaffold.js +1 -1
  238. package/dist/tab-scaffold.js.map +1 -1
  239. package/dist/text.d.ts +12 -8
  240. package/dist/text.js +1 -1
  241. package/dist/token-search-field.d.ts +1 -1
  242. package/dist/token-search-field.js +1 -1
  243. package/dist/{token-search-field-CVGwDn2y.d.ts → token-search-model-DTcTXWMS.d.ts} +54 -54
  244. package/dist/token-search-model.d.ts +1 -1
  245. package/dist/token-search-model.js +1 -1
  246. package/dist/toolbar-control-group.js +1 -1
  247. package/dist/toolbar-text.js +1 -1
  248. package/dist/toolbar.d.ts +1 -1
  249. package/dist/toolbar.js +1 -1
  250. package/dist/value-table.js +1 -1
  251. package/dist/wire-catalog.js +2 -2
  252. package/dist/wire-catalog.js.map +1 -1
  253. package/dist/wire-content-items.js +1 -1
  254. package/dist/wire-content-items.js.map +1 -1
  255. package/dist/wire-nav-stack.js +1 -1
  256. package/dist/wire-nav-stack.js.map +1 -1
  257. package/dist/wire-resizable-regions.js +1 -1
  258. package/dist/wire-scroll-dividers.js +1 -1
  259. package/dist/wire-sidebar.js +1 -1
  260. package/dist/wire-sidebar.js.map +1 -1
  261. package/dist/wire-tab-bars.js +1 -1
  262. package/dist/wire-tab-scaffold.js +1 -1
  263. package/dist/wire-tab-scaffold.js.map +1 -1
  264. package/dist/wire-token-search-fields.d.ts +1 -1
  265. package/dist/wire-token-search-fields.js +1 -1
  266. package/dist/wire-workbench.js +1 -1
  267. package/dist/workbench.d.ts +3 -3
  268. package/dist/workbench.js +1 -1
  269. package/docs/collapsible-panel.md +1 -1
  270. package/docs/component-contract.md +25 -7
  271. package/docs/component-selection.md +18 -4
  272. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  273. package/docs/design/templates/empty-state/filtered.svg +1 -1
  274. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  275. package/docs/design/templates/empty-state/with-action.svg +1 -1
  276. package/docs/design/templates/empty-state-dark.svg +1 -1
  277. package/docs/design/templates/empty-state.svg +1 -1
  278. package/docs/design/templates/list/stack-dark.svg +1 -1
  279. package/docs/design/templates/list/stack.svg +1 -1
  280. package/docs/design/templates/list-dark.svg +1 -1
  281. package/docs/design/templates/list-header/action-dark.svg +1 -1
  282. package/docs/design/templates/list-header/action.svg +1 -1
  283. package/docs/design/templates/list-header/count-dark.svg +1 -1
  284. package/docs/design/templates/list-header/count.svg +1 -1
  285. package/docs/design/templates/list-header/inline-action-dark.svg +1 -1
  286. package/docs/design/templates/list-header/inline-action.svg +1 -1
  287. package/docs/design/templates/list-header/size-l-dark.svg +1 -1
  288. package/docs/design/templates/list-header/size-l.svg +1 -1
  289. package/docs/design/templates/list-header/size-m-dark.svg +1 -1
  290. package/docs/design/templates/list-header/size-m.svg +1 -1
  291. package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
  292. package/docs/design/templates/list-header/size-xl.svg +1 -1
  293. package/docs/design/templates/list-header/size-xs-dark.svg +1 -1
  294. package/docs/design/templates/list-header/size-xs.svg +1 -1
  295. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  296. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  297. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  298. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  299. package/docs/design/templates/list-header-dark.svg +1 -1
  300. package/docs/design/templates/list-header.svg +1 -1
  301. package/docs/design/templates/list.svg +1 -1
  302. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  303. package/docs/design/templates/segmented-control/equal.svg +1 -1
  304. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
  305. package/docs/design/templates/segmented-control/pill-small.svg +1 -1
  306. package/docs/design/templates/segmented-control-dark.svg +1 -1
  307. package/docs/design/templates/segmented-control.svg +1 -1
  308. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  309. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  310. package/docs/design/templates/tab-bar-dark.svg +1 -1
  311. package/docs/design/templates/tab-bar.svg +1 -1
  312. package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
  313. package/docs/design/templates/token-search-field/empty.svg +1 -1
  314. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
  315. package/docs/design/templates/token-search-field/tokens.svg +1 -1
  316. package/docs/design/templates/token-search-field-dark.svg +1 -1
  317. package/docs/design/templates/token-search-field.svg +1 -1
  318. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  319. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  320. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  321. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  322. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  323. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  324. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  325. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  326. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  327. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  328. package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
  329. package/docs/design/templates/toolbar-control-group.svg +1 -1
  330. package/docs/design/templates/toolbar-dark.svg +1 -1
  331. package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
  332. package/docs/design/templates/toolbar-text/default.svg +1 -1
  333. package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
  334. package/docs/design/templates/toolbar-text/large.svg +1 -1
  335. package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
  336. package/docs/design/templates/toolbar-text/small.svg +1 -1
  337. package/docs/design/templates/toolbar-text-dark.svg +1 -1
  338. package/docs/design/templates/toolbar-text.svg +1 -1
  339. package/docs/design/templates/toolbar.svg +1 -1
  340. package/docs/design/templates/value-table/details-dark.svg +1 -1
  341. package/docs/design/templates/value-table/details.svg +1 -1
  342. package/docs/design/templates/value-table-dark.svg +1 -1
  343. package/docs/design/templates/value-table.svg +1 -1
  344. package/docs/document-baseline.md +4 -0
  345. package/docs/layout.md +11 -5
  346. package/docs/sunken-panel.md +7 -7
  347. package/docs/ui-analyzer.md +12 -1
  348. package/docs/ui-doctor.md +12 -2
  349. package/docs/webawesome-theme.md +29 -59
  350. package/doctor/index.mjs +39 -30
  351. package/llms.txt +18 -1
  352. package/package.json +3 -2
  353. package/dist/chunk-3BYFWTP3.js.map +0 -1
  354. package/dist/chunk-4FEVHE7C.js.map +0 -1
  355. package/dist/chunk-4NG4Y2Q6.js.map +0 -1
  356. package/dist/chunk-4SQK27MR.js.map +0 -1
  357. package/dist/chunk-5I7QGQVT.js.map +0 -1
  358. package/dist/chunk-5TTZPGUY.js.map +0 -1
  359. package/dist/chunk-5UGLKFBF.js.map +0 -1
  360. package/dist/chunk-6DFDTWGG.js.map +0 -1
  361. package/dist/chunk-ALGYHYXP.js.map +0 -1
  362. package/dist/chunk-AYUHMAI6.js.map +0 -1
  363. package/dist/chunk-BFPBS5Y4.js.map +0 -1
  364. package/dist/chunk-DA3HS64I.js.map +0 -1
  365. package/dist/chunk-DG6G5EPF.js.map +0 -1
  366. package/dist/chunk-DPAUKNB6.js.map +0 -1
  367. package/dist/chunk-DUBUXJA3.js.map +0 -1
  368. package/dist/chunk-EHIMH4J7.js.map +0 -1
  369. package/dist/chunk-FKPKGP2H.js.map +0 -1
  370. package/dist/chunk-GRHJQWV2.js.map +0 -1
  371. package/dist/chunk-HKVJ5MW3.js.map +0 -1
  372. package/dist/chunk-HXTAPIHQ.js.map +0 -1
  373. package/dist/chunk-I3Q7KKYM.js.map +0 -1
  374. package/dist/chunk-JA4J7Y4C.js.map +0 -1
  375. package/dist/chunk-JGIV6ZDA.js.map +0 -1
  376. package/dist/chunk-K47P7QZC.js.map +0 -1
  377. package/dist/chunk-LHSUPNSE.js.map +0 -1
  378. package/dist/chunk-NCSWXG7G.js.map +0 -1
  379. package/dist/chunk-NN6GYOA2.js.map +0 -1
  380. package/dist/chunk-NPNSKX3K.js.map +0 -1
  381. package/dist/chunk-O5GM2JAM.js.map +0 -1
  382. package/dist/chunk-OXO2QJWV.js.map +0 -1
  383. package/dist/chunk-OYQIONQF.js.map +0 -1
  384. package/dist/chunk-PL26TKNK.js.map +0 -1
  385. package/dist/chunk-PSHUSWQH.js.map +0 -1
  386. package/dist/chunk-RFGW735Q.js.map +0 -1
  387. package/dist/chunk-RGS4WX2M.js.map +0 -1
  388. package/dist/chunk-SLWCCHNP.js.map +0 -1
  389. package/dist/chunk-SMZGAPCU.js.map +0 -1
  390. package/dist/chunk-SRSJO5QE.js.map +0 -1
  391. package/dist/chunk-SVLDRGPJ.js.map +0 -1
  392. package/dist/chunk-SX7FJXPJ.js.map +0 -1
  393. package/dist/chunk-TCXDZNCX.js.map +0 -1
  394. package/dist/chunk-TDN5EE3S.js.map +0 -1
  395. package/dist/chunk-TOICTHR2.js.map +0 -1
  396. package/dist/chunk-V4GAQ74C.js.map +0 -1
  397. package/dist/chunk-V4WLBOVJ.js.map +0 -1
  398. package/dist/chunk-VA5TN5PR.js.map +0 -1
  399. package/dist/chunk-WF75U3V4.js.map +0 -1
  400. package/dist/chunk-X5QSICJ3.js.map +0 -1
  401. package/dist/chunk-YDGNU2OD.js.map +0 -1
  402. package/dist/chunk-ZLKZFKLW.js.map +0 -1
  403. package/dist/{panel-toolbar-DDKh4uKd.d.ts → panel-toolbar-CL9tYOkh.d.ts} +1 -1
  404. package/dist/{types-BuHELdXR.d.ts → types-C9BubXfz.d.ts} +1 -1
@@ -0,0 +1,285 @@
1
+ /* An icon-only trigger's accessible name: Web Awesome names its button from the
2
+ slotted content, so the label is present but visually hidden. */
3
+ .kui-popup-menu__label {
4
+ position: absolute;
5
+ width: 1px;
6
+ height: 1px;
7
+ padding: 0;
8
+ overflow: hidden;
9
+ clip: rect(0, 0, 0, 0);
10
+ white-space: nowrap;
11
+ clip-path: inset(50%);
12
+ }
13
+
14
+ /* PopupMenu shares the Select's caret motion, surface inset, row rhythm,
15
+ current-row fill, and group titles from the popup-choice contract in
16
+ foundation.css. Only checkbox items reserve a check column. */
17
+
18
+ /* The trigger caret turns to face the open menu, like the Select's. */
19
+ .kui-popup-menu > wa-button::part(caret) {
20
+ rotate: 0deg;
21
+ transition: var(--_kui-popup-caret-transition);
22
+ }
23
+ .kui-popup-menu[open] > wa-button::part(caret) {
24
+ rotate: var(--_kui-popup-caret-open-rotation);
25
+ }
26
+
27
+ /* The Select's popup fades in place; Web Awesome's dropdown also scales from
28
+ 90%. Holding the scale leaves the shared fade. */
29
+ .kui-popup-menu::part(menu) {
30
+ padding: var(--_kui-popup-inset);
31
+ gap: var(--_kui-popup-row-gap);
32
+ scale: none !important;
33
+ }
34
+
35
+ .kui-popup-menu wa-dropdown-item {
36
+ /* A plain command starts at the checkbox glyph's leading edge. The glyph
37
+ sits half a smaller-font em beyond the row's base inset; its label starts
38
+ after the full check column below. */
39
+ padding: var(--_kui-popup-row-padding-block)
40
+ var(--_kui-popup-row-padding-inline-end) var(--_kui-popup-row-padding-block)
41
+ calc(var(--_kui-popup-row-padding-inline-start) + 0.4375em);
42
+ }
43
+ .kui-popup-menu wa-dropdown-item[type="checkbox"] {
44
+ /* Web Awesome marks every sibling checkbox-adjacent; reserve this column
45
+ only on items whose checked state was explicitly supplied. */
46
+ padding-inline-start: calc(
47
+ var(--_kui-popup-row-padding-inline-start) +
48
+ var(--_kui-popup-row-check-width)
49
+ );
50
+ }
51
+ /* Web Awesome's nested submenu owns its item host padding. Move its exposed
52
+ checkmark inside the panel and leave room for the label beside it. */
53
+ .kui-popup-menu
54
+ wa-dropdown-item[slot="submenu"][type="checkbox"]::part(checkmark) {
55
+ margin-inline-start: 0;
56
+ }
57
+ .kui-popup-menu wa-dropdown-item[slot="submenu"][type="checkbox"]::part(label) {
58
+ padding-inline-start: 1em;
59
+ }
60
+ .kui-popup-menu wa-dropdown-item::part(label) {
61
+ padding-block: var(--_kui-popup-row-label-padding-block);
62
+ line-height: var(--_kui-popup-row-label-line-height);
63
+ }
64
+ /* A keyboard-focused item is the menu's current row: the Select's brand fill,
65
+ with no second focus ring inside the open popup. */
66
+ .kui-popup-menu wa-dropdown-item:focus-visible {
67
+ outline: none;
68
+ color: var(--_kui-popup-row-current-color);
69
+ background-color: var(--_kui-popup-row-current-background);
70
+ }
71
+ .kui-popup-menu > wa-divider,
72
+ .kui-popup-menu wa-divider[slot="submenu"] {
73
+ --spacing: 0.5em;
74
+ }
75
+
76
+ /* Center the icon on the label's line, like the Select's start slot. */
77
+ .kui-popup-menu wa-dropdown-item::part(icon) {
78
+ display: flex;
79
+ align-self: center;
80
+ }
81
+ .kui-popup-menu__icon {
82
+ display: inline-flex;
83
+ width: var(--_kui-popup-row-icon-size);
84
+ height: var(--_kui-popup-row-icon-size);
85
+ flex: none;
86
+ /* Web Awesome spaces a slotted item icon 0.75em from its label (an
87
+ !important shadow rule). Sizing that em makes the gap the Select's. */
88
+ font-size: calc(var(--_kui-popup-row-icon-gap) / 0.75);
89
+ }
90
+ .kui-popup-menu__icon svg {
91
+ display: block;
92
+ width: 100%;
93
+ height: 100%;
94
+ }
95
+
96
+ .kui-popup-menu__details {
97
+ display: inline-flex;
98
+ align-items: center;
99
+ }
100
+
101
+ .kui-popup-menu__details svg {
102
+ display: block;
103
+ width: var(--_kui-popup-row-icon-size);
104
+ height: var(--_kui-popup-row-icon-size);
105
+ }
106
+
107
+ .kui-popup-menu[data-trigger="context"] {
108
+ display: inline-block;
109
+ width: 0;
110
+ height: 0;
111
+ }
112
+
113
+ .kui-popup-menu__context-anchor {
114
+ position: fixed;
115
+ top: var(--kui-popup-menu-context-y, 0px);
116
+ left: var(--kui-popup-menu-context-x, 0px);
117
+ width: 1px;
118
+ height: 1px;
119
+ padding: 0;
120
+ border: 0;
121
+ opacity: 0;
122
+ pointer-events: none;
123
+ }
124
+
125
+ /* A group title matches the Select's group title. It is a styled element
126
+ rather than a slotted heading, whose Web Awesome metrics are !important. */
127
+ .kui-popup-menu__heading {
128
+ padding: var(--_kui-popup-group-title-padding);
129
+ color: var(--kui-color-neutral-on-quiet);
130
+ font-size: var(--kui-font-2xs);
131
+ font-weight: var(--_kui-popup-group-title-font-weight);
132
+ letter-spacing: 0.04em;
133
+ text-transform: uppercase;
134
+ }
135
+
136
+ /* In a ToolbarControlGroup a PopupMenu sizes itself in the group's context:
137
+ the group lays out its own native and raw Web Awesome children and names a
138
+ PopupMenu only to key its own state on it. The trigger takes the group's
139
+ control height (40px, or 32px in a compact group). A mixed-content trigger
140
+ in a nested-dropdown group grows for its label plus the caret; a fixed 32px
141
+ base would center both outside its host, painting the label across the
142
+ separator and the caret beyond the group border. */
143
+ /* The trigger button takes the group's control metrics, as the group's own
144
+ raw wa-button children do (toolbar-control-group.css excludes this
145
+ trigger). The PopupMenu ancestor sits in `:where()` so each rule keeps the
146
+ specificity of the group's matching raw-child rule and resolves against the
147
+ group's attribute-keyed variants exactly as they do. */
148
+ .kui-toolbar-control-group :where(wa-dropdown.kui-popup-menu) > wa-button {
149
+ --wa-form-control-height: 2.5rem;
150
+ display: inline-flex;
151
+ line-height: 0;
152
+ align-items: center;
153
+ justify-content: center;
154
+ --wa-color-fill-quiet: transparent;
155
+ }
156
+ .kui-toolbar-control-group[data-size="compact"]
157
+ :where(wa-dropdown.kui-popup-menu)
158
+ > wa-button {
159
+ --wa-form-control-height: 2rem;
160
+ }
161
+ .kui-toolbar-control-group[data-content="mixed"]
162
+ :where(wa-dropdown.kui-popup-menu)
163
+ > wa-button {
164
+ line-height: normal;
165
+ }
166
+ .kui-toolbar-control-group
167
+ :where(wa-dropdown.kui-popup-menu)
168
+ > wa-button
169
+ > svg {
170
+ display: block;
171
+ width: 1rem;
172
+ height: 1rem;
173
+ }
174
+ /* Toolbar controls never wrap: a slotted icon and its label share one row. */
175
+ .kui-toolbar-control-group
176
+ :where(wa-dropdown.kui-popup-menu)
177
+ > wa-button::part(label) {
178
+ display: inline-flex;
179
+ align-items: center;
180
+ gap: var(--kui-space-xs);
181
+ white-space: nowrap;
182
+ }
183
+ /* At least a circle around an icon-only trigger, with the group's item radius;
184
+ hover lifts the trigger like a group button, except in a `single` group,
185
+ whose whole surface shows the hover (toolbar-control-group.css). */
186
+ .kui-toolbar-control-group
187
+ :where(wa-dropdown.kui-popup-menu)
188
+ > wa-button::part(base) {
189
+ min-width: 2.5rem;
190
+ min-height: 2.5rem;
191
+ box-sizing: border-box;
192
+ border: 1px solid transparent;
193
+ border-radius: var(
194
+ --kui-toolbar-item-radius,
195
+ var(--kui-layout-pill-radius, calc(1px + 1.3125rem))
196
+ );
197
+ }
198
+ .kui-toolbar-control-group
199
+ :where(wa-dropdown.kui-popup-menu)
200
+ > wa-button:hover::part(base) {
201
+ border-color: var(--kui-toolbar-control-border);
202
+ background-color: var(--kui-toolbar-control-hover-background);
203
+ }
204
+ .kui-toolbar-control-group[data-single="true"]
205
+ :where(wa-dropdown.kui-popup-menu)
206
+ > wa-button:hover::part(base) {
207
+ border-color: transparent;
208
+ background: transparent;
209
+ }
210
+ .kui-toolbar-control-group > wa-dropdown.kui-popup-menu {
211
+ display: inline-flex;
212
+ flex: 0 0 auto;
213
+ }
214
+ .kui-toolbar-control-group > wa-dropdown.kui-popup-menu,
215
+ .kui-toolbar-control-group > wa-dropdown.kui-popup-menu > wa-button,
216
+ .kui-toolbar-control-group
217
+ > wa-dropdown.kui-popup-menu
218
+ > wa-button::part(base) {
219
+ min-width: 2.5rem;
220
+ height: 2.5rem;
221
+ }
222
+ .kui-toolbar-control-group[data-size="compact"] > wa-dropdown.kui-popup-menu,
223
+ .kui-toolbar-control-group[data-size="compact"]
224
+ > wa-dropdown.kui-popup-menu
225
+ > wa-button,
226
+ .kui-toolbar-control-group[data-size="compact"]
227
+ > wa-dropdown.kui-popup-menu
228
+ > wa-button::part(base),
229
+ .kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
230
+ wa-dropdown.kui-popup-menu
231
+ wa-button,
232
+ .kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
233
+ wa-dropdown.kui-popup-menu
234
+ wa-button::part(base) {
235
+ min-width: 2rem;
236
+ height: 2rem;
237
+ min-height: 2rem;
238
+ }
239
+ .kui-toolbar-control-group[data-size="compact"][data-content="mixed"]
240
+ > wa-dropdown.kui-popup-menu {
241
+ margin: -2px;
242
+ }
243
+ .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
244
+ > wa-dropdown.kui-popup-menu
245
+ > wa-button,
246
+ .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
247
+ > wa-dropdown.kui-popup-menu
248
+ > wa-button::part(base) {
249
+ min-width: max-content;
250
+ }
251
+ .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
252
+ > wa-dropdown.kui-popup-menu
253
+ > wa-button::part(base) {
254
+ width: max-content;
255
+ }
256
+ .kui-toolbar-control-group[data-single="true"]
257
+ > wa-dropdown.kui-popup-menu
258
+ > wa-button::part(base) {
259
+ width: max-content;
260
+ }
261
+
262
+ /* The menu insets a composing parent asks for. A PopupMenu applies them to
263
+ itself; its default is the Select listbox inset above, which a
264
+ ToolbarControlGroup's `standard` inset keeps. A PopupSurface's inset follows
265
+ the group's, so a surface wins when both apply. */
266
+ .kui-toolbar-control-group[data-menu-inset="compact"]
267
+ wa-dropdown.kui-popup-menu::part(menu) {
268
+ padding: 0.25rem;
269
+ }
270
+ .kui-toolbar-control-group[data-menu-inset="list-zero"]
271
+ wa-dropdown.kui-popup-menu::part(menu) {
272
+ padding: 0;
273
+ }
274
+ .kui-popup-surface[data-inset="standard"]
275
+ > wa-dropdown.kui-popup-menu::part(menu) {
276
+ padding: var(--kui-wa-surface-inset, 0.5rem);
277
+ }
278
+ .kui-popup-surface[data-inset="compact"]
279
+ > wa-dropdown.kui-popup-menu::part(menu) {
280
+ padding: 0.25rem;
281
+ }
282
+ .kui-popup-surface[data-inset="list-zero"]
283
+ > wa-dropdown.kui-popup-menu::part(menu) {
284
+ padding: 0;
285
+ }
@@ -0,0 +1,392 @@
1
+ .kui-toolbar {
2
+ display: grid;
3
+ width: 100%;
4
+ /* min-height and padding: see the safe-area rules below. */
5
+ box-sizing: border-box;
6
+ color: var(--kui-color-text);
7
+ background: transparent;
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;
13
+ align-items: start;
14
+ gap: var(--kui-toolbar-gap, 0.5rem);
15
+ container: kui-toolbar / inline-size;
16
+ font-family: var(--kui-font-sans);
17
+ }
18
+
19
+ /* Safe areas: a toolbar compensates only for the inline edges its owner hands
20
+ it through `--kui-edge-inset-inline-*` (a Pane header or footer does), so its
21
+ box and dividers keep reaching the edge while its zones clear the unsafe
22
+ area. Unset means none: a toolbar embedded in content never pads for the
23
+ device. An app bar or bottom bar at a screen edge claims its sides with
24
+ `safeAreaEdges`; each claimed side pads by the routed edge context, or the
25
+ full device inset when nothing routes it (the Pane rule), so the top bar of
26
+ a shell clears the status area. A Pane header or footer clears the context
27
+ for its children, so a claimed side there never double-insets. Its zones
28
+ then see a cleared context. */
29
+ .kui-toolbar {
30
+ --_kui-toolbar-safe-block-start: 0px;
31
+ --_kui-toolbar-safe-block-end: 0px;
32
+ --_kui-toolbar-safe-inline-start: var(--kui-edge-inset-inline-start, 0px);
33
+ --_kui-toolbar-safe-inline-end: var(--kui-edge-inset-inline-end, 0px);
34
+ /* The minimum height grows by any claimed block inset, so a toolbar a flex
35
+ column shrinks still keeps a whole control row clear of the unsafe area. */
36
+ min-height: calc(
37
+ var(--kui-toolbar-group-size, calc(2px + 2.625rem)) +
38
+ (2 * var(--kui-toolbar-inset, var(--kui-toolbar-gap, 0.5rem))) +
39
+ var(--_kui-toolbar-safe-block-start) + var(--_kui-toolbar-safe-block-end)
40
+ );
41
+ padding-block: calc(
42
+ var(--kui-toolbar-inset, var(--kui-toolbar-gap, 0.5rem)) +
43
+ var(--_kui-toolbar-safe-block-start)
44
+ )
45
+ calc(
46
+ var(--kui-toolbar-inset, var(--kui-toolbar-gap, 0.5rem)) +
47
+ var(--_kui-toolbar-safe-block-end)
48
+ );
49
+ padding-inline: calc(
50
+ var(--kui-toolbar-inset, var(--kui-toolbar-gap, 0.5rem)) +
51
+ var(--_kui-toolbar-safe-inline-start)
52
+ )
53
+ calc(
54
+ var(--kui-toolbar-inset, var(--kui-toolbar-gap, 0.5rem)) +
55
+ var(--_kui-toolbar-safe-inline-end)
56
+ );
57
+ }
58
+
59
+ .kui-toolbar[data-safe-area-block-start="true"] {
60
+ --_kui-toolbar-safe-block-start: var(
61
+ --kui-edge-inset-block-start,
62
+ var(--kui-safe-area-block-start, env(safe-area-inset-top, 0px))
63
+ );
64
+ }
65
+
66
+ .kui-toolbar[data-safe-area-block-end="true"] {
67
+ --_kui-toolbar-safe-block-end: var(
68
+ --kui-edge-inset-block-end,
69
+ var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
70
+ );
71
+ }
72
+
73
+ .kui-toolbar[data-safe-area-inline-start="true"] {
74
+ --_kui-toolbar-safe-inline-start: var(
75
+ --kui-edge-inset-inline-start,
76
+ var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
77
+ );
78
+ }
79
+
80
+ .kui-toolbar[data-safe-area-inline-end="true"] {
81
+ --_kui-toolbar-safe-inline-end: var(
82
+ --kui-edge-inset-inline-end,
83
+ var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
84
+ );
85
+ }
86
+
87
+ .kui-toolbar > * {
88
+ --kui-edge-inset-block-start: 0px;
89
+ --kui-edge-inset-block-end: 0px;
90
+ --kui-edge-inset-inline-start: 0px;
91
+ --kui-edge-inset-inline-end: 0px;
92
+ }
93
+
94
+ .kui-toolbar[data-has-center="false"] {
95
+ grid-template-columns: minmax(0, 1fr) auto;
96
+ }
97
+
98
+ /* Equal side tracks center the middle zone on the toolbar's content box even
99
+ when one side has no controls. Side content still shrinks or wraps within
100
+ its own track, and responsive policies below may move a zone to a new row. */
101
+ .kui-toolbar[data-center-align="balanced"][data-has-center="true"] {
102
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
103
+ }
104
+
105
+ .kui-toolbar[data-responsive="trailing-priority"][data-has-center="false"]:has(
106
+ > .kui-toolbar__trailing [data-expanded="true"]
107
+ ) {
108
+ grid-template-columns:
109
+ minmax(0, 1fr)
110
+ minmax(0, var(--kui-token-search-expanded-width, 30rem));
111
+ }
112
+
113
+ .kui-toolbar {
114
+ --_kui-toolbar-divider-top: transparent;
115
+ --_kui-toolbar-divider-right: transparent;
116
+ --_kui-toolbar-divider-bottom: transparent;
117
+ --_kui-toolbar-divider-left: transparent;
118
+ box-shadow:
119
+ inset 0 1px var(--_kui-toolbar-divider-top),
120
+ inset -1px 0 var(--_kui-toolbar-divider-right),
121
+ inset 0 -1px var(--_kui-toolbar-divider-bottom),
122
+ inset 1px 0 var(--_kui-toolbar-divider-left);
123
+ }
124
+
125
+ .kui-toolbar:is([divider-sides*="t"], [data-scroll-divider*="t"]) {
126
+ --_kui-toolbar-divider-top: var(
127
+ --kui-toolbar-divider-color,
128
+ var(--kui-color-neutral-border-normal)
129
+ );
130
+ }
131
+
132
+ .kui-toolbar:is([divider-sides*="r"], [data-scroll-divider*="r"]) {
133
+ --_kui-toolbar-divider-right: var(
134
+ --kui-toolbar-divider-color,
135
+ var(--kui-color-neutral-border-normal)
136
+ );
137
+ }
138
+
139
+ .kui-toolbar:is([divider-sides*="b"], [data-scroll-divider*="b"]) {
140
+ --_kui-toolbar-divider-bottom: var(
141
+ --kui-toolbar-divider-color,
142
+ var(--kui-color-neutral-border-normal)
143
+ );
144
+ }
145
+
146
+ .kui-toolbar:is([divider-sides*="l"], [data-scroll-divider*="l"]) {
147
+ --_kui-toolbar-divider-left: var(
148
+ --kui-toolbar-divider-color,
149
+ var(--kui-color-neutral-border-normal)
150
+ );
151
+ }
152
+
153
+ /* The control band. Every zone reserves one group-height row at the top of
154
+ the toolbar, and each item is centered in that band by its own size, not by
155
+ its siblings: a group or title shorter than the band takes half the
156
+ difference as a top margin, and anything taller (a wrapped title, a
157
+ multi-line search, a second trailing row) starts at the band's top and grows
158
+ down. A growing item therefore never moves the other items or its own top.
159
+ Centering the zones in the toolbar row instead dropped every control to the
160
+ middle of a two-line title. The band is resolved here, on the toolbar, so a
161
+ compact group's own smaller group size never redefines it.
162
+ `--_kui-toolbar-band` is context the toolbar provides: a ToolbarControlGroup
163
+ and a ToolbarText each center themselves in it from their own stylesheets
164
+ (toolbar-control-group.css, toolbar-text.css). A direct primary wa-button in
165
+ trailing is centered here without altering its Web Awesome chrome. */
166
+ .kui-toolbar {
167
+ --_kui-toolbar-band: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
168
+ }
169
+
170
+ .kui-toolbar__leading,
171
+ .kui-toolbar__center,
172
+ .kui-toolbar__trailing {
173
+ display: flex;
174
+ min-width: 0;
175
+ min-height: var(--_kui-toolbar-band);
176
+ padding-inline: var(--kui-toolbar-zone-padding-inline, 0px);
177
+ box-sizing: border-box;
178
+ align-items: flex-start;
179
+ gap: var(--kui-toolbar-gap, 0.5rem);
180
+ }
181
+
182
+ /* Pin each zone to its column so a display:none (empty) leading or center zone
183
+ doesn't let the trailing zone auto-place into the first column — which left an
184
+ extra gap + empty track to the trailing zone's right (KF-5BEF2M). The trailing
185
+ zone anchors to the last column via -2/-1, so it stays flush right for both
186
+ the 3- and 2-column layouts, and still stacks under the leading zone when a
187
+ consumer collapses the toolbar to a single column. */
188
+ .kui-toolbar__leading {
189
+ min-width: var(--kui-toolbar-leading-min-width, 0px);
190
+ padding-inline: var(
191
+ --kui-toolbar-leading-padding-inline,
192
+ var(--kui-toolbar-zone-padding-inline, 0px)
193
+ );
194
+ grid-column: 1;
195
+ /* Keep a shrinking title clipped while letting the 3px focus outline plus
196
+ its 1px offset paint past the zone edge. `hidden` cropped the ring of the
197
+ first control in this zone. */
198
+ overflow: clip;
199
+ overflow-clip-margin: 4px;
200
+ }
201
+
202
+ .kui-toolbar__center {
203
+ /* The center content never compresses below its own width (a group cannot
204
+ shrink or clip its controls). The track above takes this as its minimum, so
205
+ the leading identity gives way first, the way a platform toolbar truncates
206
+ its title before it overlaps the centered controls. */
207
+ min-width: min-content;
208
+ padding-inline: var(
209
+ --kui-toolbar-center-padding-inline,
210
+ var(--kui-toolbar-zone-padding-inline, 0px)
211
+ );
212
+ justify-content: center;
213
+ grid-column: 2;
214
+ }
215
+
216
+ .kui-toolbar[data-center-align="stretch"] > .kui-toolbar__center {
217
+ justify-content: flex-start;
218
+ }
219
+
220
+ .kui-toolbar[data-center-align="stretch"] > .kui-toolbar__center > * {
221
+ width: 100%;
222
+ flex-basis: 100%;
223
+ }
224
+
225
+ .kui-toolbar__trailing {
226
+ padding-inline: var(
227
+ --kui-toolbar-trailing-padding-inline,
228
+ var(--kui-toolbar-zone-padding-inline, 0px)
229
+ );
230
+ justify-content: var(--kui-toolbar-trailing-justify, flex-end);
231
+ justify-self: var(--kui-toolbar-trailing-justify-self, stretch);
232
+ grid-column: -2 / -1;
233
+ gap: var(--kui-toolbar-trailing-gap, var(--kui-toolbar-gap, 0.5rem));
234
+ /* Trailing actions never clip (KF-4EYES0): the zone wraps its groups, so its
235
+ track can shrink only to the widest single group. When one row cannot hold
236
+ every group, the next group moves to a new trailing-aligned row instead of
237
+ overflowing the toolbar. */
238
+ flex-wrap: wrap;
239
+ }
240
+
241
+ .kui-toolbar__trailing > wa-button {
242
+ margin-block-start: max(
243
+ 0px,
244
+ calc((var(--_kui-toolbar-band) - var(--wa-form-control-height)) / 2)
245
+ );
246
+ flex: 0 0 auto;
247
+ }
248
+
249
+ /* An expanded trailing search gets a complete second row while the leading
250
+ identity and optional center controls remain in the first. The query styles
251
+ descendants because a toolbar cannot query its own container width. */
252
+ @container kui-toolbar (max-width: 52rem) {
253
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="narrow"][data-has-center="false"]:has(
254
+ > .kui-toolbar__trailing [data-expanded="true"]
255
+ )
256
+ > .kui-toolbar__leading {
257
+ grid-column: 1 / -1;
258
+ grid-row: 1;
259
+ }
260
+
261
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="narrow"]:has(
262
+ > .kui-toolbar__trailing [data-expanded="true"]
263
+ )
264
+ > .kui-toolbar__trailing {
265
+ width: 100%;
266
+ grid-column: 1 / -1;
267
+ grid-row: 2;
268
+ justify-self: stretch;
269
+ }
270
+
271
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="narrow"]
272
+ > .kui-toolbar__trailing
273
+ > [data-expanded="true"] {
274
+ width: 100%;
275
+ flex: 1 1 100%;
276
+ }
277
+ }
278
+
279
+ @container kui-toolbar (max-width: 44rem) {
280
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="compact"][data-has-center="false"]:has(
281
+ > .kui-toolbar__trailing [data-expanded="true"]
282
+ )
283
+ > .kui-toolbar__leading {
284
+ grid-column: 1 / -1;
285
+ grid-row: 1;
286
+ }
287
+
288
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="compact"]:has(
289
+ > .kui-toolbar__trailing [data-expanded="true"]
290
+ )
291
+ > .kui-toolbar__trailing {
292
+ width: 100%;
293
+ grid-column: 1 / -1;
294
+ grid-row: 2;
295
+ justify-self: stretch;
296
+ }
297
+
298
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="compact"]
299
+ > .kui-toolbar__trailing
300
+ > [data-expanded="true"] {
301
+ width: 100%;
302
+ flex: 1 1 100%;
303
+ }
304
+ }
305
+
306
+ /* Content-driven wrap: one row while every zone fits at its natural width;
307
+ otherwise the trailing zone moves below the identity, still trailing-aligned,
308
+ instead of truncating the leading title or clipping an action. For panel,
309
+ inspector, and dialog headings whose identity must stay whole. */
310
+ .kui-toolbar[data-responsive="wrap"] {
311
+ display: flex;
312
+ flex-wrap: wrap;
313
+ }
314
+
315
+ .kui-toolbar[data-responsive="wrap"] > .kui-toolbar__leading {
316
+ max-width: 100%;
317
+ flex: 1 1 auto;
318
+ }
319
+
320
+ .kui-toolbar[data-responsive="wrap"] > .kui-toolbar__center {
321
+ flex: 1 1 auto;
322
+ }
323
+
324
+ .kui-toolbar[data-responsive="wrap"] > .kui-toolbar__trailing {
325
+ max-width: 100%;
326
+ flex: 0 1 auto;
327
+ margin-inline-start: auto;
328
+ }
329
+
330
+ .kui-toolbar[data-has-center="false"] .kui-toolbar__center,
331
+ .kui-toolbar__leading:empty,
332
+ .kui-toolbar__trailing:empty {
333
+ display: none;
334
+ }
335
+
336
+ /* Stacked topology. A container query only matches an ancestor container, so
337
+ these rules style the zones (whose query container is this toolbar) rather
338
+ than the toolbar's own grid template, which a self query can never reach.
339
+ Each zone spans every column track, one zone per row, so no empty track or
340
+ column gap narrows a stacked zone. Stacked control zones wrap at group
341
+ granularity (KF-4EYES0: a stacked trailing zone clipped its last action at
342
+ phone widths), so every group stays whole, reachable, and full size; the
343
+ leading identity keeps its single-line truncation. */
344
+ @container kui-toolbar (max-width: 52rem) {
345
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="narrow"]
346
+ > :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing) {
347
+ width: 100%;
348
+ grid-column: 1 / -1;
349
+ justify-content: flex-start;
350
+ }
351
+
352
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="narrow"]
353
+ > :is(.kui-toolbar__center, .kui-toolbar__trailing) {
354
+ flex-wrap: wrap;
355
+ }
356
+ }
357
+
358
+ @container kui-toolbar (max-width: 44rem) {
359
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="compact"]
360
+ > :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing) {
361
+ width: 100%;
362
+ grid-column: 1 / -1;
363
+ justify-content: flex-start;
364
+ }
365
+
366
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="compact"]
367
+ > :is(.kui-toolbar__center, .kui-toolbar__trailing) {
368
+ flex-wrap: wrap;
369
+ }
370
+ }
371
+
372
+ /* Center priority. As with the stacked topology, the toolbar cannot query its
373
+ own width, so these rules style the zones: while the center holds an expanded
374
+ control, the leading and trailing zones leave and the center spans every
375
+ column track (including the gaps the vacated tracks still own), taking the
376
+ whole row. */
377
+ @container kui-toolbar (max-width: 42rem) {
378
+ .kui-toolbar[data-responsive="center-priority"]:has(
379
+ > .kui-toolbar__center [data-expanded="true"]
380
+ )
381
+ > .kui-toolbar__center {
382
+ width: 100%;
383
+ grid-column: 1 / -1;
384
+ }
385
+
386
+ .kui-toolbar[data-responsive="center-priority"]:has(
387
+ > .kui-toolbar__center [data-expanded="true"]
388
+ )
389
+ > :is(.kui-toolbar__leading, .kui-toolbar__trailing) {
390
+ display: none;
391
+ }
392
+ }