@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,3 +1,3 @@
1
- export { ListInsetText } from './chunk-EYALJQQD.js';
1
+ export { ListInsetText } from './chunk-ZK5EGVFP.js';
2
2
 
3
3
  //# sourceMappingURL=list-inset-text.js.map
@@ -39,7 +39,9 @@ interface ListItemProps {
39
39
  /** Render the row as an unanimated loading skeleton, disabling its action. */
40
40
  placeholder?: boolean;
41
41
  rootAttributes?: ListItemRootAttributes;
42
+ /** Native named-slot assignment when composed inside a web component. */
43
+ slot?: string;
42
44
  }
43
- 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;
45
+ 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;
44
46
 
45
47
  export { ListItem, type ListItemProps };
package/dist/list-item.js CHANGED
@@ -1,4 +1,4 @@
1
- export { ListItem } from './chunk-I45QO2IZ.js';
1
+ export { ListItem } from './chunk-ZSYLBVWG.js';
2
2
 
3
3
 
4
4
 
package/dist/list.d.ts CHANGED
@@ -24,8 +24,10 @@ interface ListProps {
24
24
  /** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */
25
25
  controlInsets?: Sides;
26
26
  className?: string;
27
+ /** Native named-slot assignment when composed inside a web component. */
28
+ slot?: string;
27
29
  }
28
30
  /** A stretch-aligned vertical stack with optional gap, flex, scroll, and dividers. */
29
- declare function List({ children, gap, flex, hAlign, vAlign, scrollable, dividerSides, textInsets, controlInsets, className, }: ListProps): kerfjs.SafeHtml;
31
+ declare function List({ children, gap, flex, hAlign, vAlign, scrollable, dividerSides, textInsets, controlInsets, className, slot, }: ListProps): kerfjs.SafeHtml;
30
32
 
31
33
  export { CssFlex, CssFlexKeyword, CssLength, DividerSides, HorizontalAlignment, List, type ListProps, ListVerticalAlignment, Sides, UiSpaceName };
package/dist/list.js CHANGED
@@ -1,4 +1,4 @@
1
- export { List } from './chunk-WVLMZ5SG.js';
1
+ export { List } from './chunk-UMGY5JSP.js';
2
2
 
3
3
 
4
4
 
@@ -3,8 +3,10 @@ import * as kerfjs from 'kerfjs';
3
3
  interface LoadingSpinnerProps {
4
4
  className?: string;
5
5
  label?: string;
6
+ /** Native named-slot assignment when composed inside a web component. */
7
+ slot?: string;
6
8
  }
7
9
  /** Stable viewBox-centered progress ring based on svg-spinners' MIT-licensed 180-ring. */
8
- declare function LoadingSpinner({ className, label }: LoadingSpinnerProps): kerfjs.SafeHtml;
10
+ declare function LoadingSpinner({ className, label, slot, }: LoadingSpinnerProps): kerfjs.SafeHtml;
9
11
 
10
12
  export { LoadingSpinner, type LoadingSpinnerProps };
@@ -1,3 +1,3 @@
1
- export { LoadingSpinner } from './chunk-6WTETUZ6.js';
1
+ export { LoadingSpinner } from './chunk-ZLWQZUGF.js';
2
2
 
3
3
  //# sourceMappingURL=loading-spinner.js.map
@@ -7,8 +7,10 @@ interface LucideIconProps {
7
7
  name: string;
8
8
  className?: string;
9
9
  label?: string;
10
+ /** Native named-slot assignment when composed inside a web component. */
11
+ slot?: string;
10
12
  }
11
13
  /** Render a Lucide-compatible icon node without copying icon SVG strings. */
12
- declare function LucideIcon({ icon, name, className, label }: LucideIconProps): kerfjs.SafeHtml;
14
+ declare function LucideIcon({ icon, name, className, label, slot, }: LucideIconProps): kerfjs.SafeHtml;
13
15
 
14
16
  export { LucideIcon, type LucideIconProps, type LucideNode };
@@ -1,3 +1,3 @@
1
- export { LucideIcon } from './chunk-W2FK7ZNY.js';
1
+ export { LucideIcon } from './chunk-4R777DUZ.js';
2
2
 
3
3
  //# sourceMappingURL=lucide-icon.js.map
@@ -29,6 +29,8 @@ interface NavStackProps {
29
29
  /** Optional persistent bottom toolbar used when the active view does not provide one. */
30
30
  bottomToolbar?: KerfUiContent;
31
31
  className?: string;
32
+ /** Native named-slot assignment when composed inside a web component. */
33
+ slot?: string;
32
34
  }
33
35
  /**
34
36
  * A navigation stack (iOS-style push/pop). Renders every entry stacked, the last
@@ -36,6 +38,6 @@ interface NavStackProps {
36
38
  * cross-fades the chrome across a change. A single-pane layout is a `NavStack`
37
39
  * with one entry. See `docs/23-app-layouts.md` §3.1.
38
40
  */
39
- declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className, }: NavStackProps): kerfjs.SafeHtml;
41
+ declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className, slot, }: NavStackProps): kerfjs.SafeHtml;
40
42
 
41
43
  export { NavStack, type NavStackProps, type NavStackView };
package/dist/nav-stack.js CHANGED
@@ -1,4 +1,4 @@
1
- export { NavStack } from './chunk-AQFWBG23.js';
1
+ export { NavStack } from './chunk-DARTMI5Z.js';
2
2
 
3
3
 
4
4
 
package/dist/pane.d.ts CHANGED
@@ -38,6 +38,8 @@ interface PaneProps {
38
38
  footerClassName?: string;
39
39
  /** Safe `data-*` metadata; Pane-owned structural attributes remain protected. */
40
40
  rootAttributes?: PaneRootAttributes;
41
+ /** Native named-slot assignment when composed inside a web component. */
42
+ slot?: string;
41
43
  }
42
44
  /**
43
45
  * An unpadded application column with optional fixed header/footer slots and one
@@ -45,6 +47,6 @@ interface PaneProps {
45
47
  * each logical edge, so the same component works as a sidebar, main area,
46
48
  * inspector, or dialog column.
47
49
  */
48
- declare function Pane({ header, children, footer, element, contentElement, separators, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, }: PaneProps): kerfjs.SafeHtml;
50
+ declare function Pane({ header, children, footer, element, contentElement, separators, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
49
51
 
50
52
  export { Pane, type PaneContentElement, type PaneElement, type PaneProps, type PaneSeparatorSide };
package/dist/pane.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Pane } from './chunk-I4V3UDSA.js';
1
+ export { Pane } from './chunk-V6RZWDII.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=pane.js.map
@@ -8,6 +8,7 @@ type ResizableRegionCollapseMotion = 'none' | 'slide' | 'fade-slide';
8
8
  type ResizableRegionContentOverflow = 'clip' | 'auto' | 'visible';
9
9
  type ResizableRegionPresentation = 'inline' | 'overlay' | 'hidden';
10
10
  type ResizableRegionRestorePosition = 'bottom-start' | 'bottom-end';
11
+ type ResizableRegionResponsiveFillAt = 'compact' | 'narrow';
11
12
  interface ResizableRegionProps {
12
13
  id: string;
13
14
  label: string;
@@ -30,12 +31,14 @@ interface ResizableRegionProps {
30
31
  restoreControl?: SafeHtml;
31
32
  /** Safe-area-aware viewport corner for `restoreControl`. */
32
33
  restorePosition?: ResizableRegionRestorePosition;
34
+ /** Fill the available inline track and hide the separator below a container breakpoint. */
35
+ responsiveFillAt?: ResizableRegionResponsiveFillAt;
33
36
  /** Decorative dormant content for the separator handle. Must not contain interactive descendants. */
34
37
  handleIcon?: SafeHtml;
35
38
  children: KerfUiContent;
36
39
  }
37
40
  declare const clampRegionSize: (size: number, min: number, max: number) => number;
38
41
  declare const resizeRegionFromPointer: (startSize: number, delta: number, edge: ResizableRegionEdge) => number;
39
- declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, separator, collapseMotion, contentOverflow, presentation, restoreControl, restorePosition, handleIcon, children, }: ResizableRegionProps): SafeHtml;
42
+ declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, separator, collapseMotion, contentOverflow, presentation, restoreControl, restorePosition, responsiveFillAt, handleIcon, children, }: ResizableRegionProps): SafeHtml;
40
43
 
41
- export { ResizableRegion, type ResizableRegionAxis, type ResizableRegionCollapseMotion, type ResizableRegionContentOverflow, type ResizableRegionEdge, type ResizableRegionPresentation, type ResizableRegionProps, type ResizableRegionRestorePosition, type ResizableRegionSeparator, clampRegionSize, resizeRegionFromPointer };
44
+ export { ResizableRegion, type ResizableRegionAxis, type ResizableRegionCollapseMotion, type ResizableRegionContentOverflow, type ResizableRegionEdge, type ResizableRegionPresentation, type ResizableRegionProps, type ResizableRegionResponsiveFillAt, type ResizableRegionRestorePosition, type ResizableRegionSeparator, clampRegionSize, resizeRegionFromPointer };
@@ -1,3 +1,3 @@
1
- export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-CAB6NQ2T.js';
1
+ export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-VOCPXGQN.js';
2
2
 
3
3
  //# sourceMappingURL=resizable-region.js.map
package/dist/row.d.ts CHANGED
@@ -21,8 +21,10 @@ interface RowProps {
21
21
  /** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */
22
22
  controlInsets?: Sides;
23
23
  className?: string;
24
+ /** Native named-slot assignment when composed inside a web component. */
25
+ slot?: string;
24
26
  }
25
27
  /** A horizontal flex row with explicit physical-axis alignment and spacing. */
26
- declare function Row({ children, hAlign, vAlign, gap, flex, wrap, textInsets, controlInsets, className, }: RowProps): kerfjs.SafeHtml;
28
+ declare function Row({ children, hAlign, vAlign, gap, flex, wrap, textInsets, controlInsets, className, slot, }: RowProps): kerfjs.SafeHtml;
27
29
 
28
30
  export { CssFlex, CssFlexKeyword, CssLength, HorizontalAlignment, Row, type RowProps, Sides, UiSpaceName, VerticalAlignment };
package/dist/row.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Row } from './chunk-OGNE3OFT.js';
1
+ export { Row } from './chunk-AQSKJ6U6.js';
2
2
 
3
3
 
4
4
 
@@ -25,7 +25,9 @@ interface SegmentedControlProps<Value extends string = string> {
25
25
  className?: string;
26
26
  /** Render as an unanimated loading skeleton, disabling every segment. */
27
27
  placeholder?: boolean;
28
+ /** Native named-slot assignment when composed inside a web component. */
29
+ slot?: string;
28
30
  }
29
- declare function SegmentedControl<Value extends string>({ id, label, value, choices, action, appearance, shape, size, layout, className, placeholder, }: SegmentedControlProps<Value>): kerfjs.SafeHtml;
31
+ declare function SegmentedControl<Value extends string>({ id, label, value, choices, action, appearance, shape, size, layout, className, placeholder, slot, }: SegmentedControlProps<Value>): kerfjs.SafeHtml;
30
32
 
31
33
  export { SegmentedControl, type SegmentedControlAppearance, type SegmentedControlChoice, type SegmentedControlLayout, type SegmentedControlProps, type SegmentedControlShape, type SegmentedControlSize };
@@ -1,4 +1,4 @@
1
- export { SegmentedControl } from './chunk-E34TE2ZI.js';
1
+ export { SegmentedControl } from './chunk-S6ZTTTV7.js';
2
2
 
3
3
 
4
4
 
package/dist/select.d.ts CHANGED
@@ -47,8 +47,10 @@ interface SelectBaseProps<Value extends string = string> {
47
47
  focusRingOwner?: SelectFocusRingOwner;
48
48
  /** Maximum closed-control label width in CSS pixels before ellipsis. */
49
49
  labelMaxWidth?: number;
50
+ /** Native named-slot assignment when composed inside a web component. */
51
+ slot?: string;
50
52
  }
51
53
  type SelectProps<Value extends string = string> = SelectBaseProps<Value> & SelectAccessibleName;
52
- 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;
54
+ 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;
53
55
 
54
56
  export { Select, type SelectChoice, type SelectFocusRingOwner, type SelectPresentation, type SelectProps, type SelectSelectedPresentation, type SelectSize };
package/dist/select.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Select } from './chunk-CK6P5AUK.js';
1
+ export { Select } from './chunk-KKNK3JUT.js';
2
2
 
3
3
 
4
4
 
@@ -13,6 +13,8 @@ interface SkeletonProps {
13
13
  /** Accessible label. Omit to keep the block decorative (`aria-hidden`). */
14
14
  label?: string;
15
15
  className?: string;
16
+ /** Native named-slot assignment when composed inside a web component. */
17
+ slot?: string;
16
18
  }
17
19
  /**
18
20
  * A subtle, deliberately **unanimated** loading placeholder block. Use it for a
@@ -20,6 +22,6 @@ interface SkeletonProps {
20
22
  * `placeholder` prop. Decorative by default (`aria-hidden`); pass `label` to
21
23
  * announce it. Sizes to its slot unless `width`/`height` are given.
22
24
  */
23
- declare function Skeleton({ width, height, radius, lines, label, className, }: SkeletonProps): kerfjs.SafeHtml;
25
+ declare function Skeleton({ width, height, radius, lines, label, className, slot, }: SkeletonProps): kerfjs.SafeHtml;
24
26
 
25
27
  export { Skeleton, type SkeletonProps };
package/dist/skeleton.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Skeleton } from './chunk-T7DOWS6T.js';
1
+ export { Skeleton } from './chunk-54HM36IQ.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=skeleton.js.map
package/dist/spacer.d.ts CHANGED
@@ -9,8 +9,10 @@ interface SpacerProps {
9
9
  /** A named UI spacing token or typed physical height. */
10
10
  height?: UiSpaceName | CssLength;
11
11
  className?: string;
12
+ /** Native named-slot assignment when composed inside a web component. */
13
+ slot?: string;
12
14
  }
13
15
  /** A decorative fixed-size or flexible gap for Row, List, and other flex layouts. */
14
- declare function Spacer({ flex, width, height, className, }: SpacerProps): kerfjs.SafeHtml;
16
+ declare function Spacer({ flex, width, height, className, slot, }: SpacerProps): kerfjs.SafeHtml;
15
17
 
16
18
  export { CssLength, Spacer, type SpacerProps, UiSpaceName };
package/dist/spacer.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Spacer } from './chunk-OGTJNHRG.js';
1
+ export { Spacer } from './chunk-2WMSE4MK.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=spacer.js.map
@@ -30,6 +30,8 @@ interface SplitViewProps {
30
30
  /** A resizable separator on roomy classes (min/max px). Omit for a fixed split. */
31
31
  resizable?: SplitViewResizable;
32
32
  className?: string;
33
+ /** Native named-slot assignment when composed inside a web component. */
34
+ slot?: string;
33
35
  }
34
36
  /**
35
37
  * A list-detail split. On roomy classes it shows both panes side
@@ -38,6 +40,6 @@ interface SplitViewProps {
38
40
  * resizable wiring with `wireResizableRegions` and the compact back with
39
41
  * `wireNavStack`.
40
42
  */
41
- declare function SplitView({ id, label, list, detail, compact, detailActive, listTitle, detailTitle, backLabel, resizable, className, }: SplitViewProps): kerfjs.SafeHtml;
43
+ declare function SplitView({ id, label, list, detail, compact, detailActive, listTitle, detailTitle, backLabel, resizable, className, slot, }: SplitViewProps): kerfjs.SafeHtml;
42
44
 
43
45
  export { SplitView, type SplitViewProps, type SplitViewResizable };
@@ -1,6 +1,6 @@
1
- import { NavStack } from './chunk-AQFWBG23.js';
1
+ import { NavStack } from './chunk-DARTMI5Z.js';
2
+ import { ResizableRegion } from './chunk-VOCPXGQN.js';
2
3
 
3
- import { ResizableRegion } from './chunk-CAB6NQ2T.js';
4
4
 
5
5
 
6
6
  import { jsx, jsxs } from 'kerfjs/jsx-runtime';
@@ -16,7 +16,8 @@ function SplitView({
16
16
  detailTitle = "",
17
17
  backLabel = "Back",
18
18
  resizable,
19
- className = ""
19
+ className = "",
20
+ slot
20
21
  }) {
21
22
  if (compact) {
22
23
  const views = detailActive ? [
@@ -30,6 +31,7 @@ function SplitView({
30
31
  id,
31
32
  "data-component": "split-view",
32
33
  "data-split-mode": "compact",
34
+ slot,
33
35
  children: /* @__PURE__ */ jsx(
34
36
  NavStack,
35
37
  {
@@ -50,9 +52,25 @@ function SplitView({
50
52
  size: resizable.size,
51
53
  min: resizable.min,
52
54
  max: resizable.max,
53
- children: /* @__PURE__ */ jsx("div", { class: "kui-split-view__list kui-pane", "data-split-list": true, children: list })
55
+ children: /* @__PURE__ */ jsx(
56
+ "div",
57
+ {
58
+ class: "kui-split-view__list kui-pane",
59
+ "data-split-list": true,
60
+ "data-resizable": "true",
61
+ children: list
62
+ }
63
+ )
54
64
  }
55
- ) : /* @__PURE__ */ jsx("div", { class: "kui-split-view__list kui-pane", "data-split-list": true, children: list });
65
+ ) : /* @__PURE__ */ jsx(
66
+ "div",
67
+ {
68
+ class: "kui-split-view__list kui-pane",
69
+ "data-split-list": true,
70
+ "data-resizable": "false",
71
+ children: list
72
+ }
73
+ );
56
74
  return /* @__PURE__ */ jsxs(
57
75
  "div",
58
76
  {
@@ -61,6 +79,7 @@ function SplitView({
61
79
  "data-component": "split-view",
62
80
  "data-split-mode": "split",
63
81
  "aria-label": label,
82
+ slot,
64
83
  children: [
65
84
  listPane,
66
85
  /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/split-view.tsx"],"names":[],"mappings":";;;;;;;AA2CO,SAAS,SAAA,CAAU;AAAA,EACxB,EAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,YAAA,GAAe,KAAA;AAAA,EACf,SAAA,GAAY,EAAA;AAAA,EACZ,WAAA,GAAc,EAAA;AAAA,EACd,SAAA,GAAY,MAAA;AAAA,EACZ,SAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAmB;AACjB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,QAAQ,YAAA,GACV;AAAA,MACE,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,SAAS,IAAA,EAAK;AAAA,MAC/C,EAAE,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,SAAS,MAAA;AAAO,KACvD,GACA,CAAC,EAAE,GAAA,EAAK,QAAQ,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,CAAA;AACrD,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,CAAA,uCAAA,EAA0C,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,QAClE,EAAA;AAAA,QACA,gBAAA,EAAe,YAAA;AAAA,QACf,iBAAA,EAAgB,SAAA;AAAA,QAEhB,QAAA,kBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,GAAG,EAAE,CAAA,MAAA,CAAA;AAAA,YACT,KAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AACA,EAAA,MAAM,WAAW,SAAA,mBACf,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,GAAG,EAAE,CAAA,KAAA,CAAA;AAAA,MACT,OAAO,SAAA,IAAa,MAAA;AAAA,MACpB,MAAM,SAAA,CAAU,IAAA;AAAA,MAChB,KAAK,SAAA,CAAU,GAAA;AAAA,MACf,KAAK,SAAA,CAAU,GAAA;AAAA,MAEf,8BAAC,KAAA,EAAA,EAAI,KAAA,EAAM,+BAAA,EAAgC,iBAAA,EAAe,MACvD,QAAA,EAAA,IAAA,EACH;AAAA;AAAA,sBAGF,GAAA,CAAC,KAAA,EAAA,EAAI,OAAM,+BAAA,EAAgC,iBAAA,EAAe,MACvD,QAAA,EAAA,IAAA,EACH,CAAA;AAEF,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,eAAA,EAAkB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC1C,EAAA;AAAA,MACA,gBAAA,EAAe,YAAA;AAAA,MACf,iBAAA,EAAgB,OAAA;AAAA,MAChB,YAAA,EAAY,KAAA;AAAA,MAEX,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,iCAAA;AAAA,YACN,mBAAA,EAAiB,IAAA;AAAA,YACjB,cAAY,WAAA,IAAe,MAAA;AAAA,YAE1B,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GACF;AAEJ","file":"split-view.js","sourcesContent":["import { NavStack } from './nav-stack.js';\nimport { ResizableRegion } from './resizable-region.js';\nimport type { KerfUiContent } from './semantic-content.js';\n\nexport interface SplitViewResizable {\n size: number;\n min: number;\n max: number;\n}\n\nexport interface SplitViewProps {\n id: string;\n label: string;\n /** The list (primary) pane. */\n list: KerfUiContent;\n /** The detail (secondary) pane. */\n detail: KerfUiContent;\n /**\n * Compact (\"one pane at a time\") classes — a handset or portrait tablet.\n * Derive from `deviceClass().value.compact`. When true the split collapses to\n * a `NavStack`: the list is the root and the detail is pushed over it.\n */\n compact?: boolean;\n /** In compact mode, whether the detail is currently pushed over the list. */\n detailActive?: boolean;\n /** Title/label for the list (compact NavStack root + region label). */\n listTitle?: string;\n /** Title/label for the detail (compact NavStack pushed view + region label). */\n detailTitle?: string;\n /** Back label for the compact NavStack (default \"Back\"). */\n backLabel?: string;\n /** A resizable separator on roomy classes (min/max px). Omit for a fixed split. */\n resizable?: SplitViewResizable;\n className?: string;\n}\n\n/**\n * A list-detail split. On roomy classes it shows both panes side\n * by side with an optional resizable separator; on compact classes it collapses\n * to a `NavStack` (list → detail). See `docs/23-app-layouts.md` §3.2. Compose the\n * resizable wiring with `wireResizableRegions` and the compact back with\n * `wireNavStack`.\n */\nexport function SplitView({\n id,\n label,\n list,\n detail,\n compact = false,\n detailActive = false,\n listTitle = '',\n detailTitle = '',\n backLabel = 'Back',\n resizable,\n className = '',\n}: SplitViewProps) {\n if (compact) {\n const views = detailActive\n ? [\n { key: 'list', title: listTitle, content: list },\n { key: 'detail', title: detailTitle, content: detail },\n ]\n : [{ key: 'list', title: listTitle, content: list }];\n return (\n <div\n class={`kui-split-view kui-split-view--compact ${className}`.trim()}\n id={id}\n data-component=\"split-view\"\n data-split-mode=\"compact\"\n >\n <NavStack\n id={`${id}-stack`}\n label={label}\n views={views}\n backLabel={backLabel}\n />\n </div>\n );\n }\n const listPane = resizable ? (\n <ResizableRegion\n id={`${id}-list`}\n label={listTitle || 'List'}\n size={resizable.size}\n min={resizable.min}\n max={resizable.max}\n >\n <div class=\"kui-split-view__list kui-pane\" data-split-list>\n {list}\n </div>\n </ResizableRegion>\n ) : (\n <div class=\"kui-split-view__list kui-pane\" data-split-list>\n {list}\n </div>\n );\n return (\n <div\n class={`kui-split-view ${className}`.trim()}\n id={id}\n data-component=\"split-view\"\n data-split-mode=\"split\"\n aria-label={label}\n >\n {listPane}\n <div\n class=\"kui-split-view__detail kui-pane\"\n data-split-detail\n aria-label={detailTitle || undefined}\n >\n {detail}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/split-view.tsx"],"names":[],"mappings":";;;;;;;AA6CO,SAAS,SAAA,CAAU;AAAA,EACxB,EAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,YAAA,GAAe,KAAA;AAAA,EACf,SAAA,GAAY,EAAA;AAAA,EACZ,WAAA,GAAc,EAAA;AAAA,EACd,SAAA,GAAY,MAAA;AAAA,EACZ,SAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ;AACF,CAAA,EAAmB;AACjB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,QAAQ,YAAA,GACV;AAAA,MACE,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,SAAS,IAAA,EAAK;AAAA,MAC/C,EAAE,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,SAAS,MAAA;AAAO,KACvD,GACA,CAAC,EAAE,GAAA,EAAK,QAAQ,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,CAAA;AACrD,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,CAAA,uCAAA,EAA0C,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,QAClE,EAAA;AAAA,QACA,gBAAA,EAAe,YAAA;AAAA,QACf,iBAAA,EAAgB,SAAA;AAAA,QAChB,IAAA;AAAA,QAEA,QAAA,kBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,GAAG,EAAE,CAAA,MAAA,CAAA;AAAA,YACT,KAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AACA,EAAA,MAAM,WAAW,SAAA,mBACf,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,GAAG,EAAE,CAAA,KAAA,CAAA;AAAA,MACT,OAAO,SAAA,IAAa,MAAA;AAAA,MACpB,MAAM,SAAA,CAAU,IAAA;AAAA,MAChB,KAAK,SAAA,CAAU,GAAA;AAAA,MACf,KAAK,SAAA,CAAU,GAAA;AAAA,MAEf,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,+BAAA;AAAA,UACN,iBAAA,EAAe,IAAA;AAAA,UACf,gBAAA,EAAe,MAAA;AAAA,UAEd,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,GACF,mBAEA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,+BAAA;AAAA,MACN,iBAAA,EAAe,IAAA;AAAA,MACf,gBAAA,EAAe,OAAA;AAAA,MAEd,QAAA,EAAA;AAAA;AAAA,GACH;AAEF,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,eAAA,EAAkB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC1C,EAAA;AAAA,MACA,gBAAA,EAAe,YAAA;AAAA,MACf,iBAAA,EAAgB,OAAA;AAAA,MAChB,YAAA,EAAY,KAAA;AAAA,MACZ,IAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,iCAAA;AAAA,YACN,mBAAA,EAAiB,IAAA;AAAA,YACjB,cAAY,WAAA,IAAe,MAAA;AAAA,YAE1B,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GACF;AAEJ","file":"split-view.js","sourcesContent":["import { NavStack } from './nav-stack.js';\nimport { ResizableRegion } from './resizable-region.js';\nimport type { KerfUiContent } from './semantic-content.js';\n\nexport interface SplitViewResizable {\n size: number;\n min: number;\n max: number;\n}\n\nexport interface SplitViewProps {\n id: string;\n label: string;\n /** The list (primary) pane. */\n list: KerfUiContent;\n /** The detail (secondary) pane. */\n detail: KerfUiContent;\n /**\n * Compact (\"one pane at a time\") classes — a handset or portrait tablet.\n * Derive from `deviceClass().value.compact`. When true the split collapses to\n * a `NavStack`: the list is the root and the detail is pushed over it.\n */\n compact?: boolean;\n /** In compact mode, whether the detail is currently pushed over the list. */\n detailActive?: boolean;\n /** Title/label for the list (compact NavStack root + region label). */\n listTitle?: string;\n /** Title/label for the detail (compact NavStack pushed view + region label). */\n detailTitle?: string;\n /** Back label for the compact NavStack (default \"Back\"). */\n backLabel?: string;\n /** A resizable separator on roomy classes (min/max px). Omit for a fixed split. */\n resizable?: SplitViewResizable;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/**\n * A list-detail split. On roomy classes it shows both panes side\n * by side with an optional resizable separator; on compact classes it collapses\n * to a `NavStack` (list → detail). See `docs/23-app-layouts.md` §3.2. Compose the\n * resizable wiring with `wireResizableRegions` and the compact back with\n * `wireNavStack`.\n */\nexport function SplitView({\n id,\n label,\n list,\n detail,\n compact = false,\n detailActive = false,\n listTitle = '',\n detailTitle = '',\n backLabel = 'Back',\n resizable,\n className = '',\n slot,\n}: SplitViewProps) {\n if (compact) {\n const views = detailActive\n ? [\n { key: 'list', title: listTitle, content: list },\n { key: 'detail', title: detailTitle, content: detail },\n ]\n : [{ key: 'list', title: listTitle, content: list }];\n return (\n <div\n class={`kui-split-view kui-split-view--compact ${className}`.trim()}\n id={id}\n data-component=\"split-view\"\n data-split-mode=\"compact\"\n slot={slot}\n >\n <NavStack\n id={`${id}-stack`}\n label={label}\n views={views}\n backLabel={backLabel}\n />\n </div>\n );\n }\n const listPane = resizable ? (\n <ResizableRegion\n id={`${id}-list`}\n label={listTitle || 'List'}\n size={resizable.size}\n min={resizable.min}\n max={resizable.max}\n >\n <div\n class=\"kui-split-view__list kui-pane\"\n data-split-list\n data-resizable=\"true\"\n >\n {list}\n </div>\n </ResizableRegion>\n ) : (\n <div\n class=\"kui-split-view__list kui-pane\"\n data-split-list\n data-resizable=\"false\"\n >\n {list}\n </div>\n );\n return (\n <div\n class={`kui-split-view ${className}`.trim()}\n id={id}\n data-component=\"split-view\"\n data-split-mode=\"split\"\n aria-label={label}\n slot={slot}\n >\n {listPane}\n <div\n class=\"kui-split-view__detail kui-pane\"\n data-split-detail\n aria-label={detailTitle || undefined}\n >\n {detail}\n </div>\n </div>\n );\n}\n"]}
@@ -15,7 +15,9 @@ interface StateBannerProps {
15
15
  className?: string;
16
16
  /** Render the title, badge, and detail as unanimated loading skeletons, keeping the icon and tone. */
17
17
  placeholder?: boolean;
18
+ /** Native named-slot assignment when composed inside a web component. */
19
+ slot?: string;
18
20
  }
19
- declare function StateBanner({ title, detail, badge, icon, action, tone, urgency, className, placeholder, }: StateBannerProps): SafeHtml;
21
+ declare function StateBanner({ title, detail, badge, icon, action, tone, urgency, className, placeholder, slot, }: StateBannerProps): SafeHtml;
20
22
 
21
23
  export { StateBanner, type StateBannerProps, type StateBannerTone, type StateBannerUrgency };
@@ -1,4 +1,5 @@
1
- export { StateBanner } from './chunk-UDHHKZWO.js';
1
+ export { StateBanner } from './chunk-3V75EQIP.js';
2
+
2
3
 
3
4
 
4
5
 
@@ -0,0 +1,86 @@
1
+ .kui-badge {
2
+ --_kui-badge-fill-quiet: var(--kui-color-neutral-fill-quiet);
3
+ --_kui-badge-fill-solid: var(--kui-color-neutral-on-normal);
4
+ --_kui-badge-border: var(--kui-color-neutral-border-normal);
5
+ --_kui-badge-on-quiet: var(--kui-color-neutral-on-quiet);
6
+ --_kui-badge-on-solid: var(--kui-color-surface);
7
+
8
+ display: inline-flex;
9
+ min-width: 0;
10
+ min-height: 1.5rem;
11
+ padding-inline: var(--kui-layout-item-padding, 0.5rem);
12
+ box-sizing: border-box;
13
+ border: 1px solid transparent;
14
+ border-radius: var(--kui-layout-pill-radius, calc(1px + 1.3125rem));
15
+ color: var(--_kui-badge-on-quiet);
16
+ background: var(--_kui-badge-fill-quiet);
17
+ align-items: center;
18
+ justify-content: center;
19
+ flex: none;
20
+ font-size: var(--kui-font-xs);
21
+ font-weight: 650;
22
+ line-height: 1;
23
+ white-space: nowrap;
24
+ }
25
+
26
+ .kui-badge[data-tone="brand"] {
27
+ --_kui-badge-fill-quiet: var(--kui-color-brand-fill-quiet);
28
+ --_kui-badge-fill-solid: var(--kui-color-brand-on-fill);
29
+ --_kui-badge-border: var(--kui-color-brand-border-normal);
30
+ --_kui-badge-on-quiet: var(--kui-color-brand-on-quiet);
31
+ --_kui-badge-on-solid: var(--kui-color-surface);
32
+ }
33
+
34
+ .kui-badge[data-tone="pop"] {
35
+ --_kui-badge-fill-quiet: var(--kui-color-pop-fill-quiet);
36
+ --_kui-badge-fill-solid: var(--kui-color-pop-on-fill);
37
+ --_kui-badge-border: var(--kui-color-pop-border-normal);
38
+ --_kui-badge-on-quiet: var(--kui-color-pop-on-quiet);
39
+ --_kui-badge-on-solid: var(--kui-color-surface);
40
+ }
41
+
42
+ .kui-badge[data-tone="success"] {
43
+ --_kui-badge-fill-quiet: var(--kui-color-success-fill-quiet);
44
+ --_kui-badge-fill-solid: var(--kui-color-success-on-fill);
45
+ --_kui-badge-border: var(--kui-color-success-border-normal);
46
+ --_kui-badge-on-quiet: var(--kui-color-success-on-quiet);
47
+ --_kui-badge-on-solid: var(--kui-color-surface);
48
+ }
49
+
50
+ .kui-badge[data-tone="warning"] {
51
+ --_kui-badge-fill-quiet: var(--kui-color-warning-fill-quiet);
52
+ --_kui-badge-fill-solid: var(--kui-color-warning-on-fill);
53
+ --_kui-badge-border: var(--kui-color-warning-border-normal);
54
+ --_kui-badge-on-quiet: var(--kui-color-warning-on-quiet);
55
+ --_kui-badge-on-solid: var(--kui-color-surface);
56
+ }
57
+
58
+ .kui-badge[data-tone="danger"] {
59
+ --_kui-badge-fill-quiet: var(--kui-color-danger-fill-quiet);
60
+ --_kui-badge-fill-solid: var(--kui-color-danger-on-quiet);
61
+ --_kui-badge-border: var(--kui-color-danger-border-normal);
62
+ --_kui-badge-on-quiet: var(--kui-color-danger-on-quiet);
63
+ --_kui-badge-on-solid: var(--kui-color-surface);
64
+ }
65
+
66
+ .kui-badge[data-appearance="solid"] {
67
+ color: var(--_kui-badge-on-solid);
68
+ background: var(--_kui-badge-fill-solid);
69
+ }
70
+
71
+ .kui-badge[data-appearance="outline"] {
72
+ border-color: var(--_kui-badge-border);
73
+ color: var(--_kui-badge-on-quiet);
74
+ background: transparent;
75
+ }
76
+
77
+ .kui-badge[data-shape="rounded"] {
78
+ border-radius: var(--kui-radius-s);
79
+ }
80
+
81
+ .kui-badge[data-size="compact"] {
82
+ min-width: 1.25rem;
83
+ min-height: 1.25rem;
84
+ padding-inline: 0.35rem;
85
+ font-size: var(--kui-font-2xs);
86
+ }
@@ -0,0 +1,35 @@
1
+ .kui-catalog__detail {
2
+ display: grid;
3
+ min-width: 0;
4
+ min-height: 0;
5
+ height: 100%;
6
+ grid-column: 2;
7
+ }
8
+
9
+ .kui-catalog__header {
10
+ border-block-end: 1px solid var(--kui-color-border);
11
+ background: var(--kui-color-surface);
12
+ }
13
+
14
+ .kui-catalog__description {
15
+ max-width: var(--kui-catalog-content-measure, 70rem);
16
+ margin-block: 0;
17
+ background: transparent;
18
+ }
19
+
20
+ /* css-ownership: allow-root kui-catalog__detail-preview -- CatalogDetail assigns this class to its Pane content scroll owner. */
21
+ .kui-catalog__detail-preview {
22
+ background-color: var(--kui-color-surface-lowered);
23
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%238e8e93' fill-opacity='.12' d='M0 0h12v12H0zM12 12h12v12H12z'/%3E%3C/svg%3E");
24
+ background-position: 0 0;
25
+ background-repeat: repeat;
26
+ background-size: 1.5rem 1.5rem;
27
+ }
28
+
29
+ @media (max-width: 52rem) {
30
+ .kui-catalog__detail {
31
+ height: auto;
32
+ min-height: auto;
33
+ grid-column: 1;
34
+ }
35
+ }
@@ -0,0 +1,6 @@
1
+ .kui-catalog-example-stack {
2
+ display: flex;
3
+ width: min(46rem, 100%);
4
+ flex-direction: column;
5
+ gap: 1rem;
6
+ }
@@ -0,0 +1,35 @@
1
+ .kui-catalog-example {
2
+ display: flex;
3
+ width: 100%;
4
+ min-width: 0;
5
+ max-width: 100%;
6
+ flex-direction: column;
7
+ align-items: flex-start;
8
+ gap: 0.5rem;
9
+ }
10
+
11
+ .kui-catalog-example__note {
12
+ margin: 0;
13
+ padding-block: var(--kui-layout-item-padding, 0.5rem);
14
+ padding-inline: calc(
15
+ var(--kui-layout-inline-margin, 0.5rem) +
16
+ var(--kui-layout-item-padding, 0.5rem)
17
+ );
18
+ box-sizing: border-box;
19
+ border: 1px solid transparent;
20
+ color: var(--kui-color-text-quiet);
21
+ font-size: var(--kui-font-xs);
22
+ }
23
+
24
+ /* The published inset lets the geometry overlay exclude this authoring aid. */
25
+ .kui-catalog-example[data-align="glyph"]
26
+ > :not([data-catalog-example-label]):not([data-catalog-example-note]) {
27
+ --kui-catalog-example-align: 1rem;
28
+ margin-inline-start: var(--kui-catalog-example-align);
29
+ }
30
+
31
+ .kui-catalog-example[data-align="inline-control"]
32
+ > :not([data-catalog-example-label]):not([data-catalog-example-note]) {
33
+ --kui-catalog-example-align: 0.5rem;
34
+ margin-inline-start: var(--kui-catalog-example-align);
35
+ }
@@ -0,0 +1,37 @@
1
+ .kui-catalog__footer {
2
+ border-block-start: 1px solid var(--kui-color-border);
3
+ background: color-mix(
4
+ in srgb,
5
+ var(--kui-color-surface-lowered) 72%,
6
+ var(--kui-color-surface)
7
+ );
8
+ }
9
+
10
+ .kui-catalog__status {
11
+ display: flex;
12
+ min-height: 1.625rem;
13
+ padding: 0.375rem 0.75rem 0;
14
+ color: var(--kui-color-text-quiet);
15
+ align-items: center;
16
+ justify-content: space-between;
17
+ gap: var(--kui-layout-control-gap);
18
+ font-size: var(--kui-font-xs);
19
+ }
20
+
21
+ .kui-catalog__related-heading {
22
+ display: block;
23
+ padding: 0.25rem var(--kui-wa-control-inset, 0.5rem) 0;
24
+ color: var(--kui-color-text-quiet);
25
+ font-size: var(--kui-font-xs);
26
+ font-weight: 600;
27
+ text-transform: uppercase;
28
+ letter-spacing: 0.04em;
29
+ }
30
+
31
+ @media (max-width: 52rem) {
32
+ .kui-catalog__status {
33
+ align-items: flex-start;
34
+ flex-direction: column;
35
+ gap: 0.25rem;
36
+ }
37
+ }
@@ -0,0 +1,38 @@
1
+ .kui-catalog__group--secondary {
2
+ margin-block-start: var(--kui-space-m);
3
+ padding-block-start: var(--kui-space-s);
4
+ border-block-start: 1px solid var(--kui-color-border-quiet);
5
+ }
6
+
7
+ .kui-catalog__secondary {
8
+ display: grid;
9
+ padding-block: var(--kui-space-xs);
10
+ gap: var(--kui-space-s);
11
+ }
12
+
13
+ .kui-catalog__secondary-group {
14
+ display: grid;
15
+ min-width: 0;
16
+ gap: var(--kui-space-2xs);
17
+ }
18
+
19
+ .kui-catalog__secondary-heading {
20
+ margin: 0 0.5rem;
21
+ padding: 0.1rem 0.55rem;
22
+ color: var(--kui-color-text-quiet);
23
+ font-size: var(--kui-font-2xs);
24
+ font-weight: 650;
25
+ letter-spacing: 0.04em;
26
+ text-transform: uppercase;
27
+ }
28
+
29
+ .kui-catalog__secondary-items {
30
+ min-width: 0;
31
+ }
32
+
33
+ @media (max-width: 52rem) {
34
+ .kui-catalog__group--secondary {
35
+ min-width: 0;
36
+ margin-block-start: 0;
37
+ }
38
+ }