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

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 (443) hide show
  1. package/README.md +41 -1
  2. package/ai/component-catalog.json +235 -30
  3. package/ai/component-composition.json +131 -14
  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/components/nav-stack.md +1 -0
  12. package/ai/components/select.md +1 -0
  13. package/ai/components/split-view.md +1 -0
  14. package/ai/components/text.md +4 -2
  15. package/ai/components/toolbar-control-group.md +20 -3
  16. package/ai/components/toolbar-text.md +19 -4
  17. package/ai/components/toolbar.md +10 -4
  18. package/ai/public-api-signatures-v1.md +141 -66
  19. package/ai/skill.md +58 -5
  20. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  21. package/analyzer/index.mjs +11 -1
  22. package/dist/app-tab.js +1 -1
  23. package/dist/badge.d.ts +5 -3
  24. package/dist/badge.js +1 -1
  25. package/dist/browser/catalog.js +7 -7
  26. package/dist/browser/collapsible-panel.js +3 -3
  27. package/dist/browser/list-header.js +1 -1
  28. package/dist/browser/nav-stack.js +1 -1
  29. package/dist/browser/select.js +1 -1
  30. package/dist/browser/split-view.js +1 -1
  31. package/dist/browser/workbench.js +4 -4
  32. package/dist/catalog-resources.d.ts +6 -6
  33. package/dist/catalog-resources.js +1 -1
  34. package/dist/catalog-resources.js.map +1 -1
  35. package/dist/catalog.d.ts +5 -5
  36. package/dist/catalog.js +13 -13
  37. package/dist/catalog.js.map +1 -1
  38. package/dist/chip.d.ts +3 -2
  39. package/dist/chip.js +1 -1
  40. package/dist/{chunk-SVLDRGPJ.js → chunk-3RE2JMZU.js} +7 -3
  41. package/dist/chunk-3RE2JMZU.js.map +1 -0
  42. package/dist/{chunk-YDGNU2OD.js → chunk-4Y4L5YEI.js} +7 -2
  43. package/dist/chunk-4Y4L5YEI.js.map +1 -0
  44. package/dist/{chunk-V4WLBOVJ.js → chunk-5BZBIRQG.js} +4 -4
  45. package/dist/chunk-5BZBIRQG.js.map +1 -0
  46. package/dist/{chunk-SX7FJXPJ.js → chunk-5D3WDMIK.js} +4 -4
  47. package/dist/chunk-5D3WDMIK.js.map +1 -0
  48. package/dist/{chunk-O5GM2JAM.js → chunk-6VQPLV3O.js} +9 -9
  49. package/dist/chunk-6VQPLV3O.js.map +1 -0
  50. package/dist/{chunk-JA4J7Y4C.js → chunk-75I3SNUJ.js} +2 -2
  51. package/dist/chunk-75I3SNUJ.js.map +1 -0
  52. package/dist/{chunk-K47P7QZC.js → chunk-7QQ3HE47.js} +2 -2
  53. package/dist/chunk-7QQ3HE47.js.map +1 -0
  54. package/dist/{chunk-5I7QGQVT.js → chunk-AN5IWMTM.js} +2 -2
  55. package/dist/chunk-AN5IWMTM.js.map +1 -0
  56. package/dist/{chunk-3BYFWTP3.js → chunk-AOAW55JN.js} +2 -2
  57. package/dist/chunk-AOAW55JN.js.map +1 -0
  58. package/dist/{chunk-5UGLKFBF.js → chunk-ARZ4RSQO.js} +5 -6
  59. package/dist/chunk-ARZ4RSQO.js.map +1 -0
  60. package/dist/{chunk-TCXDZNCX.js → chunk-BJLXE56E.js} +6 -6
  61. package/dist/chunk-BJLXE56E.js.map +1 -0
  62. package/dist/{chunk-RGS4WX2M.js → chunk-BYHGRKC3.js} +2 -2
  63. package/dist/chunk-BYHGRKC3.js.map +1 -0
  64. package/dist/{chunk-ZLKZFKLW.js → chunk-CEJ5FK6G.js} +2 -2
  65. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  66. package/dist/{chunk-SMZGAPCU.js → chunk-DQDTZE4W.js} +2 -2
  67. package/dist/chunk-DQDTZE4W.js.map +1 -0
  68. package/dist/{chunk-JGIV6ZDA.js → chunk-EFDCALR3.js} +2 -2
  69. package/dist/chunk-EFDCALR3.js.map +1 -0
  70. package/dist/{chunk-FKPKGP2H.js → chunk-G4VKQP7B.js} +2 -2
  71. package/dist/chunk-G4VKQP7B.js.map +1 -0
  72. package/dist/{chunk-DPAUKNB6.js → chunk-GS2QD3N7.js} +3 -3
  73. package/dist/chunk-GS2QD3N7.js.map +1 -0
  74. package/dist/{chunk-SLWCCHNP.js → chunk-H45DAZBL.js} +2 -2
  75. package/dist/chunk-H45DAZBL.js.map +1 -0
  76. package/dist/{chunk-DA3HS64I.js → chunk-H7ZJEI3H.js} +3 -3
  77. package/dist/chunk-H7ZJEI3H.js.map +1 -0
  78. package/dist/{chunk-V4GAQ74C.js → chunk-HFLGWMG3.js} +4 -4
  79. package/dist/chunk-HFLGWMG3.js.map +1 -0
  80. package/dist/{chunk-HXTAPIHQ.js → chunk-HFQDSSED.js} +6 -6
  81. package/dist/chunk-HFQDSSED.js.map +1 -0
  82. package/dist/{chunk-WF75U3V4.js → chunk-HPREYDKV.js} +2 -2
  83. package/dist/chunk-HPREYDKV.js.map +1 -0
  84. package/dist/{chunk-VA5TN5PR.js → chunk-I4SDIMFA.js} +2 -2
  85. package/dist/chunk-I4SDIMFA.js.map +1 -0
  86. package/dist/{chunk-4SQK27MR.js → chunk-IM3GKYOG.js} +2 -2
  87. package/dist/chunk-IM3GKYOG.js.map +1 -0
  88. package/dist/{chunk-ALGYHYXP.js → chunk-J3AWE5I4.js} +2 -2
  89. package/dist/chunk-J3AWE5I4.js.map +1 -0
  90. package/dist/{chunk-OXO2QJWV.js → chunk-JOR5LGYE.js} +2 -2
  91. package/dist/chunk-JOR5LGYE.js.map +1 -0
  92. package/dist/{chunk-SRSJO5QE.js → chunk-LAZLBC2Q.js} +2 -2
  93. package/dist/chunk-LAZLBC2Q.js.map +1 -0
  94. package/dist/{chunk-RFGW735Q.js → chunk-LRAIS3YB.js} +2 -2
  95. package/dist/chunk-LRAIS3YB.js.map +1 -0
  96. package/dist/{chunk-PL26TKNK.js → chunk-M6BWQMQY.js} +8 -8
  97. package/dist/chunk-M6BWQMQY.js.map +1 -0
  98. package/dist/{chunk-AYUHMAI6.js → chunk-MXNIVEVL.js} +2 -2
  99. package/dist/chunk-MXNIVEVL.js.map +1 -0
  100. package/dist/{chunk-4NG4Y2Q6.js → chunk-NJZMR7HM.js} +2 -2
  101. package/dist/chunk-NJZMR7HM.js.map +1 -0
  102. package/dist/{chunk-DG6G5EPF.js → chunk-NMWDHZVM.js} +2 -2
  103. package/dist/chunk-NMWDHZVM.js.map +1 -0
  104. package/dist/{chunk-X5QSICJ3.js → chunk-NS2TBYM4.js} +2 -2
  105. package/dist/chunk-NS2TBYM4.js.map +1 -0
  106. package/dist/{chunk-5TTZPGUY.js → chunk-NVKRZ5DI.js} +6 -6
  107. package/dist/chunk-NVKRZ5DI.js.map +1 -0
  108. package/dist/{chunk-4FEVHE7C.js → chunk-NVRJ7C3W.js} +4 -4
  109. package/dist/chunk-NVRJ7C3W.js.map +1 -0
  110. package/dist/{chunk-BFPBS5Y4.js → chunk-O27D24CA.js} +2 -2
  111. package/dist/chunk-O27D24CA.js.map +1 -0
  112. package/dist/{chunk-DUBUXJA3.js → chunk-PQQQXJGV.js} +4 -2
  113. package/dist/chunk-PQQQXJGV.js.map +1 -0
  114. package/dist/{chunk-6DFDTWGG.js → chunk-QYXKMLHO.js} +2 -2
  115. package/dist/chunk-QYXKMLHO.js.map +1 -0
  116. package/dist/{chunk-TOICTHR2.js → chunk-RRCD3A6G.js} +14 -6
  117. package/dist/chunk-RRCD3A6G.js.map +1 -0
  118. package/dist/{chunk-I3Q7KKYM.js → chunk-S3ECMF23.js} +2 -2
  119. package/dist/chunk-S3ECMF23.js.map +1 -0
  120. package/dist/{chunk-PSHUSWQH.js → chunk-S4ZGTDSG.js} +2 -2
  121. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  122. package/dist/{chunk-HKVJ5MW3.js → chunk-VHXHLZ6R.js} +12 -3
  123. package/dist/chunk-VHXHLZ6R.js.map +1 -0
  124. package/dist/{chunk-NPNSKX3K.js → chunk-VLPE6OPN.js} +2 -2
  125. package/dist/chunk-VLPE6OPN.js.map +1 -0
  126. package/dist/{chunk-NCSWXG7G.js → chunk-VLQUXZKA.js} +9 -3
  127. package/dist/chunk-VLQUXZKA.js.map +1 -0
  128. package/dist/{chunk-EHIMH4J7.js → chunk-VR7MWD2X.js} +10 -4
  129. package/dist/chunk-VR7MWD2X.js.map +1 -0
  130. package/dist/chunk-WJN3V2H5.js +256 -0
  131. package/dist/chunk-WJN3V2H5.js.map +1 -0
  132. package/dist/{chunk-NN6GYOA2.js → chunk-XIZRXI7N.js} +2 -2
  133. package/dist/chunk-XIZRXI7N.js.map +1 -0
  134. package/dist/{chunk-TDN5EE3S.js → chunk-Y6KT7ZTR.js} +2 -2
  135. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  136. package/dist/{chunk-LHSUPNSE.js → chunk-YLJ6X3AC.js} +2 -2
  137. package/dist/chunk-YLJ6X3AC.js.map +1 -0
  138. package/dist/{chunk-OYQIONQF.js → chunk-Z4EPMX25.js} +5 -5
  139. package/dist/chunk-Z4EPMX25.js.map +1 -0
  140. package/dist/{chunk-GRHJQWV2.js → chunk-Z6PE5T7N.js} +6 -6
  141. package/dist/chunk-Z6PE5T7N.js.map +1 -0
  142. package/dist/collapsible-panel.d.ts +6 -6
  143. package/dist/collapsible-panel.js +3 -3
  144. package/dist/collapsible-panel.js.map +1 -1
  145. package/dist/content-item.d.ts +13 -2
  146. package/dist/content-item.js +1 -1
  147. package/dist/css-values.js +1 -1
  148. package/dist/device-class.js +1 -1
  149. package/dist/device-class.js.map +1 -1
  150. package/dist/disclosure-arrow.js +1 -1
  151. package/dist/empty-state.js +1 -1
  152. package/dist/floating-toolbar.d.ts +1 -1
  153. package/dist/floating-toolbar.js +1 -1
  154. package/dist/grid.d.ts +10 -3
  155. package/dist/grid.js +1 -1
  156. package/dist/help-tags-register.js +1 -1
  157. package/dist/help-tags-register.js.map +1 -1
  158. package/dist/index.d.ts +28 -26
  159. package/dist/index.js +41 -40
  160. package/dist/list-action-row.js +1 -1
  161. package/dist/list-header.d.ts +1 -0
  162. package/dist/list-header.js +1 -1
  163. package/dist/list-inset-control.js +1 -1
  164. package/dist/list-inset-text.js +1 -1
  165. package/dist/list-item.js +1 -1
  166. package/dist/list.d.ts +2 -2
  167. package/dist/list.js +1 -1
  168. package/dist/loading-spinner.d.ts +4 -2
  169. package/dist/loading-spinner.js +1 -1
  170. package/dist/lucide-icon.d.ts +3 -1
  171. package/dist/lucide-icon.js +1 -1
  172. package/dist/nav-stack.d.ts +2 -1
  173. package/dist/nav-stack.js +1 -1
  174. package/dist/pane.js +1 -1
  175. package/dist/popup-menu-register.js +7 -7
  176. package/dist/popup-menu-register.js.map +1 -1
  177. package/dist/popup-menu.js +1 -1
  178. package/dist/resizable-region.d.ts +1 -1
  179. package/dist/resizable-region.js +1 -1
  180. package/dist/row.d.ts +2 -2
  181. package/dist/row.js +1 -1
  182. package/dist/segmented-control.js +1 -1
  183. package/dist/select-register.js +9 -6
  184. package/dist/select-register.js.map +1 -1
  185. package/dist/select.d.ts +2 -1
  186. package/dist/select.js +1 -1
  187. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  188. package/dist/skeleton.js +1 -1
  189. package/dist/spacer.js +1 -1
  190. package/dist/split-view.d.ts +2 -2
  191. package/dist/split-view.js +2 -2
  192. package/dist/split-view.js.map +1 -1
  193. package/dist/state-banner.d.ts +5 -3
  194. package/dist/state-banner.js +1 -1
  195. package/dist/styles/badge.css +1 -1
  196. package/dist/styles/chip.css +1 -1
  197. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  198. package/dist/styles/components/actions/popup-menu/popup-menu.css +285 -0
  199. package/dist/styles/components/actions/toolbar/toolbar.css +424 -0
  200. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +841 -0
  201. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +164 -0
  202. package/dist/styles/components/collections/list/list.css +133 -0
  203. package/dist/styles/components/collections/list-action-row/list-action-row.css +258 -0
  204. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  205. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  206. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  207. package/dist/styles/components/collections/list-item/list-item.css +255 -0
  208. package/dist/styles/components/data-display/value-table/value-table.css +105 -0
  209. package/dist/styles/components/feedback/badge/badge.css +118 -0
  210. package/dist/styles/components/feedback/chip/chip.css +138 -0
  211. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  212. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  213. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  214. package/dist/styles/components/feedback/state-banner/state-banner.css +248 -0
  215. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  216. package/dist/styles/components/forms/select/select.css +454 -0
  217. package/dist/styles/components/forms/token-search-field/token-search-field.css +381 -0
  218. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +575 -0
  219. package/dist/styles/components/layout/grid/grid.css +85 -0
  220. package/dist/styles/components/layout/pane/pane.css +263 -0
  221. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  222. package/dist/styles/components/layout/row/row.css +111 -0
  223. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  224. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  225. package/dist/styles/components/layout/workbench/workbench.css +1067 -0
  226. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  227. package/dist/styles/components/navigation/app-tab/app-tab.css +376 -0
  228. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  229. package/dist/styles/components/navigation/nav-stack/nav-stack.css +248 -0
  230. package/dist/styles/components/navigation/tab-bar/tab-bar.css +183 -0
  231. package/dist/styles/components/navigation/tab-scaffold/tab-scaffold.css +207 -0
  232. package/dist/styles/components/surfaces/content-item/content-item.css +120 -0
  233. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +29 -0
  234. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +56 -0
  235. package/dist/styles/components/typography/text/text.css +158 -0
  236. package/dist/styles/content-item.css +46 -1
  237. package/dist/styles/document.css +10 -0
  238. package/dist/styles/foundation.css +9 -6
  239. package/dist/styles/grid.css +50 -0
  240. package/dist/styles/lucide-icon.css +4 -0
  241. package/dist/styles/nav-stack.css +11 -0
  242. package/dist/styles/text.css +19 -0
  243. package/dist/styles/toolbar-control-group.css +51 -0
  244. package/dist/styles/toolbar-text.css +11 -0
  245. package/dist/styles/toolbar.css +32 -0
  246. package/dist/styles/webawesome.css +23 -6
  247. package/dist/sunken-panel.d.ts +1 -1
  248. package/dist/sunken-panel.js +1 -1
  249. package/dist/surface-scaffold.js +1 -1
  250. package/dist/tab-bar.js +1 -1
  251. package/dist/tab-scaffold.d.ts +1 -1
  252. package/dist/tab-scaffold.js +1 -1
  253. package/dist/tab-scaffold.js.map +1 -1
  254. package/dist/text.d.ts +16 -9
  255. package/dist/text.js +1 -1
  256. package/dist/token-search-field.d.ts +1 -1
  257. package/dist/token-search-field.js +1 -1
  258. package/dist/{token-search-field-CVGwDn2y.d.ts → token-search-model-DTcTXWMS.d.ts} +54 -54
  259. package/dist/token-search-model.d.ts +1 -1
  260. package/dist/token-search-model.js +1 -1
  261. package/dist/toolbar-control-group.d.ts +14 -2
  262. package/dist/toolbar-control-group.js +1 -1
  263. package/dist/toolbar-text.d.ts +10 -2
  264. package/dist/toolbar-text.js +1 -1
  265. package/dist/toolbar.d.ts +1 -1
  266. package/dist/toolbar.js +1 -1
  267. package/dist/value-table.js +1 -1
  268. package/dist/wire-catalog.js +2 -2
  269. package/dist/wire-catalog.js.map +1 -1
  270. package/dist/wire-content-items.js +1 -1
  271. package/dist/wire-content-items.js.map +1 -1
  272. package/dist/wire-nav-stack.js +59 -23
  273. package/dist/wire-nav-stack.js.map +1 -1
  274. package/dist/wire-resizable-regions.js +1 -1
  275. package/dist/wire-scroll-dividers.js +1 -1
  276. package/dist/wire-sidebar.js +1 -1
  277. package/dist/wire-sidebar.js.map +1 -1
  278. package/dist/wire-tab-bars.js +1 -1
  279. package/dist/wire-tab-scaffold.js +1 -1
  280. package/dist/wire-tab-scaffold.js.map +1 -1
  281. package/dist/wire-token-search-fields.d.ts +1 -1
  282. package/dist/wire-token-search-fields.js +1 -1
  283. package/dist/wire-toolbar-visibility.d.ts +13 -0
  284. package/dist/wire-toolbar-visibility.js +3 -0
  285. package/dist/wire-toolbar-visibility.js.map +1 -0
  286. package/dist/wire-workbench.js +1 -1
  287. package/dist/workbench.d.ts +3 -3
  288. package/dist/workbench.js +1 -1
  289. package/docs/accessibility.md +15 -0
  290. package/docs/collapsible-panel.md +5 -1
  291. package/docs/component-contract.md +56 -7
  292. package/docs/component-selection.md +73 -5
  293. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  294. package/docs/design/templates/empty-state/filtered.svg +1 -1
  295. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  296. package/docs/design/templates/empty-state/with-action.svg +1 -1
  297. package/docs/design/templates/empty-state-dark.svg +1 -1
  298. package/docs/design/templates/empty-state.svg +1 -1
  299. package/docs/design/templates/list/stack-dark.svg +1 -1
  300. package/docs/design/templates/list/stack.svg +1 -1
  301. package/docs/design/templates/list-dark.svg +1 -1
  302. package/docs/design/templates/list-header/action-dark.svg +1 -1
  303. package/docs/design/templates/list-header/action.svg +1 -1
  304. package/docs/design/templates/list-header/count-dark.svg +1 -1
  305. package/docs/design/templates/list-header/count.svg +1 -1
  306. package/docs/design/templates/list-header/inline-action-dark.svg +1 -1
  307. package/docs/design/templates/list-header/inline-action.svg +1 -1
  308. package/docs/design/templates/list-header/size-l-dark.svg +1 -1
  309. package/docs/design/templates/list-header/size-l.svg +1 -1
  310. package/docs/design/templates/list-header/size-m-dark.svg +1 -1
  311. package/docs/design/templates/list-header/size-m.svg +1 -1
  312. package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
  313. package/docs/design/templates/list-header/size-xl.svg +1 -1
  314. package/docs/design/templates/list-header/size-xs-dark.svg +1 -1
  315. package/docs/design/templates/list-header/size-xs.svg +1 -1
  316. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  317. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  318. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  319. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  320. package/docs/design/templates/list-header-dark.svg +1 -1
  321. package/docs/design/templates/list-header.svg +1 -1
  322. package/docs/design/templates/list.svg +1 -1
  323. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  324. package/docs/design/templates/segmented-control/equal.svg +1 -1
  325. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
  326. package/docs/design/templates/segmented-control/pill-small.svg +1 -1
  327. package/docs/design/templates/segmented-control-dark.svg +1 -1
  328. package/docs/design/templates/segmented-control.svg +1 -1
  329. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  330. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  331. package/docs/design/templates/tab-bar-dark.svg +1 -1
  332. package/docs/design/templates/tab-bar.svg +1 -1
  333. package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
  334. package/docs/design/templates/token-search-field/empty.svg +1 -1
  335. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
  336. package/docs/design/templates/token-search-field/tokens.svg +1 -1
  337. package/docs/design/templates/token-search-field-dark.svg +1 -1
  338. package/docs/design/templates/token-search-field.svg +1 -1
  339. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  340. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  341. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -0
  342. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -0
  343. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -0
  344. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -0
  345. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  346. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  347. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  348. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  349. package/docs/design/templates/toolbar-control-group/icon-tile-brand-dark.svg +1 -0
  350. package/docs/design/templates/toolbar-control-group/icon-tile-brand.svg +1 -0
  351. package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -0
  352. package/docs/design/templates/toolbar-control-group/icon-tile-danger.svg +1 -0
  353. package/docs/design/templates/toolbar-control-group/icon-tile-neutral-dark.svg +1 -0
  354. package/docs/design/templates/toolbar-control-group/icon-tile-neutral.svg +1 -0
  355. package/docs/design/templates/toolbar-control-group/icon-tile-success-dark.svg +1 -0
  356. package/docs/design/templates/toolbar-control-group/icon-tile-success.svg +1 -0
  357. package/docs/design/templates/toolbar-control-group/icon-tile-warning-dark.svg +1 -0
  358. package/docs/design/templates/toolbar-control-group/icon-tile-warning.svg +1 -0
  359. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  360. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  361. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  362. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  363. package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
  364. package/docs/design/templates/toolbar-control-group.svg +1 -1
  365. package/docs/design/templates/toolbar-dark.svg +1 -1
  366. package/docs/design/templates/toolbar-text/dark-tone-dark.svg +1 -0
  367. package/docs/design/templates/toolbar-text/dark-tone.svg +1 -0
  368. package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
  369. package/docs/design/templates/toolbar-text/default.svg +1 -1
  370. package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
  371. package/docs/design/templates/toolbar-text/large.svg +1 -1
  372. package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
  373. package/docs/design/templates/toolbar-text/small.svg +1 -1
  374. package/docs/design/templates/toolbar-text-dark.svg +1 -1
  375. package/docs/design/templates/toolbar-text.svg +1 -1
  376. package/docs/design/templates/toolbar.svg +1 -1
  377. package/docs/design/templates/value-table/details-dark.svg +1 -1
  378. package/docs/design/templates/value-table/details.svg +1 -1
  379. package/docs/design/templates/value-table-dark.svg +1 -1
  380. package/docs/design/templates/value-table.svg +1 -1
  381. package/docs/design/templates.md +2 -0
  382. package/docs/document-baseline.md +4 -0
  383. package/docs/layout.md +23 -6
  384. package/docs/nav-stack.md +5 -1
  385. package/docs/sunken-panel.md +7 -7
  386. package/docs/ui-analyzer.md +12 -1
  387. package/docs/ui-doctor.md +12 -2
  388. package/docs/webawesome-theme.md +29 -59
  389. package/doctor/index.mjs +39 -30
  390. package/llms.txt +42 -1
  391. package/package.json +7 -2
  392. package/dist/chunk-3BYFWTP3.js.map +0 -1
  393. package/dist/chunk-4FEVHE7C.js.map +0 -1
  394. package/dist/chunk-4NG4Y2Q6.js.map +0 -1
  395. package/dist/chunk-4SQK27MR.js.map +0 -1
  396. package/dist/chunk-5I7QGQVT.js.map +0 -1
  397. package/dist/chunk-5TTZPGUY.js.map +0 -1
  398. package/dist/chunk-5UGLKFBF.js.map +0 -1
  399. package/dist/chunk-6DFDTWGG.js.map +0 -1
  400. package/dist/chunk-ALGYHYXP.js.map +0 -1
  401. package/dist/chunk-AYUHMAI6.js.map +0 -1
  402. package/dist/chunk-BFPBS5Y4.js.map +0 -1
  403. package/dist/chunk-DA3HS64I.js.map +0 -1
  404. package/dist/chunk-DG6G5EPF.js.map +0 -1
  405. package/dist/chunk-DPAUKNB6.js.map +0 -1
  406. package/dist/chunk-DUBUXJA3.js.map +0 -1
  407. package/dist/chunk-EHIMH4J7.js.map +0 -1
  408. package/dist/chunk-FKPKGP2H.js.map +0 -1
  409. package/dist/chunk-GRHJQWV2.js.map +0 -1
  410. package/dist/chunk-HKVJ5MW3.js.map +0 -1
  411. package/dist/chunk-HXTAPIHQ.js.map +0 -1
  412. package/dist/chunk-I3Q7KKYM.js.map +0 -1
  413. package/dist/chunk-JA4J7Y4C.js.map +0 -1
  414. package/dist/chunk-JGIV6ZDA.js.map +0 -1
  415. package/dist/chunk-K47P7QZC.js.map +0 -1
  416. package/dist/chunk-LHSUPNSE.js.map +0 -1
  417. package/dist/chunk-NCSWXG7G.js.map +0 -1
  418. package/dist/chunk-NN6GYOA2.js.map +0 -1
  419. package/dist/chunk-NPNSKX3K.js.map +0 -1
  420. package/dist/chunk-O5GM2JAM.js.map +0 -1
  421. package/dist/chunk-OXO2QJWV.js.map +0 -1
  422. package/dist/chunk-OYQIONQF.js.map +0 -1
  423. package/dist/chunk-PL26TKNK.js.map +0 -1
  424. package/dist/chunk-PSHUSWQH.js.map +0 -1
  425. package/dist/chunk-RFGW735Q.js.map +0 -1
  426. package/dist/chunk-RGS4WX2M.js.map +0 -1
  427. package/dist/chunk-SLWCCHNP.js.map +0 -1
  428. package/dist/chunk-SMZGAPCU.js.map +0 -1
  429. package/dist/chunk-SRSJO5QE.js.map +0 -1
  430. package/dist/chunk-SVLDRGPJ.js.map +0 -1
  431. package/dist/chunk-SX7FJXPJ.js.map +0 -1
  432. package/dist/chunk-TCXDZNCX.js.map +0 -1
  433. package/dist/chunk-TDN5EE3S.js.map +0 -1
  434. package/dist/chunk-TOICTHR2.js.map +0 -1
  435. package/dist/chunk-V4GAQ74C.js.map +0 -1
  436. package/dist/chunk-V4WLBOVJ.js.map +0 -1
  437. package/dist/chunk-VA5TN5PR.js.map +0 -1
  438. package/dist/chunk-WF75U3V4.js.map +0 -1
  439. package/dist/chunk-X5QSICJ3.js.map +0 -1
  440. package/dist/chunk-YDGNU2OD.js.map +0 -1
  441. package/dist/chunk-ZLKZFKLW.js.map +0 -1
  442. package/dist/{panel-toolbar-DDKh4uKd.d.ts → panel-toolbar-CL9tYOkh.d.ts} +1 -1
  443. package/dist/{types-BuHELdXR.d.ts → types-C9BubXfz.d.ts} +1 -1
@@ -754,6 +754,12 @@
754
754
  "helper": "wireNavStack",
755
755
  "meaning": "Marks the inert, aria-hidden snapshot of the outgoing chrome shown during the cross-fade."
756
756
  },
757
+ {
758
+ "name": "data-nav-revealed",
759
+ "on": "kui-nav-stack__view",
760
+ "helper": "wireNavStack",
761
+ "meaning": "\"true\" on the preserved, aria-hidden previous view while an incoming view slides over it."
762
+ },
757
763
  {
758
764
  "name": "data-nav-exiting",
759
765
  "on": "kui-nav-stack__view",
@@ -908,6 +914,12 @@
908
914
  "helper": "wireNavStack",
909
915
  "meaning": "Marks the inert, aria-hidden snapshot of the outgoing chrome shown during the cross-fade."
910
916
  },
917
+ {
918
+ "name": "data-nav-revealed",
919
+ "on": "kui-nav-stack__view",
920
+ "helper": "wireNavStack",
921
+ "meaning": "\"true\" on the preserved, aria-hidden previous view while an incoming view slides over it."
922
+ },
911
923
  {
912
924
  "name": "data-nav-exiting",
913
925
  "on": "kui-nav-stack__view",
@@ -1460,7 +1472,7 @@
1460
1472
  ],
1461
1473
  "wiring": {
1462
1474
  "required": false,
1463
- "helpers": ["wireScrollDividers"],
1475
+ "helpers": ["wireScrollDividers", "wireToolbarVisibility"],
1464
1476
  "obligations": [],
1465
1477
  "stateAttributes": [
1466
1478
  {
@@ -1474,6 +1486,18 @@
1474
1486
  "on": "a Toolbar named as targets chrome",
1475
1487
  "helper": "wireScrollDividers",
1476
1488
  "meaning": "The sides, in t/r/b/l order, on which this chrome currently draws its scroll divider: the side facing the scroller while content is hidden beyond it. Re-applied if a re-render drops it."
1489
+ },
1490
+ {
1491
+ "name": "data-toolbar-width-hidden",
1492
+ "on": "ToolbarText, ToolbarControlGroup and its paired busy status",
1493
+ "helper": "wireToolbarVisibility",
1494
+ "meaning": "True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers."
1495
+ },
1496
+ {
1497
+ "name": "data-toolbar-visibility-probe",
1498
+ "on": "private aria-hidden measurement boxes under Toolbar",
1499
+ "helper": "wireToolbarVisibility",
1500
+ "meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
1477
1501
  }
1478
1502
  ]
1479
1503
  },
@@ -1570,9 +1594,22 @@
1570
1594
  ],
1571
1595
  "wiring": {
1572
1596
  "required": false,
1573
- "helpers": [],
1597
+ "helpers": ["wireToolbarVisibility"],
1574
1598
  "obligations": [],
1575
- "stateAttributes": []
1599
+ "stateAttributes": [
1600
+ {
1601
+ "name": "data-toolbar-width-hidden",
1602
+ "on": "ToolbarText, ToolbarControlGroup and its paired busy status",
1603
+ "helper": "wireToolbarVisibility",
1604
+ "meaning": "True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers."
1605
+ },
1606
+ {
1607
+ "name": "data-toolbar-visibility-probe",
1608
+ "on": "private aria-hidden measurement boxes under Toolbar",
1609
+ "helper": "wireToolbarVisibility",
1610
+ "meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
1611
+ }
1612
+ ]
1576
1613
  },
1577
1614
  "responsive": { "owner": "not-applicable", "behaviors": [] },
1578
1615
  "layout": {
@@ -1585,7 +1622,30 @@
1585
1622
  "Name an icon-only button or link with aria-label, not title. Once any help-tag installer is imported (select/register, popup-menu/register, or help-tags/register), it shows an aria-hidden Web Awesome help tag repeating that name after a 500ms hover and at once on keyboard focus, hidden on a press and on Escape, and never joins aria-labelledby. A native title keeps the browser tooltip and gets no second tag."
1586
1623
  ]
1587
1624
  },
1588
- "cssValueProps": [],
1625
+ "cssValueProps": [
1626
+ {
1627
+ "path": "hideBelow",
1628
+ "grammar": "length",
1629
+ "helpers": ["px", "rem", "em", "pct", "space", "lengthVar", "calc"],
1630
+ "nonStandaloneHelpers": ["plus"],
1631
+ "shorthands": [],
1632
+ "canonicalShorthands": [],
1633
+ "exceptionalShorthands": [],
1634
+ "rawPolicy": "forbid",
1635
+ "examples": ["hideBelow={px(416)}"]
1636
+ },
1637
+ {
1638
+ "path": "showBelow",
1639
+ "grammar": "length",
1640
+ "helpers": ["px", "rem", "em", "pct", "space", "lengthVar", "calc"],
1641
+ "nonStandaloneHelpers": ["plus"],
1642
+ "shorthands": [],
1643
+ "canonicalShorthands": [],
1644
+ "exceptionalShorthands": [],
1645
+ "rawPolicy": "forbid",
1646
+ "examples": ["showBelow={px(416)}"]
1647
+ }
1648
+ ],
1589
1649
  "boundaries": {
1590
1650
  "rootClass": "kui-toolbar-control-group",
1591
1651
  "publicClasses": [
@@ -1617,7 +1677,20 @@
1617
1677
  "--kui-toolbar-control-pressed-color",
1618
1678
  "--kui-toolbar-control-selected-background",
1619
1679
  "--kui-toolbar-control-selected-color",
1620
- "--kui-toolbar-control-selected-shadow"
1680
+ "--kui-toolbar-control-selected-shadow",
1681
+ "--kui-color-neutral-fill-quiet",
1682
+ "--kui-color-neutral-border-quiet",
1683
+ "--kui-color-brand-fill-quiet",
1684
+ "--kui-color-brand-border-quiet",
1685
+ "--kui-color-success-fill-quiet",
1686
+ "--kui-color-success-border-quiet",
1687
+ "--kui-color-success-on-quiet",
1688
+ "--kui-color-warning-fill-quiet",
1689
+ "--kui-color-warning-border-quiet",
1690
+ "--kui-color-warning-on-quiet",
1691
+ "--kui-color-danger-fill-quiet",
1692
+ "--kui-color-danger-border-quiet",
1693
+ "--kui-color-danger-on-quiet"
1621
1694
  ]
1622
1695
  },
1623
1696
  "diagnostics": [],
@@ -1775,9 +1848,22 @@
1775
1848
  ],
1776
1849
  "wiring": {
1777
1850
  "required": false,
1778
- "helpers": [],
1851
+ "helpers": ["wireToolbarVisibility"],
1779
1852
  "obligations": [],
1780
- "stateAttributes": []
1853
+ "stateAttributes": [
1854
+ {
1855
+ "name": "data-toolbar-width-hidden",
1856
+ "on": "ToolbarText, ToolbarControlGroup and its paired busy status",
1857
+ "helper": "wireToolbarVisibility",
1858
+ "meaning": "True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers."
1859
+ },
1860
+ {
1861
+ "name": "data-toolbar-visibility-probe",
1862
+ "on": "private aria-hidden measurement boxes under Toolbar",
1863
+ "helper": "wireToolbarVisibility",
1864
+ "meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
1865
+ }
1866
+ ]
1781
1867
  },
1782
1868
  "responsive": { "owner": "not-applicable", "behaviors": [] },
1783
1869
  "layout": {
@@ -1790,7 +1876,30 @@
1790
1876
  "Actionable text is a native button with its full text as its accessible name; action cannot be combined with headingLevel, placeholder, or wrap."
1791
1877
  ]
1792
1878
  },
1793
- "cssValueProps": [],
1879
+ "cssValueProps": [
1880
+ {
1881
+ "path": "hideBelow",
1882
+ "grammar": "length",
1883
+ "helpers": ["px", "rem", "em", "pct", "space", "lengthVar", "calc"],
1884
+ "nonStandaloneHelpers": ["plus"],
1885
+ "shorthands": [],
1886
+ "canonicalShorthands": [],
1887
+ "exceptionalShorthands": [],
1888
+ "rawPolicy": "forbid",
1889
+ "examples": ["hideBelow={px(416)}"]
1890
+ },
1891
+ {
1892
+ "path": "showBelow",
1893
+ "grammar": "length",
1894
+ "helpers": ["px", "rem", "em", "pct", "space", "lengthVar", "calc"],
1895
+ "nonStandaloneHelpers": ["plus"],
1896
+ "shorthands": [],
1897
+ "canonicalShorthands": [],
1898
+ "exceptionalShorthands": [],
1899
+ "rawPolicy": "forbid",
1900
+ "examples": ["showBelow={px(416)}"]
1901
+ }
1902
+ ],
1794
1903
  "boundaries": {
1795
1904
  "rootClass": "kui-toolbar-text",
1796
1905
  "publicClasses": ["kui-toolbar-text"],
@@ -1802,7 +1911,8 @@
1802
1911
  "--kui-font-l",
1803
1912
  "--kui-font-m",
1804
1913
  "--kui-font-s",
1805
- "--kui-font-xs"
1914
+ "--kui-font-xs",
1915
+ "--kui-color-neutral-on-loud"
1806
1916
  ]
1807
1917
  },
1808
1918
  "diagnostics": [],
@@ -1849,11 +1959,12 @@
1849
1959
  "layout": {
1850
1960
  "roles": ["structure"],
1851
1961
  "geometry": {
1852
- "margin": "none",
1962
+ "margin": "self",
1853
1963
  "border": "self",
1854
1964
  "padding": "self",
1855
1965
  "notes": [
1856
- "Block Text variants reset native margins and add a 1px transparent border plus the standard 8px item padding; flush removes the border and padding. Tight line height is available for compact copy. Span has no margin, border, or padding. FieldLabel mirrors the themed Web Awesome label typography, 9px inline inset, and bottom gap."
1966
+ "Block Text variants reset native margins and add a 1px transparent border plus the standard 8px item padding; flush removes the border and padding. Tight line height is available for compact copy. Span has no margin by default, border, or padding. FieldLabel mirrors the themed Web Awesome label typography, 9px inline inset, and bottom gap.",
1967
+ "controlMargins adds the shared control gutter outside selected physical edges without changing border or padding; avoid duplicating a parent inset. Spans retain inline display and native inline margin behavior."
1857
1968
  ]
1858
1969
  }
1859
1970
  },
@@ -2107,7 +2218,7 @@
2107
2218
  "required": false
2108
2219
  },
2109
2220
  {
2110
- "id": "typed gap and flex choices",
2221
+ "id": "typed gap, flex, and physical-side inset choices",
2111
2222
  "owner": "application",
2112
2223
  "required": false
2113
2224
  }
@@ -2124,8 +2235,9 @@
2124
2235
  "geometry": {
2125
2236
  "margin": "none",
2126
2237
  "border": "none",
2127
- "padding": "none",
2238
+ "padding": "conditional",
2128
2239
  "notes": [
2240
+ "textInsets adds 17px and controlInsets adds 8px on selected physical sides; text wins on overlap.",
2129
2241
  "Fixed tracks use minmax(0, 1fr); responsive tracks use auto-fit with a minimum width capped at 100%, preserving equal distribution without narrow overflow."
2130
2242
  ]
2131
2243
  }
@@ -2786,6 +2898,11 @@
2786
2898
  "owner": "application",
2787
2899
  "required": false
2788
2900
  },
2901
+ {
2902
+ "id": "whether the item needs a surface or semantic appearance",
2903
+ "owner": "application",
2904
+ "required": false
2905
+ },
2789
2906
  { "id": "corner shape", "owner": "application", "required": false },
2790
2907
  {
2791
2908
  "id": "region semantics and accessible name",
@@ -2817,7 +2934,7 @@
2817
2934
  "border": "self",
2818
2935
  "padding": "self",
2819
2936
  "notes": [
2820
- "The 1px border is always reserved and transparent unless frame=\"framed\", so framed and unframed items share the same geometry."
2937
+ "The 1px border is always reserved; transparent items paint it only when frame=\"framed\", while surface and semantic appearances coordinate its color with their background and foreground."
2821
2938
  ]
2822
2939
  }
2823
2940
  },
@@ -38,7 +38,7 @@ Exact prop and callback types live in [`public-api-signatures-v1.md`](../public-
38
38
  - [Spacer](./spacer.md) — Express an intentional empty dimension or consume remaining flex space without application-owned spacer markup or raw CSS lengths.
39
39
  - [ListInsetControl](./list-inset-control.md) — Apply the standard 8px outer margin to all physical sides of a self-bordered control by default, or only the sides selected with the canonical Sides contract.
40
40
  - [ListInsetText](./list-inset-text.md) — Apply the full 8px margin + 1px transparent border + 8px padding to all physical sides of bare text by default, or only the sides selected with the canonical Sides contract.
41
- - [ContentItem](./content-item.md) — Render one self-contained .kui-content child that owns its 8px inline margin, real 1px border, 8px padding, and radius, with framing and shape chosen by typed props instead of hand-written modifier classes.
41
+ - [ContentItem](./content-item.md) — Render one self-contained .kui-content child that owns its 8px inline margin, real 1px border, 8px padding, radius, and optional coordinated surface colors.
42
42
 
43
43
  ## Kerf UI — Navigation
44
44
 
@@ -29,7 +29,7 @@ Exact prop names and types: [`@kerfjs/ui/badge`](../public-api-signatures-v1.md#
29
29
 
30
30
  **Variants (configure, do not restyle):**
31
31
 
32
- - neutral, brand, pop, success, warning, or danger tone
32
+ - neutral, info, pop, success, warning, or danger tone
33
33
  - quiet, solid, or outline appearance
34
34
  - pill or rounded shape
35
35
  - compact or default size, or a text-free dot (size: 'dot')
@@ -29,7 +29,7 @@ Exact prop names and types: [`@kerfjs/ui/chip`](../public-api-signatures-v1.md#k
29
29
 
30
30
  **Variants (configure, do not restyle):**
31
31
 
32
- - neutral, brand, pop, success, warning, or danger tone
32
+ - neutral, info, pop, success, warning, or danger tone
33
33
  - quiet, solid, or outline appearance
34
34
  - pill or rounded shape
35
35
  - compact or default size
@@ -4,14 +4,15 @@
4
4
 
5
5
  `@kerfjs/ui:content-item` · Kerf UI · component · Structure
6
6
 
7
- One self-contained content child with the shared 8px margin + 1px border + 8px padding geometry, a typed frame, and a rounded or pill shape.
7
+ One self-contained content child with shared geometry plus typed transparent, surface, or semantic appearance, frame, and shape choices.
8
8
 
9
9
  ## When to use
10
10
 
11
- Render one self-contained .kui-content child that owns its 8px inline margin, real 1px border, 8px padding, and radius, with framing and shape chosen by typed props instead of hand-written modifier classes.
11
+ Render one self-contained .kui-content child that owns its 8px inline margin, real 1px border, 8px padding, radius, and optional coordinated surface colors.
12
12
 
13
13
  - An ordinary surface-like child of a Pane or .kui-content stack needs the shared content-item geometry so its content edge lands at the standard 17px inset.
14
14
  - A content item marks a real distinction and must read as visibly bounded: pass frame="framed" (the border is always reserved, so geometry does not change).
15
+ - A content item needs the base surface or a coordinated semantic status treatment: pass appearance="surface" or a semantic appearance such as success or danger.
15
16
  - A content item should follow a pill control's 22px radius: pass shape="pill".
16
17
  - A selectable rich card needs nested controls: use selectionMode="multiple" inside a labeled List multi-select grid.
17
18
 
@@ -19,7 +20,7 @@ Render one self-contained .kui-content child that owns its 8px inline margin, re
19
20
 
20
21
  - Do not wrap a component that already owns content-item geometry (ListItem, ListHeader, StateBanner, Toolbar, ValueTable) or pad around a ContentItem; either double-insets.
21
22
  - Do not frame an item only to make it look contained; hierarchy comes from alignment, spacing, and type first.
22
- - Do not use it as a filled or lowered card; use SunkenPanel for a lowered surface.
23
+ - Do not use its surface appearance for a lowered inset panel around a stack; use SunkenPanel for that structure.
23
24
  - Do not use it for bare text alone; use ListInsetText, which adds the same inset without claiming a surface.
24
25
 
25
26
  **Alternatives:**
@@ -44,6 +45,8 @@ Exact prop names and types: [`@kerfjs/ui/content-item`](../public-api-signatures
44
45
  - framed rounded item
45
46
  - pill item
46
47
  - framed pill item
48
+ - base surface item
49
+ - neutral, info, pop, success, warning, or danger semantic item
47
50
  - named focus-target region
48
51
  - multi-select rich grid row
49
52
 
@@ -55,7 +58,7 @@ Exact prop names and types: [`@kerfjs/ui/content-item`](../public-api-signatures
55
58
 
56
59
  ## State and wiring
57
60
 
58
- **The app owns:** the item content; whether the item marks a real distinction that warrants a visible frame; corner shape; region semantics and accessible name; whether the item is a programmatic focus target; the selection set and Shift/Cmd extension for multi-select rich cards.
61
+ **The app owns:** the item content; whether the item marks a real distinction that warrants a visible frame; whether the item needs a surface or semantic appearance; corner shape; region semantics and accessible name; whether the item is a programmatic focus target; the selection set and Shift/Cmd extension for multi-select rich cards.
59
62
 
60
63
  No wiring helper.
61
64
 
@@ -63,7 +66,7 @@ No wiring helper.
63
66
 
64
67
  Margin: self · border: self · padding: self (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
65
68
 
66
- - The 1px border is always reserved and transparent unless frame="framed", so framed and unframed items share the same geometry.
69
+ - The 1px border is always reserved; transparent items paint it only when frame="framed", while surface and semantic appearances coordinate its color with their background and foreground.
67
70
 
68
71
  ## Accessibility
69
72
 
@@ -4,13 +4,13 @@
4
4
 
5
5
  `@kerfjs/ui:document-baseline` · Kerf UI · CSS composition · Foundation
6
6
 
7
- Opt-in document-level defaults: border-box sizing, body margin/font/surface, link color, and the html → body → .kui-app-root full-height chain.
7
+ Opt-in document-level defaults: border-box sizing, body margin/font/surface, native table-cell and form-control font metrics, link color, and the html → body → .kui-app-root full-height chain.
8
8
 
9
9
  ## When to use
10
10
 
11
11
  Let an application opt into Kerf UI-owned document defaults and a definite full-height chain for a percentage-height application shell.
12
12
 
13
- - An application wants Kerf UI to own document-level box sizing, body typography, surface, and link color.
13
+ - An application wants Kerf UI to own document-level box sizing, body typography, native table-cell and form-control font metrics, surface, and link color.
14
14
  - A full-height shell (Workbench, SplitView, NavStack, or TabScaffold) mounts into one direct container: put .kui-app-root on that container.
15
15
 
16
16
  **Not when:**
@@ -4,7 +4,7 @@
4
4
 
5
5
  `@kerfjs/ui:grid` · Kerf UI · component · Structure
6
6
 
7
- Equal-width columns with a fixed count or a minimum-width responsive mode, typed gaps, and optional flex participation.
7
+ Equal-width columns with a fixed count or a minimum-width responsive mode, typed gaps, physical-side text/control insets, and optional flex participation.
8
8
 
9
9
  ## When to use
10
10
 
@@ -45,6 +45,7 @@ Exact prop names and types: [`@kerfjs/ui/grid`](../public-api-signatures-v1.md#k
45
45
  - named none/2xs/xs/s/m/l/xl token gap
46
46
  - typed CssLength gap
47
47
  - boolean, finite-keyword, or typed CssFlex flex
48
+ - top/right/bottom/left text and control inset combinations
48
49
  - fill: the layout root fills a definite-height parent
49
50
  - rootAttributes: safe data-\* metadata on the root
50
51
  - selectionMode=multiple: labeled multi-select grid for ContentItem tiles
@@ -63,14 +64,15 @@ Exact prop names and types: [`@kerfjs/ui/grid`](../public-api-signatures-v1.md#k
63
64
 
64
65
  ## State and wiring
65
66
 
66
- **The app owns:** child semantics and content; fixed column count or responsive minimum width; typed gap and flex choices.
67
+ **The app owns:** child semantics and content; fixed column count or responsive minimum width; typed gap, flex, and physical-side inset choices.
67
68
 
68
69
  No wiring helper.
69
70
 
70
71
  ## Geometry
71
72
 
72
- Margin: none · border: none · padding: none (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
73
+ Margin: none · border: none · padding: conditional (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
73
74
 
75
+ - textInsets adds 17px and controlInsets adds 8px on selected physical sides; text wins on overlap.
74
76
  - Fixed tracks use minmax(0, 1fr); responsive tracks use auto-fit with a minimum width capped at 100%, preserving equal distribution without narrow overflow.
75
77
 
76
78
  ## Accessibility
@@ -32,6 +32,7 @@ Exact prop names and types: [`@kerfjs/ui/lucide-icon`](../public-api-signatures-
32
32
 
33
33
  - decorative
34
34
  - labeled
35
+ - inline text flow
35
36
  - outline (default appearance)
36
37
  - solid (appearance=solid)
37
38
 
@@ -73,6 +74,16 @@ Set an icon foreground with a semantic color token; omit color to inherit from s
73
74
  <LucideIcon icon={Bell} name="alert" color={uiColor('warning-on-quiet')} />
74
75
  ```
75
76
 
77
+ ### Inline with text
78
+
79
+ Let a decorative icon flow inside Text or other prose while preserving its inherited 1em size.
80
+
81
+ ```tsx
82
+ <Text>
83
+ Ready <LucideIcon icon={Bell} name="notification" inline /> now.
84
+ </Text>
85
+ ```
86
+
76
87
  ## Styling boundary
77
88
 
78
89
  The component owns its own styles. Configure it through its props and variants; do not override its internals.
@@ -67,6 +67,7 @@ Exact prop names and types: [`@kerfjs/ui/nav-stack`](../public-api-signatures-v1
67
67
 
68
68
  - `data-nav-chrome-transition` on `kui-nav-stack` (`wireNavStack`): "true" while the chrome cross-fades between the outgoing and incoming view.
69
69
  - `data-nav-chrome-copy` on `kui-nav-stack__chrome-copy` (`wireNavStack`): Marks the inert, aria-hidden snapshot of the outgoing chrome shown during the cross-fade.
70
+ - `data-nav-revealed` on `kui-nav-stack__view` (`wireNavStack`): "true" on the preserved, aria-hidden previous view while an incoming view slides over it.
70
71
  - `data-nav-exiting` on `kui-nav-stack__view` (`wireNavStack`): "true" on a popped view the helper briefly re-inserts to slide it out.
71
72
  - `data-scroll-overflow` on `the active kui-nav-stack__view, or the kui-pane__content of a sole Pane in it` (`wireScrollDividers`): The physical edges, in canonical t/r/b/l order, beyond which content is scrolled out of view; absent when nothing is hidden (content that fits never reports its far edges). Re-applied if a re-render drops it.
72
73
  - `data-scroll-divider` on `kui-nav-stack__chrome and kui-nav-stack__bottom` (`wireScrollDividers`): The sides, in t/r/b/l order, on which this chrome currently draws its scroll divider: the side facing the scroller while content is hidden beyond it. Re-applied if a re-render drops it.
@@ -12,6 +12,7 @@ Choose one or more controlled values, keep unavailable choices visible, and opti
12
12
 
13
13
  - Choose a controlled value from a moderate or long list, including grouped and icon-bearing choices.
14
14
  - Color an optional choice icon with a CssForegroundColor: uiColor() with a foreground token such as success-on-quiet, foregroundColorVar() for an app-owned property, or foregroundColor() for a direct custom CSS color. Fill tokens such as success are backgrounds that leave the icon nearly invisible, so they, lengths, raw color strings, and unqualified colorVar() values are rejected.
15
+ - Use the default content-sized menu for long option labels; native popup shifting keeps it within 10px viewport gutters. fitMenu instead matches trigger width and wraps labels.
15
16
 
16
17
  **Not when:**
17
18
 
@@ -70,6 +70,7 @@ Zones (a zone is bound to JSX only through its listed prop; never assume the zon
70
70
  - `data-resizing` on `kui-resizable-region` (`wireResizableRegions`): "true" during an active pointer drag of the handle.
71
71
  - `data-nav-chrome-transition` on `kui-nav-stack` (`wireNavStack`): "true" while the chrome cross-fades between the outgoing and incoming view.
72
72
  - `data-nav-chrome-copy` on `kui-nav-stack__chrome-copy` (`wireNavStack`): Marks the inert, aria-hidden snapshot of the outgoing chrome shown during the cross-fade.
73
+ - `data-nav-revealed` on `kui-nav-stack__view` (`wireNavStack`): "true" on the preserved, aria-hidden previous view while an incoming view slides over it.
73
74
  - `data-nav-exiting` on `kui-nav-stack__view` (`wireNavStack`): "true" on a popped view the helper briefly re-inserts to slide it out.
74
75
 
75
76
  ## Geometry
@@ -40,6 +40,7 @@ Exact prop names and types: [`@kerfjs/ui/text`](../public-api-signatures-v1.md#k
40
40
  - compact, default, large, or xlarge size
41
41
  - default or monospace font
42
42
  - flush item geometry and tight line height
43
+ - controlMargins selects exterior 8px gutters with canonical physical Sides
43
44
 
44
45
  ## Composition
45
46
 
@@ -55,9 +56,10 @@ No wiring helper.
55
56
 
56
57
  ## Geometry
57
58
 
58
- Margin: none · border: self · padding: self (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
59
+ Margin: self · border: self · padding: self (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
59
60
 
60
- - Block Text variants reset native margins and add a 1px transparent border plus the standard 8px item padding; flush removes the border and padding. Tight line height is available for compact copy. Span has no margin, border, or padding. FieldLabel mirrors the themed Web Awesome label typography, 9px inline inset, and bottom gap.
61
+ - Block Text variants reset native margins and add a 1px transparent border plus the standard 8px item padding; flush removes the border and padding. Tight line height is available for compact copy. Span has no margin by default, border, or padding. FieldLabel mirrors the themed Web Awesome label typography, 9px inline inset, and bottom gap.
62
+ - controlMargins adds the shared control gutter outside selected physical edges without changing border or padding; avoid duplicating a parent inset. Spans retain inline display and native inline margin behavior.
61
63
 
62
64
  ## Accessibility
63
65
 
@@ -15,6 +15,9 @@ Provide complete toolbar action geometry through configuration, including semant
15
15
  - Fill it with plain \<button> controls (the group styles > button fully); use wa-button only for a Web Awesome feature. A popup menu is a PopupMenu in a single group with nestedDropdown; it renders its own trigger, so never hand-write wa-dropdown markup. Each control stays whole: an icon sits beside its label on one row and no trigger gets a fixed width. Use overflow=wrap for independent links that should move as whole actions to another row on narrow surfaces.
16
16
  - For an avatar control, set content=avatar and avatarImage instead of inserting an img; one button paints the group and multiple buttons paint only the pressed highlight.
17
17
  - In a Workbench or CollapsiblePanel toolbar, mark a group relocateOnCollapse to keep it available in the work-area toolbar when the panel closes; place it directly or in an array in any toolbar zone.
18
+ - Use tileTone for a contained single group containing only a direct decorative SVG icon; interactive or mixed groups retain their existing control chrome.
19
+ - Set expandedOverflow=visible on an expanded search to anchor application suggestions, date pickers, or help below the group without overriding its geometry.
20
+ - Use typed hideBelow/showBelow lengths with wireToolbarVisibility(root) for per-item toolbar priority; keep primary actions available and provide a showBelow overflow alternative.
18
21
 
19
22
  **Not when:**
20
23
 
@@ -30,11 +33,12 @@ Provide complete toolbar action geometry through configuration, including semant
30
33
 
31
34
  - JavaScript: `@kerfjs/ui/toolbar-control-group` — exports `ToolbarActionLink`, `ToolbarControlGroup`.
32
35
  - CSS: the browser build of `@kerfjs/ui/toolbar-control-group` pulls its CSS automatically; import `@kerfjs/ui/toolbar-control-group.css` manually only without the `browser` export condition.
36
+ - Wiring: `wireToolbarVisibility` from `@kerfjs/ui/wire-toolbar-visibility` (optional).
33
37
  - Declared side effects: browser-condition-css.
34
38
 
35
39
  ## Props
36
40
 
37
- Exact prop names and types: [`@kerfjs/ui/toolbar-control-group`](../public-api-signatures-v1.md#kerfjsuitoolbar-control-group) in `public-api-signatures-v1.md`. Do not infer props from examples.
41
+ Exact prop names and types: [`@kerfjs/ui/toolbar-control-group`](../public-api-signatures-v1.md#kerfjsuitoolbar-control-group), [`@kerfjs/ui/wire-toolbar-visibility`](../public-api-signatures-v1.md#kerfjsuiwire-toolbar-visibility) in `public-api-signatures-v1.md`. Do not infer props from examples.
38
42
 
39
43
  **Variants (configure, do not restyle):**
40
44
 
@@ -54,6 +58,14 @@ Exact prop names and types: [`@kerfjs/ui/toolbar-control-group`](../public-api-s
54
58
  - relocate on panel collapse
55
59
  - avatar scrim
56
60
  - contained avatar background on a single group or selected multi-button highlight
61
+ - neutral, brand, success, warning, or danger quiet icon tile tone
62
+ - clip or visible app-owned overflow while a search is expanded
63
+ - typed hideBelow/showBelow thresholds at the nearest Toolbar content width
64
+
65
+ **CSS-value props** (typed builders from `@kerfjs/ui/css-values`; raw CSS strings are rejected):
66
+
67
+ - `hideBelow`: length grammar; raw values: forbid; helpers `px`, `rem`, `em`, `pct`, `space`, `lengthVar`, `calc` — e.g. `hideBelow={px(416)}`
68
+ - `showBelow`: length grammar; raw values: forbid; helpers `px`, `rem`, `em`, `pct`, `space`, `lengthVar`, `calc` — e.g. `showBelow={px(416)}`
57
69
 
58
70
  ## Composition
59
71
 
@@ -70,7 +82,12 @@ Zones (a zone is bound to JSX only through its listed prop; never assume the zon
70
82
 
71
83
  **The app owns:** actions; link destination and copy; pressed state; expanded state; avatar image URL.
72
84
 
73
- No wiring helper.
85
+ **Wiring:** `wireToolbarVisibility` is optional.
86
+
87
+ **Wiring-owned state attributes** — never render, remove, or branch on these as app state:
88
+
89
+ - `data-toolbar-width-hidden` on `ToolbarText, ToolbarControlGroup and its paired busy status` (`wireToolbarVisibility`): True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers.
90
+ - `data-toolbar-visibility-probe` on `private aria-hidden measurement boxes under Toolbar` (`wireToolbarVisibility`): Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility.
74
91
 
75
92
  ## Geometry
76
93
 
@@ -91,7 +108,7 @@ Never put `kui-toolbar-action-link` on an element you write; render `ToolbarActi
91
108
 
92
109
  Never put `kui-toolbar-control-group` on an element you write; render `ToolbarControlGroup` instead (`KUI-L103`).
93
110
 
94
- Public tokens it reads: `--kui-color-brand-on-quiet`, `--kui-color-pop-border-normal`, `--kui-color-pop-fill-normal`, `--kui-color-pop-on-normal`, `--kui-color-pop-on-quiet`, `--kui-color-neutral-border-loud`, `--kui-color-neutral-border-normal`, `--kui-color-neutral-fill-loud`, `--kui-color-neutral-fill-normal`, `--kui-color-neutral-on-loud`, `--kui-color-neutral-on-quiet`, `--kui-color-surface`, `--kui-focus-ring`, `--kui-shadow-s`, `--kui-toolbar-control-background`, `--kui-toolbar-control-border`, `--kui-toolbar-control-color`, `--kui-toolbar-control-dark-border`, `--kui-toolbar-control-hover-background`, `--kui-toolbar-control-pressed-background`, `--kui-toolbar-control-pressed-border`, `--kui-toolbar-control-pressed-color`, `--kui-toolbar-control-selected-background`, `--kui-toolbar-control-selected-color`, `--kui-toolbar-control-selected-shadow`. Set a token only where its public contract allows; prefer a prop.
111
+ Public tokens it reads: `--kui-color-brand-on-quiet`, `--kui-color-pop-border-normal`, `--kui-color-pop-fill-normal`, `--kui-color-pop-on-normal`, `--kui-color-pop-on-quiet`, `--kui-color-neutral-border-loud`, `--kui-color-neutral-border-normal`, `--kui-color-neutral-fill-loud`, `--kui-color-neutral-fill-normal`, `--kui-color-neutral-on-loud`, `--kui-color-neutral-on-quiet`, `--kui-color-surface`, `--kui-focus-ring`, `--kui-shadow-s`, `--kui-toolbar-control-background`, `--kui-toolbar-control-border`, `--kui-toolbar-control-color`, `--kui-toolbar-control-dark-border`, `--kui-toolbar-control-hover-background`, `--kui-toolbar-control-pressed-background`, `--kui-toolbar-control-pressed-border`, `--kui-toolbar-control-pressed-color`, `--kui-toolbar-control-selected-background`, `--kui-toolbar-control-selected-color`, `--kui-toolbar-control-selected-shadow`, `--kui-color-neutral-fill-quiet`, `--kui-color-neutral-border-quiet`, `--kui-color-brand-fill-quiet`, `--kui-color-brand-border-quiet`, `--kui-color-success-fill-quiet`, `--kui-color-success-border-quiet`, `--kui-color-success-on-quiet`, `--kui-color-warning-fill-quiet`, `--kui-color-warning-border-quiet`, `--kui-color-warning-on-quiet`, `--kui-color-danger-fill-quiet`, `--kui-color-danger-border-quiet`, `--kui-color-danger-on-quiet`. Set a token only where its public contract allows; prefer a prop.
95
112
 
96
113
  Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
97
114
 
@@ -10,11 +10,13 @@ Extra-large through extra-small toolbar identity text.
10
10
 
11
11
  - Render toolbar identity or heading text at a supported hierarchy size; pass headingLevel for heading semantics.
12
12
  - Use action for an editable toolbar title: it renders a native button that shrinks and ellipsizes beside sibling status chips.
13
+ - Use tone=dark for title or filename text on a loud toolbar surface, matching dark ToolbarControlGroups.
14
+ - Use typed hideBelow/showBelow lengths with wireToolbarVisibility(root) for per-item toolbar priority; keep primary actions available and provide a showBelow overflow alternative.
13
15
 
14
16
  **Not when:**
15
17
 
16
18
  - Do not omit headingLevel when the text is the page or section heading.
17
- - Large, default, and small are intentionally quiet toolbar identity text and have no tone option. Use xlarge-fixed for a normal-color toolbar heading at the fixed font-l step; use Text with an h2-h6 variant for a content subsection title, or ListHeader for a list or menu section.
19
+ - Large, default, and small are intentionally quiet toolbar identity text in default tone. Use xlarge-fixed for a normal-color toolbar heading at the fixed font-l step; use Text with an h2-h6 variant for a content subsection title, or ListHeader for a list or menu section.
18
20
 
19
21
  **Alternatives:**
20
22
 
@@ -25,11 +27,12 @@ Extra-large through extra-small toolbar identity text.
25
27
 
26
28
  - JavaScript: `@kerfjs/ui/toolbar-text` — exports `ToolbarText`.
27
29
  - CSS: the browser build of `@kerfjs/ui/toolbar-text` pulls its CSS automatically; import `@kerfjs/ui/toolbar-text.css` manually only without the `browser` export condition.
30
+ - Wiring: `wireToolbarVisibility` from `@kerfjs/ui/wire-toolbar-visibility` (optional).
28
31
  - Declared side effects: browser-condition-css.
29
32
 
30
33
  ## Props
31
34
 
32
- Exact prop names and types: [`@kerfjs/ui/toolbar-text`](../public-api-signatures-v1.md#kerfjsuitoolbar-text) in `public-api-signatures-v1.md`. Do not infer props from examples.
35
+ Exact prop names and types: [`@kerfjs/ui/toolbar-text`](../public-api-signatures-v1.md#kerfjsuitoolbar-text), [`@kerfjs/ui/wire-toolbar-visibility`](../public-api-signatures-v1.md#kerfjsuiwire-toolbar-visibility) in `public-api-signatures-v1.md`. Do not infer props from examples.
33
36
 
34
37
  **Variants (configure, do not restyle):**
35
38
 
@@ -40,6 +43,13 @@ Exact prop names and types: [`@kerfjs/ui/toolbar-text`](../public-api-signatures
40
43
  - small
41
44
  - xsmall
42
45
  - placeholder (loading)
46
+ - dark (loud-surface foreground)
47
+ - typed hideBelow/showBelow thresholds at the nearest Toolbar content width
48
+
49
+ **CSS-value props** (typed builders from `@kerfjs/ui/css-values`; raw CSS strings are rejected):
50
+
51
+ - `hideBelow`: length grammar; raw values: forbid; helpers `px`, `rem`, `em`, `pct`, `space`, `lengthVar`, `calc` — e.g. `hideBelow={px(416)}`
52
+ - `showBelow`: length grammar; raw values: forbid; helpers `px`, `rem`, `em`, `pct`, `space`, `lengthVar`, `calc` — e.g. `showBelow={px(416)}`
43
53
 
44
54
  ## Composition
45
55
 
@@ -51,7 +61,12 @@ Exact prop names and types: [`@kerfjs/ui/toolbar-text`](../public-api-signatures
51
61
 
52
62
  **The app owns:** text; responsive priority; the delegated action handler and display-to-input editing swap.
53
63
 
54
- No wiring helper.
64
+ **Wiring:** `wireToolbarVisibility` is optional.
65
+
66
+ **Wiring-owned state attributes** — never render, remove, or branch on these as app state:
67
+
68
+ - `data-toolbar-width-hidden` on `ToolbarText, ToolbarControlGroup and its paired busy status` (`wireToolbarVisibility`): True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers.
69
+ - `data-toolbar-visibility-probe` on `private aria-hidden measurement boxes under Toolbar` (`wireToolbarVisibility`): Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility.
55
70
 
56
71
  ## Geometry
57
72
 
@@ -70,7 +85,7 @@ Public class hooks (select for layout placement only, never to change the compon
70
85
 
71
86
  Never put `kui-toolbar-text` on an element you write; render `ToolbarText` instead (`KUI-L103`).
72
87
 
73
- Public tokens it reads: `--kui-color-neutral-on-quiet`, `--kui-color-text`, `--kui-font-2xs`, `--kui-font-2xl`, `--kui-font-l`, `--kui-font-m`, `--kui-font-s`, `--kui-font-xs`. Set a token only where its public contract allows; prefer a prop.
88
+ Public tokens it reads: `--kui-color-neutral-on-quiet`, `--kui-color-text`, `--kui-font-2xs`, `--kui-font-2xl`, `--kui-font-l`, `--kui-font-m`, `--kui-font-s`, `--kui-font-xs`, `--kui-color-neutral-on-loud`. Set a token only where its public contract allows; prefer a prop.
74
89
 
75
90
  Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
76
91