@carbon/styles 1.113.0 → 1.114.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 (60) hide show
  1. package/css/styles.css +2167 -536
  2. package/css/styles.min.css +1 -1
  3. package/index.scss +2 -1
  4. package/package.json +9 -9
  5. package/scss/__tests__/__snapshots__/border-radius-test.js.snap +24 -0
  6. package/scss/__tests__/__snapshots__/colors-test.js.snap +1 -1
  7. package/scss/__tests__/__snapshots__/config-test.js.snap +1 -1
  8. package/scss/__tests__/__snapshots__/spacing-test.js.snap +1 -1
  9. package/scss/__tests__/__snapshots__/type-test.js.snap +1 -1
  10. package/scss/__tests__/border-radius-test.js +31 -0
  11. package/scss/_border-radius.scss +10 -0
  12. package/scss/components/EditInPlace/_edit-in-place.scss +188 -0
  13. package/scss/components/EditInPlace/_index.scss +11 -0
  14. package/scss/components/FullPageError/_full-page-error.scss +91 -0
  15. package/scss/components/FullPageError/_index.scss +11 -0
  16. package/scss/components/InterstitialScreen/_index.scss +11 -0
  17. package/scss/components/InterstitialScreen/_interstitial-screen.scss +181 -0
  18. package/scss/components/OptionsTile/_index.scss +11 -0
  19. package/scss/components/OptionsTile/_options-tile.scss +240 -0
  20. package/scss/components/__tests__/button-test.js +27 -0
  21. package/scss/components/__tests__/data-table-test.js +43 -1
  22. package/scss/components/__tests__/file-uploader.js +30 -0
  23. package/scss/components/__tests__/overflow-menu-test.js +40 -1
  24. package/scss/components/__tests__/structured-list-test.js +38 -1
  25. package/scss/components/__tests__/tag-test.js +1 -2
  26. package/scss/components/__tests__/text-input-test.js +1 -1
  27. package/scss/components/__tests__/treeview-test.js +60 -1
  28. package/scss/components/_index.scss +9 -1
  29. package/scss/components/big-number/_big-number.scss +164 -0
  30. package/scss/components/big-number/_index.scss +11 -0
  31. package/scss/components/button/_button.scss +0 -1
  32. package/scss/components/card/_card.scss +37 -12
  33. package/scss/components/coachmark/_coachmark-beacon.scss +159 -0
  34. package/scss/components/coachmark/_coachmark-tagline.scss +142 -0
  35. package/scss/components/coachmark/_coachmark.scss +56 -0
  36. package/scss/components/coachmark/_index.scss +17 -0
  37. package/scss/components/data-table/_data-table.scss +140 -110
  38. package/scss/components/data-table/expandable/_data-table-expandable.scss +86 -59
  39. package/scss/components/data-table/skeleton/_data-table-skeleton.scss +10 -8
  40. package/scss/components/date-picker/_date-picker-next.scss +20 -20
  41. package/scss/components/date-picker/_date-picker.scss +5 -3
  42. package/scss/components/date-picker/_flatpickr.scss +46 -28
  43. package/scss/components/file-uploader/_file-uploader.scss +23 -10
  44. package/scss/components/loading/_loading.scss +2 -1
  45. package/scss/components/overflow-menu/_overflow-menu.scss +12 -6
  46. package/scss/components/pagination/_pagination.scss +12 -0
  47. package/scss/components/pagination-nav/_pagination-nav.scss +5 -3
  48. package/scss/components/scroll-gradient/_index.scss +11 -0
  49. package/scss/components/scroll-gradient/_scroll-gradient.scss +107 -0
  50. package/scss/components/slider/_slider.scss +38 -15
  51. package/scss/components/structured-list/_structured-list.scss +27 -20
  52. package/scss/components/tabs/_tabs.scss +11 -0
  53. package/scss/components/tag/_mixins.scss +9 -5
  54. package/scss/components/tag/_tag.scss +44 -26
  55. package/scss/components/text-input/_text-input.scss +11 -7
  56. package/scss/components/treeview/_treeview.scss +52 -33
  57. package/scss/components/ui-shell/side-nav/_side-nav.scss +58 -42
  58. package/scss/components/ui-shell/switcher/_switcher.scss +7 -5
  59. package/scss/components/user-avatar/_index.scss +11 -0
  60. package/scss/components/user-avatar/_user-avatar.scss +160 -0
@@ -0,0 +1,240 @@
1
+ //
2
+ // Copyright IBM Corp. 2021, 2026
3
+ //
4
+ // This source code is licensed under the Apache-2.0 license found in the
5
+ // LICENSE file in the root directory of this source tree.
6
+ //
7
+
8
+ //-----------------------------
9
+ // Options tile
10
+ //-----------------------------
11
+
12
+ @use '../../config' as *;
13
+ @use '../../theme' as *;
14
+ @use '../../type';
15
+ @use '../../spacing' as *;
16
+ @use '../../motion' as *;
17
+ @use '../../utilities/focus-outline';
18
+ @use '../../utilities/visually-hidden';
19
+
20
+ /// Options tile styles
21
+ /// @access public
22
+ /// @group options-tile
23
+ @mixin options-tile {
24
+ .#{$prefix}--options-tile {
25
+ position: relative;
26
+ display: flex;
27
+ justify-content: space-between;
28
+ background-color: $layer;
29
+ border-block-end: 1px solid $border-subtle;
30
+ }
31
+
32
+ .#{$prefix}--options-tile__toggle-container {
33
+ position: absolute;
34
+ display: inline-flex;
35
+ align-items: center;
36
+ justify-content: center;
37
+ inline-size: calc(#{$spacing-05} + 2rem + #{$spacing-05});
38
+
39
+ inset-block: 0;
40
+ inset-inline-end: 0;
41
+ padding-inline-end: $spacing-05;
42
+ padding-inline-start: $spacing-05;
43
+ }
44
+
45
+ .#{$prefix}--options-tile__toggle {
46
+ position: absolute;
47
+ }
48
+
49
+ .#{$prefix}--options-tile__toggle
50
+ .#{$prefix}--toggle-input__label
51
+ .#{$prefix}--toggle__switch {
52
+ margin: 0;
53
+ }
54
+
55
+ .#{$prefix}--options-tile__toggle .#{$prefix}--toggle__label-text {
56
+ @include visually-hidden.visually-hidden;
57
+ }
58
+
59
+ .#{$prefix}--options-tile__details {
60
+ display: inline-flex;
61
+ flex-direction: column;
62
+ flex-grow: 1;
63
+ }
64
+
65
+ .#{$prefix}--options-tile__header,
66
+ .#{$prefix}--options-tile__static-content {
67
+ display: grid;
68
+ box-sizing: border-box;
69
+ align-items: center;
70
+ grid-template-columns: 3rem 1fr 0;
71
+ padding-inline-end: $spacing-05;
72
+ }
73
+
74
+ .#{$prefix}--options-tile__header {
75
+ flex-grow: 1;
76
+ background-color: transparent;
77
+ cursor: pointer;
78
+ inline-size: 100%;
79
+ transition: background-color $duration-fast-01 motion(entrance, productive);
80
+
81
+ &--has-toggle {
82
+ inline-size: calc(100% - (#{$spacing-05} + 2rem + #{$spacing-05}));
83
+ }
84
+ }
85
+
86
+ .#{$prefix}--options-tile__header::-webkit-details-marker {
87
+ display: none;
88
+ }
89
+
90
+ .#{$prefix}--options-tile__header:hover {
91
+ background-color: $background-hover;
92
+ }
93
+
94
+ .#{$prefix}--options-tile__header:has(
95
+ .#{$prefix}--options-tile__toggle-container:hover
96
+ ) {
97
+ background-color: transparent;
98
+ }
99
+
100
+ .#{$prefix}--options-tile__header:focus {
101
+ @include focus-outline.focus-outline('outline');
102
+ }
103
+
104
+ .#{$prefix}--options-tile__heading {
105
+ grid-column: 2;
106
+ }
107
+
108
+ .#{$prefix}--options-tile__title {
109
+ @include type.type-style('productive-heading-01');
110
+
111
+ color: $text-primary;
112
+ }
113
+
114
+ .#{$prefix}--options-tile__summary {
115
+ @include type.type-style('helper-text-01');
116
+
117
+ display: grid;
118
+ block-size: $spacing-05;
119
+ color: $text-secondary;
120
+ margin-block-start: $spacing-02;
121
+ opacity: 1;
122
+ transition-duration: $duration-moderate-01;
123
+ transition-property: height, opacity, margin-top;
124
+ transition-timing-function: motion(standard, productive);
125
+ }
126
+
127
+ .#{$prefix}--options-tile__summary--invalid,
128
+ .#{$prefix}--options-tile__summary--warn,
129
+ .#{$prefix}--options-tile__summary--locked {
130
+ column-gap: $spacing-02;
131
+ grid-template-columns: 1rem 1fr;
132
+ }
133
+
134
+ .#{$prefix}--options-tile__summary--invalid {
135
+ color: $support-error;
136
+ }
137
+
138
+ .#{$prefix}--options-tile__summary--warn {
139
+ color: $text-primary;
140
+ }
141
+
142
+ .#{$prefix}--options-tile__summary--warn svg {
143
+ color: $support-warning;
144
+ }
145
+
146
+ .#{$prefix}--options-tile__summary--warn svg path[fill='none'] {
147
+ fill: #000000;
148
+ }
149
+
150
+ .#{$prefix}--options-tile__summary-text {
151
+ overflow: hidden;
152
+ block-size: max-content;
153
+ padding-inline-end: $spacing-05;
154
+ text-overflow: ellipsis;
155
+ white-space: nowrap;
156
+ }
157
+
158
+ .#{$prefix}--options-tile__chevron {
159
+ display: block;
160
+ justify-self: center;
161
+ transition: transform $duration-fast-02 motion(standard, productive);
162
+ }
163
+
164
+ .#{$prefix}--options-tile__content {
165
+ padding-inline: $spacing-09 $spacing-05;
166
+ }
167
+
168
+ .#{$prefix}--options-tile__content
169
+ > .#{$prefix}--fieldset
170
+ > .#{$prefix}--label:empty {
171
+ display: none;
172
+ }
173
+
174
+ .#{$prefix}--options-tile--closing .#{$prefix}--options-tile__content {
175
+ overflow: hidden;
176
+ }
177
+
178
+ .#{$prefix}--options-tile__summary.#{$prefix}--options-tile__summary--open:not(
179
+ .#{$prefix}--options-tile__summary--closing
180
+ ),
181
+ .#{$prefix}--options-tile__summary--hidden {
182
+ block-size: 0;
183
+ margin-block-start: 0;
184
+ opacity: 0;
185
+ }
186
+
187
+ .#{$prefix}--options-tile__chevron.#{$prefix}--options-tile__chevron--open:not(
188
+ .#{$prefix}--options-tile__chevron--closing
189
+ ) {
190
+ transform: rotate(180deg);
191
+ }
192
+
193
+ .#{$prefix}--options-tile > details[open] .#{$prefix}--options-tile__content {
194
+ padding-block: $spacing-03 $spacing-06;
195
+ }
196
+
197
+ .#{$prefix}--options-tile__locked-text {
198
+ @include type.type-style('body-long-01');
199
+
200
+ display: inline-flex;
201
+ align-items: center;
202
+ color: $text-secondary;
203
+ margin-block-end: $spacing-06;
204
+ }
205
+
206
+ .#{$prefix}--options-tile__locked-text > svg {
207
+ margin-inline-end: $spacing-02;
208
+ }
209
+
210
+ .#{$prefix}--options-tile--lg .#{$prefix}--options-tile__header,
211
+ .#{$prefix}--options-tile--lg .#{$prefix}--options-tile__static-content {
212
+ block-size: 3rem;
213
+ }
214
+
215
+ .#{$prefix}--options-tile--xl .#{$prefix}--options-tile__header,
216
+ .#{$prefix}--options-tile--xl .#{$prefix}--options-tile__static-content {
217
+ block-size: 4rem;
218
+ }
219
+
220
+ .#{$prefix}--options-tile--lg .#{$prefix}--options-tile__toggle {
221
+ // "top" shouldn't be a spacing token as it depends on the toggle size
222
+ inset-block-start: $spacing-05;
223
+ }
224
+
225
+ .#{$prefix}--options-tile--xl .#{$prefix}--options-tile__toggle {
226
+ // "top" shouldn't be a spacing token as it depends on the toggle size
227
+ inset-block-start: $spacing-06;
228
+ }
229
+
230
+ .#{$prefix}--options-tile--lg .#{$prefix}--options-tile__summary {
231
+ margin-block-start: $spacing-01;
232
+ }
233
+
234
+ @media (prefers-reduced-motion: reduce) {
235
+ .#{$prefix}--options-tile__summary,
236
+ .#{$prefix}--options-tile__chevron {
237
+ transition: none;
238
+ }
239
+ }
240
+ }
@@ -9,6 +9,7 @@
9
9
 
10
10
  'use strict';
11
11
 
12
+ const postcss = require('postcss');
12
13
  const { SassRenderer } = require('@carbon/test-utils/scss');
13
14
 
14
15
  const { render } = SassRenderer.create(__dirname);
@@ -69,4 +70,30 @@ describe('scss/components/button', () => {
69
70
  `);
70
71
  expect(unwrap('height')).toBe('2rem');
71
72
  });
73
+
74
+ test('icon-only ghost button does not apply active background on focus', async () => {
75
+ const { result } = await render(`
76
+ @use '../button';
77
+ `);
78
+
79
+ let focusRule;
80
+
81
+ postcss.parse(result.css.toString()).walkRules((rule) => {
82
+ if (rule.selector === '.cds--btn--icon-only.cds--btn--ghost:focus') {
83
+ focusRule = rule;
84
+ }
85
+ });
86
+
87
+ expect(focusRule).toBeDefined();
88
+
89
+ const declarations = focusRule.nodes
90
+ .filter((node) => node.type === 'decl')
91
+ .reduce((styles, node) => {
92
+ styles[node.prop] = node.value;
93
+ return styles;
94
+ }, {});
95
+
96
+ expect(declarations['background-color']).toBeUndefined();
97
+ expect(declarations['box-shadow']).toBeDefined();
98
+ });
72
99
  });
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2018, 2023
2
+ * Copyright IBM Corp. 2018, 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
 
10
10
  'use strict';
11
11
 
12
+ const postcss = require('postcss');
12
13
  const { SassRenderer } = require('@carbon/test-utils/scss');
13
14
 
14
15
  const { render } = SassRenderer.create(__dirname);
@@ -30,6 +31,47 @@ describe('scss/components/data-table', () => {
30
31
  ]
31
32
  `);
32
33
  });
34
+
35
+ test('row hover styles are only applied on devices that support hover', async () => {
36
+ const { result } = await render(`
37
+ @use '../data-table';
38
+ @use '../data-table/expandable';
39
+ @use '../data-table/skeleton';
40
+ `);
41
+ const hoverRules = [];
42
+
43
+ postcss.parse(result.css.toString()).walkRules((rule) => {
44
+ if (
45
+ /(?:^|[\s>+~,])tr(?=[.\[:\s])/.test(rule.selector) &&
46
+ rule.selector.includes(':hover')
47
+ ) {
48
+ hoverRules.push(rule);
49
+ }
50
+ });
51
+
52
+ expect(hoverRules.length).toBeGreaterThan(0);
53
+ expect(
54
+ hoverRules
55
+ .filter((rule) => {
56
+ let parent = rule.parent;
57
+
58
+ while (parent) {
59
+ if (
60
+ parent.type === 'atrule' &&
61
+ parent.name === 'media' &&
62
+ parent.params.includes('(any-hover: hover)')
63
+ ) {
64
+ return false;
65
+ }
66
+
67
+ parent = parent.parent;
68
+ }
69
+
70
+ return true;
71
+ })
72
+ .map((rule) => rule.selector)
73
+ ).toEqual([]);
74
+ });
33
75
  });
34
76
 
35
77
  describe('scss/components/data-table/action', () => {
@@ -9,6 +9,7 @@
9
9
 
10
10
  'use strict';
11
11
 
12
+ const postcss = require('postcss');
12
13
  const { SassRenderer } = require('@carbon/test-utils/scss');
13
14
 
14
15
  const { render } = SassRenderer.create(__dirname);
@@ -24,4 +25,33 @@ describe('scss/components/file-uploader', () => {
24
25
  `);
25
26
  expect(unwrap('mixin')).toBe(true);
26
27
  });
28
+
29
+ test('disabled drop containers use disabled cursor', async () => {
30
+ const { result } = await render(`
31
+ @use '../file-uploader';
32
+ `);
33
+ const disabledDropContainerRules = [];
34
+
35
+ postcss.parse(result.css.toString()).walkRules((rule) => {
36
+ if (
37
+ rule.selector.includes('--file-browse-btn--disabled') &&
38
+ rule.selector.includes('--file__drop-container')
39
+ ) {
40
+ disabledDropContainerRules.push(rule);
41
+ }
42
+ });
43
+
44
+ expect(disabledDropContainerRules).toHaveLength(1);
45
+ expect(disabledDropContainerRules[0].selector).toContain(
46
+ '--file-browse-btn--disabled.cds--file__drop-container'
47
+ );
48
+ expect(disabledDropContainerRules[0].selector).toContain(
49
+ '--file-browse-btn--disabled .cds--file__drop-container'
50
+ );
51
+ expect(
52
+ disabledDropContainerRules[0].nodes.some(
53
+ (node) => node.prop === 'cursor' && node.value === 'no-drop'
54
+ )
55
+ ).toBe(true);
56
+ });
27
57
  });
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2018, 2023
2
+ * Copyright IBM Corp. 2018, 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
 
10
10
  'use strict';
11
11
 
12
+ const postcss = require('postcss');
12
13
  const { SassRenderer } = require('@carbon/test-utils/scss');
13
14
 
14
15
  const { render } = SassRenderer.create(__dirname);
@@ -24,4 +25,42 @@ describe('scss/components/overflow-menu', () => {
24
25
  `);
25
26
  expect(unwrap('mixin')).toBe(true);
26
27
  });
28
+
29
+ test('trigger hover styles are only applied on devices that support hover', async () => {
30
+ const { result } = await render(`
31
+ @use '../overflow-menu';
32
+ `);
33
+ const hoverRules = [];
34
+ const triggerSelector =
35
+ /\.cds--overflow-menu(?=[.:#\s>+~,\[]).*:hover|\.cds--overflow-menu__trigger(?=[.:#\s>+~,\[]).*:hover/;
36
+
37
+ postcss.parse(result.css.toString()).walkRules((rule) => {
38
+ if (triggerSelector.test(rule.selector)) {
39
+ hoverRules.push(rule);
40
+ }
41
+ });
42
+
43
+ expect(hoverRules.length).toBeGreaterThan(0);
44
+ expect(
45
+ hoverRules
46
+ .filter((rule) => {
47
+ let parent = rule.parent;
48
+
49
+ while (parent) {
50
+ if (
51
+ parent.type === 'atrule' &&
52
+ parent.name === 'media' &&
53
+ parent.params.includes('(any-hover: hover)')
54
+ ) {
55
+ return false;
56
+ }
57
+
58
+ parent = parent.parent;
59
+ }
60
+
61
+ return true;
62
+ })
63
+ .map((rule) => rule.selector)
64
+ ).toEqual([]);
65
+ });
27
66
  });
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2018, 2023
2
+ * Copyright IBM Corp. 2018, 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
 
10
10
  'use strict';
11
11
 
12
+ const postcss = require('postcss');
12
13
  const { SassRenderer } = require('@carbon/test-utils/scss');
13
14
 
14
15
  const { render } = SassRenderer.create(__dirname);
@@ -24,4 +25,40 @@ describe('scss/components/structured-list', () => {
24
25
  `);
25
26
  expect(unwrap('mixin')).toBe(true);
26
27
  });
28
+
29
+ test('row hover styles are only applied on devices that support hover', async () => {
30
+ const { result } = await render(`
31
+ @use '../structured-list';
32
+ `);
33
+ const hoverRules = [];
34
+
35
+ postcss.parse(result.css.toString()).walkRules((rule) => {
36
+ if (rule.selector.includes('.cds--structured-list-row:hover')) {
37
+ hoverRules.push(rule);
38
+ }
39
+ });
40
+
41
+ expect(hoverRules.length).toBeGreaterThan(0);
42
+ expect(
43
+ hoverRules
44
+ .filter((rule) => {
45
+ let parent = rule.parent;
46
+
47
+ while (parent) {
48
+ if (
49
+ parent.type === 'atrule' &&
50
+ parent.name === 'media' &&
51
+ parent.params.includes('(any-hover: hover)')
52
+ ) {
53
+ return false;
54
+ }
55
+
56
+ parent = parent.parent;
57
+ }
58
+
59
+ return true;
60
+ })
61
+ .map((rule) => rule.selector)
62
+ ).toEqual([]);
63
+ });
27
64
  });
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2018, 2023
2
+ * Copyright IBM Corp. 2018, 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.
@@ -8,7 +8,6 @@
8
8
  */
9
9
 
10
10
  'use strict';
11
-
12
11
  const { SassRenderer } = require('@carbon/test-utils/scss');
13
12
 
14
13
  const { render } = SassRenderer.create(__dirname);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2018, 2023
2
+ * Copyright IBM Corp. 2018, 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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2018, 2023
2
+ * Copyright IBM Corp. 2018, 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
 
10
10
  'use strict';
11
11
 
12
+ const postcss = require('postcss');
12
13
  const { SassRenderer } = require('@carbon/test-utils/scss');
13
14
 
14
15
  const { render } = SassRenderer.create(__dirname);
@@ -22,4 +23,62 @@ describe('scss/components/treeview', () => {
22
23
  `);
23
24
  expect(unwrap('mixin')).toBe(true);
24
25
  });
26
+
27
+ test('hover styles are only applied on devices that support hover', async () => {
28
+ const { result } = await render(`
29
+ @use '../treeview';
30
+ `);
31
+ const hoverRules = [];
32
+
33
+ postcss.parse(result.css.toString()).walkRules((rule) => {
34
+ if (
35
+ rule.selector.includes('.cds--tree') &&
36
+ rule.selector.includes(':hover')
37
+ ) {
38
+ hoverRules.push(rule);
39
+ }
40
+ });
41
+
42
+ expect(hoverRules.length).toBeGreaterThan(0);
43
+ expect(
44
+ hoverRules.some((rule) =>
45
+ rule.selector.includes('.cds--tree-node__label:hover')
46
+ )
47
+ ).toBe(true);
48
+ expect(
49
+ hoverRules.some(
50
+ (rule) =>
51
+ rule.selector.includes('.cds--tree-node--disabled') &&
52
+ rule.selector.includes('.cds--tree-node__label:hover')
53
+ )
54
+ ).toBe(true);
55
+ expect(
56
+ hoverRules.some(
57
+ (rule) =>
58
+ rule.selector.includes('.cds--tree-node--selected') &&
59
+ rule.selector.includes('.cds--tree-node__label:hover')
60
+ )
61
+ ).toBe(true);
62
+ expect(
63
+ hoverRules
64
+ .filter((rule) => {
65
+ let parent = rule.parent;
66
+
67
+ while (parent) {
68
+ if (
69
+ parent.type === 'atrule' &&
70
+ parent.name === 'media' &&
71
+ parent.params.includes('(any-hover: hover)')
72
+ ) {
73
+ return false;
74
+ }
75
+
76
+ parent = parent.parent;
77
+ }
78
+
79
+ return true;
80
+ })
81
+ .map((rule) => rule.selector)
82
+ ).toEqual([]);
83
+ });
25
84
  });
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright IBM Corp. 2018, 2025
2
+ // Copyright IBM Corp. 2018, 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.
@@ -10,9 +10,11 @@
10
10
  @use 'ai-label';
11
11
  @use 'aspect-ratio';
12
12
  @use 'badge-indicator';
13
+ @use 'big-number';
13
14
  @use 'breadcrumb';
14
15
  @use 'button';
15
16
  @use 'card';
17
+ @use 'coachmark';
16
18
  @use 'chat-button';
17
19
  @use 'checkbox';
18
20
  @use 'code-snippet';
@@ -42,8 +44,10 @@
42
44
  @use 'fluid-text-input';
43
45
  @use 'fluid-time-picker';
44
46
  @use 'form';
47
+ @use 'FullPageError';
45
48
  @use 'icon-indicator';
46
49
  @use 'inline-loading';
50
+ @use 'InterstitialScreen';
47
51
  @use 'link';
48
52
  @use 'list';
49
53
  @use 'list-box';
@@ -55,6 +59,7 @@
55
59
  @use 'notification';
56
60
  @use 'number-input';
57
61
  @use 'overflow-menu';
62
+ @use 'OptionsTile';
58
63
  @use 'page-header';
59
64
  @use 'pagination';
60
65
  @use 'pagination-nav';
@@ -63,6 +68,7 @@
63
68
  @use 'progress-indicator';
64
69
  @use 'radio-button';
65
70
  @use 'resizer';
71
+ @use 'scroll-gradient';
66
72
  @use 'side-panel';
67
73
  @use 'search';
68
74
  @use 'select';
@@ -84,3 +90,5 @@
84
90
  @use 'treeview';
85
91
  @use 'truncated-text';
86
92
  @use 'ui-shell';
93
+ @use 'EditInPlace';
94
+ @use 'user-avatar';