@meetelise/studio-components 0.0.4 → 0.0.6

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 (211) hide show
  1. package/dist/components/Accordion.d.ts +16 -0
  2. package/dist/components/Accordion.d.ts.map +1 -0
  3. package/dist/components/Accordion.js +28 -0
  4. package/dist/components/Accordion.js.map +1 -0
  5. package/dist/components/AddressBlock.d.ts +14 -0
  6. package/dist/components/AddressBlock.d.ts.map +1 -0
  7. package/dist/components/AddressBlock.js +13 -0
  8. package/dist/components/AddressBlock.js.map +1 -0
  9. package/dist/components/AmenityList.d.ts +20 -0
  10. package/dist/components/AmenityList.d.ts.map +1 -0
  11. package/dist/components/AmenityList.js +75 -0
  12. package/dist/components/AmenityList.js.map +1 -0
  13. package/dist/components/Badge.d.ts +9 -0
  14. package/dist/components/Badge.d.ts.map +1 -0
  15. package/dist/components/Badge.js +16 -0
  16. package/dist/components/Badge.js.map +1 -0
  17. package/dist/components/Button.d.ts +12 -0
  18. package/dist/components/Button.d.ts.map +1 -0
  19. package/dist/components/Button.js +38 -0
  20. package/dist/components/Button.js.map +1 -0
  21. package/dist/components/CTABanner.d.ts +11 -0
  22. package/dist/components/CTABanner.d.ts.map +1 -0
  23. package/dist/components/CTABanner.js +17 -0
  24. package/dist/components/CTABanner.js.map +1 -0
  25. package/dist/components/ContactForm.d.ts +11 -0
  26. package/dist/components/ContactForm.d.ts.map +1 -0
  27. package/dist/components/ContactForm.js +91 -0
  28. package/dist/components/ContactForm.js.map +1 -0
  29. package/dist/components/Container.d.ts +9 -3
  30. package/dist/components/Container.d.ts.map +1 -1
  31. package/dist/components/Container.js +19 -8
  32. package/dist/components/Container.js.map +1 -1
  33. package/dist/components/Divider.d.ts +9 -0
  34. package/dist/components/Divider.d.ts.map +1 -0
  35. package/dist/components/Divider.js +15 -0
  36. package/dist/components/Divider.js.map +1 -0
  37. package/dist/components/EliseChat.d.ts +8 -0
  38. package/dist/components/EliseChat.d.ts.map +1 -0
  39. package/dist/components/EliseChat.js +22 -0
  40. package/dist/components/EliseChat.js.map +1 -0
  41. package/dist/components/FeatureCard.d.ts +15 -0
  42. package/dist/components/FeatureCard.d.ts.map +1 -0
  43. package/dist/components/FeatureCard.js +13 -0
  44. package/dist/components/FeatureCard.js.map +1 -0
  45. package/dist/components/Footer.d.ts +10 -0
  46. package/dist/components/Footer.d.ts.map +1 -0
  47. package/dist/components/Footer.js +19 -0
  48. package/dist/components/Footer.js.map +1 -0
  49. package/dist/components/Gallery.d.ts +18 -0
  50. package/dist/components/Gallery.d.ts.map +1 -0
  51. package/dist/components/Gallery.js +86 -0
  52. package/dist/components/Gallery.js.map +1 -0
  53. package/dist/components/Icon.d.ts +8 -0
  54. package/dist/components/Icon.d.ts.map +1 -0
  55. package/dist/components/Icon.js +26 -0
  56. package/dist/components/Icon.js.map +1 -0
  57. package/dist/components/Lightbox.d.ts +13 -0
  58. package/dist/components/Lightbox.d.ts.map +1 -0
  59. package/dist/components/Lightbox.js +23 -0
  60. package/dist/components/Lightbox.js.map +1 -0
  61. package/dist/components/MapEmbed.d.ts +16 -0
  62. package/dist/components/MapEmbed.d.ts.map +1 -0
  63. package/dist/components/MapEmbed.js +6 -0
  64. package/dist/components/MapEmbed.js.map +1 -0
  65. package/dist/components/Modal.d.ts +9 -0
  66. package/dist/components/Modal.d.ts.map +1 -0
  67. package/dist/components/Modal.js +19 -0
  68. package/dist/components/Modal.js.map +1 -0
  69. package/dist/components/Nav.d.ts +11 -0
  70. package/dist/components/Nav.d.ts.map +1 -0
  71. package/dist/components/Nav.js +53 -0
  72. package/dist/components/Nav.js.map +1 -0
  73. package/dist/components/ScheduleTour.d.ts +8 -0
  74. package/dist/components/ScheduleTour.d.ts.map +1 -0
  75. package/dist/components/ScheduleTour.js +158 -0
  76. package/dist/components/ScheduleTour.js.map +1 -0
  77. package/dist/components/ScrollReveal.d.ts +12 -0
  78. package/dist/components/ScrollReveal.d.ts.map +1 -0
  79. package/dist/components/ScrollReveal.js +37 -0
  80. package/dist/components/ScrollReveal.js.map +1 -0
  81. package/dist/components/Slot.d.ts +14 -0
  82. package/dist/components/Slot.d.ts.map +1 -0
  83. package/dist/components/Slot.js +5 -0
  84. package/dist/components/Slot.js.map +1 -0
  85. package/dist/components/Stat.d.ts +12 -0
  86. package/dist/components/Stat.d.ts.map +1 -0
  87. package/dist/components/Stat.js +12 -0
  88. package/dist/components/Stat.js.map +1 -0
  89. package/dist/components/Testimonial.d.ts +10 -0
  90. package/dist/components/Testimonial.d.ts.map +1 -0
  91. package/dist/components/Testimonial.js +9 -0
  92. package/dist/components/Testimonial.js.map +1 -0
  93. package/dist/components/Text.d.ts +3 -2
  94. package/dist/components/Text.d.ts.map +1 -1
  95. package/dist/components/Text.js +16 -7
  96. package/dist/components/Text.js.map +1 -1
  97. package/dist/components/ThemeProvider.d.ts.map +1 -1
  98. package/dist/components/ThemeProvider.js +85 -5
  99. package/dist/components/ThemeProvider.js.map +1 -1
  100. package/dist/components/VideoHero.d.ts +16 -0
  101. package/dist/components/VideoHero.d.ts.map +1 -0
  102. package/dist/components/VideoHero.js +19 -0
  103. package/dist/components/VideoHero.js.map +1 -0
  104. package/dist/components/VideoPlayer.d.ts +18 -0
  105. package/dist/components/VideoPlayer.d.ts.map +1 -0
  106. package/dist/components/VideoPlayer.js +14 -0
  107. package/dist/components/VideoPlayer.js.map +1 -0
  108. package/dist/components/VirtualTourEmbed.d.ts +9 -0
  109. package/dist/components/VirtualTourEmbed.d.ts.map +1 -0
  110. package/dist/components/VirtualTourEmbed.js +5 -0
  111. package/dist/components/VirtualTourEmbed.js.map +1 -0
  112. package/dist/components/browser/ComponentBrowser.d.ts +2 -0
  113. package/dist/components/browser/ComponentBrowser.d.ts.map +1 -0
  114. package/dist/components/browser/ComponentBrowser.js +73 -0
  115. package/dist/components/browser/ComponentBrowser.js.map +1 -0
  116. package/dist/components/browser/ComponentShowcase.d.ts +8 -0
  117. package/dist/components/browser/ComponentShowcase.d.ts.map +1 -0
  118. package/dist/components/browser/ComponentShowcase.js +104 -0
  119. package/dist/components/browser/ComponentShowcase.js.map +1 -0
  120. package/dist/components/browser/componentMeta.d.ts +40 -0
  121. package/dist/components/browser/componentMeta.d.ts.map +1 -0
  122. package/dist/components/browser/componentMeta.js +726 -0
  123. package/dist/components/browser/componentMeta.js.map +1 -0
  124. package/dist/components/registry.d.ts.map +1 -1
  125. package/dist/components/registry.js +56 -0
  126. package/dist/components/registry.js.map +1 -1
  127. package/dist/components/units/FloorPlanCard.d.ts +16 -0
  128. package/dist/components/units/FloorPlanCard.d.ts.map +1 -0
  129. package/dist/components/units/FloorPlanCard.js +28 -0
  130. package/dist/components/units/FloorPlanCard.js.map +1 -0
  131. package/dist/components/units/FloorplanExplorer.d.ts +21 -0
  132. package/dist/components/units/FloorplanExplorer.d.ts.map +1 -0
  133. package/dist/components/units/FloorplanExplorer.js +39 -0
  134. package/dist/components/units/FloorplanExplorer.js.map +1 -0
  135. package/dist/components/units/PricingMatrixModal.d.ts +12 -0
  136. package/dist/components/units/PricingMatrixModal.d.ts.map +1 -0
  137. package/dist/components/units/PricingMatrixModal.js +78 -0
  138. package/dist/components/units/PricingMatrixModal.js.map +1 -0
  139. package/dist/components/units/UnitCard.d.ts +12 -3
  140. package/dist/components/units/UnitCard.d.ts.map +1 -1
  141. package/dist/components/units/UnitCard.js +33 -5
  142. package/dist/components/units/UnitCard.js.map +1 -1
  143. package/dist/components/units/UnitDetail.d.ts +11 -0
  144. package/dist/components/units/UnitDetail.d.ts.map +1 -0
  145. package/dist/components/units/UnitDetail.js +16 -0
  146. package/dist/components/units/UnitDetail.js.map +1 -0
  147. package/dist/components/units/UnitExplorer.d.ts +16 -2
  148. package/dist/components/units/UnitExplorer.d.ts.map +1 -1
  149. package/dist/components/units/UnitExplorer.js +128 -27
  150. package/dist/components/units/UnitExplorer.js.map +1 -1
  151. package/dist/components/units/UnitFilters.d.ts +2 -2
  152. package/dist/components/units/UnitFilters.d.ts.map +1 -1
  153. package/dist/components/units/UnitFilters.js +2 -2
  154. package/dist/components/units/UnitFilters.js.map +1 -1
  155. package/dist/components/units/UnitPage.d.ts +8 -0
  156. package/dist/components/units/UnitPage.d.ts.map +1 -0
  157. package/dist/components/units/UnitPage.js +130 -0
  158. package/dist/components/units/UnitPage.js.map +1 -0
  159. package/dist/components/units/types.d.ts +109 -24
  160. package/dist/components/units/types.d.ts.map +1 -1
  161. package/dist/components/units/types.js +1 -0
  162. package/dist/components/units/types.js.map +1 -1
  163. package/dist/hooks/useAnalytics.d.ts +16 -0
  164. package/dist/hooks/useAnalytics.d.ts.map +1 -0
  165. package/dist/hooks/useAnalytics.js +65 -0
  166. package/dist/hooks/useAnalytics.js.map +1 -0
  167. package/dist/hooks/useAuth.d.ts.map +1 -1
  168. package/dist/hooks/useAuth.js +8 -2
  169. package/dist/hooks/useAuth.js.map +1 -1
  170. package/dist/hooks/useFees.d.ts +8 -0
  171. package/dist/hooks/useFees.d.ts.map +1 -0
  172. package/dist/hooks/useFees.js +37 -0
  173. package/dist/hooks/useFees.js.map +1 -0
  174. package/dist/hooks/useFloorplans.d.ts +19 -0
  175. package/dist/hooks/useFloorplans.d.ts.map +1 -0
  176. package/dist/hooks/useFloorplans.js +52 -0
  177. package/dist/hooks/useFloorplans.js.map +1 -0
  178. package/dist/hooks/useModal.d.ts +11 -0
  179. package/dist/hooks/useModal.d.ts.map +1 -0
  180. package/dist/hooks/useModal.js +35 -0
  181. package/dist/hooks/useModal.js.map +1 -0
  182. package/dist/hooks/useProperty.d.ts +66 -0
  183. package/dist/hooks/useProperty.d.ts.map +1 -0
  184. package/dist/hooks/useProperty.js +49 -0
  185. package/dist/hooks/useProperty.js.map +1 -0
  186. package/dist/hooks/useSpecials.d.ts +8 -0
  187. package/dist/hooks/useSpecials.d.ts.map +1 -0
  188. package/dist/hooks/useSpecials.js +37 -0
  189. package/dist/hooks/useSpecials.js.map +1 -0
  190. package/dist/index.d.ts +12 -3
  191. package/dist/index.d.ts.map +1 -1
  192. package/dist/index.js +9 -1
  193. package/dist/index.js.map +1 -1
  194. package/dist/renderer.d.ts.map +1 -1
  195. package/dist/renderer.js +72 -3
  196. package/dist/renderer.js.map +1 -1
  197. package/dist/router.d.ts +9 -0
  198. package/dist/router.d.ts.map +1 -1
  199. package/dist/router.js +34 -1
  200. package/dist/router.js.map +1 -1
  201. package/dist/types.d.ts +47 -1
  202. package/dist/types.d.ts.map +1 -1
  203. package/dist/utils/imageUrl.d.ts +21 -0
  204. package/dist/utils/imageUrl.d.ts.map +1 -0
  205. package/dist/utils/imageUrl.js +46 -0
  206. package/dist/utils/imageUrl.js.map +1 -0
  207. package/dist/utils/resolveConfig.d.ts +53 -0
  208. package/dist/utils/resolveConfig.d.ts.map +1 -0
  209. package/dist/utils/resolveConfig.js +291 -0
  210. package/dist/utils/resolveConfig.js.map +1 -0
  211. package/package.json +1 -1
@@ -0,0 +1,22 @@
1
+ import { useEffect, useRef } from "react";
2
+ const DEFAULT_SCRIPT_URL = "https://chat.meetelise.com/widget.js";
3
+ export function EliseChat({ buildingId, scriptUrl = DEFAULT_SCRIPT_URL, }) {
4
+ const injectedRef = useRef(false);
5
+ useEffect(() => {
6
+ if (!buildingId || injectedRef.current)
7
+ return;
8
+ injectedRef.current = true;
9
+ const script = document.createElement("script");
10
+ script.src = scriptUrl;
11
+ script.async = true;
12
+ script.setAttribute("data-building-id", buildingId);
13
+ document.body.appendChild(script);
14
+ return () => {
15
+ // Best-effort cleanup; the widget may leave residual DOM elements
16
+ script.remove();
17
+ };
18
+ }, [buildingId, scriptUrl]);
19
+ // Renders nothing — the widget injects its own floating UI
20
+ return null;
21
+ }
22
+ //# sourceMappingURL=EliseChat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EliseChat.js","sourceRoot":"","sources":["../../src/components/EliseChat.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAQ1C,MAAM,kBAAkB,GAAG,sCAAsC,CAAC;AAElE,MAAM,UAAU,SAAS,CAAC,EACxB,UAAU,EACV,SAAS,GAAG,kBAAkB,GACf;IACf,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC,OAAO;YAAE,OAAO;QAC/C,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAE3B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;QACvB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,OAAO,GAAG,EAAE;YACV,kEAAkE;YAClE,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAE5B,2DAA2D;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,15 @@
1
+ interface FeatureCardProps {
2
+ image?: string;
3
+ imageAlt?: string;
4
+ /** Image position: top (default), left, right */
5
+ imagePosition?: "top" | "left" | "right";
6
+ title?: string;
7
+ subtitle?: string;
8
+ description?: string;
9
+ linkTo?: string;
10
+ linkLabel?: string;
11
+ className?: string;
12
+ }
13
+ export declare function FeatureCard({ image, imageAlt, imagePosition, title, subtitle, description, linkTo, linkLabel, className, }: FeatureCardProps): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=FeatureCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureCard.d.ts","sourceRoot":"","sources":["../../src/components/FeatureCard.tsx"],"names":[],"mappings":"AAGA,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,aAAqB,EACrB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,MAAM,EACN,SAA0B,EAC1B,SAAS,GACV,EAAE,gBAAgB,2CAgElB"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ import { navigate } from "../router";
4
+ export function FeatureCard({ image, imageAlt, imagePosition = "top", title, subtitle, description, linkTo, linkLabel = "Learn More →", className, }) {
5
+ const isHorizontal = imagePosition === "left" || imagePosition === "right";
6
+ const imageEl = image ? (_jsx("div", { className: twMerge("overflow-hidden bg-gray-100", isHorizontal ? "w-2/5 shrink-0" : "aspect-[16/10] w-full"), children: _jsx("img", { src: image, alt: imageAlt ?? title ?? "", className: "w-full h-full object-cover transition-transform duration-500 group-hover:scale-105", loading: "lazy" }) })) : null;
7
+ const contentEl = (_jsxs("div", { className: twMerge("flex flex-col gap-2", isHorizontal ? "flex-1 p-6" : "p-6"), children: [subtitle && (_jsx("span", { className: "text-xs font-semibold uppercase tracking-widest text-[var(--color-primary)]", children: subtitle })), title && (_jsx("h3", { className: "text-xl font-bold text-[var(--color-foreground)]", children: title })), description && (_jsx("p", { className: "text-sm leading-relaxed text-[var(--color-secondary)]", children: description })), linkTo && (_jsx("a", { href: linkTo, onClick: (e) => {
8
+ e.preventDefault();
9
+ navigate(linkTo);
10
+ }, className: "mt-auto pt-2 text-sm font-semibold text-[var(--color-primary)] hover:underline cursor-pointer", children: linkLabel }))] }));
11
+ return (_jsxs("div", { className: twMerge("group rounded-[var(--radius)] bg-white border border-gray-100 overflow-hidden transition-all duration-300", isHorizontal && "flex", imagePosition === "right" && "flex-row-reverse", className), children: [imageEl, contentEl] }));
12
+ }
13
+ //# sourceMappingURL=FeatureCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureCard.js","sourceRoot":"","sources":["../../src/components/FeatureCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAerC,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,aAAa,GAAG,KAAK,EACrB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,MAAM,EACN,SAAS,GAAG,cAAc,EAC1B,SAAS,GACQ;IACjB,MAAM,YAAY,GAAG,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,OAAO,CAAC;IAE3E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CACtB,cACE,SAAS,EAAE,OAAO,CAChB,6BAA6B,EAC7B,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,uBAAuB,CAC1D,YAED,cACE,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,QAAQ,IAAI,KAAK,IAAI,EAAE,EAC5B,SAAS,EAAC,oFAAoF,EAC9F,OAAO,EAAC,MAAM,GACd,GACE,CACP,CAAC,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,SAAS,GAAG,CAChB,eAAK,SAAS,EAAE,OAAO,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,aAChF,QAAQ,IAAI,CACX,eAAM,SAAS,EAAC,6EAA6E,YAC1F,QAAQ,GACJ,CACR,EACA,KAAK,IAAI,CACR,aAAI,SAAS,EAAC,kDAAkD,YAC7D,KAAK,GACH,CACN,EACA,WAAW,IAAI,CACd,YAAG,SAAS,EAAC,uDAAuD,YACjE,WAAW,GACV,CACL,EACA,MAAM,IAAI,CACT,YACE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACb,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACnB,CAAC,EACD,SAAS,EAAC,+FAA+F,YAExG,SAAS,GACR,CACL,IACG,CACP,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,OAAO,CAChB,2GAA2G,EAC3G,YAAY,IAAI,MAAM,EACtB,aAAa,KAAK,OAAO,IAAI,kBAAkB,EAC/C,SAAS,CACV,aAEA,OAAO,EACP,SAAS,IACN,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { FooterColumn } from "../types";
2
+ interface FooterProps {
3
+ columns?: FooterColumn[];
4
+ logo?: string;
5
+ copyright?: string;
6
+ className?: string;
7
+ }
8
+ export declare function Footer({ columns, logo, copyright, className }: FooterProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=Footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../src/components/Footer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,EAAE,OAAY,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,WAAW,2CA4D/E"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ import { navigate } from "../router";
4
+ export function Footer({ columns = [], logo, copyright, className }) {
5
+ const colCount = columns.length || 1;
6
+ const gridClass = colCount <= 2
7
+ ? "grid-cols-1 sm:grid-cols-2"
8
+ : colCount === 3
9
+ ? "grid-cols-1 sm:grid-cols-3"
10
+ : "grid-cols-2 sm:grid-cols-4";
11
+ return (_jsx("footer", { className: twMerge("w-full bg-[var(--color-foreground)] text-white/80", className), children: _jsxs("div", { className: "max-w-6xl mx-auto px-4 py-12", children: [columns.length > 0 && (_jsx("div", { className: twMerge("grid gap-8 mb-8", gridClass), children: columns.map((col) => (_jsxs("div", { children: [_jsx("h3", { className: "text-sm font-semibold text-white uppercase tracking-wider mb-3", children: col.title }), _jsx("ul", { className: "flex flex-col gap-2", children: col.links.map((link) => (_jsx("li", { children: _jsx("a", { href: link.to, onClick: (e) => {
12
+ // Only use client-side nav for internal links
13
+ if (link.to.startsWith("/")) {
14
+ e.preventDefault();
15
+ navigate(link.to);
16
+ }
17
+ }, className: "text-sm text-white/60 hover:text-white transition-colors", children: link.label }) }, link.to))) })] }, col.title))) })), _jsxs("div", { className: "border-t border-white/10 pt-6 flex flex-col sm:flex-row items-center justify-between gap-4", children: [logo && _jsx("img", { src: logo, alt: "", className: "h-6 w-auto opacity-60" }), copyright && (_jsx("p", { className: "text-xs text-white/40", children: copyright }))] })] }) }));
18
+ }
19
+ //# sourceMappingURL=Footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../src/components/Footer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAUrC,MAAM,UAAU,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAe;IAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAErC,MAAM,SAAS,GACb,QAAQ,IAAI,CAAC;QACX,CAAC,CAAC,4BAA4B;QAC9B,CAAC,CAAC,QAAQ,KAAK,CAAC;YACd,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,4BAA4B,CAAC;IAErC,OAAO,CACL,iBACE,SAAS,EAAE,OAAO,CAChB,mDAAmD,EACnD,SAAS,CACV,YAED,eAAK,SAAS,EAAC,8BAA8B,aAE1C,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,cAAK,SAAS,EAAE,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,YAClD,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACpB,0BACE,aAAI,SAAS,EAAC,gEAAgE,YAC3E,GAAG,CAAC,KAAK,GACP,EACL,aAAI,SAAS,EAAC,qBAAqB,YAChC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACvB,uBACE,YACE,IAAI,EAAE,IAAI,CAAC,EAAE,EACb,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4CACb,8CAA8C;4CAC9C,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gDAC5B,CAAC,CAAC,cAAc,EAAE,CAAC;gDACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4CACpB,CAAC;wCACH,CAAC,EACD,SAAS,EAAC,0DAA0D,YAEnE,IAAI,CAAC,KAAK,GACT,IAbG,IAAI,CAAC,EAAE,CAcX,CACN,CAAC,GACC,KAtBG,GAAG,CAAC,KAAK,CAuBb,CACP,CAAC,GACE,CACP,EAGD,eAAK,SAAS,EAAC,4FAA4F,aACxG,IAAI,IAAI,cAAK,GAAG,EAAE,IAAI,EAAE,GAAG,EAAC,EAAE,EAAC,SAAS,EAAC,uBAAuB,GAAG,EACnE,SAAS,IAAI,CACZ,YAAG,SAAS,EAAC,uBAAuB,YAAE,SAAS,GAAK,CACrD,IACG,IACF,GACC,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ interface GalleryImage {
2
+ src: string;
3
+ alt?: string;
4
+ category?: string;
5
+ }
6
+ interface GalleryProps {
7
+ /** When set, fetches photos live from GET /v1/property/{propertyId}/media */
8
+ propertyId?: string;
9
+ /** Static images from content blob (fallback when propertyId is not set) */
10
+ images?: GalleryImage[];
11
+ categories?: string[];
12
+ layout?: "grid" | "carousel";
13
+ columns?: 2 | 3 | 4;
14
+ className?: string;
15
+ }
16
+ export declare function Gallery({ propertyId: propertyIdProp, images: staticImages, categories, layout, columns, className, }: GalleryProps): import("react/jsx-runtime").JSX.Element | null;
17
+ export {};
18
+ //# sourceMappingURL=Gallery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Gallery.d.ts","sourceRoot":"","sources":["../../src/components/Gallery.tsx"],"names":[],"mappings":"AAOA,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,YAAY;IACpB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAeD,wBAAgB,OAAO,CAAC,EACtB,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,YAAiB,EACzB,UAAU,EACV,MAAe,EACf,OAAW,EACX,SAAS,GACV,EAAE,YAAY,kDAgNd"}
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useMemo, useEffect, useCallback } from "react";
3
+ import { twMerge } from "tailwind-merge";
4
+ import { useSiteConfig } from "../hooks/useSiteConfig";
5
+ import { useAuth } from "../hooks/useAuth";
6
+ import { imageUrl } from "../utils/imageUrl";
7
+ import { Lightbox } from "./Lightbox";
8
+ const gridColClasses = {
9
+ 2: "grid-cols-1 sm:grid-cols-2",
10
+ 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
11
+ 4: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-4",
12
+ };
13
+ /** Map media API "type" field to a user-friendly category name. */
14
+ const TYPE_TO_CATEGORY = {
15
+ Building: "Community",
16
+ UnitPhotography: "Interiors",
17
+ Floorplan: "Floor Plans",
18
+ };
19
+ export function Gallery({ propertyId: propertyIdProp, images: staticImages = [], categories, layout = "grid", columns = 3, className, }) {
20
+ const config = useSiteConfig();
21
+ const { authenticatedFetch } = useAuth();
22
+ const propertyId = propertyIdProp ?? config.property?.propertyId;
23
+ const apiBaseUrl = config.property?.apiBaseUrl ?? "";
24
+ const [apiImages, setApiImages] = useState(null);
25
+ const [loading, setLoading] = useState(false);
26
+ // Fetch from media API when propertyId is available
27
+ const fetchMedia = useCallback(async () => {
28
+ if (!propertyId)
29
+ return;
30
+ setLoading(true);
31
+ try {
32
+ const res = await authenticatedFetch(`${apiBaseUrl}/v1/properties/${propertyId}?include_media=true`);
33
+ const data = res.ok ? await res.json() : { media: [] };
34
+ const allMedia = data.media ?? [];
35
+ const items = allMedia.map((m) => ({
36
+ src: m.url,
37
+ alt: m.name || m.description || "",
38
+ category: TYPE_TO_CATEGORY[m.type ?? ""] ?? m.type ?? undefined,
39
+ }));
40
+ setApiImages(items);
41
+ }
42
+ catch {
43
+ setApiImages(null);
44
+ }
45
+ finally {
46
+ setLoading(false);
47
+ }
48
+ }, [propertyId, apiBaseUrl, authenticatedFetch]);
49
+ useEffect(() => {
50
+ if (propertyId)
51
+ fetchMedia();
52
+ }, [propertyId, fetchMedia]);
53
+ // Use API images if available, else static content-blob images
54
+ const images = apiImages ?? staticImages;
55
+ const [activeCategory, setActiveCategory] = useState(null);
56
+ const [lightboxIndex, setLightboxIndex] = useState(null);
57
+ const [carouselIndex, setCarouselIndex] = useState(0);
58
+ const derivedCategories = useMemo(() => {
59
+ if (categories)
60
+ return categories;
61
+ const cats = new Set(images.map((img) => img.category).filter(Boolean));
62
+ return cats.size > 1 ? ["All", ...cats] : [];
63
+ }, [categories, images]);
64
+ const filtered = useMemo(() => {
65
+ if (!activeCategory || activeCategory === "All")
66
+ return images;
67
+ return images.filter((img) => img.category === activeCategory);
68
+ }, [images, activeCategory]);
69
+ if (loading) {
70
+ return (_jsx("div", { className: twMerge("text-center py-8 text-[var(--color-muted)]", className), children: "Loading gallery..." }));
71
+ }
72
+ if (images.length === 0)
73
+ return null;
74
+ return (_jsxs("div", { className: twMerge("w-full", className), children: [derivedCategories.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-2 mb-6", children: derivedCategories.map((cat) => {
75
+ const isActive = cat === "All" ? !activeCategory : activeCategory === cat;
76
+ return (_jsx("button", { onClick: () => setActiveCategory(cat === "All" ? null : cat), className: twMerge("rounded-full px-4 py-1.5 text-sm font-medium transition-colors cursor-pointer", isActive
77
+ ? "bg-[var(--color-primary)] text-white"
78
+ : "bg-[var(--color-muted)]/10 text-[var(--color-foreground)] hover:bg-[var(--color-muted)]/20"), children: cat }, cat));
79
+ }) })), layout === "grid" ? (
80
+ /* Grid Layout */
81
+ _jsx("div", { className: twMerge("grid gap-3", gridColClasses[columns] ?? gridColClasses[3]), children: filtered.map((img, i) => (_jsx("button", { onClick: () => setLightboxIndex(i), className: "group relative aspect-[4/3] overflow-hidden rounded-lg bg-gray-100 cursor-pointer", children: _jsx("img", { src: imageUrl(img.src, { w: 400, q: 75 }), alt: img.alt ?? "", loading: "lazy", className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105" }) }, `${img.src}-${i}`))) })) : (
82
+ /* Carousel Layout */
83
+ _jsx("div", { className: "relative", children: filtered.length > 0 && (_jsxs(_Fragment, { children: [_jsx("div", { className: "aspect-[16/9] overflow-hidden rounded-lg bg-gray-100", children: _jsx("img", { src: imageUrl(filtered[carouselIndex % filtered.length]?.src, { w: 1200, q: 85 }), alt: filtered[carouselIndex % filtered.length]?.alt ?? "", className: "w-full h-full object-cover" }) }), _jsxs("div", { className: "absolute top-3 right-3 bg-black/50 text-white text-xs px-2 py-1 rounded", children: [(carouselIndex % filtered.length) + 1, " /", " ", filtered.length] }), filtered.length > 1 && (_jsxs(_Fragment, { children: [_jsx("button", { onClick: () => setCarouselIndex((carouselIndex - 1 + filtered.length) %
84
+ filtered.length), className: "absolute left-2 top-1/2 -translate-y-1/2 bg-black/40 hover:bg-black/60 text-white rounded-full p-2 cursor-pointer", "aria-label": "Previous", children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M15 18l-6-6 6-6" }) }) }), _jsx("button", { onClick: () => setCarouselIndex((carouselIndex + 1) % filtered.length), className: "absolute right-2 top-1/2 -translate-y-1/2 bg-black/40 hover:bg-black/60 text-white rounded-full p-2 cursor-pointer", "aria-label": "Next", children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M9 18l6-6-6-6" }) }) })] })), _jsx("button", { onClick: () => setLightboxIndex(carouselIndex % filtered.length), className: "absolute inset-0 cursor-pointer", "aria-label": "Open fullscreen" })] })) })), lightboxIndex != null && (_jsx(Lightbox, { images: filtered, index: lightboxIndex, onClose: () => setLightboxIndex(null), onChange: setLightboxIndex }))] }));
85
+ }
86
+ //# sourceMappingURL=Gallery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Gallery.js","sourceRoot":"","sources":["../../src/components/Gallery.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface IconProps {
2
+ name: string;
3
+ size?: "sm" | "md" | "lg";
4
+ className?: string;
5
+ }
6
+ export declare function Icon({ name, size, className }: IconProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=Icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../src/components/Icon.tsx"],"names":[],"mappings":"AAEA,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyFD,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAW,EAAE,SAAS,EAAE,EAAE,SAAS,2CAc/D"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ const sizeClasses = {
4
+ sm: "w-4 h-4",
5
+ md: "w-6 h-6",
6
+ lg: "w-8 h-8",
7
+ };
8
+ const icons = {
9
+ pet: (_jsx("path", { d: "M10 5.172C10 3.782 8.883 2.64 7.5 2.64S5 3.782 5 5.172c0 .862.432 1.622 1.09 2.078L4 12h8l-2.09-4.75C10.568 6.794 11 6.034 11 5.172M17 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4M7 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4M19 13a2 2 0 1 0 0-4 2 2 0 0 0 0 4M5 13a2 2 0 1 0 0-4 2 2 0 0 0 0 4M16 19c0-2.21-1.79-4-4-4s-4 1.79-4 4" })),
10
+ fitness: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M6.5 6.5h11M6.5 17.5h11" }), _jsx("rect", { x: "3", y: "8", width: "3", height: "8", rx: "1" }), _jsx("rect", { x: "18", y: "8", width: "3", height: "8", rx: "1" }), _jsx("path", { d: "M6.5 12h11" })] })),
11
+ pool: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M2 18c1.333-1 2.667-1 4 0s2.667 1 4 0 2.667-1 4 0 2.667 1 4 0" }), _jsx("path", { d: "M2 22c1.333-1 2.667-1 4 0s2.667 1 4 0 2.667-1 4 0 2.667 1 4 0" }), _jsx("circle", { cx: "12", cy: "7", r: "3" }), _jsx("path", { d: "M12 10v4" })] })),
12
+ coworking: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "4", width: "18", height: "12", rx: "2" }), _jsx("path", { d: "M7 20h10M9 16v4M15 16v4" })] })),
13
+ clubroom: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }), _jsx("path", { d: "M9 22V12h6v10" })] })),
14
+ grill: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M4 12h16M4 12a8 8 0 0 0 16 0" }), _jsx("path", { d: "M8 8V6M12 8V4M16 8V6" }), _jsx("path", { d: "M9 20l-1 2M15 20l1 2" })] })),
15
+ parking: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "3" }), _jsx("path", { d: "M9 17V7h4a3 3 0 0 1 0 6H9" })] })),
16
+ laundry: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "2", width: "18", height: "20", rx: "2" }), _jsx("circle", { cx: "12", cy: "13", r: "5" }), _jsx("circle", { cx: "12", cy: "13", r: "2" }), _jsx("circle", { cx: "7", cy: "5", r: "1" })] })),
17
+ "ev-charging": (_jsx(_Fragment, { children: _jsx("path", { d: "M13 2L3 14h9l-1 8 10-12h-9l1-8z" }) })),
18
+ package: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z" }), _jsx("path", { d: "m3.3 7 8.7 5 8.7-5M12 22V12" })] })),
19
+ wifi: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M5 12.55a11 11 0 0 1 14 0" }), _jsx("path", { d: "M8.53 16.11a6 6 0 0 1 6.95 0" }), _jsx("circle", { cx: "12", cy: "20", r: "1" })] })),
20
+ security: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10" }), _jsx("path", { d: "m9 12 2 2 4-4" })] })),
21
+ };
22
+ const fallbackIcon = _jsx("circle", { cx: "12", cy: "12", r: "4" });
23
+ export function Icon({ name, size = "md", className }) {
24
+ return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: twMerge(sizeClasses[size] ?? sizeClasses.md, className), children: icons[name] ?? fallbackIcon }));
25
+ }
26
+ //# sourceMappingURL=Icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/components/Icon.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ interface LightboxImage {
2
+ src: string;
3
+ alt?: string;
4
+ }
5
+ interface LightboxProps {
6
+ images: LightboxImage[];
7
+ index: number;
8
+ onClose: () => void;
9
+ onChange: (index: number) => void;
10
+ }
11
+ export declare function Lightbox({ images, index, onClose, onChange }: LightboxProps): import("react/jsx-runtime").JSX.Element | null;
12
+ export {};
13
+ //# sourceMappingURL=Lightbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/components/Lightbox.tsx"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,aAAa,kDAmF3E"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useCallback } from "react";
3
+ export function Lightbox({ images, index, onClose, onChange }) {
4
+ const image = images[index];
5
+ if (!image)
6
+ return null;
7
+ const goPrev = useCallback(() => onChange((index - 1 + images.length) % images.length), [index, images.length, onChange]);
8
+ const goNext = useCallback(() => onChange((index + 1) % images.length), [index, images.length, onChange]);
9
+ useEffect(() => {
10
+ const onKey = (e) => {
11
+ if (e.key === "Escape")
12
+ onClose();
13
+ if (e.key === "ArrowLeft")
14
+ goPrev();
15
+ if (e.key === "ArrowRight")
16
+ goNext();
17
+ };
18
+ window.addEventListener("keydown", onKey);
19
+ return () => window.removeEventListener("keydown", onKey);
20
+ }, [onClose, goPrev, goNext]);
21
+ return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/90", onClick: onClose, children: [_jsx("button", { onClick: onClose, className: "absolute top-4 right-4 text-white/70 hover:text-white z-10 cursor-pointer", "aria-label": "Close", children: _jsx("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M6 6l12 12M18 6L6 18" }) }) }), _jsxs("div", { className: "absolute top-4 left-4 text-white/60 text-sm", children: [index + 1, " / ", images.length] }), images.length > 1 && (_jsx("button", { onClick: (e) => { e.stopPropagation(); goPrev(); }, className: "absolute left-4 text-white/70 hover:text-white z-10 cursor-pointer", "aria-label": "Previous", children: _jsx("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M15 18l-6-6 6-6" }) }) })), _jsx("img", { src: image.src, alt: image.alt ?? "", className: "max-w-[90vw] max-h-[85vh] object-contain", onClick: (e) => e.stopPropagation() }), images.length > 1 && (_jsx("button", { onClick: (e) => { e.stopPropagation(); goNext(); }, className: "absolute right-4 text-white/70 hover:text-white z-10 cursor-pointer", "aria-label": "Next", children: _jsx("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M9 18l6-6-6-6" }) }) })), image.alt && (_jsx("div", { className: "absolute bottom-4 left-1/2 -translate-x-1/2 text-white/70 text-sm text-center max-w-md", children: image.alt }))] }));
22
+ }
23
+ //# sourceMappingURL=Lightbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lightbox.js","sourceRoot":"","sources":["../../src/components/Lightbox.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ interface MapMarker {
2
+ lat: number;
3
+ lng: number;
4
+ label?: string;
5
+ }
6
+ interface MapEmbedProps {
7
+ lat: number;
8
+ lng: number;
9
+ zoom?: number;
10
+ height?: string;
11
+ markers?: MapMarker[];
12
+ className?: string;
13
+ }
14
+ export declare function MapEmbed({ lat, lng, zoom, height, className }: MapEmbedProps): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=MapEmbed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapEmbed.d.ts","sourceRoot":"","sources":["../../src/components/MapEmbed.tsx"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAS,EAAE,MAAgB,EAAE,SAAc,EAAE,EAAE,aAAa,2CAiBhG"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function MapEmbed({ lat, lng, zoom = 15, height = "400px", className = "" }) {
3
+ const src = `https://www.google.com/maps/embed?pb=!1m14!1m12!1m3!1d3000!2d${lng}!3d${lat}!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!5e0!3m2!1sen!2sus!4v1&zoom=${zoom}`;
4
+ return (_jsx("div", { className: `w-full overflow-hidden rounded-[var(--radius)] ${className}`, style: { height }, children: _jsx("iframe", { src: src, width: "100%", height: "100%", style: { border: 0 }, allowFullScreen: true, loading: "lazy", referrerPolicy: "no-referrer-when-downgrade", title: "Property location map" }) }));
5
+ }
6
+ //# sourceMappingURL=MapEmbed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapEmbed.js","sourceRoot":"","sources":["../../src/components/MapEmbed.tsx"],"names":[],"mappings":";AAeA,MAAM,UAAU,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,GAAG,OAAO,EAAE,SAAS,GAAG,EAAE,EAAiB;IAC/F,MAAM,GAAG,GAAG,gEAAgE,GAAG,MAAM,GAAG,uEAAuE,IAAI,EAAE,CAAC;IAEtK,OAAO,CACL,cAAK,SAAS,EAAE,kDAAkD,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,YAC9F,iBACE,GAAG,EAAE,GAAG,EACR,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EACpB,eAAe,QACf,OAAO,EAAC,MAAM,EACd,cAAc,EAAC,4BAA4B,EAC3C,KAAK,EAAC,uBAAuB,GAC7B,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface ModalProps {
2
+ id: string;
3
+ title?: string;
4
+ children?: React.ReactNode;
5
+ className?: string;
6
+ }
7
+ export declare function Modal({ id, title, children, className }: ModalProps): import("react/jsx-runtime").JSX.Element | null;
8
+ export {};
9
+ //# sourceMappingURL=Modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/components/Modal.tsx"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,UAAU,kDA2DnE"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useEffect } from "react";
3
+ import { twMerge } from "tailwind-merge";
4
+ import { useModal } from "../hooks/useModal";
5
+ export function Modal({ id, title, children, className }) {
6
+ const { activeModalId, closeModal } = useModal();
7
+ const panelRef = useRef(null);
8
+ const isOpen = activeModalId === id;
9
+ // Focus trap: on open, focus the panel
10
+ useEffect(() => {
11
+ if (isOpen && panelRef.current) {
12
+ panelRef.current.focus();
13
+ }
14
+ }, [isOpen]);
15
+ if (!isOpen)
16
+ return null;
17
+ return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4", onClick: closeModal, role: "dialog", "aria-modal": "true", "aria-label": title, children: [_jsx("div", { className: "absolute inset-0 bg-black/60" }), _jsxs("div", { ref: panelRef, tabIndex: -1, onClick: (e) => e.stopPropagation(), className: twMerge("relative z-10 w-full max-w-lg max-h-[90vh] overflow-y-auto rounded-[var(--radius)] bg-white shadow-2xl", className), children: [_jsxs("div", { className: "flex items-center justify-between border-b border-gray-100 px-6 py-4", children: [title && (_jsx("h2", { className: "text-lg font-semibold text-[var(--color-foreground)]", children: title })), _jsx("button", { onClick: closeModal, className: "ml-auto rounded-md p-1 text-[var(--color-muted)] hover:text-[var(--color-foreground)] transition-colors cursor-pointer", "aria-label": "Close", children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M5 5l10 10M15 5L5 15" }) }) })] }), _jsx("div", { className: "px-6 py-5", children: children })] })] }));
18
+ }
19
+ //# sourceMappingURL=Modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/components/Modal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAS7C,MAAM,UAAU,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAc;IAClE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,aAAa,KAAK,EAAE,CAAC;IAEpC,uCAAuC;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC/B,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,CACL,eACE,SAAS,EAAC,yDAAyD,EACnE,OAAO,EAAE,UAAU,EACnB,IAAI,EAAC,QAAQ,gBACF,MAAM,gBACL,KAAK,aAGjB,cAAK,SAAS,EAAC,8BAA8B,GAAG,EAGhD,eACE,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,CAAC,CAAC,EACZ,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACnC,SAAS,EAAE,OAAO,CAChB,wGAAwG,EACxG,SAAS,CACV,aAGD,eAAK,SAAS,EAAC,sEAAsE,aAClF,KAAK,IAAI,CACR,aAAI,SAAS,EAAC,sDAAsD,YACjE,KAAK,GACH,CACN,EACD,iBACE,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,wHAAwH,gBACvH,OAAO,YAElB,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,YAC/F,eAAM,CAAC,EAAC,sBAAsB,GAAG,GAC7B,GACC,IACL,EAGN,cAAK,SAAS,EAAC,WAAW,YAAE,QAAQ,GAAO,IACvC,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { NavLink } from "../types";
2
+ interface NavProps {
3
+ logo?: string;
4
+ siteName?: string;
5
+ links?: NavLink[];
6
+ sticky?: boolean;
7
+ className?: string;
8
+ }
9
+ export declare function Nav({ logo, siteName, links, sticky, className }: NavProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=Nav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Nav.d.ts","sourceRoot":"","sources":["../../src/components/Nav.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,UAAU,QAAQ;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAU,EAAE,MAAc,EAAE,SAAS,EAAE,EAAE,QAAQ,2CAyHtF"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { twMerge } from "tailwind-merge";
4
+ import { navigate, useCurrentPath } from "../router";
5
+ export function Nav({ logo, siteName, links = [], sticky = false, className }) {
6
+ const [menuOpen, setMenuOpen] = useState(false);
7
+ const currentPath = useCurrentPath();
8
+ const handleNav = (to) => {
9
+ if (to.startsWith("#")) {
10
+ // Hash link — scroll to element on current page
11
+ const el = document.getElementById(to.slice(1));
12
+ if (el)
13
+ el.scrollIntoView({ behavior: "smooth" });
14
+ }
15
+ else if (to.includes("#")) {
16
+ // Path with hash — navigate then scroll
17
+ const [path, hash] = to.split("#");
18
+ if (path && path !== currentPath) {
19
+ navigate(path);
20
+ // Wait for render, then scroll
21
+ requestAnimationFrame(() => {
22
+ const el = document.getElementById(hash);
23
+ if (el)
24
+ el.scrollIntoView({ behavior: "smooth" });
25
+ });
26
+ }
27
+ else {
28
+ const el = document.getElementById(hash);
29
+ if (el)
30
+ el.scrollIntoView({ behavior: "smooth" });
31
+ }
32
+ }
33
+ else {
34
+ navigate(to);
35
+ }
36
+ setMenuOpen(false);
37
+ };
38
+ return (_jsxs("nav", { className: twMerge("w-full bg-white/95 backdrop-blur-md border-b border-gray-100 z-40", sticky && "sticky top-0 shadow-sm", className), children: [_jsxs("div", { className: "max-w-6xl mx-auto flex items-center justify-between px-4 py-3", children: [_jsx("a", { href: "/", onClick: (e) => {
39
+ e.preventDefault();
40
+ handleNav("/");
41
+ }, className: "flex items-center gap-2 cursor-pointer", children: logo ? (_jsx("img", { src: logo, alt: siteName ?? "Home", className: "h-8 w-auto" })) : siteName ? (_jsx("span", { className: "text-lg font-bold text-[var(--color-foreground)]", children: siteName })) : null }), _jsx("div", { className: "hidden md:flex items-center gap-6", children: links.map((link) => (_jsx("a", { href: link.to, onClick: (e) => {
42
+ e.preventDefault();
43
+ handleNav(link.to);
44
+ }, className: twMerge("text-sm font-medium transition-colors cursor-pointer", currentPath === link.to
45
+ ? "text-[var(--color-primary)]"
46
+ : "text-[var(--color-secondary)] hover:text-[var(--color-foreground)]"), children: link.label }, link.to))) }), _jsx("button", { onClick: () => setMenuOpen(!menuOpen), className: "md:hidden p-2 text-[var(--color-foreground)] cursor-pointer", "aria-label": "Toggle menu", children: _jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: menuOpen ? (_jsx("path", { d: "M6 6l12 12M18 6L6 18" })) : (_jsxs(_Fragment, { children: [_jsx("path", { d: "M3 6h18" }), _jsx("path", { d: "M3 12h18" }), _jsx("path", { d: "M3 18h18" })] })) }) })] }), menuOpen && (_jsx("div", { className: "md:hidden border-t border-gray-100 bg-white", children: links.map((link) => (_jsx("a", { href: link.to, onClick: (e) => {
47
+ e.preventDefault();
48
+ handleNav(link.to);
49
+ }, className: twMerge("block px-4 py-3 text-sm font-medium border-b border-gray-50 cursor-pointer", currentPath === link.to
50
+ ? "text-[var(--color-primary)] bg-[var(--color-primary)]/5"
51
+ : "text-[var(--color-secondary)] hover:bg-gray-50"), children: link.label }, link.to))) }))] }));
52
+ }
53
+ //# sourceMappingURL=Nav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Nav.js","sourceRoot":"","sources":["../../src/components/Nav.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface ScheduleTourProps {
2
+ propertyId?: string;
3
+ source?: string;
4
+ className?: string;
5
+ }
6
+ export declare function ScheduleTour({ propertyId: propertyIdProp, source, className, }: ScheduleTourProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=ScheduleTour.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScheduleTour.d.ts","sourceRoot":"","sources":["../../src/components/ScheduleTour.tsx"],"names":[],"mappings":"AAKA,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EAAE,cAAc,EAC1B,MAAkB,EAClB,SAAS,GACV,EAAE,iBAAiB,2CAwWnB"}