@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.
@@ -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
- // ─── Datepicker ────────────────────────────────────────
139
- export interface DatepickerProps {
140
- rangeSelection?: boolean;
141
- dualView?: boolean;
142
- scrollableMobile?: boolean;
143
- weekNumbers?: boolean;
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
- announceStart?: string;
154
- announceRange?: string;
155
- instructions?: string;
156
- locale?: string;
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 (Sun/Star/TUI/TripAdvisor/TUI-T) ─
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
- // ─── Textarea ──────────────────────────────────────────
707
- export interface TextareaProps {
708
- textareaValue?: string;
709
- charCount?: number;
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
- // ─── Social proofing ───────────────────────────────────────
736
- export interface SocialProofingProps {
737
- theme?: Theme;
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
- // ─── Review Card ───────────────────────────────────────────
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
  }