@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
@@ -1,6 +1,6 @@
1
- import { NavStack } from './chunk-AQFWBG23.js';
1
+ import { NavStack } from './chunk-5PMGQDG7.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-JM53SMVF.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,9 @@
1
+ .kui-catalog-example-stack {
2
+ display: flex;
3
+ width: 100%;
4
+ min-width: 0;
5
+ max-width: 46rem;
6
+ box-sizing: border-box;
7
+ flex-direction: column;
8
+ gap: 1rem;
9
+ }
@@ -0,0 +1,180 @@
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
+ .kui-catalog-example__viewport {
25
+ position: relative;
26
+ max-width: 100%;
27
+ box-sizing: border-box;
28
+ }
29
+
30
+ .kui-catalog-example__viewport > * {
31
+ max-width: 100%;
32
+ box-sizing: border-box;
33
+ }
34
+
35
+ .kui-catalog-example__viewport[data-layout="grid"] {
36
+ display: grid;
37
+ }
38
+
39
+ .kui-catalog-example__viewport[data-layout="flex"] {
40
+ display: flex;
41
+ }
42
+
43
+ .kui-catalog-example__viewport[data-layout="flex-column"] {
44
+ display: flex;
45
+ flex-direction: column;
46
+ }
47
+
48
+ .kui-catalog-example__viewport[data-width="full"] {
49
+ width: 100%;
50
+ }
51
+
52
+ .kui-catalog-example__viewport[data-width="compact"] {
53
+ width: min(100%, 27.5rem);
54
+ }
55
+
56
+ .kui-catalog-example__viewport[data-width="medium"] {
57
+ width: min(100%, 40rem);
58
+ }
59
+
60
+ .kui-catalog-example__viewport[data-width="wide"] {
61
+ width: 100%;
62
+ max-width: 54rem;
63
+ }
64
+
65
+ .kui-catalog-example__viewport[data-width="text"] {
66
+ width: 17.5rem;
67
+ }
68
+
69
+ .kui-catalog-example__viewport[data-width="control"] {
70
+ min-width: min(24rem, 100%);
71
+ }
72
+
73
+ .kui-catalog-example__viewport[data-height="short"] {
74
+ height: 13.75rem;
75
+ }
76
+
77
+ .kui-catalog-example__viewport[data-height="reduced"] {
78
+ height: 17.5rem;
79
+ }
80
+
81
+ .kui-catalog-example__viewport[data-height="medium"] {
82
+ height: 20rem;
83
+ }
84
+
85
+ .kui-catalog-example__viewport[data-height="tall"] {
86
+ height: 22.5rem;
87
+ }
88
+
89
+ /* An application-sized frame for app shells and whole-screen layouts, which
90
+ read cramped in the component-sized heights above. The frame stands in for
91
+ the screen, so it is the containing block for screen-fixed chrome: a compact
92
+ CollapsiblePanel overlay, its backdrop, and restore controls dock to the
93
+ frame's edges instead of the page's, where the frame's inset and clip would
94
+ cut them off. An identity transform establishes that containing block.
95
+ `contain: layout` does too, but WebKit then mis-hit-tests any transformed
96
+ descendant of that fixed chrome once the frame also clips (every pressed
97
+ ListItem scales), so taps on an open overlay's items were lost. */
98
+ .kui-catalog-example__viewport[data-height="app"] {
99
+ height: 37rem;
100
+ transform: translate(0);
101
+ }
102
+
103
+ .kui-catalog-example__viewport[data-min-height="short"] {
104
+ min-height: 16rem;
105
+ }
106
+
107
+ .kui-catalog-example__viewport[data-min-height="medium"] {
108
+ min-height: 20rem;
109
+ }
110
+
111
+ .kui-catalog-example__viewport[data-frame] {
112
+ border: 1px solid var(--kui-color-border);
113
+ border-radius: var(--kui-radius-m);
114
+ }
115
+
116
+ .kui-catalog-example__viewport[data-frame="dashed"] {
117
+ border-style: dashed;
118
+ }
119
+
120
+ .kui-catalog-example__viewport[data-surface="default"] {
121
+ background: var(--kui-color-surface);
122
+ }
123
+
124
+ .kui-catalog-example__viewport[data-surface="lowered"] {
125
+ background: var(--kui-color-surface-lowered);
126
+ }
127
+
128
+ .kui-catalog-example__viewport[data-overflow="hidden"] {
129
+ overflow: hidden;
130
+ }
131
+
132
+ .kui-catalog-example__viewport[data-overflow="auto-x"] {
133
+ overflow-x: auto;
134
+ }
135
+
136
+ .kui-catalog-example__viewport[data-shadow="true"] {
137
+ box-shadow: var(--kui-shadow-s);
138
+ }
139
+
140
+ .kui-catalog-example__compact-fallback {
141
+ display: none;
142
+ margin: 0;
143
+ color: var(--kui-color-text-quiet);
144
+ font-size: var(--kui-font-s);
145
+ }
146
+
147
+ @media ((max-width: 52rem)) {
148
+ .kui-catalog-example__viewport[data-responsive="roomy-only"] {
149
+ display: none;
150
+ }
151
+
152
+ .kui-catalog-example__compact-fallback {
153
+ display: block;
154
+ }
155
+ }
156
+
157
+ @media ((max-width: 30rem)) {
158
+ .kui-catalog-example__viewport[data-min-height="medium"] {
159
+ min-height: 16rem;
160
+ }
161
+ }
162
+
163
+ @media ((forced-colors: active)) {
164
+ .kui-catalog-example__viewport[data-frame] {
165
+ forced-color-adjust: auto;
166
+ }
167
+ }
168
+
169
+ /* The published inset lets the geometry overlay exclude this authoring aid. */
170
+ .kui-catalog-example[data-align="glyph"]
171
+ > :not([data-catalog-example-label]):not([data-catalog-example-note]) {
172
+ --kui-catalog-example-align: 1rem;
173
+ margin-inline-start: var(--kui-catalog-example-align);
174
+ }
175
+
176
+ .kui-catalog-example[data-align="inline-control"]
177
+ > :not([data-catalog-example-label]):not([data-catalog-example-note]) {
178
+ --kui-catalog-example-align: 0.5rem;
179
+ margin-inline-start: var(--kui-catalog-example-align);
180
+ }
@@ -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
+ }
@@ -0,0 +1,22 @@
1
+ .kui-catalog__group {
2
+ margin-block-start: var(--kui-space-m);
3
+ }
4
+
5
+ .kui-catalog__group:first-child {
6
+ margin-block-start: var(--kui-space-2xs);
7
+ }
8
+
9
+ .kui-catalog__items {
10
+ min-width: 0;
11
+ }
12
+
13
+ @media (max-width: 52rem) {
14
+ .kui-catalog__group,
15
+ .kui-catalog__group:first-child {
16
+ min-width: 0;
17
+ margin: 0;
18
+ }
19
+ }
20
+ .kui-catalog__sections {
21
+ display: contents;
22
+ }
@@ -0,0 +1,82 @@
1
+ .kui-catalog__sidebar {
2
+ display: grid;
3
+ width: var(--kui-catalog-sidebar-width);
4
+ min-width: var(--kui-catalog-sidebar-width);
5
+ height: 100%;
6
+ padding: 0;
7
+ overflow: hidden;
8
+ justify-self: start;
9
+ box-sizing: border-box;
10
+ border: 0 solid var(--kui-pane-separator-color, var(--kui-color-border));
11
+ border-inline-end-width: var(--kui-pane-separator-width, 1px);
12
+ background: var(--kui-color-surface);
13
+ transition:
14
+ transform 200ms ease,
15
+ visibility 0s linear 0s;
16
+ }
17
+
18
+ .kui-catalog__brand {
19
+ display: flex;
20
+ min-width: 0;
21
+ flex-direction: column;
22
+ }
23
+
24
+ .kui-catalog__sidebar[data-collapsed="true"] {
25
+ transform: translateX(-100%);
26
+ visibility: hidden;
27
+ transition:
28
+ transform 200ms ease,
29
+ visibility 0s linear 200ms;
30
+ }
31
+
32
+ .kui-catalog__mark {
33
+ display: block;
34
+ width: 2.125rem;
35
+ height: 2.125rem;
36
+ flex: 0 0 auto;
37
+ }
38
+
39
+ .kui-catalog__subtitle {
40
+ margin: 0;
41
+ padding: var(--kui-layout-item-padding, 0.5rem);
42
+ box-sizing: border-box;
43
+ border: 1px solid transparent;
44
+ color: var(--kui-color-text-quiet);
45
+ font-size: var(--kui-font-xs);
46
+ }
47
+
48
+ .kui-catalog__navigation {
49
+ display: flex;
50
+ min-width: 0;
51
+ flex-direction: column;
52
+ gap: var(--kui-layout-content-gap, 1.5rem);
53
+ }
54
+
55
+ @media (max-width: 52rem) {
56
+ .kui-catalog__sidebar[data-collapsed="true"] {
57
+ display: none;
58
+ }
59
+
60
+ .kui-catalog__sidebar {
61
+ width: 100%;
62
+ min-width: 0;
63
+ height: auto;
64
+ justify-self: stretch;
65
+ border-block-end-width: var(--kui-pane-separator-width, 1px);
66
+ border-inline-end-width: 0;
67
+ transform: none;
68
+ }
69
+
70
+ .kui-catalog__navigation {
71
+ display: grid;
72
+ grid-template-columns: repeat(2, minmax(0, 1fr));
73
+ align-items: start;
74
+ gap: 0.5rem 1rem;
75
+ }
76
+ }
77
+
78
+ @media (prefers-reduced-motion: reduce) {
79
+ .kui-catalog__sidebar {
80
+ transition-duration: 0s;
81
+ }
82
+ }
@@ -0,0 +1,60 @@
1
+ .kui-catalog__stage {
2
+ width: 100%;
3
+ min-height: 0;
4
+ flex: 1 0 auto;
5
+ }
6
+
7
+ .kui-catalog__canvas {
8
+ position: relative;
9
+ display: grid;
10
+ width: min(100%, var(--kui-catalog-content-measure, 70rem));
11
+ min-width: 0;
12
+ min-height: 100%;
13
+ margin-inline: auto;
14
+ padding: var(--kui-layout-content-gap);
15
+ box-sizing: border-box;
16
+ place-items: center;
17
+ }
18
+
19
+ /* `wireCatalogGeometryOverlay` appends the bound, border, and margin layers. */
20
+ /* css-ownership: allow-root kui-catalog__geometry-bound -- The catalog wire appends measured specimen bound layers at runtime. */
21
+ /* css-ownership: allow-root kui-catalog__geometry-border -- The catalog wire appends computed border layers at runtime. */
22
+ /* css-ownership: allow-root kui-catalog__geometry-margin -- The catalog wire appends computed margin layers at runtime. */
23
+ .kui-catalog__geometry-overlay {
24
+ position: absolute;
25
+ z-index: 3;
26
+ pointer-events: none;
27
+ inset: 0;
28
+ }
29
+
30
+ .kui-catalog__geometry-bound,
31
+ .kui-catalog__geometry-border,
32
+ .kui-catalog__geometry-margin {
33
+ position: absolute;
34
+ top: 0;
35
+ left: 0;
36
+ box-sizing: border-box;
37
+ }
38
+
39
+ .kui-catalog__geometry-bound {
40
+ border: 1px dashed color-mix(in srgb, var(--kui-color-text) 40%, transparent);
41
+ }
42
+
43
+ .kui-catalog__geometry-border {
44
+ border: 0 solid
45
+ color-mix(in srgb, var(--kui-color-accent-text) 72%, transparent);
46
+ }
47
+
48
+ .kui-catalog__geometry-margin {
49
+ background: color-mix(in srgb, #f6a94c 55%, transparent);
50
+ }
51
+
52
+ @media (max-width: 52rem) {
53
+ .kui-catalog__stage {
54
+ min-height: 24rem;
55
+ }
56
+
57
+ .kui-catalog__canvas {
58
+ min-height: 16rem;
59
+ }
60
+ }
@@ -0,0 +1,22 @@
1
+ .kui-catalog {
2
+ --kui-catalog-sidebar-width: 18rem;
3
+ --kui-catalog-content-measure: 70rem;
4
+
5
+ display: grid;
6
+ height: 100vh;
7
+ grid-template-columns: var(--kui-catalog-sidebar-width) minmax(0, 1fr);
8
+ overflow: hidden;
9
+ }
10
+
11
+ .kui-catalog[data-sidebar-collapsed="true"] {
12
+ grid-template-columns: 0 minmax(0, 1fr);
13
+ }
14
+
15
+ @media (max-width: 52rem) {
16
+ .kui-catalog,
17
+ .kui-catalog[data-sidebar-collapsed="true"] {
18
+ height: auto;
19
+ min-height: 100vh;
20
+ grid-template-columns: 1fr;
21
+ }
22
+ }