@carbon/styles 1.114.0 → 1.115.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 (47) hide show
  1. package/css/styles.css +3356 -1547
  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/card/_card.scss +2 -2
  12. package/scss/components/checkbox/_checkbox.scss +69 -26
  13. package/scss/components/combo-box/_combo-box.scss +32 -21
  14. package/scss/components/data-table/action/_data-table-action.scss +54 -22
  15. package/scss/components/data-table/sort/_data-table-sort.scss +37 -3
  16. package/scss/components/date-picker/_date-picker-next.scss +60 -0
  17. package/scss/components/date-picker/_date-picker.scss +73 -0
  18. package/scss/components/date-picker/_flatpickr.scss +10 -0
  19. package/scss/components/dropdown/_dropdown.scss +26 -4
  20. package/scss/components/fluid-date-picker/_fluid-date-picker.scss +95 -11
  21. package/scss/components/fluid-list-box/_fluid-list-box.scss +102 -23
  22. package/scss/components/fluid-number-input/_fluid-number-input.scss +204 -24
  23. package/scss/components/fluid-search/_fluid-search.scss +7 -4
  24. package/scss/components/fluid-select/_fluid-select.scss +31 -2
  25. package/scss/components/fluid-text-input/_fluid-text-input.scss +34 -4
  26. package/scss/components/form/_form.scss +1 -14
  27. package/scss/components/guidebanner/_guidebanner.scss +322 -0
  28. package/scss/components/guidebanner/_index.scss +11 -0
  29. package/scss/components/list-box/_list-box.scss +116 -8
  30. package/scss/components/menu/_menu.scss +18 -1
  31. package/scss/components/multiselect/_multiselect.scss +82 -47
  32. package/scss/components/notifications-panel/_index.scss +11 -0
  33. package/scss/components/notifications-panel/_notifications-panel.scss +459 -0
  34. package/scss/components/number-input/_number-input.scss +94 -8
  35. package/scss/components/radio-button/_radio-button.scss +93 -27
  36. package/scss/components/search/_search.scss +35 -8
  37. package/scss/components/select/_select.scss +65 -5
  38. package/scss/components/tabs/_tabs.scss +2 -1
  39. package/scss/components/tag/_mixins.scss +19 -1
  40. package/scss/components/tag/_tag.scss +46 -16
  41. package/scss/components/text-input/_text-input.scss +53 -121
  42. package/scss/components/tile/_tile.scss +131 -13
  43. package/scss/utilities/_skeleton.scss +7 -1
  44. /package/scss/components/{EditInPlace → edit-in-place}/_edit-in-place.scss +0 -0
  45. /package/scss/components/{EditInPlace → edit-in-place}/_index.scss +0 -0
  46. /package/scss/components/{OptionsTile → options-tile}/_index.scss +0 -0
  47. /package/scss/components/{OptionsTile → options-tile}/_options-tile.scss +0 -0
@@ -0,0 +1,322 @@
1
+ //
2
+ // Copyright IBM Corp. 2023, 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
+ // Standard imports.
9
+ @use '../../config' as *;
10
+ @use '../../colors' as *;
11
+ @use '../../motion' as *;
12
+ @use '../../spacing' as *;
13
+ @use '../../theme' as *;
14
+ @use '../../themes';
15
+ @use '../../type' as *;
16
+ @use '../../utilities';
17
+ @use '@carbon/layout/scss/convert' as *;
18
+
19
+ // The block part of our conventional BEM class names (blockClass__E--M).
20
+ $block-class: #{$prefix}--guidebanner;
21
+
22
+ @mixin when-collapsed($selector: '&') {
23
+ .#{$prefix}--guidebanner__collapsible-collapsed #{$selector} {
24
+ @content;
25
+ }
26
+ }
27
+
28
+ $horizontal-margin: to-rem(52px);
29
+
30
+ // Guidebanner-specific colors.
31
+ $purple-1: #9b63ff;
32
+ $purple-2: #7f3ae7;
33
+ $purple-3: #7433e3;
34
+
35
+ @mixin guidebanner {
36
+ // ---------------------------------------------------------------------------
37
+ // Scroll container styles (inlined from Carousel; previously a separate @use)
38
+ // ---------------------------------------------------------------------------
39
+
40
+ .#{$prefix}--guidebanner__carousel {
41
+ position: relative;
42
+
43
+ &:focus {
44
+ outline: none;
45
+ }
46
+ }
47
+
48
+ .#{$prefix}--guidebanner__carousel-elements-container {
49
+ position: relative;
50
+ overflow: hidden;
51
+ }
52
+
53
+ .#{$prefix}--guidebanner__carousel-elements-container--scrolled,
54
+ .#{$prefix}--guidebanner__carousel-elements-container--scroll-max {
55
+ position: absolute;
56
+ z-index: 1;
57
+ inline-size: $spacing-07;
58
+ inset-block: 0;
59
+ pointer-events: none;
60
+ }
61
+
62
+ .#{$prefix}--guidebanner__carousel-elements-container--scrolled {
63
+ inset-inline-start: 0;
64
+ }
65
+
66
+ .#{$prefix}--guidebanner__carousel-elements-container--scroll-max {
67
+ inset-inline-end: 0;
68
+ }
69
+
70
+ .#{$prefix}--guidebanner__carousel-elements {
71
+ display: flex;
72
+ overflow: scroll;
73
+ -ms-overflow-style: none;
74
+ scroll-behavior: smooth;
75
+ scroll-snap-type: x mandatory;
76
+ scrollbar-width: none;
77
+ -webkit-touch-callout: none;
78
+ user-select: none;
79
+
80
+ &:focus {
81
+ @include utilities.focus-outline('outline');
82
+ }
83
+
84
+ @media (prefers-reduced-motion) {
85
+ scroll-behavior: auto;
86
+ }
87
+ }
88
+
89
+ .#{$prefix}--guidebanner__carousel-elements::-webkit-scrollbar {
90
+ display: none;
91
+ }
92
+
93
+ // ---------------------------------------------------------------------------
94
+ // Guidebanner component styles
95
+ // ---------------------------------------------------------------------------
96
+
97
+ .#{$block-class} {
98
+ // Due to the Guidebanner's dark background,
99
+ // apply dark theme by default for all elements:
100
+ // i.e. light text, icons, tooltips, etc.
101
+ @include theme(themes.$g100, true);
102
+
103
+ position: relative;
104
+ background: linear-gradient(90deg, $blue-90 0%, $purple-70 100%);
105
+ background-color: $blue-90;
106
+ }
107
+
108
+ .#{$block-class}__icon-idea {
109
+ position: absolute;
110
+ color: $gray-10;
111
+ inset-block-start: $spacing-05;
112
+ inset-inline-start: $spacing-05;
113
+ }
114
+
115
+ .#{$block-class}__title {
116
+ @include type-style('heading-compact-02');
117
+
118
+ padding: $spacing-05 to-rem(175px) 0 $horizontal-margin;
119
+ color: $gray-10;
120
+ }
121
+
122
+ .#{$block-class}__close-button {
123
+ position: absolute;
124
+ inset-block-start: 0;
125
+ inset-inline-end: 0;
126
+ }
127
+
128
+ .#{$block-class}__close-button button {
129
+ block-size: $spacing-07;
130
+ inline-size: $spacing-07;
131
+ min-block-size: $spacing-07;
132
+ padding-block-start: 6px;
133
+
134
+ &:active,
135
+ &:hover {
136
+ background-color: $purple-3;
137
+ }
138
+
139
+ path {
140
+ fill: $white-0;
141
+ }
142
+ }
143
+
144
+ // Specify carousel look and feel.
145
+ .#{$block-class}__carousel {
146
+ padding: 0 0 $spacing-05;
147
+ color: $gray-10;
148
+
149
+ @include when-collapsed() {
150
+ margin-block-end: 0;
151
+ }
152
+ }
153
+
154
+ // All carousel items are 400px wide, except the last one (see below).
155
+ .#{$block-class}__carousel .#{$block-class}__item .#{$block-class}__element {
156
+ display: flex;
157
+ flex-flow: column;
158
+ flex-shrink: 0;
159
+ margin: $spacing-05 0 0;
160
+ // 25rem
161
+ inline-size: to-rem(400px);
162
+ // 32rem
163
+ max-block-size: to-rem(512px);
164
+ opacity: 1;
165
+ padding-inline-start: $horizontal-margin;
166
+ scroll-snap-align: start;
167
+ transition:
168
+ max-height 50ms motion(exit, productive),
169
+ margin-top 50ms motion(exit, productive),
170
+ opacity 300ms motion(exit, productive);
171
+
172
+ @include when-collapsed() {
173
+ margin-block-start: 0;
174
+ max-block-size: $spacing-03;
175
+ opacity: 0;
176
+ }
177
+ }
178
+
179
+ // The last carousel item is wider to provide more space at the right edge.
180
+ .#{$block-class}__carousel
181
+ .#{$block-class}__item:last-child
182
+ .#{$block-class}__element {
183
+ // 28rem
184
+ inline-size: to-rem(448px);
185
+ padding-inline-end: $horizontal-margin;
186
+ }
187
+
188
+ .#{$block-class}__carousel
189
+ .#{$block-class}__item
190
+ .#{$block-class}__element-title {
191
+ @include type-style('heading-compact-01');
192
+
193
+ margin: $spacing-05 0 0;
194
+ }
195
+
196
+ .#{$block-class}__carousel .#{$block-class}__element-content {
197
+ @include type-style('body-01');
198
+
199
+ margin-block-end: $spacing-05;
200
+ }
201
+
202
+ // Button with crossroads icon
203
+ .#{$block-class}__carousel .#{$prefix}--btn--tertiary {
204
+ border-color: $white-0;
205
+ color: $white-0;
206
+
207
+ &:active,
208
+ &:hover {
209
+ border-color: $white-0;
210
+ background-color: $white-0;
211
+ color: $gray-100;
212
+ }
213
+
214
+ // The "render icon" CSS — position icon to the right of content.
215
+ svg {
216
+ position: absolute;
217
+ flex-shrink: 0;
218
+ block-size: 1rem;
219
+ inline-size: 1rem;
220
+ inset-inline-end: $spacing-05;
221
+ }
222
+ }
223
+
224
+ .#{$block-class}__carousel .#{$prefix}--btn--ghost {
225
+ color: $blue-30;
226
+ margin-inline-start: calc(-1 * $spacing-05);
227
+
228
+ &:active,
229
+ &:hover {
230
+ background-color: $purple-2;
231
+ color: $gray-10;
232
+ }
233
+ }
234
+
235
+ .#{$block-class}__carousel .#{$block-class}__element-link {
236
+ color: $blue-30;
237
+
238
+ &:visited {
239
+ color: $blue-30;
240
+ }
241
+
242
+ &:active,
243
+ &:hover {
244
+ color: $blue-20;
245
+ }
246
+ }
247
+
248
+ .#{$block-class}__navigation {
249
+ display: flex;
250
+ border-block-start: to-rem(1px) solid $purple-60;
251
+
252
+ @include when-collapsed() {
253
+ border-block-start: none;
254
+ }
255
+ }
256
+
257
+ .#{$block-class}__navigation .#{$block-class}__toggle-button {
258
+ color: $blue-30;
259
+ margin-inline-start: calc($horizontal-margin - to-rem(18px));
260
+
261
+ &:active,
262
+ &:hover {
263
+ background-color: $purple-3;
264
+ color: $gray-10;
265
+ }
266
+ }
267
+
268
+ // Push navigation buttons to the right.
269
+ .#{$block-class}__navigation .#{$block-class}__back-button {
270
+ margin-inline-start: auto;
271
+ }
272
+
273
+ // Hide navigation buttons when collapsed.
274
+ .#{$block-class}__navigation .#{$block-class}__back-button,
275
+ .#{$block-class}__navigation .#{$block-class}__next-button {
276
+ @include when-collapsed() {
277
+ display: none;
278
+ }
279
+ }
280
+
281
+ .#{$block-class}__navigation .#{$block-class}__back-button button,
282
+ .#{$block-class}__navigation .#{$block-class}__next-button button {
283
+ &:active,
284
+ &:hover {
285
+ background-color: $purple-3;
286
+ }
287
+
288
+ path {
289
+ fill: $white-0;
290
+ }
291
+
292
+ &[disabled] path {
293
+ fill: $purple-1;
294
+ }
295
+ }
296
+
297
+ // Exception handling.
298
+ // If "withLeftGutter", insert 1 rem of extra space on the left.
299
+ .#{$block-class}__with-left-gutter .#{$block-class}__icon-idea {
300
+ inset-inline-start: $spacing-07;
301
+ }
302
+
303
+ .#{$block-class}__with-left-gutter .#{$block-class}__title {
304
+ padding-inline-start: calc($horizontal-margin + $spacing-05);
305
+ }
306
+
307
+ .#{$block-class}__with-left-gutter .#{$block-class}__navigation {
308
+ padding-inline-start: $spacing-05;
309
+ }
310
+
311
+ // Override carousel settings — insert 1 rem of extra space on the left.
312
+ .#{$block-class}__with-left-gutter
313
+ .#{$prefix}--guidebanner__carousel-elements-container {
314
+ padding-inline-start: $spacing-05;
315
+ }
316
+
317
+ // Expand "fade" to cover more of the left side of the carousel.
318
+ .#{$block-class}__with-left-gutter
319
+ .#{$prefix}--guidebanner__carousel-elements-container--scrolled {
320
+ inline-size: $spacing-10;
321
+ }
322
+ }
@@ -0,0 +1,11 @@
1
+ //
2
+ // Copyright IBM Corp. 2023, 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
+ @forward 'guidebanner';
9
+ @use 'guidebanner';
10
+
11
+ @include guidebanner.guidebanner;
@@ -9,6 +9,8 @@
9
9
  @use '../text-input';
10
10
  @use '../tag';
11
11
  @use '../tag/mixins' as *;
12
+ @use '../../border-radius' as *;
13
+ @use '../../feature-flags' as *;
12
14
  @use '../../config' as *;
13
15
  @use '../../colors' as *;
14
16
  @use '../../theme' as *;
@@ -99,22 +101,65 @@ $list-box-menu-width: convert.to-rem(300px);
99
101
  &:hover {
100
102
  background-color: $field-hover;
101
103
  }
104
+
105
+ @if enabled('enable-v12-release') {
106
+ border: 1px solid transparent;
107
+ border-radius: $border-radius-04;
108
+ transition: background $duration-fast-01 motion(standard, productive);
109
+
110
+ &:not(
111
+ .#{$prefix}--list-box--inline,
112
+ .#{$prefix}--dropdown--inline,
113
+ .#{$prefix}--multi-select--inline,
114
+ .#{$prefix}--list-box--disabled,
115
+ .#{$prefix}--dropdown--disabled,
116
+ .#{$prefix}--dropdown--readonly,
117
+ .#{$prefix}--combo-box--readonly,
118
+ .#{$prefix}--multi-select--readonly
119
+ ) {
120
+ // (gray-20 → gray-50)
121
+ background:
122
+ linear-gradient($field, $field) padding-box,
123
+ linear-gradient(
124
+ to bottom,
125
+ $border-subtle calc(100% - 4px),
126
+ $border-strong 100%
127
+ )
128
+ border-box;
129
+ }
130
+ }
131
+ }
132
+
133
+ @if enabled('enable-v12-release') {
134
+ .#{$prefix}--combo-box--readonly,
135
+ .#{$prefix}--multi-select--readonly,
136
+ .#{$prefix}--dropdown--readonly {
137
+ border-radius: $border-radius-00;
138
+ border-block-end-color: $border-subtle;
139
+ }
140
+
141
+ .#{$prefix}--combo-box--readonly .#{$prefix}--text-input,
142
+ .#{$prefix}--multi-select--readonly .#{$prefix}--text-input {
143
+ border-radius: $border-radius-00;
144
+ }
102
145
  }
103
146
 
104
147
  .#{$prefix}--multi-select.#{$prefix}--multi-select--readonly.#{$prefix}--list-box {
105
148
  cursor: default;
106
149
  }
107
150
 
108
- .#{$prefix}--list-box--expanded {
109
- border-block-end-color: $border-subtle-01;
110
- }
151
+ @if not enabled('enable-v12-release') {
152
+ .#{$prefix}--list-box--expanded {
153
+ border-block-end-color: $border-subtle-01;
154
+ }
111
155
 
112
- .#{$prefix}--layer-two .#{$prefix}--list-box--expanded {
113
- border-block-end-color: $border-subtle-02;
114
- }
156
+ .#{$prefix}--layer-two .#{$prefix}--list-box--expanded {
157
+ border-block-end-color: $border-subtle-02;
158
+ }
115
159
 
116
- .#{$prefix}--layer-three .#{$prefix}--list-box--expanded {
117
- border-block-end-color: $border-subtle-03;
160
+ .#{$prefix}--layer-three .#{$prefix}--list-box--expanded {
161
+ border-block-end-color: $border-subtle-03;
162
+ }
118
163
  }
119
164
 
120
165
  .#{$prefix}--list-box--expanded:hover {
@@ -317,12 +362,29 @@ $list-box-menu-width: convert.to-rem(300px);
317
362
  text-overflow: ellipsis;
318
363
  vertical-align: top;
319
364
  white-space: nowrap;
365
+
366
+ @if enabled('enable-v12-release') {
367
+ block-size: 100%;
368
+ }
320
369
  }
321
370
 
322
371
  .#{$prefix}--list-box__field:focus {
323
372
  @include focus-outline('outline');
324
373
  }
325
374
 
375
+ @if enabled('enable-v12-release') {
376
+ // v12: focus outline needs to go on the list-box component itself, instead
377
+ // of the text-input
378
+ .#{$prefix}--list-box
379
+ .#{$prefix}--combo-box--input--focus.#{$prefix}--text-input {
380
+ outline: transparent;
381
+ }
382
+
383
+ .#{$prefix}--list-box:has(.#{$prefix}--combo-box--input--focus) {
384
+ @include focus-outline('outline');
385
+ }
386
+ }
387
+
326
388
  .#{$prefix}--list-box__field[disabled] {
327
389
  color: $text-disabled;
328
390
  outline: none;
@@ -519,6 +581,14 @@ $list-box-menu-width: convert.to-rem(300px);
519
581
  overflow-y: auto;
520
582
  transition: max-height $duration-fast-02 motion(standard, productive);
521
583
 
584
+ @if enabled('enable-v12-release') {
585
+ box-sizing: border-box;
586
+ padding: $spacing-02;
587
+ border: 1px solid $border-subtle;
588
+ border-radius: $border-radius-08;
589
+ margin-block-start: $spacing-02;
590
+ }
591
+
522
592
  &:focus {
523
593
  // remove default browser focus in firefox
524
594
  @include focus-outline('border');
@@ -562,6 +632,10 @@ $list-box-menu-width: convert.to-rem(300px);
562
632
  &:active {
563
633
  background-color: $layer-selected;
564
634
  }
635
+
636
+ @if enabled('enable-v12-release') {
637
+ border-radius: $border-radius-04;
638
+ }
565
639
  }
566
640
 
567
641
  // V11: Possibly deprecate
@@ -667,6 +741,12 @@ $list-box-menu-width: convert.to-rem(300px);
667
741
  margin: 0;
668
742
  }
669
743
 
744
+ @if enabled('enable-v12-release') {
745
+ border-radius: $border-radius-04;
746
+ border-block-end: none;
747
+ border-block-start: none;
748
+ }
749
+
670
750
  &:hover {
671
751
  border-color: transparent;
672
752
  color: $text-primary;
@@ -836,6 +916,12 @@ $list-box-menu-width: convert.to-rem(300px);
836
916
  background-color: inherit;
837
917
  min-inline-size: 0;
838
918
  text-overflow: ellipsis;
919
+
920
+ // prevent nested borders
921
+ @if enabled('enable-v12-release') {
922
+ border: 0;
923
+ background: none;
924
+ }
839
925
  }
840
926
 
841
927
  // AILabel styles
@@ -933,6 +1019,28 @@ $list-box-menu-width: convert.to-rem(300px);
933
1019
  :has(.#{$prefix}--slug--revert)
934
1020
  ) {
935
1021
  @include ai-gradient;
1022
+
1023
+ @if enabled('enable-v12-release') {
1024
+ // Reset the bottom-edge color override from @include ai-gradient so the
1025
+ // border-box gradient layer controls all four sides uniformly.
1026
+ background:
1027
+ linear-gradient(
1028
+ 0deg,
1029
+ $ai-aura-start-sm 0%,
1030
+ 15%,
1031
+ $ai-aura-end 50%,
1032
+ transparent 100%
1033
+ )
1034
+ padding-box,
1035
+ linear-gradient($field, $field) padding-box,
1036
+ // (ai-border-start → ai-border-end), mirroring the default v12 border gradient
1037
+ linear-gradient(
1038
+ to bottom,
1039
+ $ai-border-start calc(100% - 4px),
1040
+ $ai-border-strong 100%
1041
+ )
1042
+ border-box;
1043
+ }
936
1044
  }
937
1045
 
938
1046
  .#{$prefix}--list-box__wrapper--decorator
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright IBM Corp. 2020
2
+ // Copyright IBM Corp. 2020, 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.
@@ -17,6 +17,8 @@
17
17
  @use '../../utilities/z-index' as *;
18
18
  @use '../../utilities/convert';
19
19
  @use '../../utilities/component-reset';
20
+ @use '../../border-radius' as *;
21
+ @use '../../feature-flags' as *;
20
22
 
21
23
  /// Menu styles
22
24
  /// @access public
@@ -37,6 +39,11 @@
37
39
  opacity: 0;
38
40
  overflow-y: auto;
39
41
  visibility: hidden;
42
+
43
+ @if enabled('enable-v12-release') {
44
+ padding: $spacing-02;
45
+ border-radius: $border-radius-08;
46
+ }
40
47
  }
41
48
 
42
49
  .#{$prefix}--menu--border {
@@ -86,6 +93,11 @@
86
93
  &:focus {
87
94
  @include focus-outline('outline');
88
95
  }
96
+
97
+ @if enabled('enable-v12-release') {
98
+ border-radius: $border-radius-04;
99
+ padding-inline: $spacing-04;
100
+ }
89
101
  }
90
102
 
91
103
  .#{$prefix}--menu-item:hover {
@@ -218,5 +230,10 @@
218
230
  block-size: convert.to-rem(1px);
219
231
  inline-size: 100%;
220
232
  margin-block: $spacing-02;
233
+
234
+ @if enabled('enable-v12-release') {
235
+ inline-size: calc(100% + #{$spacing-02 * 2});
236
+ margin-inline: -$spacing-02;
237
+ }
221
238
  }
222
239
  }