@bonniernews/dn-design-system-web 3.0.0-alpha.9 → 3.0.0-alpha.90

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.
Files changed (128) hide show
  1. package/CHANGELOG.md +720 -0
  2. package/assets/article-image/article-image.njk +11 -10
  3. package/assets/article-image/article-image.scss +1 -15
  4. package/assets/form-field/form-field.njk +2 -2
  5. package/assets/form-field/form-field.scss +2 -6
  6. package/assets/teaser/dot-or-grade.njk +7 -0
  7. package/assets/teaser/teaser.scss +96 -0
  8. package/components/article-body-image/README.md +2 -2
  9. package/components/article-body-image/article-body-image.njk +1 -5
  10. package/components/article-top-image/README.md +2 -2
  11. package/components/article-top-image/article-top-image.njk +1 -5
  12. package/components/article-top-image/article-top-image.scss +1 -1
  13. package/components/badge/badge.scss +1 -5
  14. package/components/buddy-menu/buddy-menu.scss +1 -8
  15. package/components/button/button.njk +38 -43
  16. package/components/button/button.scss +6 -1
  17. package/components/button-toggle/button-toggle.js +2 -0
  18. package/components/button-toggle/button-toggle.njk +36 -36
  19. package/components/button-toggle/button-toggle.scss +6 -1
  20. package/components/byline/byline.njk +2 -2
  21. package/components/byline/byline.scss +1 -3
  22. package/components/checkbox/checkbox.njk +3 -3
  23. package/components/checkbox/checkbox.scss +8 -9
  24. package/components/disclaimer/disclaimer.njk +2 -2
  25. package/components/disclaimer/disclaimer.scss +23 -10
  26. package/components/factbox/README.md +2 -2
  27. package/components/factbox/factbox.njk +12 -24
  28. package/components/factbox/factbox.scss +16 -51
  29. package/components/footer/footer.scss +2 -8
  30. package/components/icon-button/README.md +2 -1
  31. package/components/icon-button/icon-button.njk +4 -4
  32. package/components/icon-button/icon-button.scss +5 -2
  33. package/components/icon-button-toggle/icon-button-toggle.js +2 -0
  34. package/components/icon-button-toggle/icon-button-toggle.njk +28 -36
  35. package/components/icon-button-toggle/icon-button-toggle.scss +5 -2
  36. package/components/icon-sprite/README.md +51 -0
  37. package/components/icon-sprite/icon-sprite.njk +12 -0
  38. package/components/icon-sprite/icon-sprite.scss +12 -0
  39. package/components/icon-with-wrapper/README.md +9 -2
  40. package/components/icon-with-wrapper/icon-with-wrapper.njk +2 -2
  41. package/components/icon-with-wrapper/icon-with-wrapper.scss +2 -1
  42. package/components/image-caption/README.md +38 -0
  43. package/components/image-caption/image-caption.njk +36 -0
  44. package/components/image-caption/image-caption.scss +25 -0
  45. package/components/list-item/list-item.njk +5 -5
  46. package/components/list-item/list-item.scss +1 -3
  47. package/components/pictogram/README.md +39 -0
  48. package/components/pictogram/pictogram.njk +30 -0
  49. package/components/pictogram/pictogram.scss +54 -0
  50. package/components/quote/README.md +1 -2
  51. package/components/quote/quote.njk +6 -8
  52. package/components/quote/quote.scss +1 -14
  53. package/components/radio-button/radio-button.njk +3 -3
  54. package/components/radio-button/radio-button.scss +8 -10
  55. package/components/spinner/spinner.njk +19 -23
  56. package/components/spinner/spinner.scss +4 -1
  57. package/components/teaser-dot/README.md +34 -0
  58. package/components/teaser-dot/teaser-dot.njk +24 -0
  59. package/components/teaser-dot/teaser-dot.scss +39 -0
  60. package/components/teaser-image/README.md +40 -0
  61. package/components/teaser-image/teaser-image.njk +21 -0
  62. package/components/teaser-image/teaser-image.scss +21 -0
  63. package/components/teaser-large/README.md +52 -0
  64. package/components/teaser-large/teaser-large.njk +96 -0
  65. package/components/teaser-large/teaser-large.scss +139 -0
  66. package/components/teaser-onsite/README.md +45 -0
  67. package/components/teaser-onsite/teaser-onsite.njk +45 -0
  68. package/components/teaser-onsite/teaser-onsite.scss +33 -0
  69. package/components/teaser-package/README.md +42 -0
  70. package/components/teaser-package/teaser-package.njk +39 -0
  71. package/components/teaser-package/teaser-package.scss +114 -0
  72. package/components/teaser-right-now/README.md +37 -0
  73. package/components/teaser-right-now/teaser-right-now.njk +29 -0
  74. package/components/teaser-right-now/teaser-right-now.scss +57 -0
  75. package/components/teaser-slideshow/README.md +42 -0
  76. package/components/teaser-slideshow/teaser-slideshow.njk +38 -0
  77. package/components/teaser-slideshow/teaser-slideshow.scss +37 -0
  78. package/components/teaser-split/README-container.md +40 -0
  79. package/components/teaser-split/README.md +49 -0
  80. package/components/teaser-split/teaser-split.njk +93 -0
  81. package/components/teaser-split/teaser-split.scss +85 -0
  82. package/components/teaser-standard/README.md +50 -0
  83. package/components/teaser-standard/teaser-standard.njk +81 -0
  84. package/components/teaser-standard/teaser-standard.scss +38 -0
  85. package/components/teaser-tipsa/README.md +41 -0
  86. package/components/teaser-tipsa/teaser-tipsa.njk +31 -0
  87. package/components/teaser-tipsa/teaser-tipsa.scss +22 -0
  88. package/components/text-button/text-button.njk +34 -37
  89. package/components/text-button/text-button.scss +12 -10
  90. package/components/text-button-toggle/text-button-toggle.js +2 -0
  91. package/components/text-button-toggle/text-button-toggle.njk +30 -33
  92. package/components/text-button-toggle/text-button-toggle.scss +10 -10
  93. package/components/text-input/text-input.scss +3 -8
  94. package/components/video-caption/README.md +1 -1
  95. package/components/video-caption/video-caption.njk +12 -6
  96. package/components/vip-badge/README.md +35 -0
  97. package/components/vip-badge/vip-badge.njk +23 -0
  98. package/components/vip-badge/vip-badge.scss +54 -0
  99. package/foundations/colors.scss +31 -0
  100. package/foundations/helpers/README-links.md +1 -1
  101. package/foundations/helpers/colors.scss +2 -0
  102. package/foundations/helpers/hover.scss +14 -0
  103. package/foundations/helpers/links.scss +15 -7
  104. package/foundations/helpers/typography.scss +22 -2
  105. package/foundations/icons/grade-icon.njk +50 -11
  106. package/foundations/icons/icon.njk +172 -143
  107. package/foundations/icons/sprite.njk +1 -0
  108. package/foundations/icons/sprite.svg +1 -0
  109. package/foundations/icons/svg/download.svg +3 -0
  110. package/foundations/icons/svg/filter_list.svg +3 -0
  111. package/foundations/icons/svg/pause.svg +3 -0
  112. package/foundations/icons/svg/system_update.svg +3 -0
  113. package/foundations/icons/svg/vip.svg +3 -0
  114. package/foundations/typography/fontDefinitions.scss +82 -67
  115. package/foundations/variables/colorsCssVariables.scss +6 -0
  116. package/foundations/variables/colorsDnDarkTokens.scss +7 -1
  117. package/foundations/variables/colorsDnLightTokens.scss +8 -2
  118. package/foundations/variables/spacingLayout.scss +6 -1
  119. package/foundations/variables/spacingLayoutLargeScreen.scss +5 -0
  120. package/foundations/variables/spacingLayoutList.scss +5 -0
  121. package/foundations/variables/typographyTokensList.scss +5 -0
  122. package/foundations/variables/typographyTokensScreenExtraLarge.scss +571 -0
  123. package/foundations/variables/typographyTokensScreenLarge.scss +133 -100
  124. package/foundations/variables/typographyTokensScreenSmall.scss +147 -114
  125. package/package.json +2 -2
  126. package/tokens/colors-css-variables.json +6 -0
  127. package/tokens/spacing-layout-list.json +6 -1
  128. 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
- <figcaption>
22
- {% if params.caption %}
23
- <span aria-hidden="true">{{ params.caption | safe }}</span>
24
- {% endif %}
25
- {% if params.author %}
26
- <span class="ds-article-image__credits">
27
- {%- if params.imageType %}{{ params.imageType | capitalize }}: {% endif %}{{ params.author -}}
28
- </span>
29
- {% endif %}
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/foundations/icons/icon.njk' import Icon %}
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
- {{ Icon({ icon: "info-filled" }) }}
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/spacing.scss" as *;
2
- @use "../../foundations/helpers/metrics.scss" as *;
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: [Disclaimer > Web](https://designsystem.dn.se/?path=/story/components-app-web-article-components-image-bodyimage-web--article-body-image)
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: [Disclaimer > Web](https://designsystem.dn.se/?path=/story/components-app-web-article-components-image-topimage-web--article-top-image)
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 %}
@@ -2,5 +2,5 @@
2
2
  @use "../../assets/article-image/article-image.scss" as *;
3
3
 
4
4
  .ds-article-image--top {
5
- @include ds-spacing-layout($ds-sl-gap-vertical-static-large, padding-bottom);
5
+ @include ds-spacing-layout($ds-sl-gap-vertical-medium, padding-bottom);
6
6
  }
@@ -1,8 +1,4 @@
1
- @use "../../foundations/helpers/metrics.scss" as *;
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/spacing.scss" as *;
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/foundations/icons/icon.njk' import Icon %}
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
- {% set componentClassName = "ds-btn" %}
6
- {% set classNamePrefix = componentClassName + "--" %}
7
- {% set variant = [] %}
8
- {% set text = params.text %}
9
- {% set attributes %}
10
- {% for attribute, value in params.attributes %}
11
- {{attribute}}="{{value}}"
12
- {% endfor %}
13
- {% endset %}
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
- {% set spinnerMap = { primary: "secondary", brand: "onBrand", business: "onBusiness", staticWhiteFilled: "staticBlack", staticWhiteOutlined: "staticWhite" } %}
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
- {% if params.loading %}
26
- {% set variant = (variant.push("ds-loading"), variant) %}
21
+ {%- if params.loading %}
22
+ {% set additionalClasses = (additionalClasses.push("ds-loading"), additionalClasses) %}
27
23
  {% endif %}
28
24
 
29
- {% if params.forcePx %}
30
- {% set variant = (variant.push("ds-force-px"), variant) %}
25
+ {%- if params.forcePx %}
26
+ {% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
31
27
  {% endif %}
32
28
 
33
- {% if params.condensed %}
34
- {% set variant = (variant.push(classNamePrefix + "condensed"), variant) %}
29
+ {%- if params.condensed %}
30
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "condensed"), additionalClasses) %}
35
31
  {% endif %}
36
32
 
37
- {% if params.size and params.size != "default" %}
38
- {% set variant = (variant.push(classNamePrefix + params.size), variant) %}
33
+ {%- if params.size and params.size != "default" %}
34
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + params.size), additionalClasses) %}
39
35
  {% endif %}
40
36
 
41
- {% if params.fullWidth %}
42
- {% set variant = (variant.push(classNamePrefix + "full-width"), variant) %}
37
+ {%- if params.fullWidth %}
38
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "full-width"), additionalClasses) %}
43
39
  {% endif %}
44
40
 
45
- {% if params.mobile and params.mobile.fullWidth %}
46
- {% set variant = (variant.push(classNamePrefix + "mobile-full-width"), variant) %}
41
+ {%- if params.mobile and params.mobile.fullWidth %}
42
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "mobile-full-width"), additionalClasses) %}
47
43
  {% endif %}
48
44
 
49
- {% if params.iconName and params.iconPosition and params.iconPosition != "none" %}
50
- {% set variant = (variant.push(classNamePrefix + "icon" + "-" + params.iconPosition ), variant) %}
51
- {% set iconSvg = Icon({ icon: params.iconName }) %}
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
- {% if params.classNames %}
55
- {% set variant = (variant.push(params.classNames), variant) %}
50
+ {%- if params.classNames %}
51
+ {% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
56
52
  {% endif%}
57
53
 
58
- {% set classes = componentClassName + " " + variant | join(" ") %}
59
-
60
- {% if params.href %}
61
- <a href="{{ params.href | default('#', true) }}" class="{{ classes }}" {{- attributes | safe}}>
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
- </div>
60
+ </span>
66
61
  </a>
67
62
  {% else %}
68
- <button type="{{ params.type | default('button') }}" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe}}>
69
- <div class="{{ componentClassName + '__inner'}}">
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
- </div>
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 "../../foundations/icons/icon.scss" as *;
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/foundations/icons/icon.njk' import Icon %}
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
- {% set componentClassName = "ds-btn-toggle" %}
7
- {% set classNamePrefix = componentClassName + "--" %}
8
- {% set variant = [] %}
9
- {% set attributes = getAttributes(params.attributes) %}
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
- {% if params.selected %}
12
- {% set variant = (variant.push(classNamePrefix + "selected"), variant) %}
12
+ {%- if params.selected %}
13
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "selected"), additionalClasses) %}
13
14
  {% endif %}
14
15
 
15
- {% set buttonVariant = params.variant | default("brand") %}
16
- {% set variant = (variant.push(classNamePrefix + buttonVariant), variant) %}
16
+ {%- set buttonVariant = params.variant | default("brand") %}
17
+ {%- set additionalClasses = (additionalClasses.push(classNamePrefix + buttonVariant), additionalClasses) %}
17
18
 
18
- {% set spinnerMap = { primary: "secondary", brand: "onBrand", business: "onBusiness" } %}
19
- {% set spinnerVariant = spinnerMap[buttonVariant] | default("primary") %}
20
- {% set spinnerSize = "xsmall" if params.size == "xsmall" else "small" %}
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
- {% set loadingHtml %}
23
+ {%- set loadingHtml %}
23
24
  {{ Spinner({ size: spinnerSize, variant: spinnerVariant, forcePx: params.forcePx }) }}
24
25
  {% endset %}
25
26
 
26
- {% if params.loading %}
27
- {% set variant = (variant.push("ds-loading"), variant) %}
27
+ {%- if params.loading %}
28
+ {% set additionalClasses = (additionalClasses.push("ds-loading"), additionalClasses) %}
28
29
  {% endif %}
29
30
 
30
- {% if params.forcePx %}
31
- {% set variant = (variant.push("ds-force-px"), variant) %}
31
+ {%- if params.forcePx %}
32
+ {% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
32
33
  {% endif %}
33
34
 
34
- {% if params.size and params.size != "default" %}
35
- {% set variant = (variant.push(classNamePrefix + params.size), variant) %}
35
+ {%- if params.size and params.size != "default" %}
36
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + params.size), additionalClasses) %}
36
37
  {% endif %}
37
38
 
38
- {% if params.fullWidth %}
39
- {% set variant = (variant.push(classNamePrefix + "full-width"), variant) %}
39
+ {%- if params.fullWidth %}
40
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "full-width"), additionalClasses) %}
40
41
  {% endif %}
41
42
 
42
- {% if params.condensed %}
43
- {% set variant = (variant.push(classNamePrefix + "condensed"), variant) %}
43
+ {%- if params.condensed %}
44
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "condensed"), additionalClasses) %}
44
45
  {% endif %}
45
46
 
46
- {% if params.mobile and params.mobile.fullWidth %}
47
- {% set variant = (variant.push(classNamePrefix + "mobile-full-width"), variant) %}
47
+ {%- if params.mobile and params.mobile.fullWidth %}
48
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "mobile-full-width"), additionalClasses) %}
48
49
  {% endif %}
49
50
 
50
- {% if params.classNames %}
51
- {% set variant = (variant.push(params.classNames), variant) %}
51
+ {%- if params.classNames %}
52
+ {% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
52
53
  {% endif%}
53
54
 
54
- {% set classes = componentClassName + " " + variant | join(" ") %}
55
-
56
- <button type="button" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe}}>
57
- <div class="{{ componentClassName + '__inner'}}">
58
- <div class="{{ componentClassName + '__off'}}"><span>{{ params.text }}</span></div>
59
- <div class="{{ componentClassName + '__on'}}">
60
- {{ Icon({ icon: "check" }) }} <span>{{ params.selectedText }}</span>
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
- </div>
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 "../../foundations/icons/icon.scss" as *;
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/foundations/icons/icon.njk' import Icon %}
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'}}">{{- Icon({ icon: 'arrow_forward' }) | safe -}}</span>
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 "../../foundations/icons/icon.scss" as *;
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/foundations/icons/icon.njk' import Icon %}
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
- {{ Icon({ icon: "check_box_outline_blank" }) }}
9
- {{ Icon({ icon: "check_box-filled" }) }}
8
+ {{ IconUse({ icon: "check_box_outline_blank" }) }}
9
+ {{ IconUse({ icon: "check_box-filled" }) }}
10
10
  </span>
11
11
  {% endmacro %}
12
12