@collabdt/core 0.0.41 → 0.0.43

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 (265) hide show
  1. package/README.md +1 -1
  2. package/dist/core/components/Toolbar.d.ts.map +1 -1
  3. package/dist/core/components/Toolbar.js.map +1 -1
  4. package/dist/core/components/ToolbarBody.js.map +1 -1
  5. package/dist/core/components/TopNavigationBar.js.map +1 -1
  6. package/dist/core/components/authentication/ForgotPassword.js.map +1 -1
  7. package/dist/core/components/authentication/Signin.js.map +1 -1
  8. package/dist/core/components/authentication/Signup.js.map +1 -1
  9. package/dist/core/components/settings/src/OrganizationSkeleton.js.map +1 -1
  10. package/dist/core/components/settings/src/SettingsSkeleton.js.map +1 -1
  11. package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
  12. package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
  13. package/dist/core/components/ui/Comments/CommentsSection.d.ts.map +1 -1
  14. package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
  15. package/dist/core/components/ui/DataTable.d.ts.map +1 -1
  16. package/dist/core/components/ui/DataTable.js +7 -0
  17. package/dist/core/components/ui/DataTable.js.map +1 -1
  18. package/dist/core/components/ui/FilesManager/src/FileItemComponent.d.ts.map +1 -1
  19. package/dist/core/components/ui/FilesManager/src/FileItemComponent.js.map +1 -1
  20. package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts +5 -2
  21. package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts.map +1 -1
  22. package/dist/core/components/ui/FilesManager/src/FileMarker.js +84 -21
  23. package/dist/core/components/ui/FilesManager/src/FileMarker.js.map +1 -1
  24. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.d.ts.map +1 -1
  25. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.js.map +1 -1
  26. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.d.ts.map +1 -1
  27. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js.map +1 -1
  28. package/dist/core/components/ui/Icons/IfcIcon.d.ts.map +1 -1
  29. package/dist/core/components/ui/Icons/IfcIcon.js.map +1 -1
  30. package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
  31. package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
  32. package/dist/core/components/ui/Navbar.d.ts.map +1 -1
  33. package/dist/core/components/ui/Navbar.js.map +1 -1
  34. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
  35. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
  36. package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
  37. package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
  38. package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
  39. package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
  40. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts.map +1 -1
  41. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js.map +1 -1
  42. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js +2 -2
  43. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
  44. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js +2 -2
  45. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
  46. package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
  47. package/dist/core/components/viewers/Viewer.js +5 -1
  48. package/dist/core/components/viewers/Viewer.js.map +1 -1
  49. package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
  50. package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
  51. package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
  52. package/dist/core/components/viewers/bim/BimViewer.js +14 -5
  53. package/dist/core/components/viewers/bim/BimViewer.js.map +1 -1
  54. package/dist/core/components/viewers/bim/src/BimLoadingState/index.d.ts.map +1 -1
  55. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js +6 -0
  56. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js.map +1 -1
  57. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  58. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js +168 -39
  59. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  60. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  61. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  62. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.d.ts.map +1 -1
  63. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js +1 -1
  64. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js.map +1 -1
  65. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts +14 -37
  66. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts.map +1 -1
  67. package/dist/core/components/viewers/bim/src/DXFLoader/index.js +31 -318
  68. package/dist/core/components/viewers/bim/src/DXFLoader/index.js.map +1 -1
  69. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts +66 -7
  70. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +1 -1
  71. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js +253 -21
  72. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js.map +1 -1
  73. package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts.map +1 -1
  74. package/dist/core/components/viewers/bim/src/ModelManager/index.js +9 -0
  75. package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
  76. package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
  77. package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
  78. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts +3 -2
  79. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts.map +1 -1
  80. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js.map +1 -1
  81. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.d.ts.map +1 -1
  82. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js +3 -4
  83. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
  84. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
  85. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +40 -18
  86. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
  87. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts +2 -5
  88. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts.map +1 -1
  89. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js +45 -59
  90. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js.map +1 -1
  91. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js +1 -0
  92. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
  93. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts +10 -1
  94. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts.map +1 -1
  95. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js +25 -73
  96. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js.map +1 -1
  97. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts +7 -3
  98. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts.map +1 -1
  99. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js +42 -78
  100. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js.map +1 -1
  101. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.d.ts.map +1 -1
  102. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js +52 -75
  103. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js.map +1 -1
  104. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts +15 -3
  105. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts.map +1 -1
  106. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js +165 -105
  107. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js.map +1 -1
  108. package/dist/core/components/viewers/index.d.ts.map +1 -1
  109. package/dist/core/components/viewers/index.js.map +1 -1
  110. package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
  111. package/dist/core/components/viewers/map/MapViewer.js +1 -0
  112. package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
  113. package/dist/core/components/viewers/map/datasets/DatasetManager/index.d.ts.map +1 -1
  114. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js +4 -3
  115. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js.map +1 -1
  116. package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
  117. package/dist/core/components/viewers/map/datasets/RowActions.js +148 -0
  118. package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
  119. package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
  120. package/dist/core/components/viewers/map/datasets/index.js +32 -15
  121. package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
  122. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts +4 -0
  123. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts.map +1 -0
  124. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js +43 -0
  125. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js.map +1 -0
  126. package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
  127. package/dist/core/components/viewers/map/datasets/src/localDatasets.js +39 -3
  128. package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
  129. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts +1 -1
  130. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts.map +1 -1
  131. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js +2 -1
  132. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js.map +1 -1
  133. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts +47 -0
  134. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts.map +1 -0
  135. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js +114 -0
  136. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js.map +1 -0
  137. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts +49 -0
  138. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts.map +1 -0
  139. package/dist/core/components/viewers/map/datasets/src/wmsTime.js +100 -0
  140. package/dist/core/components/viewers/map/datasets/src/wmsTime.js.map +1 -0
  141. package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
  142. package/dist/core/components/viewers/map/src/Geocoder.js +9 -9
  143. package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
  144. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
  145. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js +25 -43
  146. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
  147. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
  148. package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
  149. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.d.ts.map +1 -1
  150. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js +19 -2
  151. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js.map +1 -1
  152. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts +9 -0
  153. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts.map +1 -0
  154. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js +28 -0
  155. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js.map +1 -0
  156. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
  157. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js +1 -16
  158. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
  159. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts.map +1 -1
  160. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js.map +1 -1
  161. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts.map +1 -1
  162. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js +31 -2
  163. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js.map +1 -1
  164. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts +21 -0
  165. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts.map +1 -0
  166. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js +111 -0
  167. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js.map +1 -0
  168. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.d.ts.map +1 -1
  169. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js +77 -2
  170. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js.map +1 -1
  171. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  172. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  173. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  174. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  175. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
  176. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js +10 -3
  177. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
  178. package/dist/core/components/viewers/map/utils/geocoder.d.ts +6 -2
  179. package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +1 -1
  180. package/dist/core/components/viewers/map/utils/geocoder.js +10 -62
  181. package/dist/core/components/viewers/map/utils/geocoder.js.map +1 -1
  182. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts +5 -0
  183. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts.map +1 -0
  184. package/dist/core/components/viewers/map/utils/geocoding/adapters.js +192 -0
  185. package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -0
  186. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts +6 -0
  187. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts.map +1 -0
  188. package/dist/core/components/viewers/map/utils/geocoding/config.js +14 -0
  189. package/dist/core/components/viewers/map/utils/geocoding/config.js.map +1 -0
  190. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts +8 -0
  191. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -0
  192. package/dist/core/components/viewers/map/utils/geocoding/index.js +44 -0
  193. package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -0
  194. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts +6 -0
  195. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -0
  196. package/dist/core/components/viewers/map/utils/geocoding/osm.js +39 -0
  197. package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -0
  198. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts +8 -0
  199. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -0
  200. package/dist/core/components/viewers/map/utils/geocoding/pelias.js +35 -0
  201. package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -0
  202. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.d.ts.map +1 -1
  203. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js.map +1 -1
  204. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js +1 -3
  205. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
  206. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
  207. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js +2 -3
  208. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
  209. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  210. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js +8 -2
  211. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  212. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
  213. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
  214. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js +9 -9
  215. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js.map +1 -1
  216. package/dist/core/hooks/provider.js.map +1 -1
  217. package/dist/core/plugins/host/provider.d.ts.map +1 -1
  218. package/dist/core/plugins/host/provider.js.map +1 -1
  219. package/dist/core/store/AppConfig/context.d.ts.map +1 -1
  220. package/dist/core/store/AppConfig/context.js.map +1 -1
  221. package/dist/core/store/BIM/context.d.ts.map +1 -1
  222. package/dist/core/store/BIM/context.js.map +1 -1
  223. package/dist/core/store/BIM/reducer.d.ts +0 -1
  224. package/dist/core/store/BIM/reducer.d.ts.map +1 -1
  225. package/dist/core/store/BIM/reducer.js +0 -4
  226. package/dist/core/store/BIM/reducer.js.map +1 -1
  227. package/dist/core/store/Buildings/context.d.ts.map +1 -1
  228. package/dist/core/store/Buildings/context.js.map +1 -1
  229. package/dist/core/store/Content/context.d.ts.map +1 -1
  230. package/dist/core/store/Content/context.js.map +1 -1
  231. package/dist/core/store/Datasets/context.d.ts.map +1 -1
  232. package/dist/core/store/Datasets/context.js +2 -1
  233. package/dist/core/store/Datasets/context.js.map +1 -1
  234. package/dist/core/store/Datasets/reducer.d.ts +2 -0
  235. package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
  236. package/dist/core/store/Datasets/reducer.js +9 -4
  237. package/dist/core/store/Datasets/reducer.js.map +1 -1
  238. package/dist/core/store/Files/context.d.ts.map +1 -1
  239. package/dist/core/store/Files/context.js.map +1 -1
  240. package/dist/core/store/Map/context.d.ts.map +1 -1
  241. package/dist/core/store/Map/context.js.map +1 -1
  242. package/dist/core/store/Menus/context.d.ts.map +1 -1
  243. package/dist/core/store/Menus/context.js.map +1 -1
  244. package/dist/core/store/Permissions/context.d.ts.map +1 -1
  245. package/dist/core/store/Permissions/context.js.map +1 -1
  246. package/dist/core/store/PointCloud/context.d.ts.map +1 -1
  247. package/dist/core/store/PointCloud/context.js.map +1 -1
  248. package/dist/core/store/Tools/context.d.ts.map +1 -1
  249. package/dist/core/store/Tools/context.js.map +1 -1
  250. package/dist/core/types/datasetTypes.d.ts +8 -1
  251. package/dist/core/types/datasetTypes.d.ts.map +1 -1
  252. package/dist/core/types/dbTypes.d.ts +13 -13
  253. package/dist/core/types/dbTypes.d.ts.map +1 -1
  254. package/dist/core/types/dbTypes.js +13 -13
  255. package/dist/core/types/dbTypes.js.map +1 -1
  256. package/dist/core/types/index.d.ts +1 -1
  257. package/dist/core/types/index.d.ts.map +1 -1
  258. package/dist/core/types/index.js.map +1 -1
  259. package/dist/core/utils/imageUtils.js +1 -1
  260. package/dist/core/utils/imageUtils.js.map +1 -1
  261. package/package.json +2 -1
  262. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.d.ts +0 -3
  263. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.d.ts.map +0 -1
  264. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.js +0 -173
  265. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/geocoder.ts"],"sourcesContent":["import { Feature, Point, Polygon, MultiPolygon, LineString, MultiLineString } from 'geojson'\r\nimport { MarkerManager } from './MarkerManager'\r\n\r\nconst GEOCODE_EARTH_API_KEY = process.env.NEXT_PUBLIC_GEOCODE_EARTH_API_KEY\r\n\r\n// Global marker manager instance for geocoder\r\nlet geocoderMarkerManager: MarkerManager | null = null\r\n\r\n// Helper function to get or create the marker manager\r\nconst getGeocoderMarkerManager = (): MarkerManager => {\r\n if (!geocoderMarkerManager) {\r\n geocoderMarkerManager = new MarkerManager()\r\n }\r\n return geocoderMarkerManager\r\n}\r\n\r\n// Convert longitude and latitude into Municipality and Country Subdivision\r\nexport const getMunicipalityAndProvince = async (latitude: string, longitude: string, countryCode = 'CA') => {\r\n const params = new URLSearchParams({\r\n 'api_key': GEOCODE_EARTH_API_KEY,\r\n 'point.lat': latitude,\r\n 'point.lon': longitude,\r\n 'boundary.country': countryCode.toUpperCase(),\r\n 'layers': 'coarse',\r\n 'size': '1', // Limit to 1 result\r\n })\r\n\r\n const reverseGeocoderUrl = `https://api.geocode.earth/v1/reverse?${params}`\r\n\r\n try {\r\n const response = await fetch(reverseGeocoderUrl, {\r\n headers: {\r\n 'User-Agent': 'CDT/1.0 (cdt@email.com)',\r\n },\r\n })\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`)\r\n }\r\n\r\n const data = await response.json()\r\n console.log('Reverse geocoding response:', data)\r\n\r\n if (data.features && data.features.length > 0) {\r\n const feature = data.features[0]\r\n const properties = feature.properties\r\n\r\n const municipality = properties.locality || properties.neighbourhood || properties.county || ''\r\n const countrySubdivision = properties.region_a || properties.region || '' // region_a gives abbreviation like \"ON\", \"BC\"\r\n\r\n return { municipality, countrySubdivision }\r\n }\r\n\r\n return { municipality: '', countrySubdivision: '' }\r\n }\r\n catch (error) {\r\n console.error('Error fetching municipality and country subdivision:', error)\r\n return { municipality: '', countrySubdivision: '' }\r\n }\r\n}\r\n\r\n// Fetch address suggestions from Geocode Earth Autocomplete API\r\nexport const fetchSuggestions = async (input: string, countryCode = 'CA') => {\r\n if (!input || input.length < 3) {\r\n return []\r\n }\r\n\r\n try {\r\n const params = new URLSearchParams({\r\n 'api_key': GEOCODE_EARTH_API_KEY,\r\n 'text': input,\r\n 'boundary.country': countryCode.toUpperCase(),\r\n 'size': '5', // Limit results\r\n })\r\n\r\n const request = `https://api.geocode.earth/v1/autocomplete?${params}`\r\n\r\n const response = await fetch(request, {\r\n headers: {\r\n 'User-Agent': 'GIS-App/1.0',\r\n },\r\n })\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`)\r\n }\r\n\r\n const geojson = await response.json()\r\n\r\n return geojson.features && geojson.features.length > 0 ? geojson.features : []\r\n }\r\n catch (error) {\r\n console.error('Error fetching address suggestions:', error)\r\n return []\r\n }\r\n}\r\n\r\n// Parse location details for better display\r\nexport const parseLocation = (feature: Feature) => {\r\n const locationName = feature.properties?.name || ''\r\n const fullLabel = feature.properties?.label || ''\r\n\r\n // Try to extract location details from properties\r\n const properties = feature.properties\r\n let regionDetails = ''\r\n\r\n if (properties) {\r\n const locality = properties.locality\r\n const region = properties.region // Full countrySubdivision name\r\n const region_a = properties.region_a // CountrySubdivision abbreviation (ON, BC, etc.)\r\n const country = properties.country\r\n const country_a = properties.country_a // Country abbreviation (CA)\r\n\r\n // Build region details similar to your original format\r\n if (locality && region_a && country_a) {\r\n regionDetails = `${locality}, ${region_a}, ${country_a}`\r\n }\r\n else if (locality && region && country) {\r\n regionDetails = `${locality}, ${region}, ${country}`\r\n }\r\n else {\r\n // Fallback: try to extract from the full label\r\n const parts = fullLabel.split(', ')\r\n if (parts.length > 1) {\r\n regionDetails = parts.slice(1, 3).join(', ')\r\n }\r\n }\r\n }\r\n\r\n return {\r\n name: locationName,\r\n region: regionDetails,\r\n fullLabel: fullLabel,\r\n }\r\n}\r\n\r\n// Handle suggestion selection and map movement\r\nexport const handleLocationSelect = (feature: Feature, map: any, type: string, options?: { editing?: boolean }) => {\r\n const editing = options?.editing || false\r\n const markerManager = getGeocoderMarkerManager()\r\n\r\n // Handle feature with is_database_building flag\r\n if (type === 'dbBuilding') {\r\n const geometry = feature.geometry as Point\r\n const center = geometry.coordinates\r\n const addressData = {\r\n formatted_address: feature.properties?.label || '',\r\n coordinates: center,\r\n properties: feature.properties,\r\n building_id: feature.properties.gid?.replace('building-', ''),\r\n is_database_building: true,\r\n }\r\n\r\n if (map && center) {\r\n // Add marker to the center with editing capability\r\n markerManager.create(center as [number, number], map)\r\n\r\n map.flyTo({\r\n center: addressData.coordinates,\r\n zoom: 18,\r\n speed: 1.5,\r\n })\r\n }\r\n\r\n return addressData\r\n }\r\n\r\n // Calculate center coordinates\r\n let center\r\n\r\n // Use bbox if available (more precise for areas)\r\n if (feature.bbox) {\r\n center = [\r\n feature.bbox[0] + (feature.bbox[2] - feature.bbox[0]) / 2,\r\n feature.bbox[1] + (feature.bbox[3] - feature.bbox[1]) / 2,\r\n ]\r\n }\r\n // Otherwise extract coordinates based on geometry type\r\n else if (feature.geometry?.type === 'Point') {\r\n center = (feature.geometry as any).coordinates\r\n }\r\n\r\n const addressData = {\r\n formatted_address: feature.properties?.label || feature.properties?.name || '',\r\n coordinates: center,\r\n properties: feature.properties,\r\n address_details: {\r\n name: feature.properties?.name,\r\n label: feature.properties?.label,\r\n locality: feature.properties?.locality,\r\n neighbourhood: feature.properties?.neighbourhood,\r\n region: feature.properties?.region,\r\n region_a: feature.properties?.region_a,\r\n country: feature.properties?.country,\r\n country_a: feature.properties?.country_a,\r\n postalcode: feature.properties?.postalcode,\r\n housenumber: feature.properties?.housenumber,\r\n street: feature.properties?.street,\r\n },\r\n geocode_earth_id: feature.properties?.gid, // Geocode Earth's unique id\r\n layer: feature.properties?.layer, // Type of place (address, venue, locality, etc.)\r\n confidence: feature.properties?.confidence, // Geocode Earth's confidence score\r\n match_type: feature.properties?.match_type, // How well the result matches the query\r\n }\r\n\r\n if (map && center) {\r\n // Add marker to the center with editing capability\r\n markerManager.create(center as [number, number], map, { editing })\r\n\r\n if (feature.bbox) {\r\n map.fitBounds(feature.bbox, { speed: 2 })\r\n }\r\n else {\r\n map.flyTo({\r\n center: addressData.coordinates,\r\n zoom: 14, // Might be good idea to set zoom level depending on layer / type of place\r\n speed: 2,\r\n })\r\n }\r\n }\r\n\r\n return addressData\r\n}\r\n\r\n// Util function to get detailed address information\r\nexport const getDetailedAddress = async (coordinates: [number, number], countryCode = 'CA') => {\r\n const [longitude, latitude] = coordinates\r\n\r\n const params = new URLSearchParams({\r\n 'api_key': GEOCODE_EARTH_API_KEY,\r\n 'point.lat': latitude.toString(),\r\n 'point.lon': longitude.toString(),\r\n 'boundary.country': countryCode.toUpperCase(),\r\n 'size': '1',\r\n })\r\n\r\n const reverseGeocoderUrl = `https://api.geocode.earth/v1/reverse?${params}`\r\n\r\n try {\r\n const response = await fetch(reverseGeocoderUrl)\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`)\r\n }\r\n\r\n const data = await response.json()\r\n\r\n if (data.features && data.features.length > 0) {\r\n return data.features[0]\r\n }\r\n\r\n return null\r\n }\r\n catch (error) {\r\n console.error('Error fetching detailed address:', error)\r\n return null\r\n }\r\n}\r\n\r\n// Convert a building object to a GeoJSON feature format compatible with handleLocationSelect\r\nexport const buildingToFeature = (building) => {\r\n const name = building.buildingName || ''\r\n\r\n // Validate coordinates - use the correct property names\r\n const longitude = Number.parseFloat(building.buildingLongitude)\r\n const latitude = Number.parseFloat(building.buildingLatitude)\r\n\r\n if (isNaN(longitude) || isNaN(latitude)) {\r\n console.error('Invalid building coordinates:', {\r\n longitude: building.buildingLongitude,\r\n latitude: building.buildingLatitude,\r\n buildingId: building.id,\r\n })\r\n return null\r\n }\r\n\r\n return {\r\n properties: {\r\n name: name,\r\n label: `${name}, ${[building.buildingAddress, building.buildingMunicipality, building.buildingCountrySubdivision].filter(Boolean).join(', ')}`,\r\n address: building.buildingAddress,\r\n municipality: building.buildingMunicipality,\r\n countrySubdivision: building.buildingCountrySubdivision,\r\n postalCode: building.buildingPostalCode,\r\n gid: `building-${building.id}`,\r\n },\r\n geometry: {\r\n type: 'Point',\r\n coordinates: [longitude, latitude],\r\n },\r\n is_database_building: true,\r\n }\r\n}\r\n\r\n// Enhanced marker creation with editing capabilities\r\nexport const createGeocoderMarker = (coordinates: [number, number], map: any, options?: { editing?: boolean }) => {\r\n const editing = options?.editing || false\r\n const markerManager = getGeocoderMarkerManager()\r\n markerManager.create(coordinates, map, { editing })\r\n return markerManager\r\n}\r\n\r\n// Helper function to remove the current marker\r\nexport const removeGeocoderMarker = (): void => {\r\n const markerManager = getGeocoderMarkerManager()\r\n markerManager.remove()\r\n}\r\n"],"mappings":"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","names":["center","addressData"]}
1
+ {"version":3,"sources":["../../../../../../src/core/components/viewers/map/utils/geocoder.ts"],"sourcesContent":["import { Feature, Point } from 'geojson'\r\nimport { MarkerManager } from './MarkerManager'\r\nimport { autocompleteGeocode, reverseGeocode } from './geocoding'\r\n\r\n// Global marker manager instance for geocoder\r\nlet geocoderMarkerManager: MarkerManager | null = null\r\n\r\n// Helper function to get or create the marker manager\r\nconst getGeocoderMarkerManager = (): MarkerManager => {\r\n if (!geocoderMarkerManager) {\r\n geocoderMarkerManager = new MarkerManager()\r\n }\r\n return geocoderMarkerManager\r\n}\r\n\r\n// Convert longitude and latitude into Municipality and Country Subdivision\r\nexport const getMunicipalityAndProvince = async (latitude: string, longitude: string, countryCode?: string) => {\r\n try {\r\n const features = await reverseGeocode(latitude, longitude, countryCode, { size: 1, coarse: true })\r\n\r\n if (features.length > 0) {\r\n const properties = features[0].properties as any\r\n\r\n const municipality = properties.locality || properties.neighbourhood || properties.county || ''\r\n const countrySubdivision = properties.region_a || properties.region || '' // region_a gives abbreviation like \"ON\", \"BC\"\r\n\r\n return { municipality, countrySubdivision }\r\n }\r\n\r\n return { municipality: '', countrySubdivision: '' }\r\n }\r\n catch (error) {\r\n console.error('Error fetching municipality and country subdivision:', error)\r\n return { municipality: '', countrySubdivision: '' }\r\n }\r\n}\r\n\r\n// Fetch address suggestions from the active autocomplete provider\r\nexport const fetchSuggestions = async (input: string, countryCode?: string) => {\r\n if (!input || input.length < 3) {\r\n return []\r\n }\r\n\r\n try {\r\n return await autocompleteGeocode(input, countryCode, 5)\r\n }\r\n catch (error) {\r\n console.error('Error fetching address suggestions:', error)\r\n return []\r\n }\r\n}\r\n\r\n// Parse location details for better display\r\nexport const parseLocation = (feature: Feature) => {\r\n const locationName = feature.properties?.name || ''\r\n const fullLabel = feature.properties?.label || ''\r\n\r\n // Try to extract location details from properties\r\n const properties = feature.properties\r\n let regionDetails = ''\r\n\r\n if (properties) {\r\n const locality = properties.locality\r\n const region = properties.region // Full countrySubdivision name\r\n const region_a = properties.region_a // CountrySubdivision abbreviation (ON, BC, etc.)\r\n const country = properties.country\r\n const country_a = properties.country_a // Country abbreviation (CA)\r\n\r\n // Build region details similar to your original format\r\n if (locality && region_a && country_a) {\r\n regionDetails = `${locality}, ${region_a}, ${country_a}`\r\n }\r\n else if (locality && region && country) {\r\n regionDetails = `${locality}, ${region}, ${country}`\r\n }\r\n else {\r\n // Fallback: try to extract from the full label\r\n const parts = fullLabel.split(', ')\r\n if (parts.length > 1) {\r\n regionDetails = parts.slice(1, 3).join(', ')\r\n }\r\n }\r\n }\r\n\r\n return {\r\n name: locationName,\r\n region: regionDetails,\r\n fullLabel: fullLabel,\r\n }\r\n}\r\n\r\n// Handle suggestion selection and map movement\r\nexport const handleLocationSelect = (feature: Feature, map: any, type: string, options?: { editing?: boolean }) => {\r\n const editing = options?.editing || false\r\n const markerManager = getGeocoderMarkerManager()\r\n\r\n // Handle feature with is_database_building flag\r\n if (type === 'dbBuilding') {\r\n const geometry = feature.geometry as Point\r\n const center = geometry.coordinates\r\n const addressData = {\r\n formatted_address: feature.properties?.label || '',\r\n coordinates: center,\r\n properties: feature.properties,\r\n building_id: feature.properties.gid?.replace('building-', ''),\r\n is_database_building: true,\r\n }\r\n\r\n if (map && center) {\r\n // Add marker to the center with editing capability\r\n markerManager.create(center as [number, number], map)\r\n\r\n map.flyTo({\r\n center: addressData.coordinates,\r\n zoom: 18,\r\n speed: 1.5,\r\n })\r\n }\r\n\r\n return addressData\r\n }\r\n\r\n // Calculate center coordinates\r\n let center\r\n\r\n // Use bbox if available (more precise for areas)\r\n if (feature.bbox) {\r\n center = [\r\n feature.bbox[0] + (feature.bbox[2] - feature.bbox[0]) / 2,\r\n feature.bbox[1] + (feature.bbox[3] - feature.bbox[1]) / 2,\r\n ]\r\n }\r\n // Otherwise extract coordinates based on geometry type\r\n else if (feature.geometry?.type === 'Point') {\r\n center = (feature.geometry as any).coordinates\r\n }\r\n\r\n const addressData = {\r\n formatted_address: feature.properties?.label || feature.properties?.name || '',\r\n coordinates: center,\r\n properties: feature.properties,\r\n address_details: {\r\n name: feature.properties?.name,\r\n label: feature.properties?.label,\r\n locality: feature.properties?.locality,\r\n neighbourhood: feature.properties?.neighbourhood,\r\n region: feature.properties?.region,\r\n region_a: feature.properties?.region_a,\r\n country: feature.properties?.country,\r\n country_a: feature.properties?.country_a,\r\n postalcode: feature.properties?.postalcode,\r\n housenumber: feature.properties?.housenumber,\r\n street: feature.properties?.street,\r\n },\r\n geocode_earth_id: feature.properties?.gid, // Geocode Earth's unique id\r\n layer: feature.properties?.layer, // Type of place (address, venue, locality, etc.)\r\n confidence: feature.properties?.confidence, // Geocode Earth's confidence score\r\n match_type: feature.properties?.match_type, // How well the result matches the query\r\n }\r\n\r\n if (map && center) {\r\n // Add marker to the center with editing capability\r\n markerManager.create(center as [number, number], map, { editing })\r\n\r\n if (feature.bbox) {\r\n map.fitBounds(feature.bbox, { speed: 2 })\r\n }\r\n else {\r\n map.flyTo({\r\n center: addressData.coordinates,\r\n zoom: 14, // Might be good idea to set zoom level depending on layer / type of place\r\n speed: 2,\r\n })\r\n }\r\n }\r\n\r\n return addressData\r\n}\r\n\r\n// Util function to get detailed address information\r\nexport const getDetailedAddress = async (coordinates: [number, number], countryCode?: string) => {\r\n const [longitude, latitude] = coordinates\r\n\r\n try {\r\n // Restrict to address-layer results (the original popover used layers=address) so\r\n // callers get a street address rather than the nearest venue/POI. Nominatim's zoom-18\r\n // reverse is already building-level, so this only refines the Pelias path.\r\n const features = await reverseGeocode(latitude.toString(), longitude.toString(), countryCode, { size: 1, layers: 'address' })\r\n return features.length > 0 ? features[0] : null\r\n }\r\n catch (error) {\r\n console.error('Error fetching detailed address:', error)\r\n return null\r\n }\r\n}\r\n\r\n// Convert a building object to a GeoJSON feature format compatible with handleLocationSelect\r\nexport const buildingToFeature = (building) => {\r\n const name = building.buildingName || ''\r\n\r\n // Validate coordinates - use the correct property names\r\n const longitude = Number.parseFloat(building.buildingLongitude)\r\n const latitude = Number.parseFloat(building.buildingLatitude)\r\n\r\n if (isNaN(longitude) || isNaN(latitude)) {\r\n console.error('Invalid building coordinates:', {\r\n longitude: building.buildingLongitude,\r\n latitude: building.buildingLatitude,\r\n buildingId: building.id,\r\n })\r\n return null\r\n }\r\n\r\n return {\r\n properties: {\r\n name: name,\r\n label: `${name}, ${[building.buildingAddress, building.buildingMunicipality, building.buildingCountrySubdivision].filter(Boolean).join(', ')}`,\r\n address: building.buildingAddress,\r\n municipality: building.buildingMunicipality,\r\n countrySubdivision: building.buildingCountrySubdivision,\r\n postalCode: building.buildingPostalCode,\r\n gid: `building-${building.id}`,\r\n },\r\n geometry: {\r\n type: 'Point',\r\n coordinates: [longitude, latitude],\r\n },\r\n is_database_building: true,\r\n }\r\n}\r\n\r\n// Enhanced marker creation with editing capabilities\r\nexport const createGeocoderMarker = (coordinates: [number, number], map: any, options?: { editing?: boolean }) => {\r\n const editing = options?.editing || false\r\n const markerManager = getGeocoderMarkerManager()\r\n markerManager.create(coordinates, map, { editing })\r\n return markerManager\r\n}\r\n\r\n// Helper function to remove the current marker\r\nexport const removeGeocoderMarker = (): void => {\r\n const markerManager = getGeocoderMarkerManager()\r\n markerManager.remove()\r\n}\r\n"],"mappings":"AACA,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB,sBAAsB;AAGpD,IAAI,wBAA8C;AAGlD,MAAM,2BAA2B,MAAqB;AACpD,MAAI,CAAC,uBAAuB;AAC1B,4BAAwB,IAAI,cAAc;AAAA,EAC5C;AACA,SAAO;AACT;AAGO,MAAM,6BAA6B,OAAO,UAAkB,WAAmB,gBAAyB;AAC7G,MAAI;AACF,UAAM,WAAW,MAAM,eAAe,UAAU,WAAW,aAAa,EAAE,MAAM,GAAG,QAAQ,KAAK,CAAC;AAEjG,QAAI,SAAS,SAAS,GAAG;AACvB,YAAM,aAAa,SAAS,CAAC,EAAE;AAE/B,YAAM,eAAe,WAAW,YAAY,WAAW,iBAAiB,WAAW,UAAU;AAC7F,YAAM,qBAAqB,WAAW,YAAY,WAAW,UAAU;AAEvE,aAAO,EAAE,cAAc,mBAAmB;AAAA,IAC5C;AAEA,WAAO,EAAE,cAAc,IAAI,oBAAoB,GAAG;AAAA,EACpD,SACO,OAAO;AACZ,YAAQ,MAAM,wDAAwD,KAAK;AAC3E,WAAO,EAAE,cAAc,IAAI,oBAAoB,GAAG;AAAA,EACpD;AACF;AAGO,MAAM,mBAAmB,OAAO,OAAe,gBAAyB;AAC7E,MAAI,CAAC,SAAS,MAAM,SAAS,GAAG;AAC9B,WAAO,CAAC;AAAA,EACV;AAEA,MAAI;AACF,WAAO,MAAM,oBAAoB,OAAO,aAAa,CAAC;AAAA,EACxD,SACO,OAAO;AACZ,YAAQ,MAAM,uCAAuC,KAAK;AAC1D,WAAO,CAAC;AAAA,EACV;AACF;AAGO,MAAM,gBAAgB,CAAC,YAAqB;AArDnD;AAsDE,QAAM,iBAAe,aAAQ,eAAR,mBAAoB,SAAQ;AACjD,QAAM,cAAY,aAAQ,eAAR,mBAAoB,UAAS;AAG/C,QAAM,aAAa,QAAQ;AAC3B,MAAI,gBAAgB;AAEpB,MAAI,YAAY;AACd,UAAM,WAAW,WAAW;AAC5B,UAAM,SAAS,WAAW;AAC1B,UAAM,WAAW,WAAW;AAC5B,UAAM,UAAU,WAAW;AAC3B,UAAM,YAAY,WAAW;AAG7B,QAAI,YAAY,YAAY,WAAW;AACrC,sBAAgB,GAAG,QAAQ,KAAK,QAAQ,KAAK,SAAS;AAAA,IACxD,WACS,YAAY,UAAU,SAAS;AACtC,sBAAgB,GAAG,QAAQ,KAAK,MAAM,KAAK,OAAO;AAAA,IACpD,OACK;AAEH,YAAM,QAAQ,UAAU,MAAM,IAAI;AAClC,UAAI,MAAM,SAAS,GAAG;AACpB,wBAAgB,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR;AAAA,EACF;AACF;AAGO,MAAM,uBAAuB,CAAC,SAAkB,KAAU,MAAc,YAAoC;AA5FnH;AA6FE,QAAM,WAAU,mCAAS,YAAW;AACpC,QAAM,gBAAgB,yBAAyB;AAG/C,MAAI,SAAS,cAAc;AACzB,UAAM,WAAW,QAAQ;AACzB,UAAMA,UAAS,SAAS;AACxB,UAAMC,eAAc;AAAA,MAClB,qBAAmB,aAAQ,eAAR,mBAAoB,UAAS;AAAA,MAChD,aAAaD;AAAA,MACb,YAAY,QAAQ;AAAA,MACpB,cAAa,aAAQ,WAAW,QAAnB,mBAAwB,QAAQ,aAAa;AAAA,MAC1D,sBAAsB;AAAA,IACxB;AAEA,QAAI,OAAOA,SAAQ;AAEjB,oBAAc,OAAOA,SAA4B,GAAG;AAEpD,UAAI,MAAM;AAAA,QACR,QAAQC,aAAY;AAAA,QACpB,MAAM;AAAA,QACN,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,WAAOA;AAAA,EACT;AAGA,MAAI;AAGJ,MAAI,QAAQ,MAAM;AAChB,aAAS;AAAA,MACP,QAAQ,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,KAAK;AAAA,MACxD,QAAQ,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,KAAK;AAAA,IAC1D;AAAA,EACF,aAES,aAAQ,aAAR,mBAAkB,UAAS,SAAS;AAC3C,aAAU,QAAQ,SAAiB;AAAA,EACrC;AAEA,QAAM,cAAc;AAAA,IAClB,qBAAmB,aAAQ,eAAR,mBAAoB,YAAS,aAAQ,eAAR,mBAAoB,SAAQ;AAAA,IAC5E,aAAa;AAAA,IACb,YAAY,QAAQ;AAAA,IACpB,iBAAiB;AAAA,MACf,OAAM,aAAQ,eAAR,mBAAoB;AAAA,MAC1B,QAAO,aAAQ,eAAR,mBAAoB;AAAA,MAC3B,WAAU,aAAQ,eAAR,mBAAoB;AAAA,MAC9B,gBAAe,aAAQ,eAAR,mBAAoB;AAAA,MACnC,SAAQ,aAAQ,eAAR,mBAAoB;AAAA,MAC5B,WAAU,aAAQ,eAAR,mBAAoB;AAAA,MAC9B,UAAS,aAAQ,eAAR,mBAAoB;AAAA,MAC7B,YAAW,aAAQ,eAAR,mBAAoB;AAAA,MAC/B,aAAY,aAAQ,eAAR,mBAAoB;AAAA,MAChC,cAAa,aAAQ,eAAR,mBAAoB;AAAA,MACjC,SAAQ,aAAQ,eAAR,mBAAoB;AAAA,IAC9B;AAAA,IACA,mBAAkB,aAAQ,eAAR,mBAAoB;AAAA;AAAA,IACtC,QAAO,aAAQ,eAAR,mBAAoB;AAAA;AAAA,IAC3B,aAAY,aAAQ,eAAR,mBAAoB;AAAA;AAAA,IAChC,aAAY,aAAQ,eAAR,mBAAoB;AAAA;AAAA,EAClC;AAEA,MAAI,OAAO,QAAQ;AAEjB,kBAAc,OAAO,QAA4B,KAAK,EAAE,QAAQ,CAAC;AAEjE,QAAI,QAAQ,MAAM;AAChB,UAAI,UAAU,QAAQ,MAAM,EAAE,OAAO,EAAE,CAAC;AAAA,IAC1C,OACK;AACH,UAAI,MAAM;AAAA,QACR,QAAQ,YAAY;AAAA,QACpB,MAAM;AAAA;AAAA,QACN,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAGO,MAAM,qBAAqB,OAAO,aAA+B,gBAAyB;AAC/F,QAAM,CAAC,WAAW,QAAQ,IAAI;AAE9B,MAAI;AAIF,UAAM,WAAW,MAAM,eAAe,SAAS,SAAS,GAAG,UAAU,SAAS,GAAG,aAAa,EAAE,MAAM,GAAG,QAAQ,UAAU,CAAC;AAC5H,WAAO,SAAS,SAAS,IAAI,SAAS,CAAC,IAAI;AAAA,EAC7C,SACO,OAAO;AACZ,YAAQ,MAAM,oCAAoC,KAAK;AACvD,WAAO;AAAA,EACT;AACF;AAGO,MAAM,oBAAoB,CAAC,aAAa;AAC7C,QAAM,OAAO,SAAS,gBAAgB;AAGtC,QAAM,YAAY,OAAO,WAAW,SAAS,iBAAiB;AAC9D,QAAM,WAAW,OAAO,WAAW,SAAS,gBAAgB;AAE5D,MAAI,MAAM,SAAS,KAAK,MAAM,QAAQ,GAAG;AACvC,YAAQ,MAAM,iCAAiC;AAAA,MAC7C,WAAW,SAAS;AAAA,MACpB,UAAU,SAAS;AAAA,MACnB,YAAY,SAAS;AAAA,IACvB,CAAC;AACD,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,YAAY;AAAA,MACV;AAAA,MACA,OAAO,GAAG,IAAI,KAAK,CAAC,SAAS,iBAAiB,SAAS,sBAAsB,SAAS,0BAA0B,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,MAC5I,SAAS,SAAS;AAAA,MAClB,cAAc,SAAS;AAAA,MACvB,oBAAoB,SAAS;AAAA,MAC7B,YAAY,SAAS;AAAA,MACrB,KAAK,YAAY,SAAS,EAAE;AAAA,IAC9B;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aAAa,CAAC,WAAW,QAAQ;AAAA,IACnC;AAAA,IACA,sBAAsB;AAAA,EACxB;AACF;AAGO,MAAM,uBAAuB,CAAC,aAA+B,KAAU,YAAoC;AAChH,QAAM,WAAU,mCAAS,YAAW;AACpC,QAAM,gBAAgB,yBAAyB;AAC/C,gBAAc,OAAO,aAAa,KAAK,EAAE,QAAQ,CAAC;AAClD,SAAO;AACT;AAGO,MAAM,uBAAuB,MAAY;AAC9C,QAAM,gBAAgB,yBAAyB;AAC/C,gBAAc,OAAO;AACvB;","names":["center","addressData"]}
@@ -0,0 +1,5 @@
1
+ import { Feature } from 'geojson';
2
+ export declare const osmCategoryToLayer: (category?: string) => string;
3
+ export declare const normalizePhotonFeature: (feature: any) => Feature;
4
+ export declare const normalizeNominatimResult: (data: any) => Feature;
5
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAGjC,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,KAAG,MAoBtD,CAAA;AAkCD,eAAO,MAAM,sBAAsB,GAAI,SAAS,GAAG,KAAG,OAuCrD,CAAA;AAGD,eAAO,MAAM,wBAAwB,GAAI,MAAM,GAAG,KAAG,OAkCpD,CAAA"}
@@ -0,0 +1,192 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ const osmCategoryToLayer = (category) => {
21
+ switch (category) {
22
+ case "house":
23
+ case "building":
24
+ return "address";
25
+ case "street":
26
+ case "road":
27
+ return "street";
28
+ case "city":
29
+ case "town":
30
+ case "village":
31
+ case "hamlet":
32
+ case "locality":
33
+ return "locality";
34
+ case "district":
35
+ case "suburb":
36
+ case "neighbourhood":
37
+ return "neighbourhood";
38
+ case "county":
39
+ return "county";
40
+ case "state":
41
+ case "region":
42
+ return "region";
43
+ case "country":
44
+ return "country";
45
+ default:
46
+ return category || "venue";
47
+ }
48
+ };
49
+ const SUBDIVISION_ABBREVIATIONS = {
50
+ CA: {
51
+ "alberta": "AB",
52
+ "british columbia": "BC",
53
+ "manitoba": "MB",
54
+ "new brunswick": "NB",
55
+ "newfoundland and labrador": "NL",
56
+ "northwest territories": "NT",
57
+ "nova scotia": "NS",
58
+ "nunavut": "NU",
59
+ "ontario": "ON",
60
+ "prince edward island": "PE",
61
+ "quebec": "QC",
62
+ "qu\xE9bec": "QC",
63
+ "saskatchewan": "SK",
64
+ "yukon": "YT"
65
+ },
66
+ US: {
67
+ "alabama": "AL",
68
+ "alaska": "AK",
69
+ "arizona": "AZ",
70
+ "arkansas": "AR",
71
+ "california": "CA",
72
+ "colorado": "CO",
73
+ "connecticut": "CT",
74
+ "delaware": "DE",
75
+ "district of columbia": "DC",
76
+ "florida": "FL",
77
+ "georgia": "GA",
78
+ "hawaii": "HI",
79
+ "idaho": "ID",
80
+ "illinois": "IL",
81
+ "indiana": "IN",
82
+ "iowa": "IA",
83
+ "kansas": "KS",
84
+ "kentucky": "KY",
85
+ "louisiana": "LA",
86
+ "maine": "ME",
87
+ "maryland": "MD",
88
+ "massachusetts": "MA",
89
+ "michigan": "MI",
90
+ "minnesota": "MN",
91
+ "mississippi": "MS",
92
+ "missouri": "MO",
93
+ "montana": "MT",
94
+ "nebraska": "NE",
95
+ "nevada": "NV",
96
+ "new hampshire": "NH",
97
+ "new jersey": "NJ",
98
+ "new mexico": "NM",
99
+ "new york": "NY",
100
+ "north carolina": "NC",
101
+ "north dakota": "ND",
102
+ "ohio": "OH",
103
+ "oklahoma": "OK",
104
+ "oregon": "OR",
105
+ "pennsylvania": "PA",
106
+ "rhode island": "RI",
107
+ "south carolina": "SC",
108
+ "south dakota": "SD",
109
+ "tennessee": "TN",
110
+ "texas": "TX",
111
+ "utah": "UT",
112
+ "vermont": "VT",
113
+ "virginia": "VA",
114
+ "washington": "WA",
115
+ "west virginia": "WV",
116
+ "wisconsin": "WI",
117
+ "wyoming": "WY"
118
+ }
119
+ };
120
+ const subdivisionAbbreviation = (countryCode, state) => {
121
+ if (!state) return "";
122
+ const table = SUBDIVISION_ABBREVIATIONS[(countryCode || "").toUpperCase()];
123
+ return table && table[state.trim().toLowerCase()] || "";
124
+ };
125
+ const normalizePhotonFeature = (feature) => {
126
+ const p = feature.properties || {};
127
+ const region = p.state || "";
128
+ const country = p.country || "";
129
+ const country_a = (p.countrycode || "").toUpperCase();
130
+ const region_a = subdivisionAbbreviation(country_a, region);
131
+ const locality = p.city || p.town || p.village || p.district || "";
132
+ const name = p.name || [p.housenumber, p.street].filter(Boolean).join(" ") || locality;
133
+ const label = [name, locality && locality !== name ? locality : null, region_a || region, country].filter(Boolean).join(", ");
134
+ const bbox = Array.isArray(p.extent) && p.extent.length === 4 ? [p.extent[0], p.extent[3], p.extent[2], p.extent[1]] : void 0;
135
+ return __spreadProps(__spreadValues({
136
+ type: "Feature",
137
+ geometry: feature.geometry
138
+ }, bbox ? { bbox } : {}), {
139
+ properties: {
140
+ name,
141
+ label,
142
+ housenumber: p.housenumber,
143
+ street: p.street,
144
+ locality,
145
+ neighbourhood: p.district,
146
+ county: p.county,
147
+ region,
148
+ region_a,
149
+ // mapped from the full subdivision name where known (SUBDIVISION_ABBREVIATIONS)
150
+ country,
151
+ country_a,
152
+ postalcode: p.postcode,
153
+ gid: p.osm_id != null ? `osm:${p.osm_type}:${p.osm_id}` : void 0,
154
+ layer: osmCategoryToLayer(p.type)
155
+ }
156
+ });
157
+ };
158
+ const normalizeNominatimResult = (data) => {
159
+ const a = data.address || {};
160
+ const region_a = (a["ISO3166-2-lvl4"] || "").split("-")[1] || "";
161
+ const locality = a.city || a.town || a.village || a.municipality || a.suburb || a.neighbourhood || a.county || "";
162
+ const name = a.road ? [a.house_number, a.road].filter(Boolean).join(" ") : locality || (data.display_name || "").split(",")[0];
163
+ const bb = data.boundingbox;
164
+ const bbox = Array.isArray(bb) && bb.length === 4 ? [Number(bb[2]), Number(bb[0]), Number(bb[3]), Number(bb[1])] : void 0;
165
+ return __spreadProps(__spreadValues({
166
+ type: "Feature",
167
+ geometry: { type: "Point", coordinates: [Number(data.lon), Number(data.lat)] }
168
+ }, bbox ? { bbox } : {}), {
169
+ properties: {
170
+ name,
171
+ label: data.display_name || "",
172
+ housenumber: a.house_number,
173
+ street: a.road,
174
+ locality,
175
+ neighbourhood: a.neighbourhood || a.suburb,
176
+ county: a.county,
177
+ region: a.state,
178
+ region_a,
179
+ country: a.country,
180
+ country_a: (a.country_code || "").toUpperCase(),
181
+ postalcode: a.postcode,
182
+ gid: data.osm_id != null ? `osm:${data.osm_type}:${data.osm_id}` : void 0,
183
+ layer: osmCategoryToLayer(data.addresstype || data.type)
184
+ }
185
+ });
186
+ };
187
+ export {
188
+ normalizeNominatimResult,
189
+ normalizePhotonFeature,
190
+ osmCategoryToLayer
191
+ };
192
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/adapters.ts"],"sourcesContent":["import { Feature } from 'geojson'\r\n\r\n// Map OSM place categories onto Pelias-style layer names (best effort, display-only).\r\nexport const osmCategoryToLayer = (category?: string): string => {\r\n switch (category) {\r\n case 'house':\r\n case 'building': return 'address'\r\n case 'street':\r\n case 'road': return 'street'\r\n case 'city':\r\n case 'town':\r\n case 'village':\r\n case 'hamlet':\r\n case 'locality': return 'locality'\r\n case 'district':\r\n case 'suburb':\r\n case 'neighbourhood': return 'neighbourhood'\r\n case 'county': return 'county'\r\n case 'state':\r\n case 'region': return 'region'\r\n case 'country': return 'country'\r\n default: return category || 'venue'\r\n }\r\n}\r\n\r\n// Photon (OSM) returns full subdivision names (\"Ontario\"); the rest of the app expects\r\n// Pelias-style abbreviations (\"ON\"). Map common North American ones so the public\r\n// fallback populates region_a the way Geocode Earth / Pelias do.\r\nconst SUBDIVISION_ABBREVIATIONS: Record<string, Record<string, string>> = {\r\n CA: {\r\n 'alberta': 'AB', 'british columbia': 'BC', 'manitoba': 'MB', 'new brunswick': 'NB',\r\n 'newfoundland and labrador': 'NL', 'northwest territories': 'NT', 'nova scotia': 'NS',\r\n 'nunavut': 'NU', 'ontario': 'ON', 'prince edward island': 'PE', 'quebec': 'QC',\r\n 'québec': 'QC', 'saskatchewan': 'SK', 'yukon': 'YT',\r\n },\r\n US: {\r\n 'alabama': 'AL', 'alaska': 'AK', 'arizona': 'AZ', 'arkansas': 'AR', 'california': 'CA',\r\n 'colorado': 'CO', 'connecticut': 'CT', 'delaware': 'DE', 'district of columbia': 'DC',\r\n 'florida': 'FL', 'georgia': 'GA', 'hawaii': 'HI', 'idaho': 'ID', 'illinois': 'IL',\r\n 'indiana': 'IN', 'iowa': 'IA', 'kansas': 'KS', 'kentucky': 'KY', 'louisiana': 'LA',\r\n 'maine': 'ME', 'maryland': 'MD', 'massachusetts': 'MA', 'michigan': 'MI', 'minnesota': 'MN',\r\n 'mississippi': 'MS', 'missouri': 'MO', 'montana': 'MT', 'nebraska': 'NE', 'nevada': 'NV',\r\n 'new hampshire': 'NH', 'new jersey': 'NJ', 'new mexico': 'NM', 'new york': 'NY',\r\n 'north carolina': 'NC', 'north dakota': 'ND', 'ohio': 'OH', 'oklahoma': 'OK', 'oregon': 'OR',\r\n 'pennsylvania': 'PA', 'rhode island': 'RI', 'south carolina': 'SC', 'south dakota': 'SD',\r\n 'tennessee': 'TN', 'texas': 'TX', 'utah': 'UT', 'vermont': 'VT', 'virginia': 'VA',\r\n 'washington': 'WA', 'west virginia': 'WV', 'wisconsin': 'WI', 'wyoming': 'WY',\r\n },\r\n}\r\n\r\nconst subdivisionAbbreviation = (countryCode: string, state?: string): string => {\r\n if (!state) return ''\r\n const table = SUBDIVISION_ABBREVIATIONS[(countryCode || '').toUpperCase()]\r\n return (table && table[state.trim().toLowerCase()]) || ''\r\n}\r\n\r\n// Normalize a Photon autocomplete feature into the Pelias feature shape.\r\nexport const normalizePhotonFeature = (feature: any): Feature => {\r\n const p = feature.properties || {}\r\n const region = p.state || ''\r\n const country = p.country || ''\r\n const country_a = (p.countrycode || '').toUpperCase()\r\n const region_a = subdivisionAbbreviation(country_a, region)\r\n const locality = p.city || p.town || p.village || p.district || ''\r\n const name = p.name || [p.housenumber, p.street].filter(Boolean).join(' ') || locality\r\n // Match the Pelias label shape (\"Name, City, ON, Country\") so label-parsing consumers work.\r\n const label = [name, locality && locality !== name ? locality : null, region_a || region, country]\r\n .filter(Boolean)\r\n .join(', ')\r\n\r\n // Photon `extent` is [west, north, east, south]; Pelias bbox is [west, south, east, north].\r\n const bbox: [number, number, number, number] | undefined = Array.isArray(p.extent) && p.extent.length === 4\r\n ? [p.extent[0], p.extent[3], p.extent[2], p.extent[1]]\r\n : undefined\r\n\r\n return {\r\n type: 'Feature',\r\n geometry: feature.geometry,\r\n ...(bbox ? { bbox } : {}),\r\n properties: {\r\n name,\r\n label,\r\n housenumber: p.housenumber,\r\n street: p.street,\r\n locality,\r\n neighbourhood: p.district,\r\n county: p.county,\r\n region,\r\n region_a, // mapped from the full subdivision name where known (SUBDIVISION_ABBREVIATIONS)\r\n country,\r\n country_a,\r\n postalcode: p.postcode,\r\n gid: p.osm_id != null ? `osm:${p.osm_type}:${p.osm_id}` : undefined,\r\n layer: osmCategoryToLayer(p.type),\r\n },\r\n } as Feature\r\n}\r\n\r\n// Normalize a Nominatim reverse result into the Pelias feature shape.\r\nexport const normalizeNominatimResult = (data: any): Feature => {\r\n const a = data.address || {}\r\n // ISO3166-2-lvl4 looks like \"CA-ON\"; the suffix is the Pelias region_a abbreviation.\r\n const region_a = (a['ISO3166-2-lvl4'] || '').split('-')[1] || ''\r\n const locality = a.city || a.town || a.village || a.municipality || a.suburb || a.neighbourhood || a.county || ''\r\n const name = a.road ? [a.house_number, a.road].filter(Boolean).join(' ') : (locality || (data.display_name || '').split(',')[0])\r\n\r\n // Nominatim boundingbox is [minlat, maxlat, minlon, maxlon]; Pelias bbox is [west, south, east, north].\r\n const bb = data.boundingbox\r\n const bbox: [number, number, number, number] | undefined = Array.isArray(bb) && bb.length === 4\r\n ? [Number(bb[2]), Number(bb[0]), Number(bb[3]), Number(bb[1])]\r\n : undefined\r\n\r\n return {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: [Number(data.lon), Number(data.lat)] },\r\n ...(bbox ? { bbox } : {}),\r\n properties: {\r\n name,\r\n label: data.display_name || '',\r\n housenumber: a.house_number,\r\n street: a.road,\r\n locality,\r\n neighbourhood: a.neighbourhood || a.suburb,\r\n county: a.county,\r\n region: a.state,\r\n region_a,\r\n country: a.country,\r\n country_a: (a.country_code || '').toUpperCase(),\r\n postalcode: a.postcode,\r\n gid: data.osm_id != null ? `osm:${data.osm_type}:${data.osm_id}` : undefined,\r\n layer: osmCategoryToLayer(data.addresstype || data.type),\r\n },\r\n } as Feature\r\n}\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,6 @@
1
+ export declare const GEOCODE_EARTH_API_KEY: string;
2
+ export declare const PHOTON_URL: string;
3
+ export declare const NOMINATIM_URL: string;
4
+ export declare const PELIAS_BASE: string;
5
+ export declare const USE_PELIAS: boolean;
6
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/config.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,qBAAqB,QAAgD,CAAA;AAKlF,eAAO,MAAM,UAAU,QAAmE,CAAA;AAC1F,eAAO,MAAM,aAAa,QAAiF,CAAA;AAG3G,eAAO,MAAM,WAAW,QAA2E,CAAA;AACnG,eAAO,MAAM,UAAU,SAAuB,CAAA"}
@@ -0,0 +1,14 @@
1
+ const GEOCODE_EARTH_API_KEY = process.env.NEXT_PUBLIC_GEOCODE_EARTH_API_KEY;
2
+ const PELIAS_URL = process.env.NEXT_PUBLIC_GEOCODER_URL;
3
+ const PHOTON_URL = process.env.NEXT_PUBLIC_PHOTON_URL || "https://photon.komoot.io";
4
+ const NOMINATIM_URL = process.env.NEXT_PUBLIC_NOMINATIM_URL || "https://nominatim.openstreetmap.org";
5
+ const PELIAS_BASE = GEOCODE_EARTH_API_KEY ? "https://api.geocode.earth" : PELIAS_URL || null;
6
+ const USE_PELIAS = Boolean(PELIAS_BASE);
7
+ export {
8
+ GEOCODE_EARTH_API_KEY,
9
+ NOMINATIM_URL,
10
+ PELIAS_BASE,
11
+ PHOTON_URL,
12
+ USE_PELIAS
13
+ };
14
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/config.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\r\n// Geocoding provider resolution\r\n//\r\n// Geocode Earth is hosted Pelias, so it and a self-hosted Pelias instance share\r\n// one code path (`/v1/autocomplete`, `/v1/reverse`, and the same response shape).\r\n// When neither a key nor a self-hosted URL is configured we fall back to free,\r\n// no-key public OSM services so self-hosters get working geocoding out of the box:\r\n// - autocomplete -> Photon (komoot), which is built for per-keystroke search.\r\n// - reverse -> Nominatim, fine for occasional point lookups.\r\n// (Nominatim's usage policy forbids autocomplete-style traffic, which is why\r\n// Photon handles suggestions.) Both responses are normalized by ./adapters into\r\n// the Pelias property shape (`locality`, `region_a`, `country_a`, `label`, ...)\r\n// that parseLocation / handleLocationSelect already expect.\r\n// ---------------------------------------------------------------------------\r\n\r\nexport const GEOCODE_EARTH_API_KEY = process.env.NEXT_PUBLIC_GEOCODE_EARTH_API_KEY\r\n// Self-hosted Pelias-compatible endpoint (no key). e.g. https://pelias.example.com\r\nconst PELIAS_URL = process.env.NEXT_PUBLIC_GEOCODER_URL\r\n// Public OSM fallbacks. Default to the community instances; self-hosters can point at\r\n// their own Photon/Nominatim via env to avoid the public instances' rate limits.\r\nexport const PHOTON_URL = process.env.NEXT_PUBLIC_PHOTON_URL || 'https://photon.komoot.io'\r\nexport const NOMINATIM_URL = process.env.NEXT_PUBLIC_NOMINATIM_URL || 'https://nominatim.openstreetmap.org'\r\n\r\n// Key wins (best quality), then self-hosted Pelias, otherwise public OSM.\r\nexport const PELIAS_BASE = GEOCODE_EARTH_API_KEY ? 'https://api.geocode.earth' : PELIAS_URL || null\r\nexport const USE_PELIAS = Boolean(PELIAS_BASE)\r\n"],"mappings":"AAeO,MAAM,wBAAwB,QAAQ,IAAI;AAEjD,MAAM,aAAa,QAAQ,IAAI;AAGxB,MAAM,aAAa,QAAQ,IAAI,0BAA0B;AACzD,MAAM,gBAAgB,QAAQ,IAAI,6BAA6B;AAG/D,MAAM,cAAc,wBAAwB,8BAA8B,cAAc;AACxF,MAAM,aAAa,QAAQ,WAAW;","names":[]}
@@ -0,0 +1,8 @@
1
+ import { Feature } from 'geojson';
2
+ export declare const autocompleteGeocode: (text: string, countryCode: string, size: number) => Promise<Feature[]>;
3
+ export declare const reverseGeocode: (latitude: string, longitude: string, countryCode: string, { size, coarse, layers }?: {
4
+ size?: number;
5
+ coarse?: boolean;
6
+ layers?: string;
7
+ }) => Promise<Feature[]>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAiCjC,eAAO,MAAM,mBAAmB,GAAU,MAAM,MAAM,EAAE,aAAa,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,EAAE,CAU5G,CAAA;AAED,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,2BAAsC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,KAC9F,OAAO,CAAC,OAAO,EAAE,CAUnB,CAAA"}
@@ -0,0 +1,44 @@
1
+ import { USE_PELIAS } from "./config";
2
+ import { peliasAutocomplete, peliasReverse } from "./pelias";
3
+ import { photonAutocomplete, nominatimReverse } from "./osm";
4
+ let peliasAuthFailed = false;
5
+ const peliasActive = () => USE_PELIAS && !peliasAuthFailed;
6
+ const isAuthError = (error) => {
7
+ const message = error instanceof Error ? error.message : String(error);
8
+ return message.includes("401") || message.includes("403");
9
+ };
10
+ const handlePeliasFailure = (error, fallbackName) => {
11
+ if (isAuthError(error)) {
12
+ peliasAuthFailed = true;
13
+ console.warn(
14
+ `Geocoder: the configured provider rejected the API key (auth error). Falling back to public OSM services (Photon/Nominatim) for the rest of this session.`
15
+ );
16
+ } else {
17
+ console.warn(`Geocoder: provider request failed; falling back to ${fallbackName}.`, error);
18
+ }
19
+ };
20
+ const autocompleteGeocode = async (text, countryCode, size) => {
21
+ if (peliasActive()) {
22
+ try {
23
+ return await peliasAutocomplete(text, countryCode, size);
24
+ } catch (error) {
25
+ handlePeliasFailure(error, "Photon");
26
+ }
27
+ }
28
+ return photonAutocomplete(text, countryCode, size);
29
+ };
30
+ const reverseGeocode = async (latitude, longitude, countryCode, { size = 1, coarse = false, layers } = {}) => {
31
+ if (peliasActive()) {
32
+ try {
33
+ return await peliasReverse(latitude, longitude, countryCode, { size, coarse, layers });
34
+ } catch (error) {
35
+ handlePeliasFailure(error, "Nominatim");
36
+ }
37
+ }
38
+ return nominatimReverse(latitude, longitude, { coarse });
39
+ };
40
+ export {
41
+ autocompleteGeocode,
42
+ reverseGeocode
43
+ };
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/index.ts"],"sourcesContent":["import { Feature } from 'geojson'\r\nimport { USE_PELIAS } from './config'\r\nimport { peliasAutocomplete, peliasReverse } from './pelias'\r\nimport { photonAutocomplete, nominatimReverse } from './osm'\r\n\r\n// Provider-agnostic entry points. The preferred provider (Geocode Earth or a\r\n// self-hosted Pelias) is resolved in ./config from env vars; if it fails we fall\r\n// back to the free public OSM services so address search keeps working.\r\n//\r\n// A bad/expired/origin-restricted key surfaces as a 401/403. Autocomplete fires\r\n// on every keystroke, so once we see an auth failure we stop retrying the keyed\r\n// provider for the rest of the session and serve results directly from public OSM.\r\nlet peliasAuthFailed = false\r\n\r\nconst peliasActive = (): boolean => USE_PELIAS && !peliasAuthFailed\r\n\r\nconst isAuthError = (error: unknown): boolean => {\r\n const message = error instanceof Error ? error.message : String(error)\r\n return message.includes('401') || message.includes('403')\r\n}\r\n\r\nconst handlePeliasFailure = (error: unknown, fallbackName: string): void => {\r\n if (isAuthError(error)) {\r\n peliasAuthFailed = true\r\n console.warn(\r\n `Geocoder: the configured provider rejected the API key (auth error). ` +\r\n `Falling back to public OSM services (Photon/Nominatim) for the rest of this session.`,\r\n )\r\n } else {\r\n console.warn(`Geocoder: provider request failed; falling back to ${fallbackName}.`, error)\r\n }\r\n}\r\n\r\nexport const autocompleteGeocode = async (text: string, countryCode: string, size: number): Promise<Feature[]> => {\r\n if (peliasActive()) {\r\n try {\r\n return await peliasAutocomplete(text, countryCode, size)\r\n }\r\n catch (error) {\r\n handlePeliasFailure(error, 'Photon')\r\n }\r\n }\r\n return photonAutocomplete(text, countryCode, size)\r\n}\r\n\r\nexport const reverseGeocode = async (\r\n latitude: string,\r\n longitude: string,\r\n countryCode: string,\r\n { size = 1, coarse = false, layers }: { size?: number; coarse?: boolean; layers?: string } = {},\r\n): Promise<Feature[]> => {\r\n if (peliasActive()) {\r\n try {\r\n return await peliasReverse(latitude, longitude, countryCode, { size, coarse, layers })\r\n }\r\n catch (error) {\r\n handlePeliasFailure(error, 'Nominatim')\r\n }\r\n }\r\n return nominatimReverse(latitude, longitude, { coarse })\r\n}\r\n"],"mappings":"AACA,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB,qBAAqB;AAClD,SAAS,oBAAoB,wBAAwB;AASrD,IAAI,mBAAmB;AAEvB,MAAM,eAAe,MAAe,cAAc,CAAC;AAEnD,MAAM,cAAc,CAAC,UAA4B;AAC/C,QAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,SAAO,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,KAAK;AAC1D;AAEA,MAAM,sBAAsB,CAAC,OAAgB,iBAA+B;AAC1E,MAAI,YAAY,KAAK,GAAG;AACtB,uBAAmB;AACnB,YAAQ;AAAA,MACN;AAAA,IAEF;AAAA,EACF,OAAO;AACL,YAAQ,KAAK,sDAAsD,YAAY,KAAK,KAAK;AAAA,EAC3F;AACF;AAEO,MAAM,sBAAsB,OAAO,MAAc,aAAqB,SAAqC;AAChH,MAAI,aAAa,GAAG;AAClB,QAAI;AACF,aAAO,MAAM,mBAAmB,MAAM,aAAa,IAAI;AAAA,IACzD,SACO,OAAO;AACZ,0BAAoB,OAAO,QAAQ;AAAA,IACrC;AAAA,EACF;AACA,SAAO,mBAAmB,MAAM,aAAa,IAAI;AACnD;AAEO,MAAM,iBAAiB,OAC5B,UACA,WACA,aACA,EAAE,OAAO,GAAG,SAAS,OAAO,OAAO,IAA0D,CAAC,MACvE;AACvB,MAAI,aAAa,GAAG;AAClB,QAAI;AACF,aAAO,MAAM,cAAc,UAAU,WAAW,aAAa,EAAE,MAAM,QAAQ,OAAO,CAAC;AAAA,IACvF,SACO,OAAO;AACZ,0BAAoB,OAAO,WAAW;AAAA,IACxC;AAAA,EACF;AACA,SAAO,iBAAiB,UAAU,WAAW,EAAE,OAAO,CAAC;AACzD;","names":[]}
@@ -0,0 +1,6 @@
1
+ import { Feature } from 'geojson';
2
+ export declare const photonAutocomplete: (text: string, countryCode: string | undefined, size: number) => Promise<Feature[]>;
3
+ export declare const nominatimReverse: (latitude: string, longitude: string, { coarse }: {
4
+ coarse: boolean;
5
+ }) => Promise<Feature[]>;
6
+ //# sourceMappingURL=osm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osm.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/osm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAOjC,eAAO,MAAM,kBAAkB,GAAU,MAAM,MAAM,EAAE,aAAa,MAAM,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,EAAE,CAoBvH,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,YAAY;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,KAC9B,OAAO,CAAC,OAAO,EAAE,CAenB,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { PHOTON_URL, NOMINATIM_URL } from "./config";
2
+ import { normalizePhotonFeature, normalizeNominatimResult } from "./adapters";
3
+ const photonAutocomplete = async (text, countryCode, size) => {
4
+ const params = new URLSearchParams({ q: text, limit: String(size * 2), lang: "en" });
5
+ const response = await fetch(`${PHOTON_URL}/api?${params}`);
6
+ if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
7
+ const data = await response.json();
8
+ let features = (data.features || []).map(normalizePhotonFeature);
9
+ if (countryCode) {
10
+ const cc = countryCode.toUpperCase();
11
+ const inCountry = features.filter((f) => {
12
+ var _a;
13
+ const ca = (_a = f.properties) == null ? void 0 : _a.country_a;
14
+ return !ca || ca === cc;
15
+ });
16
+ if (inCountry.length) features = inCountry;
17
+ }
18
+ return features.slice(0, size);
19
+ };
20
+ const nominatimReverse = async (latitude, longitude, { coarse }) => {
21
+ const params = new URLSearchParams({
22
+ format: "jsonv2",
23
+ lat: latitude,
24
+ lon: longitude,
25
+ addressdetails: "1",
26
+ zoom: coarse ? "10" : "18"
27
+ // coarse -> city level, otherwise building level
28
+ });
29
+ const response = await fetch(`${NOMINATIM_URL}/reverse?${params}`);
30
+ if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
31
+ const data = await response.json();
32
+ if (!data || data.error || data.lat == null) return [];
33
+ return [normalizeNominatimResult(data)];
34
+ };
35
+ export {
36
+ nominatimReverse,
37
+ photonAutocomplete
38
+ };
39
+ //# sourceMappingURL=osm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/osm.ts"],"sourcesContent":["import { Feature } from 'geojson'\r\nimport { PHOTON_URL, NOMINATIM_URL } from './config'\r\nimport { normalizePhotonFeature, normalizeNominatimResult } from './adapters'\r\n\r\n// Free, no-key public OSM fallbacks. Photon serves autocomplete (it is built for\r\n// per-keystroke search); Nominatim serves reverse lookups (occasional, single point).\r\n\r\nexport const photonAutocomplete = async (text: string, countryCode: string | undefined, size: number): Promise<Feature[]> => {\r\n // Photon has no country filter, so over-fetch and post-filter by country code.\r\n const params = new URLSearchParams({ q: text, limit: String(size * 2), lang: 'en' })\r\n\r\n const response = await fetch(`${PHOTON_URL}/api?${params}`)\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`)\r\n\r\n const data = await response.json()\r\n let features: Feature[] = (data.features || []).map(normalizePhotonFeature)\r\n\r\n if (countryCode) {\r\n const cc = countryCode.toUpperCase()\r\n const inCountry = features.filter(f => {\r\n const ca = (f.properties as any)?.country_a\r\n return !ca || ca === cc\r\n })\r\n if (inCountry.length) features = inCountry\r\n }\r\n\r\n return features.slice(0, size)\r\n}\r\n\r\nexport const nominatimReverse = async (\r\n latitude: string,\r\n longitude: string,\r\n { coarse }: { coarse: boolean },\r\n): Promise<Feature[]> => {\r\n const params = new URLSearchParams({\r\n format: 'jsonv2',\r\n lat: latitude,\r\n lon: longitude,\r\n addressdetails: '1',\r\n zoom: coarse ? '10' : '18', // coarse -> city level, otherwise building level\r\n })\r\n\r\n const response = await fetch(`${NOMINATIM_URL}/reverse?${params}`)\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`)\r\n\r\n const data = await response.json()\r\n if (!data || data.error || data.lat == null) return []\r\n return [normalizeNominatimResult(data)]\r\n}\r\n"],"mappings":"AACA,SAAS,YAAY,qBAAqB;AAC1C,SAAS,wBAAwB,gCAAgC;AAK1D,MAAM,qBAAqB,OAAO,MAAc,aAAiC,SAAqC;AAE3H,QAAM,SAAS,IAAI,gBAAgB,EAAE,GAAG,MAAM,OAAO,OAAO,OAAO,CAAC,GAAG,MAAM,KAAK,CAAC;AAEnF,QAAM,WAAW,MAAM,MAAM,GAAG,UAAU,QAAQ,MAAM,EAAE;AAC1D,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB,SAAS,MAAM,EAAE;AAE1E,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,MAAI,YAAuB,KAAK,YAAY,CAAC,GAAG,IAAI,sBAAsB;AAE1E,MAAI,aAAa;AACf,UAAM,KAAK,YAAY,YAAY;AACnC,UAAM,YAAY,SAAS,OAAO,OAAK;AAnB3C;AAoBM,YAAM,MAAM,OAAE,eAAF,mBAAsB;AAClC,aAAO,CAAC,MAAM,OAAO;AAAA,IACvB,CAAC;AACD,QAAI,UAAU,OAAQ,YAAW;AAAA,EACnC;AAEA,SAAO,SAAS,MAAM,GAAG,IAAI;AAC/B;AAEO,MAAM,mBAAmB,OAC9B,UACA,WACA,EAAE,OAAO,MACc;AACvB,QAAM,SAAS,IAAI,gBAAgB;AAAA,IACjC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,IACL,gBAAgB;AAAA,IAChB,MAAM,SAAS,OAAO;AAAA;AAAA,EACxB,CAAC;AAED,QAAM,WAAW,MAAM,MAAM,GAAG,aAAa,YAAY,MAAM,EAAE;AACjE,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB,SAAS,MAAM,EAAE;AAE1E,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,MAAI,CAAC,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAM,QAAO,CAAC;AACrD,SAAO,CAAC,yBAAyB,IAAI,CAAC;AACxC;","names":[]}
@@ -0,0 +1,8 @@
1
+ import { Feature } from 'geojson';
2
+ export declare const peliasAutocomplete: (text: string, countryCode: string | undefined, size: number) => Promise<Feature[]>;
3
+ export declare const peliasReverse: (latitude: string, longitude: string, countryCode: string | undefined, { size, coarse, layers }: {
4
+ size: number;
5
+ coarse: boolean;
6
+ layers?: string;
7
+ }) => Promise<Feature[]>;
8
+ //# sourceMappingURL=pelias.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pelias.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/pelias.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAMjC,eAAO,MAAM,kBAAkB,GAAU,MAAM,MAAM,EAAE,aAAa,MAAM,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,EAAE,CAavH,CAAA;AAED,eAAO,MAAM,aAAa,GACxB,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,aAAa,MAAM,GAAG,SAAS,EAC/B,0BAA0B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAC3E,OAAO,CAAC,OAAO,EAAE,CAiBnB,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { GEOCODE_EARTH_API_KEY, PELIAS_BASE } from "./config";
2
+ const peliasAutocomplete = async (text, countryCode, size) => {
3
+ var _a;
4
+ const params = new URLSearchParams({
5
+ "text": text,
6
+ "size": String(size)
7
+ });
8
+ if (countryCode) params.set("boundary.country", countryCode.toUpperCase());
9
+ if (GEOCODE_EARTH_API_KEY) params.set("api_key", GEOCODE_EARTH_API_KEY);
10
+ const response = await fetch(`${PELIAS_BASE}/v1/autocomplete?${params}`);
11
+ if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
12
+ const geojson = await response.json();
13
+ return ((_a = geojson.features) == null ? void 0 : _a.length) ? geojson.features : [];
14
+ };
15
+ const peliasReverse = async (latitude, longitude, countryCode, { size, coarse, layers }) => {
16
+ var _a;
17
+ const params = new URLSearchParams({
18
+ "point.lat": latitude,
19
+ "point.lon": longitude,
20
+ "size": String(size)
21
+ });
22
+ if (countryCode) params.set("boundary.country", countryCode.toUpperCase());
23
+ if (coarse) params.set("layers", "coarse");
24
+ else if (layers) params.set("layers", layers);
25
+ if (GEOCODE_EARTH_API_KEY) params.set("api_key", GEOCODE_EARTH_API_KEY);
26
+ const response = await fetch(`${PELIAS_BASE}/v1/reverse?${params}`);
27
+ if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
28
+ const data = await response.json();
29
+ return ((_a = data.features) == null ? void 0 : _a.length) ? data.features : [];
30
+ };
31
+ export {
32
+ peliasAutocomplete,
33
+ peliasReverse
34
+ };
35
+ //# sourceMappingURL=pelias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/core/components/viewers/map/utils/geocoding/pelias.ts"],"sourcesContent":["import { Feature } from 'geojson'\r\nimport { GEOCODE_EARTH_API_KEY, PELIAS_BASE } from './config'\r\n\r\n// Geocode Earth and self-hosted Pelias share this dialect; only the base URL and\r\n// the (optional) api_key differ. Responses already match the shape the app expects.\r\n\r\nexport const peliasAutocomplete = async (text: string, countryCode: string | undefined, size: number): Promise<Feature[]> => {\r\n const params = new URLSearchParams({\r\n 'text': text,\r\n 'size': String(size),\r\n })\r\n if (countryCode) params.set('boundary.country', countryCode.toUpperCase())\r\n if (GEOCODE_EARTH_API_KEY) params.set('api_key', GEOCODE_EARTH_API_KEY)\r\n\r\n const response = await fetch(`${PELIAS_BASE}/v1/autocomplete?${params}`)\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`)\r\n\r\n const geojson = await response.json()\r\n return geojson.features?.length ? geojson.features : []\r\n}\r\n\r\nexport const peliasReverse = async (\r\n latitude: string,\r\n longitude: string,\r\n countryCode: string | undefined,\r\n { size, coarse, layers }: { size: number; coarse: boolean; layers?: string },\r\n): Promise<Feature[]> => {\r\n const params = new URLSearchParams({\r\n 'point.lat': latitude,\r\n 'point.lon': longitude,\r\n 'size': String(size),\r\n })\r\n if (countryCode) params.set('boundary.country', countryCode.toUpperCase())\r\n // coarse (municipality-level) takes precedence; otherwise honor an explicit layer filter.\r\n if (coarse) params.set('layers', 'coarse')\r\n else if (layers) params.set('layers', layers)\r\n if (GEOCODE_EARTH_API_KEY) params.set('api_key', GEOCODE_EARTH_API_KEY)\r\n\r\n const response = await fetch(`${PELIAS_BASE}/v1/reverse?${params}`)\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`)\r\n\r\n const data = await response.json()\r\n return data.features?.length ? data.features : []\r\n}\r\n"],"mappings":"AACA,SAAS,uBAAuB,mBAAmB;AAK5C,MAAM,qBAAqB,OAAO,MAAc,aAAiC,SAAqC;AAN7H;AAOE,QAAM,SAAS,IAAI,gBAAgB;AAAA,IACjC,QAAQ;AAAA,IACR,QAAQ,OAAO,IAAI;AAAA,EACrB,CAAC;AACD,MAAI,YAAa,QAAO,IAAI,oBAAoB,YAAY,YAAY,CAAC;AACzE,MAAI,sBAAuB,QAAO,IAAI,WAAW,qBAAqB;AAEtE,QAAM,WAAW,MAAM,MAAM,GAAG,WAAW,oBAAoB,MAAM,EAAE;AACvE,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB,SAAS,MAAM,EAAE;AAE1E,QAAM,UAAU,MAAM,SAAS,KAAK;AACpC,WAAO,aAAQ,aAAR,mBAAkB,UAAS,QAAQ,WAAW,CAAC;AACxD;AAEO,MAAM,gBAAgB,OAC3B,UACA,WACA,aACA,EAAE,MAAM,QAAQ,OAAO,MACA;AA1BzB;AA2BE,QAAM,SAAS,IAAI,gBAAgB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,IACb,QAAQ,OAAO,IAAI;AAAA,EACrB,CAAC;AACD,MAAI,YAAa,QAAO,IAAI,oBAAoB,YAAY,YAAY,CAAC;AAEzE,MAAI,OAAQ,QAAO,IAAI,UAAU,QAAQ;AAAA,WAChC,OAAQ,QAAO,IAAI,UAAU,MAAM;AAC5C,MAAI,sBAAuB,QAAO,IAAI,WAAW,qBAAqB;AAEtE,QAAM,WAAW,MAAM,MAAM,GAAG,WAAW,eAAe,MAAM,EAAE;AAClE,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB,SAAS,MAAM,EAAE;AAE1E,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,UAAK,aAAL,mBAAe,UAAS,KAAK,WAAW,CAAC;AAClD;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloudToolbar.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/viewers/pointcloud/PointCloudToolbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,wBAAgB,iBAAiB,sBAEhC"}
1
+ {"version":3,"file":"PointCloudToolbar.d.ts","sourceRoot":"","sources":["../../../../../src/core/components/viewers/pointcloud/PointCloudToolbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,wBAAgB,iBAAiB,sBAEhC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/core/components/viewers/pointcloud/PointCloudToolbar.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { pointcloudToolbarTools } from './src/tools'\nimport { ToolbarBody } from '../../ToolbarBody'\n\n// Audit Phase 1.A (F-1e): mirror of BimToolbar.tsx for the PointCloud\n// viewer. Lives in the PointCloud folder so the Toolbar.tsx dispatcher's\n// dynamic import keeps the Potree-adjacent tool registry on the\n// PointCloud lazy chunk.\nexport function PointCloudToolbar() {\n return <ToolbarBody viewer=\"pointcloud\" tools={pointcloudToolbarTools()} />\n}\n"],"mappings":";AAWS;AART,SAAS,8BAA8B;AACvC,SAAS,mBAAmB;AAMrB,SAAS,oBAAoB;AAClC,SAAO,oBAAC,eAAY,QAAO,cAAa,OAAO,uBAAuB,GAAG;AAC3E;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/core/components/viewers/pointcloud/PointCloudToolbar.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { pointcloudToolbarTools } from './src/tools'\nimport { ToolbarBody } from '../../ToolbarBody'\n\nexport function PointCloudToolbar() {\n return <ToolbarBody viewer=\"pointcloud\" tools={pointcloudToolbarTools()} />\n}\n"],"mappings":";AAOS;AAJT,SAAS,8BAA8B;AACvC,SAAS,mBAAmB;AAErB,SAAS,oBAAoB;AAClC,SAAO,oBAAC,eAAY,QAAO,cAAa,OAAO,uBAAuB,GAAG;AAC3E;","names":[]}
@@ -132,15 +132,13 @@ function PointCloudViewer() {
132
132
  const url = `${API_BASE}/private/${data.bucket}/${data.potreeMetadataFileKey}`;
133
133
  Potree.loadPointCloud(url, id, (e) => {
134
134
  pendingIdsRef.current.delete(id);
135
+ if (viewerRef.current !== viewer) return;
135
136
  try {
136
137
  viewer.scene.addPointCloud(e.pointcloud);
137
138
  loadedCloudsRef.current.set(id, e.pointcloud);
138
139
  const mat = e.pointcloud.material;
139
140
  mat.size = 1;
140
141
  mat.pointSizeType = Potree.PointSizeType.ADAPTIVE;
141
- e.pointcloud.position.x += 3;
142
- e.pointcloud.position.y -= 3;
143
- e.pointcloud.position.z += 4;
144
142
  const restored = !cameraRestoredRef.current && restoreCameraFromUrl(viewer, searchParams);
145
143
  cameraRestoredRef.current = true;
146
144
  if (!restored) viewer.fitToScreen();