@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.
@@ -35,6 +35,7 @@ $checked-active-transition-size: calc(
35
35
  .db-switch {
36
36
  user-select: none;
37
37
 
38
+ @extend %helper-message;
38
39
  @include form-components.set-default-check-element;
39
40
 
40
41
  &:not(:has(input:disabled)) {
@@ -45,13 +46,24 @@ $checked-active-transition-size: calc(
45
46
  }
46
47
  }
47
48
 
48
- > input {
49
+ @include form-components.get-validity(check) {
50
+ &:has(.db-infotext[data-semantic="successful"]) {
51
+ @include form-components.get-validity-color-checkbox("valid");
52
+ }
53
+ }
54
+
55
+ @include form-components.get-validity(check, "invalid") {
56
+ @include form-components.get-validity-color-checkbox("invalid");
57
+ }
58
+
59
+ input {
49
60
  --db-icon-margin-start: 0;
50
61
  --thumb-offset-x: #{$switch-fixed-padding};
51
62
 
52
63
  @extend %db-overwrite-font-size-sm;
53
64
 
54
65
  appearance: none;
66
+ margin-inline-end: 0;
55
67
  inline-size: calc(
56
68
  #{form-components.$font-size-height} * 2 + #{$switch-fixed-padding}
57
69
  );
@@ -82,8 +94,14 @@ $checked-active-transition-size: calc(
82
94
  align-content: center;
83
95
  aspect-ratio: 1;
84
96
  block-size: $switch-inactive-thumb-size;
85
- background-color: colors.$db-adaptive-on-bg-basic-emphasis-100-default;
86
- color: colors.$db-adaptive-on-bg-basic-emphasis-100-default;
97
+ background-color: var(
98
+ --db-check-element-border-color,
99
+ #{colors.$db-adaptive-on-bg-basic-emphasis-100-default}
100
+ );
101
+ color: var(
102
+ --db-check-element-border-color,
103
+ #{colors.$db-adaptive-on-bg-basic-emphasis-100-default}
104
+ );
87
105
  border-radius: variables.$db-border-radius-full;
88
106
  transform: translateX(var(--thumb-offset-x));
89
107
  margin-inline-end: calc(
@@ -99,6 +117,8 @@ $checked-active-transition-size: calc(
99
117
  block-size variables.$db-transition-duration-fast
100
118
  variables.$db-transition-timing-emotional,
101
119
  transform variables.$db-transition-duration-fast
120
+ variables.$db-transition-timing-emotional,
121
+ visibility variables.$db-transition-duration-fast
102
122
  variables.$db-transition-timing-emotional;
103
123
  }
104
124
  }
@@ -106,23 +126,16 @@ $checked-active-transition-size: calc(
106
126
  /* positioned at the end of the track: track length - 100% (thumb width) */
107
127
  &:checked {
108
128
  --thumb-offset-x: calc(100% + #{$switch-fixed-padding});
109
-
110
- @include colors.set-current-colors(
111
- colors.$db-adaptive-bg-inverted-contrast-max-default,
112
- colors.$db-adaptive-on-bg-inverted-default,
113
- colors.$db-adaptive-bg-inverted-contrast-max-hovered,
114
- colors.$db-adaptive-bg-inverted-contrast-max-pressed
129
+ --db-icon-color: var(--db-adaptive-on-bg-inverted-default);
130
+ --db-adaptive-bg-basic-transparent-full-default: var(
131
+ --db-adaptive-bg-inverted-contrast-max-default
132
+ );
133
+ --db-adaptive-bg-basic-transparent-full-hovered: var(
134
+ --db-adaptive-bg-inverted-contrast-max-hovered
135
+ );
136
+ --db-adaptive-bg-basic-transparent-full-pressed: var(
137
+ --db-adaptive-bg-inverted-contrast-max-pressed
115
138
  );
116
-
117
- border-color: colors.$db-adaptive-on-bg-basic-emphasis-100-default;
118
-
119
- @include helpers.hover {
120
- border-color: colors.$db-adaptive-on-bg-basic-emphasis-100-hovered;
121
- }
122
-
123
- @include helpers.active {
124
- border-color: colors.$db-adaptive-on-bg-basic-emphasis-100-pressed;
125
- }
126
139
 
127
140
  &::after {
128
141
  --db-icon-color: #{colors.$db-adaptive-on-bg-inverted-default};
@@ -156,91 +169,95 @@ $checked-active-transition-size: calc(
156
169
  }
157
170
 
158
171
  &[data-hide-label="true"] {
159
- gap: 0;
172
+ > label {
173
+ margin: 0;
174
+
175
+ > span {
176
+ font-size: 0;
177
+ }
178
+ }
160
179
  }
161
180
 
162
181
  &[data-size="small"] {
163
- gap: variables.$db-spacing-fixed-2xs;
182
+ > label {
183
+ gap: variables.$db-spacing-fixed-2xs;
184
+ }
164
185
 
165
- > input {
186
+ input {
166
187
  @extend %db-overwrite-font-size-xs;
167
188
  }
168
189
  }
169
190
 
170
- &[data-emphasis="strong"] {
171
- > input {
172
- --db-check-element-border-color: #{colors.$db-adaptive-bg-basic-transparent-full-default};
173
-
174
- @extend %db-critical-variables;
175
-
176
- background-color: colors.$db-adaptive-bg-inverted-contrast-low-default;
177
- color: colors.$db-adaptive-on-bg-inverted-default;
178
- border-color: colors.$db-adaptive-on-bg-basic-emphasis-70-default;
179
-
180
- @include helpers.hover {
181
- background-color: colors.$db-adaptive-bg-inverted-contrast-low-hovered;
182
- border-color: colors.$db-adaptive-on-bg-basic-emphasis-70-hovered;
183
- }
184
-
185
- @include helpers.active {
186
- background-color: colors.$db-adaptive-bg-inverted-contrast-low-pressed;
187
- border-color: colors.$db-adaptive-on-bg-basic-emphasis-70-pressed;
191
+ &[data-visual-aid="true"] {
192
+ input {
193
+ &::after {
194
+ visibility: visible;
195
+ block-size: $switch-active-thumb-size;
188
196
 
189
- &::before {
190
- block-size: $checked-active-transition-size;
197
+ @media screen and (prefers-reduced-motion: no-preference) {
198
+ transition: transform variables.$db-transition-duration-fast
199
+ variables.$db-transition-timing-emotional;
191
200
  }
192
201
  }
193
202
 
194
- &:not(:checked) {
195
- --thumb-offset-x: 0;
196
- }
197
-
198
203
  &:checked {
199
- @extend %db-successful-variables;
200
-
201
- &::before {
202
- background-color: colors.$db-adaptive-on-bg-inverted-default;
203
- color: colors.$db-adaptive-on-bg-inverted-default;
204
+ &:not([data-aid-icon]) {
205
+ @include icons.set-icon("check", "after");
204
206
  }
205
207
 
206
208
  &::after {
207
- --db-icon-color: #{colors.$db-adaptive-on-bg-inverted-default};
209
+ transform: translateX(
210
+ calc(-100% - #{$switch-fixed-padding})
211
+ );
212
+ transform-origin: center right;
208
213
  }
209
214
  }
215
+ }
216
+ }
210
217
 
211
- &::after {
212
- --db-icon-color: #{colors.$db-adaptive-on-bg-inverted-default};
213
- }
218
+ /* Label position (leading/trailing) */
219
+ &:not([data-variant="leading"]) {
220
+ > label {
221
+ flex-direction: row;
222
+ }
214
223
 
215
- &::before {
216
- background-color: colors.$db-adaptive-on-bg-inverted-default;
217
- color: colors.$db-adaptive-on-bg-inverted-default;
218
- block-size: $switch-active-thumb-size;
219
- margin: 0;
220
- }
224
+ input {
225
+ margin-inline-end: variables.$db-spacing-fixed-xs;
221
226
  }
222
- }
223
227
 
224
- &[data-emphasis="strong"],
225
- &[data-visual-aid="true"] {
226
- > input {
227
- &::after {
228
- visibility: visible;
229
- block-size: $switch-active-thumb-size;
228
+ &[data-size="small"] {
229
+ input {
230
+ margin-inline-end: variables.$db-spacing-fixed-xs;
230
231
  }
232
+ }
233
+ }
231
234
 
232
- &:checked {
233
- &:not([data-aid-icon]) {
234
- @include icons.set-icon("check", "after");
235
+ &[data-variant="leading"] {
236
+ &:not([data-hide-asterisk="true"]) {
237
+ &:has(input:required),
238
+ &[data-required="true"] {
239
+ > label::after {
240
+ /* We remove default asterisk because we need a wrapping span for switch */
241
+ content: none;
235
242
  }
236
243
 
237
- &::after {
238
- transform: translateX(
239
- calc(-100% - #{$switch-fixed-padding})
240
- );
241
- block-size: $switch-active-thumb-size;
244
+ > label::before {
245
+ order: 1;
246
+
247
+ @include icons.icon-content("*");
242
248
  }
243
249
  }
244
250
  }
251
+
252
+ input {
253
+ order: 2;
254
+ margin-inline-start: variables.$db-spacing-fixed-xs;
255
+ }
256
+
257
+ &[data-size="small"] {
258
+ input {
259
+ margin-inline-start: variables.$db-spacing-fixed-2xs;
260
+ }
261
+ }
245
262
  }
246
263
  }
@@ -985,7 +985,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
985
985
  overflow: clip;
986
986
  vertical-align: var(--db-icon-vertical-align, middle);
987
987
  block-size: var(--db-icon-font-size, 1.5rem);
988
- inline-size: var(--db-icon-font-size, 1.5rem);
988
+ aspect-ratio: 1;
989
+ flex-shrink: 0;
989
990
  content: var(--db-icon, attr(data-icon));
990
991
  }
991
992
  @supports (content: ""/"") {
@@ -416,6 +416,14 @@ input[type=radio]:checked) > label {
416
416
  transition: none;
417
417
  opacity: 0;
418
418
  }
419
+ .db-textarea[data-variant=floating] textarea:is([type=date],
420
+ [type=datetime-local],
421
+ [type=month],
422
+ [type=week],
423
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
424
+ transition: none;
425
+ opacity: 0;
426
+ }
419
427
  .db-textarea[data-variant=floating] textarea {
420
428
  padding-block-start: calc(var(--db-spacing-fixed-3xs) + var(--db-spacing-fixed-2xs) + var(--db-base-body-icon-font-size-2xs));
421
429
  /* stylelint-disable-next-line at-rule-empty-line-before */
@@ -457,8 +465,35 @@ input[type=radio]:checked) [id$=-placeholder] {
457
465
  transition: opacity var(--db-transition-straight-emotional);
458
466
  }
459
467
  }
468
+ .db-textarea[data-variant=floating]:has(textarea:focus-within,
469
+ textarea:is(input, textarea):not(:placeholder-shown),
470
+ > select option:checked:not(.placeholder),
471
+ input[type=checkbox]:checked,
472
+ input[type=radio]:checked) textarea:is([type=date],
473
+ [type=datetime-local],
474
+ [type=month],
475
+ [type=week],
476
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
477
+ opacity: var(--db-opacity-xl);
478
+ font-family: var(--db-font-family-sans);
479
+ font-style: italic;
480
+ }
481
+ @media screen and (prefers-reduced-motion: no-preference) {
482
+ .db-textarea[data-variant=floating]:has(textarea:focus-within,
483
+ textarea:is(input, textarea):not(:placeholder-shown),
484
+ > select option:checked:not(.placeholder),
485
+ input[type=checkbox]:checked,
486
+ input[type=radio]:checked) textarea:is([type=date],
487
+ [type=datetime-local],
488
+ [type=month],
489
+ [type=week],
490
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
491
+ transition: opacity var(--db-transition-straight-emotional);
492
+ }
493
+ }
460
494
  .db-textarea:has(textarea:not([data-custom-validity]):is(:required, [minlength], [maxlength]):user-valid):has(> .db-infotext[data-semantic=successful],
461
495
  > db-infotext > .db-infotext[data-semantic=successful]) {
496
+ --db-textarea-read-only: var(--db-successful-bg-basic-level-1-default);
462
497
  --db-textarea-read-only: var(--db-successful-bg-basic-level-1-default);
463
498
  --db-adaptive-bg-basic-transparent-full-default: var(
464
499
  --db-successful-bg-basic-transparent-full-default
@@ -493,6 +528,10 @@ input[type=radio]:checked) [id$=-placeholder] {
493
528
  caret-color: var(--db-successful-on-bg-basic-emphasis-100-default);
494
529
  }
495
530
  .db-textarea:has(textarea:not([data-custom-validity]):is(:required, [minlength], [maxlength]):user-valid):has(> .db-infotext[data-semantic=successful],
531
+ > db-infotext > .db-infotext[data-semantic=successful]) textarea {
532
+ border-color: var(--db-successful-on-bg-basic-emphasis-70-default);
533
+ }
534
+ .db-textarea:has(textarea:not([data-custom-validity]):is(:required, [minlength], [maxlength]):user-valid):has(> .db-infotext[data-semantic=successful],
496
535
  > db-infotext > .db-infotext[data-semantic=successful]) > db-infotext > .db-infotext,
497
536
  .db-textarea:has(textarea:not([data-custom-validity]):is(:required, [minlength], [maxlength]):user-valid):has(> .db-infotext[data-semantic=successful],
498
537
  > db-infotext > .db-infotext[data-semantic=successful]) > .db-infotext {
@@ -513,6 +552,7 @@ input[type=radio]:checked) [id$=-placeholder] {
513
552
  .db-textarea:has(textarea[data-custom-validity=valid]):has(> .db-infotext[data-semantic=successful],
514
553
  > db-infotext > .db-infotext[data-semantic=successful]), .db-textarea[data-custom-validity=valid]:has(> .db-infotext[data-semantic=successful],
515
554
  > db-infotext > .db-infotext[data-semantic=successful]) {
555
+ --db-textarea-read-only: var(--db-successful-bg-basic-level-1-default);
516
556
  --db-textarea-read-only: var(--db-successful-bg-basic-level-1-default);
517
557
  --db-adaptive-bg-basic-transparent-full-default: var(
518
558
  --db-successful-bg-basic-transparent-full-default
@@ -550,6 +590,11 @@ input[type=radio]:checked) [id$=-placeholder] {
550
590
  caret-color: var(--db-successful-on-bg-basic-emphasis-100-default);
551
591
  }
552
592
  .db-textarea:has(textarea[data-custom-validity=valid]):has(> .db-infotext[data-semantic=successful],
593
+ > db-infotext > .db-infotext[data-semantic=successful]) textarea, .db-textarea[data-custom-validity=valid]:has(> .db-infotext[data-semantic=successful],
594
+ > db-infotext > .db-infotext[data-semantic=successful]) textarea {
595
+ border-color: var(--db-successful-on-bg-basic-emphasis-70-default);
596
+ }
597
+ .db-textarea:has(textarea[data-custom-validity=valid]):has(> .db-infotext[data-semantic=successful],
553
598
  > db-infotext > .db-infotext[data-semantic=successful]) > db-infotext > .db-infotext,
554
599
  .db-textarea:has(textarea[data-custom-validity=valid]):has(> .db-infotext[data-semantic=successful],
555
600
  > db-infotext > .db-infotext[data-semantic=successful]) > .db-infotext, .db-textarea[data-custom-validity=valid]:has(> .db-infotext[data-semantic=successful],
@@ -577,6 +622,7 @@ input[type=radio]:checked) [id$=-placeholder] {
577
622
  display: none;
578
623
  }
579
624
  .db-textarea:has(textarea:not([data-custom-validity]):is(:required, [minlength], [maxlength]):user-invalid) {
625
+ --db-textarea-read-only: var(--db-critical-bg-basic-level-1-default);
580
626
  --db-textarea-read-only: var(--db-critical-bg-basic-level-1-default);
581
627
  --db-adaptive-bg-basic-transparent-full-default: var(
582
628
  --db-critical-bg-basic-transparent-full-default
@@ -608,6 +654,9 @@ input[type=radio]:checked) [id$=-placeholder] {
608
654
  color: var(--db-critical-on-bg-basic-emphasis-100-default);
609
655
  caret-color: var(--db-critical-on-bg-basic-emphasis-100-default);
610
656
  }
657
+ .db-textarea:has(textarea:not([data-custom-validity]):is(:required, [minlength], [maxlength]):user-invalid) textarea {
658
+ border-color: var(--db-critical-on-bg-basic-emphasis-70-default);
659
+ }
611
660
  .db-textarea:has(textarea:not([data-custom-validity]):is(:required, [minlength], [maxlength]):user-invalid) > db-infotext > .db-infotext[data-semantic=critical]:not([hidden]),
612
661
  .db-textarea:has(textarea:not([data-custom-validity]):is(:required, [minlength], [maxlength]):user-invalid) > .db-infotext[data-semantic=critical]:not([hidden]) {
613
662
  display: flex;
@@ -617,6 +666,7 @@ input[type=radio]:checked) [id$=-placeholder] {
617
666
  display: none;
618
667
  }
619
668
  .db-textarea:has(textarea[data-custom-validity=invalid]), .db-textarea[data-custom-validity=invalid] {
669
+ --db-textarea-read-only: var(--db-critical-bg-basic-level-1-default);
620
670
  --db-textarea-read-only: var(--db-critical-bg-basic-level-1-default);
621
671
  --db-adaptive-bg-basic-transparent-full-default: var(
622
672
  --db-critical-bg-basic-transparent-full-default
@@ -649,6 +699,9 @@ input[type=radio]:checked) [id$=-placeholder] {
649
699
  color: var(--db-critical-on-bg-basic-emphasis-100-default);
650
700
  caret-color: var(--db-critical-on-bg-basic-emphasis-100-default);
651
701
  }
702
+ .db-textarea:has(textarea[data-custom-validity=invalid]) textarea, .db-textarea[data-custom-validity=invalid] textarea {
703
+ border-color: var(--db-critical-on-bg-basic-emphasis-70-default);
704
+ }
652
705
  .db-textarea:has(textarea[data-custom-validity=invalid]) > db-infotext > .db-infotext[data-semantic=critical]:not([hidden]),
653
706
  .db-textarea:has(textarea[data-custom-validity=invalid]) > .db-infotext[data-semantic=critical]:not([hidden]), .db-textarea[data-custom-validity=invalid] > db-infotext > .db-infotext[data-semantic=critical]:not([hidden]),
654
707
  .db-textarea[data-custom-validity=invalid] > .db-infotext[data-semantic=critical]:not([hidden]) {
@@ -665,6 +718,15 @@ input[type=radio]:checked) [id$=-placeholder] {
665
718
  font-family: var(--db-font-family-sans);
666
719
  font-style: italic;
667
720
  }
721
+ .db-textarea textarea:is([type=date],
722
+ [type=datetime-local],
723
+ [type=month],
724
+ [type=week],
725
+ [type=time]):not(:user-valid)::-webkit-datetime-edit {
726
+ opacity: var(--db-opacity-xl);
727
+ font-family: var(--db-font-family-sans);
728
+ font-style: italic;
729
+ }
668
730
  .db-textarea textarea {
669
731
  background-color: var(--db-adaptive-bg-basic-transparent-semi-default);
670
732
  caret-color: var(--db-adaptive-on-bg-basic-emphasis-100-default);