@carbon/web-components 2.55.0-rc.0 → 2.56.0-rc.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 (146) hide show
  1. package/custom-elements.json +133 -30
  2. package/es/components/button/button.d.ts.map +1 -1
  3. package/es/components/button/button.js +6 -4
  4. package/es/components/button/button.js.map +1 -1
  5. package/es/components/button/button.scss.js +1 -1
  6. package/es/components/button/button.scss.js.map +1 -1
  7. package/es/components/data-table/data-table.scss.js +1 -1
  8. package/es/components/data-table/table-batch-actions.d.ts +1 -1
  9. package/es/components/data-table/table-batch-actions.d.ts.map +1 -1
  10. package/es/components/data-table/table-batch-actions.js +3 -5
  11. package/es/components/data-table/table-batch-actions.js.map +1 -1
  12. package/es/components/data-table/table-toolbar-content.d.ts +1 -1
  13. package/es/components/data-table/table-toolbar-content.d.ts.map +1 -1
  14. package/es/components/data-table/table-toolbar-content.js +2 -2
  15. package/es/components/data-table/table-toolbar-content.js.map +1 -1
  16. package/es/components/data-table/table.d.ts +6 -0
  17. package/es/components/data-table/table.d.ts.map +1 -1
  18. package/es/components/data-table/table.js +12 -2
  19. package/es/components/data-table/table.js.map +1 -1
  20. package/es/components/fluid-form/fluid-form.scss.js +1 -1
  21. package/es/components/fluid-form/fluid-form.scss.js.map +1 -1
  22. package/es/components/menu/menu-item.d.ts.map +1 -1
  23. package/es/components/menu/menu-item.js +3 -3
  24. package/es/components/menu/menu-item.js.map +1 -1
  25. package/es/components/modal/modal.scss.js +1 -1
  26. package/es/components/multi-select/multi-select.d.ts +4 -0
  27. package/es/components/multi-select/multi-select.d.ts.map +1 -1
  28. package/es/components/multi-select/multi-select.js +4 -1
  29. package/es/components/multi-select/multi-select.js.map +1 -1
  30. package/es/components/overflow-menu/overflow-menu-item.d.ts.map +1 -1
  31. package/es/components/overflow-menu/overflow-menu-item.js +4 -3
  32. package/es/components/overflow-menu/overflow-menu-item.js.map +1 -1
  33. package/es/components/tabs/defs.d.ts +26 -0
  34. package/es/components/tabs/defs.d.ts.map +1 -1
  35. package/es/components/tabs/defs.js +28 -1
  36. package/es/components/tabs/defs.js.map +1 -1
  37. package/es/components/tabs/index.d.ts +1 -0
  38. package/es/components/tabs/index.d.ts.map +1 -1
  39. package/es/components/tabs/index.js +1 -0
  40. package/es/components/tabs/stories/tabs-wrapper.d.ts +5 -0
  41. package/es/components/tabs/stories/tabs-wrapper.d.ts.map +1 -1
  42. package/es/components/tabs/stories/tabs-wrapper.js +2 -0
  43. package/es/components/tabs/stories/tabs-wrapper.js.map +1 -1
  44. package/es/components/tabs/tab.d.ts +26 -0
  45. package/es/components/tabs/tab.d.ts.map +1 -1
  46. package/es/components/tabs/tab.js +41 -7
  47. package/es/components/tabs/tab.js.map +1 -1
  48. package/es/components/tabs/tabs-vertical.d.ts +29 -0
  49. package/es/components/tabs/tabs-vertical.d.ts.map +1 -0
  50. package/es/components/tabs/tabs-vertical.js +113 -0
  51. package/es/components/tabs/tabs-vertical.js.map +1 -0
  52. package/es/components/tabs/tabs.d.ts +22 -4
  53. package/es/components/tabs/tabs.d.ts.map +1 -1
  54. package/es/components/tabs/tabs.js +50 -9
  55. package/es/components/tabs/tabs.js.map +1 -1
  56. package/es/components/tabs/tabs.scss.js +1 -1
  57. package/es/components/tabs/tabs.scss.js.map +1 -1
  58. package/es-custom/components/button/button.d.ts.map +1 -1
  59. package/es-custom/components/button/button.js +6 -4
  60. package/es-custom/components/button/button.js.map +1 -1
  61. package/es-custom/components/button/button.scss.js +1 -1
  62. package/es-custom/components/button/button.scss.js.map +1 -1
  63. package/es-custom/components/data-table/data-table.scss.js +1 -1
  64. package/es-custom/components/data-table/table-batch-actions.d.ts +1 -1
  65. package/es-custom/components/data-table/table-batch-actions.d.ts.map +1 -1
  66. package/es-custom/components/data-table/table-batch-actions.js +3 -5
  67. package/es-custom/components/data-table/table-batch-actions.js.map +1 -1
  68. package/es-custom/components/data-table/table-toolbar-content.d.ts +1 -1
  69. package/es-custom/components/data-table/table-toolbar-content.d.ts.map +1 -1
  70. package/es-custom/components/data-table/table-toolbar-content.js +2 -2
  71. package/es-custom/components/data-table/table-toolbar-content.js.map +1 -1
  72. package/es-custom/components/data-table/table.d.ts +6 -0
  73. package/es-custom/components/data-table/table.d.ts.map +1 -1
  74. package/es-custom/components/data-table/table.js +12 -2
  75. package/es-custom/components/data-table/table.js.map +1 -1
  76. package/es-custom/components/fluid-form/fluid-form.scss.js +1 -1
  77. package/es-custom/components/fluid-form/fluid-form.scss.js.map +1 -1
  78. package/es-custom/components/menu/menu-item.d.ts.map +1 -1
  79. package/es-custom/components/menu/menu-item.js +3 -3
  80. package/es-custom/components/menu/menu-item.js.map +1 -1
  81. package/es-custom/components/modal/modal.scss.js +1 -1
  82. package/es-custom/components/multi-select/multi-select.d.ts +4 -0
  83. package/es-custom/components/multi-select/multi-select.d.ts.map +1 -1
  84. package/es-custom/components/multi-select/multi-select.js +4 -1
  85. package/es-custom/components/multi-select/multi-select.js.map +1 -1
  86. package/es-custom/components/overflow-menu/overflow-menu-item.d.ts.map +1 -1
  87. package/es-custom/components/overflow-menu/overflow-menu-item.js +4 -3
  88. package/es-custom/components/overflow-menu/overflow-menu-item.js.map +1 -1
  89. package/es-custom/components/tabs/defs.d.ts +26 -0
  90. package/es-custom/components/tabs/defs.d.ts.map +1 -1
  91. package/es-custom/components/tabs/defs.js +28 -1
  92. package/es-custom/components/tabs/defs.js.map +1 -1
  93. package/es-custom/components/tabs/index.d.ts +1 -0
  94. package/es-custom/components/tabs/index.d.ts.map +1 -1
  95. package/es-custom/components/tabs/index.js +1 -0
  96. package/es-custom/components/tabs/stories/tabs-wrapper.d.ts +5 -0
  97. package/es-custom/components/tabs/stories/tabs-wrapper.d.ts.map +1 -1
  98. package/es-custom/components/tabs/stories/tabs-wrapper.js +2 -0
  99. package/es-custom/components/tabs/stories/tabs-wrapper.js.map +1 -1
  100. package/es-custom/components/tabs/tab.d.ts +26 -0
  101. package/es-custom/components/tabs/tab.d.ts.map +1 -1
  102. package/es-custom/components/tabs/tab.js +41 -7
  103. package/es-custom/components/tabs/tab.js.map +1 -1
  104. package/es-custom/components/tabs/tabs-vertical.d.ts +29 -0
  105. package/es-custom/components/tabs/tabs-vertical.d.ts.map +1 -0
  106. package/es-custom/components/tabs/tabs-vertical.js +113 -0
  107. package/es-custom/components/tabs/tabs-vertical.js.map +1 -0
  108. package/es-custom/components/tabs/tabs.d.ts +22 -4
  109. package/es-custom/components/tabs/tabs.d.ts.map +1 -1
  110. package/es-custom/components/tabs/tabs.js +50 -9
  111. package/es-custom/components/tabs/tabs.js.map +1 -1
  112. package/es-custom/components/tabs/tabs.scss.js +1 -1
  113. package/es-custom/components/tabs/tabs.scss.js.map +1 -1
  114. package/lib/components/button/button.d.ts.map +1 -1
  115. package/lib/components/data-table/table-batch-actions.d.ts +1 -1
  116. package/lib/components/data-table/table-batch-actions.d.ts.map +1 -1
  117. package/lib/components/data-table/table-toolbar-content.d.ts +1 -1
  118. package/lib/components/data-table/table-toolbar-content.d.ts.map +1 -1
  119. package/lib/components/data-table/table.d.ts +6 -0
  120. package/lib/components/data-table/table.d.ts.map +1 -1
  121. package/lib/components/menu/menu-item.d.ts.map +1 -1
  122. package/lib/components/multi-select/multi-select.d.ts +4 -0
  123. package/lib/components/multi-select/multi-select.d.ts.map +1 -1
  124. package/lib/components/overflow-menu/overflow-menu-item.d.ts.map +1 -1
  125. package/lib/components/tabs/defs.d.ts +26 -0
  126. package/lib/components/tabs/defs.d.ts.map +1 -1
  127. package/lib/components/tabs/defs.js +29 -0
  128. package/lib/components/tabs/defs.js.map +1 -1
  129. package/lib/components/tabs/index.d.ts +1 -0
  130. package/lib/components/tabs/index.d.ts.map +1 -1
  131. package/lib/components/tabs/stories/tabs-wrapper.d.ts +5 -0
  132. package/lib/components/tabs/stories/tabs-wrapper.d.ts.map +1 -1
  133. package/lib/components/tabs/tab.d.ts +26 -0
  134. package/lib/components/tabs/tab.d.ts.map +1 -1
  135. package/lib/components/tabs/tabs-vertical.d.ts +29 -0
  136. package/lib/components/tabs/tabs-vertical.d.ts.map +1 -0
  137. package/lib/components/tabs/tabs.d.ts +22 -4
  138. package/lib/components/tabs/tabs.d.ts.map +1 -1
  139. package/package.json +7 -7
  140. package/scss/components/button/button.scss +0 -24
  141. package/scss/components/data-table/_table-action.scss +20 -176
  142. package/scss/components/data-table/_table-sizes.scss +1 -33
  143. package/scss/components/fluid-form/fluid-form.scss +1 -1
  144. package/scss/components/tabs/tabs-story.scss +5 -0
  145. package/scss/components/tabs/tabs.scss +168 -5
  146. package/telemetry.yml +2 -0
@@ -15,6 +15,7 @@
15
15
  @use '@carbon/styles/scss/components/data-table/data-table';
16
16
  @use '@carbon/styles/scss/components/data-table/action';
17
17
  @use '@carbon/styles/scss/layout' as *;
18
+ @use '@carbon/styles/scss/utilities/layout';
18
19
  //
19
20
  // Table toolbar
20
21
  //
@@ -26,41 +27,21 @@
26
27
  z-index: 1;
27
28
  }
28
29
 
29
- :host(#{$prefix}-table-toolbar[size='xs']),
30
- :host(#{$prefix}-table-toolbar[size='sm']) {
31
- @extend .#{$prefix}--table-toolbar--sm;
32
- }
33
-
34
30
  :host(#{$prefix}-table-toolbar-content) {
35
31
  @extend .#{$prefix}--toolbar-content;
36
32
 
37
33
  ::slotted(#{$prefix}-overflow-menu) {
38
34
  display: flex;
39
- block-size: $spacing-09;
35
+ block-size: layout.size('height');
40
36
  cursor: pointer;
41
- inline-size: $spacing-09;
37
+ inline-size: layout.size('height');
42
38
  transition: background-color $duration-fast-02 motion(entrance, productive);
43
39
  }
44
40
  }
45
41
 
46
- :host(#{$prefix}-table-toolbar-content[size='xs']),
47
- :host(#{$prefix}-table-toolbar-content[size='sm']) {
48
- ::slotted(#{$prefix}-table-toolbar-search),
49
- ::slotted(#{$prefix}-overflow-menu),
50
- ::slotted(#{$prefix}-button) {
51
- block-size: $spacing-07;
52
- min-block-size: $spacing-07;
53
- }
54
-
55
- ::slotted(#{$prefix}-table-toolbar-search),
56
- ::slotted(#{$prefix}-overflow-menu) {
57
- inline-size: $spacing-07;
58
- }
59
- }
60
-
61
42
  :host(#{$prefix}-table-toolbar-content[has-batch-actions]) {
62
43
  clip-path: polygon(0 0, 100% 0, 100% 0, 0 0);
63
- transform: translate3d(0, $spacing-09, 0);
44
+ transform: translate3d(0, layout.size('height'), 0);
64
45
  transition:
65
46
  transform $duration-fast-02 motion(standard, productive),
66
47
  clip-path $duration-fast-02 motion(standard, productive);
@@ -70,67 +51,13 @@
70
51
  @extend .#{$prefix}--toolbar-action;
71
52
  @extend .#{$prefix}--toolbar-search-container-expandable;
72
53
 
73
- &:hover {
74
- background-color: $field-hover;
75
- }
76
-
77
54
  flex: none;
55
+ block-size: layout.size('height');
56
+ inline-size: layout.size('height');
78
57
  transition: flex 175ms $standard-easing;
79
58
 
80
- .#{$prefix}--search {
81
- block-size: 100%;
82
- inline-size: 100%;
83
-
84
- .#{$prefix}--search-magnifier {
85
- cursor: pointer;
86
- inset-inline-start: 0;
87
- pointer-events: all;
88
- transition: background $duration-fast-02 motion(entrance, productive);
89
-
90
- &-icon {
91
- block-size: auto;
92
- inline-size: auto;
93
- }
94
- }
95
-
96
- .#{$prefix}--search-input {
97
- border-block-end: 0;
98
- }
99
-
100
- .#{$prefix}--search-close {
101
- block-size: $spacing-09;
102
- inline-size: $spacing-09;
103
-
104
- &::before {
105
- background-color: $background-hover;
106
- inline-size: 0;
107
- }
108
-
109
- :hover {
110
- background-color: none;
111
- }
112
- }
113
-
114
- :hover {
115
- background-color: none;
116
- }
117
- }
118
-
119
- svg {
120
- inset-inline-start: 0;
121
- }
122
- }
123
-
124
- :host(#{$prefix}-table-toolbar-search[size='xs']),
125
- :host(#{$prefix}-table-toolbar-search[size='sm']) {
126
- .#{$prefix}--search-close {
127
- block-size: rem(32px);
128
- inline-size: rem(32px);
129
- }
130
-
131
- svg {
132
- padding: 0;
133
- inset-inline-start: $spacing-03;
59
+ .#{$prefix}--search-input {
60
+ border-block-end: 0;
134
61
  }
135
62
  }
136
63
 
@@ -140,15 +67,8 @@
140
67
  flex: auto;
141
68
  }
142
69
 
143
- :host(#{$prefix}-table-toolbar-search[size='xs'][expanded]),
144
- :host(#{$prefix}-table-toolbar-search[size='sm'][expanded]) {
145
- svg {
146
- inset-inline-start: $spacing-05;
147
- }
148
- }
149
-
150
- :host(#{$prefix}-table-toolbar-search[persistent]:hover) {
151
- .#{$prefix}--search-input {
70
+ :host(#{$prefix}-table-toolbar-search:hover) {
71
+ .#{$prefix}--search {
152
72
  background-color: $field-hover;
153
73
  }
154
74
  }
@@ -157,103 +77,27 @@
157
77
  @extend .#{$prefix}--batch-actions;
158
78
 
159
79
  box-sizing: border-box;
80
+ block-size: layout.size('height');
81
+ min-block-size: layout.size('height');
160
82
  overflow-x: auto;
161
- }
162
-
163
- :host(#{$prefix}-table-batch-actions[active]) {
164
- @extend .#{$prefix}--batch-actions--active;
165
- }
166
-
167
- :host(#{$prefix}-table-batch-actions[size='xs']),
168
- :host(#{$prefix}-table-batch-actions[size='sm']) {
169
- block-size: $spacing-07;
170
- min-block-size: $spacing-07;
171
-
172
- .#{$prefix}--batch-summary {
173
- block-size: $spacing-07;
174
- min-block-size: $spacing-07;
175
-
176
- &__para {
177
- padding: 0;
178
- margin: 0;
179
- block-size: $spacing-07;
180
- line-height: $spacing-07;
181
- }
182
- }
183
-
184
- .#{$prefix}--action-list {
185
- block-size: $spacing-07;
186
- }
187
-
188
- .#{$prefix}--btn--primary.#{$prefix}--batch-summary__cancel {
189
- block-size: $spacing-07;
190
- min-block-size: auto;
191
- padding-block: 0.375rem;
192
-
193
- &::before {
194
- inset-block-start: rem(8px);
195
- }
196
- }
197
- }
198
-
199
- :host(#{$prefix}-table-batch-actions[size='md']),
200
- :host(#{$prefix}-table-batch-actions[size='lg']),
201
- :host(#{$prefix}-table-batch-actions[size='xl']) {
202
- block-size: $spacing-09;
203
- min-block-size: $spacing-09;
204
83
 
205
84
  .#{$prefix}--batch-summary {
206
- block-size: $spacing-09;
207
- min-block-size: $spacing-09;
85
+ block-size: layout.size('height');
86
+ min-block-size: layout.size('height');
208
87
 
209
88
  &__para {
210
- padding: 0;
211
- margin: 0;
212
- block-size: $spacing-09;
213
- line-height: $spacing-09;
89
+ block-size: layout.size('height');
90
+ line-height: layout.size('height');
214
91
  }
215
92
  }
216
93
 
217
94
  .#{$prefix}--action-list {
218
- block-size: $spacing-09;
95
+ block-size: layout.size('height');
219
96
  }
220
-
221
- .#{$prefix}--btn--primary.#{$prefix}--batch-summary__cancel {
222
- block-size: $spacing-09;
223
- min-block-size: auto;
224
-
225
- &::before {
226
- inset-block-start: rem(15px);
227
- }
228
- }
229
- }
230
-
231
- :host(#{$prefix}-table-toolbar-content[has-batch-actions][size='xs']),
232
- :host(#{$prefix}-table-toolbar-content[has-batch-actions][size='sm']) {
233
- transform: translate3d(0, $spacing-07, 0);
234
97
  }
235
98
 
236
- :host(#{$prefix}-table-toolbar-content[has-batch-actions][size='md']),
237
- :host(#{$prefix}-table-toolbar-content[has-batch-actions][size='lg']),
238
- :host(#{$prefix}-table-toolbar-content[has-batch-actions][size='xl']) {
239
- transform: translate3d(0, $spacing-09, 0);
99
+ :host(#{$prefix}-table-batch-actions[active]) {
100
+ @extend .#{$prefix}--batch-actions--active;
240
101
  }
241
102
 
242
- :host(#{$prefix}-table-batch-actions) {
243
- .#{$prefix}--btn--primary.#{$prefix}--batch-summary__cancel {
244
- --divider-opacity: 1;
245
-
246
- &::before {
247
- @media (prefers-reduced-motion: reduce) {
248
- transition: none;
249
- }
250
-
251
- opacity: var(--divider-opacity);
252
- transition: opacity $duration-fast-02 motion(standard, productive);
253
- }
254
-
255
- &:hover::before {
256
- opacity: 0;
257
- }
258
- }
259
- }
103
+ @include emit-layout-tokens-to-shadow-host(#{$prefix}-table-toolbar);
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright IBM Corp. 2019, 2024
2
+ // Copyright IBM Corp. 2019, 2026
3
3
  //
4
4
  // This source code is licensed under the Apache-2.0 license found in the
5
5
  // LICENSE file in the root directory of this source tree.
@@ -147,38 +147,6 @@
147
147
  }
148
148
  }
149
149
 
150
- // Small persistent toolbar
151
- :host(#{$prefix}-table-toolbar[size='xs']),
152
- :host(#{$prefix}-table-toolbar-content[size='xs']) {
153
- &,
154
- ::slotted(#{$prefix}-table-toolbar-search),
155
- ::slotted(#{$prefix}-overflow-menu),
156
- ::slotted(#{$prefix}-button) {
157
- block-size: $spacing-07;
158
- min-block-size: $spacing-07;
159
- }
160
- ::slotted(#{$prefix}-table-toolbar-search),
161
- ::slotted(#{$prefix}-overflow-menu) {
162
- inline-size: $spacing-07;
163
- }
164
- }
165
-
166
- :host(#{$prefix}-table-toolbar[size='sm']),
167
- :host(#{$prefix}-table-toolbar-content[size='sm']) {
168
- &,
169
- ::slotted(#{$prefix}-table-toolbar-search),
170
- ::slotted(#{$prefix}-overflow-menu),
171
- ::slotted(#{$prefix}-button) {
172
- block-size: $spacing-07;
173
- min-block-size: $spacing-07;
174
- }
175
-
176
- ::slotted(#{$prefix}-table-toolbar-search),
177
- ::slotted(#{$prefix}-overflow-menu) {
178
- inline-size: $spacing-07;
179
- }
180
- }
181
-
182
150
  //
183
151
  // "selection" and "expandable" sizes
184
152
  //
@@ -19,6 +19,6 @@ $css--plex: true !default;
19
19
  --cds-field: var(--cds-field-01);
20
20
 
21
21
  .#{$prefix}--form--fluid {
22
- margin-inline: -$spacing-05 - $spacing-05;
22
+ margin-inline: -$spacing-03 - $spacing-03;
23
23
  }
24
24
  }
@@ -46,3 +46,8 @@ body {
46
46
  #{$prefix}-tabs[type='contained'] ~ .#{$prefix}--tab-content {
47
47
  background: $layer;
48
48
  }
49
+
50
+ .#{$prefix}-ce-demo-devenv--tab-story-button {
51
+ display: inline-block;
52
+ inline-size: auto;
53
+ }
@@ -20,6 +20,7 @@
20
20
  @use '@carbon/styles/scss/utilities/layout';
21
21
  @use '@carbon/styles/scss/utilities/convert';
22
22
  @use '@carbon/styles/scss/utilities/skeleton' as *;
23
+ @use '@carbon/styles/scss/utilities/update_fields_on_layer' as *;
23
24
 
24
25
  $inset-transition: inset 110ms motion(standard, productive);
25
26
 
@@ -27,6 +28,7 @@ $inset-transition: inset 110ms motion(standard, productive);
27
28
  :host(#{$prefix}-tabs-skeleton) {
28
29
  @extend .#{$prefix}--tabs;
29
30
  @include emit-layout-tokens();
31
+
30
32
  .#{$prefix}--tabs-nav-content-container {
31
33
  position: relative;
32
34
  overflow: scroll;
@@ -264,6 +266,9 @@ $inset-transition: inset 110ms motion(standard, productive);
264
266
  outline: none;
265
267
  }
266
268
 
269
+ :host(#{$prefix}-tab:not([type='contained']):not([vertical])) {
270
+ margin-inline-end: convert.to-rem(1px);
271
+ }
267
272
  :host(#{$prefix}-tab:not([type='contained'])) {
268
273
  .#{$prefix}--tabs__nav-link {
269
274
  padding-block-end: calc(#{$spacing-03} + #{convert.to-rem(1px)});
@@ -271,10 +276,19 @@ $inset-transition: inset 110ms motion(standard, productive);
271
276
  }
272
277
  }
273
278
 
279
+ :host(#{$prefix}-tab:not([type='contained']):not([vertical]):last-of-type) {
280
+ margin-inline-end: 0;
281
+ }
274
282
  :host(#{$prefix}-tab:not([type='contained']))
275
283
  + :host(#{$prefix}-tab:not([type='contained'])) {
276
284
  margin-inline-start: convert.to-rem(1px);
277
285
  }
286
+ :host(#{$prefix}-tab[vertical]) {
287
+ .#{$prefix}--tabs__nav-link {
288
+ padding-block-end: $spacing-03;
289
+ padding-block-start: $spacing-03;
290
+ }
291
+ }
278
292
 
279
293
  :host(#{$prefix}-tab[badge-indicator][icon-only]:not([icon-size='lg']))
280
294
  #{$prefix}-badge-indicator,
@@ -368,7 +382,7 @@ $inset-transition: inset 110ms motion(standard, productive);
368
382
  }
369
383
  }
370
384
 
371
- :host(#{$prefix}-tab:hover:not([selected])) {
385
+ :host(#{$prefix}-tab:hover:not([selected]):not([vertical])) {
372
386
  background-color: transparent;
373
387
 
374
388
  a.#{$prefix}--tabs__nav-link {
@@ -384,7 +398,7 @@ $inset-transition: inset 110ms motion(standard, productive);
384
398
 
385
399
  :host(#{$prefix}-tabs[type='contained'])
386
400
  .#{$prefix}--tabs-nav-content-container {
387
- block-size: $spacing-09;
401
+ block-size: layout.size('height');
388
402
  }
389
403
 
390
404
  :host(#{$prefix}-tab[type='contained']) {
@@ -392,9 +406,9 @@ $inset-transition: inset 110ms motion(standard, productive);
392
406
 
393
407
  a.#{$prefix}--tabs__nav-link {
394
408
  padding: $spacing-03 $spacing-05;
395
- block-size: $spacing-09;
409
+ block-size: layout.size('height');
396
410
  // height - vertical padding
397
- line-height: calc(#{$spacing-09} - (#{$spacing-03} * 2));
411
+ line-height: calc(#{layout.size('height')} - (#{$spacing-03} * 2));
398
412
  }
399
413
  }
400
414
 
@@ -446,7 +460,7 @@ $inset-transition: inset 110ms motion(standard, productive);
446
460
  // Draws the border without affecting the inner-content
447
461
  box-shadow: inset 0 $spacing-01 0 0 $interactive;
448
462
  // height - vertical padding
449
- line-height: calc(#{$spacing-09} - (#{$spacing-03} * 2));
463
+ line-height: calc(#{layout.size('height')} - (#{$spacing-03} * 2));
450
464
  }
451
465
 
452
466
  .#{$prefix}--tabs__nav-link:focus,
@@ -559,6 +573,155 @@ $inset-transition: inset 110ms motion(standard, productive);
559
573
  }
560
574
  }
561
575
 
576
+ :host(#{$prefix}-tab[vertical]) .#{$prefix}--tabs__nav-link {
577
+ display: flex;
578
+ align-items: center;
579
+ border-block-end: 1px solid $border-subtle;
580
+ }
581
+
582
+ :host(#{$prefix}-tab[vertical][selected]) .#{$prefix}--tabs__nav-link {
583
+ border-block-end: 1px solid $border-subtle;
584
+ }
585
+
586
+ :host(#{$prefix}-tab[vertical][disabled]) .#{$prefix}--tabs__nav-link {
587
+ border-block-end: 1px solid $border-subtle;
588
+ }
589
+
590
+ //-----------------------------
591
+ // Vertical Tabs Wrapper
592
+ //-----------------------------
593
+
594
+ :host(#{$prefix}-tabs-vertical) {
595
+ @include emit-layout-tokens();
596
+ @include layout.use('density', $default: 'normal');
597
+
598
+ grid-column: span 2;
599
+ max-block-size: none;
600
+
601
+ &.#{$prefix}--css-grid {
602
+ box-shadow: inset -1px 0 $border-subtle;
603
+ }
604
+
605
+ ::slotted(#{$prefix}-tabs) {
606
+ grid-column: span 2;
607
+
608
+ @include breakpoint(lg) {
609
+ grid-column: span 4;
610
+ }
611
+ }
612
+
613
+ // Shadow-DOM wrapper for the panel slot — styled directly (no ::slotted needed)
614
+ .#{$prefix}-panel-container {
615
+ @include update_fields_on_layer;
616
+
617
+ background: $layer;
618
+ grid-column: 3 / -1;
619
+ overflow-y: auto;
620
+
621
+ @include breakpoint(lg) {
622
+ grid-column: 5 / -1;
623
+ }
624
+ }
625
+ }
626
+
627
+ // Slotted tab panel divs — match React's cds--tab-content styles
628
+ :host(#{$prefix}-tabs-vertical) ::slotted([role='tabpanel']) {
629
+ // stylelint-disable-next-line declaration-no-important
630
+ padding: layout.density('padding-inline') !important;
631
+ outline: none;
632
+ }
633
+
634
+ :host(#{$prefix}-tabs-vertical)
635
+ .panel-container
636
+ ::slotted([role='tabpanel']:focus) {
637
+ @include focus-outline('outline');
638
+ }
639
+
640
+ // cds-tabs when slotted inside cds-tabs-vertical (slot="tabs")
641
+ :host(#{$prefix}-tabs-vertical) ::slotted(#{$prefix}-tabs) {
642
+ background: $layer;
643
+ box-shadow: inset -1px 0 $border-subtle;
644
+ max-block-size: none;
645
+ }
646
+
647
+ // Internal styles for cds-tabs when inside cds-tabs-vertical
648
+ // These are applied via a CSS custom property / attribute set by the wrapper
649
+ :host(#{$prefix}-tabs[vertical]) {
650
+ .#{$prefix}--tabs-nav-content-container {
651
+ block-size: 100%;
652
+ overflow-x: hidden;
653
+ overflow-y: auto;
654
+ }
655
+
656
+ .#{$prefix}--tabs-nav-content {
657
+ position: relative;
658
+ block-size: 100%;
659
+ }
660
+
661
+ .#{$prefix}--tabs-nav {
662
+ position: relative;
663
+ }
664
+
665
+ .#{$prefix}--tab--list {
666
+ display: flex;
667
+ flex-direction: column;
668
+ }
669
+
670
+ .#{$prefix}--tab--overflow-nav-button {
671
+ display: none;
672
+ }
673
+
674
+ .#{$prefix}--tabs__nav-item-label {
675
+ display: -webkit-box;
676
+ overflow: hidden;
677
+ -webkit-box-orient: vertical;
678
+ -webkit-line-clamp: 2;
679
+ line-height: var(--cds-body-compact-01-line-height);
680
+ text-overflow: ellipsis;
681
+ white-space: normal;
682
+ }
683
+ }
684
+
685
+ :host(#{$prefix}-tab[vertical]) {
686
+ flex: none;
687
+ background-color: $layer-01;
688
+ block-size: $spacing-10;
689
+ border-inline-end: 1px solid $border-subtle;
690
+ box-shadow: inset 3px 0 0 0 $border-subtle;
691
+ inline-size: 100%;
692
+
693
+ .#{$prefix}--tabs__nav-item-label {
694
+ display: -webkit-box;
695
+ overflow: hidden;
696
+ -webkit-box-orient: vertical;
697
+ -webkit-line-clamp: 2;
698
+ line-height: var(--cds-body-compact-01-line-height);
699
+ text-overflow: ellipsis;
700
+ white-space: normal;
701
+ }
702
+ }
703
+
704
+ :host(#{$prefix}-tab[vertical][disabled]) {
705
+ border-inline-end: 1px solid $border-subtle;
706
+ box-shadow: inset 3px 0 0 0 $border-subtle;
707
+ }
708
+
709
+ :host(#{$prefix}-tab[vertical]:hover),
710
+ :host(#{$prefix}-tab[vertical][disabled]:hover) {
711
+ .#{$prefix}--tabs__nav-link {
712
+ border-block-end: 1px solid $border-subtle;
713
+ }
714
+ }
715
+
716
+ :host(#{$prefix}-tab[vertical][selected]) {
717
+ border-inline: none;
718
+ box-shadow: inset 3px 0 0 0 $border-interactive;
719
+ }
720
+
721
+ :host(#{$prefix}-tab[vertical]:not([selected]):not([disabled]):hover) {
722
+ background-color: $layer-hover;
723
+ box-shadow: inset 3px 0 0 0 $border-strong;
724
+ }
562
725
  :host(#{$prefix}-tab) {
563
726
  .#{$prefix}--tabs__nav-link--dismissable {
564
727
  display: flex;
package/telemetry.yml CHANGED
@@ -551,6 +551,8 @@ collect:
551
551
  - oncds-tabs-selected
552
552
  - selected-item-assistive-text
553
553
  - selecting-items-assistive-text
554
+ # cds-tabs-vertical
555
+ - custom-height
554
556
  # cds-tearsheet
555
557
  - has-close-icon
556
558
  - influencer-placement