@kerfjs/ui 5.0.0-beta.95 → 5.0.0-beta.97

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 (385) hide show
  1. package/README.md +95 -55
  2. package/ai/component-catalog.json +1330 -94
  3. package/ai/component-composition-rules.json +11 -0
  4. package/ai/component-composition.d.ts +3 -0
  5. package/ai/component-composition.json +955 -23
  6. package/ai/component-composition.schema.json +4 -0
  7. package/ai/components/README.md +12 -0
  8. package/ai/components/badge.md +6 -2
  9. package/ai/components/choice-chips.md +80 -0
  10. package/ai/components/column-track.md +78 -0
  11. package/ai/components/combobox.md +88 -0
  12. package/ai/components/content-item.md +2 -0
  13. package/ai/components/content-swap.md +78 -0
  14. package/ai/components/corner-status.md +88 -0
  15. package/ai/components/document-baseline.md +3 -1
  16. package/ai/components/edge-activity-indicator.md +81 -0
  17. package/ai/components/file-picker.md +88 -0
  18. package/ai/components/foundation.md +1 -1
  19. package/ai/components/framed-list.md +80 -0
  20. package/ai/components/grid.md +2 -1
  21. package/ai/components/icon-button.md +82 -0
  22. package/ai/components/icon-toggle-button.md +80 -0
  23. package/ai/components/list-action-row.md +20 -7
  24. package/ai/components/list-item.md +17 -7
  25. package/ai/components/list.md +5 -2
  26. package/ai/components/nav-stack.md +2 -1
  27. package/ai/components/popup-menu.md +2 -2
  28. package/ai/components/row.md +1 -1
  29. package/ai/components/select.md +2 -1
  30. package/ai/components/split-button.md +80 -0
  31. package/ai/components/split-view.md +1 -1
  32. package/ai/components/state-banner.md +4 -2
  33. package/ai/components/summary-row.md +85 -0
  34. package/ai/components/sunken-panel.md +1 -1
  35. package/ai/components/surface-scaffold.md +8 -2
  36. package/ai/components/text.md +3 -0
  37. package/ai/components/toolbar-control-group.md +4 -2
  38. package/ai/components/toolbar-text.md +1 -0
  39. package/ai/components/toolbar.md +1 -0
  40. package/ai/components/value-table.md +9 -2
  41. package/ai/components/wa-button-group.md +2 -1
  42. package/ai/components/wa-button.md +5 -1
  43. package/ai/public-api-signatures-v1.md +1063 -52
  44. package/ai/skill.md +55 -53
  45. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  46. package/dist/anchored-surface.d.ts +13 -2
  47. package/dist/anchored-surface.js +1 -1
  48. package/dist/app-tab.js +1 -1
  49. package/dist/badge.d.ts +31 -2
  50. package/dist/badge.js +2 -1
  51. package/dist/browser/choice-chips.js +3 -0
  52. package/dist/browser/column-track.js +3 -0
  53. package/dist/browser/combobox.js +3 -0
  54. package/dist/browser/content-swap.js +3 -0
  55. package/dist/browser/corner-status.js +3 -0
  56. package/dist/browser/edge-activity-indicator.js +3 -0
  57. package/dist/browser/file-picker.js +3 -0
  58. package/dist/browser/framed-list.js +3 -0
  59. package/dist/browser/icon-button.js +4 -0
  60. package/dist/browser/icon-toggle-button.js +4 -0
  61. package/dist/browser/list-action-row.js +1 -0
  62. package/dist/browser/split-button.js +5 -0
  63. package/dist/browser/summary-row.js +3 -0
  64. package/dist/catalog-resources.d.ts +1 -0
  65. package/dist/catalog.d.ts +1 -0
  66. package/dist/catalog.js +16 -13
  67. package/dist/catalog.js.map +1 -1
  68. package/dist/chip.d.ts +1 -0
  69. package/dist/choice-chips.d.ts +58 -0
  70. package/dist/choice-chips.js +3 -0
  71. package/dist/choice-chips.js.map +1 -0
  72. package/dist/chunk-2MSPNRWJ.js +82 -0
  73. package/dist/chunk-2MSPNRWJ.js.map +1 -0
  74. package/dist/{chunk-3PO7JEK7.js → chunk-36TL6BCR.js} +18 -4
  75. package/dist/chunk-36TL6BCR.js.map +1 -0
  76. package/dist/{chunk-MORVLMDG.js → chunk-44A6LP54.js} +3 -3
  77. package/dist/chunk-44A6LP54.js.map +1 -0
  78. package/dist/{chunk-7QQ3HE47.js → chunk-4LOK4634.js} +7 -3
  79. package/dist/chunk-4LOK4634.js.map +1 -0
  80. package/dist/chunk-4UB5Z3ZZ.js +68 -0
  81. package/dist/chunk-4UB5Z3ZZ.js.map +1 -0
  82. package/dist/{chunk-PGL6TXFW.js → chunk-6BRRUPJY.js} +6 -2
  83. package/dist/chunk-6BRRUPJY.js.map +1 -0
  84. package/dist/{chunk-KAJVVN7Q.js → chunk-6NOLL5KG.js} +2 -2
  85. package/dist/{chunk-KAJVVN7Q.js.map → chunk-6NOLL5KG.js.map} +1 -1
  86. package/dist/{chunk-IOS2NXW7.js → chunk-76PWEN5Y.js} +13 -2
  87. package/dist/chunk-76PWEN5Y.js.map +1 -0
  88. package/dist/{chunk-B3TROLC2.js → chunk-7IUEBNCO.js} +7 -3
  89. package/dist/chunk-7IUEBNCO.js.map +1 -0
  90. package/dist/{chunk-75YOTZ25.js → chunk-AYHC62OZ.js} +10 -6
  91. package/dist/chunk-AYHC62OZ.js.map +1 -0
  92. package/dist/{chunk-RZYQFGMM.js → chunk-BBU2SPRE.js} +4 -4
  93. package/dist/{chunk-RZYQFGMM.js.map → chunk-BBU2SPRE.js.map} +1 -1
  94. package/dist/{chunk-QCLLBMLA.js → chunk-BU23Z5HZ.js} +37 -12
  95. package/dist/chunk-BU23Z5HZ.js.map +1 -0
  96. package/dist/{chunk-BYHGRKC3.js → chunk-CMLPFIC5.js} +3 -1
  97. package/dist/chunk-CMLPFIC5.js.map +1 -0
  98. package/dist/{chunk-3XPGJUUQ.js → chunk-D5RGM3XA.js} +3 -2
  99. package/dist/chunk-D5RGM3XA.js.map +1 -0
  100. package/dist/chunk-EIET4QLK.js +51 -0
  101. package/dist/chunk-EIET4QLK.js.map +1 -0
  102. package/dist/chunk-ETCWQLJV.js +85 -0
  103. package/dist/chunk-ETCWQLJV.js.map +1 -0
  104. package/dist/chunk-FDZNYD4C.js +138 -0
  105. package/dist/chunk-FDZNYD4C.js.map +1 -0
  106. package/dist/{chunk-XKZPBRU7.js → chunk-FOQK4F3L.js} +25 -5
  107. package/dist/chunk-FOQK4F3L.js.map +1 -0
  108. package/dist/{chunk-FL6J644M.js → chunk-GJYQ27C2.js} +4 -2
  109. package/dist/chunk-GJYQ27C2.js.map +1 -0
  110. package/dist/{chunk-DL55BSQX.js → chunk-GZE2XVKC.js} +8 -1
  111. package/dist/chunk-GZE2XVKC.js.map +1 -0
  112. package/dist/{chunk-YP2G67S7.js → chunk-HO6FU3G7.js} +2 -2
  113. package/dist/{chunk-YP2G67S7.js.map → chunk-HO6FU3G7.js.map} +1 -1
  114. package/dist/{chunk-3DXHNLME.js → chunk-IGTWXPTN.js} +25 -8
  115. package/dist/chunk-IGTWXPTN.js.map +1 -0
  116. package/dist/chunk-IKS72C6P.js +53 -0
  117. package/dist/chunk-IKS72C6P.js.map +1 -0
  118. package/dist/chunk-JYD7G4RG.js +130 -0
  119. package/dist/chunk-JYD7G4RG.js.map +1 -0
  120. package/dist/{chunk-LAZLBC2Q.js → chunk-KH4KEMSP.js} +33 -2
  121. package/dist/chunk-KH4KEMSP.js.map +1 -0
  122. package/dist/chunk-LL45C7BB.js +122 -0
  123. package/dist/chunk-LL45C7BB.js.map +1 -0
  124. package/dist/chunk-M2NRCFRO.js +45 -0
  125. package/dist/chunk-M2NRCFRO.js.map +1 -0
  126. package/dist/chunk-MJ5RU6XT.js +173 -0
  127. package/dist/chunk-MJ5RU6XT.js.map +1 -0
  128. package/dist/{chunk-GIUOXAVL.js → chunk-P74VXMB6.js} +39 -19
  129. package/dist/chunk-P74VXMB6.js.map +1 -0
  130. package/dist/{chunk-TKDDTLG5.js → chunk-PBT3CPPY.js} +31 -3
  131. package/dist/chunk-PBT3CPPY.js.map +1 -0
  132. package/dist/chunk-PRG4CL3Q.js +88 -0
  133. package/dist/chunk-PRG4CL3Q.js.map +1 -0
  134. package/dist/chunk-QH5KOFNS.js +39 -0
  135. package/dist/chunk-QH5KOFNS.js.map +1 -0
  136. package/dist/{chunk-CD5TOO22.js → chunk-QIAPOWHH.js} +2 -2
  137. package/dist/{chunk-CD5TOO22.js.map → chunk-QIAPOWHH.js.map} +1 -1
  138. package/dist/chunk-QQ3TTWFH.js +29 -0
  139. package/dist/chunk-QQ3TTWFH.js.map +1 -0
  140. package/dist/chunk-QYMJHS4K.js +36 -0
  141. package/dist/chunk-QYMJHS4K.js.map +1 -0
  142. package/dist/chunk-R42D2BAO.js +44 -0
  143. package/dist/chunk-R42D2BAO.js.map +1 -0
  144. package/dist/chunk-S2XULQEK.js +52 -0
  145. package/dist/chunk-S2XULQEK.js.map +1 -0
  146. package/dist/{chunk-NMWDHZVM.js → chunk-S4Y3YTAI.js} +2 -2
  147. package/dist/{chunk-NMWDHZVM.js.map → chunk-S4Y3YTAI.js.map} +1 -1
  148. package/dist/{chunk-O27D24CA.js → chunk-TDMHA7C3.js} +3 -2
  149. package/dist/chunk-TDMHA7C3.js.map +1 -0
  150. package/dist/chunk-U6QYTMDB.js +85 -0
  151. package/dist/chunk-U6QYTMDB.js.map +1 -0
  152. package/dist/{chunk-QQICWWNX.js → chunk-V6W56V3N.js} +18 -7
  153. package/dist/chunk-V6W56V3N.js.map +1 -0
  154. package/dist/chunk-W4IK7AWD.js +73 -0
  155. package/dist/chunk-W4IK7AWD.js.map +1 -0
  156. package/dist/{chunk-TNG3XKHB.js → chunk-Y3LC7JQO.js} +26 -8
  157. package/dist/chunk-Y3LC7JQO.js.map +1 -0
  158. package/dist/chunk-YWQGSUF2.js +84 -0
  159. package/dist/chunk-YWQGSUF2.js.map +1 -0
  160. package/dist/{chunk-MTCTX25G.js → chunk-YXOMI7ES.js} +1 -1
  161. package/dist/chunk-YXOMI7ES.js.map +1 -0
  162. package/dist/chunk-ZKKO4MHC.js +25 -0
  163. package/dist/chunk-ZKKO4MHC.js.map +1 -0
  164. package/dist/collapsible-panel.d.ts +10 -3
  165. package/dist/collapsible-panel.js +8 -5
  166. package/dist/collapsible-panel.js.map +1 -1
  167. package/dist/column-track.d.ts +41 -0
  168. package/dist/column-track.js +4 -0
  169. package/dist/column-track.js.map +1 -0
  170. package/dist/combobox.d.ts +40 -0
  171. package/dist/combobox.js +3 -0
  172. package/dist/combobox.js.map +1 -0
  173. package/dist/content-item.d.ts +21 -4
  174. package/dist/content-item.js +1 -1
  175. package/dist/content-swap.d.ts +34 -0
  176. package/dist/content-swap.js +3 -0
  177. package/dist/content-swap.js.map +1 -0
  178. package/dist/corner-status.d.ts +36 -0
  179. package/dist/corner-status.js +3 -0
  180. package/dist/corner-status.js.map +1 -0
  181. package/dist/edge-activity-indicator.d.ts +28 -0
  182. package/dist/edge-activity-indicator.js +3 -0
  183. package/dist/edge-activity-indicator.js.map +1 -0
  184. package/dist/extension-attributes-mu8MFUl0.d.ts +13 -0
  185. package/dist/file-picker.d.ts +47 -0
  186. package/dist/file-picker.js +3 -0
  187. package/dist/file-picker.js.map +1 -0
  188. package/dist/framed-list.d.ts +47 -0
  189. package/dist/framed-list.js +4 -0
  190. package/dist/framed-list.js.map +1 -0
  191. package/dist/grid.js +1 -1
  192. package/dist/help-tags-register.js +1 -1
  193. package/dist/icon-button.d.ts +46 -0
  194. package/dist/icon-button.js +6 -0
  195. package/dist/icon-button.js.map +1 -0
  196. package/dist/icon-toggle-button.d.ts +42 -0
  197. package/dist/icon-toggle-button.js +6 -0
  198. package/dist/icon-toggle-button.js.map +1 -0
  199. package/dist/index.d.ts +23 -6
  200. package/dist/index.js +44 -27
  201. package/dist/list-action-row.d.ts +47 -10
  202. package/dist/list-action-row.js +2 -1
  203. package/dist/list-header.js +1 -1
  204. package/dist/list-inset-text.js +1 -1
  205. package/dist/list-item.d.ts +10 -2
  206. package/dist/list-item.js +1 -1
  207. package/dist/list.d.ts +37 -5
  208. package/dist/list.js +1 -1
  209. package/dist/nav-stack.d.ts +1 -0
  210. package/dist/nav-stack.js +2 -1
  211. package/dist/pane.js +2 -1
  212. package/dist/popup-menu-register.js +18 -1
  213. package/dist/popup-menu-register.js.map +1 -1
  214. package/dist/popup-menu.d.ts +28 -3
  215. package/dist/popup-menu.js +1 -1
  216. package/dist/row.d.ts +6 -2
  217. package/dist/row.js +1 -1
  218. package/dist/select-register.js +1 -1
  219. package/dist/select.js +2 -1
  220. package/dist/split-button.d.ts +57 -0
  221. package/dist/split-button.js +7 -0
  222. package/dist/split-button.js.map +1 -0
  223. package/dist/split-view.d.ts +20 -2
  224. package/dist/split-view.js +22 -1
  225. package/dist/split-view.js.map +1 -1
  226. package/dist/state-banner.d.ts +17 -2
  227. package/dist/state-banner.js +2 -1
  228. package/dist/styles/badge.css +27 -0
  229. package/dist/styles/catalog/components/catalog-example.css +7 -3
  230. package/dist/styles/choice-chips.css +154 -0
  231. package/dist/styles/column-track.css +57 -0
  232. package/dist/styles/combobox.css +113 -0
  233. package/dist/styles/components/actions/icon-button/icon-button.css +22 -0
  234. package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +83 -0
  235. package/dist/styles/components/actions/popup-menu/popup-menu.css +69 -1
  236. package/dist/styles/components/actions/split-button/split-button.css +95 -0
  237. package/dist/styles/components/actions/toolbar/toolbar.css +16 -9
  238. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +152 -48
  239. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +23 -0
  240. package/dist/styles/components/collections/framed-list/framed-list.css +47 -0
  241. package/dist/styles/components/collections/list/list.css +44 -0
  242. package/dist/styles/components/collections/list-action-row/list-action-row.css +53 -0
  243. package/dist/styles/components/collections/list-item/list-item.css +59 -0
  244. package/dist/styles/components/collections/summary-row/summary-row.css +161 -0
  245. package/dist/styles/components/data-display/value-table/value-table.css +76 -0
  246. package/dist/styles/components/feedback/badge/badge.css +27 -0
  247. package/dist/styles/components/feedback/corner-status/corner-status.css +60 -0
  248. package/dist/styles/components/feedback/edge-activity-indicator/edge-activity-indicator.css +127 -0
  249. package/dist/styles/components/feedback/state-banner/state-banner.css +38 -0
  250. package/dist/styles/components/forms/choice-chips/choice-chips.css +154 -0
  251. package/dist/styles/components/forms/combobox/combobox.css +113 -0
  252. package/dist/styles/components/forms/file-picker/file-picker.css +81 -0
  253. package/dist/styles/components/forms/token-search-field/token-search-field.css +30 -1
  254. package/dist/styles/components/layout/column-track/column-track.css +57 -0
  255. package/dist/styles/components/layout/content-swap/content-swap.css +154 -0
  256. package/dist/styles/components/layout/pane/pane.css +2 -8
  257. package/dist/styles/components/layout/workbench/workbench.css +2 -8
  258. package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +1 -4
  259. package/dist/styles/components/surfaces/content-item/content-item.css +18 -0
  260. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +1 -4
  261. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +119 -0
  262. package/dist/styles/components/typography/text/text.css +62 -0
  263. package/dist/styles/content-item.css +18 -0
  264. package/dist/styles/content-swap.css +154 -0
  265. package/dist/styles/corner-status.css +60 -0
  266. package/dist/styles/document.css +65 -0
  267. package/dist/styles/edge-activity-indicator.css +127 -0
  268. package/dist/styles/file-picker.css +81 -0
  269. package/dist/styles/foundation.css +8 -0
  270. package/dist/styles/framed-list.css +47 -0
  271. package/dist/styles/icon-button.css +22 -0
  272. package/dist/styles/icon-toggle-button.css +83 -0
  273. package/dist/styles/list-action-row.css +53 -0
  274. package/dist/styles/list-item.css +59 -0
  275. package/dist/styles/list.css +44 -0
  276. package/dist/styles/pane.css +2 -8
  277. package/dist/styles/popup-menu.css +69 -1
  278. package/dist/styles/split-button.css +95 -0
  279. package/dist/styles/state-banner.css +38 -0
  280. package/dist/styles/styles.css +12 -0
  281. package/dist/styles/summary-row.css +161 -0
  282. package/dist/styles/sunken-panel.css +1 -4
  283. package/dist/styles/surface-scaffold.css +119 -0
  284. package/dist/styles/tab-navigator.css +1 -4
  285. package/dist/styles/text.css +62 -0
  286. package/dist/styles/token-search-field.css +30 -1
  287. package/dist/styles/toolbar-control-group.css +152 -48
  288. package/dist/styles/toolbar-text.css +23 -0
  289. package/dist/styles/toolbar.css +16 -9
  290. package/dist/styles/value-table.css +76 -0
  291. package/dist/styles/webawesome.css +4 -4
  292. package/dist/styles/workbench.css +2 -8
  293. package/dist/summary-row.d.ts +56 -0
  294. package/dist/summary-row.js +4 -0
  295. package/dist/summary-row.js.map +1 -0
  296. package/dist/sunken-panel.d.ts +8 -1
  297. package/dist/sunken-panel.js +2 -1
  298. package/dist/surface-scaffold-register.js +7 -1
  299. package/dist/surface-scaffold-register.js.map +1 -1
  300. package/dist/surface-scaffold.d.ts +75 -2
  301. package/dist/surface-scaffold.js +2 -1
  302. package/dist/tab-navigator.js +4 -1
  303. package/dist/tab-navigator.js.map +1 -1
  304. package/dist/text.d.ts +39 -4
  305. package/dist/text.js +1 -1
  306. package/dist/toolbar-control-group.d.ts +8 -1
  307. package/dist/toolbar-control-group.js +1 -1
  308. package/dist/toolbar-text.d.ts +14 -1
  309. package/dist/toolbar-text.js +1 -1
  310. package/dist/toolbar.d.ts +14 -3
  311. package/dist/toolbar.js +1 -1
  312. package/dist/value-table.d.ts +20 -2
  313. package/dist/value-table.js +1 -1
  314. package/dist/wire-catalog.d.ts +1 -0
  315. package/dist/wire-comboboxes.d.ts +26 -0
  316. package/dist/wire-comboboxes.js +3 -0
  317. package/dist/wire-comboboxes.js.map +1 -0
  318. package/dist/wire-corner-status.d.ts +11 -0
  319. package/dist/wire-corner-status.js +3 -0
  320. package/dist/wire-corner-status.js.map +1 -0
  321. package/dist/wire-file-pickers.d.ts +26 -0
  322. package/dist/wire-file-pickers.js +3 -0
  323. package/dist/wire-file-pickers.js.map +1 -0
  324. package/dist/wire-list-reorder.d.ts +41 -0
  325. package/dist/wire-list-reorder.js +3 -0
  326. package/dist/wire-list-reorder.js.map +1 -0
  327. package/dist/wire-token-search-fields.js +1 -1
  328. package/dist/workbench.d.ts +1 -0
  329. package/dist/workbench.js +2 -1
  330. package/docs/accessibility.md +45 -2
  331. package/docs/anchored-surface.md +15 -7
  332. package/docs/app-layouts.md +2 -1
  333. package/docs/component-contract.md +30 -6
  334. package/docs/component-selection.md +165 -13
  335. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -0
  336. package/docs/design/templates/choice-chips/color-palette.svg +1 -0
  337. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -0
  338. package/docs/design/templates/choice-chips/compact-icons.svg +1 -0
  339. package/docs/design/templates/choice-chips-dark.svg +1 -0
  340. package/docs/design/templates/choice-chips.svg +1 -0
  341. package/docs/design/templates/list-action-row/trailing-menu-dark.svg +1 -0
  342. package/docs/design/templates/list-action-row/trailing-menu.svg +1 -0
  343. package/docs/design/templates/list-action-row-dark.svg +1 -1
  344. package/docs/design/templates/list-action-row.svg +1 -1
  345. package/docs/design/templates/state-banner/strip-dark.svg +1 -0
  346. package/docs/design/templates/state-banner/strip.svg +1 -0
  347. package/docs/design/templates/state-banner-dark.svg +1 -1
  348. package/docs/design/templates/state-banner.svg +1 -1
  349. package/docs/design/templates.md +1 -1
  350. package/docs/document-baseline.md +51 -0
  351. package/docs/layout.md +52 -1
  352. package/docs/split-view.md +20 -2
  353. package/docs/sunken-panel.md +13 -0
  354. package/docs/surface-scaffold.md +66 -1
  355. package/docs/ux-demo.md +1 -0
  356. package/docs/webawesome-theme.md +6 -2
  357. package/llms.txt +138 -16
  358. package/package.json +89 -1
  359. package/dist/chunk-3DXHNLME.js.map +0 -1
  360. package/dist/chunk-3PO7JEK7.js.map +0 -1
  361. package/dist/chunk-3XPGJUUQ.js.map +0 -1
  362. package/dist/chunk-4Y4L5YEI.js +0 -66
  363. package/dist/chunk-4Y4L5YEI.js.map +0 -1
  364. package/dist/chunk-75YOTZ25.js.map +0 -1
  365. package/dist/chunk-7QQ3HE47.js.map +0 -1
  366. package/dist/chunk-A7DYEERU.js +0 -59
  367. package/dist/chunk-A7DYEERU.js.map +0 -1
  368. package/dist/chunk-B3TROLC2.js.map +0 -1
  369. package/dist/chunk-BYHGRKC3.js.map +0 -1
  370. package/dist/chunk-DL55BSQX.js.map +0 -1
  371. package/dist/chunk-FL6J644M.js.map +0 -1
  372. package/dist/chunk-GIUOXAVL.js.map +0 -1
  373. package/dist/chunk-IOS2NXW7.js.map +0 -1
  374. package/dist/chunk-J3AWE5I4.js +0 -50
  375. package/dist/chunk-J3AWE5I4.js.map +0 -1
  376. package/dist/chunk-LAZLBC2Q.js.map +0 -1
  377. package/dist/chunk-MORVLMDG.js.map +0 -1
  378. package/dist/chunk-MTCTX25G.js.map +0 -1
  379. package/dist/chunk-O27D24CA.js.map +0 -1
  380. package/dist/chunk-PGL6TXFW.js.map +0 -1
  381. package/dist/chunk-QCLLBMLA.js.map +0 -1
  382. package/dist/chunk-QQICWWNX.js.map +0 -1
  383. package/dist/chunk-TKDDTLG5.js.map +0 -1
  384. package/dist/chunk-TNG3XKHB.js.map +0 -1
  385. package/dist/chunk-XKZPBRU7.js.map +0 -1
@@ -173,6 +173,13 @@
173
173
  align-self: center;
174
174
  }
175
175
  .kui-toolbar-control-group[data-content="search"] {
176
+ /* The group owns the open/close width motion, and a collapsible search
177
+ inside follows it on every frame (no second, lagging width transition,
178
+ which left an empty band). For the length of the opening it also asks the
179
+ search to keep its query on one line, so the group's clip reveals the
180
+ query instead of re-wrapping it every frame (KF-CXQB30). */
181
+ --_kui-toolbar-group-search-width-duration: 0s;
182
+ --_kui-toolbar-group-search-reveal-duration: 0.25s;
176
183
  width: min(var(--kui-token-search-expanded-width, 30rem), 100%);
177
184
  max-width: 100%;
178
185
  height: auto;
@@ -215,10 +222,35 @@
215
222
 
216
223
  .kui-toolbar-control-group[data-sizing="grow"][data-expanded="true"] {
217
224
  --_kui-toolbar-group-grow-search-width: 100%;
225
+ /* The grown group's content-box width at its basis (basis minus the 1px
226
+ border and 1px padding on each side). A collapsible search lays its editor
227
+ out at least this wide while the group's flex size animates open, so the
228
+ clipped query is revealed rather than re-wrapped every frame (KF-50K0JM). */
229
+ --_kui-toolbar-group-grow-search-min-width: calc(
230
+ var(--kui-toolbar-group-grow-basis, 19rem) - 4px
231
+ );
218
232
  width: auto;
219
233
  min-width: var(--kui-toolbar-group-grow-basis, 19rem);
220
234
  flex: 1 1 var(--kui-toolbar-group-grow-basis, 19rem);
221
235
  }
236
+
237
+ /* A grow search animates its flex size, not `width`: an expanded grow group's
238
+ `width: auto` cannot interpolate, so it used to snap open while the search
239
+ inside animated, leaving an empty band (KF-50K0JM). The collapsed state names
240
+ a definite basis and minimum so all three flex lengths interpolate. */
241
+ .kui-toolbar-control-group[data-content="search"][data-sizing="grow"] {
242
+ /* The group's flex size owns this motion; its basis-wide minimum (above)
243
+ already keeps the query on one line. */
244
+ --_kui-toolbar-group-search-reveal-duration: 0s;
245
+ transition-property:
246
+ width, flex-basis, flex-grow, min-width, background-color, border-color;
247
+ transition-duration: 0.25s, 0.25s, 0.25s, 0.25s, 0.2s, 0.2s;
248
+ transition-timing-function: ease;
249
+ }
250
+ .kui-toolbar-control-group[data-content="search"][data-sizing="grow"][data-expanded="false"] {
251
+ min-width: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
252
+ flex: 0 0 var(--kui-toolbar-group-size, calc(2px + 2.625rem));
253
+ }
222
254
  .kui-toolbar-control-group[data-sizing="fill"] {
223
255
  width: 100%;
224
256
  min-width: 0;
@@ -256,15 +288,32 @@
256
288
 
257
289
  @container kui-toolbar (max-width: 30rem) {
258
290
  .kui-toolbar-control-group[data-sizing="grow"][data-expanded="true"] {
291
+ --_kui-toolbar-group-grow-search-min-width: 0px;
259
292
  width: 100%;
260
293
  min-width: 0;
261
294
  flex: 1 1 100%;
262
295
  }
296
+
297
+ /* Here the grown search takes its own line. Animating its basis would push
298
+ the trailing siblings and then jump the group to the next line mid-way, so
299
+ it opens and closes in one frame with the search filling it. */
300
+ .kui-toolbar-control-group[data-content="search"][data-sizing="grow"] {
301
+ transition-property: background-color, border-color;
302
+ transition-duration: 0.2s;
303
+ }
263
304
  }
264
305
  .kui-toolbar-control-group[data-content="text"]
265
- > :is(button, wa-button, .kui-toolbar-action-link),
306
+ > :is(
307
+ button,
308
+ wa-button:not(:where(.kui-icon-button)),
309
+ .kui-toolbar-action-link
310
+ ),
266
311
  .kui-toolbar-control-group[data-content="mixed"]
267
- > :is(button, wa-button, .kui-toolbar-action-link) {
312
+ > :is(
313
+ button,
314
+ wa-button:not(:where(.kui-icon-button)),
315
+ .kui-toolbar-action-link
316
+ ) {
268
317
  min-width: max-content;
269
318
  }
270
319
  .kui-toolbar-control-group[data-content="mixed"] > button {
@@ -272,14 +321,14 @@
272
321
  gap: var(--kui-space-xs);
273
322
  }
274
323
  .kui-toolbar-control-group[data-content="mixed"]
275
- wa-button:not(:where(.kui-popup-menu > *)) {
324
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button)) {
276
325
  line-height: normal;
277
326
  }
278
327
  /* Toolbar controls never wrap. Web Awesome's label part is a plain block, so a
279
328
  slotted icon (a block SVG) and its text would otherwise stack vertically —
280
329
  lay them out on one row the way native mixed buttons already are. */
281
330
  .kui-toolbar-control-group
282
- wa-button:not(:where(.kui-popup-menu > *))::part(label) {
331
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button))::part(label) {
283
332
  display: inline-flex;
284
333
  align-items: center;
285
334
  gap: var(--kui-space-xs);
@@ -335,11 +384,32 @@
335
384
  background: transparent;
336
385
  }
337
386
 
387
+ /* `selectedChrome="none"`: a pressed control paints like its unpressed
388
+ neighbors, for an icon-state toggle whose glyph already shows the state.
389
+ One button opts out alone with `data-selected-chrome="none"`. After the
390
+ tone and appearance rules above, so it wins over their selected fills. */
391
+ .kui-toolbar-control-group[data-selected-chrome="none"],
392
+ .kui-toolbar-control-group
393
+ > :is(
394
+ button,
395
+ wa-button:not(:where(.kui-icon-button))
396
+ )[data-selected-chrome="none"] {
397
+ --kui-toolbar-control-selected-shadow: none;
398
+ --kui-toolbar-control-selected-border: transparent;
399
+ --kui-toolbar-control-selected-background: transparent;
400
+ --kui-toolbar-control-selected-color: var(--kui-toolbar-control-color);
401
+ }
402
+
338
403
  /* The group lays out its own native and raw Web Awesome children. A composed
339
404
  PopupMenu (`wa-dropdown.kui-popup-menu`) or Select sizes itself in the
340
405
  group's context from its own stylesheet (popup-menu.css, select.css); the
341
406
  group names those children by class only to key its own state on them. */
342
- .kui-toolbar-control-group > :is(button, wa-button, .kui-toolbar-action-link),
407
+ .kui-toolbar-control-group
408
+ > :is(
409
+ button,
410
+ wa-button:not(:where(.kui-icon-button)),
411
+ .kui-toolbar-action-link
412
+ ),
343
413
  .kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu) {
344
414
  flex: 0 0 auto;
345
415
  }
@@ -366,12 +436,15 @@
366
436
  place-items: center;
367
437
  }
368
438
 
369
- .kui-toolbar-control-group > button:disabled {
439
+ /* A native button that is disabled, or kept focusable with aria-disabled,
440
+ dims and drops hover chrome. */
441
+ .kui-toolbar-control-group > button:is(:disabled, [aria-disabled="true"]) {
370
442
  opacity: 0.5;
371
443
  cursor: not-allowed;
372
444
  }
373
445
 
374
- .kui-toolbar-control-group > button:not(:disabled):hover {
446
+ .kui-toolbar-control-group
447
+ > button:not(:disabled, [aria-disabled="true"]):hover {
375
448
  border-color: var(--kui-toolbar-control-border);
376
449
  background: var(--kui-toolbar-control-hover-background);
377
450
  }
@@ -429,7 +502,9 @@
429
502
  }
430
503
 
431
504
  .kui-toolbar-control-group > button svg,
432
- .kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) > svg,
505
+ .kui-toolbar-control-group
506
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button))
507
+ > svg,
433
508
  .kui-toolbar-control-group > .kui-toolbar-action-link svg {
434
509
  display: block;
435
510
  width: 1rem;
@@ -441,40 +516,44 @@
441
516
  buttons: a composed PopupMenu's trigger (`.kui-popup-menu > wa-button`) is
442
517
  excluded inside a zero-specificity `:where()` and takes the same metrics
443
518
  from popup-menu.css. */
444
- .kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) {
519
+ .kui-toolbar-control-group
520
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button)) {
445
521
  --wa-form-control-height: 2.5rem;
446
522
  }
447
523
  .kui-toolbar-control-group[data-size="compact"]
448
- wa-button:not(:where(.kui-popup-menu > *)) {
524
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button)) {
449
525
  --wa-form-control-height: 2rem;
450
526
  }
451
527
 
452
- .kui-toolbar-control-group > wa-button,
528
+ .kui-toolbar-control-group > wa-button:not(:where(.kui-icon-button)),
453
529
  .kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu),
454
- .kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu) > wa-button,
455
530
  .kui-toolbar-control-group
456
531
  > wa-dropdown:not(.kui-popup-menu)
457
- > wa-button::part(base) {
532
+ > wa-button:not(:where(.kui-icon-button)),
533
+ .kui-toolbar-control-group
534
+ > wa-dropdown:not(.kui-popup-menu)
535
+ > wa-button:not(:where(.kui-icon-button))::part(base) {
458
536
  min-width: 2.5rem;
459
537
  height: 2.5rem;
460
538
  }
461
539
  .kui-toolbar-control-group[data-size="compact"] > button,
462
540
  .kui-toolbar-control-group[data-size="compact"] > .kui-toolbar-action-link,
463
- .kui-toolbar-control-group[data-size="compact"] > wa-button,
541
+ .kui-toolbar-control-group[data-size="compact"]
542
+ > wa-button:not(:where(.kui-icon-button)),
464
543
  .kui-toolbar-control-group[data-size="compact"]
465
544
  > wa-dropdown:not(.kui-popup-menu),
466
545
  .kui-toolbar-control-group[data-size="compact"]
467
546
  > wa-dropdown:not(.kui-popup-menu)
468
- > wa-button,
547
+ > wa-button:not(:where(.kui-icon-button)),
469
548
  .kui-toolbar-control-group[data-size="compact"]
470
549
  > wa-dropdown:not(.kui-popup-menu)
471
- > wa-button::part(base),
550
+ > wa-button:not(:where(.kui-icon-button))::part(base),
472
551
  .kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
473
552
  wa-dropdown:not(.kui-popup-menu)
474
- wa-button,
553
+ wa-button:not(:where(.kui-icon-button)),
475
554
  .kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
476
555
  wa-dropdown:not(.kui-popup-menu)
477
- wa-button::part(base) {
556
+ wa-button:not(:where(.kui-icon-button))::part(base) {
478
557
  min-width: 2rem;
479
558
  height: 2rem;
480
559
  min-height: 2rem;
@@ -523,7 +602,7 @@
523
602
  .kui-toolbar-control-group[data-size="compact"][data-content="mixed"]
524
603
  > wa-dropdown:not(.kui-popup-menu),
525
604
  .kui-toolbar-control-group[data-size="compact"][data-content="mixed"]
526
- > wa-button {
605
+ > wa-button:not(:where(.kui-icon-button)) {
527
606
  margin: -2px;
528
607
  }
529
608
 
@@ -533,25 +612,26 @@
533
612
  the separator and the caret beyond the group border. */
534
613
  .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
535
614
  > wa-dropdown:not(.kui-popup-menu)
536
- > wa-button,
615
+ > wa-button:not(:where(.kui-icon-button)),
537
616
  .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
538
617
  > wa-dropdown:not(.kui-popup-menu)
539
- > wa-button::part(base) {
618
+ > wa-button:not(:where(.kui-icon-button))::part(base) {
540
619
  min-width: max-content;
541
620
  }
542
621
  .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
543
622
  > wa-dropdown:not(.kui-popup-menu)
544
- > wa-button::part(base) {
623
+ > wa-button:not(:where(.kui-icon-button))::part(base) {
545
624
  width: max-content;
546
625
  }
547
626
 
548
627
  .kui-toolbar-control-group[data-single="true"]
549
628
  > wa-dropdown:not(.kui-popup-menu)
550
- > wa-button::part(base) {
629
+ > wa-button:not(:where(.kui-icon-button))::part(base) {
551
630
  width: max-content;
552
631
  }
553
632
 
554
- .kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) {
633
+ .kui-toolbar-control-group
634
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button)) {
555
635
  display: inline-flex;
556
636
  line-height: 0;
557
637
  align-items: center;
@@ -560,7 +640,7 @@
560
640
  }
561
641
 
562
642
  .kui-toolbar-control-group
563
- wa-button:not(:where(.kui-popup-menu > *))::part(base) {
643
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button))::part(base) {
564
644
  /* Match min-width to the 40px height so an icon-only button's highlight is at
565
645
  least a circle, not a vertical oval — the host is 40px wide but the base
566
646
  part was sizing to its ~32px content. Text/caret buttons grow past it. */
@@ -575,15 +655,18 @@
575
655
  }
576
656
 
577
657
  .kui-toolbar-control-group
578
- wa-button:not(:where(.kui-popup-menu > *)):hover::part(base) {
658
+ wa-button:not(
659
+ :where(.kui-popup-menu > *, .kui-icon-button),
660
+ [disabled]
661
+ ):hover::part(base) {
579
662
  border-color: var(--kui-toolbar-control-border);
580
663
  background-color: var(--kui-toolbar-control-hover-background);
581
664
  }
582
665
 
583
666
  .kui-toolbar-control-group[data-single="true"]:has(
584
667
  > :is(
585
- button:not(:disabled),
586
- wa-button,
668
+ button:not(:disabled, [aria-disabled="true"]),
669
+ wa-button:not([disabled]),
587
670
  .kui-popup-menu,
588
671
  wa-dropdown:not(.kui-popup-menu),
589
672
  .kui-select,
@@ -594,9 +677,16 @@
594
677
  }
595
678
 
596
679
  .kui-toolbar-control-group[data-single="true"]
597
- > :is(button, wa-button, .kui-toolbar-action-link):hover,
680
+ > :is(
681
+ button,
682
+ wa-button:not(:where(.kui-icon-button)),
683
+ .kui-toolbar-action-link
684
+ ):hover,
598
685
  .kui-toolbar-control-group[data-single="true"]
599
- wa-button:not(:where(.kui-popup-menu > *)):hover::part(base) {
686
+ wa-button:not(
687
+ :where(.kui-popup-menu > *, .kui-icon-button),
688
+ [disabled]
689
+ ):hover::part(base) {
600
690
  border-color: transparent;
601
691
  background: transparent;
602
692
  }
@@ -607,8 +697,8 @@
607
697
  Done action). */
608
698
  .kui-toolbar-control-group:not([data-single="true"]):has(
609
699
  > :is(
610
- button:not(:disabled),
611
- wa-button,
700
+ button:not(:disabled, [aria-disabled="true"]),
701
+ wa-button:not([disabled]),
612
702
  .kui-select,
613
703
  .kui-toolbar-action-link
614
704
  ):nth-child(1 of :where(:not([data-toolbar-visibility-state]))):where(
@@ -619,17 +709,25 @@
619
709
  }
620
710
 
621
711
  .kui-toolbar-control-group:not([data-single="true"]):has(
622
- > :is(button, wa-button, .kui-toolbar-action-link):nth-child(
623
- 1 of :where(:not([data-toolbar-visibility-state]))
624
- ):where(:nth-last-child(1 of :not([data-toolbar-visibility-state])))
712
+ > :is(
713
+ button,
714
+ wa-button:not(:where(.kui-icon-button)),
715
+ .kui-toolbar-action-link
716
+ ):nth-child(1 of :where(:not([data-toolbar-visibility-state]))):where(
717
+ :nth-last-child(1 of :not([data-toolbar-visibility-state]))
718
+ )
625
719
  )
626
- > :is(button, wa-button, .kui-toolbar-action-link):hover,
720
+ > :is(
721
+ button,
722
+ wa-button:not(:where(.kui-icon-button)),
723
+ .kui-toolbar-action-link
724
+ ):hover,
627
725
  .kui-toolbar-control-group:not([data-single="true"]):has(
628
- > :is(button, wa-button):nth-child(
726
+ > :is(button, wa-button:not(:where(.kui-icon-button))):nth-child(
629
727
  1 of :where(:not([data-toolbar-visibility-state]))
630
728
  ):where(:nth-last-child(1 of :not([data-toolbar-visibility-state])))
631
729
  )
632
- > wa-button:hover::part(base) {
730
+ > wa-button:not(:where(.kui-icon-button)):hover::part(base) {
633
731
  border-color: transparent;
634
732
  background: transparent;
635
733
  }
@@ -651,18 +749,22 @@
651
749
  and stays inside the group's border instead of overflowing it as an oversized
652
750
  square (KF-5BDDQ9). The selected text color rides on the host and inherits in. */
653
751
  .kui-toolbar-control-group[data-single="false"]
654
- > wa-button[aria-pressed="true"] {
752
+ > wa-button:not(:where(.kui-icon-button))[aria-pressed="true"] {
655
753
  color: var(--kui-toolbar-control-selected-color);
656
754
  }
657
755
  .kui-toolbar-control-group[data-single="false"]
658
- > wa-button[aria-pressed="true"]::part(base) {
756
+ > wa-button:not(:where(.kui-icon-button))[aria-pressed="true"]::part(base) {
659
757
  border-color: var(--kui-toolbar-control-selected-border);
660
758
  background: var(--kui-toolbar-control-selected-background);
661
759
  box-shadow: var(--kui-toolbar-control-selected-shadow);
662
760
  }
663
761
 
664
762
  .kui-toolbar-control-group
665
- > :is(button, wa-button, .kui-toolbar-action-link):focus-visible {
763
+ > :is(
764
+ button,
765
+ wa-button:not(:where(.kui-icon-button)),
766
+ .kui-toolbar-action-link
767
+ ):focus-visible {
666
768
  outline: var(--kui-focus-ring);
667
769
  outline-offset: 1px;
668
770
  }
@@ -743,12 +845,14 @@
743
845
  }
744
846
 
745
847
  .kui-toolbar-control-group[data-button-appearance="push"][data-single="true"]
746
- > :is(button, wa-button)[aria-pressed="true"] {
848
+ > :is(button, wa-button:not(:where(.kui-icon-button)))[aria-pressed="true"] {
747
849
  color: var(--kui-toolbar-control-pressed-color);
748
850
  }
749
851
 
750
852
  @media (prefers-reduced-motion: reduce) {
751
- .kui-toolbar-control-group[data-content="search"] {
853
+ .kui-toolbar-control-group[data-content="search"],
854
+ .kui-toolbar-control-group[data-content="search"][data-sizing="grow"] {
855
+ --_kui-toolbar-group-search-reveal-duration: 0s;
752
856
  transition-duration: 0s;
753
857
  }
754
858
 
@@ -785,18 +889,18 @@
785
889
  .kui-toolbar-control-group[data-content="avatar"]:is(
786
890
  [data-single="true"],
787
891
  :has(
788
- > :is(button, wa-button):nth-child(
892
+ > :is(button, wa-button:not(:where(.kui-icon-button))):nth-child(
789
893
  1 of :where(:not([data-toolbar-visibility-state]))
790
894
  ):where(:nth-last-child(1 of :not([data-toolbar-visibility-state])))
791
895
  )
792
896
  )
793
- > :is(button, wa-button) {
897
+ > :is(button, wa-button:not(:where(.kui-icon-button))) {
794
898
  color: transparent;
795
899
  }
796
900
 
797
901
  .kui-toolbar-control-group[data-content="avatar"][data-single="false"]:not(
798
902
  :has(
799
- > :is(button, wa-button):nth-child(
903
+ > :is(button, wa-button:not(:where(.kui-icon-button))):nth-child(
800
904
  1 of :where(:not([data-toolbar-visibility-state]))
801
905
  ):where(:nth-last-child(1 of :not([data-toolbar-visibility-state])))
802
906
  )
@@ -804,12 +908,12 @@
804
908
  > button[aria-pressed="true"],
805
909
  .kui-toolbar-control-group[data-content="avatar"][data-single="false"]:not(
806
910
  :has(
807
- > :is(button, wa-button):nth-child(
911
+ > :is(button, wa-button:not(:where(.kui-icon-button))):nth-child(
808
912
  1 of :where(:not([data-toolbar-visibility-state]))
809
913
  ):where(:nth-last-child(1 of :not([data-toolbar-visibility-state])))
810
914
  )
811
915
  )
812
- > wa-button[aria-pressed="true"]::part(base) {
916
+ > wa-button:not(:where(.kui-icon-button))[aria-pressed="true"]::part(base) {
813
917
  color: transparent;
814
918
  background-image: var(--kui-toolbar-avatar-image);
815
919
  background-origin: border-box;
@@ -49,6 +49,29 @@ button.kui-toolbar-text:focus-visible {
49
49
  padding-block: max(0px, calc((var(--_kui-toolbar-band) - 1.25em) / 2));
50
50
  }
51
51
 
52
+ /* A title with supporting copy stacks the two lines and centers them together
53
+ in the control band (growing past it only when they do not fit), so
54
+ trailing groups stay on the band and both lines start at the same edge. */
55
+ .kui-toolbar-text[data-has-description="true"] {
56
+ height: auto;
57
+ flex-direction: column;
58
+ align-items: stretch;
59
+ justify-content: center;
60
+ gap: 0.125rem;
61
+ }
62
+
63
+ .kui-toolbar-text__description {
64
+ min-width: 0;
65
+ overflow: hidden;
66
+ color: var(--kui-color-text-quiet);
67
+ font-size: var(--kui-font-xs);
68
+ font-weight: 400;
69
+ letter-spacing: normal;
70
+ line-height: 1.2;
71
+ text-overflow: ellipsis;
72
+ white-space: nowrap;
73
+ }
74
+
52
75
  /* A filling title grows into its row's free space and truncates there. */
53
76
  .kui-toolbar-text[data-fill="true"] {
54
77
  flex: 1 1 auto;
@@ -0,0 +1,47 @@
1
+ /* The same frame as ValueTable: content-item margin, a real 1px border, the
2
+ rounded radius, and a lowered (or base) fill. Rows clip to its corners. */
3
+ .kui-framed-list {
4
+ --kui-framed-list-border: var(--kui-color-neutral-border-normal);
5
+ display: flex;
6
+ flex-direction: column;
7
+ margin-block: 0;
8
+ margin-inline: var(--kui-layout-inline-margin, 0.5rem);
9
+ padding: 0;
10
+ overflow: hidden;
11
+ border: 1px solid var(--kui-framed-list-border);
12
+ border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
13
+ background: var(--kui-color-surface-lowered);
14
+ list-style: none;
15
+ }
16
+
17
+ .kui-framed-list[data-surface="base"] {
18
+ background: var(--kui-color-surface);
19
+ }
20
+
21
+ /* Each row owns the content inset and the 1px divider above it, inset to the
22
+ row's padding like ValueTable's separators. Its margin is reset because a
23
+ document or Web Awesome native stylesheet indents list items. */
24
+ .kui-framed-list__row {
25
+ --_kui-framed-list-row-padding: var(--kui-layout-item-padding, 0.5rem);
26
+ position: relative;
27
+ display: grid;
28
+ min-width: 0;
29
+ margin: 0;
30
+ min-height: 2.75rem;
31
+ padding: var(--_kui-framed-list-row-padding);
32
+ box-sizing: border-box;
33
+ align-items: center;
34
+ }
35
+
36
+ .kui-framed-list__row + .kui-framed-list__row::before {
37
+ position: absolute;
38
+ top: 0;
39
+ right: var(--_kui-framed-list-row-padding);
40
+ left: var(--_kui-framed-list-row-padding);
41
+ border-top: 1px solid var(--kui-framed-list-border);
42
+ content: "";
43
+ }
44
+
45
+ .kui-framed-list__row[data-highlighted="true"] {
46
+ background: var(--kui-color-brand-fill-quiet);
47
+ }
@@ -81,6 +81,22 @@
81
81
  );
82
82
  }
83
83
 
84
+ /* `inset="document"`: a reading inset on all four sides that replaces any
85
+ side-selected text or control inset. */
86
+ .kui-list[data-inset="document"] {
87
+ --_kui-list-inset-top: var(--kui-space-l);
88
+ --_kui-list-inset-right: var(--kui-space-xl);
89
+ --_kui-list-inset-bottom: var(--kui-space-l);
90
+ --_kui-list-inset-left: var(--kui-space-xl);
91
+ }
92
+
93
+ @media (max-width: 36rem) {
94
+ .kui-list[data-inset="document"] {
95
+ --_kui-list-inset-right: var(--kui-space-m);
96
+ --_kui-list-inset-left: var(--kui-space-m);
97
+ }
98
+ }
99
+
84
100
  .kui-list[data-h-align="left"] {
85
101
  align-items: flex-start;
86
102
  align-content: flex-start;
@@ -113,6 +129,25 @@
113
129
  overscroll-behavior-y: contain;
114
130
  }
115
131
 
132
+ /* A scrollable List owns the overflow, so its rows keep their natural height
133
+ and scroll rather than shrink. Items that clip their own overflow (a
134
+ ListItem) have a zero automatic minimum height, so the default
135
+ `flex-shrink: 1` compressed multiline rows into one another once the List
136
+ was bounded by a max-height ancestor. */
137
+ .kui-list[data-scrollable="true"] > * {
138
+ flex-shrink: 0;
139
+ }
140
+
141
+ /* A scrollable List is a keyboard-focusable scroller: Chromium focuses it on
142
+ Tab when it holds no focusable rows, and a dialog may pick it as its first
143
+ focusable area. Its ring sits inside its box, so a rounded or clipping
144
+ parent cannot cut it off, and rounds with the standard control radius. */
145
+ .kui-list[data-scrollable="true"]:focus-visible {
146
+ border-radius: var(--kui-radius-m);
147
+ outline: var(--kui-focus-ring);
148
+ outline-offset: -3px;
149
+ }
150
+
116
151
  .kui-list:is([divider-sides*="t"], [data-scroll-divider*="t"]) {
117
152
  --_kui-list-divider-top: var(--kui-list-divider-color);
118
153
  }
@@ -129,6 +164,15 @@
129
164
  --_kui-list-divider-left: var(--kui-list-divider-color);
130
165
  }
131
166
 
167
+ /* `surface`: a solid background behind the stack and its insets. */
168
+ .kui-list[data-surface="base"] {
169
+ background: var(--kui-color-surface);
170
+ }
171
+
172
+ .kui-list[data-surface="raised"] {
173
+ background: var(--kui-color-surface-raised);
174
+ }
175
+
132
176
  /* `fill`: the layout root of a definite-height parent (an app root or a
133
177
  fixed-height frame) takes its full height. Inside a flex layout use `flex`. */
134
178
  .kui-list[data-fill="true"] {
@@ -46,6 +46,20 @@
46
46
  border-end-end-radius: 0;
47
47
  }
48
48
 
49
+ /* In a divided list, a corner is flat wherever its edge carries a divider
50
+ line, whichever row draws it (see ListItem). */
51
+ :is([data-divider="after"], [data-divider="both"]) + .kui-list-action-row {
52
+ border-start-start-radius: 0;
53
+ border-start-end-radius: 0;
54
+ }
55
+
56
+ .kui-list-action-row:has(
57
+ + :is([data-divider="before"], [data-divider="both"])
58
+ ) {
59
+ border-end-start-radius: 0;
60
+ border-end-end-radius: 0;
61
+ }
62
+
49
63
  .kui-list-action-row:not([data-placeholder="true"]):has(
50
64
  .kui-list-action-row__primary:hover
51
65
  ) {
@@ -68,6 +82,40 @@
68
82
  outline-offset: 1px;
69
83
  }
70
84
 
85
+ /* Reorder presentation. A dragged row dims; the row under the pointer draws
86
+ a brand insertion line along the block edge the dragged rows would land
87
+ beside, inset to the row's content padding so it ends clear of the
88
+ rounded corners. */
89
+ .kui-list-action-row[data-dragging="true"] {
90
+ opacity: var(--kui-list-action-row-dragging-opacity, 0.55);
91
+ }
92
+
93
+ .kui-list-action-row[data-drop-position] {
94
+ position: relative;
95
+ }
96
+
97
+ .kui-list-action-row[data-drop-position]::after {
98
+ position: absolute;
99
+ z-index: 1;
100
+ inset-inline: var(--kui-layout-item-padding, 0.5rem);
101
+ height: var(--kui-list-action-row-drop-indicator-width, 2px);
102
+ border-radius: var(--kui-radius-pill);
103
+ background: var(
104
+ --kui-list-action-row-drop-indicator,
105
+ var(--kui-color-brand-border-loud)
106
+ );
107
+ content: "";
108
+ pointer-events: none;
109
+ }
110
+
111
+ .kui-list-action-row[data-drop-position="before"]::after {
112
+ inset-block-start: 0;
113
+ }
114
+
115
+ .kui-list-action-row[data-drop-position="after"]::after {
116
+ inset-block-end: 0;
117
+ }
118
+
71
119
  .kui-list-action-row__primary,
72
120
  .kui-list-action-row__trailing-action {
73
121
  height: auto !important;
@@ -244,6 +292,11 @@
244
292
  }
245
293
 
246
294
  @media (forced-colors: active) {
295
+ .kui-list-action-row[data-drop-position]::after {
296
+ background: Highlight;
297
+ forced-color-adjust: none;
298
+ }
299
+
247
300
  .kui-list-action-row {
248
301
  --kui-list-action-row-border: ButtonText;
249
302
  outline: 1px solid ButtonText;