@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
@@ -1,11 +1,5 @@
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/loading.scss" as *;
8
- @use "../../foundations/icons/icon.scss" as *;
1
+ @use "../../foundations/helpers/forward.helpers.scss" as *;
2
+ @use "../icon-sprite/icon-sprite.scss";
9
3
  @use "../spinner/spinner.scss" as *;
10
4
 
11
5
  $ds-text-btn__min-clickable-area: 0;
@@ -37,6 +31,10 @@ $ds-text-btn__icon-size: 24px;
37
31
  padding: 0;
38
32
  position: relative;
39
33
 
34
+ span {
35
+ pointer-events: none;
36
+ }
37
+
40
38
  &:focus-visible {
41
39
  outline: none;
42
40
  .ds-text-btn__inner {
@@ -78,9 +76,12 @@ $ds-text-btn__icon-size: 24px;
78
76
  }
79
77
  }
80
78
 
81
- &:hover:not(.ds-loading) .ds-text-btn__inner::before {
82
- background-color: $ds-color-component-primary-overlay;
79
+ @include ds-hover() {
80
+ &:hover:not(.ds-loading) .ds-text-btn__inner::before {
81
+ background-color: $ds-color-component-primary-overlay;
82
+ }
83
83
  }
84
+
84
85
  &:active:not(.ds-loading) .ds-text-btn__inner::before {
85
86
  background-color: $ds-color-component-primary-overlay-02;
86
87
  }
@@ -95,6 +96,7 @@ $ds-text-btn__icon-size: 24px;
95
96
  &,
96
97
  & .ds-text-btn__inner {
97
98
  width: 100%;
99
+ box-sizing: border-box;
98
100
  }
99
101
  }
100
102
 
@@ -9,6 +9,8 @@ function dsTextButtonToggle(toggleElements = []) {
9
9
  toggleEl.addEventListener("click", () => {
10
10
  if (toggleEl.classList.contains("ds-text-btn-toggle--disabled")) return;
11
11
  toggleEl.classList.toggle("ds-text-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,51 +1,48 @@
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 TextButtonToggle(params) %}
5
6
  {% set componentClassName = "ds-text-btn-toggle" %}
6
7
  {% set classNamePrefix = componentClassName + "--" %}
7
- {% set variant = [] %}
8
- {% set attributes %}
9
- {% for attribute, value in params.attributes %}
10
- {{attribute}}="{{value}}"
11
- {% endfor %}
12
- {% endset %}
13
-
14
- {% if params.selected %}
15
- {% set variant = (variant.push(classNamePrefix + "selected"), variant) %}
8
+ {%- set additionalClasses = [] %}
9
+ {%- set attributes = getAttributes(params.attributes) %}
10
+ {%- set ariaLabel = 'aria-label="' + params.text + '"' if not params.attributes["aria-label"] else "" %}
11
+
12
+ {%- if params.selected %}
13
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "selected"), additionalClasses) %}
16
14
  {% endif %}
17
15
 
18
- {% if params.forcePx %}
19
- {% set variant = (variant.push("ds-force-px"), variant) %}
16
+ {%- if params.forcePx %}
17
+ {% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
20
18
  {% endif %}
21
19
 
22
- {% if params.condensed %}
23
- {% set variant = (variant.push(classNamePrefix + "condensed"), variant) %}
20
+ {%- if params.condensed %}
21
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "condensed"), additionalClasses) %}
24
22
  {% endif %}
25
23
 
26
- {% set loadingHtml %}
27
- {{ Spinner({ size: "small", variant: "primary", forcePx: params.forcePx }) }}
28
- {% endset %}
24
+ {%- set loadingHtml %}
25
+ {{ Spinner({ size: "small", additionalClasses: "primary", forcePx: params.forcePx }) }}
26
+ {%- endset %}
29
27
 
30
- {% if params.loading %}
31
- {% set variant = (variant.push("ds-loading"), variant) %}
28
+ {%- if params.loading %}
29
+ {% set additionalClasses = (additionalClasses.push("ds-loading"), additionalClasses) %}
32
30
  {% endif %}
33
31
 
34
- {% if params.classNames %}
35
- {% set variant = (variant.push(params.classNames), variant) %}
32
+ {%- if params.classNames %}
33
+ {% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
36
34
  {% endif%}
37
35
 
38
- {% set classes = componentClassName + " " + variant | join(" ") %}
39
-
40
- <button type="{{ params.type | default('button') }}" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe }}>
41
- <div class="{{ componentClassName + '__inner'}}">
42
- <div class="{{ componentClassName + '__off'}}">
43
- {{ Icon({ icon: params.iconName }) }} <span class="{{ componentClassName + '__text'}}">{{ params.text }}</span>
44
- </div>
45
- <div class="{{ componentClassName + '__on'}}">
46
- {{ Icon({ icon: params.selectedIconName }) }} <span class="{{ componentClassName + '__text'}}">{{ params.selectedText }}</span>
47
- </div>
48
- {{ loadingHtml | safe }}
49
- </div>
36
+ {%- set classes = componentClassName + " " + additionalClasses | join(" ") %}
37
+ <button type="{{ params.type | default('button') }}" role="switch" {{ ariaLabel | safe }} aria-checked="{{ "true" if params.selected else "false" }}" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe }}>
38
+ <span class="{{ componentClassName + '__inner' }}" aria-hidden="true">
39
+ <span class="{{ componentClassName + '__off' }}">
40
+ {{ IconUse({ icon: params.iconName }) }} <span class="{{ componentClassName + '__text'}}">{{ params.text }}</span>
41
+ </span>
42
+ <span class="{{ componentClassName + '__on' }}">
43
+ {{ IconUse({ icon: params.selectedIconName }) }} <span class="{{ componentClassName + '__text' }}">{{ params.selectedText }}</span>
44
+ </span>
45
+ {{ loadingHtml | safe }}
46
+ </span>
50
47
  </button>
51
48
  {% endmacro %}
@@ -1,11 +1,5 @@
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/loading.scss" as *;
8
- @use "../../foundations/icons/icon.scss" as *;
1
+ @use "../../foundations/helpers/forward.helpers.scss" as *;
2
+ @use "../icon-sprite/icon-sprite.scss";
9
3
  @use "../spinner/spinner.scss" as *;
10
4
 
11
5
  $ds-text-btn-toggle__min-clickable-area: 0;
@@ -37,6 +31,10 @@ $ds-text-btn-toggle__icon-size: 24px;
37
31
  padding: 0;
38
32
  position: relative;
39
33
 
34
+ span {
35
+ pointer-events: none;
36
+ }
37
+
40
38
  &:focus-visible {
41
39
  outline: none;
42
40
  .ds-text-btn-toggle__inner {
@@ -98,8 +96,10 @@ $ds-text-btn-toggle__icon-size: 24px;
98
96
  }
99
97
  }
100
98
 
101
- &:hover:not(.ds-loading) .ds-text-btn-toggle__inner::before {
102
- background-color: $ds-color-component-primary-overlay;
99
+ @include ds-hover() {
100
+ &:hover:not(.ds-loading) .ds-text-btn-toggle__inner::before {
101
+ background-color: $ds-color-component-primary-overlay;
102
+ }
103
103
  }
104
104
  &:active:not(.ds-loading) .ds-text-btn-toggle__inner::before {
105
105
  background-color: $ds-color-component-primary-overlay-02;
@@ -1,11 +1,6 @@
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 "../../assets/form-field/form-field.scss" as *;
7
- @use "../../foundations/icons/icon.scss" as *;
8
- @use "../icon-button/icon-button.scss" as *;
1
+ @use "../../foundations/helpers/forward.helpers.scss" as *;
2
+ @use "../../assets/form-field/form-field.scss";
3
+ @use "../icon-button/icon-button.scss";
9
4
 
10
5
  $ds-text-input-toggle-btn__width: 32px;
11
6
  $ds-text-input-toggle-btn__area: (
@@ -27,7 +27,7 @@ These are copy paste friendly examples to quickliy get started using a component
27
27
 
28
28
  {{ VideoCaption({
29
29
  caption: "Tre år har gått sedan terrordåden i Paris.",
30
- duration: "47 sek."
30
+ duration: "47 sek"
31
31
  }) }}
32
32
  ```
33
33
 
@@ -1,4 +1,5 @@
1
1
  {% from '@bonniernews/dn-design-system-web/njk-helpers/attributes.njk' import getAttributes %}
2
+ {% from '@bonniernews/dn-design-system-web/foundations/a11y/visually-hidden.njk' import VisuallyHidden %}
2
3
 
3
4
  {% macro VideoCaption(params) %}
4
5
  {%- set componentClassName = "ds-video-caption" %}
@@ -12,13 +13,18 @@
12
13
  {% endif%}
13
14
  {%- set classes = componentClassName + " " + additionalClasses | join(" ") %}
14
15
  <figcaption class="{{ classes }}" {{- attributes | safe }}>
15
- {%- if params.duration %}
16
- <span class="{{ componentClassName + '__duration'}}">
16
+ {%- if params.duration -%}
17
+ <span class="{{ componentClassName + '__duration'}}" aria-hidden="true">
17
18
  {{- params.duration -}}
18
19
  </span>
19
- {% endif %}
20
- {%- if params.caption %}
21
- {{- params.caption -}}
22
- {% endif %}
20
+ {{ VisuallyHidden({
21
+ text: "Videon är " + params.duration + " lång."
22
+ })}}
23
+ {%- endif %}
24
+ {% if params.caption -%}
25
+ <span class="{{ componentClassName + '__text'}}">
26
+ {{- params.caption -}}
27
+ </span>
28
+ {% endif -%}
23
29
  </figcaption>
24
30
  {% endmacro %}
@@ -0,0 +1,35 @@
1
+ - GitHub: [BonnierNews/dn-design-system/../web/src/components/vip-badge](https://github.com/BonnierNews/dn-design-system/tree/main/web/src/components/vip-badge)
2
+ - Storybook (PROD): [VipBadge > Web > Vip Badge](https://designsystem.dn.se/?path=/story/components-app-web-section-components-vipbadge-web)
3
+ - Storybook (LATEST): [VipBadge > Web > Vip Badge With Text](https://designsystem-latest.dn.se/?path=/story/components-app-web-section-components-vipbadge-web)
4
+
5
+ ----
6
+
7
+ # VipBadge
8
+
9
+ ## Parameters
10
+
11
+ |parameter | type | required | options | default | description |
12
+ |:--- | :--- | :--- | :--- | :--- | :--- |
13
+ |showText | bool | no | | false | By default only icon is shown |
14
+ |attributes | Object | no | | | Ex. { target: "_blank", "data-test": "lorem ipsum" } |
15
+ |classNames | String | no | | | Ex. "my-special-class" |
16
+ |forcePx | bool | no | true, false | false | Fixed pixel value is used for typography to prevent scaling based on html font-size |
17
+
18
+ ## Minimum requirement example
19
+
20
+ ### Nunjucks
21
+
22
+ These are copy paste friendly examples to quickliy get started using a component.
23
+
24
+ ```html
25
+ {% from '@bonniernews/dn-design-system-web/components/vip-badge/vip-badge.njk' import VipBadge %}
26
+
27
+ {{ VipBadge({
28
+ showText: true
29
+ })}}
30
+ ```
31
+
32
+ ### SCSS
33
+ ```scss
34
+ @use "@bonniernews/dn-design-system-web/components/vip-badge/vip-badge" as *;
35
+ ```
@@ -0,0 +1,23 @@
1
+ {% from '@bonniernews/dn-design-system-web/components/icon-sprite/icon-sprite.njk' import IconUse %}
2
+ {% from '@bonniernews/dn-design-system-web/njk-helpers/attributes.njk' import getAttributes %}
3
+
4
+ {% macro VipBadge(params) %}
5
+ {%- set componentClassName = "ds-vip-badge" %}
6
+ {%- set classNamePrefix = componentClassName + "--" %}
7
+ {%- set additionalClasses = [] %}
8
+ {%- set attributes = getAttributes(params.attributes) %}
9
+ {%- if params.classNames %}
10
+ {% set additionalClasses = (additionalClasses.push(params.classNames), additionalClasses) %}
11
+ {% endif %}
12
+ {%- if params.showText %}
13
+ {% set additionalClasses = (additionalClasses.push(classNamePrefix + "text"), additionalClasses) %}
14
+ {% endif%}
15
+ {%- if params.forcePx %}
16
+ {% set additionalClasses = (additionalClasses.push("ds-force-px"), additionalClasses) %}
17
+ {% endif %}
18
+ {%- set classes = componentClassName + " " + additionalClasses | join(" ") %}
19
+ <div class="{{ classes }}" {{- attributes | safe }} aria-hidden="true">
20
+ {{ IconUse({ icon: 'vip' | safe }) }}
21
+ {{ "För dig som prenumererar" if params.showText else "" }}
22
+ </div>
23
+ {% endmacro %}
@@ -0,0 +1,54 @@
1
+ @use "../../foundations/helpers/forward.helpers.scss" as *;
2
+ @use "../icon-sprite/icon-sprite.scss";
3
+
4
+ $ds-vip-badge__icon-size: 16px;
5
+
6
+ .ds-vip-badge {
7
+ display: none;
8
+ align-items: center;
9
+ box-sizing: content-box;
10
+ border-radius: ds-px-to-rem(ds-metrics-border-radius(x1)) 0
11
+ ds-px-to-rem(ds-metrics-border-radius(x1))
12
+ ds-px-to-rem(ds-metrics-border-radius(x1));
13
+ background-color: $ds-color-component-business;
14
+ color: $ds-color-static-white;
15
+ fill: $ds-color-static-white;
16
+ @include ds-typography($ds-typography-functional-meta01regular);
17
+ padding: ds-px-to-rem(ds-spacing-component($ds-sc-x1));
18
+
19
+ @at-root .ds-force-px#{&} {
20
+ @include ds-typography($ds-typography-functional-meta01regular, true);
21
+ border-radius: ds-metrics-border-radius(x1) 0 ds-metrics-border-radius(x1)
22
+ ds-metrics-border-radius(x1);
23
+ padding: ds-spacing-component($ds-sc-x1);
24
+ }
25
+
26
+ // bang class indicating that the user has premium access
27
+ .dn-premium & {
28
+ display: inline-flex;
29
+ }
30
+
31
+ .ds-icon {
32
+ height: ds-px-to-rem($ds-vip-badge__icon-size);
33
+ width: ds-px-to-rem($ds-vip-badge__icon-size);
34
+ @at-root .ds-force-px#{&} {
35
+ height: $ds-vip-badge__icon-size;
36
+ width: $ds-vip-badge__icon-size;
37
+ }
38
+ }
39
+ }
40
+
41
+ .ds-vip-badge--text {
42
+ padding: ds-px-to-rem(ds-spacing-component($ds-sc-x1))
43
+ ds-px-to-rem(ds-spacing-component($ds-sc-x2));
44
+ @at-root .ds-force-px#{&} {
45
+ padding: ds-spacing-component($ds-sc-x1 $ds-sc-x2);
46
+ }
47
+
48
+ .ds-icon {
49
+ margin-right: ds-px-to-rem(ds-spacing-component($ds-sc-x1));
50
+ @at-root .ds-force-px#{&} {
51
+ margin-right: ds-spacing-component($ds-sc-x1);
52
+ }
53
+ }
54
+ }
@@ -2,6 +2,7 @@
2
2
  @use 'sass:string';
3
3
  @use './variables/colorsDnLightTokens';
4
4
  @use './variables/colorsDnDarkTokens';
5
+ @use './helpers/colors.scss' as *;
5
6
 
6
7
  html,
7
8
  .ds-light {
@@ -25,4 +26,34 @@ html,
25
26
  @each $name, $value in meta.module-variables("colorsDnDarkTokens") {
26
27
  --ds-color-#{string.slice($name, 13)}: #{$value};
27
28
  }
29
+
30
+ // these are not static so needs to be defined here also
31
+ --ds-theme-color: #{$ds-color-component-brand};
32
+ .ds-theme--nyheter {
33
+ --ds-theme-color: #{$ds-color-component-brand};
34
+ }
35
+ }
36
+
37
+ html {
38
+ --ds-theme-color: #{$ds-color-component-brand};
39
+ }
40
+
41
+ .ds-theme--nyheter {
42
+ --ds-theme-color: #{$ds-color-component-brand};
43
+ }
44
+
45
+ .ds-theme--ekonomi {
46
+ --ds-theme-color: #{$ds-color-static-economy};
47
+ }
48
+
49
+ .ds-theme--kultur {
50
+ --ds-theme-color: #{$ds-color-static-kultur};
51
+ }
52
+
53
+ .ds-theme--sport {
54
+ --ds-theme-color: #{$ds-color-static-sport};
55
+ }
56
+
57
+ .ds-theme--sthlm {
58
+ --ds-theme-color: #{$ds-color-static-sthlm};
28
59
  }
@@ -15,7 +15,7 @@
15
15
 
16
16
  ### SCSS
17
17
  ```scss
18
- @use "@bonniernews/dn-design-system-web/foundations/helpers/links.scss" as *;
18
+ @use "@bonniernews/dn-design-system-web/foundations/helpers/forward.helpers.scss" as *;
19
19
 
20
20
  a {
21
21
  @include ds-link($ds-link-paragraph);
@@ -1 +1,3 @@
1
1
  @forward '../variables/colorsCssVariables.scss';
2
+
3
+ $ds-theme-color: var(--ds-theme-color);
@@ -1,5 +1,6 @@
1
1
  @use "colors.scss" as *;
2
2
  @use "../variables/decorations.scss" as *;
3
+ @use "utilities.scss" as *;
3
4
 
4
5
  $ds-link-list: "list";
5
6
  $ds-link-paragraph: "paragraph";
@@ -7,31 +8,38 @@ $ds-link-article-body: "article-body";
7
8
 
8
9
  @mixin ds-link($type: paragraph) {
9
10
  color: inherit;
11
+ @include ds-underline(2px, 1px);
10
12
  &:focus-visible {
11
13
  outline-color: $ds-color-border-primary-02;
12
14
  }
13
15
 
14
16
  @if ($type == $ds-link-list) {
15
- text-decoration: none;
17
+ text-decoration-line: none;
16
18
  &:hover {
17
- text-decoration: $ds-text-decoration-link-underline;
19
+ text-decoration-line: $ds-text-decoration-link-underline;
18
20
  }
19
21
  } @else if ($type == $ds-link-paragraph) {
20
- text-decoration: $ds-text-decoration-link-underline;
22
+ text-decoration-line: $ds-text-decoration-link-underline;
21
23
  &:hover {
22
- text-decoration: none;
24
+ text-decoration-line: none;
23
25
  }
24
26
  &:visited {
25
27
  color: $ds-color-text-primary-02;
26
28
  }
27
29
  } @else if ($type == $ds-link-article-body) {
28
- text-decoration: $ds-text-decoration-link-underline;
30
+ text-decoration-line: $ds-text-decoration-link-underline;
29
31
  color: $ds-color-text-body-link;
30
32
  &:hover {
31
- text-decoration: none;
33
+ text-decoration-line: none;
32
34
  }
33
35
  &:visited {
34
36
  color: $ds-color-text-body-link-visited;
35
37
  }
36
38
  }
37
39
  }
40
+
41
+ @mixin ds-underline($offset: 2px, $thickness: 2px) {
42
+ text-decoration-line: $ds-text-decoration-link-underline;
43
+ text-decoration-thickness: ds-px-to-rem($thickness);
44
+ text-underline-offset: ds-px-to-rem($offset);
45
+ }