@teseor/css 1.14.3 → 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 +3 -3
- package/src/components/actions/button-group/button-group.docs.html +47 -0
- package/src/components/actions/button-group/button-group.visual.spec.ts +3 -3
- package/src/components/actions/close-button/close-button.docs.html +77 -0
- package/src/components/actions/close-button/close-button.visual.spec.ts +3 -3
- package/src/components/content/divider/divider.docs.html +27 -0
- package/src/components/content/divider/divider.visual.spec.ts +3 -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 +3 -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 +3 -3
- package/src/components/data-display/badge/badge.docs.html +39 -0
- package/src/components/data-display/badge/badge.visual.spec.ts +3 -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 +3 -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 +3 -3
- package/src/components/data-display/icon/icon.docs.html +72 -0
- package/src/components/data-display/icon/icon.visual.spec.ts +3 -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 +3 -3
- package/src/components/data-display/stat/stat.docs.html +35 -0
- package/src/components/data-display/stat/stat.visual.spec.ts +3 -3
- package/src/components/data-display/status/status.docs.html +67 -0
- package/src/components/data-display/status/status.visual.spec.ts +3 -3
- package/src/components/data-display/table/table.docs.html +73 -0
- package/src/components/data-display/table/table.visual.spec.ts +3 -3
- package/src/components/data-display/tag/tag.docs.html +42 -0
- package/src/components/data-display/tag/tag.visual.spec.ts +3 -3
- package/src/components/disclosure/accordion/accordion.docs.html +83 -0
- package/src/components/disclosure/accordion/accordion.visual.spec.ts +3 -3
- package/src/components/disclosure/disclosure/disclosure.docs.html +51 -0
- package/src/components/disclosure/disclosure/disclosure.visual.spec.ts +3 -3
- package/src/components/feedback/alert/alert.docs.html +90 -0
- package/src/components/feedback/alert/alert.visual.spec.ts +3 -3
- package/src/components/feedback/progress/progress.docs.html +65 -0
- package/src/components/feedback/progress/progress.visual.spec.ts +3 -3
- package/src/components/feedback/progress-circle/progress-circle.docs.html +65 -0
- package/src/components/feedback/progress-circle/progress-circle.visual.spec.ts +3 -3
- package/src/components/feedback/skeleton/skeleton.docs.html +40 -0
- package/src/components/feedback/skeleton/skeleton.visual.spec.ts +3 -3
- package/src/components/feedback/spinner/spinner.docs.html +28 -0
- package/src/components/feedback/spinner/spinner.visual.spec.ts +3 -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 +3 -3
- package/src/components/forms/checkbox/checkbox.docs.html +33 -0
- package/src/components/forms/checkbox/checkbox.visual.spec.ts +3 -3
- package/src/components/forms/checkbox-group/checkbox-group.docs.html +104 -0
- package/src/components/forms/checkbox-group/checkbox-group.visual.spec.ts +3 -3
- package/src/components/forms/field/field.docs.html +63 -0
- package/src/components/forms/field/field.visual.spec.ts +3 -3
- package/src/components/forms/fieldset/fieldset.docs.html +122 -0
- package/src/components/forms/fieldset/fieldset.visual.spec.ts +3 -3
- package/src/components/forms/form/form.docs.html +132 -0
- package/src/components/forms/form/form.visual.spec.ts +3 -3
- package/src/components/forms/form-error/form-error.docs.html +18 -0
- package/src/components/forms/form-error/form-error.visual.spec.ts +3 -3
- package/src/components/forms/form-helper/form-helper.docs.html +42 -0
- package/src/components/forms/form-helper/form-helper.visual.spec.ts +3 -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 +3 -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 +3 -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 +3 -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 +3 -3
- package/src/components/forms/radio/radio.docs.html +52 -0
- package/src/components/forms/radio/radio.visual.spec.ts +3 -3
- package/src/components/forms/radio-group/radio-group.docs.html +100 -0
- package/src/components/forms/radio-group/radio-group.visual.spec.ts +3 -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 +3 -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 +3 -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 +3 -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 +3 -3
- package/src/components/forms/toggle/toggle.docs.html +64 -0
- package/src/components/forms/toggle/toggle.visual.spec.ts +3 -3
- package/src/components/navigation/breadcrumb/breadcrumb.docs.html +60 -0
- package/src/components/navigation/breadcrumb/breadcrumb.visual.spec.ts +3 -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 +3 -3
- package/src/components/navigation/menu/menu.docs.html +122 -0
- package/src/components/navigation/menu/menu.visual.spec.ts +3 -3
- package/src/components/navigation/nav/nav.docs.html +74 -0
- package/src/components/navigation/nav/nav.visual.spec.ts +3 -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 +3 -3
- package/src/components/navigation/tabs/tabs.docs.html +66 -0
- package/src/components/navigation/tabs/tabs.visual.spec.ts +3 -3
- package/src/components/overlays/dialog/dialog.docs.html +61 -0
- package/src/components/overlays/dialog/dialog.visual.spec.ts +3 -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 +3 -3
- package/src/components/overlays/modal/modal.docs.html +69 -0
- package/src/components/overlays/modal/modal.visual.spec.ts +3 -3
- package/src/components/overlays/overlay/overlay.docs.html +30 -0
- package/src/components/overlays/overlay/overlay.visual.spec.ts +3 -3
- package/src/components/overlays/popover/popover.docs.html +41 -0
- package/src/components/overlays/popover/popover.visual.spec.ts +3 -3
- package/src/components/overlays/tooltip/tooltip.docs.html +33 -0
- package/src/components/overlays/tooltip/tooltip.visual.spec.ts +3 -3
- package/src/components/typography/blockquote/blockquote.docs.html +24 -0
- package/src/components/typography/blockquote/blockquote.visual.spec.ts +3 -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 +3 -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 +3 -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 +3 -3
- package/src/components/typography/kbd/kbd.docs.html +16 -0
- package/src/components/typography/kbd/kbd.visual.spec.ts +3 -3
- package/src/components/typography/link/link.docs.html +33 -0
- package/src/components/typography/link/link.visual.spec.ts +3 -3
- package/src/components/typography/list/list.docs.html +79 -0
- package/src/components/typography/list/list.visual.spec.ts +3 -3
- package/src/components/typography/mark/mark.docs.html +12 -0
- package/src/components/typography/mark/mark.visual.spec.ts +3 -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/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/root.docs.json +0 -35
- 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/guides/accessibility.docs.json +0 -126
- package/src/config/guides/getting-started.docs.json +0 -106
- package/src/config/guides/theming.docs.json +0 -289
- package/src/config/tokens/colors/colors.docs.json +0 -316
- package/src/config/tokens/design-tokens.docs.json +0 -239
- package/src/config/tokens/grid/grid.docs.json +0 -54
- package/src/config/tokens/spacing/spacing.docs.json +0 -114
- package/src/debug/debug.docs.json +0 -96
- 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/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
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Spacer
|
|
3
|
+
type: component
|
|
4
|
+
id: spacer
|
|
5
|
+
description: Flexible space filler that grows to fill available space in flex containers.
|
|
6
|
+
api: ./spacer.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @default -->
|
|
10
|
+
<div class="ui-row" style="inline-size: 100%; background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">
|
|
11
|
+
<span style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">Start</span>
|
|
12
|
+
<div class="ui-spacer"></div>
|
|
13
|
+
<span style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">End</span>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<!-- @between_items -->
|
|
17
|
+
<div class="ui-row" style="inline-size: 100%; background: var(--ui-color-bg-subtle); padding: var(--ui-space-2)">
|
|
18
|
+
<span style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">Logo</span>
|
|
19
|
+
<div class="ui-spacer"></div>
|
|
20
|
+
<span style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">Nav 1</span>
|
|
21
|
+
<span style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">Nav 2</span>
|
|
22
|
+
<span style="background: var(--ui-color-bg-muted); padding: var(--ui-space-1)">Nav 3</span>
|
|
23
|
+
</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, 'spacer.docs.
|
|
5
|
+
const DOCS_PATH = resolve(__dirname, 'spacer.docs.html');
|
|
6
6
|
|
|
7
7
|
test.describe('spacer visual regression', () => {
|
|
8
8
|
test('all variations', async ({ page }) => {
|
|
9
|
-
await
|
|
9
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
10
10
|
// skip validateGridRhythm: spacer has no intrinsic height
|
|
11
11
|
await saveForLostPixel(page, 'spacer');
|
|
12
12
|
await expect(page.locator('body')).toHaveScreenshot('spacer.visual.png');
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Avatar
|
|
3
|
+
type: component
|
|
4
|
+
id: avatar
|
|
5
|
+
description: User or entity thumbnail representation. Supports image with fallback to initials.
|
|
6
|
+
api: ./avatar.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @default | row -->
|
|
10
|
+
<div class="ui-avatar">
|
|
11
|
+
<span class="ui-avatar__fallback">JD</span>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="ui-avatar">
|
|
14
|
+
<img class="ui-avatar__image" src="https://i.pravatar.cc/80?u=1" alt="User"></img>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<!-- @sizes | row -->
|
|
18
|
+
<div class="ui-avatar ui-avatar--xs">
|
|
19
|
+
<span class="ui-avatar__fallback">XS</span>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="ui-avatar ui-avatar--sm">
|
|
22
|
+
<span class="ui-avatar__fallback">SM</span>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="ui-avatar">
|
|
25
|
+
<span class="ui-avatar__fallback">MD</span>
|
|
26
|
+
</div>
|
|
27
|
+
<div class="ui-avatar ui-avatar--lg">
|
|
28
|
+
<span class="ui-avatar__fallback">LG</span>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="ui-avatar ui-avatar--xl">
|
|
31
|
+
<span class="ui-avatar__fallback">XL</span>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<!-- @square_shape | row -->
|
|
35
|
+
<div class="ui-avatar ui-avatar--square">
|
|
36
|
+
<span class="ui-avatar__fallback">ORG</span>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="ui-avatar ui-avatar--square">
|
|
39
|
+
<img class="ui-avatar__image" src="https://i.pravatar.cc/80?u=org" alt="Org"></img>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<!-- @with_images | row -->
|
|
43
|
+
<div class="ui-avatar ui-avatar--sm">
|
|
44
|
+
<img class="ui-avatar__image" src="https://i.pravatar.cc/64?u=a" alt="User A"></img>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="ui-avatar">
|
|
47
|
+
<img class="ui-avatar__image" src="https://i.pravatar.cc/80?u=b" alt="User B"></img>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="ui-avatar ui-avatar--lg">
|
|
50
|
+
<img class="ui-avatar__image" src="https://i.pravatar.cc/96?u=c" alt="User C"></img>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<!-- @avatar_group -->
|
|
54
|
+
<div class="ui-avatar-group">
|
|
55
|
+
<div class="ui-avatar">
|
|
56
|
+
<img class="ui-avatar__image" src="https://i.pravatar.cc/80?u=g1" alt></img>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="ui-avatar">
|
|
59
|
+
<img class="ui-avatar__image" src="https://i.pravatar.cc/80?u=g2" alt></img>
|
|
60
|
+
</div>
|
|
61
|
+
<div class="ui-avatar">
|
|
62
|
+
<img class="ui-avatar__image" src="https://i.pravatar.cc/80?u=g3" alt></img>
|
|
63
|
+
</div>
|
|
64
|
+
<div class="ui-avatar">
|
|
65
|
+
<span class="ui-avatar__fallback">+5</span>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
@@ -2,15 +2,15 @@ import { resolve } from 'node:path';
|
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
3
|
import {
|
|
4
4
|
saveForLostPixel,
|
|
5
|
-
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
6
|
validateGridRhythm,
|
|
7
7
|
} from '../../../../test-utils';
|
|
8
8
|
|
|
9
|
-
const DOCS_PATH = resolve(__dirname, 'avatar.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'avatar.docs.html');
|
|
10
10
|
|
|
11
11
|
test.describe('avatar visual regression', () => {
|
|
12
12
|
test('all variations', async ({ page }) => {
|
|
13
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
14
14
|
await validateGridRhythm(page, 'avatar');
|
|
15
15
|
await saveForLostPixel(page, 'avatar');
|
|
16
16
|
await expect(page.locator('body')).toHaveScreenshot('avatar.visual.png');
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Badge
|
|
3
|
+
type: component
|
|
4
|
+
description: Inline labels for status indicators, counts, and categories
|
|
5
|
+
api: ./badge.api.json
|
|
6
|
+
labels:
|
|
7
|
+
sm: Small
|
|
8
|
+
lg: Large
|
|
9
|
+
primary: Primary
|
|
10
|
+
success: Success
|
|
11
|
+
warning: Warning
|
|
12
|
+
danger: Danger
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<!-- @default -->
|
|
16
|
+
<span class="ui-badge">{{ t('default', 'Default') }}</span>
|
|
17
|
+
|
|
18
|
+
<!-- @variants | row -->
|
|
19
|
+
<span class="ui-badge">{{ t('default', 'Default') }}</span>
|
|
20
|
+
{% for v in api.modifiers.variant.values %}
|
|
21
|
+
<span class="ui-badge ui-badge--{{ v }}">{{ t(v, labels[v]) }}</span>
|
|
22
|
+
{% endfor %}
|
|
23
|
+
|
|
24
|
+
<!-- @sizes | row -->
|
|
25
|
+
{% for s in api.modifiers.size.values %}
|
|
26
|
+
<span class="ui-badge ui-badge--{{ s }}">{{ t(s, labels[s]) }}</span>
|
|
27
|
+
{% endfor %}
|
|
28
|
+
<span class="ui-badge">{{ t('default', 'Default') }}</span>
|
|
29
|
+
|
|
30
|
+
<!-- @use_cases -->
|
|
31
|
+
<div class="ui-row">
|
|
32
|
+
<span>{{ t('notifications', 'Notifications') }}</span>
|
|
33
|
+
<span class="ui-badge ui-badge--primary">5</span>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="ui-row">
|
|
36
|
+
<span class="ui-badge ui-badge--success">{{ t('published', 'Published') }}</span>
|
|
37
|
+
<span class="ui-badge ui-badge--warning">{{ t('draft', 'Draft') }}</span>
|
|
38
|
+
<span class="ui-badge ui-badge--danger">{{ t('archived', 'Archived') }}</span>
|
|
39
|
+
</div>
|
|
@@ -2,15 +2,15 @@ import { resolve } from 'node:path';
|
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
3
|
import {
|
|
4
4
|
saveForLostPixel,
|
|
5
|
-
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
6
|
validateGridRhythm,
|
|
7
7
|
} from '../../../../test-utils';
|
|
8
8
|
|
|
9
|
-
const DOCS_PATH = resolve(__dirname, 'badge.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'badge.docs.html');
|
|
10
10
|
|
|
11
11
|
test.describe('badge visual regression', () => {
|
|
12
12
|
test('all variations', async ({ page }) => {
|
|
13
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
14
14
|
await validateGridRhythm(page, 'badge');
|
|
15
15
|
await saveForLostPixel(page, 'badge');
|
|
16
16
|
await expect(page.locator('body')).toHaveScreenshot('badge.visual.png');
|
|
Binary file
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Card
|
|
3
|
+
type: component
|
|
4
|
+
id: card
|
|
5
|
+
api: ./card.api.json
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- @default -->
|
|
9
|
+
<div class="ui-card">Default card with padding and border</div>
|
|
10
|
+
|
|
11
|
+
<!-- @background_variants | column -->
|
|
12
|
+
<div class="ui-card">Default background</div>
|
|
13
|
+
<div class="ui-card ui-card--subtle">Subtle background</div>
|
|
14
|
+
<div class="ui-card ui-card--muted">Muted background</div>
|
|
15
|
+
|
|
16
|
+
<!-- @padding_variants | column -->
|
|
17
|
+
<div class="ui-card ui-card--sm">Small padding</div>
|
|
18
|
+
<div class="ui-card">Default padding</div>
|
|
19
|
+
<div class="ui-card ui-card--lg">Large padding</div>
|
|
20
|
+
<div class="ui-card ui-card--flush">No padding (flush)</div>
|
|
21
|
+
|
|
22
|
+
<!-- @interactive | column -->
|
|
23
|
+
<div class="ui-card ui-card--interactive">Hover and click this card</div>
|
|
24
|
+
<div class="ui-card ui-card--interactive ui-card--subtle">Interactive subtle card</div>
|
|
25
|
+
|
|
26
|
+
<!-- @responsive_container_query -->
|
|
27
|
+
<!-- Switches to horizontal layout when container is wide enough. Requires a parent with container-type: inline-size (use ui-container-inline utility). -->
|
|
28
|
+
<div class="ui-container-inline">
|
|
29
|
+
<div class="ui-card ui-card--responsive">
|
|
30
|
+
<div class="ui-card__media" style="background: var(--ui-color-bg-muted); min-block-size: 6rem"></div>
|
|
31
|
+
<div class="ui-card__body">
|
|
32
|
+
<strong>Responsive Card</strong>
|
|
33
|
+
<p>Stacks vertically in narrow containers, switches to side-by-side at >= 30rem.</p>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
@@ -2,15 +2,15 @@ import { resolve } from 'node:path';
|
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
3
|
import {
|
|
4
4
|
saveForLostPixel,
|
|
5
|
-
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
6
|
validateGridRhythm,
|
|
7
7
|
} from '../../../../test-utils';
|
|
8
8
|
|
|
9
|
-
const DOCS_PATH = resolve(__dirname, 'card.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'card.docs.html');
|
|
10
10
|
|
|
11
11
|
test.describe('card visual regression', () => {
|
|
12
12
|
test('all variations', async ({ page }) => {
|
|
13
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
14
14
|
await validateGridRhythm(page, 'card');
|
|
15
15
|
await saveForLostPixel(page, 'card');
|
|
16
16
|
await expect(page.locator('body')).toHaveScreenshot('card.visual.png');
|
|
Binary file
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Data List
|
|
3
|
+
type: component
|
|
4
|
+
id: data-list
|
|
5
|
+
api: ./data-list.api.json
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- @default -->
|
|
9
|
+
<dl class="ui-data-list">
|
|
10
|
+
<div class="ui-data-list__item">
|
|
11
|
+
<dt class="ui-data-list__label">Name</dt>
|
|
12
|
+
<dd class="ui-data-list__value">John Doe</dd>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="ui-data-list__item">
|
|
15
|
+
<dt class="ui-data-list__label">Email</dt>
|
|
16
|
+
<dd class="ui-data-list__value">john@example.com</dd>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="ui-data-list__item">
|
|
19
|
+
<dt class="ui-data-list__label">Role</dt>
|
|
20
|
+
<dd class="ui-data-list__value">Administrator</dd>
|
|
21
|
+
</div>
|
|
22
|
+
</dl>
|
|
23
|
+
|
|
24
|
+
<!-- @horizontal_layout -->
|
|
25
|
+
<!-- Side-by-side label and value -->
|
|
26
|
+
<dl class="ui-data-list ui-data-list--horizontal">
|
|
27
|
+
<div class="ui-data-list__item">
|
|
28
|
+
<dt class="ui-data-list__label">Status</dt>
|
|
29
|
+
<dd class="ui-data-list__value">Active</dd>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="ui-data-list__item">
|
|
32
|
+
<dt class="ui-data-list__label">Created</dt>
|
|
33
|
+
<dd class="ui-data-list__value">Dec 8, 2025</dd>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="ui-data-list__item">
|
|
36
|
+
<dt class="ui-data-list__label">Updated</dt>
|
|
37
|
+
<dd class="ui-data-list__value">Dec 8, 2025</dd>
|
|
38
|
+
</div>
|
|
39
|
+
</dl>
|
|
40
|
+
|
|
41
|
+
<!-- @divided -->
|
|
42
|
+
<!-- With separator lines between items -->
|
|
43
|
+
<dl class="ui-data-list ui-data-list--divided">
|
|
44
|
+
<div class="ui-data-list__item">
|
|
45
|
+
<dt class="ui-data-list__label">Order ID</dt>
|
|
46
|
+
<dd class="ui-data-list__value">#12345</dd>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="ui-data-list__item">
|
|
49
|
+
<dt class="ui-data-list__label">Total</dt>
|
|
50
|
+
<dd class="ui-data-list__value">$99.00</dd>
|
|
51
|
+
</div>
|
|
52
|
+
<div class="ui-data-list__item">
|
|
53
|
+
<dt class="ui-data-list__label">Payment</dt>
|
|
54
|
+
<dd class="ui-data-list__value">Credit Card</dd>
|
|
55
|
+
</div>
|
|
56
|
+
</dl>
|
|
57
|
+
|
|
58
|
+
<!-- @striped -->
|
|
59
|
+
<!-- Alternating background for readability -->
|
|
60
|
+
<dl class="ui-data-list ui-data-list--striped">
|
|
61
|
+
<div class="ui-data-list__item">
|
|
62
|
+
<dt class="ui-data-list__label">CPU</dt>
|
|
63
|
+
<dd class="ui-data-list__value">Intel i7</dd>
|
|
64
|
+
</div>
|
|
65
|
+
<div class="ui-data-list__item">
|
|
66
|
+
<dt class="ui-data-list__label">Memory</dt>
|
|
67
|
+
<dd class="ui-data-list__value">16 GB</dd>
|
|
68
|
+
</div>
|
|
69
|
+
<div class="ui-data-list__item">
|
|
70
|
+
<dt class="ui-data-list__label">Storage</dt>
|
|
71
|
+
<dd class="ui-data-list__value">512 GB SSD</dd>
|
|
72
|
+
</div>
|
|
73
|
+
<div class="ui-data-list__item">
|
|
74
|
+
<dt class="ui-data-list__label">Display</dt>
|
|
75
|
+
<dd class="ui-data-list__value">14" Retina</dd>
|
|
76
|
+
</div>
|
|
77
|
+
</dl>
|
|
78
|
+
|
|
79
|
+
<!-- @sizes | column -->
|
|
80
|
+
<dl class="ui-data-list ui-data-list--sm">
|
|
81
|
+
<div class="ui-data-list__item">
|
|
82
|
+
<dt class="ui-data-list__label">Small</dt>
|
|
83
|
+
<dd class="ui-data-list__value">Compact display</dd>
|
|
84
|
+
</div>
|
|
85
|
+
</dl>
|
|
86
|
+
<dl class="ui-data-list">
|
|
87
|
+
<div class="ui-data-list__item">
|
|
88
|
+
<dt class="ui-data-list__label">Default</dt>
|
|
89
|
+
<dd class="ui-data-list__value">Standard display</dd>
|
|
90
|
+
</div>
|
|
91
|
+
</dl>
|
|
92
|
+
<dl class="ui-data-list ui-data-list--lg">
|
|
93
|
+
<div class="ui-data-list__item">
|
|
94
|
+
<dt class="ui-data-list__label">Large</dt>
|
|
95
|
+
<dd class="ui-data-list__value">Spacious display</dd>
|
|
96
|
+
</div>
|
|
97
|
+
</dl>
|
|
@@ -2,15 +2,15 @@ import { resolve } from 'node:path';
|
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
3
|
import {
|
|
4
4
|
saveForLostPixel,
|
|
5
|
-
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
6
|
validateGridRhythm,
|
|
7
7
|
} from '../../../../test-utils';
|
|
8
8
|
|
|
9
|
-
const DOCS_PATH = resolve(__dirname, 'data-list.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'data-list.docs.html');
|
|
10
10
|
|
|
11
11
|
test.describe('data-list visual regression', () => {
|
|
12
12
|
test('all variations', async ({ page }) => {
|
|
13
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
14
14
|
// TODO: fix grid rhythm - 1px borders cause off-grid heights (#179)
|
|
15
15
|
// await validateGridRhythm(page, 'data-list');
|
|
16
16
|
await saveForLostPixel(page, 'data-list');
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Icon
|
|
3
|
+
type: component
|
|
4
|
+
id: icon
|
|
5
|
+
description: CSS classes for sizing and styling SVG icons. Works with any stroke-based icon set like Lucide, Heroicons, or Feather.
|
|
6
|
+
api: ./icon.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @basic_usage -->
|
|
10
|
+
<!-- Add the `ui-icon` class to any SVG. Icons inherit color from their parent via `currentColor`. -->
|
|
11
|
+
<svg class="ui-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 5v14M5 12h14"/></svg>
|
|
12
|
+
|
|
13
|
+
<!-- @with_lucide_icons -->
|
|
14
|
+
<!-- Recommended icon set. Copy SVG from lucide.dev and add the ui-icon class. -->
|
|
15
|
+
<div class="ui-row ui-row--gap-2">
|
|
16
|
+
<svg class="ui-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
|
|
17
|
+
<svg class="ui-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
18
|
+
<svg class="ui-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"/><path d="M10.3 21a1.94 1.94 0 0 0 3.4 0"/></svg>
|
|
19
|
+
<svg class="ui-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<!-- @sizes | row -->
|
|
23
|
+
<!-- Scale icons from extra small to extra large. -->
|
|
24
|
+
<div class="ui-column" style="align-items: center; gap: var(--ui-space-1)">
|
|
25
|
+
<svg class="ui-icon ui-icon--xs" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
26
|
+
<small>xs</small>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="ui-column" style="align-items: center; gap: var(--ui-space-1)">
|
|
29
|
+
<svg class="ui-icon ui-icon--sm" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
30
|
+
<small>sm</small>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="ui-column" style="align-items: center; gap: var(--ui-space-1)">
|
|
33
|
+
<svg class="ui-icon ui-icon--md" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
34
|
+
<small>md</small>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="ui-column" style="align-items: center; gap: var(--ui-space-1)">
|
|
37
|
+
<svg class="ui-icon ui-icon--lg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
38
|
+
<small>lg</small>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="ui-column" style="align-items: center; gap: var(--ui-space-1)">
|
|
41
|
+
<svg class="ui-icon ui-icon--xl" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
42
|
+
<small>xl</small>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<!-- @stroke_width | row -->
|
|
46
|
+
<!-- Adjust stroke thickness for visual weight. -->
|
|
47
|
+
<svg class="ui-icon ui-icon--lg ui-icon--stroke-thin" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
48
|
+
<svg class="ui-icon ui-icon--lg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
49
|
+
<svg class="ui-icon ui-icon--lg ui-icon--stroke-thick" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
50
|
+
|
|
51
|
+
<!-- @filled_icons | row -->
|
|
52
|
+
<!-- For solid icons, use the `--filled` modifier. -->
|
|
53
|
+
<svg class="ui-icon ui-icon--lg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"/></svg>
|
|
54
|
+
<svg class="ui-icon ui-icon--lg ui-icon--filled" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"/></svg>
|
|
55
|
+
|
|
56
|
+
<!-- @spin_animation -->
|
|
57
|
+
<!-- Use `--spin` for loading indicators. -->
|
|
58
|
+
<svg class="ui-icon ui-icon--lg ui-icon--spin" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 12a9 9 0 1 1-6.219-8.56"/></svg>
|
|
59
|
+
|
|
60
|
+
<!-- @color_inheritance -->
|
|
61
|
+
<!-- Icons inherit color from parent text color. -->
|
|
62
|
+
<div class="ui-row ui-row--gap-2">
|
|
63
|
+
<span style="color: var(--ui-color-primary)">
|
|
64
|
+
<svg class="ui-icon ui-icon--lg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
65
|
+
</span>
|
|
66
|
+
<span style="color: var(--ui-color-success)">
|
|
67
|
+
<svg class="ui-icon ui-icon--lg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
68
|
+
</span>
|
|
69
|
+
<span style="color: var(--ui-color-danger)">
|
|
70
|
+
<svg class="ui-icon ui-icon--lg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
71
|
+
</span>
|
|
72
|
+
</div>
|
|
@@ -2,15 +2,15 @@ import { resolve } from 'node:path';
|
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
3
|
import {
|
|
4
4
|
saveForLostPixel,
|
|
5
|
-
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
6
|
validateGridRhythm,
|
|
7
7
|
} from '../../../../test-utils';
|
|
8
8
|
|
|
9
|
-
const DOCS_PATH = resolve(__dirname, 'icon.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'icon.docs.html');
|
|
10
10
|
|
|
11
11
|
test.describe('icon visual regression', () => {
|
|
12
12
|
test('all variations', async ({ page }) => {
|
|
13
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
14
14
|
await validateGridRhythm(page, 'icon');
|
|
15
15
|
await saveForLostPixel(page, 'icon');
|
|
16
16
|
await expect(page.locator('body')).toHaveScreenshot('icon.visual.png');
|
|
Binary file
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Image
|
|
3
|
+
type: component
|
|
4
|
+
id: image
|
|
5
|
+
description: Responsive image with fallback placeholder, optional caption, and shape modifiers.
|
|
6
|
+
api: ./image.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @default -->
|
|
10
|
+
<figure class="ui-image">
|
|
11
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='192' height='160'%3E%3Crect fill='%23b0bec5' width='192' height='160'/%3E%3C/svg%3E" alt="Placeholder"></img>
|
|
12
|
+
</figure>
|
|
13
|
+
|
|
14
|
+
<!-- @sizes | row -->
|
|
15
|
+
<figure class="ui-image ui-image--sm">
|
|
16
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96'%3E%3Crect fill='%2390a4ae' width='96' height='96'/%3E%3C/svg%3E" alt="Small"></img>
|
|
17
|
+
</figure>
|
|
18
|
+
<figure class="ui-image ui-image--md">
|
|
19
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='192' height='192'%3E%3Crect fill='%2378909c' width='192' height='192'/%3E%3C/svg%3E" alt="Medium"></img>
|
|
20
|
+
</figure>
|
|
21
|
+
<figure class="ui-image ui-image--lg">
|
|
22
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='320' height='320'%3E%3Crect fill='%23607d8b' width='320' height='320'/%3E%3C/svg%3E" alt="Large"></img>
|
|
23
|
+
</figure>
|
|
24
|
+
<figure class="ui-image ui-image--xl">
|
|
25
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='480'%3E%3Crect fill='%23546e7a' width='480' height='480'/%3E%3C/svg%3E" alt="XL"></img>
|
|
26
|
+
</figure>
|
|
27
|
+
<figure class="ui-image ui-image--full">
|
|
28
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='200'%3E%3Crect fill='%23455a64' width='600' height='200'/%3E%3C/svg%3E" alt="Full"></img>
|
|
29
|
+
</figure>
|
|
30
|
+
|
|
31
|
+
<!-- @rounded -->
|
|
32
|
+
<figure class="ui-image ui-image--md ui-image--rounded">
|
|
33
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='192' height='140'%3E%3Crect fill='%234db6ac' width='192' height='140'/%3E%3C/svg%3E" alt="Rounded"></img>
|
|
34
|
+
</figure>
|
|
35
|
+
|
|
36
|
+
<!-- @circle | row -->
|
|
37
|
+
<figure class="ui-image ui-image--sm ui-image--circle">
|
|
38
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96'%3E%3Crect fill='%23ce93d8' width='96' height='96'/%3E%3C/svg%3E" alt="Circle small"></img>
|
|
39
|
+
</figure>
|
|
40
|
+
<figure class="ui-image ui-image--md ui-image--circle">
|
|
41
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='192' height='192'%3E%3Crect fill='%23ba68c8' width='192' height='192'/%3E%3C/svg%3E" alt="Circle medium"></img>
|
|
42
|
+
</figure>
|
|
43
|
+
|
|
44
|
+
<!-- @object_fit | row -->
|
|
45
|
+
<figure class="ui-image ui-image--md ui-image--cover">
|
|
46
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='150'%3E%3Crect fill='%2364b5f6' width='300' height='150'/%3E%3Ctext x='150' y='80' text-anchor='middle' fill='%23fff' font-size='16'%3Ecover%3C/text%3E%3C/svg%3E" alt="Cover fit"></img>
|
|
47
|
+
</figure>
|
|
48
|
+
<figure class="ui-image ui-image--md ui-image--contain">
|
|
49
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='150'%3E%3Crect fill='%2381c784' width='300' height='150'/%3E%3Ctext x='150' y='80' text-anchor='middle' fill='%23fff' font-size='16'%3Econtain%3C/text%3E%3C/svg%3E" alt="Contain fit"></img>
|
|
50
|
+
</figure>
|
|
51
|
+
|
|
52
|
+
<!-- @caption -->
|
|
53
|
+
<figure class="ui-image ui-image--md ui-image--rounded">
|
|
54
|
+
<img class="ui-image__img" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='192' height='140'%3E%3Crect fill='%23ffb74d' width='192' height='140'/%3E%3C/svg%3E" alt="With caption"></img>
|
|
55
|
+
<figcaption class="ui-image__caption">An optional image caption</figcaption>
|
|
56
|
+
</figure>
|
|
57
|
+
|
|
58
|
+
<!-- @fallback | row -->
|
|
59
|
+
<figure class="ui-image ui-image--sm">
|
|
60
|
+
<img class="ui-image__img" src alt="Broken image"></img>
|
|
61
|
+
</figure>
|
|
62
|
+
<figure class="ui-image ui-image--sm ui-image--rounded">
|
|
63
|
+
<img class="ui-image__img" src alt="Broken rounded"></img>
|
|
64
|
+
</figure>
|
|
65
|
+
<figure class="ui-image ui-image--sm ui-image--circle">
|
|
66
|
+
<img class="ui-image__img" src alt="Broken circle"></img>
|
|
67
|
+
</figure>
|
|
@@ -2,15 +2,15 @@ import { resolve } from 'node:path';
|
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
3
|
import {
|
|
4
4
|
saveForLostPixel,
|
|
5
|
-
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
6
|
validateGridRhythm,
|
|
7
7
|
} from '../../../../test-utils';
|
|
8
8
|
|
|
9
|
-
const DOCS_PATH = resolve(__dirname, 'image.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'image.docs.html');
|
|
10
10
|
|
|
11
11
|
test.describe('image visual regression', () => {
|
|
12
12
|
test('all variations', async ({ page }) => {
|
|
13
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
14
14
|
await validateGridRhythm(page, 'image');
|
|
15
15
|
await saveForLostPixel(page, 'image');
|
|
16
16
|
await expect(page.locator('body')).toHaveScreenshot('image.visual.png');
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Stat
|
|
3
|
+
type: component
|
|
4
|
+
id: stat
|
|
5
|
+
description: Statistic display with prominent value and descriptive label.
|
|
6
|
+
api: ./stat.api.json
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @default -->
|
|
10
|
+
<div class="ui-stat">
|
|
11
|
+
<span class="ui-stat__value">2,847</span>
|
|
12
|
+
<span class="ui-stat__label">Total users</span>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<!-- @multiple_stats -->
|
|
16
|
+
<div class="ui-row ui-row--lg">
|
|
17
|
+
<div class="ui-stat">
|
|
18
|
+
<span class="ui-stat__value">12.5k</span>
|
|
19
|
+
<span class="ui-stat__label">Revenue</span>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="ui-stat">
|
|
22
|
+
<span class="ui-stat__value">573</span>
|
|
23
|
+
<span class="ui-stat__label">Orders</span>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="ui-stat">
|
|
26
|
+
<span class="ui-stat__value">98%</span>
|
|
27
|
+
<span class="ui-stat__label">Satisfaction</span>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<!-- @small -->
|
|
32
|
+
<div class="ui-stat ui-stat--sm">
|
|
33
|
+
<span class="ui-stat__value">42</span>
|
|
34
|
+
<span class="ui-stat__label">Active now</span>
|
|
35
|
+
</div>
|
|
@@ -2,15 +2,15 @@ import { resolve } from 'node:path';
|
|
|
2
2
|
import { expect, test } from '@playwright/test';
|
|
3
3
|
import {
|
|
4
4
|
saveForLostPixel,
|
|
5
|
-
|
|
5
|
+
setupVisualTestFromHtmlDocs,
|
|
6
6
|
validateGridRhythm,
|
|
7
7
|
} from '../../../../test-utils';
|
|
8
8
|
|
|
9
|
-
const DOCS_PATH = resolve(__dirname, 'stat.docs.
|
|
9
|
+
const DOCS_PATH = resolve(__dirname, 'stat.docs.html');
|
|
10
10
|
|
|
11
11
|
test.describe('stat visual regression', () => {
|
|
12
12
|
test('all variations', async ({ page }) => {
|
|
13
|
-
await
|
|
13
|
+
await setupVisualTestFromHtmlDocs(page, DOCS_PATH);
|
|
14
14
|
await validateGridRhythm(page, 'stat');
|
|
15
15
|
await saveForLostPixel(page, 'stat');
|
|
16
16
|
await expect(page.locator('body')).toHaveScreenshot('stat.visual.png');
|