@kerfjs/ui 5.0.0-beta.29 → 5.0.0-beta.30

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 (224) hide show
  1. package/README.md +43 -8
  2. package/ai/application-ui-diagnostic-ids-v1.json +5 -0
  3. package/ai/compile-time-contracts-v1.json +37 -0
  4. package/ai/compile-time-contracts-v1.schema.json +3 -1
  5. package/ai/component-catalog-v2-overrides.json +198 -1
  6. package/ai/component-catalog-v2.d.ts +22 -0
  7. package/ai/component-catalog-v2.json +488 -32
  8. package/ai/component-catalog-v2.schema.json +51 -0
  9. package/ai/component-catalog.json +251 -36
  10. package/ai/component-catalog.schema.json +23 -0
  11. package/ai/public-api-signatures-v1.md +231 -84
  12. package/ai/skill.md +32 -10
  13. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  14. package/analyzer/index.mjs +247 -5
  15. package/dist/app-tab.d.ts +3 -2
  16. package/dist/app-tab.js +2 -1
  17. package/dist/catalog-resources.d.ts +1 -0
  18. package/dist/catalog.d.ts +7 -6
  19. package/dist/catalog.js +8 -7
  20. package/dist/catalog.js.map +1 -1
  21. package/dist/{chunk-PX3YSS5C.js → chunk-6NDBE2OK.js} +1 -1
  22. package/dist/chunk-6NDBE2OK.js.map +1 -0
  23. package/dist/{chunk-B3A3IVO5.js → chunk-AQFWBG23.js} +3 -3
  24. package/dist/chunk-AQFWBG23.js.map +1 -0
  25. package/dist/{chunk-WNWD54GR.js → chunk-B6JYRX3P.js} +4 -2
  26. package/dist/chunk-B6JYRX3P.js.map +1 -0
  27. package/dist/{chunk-HP2B2L26.js → chunk-CAB6NQ2T.js} +1 -1
  28. package/dist/chunk-CAB6NQ2T.js.map +1 -0
  29. package/dist/{chunk-2NMQW7FX.js → chunk-CK6P5AUK.js} +4 -3
  30. package/dist/chunk-CK6P5AUK.js.map +1 -0
  31. package/dist/{chunk-VCE4MPVE.js → chunk-DAO2VFTT.js} +5 -6
  32. package/dist/chunk-DAO2VFTT.js.map +1 -0
  33. package/dist/{chunk-LPOMRC4C.js → chunk-DYBPI5O2.js} +1 -1
  34. package/dist/chunk-DYBPI5O2.js.map +1 -0
  35. package/dist/{chunk-IJBSZ4NX.js → chunk-E34TE2ZI.js} +4 -3
  36. package/dist/chunk-E34TE2ZI.js.map +1 -0
  37. package/dist/{chunk-4EF2CMYS.js → chunk-I45QO2IZ.js} +8 -7
  38. package/dist/chunk-I45QO2IZ.js.map +1 -0
  39. package/dist/{chunk-JRKSK2HX.js → chunk-I4V3UDSA.js} +1 -1
  40. package/dist/chunk-I4V3UDSA.js.map +1 -0
  41. package/dist/{chunk-FEY65TBV.js → chunk-KFUUFNTS.js} +1 -1
  42. package/dist/chunk-KFUUFNTS.js.map +1 -0
  43. package/dist/{chunk-QO55FN2Y.js → chunk-MFR2IIFG.js} +1 -1
  44. package/dist/chunk-MFR2IIFG.js.map +1 -0
  45. package/dist/{chunk-GWEAPEZI.js → chunk-OC275HHS.js} +4 -3
  46. package/dist/chunk-OC275HHS.js.map +1 -0
  47. package/dist/chunk-OL4TC3U2.js +156 -0
  48. package/dist/chunk-OL4TC3U2.js.map +1 -0
  49. package/dist/{chunk-OT6RPYAP.js → chunk-OMSRSL3B.js} +4 -3
  50. package/dist/chunk-OMSRSL3B.js.map +1 -0
  51. package/dist/{chunk-J5BFYY7Q.js → chunk-RL6COPKF.js} +12 -3
  52. package/dist/chunk-RL6COPKF.js.map +1 -0
  53. package/dist/{chunk-TB6DY7H5.js → chunk-SOK5EUF7.js} +1 -1
  54. package/dist/chunk-SOK5EUF7.js.map +1 -0
  55. package/dist/{chunk-RKVQEH4J.js → chunk-T7DOWS6T.js} +3 -3
  56. package/dist/chunk-T7DOWS6T.js.map +1 -0
  57. package/dist/{chunk-7KEUJIIC.js → chunk-TIGSG6BX.js} +1 -1
  58. package/dist/chunk-TIGSG6BX.js.map +1 -0
  59. package/dist/{chunk-W5L2JSBY.js → chunk-UDHHKZWO.js} +6 -5
  60. package/dist/chunk-UDHHKZWO.js.map +1 -0
  61. package/dist/{chunk-R7ZWUN64.js → chunk-V6GQKOX2.js} +4 -3
  62. package/dist/chunk-V6GQKOX2.js.map +1 -0
  63. package/dist/{chunk-KWWR5VMS.js → chunk-V6HCTCVD.js} +4 -3
  64. package/dist/chunk-V6HCTCVD.js.map +1 -0
  65. package/dist/{chunk-JFGXQBIP.js → chunk-VDUJZF5G.js} +76 -13
  66. package/dist/chunk-VDUJZF5G.js.map +1 -0
  67. package/dist/{chunk-SYDMYBPG.js → chunk-VXFGMDA7.js} +1 -1
  68. package/dist/chunk-VXFGMDA7.js.map +1 -0
  69. package/dist/{chunk-YMKH5XTF.js → chunk-WN52USHV.js} +2 -2
  70. package/dist/{chunk-YMKH5XTF.js.map → chunk-WN52USHV.js.map} +1 -1
  71. package/dist/{chunk-OBLTAKSX.js → chunk-WSXUPSID.js} +1 -1
  72. package/dist/chunk-WSXUPSID.js.map +1 -0
  73. package/dist/{chunk-X2U3QJCJ.js → chunk-ZPWZIVI6.js} +1 -1
  74. package/dist/chunk-ZPWZIVI6.js.map +1 -0
  75. package/dist/collapsible-panel.d.ts +5 -2
  76. package/dist/collapsible-panel.js.map +1 -1
  77. package/dist/css-values.d.ts +75 -0
  78. package/dist/css-values.js +3 -0
  79. package/dist/css-values.js.map +1 -0
  80. package/dist/empty-state.d.ts +2 -1
  81. package/dist/empty-state.js +1 -1
  82. package/dist/floating-toolbar.d.ts +4 -3
  83. package/dist/floating-toolbar.js +1 -1
  84. package/dist/index.d.ts +2 -0
  85. package/dist/index.js +26 -25
  86. package/dist/list-action-row.d.ts +1 -2
  87. package/dist/list-action-row.js +2 -1
  88. package/dist/list-header.d.ts +1 -1
  89. package/dist/list-header.js +2 -1
  90. package/dist/list-inset-control.d.ts +4 -3
  91. package/dist/list-inset-control.js +1 -1
  92. package/dist/list-inset-text.d.ts +4 -3
  93. package/dist/list-inset-text.js +1 -1
  94. package/dist/list-item.d.ts +4 -3
  95. package/dist/list-item.js +2 -1
  96. package/dist/list.d.ts +10 -8
  97. package/dist/list.js +2 -1
  98. package/dist/nav-stack.d.ts +9 -6
  99. package/dist/nav-stack.js +2 -1
  100. package/dist/pane.d.ts +6 -5
  101. package/dist/pane.js +1 -1
  102. package/dist/resizable-region.d.ts +2 -1
  103. package/dist/resizable-region.js +1 -1
  104. package/dist/segmented-control.d.ts +4 -3
  105. package/dist/segmented-control.js +2 -1
  106. package/dist/select.d.ts +3 -1
  107. package/dist/select.js +2 -1
  108. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  109. package/dist/skeleton.d.ts +7 -6
  110. package/dist/skeleton.js +2 -1
  111. package/dist/split-view.d.ts +5 -4
  112. package/dist/split-view.js +3 -2
  113. package/dist/split-view.js.map +1 -1
  114. package/dist/state-banner.d.ts +3 -2
  115. package/dist/state-banner.js +2 -1
  116. package/dist/styles/catalog.css +8 -1
  117. package/dist/styles/collapsible-panel.css +6 -2
  118. package/dist/styles/foundation.css +44 -0
  119. package/dist/styles/list-header.css +6 -0
  120. package/dist/styles/list-item.css +9 -0
  121. package/dist/styles/nav-stack.css +32 -2
  122. package/dist/styles/segmented-control.css +8 -1
  123. package/dist/styles/select.css +2 -1
  124. package/dist/styles/state-banner.css +14 -0
  125. package/dist/styles/tab-scaffold.css +1 -0
  126. package/dist/styles/token-search-field.css +4 -0
  127. package/dist/styles/toolbar-control-group.css +98 -16
  128. package/dist/styles/webawesome.css +22 -0
  129. package/dist/styles/workbench.css +4 -0
  130. package/dist/sunken-panel.d.ts +4 -3
  131. package/dist/sunken-panel.js +1 -1
  132. package/dist/surface-scaffold.d.ts +6 -5
  133. package/dist/surface-scaffold.js +1 -1
  134. package/dist/tab-bar.d.ts +6 -5
  135. package/dist/tab-bar.js +1 -1
  136. package/dist/tab-scaffold.d.ts +2 -1
  137. package/dist/tab-scaffold.js.map +1 -1
  138. package/dist/token-search-field.d.ts +5 -4
  139. package/dist/token-search-field.js +1 -1
  140. package/dist/toolbar-control-group.d.ts +10 -4
  141. package/dist/toolbar-control-group.js +1 -1
  142. package/dist/toolbar-text.js +2 -1
  143. package/dist/toolbar.d.ts +6 -5
  144. package/dist/toolbar.js +1 -1
  145. package/dist/value-table.d.ts +4 -2
  146. package/dist/value-table.js +2 -1
  147. package/dist/wire-nav-stack.d.ts +4 -1
  148. package/dist/wire-nav-stack.js +125 -0
  149. package/dist/wire-nav-stack.js.map +1 -1
  150. package/dist/wire-resizable-regions.js +1 -1
  151. package/dist/wire-tab-bars.d.ts +1 -0
  152. package/dist/wire-token-search-fields.js +1 -1
  153. package/dist/workbench.d.ts +7 -4
  154. package/dist/workbench.js.map +1 -1
  155. package/docs/accessibility.md +9 -3
  156. package/docs/collapsible-panel.md +4 -1
  157. package/docs/component-contract.md +56 -8
  158. package/docs/component-selection.md +45 -8
  159. package/docs/design/templates/list/compact-dark.svg +1 -1
  160. package/docs/design/templates/list/compact.svg +1 -1
  161. package/docs/design/templates/list/stack-dark.svg +1 -1
  162. package/docs/design/templates/list/stack.svg +1 -1
  163. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  164. package/docs/design/templates/list-action-row/default.svg +1 -1
  165. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  166. package/docs/design/templates/list-action-row/selected.svg +1 -1
  167. package/docs/design/templates/list-action-row-dark.svg +1 -1
  168. package/docs/design/templates/list-action-row.svg +1 -1
  169. package/docs/design/templates/list-dark.svg +1 -1
  170. package/docs/design/templates/list-item/default-dark.svg +1 -1
  171. package/docs/design/templates/list-item/default.svg +1 -1
  172. package/docs/design/templates/list-item/multiline-dark.svg +1 -1
  173. package/docs/design/templates/list-item/multiline.svg +1 -1
  174. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  175. package/docs/design/templates/list-item/selected.svg +1 -1
  176. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  177. package/docs/design/templates/list-item/trailing.svg +1 -1
  178. package/docs/design/templates/list-item-dark.svg +1 -1
  179. package/docs/design/templates/list-item.svg +1 -1
  180. package/docs/design/templates/list.svg +1 -1
  181. package/docs/design-philosophy.md +4 -2
  182. package/docs/examples/component-catalog-extension-v2.json +2 -0
  183. package/docs/layout.md +12 -4
  184. package/docs/nav-stack.md +29 -8
  185. package/docs/recipes.md +8 -4
  186. package/docs/split-view.md +6 -0
  187. package/docs/surface-scaffold.md +8 -0
  188. package/docs/tab-scaffold.md +3 -1
  189. package/docs/type-contracts.md +39 -12
  190. package/docs/ui-analyzer.md +17 -3
  191. package/docs/ui-doctor.md +7 -0
  192. package/docs/ux-demo.md +10 -4
  193. package/docs/webawesome-theme.md +6 -0
  194. package/docs/workbench.md +6 -4
  195. package/llms.txt +46 -6
  196. package/package.json +5 -1
  197. package/ux-demo/recipes/compact-toolbar.tsx +10 -9
  198. package/ux-demo/recipes/composer-form.tsx +6 -3
  199. package/ux-demo/recipes/loading-inspector.tsx +2 -1
  200. package/dist/chunk-2NMQW7FX.js.map +0 -1
  201. package/dist/chunk-4EF2CMYS.js.map +0 -1
  202. package/dist/chunk-7KEUJIIC.js.map +0 -1
  203. package/dist/chunk-B3A3IVO5.js.map +0 -1
  204. package/dist/chunk-FEY65TBV.js.map +0 -1
  205. package/dist/chunk-GWEAPEZI.js.map +0 -1
  206. package/dist/chunk-HP2B2L26.js.map +0 -1
  207. package/dist/chunk-IJBSZ4NX.js.map +0 -1
  208. package/dist/chunk-J5BFYY7Q.js.map +0 -1
  209. package/dist/chunk-JFGXQBIP.js.map +0 -1
  210. package/dist/chunk-JRKSK2HX.js.map +0 -1
  211. package/dist/chunk-KWWR5VMS.js.map +0 -1
  212. package/dist/chunk-LPOMRC4C.js.map +0 -1
  213. package/dist/chunk-OBLTAKSX.js.map +0 -1
  214. package/dist/chunk-OT6RPYAP.js.map +0 -1
  215. package/dist/chunk-PX3YSS5C.js.map +0 -1
  216. package/dist/chunk-QO55FN2Y.js.map +0 -1
  217. package/dist/chunk-R7ZWUN64.js.map +0 -1
  218. package/dist/chunk-RKVQEH4J.js.map +0 -1
  219. package/dist/chunk-SYDMYBPG.js.map +0 -1
  220. package/dist/chunk-TB6DY7H5.js.map +0 -1
  221. package/dist/chunk-VCE4MPVE.js.map +0 -1
  222. package/dist/chunk-W5L2JSBY.js.map +0 -1
  223. package/dist/chunk-WNWD54GR.js.map +0 -1
  224. package/dist/chunk-X2U3QJCJ.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,32 +1,33 @@
1
1
  export { reorderTabs, wireTabBars } from './chunk-UKKSMZYT.js';
2
- export { wireTokenSearchFields } from './chunk-JFGXQBIP.js';
3
- export { ValueTable, ValueTableRow } from './chunk-KWWR5VMS.js';
4
- export { wireResizableRegions } from './chunk-YMKH5XTF.js';
5
- export { StateBanner } from './chunk-W5L2JSBY.js';
6
- export { SunkenPanel } from './chunk-TB6DY7H5.js';
7
- export { DialogSurface, PopupSurface } from './chunk-OBLTAKSX.js';
8
- export { TabBar } from './chunk-X2U3QJCJ.js';
9
- export { TokenSearchField, placeTokenSearchCaret, readTokenSearchField } from './chunk-7KEUJIIC.js';
10
- export { ToolbarText } from './chunk-R7ZWUN64.js';
11
- export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-HP2B2L26.js';
12
- export { SegmentedControl } from './chunk-IJBSZ4NX.js';
13
- export { Select } from './chunk-2NMQW7FX.js';
14
- export { ListActionRow } from './chunk-VCE4MPVE.js';
15
- export { ListInsetControl } from './chunk-QO55FN2Y.js';
16
- export { ListInsetText } from './chunk-FEY65TBV.js';
17
- export { AppTab } from './chunk-OT6RPYAP.js';
18
- export { Toolbar } from './chunk-SYDMYBPG.js';
19
- export { ToolbarControlGroup } from './chunk-WNWD54GR.js';
20
- export { Pane } from './chunk-JRKSK2HX.js';
21
- export { ListHeader } from './chunk-GWEAPEZI.js';
22
- export { ListItem } from './chunk-4EF2CMYS.js';
23
- export { List } from './chunk-J5BFYY7Q.js';
2
+ export { wireTokenSearchFields } from './chunk-VDUJZF5G.js';
3
+ export { ValueTable, ValueTableRow } from './chunk-V6HCTCVD.js';
4
+ export { wireResizableRegions } from './chunk-WN52USHV.js';
5
+ export { StateBanner } from './chunk-UDHHKZWO.js';
6
+ export { SunkenPanel } from './chunk-SOK5EUF7.js';
7
+ export { DialogSurface, PopupSurface } from './chunk-WSXUPSID.js';
8
+ export { TabBar } from './chunk-ZPWZIVI6.js';
9
+ export { TokenSearchField, placeTokenSearchCaret, readTokenSearchField } from './chunk-TIGSG6BX.js';
10
+ export { ToolbarText } from './chunk-V6GQKOX2.js';
11
+ export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-CAB6NQ2T.js';
12
+ export { SegmentedControl } from './chunk-E34TE2ZI.js';
13
+ export { Select } from './chunk-CK6P5AUK.js';
14
+ export { FloatingToolbar } from './chunk-DYBPI5O2.js';
15
+ export { ListActionRow } from './chunk-DAO2VFTT.js';
16
+ export { ListInsetControl } from './chunk-MFR2IIFG.js';
17
+ export { ListInsetText } from './chunk-KFUUFNTS.js';
18
+ export { AppTab } from './chunk-OMSRSL3B.js';
19
+ export { ToolbarControlGroup } from './chunk-B6JYRX3P.js';
20
+ export { Toolbar } from './chunk-VXFGMDA7.js';
21
+ export { Pane } from './chunk-I4V3UDSA.js';
22
+ export { ListHeader } from './chunk-OC275HHS.js';
23
+ export { ListItem } from './chunk-I45QO2IZ.js';
24
+ export { List } from './chunk-RL6COPKF.js';
24
25
 
25
- export { Skeleton } from './chunk-RKVQEH4J.js';
26
+ export { Skeleton } from './chunk-T7DOWS6T.js';
27
+ export { calc, colorVar, em, flex, lengthVar, pct, plus, px, rem, space, uiColor } from './chunk-OL4TC3U2.js';
26
28
  export { DisclosureArrow } from './chunk-Y6LYKFXY.js';
27
29
  export { LucideIcon } from './chunk-W2FK7ZNY.js';
28
- export { EmptyState } from './chunk-PX3YSS5C.js';
30
+ export { EmptyState } from './chunk-6NDBE2OK.js';
29
31
  export { LoadingSpinner } from './chunk-6WTETUZ6.js';
30
- export { FloatingToolbar } from './chunk-LPOMRC4C.js';
31
32
 
32
33
  //# sourceMappingURL=index.js.map
@@ -53,10 +53,9 @@ interface ListActionRowProps {
53
53
  trailingActionTitle?: string;
54
54
  trailingActionVisibility?: 'always' | 'interaction';
55
55
  className?: string;
56
- style?: string;
57
56
  rootAttributes?: ListActionRowRootAttributes;
58
57
  trailingActionAttributes?: ListActionRowTrailingAttributes;
59
58
  }
60
- 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, style, rootAttributes, trailingActionAttributes, }: ListActionRowProps): SafeHtml;
59
+ 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;
61
60
 
62
61
  export { ListActionRow, type ListActionRowProps };
@@ -1,4 +1,5 @@
1
- export { ListActionRow } from './chunk-VCE4MPVE.js';
1
+ export { ListActionRow } from './chunk-DAO2VFTT.js';
2
+
2
3
 
3
4
 
4
5
 
@@ -21,7 +21,7 @@ interface ListHeaderBaseProps {
21
21
  label: string;
22
22
  density?: 'standard' | 'compact';
23
23
  divider?: 'none' | 'before' | 'after' | 'both';
24
- indicatorTone?: 'neutral' | 'accent' | 'danger';
24
+ indicatorTone?: 'neutral' | 'accent' | 'pop' | 'danger';
25
25
  /** Render as an unanimated loading skeleton: keep the label and action affordance, disable interaction. */
26
26
  placeholder?: boolean;
27
27
  rootAttributes?: ListHeaderRootAttributes;
@@ -1,4 +1,5 @@
1
- export { ListHeader } from './chunk-GWEAPEZI.js';
1
+ export { ListHeader } from './chunk-OC275HHS.js';
2
+
2
3
 
3
4
 
4
5
 
@@ -1,8 +1,9 @@
1
- import { SafeHtml } from 'kerfjs';
1
+ import * as kerfjs from 'kerfjs';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2
3
 
3
4
  interface ListInsetControlProps {
4
5
  /** Control(s) that own their own border and padding (e.g. an input, a `wa-*`). */
5
- children: SafeHtml | SafeHtml[];
6
+ children: KerfUiContent;
6
7
  className?: string;
7
8
  }
8
9
  /**
@@ -11,6 +12,6 @@ interface ListInsetControlProps {
11
12
  * Use it for controls that carry their own border and padding but no outer margin
12
13
  * — the wrapper adds only the alignment margin and layout, not a second inset.
13
14
  */
14
- declare function ListInsetControl({ children, className, }: ListInsetControlProps): SafeHtml;
15
+ declare function ListInsetControl({ children, className, }: ListInsetControlProps): kerfjs.SafeHtml;
15
16
 
16
17
  export { ListInsetControl, type ListInsetControlProps };
@@ -1,3 +1,3 @@
1
- export { ListInsetControl } from './chunk-QO55FN2Y.js';
1
+ export { ListInsetControl } from './chunk-MFR2IIFG.js';
2
2
 
3
3
  //# sourceMappingURL=list-inset-control.js.map
@@ -1,8 +1,9 @@
1
- import { SafeHtml } from 'kerfjs';
1
+ import * as kerfjs from 'kerfjs';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2
3
 
3
4
  interface ListInsetTextProps {
4
5
  /** Text (or inline content) that carries no margin, border, or padding of its own. */
5
- children: SafeHtml | SafeHtml[] | string;
6
+ children: KerfUiContent | string;
6
7
  /**
7
8
  * Keep only the horizontal geometry (inline margin, left/right border, and
8
9
  * left/right padding) and drop the vertical margin, border, and padding. Use it
@@ -20,6 +21,6 @@ interface ListInsetTextProps {
20
21
  * Pass `horizontalOnly` to keep the horizontal inset but drop the vertical box
21
22
  * space for tight text layout.
22
23
  */
23
- declare function ListInsetText({ children, horizontalOnly, className, }: ListInsetTextProps): SafeHtml;
24
+ declare function ListInsetText({ children, horizontalOnly, className, }: ListInsetTextProps): kerfjs.SafeHtml;
24
25
 
25
26
  export { ListInsetText, type ListInsetTextProps };
@@ -1,3 +1,3 @@
1
- export { ListInsetText } from './chunk-FEY65TBV.js';
1
+ export { ListInsetText } from './chunk-KFUUFNTS.js';
2
2
 
3
3
  //# sourceMappingURL=list-inset-text.js.map
@@ -1,10 +1,12 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2
3
 
3
4
  type ListItemRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
4
5
  'data-component'?: never;
5
6
  'data-action'?: never;
6
7
  'data-item-id'?: never;
7
8
  'data-has-icon'?: never;
9
+ 'data-has-description'?: never;
8
10
  'data-multiline'?: never;
9
11
  'data-density'?: never;
10
12
  'data-divider'?: never;
@@ -16,7 +18,7 @@ interface ListItemProps {
16
18
  /** App-owned supporting text rendered in the component's stable label stack. */
17
19
  description?: string | SafeHtml;
18
20
  icon?: SafeHtml;
19
- trailing?: SafeHtml;
21
+ trailing?: KerfUiContent;
20
22
  /** Dormant status metadata rendered before trailing content. */
21
23
  status?: string | SafeHtml;
22
24
  /** Show a progress indicator and expose the row as busy without replacing its content. */
@@ -27,7 +29,6 @@ interface ListItemProps {
27
29
  action: string;
28
30
  itemId?: string;
29
31
  className?: string;
30
- style?: string;
31
32
  pressed?: boolean;
32
33
  accessibleLabel?: string;
33
34
  title?: string;
@@ -39,6 +40,6 @@ interface ListItemProps {
39
40
  placeholder?: boolean;
40
41
  rootAttributes?: ListItemRootAttributes;
41
42
  }
42
- declare function ListItem({ label, description, icon, trailing, status, busy, density, divider, selected, action, itemId, className, style, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, rootAttributes, }: ListItemProps): SafeHtml;
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;
43
44
 
44
45
  export { ListItem, type ListItemProps };
package/dist/list-item.js CHANGED
@@ -1,4 +1,5 @@
1
- export { ListItem } from './chunk-4EF2CMYS.js';
1
+ export { ListItem } from './chunk-I45QO2IZ.js';
2
+
2
3
 
3
4
 
4
5
 
package/dist/list.d.ts CHANGED
@@ -1,12 +1,14 @@
1
- import { SafeHtml } from 'kerfjs';
1
+ import * as kerfjs from 'kerfjs';
2
+ import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
2
3
  import { D as DividerSides } from './divider-sides-267FA7sY.js';
4
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3
5
 
4
6
  interface ListProps {
5
- children?: SafeHtml | readonly SafeHtml[];
6
- /** Use the standard item gap, or supply browser CSS such as `var(--kui-space-2xs)` or `0.25rem`. Defaults to no gap. */
7
- gap?: boolean | string;
8
- /** Allow this list to grow/shrink, or supply a CSS flex shorthand. */
9
- flex?: boolean | string;
7
+ children?: KerfUiContent;
8
+ /** Use the standard item gap, a named UI spacing token, or a typed CSS length. Defaults to no gap. */
9
+ gap?: boolean | UiSpaceName | CssLength;
10
+ /** Allow this list to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */
11
+ flex?: boolean | CssFlexKeyword | CssFlex;
10
12
  /** Own vertical scrolling and overscroll containment. */
11
13
  scrollable?: boolean;
12
14
  /** Physical divider edges in canonical top/right/bottom/left order. */
@@ -14,6 +16,6 @@ interface ListProps {
14
16
  className?: string;
15
17
  }
16
18
  /** A stretch-aligned vertical stack with optional gap, flex, scroll, and dividers. */
17
- declare function List({ children, gap, flex, scrollable, dividerSides, className, }: ListProps): SafeHtml;
19
+ declare function List({ children, gap, flex, scrollable, dividerSides, className, }: ListProps): kerfjs.SafeHtml;
18
20
 
19
- export { DividerSides, List, type ListProps };
21
+ export { CssFlex, CssFlexKeyword, CssLength, DividerSides, List, type ListProps, UiSpaceName };
package/dist/list.js CHANGED
@@ -1,3 +1,4 @@
1
- export { List } from './chunk-J5BFYY7Q.js';
1
+ export { List } from './chunk-RL6COPKF.js';
2
+
2
3
 
3
4
  //# sourceMappingURL=list.js.map
@@ -1,4 +1,5 @@
1
- import { SafeHtml } from 'kerfjs';
1
+ import * as kerfjs from 'kerfjs';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2
3
 
3
4
  /**
4
5
  * One entry in a {@link NavStack}. The app owns the stack as an array (usually a
@@ -7,11 +8,13 @@ import { SafeHtml } from 'kerfjs';
7
8
  interface NavStackView {
8
9
  /** Stable identity for keyed reconcile and transition direction. */
9
10
  key: string;
10
- content: SafeHtml;
11
+ content: KerfUiContent;
11
12
  /** Title shown in the top toolbar for this view. */
12
13
  title?: string;
13
14
  /** Trailing actions for this view's top toolbar. */
14
- toolbar?: SafeHtml;
15
+ toolbar?: KerfUiContent;
16
+ /** Bottom toolbar for this view. Cross-fades with the top chrome on navigation. */
17
+ bottomToolbar?: KerfUiContent;
15
18
  }
16
19
  interface NavStackProps {
17
20
  id: string;
@@ -23,8 +26,8 @@ interface NavStackProps {
23
26
  backLabel?: string;
24
27
  /** Hide the top toolbar entirely (rare — a fully custom-chrome view). */
25
28
  hideToolbar?: boolean;
26
- /** Optional persistent bottom toolbar. */
27
- bottomToolbar?: SafeHtml;
29
+ /** Optional persistent bottom toolbar used when the active view does not provide one. */
30
+ bottomToolbar?: KerfUiContent;
28
31
  className?: string;
29
32
  }
30
33
  /**
@@ -33,6 +36,6 @@ interface NavStackProps {
33
36
  * cross-fades the chrome across a change. A single-pane layout is a `NavStack`
34
37
  * with one entry. See `docs/23-app-layouts.md` §3.1.
35
38
  */
36
- declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className, }: NavStackProps): SafeHtml;
39
+ declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className, }: NavStackProps): kerfjs.SafeHtml;
37
40
 
38
41
  export { NavStack, type NavStackProps, type NavStackView };
package/dist/nav-stack.js CHANGED
@@ -1,4 +1,5 @@
1
- export { NavStack } from './chunk-B3A3IVO5.js';
1
+ export { NavStack } from './chunk-AQFWBG23.js';
2
+
2
3
 
3
4
 
4
5
 
package/dist/pane.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { SafeHtml } from 'kerfjs';
1
+ import * as kerfjs from 'kerfjs';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2
3
 
3
4
  /** Logical sides that can show a {@link Pane} separator. */
4
5
  type PaneSeparatorSide = 'block-start' | 'block-end' | 'inline-start' | 'inline-end';
@@ -15,11 +16,11 @@ type PaneRootAttributes = Readonly<Record<`data-${string}`, string | undefined>
15
16
  }>;
16
17
  interface PaneProps {
17
18
  /** Optional fixed chrome above the scrolling content, arranged vertically. */
18
- header?: SafeHtml | readonly SafeHtml[];
19
+ header?: KerfUiContent;
19
20
  /** The pane's primary vertical, scrolling content stack. */
20
- children?: SafeHtml | readonly SafeHtml[];
21
+ children?: KerfUiContent;
21
22
  /** Optional fixed chrome below the scrolling content. */
22
- footer?: SafeHtml | readonly SafeHtml[];
23
+ footer?: KerfUiContent;
23
24
  /** Root semantics. Defaults to `div`. */
24
25
  element?: PaneElement;
25
26
  /** Scrolling content semantics. Defaults to `div`. */
@@ -44,6 +45,6 @@ interface PaneProps {
44
45
  * each logical edge, so the same component works as a sidebar, main area,
45
46
  * inspector, or dialog column.
46
47
  */
47
- declare function Pane({ header, children, footer, element, contentElement, separators, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, }: PaneProps): SafeHtml;
48
+ declare function Pane({ header, children, footer, element, contentElement, separators, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, }: PaneProps): kerfjs.SafeHtml;
48
49
 
49
50
  export { Pane, type PaneContentElement, type PaneElement, type PaneProps, type PaneSeparatorSide };
package/dist/pane.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Pane } from './chunk-JRKSK2HX.js';
1
+ export { Pane } from './chunk-I4V3UDSA.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=pane.js.map
@@ -1,4 +1,5 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2
3
 
3
4
  type ResizableRegionAxis = 'horizontal' | 'vertical';
4
5
  type ResizableRegionEdge = 'start' | 'end';
@@ -31,7 +32,7 @@ interface ResizableRegionProps {
31
32
  restorePosition?: ResizableRegionRestorePosition;
32
33
  /** Decorative dormant content for the separator handle. Must not contain interactive descendants. */
33
34
  handleIcon?: SafeHtml;
34
- children: SafeHtml | SafeHtml[];
35
+ children: KerfUiContent;
35
36
  }
36
37
  declare const clampRegionSize: (size: number, min: number, max: number) => number;
37
38
  declare const resizeRegionFromPointer: (startSize: number, delta: number, edge: ResizableRegionEdge) => number;
@@ -1,3 +1,3 @@
1
- export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-HP2B2L26.js';
1
+ export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-CAB6NQ2T.js';
2
2
 
3
3
  //# sourceMappingURL=resizable-region.js.map
@@ -1,4 +1,5 @@
1
- import { SafeHtml } from 'kerfjs';
1
+ import * as kerfjs from 'kerfjs';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2
3
 
3
4
  type SegmentedControlAppearance = 'filled' | 'outlined' | 'toolbar';
4
5
  type SegmentedControlShape = 'rounded' | 'pill';
@@ -7,7 +8,7 @@ type SegmentedControlLayout = 'content' | 'equal';
7
8
  interface SegmentedControlChoice<Value extends string = string> {
8
9
  value: Value;
9
10
  label: string;
10
- content?: SafeHtml;
11
+ content?: KerfUiContent;
11
12
  title?: string;
12
13
  disabled?: boolean;
13
14
  }
@@ -25,6 +26,6 @@ interface SegmentedControlProps<Value extends string = string> {
25
26
  /** Render as an unanimated loading skeleton, disabling every segment. */
26
27
  placeholder?: boolean;
27
28
  }
28
- declare function SegmentedControl<Value extends string>({ id, label, value, choices, action, appearance, shape, size, layout, className, placeholder, }: SegmentedControlProps<Value>): SafeHtml;
29
+ declare function SegmentedControl<Value extends string>({ id, label, value, choices, action, appearance, shape, size, layout, className, placeholder, }: SegmentedControlProps<Value>): kerfjs.SafeHtml;
29
30
 
30
31
  export { SegmentedControl, type SegmentedControlAppearance, type SegmentedControlChoice, type SegmentedControlLayout, type SegmentedControlProps, type SegmentedControlShape, type SegmentedControlSize };
@@ -1,4 +1,5 @@
1
- export { SegmentedControl } from './chunk-IJBSZ4NX.js';
1
+ export { SegmentedControl } from './chunk-E34TE2ZI.js';
2
+
2
3
 
3
4
 
4
5
  //# sourceMappingURL=segmented-control.js.map
package/dist/select.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
+ import { CssColor } from './css-values.js';
2
3
  import { LucideNode } from './lucide-icon.js';
3
4
  import 'lucide';
4
5
 
@@ -7,7 +8,8 @@ interface SelectChoice<Value extends string = string> {
7
8
  label: string;
8
9
  icon?: LucideNode;
9
10
  iconName?: string;
10
- color?: string;
11
+ /** Typed semantic or application-owned color for the optional icon. */
12
+ color?: CssColor;
11
13
  group?: string;
12
14
  separatorBefore?: boolean;
13
15
  }
package/dist/select.js CHANGED
@@ -1,4 +1,5 @@
1
- export { Select } from './chunk-2NMQW7FX.js';
1
+ export { Select } from './chunk-CK6P5AUK.js';
2
+
2
3
 
3
4
 
4
5
 
@@ -0,0 +1,14 @@
1
+ import { SafeHtml } from 'kerfjs';
2
+
3
+ /**
4
+ * Renderable content for semantic Kerf UI component positions.
5
+ *
6
+ * Unlike core JSX children, UI content intentionally excludes raw strings,
7
+ * numbers, and signals: semantic component zones should contain trusted
8
+ * `SafeHtml` components. Boolean and nullish values render nothing, and nested
9
+ * readonly arrays let conditionals and mapped component collections compose
10
+ * directly without an otherwise-unnecessary Fragment.
11
+ */
12
+ type KerfUiContent = SafeHtml | boolean | null | undefined | readonly KerfUiContent[];
13
+
14
+ export type { KerfUiContent as K };
@@ -1,12 +1,13 @@
1
1
  import * as kerfjs from 'kerfjs';
2
+ import { CssSize, CssLength } from './css-values.js';
2
3
 
3
4
  interface SkeletonProps {
4
- /** Width as any browser CSS length (e.g. `7.5rem`, `60%`). Defaults to filling its slot. */
5
- width?: string;
6
- /** Height as any CSS length. Defaults to a single text line. */
7
- height?: string;
8
- /** Corner radius override (a CSS length). Defaults to the small radius token. */
9
- radius?: string;
5
+ /** Typed width or intrinsic sizing keyword. Defaults to filling its slot. */
6
+ width?: CssSize;
7
+ /** Typed height or intrinsic sizing keyword. Defaults to a single text line. */
8
+ height?: CssSize;
9
+ /** Typed corner-radius override. Defaults to the small radius token. */
10
+ radius?: CssLength;
10
11
  /** Render this many stacked lines (the last one shorter), for multi-line text. */
11
12
  lines?: number;
12
13
  /** Accessible label. Omit to keep the block decorative (`aria-hidden`). */
package/dist/skeleton.js CHANGED
@@ -1,3 +1,4 @@
1
- export { Skeleton } from './chunk-RKVQEH4J.js';
1
+ export { Skeleton } from './chunk-T7DOWS6T.js';
2
+
2
3
 
3
4
  //# sourceMappingURL=skeleton.js.map
@@ -1,4 +1,5 @@
1
- import { SafeHtml } from 'kerfjs';
1
+ import * as kerfjs from 'kerfjs';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2
3
 
3
4
  interface SplitViewResizable {
4
5
  size: number;
@@ -9,9 +10,9 @@ interface SplitViewProps {
9
10
  id: string;
10
11
  label: string;
11
12
  /** The list (primary) pane. */
12
- list: SafeHtml;
13
+ list: KerfUiContent;
13
14
  /** The detail (secondary) pane. */
14
- detail: SafeHtml;
15
+ detail: KerfUiContent;
15
16
  /**
16
17
  * Compact ("one pane at a time") classes — a handset or portrait tablet.
17
18
  * Derive from `deviceClass().value.compact`. When true the split collapses to
@@ -37,6 +38,6 @@ interface SplitViewProps {
37
38
  * resizable wiring with `wireResizableRegions` and the compact back with
38
39
  * `wireNavStack`.
39
40
  */
40
- declare function SplitView({ id, label, list, detail, compact, detailActive, listTitle, detailTitle, backLabel, resizable, className, }: SplitViewProps): SafeHtml;
41
+ declare function SplitView({ id, label, list, detail, compact, detailActive, listTitle, detailTitle, backLabel, resizable, className, }: SplitViewProps): kerfjs.SafeHtml;
41
42
 
42
43
  export { SplitView, type SplitViewProps, type SplitViewResizable };
@@ -1,6 +1,7 @@
1
- import { NavStack } from './chunk-B3A3IVO5.js';
1
+ import { NavStack } from './chunk-AQFWBG23.js';
2
+
3
+ import { ResizableRegion } from './chunk-CAB6NQ2T.js';
2
4
 
3
- import { ResizableRegion } from './chunk-HP2B2L26.js';
4
5
 
5
6
  import { jsx, jsxs } from 'kerfjs/jsx-runtime';
6
7
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/split-view.tsx"],"names":[],"mappings":";;;;;;AA4CO,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 type { SafeHtml } from 'kerfjs';\n\nimport { NavStack } from './nav-stack.js';\nimport { ResizableRegion } from './resizable-region.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: SafeHtml;\n /** The detail (secondary) pane. */\n detail: SafeHtml;\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":";;;;;;;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,6 +1,7 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
2
3
 
3
- type StateBannerTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
4
+ type StateBannerTone = 'neutral' | 'info' | 'pop' | 'success' | 'warning' | 'danger';
4
5
  type StateBannerUrgency = 'status' | 'alert';
5
6
  interface StateBannerProps {
6
7
  title: string;
@@ -8,7 +9,7 @@ interface StateBannerProps {
8
9
  /** Optional compact status or count shown beside the title. */
9
10
  badge?: string;
10
11
  icon?: SafeHtml;
11
- action?: SafeHtml;
12
+ action?: KerfUiContent;
12
13
  tone?: StateBannerTone;
13
14
  urgency?: StateBannerUrgency;
14
15
  className?: string;
@@ -1,4 +1,5 @@
1
- export { StateBanner } from './chunk-W5L2JSBY.js';
1
+ export { StateBanner } from './chunk-UDHHKZWO.js';
2
+
2
3
 
3
4
 
4
5
  //# sourceMappingURL=state-banner.js.map
@@ -460,6 +460,7 @@
460
460
  /* The related trigger carries a text label ("Component") beside the glyph, so let
461
461
  it grow to its content instead of the single-group's fixed 48px icon-button
462
462
  width (from toolbar-control-group.css). */
463
+ .kui-catalog__related-group[data-single="true"] > .kui-catalog__related-menu,
463
464
  .kui-catalog__related-group[data-single="true"]
464
465
  > .kui-catalog__related-menu
465
466
  > wa-button,
@@ -469,6 +470,12 @@
469
470
  width: auto;
470
471
  }
471
472
 
473
+ /* The menu owns a standard inner inset so long relationship names never touch
474
+ the popup border. */
475
+ .kui-catalog__related-menu::part(menu) {
476
+ padding: var(--kui-wa-surface-inset, 0.5rem);
477
+ }
478
+
472
479
  /* Keep the glyph beside the text label (the toolbar group paints the slotted svg
473
480
  `display: block`, which would otherwise drop the label onto a second line). */
474
481
  .kui-catalog__related-trigger {
@@ -484,7 +491,7 @@
484
491
  /* Group heading inside the related-entries popup menu (e.g. "Uses" / "Used by"). */
485
492
  .kui-catalog__related-heading {
486
493
  display: block;
487
- padding: 0.25rem 0.75rem 0;
494
+ padding: 0.25rem var(--kui-wa-control-inset, 0.5rem) 0;
488
495
  color: var(--kui-color-text-quiet);
489
496
  font-size: var(--kui-font-xs);
490
497
  font-weight: 600;
@@ -23,6 +23,7 @@
23
23
  }
24
24
 
25
25
  .kui-collapsible-panel--bottom {
26
+ position: relative;
26
27
  width: 100%;
27
28
  height: var(--kui-collapsible-panel-height, 13.75rem);
28
29
  min-height: 0;
@@ -55,8 +56,8 @@
55
56
  height: 0;
56
57
  }
57
58
 
58
- /* The fixed-size sliding content: it keeps a definite size so the transform
59
- reads as a slide, not a squeeze. */
59
+ /* The fixed-size sliding content keeps a definite size so the transform reads
60
+ as a slide, not a squeeze. */
60
61
  .kui-collapsible-panel__content {
61
62
  height: 100%;
62
63
  transition: transform 200ms ease;
@@ -68,6 +69,9 @@
68
69
  }
69
70
 
70
71
  .kui-collapsible-panel--bottom .kui-collapsible-panel__content {
72
+ position: absolute;
73
+ inset-inline: 0;
74
+ inset-block-end: 0;
71
75
  width: 100%;
72
76
  height: var(--kui-collapsible-panel-height, 13.75rem);
73
77
  }