@dododog/ui 0.9.0 → 0.9.2

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 (147) hide show
  1. package/dist/{chunk-3JM2X4I2.js → chunk-SATQIPV5.js} +65 -1
  2. package/dist/{chunk-BFGRWOQM.mjs → chunk-ZEHZPS2P.mjs} +65 -1
  3. package/dist/components/Accordion/index.d.mts +24 -0
  4. package/dist/components/Accordion/index.d.ts +24 -0
  5. package/dist/components/Alert/index.d.mts +40 -0
  6. package/dist/components/Alert/index.d.ts +40 -0
  7. package/dist/components/AnchorTabs/index.d.mts +59 -0
  8. package/dist/components/AnchorTabs/index.d.ts +59 -0
  9. package/dist/components/Autocomplete/index.d.mts +27 -0
  10. package/dist/components/Autocomplete/index.d.ts +27 -0
  11. package/dist/components/Avatar/index.d.mts +13 -0
  12. package/dist/components/Avatar/index.d.ts +13 -0
  13. package/dist/components/Badge/index.d.mts +13 -0
  14. package/dist/components/Badge/index.d.ts +13 -0
  15. package/dist/components/Banner/index.d.mts +19 -0
  16. package/dist/components/Banner/index.d.ts +19 -0
  17. package/dist/components/BottomNavBar/index.d.mts +17 -0
  18. package/dist/components/BottomNavBar/index.d.ts +17 -0
  19. package/dist/components/Breadcrumb/index.d.mts +23 -0
  20. package/dist/components/Breadcrumb/index.d.ts +23 -0
  21. package/dist/components/Button/index.d.mts +17 -0
  22. package/dist/components/Button/index.d.ts +17 -0
  23. package/dist/components/Card/index.d.mts +30 -0
  24. package/dist/components/Card/index.d.ts +30 -0
  25. package/dist/components/CardList/index.d.mts +30 -0
  26. package/dist/components/CardList/index.d.ts +30 -0
  27. package/dist/components/Carousel/index.d.mts +15 -0
  28. package/dist/components/Carousel/index.d.ts +15 -0
  29. package/dist/components/Checkbox/index.d.mts +16 -0
  30. package/dist/components/Checkbox/index.d.ts +16 -0
  31. package/dist/components/Counter/index.d.mts +14 -0
  32. package/dist/components/Counter/index.d.ts +14 -0
  33. package/dist/components/DateRangePicker/index.d.mts +26 -0
  34. package/dist/components/DateRangePicker/index.d.ts +26 -0
  35. package/dist/components/DetailList/index.d.mts +23 -0
  36. package/dist/components/DetailList/index.d.ts +23 -0
  37. package/dist/components/Divider/index.d.mts +10 -0
  38. package/dist/components/Divider/index.d.ts +10 -0
  39. package/dist/components/Drawer/index.d.mts +13 -0
  40. package/dist/components/Drawer/index.d.ts +13 -0
  41. package/dist/components/DropdownMenu/index.d.mts +19 -0
  42. package/dist/components/DropdownMenu/index.d.ts +19 -0
  43. package/dist/components/DualRangeSlider/index.d.mts +26 -0
  44. package/dist/components/DualRangeSlider/index.d.ts +26 -0
  45. package/dist/components/EmptyState/index.d.mts +12 -0
  46. package/dist/components/EmptyState/index.d.ts +12 -0
  47. package/dist/components/ErrorBoundary/index.d.mts +21 -0
  48. package/dist/components/ErrorBoundary/index.d.ts +21 -0
  49. package/dist/components/FilterAccordion/index.d.mts +16 -0
  50. package/dist/components/FilterAccordion/index.d.ts +16 -0
  51. package/dist/components/FilterPill/index.d.mts +19 -0
  52. package/dist/components/FilterPill/index.d.ts +19 -0
  53. package/dist/components/FloatingDock/index.d.mts +65 -0
  54. package/dist/components/FloatingDock/index.d.ts +65 -0
  55. package/dist/components/Footer/index.d.mts +46 -0
  56. package/dist/components/Footer/index.d.ts +46 -0
  57. package/dist/components/GuestPicker/index.d.mts +31 -0
  58. package/dist/components/GuestPicker/index.d.ts +31 -0
  59. package/dist/components/Header/index.d.mts +37 -0
  60. package/dist/components/Header/index.d.ts +37 -0
  61. package/dist/components/HotelCard/index.d.mts +45 -0
  62. package/dist/components/HotelCard/index.d.ts +45 -0
  63. package/dist/components/IconBadge/index.d.mts +14 -0
  64. package/dist/components/IconBadge/index.d.ts +14 -0
  65. package/dist/components/ImageGallery/index.d.mts +16 -0
  66. package/dist/components/ImageGallery/index.d.ts +16 -0
  67. package/dist/components/ImageWithFallback/index.d.mts +17 -0
  68. package/dist/components/ImageWithFallback/index.d.ts +17 -0
  69. package/dist/components/Input/index.d.mts +18 -0
  70. package/dist/components/Input/index.d.ts +18 -0
  71. package/dist/components/Lightbox/index.d.mts +15 -0
  72. package/dist/components/Lightbox/index.d.ts +15 -0
  73. package/dist/components/LinkCard/index.d.mts +12 -0
  74. package/dist/components/LinkCard/index.d.ts +12 -0
  75. package/dist/components/LoadingOverlay/index.d.mts +12 -0
  76. package/dist/components/LoadingOverlay/index.d.ts +12 -0
  77. package/dist/components/MegaMenu/index.d.mts +52 -0
  78. package/dist/components/MegaMenu/index.d.ts +52 -0
  79. package/dist/components/MobileMenu/index.d.mts +35 -0
  80. package/dist/components/MobileMenu/index.d.ts +35 -0
  81. package/dist/components/Modal/index.d.mts +12 -0
  82. package/dist/components/Modal/index.d.ts +12 -0
  83. package/dist/components/Pagination/index.d.mts +13 -0
  84. package/dist/components/Pagination/index.d.ts +13 -0
  85. package/dist/components/PriceDisplay/index.d.mts +14 -0
  86. package/dist/components/PriceDisplay/index.d.ts +14 -0
  87. package/dist/components/ProgressBar/index.d.mts +19 -0
  88. package/dist/components/ProgressBar/index.d.ts +19 -0
  89. package/dist/components/PromoBanner/index.d.mts +39 -0
  90. package/dist/components/PromoBanner/index.d.ts +39 -0
  91. package/dist/components/RadioGroup/index.d.mts +21 -0
  92. package/dist/components/RadioGroup/index.d.ts +21 -0
  93. package/dist/components/Rating/index.d.mts +12 -0
  94. package/dist/components/Rating/index.d.ts +12 -0
  95. package/dist/components/RoomTypeCard/index.d.mts +126 -0
  96. package/dist/components/RoomTypeCard/index.d.ts +126 -0
  97. package/dist/components/RoomTypeCard/index.js +3 -3
  98. package/dist/components/RoomTypeCard/index.mjs +1 -1
  99. package/dist/components/SearchBar/index.d.mts +20 -0
  100. package/dist/components/SearchBar/index.d.ts +20 -0
  101. package/dist/components/SegmentedControl/index.d.mts +15 -0
  102. package/dist/components/SegmentedControl/index.d.ts +15 -0
  103. package/dist/components/Select/index.d.mts +26 -0
  104. package/dist/components/Select/index.d.ts +26 -0
  105. package/dist/components/Sidebar/index.d.mts +19 -0
  106. package/dist/components/Sidebar/index.d.ts +19 -0
  107. package/dist/components/SignInCallout/index.d.mts +26 -0
  108. package/dist/components/SignInCallout/index.d.ts +26 -0
  109. package/dist/components/Skeleton/index.d.mts +31 -0
  110. package/dist/components/Skeleton/index.d.ts +31 -0
  111. package/dist/components/Spinner/index.d.mts +13 -0
  112. package/dist/components/Spinner/index.d.ts +13 -0
  113. package/dist/components/StatCard/index.d.mts +15 -0
  114. package/dist/components/StatCard/index.d.ts +15 -0
  115. package/dist/components/StatusBadge/index.d.mts +16 -0
  116. package/dist/components/StatusBadge/index.d.ts +16 -0
  117. package/dist/components/Stepper/index.d.mts +16 -0
  118. package/dist/components/Stepper/index.d.ts +16 -0
  119. package/dist/components/Switch/index.d.mts +22 -0
  120. package/dist/components/Switch/index.d.ts +22 -0
  121. package/dist/components/Tabs/index.d.mts +18 -0
  122. package/dist/components/Tabs/index.d.ts +18 -0
  123. package/dist/components/Tag/index.d.mts +15 -0
  124. package/dist/components/Tag/index.d.ts +15 -0
  125. package/dist/components/Textarea/index.d.mts +16 -0
  126. package/dist/components/Textarea/index.d.ts +16 -0
  127. package/dist/components/Toast/index.d.mts +16 -0
  128. package/dist/components/Toast/index.d.ts +16 -0
  129. package/dist/components/Toggle/index.d.mts +13 -0
  130. package/dist/components/Toggle/index.d.ts +13 -0
  131. package/dist/components/Tooltip/index.d.mts +11 -0
  132. package/dist/components/Tooltip/index.d.ts +11 -0
  133. package/dist/components/VerticalMarquee/index.d.mts +16 -0
  134. package/dist/components/VerticalMarquee/index.d.ts +16 -0
  135. package/dist/index.d.mts +189 -0
  136. package/dist/index.d.ts +189 -0
  137. package/dist/index.js +37 -37
  138. package/dist/index.mjs +9 -9
  139. package/dist/tailwind-preset.d.mts +170 -0
  140. package/dist/tailwind-preset.d.ts +170 -0
  141. package/dist/tokens/index.d.mts +219 -0
  142. package/dist/tokens/index.d.ts +219 -0
  143. package/dist/typography-BUlhEnfy.d.mts +16 -0
  144. package/dist/typography-BUlhEnfy.d.ts +16 -0
  145. package/dist/utils/index.d.mts +5 -0
  146. package/dist/utils/index.d.ts +5 -0
  147. package/package.json +1 -1
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+
3
+ interface FilterPillProps {
4
+ label: string;
5
+ isActive?: boolean;
6
+ count?: number;
7
+ onClear?: () => void;
8
+ children?: React.ReactNode;
9
+ className?: string;
10
+ /**
11
+ * Mode TOGGLE (additif) : quand fourni, le clic bascule le filtre au lieu
12
+ * d'ouvrir un dropdown — le chevron disparaît et l'état est exposé via
13
+ * `aria-pressed`. Utilisé par les filtres de la section chambres (fiche V2).
14
+ */
15
+ onToggle?: () => void;
16
+ }
17
+ declare const FilterPill: React.ForwardRefExoticComponent<FilterPillProps & React.RefAttributes<HTMLDivElement>>;
18
+
19
+ export { FilterPill, type FilterPillProps };
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+
3
+ interface FilterPillProps {
4
+ label: string;
5
+ isActive?: boolean;
6
+ count?: number;
7
+ onClear?: () => void;
8
+ children?: React.ReactNode;
9
+ className?: string;
10
+ /**
11
+ * Mode TOGGLE (additif) : quand fourni, le clic bascule le filtre au lieu
12
+ * d'ouvrir un dropdown — le chevron disparaît et l'état est exposé via
13
+ * `aria-pressed`. Utilisé par les filtres de la section chambres (fiche V2).
14
+ */
15
+ onToggle?: () => void;
16
+ }
17
+ declare const FilterPill: React.ForwardRefExoticComponent<FilterPillProps & React.RefAttributes<HTMLDivElement>>;
18
+
19
+ export { FilterPill, type FilterPillProps };
@@ -0,0 +1,65 @@
1
+ import * as React from 'react';
2
+
3
+ /** Sous-item d'un menu de dock (ex: choix de carte). Rendu en `<a href>` crawlable. */
4
+ interface FloatingDockMenuItem {
5
+ /** Identifiant stable. */
6
+ key: string;
7
+ /** Libellé affiché dans le menu. */
8
+ label: string;
9
+ /** Icône (dimensionnée par l'appelant). */
10
+ icon: React.ReactNode;
11
+ /** Destination (crawlable même si `onNavigate` intercepte). */
12
+ href: string;
13
+ /** Marque l'entrée comme courante (surbrillance). */
14
+ isActive?: boolean;
15
+ }
16
+ interface FloatingDockItem {
17
+ /** Identifiant stable de l'item. */
18
+ key: string;
19
+ /** Libellé affiché quand l'item est actif (et pour l'accessibilité). */
20
+ label: string;
21
+ /** Icône (ex: `<Search className="w-5 h-5" />`), dimensionnée par l'appelant. */
22
+ icon: React.ReactNode;
23
+ /** Destination. Rendu comme `<a href>` (crawlable) même si `onNavigate` intercepte. */
24
+ href: string;
25
+ /** Item courant → bulle colorée + label visible. */
26
+ isActive?: boolean;
27
+ /**
28
+ * Sous-menu optionnel. Quand fourni, l'item devient un déclencheur : le tap
29
+ * ouvre un petit popover AU-DESSUS du dock listant ces entrées (au lieu de
30
+ * naviguer). `href` sert de repli crawlable/accessible.
31
+ */
32
+ menuItems?: FloatingDockMenuItem[];
33
+ }
34
+ interface FloatingDockProps {
35
+ /** Items de navigation (3 à 5 recommandés). */
36
+ items: FloatingDockItem[];
37
+ /** Classes supplémentaires appliquées à la pilule `<nav>`. */
38
+ className?: string;
39
+ /** Libellé ARIA de la navigation. */
40
+ ariaLabel?: string;
41
+ /**
42
+ * Intercepte le clic d'un item ou d'un sous-item (ex: navigation client Next,
43
+ * redirection login). Quand fourni, le `preventDefault` par défaut est appliqué
44
+ * avant l'appel — l'appelant gère lui-même la navigation.
45
+ */
46
+ onNavigate?: (item: FloatingDockItem | FloatingDockMenuItem) => void;
47
+ }
48
+ /**
49
+ * Barre de navigation flottante mobile — « dock » à bulle active.
50
+ *
51
+ * Présentation pure : l'îlot (pilule blanche arrondie, ombre douce, bulle
52
+ * colorée + label pour l'item actif) est rendu ici. Le positionnement `fixed`,
53
+ * le safe-area iOS, le masquage au scroll et la logique d'auth restent à la
54
+ * charge de l'appelant, via le wrapper englobant et `onNavigate`.
55
+ *
56
+ * - Item inactif : icône seule, cible tap 44px minimum.
57
+ * - Item actif : bulle colorée (token `secondary`) + label qui apparaît via une
58
+ * transition de largeur.
59
+ * - Item avec `menuItems` : agit comme déclencheur d'un popover ouvrant AU-DESSUS
60
+ * du dock (choix de sous-destinations). Ferme au tap extérieur / Échap.
61
+ * - Rendu en `<a href>` (crawlable / accessible), interceptable par `onNavigate`.
62
+ */
63
+ declare const FloatingDock: React.ForwardRefExoticComponent<FloatingDockProps & React.RefAttributes<HTMLElement>>;
64
+
65
+ export { FloatingDock, type FloatingDockItem, type FloatingDockMenuItem, type FloatingDockProps };
@@ -0,0 +1,65 @@
1
+ import * as React from 'react';
2
+
3
+ /** Sous-item d'un menu de dock (ex: choix de carte). Rendu en `<a href>` crawlable. */
4
+ interface FloatingDockMenuItem {
5
+ /** Identifiant stable. */
6
+ key: string;
7
+ /** Libellé affiché dans le menu. */
8
+ label: string;
9
+ /** Icône (dimensionnée par l'appelant). */
10
+ icon: React.ReactNode;
11
+ /** Destination (crawlable même si `onNavigate` intercepte). */
12
+ href: string;
13
+ /** Marque l'entrée comme courante (surbrillance). */
14
+ isActive?: boolean;
15
+ }
16
+ interface FloatingDockItem {
17
+ /** Identifiant stable de l'item. */
18
+ key: string;
19
+ /** Libellé affiché quand l'item est actif (et pour l'accessibilité). */
20
+ label: string;
21
+ /** Icône (ex: `<Search className="w-5 h-5" />`), dimensionnée par l'appelant. */
22
+ icon: React.ReactNode;
23
+ /** Destination. Rendu comme `<a href>` (crawlable) même si `onNavigate` intercepte. */
24
+ href: string;
25
+ /** Item courant → bulle colorée + label visible. */
26
+ isActive?: boolean;
27
+ /**
28
+ * Sous-menu optionnel. Quand fourni, l'item devient un déclencheur : le tap
29
+ * ouvre un petit popover AU-DESSUS du dock listant ces entrées (au lieu de
30
+ * naviguer). `href` sert de repli crawlable/accessible.
31
+ */
32
+ menuItems?: FloatingDockMenuItem[];
33
+ }
34
+ interface FloatingDockProps {
35
+ /** Items de navigation (3 à 5 recommandés). */
36
+ items: FloatingDockItem[];
37
+ /** Classes supplémentaires appliquées à la pilule `<nav>`. */
38
+ className?: string;
39
+ /** Libellé ARIA de la navigation. */
40
+ ariaLabel?: string;
41
+ /**
42
+ * Intercepte le clic d'un item ou d'un sous-item (ex: navigation client Next,
43
+ * redirection login). Quand fourni, le `preventDefault` par défaut est appliqué
44
+ * avant l'appel — l'appelant gère lui-même la navigation.
45
+ */
46
+ onNavigate?: (item: FloatingDockItem | FloatingDockMenuItem) => void;
47
+ }
48
+ /**
49
+ * Barre de navigation flottante mobile — « dock » à bulle active.
50
+ *
51
+ * Présentation pure : l'îlot (pilule blanche arrondie, ombre douce, bulle
52
+ * colorée + label pour l'item actif) est rendu ici. Le positionnement `fixed`,
53
+ * le safe-area iOS, le masquage au scroll et la logique d'auth restent à la
54
+ * charge de l'appelant, via le wrapper englobant et `onNavigate`.
55
+ *
56
+ * - Item inactif : icône seule, cible tap 44px minimum.
57
+ * - Item actif : bulle colorée (token `secondary`) + label qui apparaît via une
58
+ * transition de largeur.
59
+ * - Item avec `menuItems` : agit comme déclencheur d'un popover ouvrant AU-DESSUS
60
+ * du dock (choix de sous-destinations). Ferme au tap extérieur / Échap.
61
+ * - Rendu en `<a href>` (crawlable / accessible), interceptable par `onNavigate`.
62
+ */
63
+ declare const FloatingDock: React.ForwardRefExoticComponent<FloatingDockProps & React.RefAttributes<HTMLElement>>;
64
+
65
+ export { FloatingDock, type FloatingDockItem, type FloatingDockMenuItem, type FloatingDockProps };
@@ -0,0 +1,46 @@
1
+ import * as React from 'react';
2
+
3
+ interface FooterLinkGroup {
4
+ title: string;
5
+ links: {
6
+ label: string;
7
+ href: string;
8
+ }[];
9
+ /** Optional CTA at the bottom of the group */
10
+ cta?: {
11
+ label: string;
12
+ href: string;
13
+ };
14
+ }
15
+ interface FooterProps {
16
+ /** Brand section — logo, description, contact */
17
+ brand?: {
18
+ logo: React.ReactNode;
19
+ description?: string;
20
+ contactEmail?: string;
21
+ };
22
+ /** Link columns */
23
+ linkGroups?: FooterLinkGroup[];
24
+ /** Bottom bar links (legal) */
25
+ bottomLinks?: {
26
+ label: string;
27
+ href: string;
28
+ }[];
29
+ /** Extra bottom bar content (e.g. cookie button) */
30
+ bottomExtra?: React.ReactNode;
31
+ /** Copyright text — defaults to current year */
32
+ copyright?: string;
33
+ /** Tagline shown above copyright */
34
+ tagline?: React.ReactNode;
35
+ /** Render function for links — allows Next.js Link */
36
+ renderLink?: (props: {
37
+ href: string;
38
+ className?: string;
39
+ onClick?: () => void;
40
+ children: React.ReactNode;
41
+ }) => React.ReactNode;
42
+ className?: string;
43
+ }
44
+ declare const Footer: React.ForwardRefExoticComponent<FooterProps & React.RefAttributes<HTMLElement>>;
45
+
46
+ export { Footer, type FooterLinkGroup, type FooterProps };
@@ -0,0 +1,46 @@
1
+ import * as React from 'react';
2
+
3
+ interface FooterLinkGroup {
4
+ title: string;
5
+ links: {
6
+ label: string;
7
+ href: string;
8
+ }[];
9
+ /** Optional CTA at the bottom of the group */
10
+ cta?: {
11
+ label: string;
12
+ href: string;
13
+ };
14
+ }
15
+ interface FooterProps {
16
+ /** Brand section — logo, description, contact */
17
+ brand?: {
18
+ logo: React.ReactNode;
19
+ description?: string;
20
+ contactEmail?: string;
21
+ };
22
+ /** Link columns */
23
+ linkGroups?: FooterLinkGroup[];
24
+ /** Bottom bar links (legal) */
25
+ bottomLinks?: {
26
+ label: string;
27
+ href: string;
28
+ }[];
29
+ /** Extra bottom bar content (e.g. cookie button) */
30
+ bottomExtra?: React.ReactNode;
31
+ /** Copyright text — defaults to current year */
32
+ copyright?: string;
33
+ /** Tagline shown above copyright */
34
+ tagline?: React.ReactNode;
35
+ /** Render function for links — allows Next.js Link */
36
+ renderLink?: (props: {
37
+ href: string;
38
+ className?: string;
39
+ onClick?: () => void;
40
+ children: React.ReactNode;
41
+ }) => React.ReactNode;
42
+ className?: string;
43
+ }
44
+ declare const Footer: React.ForwardRefExoticComponent<FooterProps & React.RefAttributes<HTMLElement>>;
45
+
46
+ export { Footer, type FooterLinkGroup, type FooterProps };
@@ -0,0 +1,31 @@
1
+ import * as React from 'react';
2
+
3
+ interface GuestPickerProps {
4
+ adults: number;
5
+ onAdultsChange: (n: number) => void;
6
+ childrenAges: number[];
7
+ onChildrenAgesChange: (ages: number[]) => void;
8
+ dogs: number;
9
+ onDogsChange: (n: number) => void;
10
+ isOpen: boolean;
11
+ onToggle: () => void;
12
+ onClose: () => void;
13
+ /** Max adults (default 10) */
14
+ maxAdults?: number;
15
+ /** Max children (default 6) */
16
+ maxChildren?: number;
17
+ /** Max dogs (default 5) */
18
+ maxDogs?: number;
19
+ /** Label for the validate button */
20
+ validateLabel?: string;
21
+ /** Custom trigger content — replaces the default trigger button */
22
+ renderTrigger?: (props: {
23
+ summary: string;
24
+ isOpen: boolean;
25
+ onToggle: () => void;
26
+ }) => React.ReactNode;
27
+ className?: string;
28
+ }
29
+ declare const GuestPicker: React.ForwardRefExoticComponent<GuestPickerProps & React.RefAttributes<HTMLDivElement>>;
30
+
31
+ export { GuestPicker, type GuestPickerProps };
@@ -0,0 +1,31 @@
1
+ import * as React from 'react';
2
+
3
+ interface GuestPickerProps {
4
+ adults: number;
5
+ onAdultsChange: (n: number) => void;
6
+ childrenAges: number[];
7
+ onChildrenAgesChange: (ages: number[]) => void;
8
+ dogs: number;
9
+ onDogsChange: (n: number) => void;
10
+ isOpen: boolean;
11
+ onToggle: () => void;
12
+ onClose: () => void;
13
+ /** Max adults (default 10) */
14
+ maxAdults?: number;
15
+ /** Max children (default 6) */
16
+ maxChildren?: number;
17
+ /** Max dogs (default 5) */
18
+ maxDogs?: number;
19
+ /** Label for the validate button */
20
+ validateLabel?: string;
21
+ /** Custom trigger content — replaces the default trigger button */
22
+ renderTrigger?: (props: {
23
+ summary: string;
24
+ isOpen: boolean;
25
+ onToggle: () => void;
26
+ }) => React.ReactNode;
27
+ className?: string;
28
+ }
29
+ declare const GuestPicker: React.ForwardRefExoticComponent<GuestPickerProps & React.RefAttributes<HTMLDivElement>>;
30
+
31
+ export { GuestPicker, type GuestPickerProps };
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+
3
+ interface HeaderNavItem {
4
+ key: string;
5
+ label: string;
6
+ href?: string;
7
+ /** If true, renders as a dropdown trigger instead of a link */
8
+ hasDropdown?: boolean;
9
+ }
10
+ interface HeaderProps {
11
+ /** Logo element — left side */
12
+ logo: React.ReactNode;
13
+ /** Navigation items — center */
14
+ navItems?: HeaderNavItem[];
15
+ /** Active dropdown key (controlled) */
16
+ activeDropdown?: string | null;
17
+ /** Called on nav item hover/focus for dropdown items */
18
+ onNavHover?: (key: string | null) => void;
19
+ /** Called when a nav link is clicked */
20
+ onNavClick?: (key: string, href?: string) => void;
21
+ /** Right-side content — e.g. user menu, help icon, auth button */
22
+ rightContent?: React.ReactNode;
23
+ /** Called when mobile menu button is clicked */
24
+ onMobileMenuOpen?: () => void;
25
+ /** Additional class for scroll state, shadow, etc. */
26
+ variant?: "default" | "scrolled";
27
+ /** Render function for links */
28
+ renderLink?: (props: {
29
+ href: string;
30
+ className?: string;
31
+ children: React.ReactNode;
32
+ }) => React.ReactNode;
33
+ className?: string;
34
+ }
35
+ declare const Header: React.ForwardRefExoticComponent<HeaderProps & React.RefAttributes<HTMLElement>>;
36
+
37
+ export { Header, type HeaderNavItem, type HeaderProps };
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+
3
+ interface HeaderNavItem {
4
+ key: string;
5
+ label: string;
6
+ href?: string;
7
+ /** If true, renders as a dropdown trigger instead of a link */
8
+ hasDropdown?: boolean;
9
+ }
10
+ interface HeaderProps {
11
+ /** Logo element — left side */
12
+ logo: React.ReactNode;
13
+ /** Navigation items — center */
14
+ navItems?: HeaderNavItem[];
15
+ /** Active dropdown key (controlled) */
16
+ activeDropdown?: string | null;
17
+ /** Called on nav item hover/focus for dropdown items */
18
+ onNavHover?: (key: string | null) => void;
19
+ /** Called when a nav link is clicked */
20
+ onNavClick?: (key: string, href?: string) => void;
21
+ /** Right-side content — e.g. user menu, help icon, auth button */
22
+ rightContent?: React.ReactNode;
23
+ /** Called when mobile menu button is clicked */
24
+ onMobileMenuOpen?: () => void;
25
+ /** Additional class for scroll state, shadow, etc. */
26
+ variant?: "default" | "scrolled";
27
+ /** Render function for links */
28
+ renderLink?: (props: {
29
+ href: string;
30
+ className?: string;
31
+ children: React.ReactNode;
32
+ }) => React.ReactNode;
33
+ className?: string;
34
+ }
35
+ declare const Header: React.ForwardRefExoticComponent<HeaderProps & React.RefAttributes<HTMLElement>>;
36
+
37
+ export { Header, type HeaderNavItem, type HeaderProps };
@@ -0,0 +1,45 @@
1
+ import * as React from 'react';
2
+
3
+ interface HotelCardData {
4
+ name: string;
5
+ city?: string;
6
+ region?: string;
7
+ mainImage: string;
8
+ rating?: number;
9
+ reviewRating?: number;
10
+ reviewCount?: number;
11
+ pricePerNight?: number;
12
+ originalPrice?: number;
13
+ dogFeePerNight?: number | null;
14
+ dogFeeUnknown?: boolean;
15
+ petPolicyLabel?: string;
16
+ maxDogs?: number;
17
+ amenities?: string[];
18
+ href: string;
19
+ }
20
+ interface HotelCardProps extends React.HTMLAttributes<HTMLDivElement> {
21
+ hotel: HotelCardData;
22
+ isFavorite?: boolean;
23
+ onToggleFavorite?: () => void;
24
+ isSponsored?: boolean;
25
+ priceLoading?: boolean;
26
+ isIndicativePrice?: boolean;
27
+ noAvailability?: boolean;
28
+ /** Layout: "auto" = responsive md breakpoint, "vertical" = always stacked, "horizontal" = always side-by-side */
29
+ layout?: "auto" | "vertical" | "horizontal";
30
+ /** Render custom link wrapper (e.g. Next.js Link) */
31
+ renderLink?: (props: {
32
+ href: string;
33
+ className: string;
34
+ children: React.ReactNode;
35
+ }) => React.ReactNode;
36
+ /** Render custom image (e.g. Next.js Image) */
37
+ renderImage?: (props: {
38
+ src: string;
39
+ alt: string;
40
+ className: string;
41
+ }) => React.ReactNode;
42
+ }
43
+ declare const HotelCard: React.ForwardRefExoticComponent<HotelCardProps & React.RefAttributes<HTMLDivElement>>;
44
+
45
+ export { HotelCard, type HotelCardData, type HotelCardProps };
@@ -0,0 +1,45 @@
1
+ import * as React from 'react';
2
+
3
+ interface HotelCardData {
4
+ name: string;
5
+ city?: string;
6
+ region?: string;
7
+ mainImage: string;
8
+ rating?: number;
9
+ reviewRating?: number;
10
+ reviewCount?: number;
11
+ pricePerNight?: number;
12
+ originalPrice?: number;
13
+ dogFeePerNight?: number | null;
14
+ dogFeeUnknown?: boolean;
15
+ petPolicyLabel?: string;
16
+ maxDogs?: number;
17
+ amenities?: string[];
18
+ href: string;
19
+ }
20
+ interface HotelCardProps extends React.HTMLAttributes<HTMLDivElement> {
21
+ hotel: HotelCardData;
22
+ isFavorite?: boolean;
23
+ onToggleFavorite?: () => void;
24
+ isSponsored?: boolean;
25
+ priceLoading?: boolean;
26
+ isIndicativePrice?: boolean;
27
+ noAvailability?: boolean;
28
+ /** Layout: "auto" = responsive md breakpoint, "vertical" = always stacked, "horizontal" = always side-by-side */
29
+ layout?: "auto" | "vertical" | "horizontal";
30
+ /** Render custom link wrapper (e.g. Next.js Link) */
31
+ renderLink?: (props: {
32
+ href: string;
33
+ className: string;
34
+ children: React.ReactNode;
35
+ }) => React.ReactNode;
36
+ /** Render custom image (e.g. Next.js Image) */
37
+ renderImage?: (props: {
38
+ src: string;
39
+ alt: string;
40
+ className: string;
41
+ }) => React.ReactNode;
42
+ }
43
+ declare const HotelCard: React.ForwardRefExoticComponent<HotelCardProps & React.RefAttributes<HTMLDivElement>>;
44
+
45
+ export { HotelCard, type HotelCardData, type HotelCardProps };
@@ -0,0 +1,14 @@
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 iconBadgeVariants: (props?: ({
6
+ variant?: "primary" | "secondary" | "accent" | "error" | "success" | "warning" | "info" | "neutral" | null | undefined;
7
+ size?: "sm" | "md" | "lg" | "xl" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ interface IconBadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof iconBadgeVariants> {
10
+ icon: React.ReactNode;
11
+ }
12
+ declare const IconBadge: React.ForwardRefExoticComponent<IconBadgeProps & React.RefAttributes<HTMLDivElement>>;
13
+
14
+ export { IconBadge, type IconBadgeProps, iconBadgeVariants };
@@ -0,0 +1,14 @@
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 iconBadgeVariants: (props?: ({
6
+ variant?: "primary" | "secondary" | "accent" | "error" | "success" | "warning" | "info" | "neutral" | null | undefined;
7
+ size?: "sm" | "md" | "lg" | "xl" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ interface IconBadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof iconBadgeVariants> {
10
+ icon: React.ReactNode;
11
+ }
12
+ declare const IconBadge: React.ForwardRefExoticComponent<IconBadgeProps & React.RefAttributes<HTMLDivElement>>;
13
+
14
+ export { IconBadge, type IconBadgeProps, iconBadgeVariants };
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+
3
+ interface GalleryImage {
4
+ src: string;
5
+ alt: string;
6
+ }
7
+ interface ImageGalleryProps {
8
+ images: GalleryImage[];
9
+ className?: string;
10
+ /** Max images to show in grid before "+N" overlay. Default: 5 */
11
+ maxVisible?: number;
12
+ onImageClick?: (index: number) => void;
13
+ }
14
+ declare const ImageGallery: React.ForwardRefExoticComponent<ImageGalleryProps & React.RefAttributes<HTMLDivElement>>;
15
+
16
+ export { type GalleryImage, ImageGallery, type ImageGalleryProps };
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+
3
+ interface GalleryImage {
4
+ src: string;
5
+ alt: string;
6
+ }
7
+ interface ImageGalleryProps {
8
+ images: GalleryImage[];
9
+ className?: string;
10
+ /** Max images to show in grid before "+N" overlay. Default: 5 */
11
+ maxVisible?: number;
12
+ onImageClick?: (index: number) => void;
13
+ }
14
+ declare const ImageGallery: React.ForwardRefExoticComponent<ImageGalleryProps & React.RefAttributes<HTMLDivElement>>;
15
+
16
+ export { type GalleryImage, ImageGallery, type ImageGalleryProps };
@@ -0,0 +1,17 @@
1
+ import * as React from 'react';
2
+
3
+ interface ImageWithFallbackProps extends React.ImgHTMLAttributes<HTMLImageElement> {
4
+ fallbackSrc?: string;
5
+ /** Show blur placeholder while loading */
6
+ useBlur?: boolean;
7
+ /** Custom blur data URL for LQIP */
8
+ blurDataURL?: string;
9
+ /** Render a custom image element (e.g. Next.js Image). Receives all img props. */
10
+ renderImage?: (props: React.ImgHTMLAttributes<HTMLImageElement> & {
11
+ onLoad: () => void;
12
+ onError: () => void;
13
+ }) => React.ReactNode;
14
+ }
15
+ declare const ImageWithFallback: React.ForwardRefExoticComponent<ImageWithFallbackProps & React.RefAttributes<HTMLDivElement>>;
16
+
17
+ export { ImageWithFallback, type ImageWithFallbackProps };
@@ -0,0 +1,17 @@
1
+ import * as React from 'react';
2
+
3
+ interface ImageWithFallbackProps extends React.ImgHTMLAttributes<HTMLImageElement> {
4
+ fallbackSrc?: string;
5
+ /** Show blur placeholder while loading */
6
+ useBlur?: boolean;
7
+ /** Custom blur data URL for LQIP */
8
+ blurDataURL?: string;
9
+ /** Render a custom image element (e.g. Next.js Image). Receives all img props. */
10
+ renderImage?: (props: React.ImgHTMLAttributes<HTMLImageElement> & {
11
+ onLoad: () => void;
12
+ onError: () => void;
13
+ }) => React.ReactNode;
14
+ }
15
+ declare const ImageWithFallback: React.ForwardRefExoticComponent<ImageWithFallbackProps & React.RefAttributes<HTMLDivElement>>;
16
+
17
+ export { ImageWithFallback, type ImageWithFallbackProps };
@@ -0,0 +1,18 @@
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 inputVariants: (props?: ({
6
+ size?: "sm" | "md" | "lg" | null | undefined;
7
+ variant?: "default" | "error" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size">, VariantProps<typeof inputVariants> {
10
+ label?: string;
11
+ error?: string;
12
+ required?: boolean;
13
+ leftIcon?: React.ReactNode;
14
+ rightIcon?: React.ReactNode;
15
+ }
16
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
17
+
18
+ export { Input, type InputProps, inputVariants };
@@ -0,0 +1,18 @@
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 inputVariants: (props?: ({
6
+ size?: "sm" | "md" | "lg" | null | undefined;
7
+ variant?: "default" | "error" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size">, VariantProps<typeof inputVariants> {
10
+ label?: string;
11
+ error?: string;
12
+ required?: boolean;
13
+ leftIcon?: React.ReactNode;
14
+ rightIcon?: React.ReactNode;
15
+ }
16
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
17
+
18
+ export { Input, type InputProps, inputVariants };
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+
3
+ interface LightboxProps {
4
+ images: {
5
+ src: string;
6
+ alt: string;
7
+ }[];
8
+ initialIndex?: number;
9
+ open: boolean;
10
+ onClose: () => void;
11
+ className?: string;
12
+ }
13
+ declare const Lightbox: React.ForwardRefExoticComponent<LightboxProps & React.RefAttributes<HTMLDivElement>>;
14
+
15
+ export { Lightbox, type LightboxProps };