@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.
- package/package.json +1 -1
- package/src/base/root.docs.html +20 -0
- package/src/base/typography/typography.docs.html +161 -0
- package/src/components/actions/button/button.docs.html +76 -0
- package/src/components/actions/button/button.visual.spec.ts +7 -3
- package/src/components/actions/button-group/button-group.docs.html +47 -0
- package/src/components/actions/button-group/button-group.visual.spec.ts +7 -3
- package/src/components/actions/close-button/close-button.docs.html +77 -0
- package/src/components/actions/close-button/close-button.visual.spec.ts +7 -3
- package/src/components/content/divider/divider.docs.html +27 -0
- package/src/components/content/divider/divider.visual.spec.ts +7 -3
- package/src/components/content/scroll-area/scroll-area-visual.png +0 -0
- package/src/components/content/scroll-area/scroll-area.docs.html +130 -0
- package/src/components/content/scroll-area/scroll-area.visual.spec.ts +7 -3
- package/src/components/content/spacer/spacer.docs.html +23 -0
- package/src/components/content/spacer/spacer.visual.spec.ts +3 -3
- package/src/components/data-display/avatar/avatar.docs.html +67 -0
- package/src/components/data-display/avatar/avatar.visual.spec.ts +7 -3
- package/src/components/data-display/badge/badge.docs.html +39 -0
- package/src/components/data-display/badge/badge.visual.spec.ts +7 -3
- package/src/components/data-display/card/card-visual.png +0 -0
- package/src/components/data-display/card/card.docs.html +36 -0
- package/src/components/data-display/card/card.visual.spec.ts +7 -3
- package/src/components/data-display/data-list/data-list-visual.png +0 -0
- package/src/components/data-display/data-list/data-list.docs.html +97 -0
- package/src/components/data-display/data-list/data-list.visual.spec.ts +7 -3
- package/src/components/data-display/icon/icon.docs.html +72 -0
- package/src/components/data-display/icon/icon.visual.spec.ts +7 -3
- package/src/components/data-display/image/image-visual.png +0 -0
- package/src/components/data-display/image/image.docs.html +67 -0
- package/src/components/data-display/image/image.visual.spec.ts +7 -3
- package/src/components/data-display/stat/stat.docs.html +35 -0
- package/src/components/data-display/stat/stat.visual.spec.ts +7 -3
- package/src/components/data-display/status/status.docs.html +67 -0
- package/src/components/data-display/status/status.visual.spec.ts +7 -3
- package/src/components/data-display/table/table.docs.html +73 -0
- package/src/components/data-display/table/table.visual.spec.ts +7 -3
- package/src/components/data-display/tag/tag.docs.html +42 -0
- package/src/components/data-display/tag/tag.visual.spec.ts +7 -3
- package/src/components/disclosure/accordion/accordion.docs.html +83 -0
- package/src/components/disclosure/accordion/accordion.visual.spec.ts +7 -3
- package/src/components/disclosure/disclosure/disclosure.docs.html +51 -0
- package/src/components/disclosure/disclosure/disclosure.visual.spec.ts +7 -3
- package/src/components/feedback/alert/alert.docs.html +90 -0
- package/src/components/feedback/alert/alert.visual.spec.ts +7 -3
- package/src/components/feedback/progress/progress.docs.html +65 -0
- package/src/components/feedback/progress/progress.visual.spec.ts +7 -3
- package/src/components/feedback/progress-circle/progress-circle.docs.html +65 -0
- package/src/components/feedback/progress-circle/progress-circle.visual.spec.ts +7 -3
- package/src/components/feedback/skeleton/skeleton.docs.html +40 -0
- package/src/components/feedback/skeleton/skeleton.visual.spec.ts +7 -3
- package/src/components/feedback/spinner/spinner.docs.html +28 -0
- package/src/components/feedback/spinner/spinner.visual.spec.ts +7 -3
- package/src/components/feedback/toast/toast-visual.png +0 -0
- package/src/components/feedback/toast/toast.docs.html +109 -0
- package/src/components/feedback/toast/toast.visual.spec.ts +7 -3
- package/src/components/forms/checkbox/checkbox.docs.html +33 -0
- package/src/components/forms/checkbox/checkbox.visual.spec.ts +7 -3
- package/src/components/forms/checkbox-group/checkbox-group.docs.html +104 -0
- package/src/components/forms/checkbox-group/checkbox-group.visual.spec.ts +7 -3
- package/src/components/forms/field/field.docs.html +63 -0
- package/src/components/forms/field/field.visual.spec.ts +7 -3
- package/src/components/forms/fieldset/fieldset.docs.html +122 -0
- package/src/components/forms/fieldset/fieldset.visual.spec.ts +7 -3
- package/src/components/forms/form/form.docs.html +132 -0
- package/src/components/forms/form/form.visual.spec.ts +7 -3
- package/src/components/forms/form-error/form-error.docs.html +18 -0
- package/src/components/forms/form-error/form-error.visual.spec.ts +7 -3
- package/src/components/forms/form-helper/form-helper.docs.html +42 -0
- package/src/components/forms/form-helper/form-helper.visual.spec.ts +7 -3
- package/src/components/forms/input/input-visual.png +0 -0
- package/src/components/forms/input/input.docs.html +69 -0
- package/src/components/forms/input/input.visual.spec.ts +7 -3
- package/src/components/forms/label/label-visual.png +0 -0
- package/src/components/forms/label/label.docs.html +29 -0
- package/src/components/forms/label/label.visual.spec.ts +7 -3
- package/src/components/forms/number-input/number-input-visual.png +0 -0
- package/src/components/forms/number-input/number-input.docs.html +100 -0
- package/src/components/forms/number-input/number-input.visual.spec.ts +7 -3
- package/src/components/forms/password-input/password-input-visual.png +0 -0
- package/src/components/forms/password-input/password-input.docs.html +88 -0
- package/src/components/forms/password-input/password-input.visual.spec.ts +7 -3
- package/src/components/forms/radio/radio.docs.html +52 -0
- package/src/components/forms/radio/radio.visual.spec.ts +7 -3
- package/src/components/forms/radio-group/radio-group.docs.html +100 -0
- package/src/components/forms/radio-group/radio-group.visual.spec.ts +7 -3
- package/src/components/forms/search-input/search-input-visual.png +0 -0
- package/src/components/forms/search-input/search-input.docs.html +87 -0
- package/src/components/forms/search-input/search-input.visual.spec.ts +7 -3
- package/src/components/forms/select/select-visual.png +0 -0
- package/src/components/forms/select/select.docs.html +70 -0
- package/src/components/forms/select/select.visual.spec.ts +7 -3
- package/src/components/forms/slider/slider-visual.png +0 -0
- package/src/components/forms/slider/slider.docs.html +25 -0
- package/src/components/forms/slider/slider.visual.spec.ts +7 -3
- package/src/components/forms/textarea/textarea-visual.png +0 -0
- package/src/components/forms/textarea/textarea.docs.html +39 -0
- package/src/components/forms/textarea/textarea.visual.spec.ts +7 -3
- package/src/components/forms/toggle/toggle.docs.html +64 -0
- package/src/components/forms/toggle/toggle.visual.spec.ts +7 -3
- package/src/components/navigation/breadcrumb/breadcrumb.docs.html +60 -0
- package/src/components/navigation/breadcrumb/breadcrumb.visual.spec.ts +7 -3
- package/src/components/navigation/dropdown-menu/dropdown-menu-visual.png +0 -0
- package/src/components/navigation/dropdown-menu/dropdown-menu.docs.html +106 -0
- package/src/components/navigation/dropdown-menu/dropdown-menu.visual.spec.ts +7 -3
- package/src/components/navigation/menu/menu.docs.html +122 -0
- package/src/components/navigation/menu/menu.visual.spec.ts +7 -3
- package/src/components/navigation/nav/nav.docs.html +74 -0
- package/src/components/navigation/nav/nav.visual.spec.ts +7 -3
- package/src/components/navigation/pagination/pagination-visual.png +0 -0
- package/src/components/navigation/pagination/pagination.docs.html +116 -0
- package/src/components/navigation/pagination/pagination.visual.spec.ts +7 -3
- package/src/components/navigation/tabs/tabs.docs.html +66 -0
- package/src/components/navigation/tabs/tabs.visual.spec.ts +7 -3
- package/src/components/overlays/dialog/dialog.docs.html +61 -0
- package/src/components/overlays/dialog/dialog.visual.spec.ts +7 -3
- package/src/components/overlays/drawer/drawer-visual.png +0 -0
- package/src/components/overlays/drawer/drawer.docs.html +90 -0
- package/src/components/overlays/drawer/drawer.visual.spec.ts +7 -3
- package/src/components/overlays/modal/modal.docs.html +69 -0
- package/src/components/overlays/modal/modal.visual.spec.ts +7 -3
- package/src/components/overlays/overlay/overlay.docs.html +30 -0
- package/src/components/overlays/overlay/overlay.visual.spec.ts +7 -3
- package/src/components/overlays/popover/popover.docs.html +41 -0
- package/src/components/overlays/popover/popover.visual.spec.ts +7 -3
- package/src/components/overlays/tooltip/tooltip.docs.html +33 -0
- package/src/components/overlays/tooltip/tooltip.visual.spec.ts +7 -3
- package/src/components/typography/blockquote/blockquote.docs.html +24 -0
- package/src/components/typography/blockquote/blockquote.visual.spec.ts +7 -3
- package/src/components/typography/code/code-visual.png +0 -0
- package/src/components/typography/code/code.docs.html +23 -0
- package/src/components/typography/code/code.visual.spec.ts +7 -3
- package/src/components/typography/code-block/code-block-visual.png +0 -0
- package/src/components/typography/code-block/code-block.docs.html +87 -0
- package/src/components/typography/code-block/code-block.visual.spec.ts +7 -3
- package/src/components/typography/heading/heading-visual.png +0 -0
- package/src/components/typography/heading/heading.docs.html +26 -0
- package/src/components/typography/heading/heading.visual.spec.ts +7 -3
- package/src/components/typography/kbd/kbd.docs.html +16 -0
- package/src/components/typography/kbd/kbd.visual.spec.ts +7 -3
- package/src/components/typography/link/link.docs.html +33 -0
- package/src/components/typography/link/link.visual.spec.ts +7 -3
- package/src/components/typography/list/list.docs.html +79 -0
- package/src/components/typography/list/list.visual.spec.ts +7 -3
- package/src/components/typography/mark/mark.docs.html +12 -0
- package/src/components/typography/mark/mark.visual.spec.ts +7 -3
- package/src/config/guides/accessibility.docs.html +108 -0
- package/src/config/guides/getting-started.docs.html +47 -0
- package/src/config/guides/theming.docs.html +71 -0
- package/src/config/tokens/colors/colors.docs.html +75 -0
- package/src/config/tokens/design-tokens.docs.html +116 -0
- package/src/config/tokens/grid/grid.docs.html +12 -0
- package/src/config/tokens/spacing/spacing.docs.html +33 -0
- package/src/debug/debug.docs.html +29 -0
- package/src/debug/index.scss +81 -1
- package/src/layout/app-shell/app-shell-visual.png +0 -0
- package/src/layout/app-shell/app-shell.docs.html +102 -0
- package/src/layout/app-shell/app-shell.visual.spec.ts +3 -3
- package/src/layout/aspect-ratio/aspect-ratio.docs.html +41 -0
- package/src/layout/aspect-ratio/aspect-ratio.visual.spec.ts +3 -3
- package/src/layout/box/box-visual.png +0 -0
- package/src/layout/box/box.docs.html +27 -0
- package/src/layout/box/box.visual.spec.ts +3 -3
- package/src/layout/center/center.docs.html +26 -0
- package/src/layout/center/center.visual.spec.ts +3 -3
- package/src/layout/column/column.docs.html +32 -0
- package/src/layout/column/column.visual.spec.ts +3 -3
- package/src/layout/container/container.docs.html +37 -0
- package/src/layout/content/content-visual.png +0 -0
- package/src/layout/content/content.docs.html +38 -0
- package/src/layout/content/content.visual.spec.ts +7 -3
- package/src/layout/footer/footer-visual.png +0 -0
- package/src/layout/footer/footer.docs.html +73 -0
- package/src/layout/footer/footer.visual.spec.ts +7 -3
- package/src/layout/grid/grid.docs.html +87 -0
- package/src/layout/grid/grid.visual.spec.ts +3 -3
- package/src/layout/main/main.docs.html +31 -0
- package/src/layout/nav-rail/nav-rail-visual.png +0 -0
- package/src/layout/nav-rail/nav-rail.docs.html +42 -0
- package/src/layout/nav-rail/nav-rail.visual.spec.ts +7 -3
- package/src/layout/page-header/page-header.docs.html +52 -0
- package/src/layout/page-header/page-header.visual.spec.ts +7 -3
- package/src/layout/row/row.docs.html +47 -0
- package/src/layout/row/row.visual.spec.ts +3 -3
- package/src/layout/sidebar/sidebar-visual.png +0 -0
- package/src/layout/sidebar/sidebar.docs.html +30 -0
- package/src/layout/sidebar/sidebar.visual.spec.ts +7 -3
- package/src/layout/sidebar-nav/sidebar-nav.docs.html +235 -0
- package/src/layout/sidebar-nav/sidebar-nav.visual.spec.ts +7 -3
- package/src/layout/topbar/topbar-visual.png +0 -0
- package/src/layout/topbar/topbar.docs.html +64 -0
- package/src/layout/topbar/topbar.visual.spec.ts +7 -3
- package/src/utilities/container/container.docs.html +34 -0
- package/src/utilities/display/display.docs.html +30 -0
- package/src/utilities/scroll-animation/scroll-animation.docs.html +32 -0
- package/src/utilities/scroll-snap/scroll-snap.docs.html +80 -0
- package/src/utilities/spacing/spacing.docs.html +29 -0
- package/src/utilities/text/text.docs.html +66 -0
- package/src/utilities/view-transition/view-transition.docs.html +52 -0
- package/src/utilities/visually-hidden/visually-hidden.docs.html +18 -0
- package/src/base/typography/typography.docs.json +0 -328
- package/src/components/actions/button/button.docs.json +0 -264
- package/src/components/actions/button-group/button-group.docs.json +0 -151
- package/src/components/actions/close-button/close-button.docs.json +0 -265
- package/src/components/content/divider/divider.docs.json +0 -113
- package/src/components/content/scroll-area/scroll-area.docs.json +0 -273
- package/src/components/content/spacer/spacer.docs.json +0 -102
- package/src/components/data-display/avatar/avatar.docs.json +0 -245
- package/src/components/data-display/badge/badge.docs.json +0 -114
- package/src/components/data-display/card/card.docs.json +0 -229
- package/src/components/data-display/data-list/data-list.docs.json +0 -259
- package/src/components/data-display/icon/icon.docs.json +0 -307
- package/src/components/data-display/image/image.docs.json +0 -337
- package/src/components/data-display/stat/stat.docs.json +0 -114
- package/src/components/data-display/status/status.docs.json +0 -147
- package/src/components/data-display/table/table.docs.json +0 -184
- package/src/components/data-display/tag/tag.docs.json +0 -146
- package/src/components/disclosure/accordion/accordion.docs.json +0 -206
- package/src/components/disclosure/disclosure/disclosure.docs.json +0 -154
- package/src/components/feedback/alert/alert.docs.json +0 -325
- package/src/components/feedback/progress/progress.docs.json +0 -315
- package/src/components/feedback/progress-circle/progress-circle.docs.json +0 -378
- package/src/components/feedback/skeleton/skeleton.docs.json +0 -142
- package/src/components/feedback/spinner/spinner.docs.json +0 -121
- package/src/components/feedback/toast/toast.docs.json +0 -418
- package/src/components/forms/checkbox/checkbox.docs.json +0 -166
- package/src/components/forms/checkbox-group/checkbox-group.docs.json +0 -339
- package/src/components/forms/field/field.docs.json +0 -276
- package/src/components/forms/fieldset/fieldset.docs.json +0 -520
- package/src/components/forms/form/form.docs.json +0 -482
- package/src/components/forms/form-error/form-error.docs.json +0 -61
- package/src/components/forms/form-helper/form-helper.docs.json +0 -151
- package/src/components/forms/input/input.docs.json +0 -306
- package/src/components/forms/label/label.docs.json +0 -110
- package/src/components/forms/number-input/number-input.docs.json +0 -311
- package/src/components/forms/password-input/password-input.docs.json +0 -316
- package/src/components/forms/radio/radio.docs.json +0 -236
- package/src/components/forms/radio-group/radio-group.docs.json +0 -351
- package/src/components/forms/search-input/search-input.docs.json +0 -293
- package/src/components/forms/select/select.docs.json +0 -231
- package/src/components/forms/slider/slider.docs.json +0 -144
- package/src/components/forms/textarea/textarea.docs.json +0 -229
- package/src/components/forms/toggle/toggle.docs.json +0 -229
- package/src/components/navigation/breadcrumb/breadcrumb.docs.json +0 -240
- package/src/components/navigation/dropdown-menu/dropdown-menu.docs.json +0 -290
- package/src/components/navigation/menu/menu.docs.json +0 -326
- package/src/components/navigation/nav/nav.docs.json +0 -304
- package/src/components/navigation/pagination/pagination.docs.json +0 -483
- package/src/components/navigation/tabs/tabs.docs.json +0 -243
- package/src/components/overlays/dialog/dialog.docs.json +0 -200
- package/src/components/overlays/drawer/drawer.docs.json +0 -307
- package/src/components/overlays/modal/modal.docs.json +0 -252
- package/src/components/overlays/overlay/overlay.docs.json +0 -138
- package/src/components/overlays/popover/popover.docs.json +0 -154
- package/src/components/overlays/tooltip/tooltip.docs.json +0 -133
- package/src/components/typography/blockquote/blockquote.docs.json +0 -89
- package/src/components/typography/code/code.docs.json +0 -104
- package/src/components/typography/code-block/code-block.docs.json +0 -308
- package/src/components/typography/heading/heading.docs.json +0 -120
- package/src/components/typography/kbd/kbd.docs.json +0 -61
- package/src/components/typography/link/link.docs.json +0 -149
- package/src/components/typography/list/list.docs.json +0 -296
- package/src/components/typography/mark/mark.docs.json +0 -60
- package/src/config/tokens/accessibility.docs.json +0 -125
- package/src/config/tokens/colors/colors.docs.json +0 -316
- package/src/config/tokens/grid/grid.docs.json +0 -54
- package/src/config/tokens/spacing/spacing.docs.json +0 -114
- package/src/config/tokens/theming.docs.json +0 -288
- package/src/debug/grid-overlay.scss +0 -81
- package/src/layout/app-shell/app-shell.docs.json +0 -155
- package/src/layout/aspect-ratio/aspect-ratio.docs.json +0 -193
- package/src/layout/box/box.docs.json +0 -93
- package/src/layout/center/center.docs.json +0 -63
- package/src/layout/column/column.docs.json +0 -157
- package/src/layout/container/container.docs.json +0 -85
- package/src/layout/content/content.docs.json +0 -82
- package/src/layout/footer/footer.docs.json +0 -119
- package/src/layout/grid/grid.docs.json +0 -493
- package/src/layout/main/main.docs.json +0 -87
- package/src/layout/nav-rail/nav-rail.docs.json +0 -76
- package/src/layout/page-header/page-header.docs.json +0 -124
- package/src/layout/row/row.docs.json +0 -237
- package/src/layout/sidebar/sidebar.docs.json +0 -63
- package/src/layout/sidebar-nav/sidebar-nav.docs.json +0 -833
- package/src/layout/topbar/topbar.docs.json +0 -110
- package/src/testing/api-types.ts +0 -20
- package/src/testing/grid-alignment.spec.ts +0 -38
- package/src/testing/html-generator.ts +0 -151
- package/src/testing/index.ts +0 -15
- package/src/testing/page-setup.ts +0 -149
- package/src/testing/rhythm.ts +0 -146
- package/src/testing/scaffold.ts +0 -50
- package/src/utilities/container/container.docs.json +0 -121
- package/src/utilities/display/display.docs.json +0 -83
- package/src/utilities/scroll-animation/scroll-animation.docs.json +0 -100
- package/src/utilities/scroll-snap/scroll-snap.docs.json +0 -333
- package/src/utilities/spacing/spacing.docs.json +0 -133
- package/src/utilities/text/text.docs.json +0 -191
- package/src/utilities/view-transition/view-transition.docs.json +0 -63
- package/src/utilities/visually-hidden/visually-hidden.docs.json +0 -44
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
|
-
import { saveForLostPixel,
|
|
3
|
+
import { saveForLostPixel, setupVisualTestFromHtmlDocs } from '../../../test-utils';
|
|
4
4
|
|
|
5
|
-
const DOCS_PATH = resolve(__dirname, 'column.docs.
|
|
5
|
+
const DOCS_PATH = resolve(__dirname, 'column.docs.html');
|
|
6
6
|
|
|
7
7
|
test.describe('column visual regression', () => {
|
|
8
8
|
test('all variations', async ({ page }) => {
|
|
9
|
-
await
|
|
9
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
10
10
|
await saveForLostPixel(page, 'column');
|
|
11
11
|
await expect(page.locator('body')).toHaveScreenshot('column.visual.png');
|
|
12
12
|
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Container
|
|
3
|
+
type: primitive
|
|
4
|
+
id: container
|
|
5
|
+
description: Content wrapper with max-width and inline padding. Centers page content with consistent margins.
|
|
6
|
+
api: container.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @default -->
|
|
10
|
+
<!-- Constrains content to a max width with horizontal padding. -->
|
|
11
|
+
<div class="ui-container" style="background: var(--ui-color-bg-muted)">
|
|
12
|
+
<p>Content within a container</p>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<!-- @centered -->
|
|
16
|
+
<!-- Centers the container horizontally with auto margins. -->
|
|
17
|
+
<div class="ui-container ui-container--center" style="background: var(--ui-color-bg-muted)">
|
|
18
|
+
<p>Centered container</p>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<!-- @sizes | column -->
|
|
22
|
+
<!-- Width presets for different layout needs. -->
|
|
23
|
+
<div class="ui-container ui-container--sm ui-container--center" style="background: var(--ui-color-bg-muted)">
|
|
24
|
+
<p>Small</p>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="ui-container ui-container--md ui-container--center" style="background: var(--ui-color-bg-muted)">
|
|
27
|
+
<p>Medium</p>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="ui-container ui-container--lg ui-container--center" style="background: var(--ui-color-bg-muted)">
|
|
30
|
+
<p>Large (default)</p>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="ui-container ui-container--xl ui-container--center" style="background: var(--ui-color-bg-muted)">
|
|
33
|
+
<p>Extra large</p>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="ui-container ui-container--full" style="background: var(--ui-color-bg-muted)">
|
|
36
|
+
<p>Full width</p>
|
|
37
|
+
</div>
|
|
Binary file
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Content
|
|
3
|
+
type: primitive
|
|
4
|
+
id: content
|
|
5
|
+
description: Content wrapper with consistent vertical spacing. Use inside container for padded, spaced content areas.
|
|
6
|
+
api: ./content.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @default -->
|
|
10
|
+
<!-- Vertical flex layout with gap between children and block/inline padding. -->
|
|
11
|
+
<div class="ui-content" style="0: b; 1: a; 2: c; 3: k; 4: g; 5: r; 6: o; 7: u; 8: n; 9: d; 10: :; 11: ; 12: v; 13: a; 14: r; 15: (; 16: -; 17: -; 18: u; 19: i; 20: -; 21: c; 22: o; 23: l; 24: o; 25: r; 26: -; 27: b; 28: g; 29: -; 30: s; 31: u; 32: b; 33: t; 34: l; 35: e; 36: )">
|
|
12
|
+
<p>First section of content with consistent spacing.</p>
|
|
13
|
+
<p>Second section automatically spaced by the gap token.</p>
|
|
14
|
+
<p>Third section follows the same rhythm.</p>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<!-- @prose -->
|
|
18
|
+
<!-- Narrower max-width for readable long-form text (640px / 80 units). -->
|
|
19
|
+
<div class="ui-content ui-content--prose" style="0: b; 1: a; 2: c; 3: k; 4: g; 5: r; 6: o; 7: u; 8: n; 9: d; 10: :; 11: ; 12: v; 13: a; 14: r; 15: (; 16: -; 17: -; 18: u; 19: i; 20: -; 21: c; 22: o; 23: l; 24: o; 25: r; 26: -; 27: b; 28: g; 29: -; 30: s; 31: u; 32: b; 33: t; 34: l; 35: e; 36: )">
|
|
20
|
+
<p>Prose content is constrained to a comfortable reading width. Long paragraphs stay readable without requiring the eye to travel too far across the screen.</p>
|
|
21
|
+
<p>This works well for articles, documentation, and form layouts.</p>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<!-- @flush -->
|
|
25
|
+
<!-- No padding, only gap between children. Useful when the parent handles padding. -->
|
|
26
|
+
<div class="ui-content ui-content--flush" style="0: b; 1: a; 2: c; 3: k; 4: g; 5: r; 6: o; 7: u; 8: n; 9: d; 10: :; 11: ; 12: v; 13: a; 14: r; 15: (; 16: -; 17: -; 18: u; 19: i; 20: -; 21: c; 22: o; 23: l; 24: o; 25: r; 26: -; 27: b; 28: g; 29: -; 30: s; 31: u; 32: b; 33: t; 34: l; 35: e; 36: )">
|
|
27
|
+
<p>Flush content has no padding.</p>
|
|
28
|
+
<p>Gap between children is preserved.</p>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<!-- @with_container -->
|
|
32
|
+
<!-- Content inside a centered container for a typical page layout. -->
|
|
33
|
+
<div class="ui-container ui-container--center">
|
|
34
|
+
<div class="ui-content">
|
|
35
|
+
<h2 class="ui-heading ui-heading--3">Page Title</h2>
|
|
36
|
+
<p>Content with consistent spacing and max-width.</p>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
saveForLostPixel,
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
|
+
validateGridRhythm,
|
|
7
|
+
} from '../../../test-utils';
|
|
4
8
|
|
|
5
|
-
const DOCS_PATH = resolve(__dirname, 'content.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'content.docs.html');
|
|
6
10
|
|
|
7
11
|
test.describe('content visual regression', () => {
|
|
8
12
|
test('all variations', async ({ page }) => {
|
|
9
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
10
14
|
await validateGridRhythm(page, 'content');
|
|
11
15
|
await saveForLostPixel(page, 'content');
|
|
12
16
|
await expect(page.locator('body')).toHaveScreenshot('content.visual.png');
|
|
Binary file
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Footer
|
|
3
|
+
type: primitive
|
|
4
|
+
id: footer
|
|
5
|
+
description: Page footer with start, center, and end sections. Supports sticky/fixed positioning and border/shadow variants.
|
|
6
|
+
api: ./footer.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @default -->
|
|
10
|
+
<!-- Basic footer with three sections. -->
|
|
11
|
+
<footer class="ui-footer ui-footer--bordered">
|
|
12
|
+
<div class="ui-footer__start">
|
|
13
|
+
<small>2026 Brand</small>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="ui-footer__center">
|
|
16
|
+
<span>Footer links</span>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="ui-footer__end">
|
|
19
|
+
<small>v1.0.0</small>
|
|
20
|
+
</div>
|
|
21
|
+
</footer>
|
|
22
|
+
|
|
23
|
+
<!-- @sticky -->
|
|
24
|
+
<!-- Stays at the bottom of the viewport on scroll. -->
|
|
25
|
+
<footer class="ui-footer ui-footer--sticky ui-footer--bordered">
|
|
26
|
+
<div class="ui-footer__start"><small>Brand</small></div>
|
|
27
|
+
<div class="ui-footer__center">Links</div>
|
|
28
|
+
<div class="ui-footer__end"><small>v1.0.0</small></div>
|
|
29
|
+
</footer>
|
|
30
|
+
|
|
31
|
+
<!-- @bordered -->
|
|
32
|
+
<!-- Top border via inset box-shadow to preserve grid rhythm. -->
|
|
33
|
+
<footer class="ui-footer ui-footer--bordered">
|
|
34
|
+
<div class="ui-footer__start">
|
|
35
|
+
<small>Bordered footer</small>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="ui-footer__end">
|
|
38
|
+
<small>v1.0.0</small>
|
|
39
|
+
</div>
|
|
40
|
+
</footer>
|
|
41
|
+
|
|
42
|
+
<!-- @raised -->
|
|
43
|
+
<!-- Subtle drop shadow above the footer. -->
|
|
44
|
+
<footer class="ui-footer ui-footer--raised">
|
|
45
|
+
<div class="ui-footer__start">
|
|
46
|
+
<small>Raised footer</small>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="ui-footer__end">
|
|
49
|
+
<small>v1.0.0</small>
|
|
50
|
+
</div>
|
|
51
|
+
</footer>
|
|
52
|
+
|
|
53
|
+
<!-- @fixed -->
|
|
54
|
+
<!-- Fixed to viewport bottom, always visible. -->
|
|
55
|
+
<footer class="ui-footer ui-footer--fixed ui-footer--bordered">
|
|
56
|
+
<div class="ui-footer__start"><small>Brand</small></div>
|
|
57
|
+
<div class="ui-footer__end"><small>v1.0.0</small></div>
|
|
58
|
+
</footer>
|
|
59
|
+
|
|
60
|
+
<!-- @full_layout -->
|
|
61
|
+
<!-- Footer inside an app-shell with topbar and sidebar. -->
|
|
62
|
+
<body class="ui-app-shell">
|
|
63
|
+
<header class="ui-topbar ui-topbar--bordered">
|
|
64
|
+
<div class="ui-topbar__start"><strong>App</strong></div>
|
|
65
|
+
</header>
|
|
66
|
+
<main class="ui-main ui-main--full">
|
|
67
|
+
<div class="ui-container">Content</div>
|
|
68
|
+
<footer class="ui-footer ui-footer--bordered">
|
|
69
|
+
<div class="ui-footer__start"><small>Brand</small></div>
|
|
70
|
+
<div class="ui-footer__end"><small>v1.0.0</small></div>
|
|
71
|
+
</footer>
|
|
72
|
+
</main>
|
|
73
|
+
</body>
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
saveForLostPixel,
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
|
+
validateGridRhythm,
|
|
7
|
+
} from '../../../test-utils';
|
|
4
8
|
|
|
5
|
-
const DOCS_PATH = resolve(__dirname, 'footer.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'footer.docs.html');
|
|
6
10
|
|
|
7
11
|
test.describe('footer visual regression', () => {
|
|
8
12
|
test('all variations', async ({ page }) => {
|
|
9
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
10
14
|
await validateGridRhythm(page, 'footer');
|
|
11
15
|
await saveForLostPixel(page, 'footer');
|
|
12
16
|
await expect(page.locator('body')).toHaveScreenshot('footer.visual.png');
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Grid
|
|
3
|
+
type: primitive
|
|
4
|
+
id: grid-primitive
|
|
5
|
+
description: CSS Grid with column variants, subgrid support, and span utilities.
|
|
6
|
+
api: grid.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @columns -->
|
|
10
|
+
<div class="ui-grid ui-grid--2">
|
|
11
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">1</div>
|
|
12
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">2</div>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="ui-grid ui-grid--3">
|
|
15
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">1</div>
|
|
16
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">2</div>
|
|
17
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">3</div>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="ui-grid ui-grid--4">
|
|
20
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">1</div>
|
|
21
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">2</div>
|
|
22
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">3</div>
|
|
23
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">4</div>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="ui-grid ui-grid--auto">
|
|
26
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Auto</div>
|
|
27
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Auto</div>
|
|
28
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Auto</div>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<!-- @subgrid -->
|
|
32
|
+
<!-- Children inherit parent grid tracks for cross-item alignment. -->
|
|
33
|
+
<div class="ui-grid ui-grid--3">
|
|
34
|
+
<div class="ui-grid--subgrid" style="grid-column: span 3">
|
|
35
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Subgrid child 1</div>
|
|
36
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Subgrid child 2</div>
|
|
37
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Subgrid child 3</div>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="ui-grid ui-grid--3" style="grid-template-rows: auto 1fr auto">
|
|
41
|
+
<div class="ui-grid--subgrid-rows" style="grid-row: span 3; border: 1px solid var(--ui-color-border); padding: var(--ui-space-2)">
|
|
42
|
+
<strong>Card A</strong>
|
|
43
|
+
<p>Short content.</p>
|
|
44
|
+
<span style="color: var(--ui-color-text-muted)">Footer</span>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="ui-grid--subgrid-rows" style="grid-row: span 3; border: 1px solid var(--ui-color-border); padding: var(--ui-space-2)">
|
|
47
|
+
<strong>Card B</strong>
|
|
48
|
+
<p>Longer content that wraps to multiple lines to demonstrate row alignment.</p>
|
|
49
|
+
<span style="color: var(--ui-color-text-muted)">Footer</span>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="ui-grid--subgrid-rows" style="grid-row: span 3; border: 1px solid var(--ui-color-border); padding: var(--ui-space-2)">
|
|
52
|
+
<strong>Card C</strong>
|
|
53
|
+
<p>Medium text.</p>
|
|
54
|
+
<span style="color: var(--ui-color-text-muted)">Footer</span>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="ui-grid ui-grid--3" style="grid-template-rows: auto auto">
|
|
58
|
+
<div class="ui-grid--subgrid-both" style="grid-column: span 3; grid-row: span 2">
|
|
59
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">A1</div>
|
|
60
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">A2</div>
|
|
61
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">A3</div>
|
|
62
|
+
<div style="background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">B1</div>
|
|
63
|
+
<div style="background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">B2</div>
|
|
64
|
+
<div style="background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">B3</div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<!-- @column_span -->
|
|
69
|
+
<!-- Span multiple columns with .ui-grid-col-span-{2,3,4,full} utilities. -->
|
|
70
|
+
<div class="ui-grid ui-grid--4">
|
|
71
|
+
<div style="grid-column: span 2; background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Span 2</div>
|
|
72
|
+
<div style="background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">1</div>
|
|
73
|
+
<div style="background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">1</div>
|
|
74
|
+
<div style="background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">1</div>
|
|
75
|
+
<div style="grid-column: span 3; background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Span 3</div>
|
|
76
|
+
<div style="grid-column: 1 / -1; background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Span full</div>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<!-- @row_span -->
|
|
80
|
+
<!-- Span multiple rows with .ui-grid-row-span-{2,3,full} utilities. -->
|
|
81
|
+
<div class="ui-grid ui-grid--3">
|
|
82
|
+
<div style="grid-row: span 2; background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Row span 2</div>
|
|
83
|
+
<div style="background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">1</div>
|
|
84
|
+
<div style="background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">2</div>
|
|
85
|
+
<div style="background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">3</div>
|
|
86
|
+
<div style="background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">4</div>
|
|
87
|
+
</div>
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
|
-
import { saveForLostPixel,
|
|
3
|
+
import { saveForLostPixel, setupVisualTestFromHtmlDocs } from '../../../test-utils';
|
|
4
4
|
|
|
5
|
-
const DOCS_PATH = resolve(__dirname, 'grid.docs.
|
|
5
|
+
const DOCS_PATH = resolve(__dirname, 'grid.docs.html');
|
|
6
6
|
|
|
7
7
|
test.describe('grid visual regression', () => {
|
|
8
8
|
test('all variations', async ({ page }) => {
|
|
9
|
-
await
|
|
9
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
10
10
|
await saveForLostPixel(page, 'grid');
|
|
11
11
|
await expect(page.locator('body')).toHaveScreenshot('grid.visual.png');
|
|
12
12
|
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Main
|
|
3
|
+
type: primitive
|
|
4
|
+
id: main
|
|
5
|
+
description: Main content area that accounts for sidebar and topbar offsets in app layouts.
|
|
6
|
+
api: main.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @default -->
|
|
10
|
+
<!-- Offsets content for a start-side sidebar and optional topbar. -->
|
|
11
|
+
<div style="position: relative; height: var(--ui-row-4)">
|
|
12
|
+
<main class="ui-main" style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">
|
|
13
|
+
<p>Main content area</p>
|
|
14
|
+
</main>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<!-- @sidebar_end -->
|
|
18
|
+
<!-- Offsets content for an end-side sidebar instead of start. -->
|
|
19
|
+
<div style="position: relative; height: var(--ui-row-4)">
|
|
20
|
+
<main class="ui-main ui-main--sidebar-end" style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">
|
|
21
|
+
<p>Content with end sidebar</p>
|
|
22
|
+
</main>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<!-- @full_width -->
|
|
26
|
+
<!-- No sidebar offset. Use when there is no sidebar. -->
|
|
27
|
+
<div style="position: relative; height: var(--ui-row-4)">
|
|
28
|
+
<main class="ui-main ui-main--full" style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">
|
|
29
|
+
<p>Full width content</p>
|
|
30
|
+
</main>
|
|
31
|
+
</div>
|
|
Binary file
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Nav Rail
|
|
3
|
+
type: primitive
|
|
4
|
+
id: nav-rail
|
|
5
|
+
description: Narrow fixed vertical navigation rail for icon-based navigation with bottom actions.
|
|
6
|
+
api: ./nav-rail.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @default -->
|
|
10
|
+
<!-- Fixed narrow rail with icon items and bottom actions. -->
|
|
11
|
+
<nav class="ui-nav-rail" style="0: p; 1: o; 2: s; 3: i; 4: t; 5: i; 6: o; 7: n; 8: :; 9: ; 10: r; 11: e; 12: l; 13: a; 14: t; 15: i; 16: v; 17: e; 18: ;; 19: ; 20: b; 21: l; 22: o; 23: c; 24: k; 25: -; 26: s; 27: i; 28: z; 29: e; 30: :; 31: ; 32: 3; 33: 2; 34: 0; 35: p; 36: x">
|
|
12
|
+
<div class="ui-nav-rail__items">
|
|
13
|
+
<button class="ui-button ui-button--ghost ui-button--icon">H</button>
|
|
14
|
+
<button class="ui-button ui-button--ghost ui-button--icon">S</button>
|
|
15
|
+
<button class="ui-button ui-button--ghost ui-button--icon">M</button>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="ui-nav-rail__actions">
|
|
18
|
+
<button class="ui-button ui-button--ghost ui-button--icon">G</button>
|
|
19
|
+
</div>
|
|
20
|
+
</nav>
|
|
21
|
+
|
|
22
|
+
<!-- @end_position -->
|
|
23
|
+
<!-- Rail on the end (right in LTR) side. -->
|
|
24
|
+
<nav class="ui-nav-rail ui-nav-rail--end">
|
|
25
|
+
<div class="ui-nav-rail__items">
|
|
26
|
+
<!-- icon buttons -->
|
|
27
|
+
</div>
|
|
28
|
+
<div class="ui-nav-rail__actions">
|
|
29
|
+
<!-- settings, profile -->
|
|
30
|
+
</div>
|
|
31
|
+
</nav>
|
|
32
|
+
|
|
33
|
+
<!-- @with_topbar -->
|
|
34
|
+
<!-- Nav rail respects --topbar-height, offsetting below the topbar. -->
|
|
35
|
+
<body class="ui-app-shell" style="--topbar-height: var(--ui-row-3)">
|
|
36
|
+
<header class="ui-topbar ui-topbar--fixed ui-topbar--bordered">
|
|
37
|
+
<div class="ui-topbar__start"><strong>App</strong></div>
|
|
38
|
+
</header>
|
|
39
|
+
<nav class="ui-nav-rail">
|
|
40
|
+
<div class="ui-nav-rail__items"><!-- icons --></div>
|
|
41
|
+
</nav>
|
|
42
|
+
</body>
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
saveForLostPixel,
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
|
+
validateGridRhythm,
|
|
7
|
+
} from '../../../test-utils';
|
|
4
8
|
|
|
5
|
-
const DOCS_PATH = resolve(__dirname, 'nav-rail.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'nav-rail.docs.html');
|
|
6
10
|
|
|
7
11
|
test.describe('nav-rail visual regression', () => {
|
|
8
12
|
test('all variations', async ({ page }) => {
|
|
9
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
10
14
|
await validateGridRhythm(page, 'nav-rail');
|
|
11
15
|
await saveForLostPixel(page, 'nav-rail');
|
|
12
16
|
await expect(page.locator('body')).toHaveScreenshot('nav-rail.visual.png');
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Page Header
|
|
3
|
+
type: primitive
|
|
4
|
+
id: page-header
|
|
5
|
+
description: Content area header with title, description, actions, and optional breadcrumb.
|
|
6
|
+
api: ./page-header.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @default -->
|
|
10
|
+
<!-- Title with actions on the end side. -->
|
|
11
|
+
<header class="ui-page-header ui-page-header--bordered">
|
|
12
|
+
<div class="ui-page-header__title">
|
|
13
|
+
<h1 class="ui-heading ui-heading--xl">Users</h1>
|
|
14
|
+
<p>Manage user accounts and permissions.</p>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="ui-page-header__actions">
|
|
17
|
+
<button class="ui-button ui-button--primary">Add user</button>
|
|
18
|
+
</div>
|
|
19
|
+
</header>
|
|
20
|
+
|
|
21
|
+
<!-- @with_breadcrumb -->
|
|
22
|
+
<!-- Breadcrumb spans the full width above the title row. -->
|
|
23
|
+
<header class="ui-page-header ui-page-header--bordered">
|
|
24
|
+
<nav class="ui-page-header__breadcrumb">
|
|
25
|
+
<span>Home / Settings / Users</span>
|
|
26
|
+
</nav>
|
|
27
|
+
<div class="ui-page-header__title">
|
|
28
|
+
<h1 class="ui-heading ui-heading--xl">Users</h1>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="ui-page-header__actions">
|
|
31
|
+
<button class="ui-button">Export</button>
|
|
32
|
+
</div>
|
|
33
|
+
</header>
|
|
34
|
+
|
|
35
|
+
<!-- @bordered -->
|
|
36
|
+
<!-- Bottom border via inset box-shadow. -->
|
|
37
|
+
<header class="ui-page-header ui-page-header--bordered">
|
|
38
|
+
<div class="ui-page-header__title">
|
|
39
|
+
<h1 class="ui-heading ui-heading--xl">Dashboard</h1>
|
|
40
|
+
</div>
|
|
41
|
+
</header>
|
|
42
|
+
|
|
43
|
+
<!-- @sticky -->
|
|
44
|
+
<!-- Sticks to the top of the scroll container. -->
|
|
45
|
+
<header class="ui-page-header ui-page-header--sticky ui-page-header--bordered">
|
|
46
|
+
<div class="ui-page-header__title">
|
|
47
|
+
<h1 class="ui-heading ui-heading--xl">Sticky Header</h1>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="ui-page-header__actions">
|
|
50
|
+
<button class="ui-button">Save</button>
|
|
51
|
+
</div>
|
|
52
|
+
</header>
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
saveForLostPixel,
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
|
+
validateGridRhythm,
|
|
7
|
+
} from '../../../test-utils';
|
|
4
8
|
|
|
5
|
-
const DOCS_PATH = resolve(__dirname, 'page-header.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'page-header.docs.html');
|
|
6
10
|
|
|
7
11
|
test.describe('page-header visual regression', () => {
|
|
8
12
|
test('all variations', async ({ page }) => {
|
|
9
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
10
14
|
await validateGridRhythm(page, 'page-header');
|
|
11
15
|
await saveForLostPixel(page, 'page-header');
|
|
12
16
|
await expect(page.locator('body')).toHaveScreenshot('page-header.visual.png');
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Row
|
|
3
|
+
type: primitive
|
|
4
|
+
id: row
|
|
5
|
+
description: Horizontal layout with wrapping.
|
|
6
|
+
api: row.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @basic -->
|
|
10
|
+
<div class="ui-row ui-row--md">
|
|
11
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Tag 1</div>
|
|
12
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Tag 2</div>
|
|
13
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Tag 3</div>
|
|
14
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-2)">Tag 4</div>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<!-- @sizes -->
|
|
18
|
+
<div class="ui-row ui-row--xs">
|
|
19
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">xs</div>
|
|
20
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">xs</div>
|
|
21
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">xs</div>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="ui-row ui-row--lg">
|
|
24
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">lg</div>
|
|
25
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">lg</div>
|
|
26
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">lg</div>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="ui-row ui-row--sm">
|
|
29
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">sm</div>
|
|
30
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">sm</div>
|
|
31
|
+
<div style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">sm</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<!-- @alignment -->
|
|
35
|
+
<div class="ui-row ui-row--start" style="background: var(--ui-color-bg-muted)">
|
|
36
|
+
<div style="background: var(--ui-color-bg); padding: var(--ui-space-2)">Start</div>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="ui-row ui-row--center" style="background: var(--ui-color-bg-muted)">
|
|
39
|
+
<div style="background: var(--ui-color-bg); padding: var(--ui-space-2)">Center</div>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="ui-row ui-row--end" style="background: var(--ui-color-bg-muted)">
|
|
42
|
+
<div style="background: var(--ui-color-bg); padding: var(--ui-space-2)">End</div>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="ui-row ui-row--between" style="background: var(--ui-color-bg-muted)">
|
|
45
|
+
<div style="background: var(--ui-color-bg); padding: var(--ui-space-2)">Between A</div>
|
|
46
|
+
<div style="background: var(--ui-color-bg); padding: var(--ui-space-2)">Between B</div>
|
|
47
|
+
</div>
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
|
-
import { saveForLostPixel,
|
|
3
|
+
import { saveForLostPixel, setupVisualTestFromHtmlDocs } from '../../../test-utils';
|
|
4
4
|
|
|
5
|
-
const DOCS_PATH = resolve(__dirname, 'row.docs.
|
|
5
|
+
const DOCS_PATH = resolve(__dirname, 'row.docs.html');
|
|
6
6
|
|
|
7
7
|
test.describe('row visual regression', () => {
|
|
8
8
|
test('all variations', async ({ page }) => {
|
|
9
|
-
await
|
|
9
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
10
10
|
// skip validateGridRhythm: row is a layout primitive that
|
|
11
11
|
// controls gap/alignment, not child height
|
|
12
12
|
await saveForLostPixel(page, 'row');
|
|
Binary file
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Sidebar
|
|
3
|
+
type: primitive
|
|
4
|
+
id: sidebar
|
|
5
|
+
description: Fixed-position sidebar for app layouts with adjustable widths and positioning.
|
|
6
|
+
api: ./sidebar.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @basic -->
|
|
10
|
+
<!-- Default sidebar positioned on the start side. Use inside an app-shell layout. -->
|
|
11
|
+
<aside class="ui-sidebar">
|
|
12
|
+
<p>Sidebar content</p>
|
|
13
|
+
</aside>
|
|
14
|
+
|
|
15
|
+
<!-- @widths | column -->
|
|
16
|
+
<aside class="ui-sidebar ui-sidebar--sm" style="position: relative; height: auto;">
|
|
17
|
+
<p>Small (192px)</p>
|
|
18
|
+
</aside>
|
|
19
|
+
<aside class="ui-sidebar ui-sidebar--md" style="position: relative; height: auto;">
|
|
20
|
+
<p>Medium (240px, default)</p>
|
|
21
|
+
</aside>
|
|
22
|
+
<aside class="ui-sidebar ui-sidebar--lg" style="position: relative; height: auto;">
|
|
23
|
+
<p>Large (320px)</p>
|
|
24
|
+
</aside>
|
|
25
|
+
|
|
26
|
+
<!-- @end_position -->
|
|
27
|
+
<!-- Position sidebar on the end side with --end modifier. -->
|
|
28
|
+
<aside class="ui-sidebar ui-sidebar--end">
|
|
29
|
+
<p>End sidebar</p>
|
|
30
|
+
</aside>
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
saveForLostPixel,
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
|
+
validateGridRhythm,
|
|
7
|
+
} from '../../../test-utils';
|
|
4
8
|
|
|
5
|
-
const DOCS_PATH = resolve(__dirname, 'sidebar.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'sidebar.docs.html');
|
|
6
10
|
|
|
7
11
|
test.describe('sidebar visual regression', () => {
|
|
8
12
|
test('all variations', async ({ page }) => {
|
|
9
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
10
14
|
await validateGridRhythm(page, 'sidebar');
|
|
11
15
|
await saveForLostPixel(page, 'sidebar');
|
|
12
16
|
await expect(page.locator('body')).toHaveScreenshot('sidebar.visual.png');
|