@kerfjs/ui 5.0.0-beta.49 → 5.0.0-beta.50

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 (257) hide show
  1. package/README.md +41 -11
  2. package/ai/catalog-authoring.json +12 -1
  3. package/ai/catalog-authoring.schema.json +49 -1
  4. package/ai/compile-time-contracts-v1.json +14 -0
  5. package/ai/compile-time-contracts-v1.schema.json +1 -0
  6. package/ai/component-catalog-v2-overrides.json +7 -0
  7. package/ai/component-catalog-v2.json +79 -23
  8. package/ai/component-catalog.json +86 -27
  9. package/ai/public-api-signatures-v1.md +217 -169
  10. package/ai/skill.md +23 -9
  11. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  12. package/dist/app-tab.d.ts +3 -1
  13. package/dist/app-tab.js +1 -1
  14. package/dist/badge.d.ts +24 -0
  15. package/dist/badge.js +3 -0
  16. package/dist/badge.js.map +1 -0
  17. package/dist/browser/badge.js +3 -0
  18. package/dist/browser/list-header.js +1 -0
  19. package/dist/browser/state-banner.js +1 -0
  20. package/dist/catalog-resources.d.ts +2 -2
  21. package/dist/catalog.d.ts +24 -125
  22. package/dist/catalog.js +387 -261
  23. package/dist/catalog.js.map +1 -1
  24. package/dist/{chunk-OGTJNHRG.js → chunk-2WMSE4MK.js} +5 -3
  25. package/dist/chunk-2WMSE4MK.js.map +1 -0
  26. package/dist/{chunk-GYGM363P.js → chunk-2YOUUEWR.js} +16 -6
  27. package/dist/chunk-2YOUUEWR.js.map +1 -0
  28. package/dist/{chunk-UDHHKZWO.js → chunk-3V75EQIP.js} +8 -4
  29. package/dist/chunk-3V75EQIP.js.map +1 -0
  30. package/dist/{chunk-W2FK7ZNY.js → chunk-4R777DUZ.js} +10 -2
  31. package/dist/chunk-4R777DUZ.js.map +1 -0
  32. package/dist/{chunk-T7DOWS6T.js → chunk-54HM36IQ.js} +6 -3
  33. package/dist/chunk-54HM36IQ.js.map +1 -0
  34. package/dist/{chunk-DAO2VFTT.js → chunk-5CE64WGC.js} +6 -4
  35. package/dist/chunk-5CE64WGC.js.map +1 -0
  36. package/dist/{chunk-SOK5EUF7.js → chunk-6ZXOQEAN.js} +4 -2
  37. package/dist/chunk-6ZXOQEAN.js.map +1 -0
  38. package/dist/{chunk-OGNE3OFT.js → chunk-AQSKJ6U6.js} +4 -2
  39. package/dist/chunk-AQSKJ6U6.js.map +1 -0
  40. package/dist/{chunk-VDUJZF5G.js → chunk-CMUIXJZM.js} +2 -2
  41. package/dist/{chunk-VDUJZF5G.js.map → chunk-CMUIXJZM.js.map} +1 -1
  42. package/dist/{chunk-OMSRSL3B.js → chunk-COUPLRZG.js} +5 -3
  43. package/dist/chunk-COUPLRZG.js.map +1 -0
  44. package/dist/{chunk-2TYUFZUC.js → chunk-D7GWXIAS.js} +4 -2
  45. package/dist/chunk-D7GWXIAS.js.map +1 -0
  46. package/dist/{chunk-AQFWBG23.js → chunk-DARTMI5Z.js} +5 -3
  47. package/dist/chunk-DARTMI5Z.js.map +1 -0
  48. package/dist/{chunk-V6GQKOX2.js → chunk-DJKWFYAA.js} +5 -3
  49. package/dist/chunk-DJKWFYAA.js.map +1 -0
  50. package/dist/{chunk-6NDBE2OK.js → chunk-E36EVCKG.js} +5 -3
  51. package/dist/chunk-E36EVCKG.js.map +1 -0
  52. package/dist/{chunk-IU4QUY5I.js → chunk-ELRMBQEC.js} +4 -2
  53. package/dist/chunk-ELRMBQEC.js.map +1 -0
  54. package/dist/{chunk-TIGSG6BX.js → chunk-HJKRCKDR.js} +7 -3
  55. package/dist/chunk-HJKRCKDR.js.map +1 -0
  56. package/dist/{chunk-Y6LYKFXY.js → chunk-HMQ2ZDGG.js} +5 -3
  57. package/dist/chunk-HMQ2ZDGG.js.map +1 -0
  58. package/dist/{chunk-WN52USHV.js → chunk-J3EE6XWD.js} +2 -2
  59. package/dist/{chunk-WN52USHV.js.map → chunk-J3EE6XWD.js.map} +1 -1
  60. package/dist/{chunk-CK6P5AUK.js → chunk-KKNK3JUT.js} +7 -4
  61. package/dist/chunk-KKNK3JUT.js.map +1 -0
  62. package/dist/{chunk-ZPWZIVI6.js → chunk-N3GKMPDW.js} +7 -3
  63. package/dist/chunk-N3GKMPDW.js.map +1 -0
  64. package/dist/{chunk-DYBPI5O2.js → chunk-NDUGJ4TU.js} +4 -2
  65. package/dist/chunk-NDUGJ4TU.js.map +1 -0
  66. package/dist/{chunk-WSXUPSID.js → chunk-NN6GYOA2.js} +7 -3
  67. package/dist/chunk-NN6GYOA2.js.map +1 -0
  68. package/dist/{chunk-VXFGMDA7.js → chunk-OQI7RCRP.js} +10 -2
  69. package/dist/chunk-OQI7RCRP.js.map +1 -0
  70. package/dist/{chunk-E34TE2ZI.js → chunk-S6ZTTTV7.js} +5 -3
  71. package/dist/chunk-S6ZTTTV7.js.map +1 -0
  72. package/dist/{chunk-V6HCTCVD.js → chunk-SIU2AC5W.js} +8 -4
  73. package/dist/chunk-SIU2AC5W.js.map +1 -0
  74. package/dist/{chunk-WVLMZ5SG.js → chunk-UMGY5JSP.js} +4 -2
  75. package/dist/chunk-UMGY5JSP.js.map +1 -0
  76. package/dist/{chunk-I4V3UDSA.js → chunk-V6RZWDII.js} +7 -5
  77. package/dist/chunk-V6RZWDII.js.map +1 -0
  78. package/dist/{chunk-CAB6NQ2T.js → chunk-VOCPXGQN.js} +3 -1
  79. package/dist/chunk-VOCPXGQN.js.map +1 -0
  80. package/dist/chunk-XD7DWYXG.js +34 -0
  81. package/dist/chunk-XD7DWYXG.js.map +1 -0
  82. package/dist/{chunk-B6JYRX3P.js → chunk-ZIYOJFZD.js} +43 -4
  83. package/dist/chunk-ZIYOJFZD.js.map +1 -0
  84. package/dist/{chunk-EYALJQQD.js → chunk-ZK5EGVFP.js} +4 -2
  85. package/dist/chunk-ZK5EGVFP.js.map +1 -0
  86. package/dist/{chunk-6WTETUZ6.js → chunk-ZLWQZUGF.js} +8 -2
  87. package/dist/chunk-ZLWQZUGF.js.map +1 -0
  88. package/dist/{chunk-XKFRMGMW.js → chunk-ZNZ2JDBW.js} +3 -1
  89. package/dist/chunk-ZNZ2JDBW.js.map +1 -0
  90. package/dist/{chunk-I45QO2IZ.js → chunk-ZSYLBVWG.js} +6 -4
  91. package/dist/chunk-ZSYLBVWG.js.map +1 -0
  92. package/dist/collapsible-panel.d.ts +3 -1
  93. package/dist/collapsible-panel.js +4 -2
  94. package/dist/collapsible-panel.js.map +1 -1
  95. package/dist/disclosure-arrow.d.ts +3 -1
  96. package/dist/disclosure-arrow.js +1 -1
  97. package/dist/empty-state.d.ts +3 -1
  98. package/dist/empty-state.js +1 -1
  99. package/dist/floating-toolbar.d.ts +3 -1
  100. package/dist/floating-toolbar.js +1 -1
  101. package/dist/grid.d.ts +3 -1
  102. package/dist/grid.js +1 -1
  103. package/dist/index.d.ts +3 -2
  104. package/dist/index.js +33 -32
  105. package/dist/list-action-row.d.ts +3 -1
  106. package/dist/list-action-row.js +1 -1
  107. package/dist/list-header.d.ts +6 -1
  108. package/dist/list-header.js +2 -1
  109. package/dist/list-inset-control.d.ts +3 -1
  110. package/dist/list-inset-control.js +1 -1
  111. package/dist/list-inset-text.d.ts +3 -1
  112. package/dist/list-inset-text.js +1 -1
  113. package/dist/list-item.d.ts +3 -1
  114. package/dist/list-item.js +1 -1
  115. package/dist/list.d.ts +3 -1
  116. package/dist/list.js +1 -1
  117. package/dist/loading-spinner.d.ts +3 -1
  118. package/dist/loading-spinner.js +1 -1
  119. package/dist/lucide-icon.d.ts +3 -1
  120. package/dist/lucide-icon.js +1 -1
  121. package/dist/nav-stack.d.ts +3 -1
  122. package/dist/nav-stack.js +1 -1
  123. package/dist/pane.d.ts +3 -1
  124. package/dist/pane.js +1 -1
  125. package/dist/resizable-region.d.ts +5 -2
  126. package/dist/resizable-region.js +1 -1
  127. package/dist/row.d.ts +3 -1
  128. package/dist/row.js +1 -1
  129. package/dist/segmented-control.d.ts +3 -1
  130. package/dist/segmented-control.js +1 -1
  131. package/dist/select.d.ts +3 -1
  132. package/dist/select.js +1 -1
  133. package/dist/skeleton.d.ts +3 -1
  134. package/dist/skeleton.js +1 -1
  135. package/dist/spacer.d.ts +3 -1
  136. package/dist/spacer.js +1 -1
  137. package/dist/split-view.d.ts +3 -1
  138. package/dist/split-view.js +24 -5
  139. package/dist/split-view.js.map +1 -1
  140. package/dist/state-banner.d.ts +3 -1
  141. package/dist/state-banner.js +2 -1
  142. package/dist/styles/badge.css +86 -0
  143. package/dist/styles/catalog/components/catalog-detail.css +35 -0
  144. package/dist/styles/catalog/components/catalog-example-stack.css +6 -0
  145. package/dist/styles/catalog/components/catalog-example.css +35 -0
  146. package/dist/styles/catalog/components/catalog-resource-footer.css +37 -0
  147. package/dist/styles/catalog/components/catalog-secondary-sections.css +38 -0
  148. package/dist/styles/catalog/components/catalog-section-list.css +22 -0
  149. package/dist/styles/catalog/components/catalog-sidebar.css +82 -0
  150. package/dist/styles/catalog/components/catalog-stage.css +60 -0
  151. package/dist/styles/catalog/components/catalog.css +22 -0
  152. package/dist/styles/catalog.css +10 -587
  153. package/dist/styles/list-header.css +4 -60
  154. package/dist/styles/resizable-region.css +24 -0
  155. package/dist/styles/select.css +0 -3
  156. package/dist/styles/split-view.css +1 -1
  157. package/dist/styles/state-banner.css +0 -27
  158. package/dist/styles/styles.css +1 -0
  159. package/dist/styles/tab-bar.css +6 -1
  160. package/dist/styles/text.css +4 -0
  161. package/dist/styles/token-search-field.css +5 -40
  162. package/dist/styles/toolbar-control-group.css +110 -16
  163. package/dist/styles/toolbar-text.css +4 -0
  164. package/dist/styles/toolbar.css +72 -0
  165. package/dist/styles/webawesome.css +22 -7
  166. package/dist/sunken-panel.d.ts +3 -1
  167. package/dist/sunken-panel.js +1 -1
  168. package/dist/surface-scaffold.d.ts +6 -2
  169. package/dist/surface-scaffold.js +1 -1
  170. package/dist/tab-bar.d.ts +8 -1
  171. package/dist/tab-bar.js +1 -1
  172. package/dist/tab-scaffold.d.ts +3 -1
  173. package/dist/tab-scaffold.js +3 -1
  174. package/dist/tab-scaffold.js.map +1 -1
  175. package/dist/text.d.ts +5 -2
  176. package/dist/text.js +1 -1
  177. package/dist/token-search-field.d.ts +5 -1
  178. package/dist/token-search-field.js +1 -1
  179. package/dist/toolbar-control-group.d.ts +33 -3
  180. package/dist/toolbar-control-group.js +1 -1
  181. package/dist/toolbar-text.d.ts +3 -1
  182. package/dist/toolbar-text.js +1 -1
  183. package/dist/toolbar.d.ts +9 -1
  184. package/dist/toolbar.js +1 -1
  185. package/dist/types-CzgSrFXP.d.ts +64 -0
  186. package/dist/value-table.d.ts +6 -2
  187. package/dist/value-table.js +1 -1
  188. package/dist/wire-resizable-regions.js +1 -1
  189. package/dist/wire-token-search-fields.js +1 -1
  190. package/dist/workbench.d.ts +3 -1
  191. package/dist/workbench.js +3 -1
  192. package/dist/workbench.js.map +1 -1
  193. package/docs/accessibility.md +11 -1
  194. package/docs/catalog.md +25 -7
  195. package/docs/component-contract.md +71 -22
  196. package/docs/component-selection.md +11 -9
  197. package/docs/design-philosophy.md +6 -5
  198. package/docs/recipes.md +5 -5
  199. package/docs/type-contracts.md +1 -0
  200. package/docs/ux-demo.md +4 -4
  201. package/docs/webawesome-theme.md +5 -4
  202. package/llms.txt +30 -10
  203. package/package.json +9 -2
  204. package/ux-demo/recipes/app-shell.css +87 -0
  205. package/ux-demo/recipes/app-shell.tsx +207 -178
  206. package/ux-demo/recipes/collapsible-sidebar.css +83 -0
  207. package/ux-demo/recipes/collapsible-sidebar.tsx +152 -122
  208. package/ux-demo/recipes/compact-toolbar.css +35 -0
  209. package/ux-demo/recipes/compact-toolbar.tsx +104 -100
  210. package/ux-demo/recipes/composer-form.css +19 -0
  211. package/ux-demo/recipes/composer-form.tsx +19 -15
  212. package/ux-demo/recipes/list-detail-dialog.css +42 -0
  213. package/ux-demo/recipes/list-detail-dialog.tsx +127 -125
  214. package/ux-demo/recipes/list-workspace-states.css +30 -0
  215. package/ux-demo/recipes/list-workspace-states.tsx +66 -60
  216. package/ux-demo/recipes/loading-inspector.css +7 -0
  217. package/ux-demo/recipes/loading-inspector.tsx +151 -131
  218. package/ux-demo/recipes/navigation-sidebar.css +12 -0
  219. package/ux-demo/recipes/navigation-sidebar.tsx +116 -105
  220. package/ux-demo/recipes/navigation-stack.css +12 -0
  221. package/ux-demo/recipes/navigation-stack.tsx +47 -37
  222. package/ux-demo/recipes/recipe-root.css +67 -0
  223. package/ux-demo/recipes/recipe-root.tsx +87 -0
  224. package/ux-demo/recipes/workspace-header.css +7 -0
  225. package/ux-demo/recipes/workspace-header.tsx +60 -61
  226. package/dist/chunk-2TYUFZUC.js.map +0 -1
  227. package/dist/chunk-6NDBE2OK.js.map +0 -1
  228. package/dist/chunk-6WTETUZ6.js.map +0 -1
  229. package/dist/chunk-AQFWBG23.js.map +0 -1
  230. package/dist/chunk-B6JYRX3P.js.map +0 -1
  231. package/dist/chunk-CAB6NQ2T.js.map +0 -1
  232. package/dist/chunk-CK6P5AUK.js.map +0 -1
  233. package/dist/chunk-DAO2VFTT.js.map +0 -1
  234. package/dist/chunk-DYBPI5O2.js.map +0 -1
  235. package/dist/chunk-E34TE2ZI.js.map +0 -1
  236. package/dist/chunk-EYALJQQD.js.map +0 -1
  237. package/dist/chunk-GYGM363P.js.map +0 -1
  238. package/dist/chunk-I45QO2IZ.js.map +0 -1
  239. package/dist/chunk-I4V3UDSA.js.map +0 -1
  240. package/dist/chunk-IU4QUY5I.js.map +0 -1
  241. package/dist/chunk-OGNE3OFT.js.map +0 -1
  242. package/dist/chunk-OGTJNHRG.js.map +0 -1
  243. package/dist/chunk-OMSRSL3B.js.map +0 -1
  244. package/dist/chunk-SOK5EUF7.js.map +0 -1
  245. package/dist/chunk-T7DOWS6T.js.map +0 -1
  246. package/dist/chunk-TIGSG6BX.js.map +0 -1
  247. package/dist/chunk-UDHHKZWO.js.map +0 -1
  248. package/dist/chunk-V6GQKOX2.js.map +0 -1
  249. package/dist/chunk-V6HCTCVD.js.map +0 -1
  250. package/dist/chunk-VXFGMDA7.js.map +0 -1
  251. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  252. package/dist/chunk-WSXUPSID.js.map +0 -1
  253. package/dist/chunk-WVLMZ5SG.js.map +0 -1
  254. package/dist/chunk-XKFRMGMW.js.map +0 -1
  255. package/dist/chunk-Y6LYKFXY.js.map +0 -1
  256. package/dist/chunk-ZPWZIVI6.js.map +0 -1
  257. package/ux-demo/recipes/recipes.css +0 -453
@@ -1,6 +1,6 @@
1
1
  # Public API signatures for the UI authoring corpus
2
2
 
3
- Generated from emitted declarations for `@kerfjs/ui@5.0.0-beta.49` and `kerfjs@5.0.0-beta.49`. This bounded reference covers only APIs used by the seven-task corpus. It is interface evidence, not an implementation or runtime guarantee.
3
+ Generated from emitted declarations for `@kerfjs/ui@5.0.0-beta.50` and `kerfjs@5.0.0-beta.50`. This bounded reference covers only APIs used by the seven-task corpus. It is interface evidence, not an implementation or runtime guarantee.
4
4
 
5
5
  ## `@kerfjs/ui/css-values`
6
6
 
@@ -95,8 +95,10 @@ interface DisclosureArrowProps {
95
95
  /** Replacement icons should use right as their unrotated orientation. */
96
96
  icon?: SafeHtml;
97
97
  className?: string;
98
+ /** Native named-slot assignment when composed inside a web component. */
99
+ slot?: string;
98
100
  }
99
- declare function DisclosureArrow({ open, openDirection, closedDirection, icon, className, }: DisclosureArrowProps): SafeHtml;
101
+ declare function DisclosureArrow({ open, openDirection, closedDirection, icon, className, slot, }: DisclosureArrowProps): SafeHtml;
100
102
 
101
103
  export { DisclosureArrow, type DisclosureArrowProps, type DisclosureDirection };
102
104
  ```
@@ -115,9 +117,17 @@ interface ToolbarProps {
115
117
  label?: string;
116
118
  /** Physical divider edges in canonical top/right/bottom/left order. Defaults to bottom. */
117
119
  dividerSides?: DividerSides;
120
+ /** Horizontal treatment of the center zone. Defaults to centered content. */
121
+ centerAlign?: 'center' | 'stretch';
122
+ /** Component-owned responsive layout; applications choose the policy rather than restyling toolbar internals. */
123
+ responsive?: 'none' | 'stack' | 'center-priority';
124
+ /** Container width at which `responsive="stack"` activates. */
125
+ responsiveAt?: 'compact' | 'narrow';
118
126
  className?: string;
127
+ /** Native named-slot assignment when composed inside a web component. */
128
+ slot?: string;
119
129
  }
120
- declare function Toolbar({ leading, center, trailing, label, dividerSides, className, }: ToolbarProps): kerfjs.SafeHtml;
130
+ declare function Toolbar({ leading, center, trailing, label, dividerSides, centerAlign, responsive, responsiveAt, className, slot, }: ToolbarProps): kerfjs.SafeHtml;
121
131
 
122
132
  export { DividerSides, Toolbar, type ToolbarProps };
123
133
  ```
@@ -150,6 +160,8 @@ interface ToolbarTextBaseProps {
150
160
  * instead. Default true.
151
161
  */
152
162
  ellipsis?: boolean;
163
+ /** Native named-slot assignment when composed inside a web component. */
164
+ slot?: string;
153
165
  }
154
166
  type ToolbarTextWrappingProps = {
155
167
  /** Wrap onto multiple lines; combine with `maxLines` to cap them. */
@@ -160,7 +172,7 @@ type ToolbarTextWrappingProps = {
160
172
  maxLines?: never;
161
173
  };
162
174
  type ToolbarTextProps = ToolbarTextBaseProps & ToolbarTextWrappingProps;
163
- declare function ToolbarText({ text, size, className, id, headingLevel, placeholder, wrap, ellipsis, maxLines, }: ToolbarTextProps): kerfjs.SafeHtml;
175
+ declare function ToolbarText({ text, size, className, id, headingLevel, placeholder, wrap, ellipsis, maxLines, slot, }: ToolbarTextProps): kerfjs.SafeHtml;
164
176
 
165
177
  export { type HeadingLevel, ToolbarText, type ToolbarTextProps, type ToolbarTextSize };
166
178
  ```
@@ -177,9 +189,29 @@ type ToolbarControlGroupButtonAppearance = 'plain' | 'push';
177
189
  type ToolbarControlGroupShape = 'pill' | 'rounded';
178
190
  type ToolbarControlGroupSize = 'default' | 'compact';
179
191
  type ToolbarControlGroupDensity = 'comfortable' | 'tight';
180
- type ToolbarControlGroupContent = 'icon' | 'text' | 'mixed' | 'avatar';
192
+ type ToolbarControlGroupContent = 'icon' | 'text' | 'mixed' | 'avatar' | 'search';
193
+ type ToolbarControlGroupFocusRing = 'control' | 'outline' | 'halo';
181
194
  type ToolbarControlGroupSelectedChrome = 'raised' | 'filled' | 'outline';
182
195
  type ToolbarControlGroupSelectedTone = 'brand' | 'neutral' | 'pop';
196
+ type ToolbarControlGroupOverflow = 'visible' | 'scroll';
197
+ type ToolbarControlGroupMenuInset = 'standard' | 'compact' | 'list-zero';
198
+ type ToolbarControlGroupVisibility = 'always' | 'compact-only';
199
+ interface ToolbarActionLinkProps {
200
+ href: string;
201
+ label: string;
202
+ icon?: KerfUiContent;
203
+ /** Optional machine-readable detail hidden visually but included in the default accessible name. */
204
+ detail?: string;
205
+ /** Override the accessible name when surrounding context is needed. */
206
+ ariaLabel?: string;
207
+ /** Open in a new tab with a safe rel and announce that behavior. */
208
+ external?: boolean;
209
+ className?: string;
210
+ /** Native named-slot assignment when composed inside a web component. */
211
+ slot?: string;
212
+ }
213
+ /** A semantic anchor with ToolbarControlGroup-owned action geometry. */
214
+ declare function ToolbarActionLink({ href, label, icon, detail, ariaLabel, external, className, slot, }: ToolbarActionLinkProps): kerfjs.SafeHtml;
183
215
  interface ToolbarControlGroupProps {
184
216
  children: KerfUiContent;
185
217
  label?: string;
@@ -194,10 +226,18 @@ interface ToolbarControlGroupProps {
194
226
  size?: ToolbarControlGroupSize;
195
227
  density?: ToolbarControlGroupDensity;
196
228
  content?: ToolbarControlGroupContent;
229
+ /** Whether controls paint focus individually or the group paints an outline/halo on focus-within. */
230
+ focusRing?: ToolbarControlGroupFocusRing;
197
231
  selectedChrome?: ToolbarControlGroupSelectedChrome;
198
232
  selectedTone?: ToolbarControlGroupSelectedTone;
199
233
  /** Size a nested Web Awesome dropdown trigger as part of this group. */
200
234
  nestedDropdown?: boolean;
235
+ /** Configure the nested dropdown menu inset without consumer ::part() CSS. */
236
+ menuInset?: ToolbarControlGroupMenuInset;
237
+ /** Keep an overlong row of actions inside the available width with horizontal scrolling. */
238
+ overflow?: ToolbarControlGroupOverflow;
239
+ /** Responsive visibility owned by the enclosing Toolbar container. */
240
+ visibility?: ToolbarControlGroupVisibility;
201
241
  /** Add contrast behind photo-backed avatar content. */
202
242
  scrim?: boolean;
203
243
  /**
@@ -205,10 +245,12 @@ interface ToolbarControlGroupProps {
205
245
  * multi-control group paints it only on the pressed selection highlight.
206
246
  */
207
247
  avatarImage?: string;
248
+ /** Native named-slot assignment when composed inside a web component. */
249
+ slot?: string;
208
250
  }
209
- declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance, shape, size, density, content, selectedChrome, selectedTone, nestedDropdown, scrim, avatarImage, }: ToolbarControlGroupProps): kerfjs.SafeHtml;
251
+ declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance, shape, size, density, content, focusRing, selectedChrome, selectedTone, nestedDropdown, menuInset, overflow, visibility, scrim, avatarImage, slot, }: ToolbarControlGroupProps): kerfjs.SafeHtml;
210
252
 
211
- export { ToolbarControlGroup, type ToolbarControlGroupAppearance, type ToolbarControlGroupButtonAppearance, type ToolbarControlGroupContent, type ToolbarControlGroupDensity, type ToolbarControlGroupProps, type ToolbarControlGroupSelectedChrome, type ToolbarControlGroupSelectedTone, type ToolbarControlGroupShape, type ToolbarControlGroupSize, type ToolbarControlGroupTone };
253
+ export { ToolbarActionLink, type ToolbarActionLinkProps, ToolbarControlGroup, type ToolbarControlGroupAppearance, type ToolbarControlGroupButtonAppearance, type ToolbarControlGroupContent, type ToolbarControlGroupDensity, type ToolbarControlGroupFocusRing, type ToolbarControlGroupMenuInset, type ToolbarControlGroupOverflow, type ToolbarControlGroupProps, type ToolbarControlGroupSelectedChrome, type ToolbarControlGroupSelectedTone, type ToolbarControlGroupShape, type ToolbarControlGroupSize, type ToolbarControlGroupTone, type ToolbarControlGroupVisibility };
212
254
  ```
213
255
 
214
256
  ## `@kerfjs/ui/floating-toolbar`
@@ -230,6 +272,8 @@ interface FloatingToolbarProps {
230
272
  */
231
273
  position?: FloatingToolbarPosition;
232
274
  className?: string;
275
+ /** Native named-slot assignment when composed inside a web component. */
276
+ slot?: string;
233
277
  }
234
278
  /**
235
279
  * A toolbar that floats above the main content of its nearest positioned
@@ -240,7 +284,7 @@ interface FloatingToolbarProps {
240
284
  * top toolbar's own inset); override that token to move it. The app owns the
241
285
  * controls and their behavior — wire them with `delegate()` as usual.
242
286
  */
243
- declare function FloatingToolbar({ children, label, position, className, }: FloatingToolbarProps): kerfjs.SafeHtml;
287
+ declare function FloatingToolbar({ children, label, position, className, slot, }: FloatingToolbarProps): kerfjs.SafeHtml;
244
288
 
245
289
  export { FloatingToolbar, type FloatingToolbarPosition, type FloatingToolbarProps };
246
290
  ```
@@ -258,6 +302,7 @@ type ListHeaderRootAttributes = Readonly<Record<`data-${string}`, string | undef
258
302
  'data-density'?: never;
259
303
  'data-divider'?: never;
260
304
  'data-inline'?: never;
305
+ 'data-width'?: never;
261
306
  'data-indicator-tone'?: never;
262
307
  'data-toggle'?: never;
263
308
  }>;
@@ -274,11 +319,15 @@ interface ListHeaderBaseProps {
274
319
  divider?: 'none' | 'before' | 'after' | 'both';
275
320
  /** Shrink-wrap the header without its default outer margin, border, or padding. */
276
321
  inline?: boolean;
322
+ /** Fill the available row or shrink-wrap while retaining normal header geometry. */
323
+ width?: 'fill' | 'content';
277
324
  indicatorTone?: 'neutral' | 'accent' | 'pop' | 'danger';
278
325
  /** Render as an unanimated loading skeleton: keep the label and action affordance, disable interaction. */
279
326
  placeholder?: boolean;
280
327
  rootAttributes?: ListHeaderRootAttributes;
281
328
  triggerAttributes?: ListHeaderTriggerAttributes;
329
+ /** Native named-slot assignment when composed inside a web component. */
330
+ slot?: string;
282
331
  }
283
332
  type ListHeaderModeProps = {
284
333
  /** Render the title as a controlled disclosure trigger. */
@@ -325,7 +374,7 @@ type ListHeaderIndicatorProps = {
325
374
  status?: SafeHtml;
326
375
  };
327
376
  type ListHeaderProps = ListHeaderBaseProps & ListHeaderIndicatorProps & ListHeaderModeProps;
328
- declare function ListHeader({ label, count, countLabel, badge, status, density, divider, inline, indicatorTone, action, actionLabel, actionIcon, actionDisabled, disabledReason, expanded, toggle, placeholder, rootAttributes, triggerAttributes, }: ListHeaderProps): SafeHtml;
377
+ declare function ListHeader({ label, count, countLabel, badge, status, density, divider, inline, width, indicatorTone, action, actionLabel, actionIcon, actionDisabled, disabledReason, expanded, toggle, placeholder, rootAttributes, triggerAttributes, slot, }: ListHeaderProps): SafeHtml;
329
378
 
330
379
  export { ListHeader, type ListHeaderProps };
331
380
  ```
@@ -359,9 +408,11 @@ interface ListProps {
359
408
  /** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */
360
409
  controlInsets?: Sides;
361
410
  className?: string;
411
+ /** Native named-slot assignment when composed inside a web component. */
412
+ slot?: string;
362
413
  }
363
414
  /** A stretch-aligned vertical stack with optional gap, flex, scroll, and dividers. */
364
- declare function List({ children, gap, flex, hAlign, vAlign, scrollable, dividerSides, textInsets, controlInsets, className, }: ListProps): kerfjs.SafeHtml;
415
+ declare function List({ children, gap, flex, hAlign, vAlign, scrollable, dividerSides, textInsets, controlInsets, className, slot, }: ListProps): kerfjs.SafeHtml;
365
416
 
366
417
  export { CssFlex, CssFlexKeyword, CssLength, DividerSides, HorizontalAlignment, List, type ListProps, ListVerticalAlignment, Sides, UiSpaceName };
367
418
  ```
@@ -426,8 +477,10 @@ interface ListActionRowProps {
426
477
  className?: string;
427
478
  rootAttributes?: ListActionRowRootAttributes;
428
479
  trailingActionAttributes?: ListActionRowTrailingAttributes;
480
+ /** Native named-slot assignment when composed inside a web component. */
481
+ slot?: string;
429
482
  }
430
- declare function ListActionRow({ label, description, status, busy, density, divider, icon, action, itemId, selected, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, trailingAction, trailingActionLabel, trailingActionIcon, trailingActionDisabled, trailingActionTitle, trailingActionVisibility, className, rootAttributes, trailingActionAttributes, }: ListActionRowProps): SafeHtml;
483
+ declare function ListActionRow({ label, description, status, busy, density, divider, icon, action, itemId, selected, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, trailingAction, trailingActionLabel, trailingActionIcon, trailingActionDisabled, trailingActionTitle, trailingActionVisibility, className, rootAttributes, trailingActionAttributes, slot, }: ListActionRowProps): SafeHtml;
431
484
 
432
485
  export { ListActionRow, type ListActionRowProps };
433
486
  ```
@@ -476,8 +529,10 @@ interface ListItemProps {
476
529
  /** Render the row as an unanimated loading skeleton, disabling its action. */
477
530
  placeholder?: boolean;
478
531
  rootAttributes?: ListItemRootAttributes;
532
+ /** Native named-slot assignment when composed inside a web component. */
533
+ slot?: string;
479
534
  }
480
- declare function ListItem({ label, description, icon, trailing, status, busy, density, divider, selected, action, itemId, className, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, rootAttributes, }: ListItemProps): SafeHtml;
535
+ declare function ListItem({ label, description, icon, trailing, status, busy, density, divider, selected, action, itemId, className, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, rootAttributes, slot, }: ListItemProps): SafeHtml;
481
536
 
482
537
  export { ListItem, type ListItemProps };
483
538
  ```
@@ -495,6 +550,8 @@ interface ListInsetControlProps {
495
550
  /** Physical inset sides in canonical top/right/bottom/left order. Defaults to all sides. */
496
551
  sides?: Sides;
497
552
  className?: string;
553
+ /** Native named-slot assignment when composed inside a web component. */
554
+ slot?: string;
498
555
  }
499
556
  /**
500
557
  * Insets a control into a pane/list content region: an 8px inline margin (so its
@@ -502,7 +559,7 @@ interface ListInsetControlProps {
502
559
  * Use it for controls that carry their own border and padding but no outer margin
503
560
  * — the wrapper adds only the alignment margin and layout, not a second inset.
504
561
  */
505
- declare function ListInsetControl({ children, sides, className, }: ListInsetControlProps): kerfjs.SafeHtml;
562
+ declare function ListInsetControl({ children, sides, className, slot, }: ListInsetControlProps): kerfjs.SafeHtml;
506
563
 
507
564
  export { ListInsetControl, type ListInsetControlProps, Sides };
508
565
  ```
@@ -527,6 +584,8 @@ interface ListInsetTextProps {
527
584
  */
528
585
  horizontalOnly?: boolean;
529
586
  className?: string;
587
+ /** Native named-slot assignment when composed inside a web component. */
588
+ slot?: string;
530
589
  }
531
590
  /**
532
591
  * Gives bare text the content-item geometry — an 8px inline margin, a 1px
@@ -536,7 +595,7 @@ interface ListInsetTextProps {
536
595
  * Pass `horizontalOnly` to keep the horizontal inset but drop the vertical box
537
596
  * space for tight text layout.
538
597
  */
539
- declare function ListInsetText({ children, sides, horizontalOnly, className, }: ListInsetTextProps): kerfjs.SafeHtml;
598
+ declare function ListInsetText({ children, sides, horizontalOnly, className, slot, }: ListInsetTextProps): kerfjs.SafeHtml;
540
599
 
541
600
  export { ListInsetText, type ListInsetTextProps, Sides };
542
601
  ```
@@ -555,15 +614,19 @@ interface ValueTableRowProps {
555
614
  className?: string;
556
615
  /** Render the value as an unanimated loading skeleton, keeping the field label. */
557
616
  placeholder?: boolean;
617
+ /** Native named-slot assignment when composed inside a web component. */
618
+ slot?: string;
558
619
  }
559
- declare function ValueTableRow({ label, value, icon, className, placeholder, }: ValueTableRowProps): SafeHtml;
620
+ declare function ValueTableRow({ label, value, icon, className, placeholder, slot, }: ValueTableRowProps): SafeHtml;
560
621
 
561
622
  interface ValueTableProps {
562
623
  label: string;
563
624
  className?: string;
564
625
  children: KerfUiContent;
626
+ /** Native named-slot assignment when composed inside a web component. */
627
+ slot?: string;
565
628
  }
566
- declare function ValueTable({ label, className, children, }: ValueTableProps): kerfjs.SafeHtml;
629
+ declare function ValueTable({ label, className, children, slot, }: ValueTableProps): kerfjs.SafeHtml;
567
630
 
568
631
  export { ValueTable, type ValueTableProps, ValueTableRow, type ValueTableRowProps };
569
632
  ```
@@ -606,8 +669,10 @@ interface AppTabProps {
606
669
  /** Render as an unanimated loading skeleton, disabling select/close and dragging. */
607
670
  placeholder?: boolean;
608
671
  rootAttributes?: AppTabRootAttributes;
672
+ /** Native named-slot assignment when composed inside a web component. */
673
+ slot?: string;
609
674
  }
610
- declare function AppTab({ id, name, selected, closable, draggable, leading, trailing, presentation, size, labelMaxWidth, closeIcon, selectAction, closeAction, className, placeholder, rootAttributes, }: AppTabProps): SafeHtml;
675
+ declare function AppTab({ id, name, selected, closable, draggable, leading, trailing, presentation, size, labelMaxWidth, closeIcon, selectAction, closeAction, className, placeholder, rootAttributes, slot, }: AppTabProps): SafeHtml;
611
676
 
612
677
  export { AppTab, type AppTabPresentation, type AppTabProps, type AppTabSize };
613
678
  ```
@@ -628,6 +693,11 @@ interface TabBarProps {
628
693
  children: KerfUiContent;
629
694
  leading?: KerfUiContent;
630
695
  trailing?: KerfUiContent;
696
+ /**
697
+ * Action pinned to the far edge of the bar. Combine with an adjacent `trailing`
698
+ * action when the tab-local and workspace-level actions must remain distinct.
699
+ */
700
+ end?: KerfUiContent;
631
701
  className?: string;
632
702
  /**
633
703
  * Keyboard activation mode for this strip, emitted as `data-tab-activation` for
@@ -642,9 +712,11 @@ interface TabBarProps {
642
712
  presentation?: TabBarPresentation;
643
713
  /** Keep a trailing action beside the final tab or at the far edge of the bar. */
644
714
  trailingPlacement?: TabBarTrailingPlacement;
715
+ /** Native named-slot assignment when composed inside a web component. */
716
+ slot?: string;
645
717
  }
646
718
  /** Render a controlled tab strip. The application owns selection, order, and persistence. */
647
- declare function TabBar({ id, label, children, leading, trailing, className, activation, allocation, presentation, trailingPlacement, }: TabBarProps): kerfjs.SafeHtml;
719
+ declare function TabBar({ id, label, children, leading, trailing, end, className, activation, allocation, presentation, trailingPlacement, slot, }: TabBarProps): kerfjs.SafeHtml;
648
720
 
649
721
  export { type TabActivation, TabBar, type TabBarAllocation, type TabBarPresentation, type TabBarProps, type TabBarTrailingPlacement };
650
722
  ```
@@ -722,6 +794,8 @@ interface NavStackProps {
722
794
  /** Optional persistent bottom toolbar used when the active view does not provide one. */
723
795
  bottomToolbar?: KerfUiContent;
724
796
  className?: string;
797
+ /** Native named-slot assignment when composed inside a web component. */
798
+ slot?: string;
725
799
  }
726
800
  /**
727
801
  * A navigation stack (iOS-style push/pop). Renders every entry stacked, the last
@@ -729,7 +803,7 @@ interface NavStackProps {
729
803
  * cross-fades the chrome across a change. A single-pane layout is a `NavStack`
730
804
  * with one entry. See `docs/23-app-layouts.md` §3.1.
731
805
  */
732
- declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className, }: NavStackProps): kerfjs.SafeHtml;
806
+ declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className, slot, }: NavStackProps): kerfjs.SafeHtml;
733
807
 
734
808
  export { NavStack, type NavStackProps, type NavStackView };
735
809
  ```
@@ -792,6 +866,8 @@ interface SplitViewProps {
792
866
  /** A resizable separator on roomy classes (min/max px). Omit for a fixed split. */
793
867
  resizable?: SplitViewResizable;
794
868
  className?: string;
869
+ /** Native named-slot assignment when composed inside a web component. */
870
+ slot?: string;
795
871
  }
796
872
  /**
797
873
  * A list-detail split. On roomy classes it shows both panes side
@@ -800,7 +876,7 @@ interface SplitViewProps {
800
876
  * resizable wiring with `wireResizableRegions` and the compact back with
801
877
  * `wireNavStack`.
802
878
  */
803
- declare function SplitView({ id, label, list, detail, compact, detailActive, listTitle, detailTitle, backLabel, resizable, className, }: SplitViewProps): kerfjs.SafeHtml;
879
+ declare function SplitView({ id, label, list, detail, compact, detailActive, listTitle, detailTitle, backLabel, resizable, className, slot, }: SplitViewProps): kerfjs.SafeHtml;
804
880
 
805
881
  export { SplitView, type SplitViewProps, type SplitViewResizable };
806
882
  ```
@@ -848,6 +924,8 @@ interface PaneProps {
848
924
  footerClassName?: string;
849
925
  /** Safe `data-*` metadata; Pane-owned structural attributes remain protected. */
850
926
  rootAttributes?: PaneRootAttributes;
927
+ /** Native named-slot assignment when composed inside a web component. */
928
+ slot?: string;
851
929
  }
852
930
  /**
853
931
  * An unpadded application column with optional fixed header/footer slots and one
@@ -855,7 +933,7 @@ interface PaneProps {
855
933
  * each logical edge, so the same component works as a sidebar, main area,
856
934
  * inspector, or dialog column.
857
935
  */
858
- declare function Pane({ header, children, footer, element, contentElement, separators, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, }: PaneProps): kerfjs.SafeHtml;
936
+ declare function Pane({ header, children, footer, element, contentElement, separators, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
859
937
 
860
938
  export { Pane, type PaneContentElement, type PaneElement, type PaneProps, type PaneSeparatorSide };
861
939
  ```
@@ -893,6 +971,8 @@ interface WorkbenchProps {
893
971
  rightRail?: WorkbenchPanel;
894
972
  bottomDrawer?: WorkbenchPanel;
895
973
  className?: string;
974
+ /** Native named-slot assignment when composed inside a web component. */
975
+ slot?: string;
896
976
  }
897
977
  /**
898
978
  * The Xcode-like multi-panel workspace: a collapsible left rail, right rail, and
@@ -904,7 +984,7 @@ interface WorkbenchProps {
904
984
  * each `collapsed` flag; the collapse is pure CSS (no wire). See
905
985
  * `docs/23-app-layouts.md` §3.3.
906
986
  */
907
- declare function Workbench({ id, label, main, leftRail, rightRail, bottomDrawer, className, }: WorkbenchProps): SafeHtml;
987
+ declare function Workbench({ id, label, main, leftRail, rightRail, bottomDrawer, className, slot, }: WorkbenchProps): SafeHtml;
908
988
 
909
989
  export { Workbench, type WorkbenchPanel, type WorkbenchProps };
910
990
  ```
@@ -943,6 +1023,8 @@ interface CollapsiblePanelToggleProps {
943
1023
  /** Accessible label; defaults to "Collapse"/"Expand". */
944
1024
  label?: string;
945
1025
  className?: string;
1026
+ /** Native named-slot assignment when composed inside a web component. */
1027
+ slot?: string;
946
1028
  }
947
1029
  /**
948
1030
  * A standard collapse/expand toggle button for a {@link CollapsiblePanel}: the
@@ -951,7 +1033,7 @@ interface CollapsiblePanelToggleProps {
951
1033
  * put it in the panel's own header (to collapse) and somewhere always-visible
952
1034
  * (to expand while collapsed).
953
1035
  */
954
- declare function CollapsiblePanelToggle({ side, collapsed, action, panelId, label, className, }: CollapsiblePanelToggleProps): SafeHtml;
1036
+ declare function CollapsiblePanelToggle({ side, collapsed, action, panelId, label, className, slot, }: CollapsiblePanelToggleProps): SafeHtml;
955
1037
  interface CollapsiblePanelProps {
956
1038
  /** A stable id for the panel — `wireSidebar` targets it and toggles reference it. */
957
1039
  id: string;
@@ -1066,6 +1148,8 @@ interface TabScaffoldProps<Id extends string = string> {
1066
1148
  /** The controlled active tab id (the app owns selection). */
1067
1149
  active: NoInfer<Id>;
1068
1150
  className?: string;
1151
+ /** Native named-slot assignment when composed inside a web component. */
1152
+ slot?: string;
1069
1153
  }
1070
1154
  /**
1071
1155
  * A mobile-first, iOS-like bottom tab scaffold: a bottom tab bar that switches
@@ -1075,7 +1159,7 @@ interface TabScaffoldProps<Id extends string = string> {
1075
1159
  * On larger classes, promote the tabs to a `Workbench` rail or sidebar instead of
1076
1160
  * a bottom bar. See `docs/23-app-layouts.md` §3.4.
1077
1161
  */
1078
- declare function TabScaffold<Id extends string>({ id, label, tabs, active, className, }: TabScaffoldProps<Id>): SafeHtml;
1162
+ declare function TabScaffold<Id extends string>({ id, label, tabs, active, className, slot, }: TabScaffoldProps<Id>): SafeHtml;
1079
1163
 
1080
1164
  export { TabScaffold, type TabScaffoldProps, type TabScaffoldTab };
1081
1165
  ```
@@ -1109,6 +1193,7 @@ type ResizableRegionCollapseMotion = 'none' | 'slide' | 'fade-slide';
1109
1193
  type ResizableRegionContentOverflow = 'clip' | 'auto' | 'visible';
1110
1194
  type ResizableRegionPresentation = 'inline' | 'overlay' | 'hidden';
1111
1195
  type ResizableRegionRestorePosition = 'bottom-start' | 'bottom-end';
1196
+ type ResizableRegionResponsiveFillAt = 'compact' | 'narrow';
1112
1197
  interface ResizableRegionProps {
1113
1198
  id: string;
1114
1199
  label: string;
@@ -1131,15 +1216,17 @@ interface ResizableRegionProps {
1131
1216
  restoreControl?: SafeHtml;
1132
1217
  /** Safe-area-aware viewport corner for `restoreControl`. */
1133
1218
  restorePosition?: ResizableRegionRestorePosition;
1219
+ /** Fill the available inline track and hide the separator below a container breakpoint. */
1220
+ responsiveFillAt?: ResizableRegionResponsiveFillAt;
1134
1221
  /** Decorative dormant content for the separator handle. Must not contain interactive descendants. */
1135
1222
  handleIcon?: SafeHtml;
1136
1223
  children: KerfUiContent;
1137
1224
  }
1138
1225
  declare const clampRegionSize: (size: number, min: number, max: number) => number;
1139
1226
  declare const resizeRegionFromPointer: (startSize: number, delta: number, edge: ResizableRegionEdge) => number;
1140
- declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, separator, collapseMotion, contentOverflow, presentation, restoreControl, restorePosition, handleIcon, children, }: ResizableRegionProps): SafeHtml;
1227
+ declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, separator, collapseMotion, contentOverflow, presentation, restoreControl, restorePosition, responsiveFillAt, handleIcon, children, }: ResizableRegionProps): SafeHtml;
1141
1228
 
1142
- export { ResizableRegion, type ResizableRegionAxis, type ResizableRegionCollapseMotion, type ResizableRegionContentOverflow, type ResizableRegionEdge, type ResizableRegionPresentation, type ResizableRegionProps, type ResizableRegionRestorePosition, type ResizableRegionSeparator, clampRegionSize, resizeRegionFromPointer };
1229
+ export { ResizableRegion, type ResizableRegionAxis, type ResizableRegionCollapseMotion, type ResizableRegionContentOverflow, type ResizableRegionEdge, type ResizableRegionPresentation, type ResizableRegionProps, type ResizableRegionResponsiveFillAt, type ResizableRegionRestorePosition, type ResizableRegionSeparator, clampRegionSize, resizeRegionFromPointer };
1143
1230
  ```
1144
1231
 
1145
1232
  ## `@kerfjs/ui/wire-resizable-regions`
@@ -1232,105 +1319,16 @@ export { DEFAULT_BREAKPOINTS, type DeviceBreakpoints, type DeviceClass, type Dev
1232
1319
  ## `@kerfjs/ui/catalog`
1233
1320
 
1234
1321
  ```ts
1322
+ import * as kerfjs from 'kerfjs';
1235
1323
  import { SafeHtml } from 'kerfjs';
1324
+ import { a as CatalogProps } from './types-CzgSrFXP.js';
1325
+ export { b as CatalogBrand, c as CatalogEntry, d as CatalogRelated, C as CatalogResource, e as CatalogSecondaryGroup, f as CatalogSection } from './types-CzgSrFXP.js';
1236
1326
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
1237
1327
 
1238
- /** A reference link shown in the detail footer for the active entry. */
1239
- interface CatalogResource {
1240
- label: string;
1241
- href: string;
1242
- /** Optional monospace detail (e.g. a file path) shown after the label. */
1243
- detail?: string;
1244
- }
1245
- /** A related entry offered in the detail footer's "Related entries" popup menu. */
1246
- interface CatalogRelated {
1247
- id: string;
1248
- name: string;
1249
- /** Group heading in the menu, e.g. "Uses" / "Used by". */
1250
- group: string;
1251
- }
1252
- interface CatalogEntry {
1253
- id: string;
1254
- name: string;
1255
- description?: string;
1256
- /** Short metadata tags shown at the trailing edge of the sidebar row. */
1257
- tags?: readonly string[];
1258
- resources?: readonly CatalogResource[];
1259
- related?: readonly CatalogRelated[];
1260
- }
1261
- interface CatalogSection {
1262
- category: string;
1263
- entries: readonly CatalogEntry[];
1264
- }
1265
- /**
1266
- * A secondary group of sections shown below the primary sidebar sections with a
1267
- * quieter "ecosystem" treatment (e.g. third-party components). Optionally
1268
- * collapsible — the app owns `expanded` and toggles it from `wireCatalog`'s
1269
- * `onToggleSecondary`.
1270
- */
1271
- interface CatalogSecondaryGroup {
1272
- label: string;
1273
- sections: readonly CatalogSection[];
1274
- /** When true, the group's label is a disclosure toggle controlling `expanded`. */
1275
- collapsible?: boolean;
1276
- /** Whether the group is expanded (controlled). Ignored unless `collapsible`. */
1277
- expanded?: boolean;
1278
- }
1279
- interface CatalogBrand {
1280
- title: string;
1281
- subtitle?: string;
1282
- /** Logo image URL (rendered decorative). Omit for a text-only brand. */
1283
- logoUrl?: string;
1284
- }
1285
- interface CatalogProps {
1286
- brand: CatalogBrand;
1287
- sections: readonly CatalogSection[];
1288
- /** The controlled active entry id — the app owns this signal. */
1289
- active: string;
1290
- /** The rendered preview for the active entry; the app computes it from `active`. */
1291
- content: KerfUiContent;
1292
- /** Whether the sidebar is collapsed (controlled). */
1293
- collapsed?: boolean;
1294
- /** Current theme; when set, a theme toggle is shown that switches to the opposite. Omit to hide it. */
1295
- theme?: 'light' | 'dark';
1296
- /** Extra header controls placed before the theme toggle (each a `ToolbarControlGroup`). */
1297
- headerActions?: KerfUiContent;
1298
- /** A secondary "ecosystem" group of sections below the primary category groups. */
1299
- secondarySections?: CatalogSecondaryGroup;
1300
- /** Extra sidebar content below the category groups (and the secondary group). */
1301
- sidebarFooter?: KerfUiContent;
1302
- /** Status line content shown at the start of the detail footer. */
1303
- status?: KerfUiContent;
1304
- /**
1305
- * Whether to highlight specimens' computed borders (or transparent outer
1306
- * bounds) and non-zero margins. Pass a boolean (rather than omitting the
1307
- * prop) when the active entry can switch between component and composition
1308
- * previews; `wireCatalogGeometryOverlay` keeps the overlay synchronized.
1309
- */
1310
- geometryOverlay?: boolean;
1311
- selectAction?: string;
1312
- toggleSidebarAction?: string;
1313
- toggleThemeAction?: string;
1314
- /** Action fired by the secondary group's disclosure toggle (when collapsible). */
1315
- toggleSecondaryAction?: string;
1316
- className?: string;
1317
- }
1318
- /**
1319
- * A reusable component-catalog shell: a collapsible category sidebar, a titled
1320
- * detail stage that renders the active entry's preview, and a footer with
1321
- * reference links and a related-entry popup menu. Built entirely from public
1322
- * `@kerfjs/ui` primitives. Controlled and stateless — the app owns the `active`,
1323
- * `collapsed`, and `theme` signals and computes `content` from `active` in its own
1324
- * render; wire the sidebar/collapse/theme actions with `wireCatalog`.
1325
- */
1326
- declare function Catalog({ brand, sections, active, content, collapsed, theme, headerActions, secondarySections, sidebarFooter, status, geometryOverlay, selectAction, toggleSidebarAction, toggleThemeAction, toggleSecondaryAction, className, }: CatalogProps): SafeHtml;
1327
- /**
1328
- * How a {@link CatalogExample}'s content aligns its visible left edge with the
1329
- * example's `ListHeader` label (which sits 16px in — 8px title + 8px label):
1330
- * - `'glyph'` — a bare glyph/text specimen with no inline geometry insets the full 16px.
1331
- * - `'inline-control'` — a control that already carries ~8px of its own inline padding insets 8px so its content lands on the same line.
1332
- * - `'none'` — a content-item / composition that owns its geometry and already aligns; no inset (default).
1333
- */
1328
+ /** Controlled, stateless component-catalog shell. */
1329
+ declare function Catalog({ brand, sections, active, content, collapsed, theme, headerActions, secondarySections, sidebarFooter, status, geometryOverlay, selectAction, toggleSidebarAction, toggleThemeAction, toggleSecondaryAction, className, slot, }: CatalogProps): kerfjs.SafeHtml;
1330
+
1331
+ /** How a specimen aligns its visible edge with its `ListHeader` label. */
1334
1332
  type CatalogExampleAlign = 'glyph' | 'inline-control' | 'none';
1335
1333
  type CatalogExampleRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
1336
1334
  'data-catalog-example'?: never;
@@ -1339,58 +1337,46 @@ type CatalogExampleRootAttributes = Readonly<Record<`data-${string}`, string | u
1339
1337
  'data-catalog-example-note'?: never;
1340
1338
  'data-align'?: never;
1341
1339
  }>;
1342
- type CatalogExampleStackRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
1343
- 'data-catalog-example'?: never;
1344
- 'data-catalog-example-stack'?: never;
1345
- 'data-catalog-example-label'?: never;
1346
- 'data-catalog-example-note'?: never;
1347
- 'data-align'?: never;
1348
- }>;
1349
1340
  interface CatalogExampleProps {
1350
- /** The example's label, shown as a `ListHeader` above the specimen. Omit for a bare specimen. */
1351
1341
  label?: string;
1352
- /** Optional explanatory note between the label and the specimen. */
1353
1342
  note?: SafeHtml | string;
1354
- /** Alignment inset for the specimen — see {@link CatalogExampleAlign}. Default `'none'`. */
1355
1343
  align?: CatalogExampleAlign;
1356
- /** Safe authoring `data-*` metadata for the rendered section. Helper-owned structural attributes remain protected. */
1357
1344
  rootAttributes?: CatalogExampleRootAttributes;
1358
1345
  className?: string;
1359
1346
  children?: KerfUiContent;
1347
+ /** Native named-slot assignment when composed inside a web component. */
1348
+ slot?: string;
1360
1349
  }
1361
- /**
1362
- * One labeled example in a catalog preview: a `ListHeader` label, an optional
1363
- * note, and the specimen. `align` insets the specimen so its visible left edge
1364
- * lines up with the label text, encoding the catalog's alignment rules as a
1365
- * first-class prop instead of per-demo CSS. The inset is published as the
1366
- * `--kui-catalog-example-align` custom property so a debug overlay can exclude it
1367
- * from a specimen's measured margin.
1368
- */
1369
- declare function CatalogExample({ label, note, align, rootAttributes, className, children, }: CatalogExampleProps): SafeHtml;
1350
+ /** A labeled catalog specimen with optional explanatory text and alignment. */
1351
+ declare function CatalogExample({ label, note, align, rootAttributes, className, children, slot, }: CatalogExampleProps): SafeHtml;
1352
+
1353
+ type CatalogExampleStackRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
1354
+ 'data-catalog-example'?: never;
1355
+ 'data-catalog-example-stack'?: never;
1356
+ 'data-catalog-example-label'?: never;
1357
+ 'data-catalog-example-note'?: never;
1358
+ 'data-align'?: never;
1359
+ }>;
1370
1360
  interface CatalogExampleStackProps {
1371
- /** Accessible label for the stack region. */
1372
1361
  label?: string;
1373
- /** Safe authoring `data-*` metadata for the rendered stack. Helper-owned structural attributes remain protected. */
1374
1362
  rootAttributes?: CatalogExampleStackRootAttributes;
1375
1363
  className?: string;
1376
1364
  children?: KerfUiContent;
1365
+ /** Native named-slot assignment when composed inside a web component. */
1366
+ slot?: string;
1377
1367
  }
1378
- /**
1379
- * A vertically-stacked group of {@link CatalogExample}s with the catalog's
1380
- * example rhythm. The semantic `section` becomes a named `region` when `label`
1381
- * is supplied; an unlabeled stack remains an ordinary grouping.
1382
- */
1383
- declare function CatalogExampleStack({ label, rootAttributes, className, children, }: CatalogExampleStackProps): SafeHtml;
1368
+ /** A vertically stacked group of catalog examples. */
1369
+ declare function CatalogExampleStack({ label, rootAttributes, className, children, slot, }: CatalogExampleStackProps): kerfjs.SafeHtml;
1384
1370
 
1385
- export { Catalog, type CatalogBrand, type CatalogEntry, CatalogExample, type CatalogExampleAlign, type CatalogExampleProps, CatalogExampleStack, type CatalogExampleStackProps, type CatalogProps, type CatalogRelated, type CatalogResource, type CatalogSecondaryGroup, type CatalogSection };
1371
+ export { Catalog, CatalogExample, type CatalogExampleAlign, type CatalogExampleProps, CatalogExampleStack, type CatalogExampleStackProps, CatalogProps };
1386
1372
  ```
1387
1373
 
1388
1374
  ## `@kerfjs/ui/catalog-resources`
1389
1375
 
1390
1376
  ```ts
1391
- import { CatalogResource } from './catalog.js';
1392
- import 'kerfjs';
1377
+ import { C as CatalogResource } from './types-CzgSrFXP.js';
1393
1378
  import './semantic-content-BbzjvSu9.js';
1379
+ import 'kerfjs';
1394
1380
 
1395
1381
  /**
1396
1382
  * Standard resource labels for a Kerf catalog detail footer. Keep these labels
@@ -1517,8 +1503,10 @@ interface SegmentedControlProps<Value extends string = string> {
1517
1503
  className?: string;
1518
1504
  /** Render as an unanimated loading skeleton, disabling every segment. */
1519
1505
  placeholder?: boolean;
1506
+ /** Native named-slot assignment when composed inside a web component. */
1507
+ slot?: string;
1520
1508
  }
1521
- declare function SegmentedControl<Value extends string>({ id, label, value, choices, action, appearance, shape, size, layout, className, placeholder, }: SegmentedControlProps<Value>): kerfjs.SafeHtml;
1509
+ declare function SegmentedControl<Value extends string>({ id, label, value, choices, action, appearance, shape, size, layout, className, placeholder, slot, }: SegmentedControlProps<Value>): kerfjs.SafeHtml;
1522
1510
 
1523
1511
  export { SegmentedControl, type SegmentedControlAppearance, type SegmentedControlChoice, type SegmentedControlLayout, type SegmentedControlProps, type SegmentedControlShape, type SegmentedControlSize };
1524
1512
  ```
@@ -1575,9 +1563,11 @@ interface SelectBaseProps<Value extends string = string> {
1575
1563
  focusRingOwner?: SelectFocusRingOwner;
1576
1564
  /** Maximum closed-control label width in CSS pixels before ellipsis. */
1577
1565
  labelMaxWidth?: number;
1566
+ /** Native named-slot assignment when composed inside a web component. */
1567
+ slot?: string;
1578
1568
  }
1579
1569
  type SelectProps<Value extends string = string> = SelectBaseProps<Value> & SelectAccessibleName;
1580
- declare function Select<Value extends string>({ name, value, label, ariaLabel, choices, className, placeholderText, hint, disabled, fitMenu, renderSelected, placeholder, presentation, size, selectedPresentation, focusRingOwner, labelMaxWidth, }: SelectProps<Value>): SafeHtml;
1570
+ declare function Select<Value extends string>({ name, value, label, ariaLabel, choices, className, placeholderText, hint, disabled, fitMenu, renderSelected, placeholder, presentation, size, selectedPresentation, focusRingOwner, labelMaxWidth, slot, }: SelectProps<Value>): SafeHtml;
1581
1571
 
1582
1572
  export { Select, type SelectChoice, type SelectFocusRingOwner, type SelectPresentation, type SelectProps, type SelectSelectedPresentation, type SelectSize };
1583
1573
  ```
@@ -1602,8 +1592,10 @@ interface StateBannerProps {
1602
1592
  className?: string;
1603
1593
  /** Render the title, badge, and detail as unanimated loading skeletons, keeping the icon and tone. */
1604
1594
  placeholder?: boolean;
1595
+ /** Native named-slot assignment when composed inside a web component. */
1596
+ slot?: string;
1605
1597
  }
1606
- declare function StateBanner({ title, detail, badge, icon, action, tone, urgency, className, placeholder, }: StateBannerProps): SafeHtml;
1598
+ declare function StateBanner({ title, detail, badge, icon, action, tone, urgency, className, placeholder, slot, }: StateBannerProps): SafeHtml;
1607
1599
 
1608
1600
  export { StateBanner, type StateBannerProps, type StateBannerTone, type StateBannerUrgency };
1609
1601
  ```
@@ -1621,8 +1613,10 @@ interface EmptyStateProps {
1621
1613
  action?: KerfUiContent;
1622
1614
  busy?: boolean;
1623
1615
  className?: string;
1616
+ /** Native named-slot assignment when composed inside a web component. */
1617
+ slot?: string;
1624
1618
  }
1625
- declare function EmptyState({ title, detail, icon, action, busy, className, }: EmptyStateProps): SafeHtml;
1619
+ declare function EmptyState({ title, detail, icon, action, busy, className, slot, }: EmptyStateProps): SafeHtml;
1626
1620
 
1627
1621
  export { EmptyState, type EmptyStateProps };
1628
1622
  ```
@@ -1635,9 +1629,11 @@ import * as kerfjs from 'kerfjs';
1635
1629
  interface LoadingSpinnerProps {
1636
1630
  className?: string;
1637
1631
  label?: string;
1632
+ /** Native named-slot assignment when composed inside a web component. */
1633
+ slot?: string;
1638
1634
  }
1639
1635
  /** Stable viewBox-centered progress ring based on svg-spinners' MIT-licensed 180-ring. */
1640
- declare function LoadingSpinner({ className, label }: LoadingSpinnerProps): kerfjs.SafeHtml;
1636
+ declare function LoadingSpinner({ className, label, slot, }: LoadingSpinnerProps): kerfjs.SafeHtml;
1641
1637
 
1642
1638
  export { LoadingSpinner, type LoadingSpinnerProps };
1643
1639
  ```
@@ -1660,6 +1656,8 @@ interface SkeletonProps {
1660
1656
  /** Accessible label. Omit to keep the block decorative (`aria-hidden`). */
1661
1657
  label?: string;
1662
1658
  className?: string;
1659
+ /** Native named-slot assignment when composed inside a web component. */
1660
+ slot?: string;
1663
1661
  }
1664
1662
  /**
1665
1663
  * A subtle, deliberately **unanimated** loading placeholder block. Use it for a
@@ -1667,7 +1665,7 @@ interface SkeletonProps {
1667
1665
  * `placeholder` prop. Decorative by default (`aria-hidden`); pass `label` to
1668
1666
  * announce it. Sizes to its slot unless `width`/`height` are given.
1669
1667
  */
1670
- declare function Skeleton({ width, height, radius, lines, label, className, }: SkeletonProps): kerfjs.SafeHtml;
1668
+ declare function Skeleton({ width, height, radius, lines, label, className, slot, }: SkeletonProps): kerfjs.SafeHtml;
1671
1669
 
1672
1670
  export { Skeleton, type SkeletonProps };
1673
1671
  ```
@@ -1686,13 +1684,15 @@ interface SunkenPanelProps {
1686
1684
  /** Corner shape: a rounded rectangle (default) or square corners. */
1687
1685
  shape?: SunkenPanelShape;
1688
1686
  className?: string;
1687
+ /** Native named-slot assignment when composed inside a web component. */
1688
+ slot?: string;
1689
1689
  }
1690
1690
  /**
1691
1691
  * A lowered application surface with one compact inset and a vertical content
1692
1692
  * stack. The panel owns its background and padding; children own their own
1693
1693
  * borders and internal geometry.
1694
1694
  */
1695
- declare function SunkenPanel({ children, ariaLabel, shape, className, }: SunkenPanelProps): kerfjs.SafeHtml;
1695
+ declare function SunkenPanel({ children, ariaLabel, shape, className, slot, }: SunkenPanelProps): kerfjs.SafeHtml;
1696
1696
 
1697
1697
  export { SunkenPanel, type SunkenPanelProps, type SunkenPanelShape };
1698
1698
  ```
@@ -1728,12 +1728,16 @@ interface TokenSearchFieldBaseProps {
1728
1728
  autofocus?: boolean;
1729
1729
  leading?: KerfUiContent;
1730
1730
  trailing?: KerfUiContent;
1731
+ /** Standalone field chrome or the inset visual layer of a configured toolbar group. */
1732
+ presentation?: 'standalone' | 'toolbar-group';
1731
1733
  editAction?: string;
1732
1734
  removeAction?: string;
1733
1735
  clearAction?: string;
1734
1736
  clearLabel?: string;
1735
1737
  className?: string;
1736
1738
  editorAttributes?: TokenSearchEditorAttributes;
1739
+ /** Native named-slot assignment when composed inside a web component. */
1740
+ slot?: string;
1737
1741
  }
1738
1742
  type TokenSearchCollapsibleProps = {
1739
1743
  /** Allow an empty field to render as one iconic action. */
@@ -1753,7 +1757,7 @@ interface TokenSearchFieldValue {
1753
1757
  query: string;
1754
1758
  tokens: TokenSearchToken[];
1755
1759
  }
1756
- declare function TokenSearchField({ id, label, query, tokens, placeholder, tokenPlaceholder, disabled, autofocus, collapsible, expanded, expandAction, expandLabel, leading, trailing, editAction, removeAction, clearAction, clearLabel, className, editorAttributes, }: TokenSearchFieldProps): kerfjs.SafeHtml;
1760
+ declare function TokenSearchField({ id, label, query, tokens, placeholder, tokenPlaceholder, disabled, autofocus, collapsible, expanded, expandAction, expandLabel, leading, trailing, presentation, editAction, removeAction, clearAction, clearLabel, className, editorAttributes, slot, }: TokenSearchFieldProps): kerfjs.SafeHtml;
1757
1761
  /** Read editable text and ordered token offsets from a rendered TokenSearchField editor. */
1758
1762
  declare function readTokenSearchField(editor: HTMLElement, knownTokens?: readonly TokenSearchToken[]): TokenSearchFieldValue;
1759
1763
  /** Focus an editor and place its caret at a text offset, skipping atomic token chips. */
@@ -1955,6 +1959,35 @@ declare function delegateActions<E extends Element = Element>(root: HTMLElement,
1955
1959
  export { type ActionHandler, type DelegateActionsOptions, action, delegateActions };
1956
1960
  ```
1957
1961
 
1962
+ ## `@kerfjs/ui/badge`
1963
+
1964
+ ```ts
1965
+ import { SafeHtml } from 'kerfjs';
1966
+
1967
+ type BadgeTone = 'neutral' | 'brand' | 'pop' | 'success' | 'warning' | 'danger';
1968
+ type BadgeAppearance = 'quiet' | 'solid' | 'outline';
1969
+ type BadgeShape = 'pill' | 'rounded';
1970
+ type BadgeSize = 'compact' | 'default';
1971
+ interface BadgeProps {
1972
+ children: SafeHtml | string | number;
1973
+ tone?: BadgeTone;
1974
+ appearance?: BadgeAppearance;
1975
+ shape?: BadgeShape;
1976
+ size?: BadgeSize;
1977
+ /** Optional accessible name when the visible content is abbreviated. */
1978
+ label?: string;
1979
+ /** Hide a repeated visual badge from assistive technology. */
1980
+ ariaHidden?: boolean;
1981
+ className?: string;
1982
+ /** Native named-slot assignment when composed inside a web component. */
1983
+ slot?: string;
1984
+ }
1985
+ /** Compact, non-interactive metadata whose tone, emphasis, and shape are configured by props. */
1986
+ declare function Badge({ children, tone, appearance, shape, size, label, ariaHidden, className, slot, }: BadgeProps): SafeHtml;
1987
+
1988
+ export { Badge, type BadgeAppearance, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeTone };
1989
+ ```
1990
+
1958
1991
  ## `@kerfjs/ui/lucide-icon`
1959
1992
 
1960
1993
  ```ts
@@ -1967,9 +2000,11 @@ interface LucideIconProps {
1967
2000
  name: string;
1968
2001
  className?: string;
1969
2002
  label?: string;
2003
+ /** Native named-slot assignment when composed inside a web component. */
2004
+ slot?: string;
1970
2005
  }
1971
2006
  /** Render a Lucide-compatible icon node without copying icon SVG strings. */
1972
- declare function LucideIcon({ icon, name, className, label }: LucideIconProps): kerfjs.SafeHtml;
2007
+ declare function LucideIcon({ icon, name, className, label, slot, }: LucideIconProps): kerfjs.SafeHtml;
1973
2008
 
1974
2009
  export { LucideIcon, type LucideIconProps, type LucideNode };
1975
2010
  ```
@@ -1990,17 +2025,21 @@ interface DialogSurfaceProps {
1990
2025
  bodyInset?: SurfaceInset;
1991
2026
  footerInset?: SurfaceInset;
1992
2027
  className?: string;
2028
+ /** Native named-slot assignment when composed inside a web component. */
2029
+ slot?: string;
1993
2030
  }
1994
2031
  /** Configure recurring Web Awesome dialog geometry without consumer ::part() CSS. */
1995
- declare function DialogSurface({ children, size, presentation, bodyInset, footerInset, className, }: DialogSurfaceProps): kerfjs.SafeHtml;
2032
+ declare function DialogSurface({ children, size, presentation, bodyInset, footerInset, className, slot, }: DialogSurfaceProps): kerfjs.SafeHtml;
1996
2033
  type PopupSurfaceInset = 'standard' | 'compact' | 'list-zero';
1997
2034
  interface PopupSurfaceProps {
1998
2035
  children: KerfUiContent;
1999
2036
  inset?: PopupSurfaceInset;
2000
2037
  className?: string;
2038
+ /** Native named-slot assignment when composed inside a web component. */
2039
+ slot?: string;
2001
2040
  }
2002
2041
  /** Configure recurring Web Awesome dropdown-menu geometry without consumer ::part() CSS. */
2003
- declare function PopupSurface({ children, inset, className, }: PopupSurfaceProps): kerfjs.SafeHtml;
2042
+ declare function PopupSurface({ children, inset, className, slot, }: PopupSurfaceProps): kerfjs.SafeHtml;
2004
2043
 
2005
2044
  export { DialogSurface, type DialogSurfacePresentation, type DialogSurfaceProps, type DialogSurfaceSize, PopupSurface, type PopupSurfaceInset, type PopupSurfaceProps, type SurfaceInset };
2006
2045
  ```
@@ -2016,6 +2055,7 @@ type TextVariant = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p';
2016
2055
  type TextTone = 'default' | 'quiet' | 'danger';
2017
2056
  type TextSize = 'default' | 'compact';
2018
2057
  type TextFont = 'default' | 'monospace';
2058
+ type TextBorder = 'transparent' | 'none';
2019
2059
  type TextContent = KerfUiContent | string | number | readonly TextContent[];
2020
2060
  type TextProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
2021
2061
  /** Native heading or paragraph element to render. Defaults to `p`. */
@@ -2026,6 +2066,8 @@ type TextProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
2026
2066
  size?: TextSize;
2027
2067
  /** Font family independent of the native semantic element. */
2028
2068
  font?: TextFont;
2069
+ /** Transparent alignment border or no border when embedded in owner chrome. */
2070
+ border?: TextBorder;
2029
2071
  children: TextContent;
2030
2072
  class?: string;
2031
2073
  className?: string;
@@ -2034,9 +2076,9 @@ type TextProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
2034
2076
  * Semantic heading or paragraph text with the standard content-item padding.
2035
2077
  * All ordinary native heading/paragraph attributes pass through to the element.
2036
2078
  */
2037
- declare function Text({ variant: Variant, tone, size, font, children, class: classValue, className, ...attributes }: TextProps): kerfjs.SafeHtml;
2079
+ declare function Text({ variant: Variant, tone, size, font, border, children, class: classValue, className, ...attributes }: TextProps): kerfjs.SafeHtml;
2038
2080
 
2039
- export { Text, type TextContent, type TextFont, type TextProps, type TextSize, type TextTone, type TextVariant };
2081
+ export { Text, type TextBorder, type TextContent, type TextFont, type TextProps, type TextSize, type TextTone, type TextVariant };
2040
2082
  ```
2041
2083
 
2042
2084
  ## `@kerfjs/ui/row`
@@ -2065,9 +2107,11 @@ interface RowProps {
2065
2107
  /** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */
2066
2108
  controlInsets?: Sides;
2067
2109
  className?: string;
2110
+ /** Native named-slot assignment when composed inside a web component. */
2111
+ slot?: string;
2068
2112
  }
2069
2113
  /** A horizontal flex row with explicit physical-axis alignment and spacing. */
2070
- declare function Row({ children, hAlign, vAlign, gap, flex, wrap, textInsets, controlInsets, className, }: RowProps): kerfjs.SafeHtml;
2114
+ declare function Row({ children, hAlign, vAlign, gap, flex, wrap, textInsets, controlInsets, className, slot, }: RowProps): kerfjs.SafeHtml;
2071
2115
 
2072
2116
  export { CssFlex, CssFlexKeyword, CssLength, HorizontalAlignment, Row, type RowProps, Sides, UiSpaceName, VerticalAlignment };
2073
2117
  ```
@@ -2088,9 +2132,11 @@ interface GridProps {
2088
2132
  /** Allow this grid to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */
2089
2133
  flex?: boolean | CssFlexKeyword | CssFlex;
2090
2134
  className?: string;
2135
+ /** Native named-slot assignment when composed inside a web component. */
2136
+ slot?: string;
2091
2137
  }
2092
2138
  /** A fixed-count grid whose columns share the available width equally. */
2093
- declare function Grid({ children, columns, gap, flex, className, }: GridProps): kerfjs.SafeHtml;
2139
+ declare function Grid({ children, columns, gap, flex, className, slot, }: GridProps): kerfjs.SafeHtml;
2094
2140
 
2095
2141
  export { CssFlex, CssFlexKeyword, CssLength, Grid, type GridProps, UiSpaceName };
2096
2142
  ```
@@ -2109,9 +2155,11 @@ interface SpacerProps {
2109
2155
  /** A named UI spacing token or typed physical height. */
2110
2156
  height?: UiSpaceName | CssLength;
2111
2157
  className?: string;
2158
+ /** Native named-slot assignment when composed inside a web component. */
2159
+ slot?: string;
2112
2160
  }
2113
2161
  /** A decorative fixed-size or flexible gap for Row, List, and other flex layouts. */
2114
- declare function Spacer({ flex, width, height, className, }: SpacerProps): kerfjs.SafeHtml;
2162
+ declare function Spacer({ flex, width, height, className, slot, }: SpacerProps): kerfjs.SafeHtml;
2115
2163
 
2116
2164
  export { CssLength, Spacer, type SpacerProps, UiSpaceName };
2117
2165
  ```