@bonniernews/dn-design-system-web 3.0.0-alpha.7 → 3.0.0-alpha.71

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 (121) hide show
  1. package/CHANGELOG.md +571 -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/teaser.scss +75 -0
  7. package/components/article-body-image/README.md +2 -2
  8. package/components/article-body-image/article-body-image.njk +1 -5
  9. package/components/article-top-image/README.md +2 -2
  10. package/components/article-top-image/article-top-image.njk +1 -5
  11. package/components/article-top-image/article-top-image.scss +1 -1
  12. package/components/badge/badge.scss +1 -5
  13. package/components/buddy-menu/buddy-menu.scss +1 -8
  14. package/components/button/button.njk +38 -43
  15. package/components/button/button.scss +6 -1
  16. package/components/button-toggle/button-toggle.js +2 -0
  17. package/components/button-toggle/button-toggle.njk +36 -36
  18. package/components/button-toggle/button-toggle.scss +6 -1
  19. package/components/byline/byline.njk +2 -2
  20. package/components/byline/byline.scss +1 -3
  21. package/components/checkbox/checkbox.njk +3 -3
  22. package/components/checkbox/checkbox.scss +8 -9
  23. package/components/disclaimer/disclaimer.njk +2 -2
  24. package/components/disclaimer/disclaimer.scss +25 -11
  25. package/components/factbox/README.md +2 -2
  26. package/components/factbox/factbox.njk +9 -11
  27. package/components/factbox/factbox.scss +6 -37
  28. package/components/footer/footer.scss +2 -8
  29. package/components/icon-button/README.md +2 -1
  30. package/components/icon-button/icon-button.njk +4 -4
  31. package/components/icon-button/icon-button.scss +5 -2
  32. package/components/icon-button-toggle/icon-button-toggle.js +2 -0
  33. package/components/icon-button-toggle/icon-button-toggle.njk +28 -36
  34. package/components/icon-button-toggle/icon-button-toggle.scss +5 -2
  35. package/components/icon-sprite/README.md +51 -0
  36. package/components/icon-sprite/icon-sprite.njk +12 -0
  37. package/components/icon-sprite/icon-sprite.scss +12 -0
  38. package/components/icon-with-wrapper/README.md +9 -2
  39. package/components/icon-with-wrapper/icon-with-wrapper.njk +2 -2
  40. package/components/icon-with-wrapper/icon-with-wrapper.scss +2 -1
  41. package/components/image-caption/README.md +38 -0
  42. package/components/image-caption/image-caption.njk +25 -0
  43. package/components/image-caption/image-caption.scss +15 -0
  44. package/components/list-item/list-item.njk +5 -5
  45. package/components/list-item/list-item.scss +1 -3
  46. package/components/pictogram/README.md +39 -0
  47. package/components/pictogram/pictogram.njk +30 -0
  48. package/components/pictogram/pictogram.scss +54 -0
  49. package/components/quote/README.md +1 -2
  50. package/components/quote/quote.njk +6 -8
  51. package/components/quote/quote.scss +1 -14
  52. package/components/radio-button/radio-button.njk +3 -3
  53. package/components/radio-button/radio-button.scss +8 -10
  54. package/components/spinner/spinner.njk +19 -23
  55. package/components/spinner/spinner.scss +4 -1
  56. package/components/teaser-dot/README.md +34 -0
  57. package/components/teaser-dot/teaser-dot.njk +24 -0
  58. package/components/teaser-dot/teaser-dot.scss +39 -0
  59. package/components/teaser-image/README.md +40 -0
  60. package/components/teaser-image/teaser-image.njk +21 -0
  61. package/components/teaser-image/teaser-image.scss +21 -0
  62. package/components/teaser-large/README.md +51 -0
  63. package/components/teaser-large/teaser-large.njk +93 -0
  64. package/components/teaser-large/teaser-large.scss +174 -0
  65. package/components/teaser-onsite/README.md +53 -0
  66. package/components/teaser-onsite/teaser-onsite.njk +45 -0
  67. package/components/teaser-onsite/teaser-onsite.scss +35 -0
  68. package/components/teaser-package/README.md +42 -0
  69. package/components/teaser-package/teaser-package.njk +36 -0
  70. package/components/teaser-package/teaser-package.scss +112 -0
  71. package/components/teaser-right-now/README.md +37 -0
  72. package/components/teaser-right-now/teaser-right-now.njk +28 -0
  73. package/components/teaser-right-now/teaser-right-now.scss +16 -0
  74. package/components/teaser-slideshow/README.md +42 -0
  75. package/components/teaser-slideshow/teaser-slideshow.njk +38 -0
  76. package/components/teaser-slideshow/teaser-slideshow.scss +35 -0
  77. package/components/teaser-split/README-container.md +40 -0
  78. package/components/teaser-split/README.md +48 -0
  79. package/components/teaser-split/teaser-split.njk +93 -0
  80. package/components/teaser-split/teaser-split.scss +77 -0
  81. package/components/teaser-standard/README.md +49 -0
  82. package/components/teaser-standard/teaser-standard.njk +81 -0
  83. package/components/teaser-standard/teaser-standard.scss +38 -0
  84. package/components/teaser-tipsa/README.md +41 -0
  85. package/components/teaser-tipsa/teaser-tipsa.njk +31 -0
  86. package/components/teaser-tipsa/teaser-tipsa.scss +23 -0
  87. package/components/text-button/text-button.njk +34 -37
  88. package/components/text-button/text-button.scss +12 -10
  89. package/components/text-button-toggle/text-button-toggle.js +2 -0
  90. package/components/text-button-toggle/text-button-toggle.njk +30 -33
  91. package/components/text-button-toggle/text-button-toggle.scss +10 -10
  92. package/components/text-input/text-input.scss +3 -8
  93. package/components/video-caption/README.md +1 -1
  94. package/components/video-caption/video-caption.njk +12 -6
  95. package/components/vip-badge/README.md +35 -0
  96. package/components/vip-badge/vip-badge.njk +23 -0
  97. package/components/vip-badge/vip-badge.scss +54 -0
  98. package/foundations/colors.scss +31 -0
  99. package/foundations/helpers/README-links.md +1 -1
  100. package/foundations/helpers/colors.scss +2 -0
  101. package/foundations/helpers/links.scss +14 -6
  102. package/foundations/icons/icon.njk +167 -143
  103. package/foundations/icons/sprite.njk +1 -0
  104. package/foundations/icons/sprite.svg +1 -0
  105. package/foundations/icons/svg/download.svg +3 -0
  106. package/foundations/icons/svg/filter_list.svg +3 -0
  107. package/foundations/icons/svg/pause.svg +3 -0
  108. package/foundations/icons/svg/vip.svg +3 -0
  109. package/foundations/typography/fontDefinitions.scss +82 -67
  110. package/foundations/variables/colorsCssVariables.scss +5 -0
  111. package/foundations/variables/colorsDnDarkTokens.scss +6 -1
  112. package/foundations/variables/colorsDnLightTokens.scss +7 -2
  113. package/foundations/variables/spacingLayout.scss +6 -1
  114. package/foundations/variables/spacingLayoutLargeScreen.scss +5 -0
  115. package/foundations/variables/spacingLayoutList.scss +5 -0
  116. package/foundations/variables/typographyTokensScreenLarge.scss +87 -87
  117. package/foundations/variables/typographyTokensScreenSmall.scss +114 -114
  118. package/package.json +2 -2
  119. package/tokens/colors-css-variables.json +5 -0
  120. package/tokens/spacing-layout-list.json +6 -1
  121. package/foundations/icons/icon-sprite.svg +0 -2
@@ -13,7 +13,7 @@
13
13
  |vignetteHtml | HTML String | no | | | |
14
14
  |titleHtml | HTML String | yes | | | |
15
15
  |bodyHtml | HTML String | yes | | | |
16
- |variant | String | yes | standard, culture, sport, economy | standard | Design variant |
16
+ |theme | String | no | default, kultur, nyheter, sport, ekonomi | | Design theme |
17
17
  |grade | String | no | | | zero, one, two, three, four, five, none |
18
18
  |attributes | Object | no | | | Ex. { target: "_blank", "data-test": "lorem ipsum" } |
19
19
  |classNames | String | no | | | Ex. "my-special-class" |
@@ -33,7 +33,7 @@ These are copy paste friendly examples to quickliy get started using a component
33
33
  vignetteHtml: "",
34
34
  titleHtml: "Drama",
35
35
  bodyHtml: "<p>”Irrational man”<br />Regi och manus: Woody Allen<br />I rollerna: Joaquin Phoenix, Emma Stone, Parker Posey m fl.<br />Längd: 1 tim 35 min (från 11 år.)</p>",
36
- variant: "culture",
36
+ theme: "kultur",
37
37
  grade: "two",
38
38
  forcePx: true
39
39
  })}}
@@ -5,31 +5,29 @@
5
5
  {% macro Factbox(params) %}
6
6
  {% set componentClassName = "ds-factbox" %}
7
7
  {% set classNamePrefix = componentClassName + "--" %}
8
- {% set variant = [] %}
8
+ {% set additionalClasses = [] %}
9
9
  {% set grades = ["zero", "one", "two", "three", "four", "five"] %}
10
10
  {% set gradesNumeric = ["0", "1", "2", "3", "4", "5"] %}
11
11
  {% set activeGrade = params.grade | default("") | string %}
12
12
  {% set attributes = getAttributes(params.attributes) %}
13
13
 
14
- {% if params.variant %}
15
- {% set variant = (variant.push(classNamePrefix + params.variant), variant) %}
16
- {% else %}
17
- {% set variant = (variant.push(classNamePrefix + "standard"), variant) %}
14
+ {% if params.theme %}
15
+ {% set additionalClasses = (additionalClasses.push('ds-theme--' + params.theme), additionalClasses) %}
18
16
  {% endif %}
19
17
 
20
18
  {% if params.forcePx %}
21
- {% set variant = (variant.push("ds-force-px"), variant) %}
19
+ {% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
22
20
  {% endif %}
23
21
 
24
22
  {% if params.forceExpand %}
25
- {% set variant = (variant.push(classNamePrefix + "expanded"), variant) %}
23
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "expanded"), additionalClasses) %}
26
24
  {% endif %}
27
25
 
28
26
  {% if params.classNames %}
29
- {% set variant = (variant.push(params.classNames), variant) %}
27
+ {% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
30
28
  {% endif%}
31
29
 
32
- {% set classes = componentClassName + " " + variant | join(" ") %}
30
+ {% set classes = componentClassName + " " + additionalClasses | join(" ") %}
33
31
 
34
32
  <div class="{{ classes }}" {{- attributes | safe }}>
35
33
  <div class="{{ componentClassName + '__inner'}}">
@@ -57,7 +55,7 @@
57
55
  iconPosition: 'right',
58
56
  iconName: 'expand_more',
59
57
  classNames: 'ds-factbox__expand-more',
60
- fullWidth: true,
58
+ mobile: { fullWidth: true },
61
59
  forcePx: params.forcePx,
62
60
  condensed: true
63
61
  })}}
@@ -68,7 +66,7 @@
68
66
  iconPosition: 'right',
69
67
  iconName: 'expand_less',
70
68
  classNames: 'ds-factbox__expand-less',
71
- fullWidth: true,
69
+ mobile: { fullWidth: true },
72
70
  forcePx: params.forcePx,
73
71
  condensed: true
74
72
  })}}
@@ -1,11 +1,12 @@
1
1
  @use "../../foundations/helpers/forward.helpers.scss" as *;
2
2
  @use "../button/button.scss" as *;
3
3
 
4
- $ds-factbox__grade-size: 40px + (ds-metrics-border-width(x2) * 2);
4
+ $ds-factbox__grade-size: 40px;
5
5
  $ds-factbox__show-more-fade-height: 48px;
6
6
  $ds-factbox__padding: ds-spacing-component($ds-sc-x4);
7
7
  /* stylelint-disable-next-line */
8
- $ds-factbox__padding-left: $ds-factbox__padding - ds-metrics-border-width(x2);
8
+ $ds-factbox-border-width: 4px;
9
+ $ds-factbox__padding-left: $ds-factbox__padding - $ds-factbox-border-width;
9
10
  $ds-factbox__max-height: 500px; // includes top/bottom spacing
10
11
 
11
12
  .ds-factbox {
@@ -18,7 +19,7 @@ $ds-factbox__max-height: 500px; // includes top/bottom spacing
18
19
 
19
20
  .ds-factbox__inner {
20
21
  border-top: ds-metrics-border-width(x1) solid $ds-color-border-primary;
21
- border-left: ds-metrics-border-width(x2) solid $ds-color-component-brand;
22
+ border-left: $ds-factbox-border-width solid $ds-theme-color;
22
23
  max-height: ds-px-to-rem($ds-factbox__max-height);
23
24
  overflow: hidden;
24
25
  position: relative;
@@ -52,6 +53,7 @@ $ds-factbox__max-height: 500px; // includes top/bottom spacing
52
53
  a {
53
54
  @include ds-link($ds-link-article-body);
54
55
  }
56
+ b,
55
57
  strong {
56
58
  @include ds-typography($ds-typography-functional-body02semibold);
57
59
  @at-root .ds-force-px#{&} {
@@ -71,7 +73,7 @@ $ds-factbox__max-height: 500px; // includes top/bottom spacing
71
73
  }
72
74
  }
73
75
  .ds-factbox__vignette {
74
- color: $ds-color-component-brand;
76
+ color: $ds-theme-color;
75
77
  margin-right: ds-spacing-component($ds-sc-x1);
76
78
  }
77
79
  .ds-factbox__grade {
@@ -138,37 +140,4 @@ $ds-factbox__max-height: 500px; // includes top/bottom spacing
138
140
  }
139
141
  }
140
142
  }
141
-
142
- &--culture {
143
- .ds-factbox__inner {
144
- border-left-color: $ds-color-static-kultur;
145
- }
146
- .ds-factbox__vignette {
147
- color: $ds-color-static-kultur;
148
- }
149
- }
150
- &--sport {
151
- .ds-factbox__inner {
152
- border-left-color: $ds-color-static-sport;
153
- }
154
- .ds-factbox__vignette {
155
- color: $ds-color-static-sport;
156
- }
157
- }
158
- &--economy {
159
- .ds-factbox__inner {
160
- border-left-color: $ds-color-static-economy;
161
- }
162
- .ds-factbox__vignette {
163
- color: $ds-color-static-economy;
164
- }
165
- }
166
- &--sthlm {
167
- .ds-factbox__inner {
168
- border-left-color: $ds-color-static-sthlm;
169
- }
170
- .ds-factbox__vignette {
171
- color: $ds-color-static-sthlm;
172
- }
173
- }
174
143
  }
@@ -1,10 +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 *;
1
+ @use "../../foundations/helpers/forward.helpers.scss" as *;
8
2
 
9
3
  $ds-footer-row-gap-spacing-token: $ds-sc-x8;
10
4
  $ds-footer-row-padding-spacing-token: $ds-sc-x4;
@@ -133,7 +127,7 @@ $ds-footer-column-gap: ds-spacing-component($ds-sc-x8) * 2; // @todo change to t
133
127
  margin-top: ds-spacing-component($ds-footer-row-gap-spacing-token);
134
128
 
135
129
  a {
136
- @include ds-link();
130
+ @include ds-link($ds-link-list);
137
131
  margin: ds-spacing-component($ds-sc-x4 $ds-sc-x4 0 0);
138
132
  display: inline-block;
139
133
 
@@ -32,7 +32,8 @@ These are copy paste friendly examples to quickliy get started using a component
32
32
  {{ IconButton({
33
33
  variant: 'outlined',
34
34
  size: 'default',
35
- iconName: 'home-filled'
35
+ iconName: 'arrow_forward',
36
+ attributes: { 'aria-label': 'Nästa' }
36
37
  })}}
37
38
  ```
38
39
 
@@ -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
  {% from '@bonniernews/dn-design-system-web/foundations/a11y/visually-hidden.njk' import VisuallyHidden %}
3
3
  {% from '@bonniernews/dn-design-system-web/components/spinner/spinner.njk' import Spinner %}
4
4
 
@@ -27,7 +27,7 @@
27
27
  {% endif %}
28
28
 
29
29
  {% if params.iconName %}
30
- {% set iconSvg = Icon({ icon: params.iconName }) %}
30
+ {% set iconSvg = IconUse({ icon: params.iconName, attributes: { "aria-hidden": "true" } }) %}
31
31
  {% endif %}
32
32
 
33
33
  {% set loadingHtml %}
@@ -51,13 +51,13 @@
51
51
  {% if params.href %}
52
52
  <a href="{{ params.href | default('#', true) }}" class="{{ classes }}" {{- attributes | safe }}>
53
53
  {{- visuallyHidden | safe if visuallyHidden -}}
54
- <span class="{{ componentClassName + '__inner'}}">{{- iconSvg | safe if iconSvg -}}</span>
54
+ <span class="{{ componentClassName + '__inner' }}">{{- iconSvg | safe if iconSvg -}}</span>
55
55
  {{ loadingHtml | safe }}
56
56
  </a>
57
57
  {% else %}
58
58
  <button type="button" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe }}>
59
59
  {{- visuallyHidden | safe if visuallyHidden -}}
60
- <span class="{{ componentClassName + '__inner'}}">{{- iconSvg | safe if iconSvg -}}</span>
60
+ <span class="{{ componentClassName + '__inner' }}">{{- iconSvg | safe if iconSvg -}}</span>
61
61
  {{ loadingHtml | safe }}
62
62
  </button>
63
63
  {% endif %}
@@ -1,5 +1,5 @@
1
1
  @use "../../foundations/helpers/forward.helpers.scss" as *;
2
- @use "../../foundations/icons/icon.scss" as *;
2
+ @use "../icon-sprite/icon-sprite.scss";
3
3
  @use "../spinner/spinner.scss" as *;
4
4
 
5
5
  $ds-icon-btn__border-radius: 50%;
@@ -19,11 +19,14 @@ $ds-btn-outlined__border-width: ds-metrics-border-width(x1);
19
19
  padding: 0;
20
20
  position: relative;
21
21
 
22
+ span {
23
+ pointer-events: none;
24
+ }
25
+
22
26
  .ds-icon-btn__inner {
23
27
  box-sizing: border-box;
24
28
  border-radius: $ds-icon-btn__border-radius;
25
29
  border: $ds-btn-outlined__border-width solid;
26
- transition: background-color 50ms ease-out;
27
30
  margin: 0;
28
31
  display: inline-flex;
29
32
  align-items: center;
@@ -9,6 +9,8 @@ function dsIconButtonToggle(toggleElements = []) {
9
9
  toggleEl.addEventListener("click", () => {
10
10
  if (toggleEl.classList.contains("ds-icon-btn-toggle--disabled")) return;
11
11
  toggleEl.classList.toggle("ds-icon-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,63 +1,55 @@
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/foundations/a11y/visually-hidden.njk' import VisuallyHidden %}
3
3
  {% from '@bonniernews/dn-design-system-web/components/spinner/spinner.njk' import Spinner %}
4
+ {% from '@bonniernews/dn-design-system-web/njk-helpers/attributes.njk' import getAttributes %}
4
5
 
5
6
  {% macro IconButtonToggle(params) %}
6
- {% set componentClassName = "ds-icon-btn-toggle" %}
7
- {% set classNamePrefix = componentClassName + "--" %}
8
- {% set variant = [] %}
9
- {% set attributes %}
10
- {% for attribute, value in params.attributes %}
11
- {{attribute}}="{{value}}"
12
- {% endfor %}
13
- {% endset %}
7
+ {%- set componentClassName = "ds-icon-btn-toggle" %}
8
+ {%- set classNamePrefix = componentClassName + "--" %}
9
+ {%- set additionalClasses = [] %}
10
+ {%- set attributes = getAttributes(params.attributes) %}
14
11
 
15
- {% if params.selected %}
16
- {% set variant = (variant.push(classNamePrefix + "selected"), variant) %}
12
+ {%- if params.selected %}
13
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "selected"), additionalClasses) %}
17
14
  {% endif %}
18
15
 
19
- {% if params.forcePx %}
20
- {% set variant = (variant.push("ds-force-px"), variant) %}
16
+ {%- if params.forcePx %}
17
+ {% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
21
18
  {% endif %}
22
19
 
23
- {% if params.variant %}
24
- {% set variant = (variant.push(classNamePrefix + params.variant), variant) %}
20
+ {%- if params.variant %}
21
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + params.variant), additionalClasses) %}
25
22
  {% else %}
26
- {% set variant = (variant.push(classNamePrefix + "outlined"), variant) %}
23
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "outlined"), additionalClasses) %}
27
24
  {% endif %}
28
25
 
29
- {% if params.size and params.size != "default" %}
30
- {% set variant = (variant.push(classNamePrefix + params.size), variant) %}
26
+ {%- if params.size and params.size != "default" %}
27
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + params.size), additionalClasses) %}
31
28
  {% endif %}
32
29
 
33
- {% set loadingHtml %}
34
- {{ Spinner({ size: "small", variant: "primary", forcePx: params.forcePx }) }}
30
+ {%- set loadingHtml %}
31
+ {{ Spinner({ size: "small", additionalClasses: "primary", forcePx: params.forcePx }) }}
35
32
  {% endset %}
36
33
 
37
- {% if params.loading %}
38
- {% set variant = (variant.push("ds-loading"), variant) %}
34
+ {%- if params.loading %}
35
+ {% set additionalClasses = (additionalClasses.push("ds-loading"), additionalClasses) %}
39
36
  {% endif %}
40
37
 
41
- {% if params.a11y and params.a11y.visuallyHidden %}
38
+ {%- if params.a11y and params.a11y.visuallyHidden %}
42
39
  {% set visuallyHidden = VisuallyHidden({ text: params.a11y.visuallyHidden }) %}
43
40
  {% endif %}
44
41
 
45
- {% if params.classNames %}
46
- {% set variant = (variant.push(params.classNames), variant) %}
42
+ {%- if params.classNames %}
43
+ {% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
47
44
  {% endif%}
48
45
 
49
- {% set classes = componentClassName + " " + variant | join(" ") %}
50
-
51
- <button type="button" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe }}>
46
+ {%- set classes = componentClassName + " " + additionalClasses | join(" ") %}
47
+ <button type="button" role="switch" aria-checked="{{ "true" if params.selected else "false" }}" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe }}>
52
48
  {{- visuallyHidden | safe if visuallyHidden -}}
53
- <div class="{{ componentClassName + '__inner'}}">
54
- <div class="{{ componentClassName + '__off'}}">
55
- {{ Icon({ icon: params.iconName }) }}
56
- </div>
57
- <div class="{{ componentClassName + '__on'}}">
58
- {{ Icon({ icon: params.selectedIconName }) }}
59
- </div>
49
+ <span class="{{ componentClassName + '__inner' }}" aria-hidden="true">
50
+ <span class="{{ componentClassName + '__off' }}">{{ IconUse({ icon: params.iconName }) }}</span>
51
+ <span class="{{ componentClassName + '__on' }}">{{ IconUse({ icon: params.selectedIconName }) }}</span>
60
52
  {{ loadingHtml | safe }}
61
- </div>
53
+ </span>
62
54
  </button>
63
55
  {% endmacro %}
@@ -1,5 +1,5 @@
1
1
  @use "../../foundations/helpers/forward.helpers.scss" as *;
2
- @use "../../foundations/icons/icon.scss" as *;
2
+ @use "../icon-sprite/icon-sprite.scss";
3
3
  @use "../spinner/spinner.scss" as *;
4
4
 
5
5
  $ds-icon-btn-toggle__border-radius: 50%;
@@ -19,11 +19,14 @@ $ds-btn-toggle-outlined__border-width: ds-metrics-border-width(x1);
19
19
  padding: 0;
20
20
  position: relative;
21
21
 
22
+ span {
23
+ pointer-events: none;
24
+ }
25
+
22
26
  .ds-icon-btn-toggle__inner {
23
27
  box-sizing: border-box;
24
28
  border-radius: $ds-icon-btn-toggle__border-radius;
25
29
  border: $ds-btn-toggle-outlined__border-width solid;
26
- transition: background-color 50ms ease-out;
27
30
  margin: 0;
28
31
  display: inline-flex;
29
32
  align-items: center;
@@ -0,0 +1,51 @@
1
+ - GitHub: [BonnierNews/dn-design-system/../web/src/components/icon-sprite](https://github.com/BonnierNews/dn-design-system/tree/main/web/src/components/icon-sprite)
2
+ - Storybook: [Icon > Web](https://designsystem.dn.se/?path=/story/foundations-icon-web--all)
3
+
4
+ ----
5
+ # Icons
6
+
7
+ There are three ways to use icons from DS:
8
+ * Use Icon from sprite: `IconUse({})`, this is the **recomended** way since this reduces the html output.
9
+ * Use Icon with wrapper: `IconWithWrapper({})`, the component itself uses the icons from the sprite but wraps it with a div and takes properties like size and color
10
+ * Use Icon from foundations: `Icon({})`, only use this if you need an inline icon, this will output the entire svg wherever it is used.
11
+
12
+
13
+ # Icon Sprite
14
+
15
+ ## Parameters
16
+
17
+ |parameter | type | required | options | default | description |
18
+ |:--- | :--- | :--- | :--- | :--- | :--- |
19
+ |icon | String | yes | add, arrow_back, arrow_forward etc | | For all available icons see: https://designsystem.dn.se/?path=/story/foundations-icon-web--all |
20
+ |classNames | String | no | | | Ex. "my-special-class" |
21
+ |attributes | Object | no | | | Ex. { "data-test": "lorem ipsum" } |
22
+ |~forcePx~ | | | | | Not supported |
23
+
24
+ ## Minimum requirement example
25
+
26
+ ### Nunjucks
27
+
28
+ These are copy paste friendly examples to quickliy get started using a component.
29
+
30
+ ```html
31
+ {% from '@bonniernews/dn-design-system-web/components/icon-sprite/icon-sprite.njk' import IconUse %}
32
+
33
+ {{ IconUse({
34
+ icon: 'arrow_back',
35
+ classNames: 'my-special-class',
36
+ attributes: { width: '16px' }
37
+ }) | safe }}
38
+ ```
39
+
40
+ ### SCSS
41
+ ```scss
42
+ @use "@bonniernews/dn-design-system-web/components/icon-sprite/icon-sprite";
43
+ ```
44
+
45
+ ℹ️ The sprite has to be included **somewhere** on the rendered page
46
+
47
+ ```html
48
+ {% from '@bonniernews/dn-design-system-web/components/icon-sprite/icon-sprite.njk' import IconSprite %}
49
+
50
+ {{ IconSprite() | safe }}
51
+ ```
@@ -0,0 +1,12 @@
1
+ {% from '@bonniernews/dn-design-system-web/njk-helpers/attributes.njk' import getAttributes %}
2
+
3
+ {% macro IconUse(params) %}
4
+ {%- set attributes = getAttributes(params.attributes) %}
5
+ <i class="ds-icon ds-icon--sprite ds-icon--{{ params.icon }} {{ params.classNames }}" {{- attributes | safe }}>
6
+ <svg><use xlink:href="#ds-{{ params.icon }}"></use></svg>
7
+ </i>
8
+ {% endmacro %}
9
+
10
+ {% macro IconSprite() %}
11
+ {% include "@bonniernews/dn-design-system-web/foundations/icons/sprite.njk" %}
12
+ {% endmacro %}
@@ -0,0 +1,12 @@
1
+ @use "../../foundations/icons/icon.scss" as *;
2
+
3
+ .ds-icon--sprite {
4
+ display: block;
5
+ width: 100%;
6
+ height: 100%;
7
+
8
+ svg {
9
+ width: 100%;
10
+ height: 100%;
11
+ }
12
+ }
@@ -44,7 +44,14 @@ These are copy paste friendly examples to quickliy get started using a component
44
44
 
45
45
  These are copy paste friendly examples to quickliy get started using a component.
46
46
 
47
- ℹ️ Note that the only available parameter for icon without wrapper is `icon`
47
+ ## Parameters
48
+
49
+ |parameter | type | required | options | default | description |
50
+ |:--- | :--- | :--- | :--- | :--- | :--- |
51
+ |icon | String | yes | add, arrow_back, arrow_forward etc | | For all available icons see: https://designsystem.dn.se/?path=/story/foundations-icon-web--all |
52
+ |classNames | String | no | | | Ex. "my-special-class" |
53
+ |attributes | Object | no | | | Ex. { "data-test": "lorem ipsum" } |
54
+ |~forcePx~ | | | | | Not supported |
48
55
 
49
56
  ```html
50
57
  {% from '@bonniernews/dn-design-system-web/foundations/icons/icon.njk' import Icon %}
@@ -55,4 +62,4 @@ These are copy paste friendly examples to quickliy get started using a component
55
62
  ### SCSS
56
63
  ```scss
57
64
  @use "@bonniernews/dn-design-system-web/foundations/icons/icon";
58
- ```
65
+ ```
@@ -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
 
3
3
  {% macro IconWithWrapper(params) %}
4
4
  {% set componentClassName = "ds-icon-wrapper" %}
@@ -29,6 +29,6 @@
29
29
  {% set styleIcon = "width: " + iconSize + "; height: " + iconSize + ";" %}
30
30
 
31
31
  <div class="{{ classes }}" style="{{ styleIcon }} {{ styleColor }}" {{- attributes | safe}}>
32
- {{ Icon({ icon: params.icon }) | safe }}
32
+ {{ IconUse({ icon: params.icon }) | safe }}
33
33
  </div>
34
34
  {% endmacro %}
@@ -1,4 +1,5 @@
1
- @use "../../foundations/icons/icon.scss" as *;
1
+ @use "../../foundations/helpers/forward.helpers.scss" as *;
2
+ @use "../icon-sprite/icon-sprite.scss";
2
3
 
3
4
  .ds-icon-wrapper {
4
5
  .ds-icon {
@@ -0,0 +1,38 @@
1
+ - GitHub: [BonnierNews/dn-design-system/../web/src/components/image-caption](https://github.com/BonnierNews/dn-design-system/tree/main/web/src/components/image-caption)
2
+ - Storybook: [ImageCaption > Web](https://designsystem.dn.se/?path=/story/components-app-web-article-components-image-imagecaption-web--image-caption)
3
+
4
+ ----
5
+
6
+ # ImageCaption
7
+
8
+ ## Parameters
9
+
10
+ |parameter | type | required | options | default | description |
11
+ |:--- | :--- | :--- | :--- | :--- | :--- |
12
+ |caption | String | no | | | Ex "Detta är en bildtext" |
13
+ |imageType | String | no | | | Type of image. Ex "Foto" |
14
+ |author | String | no | | | Ex "Paul Hansen" |
15
+ |attributes | Object | no | | | Ex. { target: "_blank", "data-test": "lorem ipsum" } |
16
+ |classNames | String | no | | | Ex. "my-special-class" |
17
+ |forcePx | Bool | no | true, false | false | Fixed pixel value is used for typography to prevent scaling based on html font-size
18
+
19
+ ## Minimum requirement example
20
+
21
+ ### Nunjucks
22
+
23
+ These are copy paste friendly examples to quickliy get started using a component.
24
+
25
+ ```html
26
+ {% from '@bonniernews/dn-design-system-web/components/image-caption/image-caption.njk' import ImageCaption %}
27
+
28
+ {{ ImageCaption({
29
+ caption: "En bildtext",
30
+ imageType: "Foto",
31
+ author: "Paul Hansen"
32
+ })}}
33
+ ```
34
+
35
+ ### SCSS
36
+ ```scss
37
+ @use "@bonniernews/dn-design-system-web/components/image-caption/image-caption";
38
+ ```
@@ -0,0 +1,25 @@
1
+ {% macro ImageCaption(params) %}
2
+ {% set macroClassName = "ds-image-caption" %}
3
+ {% set additionalClasses = [] %}
4
+
5
+ {% if params.classNames %}
6
+ {% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
7
+ {% endif %}
8
+
9
+ {% if params.forcePx %}
10
+ {% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
11
+ {% endif %}
12
+
13
+ {% set classes = macroClassName + " " + additionalClasses | join(" ") %}
14
+
15
+ <figcaption class="{{ classes }}" {{- params.attributes | safe }}>
16
+ {% if params.caption %}
17
+ <span aria-hidden="true">{{ params.caption | safe }}</span>
18
+ {% endif %}
19
+ {% if params.author %}
20
+ <span class="ds-article-image__credits">
21
+ {%- if params.imageType %}{{ params.imageType | capitalize }}: {% endif %}{{ params.author -}}
22
+ </span>
23
+ {% endif %}
24
+ </figcaption>
25
+ {% endmacro %}
@@ -0,0 +1,15 @@
1
+ @use "../../foundations/helpers/forward.helpers.scss" as *;
2
+
3
+ .ds-image-caption {
4
+ @include ds-typography($ds-typography-functional-body01regular);
5
+ margin-top: ds-spacing-component($ds-sc-x2);
6
+ color: $ds-color-text-primary;
7
+
8
+ @at-root .ds-force-px#{&} {
9
+ @include ds-typography($ds-typography-functional-body01regular, true);
10
+ }
11
+
12
+ > .ds-article-image__credits {
13
+ color: $ds-color-text-primary-02;
14
+ }
15
+ }
@@ -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
  {% from '@bonniernews/dn-design-system-web/components/switch/switch.njk' import Switch %}
3
3
  {% from '@bonniernews/dn-design-system-web/components/checkbox/checkbox.njk' import Checkbox %}
4
4
  {% from '@bonniernews/dn-design-system-web/components/radio-button/radio-button.njk' import RadioButton %}
@@ -63,11 +63,11 @@
63
63
  {% endif %}
64
64
 
65
65
  {% if params.leadingIcon %}
66
- {% set iconLeftSvg = Icon({ icon: params.leadingIcon }) %}
66
+ {% set iconLeftSvg = IconUse({ icon: params.leadingIcon }) %}
67
67
  {% endif %}
68
68
 
69
69
  {% if params.trailingIcon %}
70
- {% set iconRightSvg = Icon({ icon: params.trailingIcon }) %}
70
+ {% set iconRightSvg = IconUse({ icon: params.trailingIcon }) %}
71
71
  {% endif %}
72
72
 
73
73
  {% if params.listItemType == "standard" or not params.listItemType %}
@@ -137,8 +137,8 @@
137
137
  </div>
138
138
  {% elif element == 'accordion' %}
139
139
  {% set iconRightSvg %}
140
- {{ Icon({ icon: "expand_less" }) }}
141
- {{ Icon({ icon: "expand_more" }) }}
140
+ {{ IconUse({ icon: "expand_less" }) }}
141
+ {{ IconUse({ icon: "expand_more" }) }}
142
142
  {% endset %}
143
143
  <button class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe }}>
144
144
  {{ caller() if caller }}
@@ -1,5 +1,5 @@
1
1
  @use "../../foundations/helpers/forward.helpers.scss" as *;
2
- @use "../../foundations/icons/icon.scss" as *;
2
+ @use "../icon-sprite/icon-sprite.scss";
3
3
  @use "../checkbox/checkbox.scss" as *;
4
4
  @use "../switch/switch.scss" as *;
5
5
  @use "../radio-button/radio-button.scss" as *;
@@ -27,7 +27,6 @@ $ds-list-item__icon-size: 24px;
27
27
  .ds-list-item__inner {
28
28
  box-sizing: border-box;
29
29
  border-radius: 0;
30
- transition: background-color 50ms ease-out;
31
30
  margin: 0;
32
31
  display: flex;
33
32
  align-items: center;
@@ -45,7 +44,6 @@ $ds-list-item__icon-size: 24px;
45
44
  left: 0;
46
45
  bottom: 0;
47
46
  right: 0;
48
- transition: background-color 500ms ease;
49
47
  }
50
48
 
51
49
  .ds-icon {