@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
package/README.md CHANGED
@@ -9,6 +9,31 @@ When adding a first-party public component, follow the
9
9
  entry drives one validator across package, build, barrel, CSS, demo, route, and
10
10
  AI signature projections, with a non-mutating dry-run report.
11
11
 
12
+ ### Shared semantic tones
13
+
14
+ `SemanticTone` is the shared color-role type for `Badge`, `Chip`, `StateBanner`,
15
+ and semantic `ContentItem` appearances: `neutral`, `info`, `pop`, `success`,
16
+ `warning`, and `danger`. Import it as a type from `@kerfjs/ui`,
17
+ `@kerfjs/ui/badge`, `@kerfjs/ui/state-banner`, or `@kerfjs/ui/content-item`.
18
+ Use `info` for the role backed by the existing `--kui-color-brand-*` tokens.
19
+ Migrate Badge/Chip `tone="brand"` to `tone="info"`; `BadgeTone` and
20
+ `StateBannerTone` remain deprecated aliases of `SemanticTone`.
21
+
22
+ ## Source organization
23
+
24
+ The flat files directly under `src/` are stable package entry facades. Keep
25
+ component implementation and CSS together under
26
+ `src/components/<family>/<component>/`. Put support code used by one component
27
+ in its `internal/`, `model/`, `register/`, or `wiring/` folder. Shared types and
28
+ utilities live under `src/shared/`; wiring that spans several components lives
29
+ under `src/wiring/`; Web Awesome integration code lives under
30
+ `src/integrations/`. Catalog-only implementation remains under `src/catalog/`.
31
+
32
+ Choose an existing family by the component role, and add a family only when no
33
+ current one fits. Public JavaScript and CSS subpaths remain flat through their
34
+ root facades. `npm run check:source-organization` rejects implementation added
35
+ back to the root or component-local support code placed in the wrong folder.
36
+
12
37
  Browser verification always builds current source: both `npm run test:e2e`
13
38
  and direct focused Playwright commands run the catalog/conformance preflights
14
39
  and production build before preview. See the [UX catalog contract](./docs/ux-demo.md).
@@ -218,6 +243,7 @@ interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
218
243
  | `TabBar` | `@kerfjs/ui/tab-bar` | `@kerfjs/ui/tab-bar.css` |
219
244
  | `wireTabBars`, `reorderTabs` | `@kerfjs/ui/wire-tab-bars` | — |
220
245
  | `wireScrollDividers` | `@kerfjs/ui/wire-scroll-dividers` | — |
246
+ | `wireToolbarVisibility` | `@kerfjs/ui/wire-toolbar-visibility` | — |
221
247
  | `LoadingSpinner` | `@kerfjs/ui/loading-spinner` | `@kerfjs/ui/loading-spinner.css` |
222
248
  | `Skeleton` | `@kerfjs/ui/skeleton` | `@kerfjs/ui/skeleton.css` |
223
249
  | `SunkenPanel` | `@kerfjs/ui/sunken-panel` | `@kerfjs/ui/sunken-panel.css` |
@@ -497,7 +523,8 @@ or scope variables directly on a component instance.
497
523
 
498
524
  Applications can separately opt into `@kerfjs/ui/document.css` for border-box
499
525
  sizing, token-backed body typography/colors, zero body margin, plain-link color,
500
- and a definite full-height chain. Add `class="kui-app-root"` to the one direct
526
+ inherited native table-cell and form-control font metrics, and a definite
527
+ full-height chain. Add `class="kui-app-root"` to the one direct
501
528
  mount container when a percentage-height application shell must fill the
502
529
  viewport. This global baseline is deliberately absent from `styles.css` and
503
530
  component browser imports. See [Document baseline](./docs/document-baseline.md).
@@ -766,3 +793,16 @@ For dimensions that should scale with the root font size, author pixels with
766
793
  baseline. Keep intentional 1px borders in pixels and contextual `em` values
767
794
  explicit. `npm run build` emits standard CSS to `dist/styles`; `npm run dev`
768
795
  applies the same transform directly to source styles and hot-reloads edits.
796
+
797
+ Lowered surfaces and decorative neutral fills/borders use translucent shared theme colors. Nested surfaces compound naturally; demos compose public components without per-depth overrides. See [contextual transparency](docs/webawesome-theme.md#contextual-transparency).
798
+
799
+ `ToolbarText` and `ToolbarControlGroup` accept typed `hideBelow`/`showBelow`
800
+ lengths (for example `px(416)`). Wire `wireToolbarVisibility(root)` from
801
+ `@kerfjs/ui/wire-toolbar-visibility` and dispose on unmount. Thresholds use the
802
+ nearest Toolbar content-box width: hideBelow hides strictly below, showBelow
803
+ shows strictly below, with complementary behavior at equality. Percentages use
804
+ that content width; em and custom properties use the item's own context. Invalid,
805
+ negative, unresolved, or contradictory values leave the item visible under this
806
+ width policy. Keep primary actions visible and offer a complementary overflow
807
+ group. See `docs/component-contract.md` "Toolbar width visibility" for lifecycle
808
+ details.
@@ -37,7 +37,7 @@
37
37
  "accessible label for abbreviated content"
38
38
  ],
39
39
  "variants": [
40
- "neutral, brand, pop, success, warning, or danger tone",
40
+ "neutral, info, pop, success, warning, or danger tone",
41
41
  "quiet, solid, or outline appearance",
42
42
  "pill or rounded shape",
43
43
  "compact or default size, or a text-free dot (size: 'dot')",
@@ -96,7 +96,7 @@
96
96
  "disabled policy"
97
97
  ],
98
98
  "variants": [
99
- "neutral, brand, pop, success, warning, or danger tone",
99
+ "neutral, info, pop, success, warning, or danger tone",
100
100
  "quiet, solid, or outline appearance",
101
101
  "pill or rounded shape",
102
102
  "compact or default size",
@@ -161,6 +161,7 @@
161
161
  "variants": [
162
162
  "decorative",
163
163
  "labeled",
164
+ "inline text flow",
164
165
  "outline (default appearance)",
165
166
  "solid (appearance=solid)"
166
167
  ],
@@ -174,6 +175,11 @@
174
175
  "title": "Semantic icon color",
175
176
  "description": "Set an icon foreground with a semantic color token; omit color to inherit from surrounding text. Use foregroundColor() for a custom CSS color or foregroundColorVar() for an app variable.",
176
177
  "code": "<LucideIcon icon={Bell} name=\"alert\" color={uiColor('warning-on-quiet')} />"
178
+ },
179
+ {
180
+ "title": "Inline with text",
181
+ "description": "Let a decorative icon flow inside Text or other prose while preserving its inherited 1em size.",
182
+ "code": "<Text>Ready <LucideIcon icon={Bell} name=\"notification\" inline /> now.</Text>"
177
183
  }
178
184
  ],
179
185
  "accessibility": [
@@ -466,12 +472,12 @@
466
472
  "category": "Foundation",
467
473
  "kind": "composition",
468
474
  "source": "kerf",
469
- "description": "Opt-in document-level defaults: border-box sizing, body margin/font/surface, link color, and the html → body → .kui-app-root full-height chain.",
475
+ "description": "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.",
470
476
  "uses": [],
471
477
  "purpose": "Let an application opt into Kerf UI-owned document defaults and a definite full-height chain for a percentage-height application shell.",
472
478
  "publicExports": [],
473
479
  "useWhen": [
474
- "An application wants Kerf UI to own document-level box sizing, body typography, surface, and link color.",
480
+ "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.",
475
481
  "A full-height shell (Workbench, SplitView, NavStack, or TabScaffold) mounts into one direct container: put .kui-app-root on that container."
476
482
  ],
477
483
  "avoidWhen": [
@@ -815,6 +821,11 @@
815
821
  "on": "kui-nav-stack__chrome-copy",
816
822
  "meaning": "Marks the inert, aria-hidden snapshot of the outgoing chrome shown during the cross-fade."
817
823
  },
824
+ {
825
+ "name": "data-nav-revealed",
826
+ "on": "kui-nav-stack__view",
827
+ "meaning": "\"true\" on the preserved, aria-hidden previous view while an incoming view slides over it."
828
+ },
818
829
  {
819
830
  "name": "data-nav-exiting",
820
831
  "on": "kui-nav-stack__view",
@@ -972,6 +983,11 @@
972
983
  "on": "kui-nav-stack__chrome-copy",
973
984
  "meaning": "Marks the inert, aria-hidden snapshot of the outgoing chrome shown during the cross-fade."
974
985
  },
986
+ {
987
+ "name": "data-nav-revealed",
988
+ "on": "kui-nav-stack__view",
989
+ "meaning": "\"true\" on the preserved, aria-hidden previous view while an incoming view slides over it."
990
+ },
975
991
  {
976
992
  "name": "data-nav-exiting",
977
993
  "on": "kui-nav-stack__view",
@@ -1512,14 +1528,17 @@
1512
1528
  "uses": [
1513
1529
  "toolbar-text",
1514
1530
  "toolbar-control-group",
1515
- "wa-button"
1531
+ "wa-button",
1532
+ "popup-menu"
1516
1533
  ],
1517
1534
  "purpose": "Leading, centered, and trailing toolbar composition.",
1518
1535
  "publicExports": [
1519
- "Toolbar"
1536
+ "Toolbar",
1537
+ "wireToolbarVisibility"
1520
1538
  ],
1521
1539
  "useWhen": [
1522
- "Compose application chrome or a page, panel, or dialog heading with leading, center, and trailing regions."
1540
+ "Compose application chrome or a page, panel, or dialog heading with leading, center, and trailing regions.",
1541
+ "Use typed hideBelow/showBelow lengths with wireToolbarVisibility(root) for per-item toolbar priority; keep primary actions available and provide a showBelow overflow alternative."
1523
1542
  ],
1524
1543
  "avoidWhen": [
1525
1544
  "Do not use it as a generic wrapper when no toolbar or heading relationship exists."
@@ -1542,7 +1561,8 @@
1542
1561
  "trailing priority for an expanded trailing control at compact or narrow widths",
1543
1562
  "trailing groups and a standalone primary wa-button wrap instead of clipping",
1544
1563
  "outer inset independently configurable from zone gap",
1545
- "app bar or bottom bar claiming its screen edges (safeAreaEdges)"
1564
+ "app bar or bottom bar claiming its screen edges (safeAreaEdges)",
1565
+ "typed hideBelow/showBelow thresholds at the nearest Toolbar content width"
1546
1566
  ],
1547
1567
  "accessibility": [
1548
1568
  "Supply a label when the toolbar needs an accessible name."
@@ -1580,6 +1600,23 @@
1580
1600
  "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."
1581
1601
  }
1582
1602
  ]
1603
+ },
1604
+ {
1605
+ "export": "wireToolbarVisibility",
1606
+ "import": "@kerfjs/ui/wire-toolbar-visibility",
1607
+ "required": false,
1608
+ "stateAttributes": [
1609
+ {
1610
+ "name": "data-toolbar-width-hidden",
1611
+ "on": "ToolbarText, ToolbarControlGroup and its paired busy status",
1612
+ "meaning": "True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers."
1613
+ },
1614
+ {
1615
+ "name": "data-toolbar-visibility-probe",
1616
+ "on": "private aria-hidden measurement boxes under Toolbar",
1617
+ "meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
1618
+ }
1619
+ ]
1583
1620
  }
1584
1621
  ],
1585
1622
  "publicClasses": [
@@ -1606,6 +1643,9 @@
1606
1643
  "catalogRoute": "?component=toolbar",
1607
1644
  "documentation": "docs/component-selection.md",
1608
1645
  "recipe": "docs/component-selection.md#ambiguous-choices"
1646
+ },
1647
+ "publicExportImports": {
1648
+ "wireToolbarVisibility": "@kerfjs/ui/wire-toolbar-visibility"
1609
1649
  }
1610
1650
  },
1611
1651
  {
@@ -1629,7 +1669,10 @@
1629
1669
  "Use ToolbarActionLink for navigation or external resources that must retain native anchor semantics inside a group.",
1630
1670
  "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.",
1631
1671
  "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.",
1632
- "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."
1672
+ "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.",
1673
+ "Use tileTone for a contained single group containing only a direct decorative SVG icon; interactive or mixed groups retain their existing control chrome.",
1674
+ "Set expandedOverflow=visible on an expanded search to anchor application suggestions, date pickers, or help below the group without overriding its geometry.",
1675
+ "Use typed hideBelow/showBelow lengths with wireToolbarVisibility(root) for per-item toolbar priority; keep primary actions available and provide a showBelow overflow alternative."
1633
1676
  ],
1634
1677
  "avoidWhen": [
1635
1678
  "Do not use merely to align unrelated buttons or to imitate an exclusive choice.",
@@ -1668,7 +1711,10 @@
1668
1711
  "always visible or compact-only responsive visibility",
1669
1712
  "relocate on panel collapse",
1670
1713
  "avatar scrim",
1671
- "contained avatar background on a single group or selected multi-button highlight"
1714
+ "contained avatar background on a single group or selected multi-button highlight",
1715
+ "neutral, brand, success, warning, or danger quiet icon tile tone",
1716
+ "clip or visible app-owned overflow while a search is expanded",
1717
+ "typed hideBelow/showBelow thresholds at the nearest Toolbar content width"
1672
1718
  ],
1673
1719
  "accessibility": [
1674
1720
  "Name the group when its relationship is not evident from context.",
@@ -1686,7 +1732,25 @@
1686
1732
  "browser-condition-css"
1687
1733
  ]
1688
1734
  },
1689
- "wiring": [],
1735
+ "wiring": [
1736
+ {
1737
+ "export": "wireToolbarVisibility",
1738
+ "import": "@kerfjs/ui/wire-toolbar-visibility",
1739
+ "required": false,
1740
+ "stateAttributes": [
1741
+ {
1742
+ "name": "data-toolbar-width-hidden",
1743
+ "on": "ToolbarText, ToolbarControlGroup and its paired busy status",
1744
+ "meaning": "True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers."
1745
+ },
1746
+ {
1747
+ "name": "data-toolbar-visibility-probe",
1748
+ "on": "private aria-hidden measurement boxes under Toolbar",
1749
+ "meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
1750
+ }
1751
+ ]
1752
+ }
1753
+ ],
1690
1754
  "publicClasses": [
1691
1755
  "kui-toolbar-action-link",
1692
1756
  "kui-toolbar-control-group"
@@ -1716,13 +1780,74 @@
1716
1780
  "--kui-toolbar-control-pressed-color",
1717
1781
  "--kui-toolbar-control-selected-background",
1718
1782
  "--kui-toolbar-control-selected-color",
1719
- "--kui-toolbar-control-selected-shadow"
1783
+ "--kui-toolbar-control-selected-shadow",
1784
+ "--kui-color-neutral-fill-quiet",
1785
+ "--kui-color-neutral-border-quiet",
1786
+ "--kui-color-brand-fill-quiet",
1787
+ "--kui-color-brand-border-quiet",
1788
+ "--kui-color-success-fill-quiet",
1789
+ "--kui-color-success-border-quiet",
1790
+ "--kui-color-success-on-quiet",
1791
+ "--kui-color-warning-fill-quiet",
1792
+ "--kui-color-warning-border-quiet",
1793
+ "--kui-color-warning-on-quiet",
1794
+ "--kui-color-danger-fill-quiet",
1795
+ "--kui-color-danger-border-quiet",
1796
+ "--kui-color-danger-on-quiet"
1720
1797
  ],
1721
1798
  "links": {
1722
1799
  "catalogRoute": "?component=toolbar-control-group",
1723
1800
  "documentation": "docs/component-selection.md",
1724
1801
  "recipe": "docs/component-selection.md#problem-to-component-matrix"
1725
- }
1802
+ },
1803
+ "cssValueProps": [
1804
+ {
1805
+ "path": "hideBelow",
1806
+ "grammar": "length",
1807
+ "helpers": [
1808
+ "px",
1809
+ "rem",
1810
+ "em",
1811
+ "pct",
1812
+ "space",
1813
+ "lengthVar",
1814
+ "calc"
1815
+ ],
1816
+ "nonStandaloneHelpers": [
1817
+ "plus"
1818
+ ],
1819
+ "shorthands": [],
1820
+ "canonicalShorthands": [],
1821
+ "exceptionalShorthands": [],
1822
+ "rawPolicy": "forbid",
1823
+ "examples": [
1824
+ "hideBelow={px(416)}"
1825
+ ]
1826
+ },
1827
+ {
1828
+ "path": "showBelow",
1829
+ "grammar": "length",
1830
+ "helpers": [
1831
+ "px",
1832
+ "rem",
1833
+ "em",
1834
+ "pct",
1835
+ "space",
1836
+ "lengthVar",
1837
+ "calc"
1838
+ ],
1839
+ "nonStandaloneHelpers": [
1840
+ "plus"
1841
+ ],
1842
+ "shorthands": [],
1843
+ "canonicalShorthands": [],
1844
+ "exceptionalShorthands": [],
1845
+ "rawPolicy": "forbid",
1846
+ "examples": [
1847
+ "showBelow={px(416)}"
1848
+ ]
1849
+ }
1850
+ ]
1726
1851
  },
1727
1852
  {
1728
1853
  "id": "surface-scaffold",
@@ -1907,11 +2032,13 @@
1907
2032
  ],
1908
2033
  "useWhen": [
1909
2034
  "Render toolbar identity or heading text at a supported hierarchy size; pass headingLevel for heading semantics.",
1910
- "Use action for an editable toolbar title: it renders a native button that shrinks and ellipsizes beside sibling status chips."
2035
+ "Use action for an editable toolbar title: it renders a native button that shrinks and ellipsizes beside sibling status chips.",
2036
+ "Use tone=dark for title or filename text on a loud toolbar surface, matching dark ToolbarControlGroups.",
2037
+ "Use typed hideBelow/showBelow lengths with wireToolbarVisibility(root) for per-item toolbar priority; keep primary actions available and provide a showBelow overflow alternative."
1911
2038
  ],
1912
2039
  "avoidWhen": [
1913
2040
  "Do not omit headingLevel when the text is the page or section heading.",
1914
- "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."
2041
+ "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."
1915
2042
  ],
1916
2043
  "alternatives": [
1917
2044
  {
@@ -1937,7 +2064,9 @@
1937
2064
  "default",
1938
2065
  "small",
1939
2066
  "xsmall",
1940
- "placeholder (loading)"
2067
+ "placeholder (loading)",
2068
+ "dark (loud-surface foreground)",
2069
+ "typed hideBelow/showBelow thresholds at the nearest Toolbar content width"
1941
2070
  ],
1942
2071
  "accessibility": [
1943
2072
  "Plain text is not a heading; pass headingLevel to expose role=heading + aria-level for a page/section title.",
@@ -1955,7 +2084,25 @@
1955
2084
  "browser-condition-css"
1956
2085
  ]
1957
2086
  },
1958
- "wiring": [],
2087
+ "wiring": [
2088
+ {
2089
+ "export": "wireToolbarVisibility",
2090
+ "import": "@kerfjs/ui/wire-toolbar-visibility",
2091
+ "required": false,
2092
+ "stateAttributes": [
2093
+ {
2094
+ "name": "data-toolbar-width-hidden",
2095
+ "on": "ToolbarText, ToolbarControlGroup and its paired busy status",
2096
+ "meaning": "True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers."
2097
+ },
2098
+ {
2099
+ "name": "data-toolbar-visibility-probe",
2100
+ "on": "private aria-hidden measurement boxes under Toolbar",
2101
+ "meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
2102
+ }
2103
+ ]
2104
+ }
2105
+ ],
1959
2106
  "publicClasses": [
1960
2107
  "kui-toolbar-text"
1961
2108
  ],
@@ -1967,13 +2114,62 @@
1967
2114
  "--kui-font-l",
1968
2115
  "--kui-font-m",
1969
2116
  "--kui-font-s",
1970
- "--kui-font-xs"
2117
+ "--kui-font-xs",
2118
+ "--kui-color-neutral-on-loud"
1971
2119
  ],
1972
2120
  "links": {
1973
2121
  "catalogRoute": "?component=toolbar-text",
1974
2122
  "documentation": "docs/component-selection.md",
1975
2123
  "recipe": "docs/component-selection.md#problem-to-component-matrix"
1976
- }
2124
+ },
2125
+ "cssValueProps": [
2126
+ {
2127
+ "path": "hideBelow",
2128
+ "grammar": "length",
2129
+ "helpers": [
2130
+ "px",
2131
+ "rem",
2132
+ "em",
2133
+ "pct",
2134
+ "space",
2135
+ "lengthVar",
2136
+ "calc"
2137
+ ],
2138
+ "nonStandaloneHelpers": [
2139
+ "plus"
2140
+ ],
2141
+ "shorthands": [],
2142
+ "canonicalShorthands": [],
2143
+ "exceptionalShorthands": [],
2144
+ "rawPolicy": "forbid",
2145
+ "examples": [
2146
+ "hideBelow={px(416)}"
2147
+ ]
2148
+ },
2149
+ {
2150
+ "path": "showBelow",
2151
+ "grammar": "length",
2152
+ "helpers": [
2153
+ "px",
2154
+ "rem",
2155
+ "em",
2156
+ "pct",
2157
+ "space",
2158
+ "lengthVar",
2159
+ "calc"
2160
+ ],
2161
+ "nonStandaloneHelpers": [
2162
+ "plus"
2163
+ ],
2164
+ "shorthands": [],
2165
+ "canonicalShorthands": [],
2166
+ "exceptionalShorthands": [],
2167
+ "rawPolicy": "forbid",
2168
+ "examples": [
2169
+ "showBelow={px(416)}"
2170
+ ]
2171
+ }
2172
+ ]
1977
2173
  },
1978
2174
  {
1979
2175
  "id": "text",
@@ -2020,7 +2216,8 @@
2020
2216
  "default, quiet, or danger tone",
2021
2217
  "compact, default, large, or xlarge size",
2022
2218
  "default or monospace font",
2023
- "flush item geometry and tight line height"
2219
+ "flush item geometry and tight line height",
2220
+ "controlMargins selects exterior 8px gutters with canonical physical Sides"
2024
2221
  ],
2025
2222
  "accessibility": [
2026
2223
  "Text renders a native paragraph by default; choose an h1 through h6 variant by document outline rather than appearance, or span for inline secondary text.",
@@ -2029,11 +2226,12 @@
2029
2226
  "FieldLabel is plain text, not a native label; give it an id and associate the preview group with aria-labelledby."
2030
2227
  ],
2031
2228
  "geometry": {
2032
- "margin": "none",
2229
+ "margin": "self",
2033
2230
  "border": "self",
2034
2231
  "padding": "self",
2035
2232
  "notes": [
2036
- "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."
2233
+ "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.",
2234
+ "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."
2037
2235
  ]
2038
2236
  },
2039
2237
  "delivery": {
@@ -2354,7 +2552,7 @@
2354
2552
  "category": "Structure",
2355
2553
  "kind": "component",
2356
2554
  "source": "kerf",
2357
- "description": "Equal-width columns with a fixed count or a minimum-width responsive mode, typed gaps, and optional flex participation.",
2555
+ "description": "Equal-width columns with a fixed count or a minimum-width responsive mode, typed gaps, physical-side text/control insets, and optional flex participation.",
2358
2556
  "uses": [],
2359
2557
  "purpose": "Arrange related siblings in equal-width columns with either a fixed count or automatic container-width collapse.",
2360
2558
  "publicExports": [
@@ -2483,7 +2681,7 @@
2483
2681
  "appOwns": [
2484
2682
  "child semantics and content",
2485
2683
  "fixed column count or responsive minimum width",
2486
- "typed gap and flex choices"
2684
+ "typed gap, flex, and physical-side inset choices"
2487
2685
  ],
2488
2686
  "variants": [
2489
2687
  "any positive safe-integer equal-track count",
@@ -2491,6 +2689,7 @@
2491
2689
  "named none/2xs/xs/s/m/l/xl token gap",
2492
2690
  "typed CssLength gap",
2493
2691
  "boolean, finite-keyword, or typed CssFlex flex",
2692
+ "top/right/bottom/left text and control inset combinations",
2494
2693
  "fill: the layout root fills a definite-height parent",
2495
2694
  "rootAttributes: safe data-* metadata on the root",
2496
2695
  "selectionMode=multiple: labeled multi-select grid for ContentItem tiles"
@@ -2503,8 +2702,9 @@
2503
2702
  "geometry": {
2504
2703
  "margin": "none",
2505
2704
  "border": "none",
2506
- "padding": "none",
2705
+ "padding": "conditional",
2507
2706
  "notes": [
2707
+ "textInsets adds 17px and controlInsets adds 8px on selected physical sides; text wins on overlap.",
2508
2708
  "Fixed tracks use minmax(0, 1fr); responsive tracks use auto-fit with a minimum width capped at 100%, preserving equal distribution without narrow overflow."
2509
2709
  ]
2510
2710
  },
@@ -3373,22 +3573,23 @@
3373
3573
  "category": "Structure",
3374
3574
  "kind": "component",
3375
3575
  "source": "kerf",
3376
- "description": "One self-contained content child with the shared 8px margin + 1px border + 8px padding geometry, a typed frame, and a rounded or pill shape.",
3576
+ "description": "One self-contained content child with shared geometry plus typed transparent, surface, or semantic appearance, frame, and shape choices.",
3377
3577
  "uses": [],
3378
- "purpose": "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.",
3578
+ "purpose": "Render one self-contained .kui-content child that owns its 8px inline margin, real 1px border, 8px padding, radius, and optional coordinated surface colors.",
3379
3579
  "publicExports": [
3380
3580
  "ContentItem"
3381
3581
  ],
3382
3582
  "useWhen": [
3383
3583
  "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.",
3384
3584
  "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).",
3585
+ "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.",
3385
3586
  "A content item should follow a pill control's 22px radius: pass shape=\"pill\".",
3386
3587
  "A selectable rich card needs nested controls: use selectionMode=\"multiple\" inside a labeled List multi-select grid."
3387
3588
  ],
3388
3589
  "avoidWhen": [
3389
3590
  "Do not wrap a component that already owns content-item geometry (ListItem, ListHeader, StateBanner, Toolbar, ValueTable) or pad around a ContentItem; either double-insets.",
3390
3591
  "Do not frame an item only to make it look contained; hierarchy comes from alignment, spacing, and type first.",
3391
- "Do not use it as a filled or lowered card; use SunkenPanel for a lowered surface.",
3592
+ "Do not use its surface appearance for a lowered inset panel around a stack; use SunkenPanel for that structure.",
3392
3593
  "Do not use it for bare text alone; use ListInsetText, which adds the same inset without claiming a surface."
3393
3594
  ],
3394
3595
  "alternatives": [
@@ -3411,6 +3612,7 @@
3411
3612
  "appOwns": [
3412
3613
  "the item content",
3413
3614
  "whether the item marks a real distinction that warrants a visible frame",
3615
+ "whether the item needs a surface or semantic appearance",
3414
3616
  "corner shape",
3415
3617
  "region semantics and accessible name",
3416
3618
  "whether the item is a programmatic focus target",
@@ -3421,6 +3623,8 @@
3421
3623
  "framed rounded item",
3422
3624
  "pill item",
3423
3625
  "framed pill item",
3626
+ "base surface item",
3627
+ "neutral, info, pop, success, warning, or danger semantic item",
3424
3628
  "named focus-target region",
3425
3629
  "multi-select rich grid row"
3426
3630
  ],
@@ -3435,7 +3639,7 @@
3435
3639
  "border": "self",
3436
3640
  "padding": "self",
3437
3641
  "notes": [
3438
- "The 1px border is always reserved and transparent unless frame=\"framed\", so framed and unframed items share the same geometry."
3642
+ "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."
3439
3643
  ]
3440
3644
  },
3441
3645
  "delivery": {
@@ -4219,7 +4423,8 @@
4219
4423
  ],
4220
4424
  "useWhen": [
4221
4425
  "Choose a controlled value from a moderate or long list, including grouped and icon-bearing choices.",
4222
- "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."
4426
+ "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.",
4427
+ "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."
4223
4428
  ],
4224
4429
  "avoidWhen": [
4225
4430
  "Do not use for commands or a small choice set that should stay visible."