@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
@@ -30,3 +30,8 @@
30
30
  @forward "../components/tab-panel/tab-panel";
31
31
  @forward "../components/switch/switch";
32
32
  @forward "../components/stack/stack";
33
+ @forward "../components/custom-select/custom-select";
34
+ @forward "../components/custom-select-form-field/custom-select-form-field";
35
+ @forward "../components/custom-select-dropdown/custom-select-dropdown";
36
+ @forward "../components/custom-select-list/custom-select-list";
37
+ @forward "../components/custom-select-list-item/custom-select-list-item";
@@ -1,4 +1,7 @@
1
1
  $custom-elements: //hygen-insert
2
+
3
+ db-custom-select-list-item, db-custom-select-list,
4
+ db-custom-select-dropdown, db-custom-select-form-field, db-custom-select,
2
5
  db-stack, db-switch, db-tab-panel, db-tabs, db-tab-list, db-tab-item,
3
6
  db-tab-bar, db-tooltip, db-popover, db-textarea, db-navigation,
4
7
  db-accordion-item, db-accordion, db-badge, db-navigation-item, db-tag,
@@ -22,6 +22,16 @@ $floating-label-size-calc: calc(
22
22
  #{$label-size-height-2xs}
23
23
  );
24
24
 
25
+ // font-size label which is 2xs + smallest spacing
26
+ $floating-label-padding-block-start: calc(
27
+ var(--db-type-body-font-size-2xs) + #{variables.$db-spacing-fixed-3xs}
28
+ );
29
+
30
+ $icon-inline-block-start: calc(
31
+ (#{variables.$db-spacing-fixed-xs} + #{$label-size-height-xs}) *
32
+ var(--db-label-visible-above, 1) + #{variables.$db-sizing-md} / 2
33
+ );
34
+
25
35
  $input-types:
26
36
  "button", "checkbox", "color", "date", "datetime-local", "email", "file",
27
37
  "hidden", "image", "month", "number", "password", "radio", "range", "reset",
@@ -45,22 +55,22 @@ $check-border-size: min(#{variables.$db-border-height-2xs}, 2px);
45
55
  .db-infotext {
46
56
  margin-block-start: variables.$db-spacing-fixed-2xs;
47
57
 
48
- &[data-semantic] {
58
+ &:is([data-semantic="successful"], [data-semantic="critical"]) {
49
59
  display: none;
50
60
  }
51
61
  }
52
62
  }
53
63
 
54
- @mixin placeholder-content() {
55
- &::placeholder,
56
- + [id$="-placeholder"] {
64
+ @mixin placeholder-content($selector) {
65
+ #{$selector}::placeholder,
66
+ [id$="-placeholder"] {
57
67
  @content;
58
68
  }
59
69
  }
60
70
 
61
71
  @mixin set-floating-label-overwrites($selector) {
62
72
  &[data-variant="floating"] {
63
- label {
73
+ > label {
64
74
  @extend %db-overwrite-font-size-md;
65
75
 
66
76
  opacity: component.$placeholder-disabled;
@@ -70,20 +80,16 @@ $check-border-size: min(#{variables.$db-border-height-2xs}, 2px);
70
80
  (#{variables.$db-sizing-md} - #{$font-size-height}) / 2
71
81
  );
72
82
  inset-inline: var(
73
- --db-form-component-padding-inline-start,
74
- #{variables.$db-spacing-fixed-sm}
75
- );
83
+ --db-form-component-padding-inline-start,
84
+ #{variables.$db-spacing-fixed-sm}
85
+ )
86
+ var(
87
+ --db-form-component-padding-inline-end,
88
+ #{variables.$db-spacing-fixed-sm}
89
+ );
76
90
  pointer-events: none;
77
91
  }
78
92
 
79
- // icons
80
- &::after,
81
- &::before {
82
- inset-block-start: calc(
83
- #{variables.$db-sizing-md} / 2 - #{$font-size-height} / 2
84
- );
85
- }
86
-
87
93
  [id$="-placeholder"] {
88
94
  @extend %db-overwrite-font-size-sm;
89
95
 
@@ -92,46 +98,42 @@ $check-border-size: min(#{variables.$db-border-height-2xs}, 2px);
92
98
  );
93
99
  }
94
100
 
101
+ @include placeholder-content($selector) {
102
+ transition: none;
103
+ opacity: 0;
104
+ }
105
+
95
106
  #{$selector} {
96
107
  @extend %db-overwrite-font-size-sm;
97
108
 
98
- @include placeholder-content() {
99
- transition: none;
100
- opacity: 0;
101
- }
102
-
103
109
  @if ($selector == textarea) {
104
110
  padding-block-start: $floating-label-size-calc;
105
111
  /* stylelint-disable-next-line at-rule-empty-line-before */
106
- } @else {
107
- // font-size label which is 2xs + smallest spacing
108
- padding-block-start: calc(
109
- var(--db-type-body-font-size-2xs) +
110
- #{variables.$db-spacing-fixed-3xs}
111
- );
112
+ } @else if($selector != summary) {
113
+ /* stylelint-disable-next-line db-ux/use-spacings */
114
+ padding-block-start: $floating-label-padding-block-start;
112
115
  }
113
116
  }
114
117
 
115
118
  &:has(
116
119
  #{$selector}:focus-within,
117
120
  #{$selector}:is(input, textarea):not(:placeholder-shown),
118
- > select option:checked:not([hidden])
121
+ > select option:checked:not([hidden]),
122
+ input[type="checkbox"]:checked
119
123
  ) {
120
- label {
124
+ > label {
121
125
  @extend %db-overwrite-font-size-2xs;
122
126
 
123
127
  inset-block-start: variables.$db-spacing-fixed-2xs;
124
128
  opacity: 1;
125
129
  }
126
130
 
127
- #{$selector} {
128
- @include placeholder-content() {
129
- opacity: component.$placeholder-disabled;
131
+ @include placeholder-content($selector) {
132
+ opacity: component.$placeholder-disabled;
130
133
 
131
- @media screen and (prefers-reduced-motion: no-preference) {
132
- transition: opacity
133
- #{variables.$db-transition-straight-emotional};
134
- }
134
+ @media screen and (prefers-reduced-motion: no-preference) {
135
+ transition: opacity
136
+ #{variables.$db-transition-straight-emotional};
135
137
  }
136
138
  }
137
139
  }
@@ -164,14 +166,6 @@ $check-border-size: min(#{variables.$db-border-height-2xs}, 2px);
164
166
  $variant: "critical";
165
167
  }
166
168
 
167
- @include get-validity-message($key);
168
-
169
- #{$selector},
170
- [id$="-placeholder"] {
171
- color: var(--db-#{$variant}-on-bg-basic-emphasis-100-default);
172
- caret-color: var(--db-#{$variant}-on-bg-basic-emphasis-100-default);
173
- }
174
-
175
169
  @if ($selector != textarea) {
176
170
  @extend %db-#{$variant}-variables;
177
171
  /* stylelint-disable-next-line at-rule-empty-line-before */
@@ -190,13 +184,21 @@ $check-border-size: min(#{variables.$db-border-height-2xs}, 2px);
190
184
  --db-adaptive-bg-basic-transparent-pressed: var(
191
185
  --db-#{$variant}-bg-basic-transparent-pressed
192
186
  );
193
- --db-adaptive-default: var(
187
+ --db-adaptive-on-bg-basic-emphasis-100-default: var(
194
188
  --db-#{$variant}-on-bg-basic-emphasis-100-default
195
189
  );
196
190
  --db-adaptive-on-bg-basic-emphasis-60-default: var(
197
191
  --db-#{$variant}-on-bg-basic-emphasis-60-default
198
192
  );
199
193
  }
194
+
195
+ #{$selector},
196
+ [id$="-placeholder"] {
197
+ color: var(--db-#{$variant}-on-bg-basic-emphasis-100-default);
198
+ caret-color: var(--db-#{$variant}-on-bg-basic-emphasis-100-default);
199
+ }
200
+
201
+ @include get-validity-message($key);
200
202
  }
201
203
 
202
204
  // This doesn't contain text, search and password, because they don't have an auto-validation
@@ -247,21 +249,27 @@ $input-valid-types:
247
249
  }
248
250
  /* stylelint-disable-next-line at-rule-empty-line-before */
249
251
  } @else {
252
+ @if ($selector == summary) {
253
+ $selector: select;
254
+ }
255
+
250
256
  #{get-validations($selector,$key)} {
251
257
  @content;
252
258
  }
253
259
  }
254
260
 
255
261
  // If data-custom-validity is set we overwrite the selectors above
256
- &:has(#{$selector}[data-custom-validity="#{$key}"]) {
262
+ &:has(#{$selector}[data-custom-validity="#{$key}"]),
263
+ &[data-custom-validity="#{$key}"] {
257
264
  @content;
258
265
  }
259
266
  }
260
267
 
261
268
  @mixin set-required-label($selector) {
262
- &:has(#{$selector}:required) {
269
+ &:has(#{$selector}:required),
270
+ &[data-required="true"] {
263
271
  &:is(label),
264
- label {
272
+ > label {
265
273
  &::after {
266
274
  @include icons.icon-content("*");
267
275
 
@@ -274,15 +282,22 @@ $input-valid-types:
274
282
  }
275
283
 
276
284
  @mixin set-default-form-component($selector) {
277
- --db-form-has-before: 0;
278
-
279
285
  @extend %db-overwrite-font-size-sm;
280
286
  @extend %helper-message;
281
287
 
282
- // we use absolute icons
283
- position: relative;
284
- display: flex;
285
- flex-direction: column;
288
+ /* stylelint-disable-next-line scss/selector-no-redundant-nesting-selector */
289
+ & {
290
+ --db-form-has-before: 0;
291
+ // we use absolute icons
292
+ position: relative;
293
+ display: flex;
294
+ flex-direction: column;
295
+ }
296
+
297
+ &[data-variant="floating"],
298
+ &[data-hide-label="true"] {
299
+ --db-label-visible-above: 0;
300
+ }
286
301
 
287
302
  @include set-floating-label-overwrites($selector);
288
303
  @include set-required-label($selector);
@@ -295,6 +310,10 @@ $input-valid-types:
295
310
  @include get-validity-color($selector, "invalid");
296
311
  }
297
312
 
313
+ @include placeholder-content($selector) {
314
+ opacity: component.$placeholder-disabled;
315
+ }
316
+
298
317
  #{$selector} {
299
318
  @extend %db-overwrite-font-size-md;
300
319
  @extend %default-interactive-component;
@@ -316,10 +335,6 @@ $input-valid-types:
316
335
  #{variables.$db-spacing-fixed-sm}
317
336
  );
318
337
 
319
- @include placeholder-content() {
320
- opacity: component.$placeholder-disabled;
321
- }
322
-
323
338
  @include helpers.hover {
324
339
  background-color: colors.$db-adaptive-bg-basic-transparent-hovered;
325
340
  }
@@ -333,7 +348,7 @@ $input-valid-types:
333
348
  }
334
349
 
335
350
  // label
336
- label {
351
+ > label {
337
352
  @extend %db-overwrite-font-size-xs;
338
353
 
339
354
  padding-block-end: variables.$db-spacing-fixed-xs;
@@ -348,7 +363,7 @@ $input-valid-types:
348
363
  }
349
364
 
350
365
  &[data-hide-label="true"] {
351
- label {
366
+ > label {
352
367
  @extend %a11y-visually-hidden;
353
368
 
354
369
  padding: 0;
@@ -356,7 +371,7 @@ $input-valid-types:
356
371
  }
357
372
 
358
373
  // disabled
359
- &:has(#{$selector}:disabled) {
374
+ &:has(#{$selector}:disabled, #{$selector}[data-disabled="true"]) {
360
375
  // Decided against cursor: not-allowed, compare to e.g. https://phabricator.wikimedia.org/T121960
361
376
  opacity: component.$default-disabled;
362
377
  pointer-events: none;
@@ -367,13 +382,9 @@ $input-valid-types:
367
382
  &::before {
368
383
  position: absolute;
369
384
  pointer-events: none;
370
- // 1px for border
371
- inset-block-start: calc(
372
- #{variables.$db-sizing-md} / 2 - #{variables.$db-spacing-fixed-xs} *
373
- var(--db-label-visible-spacing, 0) + #{$label-size-height-xs} *
374
- var(--db-label-visible-height, 1) - 1px
375
- );
385
+ inset-block-start: $icon-inline-block-start;
376
386
  color: colors.$db-adaptive-on-bg-basic-emphasis-100-default;
387
+ transform: translateY(-50%);
377
388
  }
378
389
 
379
390
  &::before {
@@ -386,7 +397,7 @@ $input-valid-types:
386
397
  inset-inline-end: variables.$db-spacing-fixed-sm;
387
398
  }
388
399
 
389
- @if ($selector == input or $selector == select) {
400
+ @if ($selector == input or $selector == select or $selector == summary) {
390
401
  #{$selector} {
391
402
  block-size: variables.$db-sizing-md;
392
403
  text-overflow: ellipsis;
@@ -434,7 +445,7 @@ $input-valid-types:
434
445
  }
435
446
 
436
447
  &:is(label),
437
- label {
448
+ > label {
438
449
  color: var(--db-#{$variant}-on-bg-basic-emphasis-80-default);
439
450
  }
440
451
  }
@@ -457,7 +468,7 @@ $input-valid-types:
457
468
  }
458
469
 
459
470
  &:is(label),
460
- label {
471
+ > label {
461
472
  display: flex;
462
473
  align-items: flex-start;
463
474
  position: relative;
@@ -27,7 +27,7 @@ $scrollbar-width: helpers.px-to-rem(8);
27
27
  &:read-only {
28
28
  &::-webkit-scrollbar-track,
29
29
  &::-webkit-scrollbar-button:single-button {
30
- background-color: colors.$db-adaptive-bg-basic-level-1-default !important;
30
+ background-color: colors.$db-adaptive-bg-basic-level-1-default;
31
31
  }
32
32
  }
33
33
 
@@ -58,12 +58,23 @@ $scrollbar-width: helpers.px-to-rem(8);
58
58
 
59
59
  /* Up */
60
60
  &::-webkit-scrollbar-button:single-button:vertical:decrement {
61
- background-image: var(--db-textarea-scrollbar-button-decrement);
61
+ border-start-end-radius: variables.$db-border-radius-xs;
62
+ background-image: var(--db-scrollbar-button-vertical-decrement);
62
63
  }
63
64
 
64
65
  /* Down */
65
66
  &::-webkit-scrollbar-button:single-button:vertical:increment {
66
- background-image: var(--db-textarea-scrollbar-button-increment);
67
+ background-image: var(--db-scrollbar-button-vertical-increment);
68
+ }
69
+
70
+ /* Left */
71
+ &::-webkit-scrollbar-button:single-button:horizontal:decrement {
72
+ background-image: var(--db-scrollbar-button-horizontal-decrement);
73
+ }
74
+
75
+ /* Right */
76
+ &::-webkit-scrollbar-button:single-button:horizontal:increment {
77
+ background-image: var(--db-scrollbar-button-horizontal-increment);
67
78
  }
68
79
 
69
80
  &[data-variant="floating"] {
@@ -15,6 +15,15 @@ $interactive-selectors: "label, button:not(.db-tab-remove-button), a";
15
15
  );
16
16
  }
17
17
 
18
+ %set-adaptive-weak-badge {
19
+ border-color: colors.$db-adaptive-on-bg-basic-emphasis-70-default;
20
+
21
+ @include colors.set-current-colors(
22
+ colors.$db-adaptive-bg-basic-level-3-default,
23
+ colors.$db-adaptive-on-bg-basic-emphasis-80-default
24
+ );
25
+ }
26
+
18
27
  %set-adaptive-strong-tag {
19
28
  border-color: colors.$db-adaptive-on-bg-basic-emphasis-80-default;
20
29
 
@@ -69,11 +78,20 @@ $interactive-selectors: "label, button:not(.db-tab-remove-button), a";
69
78
  }
70
79
  }
71
80
 
72
- @mixin get-tag-colors() {
73
- @extend %set-adaptive-weak-tag;
81
+ @mixin get-tag-colors($htmlTag: "tag") {
82
+ @if ($htmlTag == "badge") {
83
+ @extend %set-adaptive-weak-badge;
84
+ // stylelint-disable-next-line at-rule-empty-line-before
85
+ } @else {
86
+ @extend %set-adaptive-weak-tag;
87
+ }
74
88
 
75
89
  &[data-emphasis="strong"] {
76
90
  @extend %set-adaptive-strong-tag;
91
+
92
+ .db-tab-remove-button {
93
+ @extend %set-interactive-strong;
94
+ }
77
95
  }
78
96
 
79
97
  &[data-emphasis="origin"] {