@meetelise/studio-components 0.0.3 → 0.0.5

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 (207) 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 +17 -1
  148. package/dist/components/units/UnitExplorer.d.ts.map +1 -1
  149. package/dist/components/units/UnitExplorer.js +129 -25
  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 +10 -3
  191. package/dist/index.d.ts.map +1 -1
  192. package/dist/index.js +8 -1
  193. package/dist/index.js.map +1 -1
  194. package/dist/renderer.d.ts.map +1 -1
  195. package/dist/renderer.js +46 -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/package.json +1 -1
@@ -0,0 +1,16 @@
1
+ interface AccordionItem {
2
+ title: string;
3
+ content?: string;
4
+ children?: React.ReactNode;
5
+ }
6
+ interface AccordionProps {
7
+ items: AccordionItem[];
8
+ allowMultiple?: boolean;
9
+ defaultOpen?: number[];
10
+ colorScheme?: "light" | "dark";
11
+ className?: string;
12
+ children?: React.ReactNode;
13
+ }
14
+ export declare function Accordion({ items, allowMultiple, defaultOpen, colorScheme, className, }: AccordionProps): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=Accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../src/components/Accordion.tsx"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,aAAqB,EACrB,WAAgB,EAChB,WAAqB,EACrB,SAAS,GACV,EAAE,cAAc,2CAgFhB"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback } from "react";
3
+ import { twMerge } from "tailwind-merge";
4
+ export function Accordion({ items, allowMultiple = false, defaultOpen = [], colorScheme = "light", className, }) {
5
+ const isDark = colorScheme === "dark";
6
+ const [openIndices, setOpenIndices] = useState(new Set(defaultOpen));
7
+ const toggle = useCallback((index) => {
8
+ setOpenIndices((prev) => {
9
+ const next = new Set(allowMultiple ? prev : []);
10
+ if (prev.has(index)) {
11
+ next.delete(index);
12
+ }
13
+ else {
14
+ next.add(index);
15
+ }
16
+ return next;
17
+ });
18
+ }, [allowMultiple]);
19
+ return (_jsx("div", { className: twMerge("divide-y border-y", isDark
20
+ ? "divide-white/10 border-white/10"
21
+ : "divide-[var(--color-muted)]/15 border-[var(--color-muted)]/15", className), children: items.map((item, i) => {
22
+ const isOpen = openIndices.has(i);
23
+ return (_jsxs("div", { children: [_jsxs("button", { onClick: () => toggle(i), className: twMerge("flex w-full items-center justify-between py-4 text-left text-sm font-medium transition-colors cursor-pointer", isDark
24
+ ? "text-white/90 hover:text-[var(--color-accent)]"
25
+ : "text-[var(--color-foreground)] hover:text-[var(--color-primary)]"), "aria-expanded": isOpen, children: [_jsx("span", { children: item.title }), _jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", className: twMerge("shrink-0 ml-2 transition-transform duration-200", isOpen && "rotate-180"), children: _jsx("path", { d: "M4 6l4 4 4-4" }) })] }), _jsx("div", { className: twMerge("overflow-hidden transition-all duration-200", isOpen ? "max-h-[2000px] pb-4" : "max-h-0"), children: item.content ? (_jsx("p", { className: twMerge("text-sm", isDark ? "text-white/60" : "text-[var(--color-secondary)]"), children: item.content })) : (item.children) })] }, i));
26
+ }) }));
27
+ }
28
+ //# sourceMappingURL=Accordion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../../src/components/Accordion.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAiBzC,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,aAAa,GAAG,KAAK,EACrB,WAAW,GAAG,EAAE,EAChB,WAAW,GAAG,OAAO,EACrB,SAAS,GACM;IACf,MAAM,MAAM,GAAG,WAAW,KAAK,MAAM,CAAC;IACtC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAC5C,IAAI,GAAG,CAAC,WAAW,CAAC,CACrB,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,KAAa,EAAE,EAAE;QAChB,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF,OAAO,CACL,cACE,SAAS,EAAE,OAAO,CAChB,mBAAmB,EACnB,MAAM;YACJ,CAAC,CAAC,iCAAiC;YACnC,CAAC,CAAC,+DAA+D,EACnE,SAAS,CACV,YAEA,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO,CACL,0BACE,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,OAAO,CAChB,8GAA8G,EAC9G,MAAM;4BACJ,CAAC,CAAC,gDAAgD;4BAClD,CAAC,CAAC,kEAAkE,CACvE,mBACc,MAAM,aAErB,yBAAO,IAAI,CAAC,KAAK,GAAQ,EACzB,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,EACf,SAAS,EAAE,OAAO,CAChB,iDAAiD,EACjD,MAAM,IAAI,YAAY,CACvB,YAED,eAAM,CAAC,EAAC,cAAc,GAAG,GACrB,IACC,EACT,cACE,SAAS,EAAE,OAAO,CAChB,6CAA6C,EAC7C,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAC3C,YAEA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CACd,YAAG,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,+BAA+B,CAAC,YACzF,IAAI,CAAC,OAAO,GACX,CACL,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,QAAQ,CACd,GACG,KAxCE,CAAC,CAyCL,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ interface AddressBlockProps {
2
+ address?: string;
3
+ city?: string;
4
+ state?: string;
5
+ postalCode?: string;
6
+ phone?: string;
7
+ googleMapsUrl?: string;
8
+ layout?: "inline" | "stacked";
9
+ colorScheme?: "light" | "dark";
10
+ className?: string;
11
+ }
12
+ export declare function AddressBlock({ address, city, state, postalCode, phone, googleMapsUrl, layout, colorScheme, className, }: AddressBlockProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=AddressBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressBlock.d.ts","sourceRoot":"","sources":["../../src/components/AddressBlock.tsx"],"names":[],"mappings":"AAAA,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,KAAK,EACL,UAAU,EACV,KAAK,EACL,aAAa,EACb,MAAkB,EAClB,WAAqB,EACrB,SAAc,GACf,EAAE,iBAAiB,2CAwCnB"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function AddressBlock({ address, city, state, postalCode, phone, googleMapsUrl, layout = "stacked", colorScheme = "light", className = "", }) {
3
+ const textColor = colorScheme === "dark" ? "text-white" : "text-[var(--color-foreground)]";
4
+ const mutedColor = colorScheme === "dark" ? "text-white/70" : "text-[var(--color-secondary)]";
5
+ const isInline = layout === "inline";
6
+ const fullAddress = [address, city, state ? `${state} ${postalCode ?? ""}`.trim() : postalCode]
7
+ .filter(Boolean)
8
+ .join(", ");
9
+ const mapsUrl = googleMapsUrl ??
10
+ (fullAddress ? `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(fullAddress)}` : undefined);
11
+ return (_jsxs("div", { className: `${isInline ? "flex flex-wrap items-center gap-4" : "flex flex-col gap-2"} ${className}`, children: [fullAddress && _jsx("p", { className: `${textColor} font-[family-name:var(--font-body)]`, children: fullAddress }), _jsxs("div", { className: `flex ${isInline ? "gap-4" : "flex-col gap-2"}`, children: [phone && (_jsx("a", { href: `tel:${phone.replace(/[^\d+]/g, "")}`, className: `${mutedColor} hover:text-[var(--color-primary)] transition-colors font-[family-name:var(--font-body)]`, children: phone })), mapsUrl && (_jsx("a", { href: mapsUrl, target: "_blank", rel: "noopener noreferrer", className: "text-[var(--color-primary)] hover:underline font-[family-name:var(--font-body)]", children: "Get Directions \u2192" }))] })] }));
12
+ }
13
+ //# sourceMappingURL=AddressBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressBlock.js","sourceRoot":"","sources":["../../src/components/AddressBlock.tsx"],"names":[],"mappings":";AAYA,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,KAAK,EACL,UAAU,EACV,KAAK,EACL,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,WAAW,GAAG,OAAO,EACrB,SAAS,GAAG,EAAE,GACI;IAClB,MAAM,SAAS,GAAG,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gCAAgC,CAAC;IAC3F,MAAM,UAAU,GAAG,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,+BAA+B,CAAC;IAC9F,MAAM,QAAQ,GAAG,MAAM,KAAK,QAAQ,CAAC;IAErC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SAC5F,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,OAAO,GACX,aAAa;QACb,CAAC,WAAW,CAAC,CAAC,CAAC,mDAAmD,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEnH,OAAO,CACL,eAAK,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,qBAAqB,IAAI,SAAS,EAAE,aACrG,WAAW,IAAI,YAAG,SAAS,EAAE,GAAG,SAAS,sCAAsC,YAAG,WAAW,GAAK,EAEnG,eAAK,SAAS,EAAE,QAAQ,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE,aAC5D,KAAK,IAAI,CACR,YACE,IAAI,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,EAC3C,SAAS,EAAE,GAAG,UAAU,0FAA0F,YAEjH,KAAK,GACJ,CACL,EAEA,OAAO,IAAI,CACV,YACE,IAAI,EAAE,OAAO,EACb,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,iFAAiF,sCAGzF,CACL,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ interface AmenityItem {
2
+ name: string;
3
+ category?: string;
4
+ icon?: string;
5
+ }
6
+ interface AmenityListProps {
7
+ /** When set, fetches amenities live from GET /v1/property/{propertyId}/amenities */
8
+ propertyId?: string;
9
+ /** Static amenities from content blob (fallback when propertyId is not set) */
10
+ amenities?: AmenityItem[];
11
+ layout?: "iconGrid" | "categorized" | "list";
12
+ columns?: 2 | 3 | 4 | 6;
13
+ showIcons?: boolean;
14
+ /** Use "dark" when rendered on a dark background */
15
+ colorScheme?: "light" | "dark";
16
+ className?: string;
17
+ }
18
+ export declare function AmenityList({ propertyId: propertyIdProp, amenities: staticAmenities, layout, columns, showIcons, colorScheme, className, }: AmenityListProps): import("react/jsx-runtime").JSX.Element | null;
19
+ export {};
20
+ //# sourceMappingURL=AmenityList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmenityList.d.ts","sourceRoot":"","sources":["../../src/components/AmenityList.tsx"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkCD,wBAAgB,WAAW,CAAC,EAC1B,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,eAAoB,EAC/B,MAAmB,EACnB,OAAW,EACX,SAAgB,EAChB,WAAqB,EACrB,SAAS,GACV,EAAE,gBAAgB,kDA6GlB"}
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useState, useEffect, useCallback } from "react";
3
+ import { twMerge } from "tailwind-merge";
4
+ import { useSiteConfig } from "../hooks/useSiteConfig";
5
+ import { useAuth } from "../hooks/useAuth";
6
+ import { Icon } from "./Icon";
7
+ import { Accordion } from "./Accordion";
8
+ const gridColClasses = {
9
+ 2: "grid-cols-2",
10
+ 3: "grid-cols-2 sm:grid-cols-3",
11
+ 4: "grid-cols-2 sm:grid-cols-4",
12
+ 6: "grid-cols-3 sm:grid-cols-6",
13
+ };
14
+ function AmenityRow({ item, showIcons, isDark = false, }) {
15
+ return (_jsxs("div", { className: "flex items-center gap-2", children: [showIcons && item.icon && (_jsx(Icon, { name: item.icon, size: "sm", className: isDark ? "text-[var(--color-accent)]" : "text-[var(--color-primary)]" })), _jsx("span", { className: twMerge("text-sm", isDark ? "text-white/80" : "text-[var(--color-secondary)]"), children: item.name })] }));
16
+ }
17
+ export function AmenityList({ propertyId: propertyIdProp, amenities: staticAmenities = [], layout = "iconGrid", columns = 3, showIcons = true, colorScheme = "light", className, }) {
18
+ const isDark = colorScheme === "dark";
19
+ const config = useSiteConfig();
20
+ const { authenticatedFetch } = useAuth();
21
+ const propertyId = propertyIdProp ?? config.property?.propertyId;
22
+ const apiBaseUrl = config.property?.apiBaseUrl ?? "";
23
+ const [apiAmenities, setApiAmenities] = useState(null);
24
+ const fetchAmenities = useCallback(async () => {
25
+ if (!propertyId)
26
+ return;
27
+ try {
28
+ const url = `${apiBaseUrl}/v1/properties/${propertyId}?include_amenities=true`;
29
+ const res = await authenticatedFetch(url);
30
+ if (!res.ok)
31
+ throw new Error(`${res.status}`);
32
+ const data = await res.json();
33
+ const items = (data.amenities ?? []).map((a) => ({
34
+ name: a.name,
35
+ category: a.amenity_level === "Unit" ? "Apartment Features"
36
+ : a.amenity_level === "Community" ? "Community Amenities"
37
+ : a.amenity_level ?? a.category,
38
+ }));
39
+ setApiAmenities(items);
40
+ }
41
+ catch {
42
+ setApiAmenities(null);
43
+ }
44
+ }, [propertyId, apiBaseUrl, authenticatedFetch]);
45
+ useEffect(() => {
46
+ if (propertyId)
47
+ fetchAmenities();
48
+ }, [propertyId, fetchAmenities]);
49
+ const amenities = apiAmenities ?? staticAmenities;
50
+ const grouped = useMemo(() => {
51
+ const map = new Map();
52
+ for (const item of amenities) {
53
+ const cat = item.category ?? "General";
54
+ const arr = map.get(cat) ?? [];
55
+ arr.push(item);
56
+ map.set(cat, arr);
57
+ }
58
+ return map;
59
+ }, [amenities]);
60
+ if (amenities.length === 0)
61
+ return null;
62
+ if (layout === "iconGrid") {
63
+ return (_jsx("div", { className: twMerge("grid gap-6", gridColClasses[columns] ?? gridColClasses[3], className), children: amenities.map((item) => (_jsxs("div", { className: "flex flex-col items-center gap-2 text-center", children: [showIcons && item.icon && (_jsx(Icon, { name: item.icon, size: "lg", className: isDark ? "text-[var(--color-accent)]" : "text-[var(--color-primary)]" })), _jsx("span", { className: twMerge("text-sm font-medium", isDark ? "text-white" : "text-[var(--color-foreground)]"), children: item.name })] }, item.name))) }));
64
+ }
65
+ if (layout === "categorized") {
66
+ const items = [...grouped.entries()].map(([category, categoryItems]) => ({
67
+ title: category,
68
+ children: (_jsx("div", { className: "flex flex-col gap-2", children: categoryItems.map((item) => (_jsx(AmenityRow, { item: item, showIcons: showIcons, isDark: isDark }, item.name))) })),
69
+ }));
70
+ return _jsx(Accordion, { items: items, allowMultiple: true, colorScheme: colorScheme, className: className });
71
+ }
72
+ // list layout
73
+ return (_jsx("div", { className: twMerge("flex flex-col gap-2", className), children: amenities.map((item) => (_jsx(AmenityRow, { item: item, showIcons: showIcons }, item.name))) }));
74
+ }
75
+ //# sourceMappingURL=AmenityList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmenityList.js","sourceRoot":"","sources":["../../src/components/AmenityList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ interface BadgeProps {
2
+ label: string;
3
+ variant?: "default" | "success" | "warning" | "info" | "accent";
4
+ size?: "sm" | "md";
5
+ className?: string;
6
+ }
7
+ export declare function Badge({ label, variant, size, className }: BadgeProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=Badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":"AAAA,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAeD,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,OAAmB,EAAE,IAAW,EAAE,SAAc,EAAE,EAAE,UAAU,2CAQ5F"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ const VARIANT_CLASSES = {
3
+ default: "bg-[var(--color-muted)]/15 text-[var(--color-foreground)]",
4
+ success: "bg-emerald-100 text-emerald-800",
5
+ warning: "bg-amber-100 text-amber-800",
6
+ info: "bg-sky-100 text-sky-800",
7
+ accent: "bg-[var(--color-primary)]/10 text-[var(--color-primary)]",
8
+ };
9
+ const SIZE_CLASSES = {
10
+ sm: "text-xs px-2 py-0.5",
11
+ md: "text-sm px-2.5 py-1",
12
+ };
13
+ export function Badge({ label, variant = "default", size = "sm", className = "" }) {
14
+ return (_jsx("span", { className: `inline-flex items-center rounded-full font-medium font-[family-name:var(--font-body)] ${VARIANT_CLASSES[variant] ?? VARIANT_CLASSES.default} ${SIZE_CLASSES[size] ?? SIZE_CLASSES.sm} ${className}`, children: label }));
15
+ }
16
+ //# sourceMappingURL=Badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":";AAOA,MAAM,eAAe,GAA2B;IAC9C,OAAO,EAAE,2DAA2D;IACpE,OAAO,EAAE,iCAAiC;IAC1C,OAAO,EAAE,6BAA6B;IACtC,IAAI,EAAE,yBAAyB;IAC/B,MAAM,EAAE,0DAA0D;CACnE,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,qBAAqB;CAC1B,CAAC;AAEF,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,GAAG,EAAE,EAAc;IAC3F,OAAO,CACL,eACE,SAAS,EAAE,yFAAyF,eAAe,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,IAAI,SAAS,EAAE,YAE9M,KAAK,GACD,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ interface ButtonProps {
2
+ content: string;
3
+ variant?: "primary" | "secondary" | "outline" | "ghost";
4
+ size?: "sm" | "md" | "lg";
5
+ fullWidth?: boolean;
6
+ action?: "navigate" | "scroll" | "openModal" | "externalLink";
7
+ target?: string;
8
+ className?: string;
9
+ }
10
+ export declare function Button({ content, variant, size, fullWidth, action, target, className, }: ButtonProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;IACxD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAC;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,OAAmB,EACnB,IAAW,EACX,SAAiB,EACjB,MAAmB,EACnB,MAAM,EACN,SAAS,GACV,EAAE,WAAW,2CAmCb"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ import { navigate } from "../router";
4
+ import { useModal } from "../hooks/useModal";
5
+ const variantClasses = {
6
+ primary: "bg-[var(--color-primary)] text-white shadow-md hover:shadow-lg hover:brightness-110",
7
+ secondary: "bg-[var(--color-secondary)] text-white shadow-md hover:shadow-lg hover:brightness-110",
8
+ outline: "border-2 border-[var(--color-primary)] text-[var(--color-primary)] bg-transparent hover:bg-[var(--color-primary)]/5",
9
+ ghost: "text-[var(--color-primary)] bg-transparent hover:bg-[var(--color-primary)]/5",
10
+ };
11
+ const sizeClasses = {
12
+ sm: "px-4 py-2 text-sm",
13
+ md: "px-6 py-3 text-sm",
14
+ lg: "px-8 py-4 text-base",
15
+ };
16
+ export function Button({ content, variant = "primary", size = "md", fullWidth = false, action = "navigate", target, className, }) {
17
+ const { openModal } = useModal();
18
+ const handleClick = () => {
19
+ if (!target)
20
+ return;
21
+ switch (action) {
22
+ case "navigate":
23
+ navigate(target);
24
+ break;
25
+ case "scroll":
26
+ document.getElementById(target)?.scrollIntoView({ behavior: "smooth" });
27
+ break;
28
+ case "openModal":
29
+ openModal(target);
30
+ break;
31
+ case "externalLink":
32
+ window.open(target, "_blank", "noopener");
33
+ break;
34
+ }
35
+ };
36
+ return (_jsx("button", { onClick: handleClick, className: twMerge("inline-flex items-center justify-center rounded-[var(--radius)] font-semibold transition-all duration-200 cursor-pointer", variantClasses[variant] ?? variantClasses.primary, sizeClasses[size] ?? sizeClasses.md, fullWidth && "w-full", className), children: content }));
37
+ }
38
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAY7C,MAAM,cAAc,GAA2B;IAC7C,OAAO,EACL,qFAAqF;IACvF,SAAS,EACP,uFAAuF;IACzF,OAAO,EACL,qHAAqH;IACvH,KAAK,EACH,8EAA8E;CACjF,CAAC;AAEF,MAAM,WAAW,GAA2B;IAC1C,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,qBAAqB;CAC1B,CAAC;AAEF,MAAM,UAAU,MAAM,CAAC,EACrB,OAAO,EACP,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,KAAK,EACjB,MAAM,GAAG,UAAU,EACnB,MAAM,EACN,SAAS,GACG;IACZ,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEjC,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,UAAU;gBACb,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACjB,MAAM;YACR,KAAK,QAAQ;gBACX,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACxE,MAAM;YACR,KAAK,WAAW;gBACd,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClB,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC1C,MAAM;QACV,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,iBACE,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,OAAO,CAChB,0HAA0H,EAC1H,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,OAAO,EACjD,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE,EACnC,SAAS,IAAI,QAAQ,EACrB,SAAS,CACV,YAEA,OAAO,GACD,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface CTABannerProps {
2
+ /** Background gradient or solid color */
3
+ bg?: string;
4
+ /** Gradient direction for two-color gradients */
5
+ gradient?: string;
6
+ children?: React.ReactNode;
7
+ className?: string;
8
+ }
9
+ export declare function CTABanner({ bg, gradient, children, className, }: CTABannerProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=CTABanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTABanner.d.ts","sourceRoot":"","sources":["../../src/components/CTABanner.tsx"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,yCAAyC;IACzC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,EAAE,EACF,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,EAAE,cAAc,2CAsBhB"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ export function CTABanner({ bg, gradient, children, className, }) {
4
+ const style = {};
5
+ if (gradient) {
6
+ style.background = gradient;
7
+ }
8
+ else if (bg) {
9
+ style.backgroundColor = bg;
10
+ }
11
+ else {
12
+ style.background =
13
+ "linear-gradient(135deg, var(--color-primary), var(--color-accent, var(--color-primary)))";
14
+ }
15
+ return (_jsx("div", { className: twMerge("w-full py-16 md:py-20 px-4", className), style: style, children: _jsx("div", { className: "max-w-3xl mx-auto text-center", children: children }) }));
16
+ }
17
+ //# sourceMappingURL=CTABanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTABanner.js","sourceRoot":"","sources":["../../src/components/CTABanner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAWzC,MAAM,UAAU,SAAS,CAAC,EACxB,EAAE,EACF,QAAQ,EACR,QAAQ,EACR,SAAS,GACM;IACf,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC9B,CAAC;SAAM,IAAI,EAAE,EAAE,CAAC;QACd,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,UAAU;YACd,0FAA0F,CAAC;IAC/F,CAAC;IAED,OAAO,CACL,cACE,SAAS,EAAE,OAAO,CAChB,4BAA4B,EAC5B,SAAS,CACV,EACD,KAAK,EAAE,KAAK,YAEZ,cAAK,SAAS,EAAC,+BAA+B,YAAE,QAAQ,GAAO,GAC3D,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface ContactFormProps {
2
+ propertyId?: string;
3
+ source?: string;
4
+ fields?: string[];
5
+ submitLabel?: string;
6
+ successMessage?: string;
7
+ className?: string;
8
+ }
9
+ export declare function ContactForm({ propertyId: propertyIdProp, source, fields, submitLabel, successMessage, className, }: ContactFormProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=ContactForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactForm.d.ts","sourceRoot":"","sources":["../../src/components/ContactForm.tsx"],"names":[],"mappings":"AAKA,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD,wBAAgB,WAAW,CAAC,EAC1B,UAAU,EAAE,cAAc,EAC1B,MAAkB,EAClB,MAAuB,EACvB,WAAoB,EACpB,cAA6C,EAC7C,SAAS,GACV,EAAE,gBAAgB,2CAoIlB"}
@@ -0,0 +1,91 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { twMerge } from "tailwind-merge";
4
+ import { useSiteConfig } from "../hooks/useSiteConfig";
5
+ import { useAuth } from "../hooks/useAuth";
6
+ const DEFAULT_FIELDS = [
7
+ "firstName",
8
+ "lastName",
9
+ "email",
10
+ "phone",
11
+ "moveInDate",
12
+ "bedrooms",
13
+ "message",
14
+ ];
15
+ const fieldLabels = {
16
+ firstName: "First Name",
17
+ lastName: "Last Name",
18
+ email: "Email",
19
+ phone: "Phone",
20
+ moveInDate: "Desired Move-in Date",
21
+ bedrooms: "Bedrooms",
22
+ message: "Message",
23
+ };
24
+ const requiredFields = new Set(["firstName", "lastName", "email", "phone"]);
25
+ export function ContactForm({ propertyId: propertyIdProp, source = "website", fields = DEFAULT_FIELDS, submitLabel = "Send", successMessage = "Thanks! We'll be in touch.", className, }) {
26
+ const config = useSiteConfig();
27
+ const { authenticatedFetch } = useAuth();
28
+ const propertyId = propertyIdProp ?? config.property?.propertyId;
29
+ const apiBaseUrl = config.property?.apiBaseUrl ?? "";
30
+ const [values, setValues] = useState({});
31
+ const [status, setStatus] = useState("idle");
32
+ const [errorMsg, setErrorMsg] = useState("");
33
+ const set = (field, value) => setValues((prev) => ({ ...prev, [field]: value }));
34
+ const handleSubmit = async (e) => {
35
+ e.preventDefault();
36
+ if (!propertyId)
37
+ return;
38
+ setStatus("submitting");
39
+ setErrorMsg("");
40
+ try {
41
+ const body = {
42
+ property_id: propertyId,
43
+ source,
44
+ };
45
+ if (values.firstName)
46
+ body.first_name = values.firstName;
47
+ if (values.lastName)
48
+ body.last_name = values.lastName;
49
+ if (values.email)
50
+ body.email = values.email;
51
+ if (values.phone)
52
+ body.phone = values.phone;
53
+ if (values.moveInDate)
54
+ body.move_in_date = values.moveInDate;
55
+ if (values.bedrooms)
56
+ body.bedrooms = Number(values.bedrooms);
57
+ // message is not a field on the prospect API -- could be added as a note
58
+ const res = await authenticatedFetch(`${apiBaseUrl}/v1/prospect`, {
59
+ method: "POST",
60
+ headers: { "Content-Type": "application/json" },
61
+ body: JSON.stringify(body),
62
+ });
63
+ if (!res.ok)
64
+ throw new Error(`Request failed: ${res.status}`);
65
+ setStatus("success");
66
+ }
67
+ catch {
68
+ setErrorMsg("Something went wrong. Please try again.");
69
+ setStatus("error");
70
+ }
71
+ };
72
+ if (status === "success") {
73
+ return (_jsx("div", { className: twMerge("text-center py-8", className), children: _jsx("p", { className: "text-[var(--color-primary)] font-medium", children: successMessage }) }));
74
+ }
75
+ return (_jsxs("form", { onSubmit: handleSubmit, className: twMerge("flex flex-col gap-4", className), children: [fields.map((field) => {
76
+ const label = fieldLabels[field] ?? field;
77
+ const isRequired = requiredFields.has(field);
78
+ if (field === "bedrooms") {
79
+ return (_jsxs("label", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-sm font-medium text-[var(--color-foreground)]", children: [label, isRequired && " *"] }), _jsxs("select", { value: values.bedrooms ?? "", onChange: (e) => set("bedrooms", e.target.value), className: "rounded-md border border-[var(--color-muted)]/30 bg-white px-3 py-2 text-sm", children: [_jsx("option", { value: "", children: "Select" }), _jsx("option", { value: "0", children: "Studio" }), _jsx("option", { value: "1", children: "1 Bedroom" }), _jsx("option", { value: "2", children: "2 Bedrooms" }), _jsx("option", { value: "3", children: "3 Bedrooms" }), _jsx("option", { value: "4", children: "4 Bedrooms" })] })] }, field));
80
+ }
81
+ if (field === "message") {
82
+ return (_jsxs("label", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-sm font-medium text-[var(--color-foreground)]", children: label }), _jsx("textarea", { value: values.message ?? "", onChange: (e) => set("message", e.target.value), rows: 3, className: "rounded-md border border-[var(--color-muted)]/30 bg-white px-3 py-2 text-sm resize-y" })] }, field));
83
+ }
84
+ const inputType = field === "email" ? "email" :
85
+ field === "phone" ? "tel" :
86
+ field === "moveInDate" ? "date" :
87
+ "text";
88
+ return (_jsxs("label", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-sm font-medium text-[var(--color-foreground)]", children: [label, isRequired && " *"] }), _jsx("input", { type: inputType, value: values[field] ?? "", onChange: (e) => set(field, e.target.value), required: isRequired, className: "rounded-md border border-[var(--color-muted)]/30 bg-white px-3 py-2 text-sm" })] }, field));
89
+ }), status === "error" && (_jsx("p", { className: "text-red-600 text-sm", children: errorMsg })), _jsx("button", { type: "submit", disabled: status === "submitting", className: "mt-2 rounded-md bg-[var(--color-primary)] px-6 py-3 text-sm font-semibold text-white hover:opacity-90 transition-opacity disabled:opacity-50 cursor-pointer", children: status === "submitting" ? "Sending..." : submitLabel })] }));
90
+ }
91
+ //# sourceMappingURL=ContactForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactForm.js","sourceRoot":"","sources":["../../src/components/ContactForm.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,16 @@
1
1
  interface ContainerProps {
2
+ id?: string;
2
3
  bg?: string;
3
- padding?: "none" | "sm" | "md" | "lg" | "xl";
4
- fullWidth?: boolean;
4
+ /** Background image URL rendered behind content with optional overlay */
5
+ bgImage?: string;
6
+ /** Semi-transparent overlay on bgImage, e.g. "rgba(0,0,0,0.5)" */
7
+ bgOverlay?: string;
8
+ padding?: "none" | "sm" | "md" | "lg" | "xl" | "2xl";
9
+ /** Content max-width: narrow (640px), default (896px), wide (1152px), full (no constraint) */
10
+ maxWidth?: "narrow" | "default" | "wide" | "full";
5
11
  children?: React.ReactNode;
6
12
  className?: string;
7
13
  }
8
- export declare function Container({ bg, padding, fullWidth, children, className, }: ContainerProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function Container({ id, bg, bgImage, bgOverlay, padding, maxWidth, children, className, }: ContainerProps): import("react/jsx-runtime").JSX.Element;
9
15
  export {};
10
16
  //# sourceMappingURL=Container.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,wBAAgB,SAAS,CAAC,EACxB,EAAE,EACF,OAAc,EACd,SAAgB,EAChB,QAAQ,EACR,SAAS,GACV,EAAE,cAAc,2CAahB"}
1
+ {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IACrD,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAClD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD,wBAAgB,SAAS,CAAC,EACxB,EAAE,EACF,EAAE,EACF,OAAO,EACP,SAAS,EACT,OAAc,EACd,QAAoB,EACpB,QAAQ,EACR,SAAS,GACV,EAAE,cAAc,2CAoChB"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { twMerge } from "tailwind-merge";
3
3
  const paddingClasses = {
4
4
  none: "py-0",
@@ -6,13 +6,24 @@ const paddingClasses = {
6
6
  md: "py-8 px-4",
7
7
  lg: "py-16 px-4",
8
8
  xl: "py-24 px-4",
9
+ "2xl": "py-32 px-4",
9
10
  };
10
- export function Container({ bg, padding = "lg", fullWidth = true, children, className, }) {
11
- const defaults = [
12
- fullWidth ? "w-full" : "max-w-4xl mx-auto",
13
- paddingClasses[padding] ?? paddingClasses.lg,
14
- ].join(" ");
15
- const style = bg ? { backgroundColor: bg } : undefined;
16
- return (_jsx("div", { className: twMerge(defaults, className), style: style, children: _jsx("div", { className: fullWidth ? "max-w-4xl mx-auto" : undefined, children: children }) }));
11
+ const maxWidthClasses = {
12
+ narrow: "max-w-2xl mx-auto",
13
+ default: "max-w-4xl mx-auto",
14
+ wide: "max-w-6xl mx-auto",
15
+ full: "w-full",
16
+ };
17
+ export function Container({ id, bg, bgImage, bgOverlay, padding = "lg", maxWidth = "default", children, className, }) {
18
+ const defaults = ["w-full", paddingClasses[padding] ?? paddingClasses.lg].join(" ");
19
+ const outerStyle = {};
20
+ if (bg)
21
+ outerStyle.backgroundColor = bg;
22
+ if (bgImage) {
23
+ outerStyle.backgroundImage = `url(${bgImage})`;
24
+ outerStyle.backgroundSize = "cover";
25
+ outerStyle.backgroundPosition = "center";
26
+ }
27
+ return (_jsxs("div", { id: id, className: twMerge(defaults, "relative", className), style: outerStyle, children: [bgImage && bgOverlay && (_jsx("div", { className: "absolute inset-0", style: { backgroundColor: bgOverlay } })), _jsx("div", { className: twMerge("relative", maxWidthClasses[maxWidth] ?? maxWidthClasses.default), children: children })] }));
17
28
  }
18
29
  //# sourceMappingURL=Container.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Container.js","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAUzC,MAAM,cAAc,GAA2B;IAC7C,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;CACjB,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,EACxB,EAAE,EACF,OAAO,GAAG,IAAI,EACd,SAAS,GAAG,IAAI,EAChB,QAAQ,EACR,SAAS,GACM;IACf,MAAM,QAAQ,GAAG;QACf,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB;QAC1C,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,EAAE;KAC7C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvD,OAAO,CACL,cAAK,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,YACxD,cAAK,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,YAAG,QAAQ,GAAO,GACzE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Container.js","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAgBzC,MAAM,cAAc,GAA2B;IAC7C,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,YAAY;CACpB,CAAC;AAEF,MAAM,eAAe,GAA2B;IAC9C,MAAM,EAAE,mBAAmB;IAC3B,OAAO,EAAE,mBAAmB;IAC5B,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,QAAQ;CACf,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,EACxB,EAAE,EACF,EAAE,EACF,OAAO,EACP,SAAS,EACT,OAAO,GAAG,IAAI,EACd,QAAQ,GAAG,SAAS,EACpB,QAAQ,EACR,SAAS,GACM;IACf,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC,IAAI,CAC5E,GAAG,CACJ,CAAC;IAEF,MAAM,UAAU,GAAwB,EAAE,CAAC;IAC3C,IAAI,EAAE;QAAE,UAAU,CAAC,eAAe,GAAG,EAAE,CAAC;IACxC,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,eAAe,GAAG,OAAO,OAAO,GAAG,CAAC;QAC/C,UAAU,CAAC,cAAc,GAAG,OAAO,CAAC;QACpC,UAAU,CAAC,kBAAkB,GAAG,QAAQ,CAAC;IAC3C,CAAC;IAED,OAAO,CACL,eACE,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,EACnD,KAAK,EAAE,UAAU,aAGhB,OAAO,IAAI,SAAS,IAAI,CACvB,cACE,SAAS,EAAC,kBAAkB,EAC5B,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,GACrC,CACH,EACD,cACE,SAAS,EAAE,OAAO,CAChB,UAAU,EACV,eAAe,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,OAAO,CACrD,YAEA,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface DividerProps {
2
+ label?: string;
3
+ color?: string;
4
+ spacing?: "sm" | "md" | "lg";
5
+ className?: string;
6
+ }
7
+ export declare function Divider({ label, color, spacing, className }: DividerProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=Divider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divider.d.ts","sourceRoot":"","sources":["../../src/components/Divider.tsx"],"names":[],"mappings":"AAEA,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAc,EAAE,SAAS,EAAE,EAAE,YAAY,2CA4BhF"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ const spacingClasses = {
4
+ sm: "my-4",
5
+ md: "my-8",
6
+ lg: "my-16",
7
+ };
8
+ export function Divider({ label, color, spacing = "md", className }) {
9
+ const lineColor = color ?? "var(--color-muted)";
10
+ if (label) {
11
+ return (_jsxs("div", { className: twMerge("flex items-center gap-4", spacingClasses[spacing] ?? spacingClasses.md, className), children: [_jsx("div", { className: "flex-1 h-px", style: { backgroundColor: lineColor, opacity: 0.2 } }), _jsx("span", { className: "text-xs font-semibold uppercase tracking-widest text-[var(--color-muted)]", children: label }), _jsx("div", { className: "flex-1 h-px", style: { backgroundColor: lineColor, opacity: 0.2 } })] }));
12
+ }
13
+ return (_jsx("div", { className: twMerge(spacingClasses[spacing] ?? spacingClasses.md, className), children: _jsx("div", { className: "h-px w-full", style: { backgroundColor: lineColor, opacity: 0.15 } }) }));
14
+ }
15
+ //# sourceMappingURL=Divider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divider.js","sourceRoot":"","sources":["../../src/components/Divider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AASzC,MAAM,cAAc,GAA2B;IAC7C,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,OAAO;CACZ,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,EAAgB;IAC/E,MAAM,SAAS,GAAG,KAAK,IAAI,oBAAoB,CAAC;IAEhD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,eACE,SAAS,EAAE,OAAO,CAChB,yBAAyB,EACzB,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,EAAE,EAC5C,SAAS,CACV,aAED,cAAK,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAI,EACpF,eAAM,SAAS,EAAC,2EAA2E,YACxF,KAAK,GACD,EACP,cAAK,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAI,IAChF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cACE,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,YAE3E,cAAK,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAI,GACjF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface EliseChatProps {
2
+ buildingId?: string;
3
+ scriptUrl?: string;
4
+ className?: string;
5
+ }
6
+ export declare function EliseChat({ buildingId, scriptUrl, }: EliseChatProps): null;
7
+ export {};
8
+ //# sourceMappingURL=EliseChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EliseChat.d.ts","sourceRoot":"","sources":["../../src/components/EliseChat.tsx"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,SAAS,CAAC,EACxB,UAAU,EACV,SAA8B,GAC/B,EAAE,cAAc,QAqBhB"}