@danske/sapphire-css 50.1.0 → 51.0.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.
@@ -11,7 +11,7 @@
11
11
  white-space: nowrap;
12
12
  font-family: var(--sapphire-semantic-font-name-default);
13
13
  font-weight: var(--sapphire-semantic-font-weight-default-medium);
14
- font-size: var(--sapphire-semantic-size-font-body-md);
14
+ font-size: var(--sapphire-semantic-size-font-body-sm);
15
15
  font-style: normal;
16
16
  text-transform: capitalize;
17
17
 
@@ -31,6 +31,7 @@
31
31
 
32
32
  color: var(--sapphire-semantic-color-foreground-on-decorative-neutral);
33
33
  background: var(--sapphire-semantic-color-background-decorative-neutral);
34
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
34
35
  }
35
36
 
36
37
  /* Sizes */
@@ -39,14 +40,14 @@
39
40
  height: var(--sapphire-semantic-size-height-control-sm);
40
41
  width: var(--sapphire-semantic-size-height-control-sm);
41
42
  border-radius: var(--sapphire-semantic-size-height-control-sm);
42
- font-size: var(--sapphire-semantic-size-font-body-sm);
43
+ font-size: var(--sapphire-semantic-size-font-body-xs);
43
44
  }
44
45
 
45
46
  .sapphire-avatar--lg {
46
47
  height: var(--sapphire-semantic-size-height-control-lg);
47
48
  width: var(--sapphire-semantic-size-height-control-lg);
48
49
  border-radius: var(--sapphire-semantic-size-height-control-lg);
49
- font-size: var(--sapphire-global-size-font-125);
50
+ font-size: var(--sapphire-semantic-size-font-body-md);
50
51
  }
51
52
 
52
53
  /* Colors and variants */
@@ -31,6 +31,7 @@
31
31
 
32
32
  color: var(--sapphire-semantic-color-foreground-on-decorative-neutral);
33
33
  background: var(--sapphire-semantic-color-background-decorative-neutral);
34
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
34
35
  }
35
36
 
36
37
  /* Sizes */
@@ -49,6 +50,7 @@
49
50
  .sapphire-badge--secondary-positive {
50
51
  color: var(--sapphire-semantic-color-foreground-on-positive-subtle);
51
52
  background: var(--sapphire-semantic-color-background-positive-subtle);
53
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
52
54
  }
53
55
 
54
56
  .sapphire-badge--primary-negative {
@@ -59,6 +61,7 @@
59
61
  .sapphire-badge--secondary-negative {
60
62
  color: var(--sapphire-semantic-color-foreground-on-negative-subtle);
61
63
  background: var(--sapphire-semantic-color-background-negative-subtle);
64
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
62
65
  }
63
66
 
64
67
  .sapphire-badge--primary-warning {
@@ -69,6 +72,7 @@
69
72
  .sapphire-badge--secondary-warning {
70
73
  color: var(--sapphire-semantic-color-foreground-on-warning-subtle);
71
74
  background: var(--sapphire-semantic-color-background-warning-subtle);
75
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
72
76
  }
73
77
 
74
78
  .sapphire-badge--primary-informative {
@@ -79,6 +83,7 @@
79
83
  .sapphire-badge--secondary-informative {
80
84
  color: var(--sapphire-semantic-color-foreground-on-accent-subtle);
81
85
  background: var(--sapphire-semantic-color-background-accent-subtle);
86
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
82
87
  }
83
88
 
84
89
  /* decorative badges */
@@ -6,10 +6,26 @@
6
6
  justify-content: space-between;
7
7
  padding: var(--sapphire-semantic-size-spacing-md)
8
8
  var(--sapphire-semantic-size-spacing-xl);
9
- /* the bg color here is a hack until the design of this changes */
10
9
  background: var(--sapphire-semantic-color-background-neutral-subtle);
10
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
11
+
11
12
  position: sticky;
12
13
  top: 0;
13
14
  left: 0;
14
15
  z-index: 3;
15
16
  }
17
+
18
+ /* Firefox: backdrop-filter doesn't work on sticky elements inside overflow containers */
19
+ @supports (-moz-appearance: none) {
20
+ .sapphire-bulk-actions-bar {
21
+ background-color: var(--sapphire-semantic-color-background-surface);
22
+ }
23
+
24
+ .sapphire-bulk-actions-bar::before {
25
+ content: '';
26
+ position: absolute;
27
+ inset: 0;
28
+ z-index: -1;
29
+ background: var(--sapphire-semantic-color-background-neutral-subtle);
30
+ }
31
+ }
@@ -158,6 +158,8 @@ a.sapphire-button {
158
158
  --sapphire-semantic-color-background-action-secondary-default
159
159
  );
160
160
  color: var(--sapphire-semantic-color-foreground-action-on-secondary-default);
161
+
162
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
161
163
  }
162
164
 
163
165
  .sapphire-button--secondary:not(:disabled):not(.is-disabled):not(:active):not(
@@ -201,6 +203,7 @@ a.sapphire-button {
201
203
  ).is-hover {
202
204
  background: var(--sapphire-semantic-color-background-action-tertiary-hover);
203
205
  color: var(--sapphire-semantic-color-foreground-action-on-tertiary-hover);
206
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
204
207
  }
205
208
 
206
209
  .sapphire-button--tertiary.is-focus,
@@ -216,6 +219,7 @@ a.sapphire-button {
216
219
  ):focus-visible:active {
217
220
  background: var(--sapphire-semantic-color-background-action-tertiary-active);
218
221
  color: var(--sapphire-semantic-color-foreground-action-on-tertiary-active);
222
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
219
223
  }
220
224
 
221
225
  /* ## text */
@@ -282,6 +286,7 @@ a.sapphire-button {
282
286
  color: var(
283
287
  --sapphire-semantic-color-foreground-action-on-danger-secondary-default
284
288
  );
289
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
285
290
  }
286
291
 
287
292
  .sapphire-button--danger-secondary:not(:disabled):not(.is-disabled):not(
@@ -343,6 +348,7 @@ a.sapphire-button {
343
348
  color: var(
344
349
  --sapphire-semantic-color-foreground-action-on-danger-tertiary-hover
345
350
  );
351
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
346
352
  }
347
353
 
348
354
  .sapphire-button--danger-tertiary.is-focus,
@@ -366,6 +372,7 @@ a.sapphire-button {
366
372
  color: var(
367
373
  --sapphire-semantic-color-foreground-action-on-danger-tertiary-active
368
374
  );
375
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
369
376
  }
370
377
 
371
378
  /* ## Danger text */
@@ -123,6 +123,10 @@
123
123
  margin-left: var(--sapphire-semantic-size-spacing-sm);
124
124
  padding-top: var(--sapphire-semantic-size-spacing-2xs);
125
125
  padding-left: var(--sapphire-semantic-size-spacing-lg);
126
+ padding-right: var(--sapphire-semantic-size-spacing-lg);
127
+ }
128
+
129
+ .sapphire-calendar__table-container--md .sapphire-calendar__custom-ranges {
126
130
  padding-right: var(--sapphire-semantic-size-spacing-4xs);
127
131
  }
128
132
 
@@ -227,6 +231,7 @@
227
231
  .sapphire-calendar__button-text {
228
232
  background: var(--sapphire-semantic-color-background-action-tertiary-hover);
229
233
  transition-duration: var(--sapphire-semantic-time-fade-quick);
234
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
230
235
  }
231
236
 
232
237
  .sapphire-calendar__button:not(:disabled):not(.is-disabled).is-active
@@ -237,6 +242,7 @@
237
242
  .sapphire-calendar__button-text {
238
243
  background: var(--sapphire-semantic-color-background-action-tertiary-active);
239
244
  transition-duration: var(--sapphire-semantic-time-fade-quick);
245
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
240
246
  }
241
247
 
242
248
  .sapphire-calendar__table[aria-readonly='true'] .sapphire-calendar__button {
@@ -255,6 +261,7 @@
255
261
  background: var(
256
262
  --sapphire-semantic-color-background-action-select-secondary-default
257
263
  );
264
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
258
265
  }
259
266
 
260
267
  .sapphire-calendar__button.sapphire-calendar__button--range-selection:not(
@@ -420,7 +427,7 @@
420
427
 
421
428
  .sapphire-calendar__table-container--md
422
429
  .sapphire-calendar__button.sapphire-calendar__button--current::after {
423
- bottom: var(--sapphire-global-size-generic-10);
430
+ bottom: var(--sapphire-semantic-size-spacing-2xs);
424
431
  }
425
432
 
426
433
  .sapphire-calendar__button.sapphire-calendar__button--selected:not(
@@ -46,6 +46,12 @@
46
46
  var(--sapphire-dateField-icon-size);
47
47
  }
48
48
 
49
+ .sapphire-date-field--align-right.sapphire-date-field--no-calendar {
50
+ grid-template-columns:
51
+ var(--sapphire-dateField-icon-size)
52
+ auto;
53
+ }
54
+
49
55
  .sapphire-date-field--no-calendar {
50
56
  padding-left: var(--sapphire-semantic-size-spacing-control-horizontal-lg);
51
57
  }
@@ -56,6 +62,20 @@
56
62
  auto;
57
63
  }
58
64
 
65
+ .sapphire-date-field--align-right.sapphire-date-field--no-clear-button {
66
+ grid-template-columns:
67
+ auto
68
+ var(--sapphire-dateField-icon-size);
69
+ }
70
+
71
+ .sapphire-date-field--align-right .sapphire-date-field__input {
72
+ grid-column: 2;
73
+ }
74
+
75
+ .sapphire-date-field--align-right > .sapphire-date-field__button:last-child {
76
+ grid-column: 3;
77
+ }
78
+
59
79
  .sapphire-date-field--no-clear-button.sapphire-date-field--no-calendar {
60
80
  grid-template-columns: 1fr;
61
81
  }
@@ -66,7 +86,9 @@
66
86
 
67
87
  .sapphire-date-field__input-group {
68
88
  display: grid;
69
- grid-template-columns: min-content var(--sapphire-dateField-icon-size) min-content;
89
+ grid-template-columns:
90
+ min-content var(--sapphire-dateField-icon-size)
91
+ min-content;
70
92
  align-items: center;
71
93
  }
72
94
 
@@ -79,6 +101,10 @@
79
101
  font-weight: var(--sapphire-semantic-font-weight-default-regular);
80
102
  }
81
103
 
104
+ .sapphire-date-field__input--align-right {
105
+ justify-content: flex-end;
106
+ }
107
+
82
108
  .sapphire-date-field__range-separator {
83
109
  color: var(--sapphire-semantic-color-foreground-secondary);
84
110
  text-align: center;
@@ -1,10 +1,13 @@
1
1
  declare const styles: {
2
2
  readonly "sapphire-date-field": string;
3
3
  readonly "sapphire-date-field--no-calendar": string;
4
+ readonly "sapphire-date-field--align-right": string;
4
5
  readonly "sapphire-date-field--no-clear-button": string;
6
+ readonly "sapphire-date-field__input": string;
7
+ readonly "sapphire-date-field__button": string;
5
8
  readonly "sapphire-date-field--range": string;
6
9
  readonly "sapphire-date-field__input-group": string;
7
- readonly "sapphire-date-field__input": string;
10
+ readonly "sapphire-date-field__input--align-right": string;
8
11
  readonly "sapphire-date-field__range-separator": string;
9
12
  readonly "sapphire-date-field--md": string;
10
13
  readonly "is-disabled": string;
@@ -15,7 +18,6 @@ declare const styles: {
15
18
  readonly "sapphire-date-field--error": string;
16
19
  readonly "is-hover": string;
17
20
  readonly "js-hover": string;
18
- readonly "sapphire-date-field__button": string;
19
21
  readonly "sapphire-date-field__button--clear": string;
20
22
  readonly "sapphire-date-field__icon": string;
21
23
  readonly "is-active": string;
@@ -110,6 +110,7 @@
110
110
 
111
111
  .sapphire-dropzone--dropping {
112
112
  background: var(--sapphire-semantic-color-background-accent-subtle);
113
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
113
114
  }
114
115
 
115
116
  .sapphire-dropzone.sapphire-dropzone--dropping::before {
@@ -115,6 +115,7 @@ a.sapphire-icon-button {
115
115
  --sapphire-semantic-color-background-action-secondary-default
116
116
  );
117
117
  color: var(--sapphire-semantic-color-foreground-action-on-secondary-default);
118
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
118
119
  }
119
120
 
120
121
  .sapphire-icon-button--secondary:not(:disabled):not(.is-disabled):not(
@@ -158,6 +159,7 @@ a.sapphire-icon-button {
158
159
  ):not(.is-active).is-hover {
159
160
  background: var(--sapphire-semantic-color-background-action-tertiary-hover);
160
161
  color: var(--sapphire-semantic-color-foreground-action-on-tertiary-hover);
162
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
161
163
  }
162
164
 
163
165
  .sapphire-icon-button--tertiary.is-focus,
@@ -173,6 +175,7 @@ a.sapphire-icon-button {
173
175
  ):focus-visible:active {
174
176
  background: var(--sapphire-semantic-color-background-action-tertiary-active);
175
177
  color: var(--sapphire-semantic-color-foreground-action-on-tertiary-active);
178
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
176
179
  }
177
180
 
178
181
  /* Danger */
@@ -214,6 +217,7 @@ a.sapphire-icon-button {
214
217
  color: var(
215
218
  --sapphire-semantic-color-foreground-action-on-danger-secondary-default
216
219
  );
220
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
217
221
  }
218
222
 
219
223
  .sapphire-icon-button--danger-secondary:not(:disabled):not(.is-disabled):not(
@@ -277,6 +281,7 @@ a.sapphire-icon-button {
277
281
  color: var(
278
282
  --sapphire-semantic-color-foreground-action-on-danger-tertiary-hover
279
283
  );
284
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
280
285
  }
281
286
 
282
287
  .sapphire-icon-button--danger-tertiary.is-focus,
@@ -302,6 +307,7 @@ a.sapphire-icon-button {
302
307
  color: var(
303
308
  --sapphire-semantic-color-foreground-action-on-danger-tertiary-active
304
309
  );
310
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
305
311
  }
306
312
 
307
313
  /**
@@ -23,7 +23,6 @@
23
23
  color: var(--sapphire-semantic-color-foreground-action-link-default);
24
24
 
25
25
  text-decoration: underline;
26
- text-decoration-thickness: var(--sapphire-semantic-size-border-sm);
27
26
  }
28
27
 
29
28
  /* Disabled state for all variants */
@@ -91,6 +91,7 @@ instead of being applied on the list item itself */
91
91
  background: var(
92
92
  --sapphire-semantic-color-background-action-select-secondary-default
93
93
  );
94
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
94
95
  }
95
96
 
96
97
  .sapphire-list--negative-margin-self {
@@ -167,6 +168,7 @@ instead of being applied on the list item itself */
167
168
  [aria-disabled='true']
168
169
  ):not(:disabled):not(:active):not(:has(:focus-within)):hover {
169
170
  background: var(--sapphire-semantic-color-background-action-tertiary-hover);
171
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
170
172
  }
171
173
 
172
174
  .sapphire-list__item--selected.is-hover:not(.is-active):not(:has(.is-hover)),
@@ -176,6 +178,7 @@ instead of being applied on the list item itself */
176
178
  background: var(
177
179
  --sapphire-semantic-color-background-action-select-secondary-hover
178
180
  );
181
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
179
182
  }
180
183
 
181
184
  /*
@@ -208,6 +211,7 @@ the contentRight button, when it triggers a menu, does not get the active state.
208
211
  background-color: var(
209
212
  --sapphire-semantic-color-background-action-secondary-hover
210
213
  );
214
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
211
215
  }
212
216
 
213
217
  .sapphire-list__item--selected:not(.is-disabled).is-active:not(
@@ -219,6 +223,7 @@ the contentRight button, when it triggers a menu, does not get the active state.
219
223
  background-color: var(
220
224
  --sapphire-semantic-color-background-action-select-secondary-active
221
225
  );
226
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
222
227
  }
223
228
 
224
229
  .sapphire-list__item[aria-disabled='true']
@@ -232,6 +232,7 @@ Hence a separate class for checkmark icon to be used in the alignment styles */
232
232
  .sapphire-listbox__content {
233
233
  color: var(--sapphire-semantic-color-foreground-action-on-tertiary-hover);
234
234
  background: var(--sapphire-semantic-color-background-action-tertiary-hover);
235
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
235
236
  }
236
237
 
237
238
  .sapphire-listbox__item--danger:not(.is-disabled):not(.is-active).is-hover
@@ -243,6 +244,7 @@ Hence a separate class for checkmark icon to be used in the alignment styles */
243
244
  background: var(
244
245
  --sapphire-semantic-color-background-action-danger-tertiary-hover
245
246
  );
247
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
246
248
  }
247
249
 
248
250
  .sapphire-listbox__item--danger:not(.is-disabled):not(.is-active).is-hover
@@ -267,6 +269,7 @@ Hence a separate class for checkmark icon to be used in the alignment styles */
267
269
  .sapphire-listbox__item:not(.is-disabled).is-active .sapphire-listbox__content {
268
270
  color: var(--sapphire-semantic-color-foreground-action-on-tertiary-active);
269
271
  background: var(--sapphire-semantic-color-background-action-tertiary-active);
272
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
270
273
  }
271
274
 
272
275
  .sapphire-listbox__item--danger:not(.is-disabled).is-active
@@ -274,6 +277,7 @@ Hence a separate class for checkmark icon to be used in the alignment styles */
274
277
  background: var(
275
278
  --sapphire-semantic-color-background-action-danger-tertiary-active
276
279
  );
280
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
277
281
  }
278
282
 
279
283
  .sapphire-listbox__item--danger:not(.is-disabled).is-active
@@ -123,20 +123,25 @@
123
123
  );
124
124
  padding: 0 var(--sapphire-semantic-size-spacing-container-horizontal-md);
125
125
  min-height: var(--sapphire-global-size-generic-100);
126
- background-color: var(--sapphire-semantic-color-background-surface);
126
+ background: var(--sapphire-semantic-color-background-neutral-subtle);
127
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
127
128
  display: flex;
128
129
  align-items: center;
129
130
  position: sticky;
130
131
  top: 0;
131
132
  }
132
133
 
133
- /*
134
- * Fix for section semi-transparent background not looking good when scrolled.
135
- */
136
- .sapphire-modal-layout__section-title::before {
137
- content: '';
138
- background: var(--sapphire-semantic-color-background-neutral-subtle);
139
- position: absolute;
140
- inset: 0;
141
- z-index: -1;
134
+ /* Firefox: backdrop-filter doesn't work on sticky elements inside overflow containers */
135
+ @supports (-moz-appearance: none) {
136
+ .sapphire-modal-layout__section-title {
137
+ background-color: var(--sapphire-semantic-color-background-surface);
138
+ }
139
+
140
+ .sapphire-modal-layout__section-title::before {
141
+ content: '';
142
+ position: absolute;
143
+ inset: 0;
144
+ z-index: -1;
145
+ background: var(--sapphire-semantic-color-background-neutral-subtle);
146
+ }
142
147
  }
@@ -4,6 +4,7 @@
4
4
  width: 100%;
5
5
  overflow: hidden;
6
6
  background: var(--sapphire-semantic-color-background-progress-track);
7
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
7
8
  position: relative;
8
9
  }
9
10
 
@@ -20,6 +20,7 @@
20
20
  position: relative;
21
21
  height: 100%;
22
22
  background: var(--sapphire-semantic-color-background-segmented-control-track);
23
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
23
24
  border-radius: var(--sapphire-semantic-size-height-control-lg);
24
25
  padding: var(--sapphire-global-size-static-5);
25
26
  box-sizing: border-box;
@@ -29,12 +29,12 @@
29
29
  border: none;
30
30
  background: var(--sapphire-semantic-color-background-field);
31
31
  width: 100%;
32
- outline: 0;
32
+ outline: solid var(--sapphire-semantic-size-border-sm)
33
+ var(--sapphire-semantic-color-border-field-default);
34
+ outline-offset: calc(0px - var(--sapphire-semantic-size-border-sm));
33
35
  text-align: left;
34
36
  color: inherit;
35
37
  font-family: inherit;
36
- box-shadow: inset 0px 0px 0px var(--sapphire-semantic-size-border-sm)
37
- var(--sapphire-semantic-color-border-field-default);
38
38
  border-radius: var(--sapphire-semantic-size-radius-md);
39
39
  gap: var(--sapphire-semantic-size-spacing-sm);
40
40
  }
@@ -127,8 +127,9 @@
127
127
  * Error
128
128
  */
129
129
  .sapphire-select--error:not(.is-disabled) .sapphire-select__button {
130
- box-shadow: inset 0px 0px 0px 1px
130
+ outline: solid var(--sapphire-semantic-size-border-sm)
131
131
  var(--sapphire-semantic-color-border-negative-default);
132
+ outline-offset: calc(0px - var(--sapphire-semantic-size-border-sm));
132
133
  }
133
134
 
134
135
  /**
@@ -142,8 +143,9 @@
142
143
  .is-disabled
143
144
  ):not(.js-hover):hover
144
145
  .sapphire-select__button {
145
- box-shadow: inset 0px 0px 0px var(--sapphire-semantic-size-border-sm)
146
+ outline: solid var(--sapphire-semantic-size-border-sm)
146
147
  var(--sapphire-semantic-color-border-field-hover);
148
+ outline-offset: calc(0px - var(--sapphire-semantic-size-border-sm));
147
149
  }
148
150
 
149
151
  .sapphire-select:not(.is-disabled).is-hover .sapphire-select__icon-container,
@@ -156,13 +158,15 @@
156
158
  * Focus
157
159
  */
158
160
  .sapphire-select:not(.is-disabled).is-focus .sapphire-select__button {
159
- box-shadow: inset 0px 0px 0px var(--sapphire-semantic-size-focus-ring)
161
+ outline: solid var(--sapphire-semantic-size-focus-ring)
160
162
  var(--sapphire-semantic-color-focus-ring);
163
+ outline-offset: calc(0px - var(--sapphire-semantic-size-focus-ring));
161
164
  }
162
165
 
163
166
  .sapphire-select--error:not(.is-disabled).is-focus .sapphire-select__button {
164
- box-shadow: inset 0px 0px 0px var(--sapphire-semantic-size-focus-ring)
167
+ outline: solid var(--sapphire-semantic-size-focus-ring)
165
168
  var(--sapphire-semantic-color-border-negative-default);
169
+ outline-offset: calc(-1 * var(--sapphire-semantic-size-focus-ring));
166
170
  }
167
171
 
168
172
  .sapphire-select.is-disabled .sapphire-select__button {
@@ -82,6 +82,7 @@
82
82
  top: 0;
83
83
  left: 100%;
84
84
  height: 100%;
85
+ z-index: 10;
85
86
  border-right: var(--sapphire-semantic-size-border-sm) solid
86
87
  var(--sapphire-semantic-color-border-secondary);
87
88
  }
@@ -19,6 +19,7 @@
19
19
  display: block;
20
20
  position: absolute;
21
21
  background: var(--sapphire-semantic-color-background-progress-track);
22
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
22
23
  height: var(--sapphire-global-size-generic-10);
23
24
  border-radius: var(--sapphire-semantic-size-radius-sm);
24
25
  width: var(--sapphire-semantic-size-width-field);
@@ -80,11 +80,12 @@
80
80
  * knob track
81
81
  */
82
82
  .sapphire-switch-track {
83
- background: var(--sapphire-semantic-color-background-switch-default);
84
83
  box-sizing: border-box;
85
84
  position: relative;
86
85
  width: var(--sapphire-global-size-generic-110);
87
- transition: background var(--sapphire-semantic-time-motion-quick)
86
+ box-shadow: inset 0 0 0 var(--sapphire-semantic-size-border-sm)
87
+ var(--sapphire-semantic-color-border-field-default);
88
+ transition: box-shadow var(--sapphire-semantic-time-motion-quick)
88
89
  var(--sapphire-semantic-transitions-fade);
89
90
  height: var(--sapphire-semantic-size-height-control-xs);
90
91
  border-radius: calc(var(--sapphire-semantic-size-height-control-xs) / 2);
@@ -97,7 +98,8 @@
97
98
  .sapphire-switch-input:not(:disabled)
98
99
  ~ .sapphire-switch-track,
99
100
  .sapphire-switch:not(:active):not(.is-active).is-hover .sapphire-switch-track {
100
- background: var(--sapphire-semantic-color-background-switch-hover);
101
+ box-shadow: inset 0 0 0 var(--sapphire-semantic-size-border-sm)
102
+ var(--sapphire-semantic-color-border-field-hover);
101
103
  }
102
104
 
103
105
  /* active (unchecked) */
@@ -107,12 +109,14 @@
107
109
  .sapphire-switch.is-active
108
110
  .sapphire-switch-input:not(:disabled)
109
111
  ~ .sapphire-switch-track {
110
- background: var(--sapphire-semantic-color-background-switch-active);
112
+ box-shadow: inset 0 0 0 var(--sapphire-semantic-size-border-sm)
113
+ var(--sapphire-semantic-color-border-field-active);
111
114
  }
112
115
 
113
- /* default (unchecked) */
116
+ /* default (checked) */
114
117
  .sapphire-switch-input:checked ~ .sapphire-switch-track {
115
118
  background: var(--sapphire-semantic-color-background-action-select-default);
119
+ box-shadow: none;
116
120
  }
117
121
 
118
122
  /* hover (checked) */
@@ -123,6 +127,7 @@
123
127
  .sapphire-switch-input:checked
124
128
  ~ .sapphire-switch-track {
125
129
  background: var(--sapphire-semantic-color-background-action-select-hover);
130
+ box-shadow: none;
126
131
  }
127
132
 
128
133
  /* active (checked) */
@@ -133,6 +138,7 @@
133
138
  .sapphire-switch-input:not(:disabled):checked
134
139
  ~ .sapphire-switch-track {
135
140
  background: var(--sapphire-semantic-color-background-action-select-active);
141
+ box-shadow: none;
136
142
  }
137
143
 
138
144
  /* disabled */
@@ -158,16 +164,41 @@
158
164
  height: 100%;
159
165
  aspect-ratio: 1/1;
160
166
  border-radius: 50%;
161
- background: var(
162
- --sapphire-semantic-color-foreground-action-on-select-default
163
- );
167
+ background-color: var(--sapphire-semantic-color-border-field-default);
164
168
  background-clip: content-box;
165
169
  left: 0;
166
170
  transition: left var(--sapphire-semantic-time-motion-quick)
167
- var(--sapphire-semantic-transitions-dynamic);
171
+ var(--sapphire-semantic-transitions-dynamic),
172
+ background-color var(--sapphire-semantic-time-motion-quick)
173
+ var(--sapphire-semantic-transitions-fade);
174
+ }
175
+
176
+ /* hover (unchecked) */
177
+ .sapphire-switch:not(:active):not(.is-active):not(.js-hover):hover
178
+ .sapphire-switch-input:not(:disabled)
179
+ ~ .sapphire-switch-track::after,
180
+ .sapphire-switch:not(:active):not(.is-active).is-hover
181
+ .sapphire-switch-track::after {
182
+ background-color: var(--sapphire-semantic-color-border-field-hover);
168
183
  }
184
+
185
+ /* active (unchecked) */
186
+ .sapphire-switch:active
187
+ .sapphire-switch-input:not(:disabled)
188
+ ~ .sapphire-switch-track::after,
189
+ .sapphire-switch.is-active
190
+ .sapphire-switch-input:not(:disabled)
191
+ ~ .sapphire-switch-track::after {
192
+ background-color: var(--sapphire-semantic-color-border-field-active);
193
+ }
194
+
169
195
  .sapphire-switch-input:checked ~ .sapphire-switch-track::after {
170
196
  left: calc(100% - var(--sapphire-semantic-size-height-control-xs));
197
+
198
+ /* override hover and active states from unchecked state style */
199
+ background-color: var(
200
+ --sapphire-semantic-color-foreground-action-on-select-default
201
+ ) !important;
171
202
  }
172
203
 
173
204
  .sapphire-switch--md .sapphire-switch-track {
@@ -173,6 +173,7 @@
173
173
 
174
174
  .sapphire-table__headCell.sapphire-table__headCell--sortable {
175
175
  cursor: pointer;
176
+ user-select: none;
176
177
  }
177
178
 
178
179
  .sapphire-table__headCell--sortable:not(sapphire-table__headCell--sorted):hover
@@ -223,6 +224,7 @@
223
224
  }
224
225
 
225
226
  /* Overflow behaviour */
227
+ /* @deprecated in favor of TruncateOverflow */
226
228
  .sapphire-table__cell--ellipsed,
227
229
  .sapphire-table__headCell_content--ellipsed,
228
230
  .sapphire-table__cell--ellipsed .sapphire-table__cell-contents {
@@ -261,6 +263,7 @@
261
263
  padding: var(--sapphire-table-cell-spacing-v)
262
264
  var(--sapphire-table-cell-spacing-h);
263
265
  box-sizing: content-box;
266
+ text-align: center;
264
267
  }
265
268
  .sapphire-table__head .sapphire-table__selectionCell {
266
269
  padding: var(--sapphire-semantic-size-spacing-2xs)
@@ -326,14 +329,23 @@ th.sapphire-table__selectionCell:first-child {
326
329
  );
327
330
  }
328
331
 
329
- .sapphire-table--interactive .sapphire-table__row--active {
332
+ /* Applied only when the "action" on rows is disabled. If only selection is disabled, only the checkbox should be disabled */
333
+ .sapphire-table__row.is-disabled:not(.sapphire-table__row--selected)
334
+ .sapphire-table__cell {
335
+ opacity: var(--sapphire-semantic-opacity-disabled);
336
+ }
337
+
338
+ .sapphire-table--interactive .sapphire-table__row--active,
339
+ .sapphire-table__row--interactive.sapphire-table__row--active {
330
340
  --sapphire-table-row-bg-active: var(
331
341
  --sapphire-semantic-color-background-action-tertiary-active
332
342
  );
343
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
333
344
  }
334
345
 
335
346
  .sapphire-table--interactive
336
- .sapphire-table__row--selected.sapphire-table__row--active {
347
+ .sapphire-table__row--selected.sapphire-table__row--active,
348
+ .sapphire-table__row--interactive.sapphire-table__row--selected.sapphire-table__row--active {
337
349
  --sapphire-table-row-bg-active: var(
338
350
  /* using hover color for active here is intentional, and to avoid too many color changes when selecting rows */
339
351
  --sapphire-semantic-color-background-action-select-secondary-hover
@@ -344,6 +356,7 @@ th.sapphire-table__selectionCell:first-child {
344
356
  --sapphire-table-row-bg: var(
345
357
  --sapphire-semantic-color-background-action-select-secondary-default
346
358
  );
359
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
347
360
  }
348
361
 
349
362
  /**
@@ -361,16 +374,60 @@ th.sapphire-table__selectionCell:first-child {
361
374
  }
362
375
 
363
376
  .sapphire-table__row-expand-button {
364
- display: inline-flex; /* for transform to take effect */
365
- transition: transform var(--sapphire-semantic-transitions-dynamic)
366
- var(--sapphire-semantic-time-motion-quick);
377
+ display: inline-flex;
378
+ height: var(--sapphire-semantic-size-icon-md);
379
+ width: var(--sapphire-semantic-size-icon-md);
380
+ vertical-align: middle;
381
+ justify-content: center;
382
+ align-items: center;
383
+ margin-right: var(--sapphire-semantic-size-spacing-sm);
384
+ }
385
+ /* the following rule is not yet properly supported. When that's widely supported, we can remove the specific rules */
386
+ .sapphire-table__row[aria-level] {
387
+ --sapphire-table-row-level: attr(aria-level, number);
388
+ }
389
+ .sapphire-table__row[aria-level='1'] {
390
+ --sapphire-table-row-level: 1;
391
+ }
392
+ .sapphire-table__row[aria-level='2'] {
393
+ --sapphire-table-row-level: 2;
394
+ }
395
+ .sapphire-table__row[aria-level='3'] {
396
+ --sapphire-table-row-level: 3;
397
+ }
398
+ .sapphire-table__row[aria-level='4'] {
399
+ --sapphire-table-row-level: 4;
400
+ }
401
+ .sapphire-table__row[aria-level='5'] {
402
+ --sapphire-table-row-level: 5;
367
403
  }
368
404
 
369
- .sapphire-table td:has(.sapphire-table__row-expand-button) {
370
- width: 0; /* To prevent the cell from growing more than needed. only needed when td is used for cells */
405
+ /* tree column renders expand/collapse icon and is indented based on row level */
406
+ .sapphire-table__cell--tree {
407
+ /* the unit of indentation for nested rows. */
408
+ /* Important: this should match the width+margin-right of .sapphire-table__row-expand-button for expandable/non-expandable siblings to align. */
409
+ --sapphire-table-indent-unit: calc(
410
+ var(--sapphire-semantic-size-icon-md) +
411
+ var(--sapphire-semantic-size-spacing-sm)
412
+ );
413
+ --sapphire-table-cell-indent-count: calc(var(--sapphire-table-row-level) - 1);
414
+ padding-left: calc(
415
+ var(--sapphire-table-cell-spacing-h) +
416
+ calc(
417
+ var(--sapphire-table-cell-indent-count) *
418
+ var(--sapphire-table-indent-unit)
419
+ )
420
+ );
421
+ }
422
+ .sapphire-table__cell--tree:not(:has(.sapphire-table__row-expand-button)) {
423
+ --sapphire-table-cell-indent-count: var(--sapphire-table-row-level);
371
424
  }
372
425
 
373
- .sapphire-table__row--expanded .sapphire-table__row-expand-button {
426
+ .sapphire-table__row-expand-button svg {
427
+ transition: transform var(--sapphire-semantic-transitions-dynamic)
428
+ var(--sapphire-semantic-time-motion-quick);
429
+ }
430
+ .sapphire-table__row-expand-button--expanded svg {
374
431
  transform: rotate(180deg);
375
432
  }
376
433
 
@@ -400,6 +457,7 @@ th.sapphire-table__selectionCell:first-child {
400
457
  );
401
458
  color: var(--sapphire-semantic-color-foreground-action-on-tertiary-hover);
402
459
  cursor: pointer;
460
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
403
461
  }
404
462
 
405
463
  .sapphire-table--interactive
@@ -419,6 +477,7 @@ th.sapphire-table__selectionCell:first-child {
419
477
  --sapphire-table-row-bg: var(
420
478
  --sapphire-semantic-color-background-action-highlight
421
479
  );
480
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
422
481
  }
423
482
 
424
483
  /* TODO remove tbody in v6 */
@@ -501,12 +560,12 @@ tbody .sapphire-table__row--highlighted > .sapphire-table__cell:first-child {
501
560
  /* Making sure the button does not change the row height */
502
561
  margin-top: calc(-1 * var(--sapphire-semantic-size-spacing-2xs));
503
562
  margin-bottom: calc(-1 * var(--sapphire-semantic-size-spacing-2xs));
504
- visibility: hidden;
563
+ opacity: 0;
505
564
  flex-shrink: 0;
506
565
  }
507
566
 
508
567
  .sapphire-table__row.is-hover .sapphire-table__edit-button,
509
568
  .sapphire-table__row:hover .sapphire-table__edit-button,
510
569
  .sapphire-table__row:focus-within .sapphire-table__edit-button {
511
- visibility: visible;
570
+ opacity: 1;
512
571
  }
@@ -32,13 +32,16 @@ declare const styles: {
32
32
  readonly "sapphire-table__table--spacing-lg": string;
33
33
  readonly "sapphire-table__table--spacing-xl": string;
34
34
  readonly "sapphire-table__tfoot": string;
35
+ readonly "is-disabled": string;
36
+ readonly "sapphire-table__row--selected": string;
35
37
  readonly "sapphire-table--interactive": string;
36
38
  readonly "sapphire-table__row--active": string;
37
- readonly "sapphire-table__row--selected": string;
39
+ readonly "sapphire-table__row--interactive": string;
38
40
  readonly "sapphire-table__row--expanded": string;
39
41
  readonly "sapphire-table__row-expand-button": string;
42
+ readonly "sapphire-table__cell--tree": string;
43
+ readonly "sapphire-table__row-expand-button--expanded": string;
40
44
  readonly "sapphire-table--without-last-divider": string;
41
- readonly "sapphire-table__row--interactive": string;
42
45
  readonly "sapphire-table__row--highlighted": string;
43
46
  readonly "sapphire-table__footer": string;
44
47
  readonly "sapphire-table__footer--sticky": string;
@@ -171,6 +171,7 @@
171
171
  .is-active
172
172
  ):not(.sapphire-tabs__tab--active).is-hover {
173
173
  background: var(--sapphire-semantic-color-background-action-tertiary-hover);
174
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
174
175
  }
175
176
 
176
177
  .sapphire-tabs__tab--active:not(:disabled):not(.is-disabled):not(
@@ -178,11 +179,13 @@
178
179
  ):hover,
179
180
  .sapphire-tabs__tab--active:not(:disabled):not(.is-disabled).is-hover {
180
181
  background: var(--sapphire-semantic-color-state-accent-subtle-hover);
182
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
181
183
  }
182
184
 
183
185
  .sapphire-tabs__tab:not(:disabled):not(.is-disabled):active,
184
186
  .sapphire-tabs__tab:not(:disabled):not(.is-disabled):focus-visible:active {
185
187
  background: var(--sapphire-semantic-color-background-action-tertiary-active);
188
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
186
189
  }
187
190
 
188
191
  .sapphire-tabs__tab--active:active:not(:disabled):not(.is-disabled):not(
@@ -190,6 +193,7 @@
190
193
  ):hover,
191
194
  .sapphire-tabs__tab--active:active:not(:disabled):not(.is-disabled).is-hover {
192
195
  background: var(--sapphire-semantic-color-state-accent-subtle-active);
196
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
193
197
  }
194
198
 
195
199
  .sapphire-tabs__tab.js-focus.is-focus,
@@ -81,12 +81,14 @@
81
81
  background: var(--sapphire-semantic-color-background-action-tertiary-hover);
82
82
  color: var(--sapphire-semantic-color-foreground-action-on-tertiary-hover);
83
83
  cursor: pointer;
84
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
84
85
  }
85
86
 
86
87
  .sapphire-tag--actionable.is-active {
87
88
  background: var(--sapphire-semantic-color-background-action-tertiary-active);
88
89
  color: var(--sapphire-semantic-color-foreground-action-on-tertiary-active);
89
90
  cursor: pointer;
91
+ backdrop-filter: var(--sapphire-semantic-backdrop-filter-blur);
90
92
  }
91
93
 
92
94
  .sapphire-tag:disabled,
@@ -0,0 +1,7 @@
1
+ .sapphire-truncate-overflow {
2
+ display: block;
3
+ white-space: nowrap;
4
+ overflow: hidden;
5
+ text-overflow: ellipsis;
6
+ max-width: 100%;
7
+ }
@@ -0,0 +1,5 @@
1
+ declare const styles: {
2
+ readonly "sapphire-truncate-overflow": string;
3
+ };
4
+ export = styles;
5
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danske/sapphire-css",
3
- "version": "50.1.0",
3
+ "version": "51.0.0",
4
4
  "description": "CSS implementation of the Sapphire Design System from Danske Bank A/S",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "sideEffects": false,
@@ -38,7 +38,8 @@
38
38
  "build:themes": "yarn build:themes:esm && yarn build:themes:cjs",
39
39
  "build:themes:esm": "tsc -p tsconfig.themes.json --module ES2020 --outDir build/themes/esm && tsc -p tsconfig.themes.json --module ES2020 --outDir themes",
40
40
  "build:themes:cjs": "tsc -p tsconfig.themes.json --module CommonJS --outDir build/themes/cjs && tsc -p tsconfig.themes.json --module CommonJS",
41
- "prepare": "yarn run build"
41
+ "prepare": "yarn run build",
42
+ "postpublish": "node ../../../scripts/append-release-notes.js"
42
43
  },
43
44
  "devDependencies": {
44
45
  "@babel/core": "^7.20.12",
@@ -46,7 +47,7 @@
46
47
  "@babel/preset-react": "^7.18.6",
47
48
  "@babel/preset-typescript": "^7.18.6",
48
49
  "@danske/sapphire-icons": "^3.1.0",
49
- "@danske/sapphire-react": "^5.0.1",
50
+ "@danske/sapphire-react": "^5.17.2",
50
51
  "@mdx-js/react": "^1.6.22",
51
52
  "@storybook/addon-essentials": "^6.5.13",
52
53
  "@storybook/addon-links": "^6.5.13",
@@ -67,7 +68,7 @@
67
68
  "typescript": "~4.6.4"
68
69
  },
69
70
  "dependencies": {
70
- "@danske/sapphire-design-tokens": "^42.4.0"
71
+ "@danske/sapphire-design-tokens": "^42.5.0"
71
72
  },
72
- "gitHead": "6e7cb3028dc134adc624e161700df8cb3bc3bfb7"
73
+ "gitHead": "4903f9d28140b74e3e42467f790174d7f977f15d"
73
74
  }