@db-ux/core-components 3.1.20 → 4.0.1

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 CHANGED
@@ -1,5 +1,21 @@
1
1
  # @db-ux/core-components
2
2
 
3
+ ## 4.0.1
4
+
5
+ _version bump_
6
+
7
+
8
+ ## 4.0.0
9
+
10
+ ### Major Changes
11
+
12
+ - feat: Switch stable rework - [see commit cb2deb0](https://github.com/db-ux-design-system/core-web/commit/cb2deb0f1c54900d1967483aea05d81279c02f59):
13
+ - **BREAKING CHANGE**: remove `emphasis` property
14
+ - introduce validation (invalid and valid)
15
+ - configurable label position
16
+
17
+ - **BREAKING CHANGE**: refactor(Custom Select): renamed `ariaListLabel` property to `listLabel` - [see commit 966d5ad](https://github.com/db-ux-design-system/core-web/commit/966d5ad01f00d0ca1707cc316a63e2d431fff1e9)
18
+
3
19
  ## 3.1.20
4
20
 
5
21
  ### Patch Changes
@@ -161,7 +161,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
161
161
  overflow: clip;
162
162
  vertical-align: var(--db-icon-vertical-align, middle);
163
163
  block-size: var(--db-icon-font-size, 1.5rem);
164
- inline-size: var(--db-icon-font-size, 1.5rem);
164
+ aspect-ratio: 1;
165
+ flex-shrink: 0;
165
166
  content: var(--db-icon, attr(data-icon));
166
167
  }
167
168
  @supports (content: ""/"") {
@@ -82,7 +82,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
82
82
  overflow: clip;
83
83
  vertical-align: var(--db-icon-vertical-align, middle);
84
84
  block-size: var(--db-icon-font-size, 1.5rem);
85
- inline-size: var(--db-icon-font-size, 1.5rem);
85
+ aspect-ratio: 1;
86
+ flex-shrink: 0;
86
87
  content: var(--db-icon, attr(data-icon));
87
88
  }
88
89
  @supports (content: ""/"") {
@@ -294,6 +295,9 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
294
295
  --db-adaptive-on-bg-basic-emphasis-100-pressed: var(
295
296
  --db-successful-on-bg-basic-emphasis-80-pressed
296
297
  );
298
+ --db-adaptive-on-bg-inverted-default: var(
299
+ --db-successful-on-bg-inverted-default
300
+ );
297
301
  }
298
302
  .db-checkbox:has(input:not([data-custom-validity]):required:user-valid):has(.db-infotext[data-semantic=successful]) > db-infotext > .db-infotext,
299
303
  .db-checkbox:has(input:not([data-custom-validity]):required:user-valid):has(.db-infotext[data-semantic=successful]) > .db-infotext {
@@ -319,15 +323,14 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
319
323
  );
320
324
  }
321
325
  .db-checkbox:has(input:not([data-custom-validity]):required:user-valid):has(.db-infotext[data-semantic=successful]) input:checked {
322
- --db-icon-color: var(--db-successful-on-bg-inverted-default);
323
326
  --db-adaptive-bg-basic-transparent-full-default: var(
324
- --db-successful-bg-inverted-contrast-high-default
327
+ --db-successful-bg-inverted-contrast-low-default
325
328
  );
326
329
  --db-adaptive-bg-basic-transparent-full-hovered: var(
327
- --db-successful-bg-inverted-contrast-high-hovered
330
+ --db-successful-bg-inverted-contrast-low-hovered
328
331
  );
329
332
  --db-adaptive-bg-basic-transparent-full-pressed: var(
330
- --db-successful-bg-inverted-contrast-high-pressed
333
+ --db-successful-bg-inverted-contrast-low-pressed
331
334
  );
332
335
  }
333
336
  .db-checkbox:has(input[data-custom-validity=valid]):has(.db-infotext[data-semantic=successful]), .db-checkbox[data-custom-validity=valid]:has(.db-infotext[data-semantic=successful]) {
@@ -343,6 +346,9 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
343
346
  --db-adaptive-on-bg-basic-emphasis-100-pressed: var(
344
347
  --db-successful-on-bg-basic-emphasis-80-pressed
345
348
  );
349
+ --db-adaptive-on-bg-inverted-default: var(
350
+ --db-successful-on-bg-inverted-default
351
+ );
346
352
  }
347
353
  .db-checkbox:has(input[data-custom-validity=valid]):has(.db-infotext[data-semantic=successful]) > db-infotext > .db-infotext,
348
354
  .db-checkbox:has(input[data-custom-validity=valid]):has(.db-infotext[data-semantic=successful]) > .db-infotext, .db-checkbox[data-custom-validity=valid]:has(.db-infotext[data-semantic=successful]) > db-infotext > .db-infotext,
@@ -371,15 +377,14 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
371
377
  );
372
378
  }
373
379
  .db-checkbox:has(input[data-custom-validity=valid]):has(.db-infotext[data-semantic=successful]) input:checked, .db-checkbox[data-custom-validity=valid]:has(.db-infotext[data-semantic=successful]) input:checked {
374
- --db-icon-color: var(--db-successful-on-bg-inverted-default);
375
380
  --db-adaptive-bg-basic-transparent-full-default: var(
376
- --db-successful-bg-inverted-contrast-high-default
381
+ --db-successful-bg-inverted-contrast-low-default
377
382
  );
378
383
  --db-adaptive-bg-basic-transparent-full-hovered: var(
379
- --db-successful-bg-inverted-contrast-high-hovered
384
+ --db-successful-bg-inverted-contrast-low-hovered
380
385
  );
381
386
  --db-adaptive-bg-basic-transparent-full-pressed: var(
382
- --db-successful-bg-inverted-contrast-high-pressed
387
+ --db-successful-bg-inverted-contrast-low-pressed
383
388
  );
384
389
  }
385
390
  .db-checkbox:has(input:not([data-custom-validity]):required:user-invalid) {
@@ -395,6 +400,9 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
395
400
  --db-adaptive-on-bg-basic-emphasis-100-pressed: var(
396
401
  --db-critical-on-bg-basic-emphasis-80-pressed
397
402
  );
403
+ --db-adaptive-on-bg-inverted-default: var(
404
+ --db-critical-on-bg-inverted-default
405
+ );
398
406
  }
399
407
  .db-checkbox:has(input:not([data-custom-validity]):required:user-invalid) > db-infotext > .db-infotext[data-semantic=critical]:not([hidden]),
400
408
  .db-checkbox:has(input:not([data-custom-validity]):required:user-invalid) > .db-infotext[data-semantic=critical]:not([hidden]) {
@@ -416,15 +424,14 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
416
424
  );
417
425
  }
418
426
  .db-checkbox:has(input:not([data-custom-validity]):required:user-invalid) input:checked {
419
- --db-icon-color: var(--db-critical-on-bg-inverted-default);
420
427
  --db-adaptive-bg-basic-transparent-full-default: var(
421
- --db-critical-bg-inverted-contrast-high-default
428
+ --db-critical-bg-inverted-contrast-low-default
422
429
  );
423
430
  --db-adaptive-bg-basic-transparent-full-hovered: var(
424
- --db-critical-bg-inverted-contrast-high-hovered
431
+ --db-critical-bg-inverted-contrast-low-hovered
425
432
  );
426
433
  --db-adaptive-bg-basic-transparent-full-pressed: var(
427
- --db-critical-bg-inverted-contrast-high-pressed
434
+ --db-critical-bg-inverted-contrast-low-pressed
428
435
  );
429
436
  }
430
437
  .db-checkbox:has(input[data-custom-validity=invalid]), .db-checkbox[data-custom-validity=invalid] {
@@ -440,6 +447,9 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
440
447
  --db-adaptive-on-bg-basic-emphasis-100-pressed: var(
441
448
  --db-critical-on-bg-basic-emphasis-80-pressed
442
449
  );
450
+ --db-adaptive-on-bg-inverted-default: var(
451
+ --db-critical-on-bg-inverted-default
452
+ );
443
453
  }
444
454
  .db-checkbox:has(input[data-custom-validity=invalid]) > db-infotext > .db-infotext[data-semantic=critical]:not([hidden]),
445
455
  .db-checkbox:has(input[data-custom-validity=invalid]) > .db-infotext[data-semantic=critical]:not([hidden]), .db-checkbox[data-custom-validity=invalid] > db-infotext > .db-infotext[data-semantic=critical]:not([hidden]),
@@ -463,15 +473,14 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
463
473
  );
464
474
  }
465
475
  .db-checkbox:has(input[data-custom-validity=invalid]) input:checked, .db-checkbox[data-custom-validity=invalid] input:checked {
466
- --db-icon-color: var(--db-critical-on-bg-inverted-default);
467
476
  --db-adaptive-bg-basic-transparent-full-default: var(
468
- --db-critical-bg-inverted-contrast-high-default
477
+ --db-critical-bg-inverted-contrast-low-default
469
478
  );
470
479
  --db-adaptive-bg-basic-transparent-full-hovered: var(
471
- --db-critical-bg-inverted-contrast-high-hovered
480
+ --db-critical-bg-inverted-contrast-low-hovered
472
481
  );
473
482
  --db-adaptive-bg-basic-transparent-full-pressed: var(
474
- --db-critical-bg-inverted-contrast-high-pressed
483
+ --db-critical-bg-inverted-contrast-low-pressed
475
484
  );
476
485
  }
477
486
  .db-checkbox input {
@@ -24,56 +24,6 @@
24
24
  }
25
25
  }
26
26
 
27
- @mixin get-validity-color-check($key: "valid") {
28
- $variant: successful;
29
-
30
- @if $key != "valid" {
31
- $variant: critical;
32
- }
33
-
34
- --db-check-element-border-color: var(
35
- --db-#{$variant}-on-bg-basic-emphasis-70-default
36
- );
37
- --db-adaptive-on-bg-basic-emphasis-100-default: var(
38
- --db-#{$variant}-on-bg-basic-emphasis-80-default
39
- );
40
- --db-adaptive-on-bg-basic-emphasis-100-hovered: var(
41
- --db-#{$variant}-on-bg-basic-emphasis-80-hovered
42
- );
43
- --db-adaptive-on-bg-basic-emphasis-100-pressed: var(
44
- --db-#{$variant}-on-bg-basic-emphasis-80-pressed
45
- );
46
-
47
- @include form-components.get-validity-message($key);
48
-
49
- input {
50
- &:not(:checked) {
51
- --db-adaptive-bg-basic-transparent-full-default: var(
52
- --db-#{$variant}-bg-basic-transparent-full-default
53
- );
54
- --db-adaptive-bg-basic-transparent-full-hovered: var(
55
- --db-#{$variant}-bg-basic-transparent-full-hovered
56
- );
57
- --db-adaptive-bg-basic-transparent-full-pressed: var(
58
- --db-#{$variant}-bg-basic-transparent-full-pressed
59
- );
60
- }
61
-
62
- &:checked {
63
- --db-icon-color: var(--db-#{$variant}-on-bg-inverted-default);
64
- --db-adaptive-bg-basic-transparent-full-default: var(
65
- --db-#{$variant}-bg-inverted-contrast-high-default
66
- );
67
- --db-adaptive-bg-basic-transparent-full-hovered: var(
68
- --db-#{$variant}-bg-inverted-contrast-high-hovered
69
- );
70
- --db-adaptive-bg-basic-transparent-full-pressed: var(
71
- --db-#{$variant}-bg-inverted-contrast-high-pressed
72
- );
73
- }
74
- }
75
- }
76
-
77
27
  .db-checkbox {
78
28
  @extend %helper-message;
79
29
  @include form-components.set-default-check-element;
@@ -85,12 +35,12 @@
85
35
 
86
36
  @include form-components.get-validity(check) {
87
37
  &:has(.db-infotext[data-semantic="successful"]) {
88
- @include get-validity-color-check("valid");
38
+ @include form-components.get-validity-color-checkbox("valid");
89
39
  }
90
40
  }
91
41
 
92
42
  @include form-components.get-validity(check, "invalid") {
93
- @include get-validity-color-check("invalid");
43
+ @include form-components.get-validity-color-checkbox("invalid");
94
44
  }
95
45
 
96
46
  input {
@@ -551,7 +551,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
551
551
  overflow: clip;
552
552
  vertical-align: var(--db-icon-vertical-align, middle);
553
553
  block-size: var(--db-icon-font-size, 1.5rem);
554
- inline-size: var(--db-icon-font-size, 1.5rem);
554
+ aspect-ratio: 1;
555
+ flex-shrink: 0;
555
556
  content: var(--db-icon, attr(data-icon));
556
557
  }
557
558
  @supports (content: ""/"") {
@@ -850,6 +851,14 @@ dialog:not([data-backdrop=none])[data-backdrop=weak]::backdrop, dialog:not([data
850
851
  transition: none;
851
852
  opacity: 0;
852
853
  }
854
+ .db-custom-select[data-variant=floating] summary:is([type=date],
855
+ [type=datetime-local],
856
+ [type=month],
857
+ [type=week],
858
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
859
+ transition: none;
860
+ opacity: 0;
861
+ }
853
862
  .db-custom-select[data-variant=floating] summary {
854
863
  /* stylelint-disable-next-line db-ux/use-spacings */
855
864
  padding-block-start: var(--db-base-body-icon-font-size-2xs);
@@ -893,6 +902,34 @@ input[type=radio]:checked) [id$=-placeholder] {
893
902
  transition: opacity var(--db-transition-straight-emotional);
894
903
  }
895
904
  }
905
+ .db-custom-select[data-variant=floating]:has(summary:focus-within,
906
+ summary:is(input, textarea):not(:placeholder-shown),
907
+ > select option:checked:not(.placeholder),
908
+ input[type=checkbox]:checked,
909
+ input[type=radio]:checked) summary:is([type=date],
910
+ [type=datetime-local],
911
+ [type=month],
912
+ [type=week],
913
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
914
+ opacity: var(--db-opacity-xl);
915
+ font-family: var(--db-font-family-sans);
916
+ font-style: italic;
917
+ /* stylelint-disable-next-line db-ux/use-spacings */
918
+ padding-block-start: var(--db-base-body-icon-font-size-2xs);
919
+ }
920
+ @media screen and (prefers-reduced-motion: no-preference) {
921
+ .db-custom-select[data-variant=floating]:has(summary:focus-within,
922
+ summary:is(input, textarea):not(:placeholder-shown),
923
+ > select option:checked:not(.placeholder),
924
+ input[type=checkbox]:checked,
925
+ input[type=radio]:checked) summary:is([type=date],
926
+ [type=datetime-local],
927
+ [type=month],
928
+ [type=week],
929
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
930
+ transition: opacity var(--db-transition-straight-emotional);
931
+ }
932
+ }
896
933
  .db-custom-select:has(select:not([data-custom-validity]):is(:required):user-valid):has(> .db-infotext[data-semantic=successful],
897
934
  > db-infotext > .db-infotext[data-semantic=successful]) {
898
935
  /* stylelint-disable-next-line at-rule-empty-line-before */
@@ -1005,6 +1042,15 @@ input[type=radio]:checked) [id$=-placeholder] {
1005
1042
  font-family: var(--db-font-family-sans);
1006
1043
  font-style: italic;
1007
1044
  }
1045
+ .db-custom-select summary:is([type=date],
1046
+ [type=datetime-local],
1047
+ [type=month],
1048
+ [type=week],
1049
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
1050
+ opacity: var(--db-opacity-xl);
1051
+ font-family: var(--db-font-family-sans);
1052
+ font-style: italic;
1053
+ }
1008
1054
  .db-custom-select summary {
1009
1055
  background-color: var(--db-adaptive-bg-basic-transparent-semi-default);
1010
1056
  caret-color: var(--db-adaptive-on-bg-basic-emphasis-100-default);
@@ -143,7 +143,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
143
143
  overflow: clip;
144
144
  vertical-align: var(--db-icon-vertical-align, middle);
145
145
  block-size: var(--db-icon-font-size, 1.5rem);
146
- inline-size: var(--db-icon-font-size, 1.5rem);
146
+ aspect-ratio: 1;
147
+ flex-shrink: 0;
147
148
  content: var(--db-icon, attr(data-icon));
148
149
  }
149
150
  @supports (content: ""/"") {
@@ -180,13 +181,13 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
180
181
  margin-inline-end: var(--db-icon-margin-end, var(--db-spacing-fixed-xs));
181
182
  }
182
183
  .db-infotext[data-semantic=adaptive], .db-infotext:not([data-semantic]) {
183
- color: var(--db-adaptive-bg-inverted-contrast-high-default);
184
+ color: var(--db-adaptive-on-bg-basic-emphasis-80-default);
184
185
  }
185
186
  .db-infotext[data-semantic=adaptive]::before, .db-infotext:not([data-semantic])::before {
186
187
  --db-icon-color: var(--db-adaptive-on-bg-basic-emphasis-70-default);
187
188
  }
188
189
  .db-infotext[data-semantic=neutral] {
189
- color: var(--db-neutral-bg-inverted-contrast-high-default);
190
+ color: var(--db-neutral-on-bg-basic-emphasis-80-default);
190
191
  }
191
192
  .db-infotext[data-semantic=neutral]:not([data-icon])::before {
192
193
  --db-icon: "information_circle";
@@ -198,7 +199,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
198
199
  );
199
200
  }
200
201
  .db-infotext[data-semantic=critical] {
201
- color: var(--db-critical-bg-inverted-contrast-high-default);
202
+ color: var(--db-critical-on-bg-basic-emphasis-80-default);
202
203
  }
203
204
  .db-infotext[data-semantic=critical]:not([data-icon])::before {
204
205
  --db-icon: "exclamation_mark_circle";
@@ -210,7 +211,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
210
211
  );
211
212
  }
212
213
  .db-infotext[data-semantic=successful] {
213
- color: var(--db-successful-bg-inverted-contrast-high-default);
214
+ color: var(--db-successful-on-bg-basic-emphasis-80-default);
214
215
  }
215
216
  .db-infotext[data-semantic=successful]:not([data-icon])::before {
216
217
  --db-icon: "check_circle";
@@ -221,7 +222,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
221
222
  );
222
223
  }
223
224
  .db-infotext[data-semantic=warning] {
224
- color: var(--db-warning-bg-inverted-contrast-high-default);
225
+ color: var(--db-warning-on-bg-basic-emphasis-80-default);
225
226
  }
226
227
  .db-infotext[data-semantic=warning]:not([data-icon])::before {
227
228
  --db-icon: "exclamation_mark_triangle";
@@ -233,7 +234,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
233
234
  );
234
235
  }
235
236
  .db-infotext[data-semantic=informational] {
236
- color: var(--db-informational-bg-inverted-contrast-high-default);
237
+ color: var(--db-informational-on-bg-basic-emphasis-80-default);
237
238
  }
238
239
  .db-infotext[data-semantic=informational]:not([data-icon])::before {
239
240
  --db-icon: "information_circle";
@@ -22,7 +22,7 @@
22
22
 
23
23
  &[data-semantic="adaptive"],
24
24
  &:not([data-semantic]) {
25
- color: colors.$db-adaptive-bg-inverted-contrast-high-default;
25
+ color: colors.$db-adaptive-on-bg-basic-emphasis-80-default;
26
26
 
27
27
  &::before {
28
28
  --db-icon-color: #{colors.$db-adaptive-on-bg-basic-emphasis-70-default};
@@ -33,7 +33,7 @@
33
33
  &[data-semantic="#{$name}"] {
34
34
  @include icons.variant-icons($name);
35
35
 
36
- color: var(--db-#{$name}-bg-inverted-contrast-high-default);
36
+ color: var(--db-#{$name}-on-bg-basic-emphasis-80-default);
37
37
 
38
38
  &::before {
39
39
  --db-icon-color: var(
@@ -394,7 +394,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
394
394
  overflow: clip;
395
395
  vertical-align: var(--db-icon-vertical-align, middle);
396
396
  block-size: var(--db-icon-font-size, 1.5rem);
397
- inline-size: var(--db-icon-font-size, 1.5rem);
397
+ aspect-ratio: 1;
398
+ flex-shrink: 0;
398
399
  content: var(--db-icon, attr(data-icon));
399
400
  }
400
401
  @supports (content: ""/"") {
@@ -623,6 +624,14 @@ input[type=radio]:checked) > label {
623
624
  transition: none;
624
625
  opacity: 0;
625
626
  }
627
+ .db-input[data-variant=floating] input:is([type=date],
628
+ [type=datetime-local],
629
+ [type=month],
630
+ [type=week],
631
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
632
+ transition: none;
633
+ opacity: 0;
634
+ }
626
635
  .db-input[data-variant=floating] input {
627
636
  /* stylelint-disable-next-line db-ux/use-spacings */
628
637
  padding-block-start: var(--db-base-body-icon-font-size-2xs);
@@ -664,6 +673,32 @@ input[type=radio]:checked) [id$=-placeholder] {
664
673
  transition: opacity var(--db-transition-straight-emotional);
665
674
  }
666
675
  }
676
+ .db-input[data-variant=floating]:has(input:focus-within,
677
+ input:is(input, textarea):not(:placeholder-shown),
678
+ > select option:checked:not(.placeholder),
679
+ input[type=checkbox]:checked,
680
+ input[type=radio]:checked) input:is([type=date],
681
+ [type=datetime-local],
682
+ [type=month],
683
+ [type=week],
684
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
685
+ opacity: var(--db-opacity-xl);
686
+ font-family: var(--db-font-family-sans);
687
+ font-style: italic;
688
+ }
689
+ @media screen and (prefers-reduced-motion: no-preference) {
690
+ .db-input[data-variant=floating]:has(input:focus-within,
691
+ input:is(input, textarea):not(:placeholder-shown),
692
+ > select option:checked:not(.placeholder),
693
+ input[type=checkbox]:checked,
694
+ input[type=radio]:checked) input:is([type=date],
695
+ [type=datetime-local],
696
+ [type=month],
697
+ [type=week],
698
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
699
+ transition: opacity var(--db-transition-straight-emotional);
700
+ }
701
+ }
667
702
  .db-input:has(input:not([data-custom-validity]):is(:required, [minlength], [maxlength], [pattern], [type=color], [type=date], [type=datetime-local], [type=email], [type=file], [type=hidden], [type=month], [type=number], [type=range], [type=tel], [type=time], [type=url], [type=week]):user-valid):has(> .db-infotext[data-semantic=successful],
668
703
  > db-infotext > .db-infotext[data-semantic=successful]) {
669
704
  /* stylelint-disable-next-line at-rule-empty-line-before */
@@ -676,6 +711,10 @@ input[type=radio]:checked) [id$=-placeholder] {
676
711
  caret-color: var(--db-successful-on-bg-basic-emphasis-100-default);
677
712
  }
678
713
  .db-input:has(input:not([data-custom-validity]):is(:required, [minlength], [maxlength], [pattern], [type=color], [type=date], [type=datetime-local], [type=email], [type=file], [type=hidden], [type=month], [type=number], [type=range], [type=tel], [type=time], [type=url], [type=week]):user-valid):has(> .db-infotext[data-semantic=successful],
714
+ > db-infotext > .db-infotext[data-semantic=successful]) input {
715
+ border-color: var(--db-successful-on-bg-basic-emphasis-70-default);
716
+ }
717
+ .db-input:has(input:not([data-custom-validity]):is(:required, [minlength], [maxlength], [pattern], [type=color], [type=date], [type=datetime-local], [type=email], [type=file], [type=hidden], [type=month], [type=number], [type=range], [type=tel], [type=time], [type=url], [type=week]):user-valid):has(> .db-infotext[data-semantic=successful],
679
718
  > db-infotext > .db-infotext[data-semantic=successful]) > db-infotext > .db-infotext,
680
719
  .db-input:has(input:not([data-custom-validity]):is(:required, [minlength], [maxlength], [pattern], [type=color], [type=date], [type=datetime-local], [type=email], [type=file], [type=hidden], [type=month], [type=number], [type=range], [type=tel], [type=time], [type=url], [type=week]):user-valid):has(> .db-infotext[data-semantic=successful],
681
720
  > db-infotext > .db-infotext[data-semantic=successful]) > .db-infotext {
@@ -709,6 +748,11 @@ input[type=radio]:checked) [id$=-placeholder] {
709
748
  caret-color: var(--db-successful-on-bg-basic-emphasis-100-default);
710
749
  }
711
750
  .db-input:has(input[data-custom-validity=valid]):has(> .db-infotext[data-semantic=successful],
751
+ > db-infotext > .db-infotext[data-semantic=successful]) input, .db-input[data-custom-validity=valid]:has(> .db-infotext[data-semantic=successful],
752
+ > db-infotext > .db-infotext[data-semantic=successful]) input {
753
+ border-color: var(--db-successful-on-bg-basic-emphasis-70-default);
754
+ }
755
+ .db-input:has(input[data-custom-validity=valid]):has(> .db-infotext[data-semantic=successful],
712
756
  > db-infotext > .db-infotext[data-semantic=successful]) > db-infotext > .db-infotext,
713
757
  .db-input:has(input[data-custom-validity=valid]):has(> .db-infotext[data-semantic=successful],
714
758
  > db-infotext > .db-infotext[data-semantic=successful]) > .db-infotext, .db-input[data-custom-validity=valid]:has(> .db-infotext[data-semantic=successful],
@@ -743,6 +787,9 @@ input[type=radio]:checked) [id$=-placeholder] {
743
787
  color: var(--db-critical-on-bg-basic-emphasis-100-default);
744
788
  caret-color: var(--db-critical-on-bg-basic-emphasis-100-default);
745
789
  }
790
+ .db-input:has(input:not([data-custom-validity]):is(:required, [minlength], [maxlength], [pattern], [type=color], [type=date], [type=datetime-local], [type=email], [type=file], [type=hidden], [type=month], [type=number], [type=range], [type=tel], [type=time], [type=url], [type=week]):user-invalid) input {
791
+ border-color: var(--db-critical-on-bg-basic-emphasis-70-default);
792
+ }
746
793
  .db-input:has(input:not([data-custom-validity]):is(:required, [minlength], [maxlength], [pattern], [type=color], [type=date], [type=datetime-local], [type=email], [type=file], [type=hidden], [type=month], [type=number], [type=range], [type=tel], [type=time], [type=url], [type=week]):user-invalid) > db-infotext > .db-infotext[data-semantic=critical]:not([hidden]),
747
794
  .db-input:has(input:not([data-custom-validity]):is(:required, [minlength], [maxlength], [pattern], [type=color], [type=date], [type=datetime-local], [type=email], [type=file], [type=hidden], [type=month], [type=number], [type=range], [type=tel], [type=time], [type=url], [type=week]):user-invalid) > .db-infotext[data-semantic=critical]:not([hidden]) {
748
795
  display: flex;
@@ -760,6 +807,9 @@ input[type=radio]:checked) [id$=-placeholder] {
760
807
  color: var(--db-critical-on-bg-basic-emphasis-100-default);
761
808
  caret-color: var(--db-critical-on-bg-basic-emphasis-100-default);
762
809
  }
810
+ .db-input:has(input[data-custom-validity=invalid]) input, .db-input[data-custom-validity=invalid] input {
811
+ border-color: var(--db-critical-on-bg-basic-emphasis-70-default);
812
+ }
763
813
  .db-input:has(input[data-custom-validity=invalid]) > db-infotext > .db-infotext[data-semantic=critical]:not([hidden]),
764
814
  .db-input:has(input[data-custom-validity=invalid]) > .db-infotext[data-semantic=critical]:not([hidden]), .db-input[data-custom-validity=invalid] > db-infotext > .db-infotext[data-semantic=critical]:not([hidden]),
765
815
  .db-input[data-custom-validity=invalid] > .db-infotext[data-semantic=critical]:not([hidden]) {
@@ -776,6 +826,15 @@ input[type=radio]:checked) [id$=-placeholder] {
776
826
  font-family: var(--db-font-family-sans);
777
827
  font-style: italic;
778
828
  }
829
+ .db-input input:is([type=date],
830
+ [type=datetime-local],
831
+ [type=month],
832
+ [type=week],
833
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
834
+ opacity: var(--db-opacity-xl);
835
+ font-family: var(--db-font-family-sans);
836
+ font-style: italic;
837
+ }
779
838
  .db-input input {
780
839
  background-color: var(--db-adaptive-bg-basic-transparent-semi-default);
781
840
  caret-color: var(--db-adaptive-on-bg-basic-emphasis-100-default);
@@ -226,7 +226,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
226
226
  overflow: clip;
227
227
  vertical-align: var(--db-icon-vertical-align, middle);
228
228
  block-size: var(--db-icon-font-size, 1.5rem);
229
- inline-size: var(--db-icon-font-size, 1.5rem);
229
+ aspect-ratio: 1;
230
+ flex-shrink: 0;
230
231
  content: var(--db-icon, attr(data-icon));
231
232
  }
232
233
  @supports (content: ""/"") {
@@ -219,7 +219,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
219
219
  overflow: clip;
220
220
  vertical-align: var(--db-icon-vertical-align, middle);
221
221
  block-size: var(--db-icon-font-size, 1.5rem);
222
- inline-size: var(--db-icon-font-size, 1.5rem);
222
+ aspect-ratio: 1;
223
+ flex-shrink: 0;
223
224
  content: var(--db-icon, attr(data-icon));
224
225
  }
225
226
  @supports (content: ""/"") {
@@ -930,7 +930,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
930
930
  overflow: clip;
931
931
  vertical-align: var(--db-icon-vertical-align, middle);
932
932
  block-size: var(--db-icon-font-size, 1.5rem);
933
- inline-size: var(--db-icon-font-size, 1.5rem);
933
+ aspect-ratio: 1;
934
+ flex-shrink: 0;
934
935
  content: var(--db-icon, attr(data-icon));
935
936
  }
936
937
  @supports (content: ""/"") {
@@ -394,7 +394,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
394
394
  overflow: clip;
395
395
  vertical-align: var(--db-icon-vertical-align, middle);
396
396
  block-size: var(--db-icon-font-size, 1.5rem);
397
- inline-size: var(--db-icon-font-size, 1.5rem);
397
+ aspect-ratio: 1;
398
+ flex-shrink: 0;
398
399
  content: var(--db-icon, attr(data-icon));
399
400
  }
400
401
  @supports (content: ""/"") {
@@ -649,6 +650,14 @@ input[type=radio]:checked) > label {
649
650
  transition: none;
650
651
  opacity: 0;
651
652
  }
653
+ .db-select[data-variant=floating] select:is([type=date],
654
+ [type=datetime-local],
655
+ [type=month],
656
+ [type=week],
657
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
658
+ transition: none;
659
+ opacity: 0;
660
+ }
652
661
  .db-select[data-variant=floating] select {
653
662
  /* stylelint-disable-next-line db-ux/use-spacings */
654
663
  padding-block-start: var(--db-base-body-icon-font-size-2xs);
@@ -692,6 +701,34 @@ input[type=radio]:checked) [id$=-placeholder] {
692
701
  transition: opacity var(--db-transition-straight-emotional);
693
702
  }
694
703
  }
704
+ .db-select[data-variant=floating]:has(select:focus-within,
705
+ select:is(input, textarea):not(:placeholder-shown),
706
+ > select option:checked:not(.placeholder),
707
+ input[type=checkbox]:checked,
708
+ input[type=radio]:checked) select:is([type=date],
709
+ [type=datetime-local],
710
+ [type=month],
711
+ [type=week],
712
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
713
+ opacity: var(--db-opacity-xl);
714
+ font-family: var(--db-font-family-sans);
715
+ font-style: italic;
716
+ /* stylelint-disable-next-line db-ux/use-spacings */
717
+ padding-block-start: var(--db-base-body-icon-font-size-2xs);
718
+ }
719
+ @media screen and (prefers-reduced-motion: no-preference) {
720
+ .db-select[data-variant=floating]:has(select:focus-within,
721
+ select:is(input, textarea):not(:placeholder-shown),
722
+ > select option:checked:not(.placeholder),
723
+ input[type=checkbox]:checked,
724
+ input[type=radio]:checked) select:is([type=date],
725
+ [type=datetime-local],
726
+ [type=month],
727
+ [type=week],
728
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
729
+ transition: opacity var(--db-transition-straight-emotional);
730
+ }
731
+ }
695
732
  .db-select:has(select:not([data-custom-validity]):is(:required):user-valid):has(> .db-infotext[data-semantic=successful],
696
733
  > db-infotext > .db-infotext[data-semantic=successful]) {
697
734
  /* stylelint-disable-next-line at-rule-empty-line-before */
@@ -804,6 +841,15 @@ input[type=radio]:checked) [id$=-placeholder] {
804
841
  font-family: var(--db-font-family-sans);
805
842
  font-style: italic;
806
843
  }
844
+ .db-select select:is([type=date],
845
+ [type=datetime-local],
846
+ [type=month],
847
+ [type=week],
848
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
849
+ opacity: var(--db-opacity-xl);
850
+ font-family: var(--db-font-family-sans);
851
+ font-style: italic;
852
+ }
807
853
  .db-select select {
808
854
  background-color: var(--db-adaptive-bg-basic-transparent-semi-default);
809
855
  caret-color: var(--db-adaptive-on-bg-basic-emphasis-100-default);