@kerfjs/ui 5.0.0-beta.56 → 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 (282) hide show
  1. package/README.md +63 -32
  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/component-catalog.json +208 -32
  7. package/ai/component-catalog.schema.json +2 -0
  8. package/ai/component-class-owners.cjs +83 -0
  9. package/ai/component-composition-extension.d.ts +7 -0
  10. package/ai/component-composition-extension.schema.json +7 -0
  11. package/ai/{component-catalog-v2-overrides.json → component-composition-rules.json} +2 -1
  12. package/ai/{component-catalog-v2.d.ts → component-composition.d.ts} +9 -5
  13. package/ai/{component-catalog-v2.json → component-composition.json} +155 -24
  14. package/ai/{component-catalog-v2.schema.json → component-composition.schema.json} +21 -5
  15. package/ai/components/README.md +170 -0
  16. package/ai/components/application-tabs.md +65 -0
  17. package/ai/components/badge.md +72 -0
  18. package/ai/components/collapsible-panel.md +102 -0
  19. package/ai/components/content-item.md +90 -0
  20. package/ai/components/disclosure-arrow.md +77 -0
  21. package/ai/components/document-baseline.md +75 -0
  22. package/ai/components/empty-state.md +80 -0
  23. package/ai/components/feedback.md +71 -0
  24. package/ai/components/floating-toolbar.md +80 -0
  25. package/ai/components/foundation.md +65 -0
  26. package/ai/components/grid.md +93 -0
  27. package/ai/components/headers.md +63 -0
  28. package/ai/components/layout.md +75 -0
  29. package/ai/components/list-action-row.md +91 -0
  30. package/ai/components/list-header.md +89 -0
  31. package/ai/components/list-inset-control.md +74 -0
  32. package/ai/components/list-inset-text.md +72 -0
  33. package/ai/components/list-item.md +88 -0
  34. package/ai/components/list.md +103 -0
  35. package/ai/components/loading-spinner.md +72 -0
  36. package/ai/components/lucide-icon.md +66 -0
  37. package/ai/components/nav-stack.md +103 -0
  38. package/ai/components/pane.md +100 -0
  39. package/ai/components/popup-menu.md +82 -0
  40. package/ai/components/recipe-app-shell.md +57 -0
  41. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  42. package/ai/components/recipe-compact-toolbar.md +57 -0
  43. package/ai/components/recipe-composer-form.md +57 -0
  44. package/ai/components/recipe-list-detail-dialog.md +57 -0
  45. package/ai/components/recipe-list-workspace-states.md +57 -0
  46. package/ai/components/recipe-loading-inspector.md +57 -0
  47. package/ai/components/recipe-navigation-sidebar.md +57 -0
  48. package/ai/components/recipe-navigation-stack.md +57 -0
  49. package/ai/components/recipe-workspace-header.md +57 -0
  50. package/ai/components/resize.md +101 -0
  51. package/ai/components/row.md +96 -0
  52. package/ai/components/segmented-control.md +82 -0
  53. package/ai/components/select.md +107 -0
  54. package/ai/components/skeleton.md +84 -0
  55. package/ai/components/spacer.md +86 -0
  56. package/ai/components/split-view.md +102 -0
  57. package/ai/components/state-banner.md +92 -0
  58. package/ai/components/sunken-panel.md +79 -0
  59. package/ai/components/surface-scaffold.md +78 -0
  60. package/ai/components/tab-bar.md +112 -0
  61. package/ai/components/tab-scaffold.md +94 -0
  62. package/ai/components/tabs.md +90 -0
  63. package/ai/components/text.md +82 -0
  64. package/ai/components/token-search-field.md +101 -0
  65. package/ai/components/toolbar-control-group.md +100 -0
  66. package/ai/components/toolbar-text.md +76 -0
  67. package/ai/components/toolbar.md +95 -0
  68. package/ai/components/value-table.md +72 -0
  69. package/ai/components/wa-accordion-item.md +55 -0
  70. package/ai/components/wa-accordion.md +65 -0
  71. package/ai/components/wa-animated-image.md +55 -0
  72. package/ai/components/wa-animation.md +55 -0
  73. package/ai/components/wa-avatar.md +55 -0
  74. package/ai/components/wa-badge.md +55 -0
  75. package/ai/components/wa-breadcrumb-item.md +53 -0
  76. package/ai/components/wa-breadcrumb.md +55 -0
  77. package/ai/components/wa-button-group.md +59 -0
  78. package/ai/components/wa-button.md +55 -0
  79. package/ai/components/wa-callout.md +58 -0
  80. package/ai/components/wa-card.md +59 -0
  81. package/ai/components/wa-carousel-item.md +53 -0
  82. package/ai/components/wa-carousel.md +55 -0
  83. package/ai/components/wa-checkbox-group.md +55 -0
  84. package/ai/components/wa-checkbox.md +55 -0
  85. package/ai/components/wa-color-picker.md +55 -0
  86. package/ai/components/wa-comparison.md +55 -0
  87. package/ai/components/wa-copy-button.md +55 -0
  88. package/ai/components/wa-details.md +61 -0
  89. package/ai/components/wa-dialog.md +59 -0
  90. package/ai/components/wa-divider.md +53 -0
  91. package/ai/components/wa-drawer.md +55 -0
  92. package/ai/components/wa-dropdown-item.md +60 -0
  93. package/ai/components/wa-dropdown.md +60 -0
  94. package/ai/components/wa-format-bytes.md +53 -0
  95. package/ai/components/wa-format-date.md +53 -0
  96. package/ai/components/wa-format-number.md +53 -0
  97. package/ai/components/wa-icon.md +58 -0
  98. package/ai/components/wa-include.md +53 -0
  99. package/ai/components/wa-input.md +59 -0
  100. package/ai/components/wa-intersection-observer.md +53 -0
  101. package/ai/components/wa-known-date.md +53 -0
  102. package/ai/components/wa-markdown.md +53 -0
  103. package/ai/components/wa-mutation-observer.md +53 -0
  104. package/ai/components/wa-number-input.md +55 -0
  105. package/ai/components/wa-option.md +59 -0
  106. package/ai/components/wa-otp-input.md +53 -0
  107. package/ai/components/wa-page.md +53 -0
  108. package/ai/components/wa-pagination.md +55 -0
  109. package/ai/components/wa-popover.md +55 -0
  110. package/ai/components/wa-popup.md +53 -0
  111. package/ai/components/wa-progress-bar.md +53 -0
  112. package/ai/components/wa-progress-ring.md +53 -0
  113. package/ai/components/wa-qr-code.md +53 -0
  114. package/ai/components/wa-radio-group.md +59 -0
  115. package/ai/components/wa-radio.md +55 -0
  116. package/ai/components/wa-random-content.md +53 -0
  117. package/ai/components/wa-rating.md +55 -0
  118. package/ai/components/wa-relative-time.md +53 -0
  119. package/ai/components/wa-resize-observer.md +53 -0
  120. package/ai/components/wa-scroller.md +53 -0
  121. package/ai/components/wa-select.md +63 -0
  122. package/ai/components/wa-skeleton.md +53 -0
  123. package/ai/components/wa-slider.md +55 -0
  124. package/ai/components/wa-spinner.md +58 -0
  125. package/ai/components/wa-split-panel.md +58 -0
  126. package/ai/components/wa-switch.md +53 -0
  127. package/ai/components/wa-tab-group.md +69 -0
  128. package/ai/components/wa-tab-panel.md +60 -0
  129. package/ai/components/wa-tab.md +59 -0
  130. package/ai/components/wa-tag.md +59 -0
  131. package/ai/components/wa-textarea.md +53 -0
  132. package/ai/components/wa-time-input.md +55 -0
  133. package/ai/components/wa-toast-item.md +60 -0
  134. package/ai/components/wa-toast.md +60 -0
  135. package/ai/components/wa-tooltip.md +55 -0
  136. package/ai/components/wa-tree-item.md +55 -0
  137. package/ai/components/wa-tree.md +55 -0
  138. package/ai/components/wa-zoomable-frame.md +55 -0
  139. package/ai/components/workbench.md +114 -0
  140. package/ai/public-api-signatures-v1.md +161 -32
  141. package/ai/skill.md +100 -48
  142. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  143. package/analyzer/component-ownership.d.mts +56 -0
  144. package/analyzer/component-ownership.mjs +184 -0
  145. package/analyzer/index.d.mts +3 -0
  146. package/analyzer/index.mjs +274 -20
  147. package/analyzer/selectors.d.mts +21 -0
  148. package/analyzer/selectors.mjs +212 -0
  149. package/dist/browser/catalog.js +25 -0
  150. package/dist/browser/collapsible-panel.js +7 -0
  151. package/dist/browser/nav-stack.js +8 -0
  152. package/dist/browser/split-view.js +10 -0
  153. package/dist/browser/tab-scaffold.js +4 -0
  154. package/dist/browser/workbench.js +10 -0
  155. package/dist/catalog-resources.d.ts +2 -2
  156. package/dist/catalog.d.ts +3 -3
  157. package/dist/catalog.js +7 -6
  158. package/dist/catalog.js.map +1 -1
  159. package/dist/{chunk-PK4N5QTO.js → chunk-553ASUK6.js} +2 -3
  160. package/dist/chunk-553ASUK6.js.map +1 -0
  161. package/dist/{chunk-G33XC2NB.js → chunk-6YFHCLHG.js} +2 -2
  162. package/dist/chunk-6YFHCLHG.js.map +1 -0
  163. package/dist/{chunk-T4UZTNZ4.js → chunk-EVYKTVBQ.js} +2 -11
  164. package/dist/chunk-EVYKTVBQ.js.map +1 -0
  165. package/dist/{chunk-AK67F6QN.js → chunk-EZVNC4J6.js} +4 -1
  166. package/dist/chunk-EZVNC4J6.js.map +1 -0
  167. package/dist/{chunk-MA6Z6EIM.js → chunk-F4QMLOXJ.js} +3 -2
  168. package/dist/chunk-F4QMLOXJ.js.map +1 -0
  169. package/dist/{chunk-QQOTQTDD.js → chunk-G2RKFVRB.js} +13 -10
  170. package/dist/chunk-G2RKFVRB.js.map +1 -0
  171. package/dist/chunk-JCV4GXWB.js +249 -0
  172. package/dist/chunk-JCV4GXWB.js.map +1 -0
  173. package/dist/chunk-K47P7QZC.js +17 -0
  174. package/dist/chunk-K47P7QZC.js.map +1 -0
  175. package/dist/{chunk-MOBRFZH3.js → chunk-OUK6QRDR.js} +2 -12
  176. package/dist/chunk-OUK6QRDR.js.map +1 -0
  177. package/dist/{chunk-O3EXIBEZ.js → chunk-PWXNJS2B.js} +7 -6
  178. package/dist/chunk-PWXNJS2B.js.map +1 -0
  179. package/dist/{chunk-VNPQDCQZ.js → chunk-QOWG4ZCL.js} +3 -2
  180. package/dist/chunk-QOWG4ZCL.js.map +1 -0
  181. package/dist/{chunk-V65EOWNF.js → chunk-XCO6YCYM.js} +5 -4
  182. package/dist/chunk-XCO6YCYM.js.map +1 -0
  183. package/dist/{chunk-K6UNVKDK.js → chunk-XDKAYSVD.js} +3 -1
  184. package/dist/chunk-XDKAYSVD.js.map +1 -0
  185. package/dist/collapsible-panel.d.ts +3 -3
  186. package/dist/collapsible-panel.js +2 -2
  187. package/dist/collapsible-panel.js.map +1 -1
  188. package/dist/index.d.ts +2 -1
  189. package/dist/index.js +10 -8
  190. package/dist/list-action-row.js +2 -1
  191. package/dist/list-header.js +1 -1
  192. package/dist/list-item.js +2 -1
  193. package/dist/nav-stack.d.ts +13 -1
  194. package/dist/nav-stack.js +1 -1
  195. package/dist/pane.d.ts +20 -3
  196. package/dist/pane.js +1 -1
  197. package/dist/{panel-toolbar-C8sF-YZC.d.ts → panel-toolbar-BN4x0rth.d.ts} +3 -2
  198. package/dist/select.js +1 -1
  199. package/dist/split-view.d.ts +3 -3
  200. package/dist/split-view.js +3 -2
  201. package/dist/split-view.js.map +1 -1
  202. package/dist/state-banner.js +1 -1
  203. package/dist/styles/app-tab.css +31 -0
  204. package/dist/styles/badge.css +19 -11
  205. package/dist/styles/collapsible-panel.css +13 -9
  206. package/dist/styles/floating-toolbar.css +25 -6
  207. package/dist/styles/list-header.css +0 -12
  208. package/dist/styles/list.css +4 -4
  209. package/dist/styles/nav-stack.css +46 -19
  210. package/dist/styles/pane.css +50 -0
  211. package/dist/styles/popup-menu.css +151 -0
  212. package/dist/styles/resizable-region.css +22 -10
  213. package/dist/styles/select.css +28 -14
  214. package/dist/styles/skeleton.css +30 -3
  215. package/dist/styles/split-view.css +10 -7
  216. package/dist/styles/state-banner.css +0 -19
  217. package/dist/styles/surface-scaffold.css +8 -3
  218. package/dist/styles/tab-bar.css +79 -28
  219. package/dist/styles/tab-scaffold.css +25 -1
  220. package/dist/styles/text.css +16 -0
  221. package/dist/styles/toolbar-control-group.css +121 -66
  222. package/dist/styles/toolbar-text.css +21 -0
  223. package/dist/styles/toolbar.css +8 -32
  224. package/dist/styles/workbench.css +18 -18
  225. package/dist/tab-scaffold.d.ts +11 -1
  226. package/dist/tab-scaffold.js +2 -0
  227. package/dist/tab-scaffold.js.map +1 -1
  228. package/dist/toolbar-text.d.ts +7 -1
  229. package/dist/toolbar-text.js +1 -1
  230. package/dist/toolbar.d.ts +8 -1
  231. package/dist/toolbar.js +1 -1
  232. package/dist/{types-DXAGogOS.d.ts → types-BuHELdXR.d.ts} +1 -1
  233. package/dist/wire-catalog.d.ts +3 -1
  234. package/dist/wire-catalog.js +2 -0
  235. package/dist/wire-catalog.js.map +1 -1
  236. package/dist/wire-scroll-dividers.d.ts +69 -0
  237. package/dist/wire-scroll-dividers.js +3 -0
  238. package/dist/wire-scroll-dividers.js.map +1 -0
  239. package/dist/workbench.d.ts +13 -12
  240. package/dist/workbench.js +1 -1
  241. package/docs/app-layouts.md +9 -1
  242. package/docs/catalog.md +10 -5
  243. package/docs/collapsible-panel.md +10 -6
  244. package/docs/component-contract.md +147 -21
  245. package/docs/component-selection.md +18 -6
  246. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  247. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  248. package/docs/design/templates/tab-bar-dark.svg +1 -1
  249. package/docs/design/templates/tab-bar.svg +1 -1
  250. package/docs/design-philosophy.md +30 -3
  251. package/docs/examples/application-ui-profile.json +4 -4
  252. package/docs/examples/{component-catalog-extension-v2.json → component-composition-extension.json} +3 -3
  253. package/docs/layout.md +82 -3
  254. package/docs/nav-stack.md +33 -3
  255. package/docs/split-view.md +10 -5
  256. package/docs/tab-scaffold.md +23 -1
  257. package/docs/type-contracts.md +4 -3
  258. package/docs/ui-analyzer.md +99 -5
  259. package/docs/ui-doctor.md +10 -0
  260. package/docs/workbench.md +19 -9
  261. package/doctor/index.mjs +6 -1
  262. package/llms.txt +85 -20
  263. package/package.json +17 -5
  264. package/ux-demo/recipes/collapsible-sidebar.tsx +0 -1
  265. package/ux-demo/recipes/composer-form.tsx +0 -1
  266. package/ux-demo/recipes/list-detail-dialog.tsx +0 -2
  267. package/ux-demo/recipes/list-workspace-states.tsx +0 -1
  268. package/ux-demo/recipes/loading-inspector.tsx +0 -1
  269. package/ux-demo/recipes/workspace-header.tsx +0 -1
  270. package/ai/component-catalog-extension-v2.d.ts +0 -7
  271. package/ai/component-catalog-extension-v2.schema.json +0 -7
  272. package/dist/chunk-AK67F6QN.js.map +0 -1
  273. package/dist/chunk-G33XC2NB.js.map +0 -1
  274. package/dist/chunk-K6UNVKDK.js.map +0 -1
  275. package/dist/chunk-MA6Z6EIM.js.map +0 -1
  276. package/dist/chunk-MOBRFZH3.js.map +0 -1
  277. package/dist/chunk-O3EXIBEZ.js.map +0 -1
  278. package/dist/chunk-PK4N5QTO.js.map +0 -1
  279. package/dist/chunk-QQOTQTDD.js.map +0 -1
  280. package/dist/chunk-T4UZTNZ4.js.map +0 -1
  281. package/dist/chunk-V65EOWNF.js.map +0 -1
  282. package/dist/chunk-VNPQDCQZ.js.map +0 -1
@@ -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`.
@@ -0,0 +1,91 @@
1
+ # ListActionRow
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:list-action-row` · Kerf UI · component · Navigation
6
+
7
+ Configurable navigation rows with structured labels, status/busy metadata, density, group dividers, and sibling primary/trailing native-button actions.
8
+
9
+ ## When to use
10
+
11
+ Keep a selectable primary row action and an independently named trailing action as sibling native controls inside one noninteractive visual row.
12
+
13
+ - A navigation or item row needs both a primary selectable action and an independently focusable trailing action.
14
+
15
+ **Not when:**
16
+
17
+ - Use ListItem when trailing content is dormant metadata; use AppTab only for tablist semantics and ToolbarControlGroup only for toolbar controls.
18
+ - Do not inject declaration strings; use className, public tokens, and cataloged component props for application styling.
19
+
20
+ **Alternatives:**
21
+
22
+ - [ListItem](./list-item.md) (nearest) — Trailing content is noninteractive.
23
+ - [AppTab](./tabs.md) (semantic alternative) — The primary control selects a tabpanel inside TabBar.
24
+
25
+ ## Imports
26
+
27
+ - JavaScript: `@kerfjs/ui/list-action-row` — exports `ListActionRow`.
28
+ - CSS: the browser build of `@kerfjs/ui/list-action-row` pulls its CSS automatically; import `@kerfjs/ui/list-action-row.css` manually only without the `browser` export condition.
29
+ - Declared side effects: browser-condition-css.
30
+
31
+ ## Props
32
+
33
+ Exact prop names and types: [`@kerfjs/ui/list-action-row`](../public-api-signatures-v1.md#kerfjsuilist-action-row) in `public-api-signatures-v1.md`. Do not infer props from examples.
34
+
35
+ **Variants (configure, do not restyle):**
36
+
37
+ - selected
38
+ - pressed
39
+ - disabled primary
40
+ - disabled trailing action
41
+ - multiline
42
+ - placeholder (loading)
43
+ - compact density
44
+ - description and status
45
+ - busy while retaining content
46
+ - interaction-revealed trailing action
47
+ - before, after, or paired group divider
48
+
49
+ **CSS-value props** (typed builders from `@kerfjs/ui/css-values`; raw CSS strings are rejected):
50
+
51
+ - `style`: declarations grammar; raw values: forbid — e.g. `className="app-row"`
52
+
53
+ ## Composition
54
+
55
+ - Parents: any.
56
+ - Contexts: `application-ui`.
57
+ - Children: unrestricted.
58
+ - Built from: [LucideIcon](./lucide-icon.md), [LoadingSpinner](./loading-spinner.md).
59
+
60
+ ## State and wiring
61
+
62
+ **The app owns:** routing; selection; action handling; domain data attributes; popover or context-menu policy.
63
+
64
+ No wiring helper.
65
+
66
+ ## Geometry
67
+
68
+ Margin: self · border: self · padding: self (layout role: navigation). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
69
+
70
+ ## Accessibility
71
+
72
+ - The noninteractive root contains two sibling native buttons in primary-then-trailing focus order; each button has its own action, item identity, accessible name, and disabled state.
73
+ - Selection semantics are exposed only by the primary button; label, icon, and trailingActionIcon are dormant SafeHtml and must not contain interactive descendants; never place an interactive descendant in ListItem.trailing.
74
+
75
+ ## Styling boundary
76
+
77
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
78
+
79
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-list-action-row`, `kui-list-action-row__icon`, `kui-list-action-row__label`, `kui-list-action-row__primary-label`, `kui-list-action-row__description`, `kui-list-action-row__status`, `kui-list-action-row__primary`, `kui-list-action-row__trailing-action`.
80
+
81
+ Never put `kui-list-action-row`, `kui-list-action-row__icon`, `kui-list-action-row__label`, `kui-list-action-row__primary-label`, `kui-list-action-row__description`, `kui-list-action-row__status`, `kui-list-action-row__primary`, `kui-list-action-row__trailing-action` on an element you write; render `ListActionRow` instead (`KUI-L103`).
82
+
83
+ Public tokens it reads: `--kui-color-brand-border-quiet`, `--kui-color-brand-fill-normal`, `--kui-color-neutral-border-normal`, `--kui-color-neutral-fill-normal`, `--kui-color-neutral-fill-quiet`, `--kui-color-neutral-on-normal`, `--kui-color-neutral-on-quiet`, `--kui-color-neutral-border-quiet`, `--kui-focus-ring`, `--kui-layout-inline-margin`, `--kui-layout-item-gap`, `--kui-layout-item-padding`, `--kui-layout-rounded-radius`, `--kui-radius-pill`, `--kui-list-action-row-background`, `--kui-list-action-row-border`, `--kui-list-action-row-color`, `--kui-list-action-row-hover-background`, `--kui-list-action-row-hover-border`, `--kui-list-action-row-selected-background`, `--kui-list-action-row-selected-border`, `--kui-list-action-row-selected-color`, `--kui-list-action-row-trailing-hover-background`, `--kui-list-group-divider-color`, `--kui-font-xs`. Set a token only where its public contract allows; prefer a prop.
84
+
85
+ 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`).
86
+
87
+ ## Related
88
+
89
+ - Components: [LucideIcon](./lucide-icon.md), [LoadingSpinner](./loading-spinner.md), [ListItem](./list-item.md), [AppTab](./tabs.md).
90
+ - 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).
91
+ - UX catalog route: `?component=list-action-row`.
@@ -0,0 +1,89 @@
1
+ # ListHeader
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:list-header` · Kerf UI · component · Navigation
6
+
7
+ Configurable section headings with full-width or shrink-wrapped inline presentation, semantic count/status indicators, density, group dividers, a logical-end action, disclosure states, and protected native-popover trigger metadata.
8
+
9
+ ## When to use
10
+
11
+ Fill the available section width by default, or shrink-wrap without outer geometry when inline, while splitting a dormant title and mutually exclusive semantic count or badge from an optional logical-end action with an 18px visual; disclosure mode renders the title cluster as a button with a default production DisclosureArrow.
12
+
13
+ - Label a navigation section with an optional semantic count, non-count badge, action, or disclosure state; toggle mode supplies an 18px DisclosureArrow unless actionIcon replaces it.
14
+
15
+ **Not when:**
16
+
17
+ - Do not concatenate a section count into label or pass numeric content through badge; use count with its required localized countLabel.
18
+ - Do not use as a page or dialog title.
19
+
20
+ **Alternatives:**
21
+
22
+ - [Toolbar](./toolbar.md) (nearest)
23
+
24
+ ## Imports
25
+
26
+ - JavaScript: `@kerfjs/ui/list-header` — exports `ListHeader`.
27
+ - CSS: the browser build of `@kerfjs/ui/list-header` pulls its CSS automatically; import `@kerfjs/ui/list-header.css` manually only without the `browser` export condition.
28
+ - Declared side effects: browser-condition-css.
29
+
30
+ ## Props
31
+
32
+ Exact prop names and types: [`@kerfjs/ui/list-header`](../public-api-signatures-v1.md#kerfjsuilist-header) in `public-api-signatures-v1.md`. Do not infer props from examples.
33
+
34
+ **Variants (configure, do not restyle):**
35
+
36
+ - heading
37
+ - count
38
+ - badge
39
+ - action
40
+ - toggle
41
+ - placeholder (loading)
42
+ - inline shrink-wrapped presentation
43
+ - compact density
44
+ - neutral, accent, pop, or danger indicator tone
45
+ - before, after, or paired group divider
46
+
47
+ ## Composition
48
+
49
+ - Parents: any.
50
+ - Contexts: `navigation-list`.
51
+ - Children: unrestricted.
52
+ - Built from: [Badge](./badge.md), [LucideIcon](./lucide-icon.md), [DisclosureArrow](./disclosure-arrow.md), [Text](./text.md).
53
+
54
+ ## State and wiring
55
+
56
+ - expanded — controlled
57
+
58
+ No wiring helper.
59
+
60
+ ## Geometry
61
+
62
+ Margin: self · border: self · padding: self (layout role: navigation). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
63
+
64
+ ## Accessibility
65
+
66
+ - When toggle mode is used, the application reveals matching content and keeps expanded state synchronized.
67
+ - The owning control retains a stable accessible name.
68
+
69
+ ## Styling boundary
70
+
71
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
72
+
73
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-list-header`, `kui-list-header__action`, `kui-list-header__action-layer`, `kui-list-header__title`, `kui-list-header__toggle`.
74
+
75
+ Never put `kui-list-header`, `kui-list-header__action`, `kui-list-header__action-layer`, `kui-list-header__title`, `kui-list-header__toggle` on an element you write; render `ListHeader` instead (`KUI-L103`).
76
+
77
+ Public tokens it reads: `--kui-color-neutral-border-quiet`, `--kui-focus-ring`, `--kui-list-header-action-icon-size`, `--kui-list-header-color`, `--kui-layout-inline-margin`, `--kui-layout-item-gap`, `--kui-layout-item-padding`, `--kui-list-header-hover-background`, `--kui-list-group-divider-color`. Set a token only where its public contract allows; prefer a prop.
78
+
79
+ 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`).
80
+
81
+ ## Diagnostics
82
+
83
+ - `KUI-C103` (error) when toggle mode does not reveal matching controlled content: ListHeader expanded state must match real revealed content.
84
+
85
+ ## Related
86
+
87
+ - Components: [Badge](./badge.md), [LucideIcon](./lucide-icon.md), [DisclosureArrow](./disclosure-arrow.md), [Text](./text.md), [Toolbar](./toolbar.md).
88
+ - 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).
89
+ - UX catalog route: `?component=list-header`.
@@ -0,0 +1,74 @@
1
+ # ListInsetControl
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:list-inset-control` · Kerf UI · component · Structure
6
+
7
+ Insets selected physical sides of a self-bordered control in a pane/list content region.
8
+
9
+ ## When to use
10
+
11
+ Apply the standard 8px outer margin to all physical sides of a self-bordered control by default, or only the sides selected with the canonical Sides contract.
12
+
13
+ - Place a control that carries its own border and padding (an input, a wa-\* control) in a pane/list content region so its edges align with .kui-content items.
14
+
15
+ **Not when:**
16
+
17
+ - Do not wrap a component that already owns its content-item margin (ListItem, StateBanner, …) — that double-insets it. Use ListInsetText for bare text.
18
+
19
+ **Alternatives:**
20
+
21
+ - [ListInsetText](./list-inset-text.md) (nearest)
22
+
23
+ ## Imports
24
+
25
+ - JavaScript: `@kerfjs/ui/list-inset-control` — exports `ListInsetControl`.
26
+ - CSS: the browser build of `@kerfjs/ui/list-inset-control` pulls its CSS automatically; import `@kerfjs/ui/list-inset-control.css` manually only without the `browser` export condition.
27
+ - Declared side effects: browser-condition-css.
28
+
29
+ ## Props
30
+
31
+ Exact prop names and types: [`@kerfjs/ui/list-inset-control`](../public-api-signatures-v1.md#kerfjsuilist-inset-control) in `public-api-signatures-v1.md`. Do not infer props from examples.
32
+
33
+ **Variants (configure, do not restyle):**
34
+
35
+ - all-side inset by default
36
+ - top/right/bottom/left inset combinations
37
+
38
+ ## Composition
39
+
40
+ - Parents: any.
41
+ - Contexts: `application-ui`.
42
+ - Children: unrestricted.
43
+
44
+ ## State and wiring
45
+
46
+ **The app owns:** the wrapped control and its behavior.
47
+
48
+ No wiring helper.
49
+
50
+ ## Geometry
51
+
52
+ Margin: self · border: child · padding: child (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
53
+
54
+ ## Accessibility
55
+
56
+ - A layout wrapper only; it adds no role or name — the wrapped control keeps its own.
57
+
58
+ ## Styling boundary
59
+
60
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
61
+
62
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-list-inset-control`.
63
+
64
+ Never put `kui-list-inset-control` on an element you write; render `ListInsetControl` instead (`KUI-L103`).
65
+
66
+ Public tokens it reads: `--kui-layout-inline-margin`. Set a token only where its public contract allows; prefer a prop.
67
+
68
+ 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`).
69
+
70
+ ## Related
71
+
72
+ - Components: [ListInsetText](./list-inset-text.md).
73
+ - 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).
74
+ - UX catalog route: `?component=list-inset-control`.
@@ -0,0 +1,72 @@
1
+ # ListInsetText
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:list-inset-text` · Kerf UI · component · Structure
6
+
7
+ Gives selected physical sides of bare text the content-item geometry so it lines up with bordered items.
8
+
9
+ ## When to use
10
+
11
+ Apply the full 8px margin + 1px transparent border + 8px padding to all physical sides of bare text by default, or only the sides selected with the canonical Sides contract.
12
+
13
+ - Line a plain text element up with bordered .kui-content items — it adds the 8px margin, 1px transparent border, and 8px padding the text lacks.
14
+
15
+ **Not when:**
16
+
17
+ - Do not use it to wrap an interactive control (use ListInsetControl), or a component that already owns its content-item geometry.
18
+
19
+ **Alternatives:**
20
+
21
+ - [ListInsetControl](./list-inset-control.md) (nearest)
22
+
23
+ ## Imports
24
+
25
+ - JavaScript: `@kerfjs/ui/list-inset-text` — exports `ListInsetText`.
26
+ - CSS: the browser build of `@kerfjs/ui/list-inset-text` pulls its CSS automatically; import `@kerfjs/ui/list-inset-text.css` manually only without the `browser` export condition.
27
+ - Declared side effects: browser-condition-css.
28
+
29
+ ## Props
30
+
31
+ Exact prop names and types: [`@kerfjs/ui/list-inset-text`](../public-api-signatures-v1.md#kerfjsuilist-inset-text) in `public-api-signatures-v1.md`. Do not infer props from examples.
32
+
33
+ **Variants (configure, do not restyle):**
34
+
35
+ - all-side inset by default
36
+ - top/right/bottom/left inset combinations
37
+
38
+ ## Composition
39
+
40
+ - Parents: any.
41
+ - Contexts: `application-ui`.
42
+ - Children: unrestricted.
43
+
44
+ ## State and wiring
45
+
46
+ **The app owns:** the text content.
47
+
48
+ No wiring helper.
49
+
50
+ ## Geometry
51
+
52
+ Margin: self · border: self · padding: self (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
53
+
54
+ ## Accessibility
55
+
56
+ - A layout wrapper only; it adds no role or name.
57
+
58
+ ## Styling boundary
59
+
60
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
61
+
62
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-list-inset-text`.
63
+
64
+ Never put `kui-list-inset-text` on an element you write; render `ListInsetText` instead (`KUI-L103`).
65
+
66
+ 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`).
67
+
68
+ ## Related
69
+
70
+ - Components: [ListInsetControl](./list-inset-control.md).
71
+ - 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).
72
+ - UX catalog route: `?component=list-inset-text`.