@tui/design-system 1.5.0 → 1.7.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 (40) hide show
  1. package/CHANGELOG.md +277 -1
  2. package/dist/themes/crystalski/index.css +12 -2
  3. package/dist/themes/crystalski/index.css.map +1 -1
  4. package/dist/themes/firstchoice/index.css +12 -2
  5. package/dist/themes/firstchoice/index.css.map +1 -1
  6. package/dist/themes/tui/index.css +14 -4
  7. package/dist/themes/tui/index.css.map +1 -1
  8. package/package.json +12 -12
  9. package/scss/lib/accordion/_mixins.scss +1 -3
  10. package/scss/lib/active-tag/_mixins.scss +16 -4
  11. package/scss/lib/cards/promotion/_index.scss +3 -0
  12. package/scss/lib/cards/promotion/_mixins.scss +275 -0
  13. package/scss/lib/cards/promotion/_variables.scss +14 -0
  14. package/scss/lib/cards/selectable/_mixins.scss +1 -5
  15. package/scss/lib/cards/selectable/_variables.scss +2 -1
  16. package/scss/lib/flyout-dropdown/_variables.scss +0 -1
  17. package/scss/lib/forms/datepicker/_mixins.scss +5 -0
  18. package/scss/lib/forms/input-radio-scroll/_mixins.scss +6 -1
  19. package/scss/lib/forms/input-switch/_mixins.scss +12 -6
  20. package/scss/lib/grid/_column.scss +7 -0
  21. package/scss/lib/grid/_mixins.scss +4 -0
  22. package/scss/lib/list/_mixins.scss +91 -72
  23. package/scss/lib/list/_variables.scss +1 -0
  24. package/scss/lib/modal/_variables.scss +1 -4
  25. package/scss/lib/skeleton/_variables.scss +2 -6
  26. package/scss/lib/tabs/_mixins.scss +117 -60
  27. package/scss/lib/tabs/anchor/_mixins.scss +36 -0
  28. package/scss/lib/tabs/in-page/_mixins.scss +82 -29
  29. package/scss/lib/tooltip/_mixins.scss +2 -0
  30. package/scss/mixins.scss +1 -0
  31. package/scss/themes/crystalski/_overrides.scss +10 -0
  32. package/scss/themes/crystalski/index.scss +3 -0
  33. package/scss/themes/crystalski/theme.json +7 -0
  34. package/scss/themes/firstchoice/_overrides.scss +10 -0
  35. package/scss/themes/firstchoice/index.scss +3 -0
  36. package/scss/themes/firstchoice/theme.json +7 -0
  37. package/scss/themes/tui/index.scss +3 -0
  38. package/scss/variables/base-theme.json +64 -6
  39. package/scss/variables.scss +1 -0
  40. package/types/components.ts +33 -9
@@ -1,39 +1,44 @@
1
1
  // Shared tab styles used by in-page and tabs-anchor.
2
2
  // $prefix: the BEM block name, e.g. 'uilib-tabs-in-page' or 'uilib-tabs-anchor'
3
+
4
+ @mixin uilib-tablist-base() {
5
+ --left-fade: 0rem;
6
+ --right-fade: 0rem;
7
+
8
+ $fade-mask: linear-gradient(to right, transparent 0, black var(--left-fade), black calc(100% - var(--right-fade)), transparent 100%);
9
+
10
+ scroll-padding-inline: var(--left-fade) var(--right-fade);
11
+
12
+ margin: calc(-1 * var(--uilib-spacing-200));
13
+ padding: var(--uilib-spacing-200);
14
+
15
+ overflow-x: auto;
16
+ scroll-behavior: smooth;
17
+ scrollbar-width: none;
18
+ -webkit-mask-image: #{$fade-mask};
19
+ mask-image: #{$fade-mask};
20
+ mask-origin: padding-box;
21
+ mask-clip: padding-box;
22
+ }
23
+
3
24
  @mixin uilib-tab-base($prefix) {
4
25
  position: relative;
5
26
 
6
- display: flex;
7
- flex-shrink: 0;
8
- gap: var(--uilib-spacing-200);
9
- align-items: center;
10
-
11
27
  max-width: 12.5rem;
12
28
  padding: var(--uilib-spacing-300) var(--uilib-spacing-500);
13
29
 
14
30
  color: var(--#{$prefix}-text-color);
15
31
  font-weight: var(--uilib-font-weight-semibold);
16
32
  font-family: var(--uilib-font-family-lead);
33
+ white-space: normal;
17
34
  text-decoration: none;
18
35
 
19
- border-radius: var(--uilib-border-radius-200);
20
-
21
36
  background: transparent;
22
37
 
23
38
  cursor: pointer;
24
39
  }
25
40
 
26
41
  @mixin uilib-tabs-shared($prefix) {
27
- .#{$prefix}__scroll-button--left .uilib-icon {
28
- -webkit-mask-image: var(--#{$prefix}-scroll-left-icon);
29
- mask-image: var(--#{$prefix}-scroll-left-icon);
30
- }
31
-
32
- .#{$prefix}__scroll-button--right .uilib-icon {
33
- -webkit-mask-image: var(--#{$prefix}-scroll-right-icon);
34
- mask-image: var(--#{$prefix}-scroll-right-icon);
35
- }
36
-
37
42
  .#{$prefix} {
38
43
  // .uilib-icon-button selector is chained to raise specificity above uilib-icon-button's
39
44
  // `display: inline-flex`, which appears later due to alphabetical @include sorting in storybook
@@ -42,6 +47,16 @@
42
47
  display: none;
43
48
  }
44
49
 
50
+ &__scroll-button--left .uilib-icon {
51
+ -webkit-mask-image: var(--#{$prefix}-scroll-left-icon);
52
+ mask-image: var(--#{$prefix}-scroll-left-icon);
53
+ }
54
+
55
+ &__scroll-button--right .uilib-icon {
56
+ -webkit-mask-image: var(--#{$prefix}-scroll-right-icon);
57
+ mask-image: var(--#{$prefix}-scroll-right-icon);
58
+ }
59
+
45
60
  &__scroll-wrapper {
46
61
  position: relative;
47
62
  }
@@ -71,55 +86,19 @@
71
86
  right: 0;
72
87
  }
73
88
 
74
- &__tablist {
75
- --left-fade: 0;
76
- --right-fade: 0;
77
-
78
- $fade-mask: linear-gradient(to right, transparent 0, black var(--left-fade), black calc(100% - var(--right-fade)), transparent 100%);
79
-
80
- scroll-padding-inline: var(--left-fade) var(--right-fade);
81
-
82
- display: flex;
83
- flex-direction: row;
84
- align-items: end;
85
-
86
- margin: calc(-1 * var(--uilib-spacing-200));
87
- padding: var(--uilib-spacing-200);
88
-
89
- overflow-x: auto;
90
- scroll-behavior: smooth;
91
- scrollbar-width: none;
92
- -webkit-mask-image: #{$fade-mask};
93
- mask-image: #{$fade-mask};
94
- mask-origin: padding-box;
95
- mask-clip: padding-box;
96
- }
97
-
98
- &__scroll-wrapper:has(&__scroll-button--left:not(.#{$prefix}--hidden)) &__tablist {
99
- --left-fade: var(--#{$prefix}-scroll-fade-width);
100
- }
101
-
102
- &__scroll-wrapper:has(&__scroll-button--right:not(.#{$prefix}--hidden)) &__tablist {
103
- --right-fade: var(--#{$prefix}-scroll-fade-width);
104
- }
105
-
106
89
  &__tab {
90
+ @include uilib-tab-base($prefix);
91
+
92
+ /* stylelint-disable-next-line order/order */
107
93
  &--active {
108
94
  color: var(--#{$prefix}-active-color);
109
- }
110
-
111
- &--active::after {
112
- position: absolute;
113
- left: 0;
114
- bottom: 0;
115
- content: '';
116
-
117
- width: 100%;
118
95
 
119
- border-bottom: var(--uilib-stroke-size-075) var(--uilib-stroke-style-solid) var(--#{$prefix}-active-color);
96
+ box-shadow: inset 0 calc(var(--uilib-stroke-size-075) * -1) 0 0 var(--#{$prefix}-active-color);
120
97
  }
121
98
 
122
- @include uilib-tab-base($prefix);
99
+ &::before {
100
+ border-radius: var(--uilib-border-radius-100);
101
+ }
123
102
 
124
103
  &:hover {
125
104
  color: var(--#{$prefix}-active-color);
@@ -151,6 +130,84 @@
151
130
  max-height: unset;
152
131
  }
153
132
  }
133
+
134
+ &-inner {
135
+ display: flex;
136
+ flex-flow: row nowrap;
137
+ gap: var(--uilib-spacing-200);
138
+ justify-content: center;
139
+ align-items: center;
140
+ }
141
+ }
142
+ }
143
+
144
+ // ─── V1: flex on tablist and tab ───
145
+ [version='1'].#{$prefix} {
146
+ .#{$prefix}__tablist {
147
+ @include uilib-tablist-base;
148
+
149
+ /* stylelint-disable-next-line order/order */
150
+ display: flex;
151
+ flex-direction: row;
152
+ align-items: end;
153
+ }
154
+
155
+ .#{$prefix}__tab {
156
+ display: inline-flex;
157
+ flex-shrink: 0;
158
+ gap: var(--uilib-spacing-200);
159
+ align-items: center;
160
+ }
161
+ }
162
+
163
+ // ─── V2: table layout on tablist, scrolling on wrapper ───
164
+ [version='2'].#{$prefix} {
165
+ .#{$prefix}__tablist-wrapper {
166
+ @include uilib-tablist-base;
167
+ }
168
+
169
+ .#{$prefix}__tablist {
170
+ display: table;
171
+
172
+ table-layout: fixed;
173
+ }
174
+
175
+ .#{$prefix}__tab-outer {
176
+ display: table-cell;
177
+
178
+ vertical-align: bottom;
179
+ }
180
+
181
+ .#{$prefix}__tab {
182
+ width: max-content;
183
+ }
184
+
185
+ .#{$prefix}__tab-inner {
186
+ display: flex;
187
+ flex-flow: row nowrap;
188
+ gap: var(--uilib-spacing-200);
189
+ align-items: center;
190
+ }
191
+ }
192
+
193
+ // ─── Scroll fade triggers ───
194
+ [version='1'].#{$prefix} {
195
+ &:has(.#{$prefix}__scroll-button--left:not(.#{$prefix}--hidden)) .#{$prefix}__tablist {
196
+ --left-fade: var(--#{$prefix}-scroll-fade-width);
197
+ }
198
+
199
+ &:has(.#{$prefix}__scroll-button--right:not(.#{$prefix}--hidden)) .#{$prefix}__tablist {
200
+ --right-fade: var(--#{$prefix}-scroll-fade-width);
201
+ }
202
+ }
203
+
204
+ [version='2'].#{$prefix} .#{$prefix}__scroll-wrapper {
205
+ &:has(.#{$prefix}__scroll-button--left:not(.#{$prefix}--hidden)) .#{$prefix}__tablist-wrapper {
206
+ --left-fade: var(--#{$prefix}-scroll-fade-width);
207
+ }
208
+
209
+ &:has(.#{$prefix}__scroll-button--right:not(.#{$prefix}--hidden)) .#{$prefix}__tablist-wrapper {
210
+ --right-fade: var(--#{$prefix}-scroll-fade-width);
154
211
  }
155
212
  }
156
213
  }
@@ -25,6 +25,15 @@ $uilib-tabs-anchor-included: false !default;
25
25
  display: inline-flex;
26
26
 
27
27
  @include uilib-tab-base($prefix);
28
+
29
+ /* stylelint-disable-next-line order/order */
30
+ flex-flow: row nowrap;
31
+ gap: var(--uilib-spacing-200);
32
+ align-items: center;
33
+
34
+ .uilib-icon {
35
+ flex-shrink: 0;
36
+ }
28
37
  }
29
38
  }
30
39
 
@@ -33,9 +42,24 @@ $uilib-tabs-anchor-included: false !default;
33
42
 
34
43
  @include uilib-tabs-shared($prefix);
35
44
 
45
+ .#{$prefix}__tab {
46
+ display: flex;
47
+ flex-flow: row nowrap;
48
+ gap: var(--uilib-spacing-200);
49
+ align-items: center;
50
+
51
+ &-label {
52
+ text-align: center;
53
+ }
54
+ }
55
+
36
56
  .#{$prefix}-wrapper {
37
57
  display: flex;
38
58
  flex-direction: column;
59
+
60
+ & > section:focus-visible::before {
61
+ border-radius: var(--uilib-border-radius-100);
62
+ }
39
63
  }
40
64
 
41
65
  // No-JS fallback
@@ -62,6 +86,18 @@ $uilib-tabs-anchor-included: false !default;
62
86
  & .#{$prefix}__scroll-wrapper {
63
87
  border-bottom: none;
64
88
  }
89
+
90
+ .uilib-tabs-anchor__scroll-button {
91
+ top: calc(50% - var(--uilib-spacing-100));
92
+
93
+ &--left {
94
+ left: calc(-1 * var(--uilib-spacing-100));
95
+ }
96
+
97
+ &--right {
98
+ right: calc(-1 * var(--uilib-spacing-100));
99
+ }
100
+ }
65
101
  }
66
102
 
67
103
  @media (prefers-reduced-motion: no-preference) {
@@ -54,52 +54,105 @@ $uilib-tabs-in-page-included: false !default;
54
54
  @include uilib-tabs-in-page-nojs-tab;
55
55
  }
56
56
 
57
- .#{$prefix} {
58
- &--full-width {
59
- & > .#{$prefix}__tablist {
60
- margin: 0;
61
- padding: 0;
57
+ // ─── Full-width variant ───
62
58
 
63
- border-bottom: var(--uilib-stroke-size-025) solid var(--uilib-tabs-in-page-border-color);
64
- -webkit-mask-image: none;
65
- mask-image: none;
66
- }
59
+ // V1: full-width uses flex
60
+ [version='1'].#{$prefix}--full-width {
61
+ .#{$prefix}__tablist {
62
+ flex-wrap: nowrap;
67
63
 
68
- .#{$prefix}__tablist {
69
- flex-wrap: nowrap;
64
+ margin: 0;
65
+ padding: 0;
70
66
 
71
- overflow: visible;
72
- }
67
+ border-bottom: var(--uilib-stroke-size-025) solid var(--uilib-tabs-in-page-border-color);
73
68
 
74
- .#{$prefix}__tab {
75
- flex: 1;
76
- justify-content: center;
69
+ overflow: visible;
70
+ -webkit-mask-image: none;
71
+ mask-image: none;
72
+ }
73
+
74
+ .#{$prefix}__tab {
75
+ flex: 1;
76
+ justify-content: center;
77
+
78
+ max-width: unset;
79
+ }
80
+ }
81
+
82
+ // V2: full-width uses table
83
+ [version='2'].#{$prefix}--full-width {
84
+ .#{$prefix}__tablist {
85
+ display: table;
86
+
87
+ width: 100%;
88
+ margin: 0;
89
+ padding: 0;
77
90
 
78
- max-width: unset;
79
- }
91
+ border-bottom: var(--uilib-stroke-size-025) solid var(--uilib-tabs-in-page-border-color);
80
92
 
81
- .#{$prefix}__tab-label {
82
- -webkit-line-clamp: unset;
83
- line-clamp: unset;
93
+ table-layout: fixed;
84
94
 
85
- max-height: 2lh;
86
- }
95
+ overflow: visible;
96
+ -webkit-mask-image: none;
97
+ mask-image: none;
87
98
  }
88
99
 
89
- &--vertical &__tablist {
100
+ .#{$prefix}__tab-outer {
101
+ display: table-cell;
102
+
103
+ vertical-align: bottom;
104
+ }
105
+
106
+ .#{$prefix}__tab {
107
+ width: 100%;
108
+ max-width: unset;
109
+ }
110
+ }
111
+
112
+ // Full-width shared (both versions)
113
+ .#{$prefix}--full-width .#{$prefix}__tab-label {
114
+ -webkit-line-clamp: unset;
115
+ line-clamp: unset;
116
+
117
+ max-height: 2lh;
118
+ }
119
+
120
+ // ─── Vertical variant ───
121
+
122
+ // V1: vertical uses flex-direction
123
+ [version='1'].#{$prefix}--vertical {
124
+ .#{$prefix}__tablist {
90
125
  flex-direction: column;
91
126
  align-items: stretch;
92
127
  }
93
128
 
94
- &--vertical &__tab {
129
+ .#{$prefix}__tab {
95
130
  flex: none;
96
131
  }
132
+ }
133
+
134
+ // V2: vertical uses block layout
135
+ [version='2'].#{$prefix}--vertical {
136
+ .#{$prefix}__tablist {
137
+ display: block;
138
+ }
139
+
140
+ .#{$prefix}__tab-outer {
141
+ display: block;
97
142
 
98
- &--vertical &__tab-label {
99
- -webkit-line-clamp: 2;
100
- line-clamp: 2;
143
+ width: 100%;
144
+ }
101
145
 
102
- max-height: unset;
146
+ .#{$prefix}__tab {
147
+ width: 100%;
103
148
  }
104
149
  }
150
+
151
+ // Vertical shared
152
+ .#{$prefix}--vertical .#{$prefix}__tab-label {
153
+ -webkit-line-clamp: 2;
154
+ line-clamp: 2;
155
+
156
+ max-height: unset;
157
+ }
105
158
  }
@@ -80,6 +80,8 @@ $uilib-tooltip-included: false !default;
80
80
 
81
81
  &--show {
82
82
  opacity: 1;
83
+
84
+ pointer-events: auto;
83
85
  }
84
86
 
85
87
  @media (prefers-reduced-motion: no-preference) {
package/scss/mixins.scss CHANGED
@@ -36,6 +36,7 @@
36
36
  @forward 'lib/pagination/mixins';
37
37
  @forward 'lib/price/mixins';
38
38
  @forward 'lib/price-box/mixins';
39
+ @forward 'lib/cards/promotion/mixins';
39
40
  @forward 'lib/promo-tag/mixins';
40
41
  @forward 'lib/ratings-reviews/customer-review/mixins';
41
42
  @forward 'lib/ratings-reviews/numerical/mixins';
@@ -279,6 +279,7 @@ $uilib-crystalski-list-variables: map.merge(
279
279
  $uilib-list-variables,
280
280
  (
281
281
  bullet-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/list-item.svg'),
282
+ multiline-title-font: var(--uilib-typography-label-medium-strong),
282
283
  )
283
284
  );
284
285
 
@@ -299,6 +300,15 @@ $uilib-crystalski-pagination-variables: map.merge(
299
300
  )
300
301
  );
301
302
 
303
+ // Promo banner
304
+ $uilib-crystalski-card-promotion-variables: map.merge(
305
+ $uilib-card-promotion-variables,
306
+ (
307
+ cta-copy-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/copy.svg'),
308
+ cta-copied-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/checkmark-circled-filled.svg'),
309
+ )
310
+ );
311
+
302
312
  // Ratings and Reviews - Numerical
303
313
  $uilib-crystalski-ratings-numerical-variables: map.merge(
304
314
  $uilib-ratings-numerical-variables,
@@ -161,6 +161,9 @@
161
161
  // Price
162
162
  @include util.uilib-build-css-vars('price', $uilib-price-variables);
163
163
 
164
+ // Promo banner
165
+ @include util.uilib-build-css-vars('card-promotion', $uilib-crystalski-card-promotion-variables);
166
+
164
167
  // Promo tag
165
168
  @include util.uilib-build-css-vars('promo-tag', $uilib-promo-tag-variables);
166
169
 
@@ -227,6 +227,13 @@
227
227
  }
228
228
  }
229
229
  },
230
+ "list": {
231
+ "tokens": {
232
+ "list-multiline-title-font": {
233
+ "primitive": "uilib-typography-label-medium-strong"
234
+ }
235
+ }
236
+ },
230
237
  "ratings-numerical": {
231
238
  "tokens": {
232
239
  "ratings-numerical-brand-color": {
@@ -354,6 +354,7 @@ $uilib-firstchoice-list-variables: map.merge(
354
354
  $uilib-list-variables,
355
355
  (
356
356
  bullet-icon: url('#{$uilib-assets-base-url}v3/icons/tui/standard/list-item.svg'),
357
+ multiline-title-font: var(--uilib-typography-label-medium-strong),
357
358
  )
358
359
  );
359
360
 
@@ -382,6 +383,15 @@ $uilib-firstchoice-price-variables: map.merge(
382
383
  )
383
384
  );
384
385
 
386
+ // Promo banner
387
+ $uilib-firstchoice-card-promotion-variables: map.merge(
388
+ $uilib-card-promotion-variables,
389
+ (
390
+ cta-copy-icon: url('#{$uilib-assets-base-url}v3/icons/firstchoice/standard/copy.svg'),
391
+ cta-copied-icon: url('#{$uilib-assets-base-url}v3/icons/firstchoice/standard/checkmark-circled-filled.svg'),
392
+ )
393
+ );
394
+
385
395
  // Ratings and Reviews - Numerical
386
396
  $uilib-firstchoice-ratings-numerical-variables: map.merge(
387
397
  $uilib-ratings-numerical-variables,
@@ -161,6 +161,9 @@
161
161
  // Price
162
162
  @include util.uilib-build-css-vars('price', $uilib-firstchoice-price-variables);
163
163
 
164
+ // Promo banner
165
+ @include util.uilib-build-css-vars('card-promotion', $uilib-firstchoice-card-promotion-variables);
166
+
164
167
  // Promo tag
165
168
  @include util.uilib-build-css-vars('promo-tag', $uilib-promo-tag-variables);
166
169
 
@@ -312,6 +312,13 @@
312
312
  }
313
313
  }
314
314
  },
315
+ "list": {
316
+ "tokens": {
317
+ "list-multiline-title-font": {
318
+ "primitive": "uilib-typography-label-medium-strong"
319
+ }
320
+ }
321
+ },
315
322
  "pagination": {
316
323
  "tokens": {
317
324
  "pagination-icon-color": {
@@ -161,6 +161,9 @@
161
161
  // Price
162
162
  @include util.uilib-build-css-vars('price', $uilib-price-variables);
163
163
 
164
+ // Promo banner
165
+ @include util.uilib-build-css-vars('card-promotion', $uilib-card-promotion-variables);
166
+
164
167
  // Promo tag
165
168
  @include util.uilib-build-css-vars('promo-tag', $uilib-promo-tag-variables);
166
169
 
@@ -1071,12 +1071,6 @@
1071
1071
  "title": "Default border colour",
1072
1072
  "description": "Default border colour"
1073
1073
  },
1074
- "card-selectable-dashed-border-color": {
1075
- "primitive": "uilib-color-border-dashed",
1076
- "displayType": "color",
1077
- "title": "Dashed border colour",
1078
- "description": "Dashed border colour"
1079
- },
1080
1074
  "card-selectable-selected-border-color": {
1081
1075
  "primitive": "uilib-color-border-interaction",
1082
1076
  "displayType": "color",
@@ -1919,6 +1913,12 @@
1919
1913
  "title": "List image radius (alt)",
1920
1914
  "description": "List image radius (alt)",
1921
1915
  "displayType": "radius"
1916
+ },
1917
+ "list-multiline-title-font": {
1918
+ "primitive": "uilib-typography-label-medium",
1919
+ "title": "List multiline title font",
1920
+ "description": "List multiline title font",
1921
+ "displayType": "font"
1922
1922
  }
1923
1923
  }
1924
1924
  },
@@ -2099,6 +2099,64 @@
2099
2099
  }
2100
2100
  }
2101
2101
  },
2102
+ "card-promotion": {
2103
+ "tokens": {
2104
+ "card-promotion-elevation": {
2105
+ "primitive": "uilib-elevation-100",
2106
+ "title": "Container elevation",
2107
+ "description": "Box shadow of the banner container",
2108
+ "displayType": "shadow"
2109
+ },
2110
+ "card-promotion-radius": {
2111
+ "primitive": "uilib-border-radius-400",
2112
+ "title": "Container radius",
2113
+ "description": "Border radius of the banner container",
2114
+ "displayType": "radius"
2115
+ },
2116
+ "card-promotion-bg-color": {
2117
+ "primitive": "uilib-color-core-neutral",
2118
+ "title": "Container background color",
2119
+ "description": "Background color of the banner container",
2120
+ "displayType": "color"
2121
+ },
2122
+ "card-promotion-headline-color": {
2123
+ "primitive": "uilib-color-text-strong",
2124
+ "title": "Headline color",
2125
+ "description": "Text color of the headline",
2126
+ "displayType": "color"
2127
+ },
2128
+ "card-promotion-subcopy-color": {
2129
+ "primitive": "uilib-color-text-body",
2130
+ "title": "Sub-copy color",
2131
+ "description": "Text color of the sub-copy",
2132
+ "displayType": "color"
2133
+ },
2134
+ "card-promotion-subcopy-link-color": {
2135
+ "primitive": "uilib-color-text-link",
2136
+ "title": "Sub-copy link color",
2137
+ "description": "Text color of inline links in the sub-copy",
2138
+ "displayType": "color"
2139
+ },
2140
+ "card-promotion-code-color": {
2141
+ "primitive": "uilib-color-text-strong",
2142
+ "title": "Promo code color",
2143
+ "description": "Text color of the promo code",
2144
+ "displayType": "color"
2145
+ },
2146
+ "card-promotion-cta-copy-icon": {
2147
+ "displayType": "icon",
2148
+ "title": "CTA copy icon",
2149
+ "description": "Icon used in the Copy code button",
2150
+ "longValue": true
2151
+ },
2152
+ "card-promotion-cta-copied-icon": {
2153
+ "displayType": "icon",
2154
+ "title": "CTA copied icon",
2155
+ "description": "Icon used in the Copied button after a successful copy",
2156
+ "longValue": true
2157
+ }
2158
+ }
2159
+ },
2102
2160
  "promo-tag": {
2103
2161
  "tokens": {
2104
2162
  "promo-tag-radius": {
@@ -55,6 +55,7 @@
55
55
  @forward 'lib/modal/variables';
56
56
  @forward 'lib/pagination/variables';
57
57
  @forward 'lib/price/variables';
58
+ @forward 'lib/cards/promotion/variables';
58
59
  @forward 'lib/promo-tag/variables';
59
60
  @forward 'lib/ratings-reviews/numerical/variables';
60
61
  @forward 'lib/ratings-reviews/percentage/variables';