@db-ux/core-components 4.14.0-shell-52d18db → 5.0.0

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 (103) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/agent/Best-Practise_Common-AI-Mistakes.md +3 -3
  3. package/build/components/accordion-item/accordion-item.css +0 -1
  4. package/build/components/brand/brand.css +0 -1
  5. package/build/components/brand/brand.scss +0 -1
  6. package/build/components/button/button.css +4 -9
  7. package/build/components/checkbox/checkbox.css +0 -3
  8. package/build/components/checkbox/checkbox.scss +0 -2
  9. package/build/components/custom-button/custom-button.css +8 -13
  10. package/build/components/custom-button/custom-button.scss +2 -3
  11. package/build/components/custom-select/custom-select.css +0 -1
  12. package/build/components/custom-select-list-item/custom-select-list-item.css +6 -2
  13. package/build/components/custom-select-list-item/custom-select-list-item.scss +8 -3
  14. package/build/components/drawer/drawer.css +32 -21
  15. package/build/components/drawer/drawer.scss +50 -26
  16. package/build/components/header/header.css +3 -10
  17. package/build/components/header/header.scss +7 -6
  18. package/build/components/icon/icon.css +0 -6
  19. package/build/components/infotext/infotext.css +0 -4
  20. package/build/components/infotext/infotext.scss +0 -2
  21. package/build/components/input/input.css +0 -5
  22. package/build/components/link/link.css +6 -9
  23. package/build/components/link/link.scss +8 -3
  24. package/build/components/navigation/navigation.css +1 -2
  25. package/build/components/navigation/navigation.scss +2 -2
  26. package/build/components/navigation-item/navigation-item.css +5 -28
  27. package/build/components/navigation-item/navigation-item.scss +5 -24
  28. package/build/components/notification/notification.css +1 -5
  29. package/build/components/notification/notification.scss +0 -2
  30. package/build/components/page/page.css +0 -8
  31. package/build/components/page/page.scss +0 -8
  32. package/build/components/select/select.css +0 -1
  33. package/build/components/stack/stack-web-component.css +0 -1
  34. package/build/components/stack/stack.css +0 -1
  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 +12 -12
  51. package/build/styles/bundle.css +12 -12
  52. package/build/styles/index.css +11 -11
  53. package/build/styles/index.scss +3 -17
  54. package/build/styles/internal/_button-components.scss +7 -4
  55. package/build/styles/internal/_custom-elements.scss +8 -32
  56. package/build/styles/internal/_icon-passing.scss +9 -10
  57. package/build/styles/internal/_link-components.scss +1 -3
  58. package/build/styles/relative.css +12 -12
  59. package/build/styles/rollup.css +12 -12
  60. package/build/styles/wc-workarounds.css +1 -1
  61. package/build/styles/wc-workarounds.scss +0 -11
  62. package/build/styles/webpack.css +12 -12
  63. package/package.json +4 -4
  64. package/build/components/control-panel-brand/control-panel-brand.css +0 -53
  65. package/build/components/control-panel-brand/control-panel-brand.scss +0 -48
  66. package/build/components/control-panel-desktop/control-panel-desktop.css +0 -579
  67. package/build/components/control-panel-desktop/control-panel-desktop.scss +0 -30
  68. package/build/components/control-panel-flat-icon/control-panel-flat-icon.css +0 -258
  69. package/build/components/control-panel-flat-icon/control-panel-flat-icon.scss +0 -239
  70. package/build/components/control-panel-meta/control-panel-meta.css +0 -14
  71. package/build/components/control-panel-meta/control-panel-meta.scss +0 -15
  72. package/build/components/control-panel-mobile/control-panel-mobile.css +0 -442
  73. package/build/components/control-panel-mobile/control-panel-mobile.scss +0 -119
  74. package/build/components/control-panel-navigation/control-panel-navigation.css +0 -402
  75. package/build/components/control-panel-navigation/control-panel-navigation.scss +0 -186
  76. package/build/components/control-panel-navigation-item/control-panel-navigation-item.css +0 -87
  77. package/build/components/control-panel-navigation-item/control-panel-navigation-item.scss +0 -39
  78. package/build/components/control-panel-navigation-item-group/control-panel-navigation-item-group-menu-popover.css +0 -21
  79. package/build/components/control-panel-navigation-item-group/control-panel-navigation-item-group-menu-popover.scss +0 -129
  80. package/build/components/control-panel-navigation-item-group/control-panel-navigation-item-group-menu-tree.css +0 -35
  81. package/build/components/control-panel-navigation-item-group/control-panel-navigation-item-group-menu-tree.scss +0 -36
  82. package/build/components/control-panel-navigation-item-group/control-panel-navigation-item-group.css +0 -158
  83. package/build/components/control-panel-navigation-item-group/control-panel-navigation-item-group.scss +0 -80
  84. package/build/components/control-panel-primary-actions/control-panel-primary-actions.css +0 -12
  85. package/build/components/control-panel-primary-actions/control-panel-primary-actions.scss +0 -7
  86. package/build/components/control-panel-secondary-actions/control-panel-secondary-actions.css +0 -12
  87. package/build/components/control-panel-secondary-actions/control-panel-secondary-actions.scss +0 -7
  88. package/build/components/control-panel-skip-navigation/control-panel-skip-navigation.css +0 -23
  89. package/build/components/control-panel-skip-navigation/control-panel-skip-navigation.scss +0 -25
  90. package/build/components/shell/shell-desktop.css +0 -475
  91. package/build/components/shell/shell-desktop.scss +0 -105
  92. package/build/components/shell/shell-mobile.css +0 -441
  93. package/build/components/shell/shell-mobile.scss +0 -148
  94. package/build/components/shell/shell.css +0 -1670
  95. package/build/components/shell/shell.scss +0 -70
  96. package/build/components/shell-content/shell-content.css +0 -34
  97. package/build/components/shell-content/shell-content.scss +0 -53
  98. package/build/components/shell-sub-navigation/shell-sub-navigation.css +0 -51
  99. package/build/components/shell-sub-navigation/shell-sub-navigation.scss +0 -184
  100. package/build/styles/internal/_control-panel-actions.scss +0 -11
  101. package/build/styles/internal/_control-panel-desktop.scss +0 -412
  102. package/build/styles/internal/_control-panel-mobile.scss +0 -107
  103. package/build/styles/internal/_navigation-item.scss +0 -122
@@ -1,6 +1,32 @@
1
- /* stylelint-disable-next-line scss/dollar-variable-colon-space-after */
2
- /* stylelint-disable-next-line scss/dollar-variable-colon-space-after */
3
- /* Variants for adaptive components like input, select, notification, ... */
4
- .db-tab-panel:not([hidden]) {
1
+ .db-tab-panel {
2
+ padding: var(--db-spacing-fixed-xs);
3
+ position: relative;
4
+ z-index: 1;
5
+ }
6
+
7
+ .db-tabs[data-initial-selected-mode=manually]:not(:has(> .db-tab-panel[hidden])) > .db-tab-panel {
8
+ display: none;
9
+ }
10
+
11
+ .db-tabs:not([data-initial-selected-mode=manually],
12
+ :has(> .db-tab-panel[hidden])) > .db-tab-panel ~ .db-tab-panel {
13
+ display: none;
14
+ }
15
+
16
+ .db-tabs[data-initial-selected-mode=manually]:not(:has(> db-tab-panel .db-tab-panel[hidden])) > db-tab-panel {
17
+ display: none;
18
+ }
19
+
20
+ .db-tabs:not([data-initial-selected-mode=manually],
21
+ :has(> db-tab-panel .db-tab-panel[hidden])) > db-tab-panel ~ db-tab-panel {
22
+ display: none;
23
+ }
24
+
25
+ .db-tabs[data-initial-selected-mode=manually]:not(:has(> dbtabpanel .db-tab-panel[hidden])) > dbtabpanel {
26
+ display: none;
27
+ }
28
+
29
+ .db-tabs:not([data-initial-selected-mode=manually],
30
+ :has(> dbtabpanel .db-tab-panel[hidden])) > dbtabpanel ~ dbtabpanel {
5
31
  display: none;
6
32
  }
@@ -1,6 +1,64 @@
1
1
  @use "@db-ux/core-foundations/build/styles/variables";
2
- @use "@db-ux/core-foundations/build/styles/helpers";
3
2
 
4
3
  .db-tab-panel {
5
- @include helpers.display(none);
4
+ padding: variables.$db-spacing-fixed-xs;
5
+ position: relative;
6
+ z-index: 1;
7
+ }
8
+
9
+ // SSR / no-JS fallback for the composed API path:
10
+ // When DBTabs renders children directly, panels do not receive the `hidden`
11
+ // prop. Before JS sets `hidden` via syncSelection(), hide all panels except
12
+ // the first to prevent a flash of all content at once.
13
+ // The :not(:has(...[hidden])) guard ensures this rule is inert after
14
+ // hydration — once JS sets `hidden` on at least one panel, native hidden
15
+ // behavior takes over.
16
+ // When initialSelectedMode="manually", hide ALL panels (no tab is active).
17
+ .db-tabs[data-initial-selected-mode="manually"]:not(
18
+ :has(> .db-tab-panel[hidden])
19
+ )
20
+ > .db-tab-panel {
21
+ display: none;
22
+ }
23
+
24
+ .db-tabs:not(
25
+ [data-initial-selected-mode="manually"],
26
+ :has(> .db-tab-panel[hidden])
27
+ )
28
+ > .db-tab-panel
29
+ ~ .db-tab-panel {
30
+ display: none;
31
+ }
32
+
33
+ // Angular/Stencil wrap each component in a custom element host.
34
+ .db-tabs[data-initial-selected-mode="manually"]:not(
35
+ :has(> db-tab-panel .db-tab-panel[hidden])
36
+ )
37
+ > db-tab-panel {
38
+ display: none;
39
+ }
40
+
41
+ .db-tabs:not(
42
+ [data-initial-selected-mode="manually"],
43
+ :has(> db-tab-panel .db-tab-panel[hidden])
44
+ )
45
+ > db-tab-panel
46
+ ~ db-tab-panel {
47
+ display: none;
48
+ }
49
+
50
+ .db-tabs[data-initial-selected-mode="manually"]:not(
51
+ :has(> dbtabpanel .db-tab-panel[hidden])
52
+ )
53
+ > dbtabpanel {
54
+ display: none;
55
+ }
56
+
57
+ .db-tabs:not(
58
+ [data-initial-selected-mode="manually"],
59
+ :has(> dbtabpanel .db-tab-panel[hidden])
60
+ )
61
+ > dbtabpanel
62
+ ~ dbtabpanel {
63
+ display: none;
6
64
  }
@@ -204,10 +204,6 @@
204
204
  .db-table-row[data-interactive=true] {
205
205
  position: relative;
206
206
  }
207
- .db-table-row[data-interactive=true] td :not([data-table-row-trigger=true]) {
208
- position: relative;
209
- z-index: 1;
210
- }
211
207
  .db-table-row[data-interactive=true]:has(input:is([type=radio], [type=checkbox]):is([data-table-row-trigger=true]:is(button, input, textarea, summary, select, a[href], [tabindex]:not([tabindex="-1"])), [data-table-row-trigger=true] :is(input, textarea, select)):checked) {
212
208
  background-color: var(--db-adaptive-bg-basic-level-2-default);
213
209
  }
@@ -178,10 +178,6 @@
178
178
  .db-table-row[data-interactive=true] {
179
179
  position: relative;
180
180
  }
181
- .db-table-row[data-interactive=true] td :not([data-table-row-trigger=true]) {
182
- position: relative;
183
- z-index: 1;
184
- }
185
181
  .db-table-row[data-interactive=true]:has(input:is([type=radio], [type=checkbox]):is([data-table-row-trigger=true]:is(button, input, textarea, summary, select, a[href], [tabindex]:not([tabindex="-1"])), [data-table-row-trigger=true] :is(input, textarea, select)):checked) {
186
182
  background-color: var(--db-adaptive-bg-basic-level-2-default);
187
183
  }
@@ -42,11 +42,6 @@ $interactive-child: ":is(#{$interactive-row-action}:is(#{helpers.$interactive-el
42
42
  &[data-interactive="true"] {
43
43
  position: relative;
44
44
 
45
- td :not(#{$interactive-row-action}) {
46
- position: relative;
47
- z-index: 1;
48
- }
49
-
50
45
  @include table-row-interactive-checked {
51
46
  @extend %db-informational-variables;
52
47
 
@@ -15,144 +15,54 @@
15
15
  pointer-events: none !important;
16
16
  }
17
17
 
18
- .db-tabs .db-tab-item::after {
19
- content: "";
20
- position: absolute;
21
- border-radius: var(--db-border-radius-xs);
22
- background: linear-gradient(135deg, var(--db-pride-red, var(--db-brand-on-bg-basic-emphasis-70-default)) 16.7%, var(--db-pride-orange, var(--db-brand-on-bg-basic-emphasis-70-default)) 0, var(--db-pride-orange, var(--db-brand-on-bg-basic-emphasis-70-default)) 33.4%, var(--db-pride-yellow, var(--db-brand-on-bg-basic-emphasis-70-default)) 0, var(--db-pride-yellow, var(--db-brand-on-bg-basic-emphasis-70-default)) 50.1%, var(--db-pride-green, var(--db-brand-on-bg-basic-emphasis-70-default)) 0, var(--db-pride-green, var(--db-brand-on-bg-basic-emphasis-70-default)) 66.8%, var(--db-pride-blue, var(--db-brand-on-bg-basic-emphasis-70-default)) 0, var(--db-pride-blue, var(--db-brand-on-bg-basic-emphasis-70-default)) 83.5%, var(--db-pride-violet, var(--db-brand-on-bg-basic-emphasis-70-default)) 0);
23
- }
24
- @media (prefers-reduced-motion: no-preference) {
25
- .db-tabs .db-tab-item::after {
26
- transition: block-size var(--db-transition-duration-fast) var(--db-transition-timing-emotional), inline-size var(--db-transition-duration-fast) var(--db-transition-timing-emotional);
27
- }
28
- }
29
-
30
- @keyframes popover-animation {
31
- 0% {
32
- pointer-events: none;
33
- opacity: 0;
34
- transform: translate(var(--db-popover-center-x, var(--db-popover-translate-x, 0%)), var(--db-popover-center-y, var(--db-popover-translate-y, 0%)));
35
- }
36
- 100% {
37
- pointer-events: auto;
38
- opacity: 1;
39
- transform: translate(var(--db-popover-center-x, 0%), var(--db-popover-center-y, 0%));
40
- }
41
- }
42
- @keyframes rotate {
43
- 100% {
44
- transform: rotate(1turn);
45
- }
46
- }
47
- .db-tabs db-tab-list:has([id$=-tab-0]:checked) ~ dbtabpanel > [id$=-tab-panel-0]:not([hidden]),
48
- .db-tabs db-tab-list:has([id$=-tab-0]:checked) ~ db-tab-panel > [id$=-tab-panel-0]:not([hidden]),
49
- .db-tabs dbtablist:has([id$=-tab-0]:checked) ~ dbtabpanel > [id$=-tab-panel-0]:not([hidden]),
50
- .db-tabs dbtablist:has([id$=-tab-0]:checked) ~ db-tab-panel > [id$=-tab-panel-0]:not([hidden]) {
51
- display: block;
52
- }
53
- .db-tabs db-tab-list:has([id$=-tab-1]:checked) ~ dbtabpanel > [id$=-tab-panel-1]:not([hidden]),
54
- .db-tabs db-tab-list:has([id$=-tab-1]:checked) ~ db-tab-panel > [id$=-tab-panel-1]:not([hidden]),
55
- .db-tabs dbtablist:has([id$=-tab-1]:checked) ~ dbtabpanel > [id$=-tab-panel-1]:not([hidden]),
56
- .db-tabs dbtablist:has([id$=-tab-1]:checked) ~ db-tab-panel > [id$=-tab-panel-1]:not([hidden]) {
57
- display: block;
58
- }
59
- .db-tabs db-tab-list:has([id$=-tab-2]:checked) ~ dbtabpanel > [id$=-tab-panel-2]:not([hidden]),
60
- .db-tabs db-tab-list:has([id$=-tab-2]:checked) ~ db-tab-panel > [id$=-tab-panel-2]:not([hidden]),
61
- .db-tabs dbtablist:has([id$=-tab-2]:checked) ~ dbtabpanel > [id$=-tab-panel-2]:not([hidden]),
62
- .db-tabs dbtablist:has([id$=-tab-2]:checked) ~ db-tab-panel > [id$=-tab-panel-2]:not([hidden]) {
63
- display: block;
64
- }
65
- .db-tabs db-tab-list:has([id$=-tab-3]:checked) ~ dbtabpanel > [id$=-tab-panel-3]:not([hidden]),
66
- .db-tabs db-tab-list:has([id$=-tab-3]:checked) ~ db-tab-panel > [id$=-tab-panel-3]:not([hidden]),
67
- .db-tabs dbtablist:has([id$=-tab-3]:checked) ~ dbtabpanel > [id$=-tab-panel-3]:not([hidden]),
68
- .db-tabs dbtablist:has([id$=-tab-3]:checked) ~ db-tab-panel > [id$=-tab-panel-3]:not([hidden]) {
69
- display: block;
70
- }
71
- .db-tabs db-tab-list:has([id$=-tab-4]:checked) ~ dbtabpanel > [id$=-tab-panel-4]:not([hidden]),
72
- .db-tabs db-tab-list:has([id$=-tab-4]:checked) ~ db-tab-panel > [id$=-tab-panel-4]:not([hidden]),
73
- .db-tabs dbtablist:has([id$=-tab-4]:checked) ~ dbtabpanel > [id$=-tab-panel-4]:not([hidden]),
74
- .db-tabs dbtablist:has([id$=-tab-4]:checked) ~ db-tab-panel > [id$=-tab-panel-4]:not([hidden]) {
75
- display: block;
76
- }
77
- .db-tabs db-tab-list:has([id$=-tab-5]:checked) ~ dbtabpanel > [id$=-tab-panel-5]:not([hidden]),
78
- .db-tabs db-tab-list:has([id$=-tab-5]:checked) ~ db-tab-panel > [id$=-tab-panel-5]:not([hidden]),
79
- .db-tabs dbtablist:has([id$=-tab-5]:checked) ~ dbtabpanel > [id$=-tab-panel-5]:not([hidden]),
80
- .db-tabs dbtablist:has([id$=-tab-5]:checked) ~ db-tab-panel > [id$=-tab-panel-5]:not([hidden]) {
81
- display: block;
82
- }
83
- .db-tabs db-tab-list:has([id$=-tab-6]:checked) ~ dbtabpanel > [id$=-tab-panel-6]:not([hidden]),
84
- .db-tabs db-tab-list:has([id$=-tab-6]:checked) ~ db-tab-panel > [id$=-tab-panel-6]:not([hidden]),
85
- .db-tabs dbtablist:has([id$=-tab-6]:checked) ~ dbtabpanel > [id$=-tab-panel-6]:not([hidden]),
86
- .db-tabs dbtablist:has([id$=-tab-6]:checked) ~ db-tab-panel > [id$=-tab-panel-6]:not([hidden]) {
87
- display: block;
88
- }
89
- .db-tabs db-tab-list:has([id$=-tab-7]:checked) ~ dbtabpanel > [id$=-tab-panel-7]:not([hidden]),
90
- .db-tabs db-tab-list:has([id$=-tab-7]:checked) ~ db-tab-panel > [id$=-tab-panel-7]:not([hidden]),
91
- .db-tabs dbtablist:has([id$=-tab-7]:checked) ~ dbtabpanel > [id$=-tab-panel-7]:not([hidden]),
92
- .db-tabs dbtablist:has([id$=-tab-7]:checked) ~ db-tab-panel > [id$=-tab-panel-7]:not([hidden]) {
93
- display: block;
94
- }
95
- .db-tabs db-tab-list:has([id$=-tab-8]:checked) ~ dbtabpanel > [id$=-tab-panel-8]:not([hidden]),
96
- .db-tabs db-tab-list:has([id$=-tab-8]:checked) ~ db-tab-panel > [id$=-tab-panel-8]:not([hidden]),
97
- .db-tabs dbtablist:has([id$=-tab-8]:checked) ~ dbtabpanel > [id$=-tab-panel-8]:not([hidden]),
98
- .db-tabs dbtablist:has([id$=-tab-8]:checked) ~ db-tab-panel > [id$=-tab-panel-8]:not([hidden]) {
99
- display: block;
100
- }
101
- .db-tabs db-tab-list:has([id$=-tab-9]:checked) ~ dbtabpanel > [id$=-tab-panel-9]:not([hidden]),
102
- .db-tabs db-tab-list:has([id$=-tab-9]:checked) ~ db-tab-panel > [id$=-tab-panel-9]:not([hidden]),
103
- .db-tabs dbtablist:has([id$=-tab-9]:checked) ~ dbtabpanel > [id$=-tab-panel-9]:not([hidden]),
104
- .db-tabs dbtablist:has([id$=-tab-9]:checked) ~ db-tab-panel > [id$=-tab-panel-9]:not([hidden]) {
105
- display: block;
106
- }
107
- .db-tabs db-tab-list:has([id$=-tab-10]:checked) ~ dbtabpanel > [id$=-tab-panel-10]:not([hidden]),
108
- .db-tabs db-tab-list:has([id$=-tab-10]:checked) ~ db-tab-panel > [id$=-tab-panel-10]:not([hidden]),
109
- .db-tabs dbtablist:has([id$=-tab-10]:checked) ~ dbtabpanel > [id$=-tab-panel-10]:not([hidden]),
110
- .db-tabs dbtablist:has([id$=-tab-10]:checked) ~ db-tab-panel > [id$=-tab-panel-10]:not([hidden]) {
111
- display: block;
112
- }
113
-
114
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul .db-tab-item::after {
18
+ .db-tabs:not([data-orientation=vertical]) .db-tab-list .db-tab-item::after {
115
19
  block-size: var(--db-border-width-xs);
116
20
  inline-size: 0;
117
21
  transform: translate(-50%, 0);
118
22
  inset-inline-start: 50%;
119
23
  inset-block: auto calc(-1 * var(--db-spacing-fixed-xs));
120
24
  }
121
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul .db-tab-item:has(input:checked)::after {
25
+ .db-tabs:not([data-orientation=vertical]) .db-tab-list .db-tab-item::after {
26
+ inset-block-end: calc(-1 * calc(var(--db-border-width-xs) + var(--db-spacing-fixed-2xs))) !important;
27
+ }
28
+ .db-tabs:not([data-orientation=vertical]) .db-tab-list .db-tab-item[aria-selected=true]::after {
122
29
  block-size: var(--db-border-width-xs);
123
30
  inline-size: 100%;
124
31
  }
125
32
  @media (forced-colors: active), print {
126
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul .db-tab-item:has(input:checked)::after {
33
+ .db-tabs:not([data-orientation=vertical]) .db-tab-list .db-tab-item[aria-selected=true]::after {
127
34
  border: calc(var(--db-border-width-xs) - 1px) solid var(--db-adaptive-on-bg-basic-emphasis-100-default);
128
35
  }
129
36
  }
130
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul .db-tab-item:has(input:checked)::after {
131
- inset-block-end: calc(-1 * (var(--db-spacing-fixed-2xs) + var(--db-border-width-xs)));
37
+ .db-tabs:not([data-orientation=vertical]) .db-tab-list .db-tab-item[aria-selected=true]::after {
38
+ inline-size: 100%;
132
39
  }
133
40
 
134
- .db-tabs[data-orientation=vertical] .db-tab-list > ul .db-tab-item::after {
41
+ .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item::after {
135
42
  block-size: 0;
136
43
  inline-size: var(--db-border-width-xs);
137
44
  transform: translate(0, -50%);
138
45
  inset-block: var(--indicator-vertical-inset-block-start, 50%) auto;
139
46
  inset-inline-start: calc(-1 * var(--db-spacing-fixed-xs));
140
47
  }
141
- .db-tabs[data-orientation=vertical] .db-tab-list > ul .db-tab-item::after {
142
- inset-inline-start: 0;
143
- z-index: -2;
48
+ .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item::after {
49
+ inset-inline: calc(-1 * var(--db-tabs-line-gap-vertical, 0px)) auto;
50
+ z-index: 5;
144
51
  }
145
- .db-tabs[data-orientation=vertical] .db-tab-list > ul .db-tab-item:has(input:checked)::after {
52
+ .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item[aria-selected=true]::after {
146
53
  block-size: var(--indicator-vertical-block-size, 100%);
147
54
  inline-size: var(--db-border-width-xs);
148
55
  }
149
56
  @media (forced-colors: active), print {
150
- .db-tabs[data-orientation=vertical] .db-tab-list > ul .db-tab-item:has(input:checked)::after {
57
+ .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item[aria-selected=true]::after {
151
58
  border: calc(var(--db-border-width-xs) - 1px) solid var(--db-adaptive-on-bg-basic-emphasis-100-default);
152
59
  }
153
60
  }
61
+ .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item[aria-selected=true]::after {
62
+ block-size: 100%;
63
+ }
154
64
 
155
- .db-tabs[data-orientation=vertical] .db-tab-list::before, .db-tabs:not([data-orientation=vertical]) .db-tab-list::before {
65
+ .db-tabs[data-orientation=vertical] .db-tab-list::before {
156
66
  background-color: var(--db-adaptive-bg-basic-transparent-semi-default);
157
67
  content: "";
158
68
  border-radius: var(--db-border-radius-xs);
@@ -166,208 +76,187 @@
166
76
  inline-size: 100%;
167
77
  position: relative;
168
78
  }
169
- .db-tabs .db-tab-panel {
170
- padding: 0 var(--db-spacing-fixed-xs);
171
- }
172
79
  .db-tabs .db-tab-list {
173
- max-inline-size: 100%;
80
+ position: relative;
174
81
  z-index: 20;
175
82
  }
176
- .db-tabs .db-tab-list:has([id$=-tab-0]:checked) ~ [id$=-tab-panel-0]:not([hidden]) {
177
- display: block;
178
- }
179
- .db-tabs .db-tab-list:has([id$=-tab-1]:checked) ~ [id$=-tab-panel-1]:not([hidden]) {
180
- display: block;
181
- }
182
- .db-tabs .db-tab-list:has([id$=-tab-2]:checked) ~ [id$=-tab-panel-2]:not([hidden]) {
183
- display: block;
184
- }
185
- .db-tabs .db-tab-list:has([id$=-tab-3]:checked) ~ [id$=-tab-panel-3]:not([hidden]) {
186
- display: block;
187
- }
188
- .db-tabs .db-tab-list:has([id$=-tab-4]:checked) ~ [id$=-tab-panel-4]:not([hidden]) {
189
- display: block;
190
- }
191
- .db-tabs .db-tab-list:has([id$=-tab-5]:checked) ~ [id$=-tab-panel-5]:not([hidden]) {
192
- display: block;
193
- }
194
- .db-tabs .db-tab-list:has([id$=-tab-6]:checked) ~ [id$=-tab-panel-6]:not([hidden]) {
195
- display: block;
196
- }
197
- .db-tabs .db-tab-list:has([id$=-tab-7]:checked) ~ [id$=-tab-panel-7]:not([hidden]) {
198
- display: block;
199
- }
200
- .db-tabs .db-tab-list:has([id$=-tab-8]:checked) ~ [id$=-tab-panel-8]:not([hidden]) {
201
- display: block;
202
- }
203
- .db-tabs .db-tab-list:has([id$=-tab-9]:checked) ~ [id$=-tab-panel-9]:not([hidden]) {
204
- display: block;
205
- }
206
- .db-tabs .db-tab-list:has([id$=-tab-10]:checked) ~ [id$=-tab-panel-10]:not([hidden]) {
207
- display: block;
208
- }
209
- .db-tabs {
210
- /*
211
- Variant Orientation HORIZONTAL
212
- */
83
+ .db-tabs .db-tab-list db-tab-item,
84
+ .db-tabs .db-tab-list dbtabitem {
85
+ display: contents;
213
86
  }
214
87
  .db-tabs:not([data-orientation=vertical]) {
215
88
  flex-flow: column wrap;
216
89
  }
217
- .db-tabs:not([data-orientation=vertical]) .db-tab-panel {
218
- inline-size: 100%;
219
- }
220
90
  .db-tabs:not([data-orientation=vertical]) .db-tab-list {
221
- /* horizontal track for indicator */
222
- }
223
- .db-tabs:not([data-orientation=vertical]) .db-tab-list::before {
224
- block-size: var(--db-border-width-xs);
225
- inset-inline: var(--db-spacing-fixed-xs);
226
- /* top position equals sum of: margin xs + padding xs + line-height + padding xs + margin 2xs */
227
- inset-block-start: calc(3 * var(--db-spacing-fixed-xs) + var(--db-spacing-fixed-2xs) + var(--db-icon-font-size));
228
- }
229
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul {
230
- overflow: auto hidden;
91
+ padding: var(--db-spacing-fixed-xs) var(--db-spacing-fixed-xs) 0 var(--db-spacing-fixed-xs);
92
+ background-image: linear-gradient(var(--db-adaptive-bg-basic-transparent-semi-default), var(--db-adaptive-bg-basic-transparent-semi-default));
93
+ background-position: left bottom;
94
+ background-repeat: no-repeat;
95
+ background-origin: content-box;
96
+ background-size: 100% var(--db-border-width-xs);
97
+ }
98
+ .db-tabs:not([data-orientation=vertical]) .db-tab-list .db-tab-item {
99
+ margin-block-end: calc(var(--db-border-width-xs) + var(--db-spacing-fixed-2xs));
100
+ }
101
+ .db-tabs:not([data-orientation=vertical]) .db-tab-list[role=tablist],
102
+ .db-tabs:not([data-orientation=vertical]) .db-tab-list .db-tab-list {
103
+ display: flex;
104
+ align-items: stretch;
105
+ overflow: auto;
231
106
  inline-size: 100%;
232
107
  }
233
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul .db-tab-item {
234
- margin-block: var(--db-spacing-fixed-xs) calc(2 * var(--db-spacing-fixed-2xs) + var(--db-border-width-xs));
235
- }
236
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul db-tab-item:first-of-type .db-tab-item,
237
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul dbtabitem:first-of-type .db-tab-item {
238
- margin-inline-start: var(--db-spacing-fixed-xs);
239
- }
240
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul db-tab-item:last-of-type .db-tab-item,
241
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul dbtabitem:last-of-type .db-tab-item {
242
- margin-inline-end: var(--db-spacing-fixed-xs);
243
- }
244
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul:not(:has(db-tab-item, dbtabitem)) .db-tab-item:first-of-type {
245
- margin-inline-start: var(--db-spacing-fixed-xs);
246
- }
247
- .db-tabs:not([data-orientation=vertical]) .db-tab-list > ul:not(:has(db-tab-item, dbtabitem)) .db-tab-item:last-of-type {
248
- margin-inline-end: var(--db-spacing-fixed-xs);
249
- }
250
- .db-tabs {
251
- /*
252
- Variant Orientation VERTICAL
253
- */
254
- }
255
108
  .db-tabs[data-orientation=vertical] {
256
109
  flex-direction: row;
257
110
  }
258
- .db-tabs[data-orientation=vertical] .db-tab-panel {
259
- padding: var(--db-spacing-fixed-xs) 0;
260
- }
261
111
  .db-tabs[data-orientation=vertical] .db-tab-list {
112
+ --db-tabs-line-gap-vertical: calc(var(--db-border-width-xs) + var(--db-spacing-fixed-2xs));
262
113
  /*
263
114
  min and nominal size must both be set to ensure
264
115
  - min-inline-size: tab-list is not displayed narrower than defined
265
116
  - max-inline-size: tab-list is not displayed wider than defined
266
117
  */
267
- /* stylelint-disable-next-line db-ux/use-sizing */
268
- min-inline-size: var(--db-tab-list-vertical-width, var(--db-sizing-3xl));
269
- /* stylelint-disable-next-line db-ux/use-sizing */
270
- max-inline-size: var(--db-tab-list-vertical-width, var(--db-sizing-3xl));
271
- /* horizontal space to the tab panels */
272
- padding-inline-end: var(--db-spacing-fixed-xs);
273
- /* ensures that tab-list (track) is only as high as all the tab-items together if open tab-panel is higher */
118
+ min-inline-size: var(--db-sizing-3xl);
119
+ max-inline-size: var(--db-sizing-3xl);
120
+ padding-inline: var(--db-spacing-fixed-xs) var(--db-tabs-line-gap-vertical);
274
121
  margin-block-end: auto;
275
122
  }
276
- .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item label {
277
- position: relative;
278
- }
279
- .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item:has(input:focus-visible), .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item:hover {
280
- inline-size: fit-content;
281
- }
282
- .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item:has(input:focus-visible) label, .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item:hover label {
283
- overflow: visible;
284
- }
285
- .db-tabs[data-orientation=vertical] .db-tab-list {
286
- /* vertical track for indicator */
287
- }
288
123
  .db-tabs[data-orientation=vertical] .db-tab-list::before {
289
- inline-size: var(--db-border-width-xs);
290
- inset-block: var(--db-spacing-fixed-xs);
124
+ display: block;
291
125
  inset-inline-start: 0;
126
+ inset-block: 0;
127
+ inline-size: var(--db-border-width-xs);
128
+ z-index: 1;
292
129
  }
293
- .db-tabs[data-orientation=vertical] .db-tab-list > ul {
130
+ .db-tabs[data-orientation=vertical] .db-tab-list[role=tablist],
131
+ .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-list {
132
+ display: flex;
294
133
  flex-direction: column;
295
- block-size: 100%;
134
+ align-items: flex-start;
296
135
  }
297
- .db-tabs[data-orientation=vertical] .db-tab-list > ul:not(:has(db-tab-item, dbtabitem)) .db-tab-item:first-of-type {
298
- margin-block-start: var(--db-spacing-fixed-xs);
136
+ .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item-label {
137
+ inline-size: 100%;
299
138
  }
300
- .db-tabs[data-orientation=vertical] .db-tab-list > ul:not(:has(db-tab-item, dbtabitem)) .db-tab-item:last-of-type {
301
- margin-block-end: var(--db-spacing-fixed-xs);
139
+ .db-tabs[data-orientation=vertical] .db-tab-list .db-tab-item-label-end-slot {
140
+ margin-inline-start: auto;
302
141
  }
303
- .db-tabs[data-orientation=vertical] .db-tab-item {
304
- padding-inline-start: calc(var(--db-border-width-xs) + var(--db-spacing-fixed-2xs));
142
+ .db-tabs[data-tab-item-width=full] .db-tab-list {
143
+ inline-size: 100%;
305
144
  }
306
- .db-tabs[data-orientation=vertical] .db-tab-item input {
307
- padding-inline-start: calc(var(--db-border-width-xs) + var(--db-spacing-fixed-2xs));
145
+ .db-tabs[data-tab-item-width=full]:not([data-orientation=vertical]) .db-tab-item {
146
+ flex: 1 0 0;
147
+ inline-size: 0;
148
+ max-inline-size: none;
149
+ justify-content: flex-start;
308
150
  }
309
- .db-tabs[data-orientation=vertical] db-tab-item:first-of-type .db-tab-item,
310
- .db-tabs[data-orientation=vertical] dbtabitem:first-of-type .db-tab-item {
311
- margin-block-start: var(--db-spacing-fixed-xs);
151
+ .db-tabs[data-tab-item-width=full][data-tab-item-alignment=center] .db-tab-item {
152
+ text-align: center;
153
+ justify-content: center;
312
154
  }
313
- .db-tabs[data-orientation=vertical] db-tab-item:last-of-type .db-tab-item,
314
- .db-tabs[data-orientation=vertical] dbtabitem:last-of-type .db-tab-item {
315
- margin-block-end: var(--db-spacing-fixed-xs);
155
+ .db-tabs[data-tab-item-width=full][data-tab-item-alignment=end] .db-tab-item {
156
+ text-align: end;
157
+ justify-content: end;
316
158
  }
317
- .db-tabs[data-width=full] .db-tab-list {
318
- inline-size: 100%;
159
+ .db-tabs[data-scroll-behavior=scrollbar]:not([data-orientation=vertical])::before {
160
+ content: "";
161
+ position: absolute;
162
+ z-index: 19;
163
+ inset-block-start: calc(var(--db-sizing-md) + var(--db-spacing-fixed-xs) + var(--db-border-width-xs));
164
+ inset-inline: var(--db-spacing-fixed-xs);
165
+ block-size: var(--db-border-width-xs);
166
+ background-color: var(--db-adaptive-bg-basic-transparent-semi-default);
167
+ pointer-events: none;
319
168
  }
320
- .db-tabs[data-width=full] .db-tab-item,
321
- .db-tabs[data-width=full] .db-tab-item label {
322
- inline-size: 100%;
169
+ [data-density=functional] .db-tabs[data-scroll-behavior=scrollbar]:not([data-orientation=vertical])::before {
170
+ inset-block-start: calc(var(--db-sizing-sm) + var(--db-spacing-fixed-xs) + var(--db-border-width-xs));
323
171
  }
324
- .db-tabs[data-width=full][data-alignment=center] .db-tab-item label {
325
- text-align: center;
326
- justify-content: center;
172
+ [data-density=expressive] .db-tabs[data-scroll-behavior=scrollbar]:not([data-orientation=vertical])::before {
173
+ inset-block-start: calc(var(--db-sizing-lg) + var(--db-spacing-fixed-xs) + var(--db-border-width-xs));
327
174
  }
328
- .db-tabs[data-scroll-behavior=arrows] {
329
- /*
330
- * Scroll left / right buttons
331
- */
175
+ .db-tabs[data-scroll-behavior=scrollbar]:not([data-orientation=vertical]) .db-tab-list {
176
+ background-image: none;
332
177
  }
333
- .db-tabs[data-scroll-behavior=arrows] .overflow-scroll-left-button > .db-button, .db-tabs[data-scroll-behavior=arrows] .overflow-scroll-left-button:is(.db-button) {
334
- inset-inline-start: var(--db-overflow-scroll-button-inset-inline-start, 0);
178
+ .db-tabs[data-scroll-behavior=scrollbar]:not([data-orientation=vertical]) .db-tab-list::before {
179
+ content: none;
335
180
  }
336
- .db-tabs[data-scroll-behavior=arrows] .overflow-scroll-right-button > .db-button, .db-tabs[data-scroll-behavior=arrows] .overflow-scroll-right-button:is(.db-button) {
337
- inset-inline-end: 0;
181
+ .db-tabs[data-scroll-behavior=arrows] .db-tab-list {
182
+ scrollbar-width: none;
338
183
  }
339
- .db-tabs[data-scroll-behavior=arrows] .overflow-scroll-left-button > .db-button, .db-tabs[data-scroll-behavior=arrows] .overflow-scroll-left-button:is(.db-button),
340
- .db-tabs[data-scroll-behavior=arrows] .overflow-scroll-right-button > .db-button,
341
- .db-tabs[data-scroll-behavior=arrows] .overflow-scroll-right-button:is(.db-button) {
184
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical])::before {
185
+ content: "";
342
186
  position: absolute;
343
- z-index: 22;
344
- inset-block: var(--db-overflow-scroll-button-inset-block, var(--db-spacing-fixed-xs));
187
+ z-index: 19;
188
+ inset-block-start: calc(var(--db-sizing-md) + var(--db-border-width-2xs));
189
+ inset-inline: 0;
190
+ block-size: var(--db-border-width-xs);
191
+ background-color: var(--db-adaptive-bg-basic-transparent-semi-default);
345
192
  }
346
- @supports (scrollbar-width: none) {
347
- .db-tabs[data-scroll-behavior=arrows] .db-tab-list > ul {
348
- scrollbar-width: none;
349
- }
193
+ [data-density=functional] .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical])::before {
194
+ inset-block-start: calc(var(--db-sizing-sm) + var(--db-border-width-2xs));
350
195
  }
351
- .db-tabs[data-scroll-behavior=arrows] .db-tab-list > ul::-webkit-scrollbar {
352
- display: none;
196
+ [data-density=expressive] .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical])::before {
197
+ inset-block-start: calc(var(--db-sizing-lg) + var(--db-border-width-2xs));
353
198
  }
354
- .db-tabs[data-scroll-behavior=arrows]:has(.overflow-scroll-left-button)::before {
355
- content: "";
199
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .db-tab-list {
200
+ padding: calc(var(--db-border-width-xs) + var(--db-border-width-2xs)) 0 calc(var(--db-border-width-xs) + var(--db-spacing-fixed-2xs));
201
+ margin-block-start: calc(-1 * calc(var(--db-border-width-xs) + var(--db-border-width-2xs)));
202
+ background-image: none;
356
203
  }
357
- .db-tabs[data-scroll-behavior=arrows]:has(.overflow-scroll-right-button)::after {
358
- content: "";
204
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .db-tab-list::before {
205
+ content: none;
206
+ }
207
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .db-tab-list .db-tab-item {
208
+ margin-block-end: 0;
359
209
  }
360
- .db-tabs[data-scroll-behavior=arrows]:has(.db-button)::before, .db-tabs[data-scroll-behavior=arrows]:has(.db-button)::after {
210
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .db-tab-list .db-tab-item::after {
211
+ inset-block-end: calc(-1 * (var(--db-spacing-fixed-xs) - var(--db-border-width-2xs))) !important;
212
+ }
213
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-start,
214
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-end {
361
215
  position: absolute;
362
- z-index: 21;
216
+ z-index: 22;
217
+ inset-block-start: 0;
218
+ aspect-ratio: unset;
219
+ min-block-size: unset;
220
+ border-block-width: 0;
221
+ padding-block: var(--db-spacing-fixed-xs) calc(var(--db-spacing-fixed-xs) + calc(var(--db-border-width-xs) + var(--db-spacing-fixed-2xs)));
222
+ align-items: flex-start;
363
223
  background-color: var(--db-adaptive-bg-basic-level-1-default);
364
- inline-size: var(--db-sizing-md);
365
- block-size: calc(var(--db-overflow-scroll-button-background-block-size, var(--db-spacing-fixed-sm)) + var(--db-sizing-md));
366
- flex: 0 0 auto;
224
+ /* stylelint-disable-next-line a11y/selector-pseudo-class-focus */
225
+ }
226
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-start:hover,
227
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-end:hover {
228
+ cursor: var(--db-overwrite-cursor, pointer);
229
+ background-color: var(--db-adaptive-bg-basic-level-1-hovered);
230
+ }
231
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-start:active,
232
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-end:active {
233
+ cursor: var(--db-overwrite-cursor, pointer);
234
+ background-color: var(--db-adaptive-bg-basic-level-1-pressed);
235
+ }
236
+ @media screen and (forced-colors: active) {
237
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-start,
238
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-end {
239
+ border-block: var(--db-border-width-xs) solid transparent;
240
+ inset-block-start: calc(-1 * var(--db-border-width-xs));
241
+ }
242
+ }
243
+ [data-density=functional] .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-start,
244
+ [data-density=functional] .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-end {
245
+ padding-block: var(--db-spacing-fixed-2xs) calc(var(--db-spacing-fixed-2xs) + calc(var(--db-border-width-xs) + var(--db-spacing-fixed-2xs)));
367
246
  }
368
- .db-tabs[data-scroll-behavior=arrows]:has(.db-button)::before {
369
- inset-inline-start: var(--db-overflow-scroll-button-inset-inline-start, 0);
247
+ [data-density=expressive] .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-start,
248
+ [data-density=expressive] .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-end {
249
+ padding-block: var(--db-spacing-fixed-sm) calc(var(--db-spacing-fixed-sm) + calc(var(--db-border-width-xs) + var(--db-spacing-fixed-2xs)));
370
250
  }
371
- .db-tabs[data-scroll-behavior=arrows]:has(.db-button)::after {
251
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-start {
252
+ inset-inline-start: 0;
253
+ }
254
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-start:dir(rtl) {
255
+ --db-icon: "chevron_right";
256
+ }
257
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-end {
372
258
  inset-inline-end: 0;
373
259
  }
260
+ .db-tabs[data-scroll-behavior=arrows]:not([data-orientation=vertical]) .tabs-scroll-end:dir(rtl) {
261
+ --db-icon: "chevron_left";
262
+ }