@kerfjs/ui 5.0.0-beta.95 → 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 (385) hide show
  1. package/README.md +95 -55
  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 +54 -52
  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/component-contract.md +26 -6
  334. package/docs/component-selection.md +149 -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 +125 -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
@@ -45,6 +45,42 @@ span.kui-text[data-wrap="truncate"] {
45
45
  max-width: 100%;
46
46
  }
47
47
 
48
+ /* Tail-preserving truncation: the clip box runs right to left so its ellipsis
49
+ lands at the start, while the isolated left-to-right run keeps the text's
50
+ own order and punctuation. Short text that fits stays left-aligned. */
51
+ .kui-text__truncate-start {
52
+ display: block;
53
+ overflow: hidden;
54
+ direction: rtl;
55
+ text-align: left;
56
+ text-overflow: ellipsis;
57
+ white-space: nowrap;
58
+ }
59
+
60
+ /* Middle truncation: the head shrinks to an ellipsis while the kept suffix
61
+ (the last path segment) stays whole. Pre keeps a space at the split. */
62
+ .kui-text__truncate-middle {
63
+ display: flex;
64
+ min-width: 0;
65
+ overflow: hidden;
66
+ }
67
+
68
+ .kui-text__truncate-head,
69
+ .kui-text__truncate-tail {
70
+ white-space: pre;
71
+ }
72
+
73
+ .kui-text__truncate-head {
74
+ flex: 0 1 auto;
75
+ min-width: 0;
76
+ overflow: hidden;
77
+ text-overflow: ellipsis;
78
+ }
79
+
80
+ .kui-text__truncate-tail {
81
+ flex: 0 0 auto;
82
+ }
83
+
48
84
  .kui-text__clamp {
49
85
  display: -webkit-box;
50
86
  overflow: hidden;
@@ -89,6 +125,32 @@ span.kui-text[data-wrap="truncate"] {
89
125
  line-height: 1.2;
90
126
  }
91
127
 
128
+ /* Inline alignment. The truncation boxes carry their own direction or flex
129
+ layout, so each aligns its single line explicitly. */
130
+ .kui-text[data-align="center"] {
131
+ text-align: center;
132
+ }
133
+
134
+ .kui-text[data-align="end"] {
135
+ text-align: end;
136
+ }
137
+
138
+ .kui-text[data-align="center"] > .kui-text__truncate-start {
139
+ text-align: center;
140
+ }
141
+
142
+ .kui-text[data-align="end"] > .kui-text__truncate-start {
143
+ text-align: right;
144
+ }
145
+
146
+ .kui-text[data-align="center"] > .kui-text__truncate-middle {
147
+ justify-content: center;
148
+ }
149
+
150
+ .kui-text[data-align="end"] > .kui-text__truncate-middle {
151
+ justify-content: flex-end;
152
+ }
153
+
92
154
  span.kui-text {
93
155
  margin: 0;
94
156
  border: 0;
@@ -71,6 +71,24 @@
71
71
  --kui-content-item-foreground: var(--kui-color-warning-on-fill);
72
72
  }
73
73
 
74
+ .kui-content-item[data-appearance="brand-loud"] {
75
+ --kui-content-item-border: var(--kui-color-brand-border-loud);
76
+ --kui-content-item-background: var(--kui-color-brand-fill-loud);
77
+ --kui-content-item-foreground: var(--kui-color-brand-on-loud);
78
+ }
79
+
80
+ /* Chat bubble: the item shrinks to its content up to 80% of the row and sits
81
+ at the start or end of the line; long unbroken text wraps inside it. */
82
+ .kui-content-item[data-bubble] {
83
+ width: fit-content;
84
+ max-width: 80%;
85
+ overflow-wrap: anywhere;
86
+ }
87
+
88
+ .kui-content-item[data-bubble="end"] {
89
+ margin-inline-start: auto;
90
+ }
91
+
74
92
  .kui-content-item[data-appearance="danger"] {
75
93
  --kui-content-item-border: var(--kui-color-danger-border-quiet);
76
94
  --kui-content-item-background: var(--kui-color-danger-fill-quiet);
@@ -0,0 +1,154 @@
1
+ /* Both sides share one grid cell, so the region keeps the active side's
2
+ height; the inactive side is taken out of flow, clipped, and hidden once its
3
+ exit animation ends (each keyframe keeps it visible while it runs). */
4
+ .kui-content-swap {
5
+ --_kui-content-swap-dir: 1;
6
+ --_kui-content-swap-duration: 280ms;
7
+ position: relative;
8
+ display: grid;
9
+ min-width: 0;
10
+ overflow: hidden;
11
+ }
12
+
13
+ .kui-content-swap:dir(rtl) {
14
+ --_kui-content-swap-dir: -1;
15
+ }
16
+
17
+ .kui-content-swap[data-fill="true"] {
18
+ width: 100%;
19
+ }
20
+
21
+ .kui-content-swap__side {
22
+ min-width: 0;
23
+ grid-area: 1 / 1;
24
+ }
25
+
26
+ .kui-content-swap__side[data-active="false"] {
27
+ position: absolute;
28
+ inset: 0;
29
+ overflow: hidden;
30
+ visibility: hidden;
31
+ opacity: 0;
32
+ pointer-events: none;
33
+ }
34
+
35
+ /* Motion runs only when the viewer has not asked for reduced motion. */
36
+ @media (prefers-reduced-motion: no-preference) {
37
+ /* Push forward: a leaves toward the start, b arrives from the end. */
38
+ .kui-content-swap[data-transition="push"][data-active-side="b"][data-direction="forward"]
39
+ > [data-side="a"],
40
+ .kui-content-swap[data-transition="push"][data-active-side="a"][data-direction="forward"]
41
+ > [data-side="b"] {
42
+ animation: kui-content-swap-out-start var(--_kui-content-swap-duration)
43
+ cubic-bezier(0.32, 0.72, 0, 1);
44
+ }
45
+ .kui-content-swap[data-transition="push"][data-active-side="b"][data-direction="forward"]
46
+ > [data-side="b"],
47
+ .kui-content-swap[data-transition="push"][data-active-side="a"][data-direction="forward"]
48
+ > [data-side="a"] {
49
+ animation: kui-content-swap-in-end var(--_kui-content-swap-duration)
50
+ cubic-bezier(0.32, 0.72, 0, 1);
51
+ }
52
+
53
+ /* Push backward: the mirror image. */
54
+ .kui-content-swap[data-transition="push"][data-active-side="a"][data-direction="backward"]
55
+ > [data-side="b"],
56
+ .kui-content-swap[data-transition="push"][data-active-side="b"][data-direction="backward"]
57
+ > [data-side="a"] {
58
+ animation: kui-content-swap-out-end var(--_kui-content-swap-duration)
59
+ cubic-bezier(0.32, 0.72, 0, 1);
60
+ }
61
+ .kui-content-swap[data-transition="push"][data-active-side="a"][data-direction="backward"]
62
+ > [data-side="a"],
63
+ .kui-content-swap[data-transition="push"][data-active-side="b"][data-direction="backward"]
64
+ > [data-side="b"] {
65
+ animation: kui-content-swap-in-start var(--_kui-content-swap-duration)
66
+ cubic-bezier(0.32, 0.72, 0, 1);
67
+ }
68
+
69
+ .kui-content-swap[data-transition="crossfade"]
70
+ > .kui-content-swap__side[data-active="true"] {
71
+ animation: kui-content-swap-fade-in 200ms ease-out;
72
+ }
73
+ .kui-content-swap[data-transition="crossfade"]
74
+ > .kui-content-swap__side[data-active="false"] {
75
+ animation: kui-content-swap-fade-out 200ms ease-out;
76
+ }
77
+ }
78
+
79
+ @keyframes kui-content-swap-in-end {
80
+ from {
81
+ visibility: visible;
82
+ opacity: 1;
83
+ transform: translateX(calc(100% * var(--_kui-content-swap-dir)));
84
+ }
85
+ to {
86
+ visibility: visible;
87
+ opacity: 1;
88
+ transform: none;
89
+ }
90
+ }
91
+ @keyframes kui-content-swap-in-start {
92
+ from {
93
+ visibility: visible;
94
+ opacity: 1;
95
+ transform: translateX(calc(-100% * var(--_kui-content-swap-dir)));
96
+ }
97
+ to {
98
+ visibility: visible;
99
+ opacity: 1;
100
+ transform: none;
101
+ }
102
+ }
103
+ @keyframes kui-content-swap-out-start {
104
+ from {
105
+ visibility: visible;
106
+ opacity: 1;
107
+ transform: none;
108
+ }
109
+ to {
110
+ visibility: visible;
111
+ opacity: 1;
112
+ transform: translateX(calc(-100% * var(--_kui-content-swap-dir)));
113
+ }
114
+ }
115
+ @keyframes kui-content-swap-out-end {
116
+ from {
117
+ visibility: visible;
118
+ opacity: 1;
119
+ transform: none;
120
+ }
121
+ to {
122
+ visibility: visible;
123
+ opacity: 1;
124
+ transform: translateX(calc(100% * var(--_kui-content-swap-dir)));
125
+ }
126
+ }
127
+ @keyframes kui-content-swap-fade-in {
128
+ from {
129
+ visibility: visible;
130
+ opacity: 0;
131
+ }
132
+ to {
133
+ visibility: visible;
134
+ opacity: 1;
135
+ }
136
+ }
137
+ @keyframes kui-content-swap-fade-out {
138
+ from {
139
+ visibility: visible;
140
+ opacity: 1;
141
+ }
142
+ to {
143
+ visibility: visible;
144
+ opacity: 0;
145
+ }
146
+ }
147
+
148
+ /* Reduced motion: no slide; a push or crossfade swaps with a short fade. */
149
+ @media (prefers-reduced-motion: reduce) {
150
+ .kui-content-swap:is([data-transition="push"], [data-transition="crossfade"])
151
+ > .kui-content-swap__side[data-active="true"] {
152
+ animation: kui-content-swap-fade-in 120ms ease-out;
153
+ }
154
+ }
@@ -0,0 +1,60 @@
1
+ /* The host only places the stack: the composed banners own their fill,
2
+ border, and padding. A native popover's UA box (inset 0, auto margin,
3
+ border, padding, Canvas background, scrolling) is reset so the stack sizes
4
+ to its banners in the chosen corner. Stacked banners share the widest
5
+ banner's width, so a stack reads as one aligned column. */
6
+ .kui-corner-status {
7
+ --_kui-corner-status-gutter: var(
8
+ --kui-corner-status-gutter,
9
+ var(--kui-space-m)
10
+ );
11
+ display: flex;
12
+ box-sizing: border-box;
13
+ flex-direction: column;
14
+ gap: var(--kui-space-xs);
15
+ width: max-content;
16
+ max-width: 100%;
17
+ margin: 0;
18
+ padding: 0;
19
+ overflow: visible;
20
+ border: 0;
21
+ color: inherit;
22
+ background: transparent;
23
+ }
24
+ .kui-corner-status[data-presentation="overlay"] {
25
+ position: fixed;
26
+ z-index: var(--kui-corner-status-z-index, 1000);
27
+ inset: auto;
28
+ max-width: calc(
29
+ 100vw - 2 * var(--_kui-corner-status-gutter) -
30
+ var(--kui-safe-area-inline-start) - var(--kui-safe-area-inline-end)
31
+ );
32
+ }
33
+ /* A browser with the Popover API hides the host until wireCornerStatus opens
34
+ it; without the API the fixed host simply shows. */
35
+ .kui-corner-status[data-presentation="overlay"][popover]:not(:popover-open) {
36
+ display: none;
37
+ }
38
+ .kui-corner-status[data-placement^="top"] {
39
+ inset-block-start: calc(
40
+ var(--_kui-corner-status-gutter) + var(--kui-safe-area-block-start)
41
+ );
42
+ }
43
+ .kui-corner-status[data-placement^="bottom"] {
44
+ inset-block-end: calc(
45
+ var(--_kui-corner-status-gutter) + var(--kui-safe-area-block-end)
46
+ );
47
+ }
48
+ .kui-corner-status[data-placement$="-start"] {
49
+ inset-inline-start: calc(
50
+ var(--_kui-corner-status-gutter) + var(--kui-safe-area-inline-start)
51
+ );
52
+ }
53
+ .kui-corner-status[data-placement$="-end"] {
54
+ inset-inline-end: calc(
55
+ var(--_kui-corner-status-gutter) + var(--kui-safe-area-inline-end)
56
+ );
57
+ }
58
+ .kui-corner-status[data-presentation="embedded"] {
59
+ position: static;
60
+ }
@@ -22,6 +22,18 @@ body {
22
22
  line-height: 1.45;
23
23
  }
24
24
 
25
+ /* Opt-in viewport lock for a full-viewport application shell: the dynamic
26
+ viewport height keeps mobile browser toolbars and the on-screen keyboard
27
+ from leaving the root taller than the visible area, and clipping (not
28
+ hidden overflow) leaves the document with no scroll container, so only the
29
+ shell's Panes scroll. The mount container must be a direct child of body. */
30
+ html:has(> body > .kui-app-root[data-viewport="locked"]),
31
+ body:has(> .kui-app-root[data-viewport="locked"]),
32
+ body > .kui-app-root[data-viewport="locked"] {
33
+ height: 100dvh;
34
+ overflow: clip;
35
+ }
36
+
25
37
  :where(button, input, select, textarea, th, td) {
26
38
  font-family: inherit;
27
39
  font-size: inherit;
@@ -31,3 +43,56 @@ body {
31
43
  :where(a) {
32
44
  color: var(--kui-color-text-link);
33
45
  }
46
+
47
+ /* Semantic cursors for native controls, which browsers draw with the default
48
+ arrow. Zero specificity keeps component and application cursors in charge. */
49
+ :where(
50
+ button:enabled,
51
+ a[href],
52
+ [role="button"]:not([aria-disabled="true"]),
53
+ summary,
54
+ label:has(> input:is([type="checkbox"], [type="radio"]):enabled),
55
+ select:enabled,
56
+ input:is(
57
+ [type="button"],
58
+ [type="checkbox"],
59
+ [type="color"],
60
+ [type="file"],
61
+ [type="radio"],
62
+ [type="reset"],
63
+ [type="submit"]
64
+ ):enabled
65
+ ) {
66
+ cursor: pointer;
67
+ }
68
+
69
+ :where(
70
+ button:disabled,
71
+ input:disabled,
72
+ select:disabled,
73
+ textarea:disabled,
74
+ [role="button"][aria-disabled="true"]
75
+ ) {
76
+ cursor: not-allowed;
77
+ }
78
+
79
+ :where(
80
+ textarea:enabled,
81
+ input:is(
82
+ :not([type]),
83
+ [type="email"],
84
+ [type="number"],
85
+ [type="password"],
86
+ [type="search"],
87
+ [type="tel"],
88
+ [type="text"],
89
+ [type="url"]
90
+ ):enabled
91
+ ) {
92
+ cursor: text;
93
+ }
94
+
95
+ /* Web Awesome keeps a pointer on a disabled button's base part. */
96
+ :where(wa-button[disabled])::part(base) {
97
+ cursor: not-allowed;
98
+ }
@@ -0,0 +1,127 @@
1
+ /* A fixed, layout-free host at the top edge: it allocates no space and never
2
+ takes the pointer. Its strip and pill scale in from the edge while busy. */
3
+ .kui-edge-activity-indicator {
4
+ --_kui-edge-activity-indicator-fill: var(--kui-color-brand-fill-loud);
5
+ --_kui-edge-activity-indicator-on: var(--kui-color-brand-on-loud);
6
+ position: fixed;
7
+ z-index: var(--kui-edge-activity-indicator-z-index, 2147483000);
8
+ inset: var(--kui-safe-area-block-start, 0px) 0 auto 0;
9
+ height: 0;
10
+ pointer-events: none;
11
+ }
12
+
13
+ .kui-edge-activity-indicator[data-inset="none"] {
14
+ inset-block-start: 0;
15
+ }
16
+
17
+ .kui-edge-activity-indicator[data-tone="neutral"] {
18
+ --_kui-edge-activity-indicator-fill: var(--kui-color-neutral-fill-loud);
19
+ --_kui-edge-activity-indicator-on: var(--kui-color-neutral-on-loud);
20
+ }
21
+ .kui-edge-activity-indicator[data-tone="pop"] {
22
+ --_kui-edge-activity-indicator-fill: var(--kui-color-pop-fill-loud);
23
+ --_kui-edge-activity-indicator-on: var(--kui-color-pop-on-loud);
24
+ }
25
+ .kui-edge-activity-indicator[data-tone="success"] {
26
+ --_kui-edge-activity-indicator-fill: var(--kui-color-success-fill-loud);
27
+ --_kui-edge-activity-indicator-on: var(--kui-color-success-on-loud);
28
+ }
29
+ .kui-edge-activity-indicator[data-tone="warning"] {
30
+ --_kui-edge-activity-indicator-fill: var(--kui-color-warning-fill-loud);
31
+ --_kui-edge-activity-indicator-on: var(--kui-color-warning-on-loud);
32
+ }
33
+ .kui-edge-activity-indicator[data-tone="danger"] {
34
+ --_kui-edge-activity-indicator-fill: var(--kui-color-danger-fill-loud);
35
+ --_kui-edge-activity-indicator-on: var(--kui-color-danger-on-loud);
36
+ }
37
+
38
+ /* 3px bars on a 5px pitch, drawn by one gradient. A repeating wave mask (1px
39
+ to 4px tall, hanging from the edge) slides across them, so each bar grows
40
+ and shrinks slightly out of phase with its neighbor. */
41
+ .kui-edge-activity-indicator__strip,
42
+ .kui-edge-activity-indicator__message {
43
+ opacity: 0;
44
+ transform: scaleY(0);
45
+ transform-origin: top center;
46
+ transition:
47
+ opacity 200ms ease,
48
+ transform 200ms ease;
49
+ }
50
+
51
+ .kui-edge-activity-indicator__strip {
52
+ height: 0.25rem;
53
+ background: repeating-linear-gradient(
54
+ 90deg,
55
+ var(--_kui-edge-activity-indicator-fill) 0 0.1875rem,
56
+ transparent 0.1875rem 0.3125rem
57
+ );
58
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='4' viewBox='0 0 100 4'%3E%3Cpath d='M0 0H100L100 1.00 L98 1.01 L96 1.05 L94 1.11 L92 1.19 L90 1.29 L88 1.41 L86 1.54 L84 1.70 L82 1.86 L80 2.04 L78 2.22 L76 2.41 L74 2.59 L72 2.78 L70 2.96 L68 3.14 L66 3.30 L64 3.46 L62 3.59 L60 3.71 L58 3.81 L56 3.89 L54 3.95 L52 3.99 L50 4.00 L48 3.99 L46 3.95 L44 3.89 L42 3.81 L40 3.71 L38 3.59 L36 3.46 L34 3.30 L32 3.14 L30 2.96 L28 2.78 L26 2.59 L24 2.41 L22 2.22 L20 2.04 L18 1.86 L16 1.70 L14 1.54 L12 1.41 L10 1.29 L8 1.19 L6 1.11 L4 1.05 L2 1.01 L0 1.00Z'/%3E%3C/svg%3E")
59
+ 0 0 / 6.25rem 100% repeat-x;
60
+ animation: kui-edge-activity-indicator-wave 1s linear infinite paused;
61
+ }
62
+
63
+ .kui-edge-activity-indicator[data-busy="true"]
64
+ > .kui-edge-activity-indicator__strip {
65
+ opacity: 1;
66
+ transform: scaleY(1);
67
+ animation-play-state: running;
68
+ }
69
+
70
+ @keyframes kui-edge-activity-indicator-wave {
71
+ to {
72
+ mask-position: 6.25rem 0;
73
+ }
74
+ }
75
+
76
+ /* The status pill hangs centered from the edge, over the strip. */
77
+ .kui-edge-activity-indicator__message {
78
+ position: absolute;
79
+ inset-block-start: 0;
80
+ inset-inline-start: 50%;
81
+ max-width: calc(100vw - 2 * var(--kui-space-m));
82
+ padding: 0.125rem var(--kui-space-s);
83
+ overflow: hidden;
84
+ border-radius: 0 0 0.5rem 0.5rem;
85
+ color: var(--_kui-edge-activity-indicator-on);
86
+ background: var(--_kui-edge-activity-indicator-fill);
87
+ font-size: var(--kui-font-2xs);
88
+ line-height: 1.4;
89
+ text-overflow: ellipsis;
90
+ white-space: nowrap;
91
+ transform: translateX(-50%) scaleY(0);
92
+ }
93
+
94
+ .kui-edge-activity-indicator__message[data-visible="true"] {
95
+ opacity: 1;
96
+ transform: translateX(-50%) scaleY(1);
97
+ }
98
+
99
+ :dir(rtl) .kui-edge-activity-indicator__message {
100
+ transform: translateX(50%) scaleY(0);
101
+ }
102
+ :dir(rtl) .kui-edge-activity-indicator__message[data-visible="true"] {
103
+ transform: translateX(50%) scaleY(1);
104
+ }
105
+
106
+ /* Reduced motion: no wave and no scale; the strip and pill only fade. */
107
+ @media (prefers-reduced-motion: reduce) {
108
+ .kui-edge-activity-indicator__strip,
109
+ .kui-edge-activity-indicator__message {
110
+ transition: opacity 200ms ease;
111
+ }
112
+ .kui-edge-activity-indicator__strip,
113
+ .kui-edge-activity-indicator[data-busy="true"]
114
+ > .kui-edge-activity-indicator__strip {
115
+ mask: none;
116
+ transform: none;
117
+ animation: none;
118
+ }
119
+ .kui-edge-activity-indicator__message,
120
+ .kui-edge-activity-indicator__message[data-visible="true"] {
121
+ transform: translateX(-50%);
122
+ }
123
+ :dir(rtl) .kui-edge-activity-indicator__message,
124
+ :dir(rtl) .kui-edge-activity-indicator__message[data-visible="true"] {
125
+ transform: translateX(50%);
126
+ }
127
+ }
@@ -0,0 +1,81 @@
1
+ /* The native file input stays inside each label for activation, keyboard
2
+ focus, and form submission, visually hidden but accessible. */
3
+ .kui-file-picker__input {
4
+ position: absolute;
5
+ width: 1px;
6
+ height: 1px;
7
+ overflow: hidden;
8
+ clip-path: inset(50%);
9
+ white-space: nowrap;
10
+ }
11
+
12
+ .kui-file-picker__icon {
13
+ display: inline-grid;
14
+ flex: none;
15
+ place-items: center;
16
+ }
17
+
18
+ /* A compact, link-toned browse trigger. */
19
+ .kui-file-picker[data-presentation="trigger"] {
20
+ position: relative;
21
+ display: inline-flex;
22
+ min-height: 2rem;
23
+ padding: 0 var(--kui-space-xs);
24
+ border-radius: var(--kui-radius-pill);
25
+ color: var(--kui-color-text-link);
26
+ cursor: pointer;
27
+ align-items: center;
28
+ gap: var(--kui-space-2xs);
29
+ font-size: var(--kui-font-xs);
30
+ font-weight: var(--kui-font-weight-semibold);
31
+ }
32
+
33
+ .kui-file-picker[data-presentation="trigger"]:hover {
34
+ background: var(--kui-color-brand-fill-quiet);
35
+ }
36
+
37
+ /* A dashed drop target with content-item margins, highlighted on hover and
38
+ while files are dragged over it. */
39
+ .kui-file-picker[data-presentation="drop-zone"] {
40
+ position: relative;
41
+ display: grid;
42
+ min-height: 5rem;
43
+ margin-inline: var(--kui-layout-inline-margin, 0.5rem);
44
+ padding: var(--kui-space-s);
45
+ box-sizing: border-box;
46
+ border: 1px dashed var(--kui-color-neutral-border-loud);
47
+ border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
48
+ color: var(--kui-color-neutral-on-quiet);
49
+ cursor: pointer;
50
+ place-items: center;
51
+ align-content: center;
52
+ gap: var(--kui-space-2xs);
53
+ font-size: var(--kui-font-xs);
54
+ text-align: center;
55
+ }
56
+
57
+ .kui-file-picker[data-presentation="drop-zone"]:hover,
58
+ .kui-file-picker[data-presentation="drop-zone"][data-dragging="true"] {
59
+ border-color: var(--kui-color-text-link);
60
+ background: var(--kui-color-brand-fill-quiet);
61
+ }
62
+
63
+ .kui-file-picker__title {
64
+ color: var(--kui-color-text);
65
+ }
66
+
67
+ .kui-file-picker__detail {
68
+ font-size: var(--kui-font-2xs);
69
+ }
70
+
71
+ /* Keyboard focus lands on the hidden input; the visible control shows it. */
72
+ .kui-file-picker:has(> .kui-file-picker__input:focus-visible) {
73
+ outline: var(--kui-focus-ring);
74
+ outline-offset: 2px;
75
+ }
76
+
77
+ .kui-file-picker[data-disabled="true"] {
78
+ cursor: default;
79
+ opacity: 0.5;
80
+ pointer-events: none;
81
+ }
@@ -131,6 +131,14 @@
131
131
  rgb(228.157895 228.157895 255 / 0.07451)
132
132
  )
133
133
  );
134
+ /* The sunken surface: a fine monochrome grain over the lowered color. The
135
+ tile is generated once per page by the first sunken surface that renders
136
+ (ensureSunkenTexture); set --kui-sunken-texture to none at :root for a
137
+ flat lowered surface, or to another image. */
138
+ --kui-sunken-texture: var(--_kui-sunken-texture-generated, none);
139
+ --kui-sunken-surface:
140
+ var(--kui-sunken-texture) 0 0 / 100px 100px repeat,
141
+ var(--kui-color-surface-lowered);
134
142
  --kui-color-text: var(--wa-color-text-normal, light-dark(#1d1d1f, #f5f5f7));
135
143
  --kui-color-text-quiet: var(
136
144
  --wa-color-text-quiet,
@@ -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
+ }
@@ -0,0 +1,22 @@
1
+ /* Web Awesome's own icon-button geometry, for a lone LucideIcon: a square one
2
+ form control height on each side with the glyph centered. Web Awesome
3
+ applies it only to a lone wa-icon. */
4
+ .kui-icon-button::part(base) {
5
+ width: var(--wa-form-control-height);
6
+ min-width: var(--wa-form-control-height);
7
+ padding: 0;
8
+ aspect-ratio: 1;
9
+ justify-content: center;
10
+ }
11
+
12
+ .kui-icon-button::part(label) {
13
+ display: flex;
14
+ justify-content: center;
15
+ }
16
+
17
+ /* Beside a field in a ListInsetControl, the square keeps its size instead of
18
+ growing to share the row, and lines up with the field below its label. */
19
+ .kui-list-inset-control > .kui-icon-button {
20
+ flex: none;
21
+ align-self: flex-end;
22
+ }