@swisspost/design-system-styles 8.2.2 → 8.3.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.
@@ -19,6 +19,7 @@
19
19
  @use 'form-select';
20
20
  @use 'form-textarea';
21
21
  @use 'datatable';
22
+ @use 'dialog';
22
23
  @use 'form-check';
23
24
  @use 'forms';
24
25
  @use 'grid';
@@ -0,0 +1 @@
1
+ dialog{box-shadow:1px 6px 8px rgba(0,0,0,.1),2px 8px 20px 8px rgba(0,0,0,.14);padding:0;min-width:min(389px,90vw);max-width:590px;max-height:90vh;overflow:auto;margin:revert;overscroll-behavior:contain;border:2px solid var(--post-contrast-color)}dialog::backdrop{background-color:rgba(0,0,0,.8);-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){dialog{border-width:2px}dialog::backdrop{background-image:linear-gradient(135deg, CanvasText 4.55%, transparent 4.55%, transparent 50%, CanvasText 50%, CanvasText 54.55%, transparent 54.55%, transparent 100%);background-size:22px 22px;-webkit-backdrop-filter:none;backdrop-filter:none;background-color:rgba(0,0,0,0);forced-color-adjust:none}}dialog[data-size=small]{min-width:296px;max-width:388px}dialog[data-size=large]{min-width:min(600px,90vw);max-width:792px}dialog[data-position=top]{top:2rem;bottom:auto}dialog[data-position=bottom]{top:auto;bottom:2rem}dialog>.dialog-grid{margin:1rem 1rem 0 1rem;display:grid;column-gap:1rem;grid-template-columns:auto 1fr auto;grid-template-areas:"icon header close-button" "icon body close-button" "controls controls controls";background-color:inherit}:where(.dialog-icon,.dialog-header,.dialog-body,.dialog-controls,.dialog-close):empty{display:none}.dialog-grid>post-icon{grid-area:icon;display:block;width:2rem;height:2rem}@media(min-width: 600px){dialog:not([size=small]) .dialog-grid>post-icon{width:3rem;height:3rem}}.dialog-header{grid-area:header;margin-top:0}.dialog-body{grid-area:body;margin-bottom:0}.dialog-body>*:last-child{margin-bottom:0}.dialog-controls{grid-area:controls;position:sticky;bottom:0;padding-block:1rem;display:flex;flex-wrap:wrap;flex-direction:row-reverse;gap:1rem;background-color:inherit}@media(max-width: 399.98px){.dialog-controls button{width:100%}}.dialog-grid>.btn-close{position:sticky;top:0;grid-area:close-button;width:1.5rem;height:1.5rem;min-height:0}dialog:not([data-animation=none]){--_dialog-transition-duration: var(--dialog-transition-duration, 0.5s);transform:scale(0.8);opacity:0;transition-property:transform,opacity,overlay,display;transition-behavior:allow-discrete;transition-duration:var(--_dialog-transition-duration);transition-timing-function:linear(0, 0.007, 0.029 2.2%, 0.118 4.7%, 0.625 14.4%, 0.826 19%, 0.902, 0.962, 1.008 26.1%, 1.041 28.7%, 1.064 32.1%, 1.07 36%, 1.061 40.5%, 1.015 53.4%, 0.999 61.6%, 0.995 71.2%, 1)}dialog:not([data-animation=none])::backdrop{opacity:0;transition:opacity var(--_dialog-transition-duration),overlay var(--_dialog-transition-duration) allow-discrete,display var(--_dialog-transition-duration) allow-discrete,-webkit-backdrop-filter var(--_dialog-transition-duration);transition:backdrop-filter var(--_dialog-transition-duration),opacity var(--_dialog-transition-duration),overlay var(--_dialog-transition-duration) allow-discrete,display var(--_dialog-transition-duration) allow-discrete;transition:backdrop-filter var(--_dialog-transition-duration),opacity var(--_dialog-transition-duration),overlay var(--_dialog-transition-duration) allow-discrete,display var(--_dialog-transition-duration) allow-discrete,-webkit-backdrop-filter var(--_dialog-transition-duration)}dialog:not([data-animation=none])[open]{transform:scale(1);opacity:1}@starting-style{dialog:not([data-animation=none])[open]{opacity:0;transform:scale(0.8)}}dialog:not([data-animation=none])[open]::backdrop{opacity:1;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}@starting-style{dialog:not([data-animation=none])[open]::backdrop{opacity:0;-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}}@media(forced-colors: active){dialog:not([data-animation=none])[open]::backdrop{-webkit-backdrop-filter:none;backdrop-filter:none}}dialog:not([data-animation=none])[data-animation=slide-in]{transform:translateY(calc(var(--_dialog-slide-in-offset)))}dialog:not([data-animation=none])[data-animation=slide-in][data-position=top]{--_dialog-slide-in-offset: -3rem}dialog:not([data-animation=none])[data-animation=slide-in][data-position=bottom]{--_dialog-slide-in-offset: 3rem}dialog:not([data-animation=none])[data-animation=slide-in][open]{transform:translateY(0)}@starting-style{dialog:not([data-animation=none])[data-animation=slide-in][open]{transform:translateY(calc(var(--_dialog-slide-in-offset)))}}
@@ -0,0 +1,249 @@
1
+ @use '../mixins/elevation';
2
+ @use '../mixins/utilities';
3
+ @use '../variables/spacing';
4
+ @use '../variables/color';
5
+ @use '../variables/animation';
6
+
7
+ @use './../themes/bootstrap/core' as *;
8
+
9
+ dialog {
10
+ @include elevation.elevation('elevation-5');
11
+
12
+ padding: 0;
13
+ min-width: min(389px, 90vw);
14
+ max-width: 590px;
15
+ max-height: 90vh;
16
+ overflow: auto;
17
+ margin: revert;
18
+ overscroll-behavior: contain;
19
+ border: 2px solid var(--post-contrast-color); // Ensures good contrast when bg is dark against dark backdrop
20
+
21
+ &::backdrop {
22
+ background-color: rgba(0, 0, 0, 0.8);
23
+ -webkit-backdrop-filter: blur(0);
24
+ backdrop-filter: blur(0);
25
+ }
26
+
27
+ @include utilities.high-contrast-mode {
28
+ // Show the border in HCM
29
+ border-width: 2px;
30
+
31
+ // Mark the backdrop as inactive in HCM
32
+ &::backdrop {
33
+ background-image: linear-gradient(
34
+ 135deg,
35
+ CanvasText 4.55%,
36
+ transparent 4.55%,
37
+ transparent 50%,
38
+ CanvasText 50%,
39
+ CanvasText 54.55%,
40
+ transparent 54.55%,
41
+ transparent 100%
42
+ );
43
+ background-size: 22px 22px;
44
+ -webkit-backdrop-filter: none;
45
+ backdrop-filter: none;
46
+ background-color: transparent;
47
+ forced-color-adjust: none;
48
+ }
49
+ }
50
+
51
+ // Sizes
52
+ // [small, medium (default), large]
53
+ &[data-size='small'] {
54
+ min-width: 296px;
55
+ max-width: 388px;
56
+ }
57
+
58
+ &[data-size='large'] {
59
+ min-width: min(600px, 90vw);
60
+ max-width: 792px;
61
+ }
62
+
63
+ // Positioning
64
+ // [top, center (default), bottom]
65
+ &[data-position='top'] {
66
+ top: 2rem;
67
+ bottom: auto;
68
+ }
69
+
70
+ &[data-position='bottom'] {
71
+ top: auto;
72
+ bottom: 2rem;
73
+ }
74
+ }
75
+
76
+ dialog > .dialog-grid {
77
+ margin: spacing.$size-regular spacing.$size-regular 0 spacing.$size-regular;
78
+ display: grid;
79
+ column-gap: spacing.$size-regular;
80
+ grid-template-columns: auto 1fr auto;
81
+ grid-template-areas:
82
+ 'icon header close-button'
83
+ 'icon body close-button'
84
+ 'controls controls controls';
85
+
86
+ // Propagate bg color to the controls
87
+ background-color: inherit;
88
+ }
89
+
90
+ :where(.dialog-icon, .dialog-header, .dialog-body, .dialog-controls, .dialog-close):empty {
91
+ display: none;
92
+ }
93
+
94
+ .dialog-grid > post-icon {
95
+ grid-area: icon;
96
+ display: block;
97
+
98
+ width: spacing.$size-big;
99
+ height: spacing.$size-big;
100
+
101
+ // Larger icon for bigger notification dialogs
102
+ dialog:not([size='small']) & {
103
+ @include media-breakpoint-up(rg) {
104
+ width: spacing.$size-small-huge;
105
+ height: spacing.$size-small-huge;
106
+ }
107
+ }
108
+ }
109
+
110
+ .dialog-header {
111
+ grid-area: header;
112
+ margin-top: 0;
113
+ }
114
+
115
+ .dialog-body {
116
+ grid-area: body;
117
+ margin-bottom: 0;
118
+
119
+ > *:last-child {
120
+ margin-bottom: 0;
121
+ }
122
+ }
123
+
124
+ .dialog-controls {
125
+ grid-area: controls;
126
+ position: sticky;
127
+ bottom: 0;
128
+ padding-block: spacing.$size-regular;
129
+ display: flex;
130
+ flex-wrap: wrap;
131
+ flex-direction: row-reverse;
132
+ gap: spacing.$size-regular;
133
+ background-color: inherit;
134
+
135
+ button {
136
+ @include media-breakpoint-down(sm) {
137
+ width: 100%;
138
+ }
139
+ }
140
+ }
141
+
142
+ .dialog-grid > .btn-close {
143
+ position: sticky;
144
+ top: 0;
145
+ grid-area: close-button;
146
+ width: spacing.$size-large;
147
+ height: spacing.$size-large;
148
+ min-height: 0;
149
+ }
150
+
151
+ // Animations
152
+ // [slide-in, pop-in, none]
153
+ // Progressively enhanced with currently experimental @starting-style which allows to animate stuff appearing in the top layer
154
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/@starting-style
155
+ dialog:not([data-animation='none']) {
156
+ --_dialog-transition-duration: var(--dialog-transition-duration, 0.5s);
157
+
158
+ transform: scale(0.8);
159
+ opacity: 0;
160
+ transition-property: transform, opacity, overlay, display;
161
+ transition-behavior: allow-discrete;
162
+ transition-duration: var(--_dialog-transition-duration);
163
+ transition-timing-function: linear(
164
+ 0,
165
+ 0.007,
166
+ 0.029 2.2%,
167
+ 0.118 4.7%,
168
+ 0.625 14.4%,
169
+ 0.826 19%,
170
+ 0.902,
171
+ 0.962,
172
+ 1.008 26.1%,
173
+ 1.041 28.7%,
174
+ 1.064 32.1%,
175
+ 1.07 36%,
176
+ 1.061 40.5%,
177
+ 1.015 53.4%,
178
+ 0.999 61.6%,
179
+ 0.995 71.2%,
180
+ 1
181
+ );
182
+
183
+ &::backdrop {
184
+ opacity: 0;
185
+ transition:
186
+ opacity var(--_dialog-transition-duration),
187
+ overlay var(--_dialog-transition-duration) allow-discrete,
188
+ display var(--_dialog-transition-duration) allow-discrete,
189
+ -webkit-backdrop-filter var(--_dialog-transition-duration);
190
+ transition:
191
+ backdrop-filter var(--_dialog-transition-duration),
192
+ opacity var(--_dialog-transition-duration),
193
+ overlay var(--_dialog-transition-duration) allow-discrete,
194
+ display var(--_dialog-transition-duration) allow-discrete;
195
+ transition:
196
+ backdrop-filter var(--_dialog-transition-duration),
197
+ opacity var(--_dialog-transition-duration),
198
+ overlay var(--_dialog-transition-duration) allow-discrete,
199
+ display var(--_dialog-transition-duration) allow-discrete,
200
+ -webkit-backdrop-filter var(--_dialog-transition-duration);
201
+ }
202
+
203
+ &[open] {
204
+ transform: scale(1);
205
+ opacity: 1;
206
+
207
+ @starting-style {
208
+ opacity: 0;
209
+ transform: scale(0.8);
210
+ }
211
+
212
+ &::backdrop {
213
+ opacity: 1;
214
+ -webkit-backdrop-filter: blur(10px);
215
+ backdrop-filter: blur(10px);
216
+
217
+ @starting-style {
218
+ opacity: 0;
219
+ -webkit-backdrop-filter: blur(0);
220
+ backdrop-filter: blur(0);
221
+ }
222
+
223
+ @media (forced-colors: active) {
224
+ -webkit-backdrop-filter: none;
225
+ backdrop-filter: none;
226
+ }
227
+ }
228
+ }
229
+
230
+ &[data-animation='slide-in'] {
231
+ &[data-position='top'] {
232
+ --_dialog-slide-in-offset: -3rem;
233
+ }
234
+
235
+ &[data-position='bottom'] {
236
+ --_dialog-slide-in-offset: 3rem;
237
+ }
238
+
239
+ transform: translateY(calc(var(--_dialog-slide-in-offset)));
240
+
241
+ &[open] {
242
+ transform: translateY(0);
243
+
244
+ @starting-style {
245
+ transform: translateY(calc(var(--_dialog-slide-in-offset)));
246
+ }
247
+ }
248
+ }
249
+ }