@db-ux/core-components 4.14.0 → 5.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.
Files changed (62) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/build/components/accordion-item/accordion-item.css +0 -1
  3. package/build/components/brand/brand.css +0 -1
  4. package/build/components/brand/brand.scss +0 -1
  5. package/build/components/button/button.css +4 -9
  6. package/build/components/checkbox/checkbox.css +0 -3
  7. package/build/components/checkbox/checkbox.scss +0 -2
  8. package/build/components/custom-button/custom-button.css +8 -13
  9. package/build/components/custom-button/custom-button.scss +2 -3
  10. package/build/components/custom-select/custom-select.css +0 -1
  11. package/build/components/custom-select-list-item/custom-select-list-item.css +6 -2
  12. package/build/components/custom-select-list-item/custom-select-list-item.scss +8 -3
  13. package/build/components/drawer/drawer.css +94 -166
  14. package/build/components/drawer/drawer.scss +160 -176
  15. package/build/components/drawer-footer/drawer-footer.css +34 -0
  16. package/build/components/drawer-footer/drawer-footer.scss +11 -0
  17. package/build/components/drawer-header/drawer-header.css +38 -0
  18. package/build/components/drawer-header/drawer-header.scss +17 -0
  19. package/build/components/header/header.css +50 -40
  20. package/build/components/header/header.scss +35 -21
  21. package/build/components/icon/icon.css +0 -6
  22. package/build/components/infotext/infotext.css +0 -4
  23. package/build/components/infotext/infotext.scss +0 -2
  24. package/build/components/input/input.css +0 -5
  25. package/build/components/link/link.css +5 -5
  26. package/build/components/link/link.scss +8 -3
  27. package/build/components/navigation/navigation.css +1 -2
  28. package/build/components/navigation/navigation.scss +2 -2
  29. package/build/components/navigation-item/navigation-item.css +15 -27
  30. package/build/components/navigation-item/navigation-item.scss +17 -21
  31. package/build/components/notification/notification.css +0 -1
  32. package/build/components/notification/notification.scss +0 -2
  33. package/build/components/select/select.css +6 -1
  34. package/build/components/select/select.scss +7 -0
  35. package/build/components/switch/switch.css +0 -3
  36. package/build/components/switch/switch.scss +0 -1
  37. package/build/components/tab-item/tab-item.css +120 -98
  38. package/build/components/tab-item/tab-item.scss +89 -90
  39. package/build/components/tab-list/tab-list.css +38 -36
  40. package/build/components/tab-list/tab-list.scss +11 -9
  41. package/build/components/tab-panel/tab-panel.css +30 -4
  42. package/build/components/tab-panel/tab-panel.scss +60 -2
  43. package/build/components/table/table.css +0 -4
  44. package/build/components/table-row/table-row.css +0 -4
  45. package/build/components/table-row/table-row.scss +0 -5
  46. package/build/components/tabs/tabs.css +152 -263
  47. package/build/components/tabs/tabs.scss +243 -198
  48. package/build/components/tag/tag.css +2 -21
  49. package/build/components/tag/tag.scss +5 -7
  50. package/build/styles/absolute.css +11 -11
  51. package/build/styles/bundle.css +11 -11
  52. package/build/styles/index.css +10 -10
  53. package/build/styles/index.scss +3 -1
  54. package/build/styles/internal/_button-components.scss +7 -4
  55. package/build/styles/internal/_component.scss +4 -0
  56. package/build/styles/internal/_custom-elements.scss +3 -2
  57. package/build/styles/internal/_icon-passing.scss +9 -10
  58. package/build/styles/relative.css +11 -11
  59. package/build/styles/rollup.css +11 -11
  60. package/build/styles/wc-workarounds.css +1 -1
  61. package/build/styles/webpack.css +11 -11
  62. package/package.json +6 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # @db-ux/core-components
2
2
 
3
+ ## 5.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - fix: drawer close handling by removing timeout state management - [see commit 45d93f0](https://github.com/db-ux-design-system/core-web/commit/45d93f010bf0caece669f96c6f00d288ebdf5363)
8
+
9
+ - fix(select): icon overlapping the floating label - [see commit 9dff6ed](https://github.com/db-ux-design-system/core-web/commit/9dff6ed85fa5e2f6aebd89b3b2662e3a017b196e)
10
+
11
+ ## 5.0.0
12
+
13
+ We're providing a [migration guide for all 4.x to 5.0.0](https://github.com/db-ux-design-system/core-web/blob/main/docs/migration/v4.x.x-to-v5.0.0.md) changes.
14
+
15
+ ### Major Changes
16
+
17
+ - refactor: DBDrawer with breaking changes - [see commit 9189f6c](https://github.com/db-ux-design-system/core-web/commit/9189f6c24cd3a64f072c2f60f8c8127d1ed68c55):
18
+
19
+ - The `DBDrawer` component now requires a `DBDrawerHeader` component to be passed in the `header` slot.
20
+ - The `spacing` property has been removed from `DBDrawer`.
21
+ - The default `direction` has changed from `right` to `to-left`.
22
+ - The `width` property has been renamed to `containerSize`.
23
+ - The `direction` values have been renamed from `right`/`left` to `to-left`/`to-right`.
24
+
25
+ - refactor: remove default `margin-inline` from `[data-icon]` pseudo-elements in favor of `gap` - [see commit 635f4b7](https://github.com/db-ux-design-system/core-web/commit/635f4b7ff6ce2aa9341932cb0b8a9c8657ed1ade)
26
+
27
+ - refactor: rework DBTabs and DBTabItem - [see commit c50e522](https://github.com/db-ux-design-system/core-web/commit/c50e5221a4c6f3357ff52451291bdc5772267178):
28
+
29
+ - **Breaking:** DBTabItem now renders a native `button` (`role="tab"`) instead of a radio `input`.
30
+ - **Breaking:** Removed `checked`, `noText` and `name` from DBTabItem.
31
+ - **Breaking:** Renamed DBTabs props `onTabSelect` → `onIndexChange`, `alignment` → `tabItemAlignment`, `width` → `tabItemWidth`.
32
+ - **Breaking:** Deep linking derives the tab id from the `id` prop instead of `label`.
33
+ - Added truncation tooltip for overflowing tab labels and fixed vertical layout, trailing icon and tooltip placement.
34
+
35
+ ### Patch Changes
36
+
37
+ - fix: remove dead `z-index` and `position: relative` from table-row interactive children - [see commit 7edb77b](https://github.com/db-ux-design-system/core-web/commit/7edb77bb9f90d4a79f238ebab362074d12f02f0f)
38
+
3
39
  ## 4.14.0
4
40
 
5
41
  ### Minor Changes
@@ -84,7 +84,6 @@
84
84
 
85
85
  .db-accordion-item > details > summary:not([data-show-icon-trailing=false])::after {
86
86
  --db-icon-trailing: "chevron_down";
87
- margin-inline-start: var(--db-icon-margin-start, var(--db-spacing-fixed-xs));
88
87
  content: var(--db-icon-trailing, attr(data-icon-trailing));
89
88
  }
90
89
  @supports (content: ""/"") {
@@ -18,7 +18,6 @@
18
18
  }
19
19
  .db-brand::before {
20
20
  --db-icon-font-size: var(--db-sizing-md);
21
- --db-icon-margin-end: 0;
22
21
  --db-icon-color: var(--db-brand-origin-default);
23
22
  }
24
23
  .db-brand img {
@@ -13,7 +13,6 @@
13
13
 
14
14
  &::before {
15
15
  --db-icon-font-size: #{variables.$db-sizing-md};
16
- --db-icon-margin-end: 0;
17
16
  --db-icon-color: #{colors.$db-brand-origin-default};
18
17
  }
19
18
 
@@ -89,15 +89,12 @@
89
89
  block-size: var(--db-sizing-md);
90
90
  font-size: 0 !important;
91
91
  }
92
- .db-button[data-no-text=true]::before {
93
- --db-icon-margin-end: 0;
94
- }
95
- .db-button[data-no-text=true] {
96
- /* stylelint-disable-next-line at-rule-empty-line-before */
97
- }
98
92
  .db-button[data-no-text=true]::before {
99
93
  margin: auto;
100
94
  }
95
+ .db-button:not([data-no-text=true]) {
96
+ gap: var(--db-spacing-fixed-xs);
97
+ }
101
98
  .db-button[data-wrap=false] {
102
99
  white-space: nowrap;
103
100
  }
@@ -107,9 +104,7 @@
107
104
  }
108
105
  .db-button[data-size=small]:not([data-no-text=true]) {
109
106
  padding: 1px var(--db-spacing-fixed-sm);
110
- }
111
- .db-button[data-size=small]:not([data-no-text=true])::before {
112
- margin-inline-end: var(--db-spacing-fixed-2xs);
107
+ gap: var(--db-spacing-fixed-2xs);
113
108
  }
114
109
  .db-button[data-size=small][data-no-text=true] {
115
110
  inline-size: var(--db-sizing-sm);
@@ -82,7 +82,6 @@
82
82
  }
83
83
 
84
84
  .db-checkbox input:not([data-show-icon-leading=false]):indeterminate::before, .db-checkbox input:not([data-show-icon-leading=false]):checked::before {
85
- --db-icon-margin-end: 0;
86
85
  display: inline-flex;
87
86
  align-items: center;
88
87
  justify-content: center;
@@ -394,14 +393,12 @@
394
393
  }
395
394
  .db-checkbox input:checked:not([data-show-icon-leading=false])::before {
396
395
  --db-icon: "check";
397
- margin-inline-end: var(--db-icon-margin-end, var(--db-spacing-fixed-xs));
398
396
  }
399
397
  .db-checkbox input:checked {
400
398
  border-width: 0;
401
399
  }
402
400
  .db-checkbox input:indeterminate:not([data-show-icon-leading=false])::before {
403
401
  --db-icon: "minus";
404
- margin-inline-end: var(--db-icon-margin-end, var(--db-spacing-fixed-xs));
405
402
  }
406
403
  @media (forced-colors: active) {
407
404
  .db-checkbox input:indeterminate, .db-checkbox input:checked {
@@ -9,8 +9,6 @@
9
9
  %center-icon {
10
10
  &:not([data-show-icon-leading="false"]) {
11
11
  &::before {
12
- --db-icon-margin-end: 0;
13
-
14
12
  display: inline-flex;
15
13
  align-items: center;
16
14
  justify-content: center;
@@ -116,15 +116,12 @@
116
116
  block-size: var(--db-sizing-md);
117
117
  font-size: 0 !important;
118
118
  }
119
- .db-custom-button[data-no-text=true] label::before, .db-custom-button[data-no-text=true] button::before, .db-custom-button[data-no-text=true] a::before {
120
- --db-icon-margin-end: 0;
121
- }
122
- .db-custom-button[data-no-text=true] label, .db-custom-button[data-no-text=true] button, .db-custom-button[data-no-text=true] a {
123
- /* stylelint-disable-next-line at-rule-empty-line-before */
124
- }
125
119
  .db-custom-button[data-no-text=true] label::before, .db-custom-button[data-no-text=true] button::before, .db-custom-button[data-no-text=true] a::before {
126
120
  margin: auto;
127
121
  }
122
+ .db-custom-button:not([data-no-text=true]) label, .db-custom-button:not([data-no-text=true]) button, .db-custom-button:not([data-no-text=true]) a {
123
+ gap: var(--db-spacing-fixed-xs);
124
+ }
128
125
  .db-custom-button[data-wrap=false] label, .db-custom-button[data-wrap=false] button, .db-custom-button[data-wrap=false] a {
129
126
  white-space: nowrap;
130
127
  }
@@ -134,9 +131,7 @@
134
131
  }
135
132
  .db-custom-button[data-size=small] label:not([data-no-text=true]), .db-custom-button[data-size=small] button:not([data-no-text=true]), .db-custom-button[data-size=small] a:not([data-no-text=true]) {
136
133
  padding: 1px var(--db-spacing-fixed-sm);
137
- }
138
- .db-custom-button[data-size=small] label:not([data-no-text=true])::before, .db-custom-button[data-size=small] button:not([data-no-text=true])::before, .db-custom-button[data-size=small] a:not([data-no-text=true])::before {
139
- margin-inline-end: var(--db-spacing-fixed-2xs);
134
+ gap: var(--db-spacing-fixed-2xs);
140
135
  }
141
136
  .db-custom-button[data-size=small] label[data-no-text=true], .db-custom-button[data-size=small] button[data-no-text=true], .db-custom-button[data-size=small] a[data-no-text=true] {
142
137
  inline-size: var(--db-sizing-sm);
@@ -170,26 +165,26 @@
170
165
  .db-custom-button[data-icon-leading]:not([data-show-icon-leading=false]) > * > :is(label, button, a), .db-custom-button[data-icon]:not([data-show-icon=false]) > :is(label, button, a),
171
166
  .db-custom-button[data-icon]:not([data-show-icon=false]) > * > :is(label, button, a) {
172
167
  /* stylelint-disable-next-line db-ux/use-spacings */
173
- padding-inline-start: var(--db-icon-passing-padding-inline-start, calc(var(--db-spacing-fixed-sm) + var(--db-icon-margin-end, var(--db-spacing-fixed-xs)) + var(--db-icon-font-size)));
168
+ padding-inline-start: var(--db-icon-passing-padding-inline-start, calc(var(--db-spacing-fixed-sm) + var(--db-spacing-fixed-xs) + var(--db-icon-font-size, 1lh)));
174
169
  }
175
170
  .db-custom-button[data-icon-trailing]:not([data-show-icon-trailing=false])::after {
176
171
  position: absolute;
177
- inset-block-start: calc(50% - 0.5em);
172
+ inset-block-start: var(--db-icon-passing-inset-block-start, calc(50% - 0.5em));
178
173
  inset-inline-end: var(--db-spacing-fixed-sm);
179
174
  pointer-events: none;
180
175
  z-index: 1;
181
176
  }
182
177
  .db-custom-button[data-icon-trailing]:not([data-show-icon-trailing=false]) > :is(label, button, a),
183
178
  .db-custom-button[data-icon-trailing]:not([data-show-icon-trailing=false]) > * > :is(label, button, a) {
184
- padding-inline-end: calc(var(--db-spacing-fixed-sm) + var(--db-icon-margin-end, var(--db-spacing-fixed-xs)) + var(--db-icon-font-size));
179
+ padding-inline-end: calc(var(--db-spacing-fixed-sm) + var(--db-spacing-fixed-xs) + var(--db-icon-font-size, 1lh));
185
180
  }
186
181
  .db-custom-button:has(:is(input, button):disabled,
187
182
  :is(input, button, a)[aria-disabled=true]) {
188
183
  opacity: var(--db-opacity-md);
189
184
  }
190
185
  .db-custom-button[data-no-text=true] {
191
- --db-icon-margin-end: 0;
192
186
  --db-icon-passing-inset-inline-start: calc(50% - 0.5em);
187
+ --db-icon-passing-padding-inline-start: 0;
193
188
  }
194
189
  .db-custom-button label:has(input:checked) {
195
190
  color: var(--db-adaptive-on-bg-inverted-default);
@@ -1,6 +1,5 @@
1
1
  @use "@db-ux/core-foundations/build/styles/variables";
2
2
  @use "@db-ux/core-foundations/build/styles/colors";
3
- @use "@db-ux/core-foundations/build/styles/icons";
4
3
  @use "@db-ux/core-foundations/build/styles/helpers";
5
4
  @use "../../styles/internal/button-components";
6
5
  @use "../../styles/internal/icon-passing";
@@ -14,7 +13,7 @@
14
13
  }
15
14
 
16
15
  $icon-padding-custom-button: calc(
17
- #{variables.$db-spacing-fixed-sm} + #{icons.$default-icon-margin-end} +
16
+ #{variables.$db-spacing-fixed-sm} + #{variables.$db-spacing-fixed-xs} +
18
17
  var(--db-icon-font-size)
19
18
  );
20
19
 
@@ -48,8 +47,8 @@ $icon-padding-custom-button: calc(
48
47
  }
49
48
 
50
49
  &[data-no-text="true"] {
51
- --db-icon-margin-end: 0;
52
50
  --db-icon-passing-inset-inline-start: calc(50% - 0.5em);
51
+ --db-icon-passing-padding-inline-start: 0;
53
52
  }
54
53
 
55
54
  label:has(input:checked) {
@@ -554,7 +554,6 @@ input[type=radio]:checked) > label {
554
554
 
555
555
  .db-custom-select:not([data-show-icon-trailing=false])::after {
556
556
  --db-icon-trailing: "chevron_down";
557
- margin-inline-start: var(--db-icon-margin-start, var(--db-spacing-fixed-xs));
558
557
  content: var(--db-icon-trailing, attr(data-icon-trailing));
559
558
  }
560
559
  @supports (content: ""/"") {
@@ -112,10 +112,15 @@ db-custom-select-list-item:not(:last-of-type) .db-custom-select-list-item[data-d
112
112
  /* jscpd:ignore-end */
113
113
  }
114
114
  .db-custom-select-list-item > label {
115
- --db-icon-margin-start: auto;
116
115
  --db-check-element-label-color: var(--db-adaptive-on-bg-basic-emphasis-100-default);
117
116
  inline-size: 100%;
118
117
  }
118
+ .db-custom-select-list-item > label::before {
119
+ margin-inline-end: var(--db-spacing-fixed-xs);
120
+ }
121
+ .db-custom-select-list-item > label::after {
122
+ margin-inline-start: auto;
123
+ }
119
124
  .db-custom-select-list-item > label .db-custom-select-list-item-label {
120
125
  min-inline-size: 0;
121
126
  overflow-wrap: anywhere;
@@ -126,7 +131,6 @@ db-custom-select-list-item:not(:last-of-type) .db-custom-select-list-item[data-d
126
131
  }
127
132
  .db-custom-select-list-item > label:has(input[type=radio]) {
128
133
  --db-icon-trailing: "none";
129
- gap: 0;
130
134
  }
131
135
  .db-custom-select-list-item > label:has(input[type=radio]:checked) {
132
136
  --db-overwrite-cursor: default;
@@ -47,11 +47,18 @@ db-custom-select-list-item:not(:last-of-type) {
47
47
  }
48
48
 
49
49
  > label {
50
- --db-icon-margin-start: auto;
51
50
  --db-check-element-label-color: #{colors.$db-adaptive-on-bg-basic-emphasis-100-default};
52
51
 
53
52
  inline-size: 100%;
54
53
 
54
+ &::before {
55
+ margin-inline-end: variables.$db-spacing-fixed-xs;
56
+ }
57
+
58
+ &::after {
59
+ margin-inline-start: auto;
60
+ }
61
+
55
62
  .db-custom-select-list-item-label {
56
63
  // Long labels wrap onto new lines by default (fixed/full dropdowns).
57
64
  // The auto-width dropdown overrides this to stay single-line
@@ -69,8 +76,6 @@ db-custom-select-list-item:not(:last-of-type) {
69
76
 
70
77
  &:has(input[type="radio"]) {
71
78
  --db-icon-trailing: "none";
72
-
73
- gap: 0;
74
79
  }
75
80
 
76
81
  &:has(input[type="radio"]:checked) {
@@ -45,34 +45,64 @@ dialog:not([data-backdrop=none])[data-backdrop=weak]::backdrop, dialog:not([data
45
45
  background-color: color(from var(--db-adaptive-on-bg-basic-emphasis-100-default) srgb r g b/var(--db-opacity-sm));
46
46
  }
47
47
 
48
- .db-drawer .db-drawer-container:not([data-direction]), .db-drawer .db-drawer-container[data-direction=right] {
49
- transform: translateX(110%);
50
- inset-inline: auto 0;
48
+ .db-drawer .db-drawer-container:not([data-direction]), .db-drawer .db-drawer-container[data-direction=to-left], .db-drawer .db-drawer-container[data-direction=to-right] {
49
+ inline-size: calc(var(--db-drawer-inline-size) - var(--db-drawer-container-backdrop-spacing, 0px));
50
+ min-inline-size: var(--db-drawer-min-width, auto);
51
+ max-inline-size: var(--db-drawer-max-width, var(--db-drawer-max-width-horizontal));
51
52
  }
52
- .db-drawer [data-rounded=true].db-drawer-container:not([data-direction]), .db-drawer [data-rounded=true].db-drawer-container[data-direction=right] {
53
- border-start-start-radius: var(--db-border-radius-sm);
54
- border-end-start-radius: var(--db-border-radius-sm);
53
+ .db-drawer .db-drawer-container:not([data-container-size]):not([data-direction]), .db-drawer .db-drawer-container[data-direction=to-left]:not([data-container-size]), .db-drawer .db-drawer-container[data-direction=to-right]:not([data-container-size]), .db-drawer [data-container-size=small].db-drawer-container:not([data-direction]), .db-drawer [data-container-size=small].db-drawer-container[data-direction=to-left], .db-drawer [data-container-size=small].db-drawer-container[data-direction=to-right] {
54
+ --db-drawer-max-width-horizontal: var(--db-container-xs);
55
+ }
56
+ .db-drawer [data-container-size=medium].db-drawer-container:not([data-direction]), .db-drawer [data-container-size=medium].db-drawer-container[data-direction=to-left], .db-drawer [data-container-size=medium].db-drawer-container[data-direction=to-right] {
57
+ --db-drawer-max-width-horizontal: var(--db-container-lg);
58
+ }
59
+ .db-drawer [data-container-size=large].db-drawer-container:not([data-direction]), .db-drawer [data-container-size=large].db-drawer-container[data-direction=to-left], .db-drawer [data-container-size=large].db-drawer-container[data-direction=to-right] {
60
+ --db-drawer-max-width-horizontal: var(--db-container-3xl);
61
+ }
62
+
63
+ .db-drawer .db-drawer-container[data-direction=down], .db-drawer .db-drawer-container[data-direction=up] {
64
+ block-size: calc(var(--db-drawer-block-size) - var(--db-drawer-container-backdrop-spacing, 0px));
65
+ min-block-size: var(--db-drawer-min-height, auto);
66
+ max-block-size: var(--db-drawer-max-height, var(--db-drawer-max-height-vertical));
67
+ }
68
+ .db-drawer [data-container-size=small].db-drawer-container[data-direction=down], .db-drawer [data-container-size=small].db-drawer-container[data-direction=up] {
69
+ --db-drawer-max-height-vertical: calc(var(--db-drawer-block-size) / 3);
70
+ }
71
+ .db-drawer [data-container-size=medium].db-drawer-container[data-direction=down], .db-drawer [data-container-size=medium].db-drawer-container[data-direction=up] {
72
+ --db-drawer-max-height-vertical: calc(var(--db-drawer-block-size) / 2);
73
+ }
74
+ .db-drawer .db-drawer-container[data-direction=down]:not([data-container-size]), .db-drawer .db-drawer-container[data-direction=up]:not([data-container-size]), .db-drawer [data-container-size=large].db-drawer-container[data-direction=down], .db-drawer [data-container-size=large].db-drawer-container[data-direction=up] {
75
+ --db-drawer-max-height-vertical: calc(
76
+ (var(--db-drawer-block-size) / 3) * 2
77
+ );
55
78
  }
56
79
 
57
- .db-drawer .db-drawer-container[data-direction=left] {
80
+ .db-drawer .db-drawer-container[data-direction=to-right]:not([data-transition=open]) {
58
81
  transform: translateX(-110%);
82
+ }
83
+ .db-drawer .db-drawer-container[data-direction=to-right] {
59
84
  inset-inline: 0 auto;
60
85
  }
61
- .db-drawer [data-rounded=true].db-drawer-container[data-direction=left] {
86
+ .db-drawer [data-rounded=true].db-drawer-container[data-direction=to-right] {
62
87
  border-start-end-radius: var(--db-border-radius-sm);
63
88
  border-end-end-radius: var(--db-border-radius-sm);
64
89
  }
65
90
 
66
- .db-drawer .db-drawer-container[data-direction=down]:not([data-width=full]), .db-drawer .db-drawer-container[data-direction=up]:not([data-width=full]) {
67
- /* stylelint-disable-next-line db-ux/use-sizing */
68
- max-block-size: var(--db-drawer-max-height, calc(100% - var(--db-spacing-fixed-xl)));
69
- /* stylelint-disable-next-line db-ux/use-sizing */
70
- min-block-size: var(--db-drawer-min-height, auto);
71
- max-inline-size: none;
91
+ .db-drawer .db-drawer-container:not([data-transition=open]):not([data-direction]), .db-drawer .db-drawer-container[data-direction=to-left]:not([data-transition=open]) {
92
+ transform: translateX(110%);
93
+ }
94
+ .db-drawer .db-drawer-container:not([data-direction]), .db-drawer .db-drawer-container[data-direction=to-left] {
95
+ inset-inline: auto 0;
96
+ }
97
+ .db-drawer [data-rounded=true].db-drawer-container:not([data-direction]), .db-drawer [data-rounded=true].db-drawer-container[data-direction=to-left] {
98
+ border-start-start-radius: var(--db-border-radius-sm);
99
+ border-end-start-radius: var(--db-border-radius-sm);
72
100
  }
73
101
 
74
- .db-drawer .db-drawer-container[data-direction=up] {
102
+ .db-drawer .db-drawer-container[data-direction=up]:not([data-transition=open]) {
75
103
  transform: translateY(110%);
104
+ }
105
+ .db-drawer .db-drawer-container[data-direction=up] {
76
106
  inset: auto 0 0;
77
107
  }
78
108
  .db-drawer [data-rounded=true].db-drawer-container[data-direction=up] {
@@ -80,8 +110,10 @@ dialog:not([data-backdrop=none])[data-backdrop=weak]::backdrop, dialog:not([data
80
110
  border-start-start-radius: var(--db-border-radius-sm);
81
111
  }
82
112
 
83
- .db-drawer .db-drawer-container[data-direction=down] {
113
+ .db-drawer .db-drawer-container[data-direction=down]:not([data-transition=open]) {
84
114
  transform: translateY(-110%);
115
+ }
116
+ .db-drawer .db-drawer-container[data-direction=down] {
85
117
  inset: 0 0 auto;
86
118
  }
87
119
  .db-drawer [data-rounded=true].db-drawer-container[data-direction=down] {
@@ -89,117 +121,48 @@ dialog:not([data-backdrop=none])[data-backdrop=weak]::backdrop, dialog:not([data
89
121
  border-end-start-radius: var(--db-border-radius-sm);
90
122
  }
91
123
 
92
- .db-drawer [data-spacing=small].db-drawer-container {
93
- /* stylelint-disable-next-line block-no-redundant-nested-style-rules */
94
- }
95
- .db-drawer [data-spacing=small].db-drawer-container {
96
- padding-block: var(--db-spacing-fixed-xs);
124
+ .db-drawer .db-drawer-container:not(:has(.db-drawer-footer)) > .db-drawer-content {
125
+ margin-block-end: env(safe-area-inset-bottom);
97
126
  }
98
- .db-drawer [data-spacing=small].db-drawer-container .db-drawer-header {
99
- /* stylelint-disable-next-line db-ux/use-spacings */
100
- padding-block-end: var(--db-drawer-header-padding-block-end, var(--db-spacing-fixed-xs));
101
- padding-inline: var(--db-spacing-fixed-md);
102
- }
103
- .db-drawer [data-spacing=small].db-drawer-container .db-drawer-content {
104
- /* stylelint-disable-next-line db-ux/use-spacings */
105
- padding-inline: var(--db-drawer-content-padding-inline, var(--db-spacing-fixed-md));
106
- overflow-y: auto;
107
- overflow-block: auto;
108
- }
109
- .db-drawer .db-drawer-container {
110
- /* stylelint-disable-next-line block-no-redundant-nested-style-rules */
127
+ .db-drawer .db-drawer-container:has(.db-drawer-footer) .db-drawer-footer {
128
+ padding-block-end: calc(var(--db-spacing-fixed-xs) + env(safe-area-inset-bottom));
111
129
  }
130
+
112
131
  .db-drawer .db-drawer-container {
113
- padding-block: var(--db-spacing-fixed-sm);
114
- }
115
- .db-drawer .db-drawer-container .db-drawer-header {
116
- /* stylelint-disable-next-line db-ux/use-spacings */
117
- padding-block-end: var(--db-drawer-header-padding-block-end, var(--db-spacing-fixed-sm));
118
- padding-inline: var(--db-spacing-fixed-lg);
119
- }
120
- .db-drawer .db-drawer-container .db-drawer-content {
121
- /* stylelint-disable-next-line db-ux/use-spacings */
122
- padding-inline: var(--db-drawer-content-padding-inline, var(--db-spacing-fixed-lg));
123
- overflow-y: auto;
124
- overflow-block: auto;
125
- }
126
- .db-drawer [data-spacing=medium].db-drawer-container {
127
- /* stylelint-disable-next-line block-no-redundant-nested-style-rules */
128
- }
129
- .db-drawer [data-spacing=medium].db-drawer-container {
130
- padding-block: var(--db-spacing-fixed-sm);
131
- }
132
- .db-drawer [data-spacing=medium].db-drawer-container .db-drawer-header {
133
- /* stylelint-disable-next-line db-ux/use-spacings */
134
- padding-block-end: var(--db-drawer-header-padding-block-end, var(--db-spacing-fixed-sm));
135
- padding-inline: var(--db-spacing-fixed-lg);
132
+ --db-drawer-close-delay: 0;
136
133
  }
137
- .db-drawer [data-spacing=medium].db-drawer-container .db-drawer-content {
138
- /* stylelint-disable-next-line db-ux/use-spacings */
139
- padding-inline: var(--db-drawer-content-padding-inline, var(--db-spacing-fixed-lg));
140
- overflow-y: auto;
141
- overflow-block: auto;
142
- }
143
- .db-drawer [data-spacing=large].db-drawer-container {
144
- /* stylelint-disable-next-line block-no-redundant-nested-style-rules */
145
- }
146
- .db-drawer [data-spacing=large].db-drawer-container {
147
- padding-block: var(--db-spacing-fixed-md);
148
- }
149
- .db-drawer [data-spacing=large].db-drawer-container .db-drawer-header {
150
- /* stylelint-disable-next-line db-ux/use-spacings */
151
- padding-block-end: var(--db-drawer-header-padding-block-end, var(--db-spacing-fixed-md));
152
- padding-inline: var(--db-spacing-fixed-xl);
153
- }
154
- .db-drawer [data-spacing=large].db-drawer-container .db-drawer-content {
155
- /* stylelint-disable-next-line db-ux/use-spacings */
156
- padding-inline: var(--db-drawer-content-padding-inline, var(--db-spacing-fixed-xl));
157
- overflow-y: auto;
158
- overflow-block: auto;
159
- }
160
- .db-drawer [data-spacing=none].db-drawer-container {
161
- /* stylelint-disable-next-line block-no-redundant-nested-style-rules */
162
- }
163
- .db-drawer [data-spacing=none].db-drawer-container {
164
- padding-block: 0;
165
- }
166
- .db-drawer [data-spacing=none].db-drawer-container .db-drawer-header {
167
- /* stylelint-disable-next-line db-ux/use-spacings */
168
- padding-block-end: var(--db-drawer-header-padding-block-end, 0);
169
- padding-inline: 0;
170
- }
171
- .db-drawer [data-spacing=none].db-drawer-container .db-drawer-content {
172
- /* stylelint-disable-next-line db-ux/use-spacings */
173
- padding-inline: var(--db-drawer-content-padding-inline, 0);
174
- overflow-y: auto;
175
- overflow-block: auto;
134
+ @media (prefers-reduced-motion: no-preference) {
135
+ .db-drawer .db-drawer-container {
136
+ --db-drawer-close-delay: var(--db-transition-duration-extra-slow);
137
+ }
176
138
  }
177
-
178
139
  .db-drawer .db-drawer-container {
179
- display: flex;
180
- flex-direction: column;
140
+ display: grid;
141
+ grid-template-rows: [header] auto [main] 1fr [footer] auto;
181
142
  background-color: var(--db-adaptive-bg-basic-level-1-default);
182
- block-size: 100%;
183
- inline-size: 100%;
143
+ inline-size: var(--db-drawer-inline-size);
144
+ block-size: var(--db-drawer-block-size);
184
145
  position: fixed;
185
146
  box-shadow: var(--db-elevation-md);
186
147
  }
187
- .db-drawer .db-drawer-container:not([data-width=full]) {
188
- /* stylelint-disable-next-line db-ux/use-sizing */
189
- max-inline-size: var(--db-drawer-max-width, calc(100% - var(--db-spacing-fixed-xl)));
190
- /* stylelint-disable-next-line db-ux/use-sizing */
191
- min-inline-size: var(--db-drawer-min-width, auto);
148
+ .db-drawer .db-drawer-container > .db-drawer-content {
149
+ overflow-y: auto;
150
+ overscroll-behavior: contain;
151
+ padding: var(--db-drawer-content-padding, var(--db-spacing-fixed-xs) max(var(--db-spacing-fixed-sm), max(env(safe-area-inset-left), env(safe-area-inset-right))));
152
+ }
153
+ .db-drawer .db-drawer-container[data-show-spacing=true] {
154
+ --db-drawer-container-backdrop-spacing: var(--db-sizing-md);
192
155
  }
193
- .db-drawer .db-drawer-container:not([data-width=full]):not([data-direction]), .db-drawer .db-drawer-container:not([data-width=full])[data-direction=right] {
156
+ .db-drawer .db-drawer-container[data-show-spacing=true]:not([data-direction]), .db-drawer .db-drawer-container[data-show-spacing=true][data-direction=to-left] {
194
157
  border-inline-start: var(--db-border-width-3xs) solid var(--db-adaptive-on-bg-basic-emphasis-60-default);
195
158
  }
196
- .db-drawer .db-drawer-container:not([data-width=full])[data-direction=left] {
159
+ .db-drawer .db-drawer-container[data-show-spacing=true][data-direction=to-right] {
197
160
  border-inline-end: var(--db-border-width-3xs) solid var(--db-adaptive-on-bg-basic-emphasis-60-default);
198
161
  }
199
- .db-drawer .db-drawer-container:not([data-width=full])[data-direction=up] {
162
+ .db-drawer .db-drawer-container[data-show-spacing=true][data-direction=up] {
200
163
  border-block-start: var(--db-border-width-3xs) solid var(--db-adaptive-on-bg-basic-emphasis-60-default);
201
164
  }
202
- .db-drawer .db-drawer-container:not([data-width=full])[data-direction=down] {
165
+ .db-drawer .db-drawer-container[data-show-spacing=true][data-direction=down] {
203
166
  border-block-end: var(--db-border-width-3xs) solid var(--db-adaptive-on-bg-basic-emphasis-60-default);
204
167
  }
205
168
  .db-drawer .db-drawer-container[data-rounded=true] {
@@ -210,78 +173,43 @@ dialog:not([data-backdrop=none])[data-backdrop=weak]::backdrop, dialog:not([data
210
173
  transition: transform var(--db-transition-duration-extra-slow) var(--db-transition-timing-emotional);
211
174
  }
212
175
  }
213
- .db-drawer .db-drawer-container .db-drawer-header {
214
- display: none;
215
- --db-divider-bg-color: var(--db-adaptive-on-bg-basic-emphasis-60-default);
216
- position: var(--db-tooltip-parent-position, relative);
176
+ .db-drawer:not([data-position=absolute]) {
177
+ --db-drawer-inline-size: 100lvw;
178
+ --db-drawer-block-size: 100lvh;
217
179
  }
218
- .db-drawer .db-drawer-container .db-drawer-header[data-emphasis=strong] {
219
- --db-divider-bg-color: var(--db-adaptive-on-bg-basic-emphasis-70-default);
180
+ .db-drawer:not([data-position=absolute])[open] .db-drawer-container[data-transition=open] {
181
+ transform: none;
220
182
  }
221
- .db-drawer .db-drawer-container .db-drawer-header::before {
222
- content: "";
223
- background-color: var(--db-divider-bg-color);
224
- position: absolute;
225
- /* jscpd:ignore-start */
226
- block-size: var(--db-border-width-3xs);
227
- inset-block-end: 0;
228
- inset-inline: 0;
229
- /* stylelint-disable-next-line db-ux/use-border-color */
230
- }
231
- @media (forced-colors: active) {
232
- .db-drawer .db-drawer-container .db-drawer-header::before {
233
- /* stylelint-disable-next-line db-ux/use-border-color */
234
- border-block-end: var(--db-border-width-3xs) solid var(--db-divider-bg-color);
183
+ @media (prefers-reduced-motion: no-preference) {
184
+ .db-drawer:not([data-position=absolute])[open] .db-drawer-container[data-transition=close] {
185
+ transition: transform var(--db-drawer-close-delay) var(--db-transition-timing-emotional);
235
186
  }
236
187
  }
237
- .db-drawer .db-drawer-container .db-drawer-header::before {
238
- /* stylelint-disable-next-line at-rule-empty-line-before */
239
- /* jscpd:ignore-end */
240
- }
241
- .db-drawer .db-drawer-container .db-drawer-header .db-drawer-header-text {
242
- margin-block: auto;
243
- font-weight: 700;
244
- }
245
- .db-drawer .db-drawer-container .db-drawer-header .button-close-drawer {
246
- margin-inline-start: auto;
247
- }
248
- .db-drawer .db-drawer-container .db-drawer-header .button-close-drawer button {
249
- margin-inline-start: auto;
250
- }
251
- .db-drawer .db-drawer-container .db-drawer-header:has(.button-close-drawer), .db-drawer .db-drawer-container .db-drawer-header:has(:not(.db-drawer-header-text:empty)) {
252
- display: flex;
253
- }
254
188
  .db-drawer[data-position=absolute] {
189
+ --db-drawer-inline-size: 100%;
190
+ --db-drawer-block-size: 100%;
255
191
  position: absolute;
256
192
  z-index: 3;
257
193
  inset: 0;
258
- block-size: 100%;
259
- inline-size: 100%;
260
194
  background-color: transparent;
195
+ inline-size: var(--db-drawer-inline-size);
196
+ block-size: var(--db-drawer-block-size);
261
197
  }
262
198
  .db-drawer[data-position=absolute][open] {
263
199
  display: flex;
264
200
  }
265
- .db-drawer[data-position=absolute]:not([data-direction]), .db-drawer[data-position=absolute][data-direction=right], .db-drawer[data-position=absolute][data-direction=left] {
201
+ .db-drawer[data-position=absolute][open] .db-drawer-container[data-transition=close] {
202
+ position: relative;
203
+ }
204
+ .db-drawer[data-position=absolute]:not([data-direction]), .db-drawer[data-position=absolute][data-direction=to-right], .db-drawer[data-position=absolute][data-direction=to-left] {
266
205
  flex-direction: column;
267
206
  }
268
- .db-drawer[data-position=absolute][data-direction=left], .db-drawer[data-position=absolute][data-direction=down] {
269
- align-items: start;
207
+ .db-drawer[data-position=absolute][data-direction=to-right], .db-drawer[data-position=absolute][data-direction=down] {
208
+ align-items: flex-start;
270
209
  }
271
- .db-drawer[data-position=absolute]:not([data-direction]), .db-drawer[data-position=absolute][data-direction=right], .db-drawer[data-position=absolute][data-direction=up] {
272
- align-items: end;
210
+ .db-drawer[data-position=absolute]:not([data-direction]), .db-drawer[data-position=absolute][data-direction=to-left], .db-drawer[data-position=absolute][data-direction=up] {
211
+ align-items: flex-end;
273
212
  }
274
- .db-drawer[data-position=absolute] .db-drawer-container {
213
+ .db-drawer[data-position=absolute] .db-drawer-container[data-transition=open] {
275
214
  position: relative;
276
215
  }
277
- .db-drawer[open] .db-drawer-container[data-transition=open]:not([data-direction]), .db-drawer[open] .db-drawer-container[data-transition=open][data-direction=right], .db-drawer[open] .db-drawer-container[data-transition=open][data-direction=left] {
278
- transform: none;
279
- }
280
- .db-drawer[open] .db-drawer-container[data-transition=open][data-direction=up], .db-drawer[open] .db-drawer-container[data-transition=open][data-direction=down] {
281
- transform: none;
282
- }
283
- @media (prefers-reduced-motion: no-preference) {
284
- .db-drawer[open] .db-drawer-container[data-transition=close] {
285
- transition: transform var(--db-transition-duration-slow) var(--db-transition-timing-emotional);
286
- }
287
- }