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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/README.md +29 -1
  2. package/ai/component-catalog.json +23 -11
  3. package/ai/component-composition.json +9 -3
  4. package/ai/components/README.md +1 -1
  5. package/ai/components/badge.md +1 -1
  6. package/ai/components/chip.md +1 -1
  7. package/ai/components/content-item.md +8 -5
  8. package/ai/components/document-baseline.md +2 -2
  9. package/ai/components/grid.md +5 -3
  10. package/ai/components/lucide-icon.md +11 -0
  11. package/ai/public-api-signatures-v1.md +92 -61
  12. package/ai/skill.md +33 -4
  13. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  14. package/analyzer/index.mjs +11 -1
  15. package/dist/app-tab.js +1 -1
  16. package/dist/badge.d.ts +5 -3
  17. package/dist/badge.js +1 -1
  18. package/dist/browser/catalog.js +7 -7
  19. package/dist/browser/collapsible-panel.js +3 -3
  20. package/dist/browser/list-header.js +1 -1
  21. package/dist/browser/nav-stack.js +1 -1
  22. package/dist/browser/select.js +1 -1
  23. package/dist/browser/split-view.js +1 -1
  24. package/dist/browser/workbench.js +4 -4
  25. package/dist/catalog-resources.d.ts +6 -6
  26. package/dist/catalog-resources.js +1 -1
  27. package/dist/catalog-resources.js.map +1 -1
  28. package/dist/catalog.d.ts +5 -5
  29. package/dist/catalog.js +13 -13
  30. package/dist/catalog.js.map +1 -1
  31. package/dist/chip.d.ts +3 -2
  32. package/dist/chip.js +1 -1
  33. package/dist/{chunk-SVLDRGPJ.js → chunk-3RE2JMZU.js} +7 -3
  34. package/dist/chunk-3RE2JMZU.js.map +1 -0
  35. package/dist/{chunk-V4WLBOVJ.js → chunk-5BZBIRQG.js} +4 -4
  36. package/dist/chunk-5BZBIRQG.js.map +1 -0
  37. package/dist/{chunk-SX7FJXPJ.js → chunk-5D3WDMIK.js} +4 -4
  38. package/dist/chunk-5D3WDMIK.js.map +1 -0
  39. package/dist/{chunk-HKVJ5MW3.js → chunk-5PAVAR4B.js} +3 -3
  40. package/dist/chunk-5PAVAR4B.js.map +1 -0
  41. package/dist/{chunk-5TTZPGUY.js → chunk-72LLWYP2.js} +6 -6
  42. package/dist/chunk-72LLWYP2.js.map +1 -0
  43. package/dist/{chunk-JA4J7Y4C.js → chunk-75I3SNUJ.js} +2 -2
  44. package/dist/chunk-75I3SNUJ.js.map +1 -0
  45. package/dist/{chunk-K47P7QZC.js → chunk-7QQ3HE47.js} +2 -2
  46. package/dist/chunk-7QQ3HE47.js.map +1 -0
  47. package/dist/{chunk-O5GM2JAM.js → chunk-7QWIJEK5.js} +9 -9
  48. package/dist/chunk-7QWIJEK5.js.map +1 -0
  49. package/dist/{chunk-5I7QGQVT.js → chunk-AN5IWMTM.js} +2 -2
  50. package/dist/chunk-AN5IWMTM.js.map +1 -0
  51. package/dist/{chunk-3BYFWTP3.js → chunk-AOAW55JN.js} +2 -2
  52. package/dist/chunk-AOAW55JN.js.map +1 -0
  53. package/dist/{chunk-5UGLKFBF.js → chunk-ARZ4RSQO.js} +5 -6
  54. package/dist/chunk-ARZ4RSQO.js.map +1 -0
  55. package/dist/{chunk-TCXDZNCX.js → chunk-BJLXE56E.js} +6 -6
  56. package/dist/chunk-BJLXE56E.js.map +1 -0
  57. package/dist/{chunk-RGS4WX2M.js → chunk-BYHGRKC3.js} +2 -2
  58. package/dist/chunk-BYHGRKC3.js.map +1 -0
  59. package/dist/{chunk-ZLKZFKLW.js → chunk-CEJ5FK6G.js} +2 -2
  60. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  61. package/dist/{chunk-SMZGAPCU.js → chunk-DQDTZE4W.js} +2 -2
  62. package/dist/chunk-DQDTZE4W.js.map +1 -0
  63. package/dist/{chunk-JGIV6ZDA.js → chunk-EFDCALR3.js} +2 -2
  64. package/dist/chunk-EFDCALR3.js.map +1 -0
  65. package/dist/{chunk-FKPKGP2H.js → chunk-G4VKQP7B.js} +2 -2
  66. package/dist/chunk-G4VKQP7B.js.map +1 -0
  67. package/dist/{chunk-TOICTHR2.js → chunk-GO2CZX4M.js} +2 -2
  68. package/dist/chunk-GO2CZX4M.js.map +1 -0
  69. package/dist/{chunk-DPAUKNB6.js → chunk-GS2QD3N7.js} +3 -3
  70. package/dist/chunk-GS2QD3N7.js.map +1 -0
  71. package/dist/{chunk-SLWCCHNP.js → chunk-H45DAZBL.js} +2 -2
  72. package/dist/chunk-H45DAZBL.js.map +1 -0
  73. package/dist/{chunk-DA3HS64I.js → chunk-H7ZJEI3H.js} +3 -3
  74. package/dist/chunk-H7ZJEI3H.js.map +1 -0
  75. package/dist/{chunk-V4GAQ74C.js → chunk-HFLGWMG3.js} +4 -4
  76. package/dist/chunk-HFLGWMG3.js.map +1 -0
  77. package/dist/{chunk-HXTAPIHQ.js → chunk-HFQDSSED.js} +6 -6
  78. package/dist/chunk-HFQDSSED.js.map +1 -0
  79. package/dist/{chunk-GRHJQWV2.js → chunk-HGSTMZZ6.js} +6 -6
  80. package/dist/chunk-HGSTMZZ6.js.map +1 -0
  81. package/dist/{chunk-WF75U3V4.js → chunk-HPREYDKV.js} +2 -2
  82. package/dist/chunk-HPREYDKV.js.map +1 -0
  83. package/dist/{chunk-VA5TN5PR.js → chunk-I4SDIMFA.js} +2 -2
  84. package/dist/chunk-I4SDIMFA.js.map +1 -0
  85. package/dist/{chunk-4SQK27MR.js → chunk-IM3GKYOG.js} +2 -2
  86. package/dist/chunk-IM3GKYOG.js.map +1 -0
  87. package/dist/{chunk-PL26TKNK.js → chunk-IVLTEBBT.js} +8 -8
  88. package/dist/chunk-IVLTEBBT.js.map +1 -0
  89. package/dist/{chunk-ALGYHYXP.js → chunk-J3AWE5I4.js} +2 -2
  90. package/dist/chunk-J3AWE5I4.js.map +1 -0
  91. package/dist/{chunk-OXO2QJWV.js → chunk-JOR5LGYE.js} +2 -2
  92. package/dist/chunk-JOR5LGYE.js.map +1 -0
  93. package/dist/{chunk-SRSJO5QE.js → chunk-LAZLBC2Q.js} +2 -2
  94. package/dist/chunk-LAZLBC2Q.js.map +1 -0
  95. package/dist/{chunk-RFGW735Q.js → chunk-LRAIS3YB.js} +2 -2
  96. package/dist/chunk-LRAIS3YB.js.map +1 -0
  97. package/dist/{chunk-AYUHMAI6.js → chunk-MXNIVEVL.js} +2 -2
  98. package/dist/chunk-MXNIVEVL.js.map +1 -0
  99. package/dist/{chunk-4NG4Y2Q6.js → chunk-NJZMR7HM.js} +2 -2
  100. package/dist/chunk-NJZMR7HM.js.map +1 -0
  101. package/dist/{chunk-DG6G5EPF.js → chunk-NMWDHZVM.js} +2 -2
  102. package/dist/chunk-NMWDHZVM.js.map +1 -0
  103. package/dist/{chunk-X5QSICJ3.js → chunk-NS2TBYM4.js} +2 -2
  104. package/dist/chunk-NS2TBYM4.js.map +1 -0
  105. package/dist/{chunk-4FEVHE7C.js → chunk-NVRJ7C3W.js} +4 -4
  106. package/dist/chunk-NVRJ7C3W.js.map +1 -0
  107. package/dist/{chunk-BFPBS5Y4.js → chunk-O27D24CA.js} +2 -2
  108. package/dist/chunk-O27D24CA.js.map +1 -0
  109. package/dist/{chunk-DUBUXJA3.js → chunk-PQQQXJGV.js} +4 -2
  110. package/dist/chunk-PQQQXJGV.js.map +1 -0
  111. package/dist/{chunk-6DFDTWGG.js → chunk-QYXKMLHO.js} +2 -2
  112. package/dist/chunk-QYXKMLHO.js.map +1 -0
  113. package/dist/{chunk-I3Q7KKYM.js → chunk-S3ECMF23.js} +2 -2
  114. package/dist/chunk-S3ECMF23.js.map +1 -0
  115. package/dist/{chunk-PSHUSWQH.js → chunk-S4ZGTDSG.js} +2 -2
  116. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  117. package/dist/{chunk-OYQIONQF.js → chunk-SJY7KC45.js} +5 -5
  118. package/dist/chunk-SJY7KC45.js.map +1 -0
  119. package/dist/{chunk-NPNSKX3K.js → chunk-VLPE6OPN.js} +2 -2
  120. package/dist/chunk-VLPE6OPN.js.map +1 -0
  121. package/dist/{chunk-NCSWXG7G.js → chunk-VLQUXZKA.js} +9 -3
  122. package/dist/chunk-VLQUXZKA.js.map +1 -0
  123. package/dist/{chunk-EHIMH4J7.js → chunk-VR7MWD2X.js} +10 -4
  124. package/dist/chunk-VR7MWD2X.js.map +1 -0
  125. package/dist/{chunk-NN6GYOA2.js → chunk-XIZRXI7N.js} +2 -2
  126. package/dist/chunk-XIZRXI7N.js.map +1 -0
  127. package/dist/{chunk-TDN5EE3S.js → chunk-Y6KT7ZTR.js} +2 -2
  128. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  129. package/dist/{chunk-LHSUPNSE.js → chunk-YLJ6X3AC.js} +2 -2
  130. package/dist/chunk-YLJ6X3AC.js.map +1 -0
  131. package/dist/{chunk-YDGNU2OD.js → chunk-ZVYA6TLR.js} +5 -2
  132. package/dist/chunk-ZVYA6TLR.js.map +1 -0
  133. package/dist/collapsible-panel.d.ts +6 -6
  134. package/dist/collapsible-panel.js +3 -3
  135. package/dist/collapsible-panel.js.map +1 -1
  136. package/dist/content-item.d.ts +13 -2
  137. package/dist/content-item.js +1 -1
  138. package/dist/css-values.js +1 -1
  139. package/dist/device-class.js +1 -1
  140. package/dist/device-class.js.map +1 -1
  141. package/dist/disclosure-arrow.js +1 -1
  142. package/dist/empty-state.js +1 -1
  143. package/dist/floating-toolbar.d.ts +1 -1
  144. package/dist/floating-toolbar.js +1 -1
  145. package/dist/grid.d.ts +10 -3
  146. package/dist/grid.js +1 -1
  147. package/dist/help-tags-register.js +1 -1
  148. package/dist/help-tags-register.js.map +1 -1
  149. package/dist/index.d.ts +27 -26
  150. package/dist/index.js +40 -40
  151. package/dist/list-action-row.js +1 -1
  152. package/dist/list-header.js +1 -1
  153. package/dist/list-inset-control.js +1 -1
  154. package/dist/list-inset-text.js +1 -1
  155. package/dist/list-item.js +1 -1
  156. package/dist/list.d.ts +2 -2
  157. package/dist/list.js +1 -1
  158. package/dist/loading-spinner.d.ts +4 -2
  159. package/dist/loading-spinner.js +1 -1
  160. package/dist/lucide-icon.d.ts +3 -1
  161. package/dist/lucide-icon.js +1 -1
  162. package/dist/nav-stack.d.ts +1 -1
  163. package/dist/nav-stack.js +1 -1
  164. package/dist/pane.js +1 -1
  165. package/dist/popup-menu-register.js +7 -7
  166. package/dist/popup-menu-register.js.map +1 -1
  167. package/dist/popup-menu.js +1 -1
  168. package/dist/resizable-region.d.ts +1 -1
  169. package/dist/resizable-region.js +1 -1
  170. package/dist/row.d.ts +2 -2
  171. package/dist/row.js +1 -1
  172. package/dist/segmented-control.js +1 -1
  173. package/dist/select-register.js +6 -6
  174. package/dist/select-register.js.map +1 -1
  175. package/dist/select.d.ts +1 -1
  176. package/dist/select.js +1 -1
  177. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  178. package/dist/skeleton.js +1 -1
  179. package/dist/spacer.js +1 -1
  180. package/dist/split-view.d.ts +2 -2
  181. package/dist/split-view.js +2 -2
  182. package/dist/split-view.js.map +1 -1
  183. package/dist/state-banner.d.ts +5 -3
  184. package/dist/state-banner.js +1 -1
  185. package/dist/styles/badge.css +1 -1
  186. package/dist/styles/chip.css +1 -1
  187. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  188. package/dist/styles/components/actions/popup-menu/popup-menu.css +285 -0
  189. package/dist/styles/components/actions/toolbar/toolbar.css +392 -0
  190. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +790 -0
  191. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +153 -0
  192. package/dist/styles/components/collections/list/list.css +133 -0
  193. package/dist/styles/components/collections/list-action-row/list-action-row.css +258 -0
  194. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  195. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  196. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  197. package/dist/styles/components/collections/list-item/list-item.css +255 -0
  198. package/dist/styles/components/data-display/value-table/value-table.css +105 -0
  199. package/dist/styles/components/feedback/badge/badge.css +118 -0
  200. package/dist/styles/components/feedback/chip/chip.css +138 -0
  201. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  202. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  203. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  204. package/dist/styles/components/feedback/state-banner/state-banner.css +248 -0
  205. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  206. package/dist/styles/components/forms/select/select.css +454 -0
  207. package/dist/styles/components/forms/token-search-field/token-search-field.css +381 -0
  208. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +575 -0
  209. package/dist/styles/components/layout/grid/grid.css +85 -0
  210. package/dist/styles/components/layout/pane/pane.css +263 -0
  211. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  212. package/dist/styles/components/layout/row/row.css +111 -0
  213. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  214. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  215. package/dist/styles/components/layout/workbench/workbench.css +1067 -0
  216. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  217. package/dist/styles/components/navigation/app-tab/app-tab.css +376 -0
  218. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  219. package/dist/styles/components/navigation/nav-stack/nav-stack.css +237 -0
  220. package/dist/styles/components/navigation/tab-bar/tab-bar.css +183 -0
  221. package/dist/styles/components/navigation/tab-scaffold/tab-scaffold.css +207 -0
  222. package/dist/styles/components/surfaces/content-item/content-item.css +120 -0
  223. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +29 -0
  224. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +56 -0
  225. package/dist/styles/components/typography/text/text.css +139 -0
  226. package/dist/styles/content-item.css +46 -1
  227. package/dist/styles/document.css +10 -0
  228. package/dist/styles/foundation.css +9 -6
  229. package/dist/styles/grid.css +50 -0
  230. package/dist/styles/lucide-icon.css +4 -0
  231. package/dist/styles/webawesome.css +23 -6
  232. package/dist/sunken-panel.d.ts +1 -1
  233. package/dist/sunken-panel.js +1 -1
  234. package/dist/surface-scaffold.js +1 -1
  235. package/dist/tab-bar.js +1 -1
  236. package/dist/tab-scaffold.d.ts +1 -1
  237. package/dist/tab-scaffold.js +1 -1
  238. package/dist/tab-scaffold.js.map +1 -1
  239. package/dist/text.d.ts +12 -8
  240. package/dist/text.js +1 -1
  241. package/dist/token-search-field.d.ts +1 -1
  242. package/dist/token-search-field.js +1 -1
  243. package/dist/{token-search-field-CVGwDn2y.d.ts → token-search-model-DTcTXWMS.d.ts} +54 -54
  244. package/dist/token-search-model.d.ts +1 -1
  245. package/dist/token-search-model.js +1 -1
  246. package/dist/toolbar-control-group.js +1 -1
  247. package/dist/toolbar-text.js +1 -1
  248. package/dist/toolbar.d.ts +1 -1
  249. package/dist/toolbar.js +1 -1
  250. package/dist/value-table.js +1 -1
  251. package/dist/wire-catalog.js +2 -2
  252. package/dist/wire-catalog.js.map +1 -1
  253. package/dist/wire-content-items.js +1 -1
  254. package/dist/wire-content-items.js.map +1 -1
  255. package/dist/wire-nav-stack.js +1 -1
  256. package/dist/wire-nav-stack.js.map +1 -1
  257. package/dist/wire-resizable-regions.js +1 -1
  258. package/dist/wire-scroll-dividers.js +1 -1
  259. package/dist/wire-sidebar.js +1 -1
  260. package/dist/wire-sidebar.js.map +1 -1
  261. package/dist/wire-tab-bars.js +1 -1
  262. package/dist/wire-tab-scaffold.js +1 -1
  263. package/dist/wire-tab-scaffold.js.map +1 -1
  264. package/dist/wire-token-search-fields.d.ts +1 -1
  265. package/dist/wire-token-search-fields.js +1 -1
  266. package/dist/wire-workbench.js +1 -1
  267. package/dist/workbench.d.ts +3 -3
  268. package/dist/workbench.js +1 -1
  269. package/docs/collapsible-panel.md +1 -1
  270. package/docs/component-contract.md +25 -7
  271. package/docs/component-selection.md +18 -4
  272. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  273. package/docs/design/templates/empty-state/filtered.svg +1 -1
  274. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  275. package/docs/design/templates/empty-state/with-action.svg +1 -1
  276. package/docs/design/templates/empty-state-dark.svg +1 -1
  277. package/docs/design/templates/empty-state.svg +1 -1
  278. package/docs/design/templates/list/stack-dark.svg +1 -1
  279. package/docs/design/templates/list/stack.svg +1 -1
  280. package/docs/design/templates/list-dark.svg +1 -1
  281. package/docs/design/templates/list-header/action-dark.svg +1 -1
  282. package/docs/design/templates/list-header/action.svg +1 -1
  283. package/docs/design/templates/list-header/count-dark.svg +1 -1
  284. package/docs/design/templates/list-header/count.svg +1 -1
  285. package/docs/design/templates/list-header/inline-action-dark.svg +1 -1
  286. package/docs/design/templates/list-header/inline-action.svg +1 -1
  287. package/docs/design/templates/list-header/size-l-dark.svg +1 -1
  288. package/docs/design/templates/list-header/size-l.svg +1 -1
  289. package/docs/design/templates/list-header/size-m-dark.svg +1 -1
  290. package/docs/design/templates/list-header/size-m.svg +1 -1
  291. package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
  292. package/docs/design/templates/list-header/size-xl.svg +1 -1
  293. package/docs/design/templates/list-header/size-xs-dark.svg +1 -1
  294. package/docs/design/templates/list-header/size-xs.svg +1 -1
  295. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  296. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  297. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  298. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  299. package/docs/design/templates/list-header-dark.svg +1 -1
  300. package/docs/design/templates/list-header.svg +1 -1
  301. package/docs/design/templates/list.svg +1 -1
  302. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  303. package/docs/design/templates/segmented-control/equal.svg +1 -1
  304. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
  305. package/docs/design/templates/segmented-control/pill-small.svg +1 -1
  306. package/docs/design/templates/segmented-control-dark.svg +1 -1
  307. package/docs/design/templates/segmented-control.svg +1 -1
  308. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  309. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  310. package/docs/design/templates/tab-bar-dark.svg +1 -1
  311. package/docs/design/templates/tab-bar.svg +1 -1
  312. package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
  313. package/docs/design/templates/token-search-field/empty.svg +1 -1
  314. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
  315. package/docs/design/templates/token-search-field/tokens.svg +1 -1
  316. package/docs/design/templates/token-search-field-dark.svg +1 -1
  317. package/docs/design/templates/token-search-field.svg +1 -1
  318. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  319. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  320. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  321. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  322. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  323. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  324. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  325. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  326. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  327. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  328. package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
  329. package/docs/design/templates/toolbar-control-group.svg +1 -1
  330. package/docs/design/templates/toolbar-dark.svg +1 -1
  331. package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
  332. package/docs/design/templates/toolbar-text/default.svg +1 -1
  333. package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
  334. package/docs/design/templates/toolbar-text/large.svg +1 -1
  335. package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
  336. package/docs/design/templates/toolbar-text/small.svg +1 -1
  337. package/docs/design/templates/toolbar-text-dark.svg +1 -1
  338. package/docs/design/templates/toolbar-text.svg +1 -1
  339. package/docs/design/templates/toolbar.svg +1 -1
  340. package/docs/design/templates/value-table/details-dark.svg +1 -1
  341. package/docs/design/templates/value-table/details.svg +1 -1
  342. package/docs/design/templates/value-table-dark.svg +1 -1
  343. package/docs/design/templates/value-table.svg +1 -1
  344. package/docs/document-baseline.md +4 -0
  345. package/docs/layout.md +11 -5
  346. package/docs/sunken-panel.md +7 -7
  347. package/docs/ui-analyzer.md +12 -1
  348. package/docs/ui-doctor.md +12 -2
  349. package/docs/webawesome-theme.md +29 -59
  350. package/doctor/index.mjs +39 -30
  351. package/llms.txt +18 -1
  352. package/package.json +3 -2
  353. package/dist/chunk-3BYFWTP3.js.map +0 -1
  354. package/dist/chunk-4FEVHE7C.js.map +0 -1
  355. package/dist/chunk-4NG4Y2Q6.js.map +0 -1
  356. package/dist/chunk-4SQK27MR.js.map +0 -1
  357. package/dist/chunk-5I7QGQVT.js.map +0 -1
  358. package/dist/chunk-5TTZPGUY.js.map +0 -1
  359. package/dist/chunk-5UGLKFBF.js.map +0 -1
  360. package/dist/chunk-6DFDTWGG.js.map +0 -1
  361. package/dist/chunk-ALGYHYXP.js.map +0 -1
  362. package/dist/chunk-AYUHMAI6.js.map +0 -1
  363. package/dist/chunk-BFPBS5Y4.js.map +0 -1
  364. package/dist/chunk-DA3HS64I.js.map +0 -1
  365. package/dist/chunk-DG6G5EPF.js.map +0 -1
  366. package/dist/chunk-DPAUKNB6.js.map +0 -1
  367. package/dist/chunk-DUBUXJA3.js.map +0 -1
  368. package/dist/chunk-EHIMH4J7.js.map +0 -1
  369. package/dist/chunk-FKPKGP2H.js.map +0 -1
  370. package/dist/chunk-GRHJQWV2.js.map +0 -1
  371. package/dist/chunk-HKVJ5MW3.js.map +0 -1
  372. package/dist/chunk-HXTAPIHQ.js.map +0 -1
  373. package/dist/chunk-I3Q7KKYM.js.map +0 -1
  374. package/dist/chunk-JA4J7Y4C.js.map +0 -1
  375. package/dist/chunk-JGIV6ZDA.js.map +0 -1
  376. package/dist/chunk-K47P7QZC.js.map +0 -1
  377. package/dist/chunk-LHSUPNSE.js.map +0 -1
  378. package/dist/chunk-NCSWXG7G.js.map +0 -1
  379. package/dist/chunk-NN6GYOA2.js.map +0 -1
  380. package/dist/chunk-NPNSKX3K.js.map +0 -1
  381. package/dist/chunk-O5GM2JAM.js.map +0 -1
  382. package/dist/chunk-OXO2QJWV.js.map +0 -1
  383. package/dist/chunk-OYQIONQF.js.map +0 -1
  384. package/dist/chunk-PL26TKNK.js.map +0 -1
  385. package/dist/chunk-PSHUSWQH.js.map +0 -1
  386. package/dist/chunk-RFGW735Q.js.map +0 -1
  387. package/dist/chunk-RGS4WX2M.js.map +0 -1
  388. package/dist/chunk-SLWCCHNP.js.map +0 -1
  389. package/dist/chunk-SMZGAPCU.js.map +0 -1
  390. package/dist/chunk-SRSJO5QE.js.map +0 -1
  391. package/dist/chunk-SVLDRGPJ.js.map +0 -1
  392. package/dist/chunk-SX7FJXPJ.js.map +0 -1
  393. package/dist/chunk-TCXDZNCX.js.map +0 -1
  394. package/dist/chunk-TDN5EE3S.js.map +0 -1
  395. package/dist/chunk-TOICTHR2.js.map +0 -1
  396. package/dist/chunk-V4GAQ74C.js.map +0 -1
  397. package/dist/chunk-V4WLBOVJ.js.map +0 -1
  398. package/dist/chunk-VA5TN5PR.js.map +0 -1
  399. package/dist/chunk-WF75U3V4.js.map +0 -1
  400. package/dist/chunk-X5QSICJ3.js.map +0 -1
  401. package/dist/chunk-YDGNU2OD.js.map +0 -1
  402. package/dist/chunk-ZLKZFKLW.js.map +0 -1
  403. package/dist/{panel-toolbar-DDKh4uKd.d.ts → panel-toolbar-CL9tYOkh.d.ts} +1 -1
  404. package/dist/{types-BuHELdXR.d.ts → types-C9BubXfz.d.ts} +1 -1
@@ -0,0 +1,575 @@
1
+ /* A standalone collapsible rail / drawer. Collapsing snaps the panel's own size
2
+ to zero (one reflow, no per-frame width/height animation) while the fixed-size
3
+ content slides out via transform (composited, clipped by overflow). The same
4
+ technique as Workbench and the catalog sidebar (docs/18). */
5
+ /* Safe areas: the panel docks to one screen edge, so its surface grows by
6
+ that edge's unsafe inset and its content compensates for every edge the
7
+ panel still touches, never its interior edge. An expanded inline panel also
8
+ takes its edge away from its direct siblings; collapsing it hands the edge
9
+ back. A panel wrapped in an app-owned grid cell cannot see its siblings, so
10
+ that app routes `--kui-edge-inset-*` itself (docs/app-layouts.md). */
11
+ .kui-collapsible-panel {
12
+ --_kui-collapsible-panel-safe-block-start: var(
13
+ --kui-edge-inset-block-start,
14
+ var(--kui-safe-area-block-start, env(safe-area-inset-top, 0px))
15
+ );
16
+ --_kui-collapsible-panel-safe-block-end: var(
17
+ --kui-edge-inset-block-end,
18
+ var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
19
+ );
20
+ --_kui-collapsible-panel-safe-inline-start: var(
21
+ --kui-edge-inset-inline-start,
22
+ var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
23
+ );
24
+ --_kui-collapsible-panel-safe-inline-end: var(
25
+ --kui-edge-inset-inline-end,
26
+ var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
27
+ );
28
+ /* The content keeps its fixed expanded size (collapsing slides it rather
29
+ than squeezing it), so a flex parent must never shrink the track below
30
+ that size: a shrunk track only clips the content's trailing edge (a
31
+ rail's row badges, a drawer's last row). The panel holds its size and
32
+ the sibling work area gives way. */
33
+ flex-shrink: 0;
34
+ overflow: hidden;
35
+ background: var(--kui-color-surface);
36
+ }
37
+
38
+ .kui-collapsible-panel--left,
39
+ .kui-collapsible-panel--right {
40
+ width: var(--_kui-collapsible-panel-extent);
41
+ min-width: 0;
42
+ height: 100%;
43
+ }
44
+
45
+ .kui-collapsible-panel--left {
46
+ --_kui-collapsible-panel-extent: calc(
47
+ var(--kui-collapsible-panel-width, 17.5rem) +
48
+ var(--_kui-collapsible-panel-safe-inline-start)
49
+ );
50
+ border-inline-end: 1px solid var(--kui-color-neutral-border-normal);
51
+ }
52
+
53
+ .kui-collapsible-panel--right {
54
+ --_kui-collapsible-panel-extent: calc(
55
+ var(--kui-collapsible-panel-width, 17.5rem) +
56
+ var(--_kui-collapsible-panel-safe-inline-end)
57
+ );
58
+ border-inline-start: 1px solid var(--kui-color-neutral-border-normal);
59
+ }
60
+
61
+ .kui-collapsible-panel--bottom {
62
+ --_kui-collapsible-panel-extent: calc(
63
+ var(--kui-collapsible-panel-height, 13.75rem) +
64
+ var(--_kui-collapsible-panel-safe-block-end)
65
+ );
66
+ position: relative;
67
+ width: 100%;
68
+ height: var(--_kui-collapsible-panel-extent);
69
+ min-height: 0;
70
+ border-block-start: 1px solid var(--kui-color-neutral-border-normal);
71
+ }
72
+
73
+ /* The panel's content sees the edges it touches; its interior edge is clear. */
74
+ .kui-collapsible-panel > .kui-collapsible-panel__content {
75
+ --kui-edge-inset-block-start: var(--_kui-collapsible-panel-safe-block-start);
76
+ --kui-edge-inset-block-end: var(--_kui-collapsible-panel-safe-block-end);
77
+ --kui-edge-inset-inline-start: var(
78
+ --_kui-collapsible-panel-safe-inline-start
79
+ );
80
+ --kui-edge-inset-inline-end: var(--_kui-collapsible-panel-safe-inline-end);
81
+ }
82
+
83
+ .kui-collapsible-panel--left > .kui-collapsible-panel__content {
84
+ --kui-edge-inset-inline-end: 0px;
85
+ }
86
+
87
+ .kui-collapsible-panel--right > .kui-collapsible-panel__content {
88
+ --kui-edge-inset-inline-start: 0px;
89
+ }
90
+
91
+ .kui-collapsible-panel--bottom > .kui-collapsible-panel__content {
92
+ --kui-edge-inset-block-start: 0px;
93
+ }
94
+
95
+ /* Content whose only child is a Pane or layout lets that child own the insets;
96
+ anything else is padded here and sees a cleared context. */
97
+ .kui-collapsible-panel__content:not(
98
+ :has(
99
+ > :is(
100
+ [data-component="pane"],
101
+ [data-component="nav-stack"],
102
+ [data-component="split-view"],
103
+ [data-component="workbench"],
104
+ [data-component="tab-scaffold"]
105
+ ):only-child
106
+ )
107
+ ) {
108
+ padding-block: var(--kui-edge-inset-block-start)
109
+ var(--kui-edge-inset-block-end);
110
+ padding-inline: var(--kui-edge-inset-inline-start)
111
+ var(--kui-edge-inset-inline-end);
112
+ }
113
+
114
+ .kui-collapsible-panel__content
115
+ > :not(
116
+ :is(
117
+ [data-component="pane"],
118
+ [data-component="nav-stack"],
119
+ [data-component="split-view"],
120
+ [data-component="workbench"],
121
+ [data-component="tab-scaffold"]
122
+ ):only-child
123
+ ) {
124
+ --kui-edge-inset-block-start: 0px;
125
+ --kui-edge-inset-block-end: 0px;
126
+ --kui-edge-inset-inline-start: 0px;
127
+ --kui-edge-inset-inline-end: 0px;
128
+ }
129
+
130
+ /* An expanded inline panel is the region at its edge, so its direct siblings
131
+ no longer reach that edge. The container flags the edge it has handed to a
132
+ panel in a non-inheriting property, and a style query zeroes that edge on
133
+ the container's children only; the panel that owns the edge (the first
134
+ left, the last right or bottom) inherits the container's value back.
135
+ Selecting the siblings themselves (`:has(~ panel)`, `panel ~ *`) makes
136
+ every element a sibling-rule candidate, so in Chromium each insertion into
137
+ a long list restyles the list's other rows. The flag is set by a keyed
138
+ `:has(> panel)` on the container and read by a parent style lookup, so a
139
+ list without a panel in it pays nothing. */
140
+ @property --_kui-collapsible-panel-owns-inline-start {
141
+ syntax: "*";
142
+ inherits: false;
143
+ }
144
+
145
+ @property --_kui-collapsible-panel-owns-inline-end {
146
+ syntax: "*";
147
+ inherits: false;
148
+ }
149
+
150
+ @property --_kui-collapsible-panel-owns-block-end {
151
+ syntax: "*";
152
+ inherits: false;
153
+ }
154
+
155
+ :where(
156
+ :has(
157
+ > .kui-collapsible-panel--left[data-presentation="inline"]:not(
158
+ [data-collapsed="true"],
159
+ [data-collapsible-overlay="true"] *,
160
+ [data-collapsible-responsive="hidden"] *
161
+ )
162
+ )
163
+ ) {
164
+ --_kui-collapsible-panel-owns-inline-start: true;
165
+ }
166
+
167
+ :where(
168
+ :has(
169
+ > .kui-collapsible-panel--right[data-presentation="inline"]:not(
170
+ [data-collapsed="true"],
171
+ [data-collapsible-overlay="true"] *,
172
+ [data-collapsible-responsive="hidden"] *
173
+ )
174
+ )
175
+ ) {
176
+ --_kui-collapsible-panel-owns-inline-end: true;
177
+ }
178
+
179
+ :where(
180
+ :has(
181
+ > .kui-collapsible-panel--bottom[data-presentation="inline"]:not(
182
+ [data-collapsed="true"],
183
+ [data-collapsible-overlay="true"] *,
184
+ [data-collapsible-responsive="hidden"] *
185
+ )
186
+ )
187
+ ) {
188
+ --_kui-collapsible-panel-owns-block-end: true;
189
+ }
190
+
191
+ @container style(--_kui-collapsible-panel-owns-inline-start: true) {
192
+ :where(*) {
193
+ --kui-edge-inset-inline-start: 0px;
194
+ }
195
+ }
196
+
197
+ @container style(--_kui-collapsible-panel-owns-inline-end: true) {
198
+ :where(*) {
199
+ --kui-edge-inset-inline-end: 0px;
200
+ }
201
+ }
202
+
203
+ @container style(--_kui-collapsible-panel-owns-block-end: true) {
204
+ :where(*) {
205
+ --kui-edge-inset-block-end: 0px;
206
+ }
207
+ }
208
+
209
+ :where(
210
+ .kui-collapsible-panel--left[data-presentation="inline"]:not(
211
+ [data-collapsed="true"],
212
+ [data-collapsible-overlay="true"] *,
213
+ [data-collapsible-responsive="hidden"] *,
214
+ .kui-collapsible-panel--left[data-presentation="inline"]:not(
215
+ [data-collapsed="true"],
216
+ [data-collapsible-overlay="true"] *,
217
+ [data-collapsible-responsive="hidden"] *
218
+ )
219
+ ~ *
220
+ )
221
+ ) {
222
+ --kui-edge-inset-inline-start: inherit;
223
+ }
224
+
225
+ :where(
226
+ .kui-collapsible-panel--right[data-presentation="inline"]:not(
227
+ [data-collapsed="true"],
228
+ [data-collapsible-overlay="true"] *,
229
+ [data-collapsible-responsive="hidden"] *,
230
+ :has(
231
+ ~ .kui-collapsible-panel--right[data-presentation="inline"]:not(
232
+ [data-collapsed="true"],
233
+ [data-collapsible-overlay="true"] *,
234
+ [data-collapsible-responsive="hidden"] *
235
+ )
236
+ )
237
+ )
238
+ ) {
239
+ --kui-edge-inset-inline-end: inherit;
240
+ }
241
+
242
+ :where(
243
+ .kui-collapsible-panel--bottom[data-presentation="inline"]:not(
244
+ [data-collapsed="true"],
245
+ [data-collapsible-overlay="true"] *,
246
+ [data-collapsible-responsive="hidden"] *,
247
+ :has(
248
+ ~ .kui-collapsible-panel--bottom[data-presentation="inline"]:not(
249
+ [data-collapsed="true"],
250
+ [data-collapsible-overlay="true"] *,
251
+ [data-collapsible-responsive="hidden"] *
252
+ )
253
+ )
254
+ )
255
+ ) {
256
+ --kui-edge-inset-block-end: inherit;
257
+ }
258
+
259
+ .kui-collapsible-panel[data-collapsed="true"] {
260
+ border: 0;
261
+ }
262
+
263
+ .kui-collapsible-panel[data-separator="hidden"] {
264
+ border-color: transparent;
265
+ }
266
+
267
+ .kui-collapsible-panel[data-content-overflow="auto"] {
268
+ overflow: auto;
269
+ }
270
+
271
+ .kui-collapsible-panel[data-content-overflow="visible"] {
272
+ z-index: var(--kui-collapsible-panel-popup-z, 5);
273
+ overflow: visible;
274
+ }
275
+
276
+ .kui-collapsible-panel--left[data-collapsed="true"],
277
+ .kui-collapsible-panel--right[data-collapsed="true"] {
278
+ width: 0;
279
+ }
280
+
281
+ .kui-collapsible-panel--bottom[data-collapsed="true"] {
282
+ height: 0;
283
+ }
284
+
285
+ /* The fixed-size sliding content keeps a definite size so the transform reads
286
+ as a slide, not a squeeze. */
287
+ .kui-collapsible-panel__content {
288
+ height: 100%;
289
+ transition: transform 200ms ease;
290
+ }
291
+
292
+ .kui-collapsible-panel--left .kui-collapsible-panel__content,
293
+ .kui-collapsible-panel--right .kui-collapsible-panel__content {
294
+ width: var(--_kui-collapsible-panel-extent);
295
+ }
296
+
297
+ .kui-collapsible-panel--bottom .kui-collapsible-panel__content {
298
+ position: absolute;
299
+ inset-inline: 0;
300
+ inset-block-end: 0;
301
+ width: 100%;
302
+ height: var(--_kui-collapsible-panel-extent);
303
+ }
304
+
305
+ .kui-collapsible-panel[data-collapse-motion="none"]
306
+ .kui-collapsible-panel__content {
307
+ transition: none;
308
+ }
309
+
310
+ .kui-collapsible-panel[data-collapse-motion="fade-slide"][data-collapsed="true"]
311
+ .kui-collapsible-panel__content {
312
+ opacity: 0;
313
+ }
314
+
315
+ .kui-collapsible-panel--left[data-collapsed="true"]
316
+ .kui-collapsible-panel__content {
317
+ transform: translateX(-100%);
318
+ }
319
+
320
+ .kui-collapsible-panel--right[data-collapsed="true"]
321
+ .kui-collapsible-panel__content {
322
+ transform: translateX(100%);
323
+ }
324
+
325
+ .kui-collapsible-panel--bottom[data-collapsed="true"]
326
+ .kui-collapsible-panel__content {
327
+ transform: translateY(100%);
328
+ }
329
+
330
+ /* Compact presentation: wireSidebar marks the host so the panel floats over the
331
+ content as an overlay with a dismissable backdrop instead of taking layout
332
+ space. The panel is fixed to its edge and slides in from off-screen. */
333
+ [data-collapsible-overlay="true"] .kui-collapsible-panel,
334
+ .kui-collapsible-panel[data-presentation="overlay"] {
335
+ position: fixed;
336
+ z-index: var(--kui-collapsible-panel-overlay-z, 40);
337
+ box-shadow: var(--kui-shadow-l);
338
+ }
339
+
340
+ [data-collapsible-overlay="true"] .kui-collapsible-panel--left,
341
+ .kui-collapsible-panel--left[data-presentation="overlay"] {
342
+ inset-block: 0;
343
+ inset-inline-start: 0;
344
+ }
345
+
346
+ [data-collapsible-overlay="true"] .kui-collapsible-panel--right,
347
+ .kui-collapsible-panel--right[data-presentation="overlay"] {
348
+ inset-block: 0;
349
+ inset-inline-end: 0;
350
+ }
351
+
352
+ [data-collapsible-overlay="true"] .kui-collapsible-panel--bottom,
353
+ .kui-collapsible-panel--bottom[data-presentation="overlay"] {
354
+ inset-inline: 0;
355
+ inset-block-end: 0;
356
+ }
357
+
358
+ .kui-collapsible-panel[data-presentation="overlay"][data-collapsed="true"] {
359
+ pointer-events: none;
360
+ }
361
+
362
+ .kui-collapsible-panel[data-presentation="hidden"] {
363
+ display: none;
364
+ }
365
+
366
+ [data-collapsible-responsive="hidden"] .kui-collapsible-panel {
367
+ display: none;
368
+ }
369
+
370
+ /* A collapsed panel's restore control floats in a corner of the panel's own
371
+ container, never of the viewport, so a panel embedded in a page cannot float
372
+ it over page content outside that container. The container becomes the
373
+ corner's containing block and isolates its stacking only while a restore
374
+ control is shown, at zero specificity so an app's own positioning of that
375
+ container wins. The corner is inset from the container's edges plus the
376
+ unsafe area of each edge it reaches. The control belongs to the layer
377
+ beneath open overlays, two below the overlay z-index and so below the
378
+ compact overlay's backdrop: an open overlay covers it as it covers the rest
379
+ of the page, the Workbench rule. A collapsed overlay passes pointer events
380
+ through, so the control is usable again as soon as the overlay closes. */
381
+ :where(:has(> .kui-collapsible-panel__restore)) {
382
+ position: relative;
383
+ isolation: isolate;
384
+ anchor-scope: --kui-restore-drawer;
385
+ }
386
+
387
+ /* An expanded bottom drawer beside the collapsed panel — a direct child of
388
+ that container or of one of its direct children (the app's work-area
389
+ column) — owns the container's bottom, so the corner floats above the
390
+ drawer's top edge instead of over it. The drawer publishes that edge as an
391
+ anchor only there, beside a CollapsiblePanel or ResizableRegion restore
392
+ control (matched by their restore attributes); a drawer nested deeper,
393
+ inside the work area's own content, belongs to another layout and
394
+ publishes nothing. The selector ends on the drawer, not on a universal
395
+ `> * > * > *` scope below the container: a universal selector after a
396
+ :has() container restyles every child of every ancestor of a DOM change in
397
+ Chromium. Without anchor positioning the corner keeps the container's
398
+ bottom edge. */
399
+ :where(
400
+ :has(> [data-panel-restore], > [data-region-restore]),
401
+ :has(> [data-panel-restore], > [data-region-restore]) > *
402
+ )
403
+ > .kui-collapsible-panel--bottom[data-presentation="inline"]:not(
404
+ [data-collapsed="true"],
405
+ [data-collapsible-overlay="true"] *,
406
+ [data-collapsible-responsive="hidden"] *
407
+ ) {
408
+ anchor-name: --kui-restore-drawer;
409
+ }
410
+
411
+ .kui-collapsible-panel__restore {
412
+ --_kui-collapsible-panel-restore-inset: var(
413
+ --kui-collapsible-panel-restore-inset,
414
+ 1rem
415
+ );
416
+ position: absolute;
417
+ /* Hidden while an open side overlay covers the content (see below). */
418
+ visibility: var(
419
+ --_kui-workbench-covered,
420
+ var(
421
+ --_kui-collapsible-panel-covered,
422
+ var(--_kui-resizable-region-covered, inherit)
423
+ )
424
+ );
425
+ z-index: var(
426
+ --kui-collapsible-panel-restore-z,
427
+ calc(var(--kui-collapsible-panel-overlay-z, 40) - 2)
428
+ );
429
+ position-visibility: always;
430
+ inset-block-end: calc(
431
+ var(--_kui-collapsible-panel-restore-inset) +
432
+ var(
433
+ --kui-edge-inset-block-end,
434
+ var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
435
+ )
436
+ );
437
+ /* Above an expanded drawer's top edge when one is in scope (see above). */
438
+ inset-block-end: calc(
439
+ var(--_kui-collapsible-panel-restore-inset) +
440
+ anchor(
441
+ --kui-restore-drawer top,
442
+ var(
443
+ --kui-edge-inset-block-end,
444
+ var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
445
+ )
446
+ )
447
+ );
448
+ }
449
+
450
+ .kui-collapsible-panel__restore[data-position="bottom-start"] {
451
+ inset-inline-start: calc(
452
+ var(--_kui-collapsible-panel-restore-inset) +
453
+ var(
454
+ --kui-edge-inset-inline-start,
455
+ var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
456
+ )
457
+ );
458
+ }
459
+
460
+ .kui-collapsible-panel__restore[data-position="bottom-end"] {
461
+ inset-inline-end: calc(
462
+ var(--_kui-collapsible-panel-restore-inset) +
463
+ var(
464
+ --kui-edge-inset-inline-end,
465
+ var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
466
+ )
467
+ );
468
+ }
469
+
470
+ /* An open side overlay — the wireSidebar compact overlay or a static
471
+ `presentation="overlay"` panel — covers the content beside it, so that
472
+ content's floating controls (a FloatingToolbar, another panel's restore
473
+ corner) are hidden, not merely stacked beneath it: they never paint over
474
+ the overlay whatever stacking context an app puts them in, and hidden they
475
+ leave the tab order and the accessibility tree. They come back as the
476
+ overlay closes. The CollapsiblePanel's own covered context,
477
+ `--_kui-collapsible-panel-covered`, is read by FloatingToolbar and the
478
+ layouts' restore corners; the overlay panels themselves are exempt, so
479
+ their own floating controls stay. */
480
+ [data-collapsible-overlay="true"]:has(
481
+ .kui-collapsible-panel:is(
482
+ .kui-collapsible-panel--left,
483
+ .kui-collapsible-panel--right
484
+ ):not([data-collapsed="true"])
485
+ ) {
486
+ --_kui-collapsible-panel-covered: hidden;
487
+ }
488
+
489
+ [data-collapsible-overlay="true"] .kui-collapsible-panel {
490
+ --_kui-collapsible-panel-covered: initial;
491
+ }
492
+
493
+ /* A static overlay panel sets the flag on its container and clears it again
494
+ on the overlay panels in it, so it reaches the overlay's siblings only —
495
+ never through a universal selector below the :has() container
496
+ (`:has(…) > :not(…)`), which in Chromium restyles every child of every
497
+ ancestor of a DOM change. */
498
+ :where(
499
+ :has(
500
+ > .kui-collapsible-panel:is(
501
+ .kui-collapsible-panel--left,
502
+ .kui-collapsible-panel--right
503
+ )[data-presentation="overlay"]:not([data-collapsed="true"])
504
+ )
505
+ ) {
506
+ --_kui-collapsible-panel-covered: hidden;
507
+ }
508
+
509
+ :where(
510
+ :has(
511
+ > .kui-collapsible-panel:is(
512
+ .kui-collapsible-panel--left,
513
+ .kui-collapsible-panel--right
514
+ )[data-presentation="overlay"]:not([data-collapsed="true"])
515
+ )
516
+ )
517
+ > .kui-collapsible-panel[data-presentation="overlay"] {
518
+ --_kui-collapsible-panel-covered: initial;
519
+ }
520
+
521
+ /* A button does not stretch between its insets the way a div does, so the
522
+ backdrop sizes itself to its containing block explicitly. It sits one below
523
+ the overlay z-index, so an app that moves the overlay moves the backdrop
524
+ with it, and the restore controls stay beneath both. */
525
+ .kui-collapsible-panel__backdrop {
526
+ position: fixed;
527
+ inset: 0;
528
+ width: 100%;
529
+ height: 100%;
530
+ z-index: var(
531
+ --kui-collapsible-panel-backdrop-z,
532
+ calc(var(--kui-collapsible-panel-overlay-z, 40) - 1)
533
+ );
534
+ border: 0;
535
+ padding: 0;
536
+ background: var(--kui-color-scrim, rgb(0 0 0 / 32%));
537
+ cursor: pointer;
538
+ }
539
+
540
+ /* The standard toggle affordance: a plain icon button carrying the per-side
541
+ collapse/expand glyph. */
542
+ .kui-collapsible-panel__toggle {
543
+ display: grid;
544
+ width: 2.5rem;
545
+ height: 2.5rem;
546
+ padding: 0;
547
+ border: 1px solid transparent;
548
+ border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
549
+ color: inherit;
550
+ background: transparent;
551
+ cursor: pointer;
552
+ place-items: center;
553
+ }
554
+
555
+ .kui-collapsible-panel__toggle:hover {
556
+ border-color: var(--kui-color-neutral-border-normal);
557
+ background: var(--kui-color-neutral-fill-normal);
558
+ }
559
+
560
+ .kui-collapsible-panel__toggle:focus-visible {
561
+ outline: var(--kui-focus-ring);
562
+ outline-offset: 1px;
563
+ }
564
+
565
+ .kui-collapsible-panel__toggle svg {
566
+ display: block;
567
+ width: 1.125rem;
568
+ height: 1.125rem;
569
+ }
570
+
571
+ @media (prefers-reduced-motion: reduce) {
572
+ .kui-collapsible-panel__content {
573
+ transition: none;
574
+ }
575
+ }
@@ -0,0 +1,85 @@
1
+ .kui-grid {
2
+ --kui-grid-gap: var(--kui-layout-item-gap, 0.5rem);
3
+ /* Private per-instance values are reset on every Grid so a nested Grid never
4
+ inherits its ancestor's; the inline style overrides them per prop. */
5
+ --_kui-grid-gap: var(--kui-grid-gap);
6
+ --_kui-grid-flex: 0 1 auto;
7
+ --_kui-grid-inset-top: 0;
8
+ --_kui-grid-inset-right: 0;
9
+ --_kui-grid-inset-bottom: 0;
10
+ --_kui-grid-inset-left: 0;
11
+
12
+ display: grid;
13
+ min-width: 0;
14
+ min-height: 0;
15
+ box-sizing: border-box;
16
+ padding: var(--_kui-grid-inset-top, 0) var(--_kui-grid-inset-right, 0)
17
+ var(--_kui-grid-inset-bottom, 0) var(--_kui-grid-inset-left, 0);
18
+ flex: var(--_kui-grid-flex, initial);
19
+ grid-template-columns: repeat(var(--_kui-grid-columns), minmax(0, 1fr));
20
+ gap: var(--_kui-grid-gap, var(--kui-grid-gap));
21
+ }
22
+
23
+ .kui-grid[data-control-insets*="t"] {
24
+ --_kui-grid-inset-top: var(--kui-layout-inline-margin, 0.5rem);
25
+ }
26
+
27
+ .kui-grid[data-control-insets*="r"] {
28
+ --_kui-grid-inset-right: var(--kui-layout-inline-margin, 0.5rem);
29
+ }
30
+
31
+ .kui-grid[data-control-insets*="b"] {
32
+ --_kui-grid-inset-bottom: var(--kui-layout-inline-margin, 0.5rem);
33
+ }
34
+
35
+ .kui-grid[data-control-insets*="l"] {
36
+ --_kui-grid-inset-left: var(--kui-layout-inline-margin, 0.5rem);
37
+ }
38
+
39
+ .kui-grid[data-text-insets*="t"] {
40
+ --_kui-grid-inset-top: calc(
41
+ var(--kui-layout-inline-margin, 0.5rem) + 1px +
42
+ var(--kui-layout-item-padding, 0.5rem)
43
+ );
44
+ }
45
+
46
+ .kui-grid[data-text-insets*="r"] {
47
+ --_kui-grid-inset-right: calc(
48
+ var(--kui-layout-inline-margin, 0.5rem) + 1px +
49
+ var(--kui-layout-item-padding, 0.5rem)
50
+ );
51
+ }
52
+
53
+ .kui-grid[data-text-insets*="b"] {
54
+ --_kui-grid-inset-bottom: calc(
55
+ var(--kui-layout-inline-margin, 0.5rem) + 1px +
56
+ var(--kui-layout-item-padding, 0.5rem)
57
+ );
58
+ }
59
+
60
+ .kui-grid[data-text-insets*="l"] {
61
+ --_kui-grid-inset-left: calc(
62
+ var(--kui-layout-inline-margin, 0.5rem) + 1px +
63
+ var(--kui-layout-item-padding, 0.5rem)
64
+ );
65
+ }
66
+
67
+ .kui-grid[data-min-column-width="true"] {
68
+ grid-template-columns: repeat(
69
+ auto-fit,
70
+ minmax(min(100%, var(--_kui-grid-min-column-width)), 1fr)
71
+ );
72
+ }
73
+
74
+ .kui-grid[data-auto-fill="true"] {
75
+ grid-template-columns: repeat(
76
+ auto-fill,
77
+ minmax(min(100%, var(--_kui-grid-min-column-width)), 1fr)
78
+ );
79
+ }
80
+
81
+ /* `fill`: the layout root of a definite-height parent (an app root or a
82
+ fixed-height frame) takes its full height. Inside a flex layout use `flex`. */
83
+ .kui-grid[data-fill="true"] {
84
+ height: 100%;
85
+ }