@tui/design-system 1.11.0 → 1.13.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.
- package/CHANGELOG.md +75 -2
- package/dist/themes/crystalski/index.css +4 -0
- package/dist/themes/crystalski/index.css.map +1 -1
- package/dist/themes/firstchoice/index.css +4 -0
- package/dist/themes/firstchoice/index.css.map +1 -1
- package/dist/themes/tui/index.css +4 -0
- package/dist/themes/tui/index.css.map +1 -1
- package/package.json +11 -12
- package/scss/lib/cards/article/_mixins.scss +76 -29
- package/scss/lib/cards/card/_mixins.scss +76 -0
- package/scss/lib/flyout-dropdown/_mixins.scss +2 -0
- package/scss/lib/highlight-panel/_mixins.scss +4 -2
- package/scss/lib/icon-button/_mixins.scss +232 -55
- package/scss/lib/icon-button/_variables.scss +1 -0
- package/scss/lib/image/_mixins.scss +56 -28
- package/scss/lib/info-tag/_mixins.scss +7 -1
- package/scss/lib/info-tag/_variables.scss +2 -0
- package/scss/lib/modal/_mixins.scss +9 -3
- package/scss/variables/_colors.scss +1 -0
- package/scss/variables/_primitives.scss +1 -0
- package/scss/variables/base-theme.json +21 -0
- package/types/components.ts +357 -196
package/types/components.ts
CHANGED
|
@@ -7,6 +7,10 @@ export type IconPosition = 'none' | 'leading' | 'trailing';
|
|
|
7
7
|
export type ButtonVariantBase = 'primary' | 'secondary' | 'promotion' | 'search';
|
|
8
8
|
export type HeadingLevel = '2' | '3' | '4' | '5' | '6';
|
|
9
9
|
|
|
10
|
+
// ═══════════════════════════════════════════════════════════
|
|
11
|
+
// COMPONENTS
|
|
12
|
+
// ═══════════════════════════════════════════════════════════
|
|
13
|
+
|
|
10
14
|
// ─── Accordion ─────────────────────────────────────────
|
|
11
15
|
export interface AccordionProps {
|
|
12
16
|
hasImage?: 'none' | 'logo' | 'icon';
|
|
@@ -55,25 +59,6 @@ export interface AlertProps {
|
|
|
55
59
|
theme?: Theme;
|
|
56
60
|
}
|
|
57
61
|
|
|
58
|
-
// ─── Anchor Tabs ───────────────────────────────────────
|
|
59
|
-
export interface AnchorTab {
|
|
60
|
-
label: string;
|
|
61
|
-
href: string;
|
|
62
|
-
icon?: string;
|
|
63
|
-
disabled?: boolean;
|
|
64
|
-
sectionContent?: string;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export interface AnchorTabsProps {
|
|
68
|
-
icon?: string;
|
|
69
|
-
tabsLabelledby?: string;
|
|
70
|
-
tabsLabel?: string;
|
|
71
|
-
/** @deprecated Use `tabsLabelledby` instead */
|
|
72
|
-
ariaLabelledby?: string;
|
|
73
|
-
tabs?: AnchorTab[];
|
|
74
|
-
sticky?: boolean;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
62
|
// ─── Breadcrumb ────────────────────────────────────────
|
|
78
63
|
export interface BreadcrumbItem {
|
|
79
64
|
label: string;
|
|
@@ -100,12 +85,34 @@ export interface ButtonProps {
|
|
|
100
85
|
theme?: Theme;
|
|
101
86
|
}
|
|
102
87
|
|
|
88
|
+
// ─── Cards ─────────────────────────────────────────────
|
|
89
|
+
|
|
90
|
+
// ─── Card ──────────────────────────────────────
|
|
91
|
+
export interface CardProps {
|
|
92
|
+
extraClasses?: string[];
|
|
93
|
+
extraAttributes?: string[];
|
|
94
|
+
link?: boolean;
|
|
95
|
+
iconButton?: boolean;
|
|
96
|
+
iconButtonLabel?: boolean;
|
|
97
|
+
iconButtonLabelText?: string;
|
|
98
|
+
linkText?: string;
|
|
99
|
+
linkHref?: string;
|
|
100
|
+
supplementaryContainer?: boolean;
|
|
101
|
+
cardContent?: string;
|
|
102
|
+
supplementaryContent?: string;
|
|
103
|
+
theme?: Theme;
|
|
104
|
+
}
|
|
105
|
+
|
|
103
106
|
// ─── Card Article ──────────────────────────────────────
|
|
104
107
|
export interface CardArticleProps {
|
|
105
108
|
type?: 'static' | 'link' | 'multi-link';
|
|
109
|
+
iconButton?: boolean;
|
|
110
|
+
iconButtonLabel?: boolean;
|
|
111
|
+
iconButtonLabelText?: string;
|
|
106
112
|
elementType?: 'anchor' | 'button';
|
|
107
113
|
content?: 'short' | 'medium' | 'long' | 'rich';
|
|
108
114
|
headingText?: string;
|
|
115
|
+
theme?: Theme;
|
|
109
116
|
}
|
|
110
117
|
|
|
111
118
|
// ─── Card Icon ─────────────────────────────────────────
|
|
@@ -118,6 +125,26 @@ export interface CardIconProps {
|
|
|
118
125
|
cardText?: string;
|
|
119
126
|
}
|
|
120
127
|
|
|
128
|
+
// ─── Card Promotion ───────────────────────────────────────
|
|
129
|
+
export interface CardPromotionProps {
|
|
130
|
+
type?: 'default' | 'promo-code';
|
|
131
|
+
condensed?: boolean;
|
|
132
|
+
headingLevel?: HeadingLevel;
|
|
133
|
+
headline?: string;
|
|
134
|
+
scarcityLabel?: string;
|
|
135
|
+
conditions?: string;
|
|
136
|
+
linkLabel?: string;
|
|
137
|
+
icon?: string;
|
|
138
|
+
code?: string;
|
|
139
|
+
copied?: boolean;
|
|
140
|
+
copyLabel?: string;
|
|
141
|
+
copiedLabel?: string;
|
|
142
|
+
expired?: boolean;
|
|
143
|
+
expiredLabel?: string;
|
|
144
|
+
announcementLabel?: string;
|
|
145
|
+
theme?: Theme;
|
|
146
|
+
}
|
|
147
|
+
|
|
121
148
|
// ─── Card Selectable ───────────────────────────────────
|
|
122
149
|
export interface CardSelectableProps {
|
|
123
150
|
disabled?: boolean;
|
|
@@ -135,25 +162,42 @@ export interface CardSelectableProps {
|
|
|
135
162
|
includeTag?: boolean;
|
|
136
163
|
}
|
|
137
164
|
|
|
138
|
-
// ───
|
|
139
|
-
export interface
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
weekLabel?: string;
|
|
145
|
-
weekLabelFull?: string;
|
|
146
|
-
hideInput?: boolean;
|
|
147
|
-
separateCal?: boolean;
|
|
148
|
-
value?: string;
|
|
149
|
-
minDate?: string;
|
|
150
|
-
maxDate?: string;
|
|
151
|
-
previousLabel?: string;
|
|
165
|
+
// ─── Carousel ──────────────────────────────────────────
|
|
166
|
+
export interface CarouselProps {
|
|
167
|
+
variant?: 'page' | 'item';
|
|
168
|
+
itemsPerSlide?: string;
|
|
169
|
+
carouselLabel?: string;
|
|
170
|
+
prevLabel?: string;
|
|
152
171
|
nextLabel?: string;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
172
|
+
announcementLabel?: string;
|
|
173
|
+
secondaryButtonLabel?: string;
|
|
174
|
+
linkLabel?: string;
|
|
175
|
+
items?: string[];
|
|
176
|
+
theme?: Theme;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// ─── Product Card ──────────────────────────────────────
|
|
180
|
+
export interface ProductCardProps {
|
|
181
|
+
flagship?: boolean;
|
|
182
|
+
productLabel?: boolean;
|
|
183
|
+
gallery?: boolean;
|
|
184
|
+
quickview?: boolean;
|
|
185
|
+
promoArea?: boolean;
|
|
186
|
+
highlightsArea?: boolean;
|
|
187
|
+
toggleOpen?: string;
|
|
188
|
+
toggleClose?: string;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// ─── Search Card ───────────────────────────────────────
|
|
192
|
+
export interface SearchCardProps {
|
|
193
|
+
flagship?: boolean;
|
|
194
|
+
productLabel?: boolean;
|
|
195
|
+
gallery?: boolean;
|
|
196
|
+
quickview?: boolean;
|
|
197
|
+
promoArea?: boolean;
|
|
198
|
+
highlightsArea?: boolean;
|
|
199
|
+
toggleOpen?: string;
|
|
200
|
+
toggleClose?: string;
|
|
157
201
|
}
|
|
158
202
|
|
|
159
203
|
// ─── Divider ───────────────────────────────────────────
|
|
@@ -165,6 +209,43 @@ export interface DividerProps {
|
|
|
165
209
|
theme?: Theme;
|
|
166
210
|
}
|
|
167
211
|
|
|
212
|
+
// ─── Flight Details ────────────────────────────────────
|
|
213
|
+
export interface FlightDetailsLegProps {
|
|
214
|
+
variant?: 'direct' | 'indirect' | 'indirect-concise';
|
|
215
|
+
airline?: string;
|
|
216
|
+
departureDate?: string;
|
|
217
|
+
departureDateLong?: string;
|
|
218
|
+
arrivalDate?: string;
|
|
219
|
+
arrivalDateLong?: string;
|
|
220
|
+
type?: string;
|
|
221
|
+
duration?: string;
|
|
222
|
+
durationLong?: string;
|
|
223
|
+
originTime: string;
|
|
224
|
+
originName: string;
|
|
225
|
+
originCode: string;
|
|
226
|
+
destinationTime: string;
|
|
227
|
+
destinationName: string;
|
|
228
|
+
destinationCode: string;
|
|
229
|
+
connectionTime?: string;
|
|
230
|
+
connectionTimeLong?: string;
|
|
231
|
+
connectionDetails?: string;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export interface FlightDetailsExtendedLegProps extends FlightDetailsLegProps {
|
|
235
|
+
extraLegs?: FlightDetailsLegProps[];
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export interface FlightDetailsGroupProps {
|
|
239
|
+
outboundLeg: FlightDetailsExtendedLegProps;
|
|
240
|
+
returnLeg: FlightDetailsExtendedLegProps;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export interface FlightDetailsProps {
|
|
244
|
+
variant?: 'direct' | 'indirect';
|
|
245
|
+
open?: string;
|
|
246
|
+
close?: string;
|
|
247
|
+
}
|
|
248
|
+
|
|
168
249
|
// ─── Flyout Dropdown ───────────────────────────────────
|
|
169
250
|
export interface FlyoutDropdownProps {
|
|
170
251
|
variant?: 'default' | 'menu-flyout';
|
|
@@ -175,6 +256,30 @@ export interface FlyoutDropdownProps {
|
|
|
175
256
|
scrollerAriaLabel?: string;
|
|
176
257
|
}
|
|
177
258
|
|
|
259
|
+
// ─── Forms ─────────────────────────────────────────────
|
|
260
|
+
|
|
261
|
+
// ─── Datepicker ────────────────────────────────────────
|
|
262
|
+
export interface DatepickerProps {
|
|
263
|
+
rangeSelection?: boolean;
|
|
264
|
+
dualView?: boolean;
|
|
265
|
+
scrollableMobile?: boolean;
|
|
266
|
+
weekNumbers?: boolean;
|
|
267
|
+
weekLabel?: string;
|
|
268
|
+
weekLabelFull?: string;
|
|
269
|
+
hideInput?: boolean;
|
|
270
|
+
separateCal?: boolean;
|
|
271
|
+
value?: string;
|
|
272
|
+
minDate?: string;
|
|
273
|
+
maxDate?: string;
|
|
274
|
+
previousLabel?: string;
|
|
275
|
+
nextLabel?: string;
|
|
276
|
+
announceStart?: string;
|
|
277
|
+
announceRange?: string;
|
|
278
|
+
instructions?: string;
|
|
279
|
+
locale?: string;
|
|
280
|
+
allowedDates?: string;
|
|
281
|
+
}
|
|
282
|
+
|
|
178
283
|
// ─── Form Row ────────────────────────────────────────────
|
|
179
284
|
export interface FormRowProps {
|
|
180
285
|
labelText?: string;
|
|
@@ -187,90 +292,6 @@ export interface FormRowProps {
|
|
|
187
292
|
theme?: Theme;
|
|
188
293
|
}
|
|
189
294
|
|
|
190
|
-
// ─── Hero ──────────────────────────────────────────────
|
|
191
|
-
export interface HeroProps {
|
|
192
|
-
alignment?: 'left' | 'right' | 'center';
|
|
193
|
-
reduced?: boolean;
|
|
194
|
-
variant?: 'default' | 'default slim' | 'flagship' | 'flagship slim' | 'illustration';
|
|
195
|
-
heading?: string;
|
|
196
|
-
content?: string;
|
|
197
|
-
hideButton?: boolean;
|
|
198
|
-
buttonLabel?: string;
|
|
199
|
-
caveat?: string;
|
|
200
|
-
imageUrl?: string;
|
|
201
|
-
altText?: string;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// ─── Icon ────────────────────────────────────────────────
|
|
205
|
-
export interface IconProps {
|
|
206
|
-
type?: 'standard' | 'color' | 'bullet';
|
|
207
|
-
nameStandard?: string;
|
|
208
|
-
nameColor?: string;
|
|
209
|
-
nameBullet?: string;
|
|
210
|
-
size?: IconSize;
|
|
211
|
-
color?: string;
|
|
212
|
-
theme?: Theme;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
// ─── Icon Button ─────────────────────────────────────────
|
|
216
|
-
export interface IconButtonProps {
|
|
217
|
-
element?: 'a' | 'button';
|
|
218
|
-
variant?: ButtonVariantBase | 'ghost' | 'control' | 'shortlist';
|
|
219
|
-
size?: 'small' | 'medium' | 'large';
|
|
220
|
-
isDisabled?: boolean;
|
|
221
|
-
label?: string;
|
|
222
|
-
iconAsset?: string;
|
|
223
|
-
selected?: boolean;
|
|
224
|
-
theme?: Theme;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// ─── Image ─────────────────────────────────────────────
|
|
228
|
-
export interface ImageSrcItem {
|
|
229
|
-
url: string;
|
|
230
|
-
size: string;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
export type ImageFocalPoint =
|
|
234
|
-
'top-left' | 'top-center' | 'top-right' | 'center-left' | 'center' | 'center-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
235
|
-
|
|
236
|
-
export interface ImageProps {
|
|
237
|
-
altText: string;
|
|
238
|
-
imageUrl: string;
|
|
239
|
-
srcset?: ImageSrcItem[];
|
|
240
|
-
ratio?: 'landscape' | 'panoramic' | 'portrait' | 'square' | 'wide';
|
|
241
|
-
shape?: 'rectangle' | 'rounded';
|
|
242
|
-
focalPoint?: ImageFocalPoint;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// ─── In-Page Tabs ──────────────────────────────────────
|
|
246
|
-
export interface InPageTab {
|
|
247
|
-
label: string;
|
|
248
|
-
content?: string;
|
|
249
|
-
icon?: string;
|
|
250
|
-
disabled?: boolean;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
export interface InPageTabsProps {
|
|
254
|
-
variant?: 'left-aligned' | 'full-width';
|
|
255
|
-
icon?: string;
|
|
256
|
-
active?: string;
|
|
257
|
-
tabsLabelledby?: string;
|
|
258
|
-
tabsLabel?: string;
|
|
259
|
-
/** @deprecated Use `tabsLabelledby` instead */
|
|
260
|
-
ariaLabelledby?: string;
|
|
261
|
-
tabs?: InPageTab[];
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// ─── Info Tag ───────────────────────────────────────────
|
|
265
|
-
export interface InfoTagProps {
|
|
266
|
-
variant?: 'info' | 'neutral' | 'scarcity' | 'local-product';
|
|
267
|
-
size?: 'small' | 'medium';
|
|
268
|
-
label?: string;
|
|
269
|
-
leadingIcon?: boolean;
|
|
270
|
-
leadingIconAsset?: string;
|
|
271
|
-
theme?: Theme;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
295
|
// ─── Input Checkbox ────────────────────────────────────
|
|
275
296
|
export interface InputCheckboxProps {
|
|
276
297
|
isIndividual?: boolean;
|
|
@@ -370,6 +391,122 @@ export interface InputTextProps {
|
|
|
370
391
|
theme?: Theme;
|
|
371
392
|
}
|
|
372
393
|
|
|
394
|
+
// ─── Textarea ──────────────────────────────────────────
|
|
395
|
+
export interface TextareaProps {
|
|
396
|
+
textareaValue?: string;
|
|
397
|
+
charCount?: number;
|
|
398
|
+
disabled?: boolean;
|
|
399
|
+
theme?: Theme;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// ─── Hero ──────────────────────────────────────────────
|
|
403
|
+
export interface HeroProps {
|
|
404
|
+
alignment?: 'left' | 'right' | 'center';
|
|
405
|
+
reduced?: boolean;
|
|
406
|
+
variant?: 'default' | 'default slim' | 'flagship' | 'flagship slim' | 'illustration';
|
|
407
|
+
heading?: string;
|
|
408
|
+
content?: string;
|
|
409
|
+
hideButton?: boolean;
|
|
410
|
+
buttonLabel?: string;
|
|
411
|
+
caveat?: string;
|
|
412
|
+
imageUrl?: string;
|
|
413
|
+
altText?: string;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// ─── Highlight Panel ───────────────────────────────────
|
|
417
|
+
export interface HighlightPanelProps {
|
|
418
|
+
variant?: 'no heading' | 'default' | 'strong' | 'brand';
|
|
419
|
+
title?: string;
|
|
420
|
+
subtitle?: string;
|
|
421
|
+
icon?: string;
|
|
422
|
+
collapsible?: boolean;
|
|
423
|
+
open?: boolean;
|
|
424
|
+
content?: string;
|
|
425
|
+
footer?: string;
|
|
426
|
+
divider?: boolean;
|
|
427
|
+
theme?: Theme;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// ─── Icon ────────────────────────────────────────────────
|
|
431
|
+
export interface IconProps {
|
|
432
|
+
type?: 'standard' | 'color' | 'bullet';
|
|
433
|
+
nameStandard?: string;
|
|
434
|
+
nameColor?: string;
|
|
435
|
+
nameBullet?: string;
|
|
436
|
+
size?: IconSize;
|
|
437
|
+
color?: string;
|
|
438
|
+
theme?: Theme;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// ─── Icon Button ─────────────────────────────────────────
|
|
442
|
+
export interface IconButtonProps {
|
|
443
|
+
element?: 'a' | 'button' | 'div';
|
|
444
|
+
variant?: ButtonVariantBase | 'ghost' | 'control' | 'shortlist';
|
|
445
|
+
size?: 'small' | 'medium' | 'large';
|
|
446
|
+
isDisabled?: boolean;
|
|
447
|
+
visibleLabel?: boolean;
|
|
448
|
+
labelRight?: boolean;
|
|
449
|
+
label?: string;
|
|
450
|
+
iconAsset?: string;
|
|
451
|
+
selected?: boolean;
|
|
452
|
+
theme?: Theme;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// ─── Image ─────────────────────────────────────────────
|
|
456
|
+
export interface ImageSrcItem {
|
|
457
|
+
url: string;
|
|
458
|
+
size: string;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
// prettier-ignore
|
|
462
|
+
export type ImageFocalPoint =
|
|
463
|
+
| 'top-left'
|
|
464
|
+
| 'top-center'
|
|
465
|
+
| 'top-right'
|
|
466
|
+
| 'center-left'
|
|
467
|
+
| 'center'
|
|
468
|
+
| 'center-right'
|
|
469
|
+
| 'bottom-left'
|
|
470
|
+
| 'bottom-center'
|
|
471
|
+
| 'bottom-right';
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Responsive focal points, keyed by breakpoint (matching the library's
|
|
475
|
+
* breakpoint scale). `base` applies below the `xs` breakpoint; any breakpoint
|
|
476
|
+
* may be omitted — omitted breakpoints inherit the next smallest defined value
|
|
477
|
+
* (base → xs → sm → md → lg), falling back to `center`.
|
|
478
|
+
*/
|
|
479
|
+
export interface ImageResponsiveFocalPoint {
|
|
480
|
+
base?: ImageFocalPoint;
|
|
481
|
+
xs?: ImageFocalPoint;
|
|
482
|
+
sm?: ImageFocalPoint;
|
|
483
|
+
md?: ImageFocalPoint;
|
|
484
|
+
lg?: ImageFocalPoint;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
export interface ImageProps {
|
|
488
|
+
altText: string;
|
|
489
|
+
imageUrl: string;
|
|
490
|
+
srcset?: ImageSrcItem[];
|
|
491
|
+
ratio?: 'landscape' | 'panoramic' | 'portrait' | 'square' | 'wide';
|
|
492
|
+
shape?: 'rectangle' | 'rounded';
|
|
493
|
+
/**
|
|
494
|
+
* Focal point for the image. Accepts a single value applied at all breakpoints,
|
|
495
|
+
* or an object with per-breakpoint values for responsive focal points.
|
|
496
|
+
*/
|
|
497
|
+
focalPoint?: ImageFocalPoint | ImageResponsiveFocalPoint;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// ─── Info Tag ───────────────────────────────────────────
|
|
501
|
+
export interface InfoTagProps {
|
|
502
|
+
variant?: 'info' | 'neutral' | 'scarcity' | 'local-product' | 'platinum';
|
|
503
|
+
size?: 'small' | 'medium';
|
|
504
|
+
label?: string;
|
|
505
|
+
leadingIcon?: boolean;
|
|
506
|
+
leadingIconAsset?: string;
|
|
507
|
+
theme?: Theme;
|
|
508
|
+
}
|
|
509
|
+
|
|
373
510
|
// ─── Link ────────────────────────────────────────────────
|
|
374
511
|
export interface LinkProps {
|
|
375
512
|
href?: string;
|
|
@@ -482,26 +619,6 @@ export interface PriceBoxProps {
|
|
|
482
619
|
footerHtml?: string;
|
|
483
620
|
}
|
|
484
621
|
|
|
485
|
-
// ─── Card Promotion ───────────────────────────────────────
|
|
486
|
-
export interface CardPromotionProps {
|
|
487
|
-
type?: 'default' | 'promo-code';
|
|
488
|
-
condensed?: boolean;
|
|
489
|
-
headingLevel?: HeadingLevel;
|
|
490
|
-
headline?: string;
|
|
491
|
-
scarcityLabel?: string;
|
|
492
|
-
conditions?: string;
|
|
493
|
-
linkLabel?: string;
|
|
494
|
-
icon?: string;
|
|
495
|
-
code?: string;
|
|
496
|
-
copied?: boolean;
|
|
497
|
-
copyLabel?: string;
|
|
498
|
-
copiedLabel?: string;
|
|
499
|
-
expired?: boolean;
|
|
500
|
-
expiredLabel?: string;
|
|
501
|
-
announcementLabel?: string;
|
|
502
|
-
theme?: Theme;
|
|
503
|
-
}
|
|
504
|
-
|
|
505
622
|
// ─── Promo Tag ──────────────────────────────────────────
|
|
506
623
|
export const PromoTagSizes = ['xsmall', 'small', 'medium', 'large', 'xlarge', 'xxlarge'] as const;
|
|
507
624
|
export type PromoTagSize = (typeof PromoTagSizes)[number];
|
|
@@ -515,7 +632,22 @@ export interface PromoTagProps {
|
|
|
515
632
|
theme?: Theme;
|
|
516
633
|
}
|
|
517
634
|
|
|
635
|
+
// ─── Ratings & Reviews ─────────────────────────────────
|
|
636
|
+
|
|
637
|
+
// ─── Ratings: shared ───────────────────────────────────
|
|
638
|
+
export type RangeIconsVariant = 'sun' | 'star' | 'tripadvisor' | 'tui-t' | 'customer' | 'holidaycheck';
|
|
639
|
+
export type RangeIconsSize = 'medium' | 'large';
|
|
640
|
+
|
|
641
|
+
export interface SchemaProps {
|
|
642
|
+
reviewCount?: number;
|
|
643
|
+
itemName?: string;
|
|
644
|
+
author?: string;
|
|
645
|
+
reviewAspect?: string;
|
|
646
|
+
}
|
|
647
|
+
|
|
518
648
|
// ─── Ratings: Customer review ─────────────────────────
|
|
649
|
+
export type NumericalType = 'rating' | 'filter';
|
|
650
|
+
|
|
519
651
|
export interface CustomerReviewProps {
|
|
520
652
|
type?: NumericalType;
|
|
521
653
|
variant?: 'brand' | 'tripadvisor';
|
|
@@ -530,7 +662,6 @@ export interface CustomerReviewProps {
|
|
|
530
662
|
}
|
|
531
663
|
|
|
532
664
|
// ─── Ratings: Numerical (9/10) ─────────────────────────
|
|
533
|
-
export type NumericalType = 'rating' | 'filter';
|
|
534
665
|
export type NumericalVariant = 'brand' | 'alt';
|
|
535
666
|
|
|
536
667
|
export interface NumericalProps {
|
|
@@ -575,7 +706,7 @@ export interface RangeBarProps {
|
|
|
575
706
|
items?: { label: string; score: number; accessibleLabel?: string }[];
|
|
576
707
|
}
|
|
577
708
|
|
|
578
|
-
// ─── Ratings: Range icons
|
|
709
|
+
// ─── Ratings: Range icons ──────────────────────────────
|
|
579
710
|
export interface RangeIconsProps {
|
|
580
711
|
variant?: RangeIconsVariant;
|
|
581
712
|
size?: RangeIconsSize;
|
|
@@ -615,17 +746,6 @@ export interface RangeIconsGroupProps {
|
|
|
615
746
|
theme?: Theme;
|
|
616
747
|
}
|
|
617
748
|
|
|
618
|
-
// ─── Ratings: shared ───────────────────────────────────
|
|
619
|
-
export type RangeIconsVariant = 'sun' | 'star' | 'tripadvisor' | 'tui-t' | 'customer' | 'holidaycheck';
|
|
620
|
-
export type RangeIconsSize = 'medium' | 'large';
|
|
621
|
-
|
|
622
|
-
export interface SchemaProps {
|
|
623
|
-
reviewCount?: number;
|
|
624
|
-
itemName?: string;
|
|
625
|
-
author?: string;
|
|
626
|
-
reviewAspect?: string;
|
|
627
|
-
}
|
|
628
|
-
|
|
629
749
|
// ─── Rich Text ─────────────────────────────────────────
|
|
630
750
|
export interface RichTextProps {
|
|
631
751
|
content?: string;
|
|
@@ -641,30 +761,6 @@ export interface ScrollerProps {
|
|
|
641
761
|
label?: string;
|
|
642
762
|
}
|
|
643
763
|
|
|
644
|
-
// ─── Search Card ───────────────────────────────────────
|
|
645
|
-
export interface SearchCardProps {
|
|
646
|
-
flagship?: boolean;
|
|
647
|
-
productLabel?: boolean;
|
|
648
|
-
gallery?: boolean;
|
|
649
|
-
quickview?: boolean;
|
|
650
|
-
promoArea?: boolean;
|
|
651
|
-
highlightsArea?: boolean;
|
|
652
|
-
toggleOpen?: string;
|
|
653
|
-
toggleClose?: string;
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
// ─── Product Card ──────────────────────────────────────
|
|
657
|
-
export interface ProductCardProps {
|
|
658
|
-
flagship?: boolean;
|
|
659
|
-
productLabel?: boolean;
|
|
660
|
-
gallery?: boolean;
|
|
661
|
-
quickview?: boolean;
|
|
662
|
-
promoArea?: boolean;
|
|
663
|
-
highlightsArea?: boolean;
|
|
664
|
-
toggleOpen?: string;
|
|
665
|
-
toggleClose?: string;
|
|
666
|
-
}
|
|
667
|
-
|
|
668
764
|
// ─── Show More Or Less ──────────────────────────────────
|
|
669
765
|
export interface ShowMoreOrLessProps {
|
|
670
766
|
isOpen?: boolean;
|
|
@@ -703,11 +799,66 @@ export interface SkeletonLayoutProps {
|
|
|
703
799
|
theme?: Theme;
|
|
704
800
|
}
|
|
705
801
|
|
|
706
|
-
// ───
|
|
707
|
-
export interface
|
|
708
|
-
|
|
709
|
-
|
|
802
|
+
// ─── Social Proofing ───────────────────────────────────
|
|
803
|
+
export interface SocialProofingProps {
|
|
804
|
+
theme?: Theme;
|
|
805
|
+
iconAsset?: string;
|
|
806
|
+
iconSize?: 'small';
|
|
807
|
+
hasIcon?: boolean;
|
|
808
|
+
closeLabel?: string;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
// ─── Tabs ──────────────────────────────────────────────
|
|
812
|
+
|
|
813
|
+
// ─── Anchor Tabs ───────────────────────────────────────
|
|
814
|
+
export interface AnchorTab {
|
|
815
|
+
label: string;
|
|
816
|
+
href: string;
|
|
817
|
+
icon?: string;
|
|
710
818
|
disabled?: boolean;
|
|
819
|
+
sectionContent?: string;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
export interface AnchorTabsProps {
|
|
823
|
+
icon?: string;
|
|
824
|
+
tabsLabelledby?: string;
|
|
825
|
+
tabsLabel?: string;
|
|
826
|
+
/** @deprecated Use `tabsLabelledby` instead */
|
|
827
|
+
ariaLabelledby?: string;
|
|
828
|
+
tabs?: AnchorTab[];
|
|
829
|
+
sticky?: boolean;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
// ─── In-Page Tabs ──────────────────────────────────────
|
|
833
|
+
export interface InPageTab {
|
|
834
|
+
label: string;
|
|
835
|
+
content?: string;
|
|
836
|
+
icon?: string;
|
|
837
|
+
disabled?: boolean;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
export interface InPageTabsProps {
|
|
841
|
+
variant?: 'left-aligned' | 'full-width';
|
|
842
|
+
icon?: string;
|
|
843
|
+
active?: string;
|
|
844
|
+
tabsLabelledby?: string;
|
|
845
|
+
tabsLabel?: string;
|
|
846
|
+
/** @deprecated Use `tabsLabelledby` instead */
|
|
847
|
+
ariaLabelledby?: string;
|
|
848
|
+
tabs?: InPageTab[];
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
// ─── Timeline ───────────────────────────────────────────
|
|
852
|
+
export interface TimelineItemProps {
|
|
853
|
+
icon?: string;
|
|
854
|
+
content?: string;
|
|
855
|
+
gap?: boolean;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
export interface TimelineProps {
|
|
859
|
+
items?: TimelineItemProps[];
|
|
860
|
+
itemCount?: number;
|
|
861
|
+
gap?: boolean;
|
|
711
862
|
theme?: Theme;
|
|
712
863
|
}
|
|
713
864
|
|
|
@@ -721,7 +872,7 @@ export interface TooltipProps {
|
|
|
721
872
|
theme?: Theme;
|
|
722
873
|
}
|
|
723
874
|
|
|
724
|
-
// ─── Travel Aware Banner
|
|
875
|
+
// ─── Travel Aware Banner ────────────────────────────────
|
|
725
876
|
export interface TravelAwareBannerProps {
|
|
726
877
|
imageUrl?: string;
|
|
727
878
|
imageText?: string;
|
|
@@ -732,18 +883,11 @@ export interface TravelAwareBannerProps {
|
|
|
732
883
|
isExternal?: boolean;
|
|
733
884
|
}
|
|
734
885
|
|
|
735
|
-
//
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
iconAsset?: string;
|
|
739
|
-
iconSize?: 'small';
|
|
740
|
-
hasIcon?: boolean;
|
|
741
|
-
closeLabel?: string;
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
// ─── PATTERNS ────────────────────────────────────────────
|
|
745
|
-
// ─── Edit search ────────────────────────────────────────────
|
|
886
|
+
// ═══════════════════════════════════════════════════════════
|
|
887
|
+
// PATTERNS
|
|
888
|
+
// ═══════════════════════════════════════════════════════════
|
|
746
889
|
|
|
890
|
+
// ─── Edit Search ────────────────────────────────────────
|
|
747
891
|
export interface EditSearchProps {
|
|
748
892
|
variant?: 'back' | 'list';
|
|
749
893
|
heading?: string;
|
|
@@ -751,7 +895,24 @@ export interface EditSearchProps {
|
|
|
751
895
|
uniqueId?: string;
|
|
752
896
|
}
|
|
753
897
|
|
|
754
|
-
// ───
|
|
898
|
+
// ─── Reasons To Book ───────────────────────────────────
|
|
899
|
+
export interface ReasonToBookItem {
|
|
900
|
+
pictogram: string;
|
|
901
|
+
text: string;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
export interface ReasonsToBookProps {
|
|
905
|
+
heading?: string;
|
|
906
|
+
items?: ReasonToBookItem[];
|
|
907
|
+
linkLabel?: string;
|
|
908
|
+
carouselLabel?: string;
|
|
909
|
+
prevLabel?: string;
|
|
910
|
+
nextLabel?: string;
|
|
911
|
+
announcementLabel?: string;
|
|
912
|
+
theme?: Theme;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
// ─── Review Card ───────────────────────────────────────
|
|
755
916
|
export interface ReviewCardProps {
|
|
756
917
|
layout?: 'default' | 'compact' | 'dual';
|
|
757
918
|
switchLayout?: boolean;
|
|
@@ -759,7 +920,7 @@ export interface ReviewCardProps {
|
|
|
759
920
|
brand?: 'tripadvisor' | 'customer' | 'holidaycheck';
|
|
760
921
|
}
|
|
761
922
|
|
|
762
|
-
// ─── Review Summary
|
|
923
|
+
// ─── Review Summary ────────────────────────────────────
|
|
763
924
|
export interface ReviewSummaryProps {
|
|
764
925
|
brand?: 'tripadvisor' | 'customer';
|
|
765
926
|
}
|