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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/README.md +29 -1
  2. package/ai/component-catalog.json +23 -11
  3. package/ai/component-composition.json +9 -3
  4. package/ai/components/README.md +1 -1
  5. package/ai/components/badge.md +1 -1
  6. package/ai/components/chip.md +1 -1
  7. package/ai/components/content-item.md +8 -5
  8. package/ai/components/document-baseline.md +2 -2
  9. package/ai/components/grid.md +5 -3
  10. package/ai/components/lucide-icon.md +11 -0
  11. package/ai/public-api-signatures-v1.md +92 -61
  12. package/ai/skill.md +33 -4
  13. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  14. package/analyzer/index.mjs +11 -1
  15. package/dist/app-tab.js +1 -1
  16. package/dist/badge.d.ts +5 -3
  17. package/dist/badge.js +1 -1
  18. package/dist/browser/catalog.js +7 -7
  19. package/dist/browser/collapsible-panel.js +3 -3
  20. package/dist/browser/list-header.js +1 -1
  21. package/dist/browser/nav-stack.js +1 -1
  22. package/dist/browser/select.js +1 -1
  23. package/dist/browser/split-view.js +1 -1
  24. package/dist/browser/workbench.js +4 -4
  25. package/dist/catalog-resources.d.ts +6 -6
  26. package/dist/catalog-resources.js +1 -1
  27. package/dist/catalog-resources.js.map +1 -1
  28. package/dist/catalog.d.ts +5 -5
  29. package/dist/catalog.js +13 -13
  30. package/dist/catalog.js.map +1 -1
  31. package/dist/chip.d.ts +3 -2
  32. package/dist/chip.js +1 -1
  33. package/dist/{chunk-SVLDRGPJ.js → chunk-3RE2JMZU.js} +7 -3
  34. package/dist/chunk-3RE2JMZU.js.map +1 -0
  35. package/dist/{chunk-V4WLBOVJ.js → chunk-5BZBIRQG.js} +4 -4
  36. package/dist/chunk-5BZBIRQG.js.map +1 -0
  37. package/dist/{chunk-SX7FJXPJ.js → chunk-5D3WDMIK.js} +4 -4
  38. package/dist/chunk-5D3WDMIK.js.map +1 -0
  39. package/dist/{chunk-HKVJ5MW3.js → chunk-5PAVAR4B.js} +3 -3
  40. package/dist/chunk-5PAVAR4B.js.map +1 -0
  41. package/dist/{chunk-5TTZPGUY.js → chunk-72LLWYP2.js} +6 -6
  42. package/dist/chunk-72LLWYP2.js.map +1 -0
  43. package/dist/{chunk-JA4J7Y4C.js → chunk-75I3SNUJ.js} +2 -2
  44. package/dist/chunk-75I3SNUJ.js.map +1 -0
  45. package/dist/{chunk-K47P7QZC.js → chunk-7QQ3HE47.js} +2 -2
  46. package/dist/chunk-7QQ3HE47.js.map +1 -0
  47. package/dist/{chunk-O5GM2JAM.js → chunk-7QWIJEK5.js} +9 -9
  48. package/dist/chunk-7QWIJEK5.js.map +1 -0
  49. package/dist/{chunk-5I7QGQVT.js → chunk-AN5IWMTM.js} +2 -2
  50. package/dist/chunk-AN5IWMTM.js.map +1 -0
  51. package/dist/{chunk-3BYFWTP3.js → chunk-AOAW55JN.js} +2 -2
  52. package/dist/chunk-AOAW55JN.js.map +1 -0
  53. package/dist/{chunk-5UGLKFBF.js → chunk-ARZ4RSQO.js} +5 -6
  54. package/dist/chunk-ARZ4RSQO.js.map +1 -0
  55. package/dist/{chunk-TCXDZNCX.js → chunk-BJLXE56E.js} +6 -6
  56. package/dist/chunk-BJLXE56E.js.map +1 -0
  57. package/dist/{chunk-RGS4WX2M.js → chunk-BYHGRKC3.js} +2 -2
  58. package/dist/chunk-BYHGRKC3.js.map +1 -0
  59. package/dist/{chunk-ZLKZFKLW.js → chunk-CEJ5FK6G.js} +2 -2
  60. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  61. package/dist/{chunk-SMZGAPCU.js → chunk-DQDTZE4W.js} +2 -2
  62. package/dist/chunk-DQDTZE4W.js.map +1 -0
  63. package/dist/{chunk-JGIV6ZDA.js → chunk-EFDCALR3.js} +2 -2
  64. package/dist/chunk-EFDCALR3.js.map +1 -0
  65. package/dist/{chunk-FKPKGP2H.js → chunk-G4VKQP7B.js} +2 -2
  66. package/dist/chunk-G4VKQP7B.js.map +1 -0
  67. package/dist/{chunk-TOICTHR2.js → chunk-GO2CZX4M.js} +2 -2
  68. package/dist/chunk-GO2CZX4M.js.map +1 -0
  69. package/dist/{chunk-DPAUKNB6.js → chunk-GS2QD3N7.js} +3 -3
  70. package/dist/chunk-GS2QD3N7.js.map +1 -0
  71. package/dist/{chunk-SLWCCHNP.js → chunk-H45DAZBL.js} +2 -2
  72. package/dist/chunk-H45DAZBL.js.map +1 -0
  73. package/dist/{chunk-DA3HS64I.js → chunk-H7ZJEI3H.js} +3 -3
  74. package/dist/chunk-H7ZJEI3H.js.map +1 -0
  75. package/dist/{chunk-V4GAQ74C.js → chunk-HFLGWMG3.js} +4 -4
  76. package/dist/chunk-HFLGWMG3.js.map +1 -0
  77. package/dist/{chunk-HXTAPIHQ.js → chunk-HFQDSSED.js} +6 -6
  78. package/dist/chunk-HFQDSSED.js.map +1 -0
  79. package/dist/{chunk-GRHJQWV2.js → chunk-HGSTMZZ6.js} +6 -6
  80. package/dist/chunk-HGSTMZZ6.js.map +1 -0
  81. package/dist/{chunk-WF75U3V4.js → chunk-HPREYDKV.js} +2 -2
  82. package/dist/chunk-HPREYDKV.js.map +1 -0
  83. package/dist/{chunk-VA5TN5PR.js → chunk-I4SDIMFA.js} +2 -2
  84. package/dist/chunk-I4SDIMFA.js.map +1 -0
  85. package/dist/{chunk-4SQK27MR.js → chunk-IM3GKYOG.js} +2 -2
  86. package/dist/chunk-IM3GKYOG.js.map +1 -0
  87. package/dist/{chunk-PL26TKNK.js → chunk-IVLTEBBT.js} +8 -8
  88. package/dist/chunk-IVLTEBBT.js.map +1 -0
  89. package/dist/{chunk-ALGYHYXP.js → chunk-J3AWE5I4.js} +2 -2
  90. package/dist/chunk-J3AWE5I4.js.map +1 -0
  91. package/dist/{chunk-OXO2QJWV.js → chunk-JOR5LGYE.js} +2 -2
  92. package/dist/chunk-JOR5LGYE.js.map +1 -0
  93. package/dist/{chunk-SRSJO5QE.js → chunk-LAZLBC2Q.js} +2 -2
  94. package/dist/chunk-LAZLBC2Q.js.map +1 -0
  95. package/dist/{chunk-RFGW735Q.js → chunk-LRAIS3YB.js} +2 -2
  96. package/dist/chunk-LRAIS3YB.js.map +1 -0
  97. package/dist/{chunk-AYUHMAI6.js → chunk-MXNIVEVL.js} +2 -2
  98. package/dist/chunk-MXNIVEVL.js.map +1 -0
  99. package/dist/{chunk-4NG4Y2Q6.js → chunk-NJZMR7HM.js} +2 -2
  100. package/dist/chunk-NJZMR7HM.js.map +1 -0
  101. package/dist/{chunk-DG6G5EPF.js → chunk-NMWDHZVM.js} +2 -2
  102. package/dist/chunk-NMWDHZVM.js.map +1 -0
  103. package/dist/{chunk-X5QSICJ3.js → chunk-NS2TBYM4.js} +2 -2
  104. package/dist/chunk-NS2TBYM4.js.map +1 -0
  105. package/dist/{chunk-4FEVHE7C.js → chunk-NVRJ7C3W.js} +4 -4
  106. package/dist/chunk-NVRJ7C3W.js.map +1 -0
  107. package/dist/{chunk-BFPBS5Y4.js → chunk-O27D24CA.js} +2 -2
  108. package/dist/chunk-O27D24CA.js.map +1 -0
  109. package/dist/{chunk-DUBUXJA3.js → chunk-PQQQXJGV.js} +4 -2
  110. package/dist/chunk-PQQQXJGV.js.map +1 -0
  111. package/dist/{chunk-6DFDTWGG.js → chunk-QYXKMLHO.js} +2 -2
  112. package/dist/chunk-QYXKMLHO.js.map +1 -0
  113. package/dist/{chunk-I3Q7KKYM.js → chunk-S3ECMF23.js} +2 -2
  114. package/dist/chunk-S3ECMF23.js.map +1 -0
  115. package/dist/{chunk-PSHUSWQH.js → chunk-S4ZGTDSG.js} +2 -2
  116. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  117. package/dist/{chunk-OYQIONQF.js → chunk-SJY7KC45.js} +5 -5
  118. package/dist/chunk-SJY7KC45.js.map +1 -0
  119. package/dist/{chunk-NPNSKX3K.js → chunk-VLPE6OPN.js} +2 -2
  120. package/dist/chunk-VLPE6OPN.js.map +1 -0
  121. package/dist/{chunk-NCSWXG7G.js → chunk-VLQUXZKA.js} +9 -3
  122. package/dist/chunk-VLQUXZKA.js.map +1 -0
  123. package/dist/{chunk-EHIMH4J7.js → chunk-VR7MWD2X.js} +10 -4
  124. package/dist/chunk-VR7MWD2X.js.map +1 -0
  125. package/dist/{chunk-NN6GYOA2.js → chunk-XIZRXI7N.js} +2 -2
  126. package/dist/chunk-XIZRXI7N.js.map +1 -0
  127. package/dist/{chunk-TDN5EE3S.js → chunk-Y6KT7ZTR.js} +2 -2
  128. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  129. package/dist/{chunk-LHSUPNSE.js → chunk-YLJ6X3AC.js} +2 -2
  130. package/dist/chunk-YLJ6X3AC.js.map +1 -0
  131. package/dist/{chunk-YDGNU2OD.js → chunk-ZVYA6TLR.js} +5 -2
  132. package/dist/chunk-ZVYA6TLR.js.map +1 -0
  133. package/dist/collapsible-panel.d.ts +6 -6
  134. package/dist/collapsible-panel.js +3 -3
  135. package/dist/collapsible-panel.js.map +1 -1
  136. package/dist/content-item.d.ts +13 -2
  137. package/dist/content-item.js +1 -1
  138. package/dist/css-values.js +1 -1
  139. package/dist/device-class.js +1 -1
  140. package/dist/device-class.js.map +1 -1
  141. package/dist/disclosure-arrow.js +1 -1
  142. package/dist/empty-state.js +1 -1
  143. package/dist/floating-toolbar.d.ts +1 -1
  144. package/dist/floating-toolbar.js +1 -1
  145. package/dist/grid.d.ts +10 -3
  146. package/dist/grid.js +1 -1
  147. package/dist/help-tags-register.js +1 -1
  148. package/dist/help-tags-register.js.map +1 -1
  149. package/dist/index.d.ts +27 -26
  150. package/dist/index.js +40 -40
  151. package/dist/list-action-row.js +1 -1
  152. package/dist/list-header.js +1 -1
  153. package/dist/list-inset-control.js +1 -1
  154. package/dist/list-inset-text.js +1 -1
  155. package/dist/list-item.js +1 -1
  156. package/dist/list.d.ts +2 -2
  157. package/dist/list.js +1 -1
  158. package/dist/loading-spinner.d.ts +4 -2
  159. package/dist/loading-spinner.js +1 -1
  160. package/dist/lucide-icon.d.ts +3 -1
  161. package/dist/lucide-icon.js +1 -1
  162. package/dist/nav-stack.d.ts +1 -1
  163. package/dist/nav-stack.js +1 -1
  164. package/dist/pane.js +1 -1
  165. package/dist/popup-menu-register.js +7 -7
  166. package/dist/popup-menu-register.js.map +1 -1
  167. package/dist/popup-menu.js +1 -1
  168. package/dist/resizable-region.d.ts +1 -1
  169. package/dist/resizable-region.js +1 -1
  170. package/dist/row.d.ts +2 -2
  171. package/dist/row.js +1 -1
  172. package/dist/segmented-control.js +1 -1
  173. package/dist/select-register.js +6 -6
  174. package/dist/select-register.js.map +1 -1
  175. package/dist/select.d.ts +1 -1
  176. package/dist/select.js +1 -1
  177. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  178. package/dist/skeleton.js +1 -1
  179. package/dist/spacer.js +1 -1
  180. package/dist/split-view.d.ts +2 -2
  181. package/dist/split-view.js +2 -2
  182. package/dist/split-view.js.map +1 -1
  183. package/dist/state-banner.d.ts +5 -3
  184. package/dist/state-banner.js +1 -1
  185. package/dist/styles/badge.css +1 -1
  186. package/dist/styles/chip.css +1 -1
  187. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  188. package/dist/styles/components/actions/popup-menu/popup-menu.css +285 -0
  189. package/dist/styles/components/actions/toolbar/toolbar.css +392 -0
  190. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +790 -0
  191. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +153 -0
  192. package/dist/styles/components/collections/list/list.css +133 -0
  193. package/dist/styles/components/collections/list-action-row/list-action-row.css +258 -0
  194. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  195. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  196. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  197. package/dist/styles/components/collections/list-item/list-item.css +255 -0
  198. package/dist/styles/components/data-display/value-table/value-table.css +105 -0
  199. package/dist/styles/components/feedback/badge/badge.css +118 -0
  200. package/dist/styles/components/feedback/chip/chip.css +138 -0
  201. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  202. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  203. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  204. package/dist/styles/components/feedback/state-banner/state-banner.css +248 -0
  205. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  206. package/dist/styles/components/forms/select/select.css +454 -0
  207. package/dist/styles/components/forms/token-search-field/token-search-field.css +381 -0
  208. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +575 -0
  209. package/dist/styles/components/layout/grid/grid.css +85 -0
  210. package/dist/styles/components/layout/pane/pane.css +263 -0
  211. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  212. package/dist/styles/components/layout/row/row.css +111 -0
  213. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  214. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  215. package/dist/styles/components/layout/workbench/workbench.css +1067 -0
  216. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  217. package/dist/styles/components/navigation/app-tab/app-tab.css +376 -0
  218. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  219. package/dist/styles/components/navigation/nav-stack/nav-stack.css +237 -0
  220. package/dist/styles/components/navigation/tab-bar/tab-bar.css +183 -0
  221. package/dist/styles/components/navigation/tab-scaffold/tab-scaffold.css +207 -0
  222. package/dist/styles/components/surfaces/content-item/content-item.css +120 -0
  223. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +29 -0
  224. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +56 -0
  225. package/dist/styles/components/typography/text/text.css +139 -0
  226. package/dist/styles/content-item.css +46 -1
  227. package/dist/styles/document.css +10 -0
  228. package/dist/styles/foundation.css +9 -6
  229. package/dist/styles/grid.css +50 -0
  230. package/dist/styles/lucide-icon.css +4 -0
  231. package/dist/styles/webawesome.css +23 -6
  232. package/dist/sunken-panel.d.ts +1 -1
  233. package/dist/sunken-panel.js +1 -1
  234. package/dist/surface-scaffold.js +1 -1
  235. package/dist/tab-bar.js +1 -1
  236. package/dist/tab-scaffold.d.ts +1 -1
  237. package/dist/tab-scaffold.js +1 -1
  238. package/dist/tab-scaffold.js.map +1 -1
  239. package/dist/text.d.ts +12 -8
  240. package/dist/text.js +1 -1
  241. package/dist/token-search-field.d.ts +1 -1
  242. package/dist/token-search-field.js +1 -1
  243. package/dist/{token-search-field-CVGwDn2y.d.ts → token-search-model-DTcTXWMS.d.ts} +54 -54
  244. package/dist/token-search-model.d.ts +1 -1
  245. package/dist/token-search-model.js +1 -1
  246. package/dist/toolbar-control-group.js +1 -1
  247. package/dist/toolbar-text.js +1 -1
  248. package/dist/toolbar.d.ts +1 -1
  249. package/dist/toolbar.js +1 -1
  250. package/dist/value-table.js +1 -1
  251. package/dist/wire-catalog.js +2 -2
  252. package/dist/wire-catalog.js.map +1 -1
  253. package/dist/wire-content-items.js +1 -1
  254. package/dist/wire-content-items.js.map +1 -1
  255. package/dist/wire-nav-stack.js +1 -1
  256. package/dist/wire-nav-stack.js.map +1 -1
  257. package/dist/wire-resizable-regions.js +1 -1
  258. package/dist/wire-scroll-dividers.js +1 -1
  259. package/dist/wire-sidebar.js +1 -1
  260. package/dist/wire-sidebar.js.map +1 -1
  261. package/dist/wire-tab-bars.js +1 -1
  262. package/dist/wire-tab-scaffold.js +1 -1
  263. package/dist/wire-tab-scaffold.js.map +1 -1
  264. package/dist/wire-token-search-fields.d.ts +1 -1
  265. package/dist/wire-token-search-fields.js +1 -1
  266. package/dist/wire-workbench.js +1 -1
  267. package/dist/workbench.d.ts +3 -3
  268. package/dist/workbench.js +1 -1
  269. package/docs/collapsible-panel.md +1 -1
  270. package/docs/component-contract.md +25 -7
  271. package/docs/component-selection.md +18 -4
  272. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  273. package/docs/design/templates/empty-state/filtered.svg +1 -1
  274. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  275. package/docs/design/templates/empty-state/with-action.svg +1 -1
  276. package/docs/design/templates/empty-state-dark.svg +1 -1
  277. package/docs/design/templates/empty-state.svg +1 -1
  278. package/docs/design/templates/list/stack-dark.svg +1 -1
  279. package/docs/design/templates/list/stack.svg +1 -1
  280. package/docs/design/templates/list-dark.svg +1 -1
  281. package/docs/design/templates/list-header/action-dark.svg +1 -1
  282. package/docs/design/templates/list-header/action.svg +1 -1
  283. package/docs/design/templates/list-header/count-dark.svg +1 -1
  284. package/docs/design/templates/list-header/count.svg +1 -1
  285. package/docs/design/templates/list-header/inline-action-dark.svg +1 -1
  286. package/docs/design/templates/list-header/inline-action.svg +1 -1
  287. package/docs/design/templates/list-header/size-l-dark.svg +1 -1
  288. package/docs/design/templates/list-header/size-l.svg +1 -1
  289. package/docs/design/templates/list-header/size-m-dark.svg +1 -1
  290. package/docs/design/templates/list-header/size-m.svg +1 -1
  291. package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
  292. package/docs/design/templates/list-header/size-xl.svg +1 -1
  293. package/docs/design/templates/list-header/size-xs-dark.svg +1 -1
  294. package/docs/design/templates/list-header/size-xs.svg +1 -1
  295. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  296. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  297. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  298. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  299. package/docs/design/templates/list-header-dark.svg +1 -1
  300. package/docs/design/templates/list-header.svg +1 -1
  301. package/docs/design/templates/list.svg +1 -1
  302. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  303. package/docs/design/templates/segmented-control/equal.svg +1 -1
  304. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
  305. package/docs/design/templates/segmented-control/pill-small.svg +1 -1
  306. package/docs/design/templates/segmented-control-dark.svg +1 -1
  307. package/docs/design/templates/segmented-control.svg +1 -1
  308. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  309. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  310. package/docs/design/templates/tab-bar-dark.svg +1 -1
  311. package/docs/design/templates/tab-bar.svg +1 -1
  312. package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
  313. package/docs/design/templates/token-search-field/empty.svg +1 -1
  314. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
  315. package/docs/design/templates/token-search-field/tokens.svg +1 -1
  316. package/docs/design/templates/token-search-field-dark.svg +1 -1
  317. package/docs/design/templates/token-search-field.svg +1 -1
  318. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  319. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  320. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  321. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  322. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  323. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  324. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  325. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  326. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  327. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  328. package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
  329. package/docs/design/templates/toolbar-control-group.svg +1 -1
  330. package/docs/design/templates/toolbar-dark.svg +1 -1
  331. package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
  332. package/docs/design/templates/toolbar-text/default.svg +1 -1
  333. package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
  334. package/docs/design/templates/toolbar-text/large.svg +1 -1
  335. package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
  336. package/docs/design/templates/toolbar-text/small.svg +1 -1
  337. package/docs/design/templates/toolbar-text-dark.svg +1 -1
  338. package/docs/design/templates/toolbar-text.svg +1 -1
  339. package/docs/design/templates/toolbar.svg +1 -1
  340. package/docs/design/templates/value-table/details-dark.svg +1 -1
  341. package/docs/design/templates/value-table/details.svg +1 -1
  342. package/docs/design/templates/value-table-dark.svg +1 -1
  343. package/docs/design/templates/value-table.svg +1 -1
  344. package/docs/document-baseline.md +4 -0
  345. package/docs/layout.md +11 -5
  346. package/docs/sunken-panel.md +7 -7
  347. package/docs/ui-analyzer.md +12 -1
  348. package/docs/ui-doctor.md +12 -2
  349. package/docs/webawesome-theme.md +29 -59
  350. package/doctor/index.mjs +39 -30
  351. package/llms.txt +18 -1
  352. package/package.json +3 -2
  353. package/dist/chunk-3BYFWTP3.js.map +0 -1
  354. package/dist/chunk-4FEVHE7C.js.map +0 -1
  355. package/dist/chunk-4NG4Y2Q6.js.map +0 -1
  356. package/dist/chunk-4SQK27MR.js.map +0 -1
  357. package/dist/chunk-5I7QGQVT.js.map +0 -1
  358. package/dist/chunk-5TTZPGUY.js.map +0 -1
  359. package/dist/chunk-5UGLKFBF.js.map +0 -1
  360. package/dist/chunk-6DFDTWGG.js.map +0 -1
  361. package/dist/chunk-ALGYHYXP.js.map +0 -1
  362. package/dist/chunk-AYUHMAI6.js.map +0 -1
  363. package/dist/chunk-BFPBS5Y4.js.map +0 -1
  364. package/dist/chunk-DA3HS64I.js.map +0 -1
  365. package/dist/chunk-DG6G5EPF.js.map +0 -1
  366. package/dist/chunk-DPAUKNB6.js.map +0 -1
  367. package/dist/chunk-DUBUXJA3.js.map +0 -1
  368. package/dist/chunk-EHIMH4J7.js.map +0 -1
  369. package/dist/chunk-FKPKGP2H.js.map +0 -1
  370. package/dist/chunk-GRHJQWV2.js.map +0 -1
  371. package/dist/chunk-HKVJ5MW3.js.map +0 -1
  372. package/dist/chunk-HXTAPIHQ.js.map +0 -1
  373. package/dist/chunk-I3Q7KKYM.js.map +0 -1
  374. package/dist/chunk-JA4J7Y4C.js.map +0 -1
  375. package/dist/chunk-JGIV6ZDA.js.map +0 -1
  376. package/dist/chunk-K47P7QZC.js.map +0 -1
  377. package/dist/chunk-LHSUPNSE.js.map +0 -1
  378. package/dist/chunk-NCSWXG7G.js.map +0 -1
  379. package/dist/chunk-NN6GYOA2.js.map +0 -1
  380. package/dist/chunk-NPNSKX3K.js.map +0 -1
  381. package/dist/chunk-O5GM2JAM.js.map +0 -1
  382. package/dist/chunk-OXO2QJWV.js.map +0 -1
  383. package/dist/chunk-OYQIONQF.js.map +0 -1
  384. package/dist/chunk-PL26TKNK.js.map +0 -1
  385. package/dist/chunk-PSHUSWQH.js.map +0 -1
  386. package/dist/chunk-RFGW735Q.js.map +0 -1
  387. package/dist/chunk-RGS4WX2M.js.map +0 -1
  388. package/dist/chunk-SLWCCHNP.js.map +0 -1
  389. package/dist/chunk-SMZGAPCU.js.map +0 -1
  390. package/dist/chunk-SRSJO5QE.js.map +0 -1
  391. package/dist/chunk-SVLDRGPJ.js.map +0 -1
  392. package/dist/chunk-SX7FJXPJ.js.map +0 -1
  393. package/dist/chunk-TCXDZNCX.js.map +0 -1
  394. package/dist/chunk-TDN5EE3S.js.map +0 -1
  395. package/dist/chunk-TOICTHR2.js.map +0 -1
  396. package/dist/chunk-V4GAQ74C.js.map +0 -1
  397. package/dist/chunk-V4WLBOVJ.js.map +0 -1
  398. package/dist/chunk-VA5TN5PR.js.map +0 -1
  399. package/dist/chunk-WF75U3V4.js.map +0 -1
  400. package/dist/chunk-X5QSICJ3.js.map +0 -1
  401. package/dist/chunk-YDGNU2OD.js.map +0 -1
  402. package/dist/chunk-ZLKZFKLW.js.map +0 -1
  403. package/dist/{panel-toolbar-DDKh4uKd.d.ts → panel-toolbar-CL9tYOkh.d.ts} +1 -1
  404. package/dist/{types-BuHELdXR.d.ts → types-C9BubXfz.d.ts} +1 -1
@@ -1,6 +1,6 @@
1
1
  # Public API signatures for the UI authoring corpus
2
2
 
3
- Generated from emitted declarations for `@kerfjs/ui@5.0.0-beta.75` and `kerfjs@5.0.0-beta.75`. This bounded reference covers only APIs used by the seven-task corpus. It is interface evidence, not an implementation or runtime guarantee.
3
+ Generated from emitted declarations for `@kerfjs/ui@5.0.0-beta.76` and `kerfjs@5.0.0-beta.76`. This bounded reference covers only APIs used by the seven-task corpus. It is interface evidence, not an implementation or runtime guarantee.
4
4
 
5
5
  ## `@kerfjs/ui/css-values`
6
6
 
@@ -147,9 +147,9 @@ export { DisclosureArrow, type DisclosureArrowProps, type DisclosureDirection };
147
147
 
148
148
  ```ts
149
149
  import * as kerfjs from 'kerfjs';
150
- import { PaneSeparatorSide } from './pane.js';
151
150
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
152
151
  import { S as Sides } from './sides-BPSWde0A.js';
152
+ import { PaneSeparatorSide } from './pane.js';
153
153
 
154
154
  type ToolbarPosition = 'header' | 'footer';
155
155
  interface ToolbarProps {
@@ -363,8 +363,8 @@ export { ToolbarActionLink, type ToolbarActionLinkProps, ToolbarControlGroup, ty
363
363
 
364
364
  ```ts
365
365
  import * as kerfjs from 'kerfjs';
366
- import { CssLength } from './css-values.js';
367
366
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
367
+ import { CssLength } from './css-values.js';
368
368
 
369
369
  /** Where a {@link FloatingToolbar} floats within its positioned container. */
370
370
  type FloatingToolbarPosition = 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end';
@@ -631,11 +631,11 @@ export { ListHeader, type ListHeaderProps };
631
631
 
632
632
  ```ts
633
633
  import * as kerfjs from 'kerfjs';
634
- import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
634
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
635
635
  import { H as HorizontalAlignment, L as ListVerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
636
636
  export { V as VerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
637
- import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
638
637
  import { S as Sides } from './sides-BPSWde0A.js';
638
+ import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
639
639
 
640
640
  type ListRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
641
641
  'data-component'?: never;
@@ -898,7 +898,10 @@ export { ListInsetText, type ListInsetTextProps, Sides };
898
898
  ```ts
899
899
  import * as kerfjs from 'kerfjs';
900
900
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
901
+ import { S as SemanticTone } from './semantic-tone-CdW013KF.js';
901
902
 
903
+ /** Base surface treatment or semantic status colors. */
904
+ type ContentItemAppearance = 'transparent' | 'surface' | SemanticTone;
902
905
  /** Whether the item's always-reserved 1px border is transparent or visible. */
903
906
  type ContentItemFrame = 'none' | 'framed';
904
907
  /** Corner shape: the 12px rounded rectangle or the 22px pill. */
@@ -907,9 +910,11 @@ type ContentItemShape = 'rounded' | 'pill';
907
910
  type ContentItemSelectionMode = 'none' | 'single' | 'multiple' | 'toggle';
908
911
  type ContentItemRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
909
912
  'data-component'?: never;
913
+ 'data-appearance'?: never;
910
914
  }>;
911
915
  type ContentItemInteractiveRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
912
916
  'data-component'?: never;
917
+ 'data-appearance'?: never;
913
918
  'data-action'?: never;
914
919
  'data-item-id'?: never;
915
920
  'data-interactive'?: never;
@@ -919,6 +924,12 @@ type ContentItemInteractiveRootAttributes = Readonly<Record<`data-${string}`, st
919
924
  'data-kui-pressed'?: never;
920
925
  }>;
921
926
  interface ContentItemBaseProps {
927
+ /**
928
+ * Coordinated background, border, and foreground colors. `transparent`
929
+ * preserves the surrounding surface; `surface` paints the base surface;
930
+ * semantic values match StateBanner. Defaults to `transparent`.
931
+ */
932
+ appearance?: ContentItemAppearance;
922
933
  /** Item content; a plain string is allowed for bare copy. */
923
934
  children?: KerfUiContent | string;
924
935
  /**
@@ -974,9 +985,9 @@ type ContentItemProps = ContentItemBaseProps & ({
974
985
  * border (transparent unless `framed`), 8px padding, and a rounded or pill
975
986
  * radius. It owns that whole geometry, so wrappers must not add more.
976
987
  */
977
- declare function ContentItem({ children, frame, flush, shape, title, ariaLabel, focusTarget, interactive, action, itemId, selectionMode, selected, disabled, className, rootAttributes, slot, }: ContentItemProps): kerfjs.SafeHtml;
988
+ declare function ContentItem({ appearance, children, frame, flush, shape, title, ariaLabel, focusTarget, interactive, action, itemId, selectionMode, selected, disabled, className, rootAttributes, slot, }: ContentItemProps): kerfjs.SafeHtml;
978
989
 
979
- export { ContentItem, type ContentItemFrame, type ContentItemProps, type ContentItemSelectionMode, type ContentItemShape };
990
+ export { ContentItem, type ContentItemAppearance, type ContentItemFrame, type ContentItemProps, type ContentItemSelectionMode, type ContentItemShape, SemanticTone };
980
991
  ```
981
992
 
982
993
  ## `@kerfjs/ui/value-table`
@@ -1254,10 +1265,10 @@ export { type ScrollDividerTarget, type WireScrollDividersOptions, wireScrollDiv
1254
1265
 
1255
1266
  ```ts
1256
1267
  import * as kerfjs from 'kerfjs';
1257
- import { PaneAppearance } from './pane.js';
1258
1268
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
1259
1269
  import { ToolbarConfig } from './toolbar.js';
1260
1270
  import { ToolbarTextSize, HeadingLevel } from './toolbar-text.js';
1271
+ import { PaneAppearance } from './pane.js';
1261
1272
  import './sides-BPSWde0A.js';
1262
1273
 
1263
1274
  /**
@@ -1376,12 +1387,12 @@ export { type WireNavStackOptions, wireNavStack };
1376
1387
 
1377
1388
  ```ts
1378
1389
  import * as kerfjs from 'kerfjs';
1390
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
1379
1391
  import { NavStackProps, NavStackView } from './nav-stack.js';
1380
1392
  import { ResizableRegionProps } from './resizable-region.js';
1381
- import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
1382
- import './pane.js';
1383
1393
  import './toolbar.js';
1384
1394
  import './sides-BPSWde0A.js';
1395
+ import './pane.js';
1385
1396
  import './toolbar-text.js';
1386
1397
  import './css-values.js';
1387
1398
 
@@ -1568,16 +1579,16 @@ export { Pane, type PaneAppearance, type PaneChromeDividers, type PaneChromePlac
1568
1579
 
1569
1580
  ```ts
1570
1581
  import { SafeHtml } from 'kerfjs';
1582
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
1571
1583
  import { ListConfig } from './list.js';
1572
1584
  import { NavStackProps } from './nav-stack.js';
1573
1585
  import { PaneConfig } from './pane.js';
1574
1586
  import { ResizableRegionSeparator, ResizableRegionCollapseMotion, ResizableRegionContentOverflow, ResizableRegionPresentation, ResizableRegionRestorePosition } from './resizable-region.js';
1575
- import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
1587
+ import { a as PanelToolbar, b as PanelChromePlacement, c as PanelBottomToolbar, d as PanelToggle } from './panel-toolbar-CL9tYOkh.js';
1576
1588
  import { ToolbarConfig } from './toolbar.js';
1577
- import { a as PanelToolbar, b as PanelChromePlacement, c as PanelBottomToolbar, d as PanelToggle } from './panel-toolbar-DDKh4uKd.js';
1578
- import './css-values.js';
1579
1589
  import './flex-alignment-4ms8ZbV8.js';
1580
1590
  import './sides-BPSWde0A.js';
1591
+ import './css-values.js';
1581
1592
  import './toolbar-text.js';
1582
1593
  import './lucide-icon.js';
1583
1594
  import 'lucide';
@@ -1962,18 +1973,18 @@ export { type WireWorkbenchOptions, type WireWorkbenchPanel, type WorkbenchPanel
1962
1973
 
1963
1974
  ```ts
1964
1975
  import { SafeHtml } from 'kerfjs';
1976
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
1977
+ import { P as PanelSide, a as PanelToolbar, b as PanelChromePlacement, c as PanelBottomToolbar, d as PanelToggle } from './panel-toolbar-CL9tYOkh.js';
1978
+ export { e as collapsiblePanelToggleIcon } from './panel-toolbar-CL9tYOkh.js';
1965
1979
  import { ListConfig } from './list.js';
1966
1980
  import { PaneConfig } from './pane.js';
1967
- import { P as PanelSide, a as PanelToolbar, b as PanelChromePlacement, c as PanelBottomToolbar, d as PanelToggle } from './panel-toolbar-DDKh4uKd.js';
1968
- export { e as collapsiblePanelToggleIcon } from './panel-toolbar-DDKh4uKd.js';
1969
1981
  import { ResizableRegionSeparator, ResizableRegionCollapseMotion, ResizableRegionContentOverflow, ResizableRegionPresentation, ResizableRegionRestorePosition } from './resizable-region.js';
1970
- import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
1971
- import './css-values.js';
1972
- import './flex-alignment-4ms8ZbV8.js';
1982
+ import './toolbar.js';
1973
1983
  import './sides-BPSWde0A.js';
1974
1984
  import './lucide-icon.js';
1975
1985
  import 'lucide';
1976
- import './toolbar.js';
1986
+ import './css-values.js';
1987
+ import './flex-alignment-4ms8ZbV8.js';
1977
1988
 
1978
1989
  /** Which edge a {@link CollapsiblePanel} docks to. */
1979
1990
  type CollapsiblePanelSide = PanelSide;
@@ -2168,8 +2179,8 @@ export { type SidebarStorage, type WireSidebarOptions, type WireSidebarPanel, wi
2168
2179
 
2169
2180
  ```ts
2170
2181
  import { SafeHtml } from 'kerfjs';
2171
- import { PaneAppearance } from './pane.js';
2172
2182
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2183
+ import { PaneAppearance } from './pane.js';
2173
2184
 
2174
2185
  interface TabScaffoldTabBase<Id extends string> {
2175
2186
  id: Id;
@@ -2269,8 +2280,8 @@ export { type WireTabScaffoldOptions, wireTabScaffold };
2269
2280
 
2270
2281
  ```ts
2271
2282
  import { SafeHtml } from 'kerfjs';
2272
- import { CssLength } from './css-values.js';
2273
2283
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2284
+ import { CssLength } from './css-values.js';
2274
2285
 
2275
2286
  type ResizableRegionAxis = 'horizontal' | 'vertical';
2276
2287
  type ResizableRegionEdge = 'start' | 'end';
@@ -2415,20 +2426,20 @@ export { DEFAULT_BREAKPOINTS, type DeviceBreakpoints, type DeviceClass, type Dev
2415
2426
  ```ts
2416
2427
  import * as kerfjs from 'kerfjs';
2417
2428
  import { SafeHtml } from 'kerfjs';
2418
- import { a as CatalogProps } from './types-BuHELdXR.js';
2419
- export { b as CatalogBrand, c as CatalogEntry, d as CatalogRelated, C as CatalogResource, e as CatalogSecondaryGroup, f as CatalogSection, g as CatalogStageRootAttributes } from './types-BuHELdXR.js';
2429
+ import { a as CatalogProps } from './types-C9BubXfz.js';
2430
+ export { b as CatalogBrand, c as CatalogEntry, d as CatalogRelated, C as CatalogResource, e as CatalogSecondaryGroup, f as CatalogSection, g as CatalogStageRootAttributes } from './types-C9BubXfz.js';
2420
2431
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2421
2432
  import './toolbar.js';
2422
- import './pane.js';
2423
2433
  import './sides-BPSWde0A.js';
2434
+ import './pane.js';
2424
2435
  import './workbench.js';
2425
2436
  import './list.js';
2426
- import './css-values.js';
2427
2437
  import './flex-alignment-4ms8ZbV8.js';
2438
+ import './css-values.js';
2428
2439
  import './nav-stack.js';
2429
2440
  import './toolbar-text.js';
2430
2441
  import './resizable-region.js';
2431
- import './panel-toolbar-DDKh4uKd.js';
2442
+ import './panel-toolbar-CL9tYOkh.js';
2432
2443
  import './lucide-icon.js';
2433
2444
  import 'lucide';
2434
2445
 
@@ -2510,20 +2521,20 @@ export { Catalog, CatalogExample, type CatalogExampleAlign, type CatalogExampleP
2510
2521
  ## `@kerfjs/ui/catalog-resources`
2511
2522
 
2512
2523
  ```ts
2513
- import { C as CatalogResource } from './types-BuHELdXR.js';
2514
- import './semantic-content-BbzjvSu9.js';
2515
- import 'kerfjs';
2524
+ import { C as CatalogResource } from './types-C9BubXfz.js';
2516
2525
  import './toolbar.js';
2517
- import './pane.js';
2526
+ import 'kerfjs';
2527
+ import './semantic-content-BbzjvSu9.js';
2518
2528
  import './sides-BPSWde0A.js';
2529
+ import './pane.js';
2519
2530
  import './workbench.js';
2520
2531
  import './list.js';
2521
- import './css-values.js';
2522
2532
  import './flex-alignment-4ms8ZbV8.js';
2533
+ import './css-values.js';
2523
2534
  import './nav-stack.js';
2524
2535
  import './toolbar-text.js';
2525
2536
  import './resizable-region.js';
2526
- import './panel-toolbar-DDKh4uKd.js';
2537
+ import './panel-toolbar-CL9tYOkh.js';
2527
2538
  import './lucide-icon.js';
2528
2539
  import 'lucide';
2529
2540
 
@@ -2689,9 +2700,9 @@ export { SegmentedControl, type SegmentedControlAppearance, type SegmentedContro
2689
2700
 
2690
2701
  ```ts
2691
2702
  import { SafeHtml } from 'kerfjs';
2703
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2692
2704
  import { CssForegroundColor } from './css-values.js';
2693
2705
  import { LucideNode } from './lucide-icon.js';
2694
- import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2695
2706
  import 'lucide';
2696
2707
 
2697
2708
  interface SelectChoice<Value extends string = string> {
@@ -2820,8 +2831,10 @@ export { Select, type SelectChoice, type SelectFocusRingOwner, type SelectMultip
2820
2831
  ```ts
2821
2832
  import { SafeHtml } from 'kerfjs';
2822
2833
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2834
+ import { S as SemanticTone } from './semantic-tone-CdW013KF.js';
2823
2835
 
2824
- type StateBannerTone = 'neutral' | 'info' | 'pop' | 'success' | 'warning' | 'danger';
2836
+ /** @deprecated Use SemanticTone. */
2837
+ type StateBannerTone = SemanticTone;
2825
2838
  type StateBannerUrgency = 'status' | 'alert';
2826
2839
  type StateBannerCopyLayout = 'inline' | 'stacked';
2827
2840
  type StateBannerActionPlacement = 'trailing' | 'below';
@@ -2832,7 +2845,7 @@ interface StateBannerProps {
2832
2845
  badge?: string;
2833
2846
  icon?: SafeHtml;
2834
2847
  action?: KerfUiContent;
2835
- tone?: StateBannerTone;
2848
+ tone?: SemanticTone;
2836
2849
  urgency?: StateBannerUrgency;
2837
2850
  /** Keep the detail beside the title, or give it its own line. */
2838
2851
  copyLayout?: StateBannerCopyLayout;
@@ -2846,7 +2859,7 @@ interface StateBannerProps {
2846
2859
  }
2847
2860
  declare function StateBanner({ title, detail, badge, icon, action, tone, urgency, copyLayout, actionPlacement, className, placeholder, slot, }: StateBannerProps): SafeHtml;
2848
2861
 
2849
- export { StateBanner, type StateBannerActionPlacement, type StateBannerCopyLayout, type StateBannerProps, type StateBannerTone, type StateBannerUrgency };
2862
+ export { SemanticTone, StateBanner, type StateBannerActionPlacement, type StateBannerCopyLayout, type StateBannerProps, type StateBannerTone, type StateBannerUrgency };
2850
2863
  ```
2851
2864
 
2852
2865
  ## `@kerfjs/ui/empty-state`
@@ -2874,13 +2887,15 @@ export { EmptyState, type EmptyStateProps };
2874
2887
 
2875
2888
  ```ts
2876
2889
  import * as kerfjs from 'kerfjs';
2890
+ import { CssForegroundColor } from './css-values.js';
2877
2891
  import { LucideIconSize } from './lucide-icon.js';
2878
2892
  import 'lucide';
2879
- import './css-values.js';
2880
2893
 
2881
2894
  type LoadingSpinnerSize = LucideIconSize;
2882
2895
  interface LoadingSpinnerProps {
2883
2896
  className?: string;
2897
+ /** Foreground color; omit to inherit the surrounding text color. */
2898
+ color?: CssForegroundColor;
2884
2899
  label?: string;
2885
2900
  /** Named icon scale or positive pixel size, converted to rem. Omit for 1em. */
2886
2901
  size?: LoadingSpinnerSize;
@@ -2888,7 +2903,7 @@ interface LoadingSpinnerProps {
2888
2903
  slot?: string;
2889
2904
  }
2890
2905
  /** Stable viewBox-centered progress ring based on svg-spinners' MIT-licensed 180-ring. */
2891
- declare function LoadingSpinner({ className, label, size, slot, }: LoadingSpinnerProps): kerfjs.SafeHtml;
2906
+ declare function LoadingSpinner({ className, color, label, size, slot, }: LoadingSpinnerProps): kerfjs.SafeHtml;
2892
2907
 
2893
2908
  export { LoadingSpinner, type LoadingSpinnerProps, type LoadingSpinnerSize };
2894
2909
  ```
@@ -2933,8 +2948,8 @@ export { Skeleton, type SkeletonProps };
2933
2948
 
2934
2949
  ```ts
2935
2950
  import * as kerfjs from 'kerfjs';
2936
- import { CssFlexKeyword, CssFlex } from './css-values.js';
2937
2951
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2952
+ import { CssFlexKeyword, CssFlex } from './css-values.js';
2938
2953
 
2939
2954
  type SunkenPanelShape = 'rounded' | 'square';
2940
2955
  interface SunkenPanelProps {
@@ -2964,16 +2979,16 @@ export { SunkenPanel, type SunkenPanelProps, type SunkenPanelShape };
2964
2979
  ## `@kerfjs/ui/token-search-field`
2965
2980
 
2966
2981
  ```ts
2982
+ export { T as TokenSearchEditorAttributes, a as TokenSearchField, b as TokenSearchFieldProps, c as TokenSearchFieldValue, j as TokenSearchToken, k as TokenSearchTrailingAction, p as placeTokenSearchCaret, r as readTokenSearchField } from './token-search-model-DTcTXWMS.js';
2967
2983
  import 'kerfjs';
2968
2984
  import './semantic-content-BbzjvSu9.js';
2969
- export { T as TokenSearchEditorAttributes, a as TokenSearchField, b as TokenSearchFieldProps, c as TokenSearchFieldValue, j as TokenSearchToken, k as TokenSearchTrailingAction, p as placeTokenSearchCaret, r as readTokenSearchField } from './token-search-field-CVGwDn2y.js';
2970
2985
  ```
2971
2986
 
2972
2987
  ## `@kerfjs/ui/wire-token-search-fields`
2973
2988
 
2974
2989
  ```ts
2975
2990
  import { Signal } from 'kerfjs';
2976
- import { d as TokenSearchModel } from './token-search-field-CVGwDn2y.js';
2991
+ import { d as TokenSearchModel } from './token-search-model-DTcTXWMS.js';
2977
2992
  import './semantic-content-BbzjvSu9.js';
2978
2993
 
2979
2994
  interface TokenSearchSubmit {
@@ -3170,14 +3185,16 @@ export { type ActionHandler, type DelegateActionsOptions, action, delegateAction
3170
3185
 
3171
3186
  ```ts
3172
3187
  import { SafeHtml } from 'kerfjs';
3188
+ import { S as SemanticTone } from './semantic-tone-CdW013KF.js';
3173
3189
 
3174
- type BadgeTone = 'neutral' | 'brand' | 'pop' | 'success' | 'warning' | 'danger';
3190
+ /** @deprecated Use SemanticTone. */
3191
+ type BadgeTone = SemanticTone;
3175
3192
  type BadgeAppearance = 'quiet' | 'solid' | 'outline';
3176
3193
  type BadgeShape = 'pill' | 'rounded';
3177
3194
  /** Size of a text badge. A text-free dot is the separate `size: 'dot'` form. */
3178
3195
  type BadgeSize = 'compact' | 'default';
3179
3196
  interface BadgeCommonProps {
3180
- tone?: BadgeTone;
3197
+ tone?: SemanticTone;
3181
3198
  className?: string;
3182
3199
  /** Native named-slot assignment when composed inside a web component. */
3183
3200
  slot?: string;
@@ -3220,19 +3237,20 @@ type BadgeProps = BadgeTextProps | BadgeDotProps;
3220
3237
  /** Compact, non-interactive metadata whose tone, emphasis, and shape are configured by props. */
3221
3238
  declare function Badge(props: BadgeProps): SafeHtml;
3222
3239
 
3223
- export { Badge, type BadgeAppearance, type BadgeDotProps, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeTextProps, type BadgeTone };
3240
+ export { Badge, type BadgeAppearance, type BadgeDotProps, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeTextProps, type BadgeTone, SemanticTone };
3224
3241
  ```
3225
3242
 
3226
3243
  ## `@kerfjs/ui/chip`
3227
3244
 
3228
3245
  ```ts
3229
3246
  import { SafeHtml } from 'kerfjs';
3230
- import { BadgeTone, BadgeAppearance, BadgeShape, BadgeSize } from './badge.js';
3247
+ import { S as SemanticTone } from './semantic-tone-CdW013KF.js';
3248
+ import { BadgeAppearance, BadgeShape, BadgeSize } from './badge.js';
3231
3249
 
3232
3250
  interface ChipCommonProps {
3233
3251
  /** Decorative leading icon, normally an unsized LucideIcon. */
3234
3252
  icon?: SafeHtml;
3235
- tone?: BadgeTone;
3253
+ tone?: SemanticTone;
3236
3254
  appearance?: BadgeAppearance;
3237
3255
  shape?: BadgeShape;
3238
3256
  size?: BadgeSize;
@@ -3280,6 +3298,8 @@ interface LucideIconProps {
3280
3298
  className?: string;
3281
3299
  /** Foreground color; omit to inherit the surrounding text color. */
3282
3300
  color?: CssForegroundColor;
3301
+ /** Flow with surrounding text instead of occupying a block. */
3302
+ inline?: boolean;
3283
3303
  label?: string;
3284
3304
  /** Named icon scale or positive pixel size, converted to rem. Omit for 1em. */
3285
3305
  size?: LucideIconSize;
@@ -3287,7 +3307,7 @@ interface LucideIconProps {
3287
3307
  slot?: string;
3288
3308
  }
3289
3309
  /** Render a Lucide-compatible icon node without copying icon SVG strings. */
3290
- declare function LucideIcon({ icon, name, appearance, className, color, label, size, slot, }: LucideIconProps): kerfjs.SafeHtml;
3310
+ declare function LucideIcon({ icon, name, appearance, className, color, inline, label, size, slot, }: LucideIconProps): kerfjs.SafeHtml;
3291
3311
 
3292
3312
  export { LucideIcon, type LucideIconProps, type LucideIconSize, type LucideNode };
3293
3313
  ```
@@ -3333,6 +3353,15 @@ export { DialogSurface, type DialogSurfacePresentation, type DialogSurfaceProps,
3333
3353
  import * as kerfjs from 'kerfjs';
3334
3354
  import { KerfBaseAttrs } from 'kerfjs/jsx-runtime';
3335
3355
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3356
+ import { CssForegroundColor } from './css-values.js';
3357
+
3358
+ type FieldLabelProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
3359
+ children: string;
3360
+ class?: string;
3361
+ className?: string;
3362
+ };
3363
+ /** Visible field heading for a read-only preview; use its id with aria-labelledby on the preview group. */
3364
+ declare function FieldLabel({ children, class: classValue, className, ...attributes }: FieldLabelProps): kerfjs.SafeHtml;
3336
3365
 
3337
3366
  type TextVariant = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span';
3338
3367
  type TextTone = 'default' | 'quiet' | 'danger';
@@ -3342,18 +3371,13 @@ type TextBorder = 'transparent' | 'none';
3342
3371
  type TextLineHeight = 'default' | 'tight';
3343
3372
  type TextWrap = 'normal' | 'anywhere' | 'nowrap' | 'truncate';
3344
3373
  type TextContent = KerfUiContent | string | number | readonly TextContent[];
3345
- type FieldLabelProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
3346
- children: string;
3347
- class?: string;
3348
- className?: string;
3349
- };
3350
- /** Visible field heading for a read-only preview; use its id with aria-labelledby on the preview group. */
3351
- declare function FieldLabel({ children, class: classValue, className, ...attributes }: FieldLabelProps): kerfjs.SafeHtml;
3352
3374
  type TextCommonProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
3353
3375
  /** Native heading, paragraph, or inline span element to render. Defaults to `p`. */
3354
3376
  variant?: TextVariant;
3355
3377
  /** Semantic foreground treatment. Defaults to the inherited foreground. */
3356
3378
  tone?: TextTone;
3379
+ /** Foreground color; overrides tone when supplied, or inherits when omitted. */
3380
+ color?: CssForegroundColor;
3357
3381
  /** Text sizing independent of the native semantic element. */
3358
3382
  size?: TextSize;
3359
3383
  /** Font family independent of the native semantic element. */
@@ -3383,7 +3407,7 @@ type TextProps = TextCommonProps & ({
3383
3407
  * content-item padding; `span` adds no box geometry.
3384
3408
  * All ordinary native heading/paragraph attributes pass through to the element.
3385
3409
  */
3386
- declare function Text({ variant: Variant, tone, size, font, border, flush, lineHeight, wrap, maxLines, children, class: classValue, className, ...attributes }: TextProps): kerfjs.SafeHtml;
3410
+ declare function Text({ variant: Variant, tone, color, size, font, border, flush, lineHeight, wrap, maxLines, children, class: classValue, className, style, ...attributes }: TextProps): kerfjs.SafeHtml;
3387
3411
 
3388
3412
  export { FieldLabel, type FieldLabelProps, Text, type TextBorder, type TextContent, type TextFont, type TextLineHeight, type TextProps, type TextSize, type TextTone, type TextVariant, type TextWrap };
3389
3413
  ```
@@ -3392,10 +3416,10 @@ export { FieldLabel, type FieldLabelProps, Text, type TextBorder, type TextConte
3392
3416
 
3393
3417
  ```ts
3394
3418
  import * as kerfjs from 'kerfjs';
3395
- import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
3396
- import { H as HorizontalAlignment, V as VerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
3397
3419
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3420
+ import { H as HorizontalAlignment, V as VerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
3398
3421
  import { S as Sides } from './sides-BPSWde0A.js';
3422
+ import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
3399
3423
 
3400
3424
  type RowRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
3401
3425
  'data-component'?: never;
@@ -3445,8 +3469,9 @@ export { CssFlex, CssFlexKeyword, CssLength, HorizontalAlignment, Row, type RowP
3445
3469
 
3446
3470
  ```ts
3447
3471
  import * as kerfjs from 'kerfjs';
3448
- import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
3449
3472
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3473
+ import { S as Sides } from './sides-BPSWde0A.js';
3474
+ import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
3450
3475
 
3451
3476
  type GridRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
3452
3477
  'data-component'?: never;
@@ -3455,6 +3480,8 @@ type GridRootAttributes = Readonly<Record<`data-${string}`, string | undefined>
3455
3480
  'data-auto-fill'?: never;
3456
3481
  'data-flex'?: never;
3457
3482
  'data-fill'?: never;
3483
+ 'data-text-insets'?: never;
3484
+ 'data-control-insets'?: never;
3458
3485
  }>;
3459
3486
  interface GridCommonProps {
3460
3487
  children?: KerfUiContent;
@@ -3472,6 +3499,10 @@ interface GridCommonProps {
3472
3499
  * flex layout use `flex` instead. Defaults to false.
3473
3500
  */
3474
3501
  fill?: boolean;
3502
+ /** Physical sides that receive the standard 17px text inset. */
3503
+ textInsets?: Sides;
3504
+ /** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */
3505
+ controlInsets?: Sides;
3475
3506
  className?: string;
3476
3507
  /** Safe `data-*` metadata; Grid-owned structural attributes remain protected. */
3477
3508
  rootAttributes?: GridRootAttributes;
@@ -3491,9 +3522,9 @@ type GridProps = GridCommonProps & ({
3491
3522
  autoFill?: boolean;
3492
3523
  });
3493
3524
  /** Render equal tracks with a fixed count or a responsive minimum width. */
3494
- declare function Grid({ children, selectionMode, ariaLabel, columns, minColumnWidth, autoFill, gap, flex, fill, className, rootAttributes, slot, }: GridProps): kerfjs.SafeHtml;
3525
+ declare function Grid({ children, selectionMode, ariaLabel, columns, minColumnWidth, autoFill, gap, flex, fill, textInsets, controlInsets, className, rootAttributes, slot, }: GridProps): kerfjs.SafeHtml;
3495
3526
 
3496
- export { CssFlex, CssFlexKeyword, CssLength, Grid, type GridProps, UiSpaceName };
3527
+ export { CssFlex, CssFlexKeyword, CssLength, Grid, type GridProps, Sides, UiSpaceName };
3497
3528
  ```
3498
3529
 
3499
3530
  ## `@kerfjs/ui/spacer`
@@ -3522,7 +3553,7 @@ export { CssLength, Spacer, type SpacerProps, UiSpaceName };
3522
3553
  ## `@kerfjs/ui/token-search-model`
3523
3554
 
3524
3555
  ```ts
3556
+ export { d as TokenSearchModel, e as TokenSearchModelOptions, f as TokenSearchResolvedToken, g as TokenSearchRule, h as TokenSearchState, i as TokenSearchSuggestion, l as createTokenSearchModel } from './token-search-model-DTcTXWMS.js';
3525
3557
  import 'kerfjs';
3526
- export { d as TokenSearchModel, e as TokenSearchModelOptions, f as TokenSearchResolvedToken, g as TokenSearchRule, h as TokenSearchState, i as TokenSearchSuggestion, l as createTokenSearchModel } from './token-search-field-CVGwDn2y.js';
3527
3558
  import './semantic-content-BbzjvSu9.js';
3528
3559
  ```
package/ai/skill.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: kerf-ui
3
3
  description: Build interfaces with kerfjs and the @kerfjs/ui production component package. Use whenever code imports @kerfjs/ui or a task asks for Kerf UI components.
4
- kerf-ui-skill-version: 1.50.0
4
+ kerf-ui-skill-version: 1.51.0
5
5
  ---
6
6
 
7
7
  # Building with @kerfjs/ui
@@ -21,6 +21,16 @@ documented dynamic-data widening. Do not extend those diagnostics to child
21
21
  markup, live DOM relationships, disposer invocation, or other conditions that
22
22
  TypeScript cannot prove from one call.
23
23
 
24
+ ### Shared semantic tones
25
+
26
+ `SemanticTone` is the shared color-role type for `Badge`, `Chip`, `StateBanner`,
27
+ and semantic `ContentItem` appearances: `neutral`, `info`, `pop`, `success`,
28
+ `warning`, and `danger`. Import it as a type from `@kerfjs/ui`,
29
+ `@kerfjs/ui/badge`, `@kerfjs/ui/state-banner`, or `@kerfjs/ui/content-item`.
30
+ Use `info` for the role backed by the existing `--kui-color-brand-*` tokens.
31
+ Migrate Badge/Chip `tone="brand"` to `tone="info"`; `BadgeTone` and
32
+ `StateBannerTone` remain deprecated aliases of `SemanticTone`.
33
+
24
34
  ## Components own their styles; configure, never override
25
35
 
26
36
  This is the rule every Kerf UI surface follows, and applications and
@@ -33,6 +43,11 @@ component packages built on Kerf UI must follow it too:
33
43
  selects a `.kui-*` class, a `[data-component]` root, a `wa-*` element a Kerf
34
44
  component renders, or its `::part()`s, and no hook class added to a
35
45
  component's root so that it can be restyled.
46
+ - **Owned implementation details are available.** A component may render raw
47
+ HTML or Web Awesome elements and style those elements when it creates them,
48
+ controls their state, and keeps the selectors in its own stylesheet. That
49
+ permission stops at every nested Kerf or application component boundary;
50
+ ownership follows the child component, even when the parent rendered it.
36
51
  - **Configuration, not overrides.** Do not write another component's private
37
52
  `--_kui-*` variables or reach for its `--kui-*` tokens to change layout,
38
53
  size, padding, or framing when a prop exists. Theme tokens are for theming
@@ -49,6 +64,11 @@ wa-dropdown.kui-popup-menu { … }` lives with PopupMenu). A parent may key its
49
64
  you need, report it (open an upstream feature request) instead of
50
65
  overriding. Your own components follow the same rule: expose configuration,
51
66
  and let each component own its styles.
67
+ - **Thin compositions usually need no CSS.** A component that only chooses and
68
+ connects other components should configure their props and slots without a
69
+ stylesheet. Add CSS only for raw elements or layout that the composition
70
+ itself owns; never use a composition stylesheet to normalize or override its
71
+ children.
52
72
 
53
73
  `kerf-ui-analyze` and `kerf-ui-doctor` enforce this downstream: `KUI-L019`
54
74
  (a rule whose subject is a cataloged component), `KUI-L020` (another
@@ -62,9 +82,12 @@ when none exists, report the component gap rather than suppressing the finding.
62
82
  For compact known activity, give `LoadingSpinner` its `size` prop (`xs` through
63
83
  `xl`, or a positive pixel number) instead of styling its SVG; omitted size is
64
84
  1em.
65
- For an application's own cataloged components, opt into Doctor's
66
- `"ownership": "component"` and declare each entry's `styleSources` so sibling
67
- components cannot style one another; package ownership remains the default.
85
+ For an application's own components, configure Doctor with
86
+ `"ownership": "component"`, `"implicitComponentOwnership": true`, and
87
+ `"ownershipContext": "any-package"`; declare each catalog entry's
88
+ `styleSources` so sibling components cannot style one another. Package
89
+ ownership remains the compatibility default and does not establish those
90
+ application-level boundaries.
68
91
 
69
92
  Read `../docs/webawesome-theme.md` when using Web Awesome components or changing
70
93
  shared theme tokens. When overriding a loud fill
@@ -172,6 +195,8 @@ For selectable document tiles, set `Grid selectionMode="multiple"` and
172
195
  `ariaLabel`, render `ContentItem selectionMode="multiple"` children, and wire
173
196
  `wireContentItems` for arrows, Home/End, and card activation. The app owns the
174
197
  selection set and each tile's nested controls.
198
+ `textInsets` adds the standard 17px physical-side content inset; `controlInsets`
199
+ adds 8px. Text insets win on any overlapping side, matching Row and List.
175
200
 
176
201
  For a complete shell, sidebar, workspace header, list-detail dialog, composer
177
202
  form, list-state lifecycle, or mixed-control toolbar, start from the runnable
@@ -262,6 +287,7 @@ Use `Toolbar responsive="trailing-priority"` when an expanded trailing search ne
262
287
  Set `--kui-toolbar-inset: 0px` on an embedded Toolbar to remove its outer padding while retaining `--kui-toolbar-gap` between zones. The same inset token controls the minimum-height allowance; safe-area padding still applies at claimed edges.
263
288
 
264
289
  For compact dialog copy, use `Text flush lineHeight="tight"`; for compact metadata, use `ValueTable density="compact"` and its public row columns/padding/gap tokens. `ToolbarText size="xsmall"` fits a dense rail heading. A `TokenSearchField` editor shrinks inside a narrow group by default; set `--kui-token-search-editor-min-width` when a minimum is needed. A full-height shell uses the one `.kui-app-root` mount container documented in `docs/document-baseline.md`.
290
+ When importing the opt-in `@kerfjs/ui/document.css` baseline, native `th`, `td`, `button`, `input`, `select`, and `textarea` inherit the surrounding font family, size, and line height; table headers retain their native emphasis. Load application typography overrides after the baseline.
265
291
 
266
292
  For a read-only field preview that replaces a Web Awesome input, use `FieldLabel` from `@kerfjs/ui/text` above the preview. Put it in `ListInsetControl sides="trl"` beside a `ContentItem` value; give it an id and use `aria-labelledby` on the preview group. The app owns preview/edit state and hint copy.
267
293
 
@@ -310,6 +336,7 @@ For prominent content text, use `Text size="large"`; use `size="xlarge"` for dis
310
336
  For removable tags use `Chip`, with `removeAction` for delegated handling and a specific `removeLabel` for the native button. `itemId` identifies the tag; the app owns removal. `size="compact"` and `disabled` replace app styling of raw `wa-tag` internals. Use `Badge` for non-interactive metadata.
311
337
 
312
338
  For an icon with a specific meaning, set `LucideIcon.color` using `uiColor('warning-on-quiet')` or another foreground token. Use `foregroundColorVar('--app-icon-color')` for an app-owned property or `foregroundColor('#8b5cf6')` for a direct custom CSS color. Omit the prop to inherit text color. Outline stroke and solid fill both follow the chosen color; size, appearance, label, and slot remain separate props. Avoid pale fill tokens as foregrounds.
339
+ Set `LucideIcon.inline` when an icon belongs within `Text` or another sentence; the SVG flows as `inline-block` instead of its default block layout. It retains its inherited 1em size unless you set `size`.
313
340
 
314
341
  For `Select`, mark an unavailable choice with `disabled` and optionally `disabledReason`. In a multiple Select, `selectAllLabel` and `clearLabel` opt in to localized footer actions that select enabled choices or clear the selection through normal input/change events; the app still owns the controlled `value`.
315
342
 
@@ -322,3 +349,5 @@ lifecycle: the latest request wins through open/close reversals, canceled
322
349
  transitions, and removal. Native value, keyboard, dismissal, and anchor placement
323
350
  remain with Web Awesome. Do not add popup delays, position repairs, or animation
324
351
  completion handlers in consumers. Raw `wa-select` elements remain native.
352
+
353
+ Neutral lowered surfaces and decorative neutral fills/borders are translucent theme colors; compose nested public components directly. Default/raised canvases, foregrounds, focus indicators, and loud contrast-bearing fills remain opaque. Do not assign depth-specific component tokens in demo wrappers.
@@ -1,6 +1,6 @@
1
1
  # Web Awesome JSX signatures for the UI authoring corpus
2
2
 
3
- Generated from the emitted `@kerfjs/ui@5.0.0-beta.75` declaration boundary. Import `@kerfjs/ui/webawesome` for type effects when authoring direct `wa-*` JSX. The module emits no runtime behavior and does not register custom elements.
3
+ Generated from the emitted `@kerfjs/ui@5.0.0-beta.76` declaration boundary. Import `@kerfjs/ui/webawesome` for type effects when authoring direct `wa-*` JSX. The module emits no runtime behavior and does not register custom elements.
4
4
 
5
5
  ```ts
6
6
  import { KerfCustomElement } from 'kerfjs/jsx-runtime';
@@ -15,6 +15,7 @@ import ts from 'typescript';
15
15
  import { loadApplicationUiProfile } from '../ai/application-ui-profile.mjs';
16
16
  import { isUiTraversalExcluded } from '../traversal-exclusions.mjs';
17
17
  import {
18
+ classOwnerFor,
18
19
  componentLabel,
19
20
  componentName,
20
21
  componentOwnershipFacts,
@@ -1636,7 +1637,13 @@ function inspectTsx(
1636
1637
  );
1637
1638
  if (entry && isForeign(entry))
1638
1639
  for (const className of classes.values) {
1639
- if (ownsClassBlock(facts.ownership, className, componentMode))
1640
+ // A class owned by the surrounding application is still a hook when
1641
+ // placed on another component's root. Only the component's own
1642
+ // public class is safe to style here.
1643
+ if (
1644
+ classOwnerFor(facts.ownership, className, componentMode)?.key ===
1645
+ entry.key
1646
+ )
1640
1647
  continue;
1641
1648
  const styled = cssFacts.get(className)?.styled;
1642
1649
  if (!styled) continue;
@@ -1717,6 +1724,9 @@ function inspectTsx(
1717
1724
  inset: inset || parent?.inset,
1718
1725
  label: entry?.key ?? tag,
1719
1726
  });
1727
+ // JSX supplied through a prop (for example Toolbar.leading) is still
1728
+ // rendered markup and must be checked like ordinary children.
1729
+ ts.forEachChild(opening.attributes, visit);
1720
1730
  if (ts.isJsxElement(node))
1721
1731
  for (const child of node.children) visit(child);
1722
1732
  stack.pop();
package/dist/app-tab.js CHANGED
@@ -1,4 +1,4 @@
1
- export { AppTab } from './chunk-V4GAQ74C.js';
1
+ export { AppTab } from './chunk-HFLGWMG3.js';
2
2
 
3
3
 
4
4