@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
@@ -1,29 +1,114 @@
1
- export interface UnitV2 {
2
- id: string;
3
- property_id: string;
1
+ export interface PublicSpecial {
2
+ id: number | null;
3
+ description: string;
4
+ value: number | null;
5
+ lease_length: number | null;
6
+ unit_ids: number[] | null;
7
+ start_date: string | null;
8
+ end_date: string | null;
9
+ }
10
+ export interface PublicFloorplanSummary {
11
+ id: number | null;
12
+ name: string;
13
+ bedrooms: number | null;
14
+ bathrooms: number | null;
15
+ square_footage: number | null;
16
+ marketing_title: string | null;
17
+ }
18
+ export interface PublicMedia {
19
+ id: string | null;
20
+ url: string;
21
+ name: string | null;
22
+ description: string | null;
23
+ type: string | null;
24
+ rank: number | null;
25
+ }
26
+ export interface PublicAmenity {
27
+ name: string;
28
+ amenity_level: string;
29
+ description: string | null;
30
+ category: string | null;
31
+ }
32
+ export interface PublicFee {
33
+ id: string | null;
34
+ fee_name: string;
35
+ amount: number | null;
36
+ amount_display: string;
37
+ frequency: string;
38
+ category: string;
39
+ description: string | null;
40
+ additional_info: string | null;
41
+ refundable: boolean;
42
+ fee_timing: string | null;
43
+ }
44
+ export interface PublicPriceMatrixEntry {
45
+ move_in_date: string;
46
+ rent: number;
47
+ lease_term_months: number;
48
+ }
49
+ export interface PublicUnit {
50
+ id: number | null;
51
+ unit_number: string;
52
+ bedrooms: number | null;
53
+ bathrooms: number | null;
54
+ square_footage: number | null;
55
+ floor: number | null;
56
+ date_available: string | null;
57
+ rent: number | null;
58
+ virtual_tour_link: string | null;
59
+ application_url: string | null;
60
+ availability_status: string | null;
61
+ floorplan: PublicFloorplanSummary | null;
62
+ media: PublicMedia[] | null;
63
+ amenities: PublicAmenity[] | null;
64
+ fees: PublicFee[] | null;
65
+ price_matrix: PublicPriceMatrixEntry[] | null;
66
+ specials: PublicSpecial[] | null;
67
+ total_monthly_cost: number | null;
68
+ }
69
+ export interface PublicUnitSummary {
70
+ id: number | null;
4
71
  unit_number: string;
5
- building_id: string | null;
6
- bedrooms: number;
7
- bathrooms: number;
8
- square_feet: number | null;
72
+ rent: number | null;
73
+ date_available: string | null;
74
+ availability_status: string | null;
75
+ square_footage: number | null;
9
76
  floor: number | null;
10
- building_name: string | null;
11
- floor_plan: string | null;
12
- floor_plan_id: string | null;
13
- unit_leasing_status: string | null;
14
- unit_status: string | null;
15
- available_date: string | null;
16
- market_rent: number | null;
17
- asking_rent: number | null;
18
- created_at: string;
19
- updated_at: string;
20
- }
21
- export interface UnitsPageResponse {
22
- units: UnitV2[];
23
- pagination: {
24
- next_cursor: string | null;
25
- has_more: boolean;
26
- };
77
+ }
78
+ export interface PublicRentRange {
79
+ min: number | null;
80
+ max: number | null;
81
+ }
82
+ export interface PublicSqftRange {
83
+ min: number | null;
84
+ max: number | null;
85
+ }
86
+ export interface PublicFloorplan {
87
+ id: number | null;
88
+ name: string;
89
+ bedrooms: number | null;
90
+ bathrooms: number | null;
91
+ square_footage: number | null;
92
+ marketing_title: string | null;
93
+ marketing_description: string | null;
94
+ available_unit_count: number | null;
95
+ rent_range: PublicRentRange | null;
96
+ sqft_range: PublicSqftRange | null;
97
+ units: PublicUnitSummary[] | null;
98
+ media: PublicMedia[] | null;
99
+ amenities: PublicAmenity[] | null;
100
+ }
101
+ export interface PaginatedResponse<T> {
102
+ items: T[];
103
+ cursor: string | null;
104
+ }
105
+ export type UnitsPageResponse = PaginatedResponse<PublicUnit>;
106
+ export type FloorplansPageResponse = PaginatedResponse<PublicFloorplan>;
107
+ export interface FeesResponse {
108
+ items: PublicFee[];
109
+ }
110
+ export interface SpecialsResponse {
111
+ items: PublicSpecial[];
27
112
  }
28
113
  export interface UnitFilterValues {
29
114
  bedrooms: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/units/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/units/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACzC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAClC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC;IAC9C,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACjC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,KAAK,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC9D,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
@@ -1,2 +1,3 @@
1
+ // Public API v2 types — matches PublicUnit from public_models.py
1
2
  export {};
2
3
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/units/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/units/types.ts"],"names":[],"mappings":"AAAA,iEAAiE"}
@@ -0,0 +1,16 @@
1
+ interface AnalyticsEvent {
2
+ action: string;
3
+ category?: string;
4
+ label?: string;
5
+ value?: number;
6
+ }
7
+ export declare function useAnalytics(): {
8
+ trackEvent: ({ action, category, label, value }: AnalyticsEvent) => void;
9
+ trackPageView: (path: string, title?: string) => void;
10
+ trackTourBooking: (propertyId: string) => void;
11
+ trackApplyClick: (propertyId: string, unitId?: string) => void;
12
+ trackFormSubmission: (formType: string) => void;
13
+ trackUnitView: (unitId: string) => void;
14
+ };
15
+ export {};
16
+ //# sourceMappingURL=useAnalytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnalytics.d.ts","sourceRoot":"","sources":["../../src/hooks/useAnalytics.tsx"],"names":[],"mappings":"AAGA,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,wBAAgB,YAAY;qDAKa,cAAc;0BAwB5C,MAAM,UAAU,MAAM;mCAmBhB,MAAM;kCAON,MAAM,WAAW,MAAM;oCAWzB,MAAM;4BAOR,MAAM;EAclB"}
@@ -0,0 +1,65 @@
1
+ import { useCallback } from "react";
2
+ import { useSiteConfig } from "./useSiteConfig";
3
+ export function useAnalytics() {
4
+ const config = useSiteConfig();
5
+ const analytics = config.analytics;
6
+ const trackEvent = useCallback(({ action, category, label, value }) => {
7
+ // GA4 via gtag
8
+ if (analytics?.ga4 && window.gtag) {
9
+ window.gtag("event", action, {
10
+ event_category: category,
11
+ event_label: label,
12
+ value,
13
+ });
14
+ }
15
+ // GTM via dataLayer
16
+ if (analytics?.gtm && window.dataLayer) {
17
+ window.dataLayer.push({
18
+ event: action,
19
+ eventCategory: category,
20
+ eventLabel: label,
21
+ eventValue: value,
22
+ });
23
+ }
24
+ }, [analytics?.ga4, analytics?.gtm]);
25
+ const trackPageView = useCallback((path, title) => {
26
+ if (analytics?.ga4 && window.gtag) {
27
+ window.gtag("event", "page_view", {
28
+ page_path: path,
29
+ page_title: title,
30
+ });
31
+ }
32
+ if (analytics?.gtm && window.dataLayer) {
33
+ window.dataLayer.push({
34
+ event: "page_view",
35
+ pagePath: path,
36
+ pageTitle: title,
37
+ });
38
+ }
39
+ }, [analytics?.ga4, analytics?.gtm]);
40
+ const trackTourBooking = useCallback((propertyId) => {
41
+ trackEvent({ action: "tour_booking", category: "conversion", label: propertyId });
42
+ }, [trackEvent]);
43
+ const trackApplyClick = useCallback((propertyId, unitId) => {
44
+ trackEvent({
45
+ action: "apply_click",
46
+ category: "conversion",
47
+ label: unitId ? `${propertyId}/${unitId}` : propertyId,
48
+ });
49
+ }, [trackEvent]);
50
+ const trackFormSubmission = useCallback((formType) => {
51
+ trackEvent({ action: "form_submit", category: "engagement", label: formType });
52
+ }, [trackEvent]);
53
+ const trackUnitView = useCallback((unitId) => {
54
+ trackEvent({ action: "unit_view", category: "engagement", label: unitId });
55
+ }, [trackEvent]);
56
+ return {
57
+ trackEvent,
58
+ trackPageView,
59
+ trackTourBooking,
60
+ trackApplyClick,
61
+ trackFormSubmission,
62
+ trackUnitView,
63
+ };
64
+ }
65
+ //# sourceMappingURL=useAnalytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnalytics.js","sourceRoot":"","sources":["../../src/hooks/useAnalytics.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useAuth.tsx"],"names":[],"mappings":"AASA,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC5E;AASD,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAqEvE;AAED,wBAAgB,OAAO,IAAI,gBAAgB,CAI1C"}
1
+ {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useAuth.tsx"],"names":[],"mappings":"AASA,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC5E;AASD,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CA2EvE;AAED,wBAAgB,OAAO,IAAI,gBAAgB,CAI1C"}
@@ -6,9 +6,13 @@ export function AuthProvider({ children }) {
6
6
  const config = useSiteConfig();
7
7
  const siteId = config.siteId;
8
8
  const apiBaseUrl = config.property?.apiBaseUrl ?? "";
9
+ const devMode = config.devMode ?? false;
10
+ const devApiToken = config.devApiToken;
9
11
  const tokenRef = useRef(null);
10
12
  const inflightRef = useRef(null);
11
13
  const fetchToken = useCallback(async () => {
14
+ if (devMode)
15
+ return devApiToken ?? "dev-mode-no-token";
12
16
  if (!siteId) {
13
17
  throw new Error("siteId is required for authentication");
14
18
  }
@@ -26,8 +30,10 @@ export function AuthProvider({ children }) {
26
30
  expiresAt: Date.now() + (data.expires_in - 60) * 1000,
27
31
  };
28
32
  return data.session_token;
29
- }, [siteId, apiBaseUrl]);
33
+ }, [siteId, apiBaseUrl, devMode, devApiToken]);
30
34
  const getToken = useCallback(async () => {
35
+ if (devMode)
36
+ return devApiToken ?? "dev-mode-no-token";
31
37
  // Return cached token if still valid
32
38
  if (tokenRef.current && Date.now() < tokenRef.current.expiresAt) {
33
39
  return tokenRef.current.token;
@@ -40,7 +46,7 @@ export function AuthProvider({ children }) {
40
46
  inflightRef.current = null;
41
47
  });
42
48
  return inflightRef.current;
43
- }, [fetchToken]);
49
+ }, [fetchToken, devMode]);
44
50
  const authenticatedFetch = useCallback(async (url, init) => {
45
51
  const token = await getToken();
46
52
  return fetch(url, {
@@ -1 +1 @@
1
- {"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../src/hooks/useAuth.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAahD,MAAM,WAAW,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;AAOjE,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAiC;IACtE,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAqB,EAAE;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,aAAa,MAAM,WAAW,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,GAAoB,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAE/C,+CAA+C;QAC/C,QAAQ,CAAC,OAAO,GAAG;YACjB,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,IAAI;SACtD,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAqB,EAAE;QACvD,qCAAqC;QACrC,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAChE,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,CAAC;QAED,wCAAwC;QACxC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,WAAW,CAAC,OAAO,CAAC;QAC7B,CAAC;QAED,WAAW,CAAC,OAAO,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC9C,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,kBAAkB,GAAG,WAAW,CACpC,KAAK,EAAE,GAAW,EAAE,IAAkB,EAAqB,EAAE;QAC3D,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,GAAG,EAAE;YAChB,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,GAAG,IAAI,EAAE,OAAO;gBAChB,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,OAAO,CACL,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAC1D,QAAQ,GACY,CACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../src/hooks/useAuth.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAahD,MAAM,WAAW,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;AAOjE,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAiC;IACtE,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAqB,EAAE;QACzD,IAAI,OAAO;YAAE,OAAO,WAAW,IAAI,mBAAmB,CAAC;QAEvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,aAAa,MAAM,WAAW,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,IAAI,GAAoB,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAE/C,+CAA+C;QAC/C,QAAQ,CAAC,OAAO,GAAG;YACjB,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,IAAI;SACtD,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAqB,EAAE;QACvD,IAAI,OAAO;YAAE,OAAO,WAAW,IAAI,mBAAmB,CAAC;QAEvD,qCAAqC;QACrC,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAChE,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,CAAC;QAED,wCAAwC;QACxC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,WAAW,CAAC,OAAO,CAAC;QAC7B,CAAC;QAED,WAAW,CAAC,OAAO,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC9C,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1B,MAAM,kBAAkB,GAAG,WAAW,CACpC,KAAK,EAAE,GAAW,EAAE,IAAkB,EAAqB,EAAE;QAC3D,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,GAAG,EAAE;YAChB,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,GAAG,IAAI,EAAE,OAAO;gBAChB,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,OAAO,CACL,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAC1D,QAAQ,GACY,CACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { PublicFee } from "../components/units/types";
2
+ export declare function useFees(propertyIdOverride?: string): {
3
+ fees: PublicFee[];
4
+ loading: boolean;
5
+ error: string | null;
6
+ refetch: () => Promise<void>;
7
+ };
8
+ //# sourceMappingURL=useFees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFees.d.ts","sourceRoot":"","sources":["../../src/hooks/useFees.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,2BAA2B,CAAC;AAEzE,wBAAgB,OAAO,CAAC,kBAAkB,CAAC,EAAE,MAAM;;;;;EAiClD"}
@@ -0,0 +1,37 @@
1
+ import { useState, useEffect, useCallback } from "react";
2
+ import { useSiteConfig } from "./useSiteConfig";
3
+ import { useAuth } from "./useAuth";
4
+ export function useFees(propertyIdOverride) {
5
+ const config = useSiteConfig();
6
+ const { authenticatedFetch } = useAuth();
7
+ const propertyId = propertyIdOverride ?? config.property?.propertyId;
8
+ const apiBaseUrl = config.property?.apiBaseUrl ?? "";
9
+ const [fees, setFees] = useState([]);
10
+ const [loading, setLoading] = useState(false);
11
+ const [error, setError] = useState(null);
12
+ const fetchFees = useCallback(async () => {
13
+ if (!propertyId)
14
+ return;
15
+ setLoading(true);
16
+ setError(null);
17
+ try {
18
+ const res = await authenticatedFetch(`${apiBaseUrl}/v1/properties/${propertyId}/fees`);
19
+ if (!res.ok)
20
+ throw new Error(`${res.status}`);
21
+ const data = await res.json();
22
+ setFees(data.items);
23
+ }
24
+ catch (e) {
25
+ setError(e instanceof Error ? e.message : "Failed to load fees");
26
+ }
27
+ finally {
28
+ setLoading(false);
29
+ }
30
+ }, [propertyId, apiBaseUrl, authenticatedFetch]);
31
+ useEffect(() => {
32
+ if (propertyId)
33
+ fetchFees();
34
+ }, [propertyId, fetchFees]);
35
+ return { fees, loading, error, refetch: fetchFees };
36
+ }
37
+ //# sourceMappingURL=useFees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFees.js","sourceRoot":"","sources":["../../src/hooks/useFees.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,UAAU,OAAO,CAAC,kBAA2B;IACjD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,kBAAkB,IAAI,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC;IAErD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAc,EAAE,CAAC,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACvC,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAClC,GAAG,UAAU,kBAAkB,UAAU,OAAO,CACjD,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAiB,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;QACnE,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU;YAAE,SAAS,EAAE,CAAC;IAC9B,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAE5B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACtD,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { FloorplansPageResponse } from "../components/units/types";
2
+ interface UseFloorplansOptions {
3
+ includeUnits?: boolean;
4
+ includeMedia?: boolean;
5
+ includeAmenities?: boolean;
6
+ minBedrooms?: number;
7
+ maxBedrooms?: number;
8
+ pageSize?: number;
9
+ }
10
+ export declare function useFloorplans(propertyIdOverride?: string, options?: UseFloorplansOptions): {
11
+ floorplans: import("..").PublicFloorplan[];
12
+ hasMore: boolean;
13
+ loadMore: () => Promise<FloorplansPageResponse[] | undefined>;
14
+ isLoading: boolean;
15
+ isValidating: boolean;
16
+ error: any;
17
+ };
18
+ export {};
19
+ //# sourceMappingURL=useFloorplans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFloorplans.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloorplans.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,UAAU,oBAAoB;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;;;;;;;EAsD5F"}
@@ -0,0 +1,52 @@
1
+ import { useCallback } from "react";
2
+ import useSWRInfinite from "swr/infinite";
3
+ import { useSiteConfig } from "./useSiteConfig";
4
+ import { useAuth } from "./useAuth";
5
+ export function useFloorplans(propertyIdOverride, options = {}) {
6
+ const config = useSiteConfig();
7
+ const { authenticatedFetch } = useAuth();
8
+ const propertyId = propertyIdOverride ?? config.property?.propertyId;
9
+ const apiBaseUrl = config.property?.apiBaseUrl ?? "";
10
+ const pageSize = options.pageSize ?? 20;
11
+ const fetcher = useCallback((url) => authenticatedFetch(url).then(async (res) => {
12
+ if (!res.ok)
13
+ throw new Error(`API error: ${res.status}`);
14
+ return res.json();
15
+ }), [authenticatedFetch]);
16
+ const buildParams = useCallback((cursor) => {
17
+ const params = new URLSearchParams();
18
+ params.set("limit", String(pageSize));
19
+ if (cursor)
20
+ params.set("cursor", cursor);
21
+ if (options.includeUnits)
22
+ params.set("include_units", "true");
23
+ if (options.includeMedia)
24
+ params.set("include_media", "true");
25
+ if (options.includeAmenities)
26
+ params.set("include_amenities", "true");
27
+ if (options.minBedrooms != null)
28
+ params.set("min_bedrooms", String(options.minBedrooms));
29
+ if (options.maxBedrooms != null)
30
+ params.set("max_bedrooms", String(options.maxBedrooms));
31
+ return params.toString();
32
+ }, [pageSize, options.includeUnits, options.includeMedia, options.includeAmenities, options.minBedrooms, options.maxBedrooms]);
33
+ const { data, error, size, setSize, isLoading, isValidating } = useSWRInfinite((pageIndex, prev) => {
34
+ if (!propertyId)
35
+ return null;
36
+ if (pageIndex > 0 && prev && !prev.cursor)
37
+ return null;
38
+ const cursor = prev?.cursor ?? undefined;
39
+ return `${apiBaseUrl}/v1/properties/${propertyId}/floorplans?${buildParams(cursor)}`;
40
+ }, fetcher, { revalidateFirstPage: false });
41
+ const floorplans = data ? data.flatMap((page) => page.items) : [];
42
+ const hasMore = data ? data[data.length - 1]?.cursor != null : false;
43
+ return {
44
+ floorplans,
45
+ hasMore,
46
+ loadMore: () => setSize(size + 1),
47
+ isLoading,
48
+ isValidating,
49
+ error,
50
+ };
51
+ }
52
+ //# sourceMappingURL=useFloorplans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFloorplans.js","sourceRoot":"","sources":["../../src/hooks/useFloorplans.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface ModalContextValue {
2
+ activeModalId: string | null;
3
+ openModal: (id: string) => void;
4
+ closeModal: () => void;
5
+ }
6
+ export declare function ModalProvider({ children }: {
7
+ children: React.ReactNode;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ export declare function useModal(): ModalContextValue;
10
+ export {};
11
+ //# sourceMappingURL=useModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModal.d.ts","sourceRoot":"","sources":["../../src/hooks/useModal.tsx"],"names":[],"mappings":"AAEA,UAAU,iBAAiB;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAID,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CA6BxE;AAED,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useState, useCallback, useEffect } from "react";
3
+ const ModalContext = createContext(null);
4
+ export function ModalProvider({ children }) {
5
+ const [activeModalId, setActiveModalId] = useState(null);
6
+ const openModal = useCallback((id) => setActiveModalId(id), []);
7
+ const closeModal = useCallback(() => setActiveModalId(null), []);
8
+ useEffect(() => {
9
+ if (!activeModalId)
10
+ return;
11
+ const prev = document.body.style.overflow;
12
+ document.body.style.overflow = "hidden";
13
+ return () => {
14
+ document.body.style.overflow = prev;
15
+ };
16
+ }, [activeModalId]);
17
+ useEffect(() => {
18
+ if (!activeModalId)
19
+ return;
20
+ const onKey = (e) => {
21
+ if (e.key === "Escape")
22
+ closeModal();
23
+ };
24
+ window.addEventListener("keydown", onKey);
25
+ return () => window.removeEventListener("keydown", onKey);
26
+ }, [activeModalId, closeModal]);
27
+ return (_jsx(ModalContext.Provider, { value: { activeModalId, openModal, closeModal }, children: children }));
28
+ }
29
+ export function useModal() {
30
+ const ctx = useContext(ModalContext);
31
+ if (!ctx)
32
+ throw new Error("useModal must be used within ModalProvider");
33
+ return ctx;
34
+ }
35
+ //# sourceMappingURL=useModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModal.js","sourceRoot":"","sources":["../../src/hooks/useModal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQpF,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAEnE,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAiC;IACvE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa;YAAE,OAAO;QAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACxC,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa;YAAE,OAAO;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAE,EAAE;YACjC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,UAAU,EAAE,CAAC;QACvC,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAEhC,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,YACnE,QAAQ,GACa,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACxE,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,66 @@
1
+ interface PublicPropertyAttributes {
2
+ description: string | null;
3
+ leasing_office_hours: string | null;
4
+ leasing_phone_number: string | null;
5
+ website_url: string | null;
6
+ application_link: string | null;
7
+ pet_policy: string | null;
8
+ parking_policy: string | null;
9
+ year_built: number | null;
10
+ total_units: number | null;
11
+ geolocation: {
12
+ lat: number;
13
+ lng: number;
14
+ } | null;
15
+ community_highlights: string[] | null;
16
+ available_lease_terms: number[] | null;
17
+ }
18
+ interface PublicProperty {
19
+ id: number;
20
+ name: string | null;
21
+ address: string | null;
22
+ city: string | null;
23
+ state: string | null;
24
+ postal_code: string | null;
25
+ google_maps_url: string | null;
26
+ media: Array<{
27
+ id: string | null;
28
+ url: string;
29
+ name: string | null;
30
+ description: string | null;
31
+ type: string | null;
32
+ rank: number | null;
33
+ }> | null;
34
+ amenities: Array<{
35
+ name: string;
36
+ amenity_level: string;
37
+ description: string | null;
38
+ category: string | null;
39
+ }> | null;
40
+ attributes: PublicPropertyAttributes | null;
41
+ virtual_tour_links: Array<{
42
+ link: string;
43
+ caption: string | null;
44
+ type: string | null;
45
+ }> | null;
46
+ sub_buildings: Array<{
47
+ id: number;
48
+ name: string | null;
49
+ address: string | null;
50
+ }> | null;
51
+ }
52
+ interface UsePropertyOptions {
53
+ includeMedia?: boolean;
54
+ includeAmenities?: boolean;
55
+ includeAttributes?: boolean;
56
+ includeVirtualTourLinks?: boolean;
57
+ includeSubBuildings?: boolean;
58
+ }
59
+ export declare function useProperty(propertyIdOverride?: string, options?: UsePropertyOptions): {
60
+ property: PublicProperty | null;
61
+ loading: boolean;
62
+ error: string | null;
63
+ refetch: () => Promise<void>;
64
+ };
65
+ export {};
66
+ //# sourceMappingURL=useProperty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProperty.d.ts","sourceRoot":"","sources":["../../src/hooks/useProperty.tsx"],"names":[],"mappings":"AAIA,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACjD,oBAAoB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtC,qBAAqB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACxC;AAED,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IACnJ,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IACtH,UAAU,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC5C,kBAAkB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAChG,aAAa,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;CAC1F;AAED,UAAU,kBAAkB;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,WAAW,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB;;;;;EAuCxF"}
@@ -0,0 +1,49 @@
1
+ import { useState, useEffect, useCallback } from "react";
2
+ import { useSiteConfig } from "./useSiteConfig";
3
+ import { useAuth } from "./useAuth";
4
+ export function useProperty(propertyIdOverride, options = {}) {
5
+ const config = useSiteConfig();
6
+ const { authenticatedFetch } = useAuth();
7
+ const propertyId = propertyIdOverride ?? config.property?.propertyId;
8
+ const apiBaseUrl = config.property?.apiBaseUrl ?? "";
9
+ const [property, setProperty] = useState(null);
10
+ const [loading, setLoading] = useState(false);
11
+ const [error, setError] = useState(null);
12
+ const fetchProperty = useCallback(async () => {
13
+ if (!propertyId)
14
+ return;
15
+ setLoading(true);
16
+ setError(null);
17
+ try {
18
+ const params = new URLSearchParams();
19
+ if (options.includeMedia)
20
+ params.set("include_media", "true");
21
+ if (options.includeAmenities)
22
+ params.set("include_amenities", "true");
23
+ if (options.includeAttributes)
24
+ params.set("include_attributes", "true");
25
+ if (options.includeVirtualTourLinks)
26
+ params.set("include_virtual_tour_links", "true");
27
+ if (options.includeSubBuildings)
28
+ params.set("include_sub_buildings", "true");
29
+ const qs = params.toString();
30
+ const url = `${apiBaseUrl}/v1/properties/${propertyId}${qs ? `?${qs}` : ""}`;
31
+ const res = await authenticatedFetch(url);
32
+ if (!res.ok)
33
+ throw new Error(`${res.status}`);
34
+ setProperty(await res.json());
35
+ }
36
+ catch (e) {
37
+ setError(e instanceof Error ? e.message : "Failed to load property");
38
+ }
39
+ finally {
40
+ setLoading(false);
41
+ }
42
+ }, [propertyId, apiBaseUrl, authenticatedFetch, options.includeMedia, options.includeAmenities, options.includeAttributes, options.includeVirtualTourLinks, options.includeSubBuildings]);
43
+ useEffect(() => {
44
+ if (propertyId)
45
+ fetchProperty();
46
+ }, [propertyId, fetchProperty]);
47
+ return { property, loading, error, refetch: fetchProperty };
48
+ }
49
+ //# sourceMappingURL=useProperty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProperty.js","sourceRoot":"","sources":["../../src/hooks/useProperty.tsx"],"names":[],"mappings":"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"}