@bonniernews/dn-design-system-web 1.1.0-alpha.9 → 2.0.0-alpha.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 +167 -0
- package/README.md +1 -1
- package/components/buddy-menu/buddy-menu.scss +3 -1
- package/components/button-toggle/README.md +4 -2
- package/components/button-toggle/button-toggle.js +12 -2
- package/components/button-toggle/button-toggle.njk +14 -9
- package/components/button-toggle/button-toggle.scss +44 -2
- package/components/icon-button/README.md +1 -1
- package/components/icon-button/icon-button.scss +34 -11
- package/components/icon-button-toggle/README.md +52 -0
- package/components/icon-button-toggle/icon-button-toggle.js +19 -0
- package/components/icon-button-toggle/icon-button-toggle.njk +63 -0
- package/components/icon-button-toggle/icon-button-toggle.scss +161 -0
- package/components/list-item/README-accordion.md +3 -3
- package/components/list-item/README-toggle.md +56 -0
- package/components/list-item/list-item.js +25 -10
- package/components/list-item/list-item.njk +25 -1
- package/components/list-item/list-item.scss +29 -9
- package/components/spinner/README.md +1 -1
- package/components/spinner/spinner.scss +30 -0
- package/components/text-button-toggle/README.md +3 -2
- package/components/text-button-toggle/text-button-toggle.js +12 -2
- package/foundations/colors.scss +0 -6
- package/foundations/helpers/forward.helpers.scss +12 -0
- package/foundations/helpers/hover.scss +13 -0
- package/foundations/helpers/links.scss +10 -0
- package/foundations/helpers/mediaQueries.scss +24 -9
- package/foundations/helpers/opacity.scss +1 -0
- package/foundations/helpers/shadows.scss +9 -14
- package/foundations/helpers/typography.scss +8 -0
- package/foundations/icons/icon-sprite.svg +1 -1
- package/foundations/icons/icon.njk +45 -0
- package/foundations/icons/svg/campaign.svg +3 -0
- package/foundations/icons/svg/facebook.svg +3 -0
- package/foundations/icons/svg/feed.svg +3 -0
- package/foundations/icons/svg/filter_none.svg +3 -0
- package/foundations/icons/svg/info.svg +3 -0
- package/foundations/icons/svg/instagram.svg +3 -0
- package/foundations/icons/svg/play_arrow-filled.svg +3 -0
- package/foundations/icons/svg/play_arrow.svg +3 -0
- package/foundations/icons/svg/twitter.svg +3 -0
- package/foundations/variables/colorsCssVariables.scss +6 -1
- package/foundations/variables/colorsDnDarkTokens.scss +6 -0
- package/foundations/variables/colorsDnLightTokens.scss +6 -1
- package/foundations/variables/opacity.scss +1 -0
- package/foundations/variables/shadowsDnDarkTokens.scss +16 -0
- package/foundations/variables/shadowsDnLightTokens.scss +16 -0
- package/foundations/variables/shadowsTokensList.scss +2 -0
- package/foundations/variables/typographyTokensList.scss +3 -1
- package/foundations/variables/typographyTokensScreenLarge.scss +15 -1
- package/foundations/variables/typographyTokensScreenSmall.scss +14 -0
- package/package.json +1 -1
- package/tokens/colors-css-variables.json +6 -1
- package/tokens/shadows-css-variables.json +5 -0
- package/foundations/typography/typography.njk +0 -19
- package/foundations/typography/typography.scss +0 -15
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,173 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## 2.0.0-alpha.0 (2023-02-14)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### ⚠ BREAKING CHANGES
|
|
10
|
+
|
|
11
|
+
* **foundations:** update tokens from Figma (#667)
|
|
12
|
+
|
|
13
|
+
### Miscellaneous Chores
|
|
14
|
+
|
|
15
|
+
* **foundations:** update tokens from Figma ([#667](https://github.com/BonnierNews/dn-design-system/issues/667)) ([b15fac1](https://github.com/BonnierNews/dn-design-system/commit/b15fac100e22a073c3e018ba13d2390c18429177))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
## 1.1.0-alpha.27 (2023-02-14)
|
|
20
|
+
|
|
21
|
+
**Note:** Version bump only for package @bonniernews/dn-design-system-web
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
## 1.1.0-alpha.26 (2023-02-13)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Bug Fixes
|
|
31
|
+
|
|
32
|
+
* **web:** add article-body variant to link helper ([#662](https://github.com/BonnierNews/dn-design-system/issues/662)) ([3378bbe](https://github.com/BonnierNews/dn-design-system/commit/3378bbeafffdea56228dc207b9940dcc4e4ffdd2))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## 1.1.0-alpha.25 (2023-02-13)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
### Features
|
|
40
|
+
|
|
41
|
+
* **web:** topic variant of list item ([#650](https://github.com/BonnierNews/dn-design-system/issues/650)) ([45f2c02](https://github.com/BonnierNews/dn-design-system/commit/45f2c02f5745e30844caad3df0802195402c4676))
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## 1.1.0-alpha.24 (2023-02-10)
|
|
46
|
+
|
|
47
|
+
**Note:** Version bump only for package @bonniernews/dn-design-system-web
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
## [1.1.0-alpha.23](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.22...@bonniernews/dn-design-system-web@1.1.0-alpha.23) (2023-02-08)
|
|
54
|
+
|
|
55
|
+
**Note:** Version bump only for package @bonniernews/dn-design-system-web
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
## [1.1.0-alpha.22](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.21...@bonniernews/dn-design-system-web@1.1.0-alpha.22) (2023-02-08)
|
|
62
|
+
|
|
63
|
+
**Note:** Version bump only for package @bonniernews/dn-design-system-web
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
## [1.1.0-alpha.21](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.20...@bonniernews/dn-design-system-web@1.1.0-alpha.21) (2023-02-07)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
### Features
|
|
73
|
+
|
|
74
|
+
* **web:** add on-media icon button variant ([#637](https://github.com/BonnierNews/dn-design-system/issues/637)) ([f556c6b](https://github.com/BonnierNews/dn-design-system/commit/f556c6bdd6496007aeaf688ebe09781113d6dc9e))
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
## [1.1.0-alpha.20](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.19...@bonniernews/dn-design-system-web@1.1.0-alpha.20) (2023-02-07)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
### Features
|
|
82
|
+
|
|
83
|
+
* **web:** update toggle buttons and spinners ([#633](https://github.com/BonnierNews/dn-design-system/issues/633)) ([b20911d](https://github.com/BonnierNews/dn-design-system/commit/b20911db947901edff357a1c9fa470eaf294f11a))
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
## 1.1.0-alpha.19 (2023-02-07)
|
|
88
|
+
|
|
89
|
+
**Note:** Version bump only for package @bonniernews/dn-design-system-web
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
## [1.1.0-alpha.18](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.17...@bonniernews/dn-design-system-web@1.1.0-alpha.18) (2023-02-06)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
### Bug Fixes
|
|
99
|
+
|
|
100
|
+
* **web:** fix broken media query ([#638](https://github.com/BonnierNews/dn-design-system/issues/638)) ([85ff24c](https://github.com/BonnierNews/dn-design-system/commit/85ff24c5e6119133ded11ba86c2ee09cf1d25a47))
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
## [1.1.0-alpha.17](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.16...@bonniernews/dn-design-system-web@1.1.0-alpha.17) (2023-02-06)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
### Features
|
|
108
|
+
|
|
109
|
+
* **web:** add support for textCase in typography tokens ([#636](https://github.com/BonnierNews/dn-design-system/issues/636)) ([e0b9327](https://github.com/BonnierNews/dn-design-system/commit/e0b93276dbd574ee0f7718b757ce6eb31c998425))
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
## [1.1.0-alpha.16](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.15...@bonniernews/dn-design-system-web@1.1.0-alpha.16) (2023-02-03)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
### Bug Fixes
|
|
117
|
+
|
|
118
|
+
* **web:** remove excessive css from src package ([#632](https://github.com/BonnierNews/dn-design-system/issues/632)) ([c322bdb](https://github.com/BonnierNews/dn-design-system/commit/c322bdb7e764c5e619270bbabab9da25e96bb8ad))
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
## [1.1.0-alpha.15](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.14...@bonniernews/dn-design-system-web@1.1.0-alpha.15) (2023-02-03)
|
|
123
|
+
|
|
124
|
+
**Note:** Version bump only for package @bonniernews/dn-design-system-web
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
## [1.1.0-alpha.14](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.13...@bonniernews/dn-design-system-web@1.1.0-alpha.14) (2023-02-03)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
### Bug Fixes
|
|
134
|
+
|
|
135
|
+
* **web:** remove hover styling from list item on small devices ([#630](https://github.com/BonnierNews/dn-design-system/issues/630)) ([6a13dbd](https://github.com/BonnierNews/dn-design-system/commit/6a13dbd065dcf6ee430e46134b45385151e35c17))
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
## 1.1.0-alpha.13 (2023-02-02)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
### Bug Fixes
|
|
143
|
+
|
|
144
|
+
* **web:** add opsz to prevent ios bug ([#628](https://github.com/BonnierNews/dn-design-system/issues/628)) ([0c206b6](https://github.com/BonnierNews/dn-design-system/commit/0c206b6c82ef85f8193d31be44e323ad15448bc2))
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
## [1.1.0-alpha.12](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.11...@bonniernews/dn-design-system-web@1.1.0-alpha.12) (2023-02-01)
|
|
149
|
+
|
|
150
|
+
**Note:** Version bump only for package @bonniernews/dn-design-system-web
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
## 1.1.0-alpha.11 (2023-02-01)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
### Bug Fixes
|
|
160
|
+
|
|
161
|
+
* **web:** add support for combined shadows ([#624](https://github.com/BonnierNews/dn-design-system/issues/624)) ([c5a9bb8](https://github.com/BonnierNews/dn-design-system/commit/c5a9bb8f2b9c156d2d39f984834ed9327e2950b5))
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
## [1.1.0-alpha.10](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.9...@bonniernews/dn-design-system-web@1.1.0-alpha.10) (2023-02-01)
|
|
166
|
+
|
|
167
|
+
**Note:** Version bump only for package @bonniernews/dn-design-system-web
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
6
173
|
## [1.1.0-alpha.9](https://github.com/BonnierNews/dn-design-system/compare/@bonniernews/dn-design-system-web@1.1.0-alpha.8...@bonniernews/dn-design-system-web@1.1.0-alpha.9) (2023-01-31)
|
|
7
174
|
|
|
8
175
|
|
package/README.md
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
@use "../../foundations/helpers/utilities.scss" as *;
|
|
6
6
|
@use "../../foundations/helpers/colors.scss" as *;
|
|
7
7
|
@use "../../foundations/helpers/links.scss" as *;
|
|
8
|
+
@use "../../foundations/helpers/shadows.scss" as *;
|
|
8
9
|
@use "../button/button.scss" as *;
|
|
9
10
|
@use "../icon-button/icon-button.scss" as *;
|
|
10
11
|
@use "../list-item/list-item.scss" as *;
|
|
@@ -32,7 +33,8 @@
|
|
|
32
33
|
.ds-buddy-menu__inner {
|
|
33
34
|
background-color: $ds-color-surface-elevated;
|
|
34
35
|
border-radius: ds-metrics-border-radius(x2);
|
|
35
|
-
box-shadow:
|
|
36
|
+
box-shadow: ds-shadow-get-box-shadow($ds-shadow-drop-shadow-a),
|
|
37
|
+
ds-shadow-get-box-shadow($ds-shadow-drop-shadow-b);
|
|
36
38
|
position: relative;
|
|
37
39
|
z-index: 1;
|
|
38
40
|
}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
|variant | String | no | brand, SecondaryFilled | brand | Design variant |
|
|
17
17
|
|size| String | no | default, small | default | |
|
|
18
18
|
|fullWidth | bool | no | true, false | false | Button will be full width on both desktop and mobile |
|
|
19
|
+
|condensed | bool | no | true, false | false | Condensed reduces spacing to a bare minimum, use with care since this might make touch target area smaller than recommended size |
|
|
19
20
|
|mobile.fullWidth | bool | no | true, false | false | Ex mobile: { fullWidth: true } |
|
|
20
21
|
|loading | bool | no | true, false | false | |
|
|
21
22
|
|attributes | Object | no | | | Ex. { target: "_blank", "data-test": "lorem ipsum" } |
|
|
@@ -49,6 +50,7 @@ These are copy paste friendly examples to quickliy get started using a component
|
|
|
49
50
|
### Javascript
|
|
50
51
|
|
|
51
52
|
```javascript
|
|
52
|
-
import
|
|
53
|
-
|
|
53
|
+
import dsButtonToggle from '@bonniernews/dn-design-system-web/components/button-toggle/button-toggle.js'
|
|
54
|
+
const toggleElements = Array.from(document.getElementsByClassName("ds-btn-toggle"));
|
|
55
|
+
dsButtonToggle(toggleElements);
|
|
54
56
|
```
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
1
|
+
export {
|
|
2
|
+
dsButtonToggle,
|
|
3
|
+
dsButtonToggleAll
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
function dsButtonToggle(toggleElements = []) {
|
|
7
|
+
if (!toggleElements.length) return;
|
|
3
8
|
toggleElements.forEach((toggleEl) => {
|
|
4
9
|
toggleEl.addEventListener("click", () => {
|
|
5
10
|
if (toggleEl.classList.contains("ds-btn-toggle--disabled")) return;
|
|
@@ -7,3 +12,8 @@ export function DsButtonToggle() {
|
|
|
7
12
|
});
|
|
8
13
|
});
|
|
9
14
|
}
|
|
15
|
+
|
|
16
|
+
function dsButtonToggleAll() {
|
|
17
|
+
const toggleElements = Array.from(document.getElementsByClassName("ds-btn-toggle"));
|
|
18
|
+
dsButtonToggle(toggleElements);
|
|
19
|
+
}
|
|
@@ -20,9 +20,10 @@
|
|
|
20
20
|
|
|
21
21
|
{% set spinnerMap = { primary: "secondary", brand: "onBrand", business: "onBusiness" } %}
|
|
22
22
|
{% set spinnerVariant = spinnerMap[buttonVariant] | default("primary") %}
|
|
23
|
+
{% set spinnerSize = "xsmall" if params.size == "xsmall" else "small" %}
|
|
23
24
|
|
|
24
25
|
{% set loadingHtml %}
|
|
25
|
-
{{ Spinner({ size:
|
|
26
|
+
{{ Spinner({ size: spinnerSize, variant: spinnerVariant, forcePx: params.forcePx }) }}
|
|
26
27
|
{% endset %}
|
|
27
28
|
|
|
28
29
|
{% if params.loading %}
|
|
@@ -41,6 +42,10 @@
|
|
|
41
42
|
{% set variant = (variant.push(classNamePrefix + "full-width"), variant) %}
|
|
42
43
|
{% endif %}
|
|
43
44
|
|
|
45
|
+
{% if params.condensed %}
|
|
46
|
+
{% set variant = (variant.push(classNamePrefix + "condensed"), variant) %}
|
|
47
|
+
{% endif %}
|
|
48
|
+
|
|
44
49
|
{% if params.mobile and params.mobile.fullWidth %}
|
|
45
50
|
{% set variant = (variant.push(classNamePrefix + "mobile-full-width"), variant) %}
|
|
46
51
|
{% endif %}
|
|
@@ -51,13 +56,13 @@
|
|
|
51
56
|
|
|
52
57
|
{% set classes = componentClassName + " " + variant | join(" ") %}
|
|
53
58
|
|
|
54
|
-
<button type="button
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
</div>
|
|
60
|
-
{{ loadingHtml | safe }}
|
|
59
|
+
<button type="button" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe}}>
|
|
60
|
+
<div class="{{ componentClassName + '__inner'}}">
|
|
61
|
+
<div class="{{ componentClassName + '__off'}}"><span>{{ params.text }}</span></div>
|
|
62
|
+
<div class="{{ componentClassName + '__on'}}">
|
|
63
|
+
{{ Icon({ icon: "check" }) }} <span>{{ params.selectedText }}</span>
|
|
61
64
|
</div>
|
|
62
|
-
|
|
65
|
+
{{ loadingHtml | safe }}
|
|
66
|
+
</div>
|
|
67
|
+
</button>
|
|
63
68
|
{% endmacro %}
|
|
@@ -12,19 +12,25 @@
|
|
|
12
12
|
$ds-btn-toggle-outlined__border-width: ds-metrics-border-width(x1);
|
|
13
13
|
$ds-btn-toggle__min-clickable-area: 48px;
|
|
14
14
|
$ds-btn-toggle__icon-size: 24px;
|
|
15
|
+
$ds-btn-toggle__icon-size-xsmall: 20px;
|
|
15
16
|
|
|
16
17
|
.ds-btn-toggle {
|
|
17
18
|
cursor: pointer;
|
|
18
19
|
background-color: transparent;
|
|
19
20
|
border: none;
|
|
20
|
-
min-width:
|
|
21
|
-
min-height:
|
|
21
|
+
min-width: 0;
|
|
22
|
+
min-height: 0;
|
|
22
23
|
display: inline-flex;
|
|
23
24
|
align-items: center;
|
|
24
25
|
justify-content: center;
|
|
25
26
|
padding: 0;
|
|
26
27
|
position: relative;
|
|
27
28
|
|
|
29
|
+
&:not(.ds-btn-toggle--condensed) {
|
|
30
|
+
min-width: $ds-btn-toggle__min-clickable-area;
|
|
31
|
+
min-height: $ds-btn-toggle__min-clickable-area;
|
|
32
|
+
}
|
|
33
|
+
|
|
28
34
|
&:focus-visible {
|
|
29
35
|
outline: none;
|
|
30
36
|
.ds-btn-toggle__inner {
|
|
@@ -91,6 +97,16 @@ $ds-btn-toggle__icon-size: 24px;
|
|
|
91
97
|
);
|
|
92
98
|
}
|
|
93
99
|
|
|
100
|
+
.ds-btn-toggle--xsmall .ds-btn-toggle__inner {
|
|
101
|
+
@include ds-typography($ds-typography-detailstandard-button-small);
|
|
102
|
+
padding: ds-px-to-rem(
|
|
103
|
+
ds-spacing-component(x1) - $ds-btn-toggle-outlined__border-width
|
|
104
|
+
)
|
|
105
|
+
ds-px-to-rem(
|
|
106
|
+
ds-spacing-component(x3) - $ds-btn-toggle-outlined__border-width
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
94
110
|
@include ds-mq-only-breakpoint(mobile) {
|
|
95
111
|
.ds-btn-toggle--mobile-full-width {
|
|
96
112
|
&,
|
|
@@ -179,6 +195,17 @@ $ds-btn-toggle__icon-size: 24px;
|
|
|
179
195
|
);
|
|
180
196
|
}
|
|
181
197
|
|
|
198
|
+
&.ds-btn-toggle--xsmall .ds-btn-toggle__inner {
|
|
199
|
+
padding-left: ds-px-to-rem(
|
|
200
|
+
ds-spacing-component(x2) - $ds-btn-toggle-outlined__border-width
|
|
201
|
+
);
|
|
202
|
+
.ds-icon {
|
|
203
|
+
height: ds-px-to-rem($ds-btn-toggle__icon-size-xsmall);
|
|
204
|
+
width: ds-px-to-rem($ds-btn-toggle__icon-size-xsmall);
|
|
205
|
+
margin: ds-spacing-component(0 x1 0 0, rem);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
182
209
|
&:focus-visible .ds-btn-toggle__inner {
|
|
183
210
|
outline-color: $ds-color-border-focus-02;
|
|
184
211
|
}
|
|
@@ -217,4 +244,19 @@ $ds-btn-toggle__icon-size: 24px;
|
|
|
217
244
|
padding-left: ds-spacing-component(x4)-$ds-btn-toggle-outlined__border-width;
|
|
218
245
|
}
|
|
219
246
|
}
|
|
247
|
+
&.ds-btn-toggle--xsmall {
|
|
248
|
+
.ds-btn-toggle__inner {
|
|
249
|
+
@include ds-typography($ds-typography-detailstandard-button-small, true);
|
|
250
|
+
padding: ds-spacing-component(x1)-$ds-btn-toggle-outlined__border-width
|
|
251
|
+
ds-spacing-component(x3)-$ds-btn-toggle-outlined__border-width;
|
|
252
|
+
.ds-icon {
|
|
253
|
+
margin: ds-spacing-component(0 x1 0 0);
|
|
254
|
+
height: $ds-btn-toggle__icon-size-xsmall;
|
|
255
|
+
width: $ds-btn-toggle__icon-size-xsmall;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
&.ds-btn-toggle--selected .ds-btn-toggle__inner {
|
|
259
|
+
padding-left: ds-spacing-component(x2)-$ds-btn-toggle-outlined__border-width;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
220
262
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
- GitHub: [BonnierNews/dn-design-system/../web/src/components/icon-button](https://github.com/BonnierNews/dn-design-system/tree/main/web/src/components/icon-button)
|
|
2
|
-
- Storybook: [IconButton > Web](https://designsystem.dn.se/?path=/story/components-app-web-iconbutton-web)
|
|
2
|
+
- Storybook: [IconButton > Web](https://designsystem.dn.se/?path=/story/components-app-web-iconbutton-iconbutton-web)
|
|
3
3
|
|
|
4
4
|
----
|
|
5
5
|
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
@use "../../foundations/helpers/
|
|
2
|
-
@use "../../foundations/helpers/typography.scss" as *;
|
|
3
|
-
@use "../../foundations/helpers/metrics.scss" as *;
|
|
4
|
-
@use "../../foundations/helpers/utilities.scss" as *;
|
|
5
|
-
@use "../../foundations/helpers/colors.scss" as *;
|
|
6
|
-
@use "../../foundations/helpers/shadows.scss" as *;
|
|
7
|
-
@use "../../foundations/helpers/loading.scss" as *;
|
|
1
|
+
@use "../../foundations/helpers/forward.helpers.scss" as *;
|
|
8
2
|
@use "../../foundations/icons/icon.scss" as *;
|
|
9
3
|
@use "../spinner/spinner.scss" as *;
|
|
10
4
|
|
|
@@ -63,9 +57,10 @@ $ds-btn-outlined__border-width: ds-metrics-border-width(x1);
|
|
|
63
57
|
}
|
|
64
58
|
}
|
|
65
59
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
@include ds-hover() {
|
|
61
|
+
&:hover:not(.ds-loading) .ds-icon-btn__inner::before {
|
|
62
|
+
background-color: $ds-color-component-primary-overlay;
|
|
63
|
+
}
|
|
69
64
|
}
|
|
70
65
|
&:active:not(.ds-loading) .ds-icon-btn__inner::before {
|
|
71
66
|
background-color: $ds-color-component-primary-overlay-02;
|
|
@@ -126,7 +121,7 @@ $ds-btn-outlined__border-width: ds-metrics-border-width(x1);
|
|
|
126
121
|
|
|
127
122
|
.ds-icon-btn--elevated {
|
|
128
123
|
.ds-icon-btn__inner {
|
|
129
|
-
|
|
124
|
+
box-shadow: ds-shadow-get-box-shadow($ds-shadow-drop-shadow-02);
|
|
130
125
|
background-color: $ds-color-component-secondary;
|
|
131
126
|
border-color: $ds-color-border-primary-02;
|
|
132
127
|
color: $ds-color-icon-primary;
|
|
@@ -135,3 +130,31 @@ $ds-btn-outlined__border-width: ds-metrics-border-width(x1);
|
|
|
135
130
|
border-color: $ds-color-border-primary;
|
|
136
131
|
}
|
|
137
132
|
}
|
|
133
|
+
|
|
134
|
+
.ds-icon-btn--on-media {
|
|
135
|
+
.ds-icon-btn__inner {
|
|
136
|
+
background-color: $ds-color-static-transparent-black;
|
|
137
|
+
border-color: transparent;
|
|
138
|
+
color: $ds-color-static-white;
|
|
139
|
+
}
|
|
140
|
+
&:disabled .ds-icon-btn__inner {
|
|
141
|
+
border-color: $ds-color-border-primary;
|
|
142
|
+
}
|
|
143
|
+
@include ds-hover() {
|
|
144
|
+
&:hover:not(.ds-loading) .ds-icon-btn__inner::before {
|
|
145
|
+
background-color: $ds-color-static-transparent-white-10;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
&:active:not(.ds-loading) .ds-icon-btn__inner::before {
|
|
149
|
+
background-color: $ds-color-static-transparent-white-10;
|
|
150
|
+
}
|
|
151
|
+
&:disabled:not(.ds-loading) .ds-icon-btn__inner {
|
|
152
|
+
color: $ds-color-static-white;
|
|
153
|
+
&::before {
|
|
154
|
+
background-color: transparent;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
&:focus-visible .ds-icon-btn__inner {
|
|
158
|
+
outline-color: $ds-color-static-white;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
- GitHub: [BonnierNews/dn-design-system/../web/src/components/icon-button-toggle](https://github.com/BonnierNews/dn-design-system/tree/main/web/src/components/icon-button-toggle)
|
|
2
|
+
- Storybook: [IconButton > Web](https://designsystem.dn.se/?path=/story/components-app-web-iconbutton-toggleiconbutton-web)
|
|
3
|
+
|
|
4
|
+
----
|
|
5
|
+
|
|
6
|
+
# Icon button toggle
|
|
7
|
+
|
|
8
|
+
## Parameters
|
|
9
|
+
|
|
10
|
+
|parameter | type | required | options | default | description |
|
|
11
|
+
|:--- | :--- | :--- | :--- | :--- | :--- |
|
|
12
|
+
|selected | bool | no | true, false | false | |
|
|
13
|
+
|iconName | String | yes | add, arrow_back, arrow_forward etc | | For all available icons see: https://designsystem.dn.se/?path=/story/foundations-icon-web--all |
|
|
14
|
+
|selectedIconName | String | yes | add, arrow_back, arrow_forward etc | | For all available icons see: https://designsystem.dn.se/?path=/story/foundations-icon-web--all |v
|
|
15
|
+
|disabled | bool | no | true, false | false | Note: only works on button-tag, not on a-tag |
|
|
16
|
+
|variant | String | no | outlined, transparent | outlined | Design variant |
|
|
17
|
+
|size| String | no | default, small, large | default | |
|
|
18
|
+
|loading | bool | no | true, false | false | |
|
|
19
|
+
|a11y.visuallyHidden | Object | no | | | Ex. a11y: { visuallyHidden: "Dela på TikTok" } |
|
|
20
|
+
|attributes | Object | no | | | Ex. { target: "_blank", "data-test": "lorem ipsum" } |
|
|
21
|
+
|classNames | String | no | | | Ex. "my-special-class" |
|
|
22
|
+
|forcePx | bool | no | true, false | false | Fixed pixel value is used for typography to prevent scaling based on html font-size
|
|
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-button-toggle/icon-button-toggle.njk' import IconButtonToggle %}
|
|
32
|
+
|
|
33
|
+
{{ IconButtonToggle({
|
|
34
|
+
variant: 'outlined',
|
|
35
|
+
size: 'default',
|
|
36
|
+
iconName: 'bookmarked',
|
|
37
|
+
selectedIconName: 'bookmark-fill'
|
|
38
|
+
})}}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### SCSS
|
|
42
|
+
```scss
|
|
43
|
+
@use "@bonniernews/dn-design-system-web/components/icon-button-toggle/icon-button-toggle";
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Javascript
|
|
47
|
+
|
|
48
|
+
```javascript
|
|
49
|
+
import dsIconButtonToggle from '@bonniernews/dn-design-system-web/components/icon-button-toggle/icon-button-toggle.js'
|
|
50
|
+
const toggleElements = Array.from(document.getElementsByClassName("ds-icon-btn-toggle"));
|
|
51
|
+
dsIconButtonToggle(toggleElements);
|
|
52
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export {
|
|
2
|
+
dsIconButtonToggle,
|
|
3
|
+
dsIconButtonToggleAll
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
function dsIconButtonToggle(toggleElements = []) {
|
|
7
|
+
if (!toggleElements.length) return;
|
|
8
|
+
toggleElements.forEach((toggleEl) => {
|
|
9
|
+
toggleEl.addEventListener("click", () => {
|
|
10
|
+
if (toggleEl.classList.contains("ds-icon-btn-toggle--disabled")) return;
|
|
11
|
+
toggleEl.classList.toggle("ds-icon-btn-toggle--selected");
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function dsIconButtonToggleAll() {
|
|
17
|
+
const toggleElements = Array.from(document.getElementsByClassName("ds-icon-btn-toggle"));
|
|
18
|
+
dsIconButtonToggle(toggleElements);
|
|
19
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{% from '@bonniernews/dn-design-system-web/foundations/icons/icon.njk' import Icon %}
|
|
2
|
+
{% from '@bonniernews/dn-design-system-web/foundations/a11y/visually-hidden.njk' import VisuallyHidden %}
|
|
3
|
+
{% from '@bonniernews/dn-design-system-web/components/spinner/spinner.njk' import Spinner %}
|
|
4
|
+
|
|
5
|
+
{% 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 %}
|
|
14
|
+
|
|
15
|
+
{% if params.selected %}
|
|
16
|
+
{% set variant = (variant.push(classNamePrefix + "selected"), variant) %}
|
|
17
|
+
{% endif %}
|
|
18
|
+
|
|
19
|
+
{% if params.forcePx %}
|
|
20
|
+
{% set variant = (variant.push("ds-force-px"), variant) %}
|
|
21
|
+
{% endif %}
|
|
22
|
+
|
|
23
|
+
{% if params.variant %}
|
|
24
|
+
{% set variant = (variant.push(classNamePrefix + params.variant), variant) %}
|
|
25
|
+
{% else %}
|
|
26
|
+
{% set variant = (variant.push(classNamePrefix + "outlined"), variant) %}
|
|
27
|
+
{% endif %}
|
|
28
|
+
|
|
29
|
+
{% if params.size and params.size != "default" %}
|
|
30
|
+
{% set variant = (variant.push(classNamePrefix + params.size), variant) %}
|
|
31
|
+
{% endif %}
|
|
32
|
+
|
|
33
|
+
{% set loadingHtml %}
|
|
34
|
+
{{ Spinner({ size: "small", variant: "primary", forcePx: params.forcePx }) }}
|
|
35
|
+
{% endset %}
|
|
36
|
+
|
|
37
|
+
{% if params.loading %}
|
|
38
|
+
{% set variant = (variant.push("ds-loading"), variant) %}
|
|
39
|
+
{% endif %}
|
|
40
|
+
|
|
41
|
+
{% if params.a11y and params.a11y.visuallyHidden %}
|
|
42
|
+
{% set visuallyHidden = VisuallyHidden({ text: params.a11y.visuallyHidden }) %}
|
|
43
|
+
{% endif %}
|
|
44
|
+
|
|
45
|
+
{% if params.classNames %}
|
|
46
|
+
{% set variant = (variant.push(params.classNames), variant) %}
|
|
47
|
+
{% endif%}
|
|
48
|
+
|
|
49
|
+
{% set classes = componentClassName + " " + variant | join(" ") %}
|
|
50
|
+
|
|
51
|
+
<button type="button" class="{{ classes }}" {{ "disabled" if params.disabled }} {{- attributes | safe }}>
|
|
52
|
+
{{- 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>
|
|
60
|
+
{{ loadingHtml | safe }}
|
|
61
|
+
</div>
|
|
62
|
+
</button>
|
|
63
|
+
{% endmacro %}
|