@carbon/styles 1.114.0 → 1.115.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 (46) hide show
  1. package/css/styles.css +3354 -1545
  2. package/css/styles.min.css +7 -1
  3. package/package.json +10 -10
  4. package/scss/components/Tearsheet/_index.scss +11 -0
  5. package/scss/components/Tearsheet/_tearsheet.scss +715 -0
  6. package/scss/components/__tests__/data-table-test.js +49 -0
  7. package/scss/components/_index.scss +5 -2
  8. package/scss/components/big-number/_big-number.scss +1 -0
  9. package/scss/components/button/_button.scss +11 -12
  10. package/scss/components/button/_vars.scss +4 -4
  11. package/scss/components/checkbox/_checkbox.scss +69 -26
  12. package/scss/components/combo-box/_combo-box.scss +32 -21
  13. package/scss/components/data-table/action/_data-table-action.scss +54 -22
  14. package/scss/components/data-table/sort/_data-table-sort.scss +37 -3
  15. package/scss/components/date-picker/_date-picker-next.scss +60 -0
  16. package/scss/components/date-picker/_date-picker.scss +73 -0
  17. package/scss/components/date-picker/_flatpickr.scss +10 -0
  18. package/scss/components/dropdown/_dropdown.scss +26 -4
  19. package/scss/components/fluid-date-picker/_fluid-date-picker.scss +95 -11
  20. package/scss/components/fluid-list-box/_fluid-list-box.scss +102 -23
  21. package/scss/components/fluid-number-input/_fluid-number-input.scss +204 -24
  22. package/scss/components/fluid-search/_fluid-search.scss +7 -4
  23. package/scss/components/fluid-select/_fluid-select.scss +31 -2
  24. package/scss/components/fluid-text-input/_fluid-text-input.scss +34 -4
  25. package/scss/components/form/_form.scss +1 -14
  26. package/scss/components/guidebanner/_guidebanner.scss +322 -0
  27. package/scss/components/guidebanner/_index.scss +11 -0
  28. package/scss/components/list-box/_list-box.scss +116 -8
  29. package/scss/components/menu/_menu.scss +18 -1
  30. package/scss/components/multiselect/_multiselect.scss +82 -47
  31. package/scss/components/notifications-panel/_index.scss +11 -0
  32. package/scss/components/notifications-panel/_notifications-panel.scss +459 -0
  33. package/scss/components/number-input/_number-input.scss +94 -8
  34. package/scss/components/radio-button/_radio-button.scss +93 -27
  35. package/scss/components/search/_search.scss +35 -8
  36. package/scss/components/select/_select.scss +65 -5
  37. package/scss/components/tabs/_tabs.scss +2 -1
  38. package/scss/components/tag/_mixins.scss +19 -1
  39. package/scss/components/tag/_tag.scss +46 -16
  40. package/scss/components/text-input/_text-input.scss +53 -121
  41. package/scss/components/tile/_tile.scss +131 -13
  42. package/scss/utilities/_skeleton.scss +7 -1
  43. /package/scss/components/{EditInPlace → edit-in-place}/_edit-in-place.scss +0 -0
  44. /package/scss/components/{EditInPlace → edit-in-place}/_index.scss +0 -0
  45. /package/scss/components/{OptionsTile → options-tile}/_index.scss +0 -0
  46. /package/scss/components/{OptionsTile → options-tile}/_options-tile.scss +0 -0
@@ -85,6 +85,55 @@ describe('scss/components/data-table/action', () => {
85
85
  `);
86
86
  expect(unwrap('mixin')).toBe(true);
87
87
  });
88
+
89
+ test('toolbar hover styles are only applied on devices that support hover', async () => {
90
+ const { result } = await render(`
91
+ @use '../data-table/action';
92
+ `);
93
+ const hoverRules = [];
94
+ const toolbarSelectors = [
95
+ '.cds--toolbar',
96
+ '.cds--action-list',
97
+ '.cds--batch-summary',
98
+ ];
99
+
100
+ postcss.parse(result.css.toString()).walkRules((rule) => {
101
+ if (
102
+ rule.selector.includes(':hover') &&
103
+ toolbarSelectors.some((selector) => rule.selector.includes(selector))
104
+ ) {
105
+ hoverRules.push(rule);
106
+ }
107
+ });
108
+
109
+ expect(hoverRules.length).toBeGreaterThan(0);
110
+ expect(
111
+ hoverRules.some((rule) =>
112
+ rule.selector.includes('.cds--toolbar-action:hover')
113
+ )
114
+ ).toBe(true);
115
+ expect(
116
+ hoverRules
117
+ .filter((rule) => {
118
+ let parent = rule.parent;
119
+
120
+ while (parent) {
121
+ if (
122
+ parent.type === 'atrule' &&
123
+ parent.name === 'media' &&
124
+ parent.params.includes('(any-hover: hover)')
125
+ ) {
126
+ return false;
127
+ }
128
+
129
+ parent = parent.parent;
130
+ }
131
+
132
+ return true;
133
+ })
134
+ .map((rule) => rule.selector)
135
+ ).toEqual([]);
136
+ });
88
137
  });
89
138
 
90
139
  describe('scss/components/data-table/expandable', () => {
@@ -45,6 +45,7 @@
45
45
  @use 'fluid-time-picker';
46
46
  @use 'form';
47
47
  @use 'FullPageError';
48
+ @use 'guidebanner';
48
49
  @use 'icon-indicator';
49
50
  @use 'inline-loading';
50
51
  @use 'InterstitialScreen';
@@ -57,9 +58,10 @@
57
58
  @use 'modal';
58
59
  @use 'multiselect';
59
60
  @use 'notification';
61
+ @use 'notifications-panel';
60
62
  @use 'number-input';
61
63
  @use 'overflow-menu';
62
- @use 'OptionsTile';
64
+ @use 'options-tile';
63
65
  @use 'page-header';
64
66
  @use 'pagination';
65
67
  @use 'pagination-nav';
@@ -80,6 +82,7 @@
80
82
  @use 'structured-list';
81
83
  @use 'tabs';
82
84
  @use 'tag';
85
+ @use 'Tearsheet';
83
86
  @use 'text-area';
84
87
  @use 'text-input';
85
88
  @use 'tile';
@@ -90,5 +93,5 @@
90
93
  @use 'treeview';
91
94
  @use 'truncated-text';
92
95
  @use 'ui-shell';
93
- @use 'EditInPlace';
96
+ @use 'edit-in-place';
94
97
  @use 'user-avatar';
@@ -57,6 +57,7 @@
57
57
 
58
58
  .#{$prefix}--big-number__row {
59
59
  display: flex;
60
+ align-items: center;
60
61
  }
61
62
 
62
63
  .#{$prefix}--big-number__percentage {
@@ -42,7 +42,13 @@
42
42
  }
43
43
  }
44
44
 
45
- @mixin button-set-fluid-layout() {
45
+ /// Emit all fluid layout rules for a ButtonSet.
46
+ ///
47
+ /// @param {Number} $min-inline-size [$button-min-inline-size] - The minimum
48
+ /// inline size per button used as the container-query stacking threshold.
49
+ /// Pass a smaller value (e.g. `7.5rem` / 120px) for contexts with narrower
50
+ /// footers (Tearsheet, narrow SidePanel) so buttons don't stack too early.
51
+ @mixin button-set-fluid-layout($min-inline-size: $button-min-inline-size) {
46
52
  container-type: inline-size;
47
53
 
48
54
  .#{$prefix}--btn-set__fluid-inner {
@@ -55,13 +61,6 @@
55
61
  inline-size: 100%;
56
62
  }
57
63
 
58
- // NOTE: Container queries are based on this value which is based on IBM Products implementation
59
- // Side panel has up to 3 buttons unstacked from size lg (640px). Min 160.33px/button
60
- // Narrow Tearsheet 540px has 4 buttons unstacked buttons. Min 135px/button
61
- // Override via `@use '@carbon/styles/scss/components/button' with
62
- // ($button-min-inline-size: <value>)` for contexts that need a different threshold.
63
- $min-inline-button-size: $button-min-inline-size;
64
-
65
64
  .#{$prefix}--btn-set__fluid-inner .#{$prefix}--btn {
66
65
  // default non-column layout
67
66
  flex: 0 1 25%;
@@ -71,7 +70,7 @@
71
70
  }
72
71
 
73
72
  .#{$prefix}--btn-set__fluid-inner--auto-stack .#{$prefix}--btn {
74
- min-inline-size: $min-inline-button-size;
73
+ min-inline-size: $min-inline-size;
75
74
  }
76
75
 
77
76
  .#{$prefix}--btn-set__fluid-inner .#{$prefix}--btn--ghost,
@@ -85,14 +84,14 @@
85
84
  $max-fluid-buttons: 4;
86
85
  // this determines whether or not column is used
87
86
  @for $i from 1 through $max-fluid-buttons {
88
- @container (width <= #{$i * $min-inline-button-size}) {
87
+ @container (width <= #{$i * $min-inline-size}) {
89
88
  .#{$prefix}--btn-set__fluid-inner--auto-stack#{has-n-children($i)} {
90
89
  @include button-set-fluid-column();
91
90
  }
92
91
  }
93
92
  }
94
93
 
95
- @container (width <= #{4 * $min-inline-button-size}) {
94
+ @container (width <= #{4 * $min-inline-size}) {
96
95
  .#{$prefix}--btn-set__fluid-inner#{has-n-children(2)} {
97
96
  .#{$prefix}--btn {
98
97
  flex-basis: 50%;
@@ -101,7 +100,7 @@
101
100
  }
102
101
  }
103
102
 
104
- @container (width <= #{3 * $min-inline-button-size}) {
103
+ @container (width <= #{3 * $min-inline-size}) {
105
104
  .#{$prefix}--btn-set__fluid-inner#{has-n-children(1)} .#{$prefix}--btn {
106
105
  flex: 1 1 100%;
107
106
  max-inline-size: none;
@@ -79,10 +79,10 @@ $button-border-width: 2px !default;
79
79
  /// @group button
80
80
  $button-outline-width: 1px !default;
81
81
 
82
- /// Minimum inline size of a fluid button. Used as the container-query threshold
83
- /// for stacking fluid button sets. Contexts with more buttons or narrower
84
- /// containers (e.g. Tearsheet at 540px with 4 buttons) should lower this value
85
- /// via `@use … with ($button-min-inline-size: <value>)`.
82
+ /// Default minimum inline size per button for fluid ButtonSet container-query
83
+ /// stacking. Components with narrower containers (e.g. Tearsheet, SidePanel)
84
+ /// should pass a custom value via the `$min-inline-size` parameter of the
85
+ /// `button-set-fluid-layout` mixin rather than reconfiguring this variable.
86
86
  /// @type Number
87
87
  /// @access public
88
88
  /// @group button
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright IBM Corp. 2016, 2023
2
+ // Copyright IBM Corp. 2016, 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.
@@ -38,6 +38,17 @@
38
38
  margin-block-start: -#{$spacing-01};
39
39
  }
40
40
 
41
+ .#{$prefix}--checkbox-group-inner--decorator
42
+ + .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper,
43
+ .#{$prefix}--checkbox-group
44
+ > .#{$prefix}--ai-label
45
+ + .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper,
46
+ .#{$prefix}--checkbox-group
47
+ > .#{$prefix}--slug
48
+ + .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper {
49
+ margin-block-start: -#{$spacing-01};
50
+ }
51
+
41
52
  // Spacing below collection of checkboxes
42
53
  .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper:last-of-type {
43
54
  margin-block-end: convert.to-rem(3px);
@@ -387,57 +398,81 @@
387
398
  //-----------------------------------------------
388
399
  // Decorator
389
400
  //-----------------------------------------------
390
- .#{$prefix}--checkbox-group--decorator legend.#{$prefix}--label,
391
- .#{$prefix}--checkbox-wrapper--decorator .#{$prefix}--checkbox-label-text {
401
+ .#{$prefix}--checkbox-wrapper--decorator,
402
+ .#{$prefix}--checkbox-wrapper--slug {
392
403
  display: flex;
404
+ flex-direction: row;
405
+ flex-wrap: wrap;
406
+ align-items: flex-start;
407
+ }
408
+
409
+ .#{$prefix}--checkbox-group--decorator legend.#{$prefix}--label,
410
+ .#{$prefix}--checkbox-group--slug legend.#{$prefix}--label {
411
+ float: inline-start;
412
+ }
413
+
414
+ .#{$prefix}--checkbox-group--decorator
415
+ > .#{$prefix}--checkbox-group-inner--decorator,
416
+ .#{$prefix}--checkbox-group--slug > .#{$prefix}--ai-label,
417
+ .#{$prefix}--checkbox-group--slug > .#{$prefix}--slug {
418
+ float: inline-start;
419
+ }
420
+
421
+ .#{$prefix}--checkbox-group--decorator legend.#{$prefix}--label,
422
+ .#{$prefix}--checkbox-wrapper--decorator .#{$prefix}--checkbox-label-text,
423
+ .#{$prefix}--checkbox-group--decorator
424
+ > .#{$prefix}--checkbox-group-inner--decorator {
425
+ display: inline-flex;
393
426
  }
394
427
  // Remove v12
395
428
  .#{$prefix}--checkbox-group--slug legend.#{$prefix}--label,
396
- .#{$prefix}--checkbox-wrapper--slug .#{$prefix}--checkbox-label-text {
397
- display: flex;
429
+ .#{$prefix}--checkbox-wrapper--slug .#{$prefix}--checkbox-label-text,
430
+ .#{$prefix}--checkbox-group--slug > .#{$prefix}--ai-label,
431
+ .#{$prefix}--checkbox-group--slug > .#{$prefix}--slug {
432
+ display: inline-flex;
398
433
  }
399
434
 
400
435
  .#{$prefix}--checkbox-group--decorator
401
- legend.#{$prefix}--label
402
- .#{$prefix}--checkbox-group-inner--decorator
436
+ > .#{$prefix}--checkbox-group-inner--decorator
403
437
  > *,
404
438
  .#{$prefix}--checkbox-wrapper--decorator
405
- .#{$prefix}--checkbox-label-text
406
- .#{$prefix}--checkbox-wrapper-inner--decorator
439
+ > .#{$prefix}--checkbox-wrapper-inner--decorator
407
440
  > * {
408
441
  margin-inline-start: $spacing-03;
409
442
  }
410
443
  // Remove v12
411
- .#{$prefix}--checkbox-group--slug
412
- legend.#{$prefix}--label
413
- .#{$prefix}--ai-label,
414
- .#{$prefix}--checkbox-wrapper--slug
415
- .#{$prefix}--checkbox-label-text
416
- .#{$prefix}--ai-label,
417
- .#{$prefix}--checkbox-group--slug legend.#{$prefix}--label .#{$prefix}--slug,
418
- .#{$prefix}--checkbox-wrapper--slug
419
- .#{$prefix}--checkbox-label-text
420
- .#{$prefix}--slug {
444
+ .#{$prefix}--checkbox-group--slug > .#{$prefix}--ai-label,
445
+ .#{$prefix}--checkbox-group--slug > .#{$prefix}--slug,
446
+ .#{$prefix}--checkbox-wrapper--slug > .#{$prefix}--ai-label,
447
+ .#{$prefix}--checkbox-wrapper--slug > .#{$prefix}--slug {
421
448
  margin-inline-start: $spacing-03;
422
449
  }
423
450
 
424
451
  .#{$prefix}--checkbox-wrapper--decorator
425
- .#{$prefix}--checkbox-label-text
452
+ > .#{$prefix}--checkbox-wrapper-inner--decorator
426
453
  .#{$prefix}--ai-label__button--inline {
427
454
  line-height: inherit;
428
455
  margin-block-start: convert.to-rem(-1px);
429
456
  }
430
457
  // Remove v12
431
- .#{$prefix}--checkbox-wrapper--slug
432
- .#{$prefix}--checkbox-label-text
433
- .#{$prefix}--ai-label__button--inline,
434
- .#{$prefix}--checkbox-wrapper--slug
435
- .#{$prefix}--checkbox-label-text
436
- .#{$prefix}--slug__button--inline {
458
+ .#{$prefix}--checkbox-wrapper--slug .#{$prefix}--ai-label__button--inline,
459
+ .#{$prefix}--checkbox-wrapper--slug .#{$prefix}--slug__button--inline {
437
460
  line-height: inherit;
438
461
  margin-block-start: convert.to-rem(-1px);
439
462
  }
440
463
 
464
+ .#{$prefix}--checkbox-wrapper--decorator > .#{$prefix}--form__helper-text,
465
+ .#{$prefix}--checkbox-wrapper--slug > .#{$prefix}--form__helper-text {
466
+ inline-size: 100%;
467
+ }
468
+
469
+ .#{$prefix}--checkbox-group--decorator
470
+ > .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper,
471
+ .#{$prefix}--checkbox-group--slug
472
+ > .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper {
473
+ clear: both;
474
+ }
475
+
441
476
  //-----------------------------------------------
442
477
  // Horizontal group
443
478
  //-----------------------------------------------
@@ -463,5 +498,13 @@
463
498
  .#{$prefix}--label + .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper {
464
499
  margin-block-start: 0;
465
500
  }
501
+
502
+ .#{$prefix}--checkbox-group-inner--decorator
503
+ + .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper,
504
+ > .#{$prefix}--ai-label
505
+ + .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper,
506
+ > .#{$prefix}--slug + .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper {
507
+ margin-block-start: 0;
508
+ }
466
509
  }
467
510
  }
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright IBM Corp. 2016, 2023
2
+ // Copyright IBM Corp. 2016, 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.
@@ -9,6 +9,7 @@
9
9
  @use '../../config' as *;
10
10
  @use '../../theme' as *;
11
11
  @use '../../utilities/convert';
12
+ @use '../../feature-flags' as *;
12
13
  @use '../../utilities/focus-outline' as *;
13
14
 
14
15
  /// Combo box styles
@@ -19,21 +20,22 @@
19
20
  background-color: $field;
20
21
  }
21
22
 
22
- .#{$prefix}--combo-box
23
- .#{$prefix}--list-box__menu-item:first-child.#{$prefix}--list-box__menu-item--highlighted::before {
24
- position: absolute;
25
- border: 2px solid $focus;
26
- block-size: 100%;
27
- border-block-start: 1px solid $focus;
28
- content: '';
29
- inline-size: 100%;
30
- }
23
+ @if not enabled('enable-v12-release') {
24
+ .#{$prefix}--combo-box
25
+ .#{$prefix}--list-box__menu-item:first-child.#{$prefix}--list-box__menu-item--highlighted::before {
26
+ position: absolute;
27
+ border: 2px solid $focus;
28
+ block-size: 100%;
29
+ border-block-start: 1px solid $focus;
30
+ content: '';
31
+ inline-size: 100%;
32
+ }
31
33
 
32
- .#{$prefix}--combo-box
33
- .#{$prefix}--list-box__menu-item:first-child.#{$prefix}--list-box__menu-item--highlighted {
34
- @include focus-outline('reset');
34
+ .#{$prefix}--combo-box
35
+ .#{$prefix}--list-box__menu-item:first-child.#{$prefix}--list-box__menu-item--highlighted {
36
+ @include focus-outline('reset');
37
+ }
35
38
  }
36
-
37
39
  // V11: Possibly deprecate
38
40
  .#{$prefix}--combo-box.#{$prefix}--list-box--light:hover {
39
41
  background-color: $field-02;
@@ -52,14 +54,23 @@
52
54
  @include focus-outline('outline');
53
55
  }
54
56
 
55
- .#{$prefix}--combo-box.#{$prefix}--list-box--expanded:has(
56
- input[aria-activedescendant]:not([aria-activedescendant=''])
57
- )
58
- .#{$prefix}--combo-box--input--focus.#{$prefix}--text-input {
59
- outline-offset: convert.to-rem(-1px);
60
- outline-width: convert.to-rem(1px);
57
+ // v12 focus outline is on the combo-box itself, don't select cds--text-input
58
+ @if enabled('enable-v12-release') {
59
+ .#{$prefix}--combo-box.#{$prefix}--list-box--expanded:has(
60
+ input[aria-activedescendant]:not([aria-activedescendant=''])
61
+ ) {
62
+ outline-offset: convert.to-rem(-1px);
63
+ outline-width: convert.to-rem(1px);
64
+ }
65
+ } @else {
66
+ .#{$prefix}--combo-box.#{$prefix}--list-box--expanded:has(
67
+ input[aria-activedescendant]:not([aria-activedescendant=''])
68
+ )
69
+ .#{$prefix}--combo-box--input--focus.#{$prefix}--text-input {
70
+ outline-offset: convert.to-rem(-1px);
71
+ outline-width: convert.to-rem(1px);
72
+ }
61
73
  }
62
-
63
74
  .#{$prefix}--combo-box .#{$prefix}--list-box__field,
64
75
  .#{$prefix}--combo-box.#{$prefix}--list-box[data-invalid]
65
76
  .#{$prefix}--list-box__field,
@@ -76,8 +76,10 @@
76
76
  width $transition-expansion $standard-easing,
77
77
  background-color $duration-fast-02 motion(entrance, productive);
78
78
 
79
- &:hover {
80
- background-color: $field-hover;
79
+ @media (any-hover: hover) {
80
+ &:hover {
81
+ background-color: $field-hover;
82
+ }
81
83
  }
82
84
  }
83
85
 
@@ -117,14 +119,21 @@
117
119
  .#{$prefix}--toolbar-search-container-active
118
120
  .#{$prefix}--search-magnifier-icon:focus,
119
121
  .#{$prefix}--toolbar-search-container-active
120
- .#{$prefix}--search-magnifier-icon:active,
121
- .#{$prefix}--toolbar-search-container-active
122
- .#{$prefix}--search-magnifier-icon:hover {
122
+ .#{$prefix}--search-magnifier-icon:active {
123
123
  border: none;
124
124
  background-color: transparent;
125
125
  outline: none;
126
126
  }
127
127
 
128
+ @media (any-hover: hover) {
129
+ .#{$prefix}--toolbar-search-container-active
130
+ .#{$prefix}--search-magnifier-icon:hover {
131
+ border: none;
132
+ background-color: transparent;
133
+ outline: none;
134
+ }
135
+ }
136
+
128
137
  //-------------------------------------------------
129
138
  //ACTIVE SEARCH - DEFAULT TOOLBAR
130
139
  //-------------------------------------------------
@@ -161,14 +170,21 @@
161
170
  //SEARCH CLOSE BUTTON
162
171
  //-------------------------------------------------
163
172
  .#{$prefix}--toolbar-search-container-persistent .#{$prefix}--search-close,
164
- .#{$prefix}--toolbar-search-container-persistent
165
- .#{$prefix}--search-close:hover,
166
- .#{$prefix}--toolbar-search-container-active .#{$prefix}--search-close,
167
- .#{$prefix}--toolbar-search-container-active .#{$prefix}--search-close:hover {
173
+ .#{$prefix}--toolbar-search-container-active .#{$prefix}--search-close {
168
174
  border: none;
169
175
  background-color: transparent;
170
176
  }
171
177
 
178
+ @media (any-hover: hover) {
179
+ .#{$prefix}--toolbar-search-container-persistent
180
+ .#{$prefix}--search-close:hover,
181
+ .#{$prefix}--toolbar-search-container-active
182
+ .#{$prefix}--search-close:hover {
183
+ border: none;
184
+ background-color: transparent;
185
+ }
186
+ }
187
+
172
188
  .#{$prefix}--toolbar-search-container-persistent
173
189
  .#{$prefix}--search-close::before {
174
190
  display: none;
@@ -199,15 +215,22 @@
199
215
  transition: background $duration-fast-02 motion(entrance, productive);
200
216
  }
201
217
 
202
- .#{$prefix}--toolbar-action:hover:not([disabled]) {
203
- background-color: $field-hover;
218
+ @media (any-hover: hover) {
219
+ .#{$prefix}--toolbar-action:hover:not([disabled]) {
220
+ background-color: $field-hover;
221
+ }
204
222
  }
205
223
 
206
- .#{$prefix}--toolbar-action[aria-expanded='true'],
207
- .#{$prefix}--toolbar-action:hover[aria-expanded='true'] {
224
+ .#{$prefix}--toolbar-action[aria-expanded='true'] {
208
225
  background-color: $layer-02;
209
226
  }
210
227
 
228
+ @media (any-hover: hover) {
229
+ .#{$prefix}--toolbar-action:hover[aria-expanded='true'] {
230
+ background-color: $layer-02;
231
+ }
232
+ }
233
+
211
234
  .#{$prefix}--toolbar-action[disabled] {
212
235
  cursor: not-allowed;
213
236
  }
@@ -283,9 +306,11 @@
283
306
  @include focus-outline('outline');
284
307
  }
285
308
 
286
- .#{$prefix}--toolbar-search-container-persistent
287
- .#{$prefix}--search-input:hover:not([disabled]) {
288
- background-color: $field-hover;
309
+ @media (any-hover: hover) {
310
+ .#{$prefix}--toolbar-search-container-persistent
311
+ .#{$prefix}--search-input:hover:not([disabled]) {
312
+ background-color: $field-hover;
313
+ }
289
314
  }
290
315
 
291
316
  .#{$prefix}--toolbar-search-container-persistent
@@ -388,15 +413,20 @@
388
413
  }
389
414
 
390
415
  // cancel btn pseudo element
391
- .#{$prefix}--action-list
392
- .#{$prefix}--btn--primary:nth-child(3):hover
393
- + .#{$prefix}--btn--primary.#{$prefix}--batch-summary__cancel::before,
394
416
  .#{$prefix}--action-list
395
417
  .#{$prefix}--btn--primary:nth-child(3):focus
396
418
  + .#{$prefix}--btn--primary.#{$prefix}--batch-summary__cancel::before {
397
419
  opacity: 0;
398
420
  }
399
421
 
422
+ @media (any-hover: hover) {
423
+ .#{$prefix}--action-list
424
+ .#{$prefix}--btn--primary:nth-child(3):hover
425
+ + .#{$prefix}--btn--primary.#{$prefix}--batch-summary__cancel::before {
426
+ opacity: 0;
427
+ }
428
+ }
429
+
400
430
  .#{$prefix}--btn--primary.#{$prefix}--batch-summary__cancel::before {
401
431
  position: absolute;
402
432
  display: block;
@@ -412,9 +442,11 @@
412
442
  transition: opacity $duration-fast-02 motion(standard, productive);
413
443
  }
414
444
 
415
- .#{$prefix}--btn--primary.#{$prefix}--batch-summary__cancel:hover::before {
416
- opacity: 0;
417
- transition: opacity $transition-base $standard-easing;
445
+ @media (any-hover: hover) {
446
+ .#{$prefix}--btn--primary.#{$prefix}--batch-summary__cancel:hover::before {
447
+ opacity: 0;
448
+ transition: opacity $transition-base $standard-easing;
449
+ }
418
450
  }
419
451
 
420
452
  // items selected text
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright IBM Corp. 2016, 2023
2
+ // Copyright IBM Corp. 2016, 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.
@@ -260,13 +260,47 @@
260
260
  .#{$prefix}--table-sort__icon-unsorted {
261
261
  margin-inline: auto convert.to-rem(8px);
262
262
  }
263
+
264
+ .#{$prefix}--table-sort__header--slug,
265
+ .#{$prefix}--table-sort__header--decorator {
266
+ position: relative;
267
+
268
+ .#{$prefix}--table-sort {
269
+ padding-inline-end: $spacing-06;
270
+ }
271
+
272
+ > .#{$prefix}--table-header-label--decorator-inner {
273
+ position: absolute;
274
+ z-index: 1;
275
+ inset-block-start: 50%;
276
+ inset-inline-end: $spacing-03;
277
+ margin-inline-end: 0;
278
+ transform: translateY(-50%);
279
+ }
280
+ }
281
+
263
282
  .#{$prefix}--table-sort__header--ai-label .#{$prefix}--ai-label,
264
- .#{$prefix}--table-sort__header--ai-label .#{$prefix}--slug,
283
+ .#{$prefix}--table-sort__header--ai-label .#{$prefix}--slug {
284
+ display: block;
285
+ margin-inline-end: convert.to-rem(8px);
286
+ }
287
+
288
+ .#{$prefix}--table-sort__header--slug
289
+ .#{$prefix}--table-header-label--decorator-inner,
265
290
  .#{$prefix}--table-sort__header--decorator
266
291
  .#{$prefix}--table-header-label--decorator-inner,
267
292
  .#{$prefix}--table-sort__header--ai-label
268
293
  .#{$prefix}--table-header-label--decorator-inner {
269
294
  display: block;
270
- margin-inline-end: convert.to-rem(8px);
295
+ margin-inline-end: 0;
296
+ }
297
+
298
+ .#{$prefix}--table-sort__header--ai-label
299
+ > .#{$prefix}--table-header-label--decorator-inner
300
+ .#{$prefix}--ai-label,
301
+ .#{$prefix}--table-sort__header--ai-label
302
+ > .#{$prefix}--table-header-label--decorator-inner
303
+ .#{$prefix}--slug {
304
+ margin-inline-end: 0;
271
305
  }
272
306
  }