@kerfjs/ui 5.0.0-beta.94 → 5.0.0-beta.96

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 (388) hide show
  1. package/README.md +99 -57
  2. package/ai/component-catalog.json +1328 -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 +19 -7
  24. package/ai/components/list-item.md +16 -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 +57 -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 +144 -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 +39 -0
  243. package/dist/styles/components/collections/list-item/list-item.css +45 -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 +12 -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 +39 -0
  274. package/dist/styles/list-item.css +45 -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 +12 -1
  287. package/dist/styles/toolbar-control-group.css +144 -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/catalog.md +41 -0
  334. package/docs/component-contract.md +26 -6
  335. package/docs/component-selection.md +149 -13
  336. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -0
  337. package/docs/design/templates/choice-chips/color-palette.svg +1 -0
  338. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -0
  339. package/docs/design/templates/choice-chips/compact-icons.svg +1 -0
  340. package/docs/design/templates/choice-chips-dark.svg +1 -0
  341. package/docs/design/templates/choice-chips.svg +1 -0
  342. package/docs/design/templates/list-action-row/trailing-menu-dark.svg +1 -0
  343. package/docs/design/templates/list-action-row/trailing-menu.svg +1 -0
  344. package/docs/design/templates/list-action-row-dark.svg +1 -1
  345. package/docs/design/templates/list-action-row.svg +1 -1
  346. package/docs/design/templates/state-banner/strip-dark.svg +1 -0
  347. package/docs/design/templates/state-banner/strip.svg +1 -0
  348. package/docs/design/templates/state-banner-dark.svg +1 -1
  349. package/docs/design/templates/state-banner.svg +1 -1
  350. package/docs/design/templates.md +1 -1
  351. package/docs/document-baseline.md +51 -0
  352. package/docs/layout.md +52 -1
  353. package/docs/split-view.md +20 -2
  354. package/docs/sunken-panel.md +13 -0
  355. package/docs/surface-scaffold.md +66 -1
  356. package/docs/ux-demo.md +1 -0
  357. package/docs/webawesome-theme.md +6 -2
  358. package/llms.txt +125 -16
  359. package/package.json +89 -1
  360. package/vite-ux-review.d.mts +39 -0
  361. package/vite-ux-review.mjs +75 -20
  362. package/dist/chunk-3DXHNLME.js.map +0 -1
  363. package/dist/chunk-3PO7JEK7.js.map +0 -1
  364. package/dist/chunk-3XPGJUUQ.js.map +0 -1
  365. package/dist/chunk-4Y4L5YEI.js +0 -66
  366. package/dist/chunk-4Y4L5YEI.js.map +0 -1
  367. package/dist/chunk-75YOTZ25.js.map +0 -1
  368. package/dist/chunk-7QQ3HE47.js.map +0 -1
  369. package/dist/chunk-A7DYEERU.js +0 -59
  370. package/dist/chunk-A7DYEERU.js.map +0 -1
  371. package/dist/chunk-B3TROLC2.js.map +0 -1
  372. package/dist/chunk-BYHGRKC3.js.map +0 -1
  373. package/dist/chunk-DL55BSQX.js.map +0 -1
  374. package/dist/chunk-FL6J644M.js.map +0 -1
  375. package/dist/chunk-GIUOXAVL.js.map +0 -1
  376. package/dist/chunk-IOS2NXW7.js.map +0 -1
  377. package/dist/chunk-J3AWE5I4.js +0 -50
  378. package/dist/chunk-J3AWE5I4.js.map +0 -1
  379. package/dist/chunk-LAZLBC2Q.js.map +0 -1
  380. package/dist/chunk-MORVLMDG.js.map +0 -1
  381. package/dist/chunk-MTCTX25G.js.map +0 -1
  382. package/dist/chunk-O27D24CA.js.map +0 -1
  383. package/dist/chunk-PGL6TXFW.js.map +0 -1
  384. package/dist/chunk-QCLLBMLA.js.map +0 -1
  385. package/dist/chunk-QQICWWNX.js.map +0 -1
  386. package/dist/chunk-TKDDTLG5.js.map +0 -1
  387. package/dist/chunk-TNG3XKHB.js.map +0 -1
  388. package/dist/chunk-XKZPBRU7.js.map +0 -1
@@ -215,10 +215,35 @@
215
215
 
216
216
  .kui-toolbar-control-group[data-sizing="grow"][data-expanded="true"] {
217
217
  --_kui-toolbar-group-grow-search-width: 100%;
218
+ /* The grown group's content-box width at its basis (basis minus the 1px
219
+ border and 1px padding on each side). A collapsible search lays its editor
220
+ out at least this wide while the group's flex size animates open, so the
221
+ clipped query is revealed rather than re-wrapped every frame (KF-50K0JM). */
222
+ --_kui-toolbar-group-grow-search-min-width: calc(
223
+ var(--kui-toolbar-group-grow-basis, 19rem) - 4px
224
+ );
218
225
  width: auto;
219
226
  min-width: var(--kui-toolbar-group-grow-basis, 19rem);
220
227
  flex: 1 1 var(--kui-toolbar-group-grow-basis, 19rem);
221
228
  }
229
+
230
+ /* A grow search animates its flex size, not `width`: an expanded grow group's
231
+ `width: auto` cannot interpolate, so it used to snap open while the search
232
+ inside animated, leaving an empty band (KF-50K0JM). The collapsed state names
233
+ a definite basis and minimum so all three flex lengths interpolate. */
234
+ .kui-toolbar-control-group[data-content="search"][data-sizing="grow"] {
235
+ /* The group owns this motion; a collapsible search inside follows it on
236
+ every frame rather than running its own width transition. */
237
+ --_kui-toolbar-group-grow-search-width-duration: 0s;
238
+ transition-property:
239
+ width, flex-basis, flex-grow, min-width, background-color, border-color;
240
+ transition-duration: 0.25s, 0.25s, 0.25s, 0.25s, 0.2s, 0.2s;
241
+ transition-timing-function: ease;
242
+ }
243
+ .kui-toolbar-control-group[data-content="search"][data-sizing="grow"][data-expanded="false"] {
244
+ min-width: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
245
+ flex: 0 0 var(--kui-toolbar-group-size, calc(2px + 2.625rem));
246
+ }
222
247
  .kui-toolbar-control-group[data-sizing="fill"] {
223
248
  width: 100%;
224
249
  min-width: 0;
@@ -256,15 +281,32 @@
256
281
 
257
282
  @container kui-toolbar (max-width: 30rem) {
258
283
  .kui-toolbar-control-group[data-sizing="grow"][data-expanded="true"] {
284
+ --_kui-toolbar-group-grow-search-min-width: 0px;
259
285
  width: 100%;
260
286
  min-width: 0;
261
287
  flex: 1 1 100%;
262
288
  }
289
+
290
+ /* Here the grown search takes its own line. Animating its basis would push
291
+ the trailing siblings and then jump the group to the next line mid-way, so
292
+ it opens and closes in one frame with the search filling it. */
293
+ .kui-toolbar-control-group[data-content="search"][data-sizing="grow"] {
294
+ transition-property: background-color, border-color;
295
+ transition-duration: 0.2s;
296
+ }
263
297
  }
264
298
  .kui-toolbar-control-group[data-content="text"]
265
- > :is(button, wa-button, .kui-toolbar-action-link),
299
+ > :is(
300
+ button,
301
+ wa-button:not(:where(.kui-icon-button)),
302
+ .kui-toolbar-action-link
303
+ ),
266
304
  .kui-toolbar-control-group[data-content="mixed"]
267
- > :is(button, wa-button, .kui-toolbar-action-link) {
305
+ > :is(
306
+ button,
307
+ wa-button:not(:where(.kui-icon-button)),
308
+ .kui-toolbar-action-link
309
+ ) {
268
310
  min-width: max-content;
269
311
  }
270
312
  .kui-toolbar-control-group[data-content="mixed"] > button {
@@ -272,14 +314,14 @@
272
314
  gap: var(--kui-space-xs);
273
315
  }
274
316
  .kui-toolbar-control-group[data-content="mixed"]
275
- wa-button:not(:where(.kui-popup-menu > *)) {
317
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button)) {
276
318
  line-height: normal;
277
319
  }
278
320
  /* Toolbar controls never wrap. Web Awesome's label part is a plain block, so a
279
321
  slotted icon (a block SVG) and its text would otherwise stack vertically —
280
322
  lay them out on one row the way native mixed buttons already are. */
281
323
  .kui-toolbar-control-group
282
- wa-button:not(:where(.kui-popup-menu > *))::part(label) {
324
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button))::part(label) {
283
325
  display: inline-flex;
284
326
  align-items: center;
285
327
  gap: var(--kui-space-xs);
@@ -335,11 +377,32 @@
335
377
  background: transparent;
336
378
  }
337
379
 
380
+ /* `selectedChrome="none"`: a pressed control paints like its unpressed
381
+ neighbors, for an icon-state toggle whose glyph already shows the state.
382
+ One button opts out alone with `data-selected-chrome="none"`. After the
383
+ tone and appearance rules above, so it wins over their selected fills. */
384
+ .kui-toolbar-control-group[data-selected-chrome="none"],
385
+ .kui-toolbar-control-group
386
+ > :is(
387
+ button,
388
+ wa-button:not(:where(.kui-icon-button))
389
+ )[data-selected-chrome="none"] {
390
+ --kui-toolbar-control-selected-shadow: none;
391
+ --kui-toolbar-control-selected-border: transparent;
392
+ --kui-toolbar-control-selected-background: transparent;
393
+ --kui-toolbar-control-selected-color: var(--kui-toolbar-control-color);
394
+ }
395
+
338
396
  /* The group lays out its own native and raw Web Awesome children. A composed
339
397
  PopupMenu (`wa-dropdown.kui-popup-menu`) or Select sizes itself in the
340
398
  group's context from its own stylesheet (popup-menu.css, select.css); the
341
399
  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),
400
+ .kui-toolbar-control-group
401
+ > :is(
402
+ button,
403
+ wa-button:not(:where(.kui-icon-button)),
404
+ .kui-toolbar-action-link
405
+ ),
343
406
  .kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu) {
344
407
  flex: 0 0 auto;
345
408
  }
@@ -366,12 +429,15 @@
366
429
  place-items: center;
367
430
  }
368
431
 
369
- .kui-toolbar-control-group > button:disabled {
432
+ /* A native button that is disabled, or kept focusable with aria-disabled,
433
+ dims and drops hover chrome. */
434
+ .kui-toolbar-control-group > button:is(:disabled, [aria-disabled="true"]) {
370
435
  opacity: 0.5;
371
436
  cursor: not-allowed;
372
437
  }
373
438
 
374
- .kui-toolbar-control-group > button:not(:disabled):hover {
439
+ .kui-toolbar-control-group
440
+ > button:not(:disabled, [aria-disabled="true"]):hover {
375
441
  border-color: var(--kui-toolbar-control-border);
376
442
  background: var(--kui-toolbar-control-hover-background);
377
443
  }
@@ -429,7 +495,9 @@
429
495
  }
430
496
 
431
497
  .kui-toolbar-control-group > button svg,
432
- .kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) > svg,
498
+ .kui-toolbar-control-group
499
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button))
500
+ > svg,
433
501
  .kui-toolbar-control-group > .kui-toolbar-action-link svg {
434
502
  display: block;
435
503
  width: 1rem;
@@ -441,40 +509,44 @@
441
509
  buttons: a composed PopupMenu's trigger (`.kui-popup-menu > wa-button`) is
442
510
  excluded inside a zero-specificity `:where()` and takes the same metrics
443
511
  from popup-menu.css. */
444
- .kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) {
512
+ .kui-toolbar-control-group
513
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button)) {
445
514
  --wa-form-control-height: 2.5rem;
446
515
  }
447
516
  .kui-toolbar-control-group[data-size="compact"]
448
- wa-button:not(:where(.kui-popup-menu > *)) {
517
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button)) {
449
518
  --wa-form-control-height: 2rem;
450
519
  }
451
520
 
452
- .kui-toolbar-control-group > wa-button,
521
+ .kui-toolbar-control-group > wa-button:not(:where(.kui-icon-button)),
453
522
  .kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu),
454
- .kui-toolbar-control-group > wa-dropdown:not(.kui-popup-menu) > wa-button,
455
523
  .kui-toolbar-control-group
456
524
  > wa-dropdown:not(.kui-popup-menu)
457
- > wa-button::part(base) {
525
+ > wa-button:not(:where(.kui-icon-button)),
526
+ .kui-toolbar-control-group
527
+ > wa-dropdown:not(.kui-popup-menu)
528
+ > wa-button:not(:where(.kui-icon-button))::part(base) {
458
529
  min-width: 2.5rem;
459
530
  height: 2.5rem;
460
531
  }
461
532
  .kui-toolbar-control-group[data-size="compact"] > button,
462
533
  .kui-toolbar-control-group[data-size="compact"] > .kui-toolbar-action-link,
463
- .kui-toolbar-control-group[data-size="compact"] > wa-button,
534
+ .kui-toolbar-control-group[data-size="compact"]
535
+ > wa-button:not(:where(.kui-icon-button)),
464
536
  .kui-toolbar-control-group[data-size="compact"]
465
537
  > wa-dropdown:not(.kui-popup-menu),
466
538
  .kui-toolbar-control-group[data-size="compact"]
467
539
  > wa-dropdown:not(.kui-popup-menu)
468
- > wa-button,
540
+ > wa-button:not(:where(.kui-icon-button)),
469
541
  .kui-toolbar-control-group[data-size="compact"]
470
542
  > wa-dropdown:not(.kui-popup-menu)
471
- > wa-button::part(base),
543
+ > wa-button:not(:where(.kui-icon-button))::part(base),
472
544
  .kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
473
545
  wa-dropdown:not(.kui-popup-menu)
474
- wa-button,
546
+ wa-button:not(:where(.kui-icon-button)),
475
547
  .kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
476
548
  wa-dropdown:not(.kui-popup-menu)
477
- wa-button::part(base) {
549
+ wa-button:not(:where(.kui-icon-button))::part(base) {
478
550
  min-width: 2rem;
479
551
  height: 2rem;
480
552
  min-height: 2rem;
@@ -523,7 +595,7 @@
523
595
  .kui-toolbar-control-group[data-size="compact"][data-content="mixed"]
524
596
  > wa-dropdown:not(.kui-popup-menu),
525
597
  .kui-toolbar-control-group[data-size="compact"][data-content="mixed"]
526
- > wa-button {
598
+ > wa-button:not(:where(.kui-icon-button)) {
527
599
  margin: -2px;
528
600
  }
529
601
 
@@ -533,25 +605,26 @@
533
605
  the separator and the caret beyond the group border. */
534
606
  .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
535
607
  > wa-dropdown:not(.kui-popup-menu)
536
- > wa-button,
608
+ > wa-button:not(:where(.kui-icon-button)),
537
609
  .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
538
610
  > wa-dropdown:not(.kui-popup-menu)
539
- > wa-button::part(base) {
611
+ > wa-button:not(:where(.kui-icon-button))::part(base) {
540
612
  min-width: max-content;
541
613
  }
542
614
  .kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
543
615
  > wa-dropdown:not(.kui-popup-menu)
544
- > wa-button::part(base) {
616
+ > wa-button:not(:where(.kui-icon-button))::part(base) {
545
617
  width: max-content;
546
618
  }
547
619
 
548
620
  .kui-toolbar-control-group[data-single="true"]
549
621
  > wa-dropdown:not(.kui-popup-menu)
550
- > wa-button::part(base) {
622
+ > wa-button:not(:where(.kui-icon-button))::part(base) {
551
623
  width: max-content;
552
624
  }
553
625
 
554
- .kui-toolbar-control-group wa-button:not(:where(.kui-popup-menu > *)) {
626
+ .kui-toolbar-control-group
627
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button)) {
555
628
  display: inline-flex;
556
629
  line-height: 0;
557
630
  align-items: center;
@@ -560,7 +633,7 @@
560
633
  }
561
634
 
562
635
  .kui-toolbar-control-group
563
- wa-button:not(:where(.kui-popup-menu > *))::part(base) {
636
+ wa-button:not(:where(.kui-popup-menu > *, .kui-icon-button))::part(base) {
564
637
  /* Match min-width to the 40px height so an icon-only button's highlight is at
565
638
  least a circle, not a vertical oval — the host is 40px wide but the base
566
639
  part was sizing to its ~32px content. Text/caret buttons grow past it. */
@@ -575,15 +648,18 @@
575
648
  }
576
649
 
577
650
  .kui-toolbar-control-group
578
- wa-button:not(:where(.kui-popup-menu > *)):hover::part(base) {
651
+ wa-button:not(
652
+ :where(.kui-popup-menu > *, .kui-icon-button),
653
+ [disabled]
654
+ ):hover::part(base) {
579
655
  border-color: var(--kui-toolbar-control-border);
580
656
  background-color: var(--kui-toolbar-control-hover-background);
581
657
  }
582
658
 
583
659
  .kui-toolbar-control-group[data-single="true"]:has(
584
660
  > :is(
585
- button:not(:disabled),
586
- wa-button,
661
+ button:not(:disabled, [aria-disabled="true"]),
662
+ wa-button:not([disabled]),
587
663
  .kui-popup-menu,
588
664
  wa-dropdown:not(.kui-popup-menu),
589
665
  .kui-select,
@@ -594,9 +670,16 @@
594
670
  }
595
671
 
596
672
  .kui-toolbar-control-group[data-single="true"]
597
- > :is(button, wa-button, .kui-toolbar-action-link):hover,
673
+ > :is(
674
+ button,
675
+ wa-button:not(:where(.kui-icon-button)),
676
+ .kui-toolbar-action-link
677
+ ):hover,
598
678
  .kui-toolbar-control-group[data-single="true"]
599
- wa-button:not(:where(.kui-popup-menu > *)):hover::part(base) {
679
+ wa-button:not(
680
+ :where(.kui-popup-menu > *, .kui-icon-button),
681
+ [disabled]
682
+ ):hover::part(base) {
600
683
  border-color: transparent;
601
684
  background: transparent;
602
685
  }
@@ -607,8 +690,8 @@
607
690
  Done action). */
608
691
  .kui-toolbar-control-group:not([data-single="true"]):has(
609
692
  > :is(
610
- button:not(:disabled),
611
- wa-button,
693
+ button:not(:disabled, [aria-disabled="true"]),
694
+ wa-button:not([disabled]),
612
695
  .kui-select,
613
696
  .kui-toolbar-action-link
614
697
  ):nth-child(1 of :where(:not([data-toolbar-visibility-state]))):where(
@@ -619,17 +702,25 @@
619
702
  }
620
703
 
621
704
  .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])))
705
+ > :is(
706
+ button,
707
+ wa-button:not(:where(.kui-icon-button)),
708
+ .kui-toolbar-action-link
709
+ ):nth-child(1 of :where(:not([data-toolbar-visibility-state]))):where(
710
+ :nth-last-child(1 of :not([data-toolbar-visibility-state]))
711
+ )
625
712
  )
626
- > :is(button, wa-button, .kui-toolbar-action-link):hover,
713
+ > :is(
714
+ button,
715
+ wa-button:not(:where(.kui-icon-button)),
716
+ .kui-toolbar-action-link
717
+ ):hover,
627
718
  .kui-toolbar-control-group:not([data-single="true"]):has(
628
- > :is(button, wa-button):nth-child(
719
+ > :is(button, wa-button:not(:where(.kui-icon-button))):nth-child(
629
720
  1 of :where(:not([data-toolbar-visibility-state]))
630
721
  ):where(:nth-last-child(1 of :not([data-toolbar-visibility-state])))
631
722
  )
632
- > wa-button:hover::part(base) {
723
+ > wa-button:not(:where(.kui-icon-button)):hover::part(base) {
633
724
  border-color: transparent;
634
725
  background: transparent;
635
726
  }
@@ -651,18 +742,22 @@
651
742
  and stays inside the group's border instead of overflowing it as an oversized
652
743
  square (KF-5BDDQ9). The selected text color rides on the host and inherits in. */
653
744
  .kui-toolbar-control-group[data-single="false"]
654
- > wa-button[aria-pressed="true"] {
745
+ > wa-button:not(:where(.kui-icon-button))[aria-pressed="true"] {
655
746
  color: var(--kui-toolbar-control-selected-color);
656
747
  }
657
748
  .kui-toolbar-control-group[data-single="false"]
658
- > wa-button[aria-pressed="true"]::part(base) {
749
+ > wa-button:not(:where(.kui-icon-button))[aria-pressed="true"]::part(base) {
659
750
  border-color: var(--kui-toolbar-control-selected-border);
660
751
  background: var(--kui-toolbar-control-selected-background);
661
752
  box-shadow: var(--kui-toolbar-control-selected-shadow);
662
753
  }
663
754
 
664
755
  .kui-toolbar-control-group
665
- > :is(button, wa-button, .kui-toolbar-action-link):focus-visible {
756
+ > :is(
757
+ button,
758
+ wa-button:not(:where(.kui-icon-button)),
759
+ .kui-toolbar-action-link
760
+ ):focus-visible {
666
761
  outline: var(--kui-focus-ring);
667
762
  outline-offset: 1px;
668
763
  }
@@ -743,12 +838,13 @@
743
838
  }
744
839
 
745
840
  .kui-toolbar-control-group[data-button-appearance="push"][data-single="true"]
746
- > :is(button, wa-button)[aria-pressed="true"] {
841
+ > :is(button, wa-button:not(:where(.kui-icon-button)))[aria-pressed="true"] {
747
842
  color: var(--kui-toolbar-control-pressed-color);
748
843
  }
749
844
 
750
845
  @media (prefers-reduced-motion: reduce) {
751
- .kui-toolbar-control-group[data-content="search"] {
846
+ .kui-toolbar-control-group[data-content="search"],
847
+ .kui-toolbar-control-group[data-content="search"][data-sizing="grow"] {
752
848
  transition-duration: 0s;
753
849
  }
754
850
 
@@ -785,18 +881,18 @@
785
881
  .kui-toolbar-control-group[data-content="avatar"]:is(
786
882
  [data-single="true"],
787
883
  :has(
788
- > :is(button, wa-button):nth-child(
884
+ > :is(button, wa-button:not(:where(.kui-icon-button))):nth-child(
789
885
  1 of :where(:not([data-toolbar-visibility-state]))
790
886
  ):where(:nth-last-child(1 of :not([data-toolbar-visibility-state])))
791
887
  )
792
888
  )
793
- > :is(button, wa-button) {
889
+ > :is(button, wa-button:not(:where(.kui-icon-button))) {
794
890
  color: transparent;
795
891
  }
796
892
 
797
893
  .kui-toolbar-control-group[data-content="avatar"][data-single="false"]:not(
798
894
  :has(
799
- > :is(button, wa-button):nth-child(
895
+ > :is(button, wa-button:not(:where(.kui-icon-button))):nth-child(
800
896
  1 of :where(:not([data-toolbar-visibility-state]))
801
897
  ):where(:nth-last-child(1 of :not([data-toolbar-visibility-state])))
802
898
  )
@@ -804,12 +900,12 @@
804
900
  > button[aria-pressed="true"],
805
901
  .kui-toolbar-control-group[data-content="avatar"][data-single="false"]:not(
806
902
  :has(
807
- > :is(button, wa-button):nth-child(
903
+ > :is(button, wa-button:not(:where(.kui-icon-button))):nth-child(
808
904
  1 of :where(:not([data-toolbar-visibility-state]))
809
905
  ):where(:nth-last-child(1 of :not([data-toolbar-visibility-state])))
810
906
  )
811
907
  )
812
- > wa-button[aria-pressed="true"]::part(base) {
908
+ > wa-button:not(:where(.kui-icon-button))[aria-pressed="true"]::part(base) {
813
909
  color: transparent;
814
910
  background-image: var(--kui-toolbar-avatar-image);
815
911
  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"] {
@@ -68,6 +68,40 @@
68
68
  outline-offset: 1px;
69
69
  }
70
70
 
71
+ /* Reorder presentation. A dragged row dims; the row under the pointer draws
72
+ a brand insertion line along the block edge the dragged rows would land
73
+ beside, inset to the row's content padding so it ends clear of the
74
+ rounded corners. */
75
+ .kui-list-action-row[data-dragging="true"] {
76
+ opacity: var(--kui-list-action-row-dragging-opacity, 0.55);
77
+ }
78
+
79
+ .kui-list-action-row[data-drop-position] {
80
+ position: relative;
81
+ }
82
+
83
+ .kui-list-action-row[data-drop-position]::after {
84
+ position: absolute;
85
+ z-index: 1;
86
+ inset-inline: var(--kui-layout-item-padding, 0.5rem);
87
+ height: var(--kui-list-action-row-drop-indicator-width, 2px);
88
+ border-radius: var(--kui-radius-pill);
89
+ background: var(
90
+ --kui-list-action-row-drop-indicator,
91
+ var(--kui-color-brand-border-loud)
92
+ );
93
+ content: "";
94
+ pointer-events: none;
95
+ }
96
+
97
+ .kui-list-action-row[data-drop-position="before"]::after {
98
+ inset-block-start: 0;
99
+ }
100
+
101
+ .kui-list-action-row[data-drop-position="after"]::after {
102
+ inset-block-end: 0;
103
+ }
104
+
71
105
  .kui-list-action-row__primary,
72
106
  .kui-list-action-row__trailing-action {
73
107
  height: auto !important;
@@ -244,6 +278,11 @@
244
278
  }
245
279
 
246
280
  @media (forced-colors: active) {
281
+ .kui-list-action-row[data-drop-position]::after {
282
+ background: Highlight;
283
+ forced-color-adjust: none;
284
+ }
285
+
247
286
  .kui-list-action-row {
248
287
  --kui-list-action-row-border: ButtonText;
249
288
  outline: 1px solid ButtonText;
@@ -243,6 +243,51 @@
243
243
  );
244
244
  }
245
245
 
246
+ /* Reorder presentation. A dragged row dims; the row under the pointer draws
247
+ a brand insertion line along the block edge the dragged rows would land
248
+ beside. The line sits inside the row (the row clips its overflow to its
249
+ rounded boundary) and is inset to the row's content padding so it ends
250
+ clear of the rounded corners. */
251
+ .kui-list-item[data-dragging="true"] {
252
+ opacity: var(--kui-list-item-dragging-opacity, 0.55);
253
+ }
254
+
255
+ .kui-list-item[data-drop-position] {
256
+ position: relative;
257
+ }
258
+
259
+ .kui-list-item[data-drop-position]::after {
260
+ position: absolute;
261
+ z-index: 1;
262
+ inset-inline: var(
263
+ --kui-list-item-padding-inline,
264
+ var(--kui-layout-item-padding, 0.5rem)
265
+ );
266
+ height: var(--kui-list-item-drop-indicator-width, 2px);
267
+ border-radius: var(--kui-radius-pill);
268
+ background: var(
269
+ --kui-list-item-drop-indicator,
270
+ var(--kui-color-brand-border-loud)
271
+ );
272
+ content: "";
273
+ pointer-events: none;
274
+ }
275
+
276
+ .kui-list-item[data-drop-position="before"]::after {
277
+ inset-block-start: 0;
278
+ }
279
+
280
+ .kui-list-item[data-drop-position="after"]::after {
281
+ inset-block-end: 0;
282
+ }
283
+
284
+ @media (forced-colors: active) {
285
+ .kui-list-item[data-drop-position]::after {
286
+ background: Highlight;
287
+ forced-color-adjust: none;
288
+ }
289
+ }
290
+
246
291
  .kui-list-item__status {
247
292
  color: var(--kui-color-neutral-on-quiet);
248
293
  font-size: var(--kui-font-xs);