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

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 (319) hide show
  1. package/README.md +69 -15
  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 +19 -2
  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.d.ts +19 -1
  8. package/ai/component-catalog-v2.json +920 -149
  9. package/ai/component-catalog-v2.schema.json +33 -1
  10. package/ai/component-catalog.json +689 -153
  11. package/ai/component-catalog.schema.json +21 -1
  12. package/ai/public-api-signatures-v1.md +404 -184
  13. package/ai/skill.md +31 -14
  14. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  15. package/analyzer/index.mjs +105 -35
  16. package/dist/app-tab.d.ts +3 -1
  17. package/dist/app-tab.js +1 -1
  18. package/dist/badge.d.ts +24 -0
  19. package/dist/badge.js +3 -0
  20. package/dist/badge.js.map +1 -0
  21. package/dist/browser/badge.js +3 -0
  22. package/dist/browser/list-header.js +1 -0
  23. package/dist/browser/state-banner.js +1 -0
  24. package/dist/catalog-resources.d.ts +2 -2
  25. package/dist/catalog.d.ts +47 -125
  26. package/dist/catalog.js +429 -262
  27. package/dist/catalog.js.map +1 -1
  28. package/dist/{chunk-W2FK7ZNY.js → chunk-4R777DUZ.js} +10 -2
  29. package/dist/chunk-4R777DUZ.js.map +1 -0
  30. package/dist/{chunk-OMSRSL3B.js → chunk-5FZZMIMD.js} +6 -4
  31. package/dist/chunk-5FZZMIMD.js.map +1 -0
  32. package/dist/{chunk-AQFWBG23.js → chunk-5PMGQDG7.js} +5 -3
  33. package/dist/chunk-5PMGQDG7.js.map +1 -0
  34. package/dist/{chunk-SOK5EUF7.js → chunk-6ZXOQEAN.js} +4 -2
  35. package/dist/chunk-6ZXOQEAN.js.map +1 -0
  36. package/dist/{chunk-I4V3UDSA.js → chunk-7GUQYHKA.js} +25 -6
  37. package/dist/chunk-7GUQYHKA.js.map +1 -0
  38. package/dist/{chunk-XKFRMGMW.js → chunk-7IUSV4XG.js} +3 -1
  39. package/dist/chunk-7IUSV4XG.js.map +1 -0
  40. package/dist/{chunk-IU4QUY5I.js → chunk-AEPXGCNF.js} +20 -3
  41. package/dist/chunk-AEPXGCNF.js.map +1 -0
  42. package/dist/{chunk-VDUJZF5G.js → chunk-CMUIXJZM.js} +2 -2
  43. package/dist/{chunk-VDUJZF5G.js.map → chunk-CMUIXJZM.js.map} +1 -1
  44. package/dist/{chunk-DAO2VFTT.js → chunk-D547PH4L.js} +7 -5
  45. package/dist/chunk-D547PH4L.js.map +1 -0
  46. package/dist/{chunk-2TYUFZUC.js → chunk-D7GWXIAS.js} +4 -2
  47. package/dist/chunk-D7GWXIAS.js.map +1 -0
  48. package/dist/{chunk-E34TE2ZI.js → chunk-DVZCMMB3.js} +6 -4
  49. package/dist/chunk-DVZCMMB3.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-EKYZCRCX.js +256 -0
  53. package/dist/chunk-EKYZCRCX.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-UDHHKZWO.js → chunk-JM53SMVF.js} +9 -5
  59. package/dist/chunk-JM53SMVF.js.map +1 -0
  60. package/dist/{chunk-OGTJNHRG.js → chunk-JMGKM7RK.js} +6 -4
  61. package/dist/chunk-JMGKM7RK.js.map +1 -0
  62. package/dist/{chunk-GYGM363P.js → chunk-KX7DP2GO.js} +17 -7
  63. package/dist/chunk-KX7DP2GO.js.map +1 -0
  64. package/dist/{chunk-OL4TC3U2.js → chunk-MO56ZZLG.js} +6 -2
  65. package/dist/chunk-MO56ZZLG.js.map +1 -0
  66. package/dist/{chunk-VXFGMDA7.js → chunk-MTM43SJO.js} +16 -2
  67. package/dist/chunk-MTM43SJO.js.map +1 -0
  68. package/dist/{chunk-ZPWZIVI6.js → chunk-N3GKMPDW.js} +7 -3
  69. package/dist/chunk-N3GKMPDW.js.map +1 -0
  70. package/dist/{chunk-DYBPI5O2.js → chunk-NDUGJ4TU.js} +4 -2
  71. package/dist/chunk-NDUGJ4TU.js.map +1 -0
  72. package/dist/{chunk-I45QO2IZ.js → chunk-NMGTHYW3.js} +7 -5
  73. package/dist/chunk-NMGTHYW3.js.map +1 -0
  74. package/dist/{chunk-WSXUPSID.js → chunk-NN6GYOA2.js} +7 -3
  75. package/dist/chunk-NN6GYOA2.js.map +1 -0
  76. package/dist/{chunk-OGNE3OFT.js → chunk-NZXWU4R5.js} +24 -3
  77. package/dist/chunk-NZXWU4R5.js.map +1 -0
  78. package/dist/{chunk-V6GQKOX2.js → chunk-O3RCCSQJ.js} +6 -4
  79. package/dist/chunk-O3RCCSQJ.js.map +1 -0
  80. package/dist/{chunk-WVLMZ5SG.js → chunk-S4QRSBFI.js} +25 -3
  81. package/dist/chunk-S4QRSBFI.js.map +1 -0
  82. package/dist/{chunk-CK6P5AUK.js → chunk-UBH743HV.js} +10 -7
  83. package/dist/chunk-UBH743HV.js.map +1 -0
  84. package/dist/{chunk-T7DOWS6T.js → chunk-ULCDZTWL.js} +7 -4
  85. package/dist/chunk-ULCDZTWL.js.map +1 -0
  86. package/dist/{chunk-V6HCTCVD.js → chunk-UPZ6EEJN.js} +9 -5
  87. package/dist/chunk-UPZ6EEJN.js.map +1 -0
  88. package/dist/{chunk-CAB6NQ2T.js → chunk-VOCPXGQN.js} +3 -1
  89. package/dist/chunk-VOCPXGQN.js.map +1 -0
  90. package/dist/chunk-XD7DWYXG.js +34 -0
  91. package/dist/chunk-XD7DWYXG.js.map +1 -0
  92. package/dist/{chunk-B6JYRX3P.js → chunk-ZIYOJFZD.js} +43 -4
  93. package/dist/chunk-ZIYOJFZD.js.map +1 -0
  94. package/dist/{chunk-EYALJQQD.js → chunk-ZK5EGVFP.js} +4 -2
  95. package/dist/chunk-ZK5EGVFP.js.map +1 -0
  96. package/dist/{chunk-6WTETUZ6.js → chunk-ZLWQZUGF.js} +8 -2
  97. package/dist/chunk-ZLWQZUGF.js.map +1 -0
  98. package/dist/collapsible-panel.d.ts +4 -2
  99. package/dist/collapsible-panel.js +4 -2
  100. package/dist/collapsible-panel.js.map +1 -1
  101. package/dist/css-values.d.ts +39 -3
  102. package/dist/css-values.js +1 -1
  103. package/dist/disclosure-arrow.d.ts +3 -1
  104. package/dist/disclosure-arrow.js +1 -1
  105. package/dist/empty-state.d.ts +3 -1
  106. package/dist/empty-state.js +1 -1
  107. package/dist/floating-toolbar.d.ts +3 -1
  108. package/dist/floating-toolbar.js +1 -1
  109. package/dist/grid.d.ts +17 -1
  110. package/dist/grid.js +2 -1
  111. package/dist/index.d.ts +4 -3
  112. package/dist/index.js +34 -33
  113. package/dist/list-action-row.d.ts +3 -1
  114. package/dist/list-action-row.js +1 -1
  115. package/dist/list-header.d.ts +6 -1
  116. package/dist/list-header.js +2 -1
  117. package/dist/list-inset-control.d.ts +3 -1
  118. package/dist/list-inset-control.js +1 -1
  119. package/dist/list-inset-text.d.ts +3 -1
  120. package/dist/list-inset-text.js +1 -1
  121. package/dist/list-item.d.ts +3 -1
  122. package/dist/list-item.js +1 -1
  123. package/dist/list.d.ts +23 -2
  124. package/dist/list.js +2 -1
  125. package/dist/loading-spinner.d.ts +3 -1
  126. package/dist/loading-spinner.js +1 -1
  127. package/dist/lucide-icon.d.ts +3 -1
  128. package/dist/lucide-icon.js +1 -1
  129. package/dist/nav-stack.d.ts +3 -1
  130. package/dist/nav-stack.js +1 -1
  131. package/dist/pane.d.ts +19 -2
  132. package/dist/pane.js +1 -1
  133. package/dist/resizable-region.d.ts +5 -2
  134. package/dist/resizable-region.js +1 -1
  135. package/dist/row.d.ts +21 -1
  136. package/dist/row.js +2 -1
  137. package/dist/segmented-control.d.ts +3 -1
  138. package/dist/segmented-control.js +1 -1
  139. package/dist/select.d.ts +16 -4
  140. package/dist/select.js +1 -1
  141. package/dist/skeleton.d.ts +3 -1
  142. package/dist/skeleton.js +1 -1
  143. package/dist/spacer.d.ts +3 -1
  144. package/dist/spacer.js +1 -1
  145. package/dist/split-view.d.ts +3 -1
  146. package/dist/split-view.js +24 -5
  147. package/dist/split-view.js.map +1 -1
  148. package/dist/state-banner.d.ts +3 -1
  149. package/dist/state-banner.js +2 -1
  150. package/dist/styles/badge.css +86 -0
  151. package/dist/styles/catalog/components/catalog-detail.css +35 -0
  152. package/dist/styles/catalog/components/catalog-example-stack.css +9 -0
  153. package/dist/styles/catalog/components/catalog-example.css +180 -0
  154. package/dist/styles/catalog/components/catalog-resource-footer.css +37 -0
  155. package/dist/styles/catalog/components/catalog-secondary-sections.css +38 -0
  156. package/dist/styles/catalog/components/catalog-section-list.css +22 -0
  157. package/dist/styles/catalog/components/catalog-sidebar.css +82 -0
  158. package/dist/styles/catalog/components/catalog-stage.css +60 -0
  159. package/dist/styles/catalog/components/catalog.css +22 -0
  160. package/dist/styles/catalog.css +10 -587
  161. package/dist/styles/collapsible-panel.css +132 -4
  162. package/dist/styles/document.css +23 -0
  163. package/dist/styles/foundation.css +21 -7
  164. package/dist/styles/grid.css +10 -0
  165. package/dist/styles/list-header.css +49 -60
  166. package/dist/styles/list-inset-control.css +8 -1
  167. package/dist/styles/list-item.css +6 -0
  168. package/dist/styles/list.css +11 -0
  169. package/dist/styles/nav-stack.css +89 -2
  170. package/dist/styles/pane.css +86 -1
  171. package/dist/styles/resizable-region.css +117 -5
  172. package/dist/styles/row.css +10 -0
  173. package/dist/styles/select.css +39 -7
  174. package/dist/styles/split-view.css +108 -2
  175. package/dist/styles/state-banner.css +0 -27
  176. package/dist/styles/styles.css +1 -0
  177. package/dist/styles/tab-bar.css +6 -1
  178. package/dist/styles/tab-scaffold.css +64 -1
  179. package/dist/styles/text.css +10 -0
  180. package/dist/styles/token-search-field.css +5 -40
  181. package/dist/styles/toolbar-control-group.css +198 -25
  182. package/dist/styles/toolbar-text.css +8 -1
  183. package/dist/styles/toolbar.css +169 -5
  184. package/dist/styles/webawesome.css +70 -9
  185. package/dist/styles/workbench.css +136 -4
  186. package/dist/sunken-panel.d.ts +3 -1
  187. package/dist/sunken-panel.js +1 -1
  188. package/dist/surface-scaffold.d.ts +6 -2
  189. package/dist/surface-scaffold.js +1 -1
  190. package/dist/tab-bar.d.ts +8 -1
  191. package/dist/tab-bar.js +1 -1
  192. package/dist/tab-scaffold.d.ts +3 -1
  193. package/dist/tab-scaffold.js +3 -1
  194. package/dist/tab-scaffold.js.map +1 -1
  195. package/dist/text.d.ts +9 -5
  196. package/dist/text.js +1 -1
  197. package/dist/token-search-field.d.ts +5 -1
  198. package/dist/token-search-field.js +1 -1
  199. package/dist/toolbar-control-group.d.ts +33 -3
  200. package/dist/toolbar-control-group.js +1 -1
  201. package/dist/toolbar-text.d.ts +3 -1
  202. package/dist/toolbar-text.js +1 -1
  203. package/dist/toolbar.d.ts +30 -1
  204. package/dist/toolbar.js +1 -1
  205. package/dist/types-CEsieBZi.d.ts +69 -0
  206. package/dist/value-table.d.ts +6 -2
  207. package/dist/value-table.js +1 -1
  208. package/dist/wire-resizable-regions.js +1 -1
  209. package/dist/wire-sidebar.d.ts +18 -3
  210. package/dist/wire-sidebar.js +95 -14
  211. package/dist/wire-sidebar.js.map +1 -1
  212. package/dist/wire-token-search-fields.js +1 -1
  213. package/dist/workbench.d.ts +3 -1
  214. package/dist/workbench.js +3 -1
  215. package/dist/workbench.js.map +1 -1
  216. package/docs/accessibility.md +56 -9
  217. package/docs/app-layouts.md +73 -0
  218. package/docs/catalog.md +48 -9
  219. package/docs/collapsible-panel.md +81 -8
  220. package/docs/component-contract.md +96 -28
  221. package/docs/component-integration.md +9 -4
  222. package/docs/component-selection.md +36 -15
  223. package/docs/design/templates/list/stack-dark.svg +1 -1
  224. package/docs/design/templates/list/stack.svg +1 -1
  225. package/docs/design/templates/list-dark.svg +1 -1
  226. package/docs/design/templates/list-header/action-dark.svg +1 -1
  227. package/docs/design/templates/list-header/action.svg +1 -1
  228. package/docs/design/templates/list-header/count-dark.svg +1 -1
  229. package/docs/design/templates/list-header/count.svg +1 -1
  230. package/docs/design/templates/list-header/inline-action-dark.svg +1 -1
  231. package/docs/design/templates/list-header/inline-action.svg +1 -1
  232. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  233. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  234. package/docs/design/templates/list-header-dark.svg +1 -1
  235. package/docs/design/templates/list-header.svg +1 -1
  236. package/docs/design/templates/list.svg +1 -1
  237. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -1
  238. package/docs/design/templates/state-banner/info-badge.svg +1 -1
  239. package/docs/design/templates/state-banner-dark.svg +1 -1
  240. package/docs/design/templates/state-banner.svg +1 -1
  241. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  242. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  243. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  244. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  245. package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
  246. package/docs/design/templates/toolbar-control-group.svg +1 -1
  247. package/docs/design/templates/toolbar-dark.svg +1 -1
  248. package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
  249. package/docs/design/templates/toolbar-text/default.svg +1 -1
  250. package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
  251. package/docs/design/templates/toolbar-text/large.svg +1 -1
  252. package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
  253. package/docs/design/templates/toolbar-text/small.svg +1 -1
  254. package/docs/design/templates/toolbar-text-dark.svg +1 -1
  255. package/docs/design/templates/toolbar-text.svg +1 -1
  256. package/docs/design/templates/toolbar.svg +1 -1
  257. package/docs/design-philosophy.md +6 -5
  258. package/docs/document-baseline.md +31 -0
  259. package/docs/layout.md +86 -21
  260. package/docs/nav-stack.md +8 -0
  261. package/docs/recipes.md +78 -43
  262. package/docs/split-view.md +8 -0
  263. package/docs/tab-scaffold.md +4 -2
  264. package/docs/type-contracts.md +21 -16
  265. package/docs/ui-analyzer.md +19 -0
  266. package/docs/ui-evaluator.md +17 -0
  267. package/docs/ux-demo.md +8 -8
  268. package/docs/webawesome-theme.md +25 -6
  269. package/docs/workbench.md +20 -1
  270. package/evaluator/index.mjs +73 -8
  271. package/llms.txt +61 -23
  272. package/package.json +12 -3
  273. package/ux-demo/recipes/app-shell.tsx +244 -184
  274. package/ux-demo/recipes/collapsible-sidebar.tsx +175 -116
  275. package/ux-demo/recipes/compact-toolbar.tsx +119 -102
  276. package/ux-demo/recipes/composer-form.tsx +79 -69
  277. package/ux-demo/recipes/list-detail-dialog.tsx +120 -136
  278. package/ux-demo/recipes/list-workspace-states.tsx +85 -79
  279. package/ux-demo/recipes/loaders.ts +5 -2
  280. package/ux-demo/recipes/loading-inspector.tsx +151 -134
  281. package/ux-demo/recipes/navigation-sidebar.tsx +93 -80
  282. package/ux-demo/recipes/navigation-stack.tsx +33 -22
  283. package/ux-demo/recipes/types.ts +14 -0
  284. package/ux-demo/recipes/workspace-header.tsx +73 -57
  285. package/dist/chunk-2TYUFZUC.js.map +0 -1
  286. package/dist/chunk-6NDBE2OK.js.map +0 -1
  287. package/dist/chunk-6WTETUZ6.js.map +0 -1
  288. package/dist/chunk-AQFWBG23.js.map +0 -1
  289. package/dist/chunk-B6JYRX3P.js.map +0 -1
  290. package/dist/chunk-CAB6NQ2T.js.map +0 -1
  291. package/dist/chunk-CK6P5AUK.js.map +0 -1
  292. package/dist/chunk-DAO2VFTT.js.map +0 -1
  293. package/dist/chunk-DYBPI5O2.js.map +0 -1
  294. package/dist/chunk-E34TE2ZI.js.map +0 -1
  295. package/dist/chunk-EYALJQQD.js.map +0 -1
  296. package/dist/chunk-GYGM363P.js.map +0 -1
  297. package/dist/chunk-I45QO2IZ.js.map +0 -1
  298. package/dist/chunk-I4V3UDSA.js.map +0 -1
  299. package/dist/chunk-IU4QUY5I.js.map +0 -1
  300. package/dist/chunk-OGNE3OFT.js.map +0 -1
  301. package/dist/chunk-OGTJNHRG.js.map +0 -1
  302. package/dist/chunk-OL4TC3U2.js.map +0 -1
  303. package/dist/chunk-OMSRSL3B.js.map +0 -1
  304. package/dist/chunk-SOK5EUF7.js.map +0 -1
  305. package/dist/chunk-T7DOWS6T.js.map +0 -1
  306. package/dist/chunk-TIGSG6BX.js.map +0 -1
  307. package/dist/chunk-UDHHKZWO.js.map +0 -1
  308. package/dist/chunk-V6GQKOX2.js.map +0 -1
  309. package/dist/chunk-V6HCTCVD.js.map +0 -1
  310. package/dist/chunk-VXFGMDA7.js.map +0 -1
  311. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  312. package/dist/chunk-WN52USHV.js +0 -115
  313. package/dist/chunk-WN52USHV.js.map +0 -1
  314. package/dist/chunk-WSXUPSID.js.map +0 -1
  315. package/dist/chunk-WVLMZ5SG.js.map +0 -1
  316. package/dist/chunk-XKFRMGMW.js.map +0 -1
  317. package/dist/chunk-Y6LYKFXY.js.map +0 -1
  318. package/dist/chunk-ZPWZIVI6.js.map +0 -1
  319. package/ux-demo/recipes/recipes.css +0 -453
package/dist/catalog.js CHANGED
@@ -1,30 +1,22 @@
1
- import { ToolbarControlGroup } from './chunk-B6JYRX3P.js';
2
- import { Toolbar } from './chunk-VXFGMDA7.js';
3
- import { List } from './chunk-WVLMZ5SG.js';
4
- import { Pane } from './chunk-I4V3UDSA.js';
1
+ import { ToolbarControlGroup, ToolbarActionLink } from './chunk-ZIYOJFZD.js';
2
+ import { Toolbar } from './chunk-MTM43SJO.js';
3
+ import { ListItem } from './chunk-NMGTHYW3.js';
4
+ import { List } from './chunk-S4QRSBFI.js';
5
+ import { ToolbarText } from './chunk-O3RCCSQJ.js';
6
+ import { Pane } from './chunk-7GUQYHKA.js';
5
7
 
6
- import { ListHeader } from './chunk-GYGM363P.js';
7
- import { Text } from './chunk-XKFRMGMW.js';
8
- import { ListItem } from './chunk-I45QO2IZ.js';
9
- import { filterDataAttributes } from './chunk-SRSJO5QE.js';
8
+
9
+ import { ListHeader } from './chunk-KX7DP2GO.js';
10
10
 
11
11
 
12
+ import { filterDataAttributes } from './chunk-SRSJO5QE.js';
12
13
 
13
- import { LucideIcon } from './chunk-W2FK7ZNY.js';
14
14
 
15
- import { PanelLeftClose, Waypoints, ExternalLink, Moon, Sun, PanelLeftOpen } from 'lucide';
15
+
16
+ import { LucideIcon } from './chunk-4R777DUZ.js';
17
+ import { PanelLeftClose, Moon, Sun, PanelLeftOpen, Waypoints, ExternalLink } from 'lucide';
16
18
  import { jsxs, jsx, Fragment } from 'kerfjs/jsx-runtime';
17
19
 
18
- function findEntry(sections, id) {
19
- for (const section of sections) {
20
- for (const entry of section.entries) if (entry.id === id) return entry;
21
- }
22
- return void 0;
23
- }
24
- function catalogEntryTags(tags) {
25
- if (!tags?.length) return void 0;
26
- return /* @__PURE__ */ jsx("span", { class: "kui-catalog__tags", children: tags.map((tag) => /* @__PURE__ */ jsx("span", { class: "kui-catalog__tag", children: tag })) });
27
- }
28
20
  function relatedMenuItems(related, selectAction) {
29
21
  const groups = [];
30
22
  for (const entry of related)
@@ -42,6 +34,353 @@ function relatedMenuItems(related, selectAction) {
42
34
  });
43
35
  return nodes;
44
36
  }
37
+ function CatalogResourceFooter({
38
+ name,
39
+ active,
40
+ resources,
41
+ related,
42
+ status,
43
+ selectAction
44
+ }) {
45
+ return /* @__PURE__ */ jsxs("div", { class: "kui-catalog__footer", children: [
46
+ status ? /* @__PURE__ */ jsx("div", { class: "kui-catalog__status", children: status }) : null,
47
+ /* @__PURE__ */ jsx(
48
+ Toolbar,
49
+ {
50
+ label: `${name} resources`,
51
+ dividerSides: "",
52
+ responsive: "stack",
53
+ responsiveAt: "narrow",
54
+ leading: resources.length > 0 ? /* @__PURE__ */ jsx(
55
+ ToolbarControlGroup,
56
+ {
57
+ label: `${name} resources`,
58
+ content: "mixed",
59
+ size: "compact",
60
+ overflow: "scroll",
61
+ children: resources.map((resource) => /* @__PURE__ */ jsx(
62
+ ToolbarActionLink,
63
+ {
64
+ href: resource.href,
65
+ label: resource.label,
66
+ detail: resource.detail,
67
+ ariaLabel: `${name}: ${resource.label} (opens in new tab)`,
68
+ external: true,
69
+ icon: /* @__PURE__ */ jsx(LucideIcon, { icon: ExternalLink, name: "external-link" })
70
+ }
71
+ ))
72
+ }
73
+ ) : null,
74
+ trailing: related.length > 0 ? /* @__PURE__ */ jsx(
75
+ ToolbarControlGroup,
76
+ {
77
+ single: true,
78
+ content: "mixed",
79
+ nestedDropdown: true,
80
+ menuInset: "compact",
81
+ size: "compact",
82
+ label: "Related entries",
83
+ children: /* @__PURE__ */ jsxs(
84
+ "wa-dropdown",
85
+ {
86
+ placement: "top-end",
87
+ "data-key": `kui-catalog-related-${active}`,
88
+ "data-catalog-related": true,
89
+ "data-morph-skip-children": true,
90
+ children: [
91
+ /* @__PURE__ */ jsxs("wa-button", { slot: "trigger", appearance: "plain", "with-caret": true, children: [
92
+ /* @__PURE__ */ jsx(LucideIcon, { icon: Waypoints, name: "waypoints" }),
93
+ /* @__PURE__ */ jsx("span", { children: "Components" })
94
+ ] }),
95
+ relatedMenuItems(related, selectAction)
96
+ ]
97
+ }
98
+ )
99
+ }
100
+ ) : null
101
+ }
102
+ )
103
+ ] });
104
+ }
105
+ var protectedAttributes = /* @__PURE__ */ new Set(["data-catalog-stage"]);
106
+ function CatalogStage({
107
+ name,
108
+ content,
109
+ geometryOverlay,
110
+ rootAttributes = {}
111
+ }) {
112
+ const safeRootAttributes = filterDataAttributes(
113
+ rootAttributes,
114
+ protectedAttributes
115
+ );
116
+ return /* @__PURE__ */ jsx(
117
+ "section",
118
+ {
119
+ ...safeRootAttributes,
120
+ class: "kui-catalog__stage",
121
+ "data-catalog-stage": true,
122
+ "aria-label": `${name} preview`,
123
+ children: /* @__PURE__ */ jsxs("div", { class: "kui-catalog__canvas", children: [
124
+ content,
125
+ geometryOverlay !== void 0 ? /* @__PURE__ */ jsx(
126
+ "div",
127
+ {
128
+ class: "kui-catalog__geometry-overlay",
129
+ "data-catalog-geometry-overlay": true,
130
+ "data-morph-skip-children": true,
131
+ "aria-hidden": "true"
132
+ }
133
+ ) : null
134
+ ] })
135
+ }
136
+ );
137
+ }
138
+ function CatalogDetail({
139
+ brandTitle,
140
+ active,
141
+ selected,
142
+ content,
143
+ collapsed,
144
+ theme,
145
+ headerActions,
146
+ status,
147
+ geometryOverlay,
148
+ stageRootAttributes,
149
+ selectAction,
150
+ toggleSidebarAction,
151
+ toggleThemeAction
152
+ }) {
153
+ const name = selected?.name ?? "";
154
+ const nextTheme = theme === "dark" ? "light" : "dark";
155
+ return /* @__PURE__ */ jsx("article", { class: "kui-catalog__detail", children: /* @__PURE__ */ jsx(
156
+ Pane,
157
+ {
158
+ contentClassName: "kui-catalog__detail-preview",
159
+ header: /* @__PURE__ */ jsxs("div", { class: "kui-catalog__header", children: [
160
+ /* @__PURE__ */ jsx(
161
+ Toolbar,
162
+ {
163
+ label: `${name} header`,
164
+ dividerSides: "",
165
+ leading: /* @__PURE__ */ jsxs(Fragment, { children: [
166
+ collapsed ? /* @__PURE__ */ jsx(ToolbarControlGroup, { appearance: "borderless", single: true, children: /* @__PURE__ */ jsx(
167
+ "button",
168
+ {
169
+ type: "button",
170
+ "data-action": toggleSidebarAction,
171
+ "aria-label": `Expand ${brandTitle} catalog`,
172
+ children: /* @__PURE__ */ jsx(
173
+ LucideIcon,
174
+ {
175
+ icon: PanelLeftOpen,
176
+ name: "panel-left-open"
177
+ }
178
+ )
179
+ }
180
+ ) }) : null,
181
+ /* @__PURE__ */ jsx(ToolbarText, { text: name, size: "xlarge", headingLevel: 2 })
182
+ ] }),
183
+ trailing: /* @__PURE__ */ jsxs(Fragment, { children: [
184
+ headerActions,
185
+ theme ? /* @__PURE__ */ jsx(
186
+ ToolbarControlGroup,
187
+ {
188
+ appearance: "borderless",
189
+ content: "mixed",
190
+ size: "compact",
191
+ label: "Catalog display",
192
+ children: /* @__PURE__ */ jsxs(
193
+ "button",
194
+ {
195
+ type: "button",
196
+ "data-action": toggleThemeAction,
197
+ "aria-label": `Use ${nextTheme} theme`,
198
+ "data-theme-preview": theme,
199
+ children: [
200
+ nextTheme === "dark" ? /* @__PURE__ */ jsx(LucideIcon, { icon: Moon, name: "moon" }) : /* @__PURE__ */ jsx(LucideIcon, { icon: Sun, name: "sun" }),
201
+ /* @__PURE__ */ jsx("span", { children: nextTheme === "dark" ? "Dark" : "Light" })
202
+ ]
203
+ }
204
+ )
205
+ }
206
+ ) : null
207
+ ] })
208
+ }
209
+ ),
210
+ selected?.description ? /* @__PURE__ */ jsx("p", { class: "kui-catalog__description kui-content-item", children: selected.description }) : null
211
+ ] }),
212
+ footer: /* @__PURE__ */ jsx(
213
+ CatalogResourceFooter,
214
+ {
215
+ name,
216
+ active,
217
+ resources: selected?.resources ?? [],
218
+ related: selected?.related ?? [],
219
+ status,
220
+ selectAction
221
+ }
222
+ ),
223
+ children: /* @__PURE__ */ jsx(
224
+ CatalogStage,
225
+ {
226
+ name,
227
+ content,
228
+ geometryOverlay,
229
+ rootAttributes: stageRootAttributes
230
+ }
231
+ )
232
+ }
233
+ ) });
234
+ }
235
+ function CatalogSecondarySections({
236
+ group,
237
+ active,
238
+ selectAction,
239
+ toggleAction
240
+ }) {
241
+ return /* @__PURE__ */ jsxs("section", { class: "kui-catalog__group--secondary", children: [
242
+ group.collapsible ? /* @__PURE__ */ jsx(
243
+ ListHeader,
244
+ {
245
+ label: group.label,
246
+ toggle: true,
247
+ expanded: Boolean(group.expanded),
248
+ action: toggleAction
249
+ }
250
+ ) : /* @__PURE__ */ jsx(ListHeader, { label: group.label }),
251
+ !group.collapsible || group.expanded ? /* @__PURE__ */ jsx("div", { class: "kui-catalog__secondary", "data-catalog-secondary": true, children: group.sections.map((section) => /* @__PURE__ */ jsxs("section", { class: "kui-catalog__secondary-group", children: [
252
+ /* @__PURE__ */ jsx("h3", { class: "kui-catalog__secondary-heading", children: section.category }),
253
+ /* @__PURE__ */ jsx("div", { class: "kui-catalog__secondary-items", children: /* @__PURE__ */ jsx(List, { gap: "2xs", children: section.entries.map((entry) => /* @__PURE__ */ jsx(
254
+ ListItem,
255
+ {
256
+ action: selectAction,
257
+ itemId: entry.id,
258
+ label: entry.name,
259
+ status: entry.tags?.join(" \xB7 "),
260
+ selected: active === entry.id,
261
+ title: entry.description,
262
+ multiline: true
263
+ }
264
+ )) }) })
265
+ ] })) }) : null
266
+ ] });
267
+ }
268
+ function CatalogSectionList({
269
+ sections,
270
+ active,
271
+ selectAction
272
+ }) {
273
+ return /* @__PURE__ */ jsx("div", { class: "kui-catalog__sections", children: sections.map((section) => /* @__PURE__ */ jsxs("section", { class: "kui-catalog__group", children: [
274
+ /* @__PURE__ */ jsx(ListHeader, { label: section.category }),
275
+ /* @__PURE__ */ jsx("div", { class: "kui-catalog__items", children: /* @__PURE__ */ jsx(List, { gap: "2xs", children: section.entries.map((entry) => /* @__PURE__ */ jsx(
276
+ ListItem,
277
+ {
278
+ action: selectAction,
279
+ itemId: entry.id,
280
+ label: entry.name,
281
+ status: entry.tags?.join(" \xB7 "),
282
+ selected: active === entry.id,
283
+ title: entry.description,
284
+ multiline: true
285
+ }
286
+ )) }) })
287
+ ] })) });
288
+ }
289
+ function CatalogSidebar({
290
+ brand,
291
+ sections,
292
+ active,
293
+ collapsed,
294
+ secondarySections,
295
+ footer,
296
+ selectAction,
297
+ toggleSidebarAction,
298
+ toggleSecondaryAction
299
+ }) {
300
+ return /* @__PURE__ */ jsx(
301
+ "aside",
302
+ {
303
+ class: "kui-catalog__sidebar",
304
+ "aria-label": `${brand.title} catalog`,
305
+ "data-collapsed": String(collapsed),
306
+ children: /* @__PURE__ */ jsx(
307
+ Pane,
308
+ {
309
+ header: /* @__PURE__ */ jsxs("div", { class: "kui-catalog__brand", children: [
310
+ /* @__PURE__ */ jsx(
311
+ Toolbar,
312
+ {
313
+ label: `${brand.title} catalog header`,
314
+ dividerSides: "",
315
+ leading: /* @__PURE__ */ jsxs(Fragment, { children: [
316
+ brand.logoUrl ? /* @__PURE__ */ jsx(ToolbarControlGroup, { appearance: "borderless", single: true, children: /* @__PURE__ */ jsx(
317
+ "img",
318
+ {
319
+ class: "kui-catalog__mark",
320
+ src: brand.logoUrl,
321
+ alt: ""
322
+ }
323
+ ) }) : null,
324
+ /* @__PURE__ */ jsx(
325
+ ToolbarText,
326
+ {
327
+ text: brand.title,
328
+ size: "large",
329
+ headingLevel: 1
330
+ }
331
+ )
332
+ ] }),
333
+ trailing: /* @__PURE__ */ jsx(ToolbarControlGroup, { appearance: "borderless", single: true, children: /* @__PURE__ */ jsx(
334
+ "button",
335
+ {
336
+ type: "button",
337
+ "data-action": toggleSidebarAction,
338
+ "aria-label": `Collapse ${brand.title} catalog`,
339
+ children: /* @__PURE__ */ jsx(LucideIcon, { icon: PanelLeftClose, name: "panel-left-close" })
340
+ }
341
+ ) })
342
+ }
343
+ ),
344
+ brand.subtitle ? /* @__PURE__ */ jsx("p", { class: "kui-catalog__subtitle", children: brand.subtitle }) : null
345
+ ] }),
346
+ children: /* @__PURE__ */ jsxs(
347
+ "nav",
348
+ {
349
+ class: "kui-catalog__navigation",
350
+ "aria-label": `${brand.title} components`,
351
+ children: [
352
+ /* @__PURE__ */ jsx(
353
+ CatalogSectionList,
354
+ {
355
+ sections,
356
+ active,
357
+ selectAction
358
+ }
359
+ ),
360
+ secondarySections ? /* @__PURE__ */ jsx(
361
+ CatalogSecondarySections,
362
+ {
363
+ group: secondarySections,
364
+ active,
365
+ selectAction,
366
+ toggleAction: toggleSecondaryAction
367
+ }
368
+ ) : null,
369
+ footer
370
+ ]
371
+ }
372
+ )
373
+ }
374
+ )
375
+ }
376
+ );
377
+ }
378
+ function findEntry(sections, id) {
379
+ for (const section of sections) {
380
+ for (const entry of section.entries) if (entry.id === id) return entry;
381
+ }
382
+ return void 0;
383
+ }
45
384
  function Catalog({
46
385
  brand,
47
386
  sections,
@@ -54,17 +393,15 @@ function Catalog({
54
393
  sidebarFooter,
55
394
  status,
56
395
  geometryOverlay,
396
+ stageRootAttributes,
57
397
  selectAction = "catalog-select",
58
398
  toggleSidebarAction = "catalog-toggle-sidebar",
59
399
  toggleThemeAction = "catalog-toggle-theme",
60
400
  toggleSecondaryAction = "catalog-toggle-secondary",
61
- className = ""
401
+ className = "",
402
+ slot
62
403
  }) {
63
404
  const selected = findEntry(sections, active) ?? (secondarySections ? findEntry(secondarySections.sections, active) : void 0);
64
- const name = selected?.name ?? "";
65
- const nextTheme = theme === "dark" ? "light" : "dark";
66
- const resources = selected?.resources ?? [];
67
- const related = selected?.related ?? [];
68
405
  return /* @__PURE__ */ jsxs(
69
406
  "main",
70
407
  {
@@ -72,249 +409,45 @@ function Catalog({
72
409
  "data-component": "catalog",
73
410
  "data-sidebar-collapsed": String(collapsed),
74
411
  "data-geometry-overlay": geometryOverlay === void 0 ? void 0 : String(geometryOverlay),
412
+ slot,
75
413
  children: [
76
414
  /* @__PURE__ */ jsx(
77
- Pane,
415
+ CatalogSidebar,
78
416
  {
79
- element: "aside",
80
- className: "kui-catalog__sidebar",
81
- label: `${brand.title} catalog`,
82
- contentElement: "nav",
83
- contentLabel: `${brand.title} components`,
84
- separators: ["inline-end"],
85
- headerClassName: "kui-catalog__brand",
86
- header: /* @__PURE__ */ jsxs(Fragment, { children: [
87
- /* @__PURE__ */ jsx(
88
- Toolbar,
89
- {
90
- label: `${brand.title} catalog header`,
91
- dividerSides: "",
92
- leading: /* @__PURE__ */ jsxs(
93
- ToolbarControlGroup,
94
- {
95
- appearance: "borderless",
96
- className: "kui-catalog__identity",
97
- children: [
98
- brand.logoUrl ? /* @__PURE__ */ jsx("img", { class: "kui-catalog__mark", src: brand.logoUrl, alt: "" }) : /* @__PURE__ */ jsx(Fragment, {}),
99
- /* @__PURE__ */ jsx(Text, { variant: "h1", children: brand.title })
100
- ]
101
- }
102
- ),
103
- trailing: /* @__PURE__ */ jsx(ToolbarControlGroup, { appearance: "borderless", single: true, children: /* @__PURE__ */ jsx(
104
- "button",
105
- {
106
- type: "button",
107
- "data-action": toggleSidebarAction,
108
- "aria-label": `Collapse ${brand.title} catalog`,
109
- children: /* @__PURE__ */ jsx(LucideIcon, { icon: PanelLeftClose, name: "panel-left-close" })
110
- }
111
- ) })
112
- }
113
- ),
114
- brand.subtitle ? /* @__PURE__ */ jsx(Text, { class: "kui-catalog__subtitle", children: brand.subtitle }) : /* @__PURE__ */ jsx(Fragment, {})
115
- ] }),
116
- children: /* @__PURE__ */ jsxs(Fragment, { children: [
117
- sections.map((section) => /* @__PURE__ */ jsxs("section", { class: "kui-catalog__group", children: [
118
- /* @__PURE__ */ jsx(ListHeader, { label: section.category }),
119
- /* @__PURE__ */ jsx(List, { className: "kui-catalog__items", children: section.entries.map((entry) => /* @__PURE__ */ jsx(
120
- ListItem,
121
- {
122
- action: selectAction,
123
- itemId: entry.id,
124
- label: entry.name,
125
- trailing: catalogEntryTags(entry.tags),
126
- selected: active === entry.id,
127
- title: entry.description,
128
- multiline: true
129
- }
130
- )) })
131
- ] })),
132
- secondarySections ? /* @__PURE__ */ jsxs("section", { class: "kui-catalog__group kui-catalog__group--secondary", children: [
133
- secondarySections.collapsible ? /* @__PURE__ */ jsx(
134
- ListHeader,
135
- {
136
- label: secondarySections.label,
137
- toggle: true,
138
- expanded: Boolean(secondarySections.expanded),
139
- action: toggleSecondaryAction
140
- }
141
- ) : /* @__PURE__ */ jsx(ListHeader, { label: secondarySections.label }),
142
- !secondarySections.collapsible || secondarySections.expanded ? /* @__PURE__ */ jsx("div", { class: "kui-catalog__secondary", "data-catalog-secondary": true, children: secondarySections.sections.map((section) => /* @__PURE__ */ jsxs("section", { class: "kui-catalog__secondary-group", children: [
143
- /* @__PURE__ */ jsx(Text, { variant: "h3", class: "kui-catalog__secondary-heading", children: section.category }),
144
- /* @__PURE__ */ jsx(List, { className: "kui-catalog__items", children: section.entries.map((entry) => /* @__PURE__ */ jsx(
145
- ListItem,
146
- {
147
- action: selectAction,
148
- itemId: entry.id,
149
- label: entry.name,
150
- trailing: catalogEntryTags(entry.tags),
151
- selected: active === entry.id,
152
- title: entry.description,
153
- multiline: true
154
- }
155
- )) })
156
- ] })) }) : /* @__PURE__ */ jsx(Fragment, {})
157
- ] }) : /* @__PURE__ */ jsx(Fragment, {}),
158
- sidebarFooter ?? /* @__PURE__ */ jsx(Fragment, {})
159
- ] })
417
+ brand,
418
+ sections,
419
+ active,
420
+ collapsed,
421
+ secondarySections,
422
+ footer: sidebarFooter,
423
+ selectAction,
424
+ toggleSidebarAction,
425
+ toggleSecondaryAction
160
426
  }
161
427
  ),
162
428
  /* @__PURE__ */ jsx(
163
- Pane,
429
+ CatalogDetail,
164
430
  {
165
- element: "article",
166
- className: "kui-catalog__detail",
167
- contentElement: "section",
168
- contentLabel: `${name} preview`,
169
- contentClassName: "kui-catalog__stage",
170
- headerClassName: "kui-catalog__header",
171
- header: /* @__PURE__ */ jsxs(Fragment, { children: [
172
- /* @__PURE__ */ jsx(
173
- Toolbar,
174
- {
175
- label: `${name} header`,
176
- dividerSides: "",
177
- leading: /* @__PURE__ */ jsxs(Fragment, { children: [
178
- collapsed ? /* @__PURE__ */ jsx(ToolbarControlGroup, { appearance: "borderless", single: true, children: /* @__PURE__ */ jsx(
179
- "button",
180
- {
181
- type: "button",
182
- "data-action": toggleSidebarAction,
183
- "aria-label": `Expand ${brand.title} catalog`,
184
- children: /* @__PURE__ */ jsx(
185
- LucideIcon,
186
- {
187
- icon: PanelLeftOpen,
188
- name: "panel-left-open"
189
- }
190
- )
191
- }
192
- ) }) : /* @__PURE__ */ jsx(Fragment, {}),
193
- /* @__PURE__ */ jsx(
194
- ToolbarControlGroup,
195
- {
196
- appearance: "borderless",
197
- className: "kui-catalog__title",
198
- children: /* @__PURE__ */ jsx(Text, { variant: "h2", children: name })
199
- }
200
- )
201
- ] }),
202
- trailing: /* @__PURE__ */ jsxs("div", { class: "kui-catalog__header-actions", children: [
203
- headerActions,
204
- theme ? /* @__PURE__ */ jsx(
205
- ToolbarControlGroup,
206
- {
207
- className: "kui-catalog__settings",
208
- label: "Catalog display",
209
- children: /* @__PURE__ */ jsxs(
210
- "button",
211
- {
212
- type: "button",
213
- "data-action": toggleThemeAction,
214
- "aria-label": `Use ${nextTheme} theme`,
215
- "data-theme-preview": theme,
216
- children: [
217
- nextTheme === "dark" ? /* @__PURE__ */ jsx(LucideIcon, { icon: Moon, name: "moon" }) : /* @__PURE__ */ jsx(LucideIcon, { icon: Sun, name: "sun" }),
218
- /* @__PURE__ */ jsx("span", { children: nextTheme === "dark" ? "Dark" : "Light" })
219
- ]
220
- }
221
- )
222
- }
223
- ) : /* @__PURE__ */ jsx(Fragment, {})
224
- ] })
225
- }
226
- ),
227
- selected?.description ? /* @__PURE__ */ jsx(Text, { class: "kui-catalog__description kui-content-item", children: selected.description }) : /* @__PURE__ */ jsx(Fragment, {})
228
- ] }),
229
- footerClassName: "kui-catalog__footer",
230
- footer: /* @__PURE__ */ jsxs(Fragment, { children: [
231
- status ? /* @__PURE__ */ jsx("div", { class: "kui-catalog__status", children: status }) : /* @__PURE__ */ jsx(Fragment, {}),
232
- /* @__PURE__ */ jsx(
233
- Toolbar,
234
- {
235
- label: `${name} resources`,
236
- dividerSides: "",
237
- leading: resources.length > 0 ? /* @__PURE__ */ jsx(
238
- "nav",
239
- {
240
- class: "kui-catalog__resources",
241
- "aria-label": `${name} resources`,
242
- children: /* @__PURE__ */ jsx(
243
- ToolbarControlGroup,
244
- {
245
- className: "kui-catalog__resource-group",
246
- label: `${name} resources`,
247
- children: resources.map((resource) => /* @__PURE__ */ jsxs(
248
- "a",
249
- {
250
- class: "kui-catalog__resource",
251
- href: resource.href,
252
- target: "_blank",
253
- rel: "noopener noreferrer",
254
- "aria-label": `${name}: ${resource.label} (opens in new tab)`,
255
- children: [
256
- /* @__PURE__ */ jsx(
257
- LucideIcon,
258
- {
259
- icon: ExternalLink,
260
- name: "external-link"
261
- }
262
- ),
263
- /* @__PURE__ */ jsx("span", { children: resource.label }),
264
- resource.detail ? /* @__PURE__ */ jsx("code", { children: resource.detail }) : /* @__PURE__ */ jsx(Fragment, {})
265
- ]
266
- }
267
- ))
268
- }
269
- )
270
- }
271
- ) : /* @__PURE__ */ jsx(Fragment, {}),
272
- trailing: related.length > 0 ? /* @__PURE__ */ jsx("div", { class: "kui-catalog__related", "data-catalog-related": true, children: /* @__PURE__ */ jsx(
273
- ToolbarControlGroup,
274
- {
275
- single: true,
276
- className: "kui-catalog__related-group",
277
- label: "Related entries",
278
- children: /* @__PURE__ */ jsxs(
279
- "wa-dropdown",
280
- {
281
- class: "kui-catalog__related-menu",
282
- placement: "top-end",
283
- "data-key": `kui-catalog-related-${active}`,
284
- "data-morph-skip-children": true,
285
- children: [
286
- /* @__PURE__ */ jsx("wa-button", { slot: "trigger", appearance: "plain", "with-caret": true, children: /* @__PURE__ */ jsxs("span", { class: "kui-catalog__related-trigger", children: [
287
- /* @__PURE__ */ jsx(LucideIcon, { icon: Waypoints, name: "waypoints" }),
288
- /* @__PURE__ */ jsx("span", { class: "kui-catalog__related-label", children: "Components" })
289
- ] }) }),
290
- relatedMenuItems(related, selectAction)
291
- ]
292
- }
293
- )
294
- }
295
- ) }) : /* @__PURE__ */ jsx(Fragment, {})
296
- }
297
- )
298
- ] }),
299
- children: /* @__PURE__ */ jsxs("div", { class: "kui-catalog__canvas", children: [
300
- content,
301
- geometryOverlay !== void 0 ? /* @__PURE__ */ jsx(
302
- "div",
303
- {
304
- class: "kui-catalog__geometry-overlay",
305
- "data-catalog-geometry-overlay": true,
306
- "data-morph-skip-children": true,
307
- "aria-hidden": "true"
308
- }
309
- ) : /* @__PURE__ */ jsx(Fragment, {})
310
- ] })
431
+ brandTitle: brand.title,
432
+ active,
433
+ selected,
434
+ content,
435
+ collapsed,
436
+ theme,
437
+ headerActions,
438
+ status,
439
+ geometryOverlay,
440
+ stageRootAttributes,
441
+ selectAction,
442
+ toggleSidebarAction,
443
+ toggleThemeAction
311
444
  }
312
445
  )
313
446
  ]
314
447
  }
315
448
  );
316
449
  }
317
- var catalogExampleProtectedAttributes = /* @__PURE__ */ new Set([
450
+ var protectedAttributes2 = /* @__PURE__ */ new Set([
318
451
  "data-catalog-example",
319
452
  "data-catalog-example-stack",
320
453
  "data-catalog-example-label",
@@ -325,14 +458,36 @@ function CatalogExample({
325
458
  label,
326
459
  note,
327
460
  align = "none",
461
+ viewport,
462
+ compactFallback,
328
463
  rootAttributes = {},
329
464
  className = "",
330
- children
465
+ children,
466
+ slot
331
467
  }) {
332
468
  const safeRootAttributes = filterDataAttributes(
333
469
  rootAttributes,
334
- catalogExampleProtectedAttributes
470
+ protectedAttributes2
335
471
  );
472
+ const viewportStyle = viewport?.tokens ? Object.entries(viewport.tokens).map(([name, value]) => `${name}:${value}`).join(";") : void 0;
473
+ const specimen = viewport ? /* @__PURE__ */ jsx(
474
+ "div",
475
+ {
476
+ class: "kui-catalog-example__viewport",
477
+ "data-catalog-example-viewport": true,
478
+ "data-layout": viewport.layout,
479
+ "data-width": viewport.width,
480
+ "data-height": viewport.height,
481
+ "data-min-height": viewport.minHeight,
482
+ "data-frame": viewport.frame,
483
+ "data-surface": viewport.surface,
484
+ "data-overflow": viewport.overflow,
485
+ "data-responsive": viewport.responsive,
486
+ "data-shadow": viewport.shadow ? "true" : void 0,
487
+ style: viewportStyle,
488
+ children
489
+ }
490
+ ) : children;
336
491
  return /* @__PURE__ */ jsxs(
337
492
  "section",
338
493
  {
@@ -340,29 +495,40 @@ function CatalogExample({
340
495
  class: `kui-catalog-example ${className}`.trim(),
341
496
  "data-catalog-example": true,
342
497
  "data-align": align,
498
+ slot,
343
499
  children: [
344
500
  label !== void 0 ? /* @__PURE__ */ jsx(
345
501
  ListHeader,
346
502
  {
347
503
  label,
504
+ width: "content",
348
505
  rootAttributes: { "data-catalog-example-label": "" }
349
506
  }
350
- ) : /* @__PURE__ */ jsx(Fragment, {}),
351
- note !== void 0 ? /* @__PURE__ */ jsx(Text, { class: "kui-catalog-example__note", "data-catalog-example-note": true, children: note }) : null,
352
- children
507
+ ) : null,
508
+ note !== void 0 ? /* @__PURE__ */ jsx("p", { class: "kui-catalog-example__note", "data-catalog-example-note": true, children: note }) : null,
509
+ compactFallback !== void 0 ? /* @__PURE__ */ jsx("p", { class: "kui-catalog-example__compact-fallback", children: compactFallback }) : null,
510
+ specimen
353
511
  ]
354
512
  }
355
513
  );
356
514
  }
515
+ var protectedAttributes3 = /* @__PURE__ */ new Set([
516
+ "data-catalog-example",
517
+ "data-catalog-example-stack",
518
+ "data-catalog-example-label",
519
+ "data-catalog-example-note",
520
+ "data-align"
521
+ ]);
357
522
  function CatalogExampleStack({
358
523
  label,
359
524
  rootAttributes = {},
360
525
  className = "",
361
- children
526
+ children,
527
+ slot
362
528
  }) {
363
529
  const safeRootAttributes = filterDataAttributes(
364
530
  rootAttributes,
365
- catalogExampleProtectedAttributes
531
+ protectedAttributes3
366
532
  );
367
533
  return /* @__PURE__ */ jsx(
368
534
  "section",
@@ -371,6 +537,7 @@ function CatalogExampleStack({
371
537
  class: `kui-catalog-example-stack ${className}`.trim(),
372
538
  "data-catalog-example-stack": true,
373
539
  "aria-label": label,
540
+ slot,
374
541
  children
375
542
  }
376
543
  );