@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,587 +1,10 @@
1
- .kui-catalog {
2
- /* Collapsing the sidebar changes its grid column, which reflows the detail
3
- pane. Animating that width relayouts the whole shell per frame, so the column
4
- snaps instantly (one reflow) and the fixed-width sidebar slides via transform
5
- only (composited, clipped by this shell's overflow). */
6
- --kui-catalog-sidebar-width: 18rem;
7
- --kui-catalog-content-measure: 70rem;
8
-
9
- display: grid;
10
- height: 100vh;
11
- grid-template-columns: var(--kui-catalog-sidebar-width) minmax(0, 1fr);
12
- overflow: hidden;
13
- }
14
-
15
- .kui-catalog[data-sidebar-collapsed="true"] {
16
- grid-template-columns: 0 minmax(0, 1fr);
17
- }
18
-
19
- .kui-catalog__sidebar {
20
- width: var(--kui-catalog-sidebar-width);
21
- min-width: var(--kui-catalog-sidebar-width);
22
- height: 100%;
23
- padding: 0;
24
- overflow: hidden;
25
- justify-self: start;
26
- background: var(--kui-color-surface);
27
- transition:
28
- transform 200ms ease,
29
- visibility 0s linear 0s;
30
- }
31
-
32
- .kui-catalog[data-sidebar-collapsed="true"] .kui-catalog__sidebar.kui-pane {
33
- --kui-pane-separator-inline-end-width: 0;
34
- /* Slide out first, then hide, so the panel animates offscreen and only then
35
- leaves the tab order rather than snapping invisible mid-slide. */
36
- transform: translateX(-100%);
37
- visibility: hidden;
38
- transition:
39
- transform 200ms ease,
40
- visibility 0s linear 200ms;
41
- }
42
-
43
- .kui-catalog__brand .kui-toolbar {
44
- padding: var(--kui-space-xs);
45
- }
46
-
47
- /* Scoped to the brand so it outranks the ToolbarControlGroup's own gap rule; a
48
- single-class selector would lose that specificity and drop the logo→title gap,
49
- which then misaligns the subtitle (whose padding assumes the gap is present). */
50
- .kui-catalog__brand .kui-catalog__identity {
51
- min-width: 0;
52
- gap: var(--kui-layout-control-gap, 0.5rem);
53
- }
54
-
55
- .kui-catalog__identity h1,
56
- .kui-catalog__subtitle.kui-text {
57
- margin: 0;
58
- }
59
-
60
- .kui-catalog__identity h1 {
61
- padding: 0;
62
- border: 0;
63
- overflow: hidden;
64
- font-size: var(--kui-font-m);
65
- letter-spacing: 0.07em;
66
- line-height: 1.15;
67
- text-overflow: ellipsis;
68
- text-transform: uppercase;
69
- white-space: nowrap;
70
- }
71
-
72
- .kui-catalog__subtitle.kui-text {
73
- overflow: hidden;
74
- border: 0;
75
- margin-block-start: calc(-1 * var(--kui-space-xs));
76
- padding-block-end: var(--kui-space-xs);
77
- padding-inline: calc(
78
- var(--kui-space-xs) + 0.125rem + 2.125rem +
79
- var(--kui-layout-control-gap, 0.5rem)
80
- )
81
- var(--kui-space-xs);
82
- color: var(--kui-color-text-quiet);
83
- font-size: var(--kui-font-xs);
84
- text-overflow: ellipsis;
85
- white-space: nowrap;
86
- }
87
-
88
- .kui-catalog__mark {
89
- display: block;
90
- width: 2.125rem;
91
- height: 2.125rem;
92
- flex: 0 0 auto;
93
- }
94
-
95
- .kui-catalog__group {
96
- margin-block-start: var(--kui-space-m);
97
- }
98
-
99
- .kui-catalog__group:first-child {
100
- margin-block-start: var(--kui-space-2xs);
101
- }
102
-
103
- .kui-catalog__items {
104
- display: grid;
105
- gap: var(--kui-space-2xs);
106
- }
107
-
108
- .kui-catalog__items .kui-list-item {
109
- grid-template-columns: minmax(0, 1fr) auto;
110
- }
111
-
112
- .kui-catalog__tags {
113
- display: inline-flex;
114
- min-width: 0;
115
- flex-wrap: wrap;
116
- justify-content: flex-end;
117
- gap: var(--kui-space-2xs);
118
- }
119
-
120
- .kui-catalog__tag {
121
- display: inline-flex;
122
- padding: 0.125rem 0.375rem;
123
- border: 1px solid var(--kui-color-warning-border-quiet);
124
- border-radius: 999px;
125
- color: var(--kui-color-warning-text);
126
- background: var(--kui-color-warning);
127
- font-size: var(--kui-font-2xs);
128
- font-weight: 650;
129
- line-height: 1.2;
130
- white-space: nowrap;
131
- }
132
-
133
- .kui-catalog__group--secondary {
134
- padding-block-start: var(--kui-space-s);
135
- border-block-start: 1px solid var(--kui-color-border-quiet);
136
- }
137
-
138
- .kui-catalog__secondary {
139
- display: grid;
140
- padding-block: var(--kui-space-xs);
141
- gap: var(--kui-space-s);
142
- }
143
-
144
- .kui-catalog__secondary-group {
145
- display: grid;
146
- min-width: 0;
147
- gap: var(--kui-space-2xs);
148
- }
149
-
150
- .kui-catalog__secondary-heading {
151
- /* Match the content inset the list items and the group's ListHeader self-apply
152
- (8px inline margin), so the subsection heading, its items, and the "Web
153
- Awesome" group heading all share one left edge instead of the heading sitting
154
- further left and its items further right. */
155
- margin: 0 0.5rem;
156
- padding: 0.1rem 0.55rem;
157
- color: var(--kui-color-text-quiet);
158
- font-size: var(--kui-font-2xs);
159
- font-weight: 650;
160
- letter-spacing: 0.04em;
161
- text-transform: uppercase;
162
- }
163
-
164
- /* Labeled, aligned preview examples (CatalogExample / CatalogExampleStack). */
165
- .kui-catalog-example-stack {
166
- display: flex;
167
- flex-direction: column;
168
- gap: 1rem;
169
- }
170
-
171
- .kui-catalog-example {
172
- display: flex;
173
- width: 100%;
174
- min-width: 0;
175
- max-width: 100%;
176
- flex-direction: column;
177
- align-items: flex-start;
178
- gap: 0.5rem;
179
- }
180
-
181
- /* A ListHeader used as an example label shrinks to its title; one that is itself
182
- the demoed specimen keeps its default full width. */
183
- .kui-catalog-example > .kui-list-header:first-child {
184
- width: auto;
185
- }
186
-
187
- .kui-catalog-example__note.kui-text {
188
- /* Align the note text with the label above and a content-item specimen below:
189
- all land at 8px margin + 1px border + 8px padding from the example's edge.
190
- Include Text's public class so this component-owned inset wins even when a
191
- subpath bundler emits text.css after catalog.css. */
192
- margin: 0;
193
- padding-inline: calc(
194
- var(--kui-layout-inline-margin, 0.5rem) +
195
- var(--kui-layout-item-padding, 0.5rem)
196
- );
197
- color: var(--kui-color-text-quiet);
198
- font-size: var(--kui-font-s);
199
- }
200
-
201
- /* The inset is published as --kui-catalog-example-align and applied as the
202
- specimen's leading margin, so a debug overlay can exclude it from the measured
203
- margin and never paint the alignment device as intrinsic geometry. */
204
- .kui-catalog-example[data-align="glyph"]
205
- > :not(.kui-list-header):not(.kui-catalog-example__note) {
206
- --kui-catalog-example-align: 1rem;
207
- margin-inline-start: var(--kui-catalog-example-align);
208
- }
209
-
210
- .kui-catalog-example[data-align="inline-control"]
211
- > :not(.kui-list-header):not(.kui-catalog-example__note) {
212
- --kui-catalog-example-align: 0.5rem;
213
- margin-inline-start: var(--kui-catalog-example-align);
214
- }
215
-
216
- .kui-catalog__detail {
217
- min-width: 0;
218
- height: 100%;
219
- grid-column: 2;
220
- }
221
-
222
- .kui-catalog__header {
223
- border-block-end: 1px solid var(--kui-color-border);
224
- background: var(--kui-color-surface);
225
- }
226
-
227
- .kui-catalog__header .kui-toolbar {
228
- padding-block-end: 0;
229
- }
230
-
231
- .kui-catalog__title {
232
- min-width: 0;
233
- }
234
-
235
- .kui-catalog__title h2,
236
- .kui-catalog__description {
237
- margin: 0;
238
- }
239
-
240
- .kui-catalog__title h2 {
241
- overflow: hidden;
242
- font-size: var(--kui-font-l);
243
- letter-spacing: -0.025em;
244
- line-height: 1.2;
245
- text-overflow: ellipsis;
246
- white-space: nowrap;
247
- }
248
-
249
- .kui-catalog__description {
250
- max-width: var(--kui-catalog-content-measure, 70rem);
251
- margin-block: 0 var(--kui-space-xs);
252
- color: var(--kui-color-text-quiet);
253
- background: transparent;
254
- line-height: 1.45;
255
- }
256
-
257
- .kui-catalog__header-actions {
258
- display: flex;
259
- min-width: 0;
260
- align-items: center;
261
- gap: var(--kui-layout-control-gap);
262
- }
263
-
264
- .kui-catalog__settings {
265
- box-shadow: none;
266
- }
267
-
268
- /* Scoped under the header-actions container so it outranks the toolbar group's
269
- default `display: grid` icon-over-label button — these settings buttons carry a
270
- text label and read as icon-beside-label. */
271
- .kui-catalog__header-actions .kui-catalog__settings > button {
272
- display: inline-flex;
273
- align-items: center;
274
- gap: 0.375rem;
275
- white-space: nowrap;
276
- }
277
-
278
- .kui-catalog__settings > button:focus-visible {
279
- outline: var(--kui-focus-ring);
280
- outline-offset: 2px;
281
- }
282
-
283
- .kui-catalog__settings svg {
284
- width: 1rem;
285
- height: 1rem;
286
- }
287
-
288
- .kui-catalog__stage {
289
- width: 100%;
290
- background-color: var(--kui-color-surface-lowered);
291
- background-image:
292
- linear-gradient(
293
- 45deg,
294
- color-mix(in srgb, var(--kui-color-border-quiet) 42%, transparent) 25%,
295
- transparent 25%
296
- ),
297
- linear-gradient(
298
- -45deg,
299
- color-mix(in srgb, var(--kui-color-border-quiet) 42%, transparent) 25%,
300
- transparent 25%
301
- ),
302
- linear-gradient(
303
- 45deg,
304
- transparent 75%,
305
- color-mix(in srgb, var(--kui-color-border-quiet) 42%, transparent) 75%
306
- ),
307
- linear-gradient(
308
- -45deg,
309
- transparent 75%,
310
- color-mix(in srgb, var(--kui-color-border-quiet) 42%, transparent) 75%
311
- );
312
- background-position:
313
- 0 0,
314
- 0 0.75rem,
315
- 0.75rem -0.75rem,
316
- -0.75rem 0;
317
- background-size: 1.5rem 1.5rem;
318
- }
319
-
320
- .kui-catalog__canvas {
321
- position: relative;
322
- display: grid;
323
- width: min(100%, var(--kui-catalog-content-measure, 70rem));
324
- min-width: 0;
325
- min-height: 100%;
326
- margin-inline: auto;
327
- padding: var(--kui-layout-content-gap);
328
- box-sizing: border-box;
329
- place-items: center;
330
- }
331
-
332
- /* Optional devtools-style geometry overlay. `wireCatalogGeometryOverlay` draws
333
- computed border edges, a quiet dashed bound for transparent borderless
334
- specimens, and orange bands for non-zero margins. */
335
- .kui-catalog__geometry-overlay {
336
- position: absolute;
337
- z-index: 3;
338
- pointer-events: none;
339
- inset: 0;
340
- }
341
-
342
- .kui-catalog__geometry-bound,
343
- .kui-catalog__geometry-border,
344
- .kui-catalog__geometry-margin {
345
- position: absolute;
346
- top: 0;
347
- left: 0;
348
- box-sizing: border-box;
349
- }
350
-
351
- .kui-catalog__geometry-bound {
352
- border: 1px dashed color-mix(in srgb, var(--kui-color-text) 40%, transparent);
353
- }
354
-
355
- .kui-catalog__geometry-border {
356
- border: 0 solid
357
- color-mix(in srgb, var(--kui-color-accent-text) 72%, transparent);
358
- }
359
-
360
- .kui-catalog__geometry-margin {
361
- background: color-mix(in srgb, #f6a94c 55%, transparent);
362
- }
363
-
364
- .kui-catalog__footer {
365
- --kui-toolbar-gap: 0.25rem;
366
- --kui-toolbar-group-size: 2rem;
367
-
368
- border-block-start: 1px solid var(--kui-color-border);
369
- background: color-mix(
370
- in srgb,
371
- var(--kui-color-surface-lowered) 72%,
372
- var(--kui-color-surface)
373
- );
374
- }
375
-
376
- .kui-catalog__status {
377
- display: flex;
378
- min-height: 1.625rem;
379
- padding: 0.375rem 0.75rem 0;
380
- color: var(--kui-color-text-quiet);
381
- align-items: center;
382
- justify-content: space-between;
383
- gap: var(--kui-layout-control-gap);
384
- font-size: var(--kui-font-xs);
385
- }
386
-
387
- .kui-catalog__footer .kui-toolbar {
388
- min-height: 2.5rem;
389
- padding: 0.25rem 0.5rem 0.5rem;
390
- }
391
-
392
- .kui-catalog__footer .kui-toolbar-control-group {
393
- height: 2rem;
394
- min-width: 2rem;
395
- }
396
-
397
- .kui-catalog__resources {
398
- min-width: 0;
399
- }
400
-
401
- .kui-catalog__resource-group {
402
- max-width: 100%;
403
- overflow-x: auto;
404
- }
405
-
406
- .kui-catalog__resource {
407
- position: relative;
408
- display: inline-flex;
409
- flex: 0 0 auto;
410
- min-width: 0;
411
- height: 1.875rem;
412
- padding: 0 var(--kui-space-xs);
413
- border: 1px solid transparent;
414
- border-radius: var(--kui-radius-pill);
415
- color: var(--kui-color-text);
416
- background: transparent;
417
- text-decoration: none;
418
- white-space: nowrap;
419
- align-items: center;
420
- gap: var(--kui-space-2xs);
421
- }
422
-
423
- .kui-catalog__resource:hover {
424
- border-color: var(--kui-color-border);
425
- background: var(--kui-color-surface);
426
- }
427
-
428
- .kui-catalog__resource:focus-visible {
429
- outline: var(--kui-focus-ring);
430
- outline-offset: 2px;
431
- }
432
-
433
- .kui-catalog__resource svg {
434
- width: 0.875rem;
435
- height: 0.875rem;
436
- }
437
-
438
- /* The optional monospace detail is a visually-hidden accessible affordance. */
439
- .kui-catalog__resource code {
440
- position: absolute;
441
- inset-block-start: 0;
442
- inset-inline-start: 0;
443
- width: 1px;
444
- height: 1px;
445
- padding: 0;
446
- overflow: hidden;
447
- border: 0;
448
- clip-path: inset(50%);
449
- white-space: nowrap;
450
- }
451
-
452
- .kui-catalog__related-group {
453
- padding: 0;
454
- }
455
-
456
- /* The related-entries trigger is an icon + caret popup button. In the footer
457
- toolbar the slotted glyph otherwise collapses to 0 width (a Web Awesome
458
- slotted-flex quirk), so pin its box size explicitly. */
459
- .kui-catalog__related-menu wa-button[slot="trigger"] svg {
460
- width: 1rem !important;
461
- min-width: 1rem;
462
- height: 1rem !important;
463
- }
464
-
465
- /* The related trigger carries a text label ("Component") beside the glyph, so let
466
- it grow to its content instead of the single-group's fixed 48px icon-button
467
- width (from toolbar-control-group.css). */
468
- .kui-catalog__related-group[data-single="true"] > .kui-catalog__related-menu,
469
- .kui-catalog__related-group[data-single="true"]
470
- > .kui-catalog__related-menu
471
- > wa-button,
472
- .kui-catalog__related-group[data-single="true"]
473
- > .kui-catalog__related-menu
474
- > wa-button::part(base) {
475
- width: auto;
476
- }
477
-
478
- /* The menu owns a standard inner inset so long relationship names never touch
479
- the popup border. */
480
- .kui-catalog__related-menu::part(menu) {
481
- padding: var(--kui-wa-surface-inset, 0.5rem);
482
- }
483
-
484
- /* Keep the glyph beside the text label (the toolbar group paints the slotted svg
485
- `display: block`, which would otherwise drop the label onto a second line). */
486
- .kui-catalog__related-trigger {
487
- display: inline-flex;
488
- align-items: center;
489
- }
490
-
491
- /* Text label beside the trigger glyph ("Component"). */
492
- .kui-catalog__related-label {
493
- margin-inline-start: 0.375rem;
494
- }
495
-
496
- /* Group heading inside the related-entries popup menu (e.g. "Uses" / "Used by"). */
497
- .kui-catalog__related-heading {
498
- display: block;
499
- padding: 0.25rem var(--kui-wa-control-inset, 0.5rem) 0;
500
- color: var(--kui-color-text-quiet);
501
- font-size: var(--kui-font-xs);
502
- font-weight: 600;
503
- text-transform: uppercase;
504
- letter-spacing: 0.04em;
505
- }
506
-
507
- @media (max-width: 64rem) {
508
- .kui-catalog__settings button span {
509
- position: absolute;
510
- width: 1px;
511
- height: 1px;
512
- overflow: hidden;
513
- clip-path: inset(50%);
514
- white-space: nowrap;
515
- }
516
- }
517
-
518
- @media (max-width: 52rem) {
519
- .kui-catalog {
520
- height: auto;
521
- min-height: 100vh;
522
- grid-template-columns: 1fr;
523
- }
524
- .kui-catalog[data-sidebar-collapsed="true"] {
525
- grid-template-columns: 1fr;
526
- }
527
- .kui-catalog[data-sidebar-collapsed="true"] .kui-catalog__sidebar {
528
- display: none;
529
- }
530
- .kui-catalog .kui-catalog__sidebar.kui-pane {
531
- --kui-pane-separator-block-end-width: var(--kui-pane-separator-width, 1px);
532
- --kui-pane-separator-inline-end-width: 0;
533
-
534
- width: 100%;
535
- min-width: 0;
536
- height: auto;
537
- justify-self: stretch;
538
- /* Narrow layout collapses via display:none, not the desktop slide. */
539
- transform: none;
540
- }
541
- .kui-catalog__detail {
542
- height: auto;
543
- min-height: auto;
544
- grid-column: 1;
545
- }
546
- .kui-catalog__sidebar nav {
547
- display: grid;
548
- grid-template-columns: repeat(2, minmax(0, 1fr));
549
- align-items: start;
550
- gap: 0.5rem 1rem;
551
- }
552
- .kui-catalog__group,
553
- .kui-catalog__group:first-child {
554
- min-width: 0;
555
- margin: 0;
556
- }
557
- .kui-catalog__stage {
558
- min-height: 24rem;
559
- }
560
- .kui-catalog__canvas {
561
- min-height: 16rem;
562
- }
563
- .kui-catalog__status {
564
- align-items: flex-start;
565
- flex-direction: column;
566
- gap: 0.25rem;
567
- }
568
- /* Stack the footer's resource links above the related-entries menu at narrow widths
569
- instead of keeping them in one row. */
570
- .kui-catalog__footer .kui-toolbar[data-has-center="false"] {
571
- grid-template-columns: minmax(0, 1fr);
572
- }
573
- .kui-catalog__footer .kui-toolbar__leading,
574
- .kui-catalog__resource-group {
575
- width: 100%;
576
- }
577
- .kui-catalog__footer .kui-toolbar__trailing {
578
- width: 100%;
579
- justify-content: flex-start;
580
- }
581
- }
582
-
583
- @media (prefers-reduced-motion: reduce) {
584
- .kui-catalog__sidebar {
585
- transition-duration: 0s;
586
- }
587
- }
1
+ /* Public compatibility entrypoint. Each catalog component owns its styles. */
2
+ @import "./catalog/components/catalog.css";
3
+ @import "./catalog/components/catalog-sidebar.css";
4
+ @import "./catalog/components/catalog-section-list.css";
5
+ @import "./catalog/components/catalog-secondary-sections.css";
6
+ @import "./catalog/components/catalog-detail.css";
7
+ @import "./catalog/components/catalog-stage.css";
8
+ @import "./catalog/components/catalog-resource-footer.css";
9
+ @import "./catalog/components/catalog-example.css";
10
+ @import "./catalog/components/catalog-example-stack.css";