@tui/design-system 1.6.0 → 1.8.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 (49) hide show
  1. package/CHANGELOG.md +186 -1
  2. package/dist/themes/crystalski/index.css +38 -1
  3. package/dist/themes/crystalski/index.css.map +1 -1
  4. package/dist/themes/firstchoice/index.css +38 -1
  5. package/dist/themes/firstchoice/index.css.map +1 -1
  6. package/dist/themes/tui/index.css +40 -3
  7. package/dist/themes/tui/index.css.map +1 -1
  8. package/package.json +11 -10
  9. package/scss/lib/accordion/_mixins.scss +13 -6
  10. package/scss/lib/active-tag/_mixins.scss +16 -4
  11. package/scss/lib/cards/carousel/_index.scss +3 -0
  12. package/scss/lib/cards/carousel/_mixins.scss +164 -0
  13. package/scss/lib/cards/carousel/_variables.scss +13 -0
  14. package/scss/lib/cards/promotion/_index.scss +3 -0
  15. package/scss/lib/cards/promotion/_mixins.scss +275 -0
  16. package/scss/lib/cards/promotion/_variables.scss +14 -0
  17. package/scss/lib/cards/selectable/_mixins.scss +1 -1
  18. package/scss/lib/flyout-dropdown/_variables.scss +0 -1
  19. package/scss/lib/forms/input-switch/_mixins.scss +12 -6
  20. package/scss/lib/highlight-panel/_index.scss +2 -0
  21. package/scss/lib/highlight-panel/_mixins.scss +244 -0
  22. package/scss/lib/highlight-panel/_variables.scss +21 -0
  23. package/scss/lib/list/_mixins.scss +140 -70
  24. package/scss/lib/list/_variables.scss +2 -0
  25. package/scss/lib/modal/_variables.scss +1 -4
  26. package/scss/lib/patterns/review-card/_index.scss +3 -0
  27. package/scss/lib/patterns/review-card/_mixins.scss +283 -0
  28. package/scss/lib/patterns/review-card/_variables.scss +3 -0
  29. package/scss/lib/ratings-reviews/range-icons/_mixins.scss +16 -2
  30. package/scss/lib/ratings-reviews/range-icons/_variables.scss +2 -0
  31. package/scss/lib/skeleton/_variables.scss +2 -6
  32. package/scss/lib/tabs/_mixins.scss +117 -60
  33. package/scss/lib/tabs/anchor/_mixins.scss +36 -0
  34. package/scss/lib/tabs/in-page/_mixins.scss +82 -29
  35. package/scss/lib/tooltip/_mixins.scss +2 -0
  36. package/scss/mixins.scss +4 -0
  37. package/scss/themes/crystalski/_overrides.scss +27 -0
  38. package/scss/themes/crystalski/index.scss +9 -0
  39. package/scss/themes/crystalski/theme.json +14 -0
  40. package/scss/themes/firstchoice/_overrides.scss +29 -0
  41. package/scss/themes/firstchoice/index.scss +9 -0
  42. package/scss/themes/firstchoice/theme.json +20 -0
  43. package/scss/themes/tui/_overrides.scss +19 -0
  44. package/scss/themes/tui/index.scss +9 -0
  45. package/scss/themes/tui/theme.json +8 -0
  46. package/scss/variables/_primitives.scss +3 -0
  47. package/scss/variables/base-theme.json +234 -1
  48. package/scss/variables.scss +6 -0
  49. package/types/components.ts +39 -2
@@ -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
@@ -6,6 +6,7 @@
6
6
  @forward 'lib/button/mixins';
7
7
  @forward 'lib/cards/card/mixins';
8
8
  @forward 'lib/cards/article/mixins';
9
+ @forward 'lib/cards/carousel/mixins';
9
10
  @forward 'lib/cards/icon/mixins';
10
11
  @forward 'lib/cards/search/mixins';
11
12
  @forward 'lib/cards/selectable/mixins';
@@ -25,6 +26,7 @@
25
26
  @forward 'lib/forms/input-text/mixins';
26
27
  @forward 'lib/grid/mixins';
27
28
  @forward 'lib/hero/mixins';
29
+ @forward 'lib/highlight-panel/mixins';
28
30
  @forward 'lib/icon/mixins';
29
31
  @forward 'lib/icon-button/mixins';
30
32
  @forward 'lib/image/mixins';
@@ -36,6 +38,7 @@
36
38
  @forward 'lib/pagination/mixins';
37
39
  @forward 'lib/price/mixins';
38
40
  @forward 'lib/price-box/mixins';
41
+ @forward 'lib/cards/promotion/mixins';
39
42
  @forward 'lib/promo-tag/mixins';
40
43
  @forward 'lib/ratings-reviews/customer-review/mixins';
41
44
  @forward 'lib/ratings-reviews/numerical/mixins';
@@ -54,3 +57,4 @@
54
57
  @forward 'lib/travel-aware-banner/mixins';
55
58
  @forward 'lib/typography/mixins';
56
59
  @forward 'lib/utility/mixins';
60
+ @forward 'lib/patterns/review-card/mixins';
@@ -109,6 +109,15 @@ $uilib-crystalski-card-article-variables: map.merge(
109
109
  )
110
110
  );
111
111
 
112
+ // Card - carousel
113
+ $uilib-crystalski-carousel-variables: map.merge(
114
+ $uilib-carousel-variables,
115
+ (
116
+ prev-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/chevron-left.svg'),
117
+ next-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/chevron-right.svg'),
118
+ )
119
+ );
120
+
112
121
  // Card - icon
113
122
  $uilib-crystalski-card-icon-variables: map.merge(
114
123
  $uilib-card-icon-variables,
@@ -223,6 +232,14 @@ $uilib-crystalski-input-text-variables: map.merge(
223
232
  )
224
233
  );
225
234
 
235
+ // Highlight panel
236
+ $uilib-crystalski-highlight-panel-variables: map.merge(
237
+ $uilib-highlight-panel-variables,
238
+ (
239
+ header-font-color-brand: var(--uilib-color-text-body),
240
+ )
241
+ );
242
+
226
243
  // Icon button
227
244
  $uilib-crystalski-icon-button-variables: map.merge(
228
245
  $uilib-icon-button-variables,
@@ -279,6 +296,7 @@ $uilib-crystalski-list-variables: map.merge(
279
296
  $uilib-list-variables,
280
297
  (
281
298
  bullet-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/list-item.svg'),
299
+ multiline-title-font: var(--uilib-typography-label-medium-strong),
282
300
  )
283
301
  );
284
302
 
@@ -299,6 +317,15 @@ $uilib-crystalski-pagination-variables: map.merge(
299
317
  )
300
318
  );
301
319
 
320
+ // Promo banner
321
+ $uilib-crystalski-card-promotion-variables: map.merge(
322
+ $uilib-card-promotion-variables,
323
+ (
324
+ cta-copy-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/copy.svg'),
325
+ cta-copied-icon: url('#{$uilib-assets-base-url}v3/icons/crystalski/standard/checkmark-circled-filled.svg'),
326
+ )
327
+ );
328
+
302
329
  // Ratings and Reviews - Numerical
303
330
  $uilib-crystalski-ratings-numerical-variables: map.merge(
304
331
  $uilib-ratings-numerical-variables,
@@ -77,6 +77,9 @@
77
77
  // Card - article
78
78
  @include util.uilib-build-css-vars('card-article', $uilib-crystalski-card-article-variables);
79
79
 
80
+ // Card - carousel
81
+ @include util.uilib-build-css-vars('carousel', $uilib-crystalski-carousel-variables);
82
+
80
83
  // Card - icon
81
84
  @include util.uilib-build-css-vars('card-icon', $uilib-crystalski-card-icon-variables);
82
85
 
@@ -131,6 +134,9 @@
131
134
  // Hero
132
135
  @include util.uilib-build-css-vars('hero', $uilib-hero-variables);
133
136
 
137
+ // Highlight panel
138
+ @include util.uilib-build-css-vars('highlight-panel', $uilib-crystalski-highlight-panel-variables);
139
+
134
140
  // Icon button
135
141
  @include util.uilib-build-css-vars('icon-button', $uilib-crystalski-icon-button-variables);
136
142
 
@@ -161,6 +167,9 @@
161
167
  // Price
162
168
  @include util.uilib-build-css-vars('price', $uilib-price-variables);
163
169
 
170
+ // Promo banner
171
+ @include util.uilib-build-css-vars('card-promotion', $uilib-crystalski-card-promotion-variables);
172
+
164
173
  // Promo tag
165
174
  @include util.uilib-build-css-vars('promo-tag', $uilib-promo-tag-variables);
166
175
 
@@ -203,6 +203,13 @@
203
203
  }
204
204
  }
205
205
  },
206
+ "highlight-panel": {
207
+ "tokens": {
208
+ "highlight-panel-header-font-color-brand": {
209
+ "primitive": "uilib-color-text-body"
210
+ }
211
+ }
212
+ },
206
213
  "input-checkbox": {
207
214
  "tokens": {
208
215
  "input-checkbox-text-color-strong": {
@@ -227,6 +234,13 @@
227
234
  }
228
235
  }
229
236
  },
237
+ "list": {
238
+ "tokens": {
239
+ "list-multiline-title-font": {
240
+ "primitive": "uilib-typography-label-medium-strong"
241
+ }
242
+ }
243
+ },
230
244
  "ratings-numerical": {
231
245
  "tokens": {
232
246
  "ratings-numerical-brand-color": {
@@ -176,6 +176,15 @@ $uilib-firstchoice-card-article-variables: map.merge(
176
176
  )
177
177
  );
178
178
 
179
+ // Card - carousel
180
+ $uilib-firstchoice-carousel-variables: map.merge(
181
+ $uilib-carousel-variables,
182
+ (
183
+ prev-icon: url('#{$uilib-assets-base-url}v3/icons/firstchoice/standard/chevron-left.svg'),
184
+ next-icon: url('#{$uilib-assets-base-url}v3/icons/firstchoice/standard/chevron-right.svg'),
185
+ )
186
+ );
187
+
179
188
  // Card - icon
180
189
  $uilib-firstchoice-card-icon-variables: map.merge(
181
190
  $uilib-card-icon-variables,
@@ -293,6 +302,16 @@ $uilib-firstchoice-input-text-variables: map.merge(
293
302
  )
294
303
  );
295
304
 
305
+ // Highlight panel
306
+ $uilib-firstchoice-highlight-panel-variables: map.merge(
307
+ $uilib-highlight-panel-variables,
308
+ (
309
+ radius: var(--uilib-border-radius-200),
310
+ header-font-color-brand: var(--uilib-color-text-strong),
311
+ header-icon-color-brand: var(--uilib-color-text-strong),
312
+ )
313
+ );
314
+
296
315
  // Icon button
297
316
  $uilib-firstchoice-icon-button-variables: map.merge(
298
317
  $uilib-icon-button-variables,
@@ -354,6 +373,7 @@ $uilib-firstchoice-list-variables: map.merge(
354
373
  $uilib-list-variables,
355
374
  (
356
375
  bullet-icon: url('#{$uilib-assets-base-url}v3/icons/tui/standard/list-item.svg'),
376
+ multiline-title-font: var(--uilib-typography-label-medium-strong),
357
377
  )
358
378
  );
359
379
 
@@ -382,6 +402,15 @@ $uilib-firstchoice-price-variables: map.merge(
382
402
  )
383
403
  );
384
404
 
405
+ // Promo banner
406
+ $uilib-firstchoice-card-promotion-variables: map.merge(
407
+ $uilib-card-promotion-variables,
408
+ (
409
+ cta-copy-icon: url('#{$uilib-assets-base-url}v3/icons/firstchoice/standard/copy.svg'),
410
+ cta-copied-icon: url('#{$uilib-assets-base-url}v3/icons/firstchoice/standard/checkmark-circled-filled.svg'),
411
+ )
412
+ );
413
+
385
414
  // Ratings and Reviews - Numerical
386
415
  $uilib-firstchoice-ratings-numerical-variables: map.merge(
387
416
  $uilib-ratings-numerical-variables,
@@ -77,6 +77,9 @@
77
77
  // Card - article
78
78
  @include util.uilib-build-css-vars('card-article', $uilib-firstchoice-card-article-variables);
79
79
 
80
+ // Card - carousel
81
+ @include util.uilib-build-css-vars('carousel', $uilib-firstchoice-carousel-variables);
82
+
80
83
  // Card - icon
81
84
  @include util.uilib-build-css-vars('card-icon', $uilib-firstchoice-card-icon-variables);
82
85
 
@@ -131,6 +134,9 @@
131
134
  // Hero
132
135
  @include util.uilib-build-css-vars('hero', $uilib-hero-variables);
133
136
 
137
+ // Highlight panel
138
+ @include util.uilib-build-css-vars('highlight-panel', $uilib-firstchoice-highlight-panel-variables);
139
+
134
140
  // Icon button
135
141
  @include util.uilib-build-css-vars('icon-button', $uilib-firstchoice-icon-button-variables);
136
142
 
@@ -161,6 +167,9 @@
161
167
  // Price
162
168
  @include util.uilib-build-css-vars('price', $uilib-firstchoice-price-variables);
163
169
 
170
+ // Promo banner
171
+ @include util.uilib-build-css-vars('card-promotion', $uilib-firstchoice-card-promotion-variables);
172
+
164
173
  // Promo tag
165
174
  @include util.uilib-build-css-vars('promo-tag', $uilib-promo-tag-variables);
166
175
 
@@ -265,6 +265,19 @@
265
265
  }
266
266
  }
267
267
  },
268
+ "highlight-panel": {
269
+ "tokens": {
270
+ "highlight-panel-radius": {
271
+ "primitive": "uilib-border-radius-200"
272
+ },
273
+ "highlight-panel-header-font-color-brand": {
274
+ "primitive": "uilib-color-text-strong"
275
+ },
276
+ "highlight-panel-header-icon-color-brand": {
277
+ "primitive": "uilib-color-text-strong"
278
+ }
279
+ }
280
+ },
268
281
  "icon-button": {
269
282
  "tokens": {
270
283
  "icon-button-radius": {
@@ -312,6 +325,13 @@
312
325
  }
313
326
  }
314
327
  },
328
+ "list": {
329
+ "tokens": {
330
+ "list-multiline-title-font": {
331
+ "primitive": "uilib-typography-label-medium-strong"
332
+ }
333
+ }
334
+ },
315
335
  "pagination": {
316
336
  "tokens": {
317
337
  "pagination-icon-color": {
@@ -22,6 +22,25 @@ $uilib-tui-card-search-variables: map.merge(
22
22
  )
23
23
  );
24
24
 
25
+ // Highlight panel
26
+ $uilib-tui-highlight-panel-variables: map.merge(
27
+ $uilib-highlight-panel-variables,
28
+ (
29
+ header-bg-overlay-brand: radial-gradient(
30
+ circle farthest-corner at 99.91% 0%,
31
+ rgb(255 255 255 / 0%) 0%,
32
+ rgb(255 255 255 / 20%) 20%,
33
+ rgb(255 255 255 / 0%) 20%,
34
+ rgb(255 255 255 / 20%) 40%,
35
+ rgb(255 255 255 / 0%) 40%,
36
+ rgb(255 255 255 / 20%) 60%,
37
+ rgb(255 255 255 / 0%) 60%,
38
+ rgb(255 255 255 / 20%) 80%,
39
+ rgb(255 255 255 / 0%) 80%
40
+ ),
41
+ )
42
+ );
43
+
25
44
  // Ratings and Reviews - Numerical
26
45
  $uilib-tui-ratings-numerical-variables: map.merge(
27
46
  $uilib-ratings-numerical-variables,
@@ -77,6 +77,9 @@
77
77
  // Card - article
78
78
  @include util.uilib-build-css-vars('card-article', $uilib-card-article-variables);
79
79
 
80
+ // Card - carousel
81
+ @include util.uilib-build-css-vars('carousel', $uilib-carousel-variables);
82
+
80
83
  // Card - icon
81
84
  @include util.uilib-build-css-vars('card-icon', $uilib-card-icon-variables);
82
85
 
@@ -161,6 +164,9 @@
161
164
  // Price
162
165
  @include util.uilib-build-css-vars('price', $uilib-price-variables);
163
166
 
167
+ // Promo banner
168
+ @include util.uilib-build-css-vars('card-promotion', $uilib-card-promotion-variables);
169
+
164
170
  // Promo tag
165
171
  @include util.uilib-build-css-vars('promo-tag', $uilib-promo-tag-variables);
166
172
 
@@ -188,6 +194,9 @@
188
194
  // Social proofing
189
195
  @include util.uilib-build-css-vars('social-proofing', $uilib-social-proofing-variables);
190
196
 
197
+ // Highlight panel
198
+ @include util.uilib-build-css-vars('highlight-panel', $uilib-tui-highlight-panel-variables);
199
+
191
200
  // Tabs - in-page
192
201
  @include util.uilib-build-css-vars('tabs-in-page', $uilib-tabs-in-page-variables);
193
202
 
@@ -154,5 +154,13 @@
154
154
  "primitive": "uilib-color-brand-musement"
155
155
  }
156
156
  }
157
+ },
158
+ "highlight-panel": {
159
+ "tokens": {
160
+ "highlight-panel-header-bg-overlay-brand": {
161
+ "primitive": "radial-gradient",
162
+ "longValue": true
163
+ }
164
+ }
157
165
  }
158
166
  }
@@ -80,6 +80,9 @@ $uilib-primitives: (
80
80
  color-brand-tripadvisor-green-60: #00b747,
81
81
  color-brand-tripadvisor-pine-green: #002b11,
82
82
  color-brand-paypal-blue: #253b80,
83
+ color-brand-holidaycheck-blue: #0e55cd,
84
+ color-brand-holidaycheck-yellow: #ffca3a,
85
+ color-brand-holidaycheck-lightblue: #c7d5ed,
83
86
 
84
87
  // 11px
85
88
  font-size-40: 0.6875rem,