@hotelcard/ui 1.0.0-rc.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.
@@ -0,0 +1,1799 @@
1
+ import { ButtonHTMLAttributes } from 'react';
2
+ import { default as default_2 } from 'react';
3
+ import { ForwardRefExoticComponent } from 'react';
4
+ import { ReactNode } from 'react';
5
+ import { RefAttributes } from 'react';
6
+
7
+ export declare const Badge: default_2.FC<BadgeProps>;
8
+
9
+ export declare interface BadgeProps {
10
+ /**
11
+ * The color of the badge
12
+ * @default 'primary'
13
+ */
14
+ color?: 'primary' | 'secondary' | 'neutral' | 'success' | 'warning';
15
+ /**
16
+ * The size of the badge
17
+ * @default 'large'
18
+ */
19
+ size?: 'small' | 'large';
20
+ /**
21
+ * The style variant of the badge
22
+ * @default 'heavy'
23
+ */
24
+ style?: 'heavy' | 'light';
25
+ /**
26
+ * Whether to display an icon (not implemented yet)
27
+ */
28
+ icon?: boolean;
29
+ /**
30
+ * The content to display inside the badge
31
+ */
32
+ children: ReactNode;
33
+ /**
34
+ * Additional CSS class names
35
+ */
36
+ className?: string;
37
+ }
38
+
39
+ export declare const Block: React.FC<BlockProps>;
40
+
41
+ export declare interface BlockProps {
42
+ /**
43
+ * Type of block to render
44
+ * @default 'icon'
45
+ */
46
+ variant?: 'icon' | 'image';
47
+ /**
48
+ * Icon or image to display (depending on variant)
49
+ */
50
+ visual?: ReactNode;
51
+ /**
52
+ * Label/title text
53
+ */
54
+ label: string;
55
+ /**
56
+ * Description text (for icon variant)
57
+ */
58
+ description?: string;
59
+ /**
60
+ * Style variant for icon blocks
61
+ * @default 'primary'
62
+ */
63
+ style?: 'primary' | 'secondary';
64
+ /**
65
+ * Click handler
66
+ */
67
+ onClick?: () => void;
68
+ /**
69
+ * Whether to show arrow (for image variant)
70
+ * @default true
71
+ */
72
+ showArrow?: boolean;
73
+ /**
74
+ * Additional CSS class names
75
+ */
76
+ className?: string;
77
+ }
78
+
79
+ /**
80
+ * Responsive breakpoint constants
81
+ * These match the design token breakpoints in tokens.json
82
+ */
83
+ export declare const BREAKPOINTS: {
84
+ readonly mobile: 767;
85
+ readonly tablet: 1023;
86
+ readonly desktop: 1024;
87
+ };
88
+
89
+ export declare const Button: ForwardRefExoticComponent<ButtonProps & RefAttributes<HTMLButtonElement>>;
90
+
91
+ export declare interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
92
+ /**
93
+ * The visual style variant of the button
94
+ * @default 'primary'
95
+ */
96
+ variant?: 'primary' | 'secondary' | 'link';
97
+ /**
98
+ * The size of the button
99
+ * @default 'medium'
100
+ */
101
+ size?: 'small' | 'medium';
102
+ /**
103
+ * Icon to display on the left side of the button text
104
+ */
105
+ leftIcon?: ReactNode;
106
+ /**
107
+ * Icon to display on the right side of the button text
108
+ */
109
+ rightIcon?: ReactNode;
110
+ /**
111
+ * The content to display inside the button
112
+ */
113
+ children?: ReactNode;
114
+ /**
115
+ * Whether the button is disabled
116
+ * @default false
117
+ */
118
+ disabled?: boolean;
119
+ /**
120
+ * Whether the button should be icon-only (no text, just icon)
121
+ * @default false
122
+ */
123
+ iconOnly?: boolean;
124
+ }
125
+
126
+ export declare const Card: React.FC<CardProps>;
127
+
128
+ export declare interface CardProps {
129
+ /** Image URL for the card */
130
+ image?: string;
131
+ /** Alt text for accessibility */
132
+ imageAlt?: string;
133
+ /** Main label/title text */
134
+ label?: string;
135
+ /** Price text */
136
+ price?: string;
137
+ /** Rating value (1-5) */
138
+ stars?: number;
139
+ /** Superior hotel indicator */
140
+ isSuperior?: boolean;
141
+ /** Badge configuration */
142
+ badge?: {
143
+ text: string;
144
+ variant?: 'primary' | 'secondary';
145
+ };
146
+ title?: string;
147
+ location?: string;
148
+ onClick?: () => void;
149
+ /** Additional CSS classes */
150
+ className?: string;
151
+ /** Card size variant */
152
+ variant?: 'desktop' | 'mobile';
153
+ /** Rating */
154
+ hasRating?: boolean;
155
+ /** Padding */
156
+ withPadding?: boolean;
157
+ /** height */
158
+ withHeight?: boolean;
159
+ /** Rating Comments */
160
+ isRatingComments?: boolean;
161
+ /**
162
+ * Optional usage context to conditionally apply styles or behavior
163
+ * based on where the Card is used (e.g., 'hotel-deals')
164
+ */
165
+ context?: 'hotel-deals' | string;
166
+ }
167
+
168
+ export declare const Checkbox: React.FC<CheckboxProps>;
169
+
170
+ export declare interface CheckboxProps {
171
+ label?: string;
172
+ checked?: boolean;
173
+ defaultChecked?: boolean;
174
+ onChange?: (checked: boolean) => void;
175
+ disabled?: boolean;
176
+ error?: boolean;
177
+ name?: string;
178
+ id?: string;
179
+ className?: string;
180
+ size?: 'small' | 'medium';
181
+ }
182
+
183
+ /**
184
+ * Chip Component
185
+ *
186
+ * A removable filter chip component matching Figma specs (689-7141)
187
+ *
188
+ * Features:
189
+ * - Two sizes: small (for filter rows), medium (default)
190
+ * - Three states: idle, active, disabled
191
+ * - Optional count badge
192
+ * - Optional removable (X icon)
193
+ */
194
+ export declare const Chip: default_2.FC<ChipProps>;
195
+
196
+ export declare interface ChipProps {
197
+ /** The label text displayed in the chip */
198
+ label: string;
199
+ /** Optional count/number displayed in a badge (for filter chips) */
200
+ count?: number | string;
201
+ /** Size variant */
202
+ size?: ChipSize;
203
+ /** State variant */
204
+ state?: ChipState;
205
+ /** Whether the chip is removable (shows X icon) */
206
+ removable?: boolean;
207
+ /** Click handler for the chip (used for selection/toggle) */
208
+ onClick?: () => void;
209
+ /** Handler called when remove button is clicked */
210
+ onRemove?: () => void;
211
+ /** Additional className for custom styling */
212
+ className?: string;
213
+ /** Disable the chip */
214
+ disabled?: boolean;
215
+ }
216
+
217
+ declare type ChipSize = 'small' | 'medium';
218
+
219
+ declare type ChipState = 'idle' | 'active' | 'disabled';
220
+
221
+ declare interface DateOption {
222
+ value: string;
223
+ label: string;
224
+ }
225
+
226
+ export declare const Divider: React.FC<DividerProps>;
227
+
228
+ export declare interface DividerProps {
229
+ /**
230
+ * Optional label to display in the middle of the divider
231
+ */
232
+ label?: ReactNode;
233
+ /**
234
+ * Orientation of the divider
235
+ * @default 'horizontal'
236
+ */
237
+ orientation?: 'horizontal' | 'vertical';
238
+ /**
239
+ * Additional CSS class names
240
+ */
241
+ className?: string;
242
+ variant?: string;
243
+ }
244
+
245
+ export declare const Dropdown: default_2.FC<DropdownProps_2>;
246
+
247
+ export declare interface DropdownProps {
248
+ }
249
+
250
+ declare interface DropdownProps_2 {
251
+ options?: DateOption[];
252
+ disabled?: boolean;
253
+ error?: boolean;
254
+ defaultValue?: string;
255
+ onChange?: (value: string) => void;
256
+ className?: string;
257
+ name?: string;
258
+ id?: string;
259
+ }
260
+
261
+ /**
262
+ * HotelCardSkeleton - Loading placeholder for hotel cards
263
+ *
264
+ * Displays a shimmer animation while hotel data is loading.
265
+ * Matches the layout of HotelCard component.
266
+ */
267
+ export declare const HotelCardSkeleton: default_2.FC;
268
+
269
+ /**
270
+ * HotelCardUIProvider - Configure shared UI components
271
+ *
272
+ * Wrap your app with this provider to configure locale, currency, and responsive mode
273
+ * for all @hotelcard/ui components.
274
+ *
275
+ * @example
276
+ * ```tsx
277
+ * import { HotelCardUIProvider } from '@hotelcard/ui';
278
+ *
279
+ * <HotelCardUIProvider locale="de" currency="CHF">
280
+ * <App />
281
+ * </HotelCardUIProvider>
282
+ * ```
283
+ */
284
+ export declare const HotelCardUIProvider: default_2.FC<HotelCardUIProviderProps>;
285
+
286
+ export declare interface HotelCardUIProviderProps {
287
+ /** Current locale */
288
+ locale?: Locale;
289
+ /** Currency code */
290
+ currency?: string;
291
+ /** Whether running on desktop */
292
+ isDesktop?: boolean;
293
+ /** Base URL for API calls (e.g., 'https://hotelcard.ch') */
294
+ apiBaseUrl?: string;
295
+ /** Optional custom translation function (overrides internal translations) */
296
+ t?: TranslateFunction;
297
+ children: ReactNode;
298
+ }
299
+
300
+ export declare const Input: default_2.FC<InputProps>;
301
+
302
+ export declare interface InputProps {
303
+ label?: string;
304
+ placeholder?: string;
305
+ helper?: string;
306
+ value?: string;
307
+ defaultValue?: string;
308
+ onChange?: (value: string) => void;
309
+ onFocus?: () => void;
310
+ onBlur?: () => void;
311
+ type?: 'text' | 'email' | 'password' | 'tel' | 'number' | 'search' | 'url' | 'date';
312
+ error?: boolean;
313
+ disabled?: boolean;
314
+ leftIcon?: React.ReactNode;
315
+ rightIcon?: React.ReactNode;
316
+ prefix?: string;
317
+ className?: string;
318
+ inputClassName?: string;
319
+ name?: string;
320
+ id?: string;
321
+ required?: boolean;
322
+ autoComplete?: string;
323
+ autoFocus?: boolean;
324
+ readOnly?: boolean;
325
+ variant?: 'default' | 'phone' | 'dropdown';
326
+ phonePrefix?: string;
327
+ onPhonePrefixChange?: (value: string) => void;
328
+ onPhonePrefixBlur?: () => void;
329
+ options?: Array<{
330
+ value: string;
331
+ label: string;
332
+ icon?: React.ReactNode;
333
+ }>;
334
+ onSelect?: (value: string) => void;
335
+ dropdownOpen?: boolean;
336
+ onDropdownToggle?: (open: boolean) => void;
337
+ wrapperClassName?: string;
338
+ inputProps?: React.InputHTMLAttributes<HTMLInputElement>;
339
+ }
340
+
341
+ export declare type Locale = keyof typeof translations;
342
+
343
+ /**
344
+ * Pin Component
345
+ *
346
+ * Map marker pin with price or hotel icon variants.
347
+ * Used for displaying hotel markers on maps.
348
+ *
349
+ * @example
350
+ * // Price pin (default)
351
+ * <Pin price={150} currency="CHF" showFavorite />
352
+ *
353
+ * // Viewed price pin (secondary style)
354
+ * <Pin price={150} viewed showFavorite />
355
+ *
356
+ * // Hotel pin (for clusters)
357
+ * <Pin variant="hotel" />
358
+ */
359
+ export declare const Pin: default_2.ForwardRefExoticComponent<PinProps & default_2.RefAttributes<HTMLButtonElement>>;
360
+
361
+ export declare interface PinProps {
362
+ /**
363
+ * Pin variant
364
+ * - 'price': Shows currency and price with optional favorite icon
365
+ * - 'hotel': Shows house icon only (for cluster markers)
366
+ */
367
+ variant?: 'price' | 'hotel';
368
+ /**
369
+ * Whether the hotel has been viewed (changes to secondary/outline style)
370
+ */
371
+ viewed?: boolean;
372
+ /**
373
+ * Currency code to display (only for price variant)
374
+ * @default 'CHF'
375
+ */
376
+ currency?: string;
377
+ /**
378
+ * Price to display (only for price variant)
379
+ */
380
+ price?: number | string;
381
+ /**
382
+ * Whether to show the favorite (heart) icon (only for price variant)
383
+ */
384
+ showFavorite?: boolean;
385
+ /**
386
+ * Whether the pin is disabled
387
+ */
388
+ disabled?: boolean;
389
+ /**
390
+ * Click handler
391
+ */
392
+ onClick?: () => void;
393
+ /**
394
+ * Additional class name
395
+ */
396
+ className?: string;
397
+ }
398
+
399
+ export declare const RadioButton: default_2.FC<RadioButtonProps>;
400
+
401
+ export declare interface RadioButtonProps {
402
+ /**
403
+ * Whether the radio button is checked
404
+ */
405
+ checked: boolean;
406
+ /**
407
+ * Callback fired when the radio button state changes
408
+ */
409
+ onChange: (checked: boolean) => void;
410
+ /**
411
+ * The id attribute of the radio button (used to associate the label via htmlFor)
412
+ */
413
+ id?: string;
414
+ /**
415
+ * The name attribute of the radio button (for grouping)
416
+ */
417
+ name?: string;
418
+ /**
419
+ * The value attribute of the radio button
420
+ */
421
+ value?: string;
422
+ /**
423
+ * Whether the radio button is disabled
424
+ * @default false
425
+ */
426
+ disabled?: boolean;
427
+ /**
428
+ * Additional CSS class names
429
+ */
430
+ className?: string;
431
+ /**
432
+ * Label text for the radio button
433
+ */
434
+ label?: string;
435
+ /**
436
+ * Autocomplete attribute
437
+ */
438
+ autoComplete?: string;
439
+ }
440
+
441
+ export declare const Rating: React.FC<RatingProps>;
442
+
443
+ export declare interface RatingProps {
444
+ /**
445
+ * Rating variant
446
+ * @default 'stars'
447
+ */
448
+ variant?: 'block' | 'result' | 'stars';
449
+ /**
450
+ * Rating value (0-5)
451
+ */
452
+ value: number;
453
+ /**
454
+ * Maximum rating value
455
+ * @default 5
456
+ */
457
+ maxValue?: number;
458
+ /**
459
+ * Show numeric value
460
+ * @default false
461
+ */
462
+ showValue?: boolean;
463
+ /**
464
+ * Name/title text (for block variant)
465
+ */
466
+ name?: string;
467
+ /**
468
+ * Date text (for block variant)
469
+ */
470
+ date?: string;
471
+ /**
472
+ * Quote text (for block variant)
473
+ */
474
+ quote?: string;
475
+ /**
476
+ * Size of the rating
477
+ * @default 'medium'
478
+ */
479
+ size?: 'small' | 'medium' | 'large';
480
+ /**
481
+ * Additional CSS class names
482
+ */
483
+ className?: string;
484
+ }
485
+
486
+ export declare interface ResponsiveState {
487
+ /** True when screen width >= 1024px (desktop only, excludes tablet) */
488
+ isDesktop: boolean;
489
+ /** True when screen width < 768px */
490
+ isMobile: boolean;
491
+ /** True when screen width is between 768px and 1023px */
492
+ isTablet: boolean;
493
+ /** True when screen width >= 1024px (same as isDesktop) */
494
+ isLargeDesktop: boolean;
495
+ /** Current window width in pixels */
496
+ width: number;
497
+ }
498
+
499
+ /** Translation function type */
500
+ export declare type TranslateFunction = (key: string, optionsOrFallback?: TranslateOptions | string, fallback?: string) => string;
501
+
502
+ /** Translation options for interpolation */
503
+ export declare interface TranslateOptions {
504
+ [key: string]: string | number;
505
+ }
506
+
507
+ declare const translations: {
508
+ readonly de: {
509
+ button: {
510
+ order: string;
511
+ "order-navigation": string;
512
+ "order-hc": string;
513
+ "my-account": string;
514
+ search: string;
515
+ "back-to-top": string;
516
+ };
517
+ link: {
518
+ "member-benefits": string;
519
+ "view-all-hotels": string;
520
+ "search-by-map": string;
521
+ "search-by-region": string;
522
+ "search-by-experience": string;
523
+ "travel-inspiration": string;
524
+ "booking-tips-and-tricks": string;
525
+ home: string;
526
+ "all-hotel-deals": string;
527
+ "search-results": string;
528
+ };
529
+ general: {
530
+ "signed-out": string;
531
+ "room-price": string;
532
+ guarantee: string;
533
+ contact: string;
534
+ "breakfast-included": string;
535
+ "free-cancellation": string;
536
+ "suggested-destinations": string;
537
+ "when-months": string;
538
+ "hotel-deals-found": string;
539
+ "no-results": string;
540
+ "unavailable-for-selected-days": string;
541
+ "cant-accommodate-all": string;
542
+ "reset-destination": string;
543
+ };
544
+ label: {
545
+ "price-from": string;
546
+ "price-for": string;
547
+ "per-room-night": string;
548
+ new: string;
549
+ anytime: string;
550
+ anywhere: string;
551
+ dates: string;
552
+ flexible: string;
553
+ where: string;
554
+ when: string;
555
+ who: string;
556
+ nearby: string;
557
+ hotels: string;
558
+ filter: string;
559
+ sort: string;
560
+ map: string;
561
+ rating: string;
562
+ "rating-excellent": string;
563
+ "rating-very-good": string;
564
+ "rating-good": string;
565
+ "rating-fair": string;
566
+ "rating-none": string;
567
+ clear: string;
568
+ months: string;
569
+ };
570
+ product: {
571
+ "6m": string;
572
+ "1y": string;
573
+ "2y": string;
574
+ "3y": string;
575
+ "price-6m": string;
576
+ "price-6m-disc": string;
577
+ "price-1y": string;
578
+ "price-1y-disc": string;
579
+ "price-2y": string;
580
+ "price-2y-disc": string;
581
+ "price-3y": string;
582
+ "price-3y-disc": string;
583
+ "price-gift": string;
584
+ "price-gift-disc": string;
585
+ "1y-chc": string;
586
+ "price-1y-chc": string;
587
+ "price-1y-disc-chc": 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
+ "min-price": string;
633
+ "max-price": string;
634
+ "show-less": string;
635
+ };
636
+ headline: {
637
+ "no-results": string;
638
+ };
639
+ meta_title: string;
640
+ meta_description: string;
641
+ title: string;
642
+ common: {
643
+ close: string;
644
+ };
645
+ loading: string;
646
+ retry: string;
647
+ close_map: string;
648
+ seo: {
649
+ default_title: string;
650
+ location_title: string;
651
+ region_title: string;
652
+ experience_title: string;
653
+ default_description: string;
654
+ location_description: string;
655
+ };
656
+ modal: {
657
+ close_search: string;
658
+ placeholder_anywhere: string;
659
+ recent_searches: string;
660
+ remove_recent: string;
661
+ all_destinations: string;
662
+ };
663
+ map: {
664
+ open_search: string;
665
+ open_filters: string;
666
+ switch_to_list: string;
667
+ zoom_in: string;
668
+ zoom_out: string;
669
+ no_location_data: string;
670
+ hotels_missing_coordinates: string;
671
+ no_hotels_in_area: string;
672
+ };
673
+ view: {
674
+ list: string;
675
+ };
676
+ breadcrumb: {
677
+ properties_found: string;
678
+ properties_found_location: string;
679
+ };
680
+ aria: {
681
+ search_results_breadcrumb: string;
682
+ close: string;
683
+ previous_image: string;
684
+ next_image: string;
685
+ add_to_favorites: string;
686
+ remove_from_favorites: string;
687
+ list_view: string;
688
+ map_view: string;
689
+ };
690
+ breadcrumb_nav: {
691
+ home: string;
692
+ };
693
+ guest_selector: {
694
+ decrease_adults: string;
695
+ increase_adults: string;
696
+ decrease_children: string;
697
+ increase_children: string;
698
+ decrease_infants: string;
699
+ increase_infants: string;
700
+ toggle_infants: string;
701
+ };
702
+ search_form: {
703
+ location_placeholder: string;
704
+ distance_any: string;
705
+ distance_5: string;
706
+ distance_10: string;
707
+ distance_20: string;
708
+ distance_30: string;
709
+ distance_50: string;
710
+ searching: string;
711
+ reset_filters: string;
712
+ };
713
+ dropdown: {
714
+ hotels: string;
715
+ cities: string;
716
+ regions: string;
717
+ countries: string;
718
+ "no-results": string;
719
+ };
720
+ filters: {
721
+ show_filters: string;
722
+ open_filters: string;
723
+ filter_by: string;
724
+ hotel_rating: string;
725
+ show_results: string;
726
+ apply_filters: string;
727
+ close_filters: string;
728
+ view_in_map: string;
729
+ popular_filters: string;
730
+ destinations: string;
731
+ options_title: string;
732
+ options: {
733
+ instant_booking: string;
734
+ pets_allowed: string;
735
+ free_cancellation: string;
736
+ };
737
+ category: {
738
+ footer_prefix: string;
739
+ };
740
+ show_less: string;
741
+ selected: string;
742
+ clear_all: string;
743
+ };
744
+ date_selector: {
745
+ apply: string;
746
+ months_selected: string;
747
+ };
748
+ star_rating: {
749
+ "5_stars": string;
750
+ "4_stars": string;
751
+ "3_stars": string;
752
+ "2_stars": string;
753
+ not_classified: string;
754
+ swiss_lodge: string;
755
+ };
756
+ results: {
757
+ hotels_found: string;
758
+ load_more: string;
759
+ loading: string;
760
+ end_of_results: string;
761
+ no_results: string;
762
+ try_different_search: string;
763
+ unavailable_banner_title: string;
764
+ unavailable_banner_description: string;
765
+ };
766
+ no_results: {
767
+ title: string;
768
+ subtitle: string;
769
+ description: string;
770
+ description_with_filters: string;
771
+ clear_filters: string;
772
+ };
773
+ errors: {
774
+ search_failed: string;
775
+ load_more_failed: string;
776
+ };
777
+ error: {
778
+ title: string;
779
+ description: string;
780
+ retry: string;
781
+ };
782
+ pagination: {
783
+ label: string;
784
+ previous: string;
785
+ previous_short: string;
786
+ next: string;
787
+ next_short: string;
788
+ page: string;
789
+ };
790
+ hotel_card: {
791
+ rating: string;
792
+ price_from: string;
793
+ not_available: string;
794
+ };
795
+ badges: {
796
+ new: string;
797
+ };
798
+ booking: {
799
+ countdown_days: string;
800
+ card_directions: string;
801
+ card_message_from_hotel: string;
802
+ card_more_about_booking: string;
803
+ card_book_again: string;
804
+ countdown_add_to_calendar: string;
805
+ status_confirmed: string;
806
+ status_completed: string;
807
+ status_cancelled: string;
808
+ details_check_in: string;
809
+ details_check_out: string;
810
+ details_guests: string;
811
+ details_room: string;
812
+ details_breakfast: string;
813
+ details_cancellation: string;
814
+ details_cancel_booking: string;
815
+ details_booked: string;
816
+ details_room_price: string;
817
+ details_saved_with_hotelcard: string;
818
+ details_total_cost: string;
819
+ };
820
+ membership: {
821
+ valid_thru: string;
822
+ };
823
+ };
824
+ readonly en: {
825
+ button: {
826
+ order: string;
827
+ "order-navigation": string;
828
+ "order-hc": string;
829
+ "my-account": string;
830
+ search: string;
831
+ "back-to-top": string;
832
+ };
833
+ link: {
834
+ "member-benefits": string;
835
+ "view-all-hotels": string;
836
+ "search-by-map": string;
837
+ "search-by-region": string;
838
+ "search-by-experience": string;
839
+ "travel-inspiration": string;
840
+ "booking-tips-and-tricks": string;
841
+ home: string;
842
+ "all-hotel-deals": string;
843
+ "search-results": string;
844
+ };
845
+ general: {
846
+ "signed-out": string;
847
+ "room-price": string;
848
+ guarantee: string;
849
+ contact: string;
850
+ "breakfast-included": string;
851
+ "free-cancellation": string;
852
+ "suggested-destinations": string;
853
+ "when-months": string;
854
+ "hotel-deals-found": string;
855
+ "no-results": string;
856
+ "unavailable-for-selected-days": string;
857
+ "cant-accommodate-all": string;
858
+ "reset-destination": string;
859
+ };
860
+ label: {
861
+ "price-from": string;
862
+ "price-for": string;
863
+ "per-room-night": string;
864
+ new: string;
865
+ anytime: string;
866
+ anywhere: string;
867
+ dates: string;
868
+ flexible: string;
869
+ where: string;
870
+ when: string;
871
+ who: string;
872
+ nearby: string;
873
+ hotels: string;
874
+ filter: string;
875
+ sort: string;
876
+ map: string;
877
+ rating: string;
878
+ "rating-excellent": string;
879
+ "rating-very-good": string;
880
+ "rating-good": string;
881
+ "rating-fair": string;
882
+ "rating-none": string;
883
+ clear: string;
884
+ months: string;
885
+ };
886
+ product: {
887
+ "6m": string;
888
+ "1y": string;
889
+ "2y": string;
890
+ "3y": string;
891
+ "price-6m": string;
892
+ "price-6m-disc": string;
893
+ "price-1y": string;
894
+ "price-1y-disc": string;
895
+ "price-2y": string;
896
+ "price-2y-disc": string;
897
+ "price-3y": string;
898
+ "price-3y-disc": string;
899
+ "price-gift": string;
900
+ "price-gift-disc": string;
901
+ "1y-chc": string;
902
+ "price-1y-chc": string;
903
+ "price-1y-disc-chc": string;
904
+ };
905
+ subheadline: {
906
+ "your-hc": string;
907
+ "popular-hotels": string;
908
+ "no-results": string;
909
+ "sort-by": string;
910
+ };
911
+ form: {
912
+ guests: string;
913
+ guest: string;
914
+ adults: string;
915
+ children: string;
916
+ pet: string;
917
+ "age-of-child": string;
918
+ age: string;
919
+ "age-error": string;
920
+ };
921
+ filter: {
922
+ filters: string;
923
+ destination: string;
924
+ experience: string;
925
+ "show-all": string;
926
+ price: string;
927
+ discount: string;
928
+ services: string;
929
+ meals: string;
930
+ "hotel-category": string;
931
+ reviews: string;
932
+ mobility: string;
933
+ "wellness-spa": string;
934
+ "price-high-low": string;
935
+ "price-low-high": string;
936
+ "best-rating": string;
937
+ "most-popular": string;
938
+ "newest-hotels": string;
939
+ relevance: string;
940
+ selected: string;
941
+ "clear-all": string;
942
+ options: string;
943
+ "hotellerie-suisse": string;
944
+ trustyou: string;
945
+ "select-all": string;
946
+ reset: string;
947
+ "breakfast-included": string;
948
+ "min-price": string;
949
+ "max-price": string;
950
+ "show-less": string;
951
+ };
952
+ headline: {
953
+ "no-results": string;
954
+ };
955
+ meta_title: string;
956
+ meta_description: string;
957
+ title: string;
958
+ common: {
959
+ close: string;
960
+ };
961
+ loading: string;
962
+ retry: string;
963
+ close_map: string;
964
+ seo: {
965
+ default_title: string;
966
+ location_title: string;
967
+ region_title: string;
968
+ experience_title: string;
969
+ default_description: string;
970
+ location_description: string;
971
+ };
972
+ modal: {
973
+ close_search: string;
974
+ placeholder_anywhere: string;
975
+ recent_searches: string;
976
+ remove_recent: string;
977
+ all_destinations: string;
978
+ };
979
+ map: {
980
+ open_search: string;
981
+ open_filters: string;
982
+ switch_to_list: string;
983
+ zoom_in: string;
984
+ zoom_out: string;
985
+ no_location_data: string;
986
+ hotels_missing_coordinates: string;
987
+ no_hotels_in_area: string;
988
+ };
989
+ view: {
990
+ list: string;
991
+ };
992
+ breadcrumb: {
993
+ properties_found: string;
994
+ properties_found_location: string;
995
+ };
996
+ aria: {
997
+ search_results_breadcrumb: string;
998
+ close: string;
999
+ previous_image: string;
1000
+ next_image: string;
1001
+ add_to_favorites: string;
1002
+ remove_from_favorites: string;
1003
+ list_view: string;
1004
+ map_view: string;
1005
+ };
1006
+ breadcrumb_nav: {
1007
+ home: string;
1008
+ };
1009
+ guest_selector: {
1010
+ adults_description: string;
1011
+ children_description: string;
1012
+ infants_description: string;
1013
+ decrease_adults: string;
1014
+ increase_adults: string;
1015
+ decrease_children: string;
1016
+ increase_children: string;
1017
+ decrease_infants: string;
1018
+ increase_infants: string;
1019
+ toggle_infants: string;
1020
+ };
1021
+ search_form: {
1022
+ location_placeholder: string;
1023
+ distance_any: string;
1024
+ distance_5: string;
1025
+ distance_10: string;
1026
+ distance_20: string;
1027
+ distance_30: string;
1028
+ distance_50: string;
1029
+ searching: string;
1030
+ reset_filters: string;
1031
+ };
1032
+ dropdown: {
1033
+ hotels: string;
1034
+ cities: string;
1035
+ regions: string;
1036
+ countries: string;
1037
+ "no-results": string;
1038
+ };
1039
+ filters: {
1040
+ show_filters: string;
1041
+ open_filters: string;
1042
+ filter_by: string;
1043
+ hotel_rating: string;
1044
+ show_results: string;
1045
+ apply_filters: string;
1046
+ close_filters: string;
1047
+ view_in_map: string;
1048
+ popular_filters: string;
1049
+ show_less: string;
1050
+ selected: string;
1051
+ clear_all: string;
1052
+ options: {
1053
+ instant_booking: string;
1054
+ pets_allowed: string;
1055
+ free_cancellation: string;
1056
+ };
1057
+ };
1058
+ date_selector: {
1059
+ apply: string;
1060
+ months_selected: string;
1061
+ };
1062
+ star_rating: {
1063
+ "5_stars": string;
1064
+ "4_stars": string;
1065
+ "3_stars": string;
1066
+ "2_stars": string;
1067
+ not_classified: string;
1068
+ swiss_lodge: string;
1069
+ };
1070
+ results: {
1071
+ hotels_found: string;
1072
+ load_more: string;
1073
+ loading: string;
1074
+ end_of_results: string;
1075
+ no_results: string;
1076
+ try_different_search: string;
1077
+ unavailable_banner_title: string;
1078
+ unavailable_banner_description: string;
1079
+ };
1080
+ errors: {
1081
+ search_failed: string;
1082
+ load_more_failed: string;
1083
+ };
1084
+ error: {
1085
+ title: string;
1086
+ description: string;
1087
+ retry: string;
1088
+ };
1089
+ no_results: {
1090
+ title: string;
1091
+ description: string;
1092
+ description_with_filters: string;
1093
+ clear_filters: string;
1094
+ };
1095
+ pagination: {
1096
+ label: string;
1097
+ previous: string;
1098
+ previous_short: string;
1099
+ next: string;
1100
+ next_short: string;
1101
+ page: string;
1102
+ };
1103
+ hotel_card: {
1104
+ rating: string;
1105
+ price_from: string;
1106
+ not_available: string;
1107
+ };
1108
+ badges: {
1109
+ new: string;
1110
+ };
1111
+ clear_location: string;
1112
+ clear_date: string;
1113
+ clear_guests: string;
1114
+ booking: {
1115
+ countdown_days: string;
1116
+ card_directions: string;
1117
+ card_message_from_hotel: string;
1118
+ card_more_about_booking: string;
1119
+ card_book_again: string;
1120
+ countdown_add_to_calendar: string;
1121
+ status_confirmed: string;
1122
+ status_completed: string;
1123
+ status_cancelled: string;
1124
+ details_check_in: string;
1125
+ details_check_out: string;
1126
+ details_guests: string;
1127
+ details_room: string;
1128
+ details_breakfast: string;
1129
+ details_cancellation: string;
1130
+ details_cancel_booking: string;
1131
+ details_booked: string;
1132
+ details_room_price: string;
1133
+ details_saved_with_hotelcard: string;
1134
+ details_total_cost: string;
1135
+ };
1136
+ membership: {
1137
+ valid_thru: string;
1138
+ };
1139
+ };
1140
+ readonly fr: {
1141
+ button: {
1142
+ order: string;
1143
+ "order-navigation": string;
1144
+ "order-hc": string;
1145
+ "my-account": string;
1146
+ search: string;
1147
+ "back-to-top": string;
1148
+ };
1149
+ link: {
1150
+ "member-benefits": string;
1151
+ "view-all-hotels": string;
1152
+ "search-by-map": string;
1153
+ "search-by-region": string;
1154
+ "search-by-experience": string;
1155
+ "travel-inspiration": string;
1156
+ "booking-tips-and-tricks": string;
1157
+ home: string;
1158
+ "all-hotel-deals": string;
1159
+ "search-results": string;
1160
+ };
1161
+ general: {
1162
+ "signed-out": string;
1163
+ "room-price": string;
1164
+ guarantee: string;
1165
+ contact: string;
1166
+ "breakfast-included": string;
1167
+ "free-cancellation": string;
1168
+ "suggested-destinations": string;
1169
+ "when-months": string;
1170
+ "hotel-deals-found": string;
1171
+ "no-results": string;
1172
+ "unavailable-for-selected-days": string;
1173
+ "cant-accommodate-all": string;
1174
+ "reset-destination": string;
1175
+ };
1176
+ label: {
1177
+ "price-from": string;
1178
+ "price-for": string;
1179
+ "per-room-night": string;
1180
+ new: string;
1181
+ anytime: string;
1182
+ anywhere: string;
1183
+ dates: string;
1184
+ flexible: string;
1185
+ where: string;
1186
+ when: string;
1187
+ who: string;
1188
+ nearby: string;
1189
+ hotels: string;
1190
+ filter: string;
1191
+ sort: string;
1192
+ map: string;
1193
+ rating: string;
1194
+ "rating-excellent": string;
1195
+ "rating-very-good": string;
1196
+ "rating-good": string;
1197
+ "rating-fair": string;
1198
+ "rating-none": string;
1199
+ clear: string;
1200
+ months: string;
1201
+ };
1202
+ product: {
1203
+ "6m": string;
1204
+ "1y": string;
1205
+ "2y": string;
1206
+ "3y": string;
1207
+ "price-6m": string;
1208
+ "price-6m-disc": string;
1209
+ "price-1y": string;
1210
+ "price-1y-disc": string;
1211
+ "price-2y": string;
1212
+ "price-2y-disc": string;
1213
+ "price-3y": string;
1214
+ "price-3y-disc": string;
1215
+ "price-gift": string;
1216
+ "price-gift-disc": string;
1217
+ "1y-chc": string;
1218
+ "price-1y-chc": string;
1219
+ "price-1y-disc-chc": string;
1220
+ };
1221
+ subheadline: {
1222
+ "your-hc": string;
1223
+ "popular-hotels": string;
1224
+ "no-results": string;
1225
+ "sort-by": string;
1226
+ };
1227
+ form: {
1228
+ guests: string;
1229
+ guest: string;
1230
+ adults: string;
1231
+ children: string;
1232
+ pet: string;
1233
+ "age-of-child": string;
1234
+ age: string;
1235
+ "age-error": string;
1236
+ };
1237
+ filter: {
1238
+ filters: string;
1239
+ destination: string;
1240
+ experience: string;
1241
+ "show-all": string;
1242
+ price: string;
1243
+ discount: string;
1244
+ services: string;
1245
+ meals: string;
1246
+ "hotel-category": string;
1247
+ reviews: string;
1248
+ mobility: string;
1249
+ "wellness-spa": string;
1250
+ "price-high-low": string;
1251
+ "price-low-high": string;
1252
+ "best-rating": string;
1253
+ "most-popular": string;
1254
+ "newest-hotels": string;
1255
+ relevance: string;
1256
+ selected: string;
1257
+ "clear-all": string;
1258
+ options: string;
1259
+ "hotellerie-suisse": string;
1260
+ trustyou: string;
1261
+ "select-all": string;
1262
+ reset: string;
1263
+ "breakfast-included": string;
1264
+ "min-price": string;
1265
+ "max-price": string;
1266
+ "show-less": string;
1267
+ };
1268
+ headline: {
1269
+ "no-results": string;
1270
+ };
1271
+ meta_title: string;
1272
+ meta_description: string;
1273
+ title: string;
1274
+ common: {
1275
+ close: string;
1276
+ };
1277
+ loading: string;
1278
+ retry: string;
1279
+ close_map: string;
1280
+ seo: {
1281
+ default_title: string;
1282
+ location_title: string;
1283
+ region_title: string;
1284
+ experience_title: string;
1285
+ default_description: string;
1286
+ location_description: string;
1287
+ };
1288
+ modal: {
1289
+ close_search: string;
1290
+ placeholder_anywhere: string;
1291
+ recent_searches: string;
1292
+ remove_recent: string;
1293
+ all_destinations: string;
1294
+ };
1295
+ map: {
1296
+ open_search: string;
1297
+ open_filters: string;
1298
+ switch_to_list: string;
1299
+ zoom_in: string;
1300
+ zoom_out: string;
1301
+ no_location_data: string;
1302
+ hotels_missing_coordinates: string;
1303
+ no_hotels_in_area: string;
1304
+ };
1305
+ view: {
1306
+ list: string;
1307
+ };
1308
+ breadcrumb: {
1309
+ properties_found: string;
1310
+ properties_found_location: string;
1311
+ };
1312
+ aria: {
1313
+ search_results_breadcrumb: string;
1314
+ close: string;
1315
+ previous_image: string;
1316
+ next_image: string;
1317
+ add_to_favorites: string;
1318
+ remove_from_favorites: string;
1319
+ list_view: string;
1320
+ map_view: string;
1321
+ };
1322
+ breadcrumb_nav: {
1323
+ home: string;
1324
+ };
1325
+ guest_selector: {
1326
+ decrease_adults: string;
1327
+ increase_adults: string;
1328
+ decrease_children: string;
1329
+ increase_children: string;
1330
+ decrease_infants: string;
1331
+ increase_infants: string;
1332
+ toggle_infants: string;
1333
+ };
1334
+ search_form: {
1335
+ location_placeholder: string;
1336
+ distance_any: string;
1337
+ distance_5: string;
1338
+ distance_10: string;
1339
+ distance_20: string;
1340
+ distance_30: string;
1341
+ distance_50: string;
1342
+ searching: string;
1343
+ reset_filters: string;
1344
+ };
1345
+ dropdown: {
1346
+ hotels: string;
1347
+ cities: string;
1348
+ regions: string;
1349
+ countries: string;
1350
+ "no-results": string;
1351
+ };
1352
+ filters: {
1353
+ show_filters: string;
1354
+ open_filters: string;
1355
+ filter_by: string;
1356
+ hotel_rating: string;
1357
+ show_results: string;
1358
+ apply_filters: string;
1359
+ close_filters: string;
1360
+ view_in_map: string;
1361
+ popular_filters: string;
1362
+ destinations: string;
1363
+ options_title: string;
1364
+ options: {
1365
+ instant_booking: string;
1366
+ pets_allowed: string;
1367
+ free_cancellation: string;
1368
+ };
1369
+ category: {
1370
+ footer_prefix: string;
1371
+ };
1372
+ show_less: string;
1373
+ selected: string;
1374
+ clear_all: string;
1375
+ };
1376
+ date_selector: {
1377
+ apply: string;
1378
+ months_selected: string;
1379
+ };
1380
+ star_rating: {
1381
+ "5_stars": string;
1382
+ "4_stars": string;
1383
+ "3_stars": string;
1384
+ "2_stars": string;
1385
+ not_classified: string;
1386
+ swiss_lodge: string;
1387
+ };
1388
+ results: {
1389
+ hotels_found: string;
1390
+ load_more: string;
1391
+ loading: string;
1392
+ end_of_results: string;
1393
+ no_results: string;
1394
+ try_different_search: string;
1395
+ unavailable_banner_title: string;
1396
+ unavailable_banner_description: string;
1397
+ };
1398
+ no_results: {
1399
+ title: string;
1400
+ subtitle: string;
1401
+ description: string;
1402
+ description_with_filters: string;
1403
+ clear_filters: string;
1404
+ };
1405
+ errors: {
1406
+ search_failed: string;
1407
+ load_more_failed: string;
1408
+ };
1409
+ error: {
1410
+ title: string;
1411
+ description: string;
1412
+ retry: string;
1413
+ };
1414
+ pagination: {
1415
+ label: string;
1416
+ previous: string;
1417
+ previous_short: string;
1418
+ next: string;
1419
+ next_short: string;
1420
+ page: string;
1421
+ };
1422
+ hotel_card: {
1423
+ rating: string;
1424
+ price_from: string;
1425
+ not_available: string;
1426
+ };
1427
+ badges: {
1428
+ new: string;
1429
+ };
1430
+ booking: {
1431
+ countdown_days: string;
1432
+ card_directions: string;
1433
+ card_message_from_hotel: string;
1434
+ card_more_about_booking: string;
1435
+ card_book_again: string;
1436
+ countdown_add_to_calendar: string;
1437
+ status_confirmed: string;
1438
+ status_completed: string;
1439
+ status_cancelled: string;
1440
+ details_check_in: string;
1441
+ details_check_out: string;
1442
+ details_guests: string;
1443
+ details_room: string;
1444
+ details_breakfast: string;
1445
+ details_cancellation: string;
1446
+ details_cancel_booking: string;
1447
+ details_booked: string;
1448
+ details_room_price: string;
1449
+ details_saved_with_hotelcard: string;
1450
+ details_total_cost: string;
1451
+ };
1452
+ membership: {
1453
+ valid_thru: string;
1454
+ };
1455
+ };
1456
+ readonly it: {
1457
+ button: {
1458
+ order: string;
1459
+ "order-navigation": string;
1460
+ "order-hc": string;
1461
+ "my-account": string;
1462
+ search: string;
1463
+ "back-to-top": string;
1464
+ };
1465
+ link: {
1466
+ "member-benefits": string;
1467
+ "view-all-hotels": string;
1468
+ "search-by-map": string;
1469
+ "search-by-region": string;
1470
+ "search-by-experience": string;
1471
+ "travel-inspiration": string;
1472
+ "booking-tips-and-tricks": string;
1473
+ home: string;
1474
+ "all-hotel-deals": string;
1475
+ "search-results": string;
1476
+ };
1477
+ general: {
1478
+ "signed-out": string;
1479
+ "room-price": string;
1480
+ guarantee: string;
1481
+ contact: string;
1482
+ "breakfast-included": string;
1483
+ "free-cancellation": string;
1484
+ "suggested-destinations": string;
1485
+ "when-months": string;
1486
+ "hotel-deals-found": string;
1487
+ "no-results": string;
1488
+ "unavailable-for-selected-days": string;
1489
+ "cant-accommodate-all": string;
1490
+ "reset-destination": string;
1491
+ };
1492
+ label: {
1493
+ "price-from": string;
1494
+ "price-for": string;
1495
+ "per-room-night": string;
1496
+ new: string;
1497
+ anytime: string;
1498
+ anywhere: string;
1499
+ dates: string;
1500
+ flexible: string;
1501
+ where: string;
1502
+ when: string;
1503
+ who: string;
1504
+ nearby: string;
1505
+ hotels: string;
1506
+ filter: string;
1507
+ sort: string;
1508
+ map: string;
1509
+ rating: string;
1510
+ "rating-excellent": string;
1511
+ "rating-very-good": string;
1512
+ "rating-good": string;
1513
+ "rating-fair": string;
1514
+ "rating-none": string;
1515
+ clear: string;
1516
+ months: string;
1517
+ };
1518
+ product: {
1519
+ "6m": string;
1520
+ "1y": string;
1521
+ "2y": string;
1522
+ "3y": string;
1523
+ "price-6m": string;
1524
+ "price-6m-disc": string;
1525
+ "price-1y": string;
1526
+ "price-1y-disc": string;
1527
+ "price-2y": string;
1528
+ "price-2y-disc": string;
1529
+ "price-3y": string;
1530
+ "price-3y-disc": string;
1531
+ "price-gift": string;
1532
+ "price-gift-disc": string;
1533
+ "1y-chc": string;
1534
+ "price-1y-chc": string;
1535
+ "price-1y-disc-chc": string;
1536
+ };
1537
+ subheadline: {
1538
+ "your-hc": string;
1539
+ "popular-hotels": string;
1540
+ "no-results": string;
1541
+ "sort-by": string;
1542
+ };
1543
+ form: {
1544
+ guests: string;
1545
+ guest: string;
1546
+ adults: string;
1547
+ children: string;
1548
+ pet: string;
1549
+ "age-of-child": string;
1550
+ age: string;
1551
+ "age-error": string;
1552
+ };
1553
+ filter: {
1554
+ filters: string;
1555
+ destination: string;
1556
+ experience: string;
1557
+ "show-all": string;
1558
+ price: string;
1559
+ discount: string;
1560
+ services: string;
1561
+ meals: string;
1562
+ "hotel-category": string;
1563
+ reviews: string;
1564
+ mobility: string;
1565
+ "wellness-spa": string;
1566
+ "price-high-low": string;
1567
+ "price-low-high": string;
1568
+ "best-rating": string;
1569
+ "most-popular": string;
1570
+ "newest-hotels": string;
1571
+ relevance: string;
1572
+ selected: string;
1573
+ "clear-all": string;
1574
+ options: string;
1575
+ "hotellerie-suisse": string;
1576
+ trustyou: string;
1577
+ "select-all": string;
1578
+ reset: string;
1579
+ "breakfast-included": string;
1580
+ "min-price": string;
1581
+ "max-price": string;
1582
+ "show-less": string;
1583
+ };
1584
+ headline: {
1585
+ "no-results": string;
1586
+ };
1587
+ meta_title: string;
1588
+ meta_description: string;
1589
+ title: string;
1590
+ common: {
1591
+ close: string;
1592
+ };
1593
+ loading: string;
1594
+ retry: string;
1595
+ close_map: string;
1596
+ seo: {
1597
+ default_title: string;
1598
+ location_title: string;
1599
+ region_title: string;
1600
+ experience_title: string;
1601
+ default_description: string;
1602
+ location_description: string;
1603
+ };
1604
+ modal: {
1605
+ close_search: string;
1606
+ placeholder_anywhere: string;
1607
+ recent_searches: string;
1608
+ remove_recent: string;
1609
+ all_destinations: string;
1610
+ };
1611
+ map: {
1612
+ open_search: string;
1613
+ open_filters: string;
1614
+ switch_to_list: string;
1615
+ zoom_in: string;
1616
+ zoom_out: string;
1617
+ no_location_data: string;
1618
+ hotels_missing_coordinates: string;
1619
+ no_hotels_in_area: string;
1620
+ };
1621
+ view: {
1622
+ list: string;
1623
+ };
1624
+ breadcrumb: {
1625
+ properties_found: string;
1626
+ properties_found_location: string;
1627
+ };
1628
+ aria: {
1629
+ search_results_breadcrumb: string;
1630
+ close: string;
1631
+ previous_image: string;
1632
+ next_image: string;
1633
+ add_to_favorites: string;
1634
+ remove_from_favorites: string;
1635
+ list_view: string;
1636
+ map_view: string;
1637
+ };
1638
+ breadcrumb_nav: {
1639
+ home: string;
1640
+ };
1641
+ guest_selector: {
1642
+ decrease_adults: string;
1643
+ increase_adults: string;
1644
+ decrease_children: string;
1645
+ increase_children: string;
1646
+ decrease_infants: string;
1647
+ increase_infants: string;
1648
+ toggle_infants: string;
1649
+ };
1650
+ search_form: {
1651
+ location_placeholder: string;
1652
+ distance_any: string;
1653
+ distance_5: string;
1654
+ distance_10: string;
1655
+ distance_20: string;
1656
+ distance_30: string;
1657
+ distance_50: string;
1658
+ searching: string;
1659
+ reset_filters: string;
1660
+ };
1661
+ dropdown: {
1662
+ hotels: string;
1663
+ cities: string;
1664
+ regions: string;
1665
+ countries: string;
1666
+ "no-results": string;
1667
+ };
1668
+ filters: {
1669
+ show_filters: string;
1670
+ open_filters: string;
1671
+ filter_by: string;
1672
+ hotel_rating: string;
1673
+ show_results: string;
1674
+ apply_filters: string;
1675
+ close_filters: string;
1676
+ view_in_map: string;
1677
+ popular_filters: string;
1678
+ destinations: string;
1679
+ options_title: string;
1680
+ options: {
1681
+ instant_booking: string;
1682
+ pets_allowed: string;
1683
+ free_cancellation: string;
1684
+ };
1685
+ category: {
1686
+ footer_prefix: string;
1687
+ };
1688
+ show_less: string;
1689
+ selected: string;
1690
+ clear_all: string;
1691
+ };
1692
+ date_selector: {
1693
+ apply: string;
1694
+ months_selected: string;
1695
+ };
1696
+ star_rating: {
1697
+ "5_stars": string;
1698
+ "4_stars": string;
1699
+ "3_stars": string;
1700
+ "2_stars": string;
1701
+ not_classified: string;
1702
+ swiss_lodge: string;
1703
+ };
1704
+ results: {
1705
+ hotels_found: string;
1706
+ load_more: string;
1707
+ loading: string;
1708
+ end_of_results: string;
1709
+ no_results: string;
1710
+ try_different_search: string;
1711
+ unavailable_banner_title: string;
1712
+ unavailable_banner_description: string;
1713
+ };
1714
+ no_results: {
1715
+ title: string;
1716
+ subtitle: string;
1717
+ description: string;
1718
+ description_with_filters: string;
1719
+ clear_filters: string;
1720
+ };
1721
+ errors: {
1722
+ search_failed: string;
1723
+ load_more_failed: string;
1724
+ };
1725
+ error: {
1726
+ title: string;
1727
+ description: string;
1728
+ retry: string;
1729
+ };
1730
+ pagination: {
1731
+ label: string;
1732
+ previous: string;
1733
+ previous_short: string;
1734
+ next: string;
1735
+ next_short: string;
1736
+ page: string;
1737
+ };
1738
+ hotel_card: {
1739
+ rating: string;
1740
+ price_from: string;
1741
+ not_available: string;
1742
+ };
1743
+ badges: {
1744
+ new: string;
1745
+ };
1746
+ booking: {
1747
+ countdown_days: string;
1748
+ card_directions: string;
1749
+ card_message_from_hotel: string;
1750
+ card_more_about_booking: string;
1751
+ card_book_again: string;
1752
+ countdown_add_to_calendar: string;
1753
+ status_confirmed: string;
1754
+ status_completed: string;
1755
+ status_cancelled: string;
1756
+ details_check_in: string;
1757
+ details_check_out: string;
1758
+ details_guests: string;
1759
+ details_room: string;
1760
+ details_breakfast: string;
1761
+ details_cancellation: string;
1762
+ details_cancel_booking: string;
1763
+ details_booked: string;
1764
+ details_room_price: string;
1765
+ details_saved_with_hotelcard: string;
1766
+ details_total_cost: string;
1767
+ };
1768
+ membership: {
1769
+ valid_thru: string;
1770
+ };
1771
+ };
1772
+ };
1773
+
1774
+ export declare interface UIContextValue {
1775
+ /** Current locale (e.g., 'de', 'en', 'fr', 'it') */
1776
+ locale: Locale;
1777
+ /** Currency code (e.g., 'CHF', 'EUR') */
1778
+ currency: string;
1779
+ /** Whether the app is running on desktop (default: false for mobile-first) */
1780
+ isDesktop: boolean;
1781
+ /** Base URL for API calls (e.g., 'https://hotelcard.ch') */
1782
+ apiBaseUrl: string;
1783
+ /** Translation function - looks up keys from internal translations */
1784
+ t: TranslateFunction;
1785
+ }
1786
+
1787
+ export declare function useDebounce<T extends (...args: any[]) => any>(callback: T, delay: number): (...args: Parameters<T>) => void;
1788
+
1789
+ export declare const useResponsive: () => ResponsiveState;
1790
+
1791
+ /**
1792
+ * Hook to access UI context values
1793
+ * Returns locale, currency, and isDesktop
1794
+ */
1795
+ export declare const useUIContext: () => UIContextValue;
1796
+
1797
+ export declare const VERSION = "0.1.0";
1798
+
1799
+ export { }