@hotelcard/ui 0.0.12 → 0.0.15

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.

Potentially problematic release.


This version of @hotelcard/ui might be problematic. Click here for more details.

package/dist/index.d.cts CHANGED
@@ -3,21 +3,662 @@ import React__default, { ReactNode, ButtonHTMLAttributes } from 'react';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import * as i18next from 'i18next';
5
5
 
6
+ var button = {
7
+ order: "Order",
8
+ "order-navigation": "Join",
9
+ "order-hc": "Order HotelCard",
10
+ "my-account": "My account",
11
+ search: "Search",
12
+ "back-to-top": "Back to top"
13
+ };
14
+ var link = {
15
+ "member-benefits": "Member Benefits",
16
+ "view-all-hotels": "View all hotel deals",
17
+ "search-by-map": "Map search",
18
+ "search-by-region": "Hotels by region",
19
+ "search-by-experience": "Hotels by experience",
20
+ "travel-inspiration": "Travel inspiration",
21
+ "booking-tips-and-tricks": "Booking tips",
22
+ home: "Home",
23
+ "all-hotel-deals": "All hotel deals",
24
+ "search-results": "Search results"
25
+ };
26
+ var general = {
27
+ "signed-out": "Log in and book",
28
+ "room-price": "from CHF xxx / room",
29
+ guarantee: "14-day money-back guarantee",
30
+ contact: "More questions? Contact us.",
31
+ "breakfast-included": "Breakfast included",
32
+ "free-cancellation": "Free cancellation",
33
+ "suggested-destinations": "Not sure where to travel next?",
34
+ "when-months": "When do you want to go?",
35
+ "hotel-deals-found": "hotel deals found",
36
+ "no-results": "Explore different destinations, change your dates, or remove some filters.",
37
+ "unavailable-for-selected-days": "Unavailable for selected dates.",
38
+ "cant-accommodate-all": "Hotel can’t accommodate all guests.",
39
+ "reset-destination": "Reset destination search to use region filters."
40
+ };
41
+ var label = {
42
+ "price-from": "from ",
43
+ "price-for": "/ room",
44
+ "per-room-night": "per room & night from",
45
+ "new": "New",
46
+ anytime: "Anytime",
47
+ anywhere: "All destinations",
48
+ dates: "Dates",
49
+ flexible: "Flexible",
50
+ where: "Where",
51
+ when: "When",
52
+ who: "Who",
53
+ nearby: "Nearby",
54
+ hotels: "Hotel",
55
+ filter: "Filter",
56
+ sort: "Sort",
57
+ map: "Map",
58
+ rating: "Rating",
59
+ "rating-excellent": "Excellent",
60
+ "rating-very-good": "Very good",
61
+ "rating-good": "Good",
62
+ "rating-fair": "Fair",
63
+ "rating-none": "No rating"
64
+ };
65
+ var product = {
66
+ "6m": "6-month subscription",
67
+ "1y": "1-year subscription",
68
+ "2y": "2-year subscription",
69
+ "3y": "3-year subscription",
70
+ "price-6m": "79.-",
71
+ "price-6m-disc": "59.-",
72
+ "price-1y": "99.-",
73
+ "price-1y-disc": "79.-",
74
+ "price-2y": "198.-",
75
+ "price-2y-disc": "173.-",
76
+ "price-3y": "297.-",
77
+ "price-3y-disc": "247.-",
78
+ "price-gift": "99.-",
79
+ "price-gift-disc": "59.-"
80
+ };
81
+ var subheadline = {
82
+ "your-hc": "Your HotelCard",
83
+ "popular-hotels": "Popular hotel deals",
84
+ "no-results": "Explore different destinations, change your dates, or remove some filters.",
85
+ "sort-by": "Sort by"
86
+ };
87
+ var form = {
88
+ guests: "guests",
89
+ guest: "guest",
90
+ adults: "Adults",
91
+ children: "Children",
92
+ pet: "Pet",
93
+ "age-of-child": "Child’s age",
94
+ age: "Age",
95
+ "age-error": "Please select age"
96
+ };
97
+ var filter = {
98
+ filters: "Filters",
99
+ destination: "Destination",
100
+ experience: "Experience",
101
+ "show-all": "Show all",
102
+ price: "Price",
103
+ discount: "Discount",
104
+ services: "Services",
105
+ meals: "Meals",
106
+ "hotel-category": "Hotel category",
107
+ reviews: "Reviews",
108
+ mobility: "Mobility",
109
+ "wellness-spa": "Wellness & Spa",
110
+ "price-high-low": "Price high to low",
111
+ "price-low-high": "Price low to high",
112
+ "best-rating": "Best guest rating",
113
+ "most-popular": "Most popular",
114
+ "newest-hotels": "Newest",
115
+ relevance: "Relevance",
116
+ selected: "Selected",
117
+ "clear-all": "Clear all",
118
+ options: "Options",
119
+ "hotellerie-suisse": "Classification HotellerieSuisse",
120
+ trustyou: "Reviews from travelers on TrustYou®",
121
+ "select-all": "Select all",
122
+ reset: "Reset",
123
+ "breakfast-included": "Breakfast included"
124
+ };
125
+ var headline = {
126
+ "no-results": "No stays match your search right now"
127
+ };
128
+ var en = {
129
+ button: button,
130
+ link: link,
131
+ general: general,
132
+ label: label,
133
+ product: product,
134
+ subheadline: subheadline,
135
+ form: form,
136
+ filter: filter,
137
+ headline: headline
138
+ };
139
+
140
+ declare const translations: {
141
+ readonly de: {
142
+ button: {
143
+ order: string;
144
+ "order-navigation": string;
145
+ "order-hc": string;
146
+ "my-account": string;
147
+ search: string;
148
+ "back-to-top": string;
149
+ };
150
+ link: {
151
+ "member-benefits": string;
152
+ "view-all-hotels": string;
153
+ "search-by-map": string;
154
+ "search-by-region": string;
155
+ "search-by-experience": string;
156
+ "travel-inspiration": string;
157
+ "booking-tips-and-tricks": string;
158
+ home: string;
159
+ "all-hotel-deals": string;
160
+ "search-results": string;
161
+ };
162
+ general: {
163
+ "signed-out": string;
164
+ "room-price": string;
165
+ guarantee: string;
166
+ contact: string;
167
+ "breakfast-included": string;
168
+ "free-cancellation": string;
169
+ "suggested-destinations": string;
170
+ "when-months": string;
171
+ "hotel-deals-found": string;
172
+ "no-results": string;
173
+ "unavailable-for-selected-days": string;
174
+ "cant-accommodate-all": string;
175
+ "reset-destination": string;
176
+ };
177
+ label: {
178
+ "price-from": string;
179
+ "price-for": string;
180
+ "per-room-night": string;
181
+ new: string;
182
+ anytime: string;
183
+ anywhere: string;
184
+ dates: string;
185
+ flexible: string;
186
+ where: string;
187
+ when: string;
188
+ who: string;
189
+ nearby: string;
190
+ hotels: string;
191
+ filter: string;
192
+ sort: string;
193
+ map: string;
194
+ rating: string;
195
+ "rating-excellent": string;
196
+ "rating-very-good": string;
197
+ "rating-good": string;
198
+ "rating-fair": string;
199
+ "rating-none": string;
200
+ };
201
+ product: {
202
+ "6m": string;
203
+ "1y": string;
204
+ "2y": string;
205
+ "3y": string;
206
+ "price-6m": string;
207
+ "price-6m-disc": string;
208
+ "price-1y": string;
209
+ "price-1y-disc": string;
210
+ "price-2y": string;
211
+ "price-2y-disc": string;
212
+ "price-3y": string;
213
+ "price-3y-disc": string;
214
+ "price-gift": string;
215
+ "price-gift-disc": string;
216
+ };
217
+ subheadline: {
218
+ "your-hc": string;
219
+ "popular-hotels": string;
220
+ "no-results": string;
221
+ "sort-by": string;
222
+ };
223
+ form: {
224
+ guests: string;
225
+ guest: string;
226
+ adults: string;
227
+ children: string;
228
+ pet: string;
229
+ "age-of-child": string;
230
+ age: string;
231
+ "age-error": string;
232
+ };
233
+ filter: {
234
+ filters: string;
235
+ destination: string;
236
+ experience: string;
237
+ "show-all": string;
238
+ price: string;
239
+ discount: string;
240
+ services: string;
241
+ meals: string;
242
+ "hotel-category": string;
243
+ reviews: string;
244
+ mobility: string;
245
+ "wellness-spa": string;
246
+ "price-high-low": string;
247
+ "price-low-high": string;
248
+ "best-rating": string;
249
+ "most-popular": string;
250
+ "newest-hotels": string;
251
+ relevance: string;
252
+ selected: string;
253
+ "clear-all": string;
254
+ options: string;
255
+ "hotellerie-suisse": string;
256
+ trustyou: string;
257
+ "select-all": string;
258
+ reset: string;
259
+ "breakfast-included": string;
260
+ };
261
+ headline: {
262
+ "no-results": string;
263
+ };
264
+ };
265
+ readonly en: {
266
+ button: {
267
+ order: string;
268
+ "order-navigation": string;
269
+ "order-hc": string;
270
+ "my-account": string;
271
+ search: string;
272
+ "back-to-top": string;
273
+ };
274
+ link: {
275
+ "member-benefits": string;
276
+ "view-all-hotels": string;
277
+ "search-by-map": string;
278
+ "search-by-region": string;
279
+ "search-by-experience": string;
280
+ "travel-inspiration": string;
281
+ "booking-tips-and-tricks": string;
282
+ home: string;
283
+ "all-hotel-deals": string;
284
+ "search-results": string;
285
+ };
286
+ general: {
287
+ "signed-out": string;
288
+ "room-price": string;
289
+ guarantee: string;
290
+ contact: string;
291
+ "breakfast-included": string;
292
+ "free-cancellation": string;
293
+ "suggested-destinations": string;
294
+ "when-months": string;
295
+ "hotel-deals-found": string;
296
+ "no-results": string;
297
+ "unavailable-for-selected-days": string;
298
+ "cant-accommodate-all": string;
299
+ "reset-destination": string;
300
+ };
301
+ label: {
302
+ "price-from": string;
303
+ "price-for": string;
304
+ "per-room-night": string;
305
+ new: string;
306
+ anytime: string;
307
+ anywhere: string;
308
+ dates: string;
309
+ flexible: string;
310
+ where: string;
311
+ when: string;
312
+ who: string;
313
+ nearby: string;
314
+ hotels: string;
315
+ filter: string;
316
+ sort: string;
317
+ map: string;
318
+ rating: string;
319
+ "rating-excellent": string;
320
+ "rating-very-good": string;
321
+ "rating-good": string;
322
+ "rating-fair": string;
323
+ "rating-none": string;
324
+ };
325
+ product: {
326
+ "6m": string;
327
+ "1y": string;
328
+ "2y": string;
329
+ "3y": string;
330
+ "price-6m": string;
331
+ "price-6m-disc": string;
332
+ "price-1y": string;
333
+ "price-1y-disc": string;
334
+ "price-2y": string;
335
+ "price-2y-disc": string;
336
+ "price-3y": string;
337
+ "price-3y-disc": string;
338
+ "price-gift": string;
339
+ "price-gift-disc": string;
340
+ };
341
+ subheadline: {
342
+ "your-hc": string;
343
+ "popular-hotels": string;
344
+ "no-results": string;
345
+ "sort-by": string;
346
+ };
347
+ form: {
348
+ guests: string;
349
+ guest: string;
350
+ adults: string;
351
+ children: string;
352
+ pet: string;
353
+ "age-of-child": string;
354
+ age: string;
355
+ "age-error": string;
356
+ };
357
+ filter: {
358
+ filters: string;
359
+ destination: string;
360
+ experience: string;
361
+ "show-all": string;
362
+ price: string;
363
+ discount: string;
364
+ services: string;
365
+ meals: string;
366
+ "hotel-category": string;
367
+ reviews: string;
368
+ mobility: string;
369
+ "wellness-spa": string;
370
+ "price-high-low": string;
371
+ "price-low-high": string;
372
+ "best-rating": string;
373
+ "most-popular": string;
374
+ "newest-hotels": string;
375
+ relevance: string;
376
+ selected: string;
377
+ "clear-all": string;
378
+ options: string;
379
+ "hotellerie-suisse": string;
380
+ trustyou: string;
381
+ "select-all": string;
382
+ reset: string;
383
+ "breakfast-included": string;
384
+ };
385
+ headline: {
386
+ "no-results": string;
387
+ };
388
+ };
389
+ readonly fr: {
390
+ button: {
391
+ order: string;
392
+ "order-navigation": string;
393
+ "order-hc": string;
394
+ "my-account": string;
395
+ search: string;
396
+ "back-to-top": string;
397
+ };
398
+ link: {
399
+ "member-benefits": string;
400
+ "view-all-hotels": string;
401
+ "search-by-map": string;
402
+ "search-by-region": string;
403
+ "search-by-experience": string;
404
+ "travel-inspiration": string;
405
+ "booking-tips-and-tricks": string;
406
+ home: string;
407
+ "all-hotel-deals": string;
408
+ "search-results": string;
409
+ };
410
+ general: {
411
+ "signed-out": string;
412
+ "room-price": string;
413
+ guarantee: string;
414
+ contact: string;
415
+ "breakfast-included": string;
416
+ "free-cancellation": string;
417
+ "suggested-destinations": string;
418
+ "when-months": string;
419
+ "hotel-deals-found": string;
420
+ "no-results": string;
421
+ "unavailable-for-selected-days": string;
422
+ "cant-accommodate-all": string;
423
+ "reset-destination": string;
424
+ };
425
+ label: {
426
+ "price-from": string;
427
+ "price-for": string;
428
+ "per-room-night": string;
429
+ new: string;
430
+ anytime: string;
431
+ anywhere: string;
432
+ dates: string;
433
+ flexible: string;
434
+ where: string;
435
+ when: string;
436
+ who: string;
437
+ nearby: string;
438
+ hotels: string;
439
+ filter: string;
440
+ sort: string;
441
+ map: string;
442
+ rating: string;
443
+ "rating-excellent": string;
444
+ "rating-very-good": string;
445
+ "rating-good": string;
446
+ "rating-fair": string;
447
+ "rating-none": string;
448
+ };
449
+ product: {
450
+ "6m": string;
451
+ "1y": string;
452
+ "2y": string;
453
+ "3y": string;
454
+ "price-6m": string;
455
+ "price-6m-disc": string;
456
+ "price-1y": string;
457
+ "price-1y-disc": string;
458
+ "price-2y": string;
459
+ "price-2y-disc": string;
460
+ "price-3y": string;
461
+ "price-3y-disc": string;
462
+ "price-gift": string;
463
+ "price-gift-disc": string;
464
+ };
465
+ subheadline: {
466
+ "your-hc": string;
467
+ "popular-hotels": string;
468
+ "no-results": string;
469
+ "sort-by": string;
470
+ };
471
+ form: {
472
+ guests: string;
473
+ guest: string;
474
+ adults: string;
475
+ children: string;
476
+ pet: string;
477
+ "age-of-child": string;
478
+ age: string;
479
+ "age-error": string;
480
+ };
481
+ filter: {
482
+ filters: string;
483
+ destination: string;
484
+ experience: string;
485
+ "show-all": string;
486
+ price: string;
487
+ discount: string;
488
+ services: string;
489
+ meals: string;
490
+ "hotel-category": string;
491
+ reviews: string;
492
+ mobility: string;
493
+ "wellness-spa": string;
494
+ "price-high-low": string;
495
+ "price-low-high": string;
496
+ "best-rating": string;
497
+ "most-popular": string;
498
+ "newest-hotels": string;
499
+ relevance: string;
500
+ selected: string;
501
+ "clear-all": string;
502
+ options: string;
503
+ "hotellerie-suisse": string;
504
+ trustyou: string;
505
+ "select-all": string;
506
+ reset: string;
507
+ "breakfast-included": string;
508
+ };
509
+ headline: {
510
+ "no-results": string;
511
+ };
512
+ };
513
+ readonly it: {
514
+ button: {
515
+ order: string;
516
+ "order-navigation": string;
517
+ "order-hc": string;
518
+ "my-account": string;
519
+ search: string;
520
+ "back-to-top": string;
521
+ };
522
+ link: {
523
+ "member-benefits": string;
524
+ "view-all-hotels": string;
525
+ "search-by-map": string;
526
+ "search-by-region": string;
527
+ "search-by-experience": string;
528
+ "travel-inspiration": string;
529
+ "booking-tips-and-tricks": string;
530
+ home: string;
531
+ "all-hotel-deals": string;
532
+ "search-results": string;
533
+ };
534
+ general: {
535
+ "signed-out": string;
536
+ "room-price": string;
537
+ guarantee: string;
538
+ contact: string;
539
+ "breakfast-included": string;
540
+ "free-cancellation": string;
541
+ "suggested-destinations": string;
542
+ "when-months": string;
543
+ "hotel-deals-found": string;
544
+ "no-results": string;
545
+ "unavailable-for-selected-days": string;
546
+ "cant-accommodate-all": string;
547
+ "reset-destination": string;
548
+ };
549
+ label: {
550
+ "price-from": string;
551
+ "price-for": string;
552
+ "per-room-night": string;
553
+ new: string;
554
+ anytime: string;
555
+ anywhere: string;
556
+ dates: string;
557
+ flexible: string;
558
+ where: string;
559
+ when: string;
560
+ who: string;
561
+ nearby: string;
562
+ hotels: string;
563
+ filter: string;
564
+ sort: string;
565
+ map: string;
566
+ rating: string;
567
+ "rating-excellent": string;
568
+ "rating-very-good": string;
569
+ "rating-good": string;
570
+ "rating-fair": string;
571
+ "rating-none": string;
572
+ };
573
+ product: {
574
+ "6m": string;
575
+ "1y": string;
576
+ "2y": string;
577
+ "3y": string;
578
+ "price-6m": string;
579
+ "price-6m-disc": string;
580
+ "price-1y": string;
581
+ "price-1y-disc": string;
582
+ "price-2y": string;
583
+ "price-2y-disc": string;
584
+ "price-3y": string;
585
+ "price-3y-disc": string;
586
+ "price-gift": string;
587
+ "price-gift-disc": string;
588
+ };
589
+ subheadline: {
590
+ "your-hc": string;
591
+ "popular-hotels": string;
592
+ "no-results": string;
593
+ "sort-by": string;
594
+ };
595
+ form: {
596
+ guests: string;
597
+ guest: string;
598
+ adults: string;
599
+ children: string;
600
+ pet: string;
601
+ "age-of-child": string;
602
+ age: string;
603
+ "age-error": string;
604
+ };
605
+ filter: {
606
+ filters: string;
607
+ destination: string;
608
+ experience: string;
609
+ "show-all": string;
610
+ price: string;
611
+ discount: string;
612
+ services: string;
613
+ meals: string;
614
+ "hotel-category": string;
615
+ reviews: string;
616
+ mobility: string;
617
+ "wellness-spa": string;
618
+ "price-high-low": string;
619
+ "price-low-high": string;
620
+ "best-rating": string;
621
+ "most-popular": string;
622
+ "newest-hotels": string;
623
+ relevance: string;
624
+ selected: string;
625
+ "clear-all": string;
626
+ options: string;
627
+ "hotellerie-suisse": string;
628
+ trustyou: string;
629
+ "select-all": string;
630
+ reset: string;
631
+ "breakfast-included": string;
632
+ };
633
+ headline: {
634
+ "no-results": string;
635
+ };
636
+ };
637
+ };
638
+ type Locale = keyof typeof translations;
639
+ type TranslationKeys = typeof en;
640
+
641
+ /** Translation function type */
642
+ type TranslateFunction$1 = (key: string, fallback?: string) => string;
6
643
  interface UIContextValue {
7
644
  /** Current locale (e.g., 'de', 'en', 'fr', 'it') */
8
- locale: string;
645
+ locale: Locale;
9
646
  /** Currency code (e.g., 'CHF', 'EUR') */
10
647
  currency: string;
11
648
  /** Whether the app is running on desktop (default: false for mobile-first) */
12
649
  isDesktop: boolean;
650
+ /** Translation function - looks up keys from internal translations */
651
+ t: TranslateFunction$1;
13
652
  }
14
653
  interface HotelCardUIProviderProps {
15
654
  /** Current locale */
16
- locale?: string;
655
+ locale?: Locale;
17
656
  /** Currency code */
18
657
  currency?: string;
19
658
  /** Whether running on desktop */
20
659
  isDesktop?: boolean;
660
+ /** Optional custom translation function (overrides internal translations) */
661
+ t?: TranslateFunction$1;
21
662
  children: ReactNode;
22
663
  }
23
664
  /**
@@ -318,35 +959,6 @@ interface CardProps {
318
959
 
319
960
  declare const Card: React__default.FC<CardProps>;
320
961
 
321
- interface CompactCardBadge {
322
- text: string;
323
- variant?: 'primary' | 'secondary';
324
- }
325
- interface CompactCardProps {
326
- /** Image URL for the card */
327
- image?: string;
328
- /** Alt text for accessibility */
329
- imageAlt?: string;
330
- /** Main label/title text */
331
- label?: string;
332
- /** Price text */
333
- price?: string;
334
- /** Rating value (1-6, 6 = Swiss Lodge) */
335
- stars?: number;
336
- /** Superior hotel indicator */
337
- isSuperior?: boolean;
338
- /** Badge configuration */
339
- badge?: CompactCardBadge;
340
- /** Click handler */
341
- onClick?: () => void;
342
- /** Additional CSS classes */
343
- className?: string;
344
- /** Label for Swiss Lodge (rating = 6), e.g., "Swiss Lodge" */
345
- swissLodgeLabel?: string;
346
- }
347
-
348
- declare const CompactCard: React__default.FC<CompactCardProps>;
349
-
350
962
  interface DropdownOption {
351
963
  value: string;
352
964
  label: string;
@@ -533,20 +1145,6 @@ interface DateRange {
533
1145
  start: string | null;
534
1146
  end: string | null;
535
1147
  }
536
- interface WhenContentLabels {
537
- /** "When" section title (expanded variant only) */
538
- when?: string;
539
- /** "Dates" tab label */
540
- dates?: string;
541
- /** "Flexible" tab label */
542
- flexible?: string;
543
- /** "Apply" button label */
544
- apply?: string;
545
- /** "Select months" heading */
546
- selectMonths?: string;
547
- /** "Anytime" button label */
548
- anytime?: string;
549
- }
550
1148
  interface WhenContentProps {
551
1149
  /** Initial date range */
552
1150
  initialDateRange?: DateRange;
@@ -564,8 +1162,6 @@ interface WhenContentProps {
564
1162
  onApply?: () => void;
565
1163
  /** Additional class name */
566
1164
  className?: string;
567
- /** Labels for all text content - consuming app provides translations */
568
- labels?: WhenContentLabels;
569
1165
  /** Override locale for date formatting (defaults to context locale) */
570
1166
  locale?: string;
571
1167
  }
@@ -577,6 +1173,8 @@ interface WhenContentProps {
577
1173
  * - Calendar view for specific date range selection
578
1174
  * - Month chips grid for flexible month selection
579
1175
  * - "Anytime" option for no date filter
1176
+ *
1177
+ * Translations handled internally via UIContext.
580
1178
  */
581
1179
  declare const WhenContent: React__default.FC<WhenContentProps>;
582
1180
 
@@ -624,32 +1222,6 @@ interface ChildAgeError {
624
1222
  index: number;
625
1223
  message: string;
626
1224
  }
627
- /**
628
- * Labels for GuestContent component
629
- * All text is passed as props - consuming apps provide translations
630
- */
631
- interface GuestContentLabels {
632
- /** Label for adults row (e.g., "Adults") */
633
- adults?: string;
634
- /** Label for children row (e.g., "Children") */
635
- children?: string;
636
- /** Label for pet toggle (e.g., "Pet") */
637
- pet?: string;
638
- /** Label for child age dropdown (e.g., "Age of child") */
639
- ageOfChild?: string;
640
- /** Placeholder for age dropdown (e.g., "Age") */
641
- age?: string;
642
- /** Aria label for decrease adults button */
643
- decreaseAdults?: string;
644
- /** Aria label for increase adults button */
645
- increaseAdults?: string;
646
- /** Aria label for decrease children button */
647
- decreaseChildren?: string;
648
- /** Aria label for increase children button */
649
- increaseChildren?: string;
650
- /** Aria label for pet toggle */
651
- togglePets?: string;
652
- }
653
1225
  interface GuestContentProps {
654
1226
  /** Current guest counts */
655
1227
  guests: GuestCounts;
@@ -667,19 +1239,109 @@ interface GuestContentProps {
667
1239
  childAgeErrors?: ChildAgeError[];
668
1240
  /** Called when an error is cleared (user selects an age) */
669
1241
  onErrorClear?: (index: number) => void;
670
- /** Labels for all text content */
671
- labels?: GuestContentLabels;
672
1242
  }
673
1243
  /**
674
1244
  * GuestContent - Shared guest selection UI
675
1245
  *
676
1246
  * Used by both desktop GuestSelector dropdown and mobile SearchModal.
677
1247
  * Contains adults counter, children counter with age dropdowns, and optional pet toggle.
678
- *
679
- * All text labels are passed as props - consuming apps provide translations.
1248
+ * Translations handled internally via UIContext.
680
1249
  */
681
1250
  declare const GuestContent: React__default.FC<GuestContentProps>;
682
1251
 
1252
+ /**
1253
+ * HotelCard Component Types
1254
+ *
1255
+ * Shared hotel card for search results. Platform-agnostic design.
1256
+ * Translations handled internally via UIContext.
1257
+ */
1258
+ /**
1259
+ * Hotel data structure for the card
1260
+ */
1261
+ interface HotelCardHotel {
1262
+ id: string;
1263
+ name: string;
1264
+ slug: string;
1265
+ stars: number;
1266
+ isSuperior?: boolean;
1267
+ rating: number;
1268
+ location: string;
1269
+ images: string[];
1270
+ isFavorite: boolean;
1271
+ benefits: Array<{
1272
+ id: string;
1273
+ label: string;
1274
+ }>;
1275
+ isAvailable?: boolean;
1276
+ currency?: string;
1277
+ price: {
1278
+ current: number;
1279
+ original?: number;
1280
+ discount?: number;
1281
+ };
1282
+ usp?: string;
1283
+ badges?: string[];
1284
+ }
1285
+ interface HotelCardProps {
1286
+ /** Hotel data */
1287
+ hotel: HotelCardHotel;
1288
+ /** Called when favorite button is clicked */
1289
+ onFavoriteClick: () => void;
1290
+ /** Called when card content is clicked (for navigation) */
1291
+ onContentClick?: () => void;
1292
+ /** Additional class name */
1293
+ className?: string;
1294
+ }
1295
+ interface HotelCardImageProps {
1296
+ images: string[];
1297
+ hotelName: string;
1298
+ badges?: string[];
1299
+ isFavorite: boolean;
1300
+ onFavoriteClick: () => void;
1301
+ }
1302
+ interface HotelCardContentProps {
1303
+ name: string;
1304
+ stars: number;
1305
+ isSuperior?: boolean;
1306
+ rating: number;
1307
+ location: string;
1308
+ benefits: Array<{
1309
+ id: string;
1310
+ label: string;
1311
+ }>;
1312
+ price: {
1313
+ current: number;
1314
+ original?: number;
1315
+ discount?: number;
1316
+ };
1317
+ currency?: string;
1318
+ isAvailable?: boolean;
1319
+ usp?: string;
1320
+ onClick?: () => void;
1321
+ }
1322
+
1323
+ /**
1324
+ * HotelCard Component
1325
+ *
1326
+ * A presentational card component for displaying hotel information in search results.
1327
+ * Platform-agnostic - navigation and auth logic should be handled by consuming apps.
1328
+ * Translations handled internally via UIContext.
1329
+ *
1330
+ * @example
1331
+ * ```tsx
1332
+ * <HotelCard
1333
+ * hotel={hotelData}
1334
+ * onFavoriteClick={() => toggleFavorite(hotelData.id)}
1335
+ * onContentClick={() => navigate(`/hotel/${hotelData.slug}`)}
1336
+ * />
1337
+ * ```
1338
+ */
1339
+ declare const HotelCard: React__default.FC<HotelCardProps>;
1340
+
1341
+ declare const HotelCardImage: React__default.FC<HotelCardImageProps>;
1342
+
1343
+ declare const HotelCardContent: React__default.FC<HotelCardContentProps>;
1344
+
683
1345
  interface HeartIconProps {
684
1346
  filled?: boolean;
685
1347
  className?: string;
@@ -762,7 +1424,7 @@ declare const useResponsive: () => {
762
1424
  * ```
763
1425
  */
764
1426
  declare const useWindowData: () => {
765
- locale: string;
1427
+ locale: "de" | "en" | "fr" | "it";
766
1428
  currency: string;
767
1429
  };
768
1430
 
@@ -874,4 +1536,4 @@ interface SearchFilters {
874
1536
  regions?: string[];
875
1537
  }
876
1538
 
877
- export { type Address, Badge, type BadgeProps, type BenefitItem, Benefits, type BenefitsProps, Block, type BlockProps, type Booking, Button, type ButtonProps, Card, type CardBadge, type CardProps, type CardRatingInfo, Checkbox, type CheckboxProps, type CheckboxSize, ChevronLeftIcon, ChevronRightIcon, type ChildAgeError, Chip, type ChipProps, type ChipSize, type ChipState, CompactCard, type CompactCardBadge, type CompactCardProps, type DateRange, DateSelector, type DateSelectorProps, Divider, type DividerProps, Dropdown, type DropdownOption, type DropdownProps, DualCalendar, FAQ, type FAQItem, type FAQProps, GuestContent, type GuestContentLabels, type GuestContentProps, type GuestCounts, HeartIcon, type Hotel, HotelCardUIProvider, type HotelCardUIProviderProps, Input, type InputProps, type InputType, type Membership, Modal, type ModalProps, Pin, PinIcon, type PinProps, RadioButton, type RadioButtonProps, Rating, type RatingProps, ReviewCard, type ReviewCardProps, type SearchFilters, type SearchParams, SectionHeader, type SectionHeaderProps, StarIcon, type UIContextValue, type User, WhenContent, type WhenContentLabels, type WhenContentProps, calculateDiscount, formatDate, formatDateRange, formatPrice, useDebounce, useResponsive, useTranslation, useUIContext, useWindowData };
1539
+ export { type Address, Badge, type BadgeProps, type BenefitItem, Benefits, type BenefitsProps, Block, type BlockProps, type Booking, Button, type ButtonProps, Card, type CardBadge, type CardProps, type CardRatingInfo, Checkbox, type CheckboxProps, type CheckboxSize, ChevronLeftIcon, ChevronRightIcon, type ChildAgeError, Chip, type ChipProps, type ChipSize, type ChipState, type DateRange, DateSelector, type DateSelectorProps, Divider, type DividerProps, Dropdown, type DropdownOption, type DropdownProps, DualCalendar, FAQ, type FAQItem, type FAQProps, GuestContent, type GuestContentProps, type GuestCounts, HeartIcon, type Hotel, HotelCard, HotelCardContent, type HotelCardContentProps, type HotelCardHotel, HotelCardImage, type HotelCardImageProps, type HotelCardProps, HotelCardUIProvider, type HotelCardUIProviderProps, Input, type InputProps, type InputType, type Locale, type Membership, Modal, type ModalProps, Pin, PinIcon, type PinProps, RadioButton, type RadioButtonProps, Rating, type RatingProps, ReviewCard, type ReviewCardProps, type SearchFilters, type SearchParams, SectionHeader, type SectionHeaderProps, StarIcon, type TranslateFunction$1 as TranslateFunction, type TranslationKeys, type UIContextValue, type User, WhenContent, type WhenContentProps, calculateDiscount, formatDate, formatDateRange, formatPrice, translations, useDebounce, useResponsive, useTranslation, useUIContext, useWindowData };