@bonniernews/dn-design-system-web 31.4.3 → 32.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/assets/teaser/teaser.scss +38 -0
- package/components/teaser-large/teaser-large.scss +0 -38
- package/components/teaser-list-vertical/README.md +1 -1
- package/components/teaser-list-vertical/teaser-list-vertical.njk +1 -1
- package/components/teaser-standard/README.md +1 -0
- package/components/teaser-standard/teaser-standard.js +7 -4
- package/components/teaser-standard/teaser-standard.njk +58 -47
- package/components/teaser-standard/teaser-standard.scss +40 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,31 @@ All changes to @bonniernews/dn-design-system-web will be documented in this file
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
+
## [32.1.0](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@32.0.0...@bonniernews/dn-design-system-web@32.1.0) (2025-04-29)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* **web:** render playicon if teaser presentation contains playknapp ([#1712](https://github.com/BonnierNews/dn-design-system/issues/1712)) ([65cd318](https://github.com/BonnierNews/dn-design-system/commit/65cd31837e30c47c6a19000e828a69722c3b9fed))
|
|
13
|
+
|
|
14
|
+
## [32.0.0](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@31.4.3...@bonniernews/dn-design-system-web@32.0.0) (2025-04-28)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### ⚠ BREAKING CHANGES
|
|
18
|
+
|
|
19
|
+
* **web:** DO NOT USE 31.3.*-31.4.* They have misstakes (affecting standard teaser) that are now corrected
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* **web:** change source for test images in hope to reduce flakyness ([#1718](https://github.com/BonnierNews/dn-design-system/issues/1718)) ([9b4008f](https://github.com/BonnierNews/dn-design-system/commit/9b4008fb0c7af7194976b5bcffd012f122a7389d))
|
|
24
|
+
* **web:** reapply the pr support byline in standardteaser after mergeknas ([#1720](https://github.com/BonnierNews/dn-design-system/issues/1720)) ([880bdae](https://github.com/BonnierNews/dn-design-system/commit/880bdaeaa9129652cd9654bcf76872229f40a414))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Maintenance
|
|
28
|
+
|
|
29
|
+
* **deps-dev:** bump axios from 1.8.4 to 1.9.0 ([#1715](https://github.com/BonnierNews/dn-design-system/issues/1715)) ([57460d2](https://github.com/BonnierNews/dn-design-system/commit/57460d20bbf8f40aabfa381d9149972581cd965c))
|
|
30
|
+
* **deps-dev:** bump style-dictionary from 4.3.3 to 4.4.0 ([#1716](https://github.com/BonnierNews/dn-design-system/issues/1716)) ([9de788e](https://github.com/BonnierNews/dn-design-system/commit/9de788eb2fcd87a1dae1bc730e45355fcf145b88))
|
|
31
|
+
|
|
7
32
|
## [31.4.3](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@31.4.2...@bonniernews/dn-design-system-web@31.4.3) (2025-04-25)
|
|
8
33
|
|
|
9
34
|
|
|
@@ -81,6 +81,44 @@ $ds-teaser-standard-image-width-desktop: 196px;
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
.ds-teaser__byline {
|
|
85
|
+
overflow: hidden;
|
|
86
|
+
position: relative;
|
|
87
|
+
margin-left: ds-spacing($ds-s-100);
|
|
88
|
+
margin-bottom: ds-spacing($ds-s-100, "px", true);
|
|
89
|
+
margin-top: ds-spacing($ds-s-025);
|
|
90
|
+
|
|
91
|
+
.picture {
|
|
92
|
+
position: absolute;
|
|
93
|
+
top: 0;
|
|
94
|
+
right: 0;
|
|
95
|
+
bottom: 0;
|
|
96
|
+
width: 100%;
|
|
97
|
+
min-width: 100%;
|
|
98
|
+
margin: auto 0 0;
|
|
99
|
+
max-height: 100%;
|
|
100
|
+
|
|
101
|
+
.picture__img {
|
|
102
|
+
margin: 0;
|
|
103
|
+
object-position: top;
|
|
104
|
+
max-height: unset;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@include ds-mq-largest-breakpoint(mobile) {
|
|
109
|
+
width: 96px;
|
|
110
|
+
min-height: 96px;
|
|
111
|
+
margin-left: ds-spacing($ds-s-050);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@include ds-mq-smallest-breakpoint(tablet) {
|
|
115
|
+
width: 144px;
|
|
116
|
+
// En bylinebild bör va lika hög som en "grekisk byst" - man ska se lite skjortkrage!
|
|
117
|
+
min-height: 110px;
|
|
118
|
+
margin-left: ds-spacing($ds-s-100);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
84
122
|
&--podcast {
|
|
85
123
|
.ds-teaser__vignette {
|
|
86
124
|
display: flex;
|
|
@@ -64,44 +64,6 @@
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
.ds-teaser__byline {
|
|
68
|
-
overflow: hidden;
|
|
69
|
-
position: relative;
|
|
70
|
-
margin-left: ds-spacing($ds-s-100);
|
|
71
|
-
margin-bottom: ds-spacing($ds-s-100, "px", true);
|
|
72
|
-
margin-top: ds-spacing($ds-s-025);
|
|
73
|
-
|
|
74
|
-
.picture {
|
|
75
|
-
position: absolute;
|
|
76
|
-
top: 0;
|
|
77
|
-
right: 0;
|
|
78
|
-
bottom: 0;
|
|
79
|
-
width: 100%;
|
|
80
|
-
min-width: 100%;
|
|
81
|
-
margin: auto 0 0;
|
|
82
|
-
max-height: 100%;
|
|
83
|
-
|
|
84
|
-
.picture__img {
|
|
85
|
-
margin: 0;
|
|
86
|
-
object-position: top;
|
|
87
|
-
max-height: unset;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
@include ds-mq-largest-breakpoint(mobile) {
|
|
92
|
-
width: 96px;
|
|
93
|
-
min-height: 96px;
|
|
94
|
-
margin-left: ds-spacing($ds-s-050);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
@include ds-mq-smallest-breakpoint(tablet) {
|
|
98
|
-
width: 144px;
|
|
99
|
-
// En bylinebild bör va lika hög som en "grekisk byst" - man ska se lite skjortkrage!
|
|
100
|
-
min-height: 110px;
|
|
101
|
-
margin-left: ds-spacing($ds-s-100);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
67
|
@include ds-mq-smallest-breakpoint(tablet) {
|
|
106
68
|
&.ds-teaser--right {
|
|
107
69
|
.ds-teaser__title {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|listTitle | String | yes | | | List title |
|
|
14
14
|
|listLink | Object | no | | | Ex. { text: "Alla nyheter", url: "#" } |
|
|
15
15
|
|flexible | bool | no | true, false | false | |
|
|
16
|
-
|teasers | Array | yes | | | Array with teaser objects. Ex. [ { title: 'Malmö var det enda rimliga valet för Eurovision', targetLink: '#', highlight: 'Hanna Fahl:', publicationTime: 'I GÅR 12:28', sectionName: 'Kultur', attributes: { "data-test": "list-item-test-data" } } ] |
|
|
16
|
+
|teasers | Array | yes | | | Array with teaser objects. Ex. [ { title: 'Malmö var det enda rimliga valet för Eurovision', targetLink: '#', highlight: 'Hanna Fahl:', publicationTime: 'I GÅR 12:28', sectionName: 'Kultur', attributes: { "data-test": "list-item-test-data" }, showPlayButton: false } ] |
|
|
17
17
|
|~areaType~ | String | no | "right" or "bauta" or "bautaxl" | | Not implemented |
|
|
18
18
|
|theme | String | no | nyheter, kultur | (empty) | The theme-class to apply to _all_ teasers in the list. |
|
|
19
19
|
|attributes | Object | no | | | Ex. { target: "_blank", "data-test": "lorem ipsum" } |
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
{% if teaser.mediaHtml %}
|
|
77
77
|
<div class="ds-teaser-list-vertical__item-img">
|
|
78
78
|
{{ teaser.mediaHtml | safe }}
|
|
79
|
-
{% if teaser.
|
|
79
|
+
{% if teaser.showPlayButton %}
|
|
80
80
|
{{ IconUse({ icon: 'play_arrow-filled', classNames: "ds-teaser-list-vertical__item-video-icon" }) -}}
|
|
81
81
|
{% endif %}
|
|
82
82
|
</div>
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
|highlight | String | no | | | Text before the heading |
|
|
21
21
|
|sticker | String | no | | | Red text before the text |
|
|
22
22
|
|mediaHtml | HTML String | no | | | Main image or other media |
|
|
23
|
+
|bylineHtml | HTML String | no | | | Side image of the author |
|
|
23
24
|
|isItalicHeadline | bool | no | true, false | false | If the headline should be italic |
|
|
24
25
|
|isCompact | bool | no | true, false | false | If the headline should be compact |
|
|
25
26
|
|isFlashingDot | bool | no | true, false | false | If there should be a flashing ball before the text |
|
|
@@ -8,13 +8,16 @@ function dsTeaserStandard(params = {}) {
|
|
|
8
8
|
// NOTE: this should match output of teaser-standard.njk for a subset of the parameters
|
|
9
9
|
teaser.innerHTML = `
|
|
10
10
|
<div class="ds-teaser__content">
|
|
11
|
-
<div class="ds-
|
|
12
|
-
|
|
13
|
-
<
|
|
14
|
-
|
|
11
|
+
<div class="ds-teaser__content-inner">
|
|
12
|
+
<div class="ds-teaser__title"></div>
|
|
13
|
+
<p class="ds-teaser__text">
|
|
14
|
+
<span class="ds-teaser-dot"></span>
|
|
15
|
+
</p>
|
|
16
|
+
</div>
|
|
15
17
|
</div>`;
|
|
16
18
|
teaser.classList.add("ds-teaser");
|
|
17
19
|
teaser.classList.add("ds-teaser--standard");
|
|
20
|
+
teaser.classList.add("ds-teaser--standard-without-byline");
|
|
18
21
|
|
|
19
22
|
if (params.targetLink) {
|
|
20
23
|
teaser.setAttribute("href", params.targetLink)
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"ds-teaser--standard",
|
|
12
12
|
classNamePrefix + params.variant if params.variant,
|
|
13
13
|
classNamePrefix + "compact" if params.isCompact,
|
|
14
|
+
classNamePrefix + "standard-with-byline" if params.bylineHtml,
|
|
15
|
+
classNamePrefix + "standard-without-byline" if not params.bylineHtml,
|
|
16
|
+
classNamePrefix + "standard-with-vignette" if params.vignette,
|
|
14
17
|
params.classNames if params.classNames
|
|
15
18
|
] | join(" ") %}
|
|
16
19
|
|
|
@@ -22,58 +25,66 @@
|
|
|
22
25
|
classNames: extraClasses
|
|
23
26
|
}) %}
|
|
24
27
|
<div class="{{ componentClassName + '__content'}}">
|
|
25
|
-
|
|
26
|
-
{%
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
{{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
{% if params.vignette %}
|
|
37
|
-
<div class="ds-teaser__vignette">
|
|
38
|
-
{% if params.variant === "podcast" %}
|
|
39
|
-
{{ IconUse({ icon: "headphones" }) }}
|
|
40
|
-
{% endif %}
|
|
41
|
-
{{ params.vignette }}
|
|
42
|
-
</div>
|
|
43
|
-
{% endif %}
|
|
28
|
+
<div class="ds-teaser__content-inner">
|
|
29
|
+
{% if params.mediaHtml and not params.bylineHtml %}
|
|
30
|
+
{% set mediaClass = [
|
|
31
|
+
componentClassName + '__media',
|
|
32
|
+
componentClassName + '__media--rounded' if not params.isItalicHeadline,
|
|
33
|
+
componentClassName + '__media--square-image' if params.isSquareImage
|
|
34
|
+
] | join(" ") %}
|
|
35
|
+
<div class="{{ mediaClass }}">
|
|
36
|
+
{{ params.mediaHtml }}
|
|
37
|
+
</div>
|
|
38
|
+
{% endif %}
|
|
44
39
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
{% if params.vignette %}
|
|
41
|
+
<div class="ds-teaser__vignette">
|
|
42
|
+
{% if params.variant === "podcast" %}
|
|
43
|
+
{{ IconUse({ icon: "headphones" }) }}
|
|
44
|
+
{% endif %}
|
|
45
|
+
{{ params.vignette }}
|
|
46
|
+
</div>
|
|
48
47
|
{% endif %}
|
|
49
|
-
{{ params.title }}
|
|
50
|
-
</h2>
|
|
51
48
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
{{ TeaserDot({ flashing: params.isFlashingDot }) }}
|
|
56
|
-
<span class="ds-teaser__sticker">
|
|
57
|
-
{{ params.sticker }}
|
|
58
|
-
</span>
|
|
49
|
+
<h2 class="{{ componentClassName + '__title'}} {{ componentClassName + '__title--italic' if params.isItalicHeadline}}">
|
|
50
|
+
{% if params.highlight %}
|
|
51
|
+
<span class="{{ componentClassName + '__highlight'}}">{{ params.highlight }}</span>
|
|
59
52
|
{% endif %}
|
|
60
|
-
{{ params.
|
|
61
|
-
</
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
53
|
+
{{ params.title }}
|
|
54
|
+
</h2>
|
|
55
|
+
|
|
56
|
+
{% if params.text and params.areaType !== "right" %}
|
|
57
|
+
<p class="{{ componentClassName + '__text' }}">
|
|
58
|
+
{% if params.sticker %}
|
|
59
|
+
{{ TeaserDot({ flashing: params.isFlashingDot }) }}
|
|
60
|
+
<span class="ds-teaser__sticker">
|
|
61
|
+
{{ params.sticker }}
|
|
62
|
+
</span>
|
|
63
|
+
{% endif %}
|
|
64
|
+
{{ params.text }}
|
|
65
|
+
</p>
|
|
66
|
+
{% endif %}
|
|
67
|
+
{% if params.variant === "podcast" %}
|
|
68
|
+
{{ TeaserFooter({
|
|
69
|
+
variant: "podcast",
|
|
73
70
|
publicationTime: params.publicationTime,
|
|
74
|
-
|
|
75
|
-
})
|
|
76
|
-
}
|
|
71
|
+
duration: params.duration
|
|
72
|
+
})}}
|
|
73
|
+
{% elif params.publicationTime %}
|
|
74
|
+
{{
|
|
75
|
+
TeaserFooter({
|
|
76
|
+
variant: "informationText",
|
|
77
|
+
publicationTime: params.publicationTime,
|
|
78
|
+
sectionName: params.sectionName
|
|
79
|
+
})
|
|
80
|
+
}}
|
|
81
|
+
{% endif %}
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
{% if params.bylineHtml %}
|
|
85
|
+
<div class="{{ componentClassName + '__byline'}}">
|
|
86
|
+
{{ params.bylineHtml | safe }}
|
|
87
|
+
</div>
|
|
77
88
|
{% endif %}
|
|
78
89
|
</div>
|
|
79
90
|
{% endcall %}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
overflow: hidden;
|
|
7
7
|
|
|
8
8
|
.ds-teaser__vignette {
|
|
9
|
-
|
|
9
|
+
padding-top: ds-spacing($ds-s-025);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
.ds-teaser__title {
|
|
@@ -25,15 +25,50 @@
|
|
|
25
25
|
@include ds-typography($ds-typography-detail-teaser-standard-compact-opinion);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
|
|
29
|
+
@include ds-hover(true) {
|
|
30
|
+
.ds-teaser__title {
|
|
31
|
+
@include ds-underline(2px);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
28
34
|
}
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
36
|
+
&.ds-teaser--standard-without-byline {
|
|
37
|
+
.ds-teaser__media,
|
|
38
|
+
.ds-teaser__content {
|
|
39
|
+
margin-bottom: ds-spacing($ds-s-100);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.ds-teaser__content .ds-teaser__content-inner {
|
|
43
|
+
display: block;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
&.ds-teaser--standard-with-byline {
|
|
48
|
+
.ds-teaser__content .ds-teaser__content-inner {
|
|
49
|
+
padding-bottom: ds-spacing($ds-s-075);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@include ds-hover(true) {
|
|
54
|
+
.ds-teaser__title {
|
|
55
|
+
@include ds-underline(3px);
|
|
56
|
+
}
|
|
33
57
|
}
|
|
34
58
|
|
|
35
59
|
.ds-teaser__content {
|
|
36
|
-
display:
|
|
60
|
+
display: flex;
|
|
61
|
+
flex-direction: row;
|
|
62
|
+
|
|
63
|
+
.ds-teaser__content-inner {
|
|
64
|
+
display: flex;
|
|
65
|
+
flex-direction: column;
|
|
66
|
+
flex: 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.ds-teaser__byline {
|
|
71
|
+
float: right;
|
|
37
72
|
}
|
|
38
73
|
|
|
39
74
|
.ds-teaser__media {
|
package/package.json
CHANGED