@next-degree/pickle-shared-js 0.12.7 → 0.13.0

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 (347) hide show
  1. package/dist/{company_service_sanity-2J1ZuUnu.d.cts → company_service_sanity-BzaIPM-N.d.ts} +2297 -2297
  2. package/dist/{company_service_sanity-KaAGfnNV.d.ts → company_service_sanity-Zy8TiORb.d.cts} +2297 -2297
  3. package/dist/components/buttons/BackButton.cjs +5 -8
  4. package/dist/components/buttons/BackButton.cjs.map +1 -1
  5. package/dist/components/buttons/BackButton.d.cts +2 -2
  6. package/dist/components/buttons/BackButton.d.ts +2 -2
  7. package/dist/components/buttons/BackButton.js +5 -8
  8. package/dist/components/buttons/BackButton.js.map +1 -1
  9. package/dist/components/company/CompanyBenefits.cjs +1 -5
  10. package/dist/components/company/CompanyBenefits.cjs.map +1 -1
  11. package/dist/components/company/CompanyBenefits.d.cts +2 -2
  12. package/dist/components/company/CompanyBenefits.d.ts +2 -2
  13. package/dist/components/company/CompanyBenefits.js +1 -5
  14. package/dist/components/company/CompanyBenefits.js.map +1 -1
  15. package/dist/components/company/CompanyInformation.cjs +23 -44
  16. package/dist/components/company/CompanyInformation.cjs.map +1 -1
  17. package/dist/components/company/CompanyInformation.d.cts +2 -2
  18. package/dist/components/company/CompanyInformation.d.ts +2 -2
  19. package/dist/components/company/CompanyInformation.js +23 -44
  20. package/dist/components/company/CompanyInformation.js.map +1 -1
  21. package/dist/components/company/CompanyTake.cjs +12 -26
  22. package/dist/components/company/CompanyTake.cjs.map +1 -1
  23. package/dist/components/company/CompanyTake.d.cts +2 -2
  24. package/dist/components/company/CompanyTake.d.ts +2 -2
  25. package/dist/components/company/CompanyTake.js +12 -26
  26. package/dist/components/company/CompanyTake.js.map +1 -1
  27. package/dist/components/jobCard/JobLocation.cjs +23 -34
  28. package/dist/components/jobCard/JobLocation.cjs.map +1 -1
  29. package/dist/components/jobCard/JobLocation.d.cts +3 -3
  30. package/dist/components/jobCard/JobLocation.d.ts +3 -3
  31. package/dist/components/jobCard/JobLocation.js +23 -34
  32. package/dist/components/jobCard/JobLocation.js.map +1 -1
  33. package/dist/components/jobPost/JobDescription.cjs +164 -30
  34. package/dist/components/jobPost/JobDescription.cjs.map +1 -1
  35. package/dist/components/jobPost/JobDescription.d.cts +2 -2
  36. package/dist/components/jobPost/JobDescription.d.ts +2 -2
  37. package/dist/components/jobPost/JobDescription.js +164 -30
  38. package/dist/components/jobPost/JobDescription.js.map +1 -1
  39. package/dist/components/jobPost/JobHeader.cjs +110 -138
  40. package/dist/components/jobPost/JobHeader.cjs.map +1 -1
  41. package/dist/components/jobPost/JobHeader.d.cts +2 -2
  42. package/dist/components/jobPost/JobHeader.d.ts +2 -2
  43. package/dist/components/jobPost/JobHeader.js +110 -138
  44. package/dist/components/jobPost/JobHeader.js.map +1 -1
  45. package/dist/components/jobPost/JobPost.cjs +382 -318
  46. package/dist/components/jobPost/JobPost.cjs.map +1 -1
  47. package/dist/components/jobPost/JobPost.d.cts +3 -3
  48. package/dist/components/jobPost/JobPost.d.ts +3 -3
  49. package/dist/components/jobPost/JobPost.js +344 -280
  50. package/dist/components/jobPost/JobPost.js.map +1 -1
  51. package/dist/components/primitives/avatar.cjs +3 -4
  52. package/dist/components/primitives/avatar.cjs.map +1 -1
  53. package/dist/components/primitives/avatar.js +3 -4
  54. package/dist/components/primitives/avatar.js.map +1 -1
  55. package/dist/components/primitives/command.cjs +37 -50
  56. package/dist/components/primitives/command.cjs.map +1 -1
  57. package/dist/components/primitives/command.d.cts +5 -6
  58. package/dist/components/primitives/command.d.ts +5 -6
  59. package/dist/components/primitives/command.js +37 -50
  60. package/dist/components/primitives/command.js.map +1 -1
  61. package/dist/components/primitives/dialog.cjs +18 -27
  62. package/dist/components/primitives/dialog.cjs.map +1 -1
  63. package/dist/components/primitives/dialog.d.cts +2 -3
  64. package/dist/components/primitives/dialog.d.ts +2 -3
  65. package/dist/components/primitives/dialog.js +18 -27
  66. package/dist/components/primitives/dialog.js.map +1 -1
  67. package/dist/components/primitives/input-otp.cjs +8 -11
  68. package/dist/components/primitives/input-otp.cjs.map +1 -1
  69. package/dist/components/primitives/input-otp.d.cts +2 -2
  70. package/dist/components/primitives/input-otp.d.ts +2 -2
  71. package/dist/components/primitives/input-otp.js +8 -11
  72. package/dist/components/primitives/input-otp.js.map +1 -1
  73. package/dist/components/primitives/popover.cjs +2 -3
  74. package/dist/components/primitives/popover.cjs.map +1 -1
  75. package/dist/components/primitives/popover.js +2 -3
  76. package/dist/components/primitives/popover.js.map +1 -1
  77. package/dist/components/primitives/radio-group.cjs +12 -16
  78. package/dist/components/primitives/radio-group.cjs.map +1 -1
  79. package/dist/components/primitives/radio-group.js +12 -16
  80. package/dist/components/primitives/radio-group.js.map +1 -1
  81. package/dist/components/primitives/separator.cjs +1 -2
  82. package/dist/components/primitives/separator.cjs.map +1 -1
  83. package/dist/components/primitives/separator.js +1 -2
  84. package/dist/components/primitives/separator.js.map +1 -1
  85. package/dist/components/primitives/tooltip.cjs +1 -2
  86. package/dist/components/primitives/tooltip.cjs.map +1 -1
  87. package/dist/components/primitives/tooltip.js +1 -2
  88. package/dist/components/primitives/tooltip.js.map +1 -1
  89. package/dist/components/ui/Avatar.cjs +6 -11
  90. package/dist/components/ui/Avatar.cjs.map +1 -1
  91. package/dist/components/ui/Avatar.d.cts +3 -3
  92. package/dist/components/ui/Avatar.d.ts +3 -3
  93. package/dist/components/ui/Avatar.js +6 -11
  94. package/dist/components/ui/Avatar.js.map +1 -1
  95. package/dist/components/ui/Badge.cjs +12 -2
  96. package/dist/components/ui/Badge.cjs.map +1 -1
  97. package/dist/components/ui/Badge.d.cts +1 -2
  98. package/dist/components/ui/Badge.d.ts +1 -2
  99. package/dist/components/ui/Badge.js +2 -2
  100. package/dist/components/ui/Badge.js.map +1 -1
  101. package/dist/components/ui/Button.cjs +163 -8
  102. package/dist/components/ui/Button.cjs.map +1 -1
  103. package/dist/components/ui/Button.d.cts +4 -8
  104. package/dist/components/ui/Button.d.ts +4 -8
  105. package/dist/components/ui/Button.js +153 -8
  106. package/dist/components/ui/Button.js.map +1 -1
  107. package/dist/components/ui/Checkbox.cjs +18 -28
  108. package/dist/components/ui/Checkbox.cjs.map +1 -1
  109. package/dist/components/ui/Checkbox.js +18 -28
  110. package/dist/components/ui/Checkbox.js.map +1 -1
  111. package/dist/components/ui/Chip.cjs +12 -2
  112. package/dist/components/ui/Chip.cjs.map +1 -1
  113. package/dist/components/ui/Chip.d.cts +2 -3
  114. package/dist/components/ui/Chip.d.ts +2 -3
  115. package/dist/components/ui/Chip.js +2 -2
  116. package/dist/components/ui/Chip.js.map +1 -1
  117. package/dist/components/ui/Combobox.cjs +171 -233
  118. package/dist/components/ui/Combobox.cjs.map +1 -1
  119. package/dist/components/ui/Combobox.js +171 -233
  120. package/dist/components/ui/Combobox.js.map +1 -1
  121. package/dist/components/ui/Counter.cjs +56 -74
  122. package/dist/components/ui/Counter.cjs.map +1 -1
  123. package/dist/components/ui/Counter.js +56 -74
  124. package/dist/components/ui/Counter.js.map +1 -1
  125. package/dist/components/ui/DatePicker.cjs +44 -68
  126. package/dist/components/ui/DatePicker.cjs.map +1 -1
  127. package/dist/components/ui/DatePicker.js +44 -68
  128. package/dist/components/ui/DatePicker.js.map +1 -1
  129. package/dist/components/ui/DismissibleBanner.cjs +13 -16
  130. package/dist/components/ui/DismissibleBanner.cjs.map +1 -1
  131. package/dist/components/ui/DismissibleBanner.d.cts +2 -2
  132. package/dist/components/ui/DismissibleBanner.d.ts +2 -2
  133. package/dist/components/ui/DismissibleBanner.js +13 -16
  134. package/dist/components/ui/DismissibleBanner.js.map +1 -1
  135. package/dist/components/ui/ErrorMessage.cjs +1 -2
  136. package/dist/components/ui/ErrorMessage.cjs.map +1 -1
  137. package/dist/components/ui/ErrorMessage.d.cts +2 -2
  138. package/dist/components/ui/ErrorMessage.d.ts +2 -2
  139. package/dist/components/ui/ErrorMessage.js +1 -2
  140. package/dist/components/ui/ErrorMessage.js.map +1 -1
  141. package/dist/components/ui/Icon.cjs +1 -2
  142. package/dist/components/ui/Icon.cjs.map +1 -1
  143. package/dist/components/ui/Icon.js +1 -2
  144. package/dist/components/ui/Icon.js.map +1 -1
  145. package/dist/components/ui/Input.cjs +48 -68
  146. package/dist/components/ui/Input.cjs.map +1 -1
  147. package/dist/components/ui/Input.js +48 -68
  148. package/dist/components/ui/Input.js.map +1 -1
  149. package/dist/components/ui/InputOtp.cjs +56 -73
  150. package/dist/components/ui/InputOtp.cjs.map +1 -1
  151. package/dist/components/ui/InputOtp.js +56 -73
  152. package/dist/components/ui/InputOtp.js.map +1 -1
  153. package/dist/components/ui/Label.cjs +14 -24
  154. package/dist/components/ui/Label.cjs.map +1 -1
  155. package/dist/components/ui/Label.d.cts +2 -2
  156. package/dist/components/ui/Label.d.ts +2 -2
  157. package/dist/components/ui/Label.js +14 -24
  158. package/dist/components/ui/Label.js.map +1 -1
  159. package/dist/components/ui/LinkButton.cjs +5 -5
  160. package/dist/components/ui/LinkButton.cjs.map +1 -1
  161. package/dist/components/ui/LinkButton.d.cts +1 -2
  162. package/dist/components/ui/LinkButton.d.ts +1 -2
  163. package/dist/components/ui/LinkButton.js +5 -5
  164. package/dist/components/ui/LinkButton.js.map +1 -1
  165. package/dist/components/ui/ListItem.cjs +32 -48
  166. package/dist/components/ui/ListItem.cjs.map +1 -1
  167. package/dist/components/ui/ListItem.d.cts +2 -2
  168. package/dist/components/ui/ListItem.d.ts +2 -2
  169. package/dist/components/ui/ListItem.js +32 -48
  170. package/dist/components/ui/ListItem.js.map +1 -1
  171. package/dist/components/ui/Map/ClusterMarker.cjs +80 -0
  172. package/dist/components/ui/Map/ClusterMarker.cjs.map +1 -0
  173. package/dist/components/ui/Map/ClusterMarker.d.cts +6 -0
  174. package/dist/components/ui/Map/ClusterMarker.d.ts +6 -0
  175. package/dist/components/ui/Map/ClusterMarker.js +56 -0
  176. package/dist/components/ui/Map/ClusterMarker.js.map +1 -0
  177. package/dist/components/ui/Map/FocusCircle.cjs +86 -0
  178. package/dist/components/ui/Map/FocusCircle.cjs.map +1 -0
  179. package/dist/components/ui/Map/FocusCircle.d.cts +5 -0
  180. package/dist/components/ui/Map/FocusCircle.d.ts +5 -0
  181. package/dist/components/ui/Map/FocusCircle.js +62 -0
  182. package/dist/components/ui/Map/FocusCircle.js.map +1 -0
  183. package/dist/components/ui/Map/IndividualMarker.cjs +60 -0
  184. package/dist/components/ui/Map/IndividualMarker.cjs.map +1 -0
  185. package/dist/components/ui/Map/IndividualMarker.d.cts +6 -0
  186. package/dist/components/ui/Map/IndividualMarker.d.ts +6 -0
  187. package/dist/components/ui/Map/IndividualMarker.js +36 -0
  188. package/dist/components/ui/Map/IndividualMarker.js.map +1 -0
  189. package/dist/components/ui/Map/MapComponent.cjs +401 -0
  190. package/dist/components/ui/Map/MapComponent.cjs.map +1 -0
  191. package/dist/components/ui/Map/MapComponent.d.cts +6 -0
  192. package/dist/components/ui/Map/MapComponent.d.ts +6 -0
  193. package/dist/components/ui/Map/MapComponent.js +367 -0
  194. package/dist/components/ui/Map/MapComponent.js.map +1 -0
  195. package/dist/components/ui/Map/MapContent.cjs +279 -0
  196. package/dist/components/ui/Map/MapContent.cjs.map +1 -0
  197. package/dist/components/ui/Map/MapContent.d.cts +6 -0
  198. package/dist/components/ui/Map/MapContent.d.ts +6 -0
  199. package/dist/components/ui/Map/MapContent.js +255 -0
  200. package/dist/components/ui/Map/MapContent.js.map +1 -0
  201. package/dist/components/ui/Map/clustering.cjs +105 -0
  202. package/dist/components/ui/Map/clustering.cjs.map +1 -0
  203. package/dist/components/ui/Map/clustering.d.cts +17 -0
  204. package/dist/components/ui/Map/clustering.d.ts +17 -0
  205. package/dist/components/ui/Map/clustering.js +77 -0
  206. package/dist/components/ui/Map/clustering.js.map +1 -0
  207. package/dist/components/ui/Map/constants.cjs +65 -0
  208. package/dist/components/ui/Map/constants.cjs.map +1 -0
  209. package/dist/components/ui/Map/constants.d.cts +28 -0
  210. package/dist/components/ui/Map/constants.d.ts +28 -0
  211. package/dist/components/ui/Map/constants.js +34 -0
  212. package/dist/components/ui/Map/constants.js.map +1 -0
  213. package/dist/components/ui/Map/hooks.cjs +96 -0
  214. package/dist/components/ui/Map/hooks.cjs.map +1 -0
  215. package/dist/components/ui/Map/hooks.d.cts +17 -0
  216. package/dist/components/ui/Map/hooks.d.ts +17 -0
  217. package/dist/components/ui/Map/hooks.js +59 -0
  218. package/dist/components/ui/Map/hooks.js.map +1 -0
  219. package/dist/components/ui/Map/index.cjs +402 -0
  220. package/dist/components/ui/Map/index.cjs.map +1 -0
  221. package/dist/components/ui/Map/index.d.cts +3 -0
  222. package/dist/components/ui/Map/index.d.ts +3 -0
  223. package/dist/components/ui/Map/index.js +365 -0
  224. package/dist/components/ui/Map/index.js.map +1 -0
  225. package/dist/components/ui/Map/types.cjs +19 -0
  226. package/dist/components/ui/Map/types.cjs.map +1 -0
  227. package/dist/components/ui/Map/types.d.cts +82 -0
  228. package/dist/components/ui/Map/types.d.ts +82 -0
  229. package/dist/components/ui/Map/types.js +1 -0
  230. package/dist/components/ui/Map/types.js.map +1 -0
  231. package/dist/components/ui/Map/utils.cjs +80 -0
  232. package/dist/components/ui/Map/utils.cjs.map +1 -0
  233. package/dist/components/ui/Map/utils.d.cts +9 -0
  234. package/dist/components/ui/Map/utils.d.ts +9 -0
  235. package/dist/components/ui/Map/utils.js +49 -0
  236. package/dist/components/ui/Map/utils.js.map +1 -0
  237. package/dist/components/ui/PlacesQueryInput.cjs +71 -94
  238. package/dist/components/ui/PlacesQueryInput.cjs.map +1 -1
  239. package/dist/components/ui/PlacesQueryInput.d.cts +2 -2
  240. package/dist/components/ui/PlacesQueryInput.d.ts +2 -2
  241. package/dist/components/ui/PlacesQueryInput.js +71 -94
  242. package/dist/components/ui/PlacesQueryInput.js.map +1 -1
  243. package/dist/components/ui/Radio.cjs +49 -69
  244. package/dist/components/ui/Radio.cjs.map +1 -1
  245. package/dist/components/ui/Radio.js +49 -69
  246. package/dist/components/ui/Radio.js.map +1 -1
  247. package/dist/components/ui/ReadMore.cjs +163 -25
  248. package/dist/components/ui/ReadMore.cjs.map +1 -1
  249. package/dist/components/ui/ReadMore.d.cts +2 -2
  250. package/dist/components/ui/ReadMore.d.ts +2 -2
  251. package/dist/components/ui/ReadMore.js +163 -25
  252. package/dist/components/ui/ReadMore.js.map +1 -1
  253. package/dist/components/ui/Select.cjs +138 -172
  254. package/dist/components/ui/Select.cjs.map +1 -1
  255. package/dist/components/ui/Select.js +132 -166
  256. package/dist/components/ui/Select.js.map +1 -1
  257. package/dist/components/ui/StepTabs.cjs +24 -27
  258. package/dist/components/ui/StepTabs.cjs.map +1 -1
  259. package/dist/components/ui/StepTabs.d.cts +3 -3
  260. package/dist/components/ui/StepTabs.d.ts +3 -3
  261. package/dist/components/ui/StepTabs.js +24 -27
  262. package/dist/components/ui/StepTabs.js.map +1 -1
  263. package/dist/components/ui/Switch.cjs +13 -21
  264. package/dist/components/ui/Switch.cjs.map +1 -1
  265. package/dist/components/ui/Switch.js +13 -21
  266. package/dist/components/ui/Switch.js.map +1 -1
  267. package/dist/components/ui/buttonShadcn.cjs +1 -2
  268. package/dist/components/ui/buttonShadcn.cjs.map +1 -1
  269. package/dist/components/ui/buttonShadcn.js +1 -2
  270. package/dist/components/ui/buttonShadcn.js.map +1 -1
  271. package/dist/components/ui/calendar.cjs +5 -6
  272. package/dist/components/ui/calendar.cjs.map +1 -1
  273. package/dist/components/ui/calendar.d.cts +1 -2
  274. package/dist/components/ui/calendar.d.ts +1 -2
  275. package/dist/components/ui/calendar.js +5 -6
  276. package/dist/components/ui/calendar.js.map +1 -1
  277. package/dist/contexts/WindowHistoryProvider.cjs +1 -2
  278. package/dist/contexts/WindowHistoryProvider.cjs.map +1 -1
  279. package/dist/contexts/WindowHistoryProvider.d.cts +1 -2
  280. package/dist/contexts/WindowHistoryProvider.d.ts +1 -2
  281. package/dist/contexts/WindowHistoryProvider.js +1 -2
  282. package/dist/contexts/WindowHistoryProvider.js.map +1 -1
  283. package/dist/{displayText-DahwdHdi.d.ts → displayText-DIxMXVLl.d.ts} +2 -2
  284. package/dist/{displayText-DW0qiJqh.d.cts → displayText-DRyxjHTZ.d.cts} +2 -2
  285. package/dist/hooks/useDisplayText.d.cts +3 -3
  286. package/dist/hooks/useDisplayText.d.ts +3 -3
  287. package/dist/hooks/useWindowHistory.cjs +0 -1
  288. package/dist/hooks/useWindowHistory.cjs.map +1 -1
  289. package/dist/hooks/useWindowHistory.d.cts +0 -1
  290. package/dist/hooks/useWindowHistory.d.ts +0 -1
  291. package/dist/hooks/useWindowHistory.js +0 -1
  292. package/dist/hooks/useWindowHistory.js.map +1 -1
  293. package/dist/index.cjs +1343 -1111
  294. package/dist/index.cjs.map +1 -1
  295. package/dist/index.d.cts +8 -8
  296. package/dist/index.d.ts +8 -8
  297. package/dist/index.js +1293 -1061
  298. package/dist/index.js.map +1 -1
  299. package/dist/{job_posting_service_latest-C_TEBzCf.d.cts → job_posting_service_latest-7q4A7RpW.d.cts} +1171 -1171
  300. package/dist/{job_posting_service_latest-C_TEBzCf.d.ts → job_posting_service_latest-7q4A7RpW.d.ts} +1171 -1171
  301. package/dist/{job_posting_service_latest-DdgK8Nnz.d.cts → job_posting_service_latest-BrZndMS6.d.cts} +1171 -1171
  302. package/dist/{job_posting_service_latest-DdgK8Nnz.d.ts → job_posting_service_latest-BrZndMS6.d.ts} +1171 -1171
  303. package/dist/{job_posting_service_sanity-BNq-Am9N.d.cts → job_posting_service_sanity-B5NZ-7tI.d.cts} +2126 -2126
  304. package/dist/{job_posting_service_sanity-BKo9TBDT.d.ts → job_posting_service_sanity-LlRkfIpt.d.ts} +2126 -2126
  305. package/dist/lib/locations.d.cts +3 -3
  306. package/dist/lib/locations.d.ts +3 -3
  307. package/dist/lib/mappings.d.cts +3 -3
  308. package/dist/lib/mappings.d.ts +3 -3
  309. package/dist/lib/salaryRange.d.cts +1 -1
  310. package/dist/lib/salaryRange.d.ts +1 -1
  311. package/dist/services/displayText.d.cts +3 -3
  312. package/dist/services/displayText.d.ts +3 -3
  313. package/dist/styles/globals.css +149 -6
  314. package/dist/styles/globals.css.map +1 -1
  315. package/dist/types/data/company_service_latest.d.cts +1 -1
  316. package/dist/types/data/company_service_latest.d.ts +1 -1
  317. package/dist/types/data/job_posting_service_latest.d.cts +1 -1
  318. package/dist/types/data/job_posting_service_latest.d.ts +1 -1
  319. package/dist/types/data/shared_pickle_output_latest.d.cts +1 -1
  320. package/dist/types/data/shared_pickle_output_latest.d.ts +1 -1
  321. package/dist/types/index.d.cts +6 -6
  322. package/dist/types/index.d.ts +6 -6
  323. package/dist/types/latest/company_service_latest.d.cts +1 -1
  324. package/dist/types/latest/company_service_latest.d.ts +1 -1
  325. package/dist/types/latest/custom/company_service_sanity.d.cts +3 -3
  326. package/dist/types/latest/custom/company_service_sanity.d.ts +3 -3
  327. package/dist/types/latest/custom/job_posting_service_sanity.d.cts +3 -3
  328. package/dist/types/latest/custom/job_posting_service_sanity.d.ts +3 -3
  329. package/dist/types/latest/job_posting_service_latest.d.cts +1 -1
  330. package/dist/types/latest/job_posting_service_latest.d.ts +1 -1
  331. package/dist/types/latest/shared_pickle_output_latest.d.cts +1 -1
  332. package/dist/types/latest/shared_pickle_output_latest.d.ts +1 -1
  333. package/package.json +4 -3
  334. package/dist/components/ui/MapComponent.cjs +0 -61
  335. package/dist/components/ui/MapComponent.cjs.map +0 -1
  336. package/dist/components/ui/MapComponent.d.cts +0 -15
  337. package/dist/components/ui/MapComponent.d.ts +0 -15
  338. package/dist/components/ui/MapComponent.js +0 -41
  339. package/dist/components/ui/MapComponent.js.map +0 -1
  340. package/dist/{company_service_latest-CITz7F53.d.cts → company_service_latest-BwbaqchJ.d.cts} +1220 -1220
  341. package/dist/{company_service_latest-CITz7F53.d.ts → company_service_latest-BwbaqchJ.d.ts} +1220 -1220
  342. package/dist/{company_service_latest-C7Moeufo.d.cts → company_service_latest-FHqG4LjA.d.cts} +1220 -1220
  343. package/dist/{company_service_latest-C7Moeufo.d.ts → company_service_latest-FHqG4LjA.d.ts} +1220 -1220
  344. package/dist/{shared_pickle_output_latest-CXBCG04N.d.cts → shared_pickle_output_latest-CKHNY1lx.d.cts} +42 -42
  345. package/dist/{shared_pickle_output_latest-CXBCG04N.d.ts → shared_pickle_output_latest-CKHNY1lx.d.ts} +42 -42
  346. package/dist/{shared_pickle_output_latest-CtvHTPeX.d.cts → shared_pickle_output_latest-DIPgxUul.d.cts} +42 -42
  347. package/dist/{shared_pickle_output_latest-CtvHTPeX.d.ts → shared_pickle_output_latest-DIPgxUul.d.ts} +42 -42
@@ -0,0 +1,367 @@
1
+ "use client";
2
+
3
+ // src/components/ui/Map/MapComponent.tsx
4
+ import { APIProvider } from "@vis.gl/react-google-maps";
5
+
6
+ // src/components/ui/Map/constants.ts
7
+ var DEFAULT_POSITION = { lat: 40.715021, lng: -74.00459 };
8
+ var DEFAULT_ZOOM = 10;
9
+ var CLUSTER_DISTANCE_THRESHOLD = 1e-3;
10
+ var PIN_COLORS = {
11
+ background: "#0B5441",
12
+ borderColor: "#EBFDF1",
13
+ glyphColor: "#D4F500"
14
+ };
15
+ var FOCUS_CIRCLE_STYLES = {
16
+ strokeColor: "#0B5441",
17
+ strokeOpacity: 0.8,
18
+ strokeWeight: 2,
19
+ fillColor: "#0B5441",
20
+ fillOpacity: 0.1,
21
+ clickable: false,
22
+ zIndex: 1
23
+ };
24
+ var CLUSTERING_CONFIG = {
25
+ radius: 60,
26
+ maxZoom: 16,
27
+ minPoints: 2
28
+ };
29
+
30
+ // src/components/ui/Map/hooks.ts
31
+ import { useMemo, useState } from "react";
32
+ import useSupercluster from "use-supercluster";
33
+
34
+ // src/components/ui/Map/utils.ts
35
+ function getCenterForCoordinates(coords) {
36
+ if (coords.length === 0) return DEFAULT_POSITION;
37
+ const avgLat = coords.reduce((sum, coord) => sum + coord.lat, 0) / coords.length;
38
+ const avgLng = coords.reduce((sum, coord) => sum + coord.lng, 0) / coords.length;
39
+ return { lat: avgLat, lng: avgLng };
40
+ }
41
+ function getZoomForCoordinates(coords, defaultZoom) {
42
+ if (coords.length <= 1) return defaultZoom;
43
+ const lats = coords.map((coord) => coord.lat);
44
+ const lngs = coords.map((coord) => coord.lng);
45
+ const latDiff = Math.max(...lats) - Math.min(...lats);
46
+ const lngDiff = Math.max(...lngs) - Math.min(...lngs);
47
+ const maxDiff = Math.max(latDiff, lngDiff);
48
+ if (maxDiff > 0.1) return 8;
49
+ if (maxDiff > 0.05) return 10;
50
+ if (maxDiff > 0.01) return 12;
51
+ return 14;
52
+ }
53
+ function filterClusterCoordinates(coordinates, clusterLat, clusterLng) {
54
+ return coordinates.filter((coord) => {
55
+ const latDiff = Math.abs(coord.lat - clusterLat);
56
+ const lngDiff = Math.abs(coord.lng - clusterLng);
57
+ const distance = Math.sqrt(latDiff * latDiff + lngDiff * lngDiff);
58
+ return distance < CLUSTER_DISTANCE_THRESHOLD;
59
+ });
60
+ }
61
+
62
+ // src/components/ui/Map/clustering.ts
63
+ function convertCoordinatesToGeoJSON(coordinates) {
64
+ return coordinates.map((coord, index) => ({
65
+ type: "Feature",
66
+ properties: {
67
+ cluster: false,
68
+ pointId: index,
69
+ data: coord.data
70
+ },
71
+ geometry: {
72
+ type: "Point",
73
+ coordinates: [coord.lng, coord.lat]
74
+ }
75
+ }));
76
+ }
77
+
78
+ // src/components/ui/Map/hooks.ts
79
+ function useMapBounds(_coordinates) {
80
+ const [bounds, setBounds] = useState([
81
+ [-180, -85],
82
+ [180, 85]
83
+ ]);
84
+ return { bounds, setBounds };
85
+ }
86
+ function useZoomLevel(initialZoom) {
87
+ const [zoomLevel, setZoomLevel] = useState(initialZoom);
88
+ return { zoomLevel, setZoomLevel };
89
+ }
90
+ function useClusters(coordinates, bounds, zoomLevel) {
91
+ const points = useMemo(() => {
92
+ if (!coordinates) return [];
93
+ return convertCoordinatesToGeoJSON(coordinates);
94
+ }, [coordinates]);
95
+ const { clusters, supercluster } = useSupercluster({
96
+ points,
97
+ bounds: [-180, -85, 180, 85],
98
+ // Use global bounds for consistency
99
+ zoom: zoomLevel || 10,
100
+ options: CLUSTERING_CONFIG
101
+ });
102
+ return { clusters, supercluster };
103
+ }
104
+
105
+ // src/components/ui/Map/MapContent.tsx
106
+ import { AdvancedMarker as AdvancedMarker3, Map, Pin as Pin2, useMap, useMapsLibrary } from "@vis.gl/react-google-maps";
107
+ import { useCallback } from "react";
108
+
109
+ // src/components/ui/Map/ClusterMarker.tsx
110
+ import { AdvancedMarker } from "@vis.gl/react-google-maps";
111
+ function ClusterMarker({
112
+ cluster,
113
+ coordinates,
114
+ onPinClick,
115
+ onPinHover,
116
+ zoomToLevel,
117
+ supercluster
118
+ }) {
119
+ const [lng, lat] = cluster.geometry.coordinates;
120
+ const { point_count: pointCount } = cluster.properties;
121
+ const handleClick = () => {
122
+ const clusterCoordinates = filterClusterCoordinates(coordinates, lat, lng);
123
+ onPinClick?.(clusterCoordinates);
124
+ const expansionZoom = supercluster.getClusterExpansionZoom(cluster.id);
125
+ zoomToLevel(expansionZoom);
126
+ };
127
+ const handleMouseEnter = () => {
128
+ const clusterCoordinates = filterClusterCoordinates(coordinates, lat, lng);
129
+ onPinHover?.(clusterCoordinates);
130
+ };
131
+ const handleMouseLeave = () => onPinHover?.(null);
132
+ return /* @__PURE__ */ React.createElement(
133
+ AdvancedMarker,
134
+ {
135
+ key: `cluster-${cluster.id}`,
136
+ position: { lat, lng },
137
+ onClick: handleClick,
138
+ onMouseEnter: handleMouseEnter,
139
+ onMouseLeave: handleMouseLeave
140
+ },
141
+ /* @__PURE__ */ React.createElement("div", { className: "relative flex items-center justify-center", id: "CLUSTER_MARKER" }, /* @__PURE__ */ React.createElement("div", { className: "flex h-8 w-8 items-center justify-center rounded-full border-2 border-white bg-red-500 text-sm font-bold text-white shadow-lg" }, pointCount || "?"))
142
+ );
143
+ }
144
+
145
+ // src/components/ui/Map/FocusCircle.tsx
146
+ import { useEffect, useMemo as useMemo2, useRef } from "react";
147
+ function FocusCircle({
148
+ focusPoint,
149
+ radiusMiles,
150
+ map,
151
+ mapsLibrary
152
+ }) {
153
+ const circleRef = useRef(null);
154
+ const circleProps = useMemo2(() => {
155
+ if (!focusPoint || !radiusMiles) return null;
156
+ return {
157
+ center: focusPoint,
158
+ radius: radiusMiles * 1609.34
159
+ };
160
+ }, [focusPoint, radiusMiles]);
161
+ useEffect(() => {
162
+ if (!map || !mapsLibrary || !circleProps) {
163
+ return;
164
+ }
165
+ if (!circleRef.current) {
166
+ const circle = new google.maps.Circle({
167
+ center: circleProps.center,
168
+ radius: circleProps.radius,
169
+ ...FOCUS_CIRCLE_STYLES,
170
+ map
171
+ });
172
+ circleRef.current = circle;
173
+ } else {
174
+ circleRef.current.setCenter(circleProps.center);
175
+ circleRef.current.setRadius(circleProps.radius);
176
+ }
177
+ }, [map, mapsLibrary, circleProps]);
178
+ useEffect(() => {
179
+ return () => {
180
+ if (circleRef.current) {
181
+ circleRef.current.setMap(null);
182
+ circleRef.current = null;
183
+ }
184
+ };
185
+ }, []);
186
+ return null;
187
+ }
188
+
189
+ // src/components/ui/Map/IndividualMarker.tsx
190
+ import { AdvancedMarker as AdvancedMarker2, Pin } from "@vis.gl/react-google-maps";
191
+ function IndividualMarker({
192
+ coordinate,
193
+ onPinClick,
194
+ onPinHover
195
+ }) {
196
+ const handleMouseEnter = () => onPinHover?.(coordinate);
197
+ const handleMouseLeave = () => onPinHover?.(null);
198
+ const handleClick = () => onPinClick?.(coordinate);
199
+ return /* @__PURE__ */ React.createElement(
200
+ AdvancedMarker2,
201
+ {
202
+ position: { lat: coordinate.lat, lng: coordinate.lng },
203
+ onMouseEnter: handleMouseEnter,
204
+ onMouseLeave: handleMouseLeave,
205
+ onClick: handleClick
206
+ },
207
+ /* @__PURE__ */ React.createElement(Pin, { ...PIN_COLORS })
208
+ );
209
+ }
210
+
211
+ // src/lib/utils.ts
212
+ import { clsx } from "clsx";
213
+ import { twMerge } from "tailwind-merge";
214
+ function cn(...inputs) {
215
+ return twMerge(clsx(inputs));
216
+ }
217
+
218
+ // src/components/ui/Map/MapContent.tsx
219
+ function MapContent({
220
+ mapId,
221
+ mapCenter,
222
+ mapZoom,
223
+ position,
224
+ coordinates,
225
+ clusters,
226
+ supercluster,
227
+ onPinHover,
228
+ onPinClick,
229
+ focusPoint,
230
+ radiusMiles,
231
+ className,
232
+ setBounds,
233
+ setZoomLevel
234
+ }) {
235
+ const map = useMap();
236
+ const mapsLibrary = useMapsLibrary("maps");
237
+ const zoomToLevel = useCallback(
238
+ (newZoom) => {
239
+ if (map) {
240
+ map.setZoom(newZoom);
241
+ }
242
+ },
243
+ [map]
244
+ );
245
+ const handleBoundsChanged = (e) => {
246
+ if (e.detail.bounds) {
247
+ const bounds = e.detail.bounds;
248
+ setBounds([
249
+ [bounds.south, bounds.west],
250
+ [bounds.north, bounds.east]
251
+ ]);
252
+ }
253
+ };
254
+ const handleZoomChanged = (e) => {
255
+ if (e.detail.zoom) {
256
+ setZoomLevel(e.detail.zoom);
257
+ }
258
+ };
259
+ const handleCameraChanged = (e) => {
260
+ if (e.detail.zoom) {
261
+ setZoomLevel(e.detail.zoom);
262
+ }
263
+ };
264
+ return /* @__PURE__ */ React.createElement("div", { className: cn("relative h-screen max-w-full", className) }, /* @__PURE__ */ React.createElement(
265
+ Map,
266
+ {
267
+ defaultZoom: mapZoom,
268
+ defaultCenter: mapCenter,
269
+ mapId,
270
+ keyboardShortcuts: true,
271
+ disableDefaultUI: true,
272
+ zoomControl: true,
273
+ onBoundsChanged: handleBoundsChanged,
274
+ onZoomChanged: handleZoomChanged,
275
+ onCameraChanged: handleCameraChanged
276
+ },
277
+ position && !coordinates && /* @__PURE__ */ React.createElement(AdvancedMarker3, { position }, /* @__PURE__ */ React.createElement(Pin2, { ...PIN_COLORS })),
278
+ coordinates && clusters.map((cluster) => {
279
+ const { cluster: isCluster } = cluster.properties;
280
+ if (isCluster) {
281
+ return /* @__PURE__ */ React.createElement(
282
+ ClusterMarker,
283
+ {
284
+ key: `cluster-${cluster.id}`,
285
+ cluster,
286
+ coordinates,
287
+ onPinClick,
288
+ onPinHover,
289
+ zoomToLevel,
290
+ supercluster
291
+ }
292
+ );
293
+ }
294
+ const originalPoint = coordinates[cluster.properties.pointId];
295
+ return /* @__PURE__ */ React.createElement(
296
+ IndividualMarker,
297
+ {
298
+ key: `marker-${cluster.properties.pointId}`,
299
+ coordinate: originalPoint,
300
+ onPinClick,
301
+ onPinHover
302
+ }
303
+ );
304
+ }),
305
+ coordinates && clusters.length === 0 && coordinates.map((coord, index) => /* @__PURE__ */ React.createElement(
306
+ IndividualMarker,
307
+ {
308
+ key: `fallback-${index}`,
309
+ coordinate: coord,
310
+ onPinClick,
311
+ onPinHover
312
+ }
313
+ )),
314
+ focusPoint && radiusMiles && /* @__PURE__ */ React.createElement(
315
+ FocusCircle,
316
+ {
317
+ focusPoint,
318
+ radiusMiles,
319
+ map,
320
+ mapsLibrary
321
+ }
322
+ )
323
+ ));
324
+ }
325
+
326
+ // src/components/ui/Map/MapComponent.tsx
327
+ function MapComponent({
328
+ apiKey,
329
+ mapId,
330
+ position,
331
+ coordinates,
332
+ onPinHover,
333
+ onPinClick,
334
+ focusPoint,
335
+ radiusMiles,
336
+ className,
337
+ zoom = 10
338
+ }) {
339
+ const { bounds, setBounds } = useMapBounds(coordinates);
340
+ const { zoomLevel, setZoomLevel } = useZoomLevel(zoom || DEFAULT_ZOOM);
341
+ const { clusters, supercluster } = useClusters(coordinates, bounds, zoomLevel);
342
+ const mapCenter = coordinates && coordinates.length > 0 ? getCenterForCoordinates(coordinates) : position || DEFAULT_POSITION;
343
+ const mapZoom = coordinates && coordinates.length > 1 ? getZoomForCoordinates(coordinates, zoom) : position ? zoom : DEFAULT_ZOOM;
344
+ return /* @__PURE__ */ React.createElement(APIProvider, { apiKey }, /* @__PURE__ */ React.createElement(
345
+ MapContent,
346
+ {
347
+ mapId,
348
+ mapCenter,
349
+ mapZoom,
350
+ position,
351
+ coordinates,
352
+ clusters,
353
+ supercluster,
354
+ onPinHover,
355
+ onPinClick,
356
+ focusPoint,
357
+ radiusMiles,
358
+ className,
359
+ setBounds,
360
+ setZoomLevel
361
+ }
362
+ ));
363
+ }
364
+ export {
365
+ MapComponent
366
+ };
367
+ //# sourceMappingURL=MapComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/ui/Map/MapComponent.tsx","../../../../src/components/ui/Map/constants.ts","../../../../src/components/ui/Map/hooks.ts","../../../../src/components/ui/Map/utils.ts","../../../../src/components/ui/Map/clustering.ts","../../../../src/components/ui/Map/MapContent.tsx","../../../../src/components/ui/Map/ClusterMarker.tsx","../../../../src/components/ui/Map/FocusCircle.tsx","../../../../src/components/ui/Map/IndividualMarker.tsx","../../../../src/lib/utils.ts"],"sourcesContent":["'use client'\n\nimport { APIProvider } from '@vis.gl/react-google-maps'\n\nimport { DEFAULT_POSITION, DEFAULT_ZOOM } from '@/components/ui/Map/constants'\nimport { useClusters, useMapBounds, useZoomLevel } from '@/components/ui/Map/hooks'\nimport { MapContent } from '@/components/ui/Map/MapContent'\nimport type { MapComponentProps, PinData } from '@/components/ui/Map/types'\nimport { getCenterForCoordinates, getZoomForCoordinates } from '@/components/ui/Map/utils'\n\nexport function MapComponent<T = PinData>({\n apiKey,\n mapId,\n position,\n coordinates,\n onPinHover,\n onPinClick,\n focusPoint,\n radiusMiles,\n className,\n zoom = 10,\n}: Readonly<MapComponentProps<T>>) {\n const { bounds, setBounds } = useMapBounds(coordinates)\n const { zoomLevel, setZoomLevel } = useZoomLevel(zoom || DEFAULT_ZOOM)\n const { clusters, supercluster } = useClusters(coordinates, bounds, zoomLevel)\n\n const mapCenter =\n coordinates && coordinates.length > 0\n ? getCenterForCoordinates(coordinates)\n : position || DEFAULT_POSITION\n\n const mapZoom =\n coordinates && coordinates.length > 1\n ? getZoomForCoordinates(coordinates, zoom)\n : position\n ? zoom\n : DEFAULT_ZOOM\n\n return (\n <APIProvider apiKey={apiKey}>\n <MapContent\n mapId={mapId}\n mapCenter={mapCenter}\n mapZoom={mapZoom}\n position={position}\n coordinates={coordinates}\n clusters={clusters}\n supercluster={supercluster}\n onPinHover={onPinHover}\n onPinClick={onPinClick}\n focusPoint={focusPoint}\n radiusMiles={radiusMiles}\n className={className}\n setBounds={setBounds}\n setZoomLevel={setZoomLevel}\n />\n </APIProvider>\n )\n}\n","export const DEFAULT_POSITION = { lat: 40.715021, lng: -74.00459 }\nexport const DEFAULT_ZOOM = 10\nexport const CLUSTER_PIN_SCALE = 1.5\nexport const CLUSTER_DISTANCE_THRESHOLD = 0.001\n\nexport const PIN_COLORS = {\n background: '#0B5441',\n borderColor: '#EBFDF1',\n glyphColor: '#D4F500',\n} as const\n\nexport const FOCUS_CIRCLE_STYLES = {\n strokeColor: '#0B5441',\n strokeOpacity: 0.8,\n strokeWeight: 2,\n fillColor: '#0B5441',\n fillOpacity: 0.1,\n clickable: false,\n zIndex: 1,\n} as const\n\nexport const CLUSTERING_CONFIG = {\n radius: 60,\n maxZoom: 16,\n minPoints: 2,\n} as const\n","import { useMemo, useState } from 'react'\nimport useSupercluster from 'use-supercluster'\n\nimport { convertCoordinatesToGeoJSON } from '@/components/ui/Map/clustering'\nimport { CLUSTERING_CONFIG } from '@/components/ui/Map/constants'\nimport type { Coordinate, PinData } from '@/components/ui/Map/types'\n\nexport function useMapBounds<T = PinData>(_coordinates?: Coordinate<T>[]) {\n const [bounds, setBounds] = useState<[[number, number], [number, number]]>([\n [-180, -85],\n [180, 85],\n ])\n\n // Use global bounds for stability - let the map handle the actual bounds\n // This prevents constant recalculation that causes clustering instability\n return { bounds, setBounds }\n}\n\nexport function useZoomLevel(initialZoom: number) {\n const [zoomLevel, setZoomLevel] = useState(initialZoom)\n return { zoomLevel, setZoomLevel }\n}\n\nexport function useClusters<T = PinData>(\n coordinates?: Coordinate<T>[],\n bounds?: [[number, number], [number, number]],\n zoomLevel?: number\n) {\n const points = useMemo(() => {\n if (!coordinates) return []\n return convertCoordinatesToGeoJSON<T>(coordinates)\n }, [coordinates])\n\n const { clusters, supercluster } = useSupercluster({\n points,\n bounds: [-180, -85, 180, 85], // Use global bounds for consistency\n zoom: zoomLevel || 10,\n options: CLUSTERING_CONFIG,\n })\n\n return { clusters, supercluster }\n}\n","import { CLUSTER_DISTANCE_THRESHOLD, DEFAULT_POSITION } from '@/components/ui/Map/constants'\nimport type { Coordinate, PinData } from '@/components/ui/Map/types'\n\nexport function getCenterForCoordinates<T = PinData>(coords: Coordinate<T>[]): Coordinate<T> {\n if (coords.length === 0) return DEFAULT_POSITION as Coordinate<T>\n\n const avgLat = coords.reduce((sum, coord) => sum + coord.lat, 0) / coords.length\n const avgLng = coords.reduce((sum, coord) => sum + coord.lng, 0) / coords.length\n\n return { lat: avgLat, lng: avgLng }\n}\n\nexport function getZoomForCoordinates<T = PinData>(\n coords: Coordinate<T>[],\n defaultZoom: number\n): number {\n if (coords.length <= 1) return defaultZoom\n\n const lats = coords.map((coord) => coord.lat)\n const lngs = coords.map((coord) => coord.lng)\n\n const latDiff = Math.max(...lats) - Math.min(...lats)\n const lngDiff = Math.max(...lngs) - Math.min(...lngs)\n const maxDiff = Math.max(latDiff, lngDiff)\n\n if (maxDiff > 0.1) return 8\n if (maxDiff > 0.05) return 10\n if (maxDiff > 0.01) return 12\n return 14\n}\n\nexport function getClusteringRadius(zoom: number): number {\n if (zoom <= 8) return 200\n if (zoom <= 12) return 150\n return 100\n}\n\nexport function filterClusterCoordinates<T = PinData>(\n coordinates: Coordinate<T>[],\n clusterLat: number,\n clusterLng: number\n): Coordinate<T>[] {\n return coordinates.filter((coord) => {\n const latDiff = Math.abs(coord.lat - clusterLat)\n const lngDiff = Math.abs(coord.lng - clusterLng)\n const distance = Math.sqrt(latDiff * latDiff + lngDiff * lngDiff)\n return distance < CLUSTER_DISTANCE_THRESHOLD\n })\n}\n\nexport function calculateDistance<T = PinData>(\n coord1: Coordinate<T>,\n coord2: Coordinate<T>\n): number {\n const latDiff = Math.abs(coord1.lat - coord2.lat)\n const lngDiff = Math.abs(coord1.lng - coord2.lng)\n return Math.sqrt(latDiff * latDiff + lngDiff * lngDiff)\n}\n","import { CLUSTER_DISTANCE_THRESHOLD } from '@/components/ui/Map/constants'\nimport type { ClusterFeature, Coordinate, PinData } from '@/components/ui/Map/types'\nimport { calculateDistance } from '@/components/ui/Map/utils'\n\nexport function convertCoordinatesToGeoJSON<T = PinData>(coordinates: Coordinate<T>[]) {\n return coordinates.map((coord, index) => ({\n type: 'Feature' as const,\n properties: {\n cluster: false,\n pointId: index,\n data: coord.data,\n },\n geometry: {\n type: 'Point' as const,\n coordinates: [coord.lng, coord.lat],\n },\n }))\n}\n\nexport function createManualClusters<T = PinData>(\n coordinates: Coordinate<T>[]\n): ClusterFeature<T>[] {\n if (!coordinates || coordinates.length === 0) return []\n\n const clusters: ClusterFeature<T>[] = []\n const processed = new Set<number>()\n\n coordinates.forEach((coord, index) => {\n if (processed.has(index)) return\n\n const nearby: number[] = [index]\n coordinates.forEach((otherCoord, otherIndex) => {\n if (otherIndex === index || processed.has(otherIndex)) return\n\n const distance = calculateDistance(coord, otherCoord)\n\n if (distance < CLUSTER_DISTANCE_THRESHOLD) {\n nearby.push(otherIndex)\n }\n })\n\n if (nearby.length >= 2) {\n clusters.push({\n type: 'Feature' as const,\n properties: {\n cluster: true,\n point_count: nearby.length,\n },\n geometry: {\n type: 'Point' as const,\n coordinates: [coord.lng, coord.lat],\n },\n id: clusters.length,\n })\n\n nearby.forEach((i) => processed.add(i))\n } else {\n clusters.push({\n type: 'Feature' as const,\n properties: {\n cluster: false,\n pointId: index,\n data: coord.data,\n },\n geometry: {\n type: 'Point' as const,\n coordinates: [coord.lng, coord.lat],\n },\n id: clusters.length,\n })\n processed.add(index)\n }\n })\n\n return clusters\n}\n","'use client'\n\nimport { AdvancedMarker, Map, Pin, useMap, useMapsLibrary } from '@vis.gl/react-google-maps'\nimport { useCallback } from 'react'\n\nimport { ClusterMarker } from '@/components/ui/Map/ClusterMarker'\nimport { PIN_COLORS } from '@/components/ui/Map/constants'\nimport { FocusCircle } from '@/components/ui/Map/FocusCircle'\nimport { IndividualMarker } from '@/components/ui/Map/IndividualMarker'\nimport type { MapContentProps, PinData } from '@/components/ui/Map/types'\nimport { cn } from '@/lib/utils'\n\nexport function MapContent<T = PinData>({\n mapId,\n mapCenter,\n mapZoom,\n position,\n coordinates,\n clusters,\n supercluster,\n onPinHover,\n onPinClick,\n focusPoint,\n radiusMiles,\n className,\n setBounds,\n setZoomLevel,\n}: MapContentProps<T>) {\n const map = useMap()\n const mapsLibrary = useMapsLibrary('maps')\n\n const zoomToLevel = useCallback(\n (newZoom: number) => {\n if (map) {\n map.setZoom(newZoom)\n }\n },\n [map]\n )\n\n const handleBoundsChanged = (e: {\n detail: { bounds: { south: number; west: number; north: number; east: number } }\n }) => {\n if (e.detail.bounds) {\n const bounds = e.detail.bounds\n setBounds([\n [bounds.south, bounds.west],\n [bounds.north, bounds.east],\n ])\n }\n }\n\n const handleZoomChanged = (e: { detail: { zoom: number } }) => {\n if (e.detail.zoom) {\n setZoomLevel(e.detail.zoom)\n }\n }\n\n const handleCameraChanged = (e: { detail: { zoom: number } }) => {\n if (e.detail.zoom) {\n setZoomLevel(e.detail.zoom)\n }\n }\n\n return (\n <div className={cn('relative h-screen max-w-full', className)}>\n <Map\n defaultZoom={mapZoom}\n defaultCenter={mapCenter}\n mapId={mapId}\n keyboardShortcuts={true}\n disableDefaultUI={true}\n zoomControl={true}\n onBoundsChanged={handleBoundsChanged}\n onZoomChanged={handleZoomChanged}\n onCameraChanged={handleCameraChanged}\n >\n {position && !coordinates && (\n <AdvancedMarker position={position}>\n <Pin {...PIN_COLORS} />\n </AdvancedMarker>\n )}\n\n {coordinates &&\n clusters.map((cluster) => {\n const { cluster: isCluster } = cluster.properties\n\n if (isCluster) {\n return (\n <ClusterMarker\n key={`cluster-${cluster.id}`}\n cluster={cluster}\n coordinates={coordinates}\n onPinClick={onPinClick}\n onPinHover={onPinHover}\n zoomToLevel={zoomToLevel}\n supercluster={supercluster}\n />\n )\n }\n\n const originalPoint = coordinates[cluster.properties.pointId!]\n return (\n <IndividualMarker\n key={`marker-${cluster.properties.pointId}`}\n coordinate={originalPoint}\n onPinClick={onPinClick}\n onPinHover={onPinHover}\n />\n )\n })}\n\n {coordinates &&\n clusters.length === 0 &&\n coordinates.map((coord, index) => (\n <IndividualMarker\n key={`fallback-${index}`}\n coordinate={coord}\n onPinClick={onPinClick}\n onPinHover={onPinHover}\n />\n ))}\n\n {focusPoint && radiusMiles && (\n <FocusCircle\n focusPoint={focusPoint}\n radiusMiles={radiusMiles}\n map={map}\n mapsLibrary={mapsLibrary}\n />\n )}\n </Map>\n </div>\n )\n}\n","'use client'\n\nimport { AdvancedMarker } from '@vis.gl/react-google-maps'\n\nimport type { ClusterMarkerProps, PinData } from '@/components/ui/Map/types'\nimport { filterClusterCoordinates } from '@/components/ui/Map/utils'\n\nexport function ClusterMarker<T = PinData>({\n cluster,\n coordinates,\n onPinClick,\n onPinHover,\n zoomToLevel,\n supercluster,\n}: ClusterMarkerProps<T>) {\n const [lng, lat] = cluster.geometry.coordinates\n const { point_count: pointCount } = cluster.properties\n\n const handleClick = () => {\n const clusterCoordinates = filterClusterCoordinates(coordinates, lat, lng)\n onPinClick?.(clusterCoordinates)\n\n const expansionZoom = supercluster.getClusterExpansionZoom(cluster.id)\n zoomToLevel(expansionZoom)\n }\n\n const handleMouseEnter = () => {\n const clusterCoordinates = filterClusterCoordinates(coordinates, lat, lng)\n onPinHover?.(clusterCoordinates)\n }\n\n const handleMouseLeave = () => onPinHover?.(null)\n\n return (\n <AdvancedMarker\n key={`cluster-${cluster.id}`}\n position={{ lat, lng }}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <div className=\"relative flex items-center justify-center\" id=\"CLUSTER_MARKER\">\n <div className=\"flex h-8 w-8 items-center justify-center rounded-full border-2 border-white bg-red-500 text-sm font-bold text-white shadow-lg\">\n {pointCount || '?'}\n </div>\n </div>\n </AdvancedMarker>\n )\n}\n","'use client'\n\nimport { useEffect, useMemo, useRef } from 'react'\n\nimport { FOCUS_CIRCLE_STYLES } from '@/components/ui/Map/constants'\nimport type { FocusCircleProps, PinData } from '@/components/ui/Map/types'\n\nexport function FocusCircle<T = PinData>({\n focusPoint,\n radiusMiles,\n map,\n mapsLibrary,\n}: FocusCircleProps<T>) {\n const circleRef = useRef<google.maps.Circle | null>(null)\n\n const circleProps = useMemo(() => {\n if (!focusPoint || !radiusMiles) return null\n return {\n center: focusPoint,\n radius: radiusMiles * 1609.34,\n }\n }, [focusPoint, radiusMiles])\n\n useEffect(() => {\n if (!map || !mapsLibrary || !circleProps) {\n return\n }\n\n if (!circleRef.current) {\n const circle = new google.maps.Circle({\n center: circleProps.center,\n radius: circleProps.radius,\n ...FOCUS_CIRCLE_STYLES,\n map: map,\n })\n\n circleRef.current = circle\n } else {\n circleRef.current.setCenter(circleProps.center)\n circleRef.current.setRadius(circleProps.radius)\n }\n }, [map, mapsLibrary, circleProps])\n\n useEffect(() => {\n return () => {\n if (circleRef.current) {\n circleRef.current.setMap(null)\n circleRef.current = null\n }\n }\n }, [])\n\n return null\n}\n","'use client'\n\nimport { AdvancedMarker, Pin } from '@vis.gl/react-google-maps'\n\nimport { PIN_COLORS } from '@/components/ui/Map/constants'\nimport type { IndividualMarkerProps, PinData } from '@/components/ui/Map/types'\n\nexport function IndividualMarker<T = PinData>({\n coordinate,\n onPinClick,\n onPinHover,\n}: IndividualMarkerProps<T>) {\n const handleMouseEnter = () => onPinHover?.(coordinate)\n const handleMouseLeave = () => onPinHover?.(null)\n const handleClick = () => onPinClick?.(coordinate)\n\n return (\n <AdvancedMarker\n position={{ lat: coordinate.lat, lng: coordinate.lng }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n >\n <Pin {...PIN_COLORS} />\n </AdvancedMarker>\n )\n}\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";;;AAEA,SAAS,mBAAmB;;;ACFrB,IAAM,mBAAmB,EAAE,KAAK,WAAW,KAAK,UAAU;AAC1D,IAAM,eAAe;AAErB,IAAM,6BAA6B;AAEnC,IAAM,aAAa;AAAA,EACxB,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AACd;AAEO,IAAM,sBAAsB;AAAA,EACjC,aAAa;AAAA,EACb,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW;AAAA,EACX,aAAa;AAAA,EACb,WAAW;AAAA,EACX,QAAQ;AACV;AAEO,IAAM,oBAAoB;AAAA,EAC/B,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AACb;;;ACzBA,SAAS,SAAS,gBAAgB;AAClC,OAAO,qBAAqB;;;ACErB,SAAS,wBAAqC,QAAwC;AAC3F,MAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,QAAM,SAAS,OAAO,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,KAAK,CAAC,IAAI,OAAO;AAC1E,QAAM,SAAS,OAAO,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,KAAK,CAAC,IAAI,OAAO;AAE1E,SAAO,EAAE,KAAK,QAAQ,KAAK,OAAO;AACpC;AAEO,SAAS,sBACd,QACA,aACQ;AACR,MAAI,OAAO,UAAU,EAAG,QAAO;AAE/B,QAAM,OAAO,OAAO,IAAI,CAAC,UAAU,MAAM,GAAG;AAC5C,QAAM,OAAO,OAAO,IAAI,CAAC,UAAU,MAAM,GAAG;AAE5C,QAAM,UAAU,KAAK,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI;AACpD,QAAM,UAAU,KAAK,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI;AACpD,QAAM,UAAU,KAAK,IAAI,SAAS,OAAO;AAEzC,MAAI,UAAU,IAAK,QAAO;AAC1B,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,UAAU,KAAM,QAAO;AAC3B,SAAO;AACT;AAQO,SAAS,yBACd,aACA,YACA,YACiB;AACjB,SAAO,YAAY,OAAO,CAAC,UAAU;AACnC,UAAM,UAAU,KAAK,IAAI,MAAM,MAAM,UAAU;AAC/C,UAAM,UAAU,KAAK,IAAI,MAAM,MAAM,UAAU;AAC/C,UAAM,WAAW,KAAK,KAAK,UAAU,UAAU,UAAU,OAAO;AAChE,WAAO,WAAW;AAAA,EACpB,CAAC;AACH;;;AC5CO,SAAS,4BAAyC,aAA8B;AACrF,SAAO,YAAY,IAAI,CAAC,OAAO,WAAW;AAAA,IACxC,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM,MAAM;AAAA,IACd;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aAAa,CAAC,MAAM,KAAK,MAAM,GAAG;AAAA,IACpC;AAAA,EACF,EAAE;AACJ;;;AFVO,SAAS,aAA0B,cAAgC;AACxE,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA+C;AAAA,IACzE,CAAC,MAAM,GAAG;AAAA,IACV,CAAC,KAAK,EAAE;AAAA,EACV,CAAC;AAID,SAAO,EAAE,QAAQ,UAAU;AAC7B;AAEO,SAAS,aAAa,aAAqB;AAChD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,WAAW;AACtD,SAAO,EAAE,WAAW,aAAa;AACnC;AAEO,SAAS,YACd,aACA,QACA,WACA;AACA,QAAM,SAAS,QAAQ,MAAM;AAC3B,QAAI,CAAC,YAAa,QAAO,CAAC;AAC1B,WAAO,4BAA+B,WAAW;AAAA,EACnD,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,EAAE,UAAU,aAAa,IAAI,gBAAgB;AAAA,IACjD;AAAA,IACA,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE;AAAA;AAAA,IAC3B,MAAM,aAAa;AAAA,IACnB,SAAS;AAAA,EACX,CAAC;AAED,SAAO,EAAE,UAAU,aAAa;AAClC;;;AGvCA,SAAS,kBAAAA,iBAAgB,KAAK,OAAAC,MAAK,QAAQ,sBAAsB;AACjE,SAAS,mBAAmB;;;ACD5B,SAAS,sBAAsB;AAKxB,SAAS,cAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,CAAC,KAAK,GAAG,IAAI,QAAQ,SAAS;AACpC,QAAM,EAAE,aAAa,WAAW,IAAI,QAAQ;AAE5C,QAAM,cAAc,MAAM;AACxB,UAAM,qBAAqB,yBAAyB,aAAa,KAAK,GAAG;AACzE,iBAAa,kBAAkB;AAE/B,UAAM,gBAAgB,aAAa,wBAAwB,QAAQ,EAAE;AACrE,gBAAY,aAAa;AAAA,EAC3B;AAEA,QAAM,mBAAmB,MAAM;AAC7B,UAAM,qBAAqB,yBAAyB,aAAa,KAAK,GAAG;AACzE,iBAAa,kBAAkB;AAAA,EACjC;AAEA,QAAM,mBAAmB,MAAM,aAAa,IAAI;AAEhD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,WAAW,QAAQ,EAAE;AAAA,MAC1B,UAAU,EAAE,KAAK,IAAI;AAAA,MACrB,SAAS;AAAA,MACT,cAAc;AAAA,MACd,cAAc;AAAA;AAAA,IAEd,oCAAC,SAAI,WAAU,6CAA4C,IAAG,oBAC5D,oCAAC,SAAI,WAAU,mIACZ,cAAc,GACjB,CACF;AAAA,EACF;AAEJ;;;AC9CA,SAAS,WAAW,WAAAC,UAAS,cAAc;AAKpC,SAAS,YAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,QAAM,YAAY,OAAkC,IAAI;AAExD,QAAM,cAAcC,SAAQ,MAAM;AAChC,QAAI,CAAC,cAAc,CAAC,YAAa,QAAO;AACxC,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ,cAAc;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,YAAY,WAAW,CAAC;AAE5B,YAAU,MAAM;AACd,QAAI,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa;AACxC;AAAA,IACF;AAEA,QAAI,CAAC,UAAU,SAAS;AACtB,YAAM,SAAS,IAAI,OAAO,KAAK,OAAO;AAAA,QACpC,QAAQ,YAAY;AAAA,QACpB,QAAQ,YAAY;AAAA,QACpB,GAAG;AAAA,QACH;AAAA,MACF,CAAC;AAED,gBAAU,UAAU;AAAA,IACtB,OAAO;AACL,gBAAU,QAAQ,UAAU,YAAY,MAAM;AAC9C,gBAAU,QAAQ,UAAU,YAAY,MAAM;AAAA,IAChD;AAAA,EACF,GAAG,CAAC,KAAK,aAAa,WAAW,CAAC;AAElC,YAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,UAAU,SAAS;AACrB,kBAAU,QAAQ,OAAO,IAAI;AAC7B,kBAAU,UAAU;AAAA,MACtB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;ACnDA,SAAS,kBAAAC,iBAAgB,WAAW;AAK7B,SAAS,iBAA8B;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,mBAAmB,MAAM,aAAa,UAAU;AACtD,QAAM,mBAAmB,MAAM,aAAa,IAAI;AAChD,QAAM,cAAc,MAAM,aAAa,UAAU;AAEjD,SACE;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,UAAU,EAAE,KAAK,WAAW,KAAK,KAAK,WAAW,IAAI;AAAA,MACrD,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA;AAAA,IAET,oCAAC,OAAK,GAAG,YAAY;AAAA,EACvB;AAEJ;;;AC1BA,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;AJOO,SAAS,WAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuB;AACrB,QAAM,MAAM,OAAO;AACnB,QAAM,cAAc,eAAe,MAAM;AAEzC,QAAM,cAAc;AAAA,IAClB,CAAC,YAAoB;AACnB,UAAI,KAAK;AACP,YAAI,QAAQ,OAAO;AAAA,MACrB;AAAA,IACF;AAAA,IACA,CAAC,GAAG;AAAA,EACN;AAEA,QAAM,sBAAsB,CAAC,MAEvB;AACJ,QAAI,EAAE,OAAO,QAAQ;AACnB,YAAM,SAAS,EAAE,OAAO;AACxB,gBAAU;AAAA,QACR,CAAC,OAAO,OAAO,OAAO,IAAI;AAAA,QAC1B,CAAC,OAAO,OAAO,OAAO,IAAI;AAAA,MAC5B,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,MAAoC;AAC7D,QAAI,EAAE,OAAO,MAAM;AACjB,mBAAa,EAAE,OAAO,IAAI;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,sBAAsB,CAAC,MAAoC;AAC/D,QAAI,EAAE,OAAO,MAAM;AACjB,mBAAa,EAAE,OAAO,IAAI;AAAA,IAC5B;AAAA,EACF;AAEA,SACE,oCAAC,SAAI,WAAW,GAAG,gCAAgC,SAAS,KAC1D;AAAA,IAAC;AAAA;AAAA,MACC,aAAa;AAAA,MACb,eAAe;AAAA,MACf;AAAA,MACA,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,iBAAiB;AAAA;AAAA,IAEhB,YAAY,CAAC,eACZ,oCAACC,iBAAA,EAAe,YACd,oCAACC,MAAA,EAAK,GAAG,YAAY,CACvB;AAAA,IAGD,eACC,SAAS,IAAI,CAAC,YAAY;AACxB,YAAM,EAAE,SAAS,UAAU,IAAI,QAAQ;AAEvC,UAAI,WAAW;AACb,eACE;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,WAAW,QAAQ,EAAE;AAAA,YAC1B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,MAEJ;AAEA,YAAM,gBAAgB,YAAY,QAAQ,WAAW,OAAQ;AAC7D,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,UAAU,QAAQ,WAAW,OAAO;AAAA,UACzC,YAAY;AAAA,UACZ;AAAA,UACA;AAAA;AAAA,MACF;AAAA,IAEJ,CAAC;AAAA,IAEF,eACC,SAAS,WAAW,KACpB,YAAY,IAAI,CAAC,OAAO,UACtB;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,YAAY,KAAK;AAAA,QACtB,YAAY;AAAA,QACZ;AAAA,QACA;AAAA;AAAA,IACF,CACD;AAAA,IAEF,cAAc,eACb;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ,CACF;AAEJ;;;AL5HO,SAAS,aAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAAmC;AACjC,QAAM,EAAE,QAAQ,UAAU,IAAI,aAAa,WAAW;AACtD,QAAM,EAAE,WAAW,aAAa,IAAI,aAAa,QAAQ,YAAY;AACrE,QAAM,EAAE,UAAU,aAAa,IAAI,YAAY,aAAa,QAAQ,SAAS;AAE7E,QAAM,YACJ,eAAe,YAAY,SAAS,IAChC,wBAAwB,WAAW,IACnC,YAAY;AAElB,QAAM,UACJ,eAAe,YAAY,SAAS,IAChC,sBAAsB,aAAa,IAAI,IACvC,WACE,OACA;AAER,SACE,oCAAC,eAAY,UACX;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,CACF;AAEJ;","names":["AdvancedMarker","Pin","useMemo","useMemo","AdvancedMarker","AdvancedMarker","AdvancedMarker","Pin"]}
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/components/ui/Map/MapContent.tsx
22
+ var MapContent_exports = {};
23
+ __export(MapContent_exports, {
24
+ MapContent: () => MapContent
25
+ });
26
+ module.exports = __toCommonJS(MapContent_exports);
27
+ var import_react_google_maps3 = require("@vis.gl/react-google-maps");
28
+ var import_react2 = require("react");
29
+
30
+ // src/components/ui/Map/ClusterMarker.tsx
31
+ var import_react_google_maps = require("@vis.gl/react-google-maps");
32
+
33
+ // src/components/ui/Map/constants.ts
34
+ var CLUSTER_DISTANCE_THRESHOLD = 1e-3;
35
+ var PIN_COLORS = {
36
+ background: "#0B5441",
37
+ borderColor: "#EBFDF1",
38
+ glyphColor: "#D4F500"
39
+ };
40
+ var FOCUS_CIRCLE_STYLES = {
41
+ strokeColor: "#0B5441",
42
+ strokeOpacity: 0.8,
43
+ strokeWeight: 2,
44
+ fillColor: "#0B5441",
45
+ fillOpacity: 0.1,
46
+ clickable: false,
47
+ zIndex: 1
48
+ };
49
+
50
+ // src/components/ui/Map/utils.ts
51
+ function filterClusterCoordinates(coordinates, clusterLat, clusterLng) {
52
+ return coordinates.filter((coord) => {
53
+ const latDiff = Math.abs(coord.lat - clusterLat);
54
+ const lngDiff = Math.abs(coord.lng - clusterLng);
55
+ const distance = Math.sqrt(latDiff * latDiff + lngDiff * lngDiff);
56
+ return distance < CLUSTER_DISTANCE_THRESHOLD;
57
+ });
58
+ }
59
+
60
+ // src/components/ui/Map/ClusterMarker.tsx
61
+ function ClusterMarker({
62
+ cluster,
63
+ coordinates,
64
+ onPinClick,
65
+ onPinHover,
66
+ zoomToLevel,
67
+ supercluster
68
+ }) {
69
+ const [lng, lat] = cluster.geometry.coordinates;
70
+ const { point_count: pointCount } = cluster.properties;
71
+ const handleClick = () => {
72
+ const clusterCoordinates = filterClusterCoordinates(coordinates, lat, lng);
73
+ onPinClick?.(clusterCoordinates);
74
+ const expansionZoom = supercluster.getClusterExpansionZoom(cluster.id);
75
+ zoomToLevel(expansionZoom);
76
+ };
77
+ const handleMouseEnter = () => {
78
+ const clusterCoordinates = filterClusterCoordinates(coordinates, lat, lng);
79
+ onPinHover?.(clusterCoordinates);
80
+ };
81
+ const handleMouseLeave = () => onPinHover?.(null);
82
+ return /* @__PURE__ */ React.createElement(
83
+ import_react_google_maps.AdvancedMarker,
84
+ {
85
+ key: `cluster-${cluster.id}`,
86
+ position: { lat, lng },
87
+ onClick: handleClick,
88
+ onMouseEnter: handleMouseEnter,
89
+ onMouseLeave: handleMouseLeave
90
+ },
91
+ /* @__PURE__ */ React.createElement("div", { className: "relative flex items-center justify-center", id: "CLUSTER_MARKER" }, /* @__PURE__ */ React.createElement("div", { className: "flex h-8 w-8 items-center justify-center rounded-full border-2 border-white bg-red-500 text-sm font-bold text-white shadow-lg" }, pointCount || "?"))
92
+ );
93
+ }
94
+
95
+ // src/components/ui/Map/FocusCircle.tsx
96
+ var import_react = require("react");
97
+ function FocusCircle({
98
+ focusPoint,
99
+ radiusMiles,
100
+ map,
101
+ mapsLibrary
102
+ }) {
103
+ const circleRef = (0, import_react.useRef)(null);
104
+ const circleProps = (0, import_react.useMemo)(() => {
105
+ if (!focusPoint || !radiusMiles) return null;
106
+ return {
107
+ center: focusPoint,
108
+ radius: radiusMiles * 1609.34
109
+ };
110
+ }, [focusPoint, radiusMiles]);
111
+ (0, import_react.useEffect)(() => {
112
+ if (!map || !mapsLibrary || !circleProps) {
113
+ return;
114
+ }
115
+ if (!circleRef.current) {
116
+ const circle = new google.maps.Circle({
117
+ center: circleProps.center,
118
+ radius: circleProps.radius,
119
+ ...FOCUS_CIRCLE_STYLES,
120
+ map
121
+ });
122
+ circleRef.current = circle;
123
+ } else {
124
+ circleRef.current.setCenter(circleProps.center);
125
+ circleRef.current.setRadius(circleProps.radius);
126
+ }
127
+ }, [map, mapsLibrary, circleProps]);
128
+ (0, import_react.useEffect)(() => {
129
+ return () => {
130
+ if (circleRef.current) {
131
+ circleRef.current.setMap(null);
132
+ circleRef.current = null;
133
+ }
134
+ };
135
+ }, []);
136
+ return null;
137
+ }
138
+
139
+ // src/components/ui/Map/IndividualMarker.tsx
140
+ var import_react_google_maps2 = require("@vis.gl/react-google-maps");
141
+ function IndividualMarker({
142
+ coordinate,
143
+ onPinClick,
144
+ onPinHover
145
+ }) {
146
+ const handleMouseEnter = () => onPinHover?.(coordinate);
147
+ const handleMouseLeave = () => onPinHover?.(null);
148
+ const handleClick = () => onPinClick?.(coordinate);
149
+ return /* @__PURE__ */ React.createElement(
150
+ import_react_google_maps2.AdvancedMarker,
151
+ {
152
+ position: { lat: coordinate.lat, lng: coordinate.lng },
153
+ onMouseEnter: handleMouseEnter,
154
+ onMouseLeave: handleMouseLeave,
155
+ onClick: handleClick
156
+ },
157
+ /* @__PURE__ */ React.createElement(import_react_google_maps2.Pin, { ...PIN_COLORS })
158
+ );
159
+ }
160
+
161
+ // src/lib/utils.ts
162
+ var import_clsx = require("clsx");
163
+ var import_tailwind_merge = require("tailwind-merge");
164
+ function cn(...inputs) {
165
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
166
+ }
167
+
168
+ // src/components/ui/Map/MapContent.tsx
169
+ function MapContent({
170
+ mapId,
171
+ mapCenter,
172
+ mapZoom,
173
+ position,
174
+ coordinates,
175
+ clusters,
176
+ supercluster,
177
+ onPinHover,
178
+ onPinClick,
179
+ focusPoint,
180
+ radiusMiles,
181
+ className,
182
+ setBounds,
183
+ setZoomLevel
184
+ }) {
185
+ const map = (0, import_react_google_maps3.useMap)();
186
+ const mapsLibrary = (0, import_react_google_maps3.useMapsLibrary)("maps");
187
+ const zoomToLevel = (0, import_react2.useCallback)(
188
+ (newZoom) => {
189
+ if (map) {
190
+ map.setZoom(newZoom);
191
+ }
192
+ },
193
+ [map]
194
+ );
195
+ const handleBoundsChanged = (e) => {
196
+ if (e.detail.bounds) {
197
+ const bounds = e.detail.bounds;
198
+ setBounds([
199
+ [bounds.south, bounds.west],
200
+ [bounds.north, bounds.east]
201
+ ]);
202
+ }
203
+ };
204
+ const handleZoomChanged = (e) => {
205
+ if (e.detail.zoom) {
206
+ setZoomLevel(e.detail.zoom);
207
+ }
208
+ };
209
+ const handleCameraChanged = (e) => {
210
+ if (e.detail.zoom) {
211
+ setZoomLevel(e.detail.zoom);
212
+ }
213
+ };
214
+ return /* @__PURE__ */ React.createElement("div", { className: cn("relative h-screen max-w-full", className) }, /* @__PURE__ */ React.createElement(
215
+ import_react_google_maps3.Map,
216
+ {
217
+ defaultZoom: mapZoom,
218
+ defaultCenter: mapCenter,
219
+ mapId,
220
+ keyboardShortcuts: true,
221
+ disableDefaultUI: true,
222
+ zoomControl: true,
223
+ onBoundsChanged: handleBoundsChanged,
224
+ onZoomChanged: handleZoomChanged,
225
+ onCameraChanged: handleCameraChanged
226
+ },
227
+ position && !coordinates && /* @__PURE__ */ React.createElement(import_react_google_maps3.AdvancedMarker, { position }, /* @__PURE__ */ React.createElement(import_react_google_maps3.Pin, { ...PIN_COLORS })),
228
+ coordinates && clusters.map((cluster) => {
229
+ const { cluster: isCluster } = cluster.properties;
230
+ if (isCluster) {
231
+ return /* @__PURE__ */ React.createElement(
232
+ ClusterMarker,
233
+ {
234
+ key: `cluster-${cluster.id}`,
235
+ cluster,
236
+ coordinates,
237
+ onPinClick,
238
+ onPinHover,
239
+ zoomToLevel,
240
+ supercluster
241
+ }
242
+ );
243
+ }
244
+ const originalPoint = coordinates[cluster.properties.pointId];
245
+ return /* @__PURE__ */ React.createElement(
246
+ IndividualMarker,
247
+ {
248
+ key: `marker-${cluster.properties.pointId}`,
249
+ coordinate: originalPoint,
250
+ onPinClick,
251
+ onPinHover
252
+ }
253
+ );
254
+ }),
255
+ coordinates && clusters.length === 0 && coordinates.map((coord, index) => /* @__PURE__ */ React.createElement(
256
+ IndividualMarker,
257
+ {
258
+ key: `fallback-${index}`,
259
+ coordinate: coord,
260
+ onPinClick,
261
+ onPinHover
262
+ }
263
+ )),
264
+ focusPoint && radiusMiles && /* @__PURE__ */ React.createElement(
265
+ FocusCircle,
266
+ {
267
+ focusPoint,
268
+ radiusMiles,
269
+ map,
270
+ mapsLibrary
271
+ }
272
+ )
273
+ ));
274
+ }
275
+ // Annotate the CommonJS export names for ESM import in node:
276
+ 0 && (module.exports = {
277
+ MapContent
278
+ });
279
+ //# sourceMappingURL=MapContent.cjs.map