@stackoverflow/stacks 1.9.0 → 1.9.1
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/README.md +161 -153
- package/dist/components/table/table.d.ts +26 -4
- package/dist/css/stacks.css +21 -6
- package/dist/css/stacks.min.css +1 -1
- package/dist/js/stacks.js +93 -64
- package/dist/js/stacks.min.js +1 -1
- package/lib/atomic/border.less +397 -397
- package/lib/atomic/color.less +210 -210
- package/lib/atomic/flex.less +426 -426
- package/lib/atomic/gap.less +44 -44
- package/lib/atomic/grid.less +139 -139
- package/lib/atomic/misc.less +343 -343
- package/lib/atomic/spacing.less +342 -342
- package/lib/atomic/typography.less +267 -267
- package/lib/atomic/width-height.less +194 -194
- package/lib/base/body.less +44 -44
- package/lib/base/configuration-static.less +61 -61
- package/lib/base/fieldset.less +5 -5
- package/lib/base/icon.less +11 -11
- package/lib/base/internal.less +220 -220
- package/lib/base/reset-meyer.less +64 -64
- package/lib/base/reset-normalize.less +449 -449
- package/lib/base/reset.less +20 -20
- package/lib/components/activity-indicator/activity-indicator.a11y.test.ts +21 -21
- package/lib/components/activity-indicator/activity-indicator.less +40 -40
- package/lib/components/activity-indicator/activity-indicator.visual.test.ts +23 -23
- package/lib/components/anchor/anchor.less +61 -61
- package/lib/components/avatar/avatar.a11y.test.ts +36 -36
- package/lib/components/avatar/avatar.less +108 -108
- package/lib/components/avatar/avatar.visual.test.ts +54 -54
- package/lib/components/award-bling/award-bling.a11y.test.ts +17 -0
- package/lib/components/award-bling/award-bling.less +31 -31
- package/lib/components/award-bling/award-bling.visual.test.ts +26 -0
- package/lib/components/badge/badge.less +251 -251
- package/lib/components/banner/banner.a11y.test.ts +37 -0
- package/lib/components/banner/banner.less +51 -51
- package/lib/components/banner/banner.test.ts +73 -77
- package/lib/components/banner/banner.ts +149 -149
- package/lib/components/banner/banner.visual.test.ts +37 -36
- package/lib/components/block-link/block-link.a11y.test.ts +68 -0
- package/lib/components/block-link/block-link.less +80 -80
- package/lib/components/block-link/block-link.visual.test.ts +61 -0
- package/lib/components/breadcrumbs/breadcrumbs.a11y.test.ts +37 -0
- package/lib/components/breadcrumbs/breadcrumbs.less +41 -41
- package/lib/components/breadcrumbs/breadcrumbs.visual.test.ts +37 -0
- package/lib/components/button/button.a11y.test.ts +32 -32
- package/lib/components/button/button.less +502 -502
- package/lib/components/button/button.visual.test.ts +52 -52
- package/lib/components/button-group/button-group.less +83 -83
- package/lib/components/card/card.a11y.test.ts +13 -0
- package/lib/components/card/card.less +29 -29
- package/lib/components/card/card.visual.test.ts +54 -0
- package/lib/components/check-control/check-control.less +17 -17
- package/lib/components/check-group/check-group.less +19 -19
- package/lib/components/checkbox_radio/checkbox_radio.less +158 -158
- package/lib/components/code-block/code-block.less +116 -116
- package/lib/components/description/description.less +9 -9
- package/lib/components/empty-state/empty-state.less +16 -16
- package/lib/components/expandable/expandable.less +118 -118
- package/lib/components/expandable/expandable.test.ts +51 -53
- package/lib/components/expandable/expandable.ts +238 -238
- package/lib/components/input-fill/input-fill.less +35 -35
- package/lib/components/input-icon/input-icon.less +45 -45
- package/lib/components/input-message/input-message.less +48 -48
- package/lib/components/input_textarea/input_textarea.less +166 -166
- package/lib/components/label/label.less +111 -111
- package/lib/components/link/link.less +119 -119
- package/lib/components/link-preview/link-preview.less +139 -139
- package/lib/components/menu/menu.less +41 -41
- package/lib/components/modal/modal.less +113 -113
- package/lib/components/modal/modal.ts +379 -379
- package/lib/components/navigation/navigation.less +134 -134
- package/lib/components/navigation/navigation.ts +128 -128
- package/lib/components/notice/notice.less +203 -203
- package/lib/components/page-title/page-title.less +51 -51
- package/lib/components/pagination/pagination.less +52 -52
- package/lib/components/popover/popover.less +148 -148
- package/lib/components/popover/popover.ts +651 -651
- package/lib/components/popover/tooltip.test.ts +62 -66
- package/lib/components/popover/tooltip.ts +343 -343
- package/lib/components/popover/tooltip.visual.test.ts +31 -31
- package/lib/components/post-summary/post-summary.less +415 -415
- package/lib/components/progress-bar/progress-bar.less +291 -291
- package/lib/components/prose/prose.less +452 -452
- package/lib/components/select/select.less +148 -148
- package/lib/components/sidebar-widget/sidebar-widget.less +257 -258
- package/lib/components/spinner/spinner.less +103 -103
- package/lib/components/table/table.less +307 -292
- package/lib/components/table/table.test.ts +366 -0
- package/lib/components/table/table.ts +296 -263
- package/lib/components/table-container/table-container.less +4 -4
- package/lib/components/tag/tag.less +213 -213
- package/lib/components/toast/toast.less +35 -35
- package/lib/components/toast/toast.test.ts +63 -67
- package/lib/components/toast/toast.ts +357 -357
- package/lib/components/toast/toast.visual.test.ts +27 -27
- package/lib/components/toggle-switch/toggle-switch.less +110 -110
- package/lib/components/topbar/topbar.less +436 -435
- package/lib/components/uploader/uploader.less +195 -195
- package/lib/components/uploader/uploader.ts +205 -205
- package/lib/components/user-card/user-card.less +129 -129
- package/lib/controllers.ts +33 -33
- package/lib/exports/constants-colors.less +1112 -1111
- package/lib/exports/constants-helpers.less +108 -108
- package/lib/exports/constants-type.less +153 -153
- package/lib/exports/exports.less +15 -15
- package/lib/exports/mixins.less +299 -299
- package/lib/index.ts +32 -32
- package/lib/input-utils.less +44 -44
- package/lib/stacks-dynamic.less +24 -24
- package/lib/stacks-static.less +93 -93
- package/lib/stacks.less +13 -13
- package/lib/stacks.ts +113 -113
- package/lib/test/open-wc-testing-patch.d.ts +26 -0
- package/lib/test/test-utils.ts +466 -444
- package/lib/tsconfig.build.json +4 -0
- package/lib/tsconfig.json +16 -13
- package/package.json +106 -105
- package/dist/components/activity-indicator/activity-indicator.a11y.test.d.ts +0 -1
- package/dist/components/activity-indicator/activity-indicator.visual.test.d.ts +0 -1
- package/dist/components/avatar/avatar.a11y.test.d.ts +0 -1
- package/dist/components/avatar/avatar.visual.test.d.ts +0 -1
- package/dist/components/banner/banner.test.d.ts +0 -1
- package/dist/components/banner/banner.visual.test.d.ts +0 -1
- package/dist/components/button/button.a11y.test.d.ts +0 -1
- package/dist/components/button/button.visual.test.d.ts +0 -1
- package/dist/components/expandable/expandable.test.d.ts +0 -1
- package/dist/components/popover/tooltip.test.d.ts +0 -1
- package/dist/components/popover/tooltip.visual.test.d.ts +0 -1
- package/dist/components/toast/toast.test.d.ts +0 -1
- package/dist/components/toast/toast.visual.test.d.ts +0 -1
- package/dist/test/test-utils.d.ts +0 -136
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
import { html } from "@open-wc/testing";
|
|
2
|
-
import { runComponentTests } from "../../test/test-utils";
|
|
3
|
-
import "../../index";
|
|
4
|
-
|
|
5
|
-
const getChild = (child?: string): string => {
|
|
6
|
-
switch (child) {
|
|
7
|
-
case "badge":
|
|
8
|
-
return `Ask question
|
|
9
|
-
<span class="s-btn--badge">
|
|
10
|
-
<span class="s-btn--number">198</span>
|
|
11
|
-
</span>`;
|
|
12
|
-
default:
|
|
13
|
-
return "Ask question";
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
describe("button", () => {
|
|
18
|
-
// TODO test disabled states, interaction pseudo-classes
|
|
19
|
-
runComponentTests({
|
|
20
|
-
type: "visual",
|
|
21
|
-
baseClass: "s-btn",
|
|
22
|
-
variants: ["danger", "muted", "primary"],
|
|
23
|
-
modifiers: {
|
|
24
|
-
primary: ["filled", "outlined"],
|
|
25
|
-
secondary: [...["xs", "sm", "md"], ...["dropdown", "icon"]],
|
|
26
|
-
global: ["is-loading"],
|
|
27
|
-
standalone: [
|
|
28
|
-
...["link", "unset"],
|
|
29
|
-
...["facebook", "github", "google"],
|
|
30
|
-
],
|
|
31
|
-
},
|
|
32
|
-
attributes: {
|
|
33
|
-
type: "button",
|
|
34
|
-
},
|
|
35
|
-
children: {
|
|
36
|
-
default: getChild(),
|
|
37
|
-
badge: getChild("badge"),
|
|
38
|
-
},
|
|
39
|
-
tag: "button",
|
|
40
|
-
template: ({ component, testid }) => html`
|
|
41
|
-
<div
|
|
42
|
-
class="bg-black-100 d-inline-flex ai-center jc-center hs1 ws2 p8"
|
|
43
|
-
data-testid="${testid}"
|
|
44
|
-
>
|
|
45
|
-
${component}
|
|
46
|
-
</div>
|
|
47
|
-
`,
|
|
48
|
-
excludedTestids: [
|
|
49
|
-
/primary-outlined/, // This combination is not supported
|
|
50
|
-
],
|
|
51
|
-
});
|
|
52
|
-
});
|
|
1
|
+
import { html } from "@open-wc/testing";
|
|
2
|
+
import { runComponentTests } from "../../test/test-utils";
|
|
3
|
+
import "../../index";
|
|
4
|
+
|
|
5
|
+
const getChild = (child?: string): string => {
|
|
6
|
+
switch (child) {
|
|
7
|
+
case "badge":
|
|
8
|
+
return `Ask question
|
|
9
|
+
<span class="s-btn--badge">
|
|
10
|
+
<span class="s-btn--number">198</span>
|
|
11
|
+
</span>`;
|
|
12
|
+
default:
|
|
13
|
+
return "Ask question";
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
describe("button", () => {
|
|
18
|
+
// TODO test disabled states, interaction pseudo-classes
|
|
19
|
+
runComponentTests({
|
|
20
|
+
type: "visual",
|
|
21
|
+
baseClass: "s-btn",
|
|
22
|
+
variants: ["danger", "muted", "primary"],
|
|
23
|
+
modifiers: {
|
|
24
|
+
primary: ["filled", "outlined"],
|
|
25
|
+
secondary: [...["xs", "sm", "md"], ...["dropdown", "icon"]],
|
|
26
|
+
global: ["is-loading"],
|
|
27
|
+
standalone: [
|
|
28
|
+
...["link", "unset"],
|
|
29
|
+
...["facebook", "github", "google"],
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
attributes: {
|
|
33
|
+
type: "button",
|
|
34
|
+
},
|
|
35
|
+
children: {
|
|
36
|
+
default: getChild(),
|
|
37
|
+
badge: getChild("badge"),
|
|
38
|
+
},
|
|
39
|
+
tag: "button",
|
|
40
|
+
template: ({ component, testid }) => html`
|
|
41
|
+
<div
|
|
42
|
+
class="bg-black-100 d-inline-flex ai-center jc-center hs1 ws2 p8"
|
|
43
|
+
data-testid="${testid}"
|
|
44
|
+
>
|
|
45
|
+
${component}
|
|
46
|
+
</div>
|
|
47
|
+
`,
|
|
48
|
+
excludedTestids: [
|
|
49
|
+
/primary-outlined/, // This combination is not supported
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
.s-btn-group {
|
|
2
|
-
// CONTEXTUAL STYLES
|
|
3
|
-
#stacks-internals #screen-sm({
|
|
4
|
-
.s-btn {
|
|
5
|
-
&.s-btn__dropdown {
|
|
6
|
-
padding-right: 1.2em;
|
|
7
|
-
|
|
8
|
-
&:after {
|
|
9
|
-
right: 0.4em;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
padding-left: 0.4em;
|
|
14
|
-
padding-right: 0.4em;
|
|
15
|
-
}
|
|
16
|
-
}, @force-selector: true);
|
|
17
|
-
|
|
18
|
-
// VARIANTS
|
|
19
|
-
&:not(&--radio) .s-btn:not(:first-child):not(:last-child),
|
|
20
|
-
&&--radio .s-btn:not(:first-of-type):not(:last-of-type) {
|
|
21
|
-
border-radius: 0;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
&:not(&--radio) .s-btn:first-child:not(:only-child),
|
|
25
|
-
&&--radio .s-btn:first-of-type:not(:last-of-type) {
|
|
26
|
-
border-top-right-radius: 0;
|
|
27
|
-
border-bottom-right-radius: 0;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
&:not(&--radio) .s-btn:last-child:not(:only-child),
|
|
31
|
-
&&--radio .s-btn:last-of-type:not(:first-of-type) {
|
|
32
|
-
border-top-left-radius: 0;
|
|
33
|
-
border-bottom-left-radius: 0;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
&:not(&--radio) .s-btn:not(:last-child),
|
|
37
|
-
&&--radio .s-btn:not(:last-of-type) {
|
|
38
|
-
margin-right: calc(var(--su-static1) * -1);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// CHILD ELEMENTS
|
|
42
|
-
form {
|
|
43
|
-
&:not(:first-child):not(:last-child) {
|
|
44
|
-
.s-btn {
|
|
45
|
-
border-radius: 0;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
&:last-child:not(:only-child) {
|
|
50
|
-
.s-btn:not(:last-child) {
|
|
51
|
-
border-radius: 0;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
&:first-child:not(:only-child) {
|
|
56
|
-
.s-btn:not(:first-child) {
|
|
57
|
-
border-radius: 0;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
display: flex;
|
|
62
|
-
margin-right: calc(var(--su-static1) * -1); // -1px
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.s-btn {
|
|
66
|
-
&:active {
|
|
67
|
-
z-index: var(--zi-active);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
&.is-selected,
|
|
71
|
-
&--radio:checked + .s-btn {
|
|
72
|
-
z-index: var(--zi-selected); // When the button is active or selected, it should pop above its siblings
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
margin-bottom: calc(var(--su-static1) * -1); // When wrapping we need to account for the border
|
|
76
|
-
white-space: nowrap; // When the buttons wrap, they get super tall and mess up the whole layout
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// STATIC COMPONENT STYLES
|
|
80
|
-
display: flex;
|
|
81
|
-
flex-wrap: wrap;
|
|
82
|
-
margin-bottom: var(--su-static1); // Compensate for buttons having a margin bottom of -1px to account for row wrapping
|
|
83
|
-
}
|
|
1
|
+
.s-btn-group {
|
|
2
|
+
// CONTEXTUAL STYLES
|
|
3
|
+
#stacks-internals #screen-sm({
|
|
4
|
+
.s-btn {
|
|
5
|
+
&.s-btn__dropdown {
|
|
6
|
+
padding-right: 1.2em;
|
|
7
|
+
|
|
8
|
+
&:after {
|
|
9
|
+
right: 0.4em;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
padding-left: 0.4em;
|
|
14
|
+
padding-right: 0.4em;
|
|
15
|
+
}
|
|
16
|
+
}, @force-selector: true);
|
|
17
|
+
|
|
18
|
+
// VARIANTS
|
|
19
|
+
&:not(&--radio) .s-btn:not(:first-child):not(:last-child),
|
|
20
|
+
&&--radio .s-btn:not(:first-of-type):not(:last-of-type) {
|
|
21
|
+
border-radius: 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&:not(&--radio) .s-btn:first-child:not(:only-child),
|
|
25
|
+
&&--radio .s-btn:first-of-type:not(:last-of-type) {
|
|
26
|
+
border-top-right-radius: 0;
|
|
27
|
+
border-bottom-right-radius: 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&:not(&--radio) .s-btn:last-child:not(:only-child),
|
|
31
|
+
&&--radio .s-btn:last-of-type:not(:first-of-type) {
|
|
32
|
+
border-top-left-radius: 0;
|
|
33
|
+
border-bottom-left-radius: 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&:not(&--radio) .s-btn:not(:last-child),
|
|
37
|
+
&&--radio .s-btn:not(:last-of-type) {
|
|
38
|
+
margin-right: calc(var(--su-static1) * -1);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// CHILD ELEMENTS
|
|
42
|
+
form {
|
|
43
|
+
&:not(:first-child):not(:last-child) {
|
|
44
|
+
.s-btn {
|
|
45
|
+
border-radius: 0;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&:last-child:not(:only-child) {
|
|
50
|
+
.s-btn:not(:last-child) {
|
|
51
|
+
border-radius: 0;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
&:first-child:not(:only-child) {
|
|
56
|
+
.s-btn:not(:first-child) {
|
|
57
|
+
border-radius: 0;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
display: flex;
|
|
62
|
+
margin-right: calc(var(--su-static1) * -1); // -1px
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.s-btn {
|
|
66
|
+
&:active {
|
|
67
|
+
z-index: var(--zi-active);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
&.is-selected,
|
|
71
|
+
&--radio:checked + .s-btn {
|
|
72
|
+
z-index: var(--zi-selected); // When the button is active or selected, it should pop above its siblings
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
margin-bottom: calc(var(--su-static1) * -1); // When wrapping we need to account for the border
|
|
76
|
+
white-space: nowrap; // When the buttons wrap, they get super tall and mess up the whole layout
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// STATIC COMPONENT STYLES
|
|
80
|
+
display: flex;
|
|
81
|
+
flex-wrap: wrap;
|
|
82
|
+
margin-bottom: var(--su-static1); // Compensate for buttons having a margin bottom of -1px to account for row wrapping
|
|
83
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { runComponentTests } from "../../test/test-utils";
|
|
2
|
+
import "../../index";
|
|
3
|
+
|
|
4
|
+
describe("card", () => {
|
|
5
|
+
runComponentTests({
|
|
6
|
+
type: "a11y",
|
|
7
|
+
baseClass: "s-card",
|
|
8
|
+
variants: ["muted"],
|
|
9
|
+
children: {
|
|
10
|
+
default: `<p>This is a description of the card’s content.</p>`,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
.s-card {
|
|
2
|
-
--_ca-bc: var(--bc-medium);
|
|
3
|
-
|
|
4
|
-
// CONTEXTUAL STYLES
|
|
5
|
-
a& {
|
|
6
|
-
text-decoration: none !important;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// VARIANTS
|
|
10
|
-
&&__muted {
|
|
11
|
-
--_ca-bc: var(--bc-light);
|
|
12
|
-
|
|
13
|
-
// Dim only the first child card content
|
|
14
|
-
> * {
|
|
15
|
-
opacity: 0.65;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// CHILD ELEMENTS
|
|
20
|
-
> :last-child {
|
|
21
|
-
margin-bottom: 0;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
border: var(--su-static1) solid var(--_ca-bc);
|
|
25
|
-
|
|
26
|
-
background-color: var(--white);
|
|
27
|
-
border-radius: var(--br-sm);
|
|
28
|
-
padding: var(--su12);
|
|
29
|
-
}
|
|
1
|
+
.s-card {
|
|
2
|
+
--_ca-bc: var(--bc-medium);
|
|
3
|
+
|
|
4
|
+
// CONTEXTUAL STYLES
|
|
5
|
+
a& {
|
|
6
|
+
text-decoration: none !important;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// VARIANTS
|
|
10
|
+
&&__muted {
|
|
11
|
+
--_ca-bc: var(--bc-light);
|
|
12
|
+
|
|
13
|
+
// Dim only the first child card content
|
|
14
|
+
> * {
|
|
15
|
+
opacity: 0.65;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// CHILD ELEMENTS
|
|
20
|
+
> :last-child {
|
|
21
|
+
margin-bottom: 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
border: var(--su-static1) solid var(--_ca-bc);
|
|
25
|
+
|
|
26
|
+
background-color: var(--white);
|
|
27
|
+
border-radius: var(--br-sm);
|
|
28
|
+
padding: var(--su12);
|
|
29
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { html } from "@open-wc/testing";
|
|
2
|
+
import { defaultOptions, runComponentTests } from "../../test/test-utils";
|
|
3
|
+
import "../../index";
|
|
4
|
+
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6
|
+
const cardTemplate = ({ component, testid }: any) => html`<div
|
|
7
|
+
class="d-inline-flex ai-center jc-center hs2 ws3 p8"
|
|
8
|
+
data-testid="${testid}"
|
|
9
|
+
>
|
|
10
|
+
${component}
|
|
11
|
+
</div>`;
|
|
12
|
+
|
|
13
|
+
const baseChild = `
|
|
14
|
+
<h2 class="fs-body3 lh-sm fc-dark">Base card title</h2>
|
|
15
|
+
<p class="fs-body1 fc-medium">
|
|
16
|
+
This is a description of the card’s content.
|
|
17
|
+
</p>
|
|
18
|
+
<div class="d-flex gx4">
|
|
19
|
+
<button class="flex--item s-btn s-btn__primary s-btn__sm">
|
|
20
|
+
Call to action
|
|
21
|
+
</button>
|
|
22
|
+
<button class="flex--item s-btn s-btn__sm">Cancel</button>
|
|
23
|
+
</div>
|
|
24
|
+
`;
|
|
25
|
+
|
|
26
|
+
describe("card", () => {
|
|
27
|
+
runComponentTests({
|
|
28
|
+
type: "visual",
|
|
29
|
+
baseClass: "s-card",
|
|
30
|
+
variants: ["muted"],
|
|
31
|
+
children: {
|
|
32
|
+
default: baseChild,
|
|
33
|
+
},
|
|
34
|
+
template: cardTemplate,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Stacked
|
|
38
|
+
runComponentTests({
|
|
39
|
+
type: "visual",
|
|
40
|
+
baseClass: "s-card",
|
|
41
|
+
variants: ["stacked"], // dummy variant for testid differentiation
|
|
42
|
+
children: {
|
|
43
|
+
default: `<div class="s-card ps-relative b4 l4">${baseChild}</div>`,
|
|
44
|
+
},
|
|
45
|
+
attributes: {
|
|
46
|
+
class: "p0",
|
|
47
|
+
},
|
|
48
|
+
template: cardTemplate,
|
|
49
|
+
options: {
|
|
50
|
+
...defaultOptions,
|
|
51
|
+
includeNullVariant: false,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
.s-check-control { // TODO would _love_ to use .s-check instead, with no class on the input itself
|
|
2
|
-
--_cc-ai: center;
|
|
3
|
-
|
|
4
|
-
// CONTEXTUAL STYLES
|
|
5
|
-
.s-check-group & {
|
|
6
|
-
--_cc-ai: flex-start; // manually align the checkboxes and radios to the top of the group
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// CHILD ELEMENTS
|
|
10
|
-
.s-label {
|
|
11
|
-
font-weight: normal;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
align-items: var(--_cc-ai);
|
|
15
|
-
display: flex;
|
|
16
|
-
gap: var(--su8);
|
|
17
|
-
}
|
|
1
|
+
.s-check-control { // TODO would _love_ to use .s-check instead, with no class on the input itself
|
|
2
|
+
--_cc-ai: center;
|
|
3
|
+
|
|
4
|
+
// CONTEXTUAL STYLES
|
|
5
|
+
.s-check-group & {
|
|
6
|
+
--_cc-ai: flex-start; // manually align the checkboxes and radios to the top of the group
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// CHILD ELEMENTS
|
|
10
|
+
.s-label {
|
|
11
|
+
font-weight: normal;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
align-items: var(--_cc-ai);
|
|
15
|
+
display: flex;
|
|
16
|
+
gap: var(--su8);
|
|
17
|
+
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
.s-check-group {
|
|
2
|
-
--_cg-fd: column;
|
|
3
|
-
|
|
4
|
-
// MODIFIERS
|
|
5
|
-
&&__horizontal {
|
|
6
|
-
--_cg-fd: row;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// CHILD ELEMENTS
|
|
10
|
-
// TODO HACK? <legend> isn't respecting gap...
|
|
11
|
-
legend.s-label {
|
|
12
|
-
margin-bottom: var(--su8);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
flex-direction: var(--_cg-fd);
|
|
16
|
-
|
|
17
|
-
display: flex;
|
|
18
|
-
gap: var(--su8);
|
|
19
|
-
}
|
|
1
|
+
.s-check-group {
|
|
2
|
+
--_cg-fd: column;
|
|
3
|
+
|
|
4
|
+
// MODIFIERS
|
|
5
|
+
&&__horizontal {
|
|
6
|
+
--_cg-fd: row;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// CHILD ELEMENTS
|
|
10
|
+
// TODO HACK? <legend> isn't respecting gap...
|
|
11
|
+
legend.s-label {
|
|
12
|
+
margin-bottom: var(--su8);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
flex-direction: var(--_cg-fd);
|
|
16
|
+
|
|
17
|
+
display: flex;
|
|
18
|
+
gap: var(--su8);
|
|
19
|
+
}
|