@kerfjs/ui 5.0.0-beta.55 → 5.0.0-beta.57

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 (418) hide show
  1. package/README.md +74 -41
  2. package/ai/application-ui-diagnostic-ids-v1.json +9 -1
  3. package/ai/application-ui-profile-sync.cjs +1 -1
  4. package/ai/application-ui-profile.defaults.json +63 -8
  5. package/ai/application-ui-profile.mjs +1 -1
  6. package/ai/compile-time-contracts-v1.json +2 -2
  7. package/ai/component-catalog.json +407 -80
  8. package/ai/component-catalog.schema.json +2 -0
  9. package/ai/component-class-owners.cjs +83 -0
  10. package/ai/component-composition-extension.d.ts +7 -0
  11. package/ai/component-composition-extension.schema.json +7 -0
  12. package/ai/{component-catalog-v2-overrides.json → component-composition-rules.json} +2 -1
  13. package/ai/{component-catalog-v2.d.ts → component-composition.d.ts} +9 -5
  14. package/ai/{component-catalog-v2.json → component-composition.json} +302 -61
  15. package/ai/{component-catalog-v2.schema.json → component-composition.schema.json} +21 -5
  16. package/ai/components/README.md +170 -0
  17. package/ai/components/application-tabs.md +65 -0
  18. package/ai/components/badge.md +72 -0
  19. package/ai/components/collapsible-panel.md +102 -0
  20. package/ai/components/content-item.md +90 -0
  21. package/ai/components/disclosure-arrow.md +77 -0
  22. package/ai/components/document-baseline.md +75 -0
  23. package/ai/components/empty-state.md +80 -0
  24. package/ai/components/feedback.md +71 -0
  25. package/ai/components/floating-toolbar.md +80 -0
  26. package/ai/components/foundation.md +65 -0
  27. package/ai/components/grid.md +93 -0
  28. package/ai/components/headers.md +63 -0
  29. package/ai/components/layout.md +75 -0
  30. package/ai/components/list-action-row.md +91 -0
  31. package/ai/components/list-header.md +89 -0
  32. package/ai/components/list-inset-control.md +74 -0
  33. package/ai/components/list-inset-text.md +72 -0
  34. package/ai/components/list-item.md +88 -0
  35. package/ai/components/list.md +103 -0
  36. package/ai/components/loading-spinner.md +72 -0
  37. package/ai/components/lucide-icon.md +66 -0
  38. package/ai/components/nav-stack.md +103 -0
  39. package/ai/components/pane.md +100 -0
  40. package/ai/components/popup-menu.md +82 -0
  41. package/ai/components/recipe-app-shell.md +57 -0
  42. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  43. package/ai/components/recipe-compact-toolbar.md +57 -0
  44. package/ai/components/recipe-composer-form.md +57 -0
  45. package/ai/components/recipe-list-detail-dialog.md +57 -0
  46. package/ai/components/recipe-list-workspace-states.md +57 -0
  47. package/ai/components/recipe-loading-inspector.md +57 -0
  48. package/ai/components/recipe-navigation-sidebar.md +57 -0
  49. package/ai/components/recipe-navigation-stack.md +57 -0
  50. package/ai/components/recipe-workspace-header.md +57 -0
  51. package/ai/components/resize.md +101 -0
  52. package/ai/components/row.md +96 -0
  53. package/ai/components/segmented-control.md +82 -0
  54. package/ai/components/select.md +107 -0
  55. package/ai/components/skeleton.md +84 -0
  56. package/ai/components/spacer.md +86 -0
  57. package/ai/components/split-view.md +102 -0
  58. package/ai/components/state-banner.md +92 -0
  59. package/ai/components/sunken-panel.md +79 -0
  60. package/ai/components/surface-scaffold.md +78 -0
  61. package/ai/components/tab-bar.md +112 -0
  62. package/ai/components/tab-scaffold.md +94 -0
  63. package/ai/components/tabs.md +90 -0
  64. package/ai/components/text.md +82 -0
  65. package/ai/components/token-search-field.md +101 -0
  66. package/ai/components/toolbar-control-group.md +100 -0
  67. package/ai/components/toolbar-text.md +76 -0
  68. package/ai/components/toolbar.md +95 -0
  69. package/ai/components/value-table.md +72 -0
  70. package/ai/components/wa-accordion-item.md +55 -0
  71. package/ai/components/wa-accordion.md +65 -0
  72. package/ai/components/wa-animated-image.md +55 -0
  73. package/ai/components/wa-animation.md +55 -0
  74. package/ai/components/wa-avatar.md +55 -0
  75. package/ai/components/wa-badge.md +55 -0
  76. package/ai/components/wa-breadcrumb-item.md +53 -0
  77. package/ai/components/wa-breadcrumb.md +55 -0
  78. package/ai/components/wa-button-group.md +59 -0
  79. package/ai/components/wa-button.md +55 -0
  80. package/ai/components/wa-callout.md +58 -0
  81. package/ai/components/wa-card.md +59 -0
  82. package/ai/components/wa-carousel-item.md +53 -0
  83. package/ai/components/wa-carousel.md +55 -0
  84. package/ai/components/wa-checkbox-group.md +55 -0
  85. package/ai/components/wa-checkbox.md +55 -0
  86. package/ai/components/wa-color-picker.md +55 -0
  87. package/ai/components/wa-comparison.md +55 -0
  88. package/ai/components/wa-copy-button.md +55 -0
  89. package/ai/components/wa-details.md +61 -0
  90. package/ai/components/wa-dialog.md +59 -0
  91. package/ai/components/wa-divider.md +53 -0
  92. package/ai/components/wa-drawer.md +55 -0
  93. package/ai/components/wa-dropdown-item.md +60 -0
  94. package/ai/components/wa-dropdown.md +60 -0
  95. package/ai/components/wa-format-bytes.md +53 -0
  96. package/ai/components/wa-format-date.md +53 -0
  97. package/ai/components/wa-format-number.md +53 -0
  98. package/ai/components/wa-icon.md +58 -0
  99. package/ai/components/wa-include.md +53 -0
  100. package/ai/components/wa-input.md +59 -0
  101. package/ai/components/wa-intersection-observer.md +53 -0
  102. package/ai/components/wa-known-date.md +53 -0
  103. package/ai/components/wa-markdown.md +53 -0
  104. package/ai/components/wa-mutation-observer.md +53 -0
  105. package/ai/components/wa-number-input.md +55 -0
  106. package/ai/components/wa-option.md +59 -0
  107. package/ai/components/wa-otp-input.md +53 -0
  108. package/ai/components/wa-page.md +53 -0
  109. package/ai/components/wa-pagination.md +55 -0
  110. package/ai/components/wa-popover.md +55 -0
  111. package/ai/components/wa-popup.md +53 -0
  112. package/ai/components/wa-progress-bar.md +53 -0
  113. package/ai/components/wa-progress-ring.md +53 -0
  114. package/ai/components/wa-qr-code.md +53 -0
  115. package/ai/components/wa-radio-group.md +59 -0
  116. package/ai/components/wa-radio.md +55 -0
  117. package/ai/components/wa-random-content.md +53 -0
  118. package/ai/components/wa-rating.md +55 -0
  119. package/ai/components/wa-relative-time.md +53 -0
  120. package/ai/components/wa-resize-observer.md +53 -0
  121. package/ai/components/wa-scroller.md +53 -0
  122. package/ai/components/wa-select.md +63 -0
  123. package/ai/components/wa-skeleton.md +53 -0
  124. package/ai/components/wa-slider.md +55 -0
  125. package/ai/components/wa-spinner.md +58 -0
  126. package/ai/components/wa-split-panel.md +58 -0
  127. package/ai/components/wa-switch.md +53 -0
  128. package/ai/components/wa-tab-group.md +69 -0
  129. package/ai/components/wa-tab-panel.md +60 -0
  130. package/ai/components/wa-tab.md +59 -0
  131. package/ai/components/wa-tag.md +59 -0
  132. package/ai/components/wa-textarea.md +53 -0
  133. package/ai/components/wa-time-input.md +55 -0
  134. package/ai/components/wa-toast-item.md +60 -0
  135. package/ai/components/wa-toast.md +60 -0
  136. package/ai/components/wa-tooltip.md +55 -0
  137. package/ai/components/wa-tree-item.md +55 -0
  138. package/ai/components/wa-tree.md +55 -0
  139. package/ai/components/wa-zoomable-frame.md +55 -0
  140. package/ai/components/workbench.md +114 -0
  141. package/ai/public-api-signatures-v1.md +572 -101
  142. package/ai/skill.md +107 -52
  143. package/ai/webawesome-jsx-signatures-v1.md +8 -2
  144. package/analyzer/component-ownership.d.mts +56 -0
  145. package/analyzer/component-ownership.mjs +184 -0
  146. package/analyzer/index.d.mts +3 -0
  147. package/analyzer/index.mjs +274 -20
  148. package/analyzer/selectors.d.mts +21 -0
  149. package/analyzer/selectors.mjs +212 -0
  150. package/dist/app-tab.js +1 -1
  151. package/dist/badge.d.ts +35 -7
  152. package/dist/badge.js +1 -1
  153. package/dist/browser/catalog.js +25 -0
  154. package/dist/browser/collapsible-panel.js +7 -0
  155. package/dist/browser/content-item.js +3 -0
  156. package/dist/browser/nav-stack.js +8 -0
  157. package/dist/browser/select.js +1 -0
  158. package/dist/browser/split-view.js +10 -0
  159. package/dist/browser/tab-scaffold.js +4 -0
  160. package/dist/browser/workbench.js +10 -0
  161. package/dist/catalog-resources.d.ts +12 -1
  162. package/dist/catalog.d.ts +14 -3
  163. package/dist/catalog.js +53 -43
  164. package/dist/catalog.js.map +1 -1
  165. package/dist/{chunk-WZ2GLEY4.js → chunk-2G2ZJQYK.js} +2 -14
  166. package/dist/chunk-2G2ZJQYK.js.map +1 -0
  167. package/dist/{chunk-R754MHXX.js → chunk-553ASUK6.js} +8 -8
  168. package/dist/chunk-553ASUK6.js.map +1 -0
  169. package/dist/{chunk-D7GWXIAS.js → chunk-5I7QGQVT.js} +1 -1
  170. package/dist/chunk-5I7QGQVT.js.map +1 -0
  171. package/dist/{chunk-RNRUVPJ3.js → chunk-63ZWBGE3.js} +3 -2
  172. package/dist/chunk-63ZWBGE3.js.map +1 -0
  173. package/dist/{chunk-44IG7PFV.js → chunk-6CINWX2E.js} +3 -3
  174. package/dist/{chunk-44IG7PFV.js.map → chunk-6CINWX2E.js.map} +1 -1
  175. package/dist/{chunk-MTM43SJO.js → chunk-6YFHCLHG.js} +2 -2
  176. package/dist/chunk-6YFHCLHG.js.map +1 -0
  177. package/dist/{chunk-C2FAYFDE.js → chunk-AGXQQFKZ.js} +2 -2
  178. package/dist/{chunk-C2FAYFDE.js.map → chunk-AGXQQFKZ.js.map} +1 -1
  179. package/dist/{chunk-ATHXW6RP.js → chunk-AHEG27M7.js} +2 -2
  180. package/dist/{chunk-ATHXW6RP.js.map → chunk-AHEG27M7.js.map} +1 -1
  181. package/dist/chunk-BFPBS5Y4.js +250 -0
  182. package/dist/chunk-BFPBS5Y4.js.map +1 -0
  183. package/dist/{chunk-5OLVUEND.js → chunk-DG6G5EPF.js} +4 -6
  184. package/dist/chunk-DG6G5EPF.js.map +1 -0
  185. package/dist/{chunk-LZXQVUGN.js → chunk-EVYKTVBQ.js} +5 -14
  186. package/dist/chunk-EVYKTVBQ.js.map +1 -0
  187. package/dist/{chunk-7GUQYHKA.js → chunk-EZVNC4J6.js} +7 -1
  188. package/dist/chunk-EZVNC4J6.js.map +1 -0
  189. package/dist/{chunk-RNZAKSME.js → chunk-F4QMLOXJ.js} +5 -4
  190. package/dist/chunk-F4QMLOXJ.js.map +1 -0
  191. package/dist/{chunk-EAX2GSS4.js → chunk-G2RKFVRB.js} +54 -20
  192. package/dist/chunk-G2RKFVRB.js.map +1 -0
  193. package/dist/chunk-JCV4GXWB.js +249 -0
  194. package/dist/chunk-JCV4GXWB.js.map +1 -0
  195. package/dist/chunk-K47P7QZC.js +17 -0
  196. package/dist/chunk-K47P7QZC.js.map +1 -0
  197. package/dist/{chunk-HMQ2ZDGG.js → chunk-KROD7KZK.js} +3 -2
  198. package/dist/chunk-KROD7KZK.js.map +1 -0
  199. package/dist/{chunk-5NDQABWK.js → chunk-M7QV3IHH.js} +3 -1
  200. package/dist/chunk-M7QV3IHH.js.map +1 -0
  201. package/dist/chunk-MA73TA6D.js +42 -0
  202. package/dist/chunk-MA73TA6D.js.map +1 -0
  203. package/dist/{chunk-ZMBU522F.js → chunk-MEY33VWB.js} +2 -2
  204. package/dist/{chunk-ZMBU522F.js.map → chunk-MEY33VWB.js.map} +1 -1
  205. package/dist/chunk-MP2GDBQZ.js +50 -0
  206. package/dist/chunk-MP2GDBQZ.js.map +1 -0
  207. package/dist/{chunk-3NBL3OUQ.js → chunk-NAPE7WUS.js} +2 -2
  208. package/dist/chunk-NAPE7WUS.js.map +1 -0
  209. package/dist/{chunk-BSKEH3UC.js → chunk-NBYTIVHS.js} +2 -2
  210. package/dist/{chunk-BSKEH3UC.js.map → chunk-NBYTIVHS.js.map} +1 -1
  211. package/dist/{chunk-T22EM4ET.js → chunk-OUK6QRDR.js} +71 -31
  212. package/dist/chunk-OUK6QRDR.js.map +1 -0
  213. package/dist/chunk-PWXNJS2B.js +115 -0
  214. package/dist/chunk-PWXNJS2B.js.map +1 -0
  215. package/dist/{chunk-GUIHMIT2.js → chunk-QOWG4ZCL.js} +5 -4
  216. package/dist/chunk-QOWG4ZCL.js.map +1 -0
  217. package/dist/{chunk-5I22LMCV.js → chunk-VZOFZPSO.js} +2 -2
  218. package/dist/chunk-VZOFZPSO.js.map +1 -0
  219. package/dist/{chunk-4BIMLITI.js → chunk-WLG6SSNT.js} +5 -3
  220. package/dist/chunk-WLG6SSNT.js.map +1 -0
  221. package/dist/{chunk-NE5JAOQS.js → chunk-WOUF7YXM.js} +3 -3
  222. package/dist/{chunk-NE5JAOQS.js.map → chunk-WOUF7YXM.js.map} +1 -1
  223. package/dist/{chunk-N7FHFNT6.js → chunk-XCO6YCYM.js} +34 -5
  224. package/dist/chunk-XCO6YCYM.js.map +1 -0
  225. package/dist/{chunk-TZ5IHWB2.js → chunk-XDKAYSVD.js} +5 -3
  226. package/dist/chunk-XDKAYSVD.js.map +1 -0
  227. package/dist/collapsible-panel.d.ts +14 -3
  228. package/dist/collapsible-panel.js +13 -16
  229. package/dist/collapsible-panel.js.map +1 -1
  230. package/dist/content-item.d.ts +46 -0
  231. package/dist/content-item.js +4 -0
  232. package/dist/content-item.js.map +1 -0
  233. package/dist/css-values.d.ts +5 -11
  234. package/dist/css-values.js +1 -1
  235. package/dist/disclosure-arrow.d.ts +4 -1
  236. package/dist/disclosure-arrow.js +1 -1
  237. package/dist/floating-toolbar.d.ts +17 -6
  238. package/dist/floating-toolbar.js +1 -1
  239. package/dist/grid.js +1 -1
  240. package/dist/help-tags-register.d.ts +13 -0
  241. package/dist/help-tags-register.js +9 -0
  242. package/dist/help-tags-register.js.map +1 -0
  243. package/dist/index.d.ts +7 -5
  244. package/dist/index.js +29 -26
  245. package/dist/list-action-row.js +2 -1
  246. package/dist/list-header.d.ts +14 -1
  247. package/dist/list-header.js +1 -1
  248. package/dist/list-inset-control.d.ts +1 -1
  249. package/dist/list-inset-control.js +1 -1
  250. package/dist/list-inset-text.d.ts +3 -10
  251. package/dist/list-inset-text.js +1 -1
  252. package/dist/list-item.js +2 -1
  253. package/dist/list.d.ts +10 -3
  254. package/dist/list.js +1 -1
  255. package/dist/nav-stack.d.ts +50 -5
  256. package/dist/nav-stack.js +4 -1
  257. package/dist/pane.d.ts +37 -2
  258. package/dist/pane.js +1 -1
  259. package/dist/{panel-toolbar-BFQxFITu.d.ts → panel-toolbar-BN4x0rth.d.ts} +13 -1
  260. package/dist/popup-menu-register.js +3 -2
  261. package/dist/popup-menu-register.js.map +1 -1
  262. package/dist/popup-menu.js +1 -1
  263. package/dist/row.d.ts +1 -1
  264. package/dist/row.js +1 -1
  265. package/dist/select-register.js +70 -3
  266. package/dist/select-register.js.map +1 -1
  267. package/dist/select.d.ts +46 -8
  268. package/dist/select.js +2 -1
  269. package/dist/{divider-sides-BzB6rphT.d.ts → sides-BPSWde0A.d.ts} +1 -3
  270. package/dist/skeleton.js +1 -1
  271. package/dist/spacer.js +1 -1
  272. package/dist/split-view.d.ts +31 -3
  273. package/dist/split-view.js +34 -5
  274. package/dist/split-view.js.map +1 -1
  275. package/dist/state-banner.js +1 -1
  276. package/dist/styles/app-tab.css +31 -0
  277. package/dist/styles/badge.css +32 -11
  278. package/dist/styles/catalog/components/catalog-example.css +1 -1
  279. package/dist/styles/catalog/components/catalog-stage.css +1 -1
  280. package/dist/styles/collapsible-panel.css +199 -42
  281. package/dist/styles/content-item.css +30 -0
  282. package/dist/styles/floating-toolbar.css +26 -2
  283. package/dist/styles/foundation.css +28 -19
  284. package/dist/styles/layout.css +1 -21
  285. package/dist/styles/list-action-row.css +13 -1
  286. package/dist/styles/list-header.css +0 -12
  287. package/dist/styles/list-inset-text.css +1 -2
  288. package/dist/styles/list-item.css +14 -1
  289. package/dist/styles/list.css +5 -5
  290. package/dist/styles/nav-stack.css +63 -71
  291. package/dist/styles/pane.css +83 -1
  292. package/dist/styles/popup-menu.css +229 -0
  293. package/dist/styles/resizable-region.css +70 -15
  294. package/dist/styles/select.css +60 -19
  295. package/dist/styles/skeleton.css +30 -3
  296. package/dist/styles/split-view.css +31 -32
  297. package/dist/styles/state-banner.css +0 -19
  298. package/dist/styles/surface-scaffold.css +8 -3
  299. package/dist/styles/tab-bar.css +79 -28
  300. package/dist/styles/tab-scaffold.css +60 -14
  301. package/dist/styles/text.css +17 -1
  302. package/dist/styles/token-search-field.css +4 -4
  303. package/dist/styles/toolbar-control-group.css +143 -69
  304. package/dist/styles/toolbar-text.css +21 -0
  305. package/dist/styles/toolbar.css +22 -37
  306. package/dist/styles/value-table.css +19 -2
  307. package/dist/styles/webawesome.css +3 -1
  308. package/dist/styles/workbench.css +145 -42
  309. package/dist/tab-scaffold.d.ts +46 -2
  310. package/dist/tab-scaffold.js +52 -16
  311. package/dist/tab-scaffold.js.map +1 -1
  312. package/dist/token-search-field.d.ts +4 -2
  313. package/dist/token-search-field.js +1 -1
  314. package/dist/toolbar-text.d.ts +7 -1
  315. package/dist/toolbar-text.js +1 -1
  316. package/dist/toolbar.d.ts +20 -5
  317. package/dist/toolbar.js +1 -1
  318. package/dist/{types-D6vzj-VT.d.ts → types-BuHELdXR.d.ts} +39 -6
  319. package/dist/value-table.js +1 -1
  320. package/dist/webawesome.d.ts +7 -1
  321. package/dist/wire-catalog.d.ts +15 -2
  322. package/dist/wire-catalog.js +12 -2
  323. package/dist/wire-catalog.js.map +1 -1
  324. package/dist/wire-scroll-dividers.d.ts +69 -0
  325. package/dist/wire-scroll-dividers.js +3 -0
  326. package/dist/wire-scroll-dividers.js.map +1 -0
  327. package/dist/wire-token-search-fields.js +1 -1
  328. package/dist/workbench.d.ts +60 -22
  329. package/dist/workbench.js +1 -1
  330. package/docs/accessibility.md +116 -7
  331. package/docs/app-layouts.md +18 -8
  332. package/docs/catalog.md +26 -7
  333. package/docs/collapsible-panel.md +32 -9
  334. package/docs/component-contract.md +182 -30
  335. package/docs/component-selection.md +59 -46
  336. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  337. package/docs/design/templates/empty-state/with-action.svg +1 -1
  338. package/docs/design/templates/empty-state-dark.svg +1 -1
  339. package/docs/design/templates/empty-state.svg +1 -1
  340. package/docs/design/templates/list/compact-dark.svg +1 -1
  341. package/docs/design/templates/list/compact.svg +1 -1
  342. package/docs/design/templates/list/stack-dark.svg +1 -1
  343. package/docs/design/templates/list/stack.svg +1 -1
  344. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  345. package/docs/design/templates/list-action-row/default.svg +1 -1
  346. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  347. package/docs/design/templates/list-action-row/selected.svg +1 -1
  348. package/docs/design/templates/list-action-row-dark.svg +1 -1
  349. package/docs/design/templates/list-action-row.svg +1 -1
  350. package/docs/design/templates/list-dark.svg +1 -1
  351. package/docs/design/templates/list-item/default-dark.svg +1 -1
  352. package/docs/design/templates/list-item/default.svg +1 -1
  353. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  354. package/docs/design/templates/list-item/selected.svg +1 -1
  355. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  356. package/docs/design/templates/list-item/trailing.svg +1 -1
  357. package/docs/design/templates/list-item-dark.svg +1 -1
  358. package/docs/design/templates/list-item.svg +1 -1
  359. package/docs/design/templates/list.svg +1 -1
  360. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  361. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  362. package/docs/design/templates/tab-bar-dark.svg +1 -1
  363. package/docs/design/templates/tab-bar.svg +1 -1
  364. package/docs/design/templates/value-table/details-dark.svg +1 -1
  365. package/docs/design/templates/value-table/details.svg +1 -1
  366. package/docs/design/templates/value-table-dark.svg +1 -1
  367. package/docs/design/templates/value-table.svg +1 -1
  368. package/docs/design-philosophy.md +31 -4
  369. package/docs/examples/application-ui-profile.json +4 -4
  370. package/docs/examples/command-palette-adapter.tsx +3 -2
  371. package/docs/examples/{component-catalog-extension-v2.json → component-composition-extension.json} +3 -3
  372. package/docs/layout.md +148 -29
  373. package/docs/nav-stack.md +77 -3
  374. package/docs/recipes.md +4 -3
  375. package/docs/split-view.md +54 -5
  376. package/docs/tab-scaffold.md +73 -2
  377. package/docs/type-contracts.md +21 -20
  378. package/docs/ui-analyzer.md +99 -5
  379. package/docs/ui-doctor.md +10 -0
  380. package/docs/ux-demo.md +2 -2
  381. package/docs/webawesome-theme.md +1 -2
  382. package/docs/workbench.md +57 -11
  383. package/doctor/index.mjs +6 -1
  384. package/llms.txt +117 -24
  385. package/package.json +29 -6
  386. package/ux-demo/recipes/collapsible-sidebar.tsx +3 -3
  387. package/ux-demo/recipes/composer-form.tsx +0 -1
  388. package/ux-demo/recipes/list-detail-dialog.tsx +0 -2
  389. package/ux-demo/recipes/list-workspace-states.tsx +0 -1
  390. package/ux-demo/recipes/loading-inspector.tsx +0 -1
  391. package/ux-demo/recipes/navigation-sidebar.tsx +3 -2
  392. package/ux-demo/recipes/navigation-stack.tsx +3 -2
  393. package/ux-demo/recipes/workspace-header.tsx +0 -1
  394. package/ai/component-catalog-extension-v2.d.ts +0 -7
  395. package/ai/component-catalog-extension-v2.schema.json +0 -7
  396. package/dist/chunk-3NBL3OUQ.js.map +0 -1
  397. package/dist/chunk-4BIMLITI.js.map +0 -1
  398. package/dist/chunk-5I22LMCV.js.map +0 -1
  399. package/dist/chunk-5NDQABWK.js.map +0 -1
  400. package/dist/chunk-5OLVUEND.js.map +0 -1
  401. package/dist/chunk-7GUQYHKA.js.map +0 -1
  402. package/dist/chunk-D7GWXIAS.js.map +0 -1
  403. package/dist/chunk-DQA5FMOX.js +0 -85
  404. package/dist/chunk-DQA5FMOX.js.map +0 -1
  405. package/dist/chunk-EAX2GSS4.js.map +0 -1
  406. package/dist/chunk-GUIHMIT2.js.map +0 -1
  407. package/dist/chunk-HMQ2ZDGG.js.map +0 -1
  408. package/dist/chunk-LZXQVUGN.js.map +0 -1
  409. package/dist/chunk-MTM43SJO.js.map +0 -1
  410. package/dist/chunk-N7FHFNT6.js.map +0 -1
  411. package/dist/chunk-R754MHXX.js.map +0 -1
  412. package/dist/chunk-RNRUVPJ3.js.map +0 -1
  413. package/dist/chunk-RNZAKSME.js.map +0 -1
  414. package/dist/chunk-T22EM4ET.js.map +0 -1
  415. package/dist/chunk-TZ5IHWB2.js.map +0 -1
  416. package/dist/chunk-WZ2GLEY4.js.map +0 -1
  417. package/dist/chunk-XD7DWYXG.js +0 -34
  418. package/dist/chunk-XD7DWYXG.js.map +0 -1
@@ -0,0 +1,75 @@
1
+ # Document baseline
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:document-baseline` · Kerf UI · CSS composition · Foundation
6
+
7
+ Opt-in document-level defaults: border-box sizing, body margin/font/surface, link color, and the html → body → .kui-app-root full-height chain.
8
+
9
+ ## When to use
10
+
11
+ Let an application opt into Kerf UI-owned document defaults and a definite full-height chain for a percentage-height application shell.
12
+
13
+ - An application wants Kerf UI to own document-level box sizing, body typography, surface, and link color.
14
+ - A full-height shell (Workbench, SplitView, NavStack, or TabScaffold) mounts into one direct container: put .kui-app-root on that container.
15
+
16
+ **Not when:**
17
+
18
+ - Do not put .kui-app-root on several sibling containers; each requests the full available document height.
19
+ - Do not import it where the host page already owns document-level defaults it would override.
20
+
21
+ **Alternatives:**
22
+
23
+ - [Foundation tokens](./foundation.md) (composes-with) — Import the foundation tokens the baseline reads; the baseline itself adds only global document selectors.
24
+
25
+ ## Imports
26
+
27
+ - CSS: import `@kerfjs/ui/document.css` once.
28
+ - Declared side effects: css.
29
+
30
+ ## Props
31
+
32
+ No props: this entry has no JavaScript API.
33
+
34
+ **Variants (configure, do not restyle):**
35
+
36
+ - document-flow page (no .kui-app-root)
37
+ - full-height application root
38
+
39
+ ## Composition
40
+
41
+ - Parents: any.
42
+ - Contexts: `application-ui`.
43
+ - Children: unrestricted.
44
+
45
+ ## State and wiring
46
+
47
+ **The app owns:** the one direct mount container; application overrides loaded after the baseline.
48
+
49
+ No wiring helper.
50
+
51
+ ## Geometry
52
+
53
+ Margin: none · border: none · padding: none (layout role: foundation). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
54
+
55
+ - The body margin is removed; .kui-app-root only sets height: 100% and owns no inset.
56
+
57
+ ## Accessibility
58
+
59
+ - Links keep the semantic link color at zero specificity so application focus and link styles still apply.
60
+
61
+ ## Styling boundary
62
+
63
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
64
+
65
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-app-root`.
66
+
67
+ Classes an application may place on its own elements: `kui-app-root`.
68
+
69
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
70
+
71
+ ## Related
72
+
73
+ - Components: [Foundation tokens](./foundation.md).
74
+ - Docs: [`docs/document-baseline.md`](../../docs/document-baseline.md).
75
+ - UX catalog route: `?component=document-baseline`.
@@ -0,0 +1,80 @@
1
+ # EmptyState
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:empty-state` · Kerf UI · component · Feedback
6
+
7
+ ## When to use
8
+
9
+ Actionable empty and busy content states.
10
+
11
+ - Explain absent or busy content and offer an optional recovery action.
12
+
13
+ **Not when:**
14
+
15
+ - Do not use for an inline update or transient success.
16
+
17
+ **Alternatives:**
18
+
19
+ - [StateBanner](./state-banner.md) (nearest)
20
+ - [Toast](./wa-toast.md) (prefer-over)
21
+
22
+ ## Imports
23
+
24
+ - JavaScript: `@kerfjs/ui/empty-state` — exports `EmptyState`.
25
+ - CSS: the browser build of `@kerfjs/ui/empty-state` pulls its CSS automatically; import `@kerfjs/ui/empty-state.css` manually only without the `browser` export condition.
26
+ - Declared side effects: browser-condition-css.
27
+
28
+ ## Props
29
+
30
+ Exact prop names and types: [`@kerfjs/ui/empty-state`](../public-api-signatures-v1.md#kerfjsuiempty-state) in `public-api-signatures-v1.md`. Do not infer props from examples.
31
+
32
+ **Variants (configure, do not restyle):**
33
+
34
+ - actionable
35
+ - busy
36
+ - illustrated
37
+
38
+ ## Composition
39
+
40
+ - Parents: any.
41
+ - Contexts: `empty-content`, `busy-content`.
42
+ - Children: unrestricted.
43
+ - Built from: [LucideIcon](./lucide-icon.md), [LoadingSpinner](./loading-spinner.md).
44
+
45
+ Zones (a zone is bound to JSX only through its listed prop; never assume the zone id is a prop):
46
+
47
+ - `icon` — JSX prop `icon`; accepts `dormant-decoration`; 0–1.
48
+ - `action` — JSX prop `action`; accepts `control`; 0–1.
49
+
50
+ ## State and wiring
51
+
52
+ **The app owns:** empty/busy policy; recovery action; copy.
53
+
54
+ No wiring helper.
55
+
56
+ ## Geometry
57
+
58
+ Margin: self · border: self · padding: self (layout role: feedback). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
59
+
60
+ ## Accessibility
61
+
62
+ - Busy state uses aria-busy; the illustration never supplies the only label.
63
+
64
+ ## Styling boundary
65
+
66
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
67
+
68
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-empty-state`, `kui-empty-state__action`, `kui-empty-state__icon`.
69
+
70
+ Never put `kui-empty-state`, `kui-empty-state__action`, `kui-empty-state__icon` on an element you write; render `EmptyState` instead (`KUI-L103`).
71
+
72
+ Public tokens it reads: `--kui-color-neutral-on-quiet`, `--kui-color-text`, `--kui-empty-state-foreground`, `--kui-empty-state-title`, `--kui-font-l`, `--kui-font-s`, `--kui-space-xl`, `--kui-space-xs`. Set a token only where its public contract allows; prefer a prop.
73
+
74
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
75
+
76
+ ## Related
77
+
78
+ - Components: [LucideIcon](./lucide-icon.md), [LoadingSpinner](./loading-spinner.md), [StateBanner](./state-banner.md), [Toast](./wa-toast.md).
79
+ - Docs: [`docs/component-selection.md`](../../docs/component-selection.md), [`docs/component-selection.md#ambiguous-choices`](../../docs/component-selection.md#ambiguous-choices).
80
+ - UX catalog route: `?component=empty-state`.
@@ -0,0 +1,71 @@
1
+ # Feedback
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:feedback` · Kerf UI · CSS composition · Feedback
6
+
7
+ ## When to use
8
+
9
+ Banners, empty states, and labeled progress.
10
+
11
+ - Compose persistent status, empty/busy content, and compact loading feedback.
12
+
13
+ **Not when:**
14
+
15
+ - Do not collapse different message lifetimes or urgency into one visual treatment.
16
+
17
+ **Alternatives:**
18
+
19
+ - [StateBanner](./state-banner.md) (nearest)
20
+ - [EmptyState](./empty-state.md) (nearest)
21
+ - [Callout](./wa-callout.md) (prefer-over)
22
+ - [Toast](./wa-toast.md) (prefer-over)
23
+
24
+ ## Imports
25
+
26
+ - Nothing to import: this is a reference composition.
27
+ - Declared side effects: css.
28
+
29
+ ## Props
30
+
31
+ No props: this entry has no JavaScript API.
32
+
33
+ **Variants (configure, do not restyle):**
34
+
35
+ - banner
36
+ - empty
37
+ - busy
38
+ - spinner
39
+
40
+ ## Composition
41
+
42
+ - Parents: any.
43
+ - Contexts: `application-ui`.
44
+ - Children: unrestricted.
45
+ - Built from: [StateBanner](./state-banner.md), [EmptyState](./empty-state.md), [LoadingSpinner](./loading-spinner.md).
46
+
47
+ ## State and wiring
48
+
49
+ **The app owns:** state mapping; message lifetime; recovery policy.
50
+
51
+ No wiring helper.
52
+
53
+ ## Geometry
54
+
55
+ Margin: child · border: child · padding: child (layout role: feedback). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
56
+
57
+ ## Accessibility
58
+
59
+ - Choose polite status versus assertive alert deliberately.
60
+
61
+ ## Styling boundary
62
+
63
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
64
+
65
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
66
+
67
+ ## Related
68
+
69
+ - Components: [StateBanner](./state-banner.md), [EmptyState](./empty-state.md), [LoadingSpinner](./loading-spinner.md), [Callout](./wa-callout.md), [Toast](./wa-toast.md).
70
+ - Docs: [`docs/component-selection.md`](../../docs/component-selection.md), [`docs/component-selection.md#ambiguous-choices`](../../docs/component-selection.md#ambiguous-choices).
71
+ - UX catalog route: `?component=feedback`.
@@ -0,0 +1,80 @@
1
+ # FloatingToolbar
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:floating-toolbar` · Kerf UI · component · Structure
6
+
7
+ ## When to use
8
+
9
+ A transparent, forced-dark toolbar that floats over its container's content.
10
+
11
+ - Float a small cluster of controls (e.g. a drawer restore) over scrolling content without covering dialogs.
12
+
13
+ **Not when:**
14
+
15
+ - Do not use for a primary page or panel toolbar, or for anything that must sit above overlays (it is not top-layer).
16
+
17
+ **Alternatives:**
18
+
19
+ - [Toolbar](./toolbar.md) (nearest)
20
+
21
+ ## Imports
22
+
23
+ - JavaScript: `@kerfjs/ui/floating-toolbar` — exports `FloatingToolbar`.
24
+ - CSS: the browser build of `@kerfjs/ui/floating-toolbar` pulls its CSS automatically; import `@kerfjs/ui/floating-toolbar.css` manually only without the `browser` export condition.
25
+ - Declared side effects: browser-condition-css.
26
+
27
+ ## Props
28
+
29
+ Exact prop names and types: [`@kerfjs/ui/floating-toolbar`](../public-api-signatures-v1.md#kerfjsuifloating-toolbar) in `public-api-signatures-v1.md`. Do not infer props from examples.
30
+
31
+ **Variants (configure, do not restyle):**
32
+
33
+ - bottom-end
34
+ - bottom-start
35
+ - bottom
36
+ - top-end
37
+ - top-start
38
+ - top
39
+
40
+ **CSS-value props** (typed builders from `@kerfjs/ui/css-values`; raw CSS strings are rejected):
41
+
42
+ - `inset`: length grammar; raw values: forbid; helpers `px`, `rem`, `em`, `pct`, `space`, `lengthVar`, `calc` — e.g. `inset={space("xs")}`
43
+
44
+ ## Composition
45
+
46
+ - Parents: any.
47
+ - Contexts: `application-ui`.
48
+ - Children: unrestricted.
49
+
50
+ ## State and wiring
51
+
52
+ **The app owns:** controls; position; visibility.
53
+
54
+ No wiring helper.
55
+
56
+ ## Geometry
57
+
58
+ Margin: none · border: child · padding: child (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
59
+
60
+ ## Accessibility
61
+
62
+ - Give the toolbar an accessible name (label is required — it exposes role="toolbar").
63
+
64
+ ## Styling boundary
65
+
66
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
67
+
68
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-floating-toolbar`.
69
+
70
+ Never put `kui-floating-toolbar` on an element you write; render `FloatingToolbar` instead (`KUI-L103`).
71
+
72
+ Public tokens it reads: `--kui-floating-toolbar-inset`, `--kui-space-m`, `--kui-space-xs`. Set a token only where its public contract allows; prefer a prop.
73
+
74
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
75
+
76
+ ## Related
77
+
78
+ - Components: [Toolbar](./toolbar.md).
79
+ - Docs: [`docs/component-selection.md`](../../docs/component-selection.md), [`docs/component-selection.md#problem-to-component-matrix`](../../docs/component-selection.md#problem-to-component-matrix).
80
+ - UX catalog route: `?component=floating-toolbar`.
@@ -0,0 +1,65 @@
1
+ # Foundation tokens
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:foundation` · Kerf UI · CSS composition · Foundation
6
+
7
+ The complete public typography, spacing, breakpoint, geometry, radius, color, focus, and shadow token surface shipped by foundation.css.
8
+
9
+ ## When to use
10
+
11
+ Provide the shared semantic token foundation for application themes and every styled Kerf UI component.
12
+
13
+ - Theme a Kerf application globally or reuse the shipped semantic typography, spacing, geometry, color, focus, and shadow values in application-owned composition CSS.
14
+
15
+ **Not when:**
16
+
17
+ - Do not replace a component-specific prop or token with a broad foundation override when only one component instance should change.
18
+
19
+ ## Imports
20
+
21
+ - CSS: import `@kerfjs/ui/foundation.css` once.
22
+ - Declared side effects: css.
23
+
24
+ ## Props
25
+
26
+ No props: this entry has no JavaScript API.
27
+
28
+ **Variants (configure, do not restyle):**
29
+
30
+ - light
31
+ - dark
32
+ - increased contrast
33
+
34
+ ## Composition
35
+
36
+ - Parents: any.
37
+ - Contexts: `application-ui`.
38
+ - Children: unrestricted.
39
+
40
+ ## State and wiring
41
+
42
+ **The app owns:** application theme overrides; responsive policy at the cataloged device-class breakpoints.
43
+
44
+ No wiring helper.
45
+
46
+ ## Geometry
47
+
48
+ Margin: none · border: none · padding: none (layout role: foundation). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
49
+
50
+ ## Accessibility
51
+
52
+ - Preserve semantic contrast relationships and the visible focus ring when overriding foundation colors.
53
+
54
+ ## Styling boundary
55
+
56
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
57
+
58
+ Public tokens it reads: `--kui-font-sans`, `--kui-font-mono`, `--kui-font-2xs`, `--kui-font-xs`, `--kui-font-s`, `--kui-font-m`, `--kui-font-l`, `--kui-font-2xl`, `--kui-font-weight-semibold`, `--kui-space-none`, `--kui-space-2xs`, `--kui-space-xs`, `--kui-space-s`, `--kui-space-m`, `--kui-space-l`, `--kui-space-xl`, `--kui-bp-mobile`, `--kui-bp-tablet`, `--kui-bp-desktop`, `--kui-bp-xl-desktop`, `--kui-layout-inline-margin`, `--kui-layout-item-border-width`, `--kui-layout-item-padding`, `--kui-layout-item-gap`, `--kui-layout-content-gap`, `--kui-layout-control-gap`, `--kui-layout-metadata-gap`, `--kui-layout-highlight-inset`, `--kui-layout-rounded-radius`, `--kui-layout-pill-radius`, `--kui-toolbar-group-inner-size`, `--kui-toolbar-group-size`, `--kui-toolbar-gap`, `--kui-safe-area-block-start`, `--kui-safe-area-block-end`, `--kui-safe-area-inline-start`, `--kui-safe-area-inline-end`, `--kui-radius-s`, `--kui-radius-m`, `--kui-radius-l`, `--kui-radius-circle`, `--kui-radius-pill`, `--kui-disclosure-icon-scale`, `--kui-color-surface`, `--kui-color-surface-raised`, `--kui-color-surface-lowered`, `--kui-color-text`, `--kui-color-text-quiet`, `--kui-color-text-link`, `--kui-color-neutral-fill-quiet`, `--kui-color-neutral-fill-normal`, `--kui-color-neutral-fill-loud`, `--kui-color-neutral-border-quiet`, `--kui-color-neutral-border-normal`, `--kui-color-neutral-border-loud`, `--kui-color-neutral-on-quiet`, `--kui-color-neutral-on-normal`, `--kui-color-neutral-on-loud`, `--kui-color-brand-fill-loud`, `--kui-color-brand-fill-quiet`, `--kui-color-brand-fill-normal`, `--kui-color-brand-border-quiet`, `--kui-color-brand-border-normal`, `--kui-color-brand-border-loud`, `--kui-color-brand-on-quiet`, `--kui-color-brand-on-normal`, `--kui-color-brand-on-loud`, `--kui-color-brand-on-fill`, `--kui-color-pop-fill-loud`, `--kui-color-pop-fill-quiet`, `--kui-color-pop-fill-normal`, `--kui-color-pop-border-quiet`, `--kui-color-pop-border-normal`, `--kui-color-pop-border-loud`, `--kui-color-pop-on-quiet`, `--kui-color-pop-on-normal`, `--kui-color-pop-on-loud`, `--kui-color-pop-on-fill`, `--kui-color-success-fill-loud`, `--kui-color-success-fill-quiet`, `--kui-color-success-fill-normal`, `--kui-color-success-border-quiet`, `--kui-color-success-border-normal`, `--kui-color-success-border-loud`, `--kui-color-success-on-quiet`, `--kui-color-success-on-normal`, `--kui-color-success-on-loud`, `--kui-color-success-on-fill`, `--kui-color-warning-fill-loud`, `--kui-color-warning-fill-quiet`, `--kui-color-warning-fill-normal`, `--kui-color-warning-border-quiet`, `--kui-color-warning-border-normal`, `--kui-color-warning-border-loud`, `--kui-color-warning-on-quiet`, `--kui-color-warning-on-normal`, `--kui-color-warning-on-loud`, `--kui-color-warning-on-fill`, `--kui-color-danger-fill-loud`, `--kui-color-danger-fill-quiet`, `--kui-color-danger-fill-normal`, `--kui-color-danger-border-quiet`, `--kui-color-danger-border-normal`, `--kui-color-danger-border-loud`, `--kui-color-danger-on-quiet`, `--kui-color-danger-on-normal`, `--kui-color-danger-on-loud`, `--kui-color-danger-on-fill`, `--kui-focus-ring`, `--kui-shadow-s`, `--kui-shadow-l`. Set a token only where its public contract allows; prefer a prop.
59
+
60
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
61
+
62
+ ## Related
63
+
64
+ - Docs: [`docs/component-selection.md`](../../docs/component-selection.md), [`docs/component-selection.md#foundation-tokens`](../../docs/component-selection.md#foundation-tokens).
65
+ - UX catalog route: `?component=foundation`.
@@ -0,0 +1,93 @@
1
+ # Grid
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:grid` · Kerf UI · component · Structure
6
+
7
+ A fixed positive number of evenly distributed minmax columns with a typed xs gap by default and optional flex participation.
8
+
9
+ ## When to use
10
+
11
+ Arrange related siblings in equal-width columns without repeating application-owned grid-template-columns CSS.
12
+
13
+ - Arrange related siblings into a fixed positive number of equal-width columns.
14
+ - Prevent wider intrinsic content from making one fractional track wider than its peers.
15
+ - Use a finite flex keyword or the flex() builder when Grid participates in a flexible parent layout.
16
+
17
+ **Not when:**
18
+
19
+ - Do not use Grid for intrinsic, asymmetric, spanning, auto-fit, or masonry tracks; use application-owned CSS grid.
20
+ - Do not use Grid when columns need a user-operable separator; use ResizableRegion.
21
+ - Do not expect Grid to choose responsive breakpoints or change the column count; the application owns that policy.
22
+ - Do not pass raw CSS strings to gap or flex, mix their distinct grammars, or use s/xl spacing steps without a deliberate exception.
23
+
24
+ **Alternatives:**
25
+
26
+ - [Row](./row.md) (axis-alternative) — Use Row for one horizontal flex line, alignment, or wrapping rather than fixed equal tracks.
27
+ - [List](./list.md) (axis-alternative) — Use List when the main layout axis is vertical.
28
+ - [ResizableRegion](./resize.md) (interactive-alternative) — Use ResizableRegion when people must adjust the boundary between tracks.
29
+
30
+ ## Imports
31
+
32
+ - JavaScript: `@kerfjs/ui/grid` — exports `Grid`.
33
+ - CSS: the browser build of `@kerfjs/ui/grid` pulls its CSS automatically; import `@kerfjs/ui/grid.css` manually only without the `browser` export condition.
34
+ - Declared side effects: browser-condition-css.
35
+
36
+ ## Props
37
+
38
+ Exact prop names and types: [`@kerfjs/ui/grid`](../public-api-signatures-v1.md#kerfjsuigrid) in `public-api-signatures-v1.md`. Do not infer props from examples.
39
+
40
+ **Variants (configure, do not restyle):**
41
+
42
+ - any positive safe-integer equal-track count
43
+ - named none/2xs/xs/s/m/l/xl token gap
44
+ - typed CssLength gap
45
+ - boolean, finite-keyword, or typed CssFlex flex
46
+ - fill: the layout root fills a definite-height parent
47
+ - rootAttributes: safe data-\* metadata on the root
48
+
49
+ **CSS-value props** (typed builders from `@kerfjs/ui/css-values`; raw CSS strings are rejected):
50
+
51
+ - `gap`: length grammar; raw values: forbid; shorthands `none`, `2xs`, `xs`, `m`, `l`; exceptional (justify) `s`, `xl`; helpers `px`, `rem`, `em`, `pct`, `space`, `lengthVar`, `calc` — e.g. `gap="m"`
52
+ - `flex`: flex grammar; raw values: forbid; shorthands `none`, `auto`, `initial`; helpers `flex` — e.g. `flex`
53
+
54
+ ## Composition
55
+
56
+ - Parents: any.
57
+ - Contexts: `application-ui`.
58
+ - Children: unrestricted.
59
+
60
+ ## State and wiring
61
+
62
+ **The app owns:** child semantics and content; column count and responsive changes; typed gap and flex choices.
63
+
64
+ No wiring helper.
65
+
66
+ ## Geometry
67
+
68
+ Margin: none · border: none · padding: none (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
69
+
70
+ - Every track uses minmax(0, 1fr), so unequal intrinsic widths cannot break equal distribution.
71
+
72
+ ## Accessibility
73
+
74
+ - Grid adds layout only and no grid role; children retain responsibility for native or ARIA semantics.
75
+ - Responsive column-count changes must preserve source and focus order.
76
+
77
+ ## Styling boundary
78
+
79
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
80
+
81
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-grid`.
82
+
83
+ Never put `kui-grid` on an element you write; render `Grid` instead (`KUI-L103`).
84
+
85
+ Public tokens it reads: `--kui-grid-gap`, `--kui-layout-item-gap`. Set a token only where its public contract allows; prefer a prop.
86
+
87
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
88
+
89
+ ## Related
90
+
91
+ - Components: [Row](./row.md), [List](./list.md), [ResizableRegion](./resize.md).
92
+ - Docs: [`docs/layout.md`](../../docs/layout.md), [`docs/layout.md#grid`](../../docs/layout.md#grid).
93
+ - UX catalog route: `?component=grid`.
@@ -0,0 +1,63 @@
1
+ # Headers
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:headers` · Kerf UI · CSS composition · Structure
6
+
7
+ ## When to use
8
+
9
+ Page, dialog, and definition-list hierarchy.
10
+
11
+ - Compose page, dialog, and definition-list hierarchy from their distinct primitives.
12
+
13
+ **Not when:**
14
+
15
+ - Do not reuse one header primitive only because its typography looks similar.
16
+
17
+ ## Imports
18
+
19
+ - Nothing to import: this is a reference composition.
20
+ - Declared side effects: css.
21
+
22
+ ## Props
23
+
24
+ No props: this entry has no JavaScript API.
25
+
26
+ **Variants (configure, do not restyle):**
27
+
28
+ - page
29
+ - dialog
30
+ - key/value
31
+
32
+ ## Composition
33
+
34
+ - Parents: any.
35
+ - Contexts: `application-ui`.
36
+ - Children: unrestricted.
37
+ - Built from: [Toolbar](./toolbar.md), [ToolbarControlGroup](./toolbar-control-group.md), [ToolbarText](./toolbar-text.md), [ValueTable](./value-table.md).
38
+
39
+ ## State and wiring
40
+
41
+ **The app owns:** scope hierarchy; copy; actions.
42
+
43
+ No wiring helper.
44
+
45
+ ## Geometry
46
+
47
+ Margin: child · border: child · padding: child (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
48
+
49
+ ## Accessibility
50
+
51
+ - Preserve heading and description relationships for the containing surface.
52
+
53
+ ## Styling boundary
54
+
55
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
56
+
57
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
58
+
59
+ ## Related
60
+
61
+ - Components: [Toolbar](./toolbar.md), [ToolbarControlGroup](./toolbar-control-group.md), [ToolbarText](./toolbar-text.md), [ValueTable](./value-table.md).
62
+ - Docs: [`docs/component-selection.md`](../../docs/component-selection.md), [`docs/component-selection.md#ambiguous-choices`](../../docs/component-selection.md#ambiguous-choices).
63
+ - UX catalog route: `?component=headers`.
@@ -0,0 +1,75 @@
1
+ # Application layout
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:layout` · Kerf UI · CSS composition · Foundation
6
+
7
+ Unpadded panes, 24px content stacks, and self-contained 8/1/8 content items for application layout boundaries.
8
+
9
+ ## When to use
10
+
11
+ Provide one reusable pane, toolbar, content stack, and content-item geometry across sidebars, main areas, and dialogs.
12
+
13
+ - Build sidebars, main areas, inspectors, or dialogs from an unpadded pane with optional toolbar/footer and one content stack.
14
+ - Relocate a hidden pane's restore control into the adjacent main toolbar on the same logical edge.
15
+
16
+ **Not when:**
17
+
18
+ - Do not pad the pane itself or add wrapper insets around children that already own content-item geometry.
19
+ - Do not leave an empty icon-only rail after collapsing a pane.
20
+
21
+ ## Imports
22
+
23
+ - CSS: import `@kerfjs/ui/layout.css` once.
24
+ - Declared side effects: css.
25
+
26
+ ## Props
27
+
28
+ No props: this entry has no JavaScript API.
29
+
30
+ **Variants (configure, do not restyle):**
31
+
32
+ - toolbar + content
33
+ - toolbar + content + footer
34
+ - hidden inline-start pane restored from main-toolbar leading
35
+ - hidden inline-end pane restored from main-toolbar trailing
36
+
37
+ ## Composition
38
+
39
+ - Parents: any.
40
+ - Contexts: `application-ui`.
41
+ - Children: unrestricted.
42
+ - Built from: [ContentItem](./content-item.md).
43
+
44
+ ## State and wiring
45
+
46
+ **The app owns:** layout hierarchy; reading width; responsive relocation; pane visibility and matching collapse/restore controls.
47
+
48
+ No wiring helper.
49
+
50
+ ## Geometry
51
+
52
+ Margin: child · border: child · padding: child (layout role: foundation). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
53
+
54
+ ## Accessibility
55
+
56
+ - Keep reading and focus order coherent when controls wrap or panes relocate, and preserve one scroll owner per pane.
57
+ - When collapse replaces one control with its counterpart in another toolbar, move focus to the newly rendered restore or collapse control.
58
+
59
+ ## Styling boundary
60
+
61
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
62
+
63
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-content`, `kui-control-cluster`, `kui-inline-metadata`, `kui-scroll-owner`.
64
+
65
+ Classes an application may place on its own elements: `kui-content`, `kui-control-cluster`, `kui-inline-metadata`, `kui-scroll-owner`.
66
+
67
+ Public tokens it reads: `--kui-layout-control-gap`, `--kui-layout-content-gap`, `--kui-layout-inline-margin`, `--kui-layout-item-border-width`, `--kui-layout-item-padding`, `--kui-layout-metadata-gap`, `--kui-layout-pill-radius`, `--kui-layout-rounded-radius`. Set a token only where its public contract allows; prefer a prop.
68
+
69
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
70
+
71
+ ## Related
72
+
73
+ - Components: [ContentItem](./content-item.md).
74
+ - Docs: [`docs/component-selection.md`](../../docs/component-selection.md), [`docs/layout.md#public-roles-and-tokens`](../../docs/layout.md#public-roles-and-tokens).
75
+ - UX catalog route: `?component=layout`.