@bonniernews/dn-design-system-web 3.0.0-alpha.9 → 3.0.0-alpha.91
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/CHANGELOG.md +733 -0
- package/assets/article-image/article-image.njk +11 -10
- package/assets/article-image/article-image.scss +1 -15
- package/assets/form-field/form-field.njk +2 -2
- package/assets/form-field/form-field.scss +2 -6
- package/assets/teaser/dot-or-grade.njk +7 -0
- package/assets/teaser/teaser.scss +96 -0
- package/components/article-body-image/README.md +2 -2
- package/components/article-body-image/article-body-image.njk +1 -5
- package/components/article-top-image/README.md +2 -2
- package/components/article-top-image/article-top-image.njk +1 -5
- package/components/article-top-image/article-top-image.scss +1 -1
- package/components/badge/badge.scss +1 -5
- package/components/buddy-menu/buddy-menu.scss +1 -8
- package/components/button/button.njk +38 -43
- package/components/button/button.scss +6 -1
- package/components/button-toggle/button-toggle.js +2 -0
- package/components/button-toggle/button-toggle.njk +36 -36
- package/components/button-toggle/button-toggle.scss +6 -1
- package/components/byline/byline.njk +2 -2
- package/components/byline/byline.scss +1 -3
- package/components/checkbox/checkbox.njk +3 -3
- package/components/checkbox/checkbox.scss +8 -9
- package/components/disclaimer/disclaimer.njk +2 -2
- package/components/disclaimer/disclaimer.scss +23 -10
- package/components/factbox/README.md +2 -2
- package/components/factbox/factbox.njk +12 -24
- package/components/factbox/factbox.scss +16 -51
- package/components/footer/footer.scss +2 -8
- package/components/icon-button/README.md +2 -1
- package/components/icon-button/icon-button.njk +4 -4
- package/components/icon-button/icon-button.scss +5 -2
- package/components/icon-button-toggle/icon-button-toggle.js +2 -0
- package/components/icon-button-toggle/icon-button-toggle.njk +28 -36
- package/components/icon-button-toggle/icon-button-toggle.scss +5 -2
- package/components/icon-sprite/README.md +51 -0
- package/components/icon-sprite/icon-sprite.njk +12 -0
- package/components/icon-sprite/icon-sprite.scss +12 -0
- package/components/icon-with-wrapper/README.md +9 -2
- package/components/icon-with-wrapper/icon-with-wrapper.njk +2 -2
- package/components/icon-with-wrapper/icon-with-wrapper.scss +2 -1
- package/components/image-caption/README.md +38 -0
- package/components/image-caption/image-caption.njk +36 -0
- package/components/image-caption/image-caption.scss +25 -0
- package/components/list-item/list-item.njk +5 -5
- package/components/list-item/list-item.scss +1 -3
- package/components/pictogram/README.md +39 -0
- package/components/pictogram/pictogram.njk +30 -0
- package/components/pictogram/pictogram.scss +54 -0
- package/components/quote/README.md +1 -2
- package/components/quote/quote.njk +6 -8
- package/components/quote/quote.scss +1 -14
- package/components/radio-button/radio-button.njk +3 -3
- package/components/radio-button/radio-button.scss +8 -10
- package/components/spinner/spinner.njk +19 -23
- package/components/spinner/spinner.scss +4 -1
- package/components/teaser-dot/README.md +34 -0
- package/components/teaser-dot/teaser-dot.njk +24 -0
- package/components/teaser-dot/teaser-dot.scss +39 -0
- package/components/teaser-image/README.md +40 -0
- package/components/teaser-image/teaser-image.njk +21 -0
- package/components/teaser-image/teaser-image.scss +21 -0
- package/components/teaser-large/README.md +52 -0
- package/components/teaser-large/teaser-large.njk +96 -0
- package/components/teaser-large/teaser-large.scss +134 -0
- package/components/teaser-onsite/README.md +45 -0
- package/components/teaser-onsite/teaser-onsite.njk +45 -0
- package/components/teaser-onsite/teaser-onsite.scss +35 -0
- package/components/teaser-package/README.md +42 -0
- package/components/teaser-package/teaser-package.njk +39 -0
- package/components/teaser-package/teaser-package.scss +114 -0
- package/components/teaser-right-now/README.md +37 -0
- package/components/teaser-right-now/teaser-right-now.njk +29 -0
- package/components/teaser-right-now/teaser-right-now.scss +59 -0
- package/components/teaser-slideshow/README.md +42 -0
- package/components/teaser-slideshow/teaser-slideshow.njk +38 -0
- package/components/teaser-slideshow/teaser-slideshow.scss +42 -0
- package/components/teaser-split/README-container.md +40 -0
- package/components/teaser-split/README.md +49 -0
- package/components/teaser-split/teaser-split.njk +93 -0
- package/components/teaser-split/teaser-split.scss +88 -0
- package/components/teaser-standard/README.md +50 -0
- package/components/teaser-standard/teaser-standard.njk +81 -0
- package/components/teaser-standard/teaser-standard.scss +40 -0
- package/components/teaser-tipsa/README.md +41 -0
- package/components/teaser-tipsa/teaser-tipsa.njk +31 -0
- package/components/teaser-tipsa/teaser-tipsa.scss +25 -0
- package/components/text-button/text-button.njk +34 -37
- package/components/text-button/text-button.scss +12 -10
- package/components/text-button-toggle/text-button-toggle.js +2 -0
- package/components/text-button-toggle/text-button-toggle.njk +30 -33
- package/components/text-button-toggle/text-button-toggle.scss +10 -10
- package/components/text-input/text-input.scss +3 -8
- package/components/video-caption/README.md +1 -1
- package/components/video-caption/video-caption.njk +12 -6
- package/components/vip-badge/README.md +35 -0
- package/components/vip-badge/vip-badge.njk +23 -0
- package/components/vip-badge/vip-badge.scss +54 -0
- package/foundations/colors.scss +31 -0
- package/foundations/helpers/README-links.md +1 -1
- package/foundations/helpers/colors.scss +2 -0
- package/foundations/helpers/hover.scss +14 -0
- package/foundations/helpers/links.scss +15 -7
- package/foundations/helpers/typography.scss +22 -2
- package/foundations/icons/grade-icon.njk +50 -11
- package/foundations/icons/icon.njk +172 -143
- package/foundations/icons/sprite.njk +1 -0
- package/foundations/icons/sprite.svg +1 -0
- package/foundations/icons/svg/download.svg +3 -0
- package/foundations/icons/svg/filter_list.svg +3 -0
- package/foundations/icons/svg/pause.svg +3 -0
- package/foundations/icons/svg/system_update.svg +3 -0
- package/foundations/icons/svg/vip.svg +3 -0
- package/foundations/typography/fontDefinitions.scss +82 -67
- package/foundations/variables/colorsCssVariables.scss +6 -0
- package/foundations/variables/colorsDnDarkTokens.scss +7 -1
- package/foundations/variables/colorsDnLightTokens.scss +8 -2
- package/foundations/variables/spacingLayout.scss +7 -1
- package/foundations/variables/spacingLayoutLargeScreen.scss +6 -0
- package/foundations/variables/spacingLayoutList.scss +6 -0
- package/foundations/variables/typographyTokensList.scss +5 -0
- package/foundations/variables/typographyTokensScreenExtraLarge.scss +571 -0
- package/foundations/variables/typographyTokensScreenLarge.scss +133 -100
- package/foundations/variables/typographyTokensScreenSmall.scss +147 -114
- package/package.json +2 -2
- package/tokens/colors-css-variables.json +6 -0
- package/tokens/spacing-layout-list.json +7 -1
- package/foundations/icons/icon-sprite.svg +0 -2
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
{% from '@bonniernews/dn-design-system-web/components/image-caption/image-caption.njk' import ImageCaption %}
|
|
2
|
+
|
|
1
3
|
{% macro ArticleImage(params) %}
|
|
2
4
|
{% set macroClassName = "ds-article-image" %}
|
|
3
5
|
{% set additionalClasses = [] %}
|
|
@@ -18,16 +20,15 @@
|
|
|
18
20
|
{% endif %}
|
|
19
21
|
|
|
20
22
|
{% if params.caption or params.author %}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
</figcaption>
|
|
23
|
+
{% set caption = params.caption if params.caption else "" %}
|
|
24
|
+
{% set author = params.author if params.author else "" %}
|
|
25
|
+
{% set imageType = params.imageType if params.imageType else "" %}
|
|
26
|
+
{{ ImageCaption({
|
|
27
|
+
caption: caption,
|
|
28
|
+
author: author,
|
|
29
|
+
imageType: imageType,
|
|
30
|
+
forcePx: params.forcePx
|
|
31
|
+
})}}
|
|
31
32
|
{% endif %}
|
|
32
33
|
</figure>
|
|
33
34
|
{% endmacro %}
|
|
@@ -1,20 +1,6 @@
|
|
|
1
1
|
@use "../../foundations/helpers/forward.helpers.scss" as *;
|
|
2
|
+
@use "../../components/image-caption/image-caption.scss" as *;
|
|
2
3
|
|
|
3
4
|
.ds-article-image {
|
|
4
5
|
margin: 0;
|
|
5
|
-
|
|
6
|
-
> figcaption {
|
|
7
|
-
@include ds-typography($ds-typography-functional-body01regular);
|
|
8
|
-
margin-top: ds-spacing-component($ds-sc-x2);
|
|
9
|
-
color: $ds-color-text-primary;
|
|
10
|
-
|
|
11
|
-
@at-root .ds-force-px#{&} {
|
|
12
|
-
@include ds-typography($ds-typography-functional-body01regular, true);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
> .ds-article-image__credits {
|
|
16
|
-
display: block;
|
|
17
|
-
color: $ds-color-text-primary-02;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
6
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{% from '@bonniernews/dn-design-system-web/
|
|
1
|
+
{% from '@bonniernews/dn-design-system-web/components/icon-sprite/icon-sprite.njk' import IconUse %}
|
|
2
2
|
{% set classes = [] %}
|
|
3
3
|
|
|
4
4
|
{% macro FormField(params, wrapperClasses) %}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{{ caller() if caller }}
|
|
11
11
|
{% if params.errorMessage %}
|
|
12
12
|
<div class="ds-form-field__error-message js-field-error">
|
|
13
|
-
{{
|
|
13
|
+
{{ IconUse({ icon: "info-filled" }) }}
|
|
14
14
|
<span>{{ params.errorMessage | safe }}</span>
|
|
15
15
|
</div>
|
|
16
16
|
{% endif %}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
@use "../../foundations/helpers/
|
|
2
|
-
@use "../../
|
|
3
|
-
@use "../../foundations/helpers/utilities.scss" as *;
|
|
4
|
-
@use "../../foundations/helpers/typography.scss" as *;
|
|
5
|
-
@use "../../foundations/helpers/colors.scss" as *;
|
|
6
|
-
@use "../../foundations/icons/icon.scss" as *;
|
|
1
|
+
@use "../../foundations/helpers/forward.helpers.scss" as *;
|
|
2
|
+
@use "../../components/icon-sprite/icon-sprite.scss";
|
|
7
3
|
|
|
8
4
|
$ds-form-field__error-icon-size: 20px;
|
|
9
5
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{% from '@bonniernews/dn-design-system-web/components/teaser-dot/teaser-dot.njk' import TeaserDot %}
|
|
2
|
+
{% from '@bonniernews/dn-design-system-web/foundations/icons/grade-icon.njk' import GetGrade %}
|
|
3
|
+
|
|
4
|
+
{% macro getDotOrGrade(params) %}
|
|
5
|
+
{% set gradeHtml = GetGrade({ grade: params.grade, type: "single" }) | trim if params.grade else "" %}
|
|
6
|
+
{{ gradeHtml if gradeHtml.length else TeaserDot({ flashing: params.flashing }) }}
|
|
7
|
+
{% endmacro %}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
@use "../../foundations/helpers/forward.helpers.scss" as *;
|
|
2
|
+
@use "../../components/icon-sprite/icon-sprite.scss";
|
|
3
|
+
@use "../../components/vip-badge/vip-badge.scss";
|
|
4
|
+
@use "../../components/teaser-image/teaser-image.scss";
|
|
5
|
+
@use "../../components/teaser-dot/teaser-dot.scss";
|
|
6
|
+
|
|
7
|
+
.ds-teaser {
|
|
8
|
+
display: block;
|
|
9
|
+
background-color: $ds-color-background-primary;
|
|
10
|
+
text-decoration: none;
|
|
11
|
+
position: relative;
|
|
12
|
+
|
|
13
|
+
@include ds-teaser-focus(-8px);
|
|
14
|
+
|
|
15
|
+
.ds-teaser__content {
|
|
16
|
+
display: flex;
|
|
17
|
+
flex: 1;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.ds-teaser__vignette {
|
|
22
|
+
display: block;
|
|
23
|
+
@include ds-typography($ds-typography-detailarticle-label);
|
|
24
|
+
color: $ds-theme-color;
|
|
25
|
+
margin-bottom: ds-spacing-component($ds-sc-x1);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.ds-teaser__title {
|
|
29
|
+
color: $ds-color-text-primary;
|
|
30
|
+
margin: 0;
|
|
31
|
+
word-break: break-word;
|
|
32
|
+
|
|
33
|
+
.ds-teaser__highlight {
|
|
34
|
+
color: $ds-theme-color;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@include ds-hover(true) {
|
|
39
|
+
.ds-teaser__title {
|
|
40
|
+
@include ds-underline();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.ds-teaser__text {
|
|
45
|
+
@include ds-typography($ds-typography-detailmedryckare);
|
|
46
|
+
color: $ds-color-text-primary;
|
|
47
|
+
// Should be replaced with dynamic spacing layout token when available
|
|
48
|
+
margin: ds-spacing-component($ds-sc-x2 0 0);
|
|
49
|
+
@include ds-mq-smallest-breakpoint(tablet) {
|
|
50
|
+
margin-top: ds-spacing-component($ds-sc-x3);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.ds-icon.ds-icon--grade {
|
|
55
|
+
$grade-size: ds-px-to-rem(34px);
|
|
56
|
+
color: $ds-color-icon-primary;
|
|
57
|
+
border-radius: 50%;
|
|
58
|
+
float: left;
|
|
59
|
+
font-size: 0;
|
|
60
|
+
line-height: 0;
|
|
61
|
+
margin: ds-spacing-component($ds-sc-x1 $ds-sc-x1 0 0, "rem");
|
|
62
|
+
height: $grade-size;
|
|
63
|
+
width: $grade-size;
|
|
64
|
+
svg {
|
|
65
|
+
width: 100%;
|
|
66
|
+
height: 100%;
|
|
67
|
+
circle {
|
|
68
|
+
stroke: currentColor;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.ds-teaser__sticker {
|
|
74
|
+
display: inline;
|
|
75
|
+
color: $ds-theme-color;
|
|
76
|
+
@include ds-typography($ds-typography-detailarticle-label);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.ds-teaser__media {
|
|
80
|
+
width: 100%;
|
|
81
|
+
position: relative;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.ds-vip-badge {
|
|
85
|
+
position: absolute;
|
|
86
|
+
top: 0;
|
|
87
|
+
right: 0;
|
|
88
|
+
z-index: 5;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
&.ds-teaser--quote-badge {
|
|
92
|
+
.ds-teaser__title {
|
|
93
|
+
padding-right: ds-spacing-component($ds-sc-x3);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
- GitHub: [BonnierNews/dn-design-system/../web/src/components/article-body-image](https://github.com/BonnierNews/dn-design-system/tree/main/web/src/components/article-body-image)
|
|
2
|
-
- Storybook: [
|
|
2
|
+
- Storybook: [ArticleBodyImage > Web](https://designsystem.dn.se/?path=/story/components-app-web-article-components-image-bodyimage-web--article-body-image)
|
|
3
3
|
|
|
4
4
|
----
|
|
5
5
|
|
|
@@ -32,7 +32,7 @@ These are copy paste friendly examples to quickliy get started using a component
|
|
|
32
32
|
fullWidth: true,
|
|
33
33
|
caption: "En bildtext",
|
|
34
34
|
imageType: "Foto",
|
|
35
|
-
author: "Paul Hansen"
|
|
35
|
+
author: "Paul Hansen"
|
|
36
36
|
})}}
|
|
37
37
|
```
|
|
38
38
|
|
|
@@ -11,13 +11,9 @@
|
|
|
11
11
|
{% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
|
|
12
12
|
{% endif %}
|
|
13
13
|
|
|
14
|
-
{% if params.forcePx %}
|
|
15
|
-
{% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
|
|
16
|
-
{% endif %}
|
|
17
|
-
|
|
18
14
|
{% set classes = componentClassName + " " + additionalClasses | join(" ") %}
|
|
19
15
|
|
|
20
|
-
{% set imageParams = { fullWidth: params.fullWidth, caption: params.caption, imageType: params.imageType, author: params.author, imageHtml: params.imageHtml, classNames: classes, attributes: attributes } %}
|
|
16
|
+
{% set imageParams = { fullWidth: params.fullWidth, caption: params.caption, imageType: params.imageType, author: params.author, imageHtml: params.imageHtml, classNames: classes, attributes: attributes, forcePx: params.forcePx } %}
|
|
21
17
|
|
|
22
18
|
{% call ArticleImage(imageParams) %}{% endcall %}
|
|
23
19
|
{% endmacro %}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
- GitHub: [BonnierNews/dn-design-system/../web/src/components/article-top-image](https://github.com/BonnierNews/dn-design-system/tree/main/web/src/components/article-top-image)
|
|
2
|
-
- Storybook: [
|
|
2
|
+
- Storybook: [ArticleTopImage > Web](https://designsystem.dn.se/?path=/story/components-app-web-article-components-image-topimage-web--article-top-image)
|
|
3
3
|
|
|
4
4
|
----
|
|
5
5
|
|
|
@@ -30,7 +30,7 @@ These are copy paste friendly examples to quickliy get started using a component
|
|
|
30
30
|
imageHtml: exampleArticleTopImageHtml(),
|
|
31
31
|
caption: "En bildtext",
|
|
32
32
|
imageType: "Foto",
|
|
33
|
-
author: "Beatrice Lundborg"
|
|
33
|
+
author: "Beatrice Lundborg"
|
|
34
34
|
})}}
|
|
35
35
|
```
|
|
36
36
|
|
|
@@ -11,13 +11,9 @@
|
|
|
11
11
|
{% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
|
|
12
12
|
{% endif %}
|
|
13
13
|
|
|
14
|
-
{% if params.forcePx %}
|
|
15
|
-
{% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
|
|
16
|
-
{% endif %}
|
|
17
|
-
|
|
18
14
|
{% set classes = componentClassName + " " + additionalClasses | join(" ") %}
|
|
19
15
|
|
|
20
|
-
{% set imageParams = { fullWidth: true, caption: params.caption, imageType: params.imageType, author: params.author, imageHtml: params.imageHtml, classNames: classes, attributes: attributes } %}
|
|
16
|
+
{% set imageParams = { fullWidth: true, caption: params.caption, imageType: params.imageType, author: params.author, imageHtml: params.imageHtml, classNames: classes, attributes: attributes, forcePx: params.forcePx } %}
|
|
21
17
|
|
|
22
18
|
{% call ArticleImage(imageParams) %}{% endcall %}
|
|
23
19
|
{% endmacro %}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
@use "../../foundations/helpers/
|
|
2
|
-
@use "../../foundations/helpers/spacing.scss" as *;
|
|
3
|
-
@use "../../foundations/helpers/typography.scss" as *;
|
|
4
|
-
@use "../../foundations/helpers/utilities.scss" as *;
|
|
5
|
-
@use "../../foundations/helpers/colors.scss" as *;
|
|
1
|
+
@use "../../foundations/helpers/forward.helpers.scss" as *;
|
|
6
2
|
|
|
7
3
|
$ds-badge__min-size: 8px;
|
|
8
4
|
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
@use "../../foundations/helpers/
|
|
2
|
-
@use "../../foundations/helpers/typography.scss" as *;
|
|
3
|
-
@use "../../foundations/helpers/mediaQueries.scss" as *;
|
|
4
|
-
@use "../../foundations/helpers/metrics.scss" as *;
|
|
5
|
-
@use "../../foundations/helpers/utilities.scss" as *;
|
|
6
|
-
@use "../../foundations/helpers/colors.scss" as *;
|
|
7
|
-
@use "../../foundations/helpers/links.scss" as *;
|
|
8
|
-
@use "../../foundations/helpers/shadows.scss" as *;
|
|
1
|
+
@use "../../foundations/helpers/forward.helpers.scss" as *;
|
|
9
2
|
@use "../button/button.scss" as *;
|
|
10
3
|
@use "../icon-button/icon-button.scss" as *;
|
|
11
4
|
@use "../list-item/list-item.scss" as *;
|
|
@@ -1,75 +1,70 @@
|
|
|
1
|
-
{% from '@bonniernews/dn-design-system-web/
|
|
1
|
+
{% from '@bonniernews/dn-design-system-web/components/icon-sprite/icon-sprite.njk' import IconUse %}
|
|
2
2
|
{% from '@bonniernews/dn-design-system-web/components/spinner/spinner.njk' import Spinner %}
|
|
3
|
+
{% from '@bonniernews/dn-design-system-web/njk-helpers/attributes.njk' import getAttributes %}
|
|
3
4
|
|
|
4
5
|
{% macro Button(params) %}
|
|
5
|
-
{
|
|
6
|
-
{
|
|
7
|
-
{
|
|
8
|
-
{
|
|
9
|
-
{
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
{
|
|
14
|
-
|
|
15
|
-
{% set buttonVariant = params.variant | default("primary") %}
|
|
16
|
-
{% set variant = (variant.push(classNamePrefix + buttonVariant), variant) %}
|
|
6
|
+
{%- set componentClassName = "ds-btn" %}
|
|
7
|
+
{%- set classNamePrefix = componentClassName + "--" %}
|
|
8
|
+
{%- set text = params.text %}
|
|
9
|
+
{%- set additionalClasses = [] %}
|
|
10
|
+
{%- set attributes = getAttributes(params.attributes) %}
|
|
11
|
+
{%- set ariaLabel = 'aria-label="' + text + '"' if not params.attributes["aria-label"] else "" %}
|
|
12
|
+
{%- set buttonVariant = params.variant | default("primary") %}
|
|
13
|
+
{%- set additionalClasses = (additionalClasses.push(classNamePrefix + buttonVariant), additionalClasses) %}
|
|
14
|
+
{%- set spinnerMap = { primary: "secondary", brand: "onBrand", business: "onBusiness", staticWhiteFilled: "staticBlack", staticWhiteOutlined: "staticWhite" } %}
|
|
15
|
+
{%- set spinnerVariant = spinnerMap[buttonVariant] | default("primary") %}
|
|
17
16
|
|
|
18
|
-
{
|
|
19
|
-
{% set spinnerVariant = spinnerMap[buttonVariant] | default("primary") %}
|
|
20
|
-
|
|
21
|
-
{% set loadingHtml %}
|
|
17
|
+
{%- set loadingHtml %}
|
|
22
18
|
{{ Spinner({ size: 'small', variant: spinnerVariant, forcePx: params.forcePx }) }}
|
|
23
19
|
{% endset %}
|
|
24
20
|
|
|
25
|
-
{
|
|
26
|
-
{% set
|
|
21
|
+
{%- if params.loading %}
|
|
22
|
+
{% set additionalClasses = (additionalClasses.push("ds-loading"), additionalClasses) %}
|
|
27
23
|
{% endif %}
|
|
28
24
|
|
|
29
|
-
{
|
|
30
|
-
{% set
|
|
25
|
+
{%- if params.forcePx %}
|
|
26
|
+
{% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
|
|
31
27
|
{% endif %}
|
|
32
28
|
|
|
33
|
-
{
|
|
34
|
-
{% set
|
|
29
|
+
{%- if params.condensed %}
|
|
30
|
+
{% set additionalClasses = (additionalClasses.push(classNamePrefix + "condensed"), additionalClasses) %}
|
|
35
31
|
{% endif %}
|
|
36
32
|
|
|
37
|
-
{
|
|
38
|
-
{% set
|
|
33
|
+
{%- if params.size and params.size != "default" %}
|
|
34
|
+
{% set additionalClasses = (additionalClasses.push(classNamePrefix + params.size), additionalClasses) %}
|
|
39
35
|
{% endif %}
|
|
40
36
|
|
|
41
|
-
{
|
|
42
|
-
{% set
|
|
37
|
+
{%- if params.fullWidth %}
|
|
38
|
+
{% set additionalClasses = (additionalClasses.push(classNamePrefix + "full-width"), additionalClasses) %}
|
|
43
39
|
{% endif %}
|
|
44
40
|
|
|
45
|
-
{
|
|
46
|
-
{% set
|
|
41
|
+
{%- if params.mobile and params.mobile.fullWidth %}
|
|
42
|
+
{% set additionalClasses = (additionalClasses.push(classNamePrefix + "mobile-full-width"), additionalClasses) %}
|
|
47
43
|
{% endif %}
|
|
48
44
|
|
|
49
|
-
{
|
|
50
|
-
{% set
|
|
51
|
-
{% set iconSvg =
|
|
45
|
+
{%- if params.iconName and params.iconPosition and params.iconPosition != "none" %}
|
|
46
|
+
{% set additionalClasses = (additionalClasses.push(classNamePrefix + "icon" + "-" + params.iconPosition ), additionalClasses) %}
|
|
47
|
+
{% set iconSvg = IconUse({ icon: params.iconName }) %}
|
|
52
48
|
{% endif %}
|
|
53
49
|
|
|
54
|
-
{
|
|
55
|
-
{% set
|
|
50
|
+
{%- if params.classNames %}
|
|
51
|
+
{% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
|
|
56
52
|
{% endif%}
|
|
57
53
|
|
|
58
|
-
{
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
<div class="{{ componentClassName + '__inner'}}">
|
|
54
|
+
{%- set classes = componentClassName + " " + additionalClasses | join(" ") %}
|
|
55
|
+
{%- if params.href %}
|
|
56
|
+
<a href="{{ params.href | default('#', true) }}" {{ ariaLabel | safe }} class="{{ classes }}" {{- attributes | safe}}>
|
|
57
|
+
<span class="{{ componentClassName + '__inner' }}" aria-hidden="true">
|
|
63
58
|
<span>{{ text }}</span>
|
|
64
59
|
{{- iconSvg | safe if iconSvg -}} {{ loadingHtml | safe }}
|
|
65
|
-
</
|
|
60
|
+
</span>
|
|
66
61
|
</a>
|
|
67
62
|
{% else %}
|
|
68
|
-
<button type="{{ params.type | default('button') }}" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe}}>
|
|
69
|
-
<
|
|
63
|
+
<button type="{{ params.type | default('button') }}" {{ ariaLabel | safe }} class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe}}>
|
|
64
|
+
<span class="{{ componentClassName + '__inner' }}" aria-hidden="true">
|
|
70
65
|
<span>{{ text }}</span>
|
|
71
66
|
{{- iconSvg | safe if iconSvg -}} {{ loadingHtml | safe }}
|
|
72
|
-
</
|
|
67
|
+
</span>
|
|
73
68
|
</button>
|
|
74
69
|
{% endif %}
|
|
75
70
|
{% endmacro %}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@use "sass:math";
|
|
2
2
|
@use "../../foundations/helpers/forward.helpers.scss" as *;
|
|
3
|
-
@use "
|
|
3
|
+
@use "../icon-sprite/icon-sprite.scss";
|
|
4
4
|
@use "../spinner/spinner.scss" as *;
|
|
5
5
|
|
|
6
6
|
$ds-btn-outlined__border-width: ds-metrics-border-width(x1);
|
|
@@ -17,6 +17,10 @@ $ds-btn__icon-size: 24px;
|
|
|
17
17
|
padding: 0;
|
|
18
18
|
position: relative;
|
|
19
19
|
|
|
20
|
+
span {
|
|
21
|
+
pointer-events: none;
|
|
22
|
+
}
|
|
23
|
+
|
|
20
24
|
&:not(.ds-btn--condensed) {
|
|
21
25
|
min-width: $ds-btn__min-clickable-area;
|
|
22
26
|
min-height: $ds-btn__min-clickable-area;
|
|
@@ -75,6 +79,7 @@ $ds-btn__icon-size: 24px;
|
|
|
75
79
|
&,
|
|
76
80
|
& .ds-btn__inner {
|
|
77
81
|
width: 100%;
|
|
82
|
+
box-sizing: border-box;
|
|
78
83
|
}
|
|
79
84
|
}
|
|
80
85
|
|
|
@@ -9,6 +9,8 @@ function dsButtonToggle(toggleElements = []) {
|
|
|
9
9
|
toggleEl.addEventListener("click", () => {
|
|
10
10
|
if (toggleEl.classList.contains("ds-btn-toggle--disabled")) return;
|
|
11
11
|
toggleEl.classList.toggle("ds-btn-toggle--selected");
|
|
12
|
+
const ariaChecked = toggleEl.getAttribute("aria-checked") === "true" ? "false" : "true";
|
|
13
|
+
toggleEl.setAttribute("aria-checked", ariaChecked);
|
|
12
14
|
});
|
|
13
15
|
});
|
|
14
16
|
}
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
{% from '@bonniernews/dn-design-system-web/
|
|
1
|
+
{% from '@bonniernews/dn-design-system-web/components/icon-sprite/icon-sprite.njk' import IconUse %}
|
|
2
2
|
{% from '@bonniernews/dn-design-system-web/components/spinner/spinner.njk' import Spinner %}
|
|
3
3
|
{% from '@bonniernews/dn-design-system-web/njk-helpers/attributes.njk' import getAttributes %}
|
|
4
4
|
|
|
5
5
|
{% macro ButtonToggle(params) %}
|
|
6
|
-
{
|
|
7
|
-
{
|
|
8
|
-
{
|
|
9
|
-
{
|
|
6
|
+
{%- set componentClassName = "ds-btn-toggle" %}
|
|
7
|
+
{%- set classNamePrefix = componentClassName + "--" %}
|
|
8
|
+
{%- set additionalClasses = [] %}
|
|
9
|
+
{%- set attributes = getAttributes(params.attributes) %}
|
|
10
|
+
{%- set ariaLabel = 'aria-label="' + params.text + '"' if not params.attributes["aria-label"] else "" %}
|
|
10
11
|
|
|
11
|
-
{
|
|
12
|
-
{% set
|
|
12
|
+
{%- if params.selected %}
|
|
13
|
+
{% set additionalClasses = (additionalClasses.push(classNamePrefix + "selected"), additionalClasses) %}
|
|
13
14
|
{% endif %}
|
|
14
15
|
|
|
15
|
-
{
|
|
16
|
-
{
|
|
16
|
+
{%- set buttonVariant = params.variant | default("brand") %}
|
|
17
|
+
{%- set additionalClasses = (additionalClasses.push(classNamePrefix + buttonVariant), additionalClasses) %}
|
|
17
18
|
|
|
18
|
-
{
|
|
19
|
-
{
|
|
20
|
-
{
|
|
19
|
+
{%- set spinnerMap = { primary: "secondary", brand: "onBrand", business: "onBusiness" } %}
|
|
20
|
+
{%- set spinnerVariant = spinnerMap[buttonVariant] | default("primary") %}
|
|
21
|
+
{%- set spinnerSize = "xsmall" if params.size == "xsmall" else "small" %}
|
|
21
22
|
|
|
22
|
-
{
|
|
23
|
+
{%- set loadingHtml %}
|
|
23
24
|
{{ Spinner({ size: spinnerSize, variant: spinnerVariant, forcePx: params.forcePx }) }}
|
|
24
25
|
{% endset %}
|
|
25
26
|
|
|
26
|
-
{
|
|
27
|
-
{% set
|
|
27
|
+
{%- if params.loading %}
|
|
28
|
+
{% set additionalClasses = (additionalClasses.push("ds-loading"), additionalClasses) %}
|
|
28
29
|
{% endif %}
|
|
29
30
|
|
|
30
|
-
{
|
|
31
|
-
{% set
|
|
31
|
+
{%- if params.forcePx %}
|
|
32
|
+
{% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
|
|
32
33
|
{% endif %}
|
|
33
34
|
|
|
34
|
-
{
|
|
35
|
-
{% set
|
|
35
|
+
{%- if params.size and params.size != "default" %}
|
|
36
|
+
{% set additionalClasses = (additionalClasses.push(classNamePrefix + params.size), additionalClasses) %}
|
|
36
37
|
{% endif %}
|
|
37
38
|
|
|
38
|
-
{
|
|
39
|
-
{% set
|
|
39
|
+
{%- if params.fullWidth %}
|
|
40
|
+
{% set additionalClasses = (additionalClasses.push(classNamePrefix + "full-width"), additionalClasses) %}
|
|
40
41
|
{% endif %}
|
|
41
42
|
|
|
42
|
-
{
|
|
43
|
-
{% set
|
|
43
|
+
{%- if params.condensed %}
|
|
44
|
+
{% set additionalClasses = (additionalClasses.push(classNamePrefix + "condensed"), additionalClasses) %}
|
|
44
45
|
{% endif %}
|
|
45
46
|
|
|
46
|
-
{
|
|
47
|
-
{% set
|
|
47
|
+
{%- if params.mobile and params.mobile.fullWidth %}
|
|
48
|
+
{% set additionalClasses = (additionalClasses.push(classNamePrefix + "mobile-full-width"), additionalClasses) %}
|
|
48
49
|
{% endif %}
|
|
49
50
|
|
|
50
|
-
{
|
|
51
|
-
{% set
|
|
51
|
+
{%- if params.classNames %}
|
|
52
|
+
{% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
|
|
52
53
|
{% endif%}
|
|
53
54
|
|
|
54
|
-
{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
</div>
|
|
55
|
+
{%- set classes = componentClassName + " " + additionalClasses | join(" ") %}
|
|
56
|
+
<button type="button" role="switch" {{ ariaLabel | safe }} aria-checked="{{ "true" if params.selected else "false" }}" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe }}>
|
|
57
|
+
<span class="{{ componentClassName + '__inner' }}" aria-hidden="true">
|
|
58
|
+
<span class="{{ componentClassName + '__off' }}"><span>{{ params.text }}</span></span>
|
|
59
|
+
<span class="{{ componentClassName + '__on' }}">
|
|
60
|
+
{{ IconUse({ icon: "check" }) }} <span>{{ params.selectedText }}</span>
|
|
61
|
+
</span>
|
|
62
62
|
{{ loadingHtml | safe }}
|
|
63
|
-
</
|
|
63
|
+
</span>
|
|
64
64
|
</button>
|
|
65
65
|
{% endmacro %}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@use "sass:math";
|
|
2
2
|
@use "../../foundations/helpers/forward.helpers.scss" as *;
|
|
3
|
-
@use "
|
|
3
|
+
@use "../icon-sprite/icon-sprite.scss";
|
|
4
4
|
@use "../spinner/spinner.scss" as *;
|
|
5
5
|
|
|
6
6
|
$ds-btn-toggle-outlined__border-width: ds-metrics-border-width(x1);
|
|
@@ -20,6 +20,10 @@ $ds-btn-toggle__icon-size-xsmall: 20px;
|
|
|
20
20
|
padding: 0;
|
|
21
21
|
position: relative;
|
|
22
22
|
|
|
23
|
+
span {
|
|
24
|
+
pointer-events: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
23
27
|
&:not(.ds-btn-toggle--condensed) {
|
|
24
28
|
min-width: $ds-btn-toggle__min-clickable-area;
|
|
25
29
|
min-height: $ds-btn-toggle__min-clickable-area;
|
|
@@ -81,6 +85,7 @@ $ds-btn-toggle__icon-size-xsmall: 20px;
|
|
|
81
85
|
&,
|
|
82
86
|
& .ds-btn-toggle__inner {
|
|
83
87
|
width: 100%;
|
|
88
|
+
box-sizing: border-box;
|
|
84
89
|
}
|
|
85
90
|
}
|
|
86
91
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% from '@bonniernews/dn-design-system-web/njk-helpers/attributes.njk' import getAttributes %}
|
|
2
|
-
{% from '@bonniernews/dn-design-system-web/
|
|
2
|
+
{% from '@bonniernews/dn-design-system-web/components/icon-sprite/icon-sprite.njk' import IconUse %}
|
|
3
3
|
{% from '@bonniernews/dn-design-system-web/components/button-toggle/button-toggle.njk' import ButtonToggle %}
|
|
4
4
|
|
|
5
5
|
{% macro Byline(params) %}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
</div>
|
|
23
23
|
{% endcall %}
|
|
24
24
|
{% if visualVariant == 'icon' %}
|
|
25
|
-
<span class="{{ componentClassName + '__icon-right'}}">{{-
|
|
25
|
+
<span class="{{ componentClassName + '__icon-right'}}">{{- IconUse({ icon: 'arrow_forward' }) | safe -}}</span>
|
|
26
26
|
{% endif %}
|
|
27
27
|
{% if visualVariant == 'button' and params.followable %}
|
|
28
28
|
{{ ButtonToggle({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
@use "../../foundations/helpers/forward.helpers.scss" as *;
|
|
2
|
-
@use "../../
|
|
2
|
+
@use "../../components/icon-sprite/icon-sprite.scss";
|
|
3
3
|
@use "../../components/button-toggle/button-toggle.scss" as *;
|
|
4
4
|
|
|
5
5
|
$ds-byline__icon-size: 24px;
|
|
@@ -33,7 +33,6 @@ $ds-byline__image-size: 44px;
|
|
|
33
33
|
.ds-byline__inner {
|
|
34
34
|
box-sizing: border-box;
|
|
35
35
|
border-radius: 0;
|
|
36
|
-
transition: background-color 50ms ease-out;
|
|
37
36
|
margin: 0;
|
|
38
37
|
display: flex;
|
|
39
38
|
align-items: center;
|
|
@@ -51,7 +50,6 @@ $ds-byline__image-size: 44px;
|
|
|
51
50
|
left: 0;
|
|
52
51
|
bottom: 0;
|
|
53
52
|
right: 0;
|
|
54
|
-
transition: background-color 500ms ease;
|
|
55
53
|
}
|
|
56
54
|
|
|
57
55
|
.ds-icon {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
{% from '@bonniernews/dn-design-system-web/
|
|
1
|
+
{% from '@bonniernews/dn-design-system-web/components/icon-sprite/icon-sprite.njk' import IconUse %}
|
|
2
2
|
{% from '@bonniernews/dn-design-system-web/assets/form-field/form-field.njk' import FormField %}
|
|
3
3
|
{% from '@bonniernews/dn-design-system-web/njk-helpers/attributes.njk' import getAttributes %}
|
|
4
4
|
|
|
5
5
|
{# Internal helper macro - not intended for use outside of this file #}
|
|
6
6
|
{% macro CheckboxIcons(componentClassName) %}
|
|
7
7
|
<span class="{{ componentClassName + '__icon'}}">
|
|
8
|
-
{{
|
|
9
|
-
{{
|
|
8
|
+
{{ IconUse({ icon: "check_box_outline_blank" }) }}
|
|
9
|
+
{{ IconUse({ icon: "check_box-filled" }) }}
|
|
10
10
|
</span>
|
|
11
11
|
{% endmacro %}
|
|
12
12
|
|