@dododog/ui 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/components/Accordion/index.d.mts +24 -0
  2. package/dist/components/Accordion/index.d.ts +24 -0
  3. package/dist/components/Alert/index.d.mts +40 -0
  4. package/dist/components/Alert/index.d.ts +40 -0
  5. package/dist/components/AnchorTabs/index.d.mts +59 -0
  6. package/dist/components/AnchorTabs/index.d.ts +59 -0
  7. package/dist/components/Autocomplete/index.d.mts +27 -0
  8. package/dist/components/Autocomplete/index.d.ts +27 -0
  9. package/dist/components/Avatar/index.d.mts +13 -0
  10. package/dist/components/Avatar/index.d.ts +13 -0
  11. package/dist/components/Badge/index.d.mts +13 -0
  12. package/dist/components/Badge/index.d.ts +13 -0
  13. package/dist/components/Banner/index.d.mts +19 -0
  14. package/dist/components/Banner/index.d.ts +19 -0
  15. package/dist/components/BottomNavBar/index.d.mts +17 -0
  16. package/dist/components/BottomNavBar/index.d.ts +17 -0
  17. package/dist/components/Breadcrumb/index.d.mts +23 -0
  18. package/dist/components/Breadcrumb/index.d.ts +23 -0
  19. package/dist/components/Button/index.d.mts +17 -0
  20. package/dist/components/Button/index.d.ts +17 -0
  21. package/dist/components/Card/index.d.mts +30 -0
  22. package/dist/components/Card/index.d.ts +30 -0
  23. package/dist/components/CardList/index.d.mts +30 -0
  24. package/dist/components/CardList/index.d.ts +30 -0
  25. package/dist/components/Carousel/index.d.mts +15 -0
  26. package/dist/components/Carousel/index.d.ts +15 -0
  27. package/dist/components/Checkbox/index.d.mts +16 -0
  28. package/dist/components/Checkbox/index.d.ts +16 -0
  29. package/dist/components/Counter/index.d.mts +14 -0
  30. package/dist/components/Counter/index.d.ts +14 -0
  31. package/dist/components/DateRangePicker/index.d.mts +26 -0
  32. package/dist/components/DateRangePicker/index.d.ts +26 -0
  33. package/dist/components/DetailList/index.d.mts +23 -0
  34. package/dist/components/DetailList/index.d.ts +23 -0
  35. package/dist/components/Divider/index.d.mts +10 -0
  36. package/dist/components/Divider/index.d.ts +10 -0
  37. package/dist/components/Drawer/index.d.mts +13 -0
  38. package/dist/components/Drawer/index.d.ts +13 -0
  39. package/dist/components/DropdownMenu/index.d.mts +19 -0
  40. package/dist/components/DropdownMenu/index.d.ts +19 -0
  41. package/dist/components/DualRangeSlider/index.d.mts +26 -0
  42. package/dist/components/DualRangeSlider/index.d.ts +26 -0
  43. package/dist/components/EmptyState/index.d.mts +12 -0
  44. package/dist/components/EmptyState/index.d.ts +12 -0
  45. package/dist/components/ErrorBoundary/index.d.mts +21 -0
  46. package/dist/components/ErrorBoundary/index.d.ts +21 -0
  47. package/dist/components/FilterAccordion/index.d.mts +16 -0
  48. package/dist/components/FilterAccordion/index.d.ts +16 -0
  49. package/dist/components/FilterPill/index.d.mts +19 -0
  50. package/dist/components/FilterPill/index.d.ts +19 -0
  51. package/dist/components/FloatingDock/index.d.mts +65 -0
  52. package/dist/components/FloatingDock/index.d.ts +65 -0
  53. package/dist/components/Footer/index.d.mts +46 -0
  54. package/dist/components/Footer/index.d.ts +46 -0
  55. package/dist/components/GuestPicker/index.d.mts +31 -0
  56. package/dist/components/GuestPicker/index.d.ts +31 -0
  57. package/dist/components/Header/index.d.mts +37 -0
  58. package/dist/components/Header/index.d.ts +37 -0
  59. package/dist/components/HotelCard/index.d.mts +45 -0
  60. package/dist/components/HotelCard/index.d.ts +45 -0
  61. package/dist/components/IconBadge/index.d.mts +14 -0
  62. package/dist/components/IconBadge/index.d.ts +14 -0
  63. package/dist/components/ImageGallery/index.d.mts +16 -0
  64. package/dist/components/ImageGallery/index.d.ts +16 -0
  65. package/dist/components/ImageWithFallback/index.d.mts +17 -0
  66. package/dist/components/ImageWithFallback/index.d.ts +17 -0
  67. package/dist/components/Input/index.d.mts +18 -0
  68. package/dist/components/Input/index.d.ts +18 -0
  69. package/dist/components/Lightbox/index.d.mts +15 -0
  70. package/dist/components/Lightbox/index.d.ts +15 -0
  71. package/dist/components/LinkCard/index.d.mts +12 -0
  72. package/dist/components/LinkCard/index.d.ts +12 -0
  73. package/dist/components/LoadingOverlay/index.d.mts +12 -0
  74. package/dist/components/LoadingOverlay/index.d.ts +12 -0
  75. package/dist/components/MegaMenu/index.d.mts +52 -0
  76. package/dist/components/MegaMenu/index.d.ts +52 -0
  77. package/dist/components/MobileMenu/index.d.mts +35 -0
  78. package/dist/components/MobileMenu/index.d.ts +35 -0
  79. package/dist/components/Modal/index.d.mts +12 -0
  80. package/dist/components/Modal/index.d.ts +12 -0
  81. package/dist/components/Pagination/index.d.mts +13 -0
  82. package/dist/components/Pagination/index.d.ts +13 -0
  83. package/dist/components/PriceDisplay/index.d.mts +14 -0
  84. package/dist/components/PriceDisplay/index.d.ts +14 -0
  85. package/dist/components/ProgressBar/index.d.mts +19 -0
  86. package/dist/components/ProgressBar/index.d.ts +19 -0
  87. package/dist/components/PromoBanner/index.d.mts +39 -0
  88. package/dist/components/PromoBanner/index.d.ts +39 -0
  89. package/dist/components/RadioGroup/index.d.mts +21 -0
  90. package/dist/components/RadioGroup/index.d.ts +21 -0
  91. package/dist/components/Rating/index.d.mts +12 -0
  92. package/dist/components/Rating/index.d.ts +12 -0
  93. package/dist/components/RoomTypeCard/index.d.mts +102 -0
  94. package/dist/components/RoomTypeCard/index.d.ts +102 -0
  95. package/dist/components/SearchBar/index.d.mts +20 -0
  96. package/dist/components/SearchBar/index.d.ts +20 -0
  97. package/dist/components/SegmentedControl/index.d.mts +15 -0
  98. package/dist/components/SegmentedControl/index.d.ts +15 -0
  99. package/dist/components/Select/index.d.mts +26 -0
  100. package/dist/components/Select/index.d.ts +26 -0
  101. package/dist/components/Sidebar/index.d.mts +19 -0
  102. package/dist/components/Sidebar/index.d.ts +19 -0
  103. package/dist/components/SignInCallout/index.d.mts +26 -0
  104. package/dist/components/SignInCallout/index.d.ts +26 -0
  105. package/dist/components/Skeleton/index.d.mts +31 -0
  106. package/dist/components/Skeleton/index.d.ts +31 -0
  107. package/dist/components/Spinner/index.d.mts +13 -0
  108. package/dist/components/Spinner/index.d.ts +13 -0
  109. package/dist/components/StatCard/index.d.mts +15 -0
  110. package/dist/components/StatCard/index.d.ts +15 -0
  111. package/dist/components/StatusBadge/index.d.mts +16 -0
  112. package/dist/components/StatusBadge/index.d.ts +16 -0
  113. package/dist/components/Stepper/index.d.mts +16 -0
  114. package/dist/components/Stepper/index.d.ts +16 -0
  115. package/dist/components/Switch/index.d.mts +22 -0
  116. package/dist/components/Switch/index.d.ts +22 -0
  117. package/dist/components/Tabs/index.d.mts +18 -0
  118. package/dist/components/Tabs/index.d.ts +18 -0
  119. package/dist/components/Tag/index.d.mts +15 -0
  120. package/dist/components/Tag/index.d.ts +15 -0
  121. package/dist/components/Textarea/index.d.mts +16 -0
  122. package/dist/components/Textarea/index.d.ts +16 -0
  123. package/dist/components/Toast/index.d.mts +16 -0
  124. package/dist/components/Toast/index.d.ts +16 -0
  125. package/dist/components/Toggle/index.d.mts +13 -0
  126. package/dist/components/Toggle/index.d.ts +13 -0
  127. package/dist/components/Tooltip/index.d.mts +11 -0
  128. package/dist/components/Tooltip/index.d.ts +11 -0
  129. package/dist/components/VerticalMarquee/index.d.mts +16 -0
  130. package/dist/components/VerticalMarquee/index.d.ts +16 -0
  131. package/dist/index.d.mts +189 -0
  132. package/dist/index.d.ts +189 -0
  133. package/dist/index.js +54 -54
  134. package/dist/index.mjs +12 -12
  135. package/dist/tailwind-preset.d.mts +170 -0
  136. package/dist/tailwind-preset.d.ts +170 -0
  137. package/dist/tokens/index.d.mts +219 -0
  138. package/dist/tokens/index.d.ts +219 -0
  139. package/dist/typography-BUlhEnfy.d.mts +16 -0
  140. package/dist/typography-BUlhEnfy.d.ts +16 -0
  141. package/dist/utils/index.d.mts +5 -0
  142. package/dist/utils/index.d.ts +5 -0
  143. package/package.json +1 -1
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+
3
+ interface MobileMenuLink {
4
+ label: string;
5
+ href: string;
6
+ }
7
+ interface MobileMenuSection {
8
+ label: string;
9
+ /** "link" = simple link, "accordion" = expandable section */
10
+ type: "link" | "accordion";
11
+ href?: string;
12
+ children?: MobileMenuLink[];
13
+ }
14
+ interface MobileMenuProps {
15
+ items: MobileMenuSection[];
16
+ isOpen: boolean;
17
+ onClose: () => void;
18
+ /** Header content — e.g. logo */
19
+ header?: React.ReactNode;
20
+ /** Fixed bottom content — e.g. auth buttons */
21
+ footer?: React.ReactNode;
22
+ /** Extra links before the footer (e.g. "Aide") */
23
+ extraLinks?: MobileMenuLink[];
24
+ /** Render function for links */
25
+ renderLink?: (props: {
26
+ href: string;
27
+ className?: string;
28
+ onClick?: () => void;
29
+ children: React.ReactNode;
30
+ }) => React.ReactNode;
31
+ className?: string;
32
+ }
33
+ declare const MobileMenu: React.ForwardRefExoticComponent<MobileMenuProps & React.RefAttributes<HTMLDivElement>>;
34
+
35
+ export { MobileMenu, type MobileMenuLink, type MobileMenuProps, type MobileMenuSection };
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+
3
+ interface MobileMenuLink {
4
+ label: string;
5
+ href: string;
6
+ }
7
+ interface MobileMenuSection {
8
+ label: string;
9
+ /** "link" = simple link, "accordion" = expandable section */
10
+ type: "link" | "accordion";
11
+ href?: string;
12
+ children?: MobileMenuLink[];
13
+ }
14
+ interface MobileMenuProps {
15
+ items: MobileMenuSection[];
16
+ isOpen: boolean;
17
+ onClose: () => void;
18
+ /** Header content — e.g. logo */
19
+ header?: React.ReactNode;
20
+ /** Fixed bottom content — e.g. auth buttons */
21
+ footer?: React.ReactNode;
22
+ /** Extra links before the footer (e.g. "Aide") */
23
+ extraLinks?: MobileMenuLink[];
24
+ /** Render function for links */
25
+ renderLink?: (props: {
26
+ href: string;
27
+ className?: string;
28
+ onClick?: () => void;
29
+ children: React.ReactNode;
30
+ }) => React.ReactNode;
31
+ className?: string;
32
+ }
33
+ declare const MobileMenu: React.ForwardRefExoticComponent<MobileMenuProps & React.RefAttributes<HTMLDivElement>>;
34
+
35
+ export { MobileMenu, type MobileMenuLink, type MobileMenuProps, type MobileMenuSection };
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+
3
+ interface ModalProps {
4
+ isOpen: boolean;
5
+ onClose: () => void;
6
+ children: React.ReactNode;
7
+ title?: string;
8
+ className?: string;
9
+ }
10
+ declare const Modal: React.ForwardRefExoticComponent<ModalProps & React.RefAttributes<HTMLDivElement>>;
11
+
12
+ export { Modal, type ModalProps };
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+
3
+ interface ModalProps {
4
+ isOpen: boolean;
5
+ onClose: () => void;
6
+ children: React.ReactNode;
7
+ title?: string;
8
+ className?: string;
9
+ }
10
+ declare const Modal: React.ForwardRefExoticComponent<ModalProps & React.RefAttributes<HTMLDivElement>>;
11
+
12
+ export { Modal, type ModalProps };
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+
3
+ interface PaginationProps {
4
+ currentPage: number;
5
+ totalPages: number;
6
+ onPageChange: (page: number) => void;
7
+ /** Max page buttons visible (excluding prev/next). Default: 5 */
8
+ siblingCount?: number;
9
+ className?: string;
10
+ }
11
+ declare const Pagination: React.ForwardRefExoticComponent<PaginationProps & React.RefAttributes<HTMLElement>>;
12
+
13
+ export { Pagination, type PaginationProps };
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+
3
+ interface PaginationProps {
4
+ currentPage: number;
5
+ totalPages: number;
6
+ onPageChange: (page: number) => void;
7
+ /** Max page buttons visible (excluding prev/next). Default: 5 */
8
+ siblingCount?: number;
9
+ className?: string;
10
+ }
11
+ declare const Pagination: React.ForwardRefExoticComponent<PaginationProps & React.RefAttributes<HTMLElement>>;
12
+
13
+ export { Pagination, type PaginationProps };
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+
3
+ interface PriceDisplayProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ price: number;
5
+ originalPrice?: number;
6
+ currency?: string;
7
+ period?: string;
8
+ /** Show discount percentage badge. Default: true when originalPrice given */
9
+ showDiscount?: boolean;
10
+ size?: "sm" | "md" | "lg";
11
+ }
12
+ declare const PriceDisplay: React.ForwardRefExoticComponent<PriceDisplayProps & React.RefAttributes<HTMLDivElement>>;
13
+
14
+ export { PriceDisplay, type PriceDisplayProps };
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+
3
+ interface PriceDisplayProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ price: number;
5
+ originalPrice?: number;
6
+ currency?: string;
7
+ period?: string;
8
+ /** Show discount percentage badge. Default: true when originalPrice given */
9
+ showDiscount?: boolean;
10
+ size?: "sm" | "md" | "lg";
11
+ }
12
+ declare const PriceDisplay: React.ForwardRefExoticComponent<PriceDisplayProps & React.RefAttributes<HTMLDivElement>>;
13
+
14
+ export { PriceDisplay, type PriceDisplayProps };
@@ -0,0 +1,19 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const progressBarVariants: (props?: ({
6
+ size?: "sm" | "md" | "lg" | null | undefined;
7
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
8
+ declare const progressFillVariants: (props?: ({
9
+ color?: "primary" | "secondary" | "accent" | "error" | "success" | "warning" | null | undefined;
10
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
11
+ interface ProgressBarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "color">, VariantProps<typeof progressBarVariants>, VariantProps<typeof progressFillVariants> {
12
+ value: number;
13
+ max?: number;
14
+ label?: string;
15
+ showValue?: boolean;
16
+ }
17
+ declare const ProgressBar: React.ForwardRefExoticComponent<ProgressBarProps & React.RefAttributes<HTMLDivElement>>;
18
+
19
+ export { ProgressBar, type ProgressBarProps, progressBarVariants, progressFillVariants };
@@ -0,0 +1,19 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const progressBarVariants: (props?: ({
6
+ size?: "sm" | "md" | "lg" | null | undefined;
7
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
8
+ declare const progressFillVariants: (props?: ({
9
+ color?: "primary" | "secondary" | "accent" | "error" | "success" | "warning" | null | undefined;
10
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
11
+ interface ProgressBarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "color">, VariantProps<typeof progressBarVariants>, VariantProps<typeof progressFillVariants> {
12
+ value: number;
13
+ max?: number;
14
+ label?: string;
15
+ showValue?: boolean;
16
+ }
17
+ declare const ProgressBar: React.ForwardRefExoticComponent<ProgressBarProps & React.RefAttributes<HTMLDivElement>>;
18
+
19
+ export { ProgressBar, type ProgressBarProps, progressBarVariants, progressFillVariants };
@@ -0,0 +1,39 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import React__default from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const promoBannerVariants: (props?: ({
6
+ variant?: "alert" | "info" | "promo" | "maintenance" | null | undefined;
7
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
8
+ interface PromoBannerProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, "children">, VariantProps<typeof promoBannerVariants> {
9
+ promo?: {
10
+ message: string;
11
+ cta?: {
12
+ label: string;
13
+ href: string;
14
+ };
15
+ };
16
+ alert?: {
17
+ message: string;
18
+ };
19
+ countdown?: {
20
+ targetDate: string;
21
+ label?: string;
22
+ expiredLabel?: string;
23
+ };
24
+ email?: {
25
+ placeholder?: string;
26
+ submitLabel?: string;
27
+ onSubmit: (email: string) => Promise<void>;
28
+ successMessage?: string;
29
+ };
30
+ storageKey?: string;
31
+ renderLink?: (props: {
32
+ href: string;
33
+ className?: string;
34
+ children: React__default.ReactNode;
35
+ }) => React__default.ReactNode;
36
+ }
37
+ declare const PromoBanner: React__default.ForwardRefExoticComponent<PromoBannerProps & React__default.RefAttributes<HTMLDivElement>>;
38
+
39
+ export { PromoBanner, type PromoBannerProps, promoBannerVariants };
@@ -0,0 +1,39 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import React__default from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const promoBannerVariants: (props?: ({
6
+ variant?: "alert" | "info" | "promo" | "maintenance" | null | undefined;
7
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
8
+ interface PromoBannerProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, "children">, VariantProps<typeof promoBannerVariants> {
9
+ promo?: {
10
+ message: string;
11
+ cta?: {
12
+ label: string;
13
+ href: string;
14
+ };
15
+ };
16
+ alert?: {
17
+ message: string;
18
+ };
19
+ countdown?: {
20
+ targetDate: string;
21
+ label?: string;
22
+ expiredLabel?: string;
23
+ };
24
+ email?: {
25
+ placeholder?: string;
26
+ submitLabel?: string;
27
+ onSubmit: (email: string) => Promise<void>;
28
+ successMessage?: string;
29
+ };
30
+ storageKey?: string;
31
+ renderLink?: (props: {
32
+ href: string;
33
+ className?: string;
34
+ children: React__default.ReactNode;
35
+ }) => React__default.ReactNode;
36
+ }
37
+ declare const PromoBanner: React__default.ForwardRefExoticComponent<PromoBannerProps & React__default.RefAttributes<HTMLDivElement>>;
38
+
39
+ export { PromoBanner, type PromoBannerProps, promoBannerVariants };
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+
3
+ interface RadioGroupItemOption {
4
+ value: string;
5
+ label: string;
6
+ description?: string;
7
+ }
8
+ interface RadioGroupProps {
9
+ value?: string;
10
+ onChange?: (value: string) => void;
11
+ label?: string;
12
+ error?: string;
13
+ required?: boolean;
14
+ orientation?: "vertical" | "grid";
15
+ columns?: 2 | 3 | 4;
16
+ options: RadioGroupItemOption[];
17
+ className?: string;
18
+ }
19
+ declare const RadioGroup: React.ForwardRefExoticComponent<RadioGroupProps & React.RefAttributes<HTMLFieldSetElement>>;
20
+
21
+ export { RadioGroup, type RadioGroupItemOption, type RadioGroupProps };
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+
3
+ interface RadioGroupItemOption {
4
+ value: string;
5
+ label: string;
6
+ description?: string;
7
+ }
8
+ interface RadioGroupProps {
9
+ value?: string;
10
+ onChange?: (value: string) => void;
11
+ label?: string;
12
+ error?: string;
13
+ required?: boolean;
14
+ orientation?: "vertical" | "grid";
15
+ columns?: 2 | 3 | 4;
16
+ options: RadioGroupItemOption[];
17
+ className?: string;
18
+ }
19
+ declare const RadioGroup: React.ForwardRefExoticComponent<RadioGroupProps & React.RefAttributes<HTMLFieldSetElement>>;
20
+
21
+ export { RadioGroup, type RadioGroupItemOption, type RadioGroupProps };
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+
3
+ interface RatingProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ value: number;
5
+ max?: number;
6
+ size?: "sm" | "md" | "lg";
7
+ showValue?: boolean;
8
+ reviewCount?: number;
9
+ }
10
+ declare const Rating: React.ForwardRefExoticComponent<RatingProps & React.RefAttributes<HTMLDivElement>>;
11
+
12
+ export { Rating, type RatingProps };
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+
3
+ interface RatingProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ value: number;
5
+ max?: number;
6
+ size?: "sm" | "md" | "lg";
7
+ showValue?: boolean;
8
+ reviewCount?: number;
9
+ }
10
+ declare const Rating: React.ForwardRefExoticComponent<RatingProps & React.RefAttributes<HTMLDivElement>>;
11
+
12
+ export { Rating, type RatingProps };
@@ -0,0 +1,102 @@
1
+ import * as React from 'react';
2
+
3
+ type RoomRateCancellationKind = "free" | "partial" | "nonrefundable";
4
+ interface RoomRateCancellation {
5
+ kind: RoomRateCancellationKind;
6
+ /** Texte explicite, ex: "Annulation gratuite avant le 10 août" ou "Non remboursable" */
7
+ label: string;
8
+ }
9
+ interface RoomRate {
10
+ id: string;
11
+ /** ex: "Sans petit-déjeuner", "Petit-déjeuner inclus" */
12
+ mealLabel?: string;
13
+ cancellation: RoomRateCancellation;
14
+ /** Prix par nuit (déjà arrondi côté appelant si souhaité) */
15
+ pricePerNight: number;
16
+ /** Prix total du séjour */
17
+ totalPrice: number;
18
+ /** Prix total barré (avant réduction) */
19
+ originalTotal?: number;
20
+ /** ex: "2 nuits, taxes incl." */
21
+ totalLabel?: string;
22
+ /** Frais chien explicite, ex: "Chien inclus : +16 €" */
23
+ dogFeeLabel?: string;
24
+ }
25
+ interface RoomTypeData {
26
+ name: string;
27
+ image?: string;
28
+ /** Nombre total de photos pour cette chambre (badge) */
29
+ imageCount?: number;
30
+ /**
31
+ * Si défini, `image` est une photo de l'ÉTABLISSEMENT (non attribuée à cette
32
+ * chambre) : ce libellé est utilisé comme `alt` et affiché en incrustation
33
+ * (ex: "Photo de l'établissement"). Prend le pas sur le badge `imageCount`
34
+ * pour ne jamais laisser croire à une galerie propre à la chambre.
35
+ */
36
+ establishmentPhotoLabel?: string;
37
+ /** ex: "1 lit double", "2 lits jumeaux" */
38
+ beds?: string;
39
+ /** Surface en m² */
40
+ sizeSqm?: number;
41
+ /** Capacité max voyageurs */
42
+ maxOccupancy?: number;
43
+ /** Équipements clés, ex: ["Wi-Fi", "Climatisation", "TV"] */
44
+ amenities?: string[];
45
+ /** Description courte de la chambre (sous la ligne de méta) */
46
+ description?: string;
47
+ /** Atout mis en avant en vert, ex: "Vue jardin", "Jardin privatif clos" */
48
+ highlight?: string;
49
+ }
50
+ interface RoomTypeCardProps extends React.HTMLAttributes<HTMLDivElement> {
51
+ room: RoomTypeData;
52
+ rates: RoomRate[];
53
+ /** id de la formule actuellement sélectionnée */
54
+ selectedRateId?: string;
55
+ onSelectRate?: (rateId: string) => void;
56
+ /**
57
+ * Callback de réservation directe (pattern Expedia) : quand fourni, la formule
58
+ * sélectionnée affiche un bouton PLEIN « Réserver » qui l'appelle. Absent →
59
+ * comportement historique préservé (bouton « Sélectionné », API additive).
60
+ */
61
+ onReserveRate?: (rateId: string) => void;
62
+ /** Libellé du CTA de réservation directe (défaut « Réserver »). */
63
+ reserveLabel?: string;
64
+ /** Note grise sous le CTA « Réserver » (ex: « Le montant ne vous sera pas encore facturé »). */
65
+ ctaNote?: string;
66
+ /** Nombre de formules visibles avant le bouton "X autres formules" (défaut 2) */
67
+ initialVisibleRates?: number;
68
+ selectLabel?: string;
69
+ /** Variante d'affichage : "default" (détaillée) ou "compact" (grille 2 colonnes mobile) */
70
+ variant?: "default" | "compact";
71
+ /** Disponibilité : "unavailable" masque les formules et affiche un état dédié */
72
+ availability?: "available" | "unavailable";
73
+ /** Callback du lien "Voir d'autres dates" (état indisponible) */
74
+ onSeeOtherDates?: () => void;
75
+ /** Libellé de l'état indisponible */
76
+ unavailableLabel?: string;
77
+ /** Render custom image (ex: next/image) */
78
+ renderImage?: (props: {
79
+ src: string;
80
+ alt: string;
81
+ className: string;
82
+ }) => React.ReactNode;
83
+ }
84
+ declare const RoomTypeCard: React.ForwardRefExoticComponent<RoomTypeCardProps & React.RefAttributes<HTMLDivElement>>;
85
+
86
+ interface RoomTypeCardSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {
87
+ /** Aligné sur `RoomTypeCard.variant` : compact = image 128px, padding réduit. */
88
+ variant?: "default" | "compact";
89
+ }
90
+ /**
91
+ * Squelette de chargement calqué sur la structure de `RoomTypeCard`
92
+ * (image, titre, caractéristiques, formule, prix + CTA). À afficher pendant
93
+ * la recherche des tarifs temps réel.
94
+ *
95
+ * Purement décoratif (`aria-hidden`) : lorsque plusieurs squelettes sont
96
+ * rendus, porter l'annonce sur un conteneur unique côté appelant
97
+ * (`role="status"` + `aria-label`), afin d'éviter les annonces dupliquées
98
+ * pour les lecteurs d'écran.
99
+ */
100
+ declare const RoomTypeCardSkeleton: React.ForwardRefExoticComponent<RoomTypeCardSkeletonProps & React.RefAttributes<HTMLDivElement>>;
101
+
102
+ export { type RoomRate, type RoomRateCancellation, type RoomRateCancellationKind, RoomTypeCard, type RoomTypeCardProps, RoomTypeCardSkeleton, type RoomTypeCardSkeletonProps, type RoomTypeData };
@@ -0,0 +1,102 @@
1
+ import * as React from 'react';
2
+
3
+ type RoomRateCancellationKind = "free" | "partial" | "nonrefundable";
4
+ interface RoomRateCancellation {
5
+ kind: RoomRateCancellationKind;
6
+ /** Texte explicite, ex: "Annulation gratuite avant le 10 août" ou "Non remboursable" */
7
+ label: string;
8
+ }
9
+ interface RoomRate {
10
+ id: string;
11
+ /** ex: "Sans petit-déjeuner", "Petit-déjeuner inclus" */
12
+ mealLabel?: string;
13
+ cancellation: RoomRateCancellation;
14
+ /** Prix par nuit (déjà arrondi côté appelant si souhaité) */
15
+ pricePerNight: number;
16
+ /** Prix total du séjour */
17
+ totalPrice: number;
18
+ /** Prix total barré (avant réduction) */
19
+ originalTotal?: number;
20
+ /** ex: "2 nuits, taxes incl." */
21
+ totalLabel?: string;
22
+ /** Frais chien explicite, ex: "Chien inclus : +16 €" */
23
+ dogFeeLabel?: string;
24
+ }
25
+ interface RoomTypeData {
26
+ name: string;
27
+ image?: string;
28
+ /** Nombre total de photos pour cette chambre (badge) */
29
+ imageCount?: number;
30
+ /**
31
+ * Si défini, `image` est une photo de l'ÉTABLISSEMENT (non attribuée à cette
32
+ * chambre) : ce libellé est utilisé comme `alt` et affiché en incrustation
33
+ * (ex: "Photo de l'établissement"). Prend le pas sur le badge `imageCount`
34
+ * pour ne jamais laisser croire à une galerie propre à la chambre.
35
+ */
36
+ establishmentPhotoLabel?: string;
37
+ /** ex: "1 lit double", "2 lits jumeaux" */
38
+ beds?: string;
39
+ /** Surface en m² */
40
+ sizeSqm?: number;
41
+ /** Capacité max voyageurs */
42
+ maxOccupancy?: number;
43
+ /** Équipements clés, ex: ["Wi-Fi", "Climatisation", "TV"] */
44
+ amenities?: string[];
45
+ /** Description courte de la chambre (sous la ligne de méta) */
46
+ description?: string;
47
+ /** Atout mis en avant en vert, ex: "Vue jardin", "Jardin privatif clos" */
48
+ highlight?: string;
49
+ }
50
+ interface RoomTypeCardProps extends React.HTMLAttributes<HTMLDivElement> {
51
+ room: RoomTypeData;
52
+ rates: RoomRate[];
53
+ /** id de la formule actuellement sélectionnée */
54
+ selectedRateId?: string;
55
+ onSelectRate?: (rateId: string) => void;
56
+ /**
57
+ * Callback de réservation directe (pattern Expedia) : quand fourni, la formule
58
+ * sélectionnée affiche un bouton PLEIN « Réserver » qui l'appelle. Absent →
59
+ * comportement historique préservé (bouton « Sélectionné », API additive).
60
+ */
61
+ onReserveRate?: (rateId: string) => void;
62
+ /** Libellé du CTA de réservation directe (défaut « Réserver »). */
63
+ reserveLabel?: string;
64
+ /** Note grise sous le CTA « Réserver » (ex: « Le montant ne vous sera pas encore facturé »). */
65
+ ctaNote?: string;
66
+ /** Nombre de formules visibles avant le bouton "X autres formules" (défaut 2) */
67
+ initialVisibleRates?: number;
68
+ selectLabel?: string;
69
+ /** Variante d'affichage : "default" (détaillée) ou "compact" (grille 2 colonnes mobile) */
70
+ variant?: "default" | "compact";
71
+ /** Disponibilité : "unavailable" masque les formules et affiche un état dédié */
72
+ availability?: "available" | "unavailable";
73
+ /** Callback du lien "Voir d'autres dates" (état indisponible) */
74
+ onSeeOtherDates?: () => void;
75
+ /** Libellé de l'état indisponible */
76
+ unavailableLabel?: string;
77
+ /** Render custom image (ex: next/image) */
78
+ renderImage?: (props: {
79
+ src: string;
80
+ alt: string;
81
+ className: string;
82
+ }) => React.ReactNode;
83
+ }
84
+ declare const RoomTypeCard: React.ForwardRefExoticComponent<RoomTypeCardProps & React.RefAttributes<HTMLDivElement>>;
85
+
86
+ interface RoomTypeCardSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {
87
+ /** Aligné sur `RoomTypeCard.variant` : compact = image 128px, padding réduit. */
88
+ variant?: "default" | "compact";
89
+ }
90
+ /**
91
+ * Squelette de chargement calqué sur la structure de `RoomTypeCard`
92
+ * (image, titre, caractéristiques, formule, prix + CTA). À afficher pendant
93
+ * la recherche des tarifs temps réel.
94
+ *
95
+ * Purement décoratif (`aria-hidden`) : lorsque plusieurs squelettes sont
96
+ * rendus, porter l'annonce sur un conteneur unique côté appelant
97
+ * (`role="status"` + `aria-label`), afin d'éviter les annonces dupliquées
98
+ * pour les lecteurs d'écran.
99
+ */
100
+ declare const RoomTypeCardSkeleton: React.ForwardRefExoticComponent<RoomTypeCardSkeletonProps & React.RefAttributes<HTMLDivElement>>;
101
+
102
+ export { type RoomRate, type RoomRateCancellation, type RoomRateCancellationKind, RoomTypeCard, type RoomTypeCardProps, RoomTypeCardSkeleton, type RoomTypeCardSkeletonProps, type RoomTypeData };
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+
3
+ interface SearchBarField {
4
+ key: string;
5
+ label: string;
6
+ value: string;
7
+ placeholder: string;
8
+ icon?: React.ReactNode;
9
+ }
10
+ interface SearchBarProps {
11
+ fields: SearchBarField[];
12
+ onFieldClick?: (key: string) => void;
13
+ onSearch?: () => void;
14
+ searchLabel?: string;
15
+ variant?: "hero" | "compact" | "sticky";
16
+ className?: string;
17
+ }
18
+ declare const SearchBar: React.ForwardRefExoticComponent<SearchBarProps & React.RefAttributes<HTMLDivElement>>;
19
+
20
+ export { SearchBar, type SearchBarField, type SearchBarProps };
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+
3
+ interface SearchBarField {
4
+ key: string;
5
+ label: string;
6
+ value: string;
7
+ placeholder: string;
8
+ icon?: React.ReactNode;
9
+ }
10
+ interface SearchBarProps {
11
+ fields: SearchBarField[];
12
+ onFieldClick?: (key: string) => void;
13
+ onSearch?: () => void;
14
+ searchLabel?: string;
15
+ variant?: "hero" | "compact" | "sticky";
16
+ className?: string;
17
+ }
18
+ declare const SearchBar: React.ForwardRefExoticComponent<SearchBarProps & React.RefAttributes<HTMLDivElement>>;
19
+
20
+ export { SearchBar, type SearchBarField, type SearchBarProps };
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+
3
+ interface SegmentedControlOption {
4
+ value: string;
5
+ label: string;
6
+ }
7
+ interface SegmentedControlProps {
8
+ options: SegmentedControlOption[];
9
+ value: string;
10
+ onChange: (value: string) => void;
11
+ className?: string;
12
+ }
13
+ declare const SegmentedControl: React.ForwardRefExoticComponent<SegmentedControlProps & React.RefAttributes<HTMLDivElement>>;
14
+
15
+ export { SegmentedControl, type SegmentedControlOption, type SegmentedControlProps };
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+
3
+ interface SegmentedControlOption {
4
+ value: string;
5
+ label: string;
6
+ }
7
+ interface SegmentedControlProps {
8
+ options: SegmentedControlOption[];
9
+ value: string;
10
+ onChange: (value: string) => void;
11
+ className?: string;
12
+ }
13
+ declare const SegmentedControl: React.ForwardRefExoticComponent<SegmentedControlProps & React.RefAttributes<HTMLDivElement>>;
14
+
15
+ export { SegmentedControl, type SegmentedControlOption, type SegmentedControlProps };
@@ -0,0 +1,26 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const selectVariants: (props?: ({
6
+ size?: "sm" | "md" | "lg" | null | undefined;
7
+ variant?: "default" | "error" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ interface SelectOption {
10
+ value: string;
11
+ label: string;
12
+ }
13
+ interface SelectProps extends VariantProps<typeof selectVariants> {
14
+ options: SelectOption[];
15
+ value?: string;
16
+ onChange?: (value: string) => void;
17
+ label?: string;
18
+ error?: string;
19
+ required?: boolean;
20
+ placeholder?: string;
21
+ disabled?: boolean;
22
+ className?: string;
23
+ }
24
+ declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLDivElement>>;
25
+
26
+ export { Select, type SelectOption, type SelectProps, selectVariants };