@schukai/monster 4.148.8 → 4.149.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/source/components/accessibility/stylesheet/locale-picker.mjs +61 -1
- package/source/components/content/image-editor.mjs +79 -11
- package/source/components/content/style/copy.pcss +1 -1
- package/source/components/content/stylesheet/camera-capture.mjs +1 -1
- package/source/components/content/stylesheet/copy.mjs +1 -1
- package/source/components/content/stylesheet/fetch-box.mjs +1 -1
- package/source/components/content/stylesheet/viewer.mjs +61 -1
- package/source/components/data/kpi-tile.mjs +5 -3
- package/source/components/data/metric-graph.mjs +22 -20
- package/source/components/data/metric.mjs +20 -18
- package/source/components/data/style/kpi-tile.pcss +65 -43
- package/source/components/data/style/metric-graph.pcss +35 -18
- package/source/components/data/style/metric.pcss +35 -28
- package/source/components/data/stylesheet/kpi-tile.mjs +61 -1
- package/source/components/data/stylesheet/metric-graph.mjs +61 -1
- package/source/components/data/stylesheet/metric.mjs +61 -1
- package/source/components/datatable/columnbar.mjs +4 -2
- package/source/components/datatable/datatable.mjs +73 -15
- package/source/components/datatable/filter/date-range.mjs +61 -61
- package/source/components/datatable/filter/date-time.mjs +5 -1
- package/source/components/datatable/filter/range.mjs +3 -3
- package/source/components/datatable/filter/select-operator.mjs +7 -1
- package/source/components/datatable/filter/text-operator.mjs +11 -3
- package/source/components/datatable/filter.mjs +16 -0
- package/source/components/datatable/pagination.mjs +2 -2
- package/source/components/datatable/style/column-bar.pcss +115 -23
- package/source/components/datatable/style/datatable.pcss +257 -29
- package/source/components/datatable/style/embedded-pagination.pcss +63 -34
- package/source/components/datatable/style/filter-button.pcss +1 -1
- package/source/components/datatable/style/filter-controls-defaults.pcss +49 -3
- package/source/components/datatable/style/filter-select.pcss +4 -1
- package/source/components/datatable/style/filter.pcss +18 -1
- package/source/components/datatable/stylesheet/change-button.mjs +61 -1
- package/source/components/datatable/stylesheet/column-bar.mjs +69 -1
- package/source/components/datatable/stylesheet/dataset.mjs +61 -1
- package/source/components/datatable/stylesheet/datatable.mjs +71 -1
- package/source/components/datatable/stylesheet/embedded-pagination.mjs +1 -1
- package/source/components/datatable/stylesheet/filter-button.mjs +1 -1
- package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +1 -1
- package/source/components/datatable/stylesheet/filter-select.mjs +61 -1
- package/source/components/datatable/stylesheet/filter.mjs +61 -1
- package/source/components/datatable/stylesheet/pagination.mjs +67 -1
- package/source/components/datatable/stylesheet/save-button.mjs +61 -1
- package/source/components/datatable/stylesheet/status.mjs +61 -1
- package/source/components/form/action-button.mjs +2 -1
- package/source/components/form/button-bar.mjs +7 -2
- package/source/components/form/context-error.mjs +4 -3
- package/source/components/form/context-help.mjs +10 -4
- package/source/components/form/context-hint.mjs +1 -1
- package/source/components/form/context-info.mjs +1 -1
- package/source/components/form/context-note.mjs +1 -1
- package/source/components/form/context-success.mjs +1 -1
- package/source/components/form/context-warning.mjs +1 -1
- package/source/components/form/control-bar.mjs +300 -14
- package/source/components/form/credential-button.mjs +4 -2
- package/source/components/form/digits.mjs +28 -1
- package/source/components/form/field-set.mjs +30 -0
- package/source/components/form/login.mjs +13 -10
- package/source/components/form/password.mjs +6 -0
- package/source/components/form/popper-button.mjs +1 -1
- package/source/components/form/quantity.mjs +14 -6
- package/source/components/form/register-wizard.mjs +46 -26
- package/source/components/form/select.mjs +17 -10
- package/source/components/form/sheet.mjs +13 -2
- package/source/components/form/style/action-button.pcss +131 -5
- package/source/components/form/style/button-bar.pcss +204 -3
- package/source/components/form/style/control-bar.pcss +254 -26
- package/source/components/form/style/digits.pcss +7 -6
- package/source/components/form/style/input-group.pcss +65 -1
- package/source/components/form/style/login.pcss +1 -1
- package/source/components/form/style/mixin/field-set-layout.pcss +8 -0
- package/source/components/form/style/password.pcss +25 -1
- package/source/components/form/style/popper-button.pcss +1 -0
- package/source/components/form/style/quantity.pcss +11 -20
- package/source/components/form/style/select.pcss +52 -7
- package/source/components/form/style/sheet.pcss +70 -1
- package/source/components/form/style/state-button.pcss +5 -2
- package/source/components/form/style/toggle-switch.pcss +7 -4
- package/source/components/form/stylesheet/action-button.mjs +63 -1
- package/source/components/form/stylesheet/button-bar.mjs +153 -1
- package/source/components/form/stylesheet/button.mjs +61 -1
- package/source/components/form/stylesheet/control-bar.mjs +163 -1
- package/source/components/form/stylesheet/digits.mjs +1 -1
- package/source/components/form/stylesheet/field-layout.mjs +1 -1
- package/source/components/form/stylesheet/field-set.mjs +1 -1
- package/source/components/form/stylesheet/form.mjs +1 -1
- package/source/components/form/stylesheet/input-group.mjs +15 -1
- package/source/components/form/stylesheet/login.mjs +1 -1
- package/source/components/form/stylesheet/password.mjs +7 -1
- package/source/components/form/stylesheet/popper-button.mjs +61 -1
- package/source/components/form/stylesheet/quantity.mjs +1 -1
- package/source/components/form/stylesheet/register-wizard.mjs +1 -1
- package/source/components/form/stylesheet/select.mjs +3 -1
- package/source/components/form/stylesheet/sheet.mjs +1 -1
- package/source/components/form/stylesheet/state-button.mjs +3 -1
- package/source/components/form/stylesheet/toggle-switch.mjs +1 -1
- package/source/components/form/stylesheet/wizard.mjs +1 -1
- package/source/components/form/util/floating-ui.mjs +35 -7
- package/source/components/host/call-button.mjs +3 -1
- package/source/components/host/stylesheet/call-button.mjs +61 -1
- package/source/components/host/stylesheet/host.mjs +1 -1
- package/source/components/host/stylesheet/toggle-button.mjs +61 -1
- package/source/components/layout/full-screen.mjs +31 -23
- package/source/components/layout/iframe.mjs +5 -1
- package/source/components/layout/popper.mjs +34 -4
- package/source/components/layout/style/full-screen.pcss +94 -23
- package/source/components/layout/style/split-panel.pcss +57 -5
- package/source/components/layout/style/tabs.pcss +277 -47
- package/source/components/layout/style/vertical-tabs.pcss +147 -0
- package/source/components/layout/stylesheet/collapse.mjs +61 -1
- package/source/components/layout/stylesheet/details.mjs +61 -1
- package/source/components/layout/stylesheet/full-screen.mjs +23 -1
- package/source/components/layout/stylesheet/overlay.mjs +1 -1
- package/source/components/layout/stylesheet/panel.mjs +1 -1
- package/source/components/layout/stylesheet/slider.mjs +1 -1
- package/source/components/layout/stylesheet/split-panel.mjs +17 -1
- package/source/components/layout/stylesheet/tabs.mjs +97 -1
- package/source/components/layout/stylesheet/vertical-tabs.mjs +33 -95
- package/source/components/layout/tabs.mjs +63 -0
- package/source/components/layout/vertical-tabs.mjs +63 -0
- package/source/components/navigation/stylesheet/site-navigation.mjs +1 -1
- package/source/components/navigation/stylesheet/table-of-content.mjs +1 -1
- package/source/components/navigation/stylesheet/wizard-navigation.mjs +1 -1
- package/source/components/navigation/table-of-content.mjs +13 -0
- package/source/components/notify/style/notify.pcss +1 -2
- package/source/components/notify/stylesheet/message.mjs +1 -1
- package/source/components/notify/stylesheet/notify.mjs +1 -1
- package/source/components/state/style/log.pcss +1 -0
- package/source/components/state/style/state.pcss +5 -1
- package/source/components/state/stylesheet/log.mjs +1 -1
- package/source/components/state/stylesheet/state.mjs +7 -1
- package/source/components/style/button.css +61 -205
- package/source/components/style/button.pcss +78 -34
- package/source/components/style/common.css +1 -170
- package/source/components/style/common.pcss +5 -9
- package/source/components/style/form.css +1 -49
- package/source/components/style/form.pcss +24 -6
- package/source/components/style/link.css +1 -39
- package/source/components/style/link.pcss +8 -16
- package/source/components/style/mixin/button.pcss +19 -10
- package/source/components/style/mixin/property.pcss +8 -0
- package/source/components/style/mixin/skeleton.pcss +11 -5
- package/source/components/style/normalize.css +1 -144
- package/source/components/style/normalize.pcss +5 -5
- package/source/components/style/property.css +1 -387
- package/source/components/style/skeleton.css +1 -198
- package/source/components/style/skeleton.pcss +8 -2
- package/source/components/style/theme-modern.css +74 -0
- package/source/components/style/theme-modern.pcss +498 -0
- package/source/components/stylesheet/button.mjs +61 -1
- package/source/components/stylesheet/common.mjs +1 -1
- package/source/components/stylesheet/form.mjs +1 -1
- package/source/components/stylesheet/link.mjs +1 -1
- package/source/components/stylesheet/normalize.mjs +1 -1
- package/source/components/stylesheet/property.mjs +1 -1
- package/source/components/stylesheet/skeleton.mjs +1 -1
- package/source/components/stylesheet/theme-modern.mjs +110 -0
- package/source/components/time/stylesheet/day.mjs +61 -1
- package/source/components/time/stylesheet/month-calendar.mjs +61 -1
- package/source/components/time/timeline/stylesheet/appointment.mjs +61 -1
- package/source/components/time/timeline/stylesheet/segment.mjs +61 -1
- package/source/components/tree-menu/style/tree-menu.pcss +26 -37
- package/source/components/tree-menu/stylesheet/tree-menu.mjs +1 -1
- package/source/dom/customelement.mjs +105 -40
- package/source/dom/updater.mjs +381 -119
- package/test/cases/components/content/image-editor.mjs +19 -0
- package/test/cases/components/datatable/accessibility-defaults.mjs +112 -0
- package/test/cases/components/datatable/filter-availability.mjs +37 -0
- package/test/cases/components/datatable/filter-date-range-layout.mjs +40 -0
- package/test/cases/components/datatable/filter-select-operator.mjs +118 -0
- package/test/cases/components/datatable/mobile-layout.mjs +203 -0
- package/test/cases/components/datatable/responsive-breakpoint.mjs +41 -0
- package/test/cases/components/datatable/selection.mjs +149 -0
- package/test/cases/components/form/action-button-style.mjs +85 -0
- package/test/cases/components/form/button-bar.mjs +222 -3
- package/test/cases/components/form/context-theme-colors.mjs +59 -0
- package/test/cases/components/form/control-bar.mjs +228 -3
- package/test/cases/components/form/control-heights.mjs +103 -0
- package/test/cases/components/form/digits-accessibility.mjs +65 -0
- package/test/cases/components/form/field-set.mjs +54 -0
- package/test/cases/components/form/floating-ui.mjs +74 -0
- package/test/cases/components/form/input-group.mjs +61 -28
- package/test/cases/components/form/login.mjs +47 -0
- package/test/cases/components/form/password.mjs +63 -0
- package/test/cases/components/form/popper-button.mjs +30 -15
- package/test/cases/components/form/quantity-accessibility.mjs +46 -0
- package/test/cases/components/form/register-wizard.mjs +79 -0
- package/test/cases/components/form/select.mjs +94 -2
- package/test/cases/components/form/sheet.mjs +56 -2
- package/test/cases/components/host/toggle-button.mjs +50 -0
- package/test/cases/components/layout/full-screen.mjs +60 -0
- package/test/cases/components/layout/iframe-accessibility.mjs +44 -0
- package/test/cases/components/layout/popper.mjs +128 -0
- package/test/cases/components/layout/slit-panel.mjs +30 -1
- package/test/cases/components/layout/tabs.mjs +93 -0
- package/test/cases/components/navigation/table-of-content.mjs +18 -0
- package/test/cases/components/state/state-style.mjs +31 -0
- package/test/cases/components/style/action-menu.mjs +74 -0
- package/test/cases/components/style/form-controls.mjs +37 -0
- package/test/cases/components/style/kpi-tile.mjs +60 -0
- package/test/cases/components/style/legacy-theme-compatibility.mjs +137 -0
- package/test/cases/components/style/metric-layout.mjs +94 -0
- package/test/cases/components/style/skeleton.mjs +69 -0
- package/test/cases/components/style/theme-component-catalog.mjs +853 -0
- package/test/cases/components/style/theme-modern.mjs +439 -0
- package/test/cases/components/style/theme-review-regressions.mjs +41 -0
- package/test/cases/dom/customelement.mjs +136 -1
- package/test/cases/dom/updater.mjs +174 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { expect } from "chai";
|
|
3
|
+
|
|
4
|
+
const tabsSource = readFileSync(
|
|
5
|
+
new URL(
|
|
6
|
+
"../../../../source/components/layout/style/tabs.pcss",
|
|
7
|
+
import.meta.url,
|
|
8
|
+
),
|
|
9
|
+
"utf8",
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
const columnBarSource = readFileSync(
|
|
13
|
+
new URL(
|
|
14
|
+
"../../../../source/components/datatable/style/column-bar.pcss",
|
|
15
|
+
import.meta.url,
|
|
16
|
+
),
|
|
17
|
+
"utf8",
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
const datatableSource = readFileSync(
|
|
21
|
+
new URL(
|
|
22
|
+
"../../../../source/components/datatable/style/datatable.pcss",
|
|
23
|
+
import.meta.url,
|
|
24
|
+
),
|
|
25
|
+
"utf8",
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
const treeMenuSource = readFileSync(
|
|
29
|
+
new URL(
|
|
30
|
+
"../../../../source/components/tree-menu/style/tree-menu.pcss",
|
|
31
|
+
import.meta.url,
|
|
32
|
+
),
|
|
33
|
+
"utf8",
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
const modernThemeSource = readFileSync(
|
|
37
|
+
new URL(
|
|
38
|
+
"../../../../source/components/style/theme-modern.pcss",
|
|
39
|
+
import.meta.url,
|
|
40
|
+
),
|
|
41
|
+
"utf8",
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
describe("Legacy theme compatibility", () => {
|
|
45
|
+
it("keeps the established tab layout as the fallback", () => {
|
|
46
|
+
for (const declaration of [
|
|
47
|
+
"var(--monster-tabs-nav-align-items, flex-end)",
|
|
48
|
+
"var(--monster-tabs-nav-gap, 0)",
|
|
49
|
+
"var(--monster-tabs-nav-margin-block-end, .75rem)",
|
|
50
|
+
"var(--monster-tabs-nav-padding, 0)",
|
|
51
|
+
"var(--monster-tabs-button-padding, .375rem 0)",
|
|
52
|
+
"var(--monster-tabs-button-margin-inline-end, .75rem)",
|
|
53
|
+
"var(--monster-tabs-button-min-block-size, auto)",
|
|
54
|
+
"var(--monster-tabs-button-transition, color 0.8s)",
|
|
55
|
+
]) {
|
|
56
|
+
expect(tabsSource, declaration).to.include(declaration);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("activates the new tab geometry only through modern theme tokens", () => {
|
|
61
|
+
for (const token of [
|
|
62
|
+
"--monster-tabs-nav-align-items: flex-end",
|
|
63
|
+
"--monster-tabs-nav-border-width: 0 0 1px",
|
|
64
|
+
"--monster-tabs-nav-gap: 0.25rem",
|
|
65
|
+
"--monster-tabs-button-border-width: 0 0 3px",
|
|
66
|
+
"--monster-tabs-button-margin-inline-end: 0.75rem",
|
|
67
|
+
"--monster-tabs-button-min-block-size: var(--monster-control-min-block-size)",
|
|
68
|
+
"--monster-tabs-slot-padding: 0.5rem 0.75rem",
|
|
69
|
+
]) {
|
|
70
|
+
expect(modernThemeSource, token).to.include(token);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("keeps column toggles compact with touch-sized coarse pointer targets", () => {
|
|
75
|
+
expect(columnBarSource).to.include(
|
|
76
|
+
"--monster-column-toggle-target-block-size",
|
|
77
|
+
);
|
|
78
|
+
expect(columnBarSource).to.include(
|
|
79
|
+
"var(--monster-column-toggle-target-size, 24px)",
|
|
80
|
+
);
|
|
81
|
+
expect(columnBarSource).to.include(
|
|
82
|
+
"--monster-column-toggle-target-inline-size",
|
|
83
|
+
);
|
|
84
|
+
expect(columnBarSource).to.include(
|
|
85
|
+
"var(--monster-column-toggle-target-size, 16px)",
|
|
86
|
+
);
|
|
87
|
+
expect(columnBarSource).to.include("@media (pointer: coarse)");
|
|
88
|
+
expect(columnBarSource).to.include("min-height: 24px");
|
|
89
|
+
expect(columnBarSource).to.include("min-width: 24px");
|
|
90
|
+
expect(columnBarSource).to.not.include("height: 44px");
|
|
91
|
+
expect(columnBarSource).to.not.include("width: 44px");
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("keeps legacy datatable spacing while modern uses solid subtle rows", () => {
|
|
95
|
+
for (const fallback of [
|
|
96
|
+
"var(--monster-datatable-cell-padding, 0.4rem 0.2rem)",
|
|
97
|
+
"var(--monster-datatable-header-cell-padding, 0.3rem 0.2rem)",
|
|
98
|
+
"var(--monster-datatable-row-border-style, dashed)",
|
|
99
|
+
]) {
|
|
100
|
+
expect(datatableSource, fallback).to.include(fallback);
|
|
101
|
+
}
|
|
102
|
+
for (const modernToken of [
|
|
103
|
+
"--monster-datatable-cell-padding: 0.45rem 0.5rem",
|
|
104
|
+
"--monster-datatable-row-border-style: solid",
|
|
105
|
+
"--monster-datatable-row-border-color: var(--monster-theme-surface-strong)",
|
|
106
|
+
]) {
|
|
107
|
+
expect(modernThemeSource, modernToken).to.include(modernToken);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("uses the selected third typography proposal only in the modern theme", () => {
|
|
112
|
+
expect(modernThemeSource).to.include('"IBM Plex Sans"');
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it("keeps legacy tree-menu sizing while modern raises nested navigation text", () => {
|
|
116
|
+
for (const fallback of [
|
|
117
|
+
"var(--monster-tree-menu-font-size-level-1, 1rem)",
|
|
118
|
+
"var(--monster-tree-menu-font-size-level-2, 1rem)",
|
|
119
|
+
"var(--monster-tree-menu-font-size-level-3, 0.75rem)",
|
|
120
|
+
"var(--monster-tree-menu-font-size-deep, 0.70rem)",
|
|
121
|
+
"var(--monster-tree-menu-font-size-deep, 0.65rem)",
|
|
122
|
+
"var(--monster-tree-menu-button-min-block-size, auto)",
|
|
123
|
+
]) {
|
|
124
|
+
expect(treeMenuSource, fallback).to.include(fallback);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
for (const modernToken of [
|
|
128
|
+
"--monster-tree-menu-font-size-level-1: 1rem",
|
|
129
|
+
"--monster-tree-menu-font-size-level-2: 0.9375rem",
|
|
130
|
+
"--monster-tree-menu-font-size-level-3: 0.875rem",
|
|
131
|
+
"--monster-tree-menu-font-size-deep: 0.875rem",
|
|
132
|
+
"--monster-tree-menu-button-min-block-size: 2rem",
|
|
133
|
+
]) {
|
|
134
|
+
expect(modernThemeSource, modernToken).to.include(modernToken);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
});
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { expect } from "chai";
|
|
3
|
+
|
|
4
|
+
const componentSources = new Map(
|
|
5
|
+
["kpi-tile", "metric", "metric-graph"].map((name) => [
|
|
6
|
+
name,
|
|
7
|
+
readFileSync(
|
|
8
|
+
new URL(
|
|
9
|
+
`../../../../source/components/data/${name}.mjs`,
|
|
10
|
+
import.meta.url,
|
|
11
|
+
),
|
|
12
|
+
"utf8",
|
|
13
|
+
),
|
|
14
|
+
]),
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
const styleSources = new Map(
|
|
18
|
+
["kpi-tile", "metric", "metric-graph"].map((name) => [
|
|
19
|
+
name,
|
|
20
|
+
readFileSync(
|
|
21
|
+
new URL(
|
|
22
|
+
`../../../../source/components/data/style/${name}.pcss`,
|
|
23
|
+
import.meta.url,
|
|
24
|
+
),
|
|
25
|
+
"utf8",
|
|
26
|
+
),
|
|
27
|
+
]),
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const generatedStyleSheets = new Map(
|
|
31
|
+
["kpi-tile", "metric", "metric-graph"].map((name) => [
|
|
32
|
+
name,
|
|
33
|
+
readFileSync(
|
|
34
|
+
new URL(
|
|
35
|
+
`../../../../source/components/data/stylesheet/${name}.mjs`,
|
|
36
|
+
import.meta.url,
|
|
37
|
+
),
|
|
38
|
+
"utf8",
|
|
39
|
+
),
|
|
40
|
+
]),
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
describe("Metric card layout", () => {
|
|
44
|
+
it("uses the same three rows for every default KPI card", () => {
|
|
45
|
+
for (const [name, source] of styleSources) {
|
|
46
|
+
expect(source, name).to.include("display: grid");
|
|
47
|
+
expect(source, name).to.include("height: 12rem");
|
|
48
|
+
expect(source, name).to.include("box-sizing: border-box");
|
|
49
|
+
expect(source, name).to.include(
|
|
50
|
+
"grid-template-rows: 2.75rem 2.5rem minmax(0, 1fr)",
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const generated = generatedStyleSheets.get(name);
|
|
54
|
+
expect(generated, name).to.include("display:grid");
|
|
55
|
+
expect(generated, name).to.include("height:12rem");
|
|
56
|
+
expect(generated, name).to.include("box-sizing:border-box");
|
|
57
|
+
expect(generated, name).to.include(
|
|
58
|
+
"grid-template-rows:2.75rem 2.5rem minmax(0,1fr)",
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("keeps supporting metric content together in the footer row", () => {
|
|
64
|
+
expect(componentSources.get("kpi-tile")).to.match(
|
|
65
|
+
/class="kpi-value" part="value"[\s\S]*data-monster-role="main"[\s\S]*data-monster-role="small"/u,
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
for (const name of ["metric", "metric-graph"]) {
|
|
69
|
+
expect(componentSources.get(name), name).to.match(
|
|
70
|
+
/class="metric-footer" part="footer"[\s\S]*class="metric-subtext"/u,
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
expect(componentSources.get("metric")).to.match(
|
|
75
|
+
/class="metric-footer" part="footer"[\s\S]*part="metric-change"[\s\S]*prefix:metric-change/u,
|
|
76
|
+
);
|
|
77
|
+
expect(componentSources.get("metric-graph")).to.match(
|
|
78
|
+
/class="metric-footer" part="footer"[\s\S]*class="metric-graph/u,
|
|
79
|
+
);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it("reserves bottom spacing for every footer", () => {
|
|
83
|
+
expect(styleSources.get("kpi-tile")).to.include(
|
|
84
|
+
"padding: 0.5rem 0 0.25rem",
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
for (const name of ["metric", "metric-graph"]) {
|
|
88
|
+
const source = styleSources.get(name);
|
|
89
|
+
const generated = generatedStyleSheets.get(name);
|
|
90
|
+
expect(source, name).to.include("padding-block-end: 0.25rem");
|
|
91
|
+
expect(generated, name).to.include("padding-block-end:.25rem");
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { expect } from "chai";
|
|
3
|
+
|
|
4
|
+
const skeletonSource = readFileSync(
|
|
5
|
+
new URL("../../../../source/components/style/skeleton.pcss", import.meta.url),
|
|
6
|
+
"utf8",
|
|
7
|
+
);
|
|
8
|
+
const skeletonMixinSource = readFileSync(
|
|
9
|
+
new URL(
|
|
10
|
+
"../../../../source/components/style/mixin/skeleton.pcss",
|
|
11
|
+
import.meta.url,
|
|
12
|
+
),
|
|
13
|
+
"utf8",
|
|
14
|
+
);
|
|
15
|
+
const skeletonStyleSheet = readFileSync(
|
|
16
|
+
new URL(
|
|
17
|
+
"../../../../source/components/stylesheet/skeleton.mjs",
|
|
18
|
+
import.meta.url,
|
|
19
|
+
),
|
|
20
|
+
"utf8",
|
|
21
|
+
);
|
|
22
|
+
const fetchBoxStyleSheet = readFileSync(
|
|
23
|
+
new URL(
|
|
24
|
+
"../../../../source/components/content/stylesheet/fetch-box.mjs",
|
|
25
|
+
import.meta.url,
|
|
26
|
+
),
|
|
27
|
+
"utf8",
|
|
28
|
+
);
|
|
29
|
+
const themeLabStyle = readFileSync(
|
|
30
|
+
new URL(
|
|
31
|
+
"../../../../development/playground/theme/style/main.pcss",
|
|
32
|
+
import.meta.url,
|
|
33
|
+
),
|
|
34
|
+
"utf8",
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
describe("Skeleton styles", () => {
|
|
38
|
+
it("fades semantic skeleton fills into the surrounding background", () => {
|
|
39
|
+
expect(skeletonSource).to.include("var(--monster-bg-color-primary-3)");
|
|
40
|
+
expect(skeletonMixinSource).to.include(
|
|
41
|
+
"--monster-skeleton-color: var(--monster-skeleton-fill, $color)",
|
|
42
|
+
);
|
|
43
|
+
expect(skeletonMixinSource).to.include("transparent 0%");
|
|
44
|
+
expect(skeletonMixinSource).to.include("transparent 100%");
|
|
45
|
+
expect(themeLabStyle).to.match(
|
|
46
|
+
/\.catalog-skeleton > span\s*\{[\s\S]*?background-color:\s*transparent;/u,
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
for (const generatedStyle of [skeletonStyleSheet, fetchBoxStyleSheet]) {
|
|
50
|
+
expect(generatedStyle).to.include(
|
|
51
|
+
"--monster-skeleton-color:var(--monster-skeleton-fill,var(--monster-bg-color-primary-3))",
|
|
52
|
+
);
|
|
53
|
+
expect(generatedStyle).to.include("transparent 0%");
|
|
54
|
+
expect(generatedStyle).to.include("transparent 100%");
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("disables skeleton animation when reduced motion is requested", () => {
|
|
59
|
+
expect(skeletonSource).to.match(
|
|
60
|
+
/@media \(prefers-reduced-motion:\s*reduce\)[\s\S]*?animation:\s*none;/u,
|
|
61
|
+
);
|
|
62
|
+
for (const generatedStyle of [skeletonStyleSheet, fetchBoxStyleSheet]) {
|
|
63
|
+
expect(generatedStyle).to.include(
|
|
64
|
+
"@media (prefers-reduced-motion:reduce)",
|
|
65
|
+
);
|
|
66
|
+
expect(generatedStyle).to.include("animation:none");
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|