@teseor/css 1.14.2 → 1.15.0

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 (300) hide show
  1. package/package.json +1 -1
  2. package/src/base/root.docs.html +20 -0
  3. package/src/base/typography/typography.docs.html +161 -0
  4. package/src/components/actions/button/button.docs.html +76 -0
  5. package/src/components/actions/button/button.visual.spec.ts +7 -3
  6. package/src/components/actions/button-group/button-group.docs.html +47 -0
  7. package/src/components/actions/button-group/button-group.visual.spec.ts +7 -3
  8. package/src/components/actions/close-button/close-button.docs.html +77 -0
  9. package/src/components/actions/close-button/close-button.visual.spec.ts +7 -3
  10. package/src/components/content/divider/divider.docs.html +27 -0
  11. package/src/components/content/divider/divider.visual.spec.ts +7 -3
  12. package/src/components/content/scroll-area/scroll-area-visual.png +0 -0
  13. package/src/components/content/scroll-area/scroll-area.docs.html +130 -0
  14. package/src/components/content/scroll-area/scroll-area.visual.spec.ts +7 -3
  15. package/src/components/content/spacer/spacer.docs.html +23 -0
  16. package/src/components/content/spacer/spacer.visual.spec.ts +3 -3
  17. package/src/components/data-display/avatar/avatar.docs.html +67 -0
  18. package/src/components/data-display/avatar/avatar.visual.spec.ts +7 -3
  19. package/src/components/data-display/badge/badge.docs.html +39 -0
  20. package/src/components/data-display/badge/badge.visual.spec.ts +7 -3
  21. package/src/components/data-display/card/card-visual.png +0 -0
  22. package/src/components/data-display/card/card.docs.html +36 -0
  23. package/src/components/data-display/card/card.visual.spec.ts +7 -3
  24. package/src/components/data-display/data-list/data-list-visual.png +0 -0
  25. package/src/components/data-display/data-list/data-list.docs.html +97 -0
  26. package/src/components/data-display/data-list/data-list.visual.spec.ts +7 -3
  27. package/src/components/data-display/icon/icon.docs.html +72 -0
  28. package/src/components/data-display/icon/icon.visual.spec.ts +7 -3
  29. package/src/components/data-display/image/image-visual.png +0 -0
  30. package/src/components/data-display/image/image.docs.html +67 -0
  31. package/src/components/data-display/image/image.visual.spec.ts +7 -3
  32. package/src/components/data-display/stat/stat.docs.html +35 -0
  33. package/src/components/data-display/stat/stat.visual.spec.ts +7 -3
  34. package/src/components/data-display/status/status.docs.html +67 -0
  35. package/src/components/data-display/status/status.visual.spec.ts +7 -3
  36. package/src/components/data-display/table/table.docs.html +73 -0
  37. package/src/components/data-display/table/table.visual.spec.ts +7 -3
  38. package/src/components/data-display/tag/tag.docs.html +42 -0
  39. package/src/components/data-display/tag/tag.visual.spec.ts +7 -3
  40. package/src/components/disclosure/accordion/accordion.docs.html +83 -0
  41. package/src/components/disclosure/accordion/accordion.visual.spec.ts +7 -3
  42. package/src/components/disclosure/disclosure/disclosure.docs.html +51 -0
  43. package/src/components/disclosure/disclosure/disclosure.visual.spec.ts +7 -3
  44. package/src/components/feedback/alert/alert.docs.html +90 -0
  45. package/src/components/feedback/alert/alert.visual.spec.ts +7 -3
  46. package/src/components/feedback/progress/progress.docs.html +65 -0
  47. package/src/components/feedback/progress/progress.visual.spec.ts +7 -3
  48. package/src/components/feedback/progress-circle/progress-circle.docs.html +65 -0
  49. package/src/components/feedback/progress-circle/progress-circle.visual.spec.ts +7 -3
  50. package/src/components/feedback/skeleton/skeleton.docs.html +40 -0
  51. package/src/components/feedback/skeleton/skeleton.visual.spec.ts +7 -3
  52. package/src/components/feedback/spinner/spinner.docs.html +28 -0
  53. package/src/components/feedback/spinner/spinner.visual.spec.ts +7 -3
  54. package/src/components/feedback/toast/toast-visual.png +0 -0
  55. package/src/components/feedback/toast/toast.docs.html +109 -0
  56. package/src/components/feedback/toast/toast.visual.spec.ts +7 -3
  57. package/src/components/forms/checkbox/checkbox.docs.html +33 -0
  58. package/src/components/forms/checkbox/checkbox.visual.spec.ts +7 -3
  59. package/src/components/forms/checkbox-group/checkbox-group.docs.html +104 -0
  60. package/src/components/forms/checkbox-group/checkbox-group.visual.spec.ts +7 -3
  61. package/src/components/forms/field/field.docs.html +63 -0
  62. package/src/components/forms/field/field.visual.spec.ts +7 -3
  63. package/src/components/forms/fieldset/fieldset.docs.html +122 -0
  64. package/src/components/forms/fieldset/fieldset.visual.spec.ts +7 -3
  65. package/src/components/forms/form/form.docs.html +132 -0
  66. package/src/components/forms/form/form.visual.spec.ts +7 -3
  67. package/src/components/forms/form-error/form-error.docs.html +18 -0
  68. package/src/components/forms/form-error/form-error.visual.spec.ts +7 -3
  69. package/src/components/forms/form-helper/form-helper.docs.html +42 -0
  70. package/src/components/forms/form-helper/form-helper.visual.spec.ts +7 -3
  71. package/src/components/forms/input/input-visual.png +0 -0
  72. package/src/components/forms/input/input.docs.html +69 -0
  73. package/src/components/forms/input/input.visual.spec.ts +7 -3
  74. package/src/components/forms/label/label-visual.png +0 -0
  75. package/src/components/forms/label/label.docs.html +29 -0
  76. package/src/components/forms/label/label.visual.spec.ts +7 -3
  77. package/src/components/forms/number-input/number-input-visual.png +0 -0
  78. package/src/components/forms/number-input/number-input.docs.html +100 -0
  79. package/src/components/forms/number-input/number-input.visual.spec.ts +7 -3
  80. package/src/components/forms/password-input/password-input-visual.png +0 -0
  81. package/src/components/forms/password-input/password-input.docs.html +88 -0
  82. package/src/components/forms/password-input/password-input.visual.spec.ts +7 -3
  83. package/src/components/forms/radio/radio.docs.html +52 -0
  84. package/src/components/forms/radio/radio.visual.spec.ts +7 -3
  85. package/src/components/forms/radio-group/radio-group.docs.html +100 -0
  86. package/src/components/forms/radio-group/radio-group.visual.spec.ts +7 -3
  87. package/src/components/forms/search-input/search-input-visual.png +0 -0
  88. package/src/components/forms/search-input/search-input.docs.html +87 -0
  89. package/src/components/forms/search-input/search-input.visual.spec.ts +7 -3
  90. package/src/components/forms/select/select-visual.png +0 -0
  91. package/src/components/forms/select/select.docs.html +70 -0
  92. package/src/components/forms/select/select.visual.spec.ts +7 -3
  93. package/src/components/forms/slider/slider-visual.png +0 -0
  94. package/src/components/forms/slider/slider.docs.html +25 -0
  95. package/src/components/forms/slider/slider.visual.spec.ts +7 -3
  96. package/src/components/forms/textarea/textarea-visual.png +0 -0
  97. package/src/components/forms/textarea/textarea.docs.html +39 -0
  98. package/src/components/forms/textarea/textarea.visual.spec.ts +7 -3
  99. package/src/components/forms/toggle/toggle.docs.html +64 -0
  100. package/src/components/forms/toggle/toggle.visual.spec.ts +7 -3
  101. package/src/components/navigation/breadcrumb/breadcrumb.docs.html +60 -0
  102. package/src/components/navigation/breadcrumb/breadcrumb.visual.spec.ts +7 -3
  103. package/src/components/navigation/dropdown-menu/dropdown-menu-visual.png +0 -0
  104. package/src/components/navigation/dropdown-menu/dropdown-menu.docs.html +106 -0
  105. package/src/components/navigation/dropdown-menu/dropdown-menu.visual.spec.ts +7 -3
  106. package/src/components/navigation/menu/menu.docs.html +122 -0
  107. package/src/components/navigation/menu/menu.visual.spec.ts +7 -3
  108. package/src/components/navigation/nav/nav.docs.html +74 -0
  109. package/src/components/navigation/nav/nav.visual.spec.ts +7 -3
  110. package/src/components/navigation/pagination/pagination-visual.png +0 -0
  111. package/src/components/navigation/pagination/pagination.docs.html +116 -0
  112. package/src/components/navigation/pagination/pagination.visual.spec.ts +7 -3
  113. package/src/components/navigation/tabs/tabs.docs.html +66 -0
  114. package/src/components/navigation/tabs/tabs.visual.spec.ts +7 -3
  115. package/src/components/overlays/dialog/dialog.docs.html +61 -0
  116. package/src/components/overlays/dialog/dialog.visual.spec.ts +7 -3
  117. package/src/components/overlays/drawer/drawer-visual.png +0 -0
  118. package/src/components/overlays/drawer/drawer.docs.html +90 -0
  119. package/src/components/overlays/drawer/drawer.visual.spec.ts +7 -3
  120. package/src/components/overlays/modal/modal.docs.html +69 -0
  121. package/src/components/overlays/modal/modal.visual.spec.ts +7 -3
  122. package/src/components/overlays/overlay/overlay.docs.html +30 -0
  123. package/src/components/overlays/overlay/overlay.visual.spec.ts +7 -3
  124. package/src/components/overlays/popover/popover.docs.html +41 -0
  125. package/src/components/overlays/popover/popover.visual.spec.ts +7 -3
  126. package/src/components/overlays/tooltip/tooltip.docs.html +33 -0
  127. package/src/components/overlays/tooltip/tooltip.visual.spec.ts +7 -3
  128. package/src/components/typography/blockquote/blockquote.docs.html +24 -0
  129. package/src/components/typography/blockquote/blockquote.visual.spec.ts +7 -3
  130. package/src/components/typography/code/code-visual.png +0 -0
  131. package/src/components/typography/code/code.docs.html +23 -0
  132. package/src/components/typography/code/code.visual.spec.ts +7 -3
  133. package/src/components/typography/code-block/code-block-visual.png +0 -0
  134. package/src/components/typography/code-block/code-block.docs.html +87 -0
  135. package/src/components/typography/code-block/code-block.visual.spec.ts +7 -3
  136. package/src/components/typography/heading/heading-visual.png +0 -0
  137. package/src/components/typography/heading/heading.docs.html +26 -0
  138. package/src/components/typography/heading/heading.visual.spec.ts +7 -3
  139. package/src/components/typography/kbd/kbd.docs.html +16 -0
  140. package/src/components/typography/kbd/kbd.visual.spec.ts +7 -3
  141. package/src/components/typography/link/link.docs.html +33 -0
  142. package/src/components/typography/link/link.visual.spec.ts +7 -3
  143. package/src/components/typography/list/list.docs.html +79 -0
  144. package/src/components/typography/list/list.visual.spec.ts +7 -3
  145. package/src/components/typography/mark/mark.docs.html +12 -0
  146. package/src/components/typography/mark/mark.visual.spec.ts +7 -3
  147. package/src/config/guides/accessibility.docs.html +108 -0
  148. package/src/config/guides/getting-started.docs.html +47 -0
  149. package/src/config/guides/theming.docs.html +71 -0
  150. package/src/config/tokens/colors/colors.docs.html +75 -0
  151. package/src/config/tokens/design-tokens.docs.html +116 -0
  152. package/src/config/tokens/grid/grid.docs.html +12 -0
  153. package/src/config/tokens/spacing/spacing.docs.html +33 -0
  154. package/src/debug/debug.docs.html +29 -0
  155. package/src/debug/index.scss +81 -1
  156. package/src/layout/app-shell/app-shell-visual.png +0 -0
  157. package/src/layout/app-shell/app-shell.docs.html +102 -0
  158. package/src/layout/app-shell/app-shell.visual.spec.ts +3 -3
  159. package/src/layout/aspect-ratio/aspect-ratio.docs.html +41 -0
  160. package/src/layout/aspect-ratio/aspect-ratio.visual.spec.ts +3 -3
  161. package/src/layout/box/box-visual.png +0 -0
  162. package/src/layout/box/box.docs.html +27 -0
  163. package/src/layout/box/box.visual.spec.ts +3 -3
  164. package/src/layout/center/center.docs.html +26 -0
  165. package/src/layout/center/center.visual.spec.ts +3 -3
  166. package/src/layout/column/column.docs.html +32 -0
  167. package/src/layout/column/column.visual.spec.ts +3 -3
  168. package/src/layout/container/container.docs.html +37 -0
  169. package/src/layout/content/content-visual.png +0 -0
  170. package/src/layout/content/content.docs.html +38 -0
  171. package/src/layout/content/content.visual.spec.ts +7 -3
  172. package/src/layout/footer/footer-visual.png +0 -0
  173. package/src/layout/footer/footer.docs.html +73 -0
  174. package/src/layout/footer/footer.visual.spec.ts +7 -3
  175. package/src/layout/grid/grid.docs.html +87 -0
  176. package/src/layout/grid/grid.visual.spec.ts +3 -3
  177. package/src/layout/main/main.docs.html +31 -0
  178. package/src/layout/nav-rail/nav-rail-visual.png +0 -0
  179. package/src/layout/nav-rail/nav-rail.docs.html +42 -0
  180. package/src/layout/nav-rail/nav-rail.visual.spec.ts +7 -3
  181. package/src/layout/page-header/page-header.docs.html +52 -0
  182. package/src/layout/page-header/page-header.visual.spec.ts +7 -3
  183. package/src/layout/row/row.docs.html +47 -0
  184. package/src/layout/row/row.visual.spec.ts +3 -3
  185. package/src/layout/sidebar/sidebar-visual.png +0 -0
  186. package/src/layout/sidebar/sidebar.docs.html +30 -0
  187. package/src/layout/sidebar/sidebar.visual.spec.ts +7 -3
  188. package/src/layout/sidebar-nav/sidebar-nav.docs.html +235 -0
  189. package/src/layout/sidebar-nav/sidebar-nav.visual.spec.ts +7 -3
  190. package/src/layout/topbar/topbar-visual.png +0 -0
  191. package/src/layout/topbar/topbar.docs.html +64 -0
  192. package/src/layout/topbar/topbar.visual.spec.ts +7 -3
  193. package/src/utilities/container/container.docs.html +34 -0
  194. package/src/utilities/display/display.docs.html +30 -0
  195. package/src/utilities/scroll-animation/scroll-animation.docs.html +32 -0
  196. package/src/utilities/scroll-snap/scroll-snap.docs.html +80 -0
  197. package/src/utilities/spacing/spacing.docs.html +29 -0
  198. package/src/utilities/text/text.docs.html +66 -0
  199. package/src/utilities/view-transition/view-transition.docs.html +52 -0
  200. package/src/utilities/visually-hidden/visually-hidden.docs.html +18 -0
  201. package/src/base/typography/typography.docs.json +0 -328
  202. package/src/components/actions/button/button.docs.json +0 -264
  203. package/src/components/actions/button-group/button-group.docs.json +0 -151
  204. package/src/components/actions/close-button/close-button.docs.json +0 -265
  205. package/src/components/content/divider/divider.docs.json +0 -113
  206. package/src/components/content/scroll-area/scroll-area.docs.json +0 -273
  207. package/src/components/content/spacer/spacer.docs.json +0 -102
  208. package/src/components/data-display/avatar/avatar.docs.json +0 -245
  209. package/src/components/data-display/badge/badge.docs.json +0 -114
  210. package/src/components/data-display/card/card.docs.json +0 -229
  211. package/src/components/data-display/data-list/data-list.docs.json +0 -259
  212. package/src/components/data-display/icon/icon.docs.json +0 -307
  213. package/src/components/data-display/image/image.docs.json +0 -337
  214. package/src/components/data-display/stat/stat.docs.json +0 -114
  215. package/src/components/data-display/status/status.docs.json +0 -147
  216. package/src/components/data-display/table/table.docs.json +0 -184
  217. package/src/components/data-display/tag/tag.docs.json +0 -146
  218. package/src/components/disclosure/accordion/accordion.docs.json +0 -206
  219. package/src/components/disclosure/disclosure/disclosure.docs.json +0 -154
  220. package/src/components/feedback/alert/alert.docs.json +0 -325
  221. package/src/components/feedback/progress/progress.docs.json +0 -315
  222. package/src/components/feedback/progress-circle/progress-circle.docs.json +0 -378
  223. package/src/components/feedback/skeleton/skeleton.docs.json +0 -142
  224. package/src/components/feedback/spinner/spinner.docs.json +0 -121
  225. package/src/components/feedback/toast/toast.docs.json +0 -418
  226. package/src/components/forms/checkbox/checkbox.docs.json +0 -166
  227. package/src/components/forms/checkbox-group/checkbox-group.docs.json +0 -339
  228. package/src/components/forms/field/field.docs.json +0 -276
  229. package/src/components/forms/fieldset/fieldset.docs.json +0 -520
  230. package/src/components/forms/form/form.docs.json +0 -482
  231. package/src/components/forms/form-error/form-error.docs.json +0 -61
  232. package/src/components/forms/form-helper/form-helper.docs.json +0 -151
  233. package/src/components/forms/input/input.docs.json +0 -306
  234. package/src/components/forms/label/label.docs.json +0 -110
  235. package/src/components/forms/number-input/number-input.docs.json +0 -311
  236. package/src/components/forms/password-input/password-input.docs.json +0 -316
  237. package/src/components/forms/radio/radio.docs.json +0 -236
  238. package/src/components/forms/radio-group/radio-group.docs.json +0 -351
  239. package/src/components/forms/search-input/search-input.docs.json +0 -293
  240. package/src/components/forms/select/select.docs.json +0 -231
  241. package/src/components/forms/slider/slider.docs.json +0 -144
  242. package/src/components/forms/textarea/textarea.docs.json +0 -229
  243. package/src/components/forms/toggle/toggle.docs.json +0 -229
  244. package/src/components/navigation/breadcrumb/breadcrumb.docs.json +0 -240
  245. package/src/components/navigation/dropdown-menu/dropdown-menu.docs.json +0 -290
  246. package/src/components/navigation/menu/menu.docs.json +0 -326
  247. package/src/components/navigation/nav/nav.docs.json +0 -304
  248. package/src/components/navigation/pagination/pagination.docs.json +0 -483
  249. package/src/components/navigation/tabs/tabs.docs.json +0 -243
  250. package/src/components/overlays/dialog/dialog.docs.json +0 -200
  251. package/src/components/overlays/drawer/drawer.docs.json +0 -307
  252. package/src/components/overlays/modal/modal.docs.json +0 -252
  253. package/src/components/overlays/overlay/overlay.docs.json +0 -138
  254. package/src/components/overlays/popover/popover.docs.json +0 -154
  255. package/src/components/overlays/tooltip/tooltip.docs.json +0 -133
  256. package/src/components/typography/blockquote/blockquote.docs.json +0 -89
  257. package/src/components/typography/code/code.docs.json +0 -104
  258. package/src/components/typography/code-block/code-block.docs.json +0 -308
  259. package/src/components/typography/heading/heading.docs.json +0 -120
  260. package/src/components/typography/kbd/kbd.docs.json +0 -61
  261. package/src/components/typography/link/link.docs.json +0 -149
  262. package/src/components/typography/list/list.docs.json +0 -296
  263. package/src/components/typography/mark/mark.docs.json +0 -60
  264. package/src/config/tokens/accessibility.docs.json +0 -125
  265. package/src/config/tokens/colors/colors.docs.json +0 -316
  266. package/src/config/tokens/grid/grid.docs.json +0 -54
  267. package/src/config/tokens/spacing/spacing.docs.json +0 -114
  268. package/src/config/tokens/theming.docs.json +0 -288
  269. package/src/debug/grid-overlay.scss +0 -81
  270. package/src/layout/app-shell/app-shell.docs.json +0 -155
  271. package/src/layout/aspect-ratio/aspect-ratio.docs.json +0 -193
  272. package/src/layout/box/box.docs.json +0 -93
  273. package/src/layout/center/center.docs.json +0 -63
  274. package/src/layout/column/column.docs.json +0 -157
  275. package/src/layout/container/container.docs.json +0 -85
  276. package/src/layout/content/content.docs.json +0 -82
  277. package/src/layout/footer/footer.docs.json +0 -119
  278. package/src/layout/grid/grid.docs.json +0 -493
  279. package/src/layout/main/main.docs.json +0 -87
  280. package/src/layout/nav-rail/nav-rail.docs.json +0 -76
  281. package/src/layout/page-header/page-header.docs.json +0 -124
  282. package/src/layout/row/row.docs.json +0 -237
  283. package/src/layout/sidebar/sidebar.docs.json +0 -63
  284. package/src/layout/sidebar-nav/sidebar-nav.docs.json +0 -833
  285. package/src/layout/topbar/topbar.docs.json +0 -110
  286. package/src/testing/api-types.ts +0 -20
  287. package/src/testing/grid-alignment.spec.ts +0 -38
  288. package/src/testing/html-generator.ts +0 -151
  289. package/src/testing/index.ts +0 -15
  290. package/src/testing/page-setup.ts +0 -149
  291. package/src/testing/rhythm.ts +0 -146
  292. package/src/testing/scaffold.ts +0 -50
  293. package/src/utilities/container/container.docs.json +0 -121
  294. package/src/utilities/display/display.docs.json +0 -83
  295. package/src/utilities/scroll-animation/scroll-animation.docs.json +0 -100
  296. package/src/utilities/scroll-snap/scroll-snap.docs.json +0 -333
  297. package/src/utilities/spacing/spacing.docs.json +0 -133
  298. package/src/utilities/text/text.docs.json +0 -191
  299. package/src/utilities/view-transition/view-transition.docs.json +0 -63
  300. package/src/utilities/visually-hidden/visually-hidden.docs.json +0 -44
@@ -0,0 +1,75 @@
1
+ ---
2
+ title: Colors
3
+ type: token
4
+ id: colors
5
+ description: HSL-based color system with primitive and semantic tokens. Semantic tokens adapt to light/dark themes.
6
+ skipValidation: true
7
+ ---
8
+
9
+ <!-- @text_colors | column -->
10
+ <!-- Use for typography and icons. -->
11
+ <p style="color: var(--ui-color-text)">--ui-color-text: Default text</p>
12
+ <p style="color: var(--ui-color-text-muted)">--ui-color-text-muted: Secondary text, captions</p>
13
+ <p class="ui-p-1" style="color: var(--ui-color-text-inverse); background: var(--ui-color-neutral-900); border-radius: var(--ui-radius-sm)">--ui-color-text-inverse: Text on dark backgrounds</p>
14
+
15
+ <!-- @background_colors | column -->
16
+ <!-- Use for surfaces, cards, and containers. -->
17
+ <div class="ui-p-2" style="background: var(--ui-color-bg); border: 1px solid var(--ui-color-border); border-radius: var(--ui-radius-md)">--ui-color-bg: Base background</div>
18
+ <div class="ui-p-2" style="background: var(--ui-color-bg-subtle); border-radius: var(--ui-radius-md)">--ui-color-bg-subtle: Subtle emphasis</div>
19
+ <div class="ui-p-2" style="background: var(--ui-color-bg-muted); border-radius: var(--ui-radius-md)">--ui-color-bg-muted: Stronger emphasis, code blocks</div>
20
+
21
+ <!-- @border_colors | column -->
22
+ <!-- Use for dividers, inputs, and card borders. -->
23
+ <div class="ui-p-2" style="border: 2px solid var(--ui-color-border); border-radius: var(--ui-radius-md)">--ui-color-border: Default borders</div>
24
+ <div class="ui-p-2" style="border: 2px solid var(--ui-color-border-strong); border-radius: var(--ui-radius-md)">--ui-color-border-strong: Emphasized borders</div>
25
+
26
+ <!-- @interactive_colors | column -->
27
+ <!-- Use for links, buttons, and interactive elements. -->
28
+ <p style="color: var(--ui-color-interactive)">--ui-color-interactive: Links, primary actions</p>
29
+ <p style="color: var(--ui-color-interactive-hover)">--ui-color-interactive-hover: Hover state</p>
30
+ <div class="ui-p-1" style="display: inline-block; outline: 3px solid var(--ui-color-focus); outline-offset: 2px; border-radius: var(--ui-radius-sm)">--ui-color-focus: Focus rings</div>
31
+
32
+ <!-- @status_colors -->
33
+ <!-- Use for feedback, alerts, and validation. -->
34
+ <div class="ui-row ui-row--sm">
35
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-success); border-radius: var(--ui-radius-sm)"></div>
36
+ <span>--ui-color-success</span>
37
+ </div>
38
+ <div class="ui-row ui-row--sm">
39
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-warning); border-radius: var(--ui-radius-sm)"></div>
40
+ <span>--ui-color-warning</span>
41
+ </div>
42
+ <div class="ui-row ui-row--sm">
43
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-danger); border-radius: var(--ui-radius-sm)"></div>
44
+ <span>--ui-color-danger</span>
45
+ </div>
46
+
47
+ <!-- @primary_scale -->
48
+ <!-- Brand color with light and dark variants. -->
49
+ <div class="ui-row ui-row--sm">
50
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-primary-light); border-radius: var(--ui-radius-sm)"></div>
51
+ <span>--ui-color-primary-light</span>
52
+ </div>
53
+ <div class="ui-row ui-row--sm">
54
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-primary); border-radius: var(--ui-radius-sm)"></div>
55
+ <span>--ui-color-primary</span>
56
+ </div>
57
+ <div class="ui-row ui-row--sm">
58
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-primary-dark); border-radius: var(--ui-radius-sm)"></div>
59
+ <span>--ui-color-primary-dark</span>
60
+ </div>
61
+
62
+ <!-- @neutral_scale -->
63
+ <!-- Gray scale for text, backgrounds, and borders. Derived from primary hue for subtle warmth. -->
64
+ <div class="ui-row ui-row--sm" style="flex-wrap: wrap">
65
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-neutral-50); border: 1px solid var(--ui-color-border); border-radius: var(--ui-radius-sm)"></div>
66
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-neutral-100); border-radius: var(--ui-radius-sm)"></div>
67
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-neutral-200); border-radius: var(--ui-radius-sm)"></div>
68
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-neutral-300); border-radius: var(--ui-radius-sm)"></div>
69
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-neutral-400); border-radius: var(--ui-radius-sm)"></div>
70
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-neutral-500); border-radius: var(--ui-radius-sm)"></div>
71
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-neutral-600); border-radius: var(--ui-radius-sm)"></div>
72
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-neutral-700); border-radius: var(--ui-radius-sm)"></div>
73
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-neutral-800); border-radius: var(--ui-radius-sm)"></div>
74
+ <div style="width: var(--ui-space-4); height: var(--ui-row-2); background: var(--ui-color-neutral-900); border-radius: var(--ui-radius-sm)"></div>
75
+ </div>
@@ -0,0 +1,116 @@
1
+ ---
2
+ title: Design Tokens
3
+ type: token
4
+ id: design-tokens
5
+ description: Borders, radius, shadows, motion, z-index, and semantic tokens that form the visual foundation
6
+ skipValidation: true
7
+ ---
8
+
9
+ <!-- @borders | row -->
10
+ <!-- Border width tokens derived from the 8px unit. -->
11
+ <div style="width: var(--ui-space-8); height: var(--ui-row-2); border: var(--ui-border-width-sm) solid var(--ui-color-border-strong)"></div>
12
+ <div style="width: var(--ui-space-8); height: var(--ui-row-2); border: var(--ui-border-width-md) solid var(--ui-color-border-strong)"></div>
13
+ <div style="width: var(--ui-space-8); height: var(--ui-row-2); border: var(--ui-border-width-lg) solid var(--ui-color-border-strong)"></div>
14
+
15
+ <!-- @radius | row -->
16
+ <!-- Border radius tokens derived from the 8px unit. -->
17
+ <div class="ui-column ui-column--xs" style="align-items: center">
18
+ <div style="width: var(--ui-row-3); height: var(--ui-row-3); background: var(--ui-color-primary); border-radius: var(--ui-radius-sm)"></div>
19
+ <small>sm (4px)</small>
20
+ </div>
21
+ <div class="ui-column ui-column--xs" style="align-items: center">
22
+ <div style="width: var(--ui-row-3); height: var(--ui-row-3); background: var(--ui-color-primary); border-radius: var(--ui-radius-md)"></div>
23
+ <small>md (8px)</small>
24
+ </div>
25
+ <div class="ui-column ui-column--xs" style="align-items: center">
26
+ <div style="width: var(--ui-row-3); height: var(--ui-row-3); background: var(--ui-color-primary); border-radius: var(--ui-radius-lg)"></div>
27
+ <small>lg (16px)</small>
28
+ </div>
29
+ <div class="ui-column ui-column--xs" style="align-items: center">
30
+ <div style="width: var(--ui-row-3); height: var(--ui-row-3); background: var(--ui-color-primary); border-radius: var(--ui-radius-full)"></div>
31
+ <small>full</small>
32
+ </div>
33
+
34
+ <!-- @shadows | row -->
35
+ <!-- Elevation shadows using the primary hue for tinted depth. -->
36
+ <div class="ui-column ui-column--xs" style="align-items: center">
37
+ <div style="width: var(--ui-space-8); height: var(--ui-row-3); background: var(--ui-color-bg); border-radius: var(--ui-radius-md); box-shadow: var(--ui-shadow-sm)"></div>
38
+ <small>sm</small>
39
+ </div>
40
+ <div class="ui-column ui-column--xs" style="align-items: center">
41
+ <div style="width: var(--ui-space-8); height: var(--ui-row-3); background: var(--ui-color-bg); border-radius: var(--ui-radius-md); box-shadow: var(--ui-shadow-md)"></div>
42
+ <small>md</small>
43
+ </div>
44
+ <div class="ui-column ui-column--xs" style="align-items: center">
45
+ <div style="width: var(--ui-space-8); height: var(--ui-row-3); background: var(--ui-color-bg); border-radius: var(--ui-radius-md); box-shadow: var(--ui-shadow-lg)"></div>
46
+ <small>lg</small>
47
+ </div>
48
+
49
+ <!-- @motion -->
50
+ <!-- Duration and easing tokens. All durations drop to 0ms when prefers-reduced-motion is active. -->
51
+ :root {
52
+ --ui-duration-instant: 50ms;
53
+ --ui-duration-fast: 100ms;
54
+ --ui-duration-base: 150ms;
55
+ --ui-duration-normal: 200ms;
56
+ --ui-duration-slow: 250ms;
57
+ --ui-duration-slower: 400ms;
58
+ }
59
+
60
+ @media (prefers-reduced-motion: reduce) {
61
+ :root {
62
+ --ui-duration-instant: 0ms;
63
+ --ui-duration-fast: 0ms;
64
+ /* ...all set to 0ms */
65
+ }
66
+ }
67
+ :root {
68
+ --ui-ease-default: cubic-bezier(0.4, 0, 0.2, 1);
69
+ --ui-ease-in: cubic-bezier(0.4, 0, 1, 1);
70
+ --ui-ease-out: cubic-bezier(0, 0, 0.2, 1);
71
+ --ui-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
72
+ }
73
+
74
+ <!-- @z_index -->
75
+ <!-- Layering scale with gaps to allow insertion without renumbering. -->
76
+ :root {
77
+ --ui-z-base: 0;
78
+ --ui-z-sticky: 100;
79
+ --ui-z-dropdown: 200;
80
+ --ui-z-overlay: 300;
81
+ --ui-z-modal: 400;
82
+ --ui-z-popover: 500;
83
+ --ui-z-tooltip: 600;
84
+ --ui-z-toast: 700;
85
+ --ui-z-drawer: 800;
86
+ --ui-z-debug: 9999;
87
+ }
88
+
89
+ <!-- @semantic_colors -->
90
+ <!-- Context-aware color tokens that resolve automatically in light and dark mode via light-dark(). -->
91
+ :root {
92
+ color-scheme: light dark;
93
+ --ui-color-text: light-dark(var(--ui-color-neutral-900), var(--ui-color-neutral-100));
94
+ --ui-color-text-muted: light-dark(var(--ui-color-neutral-500), var(--ui-color-neutral-400));
95
+ --ui-color-bg: light-dark(var(--ui-color-neutral-50), var(--ui-color-neutral-900));
96
+ --ui-color-bg-subtle: light-dark(var(--ui-color-neutral-100), var(--ui-color-neutral-800));
97
+ }
98
+ :root {
99
+ --ui-color-border: light-dark(var(--ui-color-neutral-200), var(--ui-color-neutral-700));
100
+ --ui-color-border-strong: light-dark(var(--ui-color-neutral-300), var(--ui-color-neutral-600));
101
+ --ui-color-interactive: var(--ui-color-primary);
102
+ --ui-color-interactive-hover: var(--ui-color-primary-dark);
103
+ --ui-color-focus: var(--ui-color-primary-light);
104
+ }
105
+
106
+ <!-- @semantic_spacing -->
107
+ <!-- Named spacing aliases that map to the numeric spacing scale for consistent layout patterns. -->
108
+ :root {
109
+ --ui-spacing-xs: var(--ui-space-1); /* 8px */
110
+ --ui-spacing-sm: var(--ui-space-2); /* 16px */
111
+ --ui-spacing-md: var(--ui-space-4); /* 32px */
112
+ --ui-spacing-lg: var(--ui-space-6); /* 48px */
113
+ --ui-spacing-xl: var(--ui-space-8); /* 64px */
114
+ --ui-spacing-gutter: var(--ui-space-4); /* 32px */
115
+ --ui-spacing-section: var(--ui-space-8);/* 64px */
116
+ }
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: Grid System
3
+ type: token
4
+ id: grid
5
+ description: All spacing and heights align to the 8px grid.
6
+ skipValidation: true
7
+ ---
8
+
9
+ <!-- @default | column -->
10
+ <div style="background: var(--ui-color-primary); color: var(--ui-color-text-inverse); height: var(--ui-row-1); display: flex; align-items: center; padding: 0 var(--ui-space-2)">row-1 (16px)</div>
11
+ <div style="background: var(--ui-color-primary); color: var(--ui-color-text-inverse); height: var(--ui-row-2); display: flex; align-items: center; padding: 0 var(--ui-space-2)">row-2 (32px)</div>
12
+ <div style="background: var(--ui-color-primary); color: var(--ui-color-text-inverse); height: var(--ui-row-3); display: flex; align-items: center; padding: 0 var(--ui-space-2)">row-3 (48px)</div>
@@ -0,0 +1,33 @@
1
+ ---
2
+ title: Spacing
3
+ type: token
4
+ id: spacing
5
+ description: Spacing tokens based on the 8px unit.
6
+ skipValidation: true
7
+ ---
8
+
9
+ <!-- @default | row -->
10
+ <div class="ui-column ui-column--xs" style="align-items: center">
11
+ <div style="width: var(--ui-space-1); height: var(--ui-space-4); background: var(--ui-color-primary)"></div>
12
+ <small>space-1</small>
13
+ </div>
14
+ <div class="ui-column ui-column--xs" style="align-items: center">
15
+ <div style="width: var(--ui-space-2); height: var(--ui-space-4); background: var(--ui-color-primary)"></div>
16
+ <small>space-2</small>
17
+ </div>
18
+ <div class="ui-column ui-column--xs" style="align-items: center">
19
+ <div style="width: var(--ui-space-3); height: var(--ui-space-4); background: var(--ui-color-primary)"></div>
20
+ <small>space-3</small>
21
+ </div>
22
+ <div class="ui-column ui-column--xs" style="align-items: center">
23
+ <div style="width: var(--ui-space-4); height: var(--ui-space-4); background: var(--ui-color-primary)"></div>
24
+ <small>space-4</small>
25
+ </div>
26
+ <div class="ui-column ui-column--xs" style="align-items: center">
27
+ <div style="width: var(--ui-space-6); height: var(--ui-space-4); background: var(--ui-color-primary)"></div>
28
+ <small>space-6</small>
29
+ </div>
30
+ <div class="ui-column ui-column--xs" style="align-items: center">
31
+ <div style="width: var(--ui-space-8); height: var(--ui-space-4); background: var(--ui-color-primary)"></div>
32
+ <small>space-8</small>
33
+ </div>
@@ -0,0 +1,29 @@
1
+ ---
2
+ title: Debug
3
+ type: utility
4
+ id: debug
5
+ description: Visual debugging overlays for grid alignment, baseline rhythm, and element boundaries
6
+ skipValidation: true
7
+ ---
8
+
9
+ <!-- @grid_overlay -->
10
+ <!-- Shows the 8px unit grid. Add the class to any container. -->
11
+ <div class="ui-debug-grid" style="height: var(--ui-row-6); position: relative"></div>
12
+
13
+ <!-- @row_grid -->
14
+ <!-- Shows both 8px unit lines and stronger row (16px) lines. -->
15
+ <div class="ui-debug-grid-rows" style="height: var(--ui-row-6); position: relative"></div>
16
+
17
+ <!-- @baseline -->
18
+ <!-- Horizontal baseline grid for verifying text alignment. -->
19
+ <div class="ui-debug-baseline" style="height: var(--ui-row-6); position: relative"></div>
20
+
21
+ <!-- @outline -->
22
+ <!-- Outlines all child elements to reveal layout boundaries. -->
23
+ <div class="ui-debug-outline">
24
+ <div class="ui-row ui-row--sm">
25
+ <div style="padding: var(--ui-space-1)">A</div>
26
+ <div style="padding: var(--ui-space-1)">B</div>
27
+ <div style="padding: var(--ui-space-1)">C</div>
28
+ </div>
29
+ </div>
@@ -1 +1,81 @@
1
- @forward "./grid-overlay";
1
+ @use '../config/tokens/variables' as t;
2
+ // Debug grid overlay - add class="debug-grid" to body or any container
3
+ .debug-grid,
4
+ .debug-grid-rows,
5
+ .debug-baseline {
6
+ position: relative;
7
+ }
8
+
9
+ .debug-grid {
10
+ // Fallback hue 220 (blue) when --ui-hue-primary not set
11
+ --debug-color: hsl(var(--ui-hue-primary, #{t.$hue-primary}) 80% 50% / 0.15);
12
+ }
13
+
14
+ .debug-grid::after {
15
+ content: "";
16
+ position: absolute;
17
+ inset-block-start: 0;
18
+ inset-inline-start: 0;
19
+ z-index: var(--ui-z-debug);
20
+
21
+ block-size: 100%;
22
+ inline-size: 100%;
23
+ min-block-size: 100vh;
24
+
25
+ background-image: linear-gradient(to right, var(--debug-color) 1px, transparent 1px),
26
+ linear-gradient(to bottom, var(--debug-color) 1px, transparent 1px);
27
+ pointer-events: none;
28
+ background-size: var(--ui-unit) var(--ui-unit);
29
+ background-position: 0 0;
30
+ }
31
+
32
+ // Stronger grid at row intervals
33
+ .debug-grid-rows {
34
+ --debug-color: hsl(var(--ui-hue-primary, #{t.$hue-primary}) 80% 50% / 0.1);
35
+ --debug-color-strong: hsl(var(--ui-hue-primary, #{t.$hue-primary}) 80% 50% / 0.25);
36
+ }
37
+
38
+ .debug-grid-rows::after {
39
+ content: "";
40
+ position: absolute;
41
+ inset-block-start: 0;
42
+ inset-inline-start: 0;
43
+ z-index: var(--ui-z-debug);
44
+
45
+ block-size: 100%;
46
+ inline-size: 100%;
47
+ min-block-size: 100vh;
48
+
49
+ background-image: linear-gradient(to right, var(--debug-color) 1px, transparent 1px),
50
+ linear-gradient(to bottom, var(--debug-color) 1px, transparent 1px),
51
+ linear-gradient(to bottom, var(--debug-color-strong) 1px, transparent 1px);
52
+ pointer-events: none;
53
+ background-size: var(--ui-unit) var(--ui-unit), var(--ui-unit) var(--ui-unit), var(--ui-unit) var(--ui-row);
54
+ background-position: 0 0;
55
+ }
56
+
57
+ // Baseline grid only (horizontal lines)
58
+ .debug-baseline {
59
+ --debug-color: hsl(var(--ui-hue-danger, 0) 80% 50% / 0.2);
60
+ }
61
+
62
+ .debug-baseline::after {
63
+ content: "";
64
+ position: absolute;
65
+ inset-block-start: 0;
66
+ inset-inline-start: 0;
67
+ z-index: var(--ui-z-debug);
68
+
69
+ block-size: 100%;
70
+ inline-size: 100%;
71
+ min-block-size: 100vh;
72
+
73
+ background-image: linear-gradient(to bottom, var(--debug-color) 1px, transparent 1px);
74
+ pointer-events: none;
75
+ background-size: 100% var(--ui-unit);
76
+ }
77
+
78
+ // Element boundaries outline
79
+ .debug-outline * {
80
+ outline: 1px solid hsl(0 100% 50% / 0.5);
81
+ }
@@ -0,0 +1,102 @@
1
+ ---
2
+ title: Layout
3
+ type: primitive
4
+ id: layout
5
+ description: Layout primitives for app shells with sidebars and content containers.
6
+ api: app-shell.api.json
7
+ ---
8
+
9
+ <!-- @app_shell_sidebar_main -->
10
+ <!-- This page uses the layout primitives: -->
11
+ <body class="ui-app-shell">
12
+ <aside class="ui-sidebar">
13
+ <!-- sidebar content -->
14
+ </aside>
15
+ <main class="ui-main">
16
+ <div class="ui-container">
17
+ <!-- page content -->
18
+ </div>
19
+ </main>
20
+ </body>
21
+
22
+ <!-- @with_topbar -->
23
+ <!-- Add a fixed topbar by setting --topbar-height on app-shell. Sidebar and main offset automatically. -->
24
+ <body class="ui-app-shell" style="--topbar-height: var(--ui-row-3)">
25
+ <header class="ui-topbar ui-topbar--fixed ui-topbar--bordered">
26
+ <div class="ui-topbar__start"><strong>App</strong></div>
27
+ <div class="ui-topbar__end">User</div>
28
+ </header>
29
+ <aside class="ui-sidebar">Sidebar</aside>
30
+ <main class="ui-main">
31
+ <div class="ui-container">Content</div>
32
+ </main>
33
+ </body>
34
+
35
+ <!-- @sidebar_widths | column -->
36
+ <div class="ui-row ui-row--sm">
37
+ <code>.ui-sidebar--sm</code>
38
+ <span>192px (24 units)</span>
39
+ </div>
40
+ <div class="ui-row ui-row--sm">
41
+ <code>.ui-sidebar--md</code>
42
+ <span>240px (30 units) - default</span>
43
+ </div>
44
+ <div class="ui-row ui-row--sm">
45
+ <code>.ui-sidebar--lg</code>
46
+ <span>320px (40 units)</span>
47
+ </div>
48
+
49
+ <!-- @sidebar_position -->
50
+ <!-- By default, sidebar is on the start (left in LTR). Use .ui-sidebar--end for right-side: -->
51
+ <aside class="ui-sidebar ui-sidebar--end">...</aside>
52
+ <main class="ui-main ui-main--sidebar-end">...</main>
53
+
54
+ <!-- @container_widths | column -->
55
+ <div class="ui-row ui-row--sm">
56
+ <code>.ui-container--sm</code>
57
+ <span>640px (80 units)</span>
58
+ </div>
59
+ <div class="ui-row ui-row--sm">
60
+ <code>.ui-container--md</code>
61
+ <span>800px (100 units)</span>
62
+ </div>
63
+ <div class="ui-row ui-row--sm">
64
+ <code>.ui-container--lg</code>
65
+ <span>960px (120 units) - default</span>
66
+ </div>
67
+ <div class="ui-row ui-row--sm">
68
+ <code>.ui-container--xl</code>
69
+ <span>1280px (160 units)</span>
70
+ </div>
71
+ <div class="ui-row ui-row--sm">
72
+ <code>.ui-container--full</code>
73
+ <span>No max width</span>
74
+ </div>
75
+
76
+ <!-- @with_footer -->
77
+ <!-- Place footer inside the content area, after the container. -->
78
+ <body class="ui-app-shell">
79
+ <main class="ui-main ui-main--full">
80
+ <div class="ui-container">Content</div>
81
+ <footer class="ui-footer ui-footer--bordered">
82
+ <div class="ui-footer__start"><small>Brand</small></div>
83
+ <div class="ui-footer__end"><small>v1.0.0</small></div>
84
+ </footer>
85
+ </main>
86
+ </body>
87
+
88
+ <!-- @topbar_variants -->
89
+ <!-- Sticky stays in flow, raised adds shadow. -->
90
+ <header class="ui-topbar ui-topbar--sticky ui-topbar--bordered">...</header>
91
+ <header class="ui-topbar ui-topbar--raised">...</header>
92
+
93
+ <!-- @footer_variants -->
94
+ <!-- Sticky, fixed, and raised options. -->
95
+ <footer class="ui-footer ui-footer--sticky ui-footer--bordered">...</footer>
96
+ <footer class="ui-footer ui-footer--fixed">...</footer>
97
+ <footer class="ui-footer ui-footer--raised">...</footer>
98
+
99
+ <!-- @centered_container -->
100
+ <div class="ui-container ui-container--center">
101
+ <!-- centered content with max-width -->
102
+ </div>
@@ -1,12 +1,12 @@
1
1
  import { resolve } from 'node:path';
2
2
  import { expect, test } from '@playwright/test';
3
- import { saveForLostPixel, setupVisualTestFromDocs } from '../../testing';
3
+ import { saveForLostPixel, setupVisualTestFromHtmlDocs } from '../../../test-utils';
4
4
 
5
- const DOCS_PATH = resolve(__dirname, 'app-shell.docs.json');
5
+ const DOCS_PATH = resolve(__dirname, 'app-shell.docs.html');
6
6
 
7
7
  test.describe('app-shell visual regression', () => {
8
8
  test('all variations', async ({ page }) => {
9
- await setupVisualTestFromDocs(page, DOCS_PATH);
9
+ await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
10
10
  await saveForLostPixel(page, 'app-shell');
11
11
  await expect(page.locator('body')).toHaveScreenshot('app-shell.visual.png');
12
12
  });
@@ -0,0 +1,41 @@
1
+ ---
2
+ title: Aspect Ratio
3
+ type: primitive
4
+ id: aspect-ratio
5
+ description: Constrains a container to a specific aspect ratio. Media children fill the container automatically.
6
+ api: aspect-ratio.api.json
7
+ ---
8
+
9
+ <!-- @presets -->
10
+ <div class="ui-row ui-row--md">
11
+ <div class="ui-aspect-ratio ui-aspect-ratio--square" style="inline-size: 160px; background: var(--ui-color-bg-muted)">
12
+ <span style="padding: var(--ui-space-2)">square</span>
13
+ </div>
14
+ <div class="ui-aspect-ratio ui-aspect-ratio--video" style="inline-size: 160px; background: var(--ui-color-bg-muted)">
15
+ <span style="padding: var(--ui-space-2)">video</span>
16
+ </div>
17
+ <div class="ui-aspect-ratio ui-aspect-ratio--photo" style="inline-size: 160px; background: var(--ui-color-bg-muted)">
18
+ <span style="padding: var(--ui-space-2)">photo</span>
19
+ </div>
20
+ <div class="ui-aspect-ratio ui-aspect-ratio--wide" style="inline-size: 160px; background: var(--ui-color-bg-muted)">
21
+ <span style="padding: var(--ui-space-2)">wide</span>
22
+ </div>
23
+ <div class="ui-aspect-ratio ui-aspect-ratio--portrait" style="inline-size: 160px; background: var(--ui-color-bg-muted)">
24
+ <span style="padding: var(--ui-space-2)">portrait</span>
25
+ </div>
26
+ </div>
27
+
28
+ <!-- @with_media -->
29
+ <div class="ui-row ui-row--md">
30
+ <div class="ui-aspect-ratio ui-aspect-ratio--video" style="inline-size: 240px">
31
+ <div style="inline-size: 100%; block-size: 100%; background: var(--ui-color-primary); color: var(--ui-color-on-primary); display: grid; place-items: center">img (video)</div>
32
+ </div>
33
+ <div class="ui-aspect-ratio ui-aspect-ratio--square" style="inline-size: 240px">
34
+ <div style="inline-size: 100%; block-size: 100%; background: var(--ui-color-primary); color: var(--ui-color-on-primary); display: grid; place-items: center">img (square)</div>
35
+ </div>
36
+ </div>
37
+
38
+ <!-- @custom_ratio -->
39
+ <div class="ui-aspect-ratio" style="--ui-aspect-ratio: 2.35 / 1; inline-size: 320px; background: var(--ui-color-bg-muted)">
40
+ <span style="padding: var(--ui-space-2)">2.35:1 (cinemascope)</span>
41
+ </div>
@@ -1,12 +1,12 @@
1
1
  import { resolve } from 'node:path';
2
2
  import { expect, test } from '@playwright/test';
3
- import { saveForLostPixel, setupVisualTestFromDocs } from '../../testing';
3
+ import { saveForLostPixel, setupVisualTestFromHtmlDocs } from '../../../test-utils';
4
4
 
5
- const DOCS_PATH = resolve(__dirname, 'aspect-ratio.docs.json');
5
+ const DOCS_PATH = resolve(__dirname, 'aspect-ratio.docs.html');
6
6
 
7
7
  test.describe('aspect-ratio visual regression', () => {
8
8
  test('all variations', async ({ page }) => {
9
- await setupVisualTestFromDocs(page, DOCS_PATH);
9
+ await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
10
10
  // skip validateGridRhythm: aspect-ratio controls proportions, not fixed heights
11
11
  await saveForLostPixel(page, 'aspect-ratio');
12
12
  await expect(page.locator('body')).toHaveScreenshot('aspect-ratio.visual.png');
Binary file
@@ -0,0 +1,27 @@
1
+ ---
2
+ title: Box
3
+ type: primitive
4
+ id: box
5
+ description: Base container with style props. Foundation for layout primitives.
6
+ api: box.api.json
7
+ ---
8
+
9
+ <!-- @default -->
10
+ <div class="ui-box">Content</div>
11
+
12
+ <!-- @padding | column -->
13
+ <div class="ui-box ui-box--p-1 ui-box--bg-subtle">Padding 1</div>
14
+ <div class="ui-box ui-box--p-2 ui-box--bg-subtle">Padding 2</div>
15
+ <div class="ui-box ui-box--p-3 ui-box--bg-subtle">Padding 3</div>
16
+ <div class="ui-box ui-box--p-4 ui-box--bg-subtle">Padding 4</div>
17
+
18
+ <!-- @background | column -->
19
+ <div class="ui-box ui-box--p-2 ui-box--bg-subtle">Subtle background</div>
20
+ <div class="ui-box ui-box--p-2 ui-box--bg-muted">Muted background</div>
21
+
22
+ <!-- @rounded | row -->
23
+ <div class="ui-box ui-box--p-3 ui-box--bg-subtle ui-box--rounded">Rounded</div>
24
+ <div class="ui-box ui-box--p-3 ui-box--bg-subtle ui-box--rounded-lg">Rounded lg</div>
25
+
26
+ <!-- @custom_via_css_variables -->
27
+ <div class="ui-box" style="--box-padding: var(--ui-space-3); --box-bg: var(--ui-color-primary); --box-color: white; --box-radius: var(--ui-radius-lg);">Custom box</div>
@@ -1,12 +1,12 @@
1
1
  import { resolve } from 'node:path';
2
2
  import { expect, test } from '@playwright/test';
3
- import { saveForLostPixel, setupVisualTestFromDocs } from '../../testing';
3
+ import { saveForLostPixel, setupVisualTestFromHtmlDocs } from '../../../test-utils';
4
4
 
5
- const DOCS_PATH = resolve(__dirname, 'box.docs.json');
5
+ const DOCS_PATH = resolve(__dirname, 'box.docs.html');
6
6
 
7
7
  test.describe('box visual regression', () => {
8
8
  test('all variations', async ({ page }) => {
9
- await setupVisualTestFromDocs(page, DOCS_PATH);
9
+ await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
10
10
  await saveForLostPixel(page, 'box');
11
11
  await expect(page.locator('body')).toHaveScreenshot('box.visual.png');
12
12
  });
@@ -0,0 +1,26 @@
1
+ ---
2
+ title: Center
3
+ type: primitive
4
+ id: center
5
+ description: Centers content horizontally and vertically.
6
+ api: center.api.json
7
+ ---
8
+
9
+ <!-- @basic -->
10
+ <!-- Centers children both horizontally and vertically using flexbox. -->
11
+ <div class="ui-center" style="height: var(--ui-row-4); background: var(--ui-color-bg-muted)">
12
+ <span>Centered content</span>
13
+ </div>
14
+
15
+ <!-- @column_direction -->
16
+ <!-- Stack centered children vertically. -->
17
+ <div class="ui-center ui-center--column" style="height: var(--ui-row-6); background: var(--ui-color-bg-muted)">
18
+ <span>First line</span>
19
+ <span>Second line</span>
20
+ </div>
21
+
22
+ <!-- @full_page_center -->
23
+ <!-- Center content within a full viewport area, useful for loading or empty states. -->
24
+ <div class="ui-center" style="height: var(--ui-row-8); background: var(--ui-color-bg-muted)">
25
+ <p>No results found</p>
26
+ </div>
@@ -1,12 +1,12 @@
1
1
  import { resolve } from 'node:path';
2
2
  import { expect, test } from '@playwright/test';
3
- import { saveForLostPixel, setupVisualTestFromDocs } from '../../testing';
3
+ import { saveForLostPixel, setupVisualTestFromHtmlDocs } from '../../../test-utils';
4
4
 
5
- const DOCS_PATH = resolve(__dirname, 'center.docs.json');
5
+ const DOCS_PATH = resolve(__dirname, 'center.docs.html');
6
6
 
7
7
  test.describe('center visual regression', () => {
8
8
  test('all variations', async ({ page }) => {
9
- await setupVisualTestFromDocs(page, DOCS_PATH);
9
+ await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
10
10
  await saveForLostPixel(page, 'center');
11
11
  await expect(page.locator('body')).toHaveScreenshot('center.visual.png');
12
12
  });
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: Column
3
+ type: primitive
4
+ id: column
5
+ description: Vertical layout with consistent gap.
6
+ api: column.api.json
7
+ ---
8
+
9
+ <!-- @basic -->
10
+ <div class="ui-column ui-column--sm">
11
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Item 1</div>
12
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Item 2</div>
13
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Item 3</div>
14
+ </div>
15
+
16
+ <!-- @sizes -->
17
+ <div class="ui-column ui-column--xs">
18
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">xs gap</div>
19
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">xs gap</div>
20
+ </div>
21
+ <div class="ui-column ui-column--md">
22
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">md gap</div>
23
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">md gap</div>
24
+ </div>
25
+ <div class="ui-column ui-column--lg">
26
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">lg gap</div>
27
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">lg gap</div>
28
+ </div>
29
+ <div class="ui-column ui-column--xl">
30
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">xl gap</div>
31
+ <div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">xl gap</div>
32
+ </div>