@db-ux/core-components 1.1.1 → 2.0.0-0-custom-select-16b8cce

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.
Files changed (75) hide show
  1. package/README.md +1 -1
  2. package/build/assets/icons/LICENCES.json +6 -0
  3. package/build/assets/icons/circular_arrows.svg +1 -0
  4. package/build/assets/icons/fonts/all/db-ux.woff2 +0 -0
  5. package/build/assets/icons/fonts/default/db-ux.woff2 +0 -0
  6. package/build/assets/icons/fonts/default_12/db-ux.woff2 +0 -0
  7. package/build/assets/icons/fonts/default_14/db-ux.woff2 +0 -0
  8. package/build/assets/icons/fonts/default_16/db-ux.woff2 +0 -0
  9. package/build/assets/icons/fonts/default_20/db-ux.woff2 +0 -0
  10. package/build/assets/icons/fonts/default_24/db-ux.woff2 +0 -0
  11. package/build/assets/icons/fonts/default_28/db-ux.woff2 +0 -0
  12. package/build/assets/icons/fonts/default_32/db-ux.woff2 +0 -0
  13. package/build/assets/icons/fonts/default_48/db-ux.woff2 +0 -0
  14. package/build/assets/icons/fonts/default_64/db-ux.woff2 +0 -0
  15. package/build/assets/icons/fonts/filled/db-ux.woff2 +0 -0
  16. package/build/assets/icons/fonts/filled_12/db-ux.woff2 +0 -0
  17. package/build/assets/icons/fonts/filled_14/db-ux.woff2 +0 -0
  18. package/build/assets/icons/fonts/filled_16/db-ux.woff2 +0 -0
  19. package/build/assets/icons/fonts/filled_20/db-ux.woff2 +0 -0
  20. package/build/assets/icons/fonts/filled_24/db-ux.woff2 +0 -0
  21. package/build/assets/icons/fonts/filled_28/db-ux.woff2 +0 -0
  22. package/build/assets/icons/fonts/filled_32/db-ux.woff2 +0 -0
  23. package/build/assets/icons/fonts/filled_48/db-ux.woff2 +0 -0
  24. package/build/assets/icons/fonts/filled_64/db-ux.woff2 +0 -0
  25. package/build/components/accordion/accordion.css +1 -1
  26. package/build/components/accordion-item/accordion-item.css +7 -2
  27. package/build/components/badge/badge.css +56 -4
  28. package/build/components/badge/badge.scss +1 -1
  29. package/build/components/button/button.css +4 -4
  30. package/build/components/card/card.css +6 -6
  31. package/build/components/checkbox/checkbox.css +60 -57
  32. package/build/components/custom-select/custom-select.css +1028 -0
  33. package/build/components/custom-select/custom-select.scss +172 -0
  34. package/build/components/custom-select-dropdown/custom-select-dropdown.css +402 -0
  35. package/build/components/custom-select-dropdown/custom-select-dropdown.scss +86 -0
  36. package/build/components/custom-select-form-field/custom-select-form-field.css +49 -0
  37. package/build/components/custom-select-form-field/custom-select-form-field.scss +24 -0
  38. package/build/components/custom-select-list/custom-select-list.css +48 -0
  39. package/build/components/custom-select-list/custom-select-list.scss +35 -0
  40. package/build/components/custom-select-list-item/custom-select-list-item.css +187 -0
  41. package/build/components/custom-select-list-item/custom-select-list-item.scss +99 -0
  42. package/build/components/divider/divider.css +2 -2
  43. package/build/components/drawer/drawer.css +6 -1
  44. package/build/components/header/header.css +4 -4
  45. package/build/components/input/input.css +71 -61
  46. package/build/components/input/input.scss +1 -5
  47. package/build/components/link/link.css +9 -4
  48. package/build/components/navigation-item/navigation-item.css +8 -3
  49. package/build/components/notification/notification.css +7 -2
  50. package/build/components/popover/popover.css +5 -0
  51. package/build/components/radio/radio.css +57 -54
  52. package/build/components/select/select.css +84 -75
  53. package/build/components/select/select.scss +4 -49
  54. package/build/components/switch/switch.css +64 -61
  55. package/build/components/tab-item/tab-item.css +5 -5
  56. package/build/components/tab-list/tab-list.css +17 -3
  57. package/build/components/tag/tag.css +40 -35
  58. package/build/components/textarea/textarea.css +93 -65
  59. package/build/components/textarea/textarea.scss +1 -1
  60. package/build/components/tooltip/tooltip.css +6 -1
  61. package/build/components/tooltip/tooltip.scss +2 -2
  62. package/build/styles/_select-components.scss +50 -0
  63. package/build/styles/absolute.css +32 -32
  64. package/build/styles/component-animations.css +1 -1
  65. package/build/styles/index.css +31 -31
  66. package/build/styles/index.scss +5 -0
  67. package/build/styles/internal/_custom-elements.scss +3 -0
  68. package/build/styles/internal/_form-components.scss +81 -70
  69. package/build/styles/internal/_scrollbar.scss +14 -3
  70. package/build/styles/internal/_tag-components.scss +20 -2
  71. package/build/styles/relative.css +32 -32
  72. package/build/styles/rollup.css +32 -32
  73. package/build/styles/wc-workarounds.css +1 -1
  74. package/build/styles/webpack.css +32 -32
  75. package/package.json +6 -5
@@ -52,7 +52,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
52
52
  /* stylelint-disable-next-line at-rule-empty-line-before */
53
53
  }
54
54
  .db-radio:has(input:required):is(label)::after,
55
- .db-radio:has(input:required) label::after {
55
+ .db-radio:has(input:required) > label::after, .db-radio[data-required=true]:is(label)::after,
56
+ .db-radio[data-required=true] > label::after {
56
57
  content: "*";
57
58
  content: "*"/"";
58
59
  /* stylelint-disable-next-line db-ux/use-spacings */
@@ -92,7 +93,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
92
93
  --db-icon-color: var(--db-successful-on-bg-inverted-default);
93
94
  }
94
95
  .db-radio:has(input:not([data-custom-validity]):required:valid) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]) {
95
- cursor: pointer;
96
+ cursor: var(--db-overwrite-cursor, pointer);
96
97
  background-color: var(--db-successful-bg-inverted-contrast-high-hovered);
97
98
  }
98
99
  .db-radio:has(input:not([data-custom-validity]):required:valid) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input:not([data-custom-validity]):required:valid) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input) {
@@ -102,7 +103,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
102
103
  cursor: pointer;
103
104
  }
104
105
  .db-radio:has(input:not([data-custom-validity]):required:valid) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]) {
105
- cursor: pointer;
106
+ cursor: var(--db-overwrite-cursor, pointer);
106
107
  background-color: var(--db-successful-bg-inverted-contrast-high-pressed);
107
108
  }
108
109
  .db-radio:has(input:not([data-custom-validity]):required:valid) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input:not([data-custom-validity]):required:valid) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input) {
@@ -112,19 +113,19 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
112
113
  cursor: pointer;
113
114
  }
114
115
  .db-radio:has(input:not([data-custom-validity]):required:valid):is(label),
115
- .db-radio:has(input:not([data-custom-validity]):required:valid) label {
116
+ .db-radio:has(input:not([data-custom-validity]):required:valid) > label {
116
117
  color: var(--db-successful-on-bg-basic-emphasis-80-default);
117
118
  }
118
- .db-radio:has(input[data-custom-validity=valid]) .db-infotext {
119
+ .db-radio:has(input[data-custom-validity=valid]) .db-infotext, .db-radio[data-custom-validity=valid] .db-infotext {
119
120
  /* stylelint-disable-next-line at-rule-empty-line-before */
120
121
  }
121
- .db-radio:has(input[data-custom-validity=valid]) .db-infotext[data-semantic=successful] {
122
+ .db-radio:has(input[data-custom-validity=valid]) .db-infotext[data-semantic=successful], .db-radio[data-custom-validity=valid] .db-infotext[data-semantic=successful] {
122
123
  display: flex;
123
124
  }
124
- .db-radio:has(input[data-custom-validity=valid]) .db-infotext:not([data-semantic]) {
125
+ .db-radio:has(input[data-custom-validity=valid]) .db-infotext:not([data-semantic]), .db-radio[data-custom-validity=valid] .db-infotext:not([data-semantic]) {
125
126
  display: none;
126
127
  }
127
- .db-radio:has(input[data-custom-validity=valid]) input {
128
+ .db-radio:has(input[data-custom-validity=valid]) input, .db-radio[data-custom-validity=valid] input {
128
129
  --db-adaptive-bg-basic-transparent-semi: var(
129
130
  --db-successful-bg-basic-transparent-semi-default
130
131
  );
@@ -135,41 +136,42 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
135
136
  --db-successful-bg-basic-transparent-pressed
136
137
  );
137
138
  }
138
- .db-radio:has(input[data-custom-validity=valid]) input:not(:checked), .db-radio:has(input[data-custom-validity=valid]) input:is([type=radio]) {
139
+ .db-radio:has(input[data-custom-validity=valid]) input:not(:checked), .db-radio:has(input[data-custom-validity=valid]) input:is([type=radio]), .db-radio[data-custom-validity=valid] input:not(:checked), .db-radio[data-custom-validity=valid] input:is([type=radio]) {
139
140
  --db-check-element-border-color: var(
140
141
  --db-successful-on-bg-basic-emphasis-70-default
141
142
  );
142
143
  }
143
- .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked {
144
+ .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked, .db-radio[data-custom-validity=valid] input:not([type=radio]):checked {
144
145
  background-color: var(--db-successful-bg-inverted-contrast-high-default);
145
146
  color: var(--db-successful-on-bg-inverted-default);
146
147
  /* stylelint-disable-next-line a11y/selector-pseudo-class-focus */
147
148
  }
148
- .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked::before, .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked::after {
149
+ .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked::before, .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked::after, .db-radio[data-custom-validity=valid] input:not([type=radio]):checked::before, .db-radio[data-custom-validity=valid] input:not([type=radio]):checked::after {
149
150
  --db-icon-color: var(--db-successful-on-bg-inverted-default);
150
151
  }
151
- .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]) {
152
- cursor: pointer;
152
+ .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]), .db-radio[data-custom-validity=valid] input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]) {
153
+ cursor: var(--db-overwrite-cursor, pointer);
153
154
  background-color: var(--db-successful-bg-inverted-contrast-high-hovered);
154
155
  }
155
- .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input) {
156
+ .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input), .db-radio[data-custom-validity=valid] input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio[data-custom-validity=valid] input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input) {
156
157
  cursor: initial;
157
158
  }
158
- .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
159
+ .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)), .db-radio[data-custom-validity=valid] input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio[data-custom-validity=valid] input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
159
160
  cursor: pointer;
160
161
  }
161
- .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]) {
162
- cursor: pointer;
162
+ .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]), .db-radio[data-custom-validity=valid] input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]) {
163
+ cursor: var(--db-overwrite-cursor, pointer);
163
164
  background-color: var(--db-successful-bg-inverted-contrast-high-pressed);
164
165
  }
165
- .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input) {
166
+ .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input), .db-radio[data-custom-validity=valid] input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio[data-custom-validity=valid] input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input) {
166
167
  cursor: initial;
167
168
  }
168
- .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
169
+ .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio:has(input[data-custom-validity=valid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)), .db-radio[data-custom-validity=valid] input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio[data-custom-validity=valid] input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
169
170
  cursor: pointer;
170
171
  }
171
172
  .db-radio:has(input[data-custom-validity=valid]):is(label),
172
- .db-radio:has(input[data-custom-validity=valid]) label {
173
+ .db-radio:has(input[data-custom-validity=valid]) > label, .db-radio[data-custom-validity=valid]:is(label),
174
+ .db-radio[data-custom-validity=valid] > label {
173
175
  color: var(--db-successful-on-bg-basic-emphasis-80-default);
174
176
  }
175
177
  .db-radio:has(input:not([data-custom-validity]):required:invalid) .db-infotext[data-semantic=critical] {
@@ -203,7 +205,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
203
205
  --db-icon-color: var(--db-successful-on-bg-inverted-default);
204
206
  }
205
207
  .db-radio:has(input:not([data-custom-validity]):required:invalid) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]) {
206
- cursor: pointer;
208
+ cursor: var(--db-overwrite-cursor, pointer);
207
209
  background-color: var(--db-successful-bg-inverted-contrast-high-hovered);
208
210
  }
209
211
  .db-radio:has(input:not([data-custom-validity]):required:invalid) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input:not([data-custom-validity]):required:invalid) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input) {
@@ -213,7 +215,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
213
215
  cursor: pointer;
214
216
  }
215
217
  .db-radio:has(input:not([data-custom-validity]):required:invalid) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]) {
216
- cursor: pointer;
218
+ cursor: var(--db-overwrite-cursor, pointer);
217
219
  background-color: var(--db-successful-bg-inverted-contrast-high-pressed);
218
220
  }
219
221
  .db-radio:has(input:not([data-custom-validity]):required:invalid) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input:not([data-custom-validity]):required:invalid) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input) {
@@ -223,16 +225,16 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
223
225
  cursor: pointer;
224
226
  }
225
227
  .db-radio:has(input:not([data-custom-validity]):required:invalid):is(label),
226
- .db-radio:has(input:not([data-custom-validity]):required:invalid) label {
228
+ .db-radio:has(input:not([data-custom-validity]):required:invalid) > label {
227
229
  color: var(--db-critical-on-bg-basic-emphasis-80-default);
228
230
  }
229
- .db-radio:has(input[data-custom-validity=invalid]) .db-infotext[data-semantic=critical] {
231
+ .db-radio:has(input[data-custom-validity=invalid]) .db-infotext[data-semantic=critical], .db-radio[data-custom-validity=invalid] .db-infotext[data-semantic=critical] {
230
232
  display: flex;
231
233
  }
232
- .db-radio:has(input[data-custom-validity=invalid]) .db-infotext:not([data-semantic]) {
234
+ .db-radio:has(input[data-custom-validity=invalid]) .db-infotext:not([data-semantic]), .db-radio[data-custom-validity=invalid] .db-infotext:not([data-semantic]) {
233
235
  display: none;
234
236
  }
235
- .db-radio:has(input[data-custom-validity=invalid]) input {
237
+ .db-radio:has(input[data-custom-validity=invalid]) input, .db-radio[data-custom-validity=invalid] input {
236
238
  --db-adaptive-bg-basic-transparent-semi: var(
237
239
  --db-critical-bg-basic-transparent-semi-default
238
240
  );
@@ -243,83 +245,84 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
243
245
  --db-critical-bg-basic-transparent-pressed
244
246
  );
245
247
  }
246
- .db-radio:has(input[data-custom-validity=invalid]) input:not(:checked), .db-radio:has(input[data-custom-validity=invalid]) input:is([type=radio]) {
248
+ .db-radio:has(input[data-custom-validity=invalid]) input:not(:checked), .db-radio:has(input[data-custom-validity=invalid]) input:is([type=radio]), .db-radio[data-custom-validity=invalid] input:not(:checked), .db-radio[data-custom-validity=invalid] input:is([type=radio]) {
247
249
  --db-check-element-border-color: var(
248
250
  --db-critical-on-bg-basic-emphasis-70-default
249
251
  );
250
252
  }
251
- .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked {
253
+ .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked, .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked {
252
254
  background-color: var(--db-successful-bg-inverted-contrast-high-default);
253
255
  color: var(--db-successful-on-bg-inverted-default);
254
256
  /* stylelint-disable-next-line a11y/selector-pseudo-class-focus */
255
257
  }
256
- .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked::before, .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked::after {
258
+ .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked::before, .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked::after, .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked::before, .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked::after {
257
259
  --db-icon-color: var(--db-successful-on-bg-inverted-default);
258
260
  }
259
- .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]) {
260
- cursor: pointer;
261
+ .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]), .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]) {
262
+ cursor: var(--db-overwrite-cursor, pointer);
261
263
  background-color: var(--db-successful-bg-inverted-contrast-high-hovered);
262
264
  }
263
- .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input) {
265
+ .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input), .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input) {
264
266
  cursor: initial;
265
267
  }
266
- .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
268
+ .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)), .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked:hover:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
267
269
  cursor: pointer;
268
270
  }
269
- .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]) {
270
- cursor: pointer;
271
+ .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]), .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]) {
272
+ cursor: var(--db-overwrite-cursor, pointer);
271
273
  background-color: var(--db-successful-bg-inverted-contrast-high-pressed);
272
274
  }
273
- .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input) {
275
+ .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input), .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input) {
274
276
  cursor: initial;
275
277
  }
276
- .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
278
+ .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio:has(input[data-custom-validity=invalid]) input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)), .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio[data-custom-validity=invalid] input:not([type=radio]):checked:active:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
277
279
  cursor: pointer;
278
280
  }
279
281
  .db-radio:has(input[data-custom-validity=invalid]):is(label),
280
- .db-radio:has(input[data-custom-validity=invalid]) label {
282
+ .db-radio:has(input[data-custom-validity=invalid]) > label, .db-radio[data-custom-validity=invalid]:is(label),
283
+ .db-radio[data-custom-validity=invalid] > label {
281
284
  color: var(--db-critical-on-bg-basic-emphasis-80-default);
282
285
  }
283
286
  .db-radio:has(input:disabled) {
284
287
  opacity: 0.4;
285
288
  }
286
289
  .db-radio:is(label),
287
- .db-radio label {
290
+ .db-radio > label {
288
291
  display: flex;
289
292
  align-items: flex-start;
290
293
  position: relative;
291
294
  gap: var(--db-spacing-fixed-xs);
292
295
  }
293
296
  .db-radio:is(label):not(:has(input:disabled)),
294
- .db-radio label:not(:has(input:disabled)) {
297
+ .db-radio > label:not(:has(input:disabled)) {
295
298
  /* stylelint-disable-next-line a11y/selector-pseudo-class-focus */
296
299
  }
297
300
  .db-radio:is(label):not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]),
298
- .db-radio label:not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]) {
299
- cursor: pointer;
301
+ .db-radio > label:not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]) {
302
+ cursor: var(--db-overwrite-cursor, pointer);
300
303
  }
301
304
  .db-radio:is(label):not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:is(label):not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(input),
302
- .db-radio label:not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(textarea),
303
- .db-radio label:not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(input) {
305
+ .db-radio > label:not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(textarea),
306
+ .db-radio > label:not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(input) {
304
307
  cursor: initial;
305
308
  }
306
309
  .db-radio:is(label):not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio:is(label):not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)),
307
- .db-radio label:not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]),
308
- .db-radio label:not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
310
+ .db-radio > label:not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]),
311
+ .db-radio > label:not(:has(input:disabled)):hover:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
309
312
  cursor: pointer;
310
313
  }
311
314
  .db-radio:is(label):not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]),
312
- .db-radio label:not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]) {
313
- cursor: pointer;
315
+ .db-radio > label:not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]) {
316
+ cursor: var(--db-overwrite-cursor, pointer);
314
317
  }
315
318
  .db-radio:is(label):not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio:is(label):not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(input),
316
- .db-radio label:not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(textarea),
317
- .db-radio label:not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(input) {
319
+ .db-radio > label:not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(textarea),
320
+ .db-radio > label:not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(input) {
318
321
  cursor: initial;
319
322
  }
320
323
  .db-radio:is(label):not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]), .db-radio:is(label):not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)),
321
- .db-radio label:not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]),
322
- .db-radio label:not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
324
+ .db-radio > label:not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(input[type=checkbox]),
325
+ .db-radio > label:not(:has(input:disabled)):active:not(:disabled, [aria-disabled=true]):is(input[type=radio]:not(:checked)) {
323
326
  cursor: pointer;
324
327
  }
325
328
  .db-radio input {
@@ -335,7 +338,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
335
338
  /* stylelint-disable-next-line a11y/selector-pseudo-class-focus */
336
339
  }
337
340
  .db-radio input:hover:not(:disabled, [aria-disabled=true]) {
338
- cursor: pointer;
341
+ cursor: var(--db-overwrite-cursor, pointer);
339
342
  background-color: var(--db-adaptive-bg-basic-transparent-hovered);
340
343
  }
341
344
  .db-radio input:hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio input:hover:not(:disabled, [aria-disabled=true]):is(input) {
@@ -345,7 +348,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
345
348
  cursor: pointer;
346
349
  }
347
350
  .db-radio input:active:not(:disabled, [aria-disabled=true]) {
348
- cursor: pointer;
351
+ cursor: var(--db-overwrite-cursor, pointer);
349
352
  background-color: var(--db-adaptive-bg-basic-transparent-pressed);
350
353
  }
351
354
  .db-radio input:active:not(:disabled, [aria-disabled=true]):is(textarea), .db-radio input:active:not(:disabled, [aria-disabled=true]):is(input) {
@@ -6,7 +6,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
6
6
  /* Border */
7
7
  /* Transitions */
8
8
  /* Variants for adaptive components like input, select, notification, ... */
9
- .db-select[data-hide-label=true] label, .db-visually-hidden,
9
+ .db-select[data-hide-label=true] > label, .db-visually-hidden,
10
10
  [data-visually-hidden=true] {
11
11
  clip: rect(0, 0, 0, 0) !important;
12
12
  overflow: hidden !important;
@@ -25,7 +25,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
25
25
  pointer-events: none !important;
26
26
  }
27
27
 
28
- .db-select:has(select:not([data-custom-validity]):is(:required):user-invalid), .db-select:has(select[data-custom-validity=invalid]) {
28
+ .db-select:has(select:not([data-custom-validity]):is(:required):user-invalid), .db-select:has(select[data-custom-validity=invalid]), .db-select[data-custom-validity=invalid] {
29
29
  --db-adaptive-bg-basic-level-1-default: var(
30
30
  --db-critical-bg-basic-level-1-default
31
31
  );
@@ -169,7 +169,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
169
169
  );
170
170
  }
171
171
 
172
- .db-select:has(select:not([data-custom-validity]):is(:required):user-valid), .db-select:has(select[data-custom-validity=valid]) {
172
+ .db-select:has(select:not([data-custom-validity]):is(:required):user-valid), .db-select:has(select[data-custom-validity=valid]), .db-select[data-custom-validity=valid] {
173
173
  --db-adaptive-bg-basic-level-1-default: var(
174
174
  --db-successful-bg-basic-level-1-default
175
175
  );
@@ -355,7 +355,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
355
355
  - %db-font-size-md
356
356
  - %db-overwrite-font-size-md
357
357
  */
358
- .db-select[data-variant=floating] label, .db-select select, .db-select [id$=-placeholder] {
358
+ .db-select[data-variant=floating] > label, .db-select select, .db-select [id$=-placeholder] {
359
359
  /* Those variables are only for components to calculate heights and change icons */
360
360
  --db-icon-font-weight: var(--db-base-body-icon-weight-md);
361
361
  --db-icon-font-size: var(--db-base-body-icon-font-size-md);
@@ -371,7 +371,7 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
371
371
  font-size: var(--db-type-body-font-size-sm);
372
372
  }
373
373
 
374
- .db-select label {
374
+ .db-select > label {
375
375
  /* Those variables are only for components to calculate heights and change icons */
376
376
  --db-icon-font-weight: var(--db-base-body-icon-weight-xs);
377
377
  --db-icon-font-size: var(--db-base-body-icon-font-size-xs);
@@ -381,7 +381,8 @@ paddings/gaps in an application e.g. the <main> should have a responsive padding
381
381
 
382
382
  .db-select[data-variant=floating]:has(select:focus-within,
383
383
  select:is(input, textarea):not(:placeholder-shown),
384
- > select option:checked:not([hidden])) label {
384
+ > select option:checked:not([hidden]),
385
+ input[type=checkbox]:checked) > label {
385
386
  /* Those variables are only for components to calculate heights and change icons */
386
387
  --db-icon-font-weight: var(--db-base-body-icon-weight-2xs);
387
388
  --db-icon-font-size: var(--db-base-body-icon-font-size-2xs);
@@ -419,72 +420,92 @@ select:is(input, textarea):not(:placeholder-shown),
419
420
  .db-select .db-infotext {
420
421
  margin-block-start: var(--db-spacing-fixed-2xs);
421
422
  }
422
- .db-select .db-infotext[data-semantic] {
423
+ .db-select .db-infotext:is([data-semantic=successful], [data-semantic=critical]) {
423
424
  display: none;
424
425
  }
425
426
 
426
- [data-icon].db-select {
427
+ [data-icon].db-select:not([data-hide-icon=true]) {
427
428
  --db-form-has-before: 1;
428
429
  }
429
430
 
431
+ .db-select [id$=-placeholder] {
432
+ position: absolute;
433
+ pointer-events: none;
434
+ inset-block-start: calc(0% + (var(--db-base-body-icon-font-size-xs) + var(--db-spacing-fixed-xs)) * var(--db-label-visible-above, 1) + var(--db-type-body-font-size-md) / 2 - var(--db-density-functional, 0) * 1px);
435
+ inset-inline: calc(var(--db-form-has-before) * (var(--db-base-body-icon-font-size-sm) + var(--db-spacing-fixed-sm)));
436
+ margin-inline-start: var(--db-spacing-fixed-sm);
437
+ overflow: hidden;
438
+ white-space: nowrap;
439
+ text-overflow: ellipsis;
440
+ inline-size: calc(100% - var(--db-form-component-padding-inline-end) - calc(var(--db-form-has-before) * (var(--db-base-body-icon-font-size-sm) + var(--db-spacing-fixed-sm))) - var(--db-spacing-fixed-sm));
441
+ }
442
+
430
443
  .db-select {
431
- --db-form-component-padding-inline-end: calc(
432
- var(--db-icon-font-size) + var(--db-spacing-fixed-sm)
433
- );
444
+ --db-form-component-padding-inline-end: calc(var(--db-icon-font-size) + var(--db-spacing-fixed-sm) + var(--db-spacing-fixed-xs));
434
445
  min-inline-size: calc(4 * var(--db-sizing-md) + var(--db-form-has-before) * var(--db-sizing-md));
446
+ /* stylelint-disable-next-line scss/selector-no-redundant-nesting-selector */
447
+ }
448
+ .db-select {
435
449
  --db-form-has-before: 0;
436
450
  position: relative;
437
451
  display: flex;
438
452
  flex-direction: column;
439
453
  }
440
- .db-select[data-variant=floating] label {
454
+ .db-select[data-variant=floating], .db-select[data-hide-label=true] {
455
+ --db-label-visible-above: 0;
456
+ }
457
+ .db-select[data-variant=floating] > label {
441
458
  opacity: 0.69;
442
459
  position: absolute;
443
460
  z-index: 2;
444
461
  inset-block-start: calc((var(--db-sizing-md) - var(--db-icon-font-size)) / 2);
445
- inset-inline: var(--db-form-component-padding-inline-start, var(--db-spacing-fixed-sm));
462
+ inset-inline: var(--db-form-component-padding-inline-start, var(--db-spacing-fixed-sm)) var(--db-form-component-padding-inline-end, var(--db-spacing-fixed-sm));
446
463
  pointer-events: none;
447
464
  }
448
- .db-select[data-variant=floating]::after, .db-select[data-variant=floating]::before {
449
- inset-block-start: calc(var(--db-sizing-md) / 2 - var(--db-icon-font-size) / 2);
450
- }
451
465
  .db-select[data-variant=floating] [id$=-placeholder] {
452
466
  inset-block-start: calc(50% - 0.5em + var(--db-spacing-fixed-3xs));
453
467
  }
454
- .db-select[data-variant=floating] select {
455
- padding-block-start: calc(var(--db-type-body-font-size-2xs) + var(--db-spacing-fixed-3xs));
456
- }
457
468
  .db-select[data-variant=floating] select::placeholder,
458
- .db-select[data-variant=floating] select + [id$=-placeholder] {
469
+ .db-select[data-variant=floating] [id$=-placeholder] {
459
470
  transition: none;
460
471
  opacity: 0;
461
472
  }
473
+ .db-select[data-variant=floating] select {
474
+ /* stylelint-disable-next-line db-ux/use-spacings */
475
+ padding-block-start: calc(var(--db-type-body-font-size-2xs) + var(--db-spacing-fixed-3xs));
476
+ }
462
477
  .db-select[data-variant=floating]:has(select:focus-within,
463
478
  select:is(input, textarea):not(:placeholder-shown),
464
- > select option:checked:not([hidden])) label {
479
+ > select option:checked:not([hidden]),
480
+ input[type=checkbox]:checked) > label {
465
481
  inset-block-start: var(--db-spacing-fixed-2xs);
466
482
  opacity: 1;
467
483
  }
468
484
  .db-select[data-variant=floating]:has(select:focus-within,
469
485
  select:is(input, textarea):not(:placeholder-shown),
470
- > select option:checked:not([hidden])) select::placeholder,
486
+ > select option:checked:not([hidden]),
487
+ input[type=checkbox]:checked) select::placeholder,
471
488
  .db-select[data-variant=floating]:has(select:focus-within,
472
489
  select:is(input, textarea):not(:placeholder-shown),
473
- > select option:checked:not([hidden])) select + [id$=-placeholder] {
490
+ > select option:checked:not([hidden]),
491
+ input[type=checkbox]:checked) [id$=-placeholder] {
474
492
  opacity: 0.69;
475
493
  }
476
494
  @media screen and (prefers-reduced-motion: no-preference) {
477
495
  .db-select[data-variant=floating]:has(select:focus-within,
478
496
  select:is(input, textarea):not(:placeholder-shown),
479
- > select option:checked:not([hidden])) select::placeholder,
497
+ > select option:checked:not([hidden]),
498
+ input[type=checkbox]:checked) select::placeholder,
480
499
  .db-select[data-variant=floating]:has(select:focus-within,
481
500
  select:is(input, textarea):not(:placeholder-shown),
482
- > select option:checked:not([hidden])) select + [id$=-placeholder] {
501
+ > select option:checked:not([hidden]),
502
+ input[type=checkbox]:checked) [id$=-placeholder] {
483
503
  transition: opacity var(--db-transition-straight-emotional);
484
504
  }
485
505
  }
486
506
  .db-select:has(select:required):is(label)::after,
487
- .db-select:has(select:required) label::after {
507
+ .db-select:has(select:required) > label::after, .db-select[data-required=true]:is(label)::after,
508
+ .db-select[data-required=true] > label::after {
488
509
  content: "*";
489
510
  content: "*"/"";
490
511
  /* stylelint-disable-next-line db-ux/use-spacings */
@@ -493,6 +514,11 @@ select:is(input, textarea):not(:placeholder-shown),
493
514
  .db-select:has(select:not([data-custom-validity]):is(:required):user-valid) {
494
515
  /* stylelint-disable-next-line at-rule-empty-line-before */
495
516
  }
517
+ .db-select:has(select:not([data-custom-validity]):is(:required):user-valid) select,
518
+ .db-select:has(select:not([data-custom-validity]):is(:required):user-valid) [id$=-placeholder] {
519
+ color: var(--db-successful-on-bg-basic-emphasis-100-default);
520
+ caret-color: var(--db-successful-on-bg-basic-emphasis-100-default);
521
+ }
496
522
  .db-select:has(select:not([data-custom-validity]):is(:required):user-valid) .db-infotext {
497
523
  /* stylelint-disable-next-line at-rule-empty-line-before */
498
524
  }
@@ -502,55 +528,56 @@ select:is(input, textarea):not(:placeholder-shown),
502
528
  .db-select:has(select:not([data-custom-validity]):is(:required):user-valid) .db-infotext:not([data-semantic]) {
503
529
  display: none;
504
530
  }
505
- .db-select:has(select:not([data-custom-validity]):is(:required):user-valid) select,
506
- .db-select:has(select:not([data-custom-validity]):is(:required):user-valid) [id$=-placeholder] {
531
+ .db-select:has(select[data-custom-validity=valid]), .db-select[data-custom-validity=valid] {
532
+ /* stylelint-disable-next-line at-rule-empty-line-before */
533
+ }
534
+ .db-select:has(select[data-custom-validity=valid]) select,
535
+ .db-select:has(select[data-custom-validity=valid]) [id$=-placeholder], .db-select[data-custom-validity=valid] select,
536
+ .db-select[data-custom-validity=valid] [id$=-placeholder] {
507
537
  color: var(--db-successful-on-bg-basic-emphasis-100-default);
508
538
  caret-color: var(--db-successful-on-bg-basic-emphasis-100-default);
509
539
  }
510
- .db-select:has(select[data-custom-validity=valid]) {
511
- /* stylelint-disable-next-line at-rule-empty-line-before */
512
- }
513
- .db-select:has(select[data-custom-validity=valid]) .db-infotext {
540
+ .db-select:has(select[data-custom-validity=valid]) .db-infotext, .db-select[data-custom-validity=valid] .db-infotext {
514
541
  /* stylelint-disable-next-line at-rule-empty-line-before */
515
542
  }
516
- .db-select:has(select[data-custom-validity=valid]) .db-infotext[data-semantic=successful] {
543
+ .db-select:has(select[data-custom-validity=valid]) .db-infotext[data-semantic=successful], .db-select[data-custom-validity=valid] .db-infotext[data-semantic=successful] {
517
544
  display: flex;
518
545
  }
519
- .db-select:has(select[data-custom-validity=valid]) .db-infotext:not([data-semantic]) {
546
+ .db-select:has(select[data-custom-validity=valid]) .db-infotext:not([data-semantic]), .db-select[data-custom-validity=valid] .db-infotext:not([data-semantic]) {
520
547
  display: none;
521
548
  }
522
- .db-select:has(select[data-custom-validity=valid]) select,
523
- .db-select:has(select[data-custom-validity=valid]) [id$=-placeholder] {
524
- color: var(--db-successful-on-bg-basic-emphasis-100-default);
525
- caret-color: var(--db-successful-on-bg-basic-emphasis-100-default);
526
- }
527
549
  .db-select:has(select:not([data-custom-validity]):is(:required):user-invalid) {
528
550
  /* stylelint-disable-next-line at-rule-empty-line-before */
529
551
  }
552
+ .db-select:has(select:not([data-custom-validity]):is(:required):user-invalid) select,
553
+ .db-select:has(select:not([data-custom-validity]):is(:required):user-invalid) [id$=-placeholder] {
554
+ color: var(--db-critical-on-bg-basic-emphasis-100-default);
555
+ caret-color: var(--db-critical-on-bg-basic-emphasis-100-default);
556
+ }
530
557
  .db-select:has(select:not([data-custom-validity]):is(:required):user-invalid) .db-infotext[data-semantic=critical] {
531
558
  display: flex;
532
559
  }
533
560
  .db-select:has(select:not([data-custom-validity]):is(:required):user-invalid) .db-infotext:not([data-semantic]) {
534
561
  display: none;
535
562
  }
536
- .db-select:has(select:not([data-custom-validity]):is(:required):user-invalid) select,
537
- .db-select:has(select:not([data-custom-validity]):is(:required):user-invalid) [id$=-placeholder] {
563
+ .db-select:has(select[data-custom-validity=invalid]), .db-select[data-custom-validity=invalid] {
564
+ /* stylelint-disable-next-line at-rule-empty-line-before */
565
+ }
566
+ .db-select:has(select[data-custom-validity=invalid]) select,
567
+ .db-select:has(select[data-custom-validity=invalid]) [id$=-placeholder], .db-select[data-custom-validity=invalid] select,
568
+ .db-select[data-custom-validity=invalid] [id$=-placeholder] {
538
569
  color: var(--db-critical-on-bg-basic-emphasis-100-default);
539
570
  caret-color: var(--db-critical-on-bg-basic-emphasis-100-default);
540
571
  }
541
- .db-select:has(select[data-custom-validity=invalid]) {
542
- /* stylelint-disable-next-line at-rule-empty-line-before */
543
- }
544
- .db-select:has(select[data-custom-validity=invalid]) .db-infotext[data-semantic=critical] {
572
+ .db-select:has(select[data-custom-validity=invalid]) .db-infotext[data-semantic=critical], .db-select[data-custom-validity=invalid] .db-infotext[data-semantic=critical] {
545
573
  display: flex;
546
574
  }
547
- .db-select:has(select[data-custom-validity=invalid]) .db-infotext:not([data-semantic]) {
575
+ .db-select:has(select[data-custom-validity=invalid]) .db-infotext:not([data-semantic]), .db-select[data-custom-validity=invalid] .db-infotext:not([data-semantic]) {
548
576
  display: none;
549
577
  }
550
- .db-select:has(select[data-custom-validity=invalid]) select,
551
- .db-select:has(select[data-custom-validity=invalid]) [id$=-placeholder] {
552
- color: var(--db-critical-on-bg-basic-emphasis-100-default);
553
- caret-color: var(--db-critical-on-bg-basic-emphasis-100-default);
578
+ .db-select select::placeholder,
579
+ .db-select [id$=-placeholder] {
580
+ opacity: 0.69;
554
581
  }
555
582
  .db-select select {
556
583
  background-color: var(--db-adaptive-bg-basic-transparent-semi-default);
@@ -562,12 +589,8 @@ select:is(input, textarea):not(:placeholder-shown),
562
589
  padding-inline: var(--db-form-component-padding-inline-start, var(--db-spacing-fixed-sm)) var(--db-form-component-padding-inline-end, var(--db-spacing-fixed-sm));
563
590
  /* stylelint-disable-next-line a11y/selector-pseudo-class-focus */
564
591
  }
565
- .db-select select::placeholder,
566
- .db-select select + [id$=-placeholder] {
567
- opacity: 0.69;
568
- }
569
592
  .db-select select:hover:not(:disabled, [aria-disabled=true]) {
570
- cursor: pointer;
593
+ cursor: var(--db-overwrite-cursor, pointer);
571
594
  background-color: var(--db-adaptive-bg-basic-transparent-hovered);
572
595
  }
573
596
  .db-select select:hover:not(:disabled, [aria-disabled=true]):is(textarea), .db-select select:hover:not(:disabled, [aria-disabled=true]):is(input) {
@@ -579,7 +602,7 @@ select:is(input, textarea):not(:placeholder-shown),
579
602
  .db-select select:is(input, textarea):not(:disabled):read-only {
580
603
  background-color: var(--db-textarea-read-only, var(--db-adaptive-bg-basic-level-1-default)) !important;
581
604
  }
582
- .db-select label {
605
+ .db-select > label {
583
606
  padding-block-end: var(--db-spacing-fixed-xs);
584
607
  max-inline-size: 25ch;
585
608
  text-overflow: ellipsis;
@@ -587,22 +610,23 @@ select:is(input, textarea):not(:placeholder-shown),
587
610
  overflow: hidden;
588
611
  }
589
612
  @media screen and (prefers-reduced-motion: no-preference) {
590
- .db-select label {
613
+ .db-select > label {
591
614
  transition: font-size var(--db-transition-straight-emotional);
592
615
  }
593
616
  }
594
- .db-select[data-hide-label=true] label {
617
+ .db-select[data-hide-label=true] > label {
595
618
  padding: 0;
596
619
  }
597
- .db-select:has(select:disabled) {
620
+ .db-select:has(select:disabled, select[data-disabled=true]) {
598
621
  opacity: 0.4;
599
622
  pointer-events: none;
600
623
  }
601
624
  .db-select::after, .db-select::before {
602
625
  position: absolute;
603
626
  pointer-events: none;
604
- inset-block-start: calc(var(--db-sizing-md) / 2 - var(--db-spacing-fixed-xs) * var(--db-label-visible-spacing, 0) + var(--db-base-body-icon-font-size-xs) * var(--db-label-visible-height, 1) - 1px);
627
+ inset-block-start: calc((var(--db-spacing-fixed-xs) + var(--db-base-body-icon-font-size-xs)) * var(--db-label-visible-above, 1) + var(--db-sizing-md) / 2);
605
628
  color: var(--db-adaptive-on-bg-basic-emphasis-100-default);
629
+ transform: translateY(-50%);
606
630
  }
607
631
  .db-select::before {
608
632
  margin-inline-end: var(--db-spacing-fixed-sm);
@@ -623,21 +647,6 @@ select:is(input, textarea):not(:placeholder-shown),
623
647
  background-color: var(--db-adaptive-bg-basic-level-1-default);
624
648
  color: var(--db-adaptive-on-bg-basic-emphasis-100-default);
625
649
  }
626
- .db-select[data-hide-label=true] {
627
- --db-label-visible-height: 0;
628
- --db-label-visible-spacing: 1;
629
- }
630
- .db-select [id$=-placeholder] {
631
- position: absolute;
632
- pointer-events: none;
633
- inset-block-start: calc(0% + (var(--db-base-body-icon-font-size-xs) + var(--db-spacing-fixed-xs)) * var(--db-label-visible-height, 1) + var(--db-type-body-font-size-md) / 2 - var(--db-density-functional, 0) * 1px);
634
- inset-inline: calc(var(--db-form-has-before) * (var(--db-base-body-icon-font-size-sm) + var(--db-spacing-fixed-sm)));
635
- margin-inline-start: var(--db-spacing-fixed-sm);
636
- overflow: hidden;
637
- white-space: nowrap;
638
- text-overflow: ellipsis;
639
- inline-size: calc(100% - var(--db-form-component-padding-inline-end) - calc(var(--db-form-has-before) * (var(--db-base-body-icon-font-size-sm) + var(--db-spacing-fixed-sm))) - var(--db-spacing-fixed-sm));
640
- }
641
650
  .db-select:has(> select option:checked:not([hidden])) [id$=-placeholder] {
642
651
  display: none;
643
652
  }