@giro3d/piero 1.0.0-beta.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 (220) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +134 -0
  3. package/dist/Components.cjs.js +2 -0
  4. package/dist/Components.cjs.js.map +1 -0
  5. package/dist/Components.es.js +608 -0
  6. package/dist/Components.es.js.map +1 -0
  7. package/dist/assets/piero.css +9 -0
  8. package/dist/index.cjs.js +9 -0
  9. package/dist/index.cjs.js.map +1 -0
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.es.js +6971 -0
  12. package/dist/index.es.js.map +1 -0
  13. package/dist/modules.cjs.js +2 -0
  14. package/dist/modules.cjs.js.map +1 -0
  15. package/dist/modules.d.ts +2 -0
  16. package/dist/modules.es.js +856 -0
  17. package/dist/modules.es.js.map +1 -0
  18. package/dist/src/App.vue.d.ts +6 -0
  19. package/dist/src/api/BookmarkApi.d.ts +6 -0
  20. package/dist/src/api/DatasetApi.d.ts +61 -0
  21. package/dist/src/api/ViewApi.d.ts +4 -0
  22. package/dist/src/api/index.d.ts +4 -0
  23. package/dist/src/components/AlertToast.vue.d.ts +4 -0
  24. package/dist/src/components/AttributeGroup.vue.d.ts +7 -0
  25. package/dist/src/components/AttributeItem.vue.d.ts +6 -0
  26. package/dist/src/components/AttributePanel.vue.d.ts +14 -0
  27. package/dist/src/components/ColorFragment.vue.d.ts +6 -0
  28. package/dist/src/components/Configuration.d.ts +14 -0
  29. package/dist/src/components/CoordinateFragment.vue.d.ts +10 -0
  30. package/dist/src/components/DropdownView.vue.d.ts +13 -0
  31. package/dist/src/components/LinkFragment.vue.d.ts +10 -0
  32. package/dist/src/components/LoadingScreen.vue.d.ts +2 -0
  33. package/dist/src/components/MainView.vue.d.ts +5 -0
  34. package/dist/src/components/MinimapView.vue.d.ts +4 -0
  35. package/dist/src/components/ModalOverlay.vue.d.ts +25 -0
  36. package/dist/src/components/NavigationButtons.vue.d.ts +2 -0
  37. package/dist/src/components/OpacitySlider.vue.d.ts +10 -0
  38. package/dist/src/components/PanelContainer.vue.d.ts +10 -0
  39. package/dist/src/components/ProgressBar.vue.d.ts +14 -0
  40. package/dist/src/components/SearchOverlay.vue.d.ts +8 -0
  41. package/dist/src/components/SpinnerControl.vue.d.ts +2 -0
  42. package/dist/src/components/StatusBar.vue.d.ts +10 -0
  43. package/dist/src/components/SwitchToggle.vue.d.ts +25 -0
  44. package/dist/src/components/VisibilityControl.vue.d.ts +9 -0
  45. package/dist/src/components/atoms/ButtonArea.vue.d.ts +17 -0
  46. package/dist/src/components/atoms/ButtonWithIcon.vue.d.ts +11 -0
  47. package/dist/src/components/atoms/CompactList.vue.d.ts +17 -0
  48. package/dist/src/components/atoms/Icon.vue.d.ts +6 -0
  49. package/dist/src/components/atoms/IconList.vue.d.ts +17 -0
  50. package/dist/src/components/atoms/IconListButton.vue.d.ts +10 -0
  51. package/dist/src/components/atoms/ImportButton.vue.d.ts +13 -0
  52. package/dist/src/components/atoms/ListLabel.vue.d.ts +5 -0
  53. package/dist/src/components/atoms/ListLabelButton.vue.d.ts +11 -0
  54. package/dist/src/components/atoms/SectionCollapsible.vue.d.ts +30 -0
  55. package/dist/src/components/charts/BarChart.vue.d.ts +4 -0
  56. package/dist/src/components/charts/DoughnutChart.vue.d.ts +4 -0
  57. package/dist/src/components/panels/AboutPanel.vue.d.ts +2 -0
  58. package/dist/src/components/panels/AnalysisPanel.vue.d.ts +2 -0
  59. package/dist/src/components/panels/AnnotationItem.vue.d.ts +21 -0
  60. package/dist/src/components/panels/AnnotationPanel.vue.d.ts +2 -0
  61. package/dist/src/components/panels/BasemapItem.vue.d.ts +17 -0
  62. package/dist/src/components/panels/BookmarkItem.vue.d.ts +16 -0
  63. package/dist/src/components/panels/BookmarkPanel.vue.d.ts +2 -0
  64. package/dist/src/components/panels/DatagroupItem.vue.d.ts +18 -0
  65. package/dist/src/components/panels/DatasetItem.vue.d.ts +18 -0
  66. package/dist/src/components/panels/DatasetOrGroupItem.vue.d.ts +18 -0
  67. package/dist/src/components/panels/DatasetPanel.vue.d.ts +2 -0
  68. package/dist/src/components/panels/EmptyIndicator.vue.d.ts +6 -0
  69. package/dist/src/components/panels/LoadingIndicator.vue.d.ts +6 -0
  70. package/dist/src/components/panels/MeasurementItem.vue.d.ts +17 -0
  71. package/dist/src/components/panels/MeasurementPanel.vue.d.ts +2 -0
  72. package/dist/src/components/panels/OverlayItem.vue.d.ts +19 -0
  73. package/dist/src/components/panels/ShareBookmarkModal.vue.d.ts +5 -0
  74. package/dist/src/components/panels/analysis/ClippingBox.vue.d.ts +2 -0
  75. package/dist/src/components/panels/analysis/CrossSection.vue.d.ts +2 -0
  76. package/dist/src/components/panels/analysis/FloodingPlane.vue.d.ts +2 -0
  77. package/dist/src/components/panels/analysis/Statistics.vue.d.ts +2 -0
  78. package/dist/src/components/panels/analysis/ToolWrapper.vue.d.ts +28 -0
  79. package/dist/src/components/toolbar/ToolBar.vue.d.ts +9 -0
  80. package/dist/src/components/toolbar/ToolbarButton.vue.d.ts +12 -0
  81. package/dist/src/config-loader.d.ts +7 -0
  82. package/dist/src/constants.d.ts +7 -0
  83. package/dist/src/context.d.ts +35 -0
  84. package/dist/src/createPieroApp.d.ts +31 -0
  85. package/dist/src/events.d.ts +30 -0
  86. package/dist/src/giro3d/CameraControlsInspector.d.ts +17 -0
  87. package/dist/src/giro3d/EntityBuilder.d.ts +21 -0
  88. package/dist/src/giro3d/Graticule.d.ts +20 -0
  89. package/dist/src/giro3d/Grid.d.ts +11 -0
  90. package/dist/src/giro3d/LayerBuilder.d.ts +46 -0
  91. package/dist/src/giro3d/Measure3D.d.ts +20 -0
  92. package/dist/src/giro3d/Plane.d.ts +11 -0
  93. package/dist/src/giro3d/Skybox.d.ts +6 -0
  94. package/dist/src/giro3d/entities/FeatureCollectionEntity.d.ts +41 -0
  95. package/dist/src/giro3d/entities/PointCloudEntity.d.ts +45 -0
  96. package/dist/src/giro3d/entities/TiledPointCloudEntity.d.ts +13 -0
  97. package/dist/src/giro3d/entities/Tiles3dEntity.d.ts +11 -0
  98. package/dist/src/giro3d/entities/VectorLabelsEntity.d.ts +48 -0
  99. package/dist/src/giro3d/entities/VectorMeshEntity.d.ts +97 -0
  100. package/dist/src/giro3d/entities/VectorShapeEntity.d.ts +8 -0
  101. package/dist/src/giro3d/entities/flatPointCloud.d.ts +2 -0
  102. package/dist/src/giro3d/entities/tiledIfc.d.ts +2 -0
  103. package/dist/src/giro3d/entities/vector.d.ts +2 -0
  104. package/dist/src/giro3d/sources/GeopackageSource.d.ts +20 -0
  105. package/dist/src/giro3d/sources/ShapefileSource.d.ts +20 -0
  106. package/dist/src/giro3d/sources/mixins.d.ts +60 -0
  107. package/dist/src/index.d.ts +17 -0
  108. package/dist/src/loaders/csv.d.ts +3 -0
  109. package/dist/src/loaders/las.d.ts +3 -0
  110. package/dist/src/loaders/loader.d.ts +29 -0
  111. package/dist/src/loaders/loader.test.d.ts +1 -0
  112. package/dist/src/loaders/userData.d.ts +8 -0
  113. package/dist/src/loaders/vector.d.ts +4 -0
  114. package/dist/src/module.d.ts +11 -0
  115. package/dist/src/modules/IFCLoader.d.ts +9 -0
  116. package/dist/src/modules/PLYLoader.d.ts +9 -0
  117. package/dist/src/modules/PotreeLoader.d.ts +9 -0
  118. package/dist/src/modules/Tour.d.ts +17 -0
  119. package/dist/src/modules/ifc/IfcEntity.d.ts +84 -0
  120. package/dist/src/modules/ifc/IfcEntityInspector.d.ts +7 -0
  121. package/dist/src/modules/ifc/IfcPropertyView.vue.d.ts +6 -0
  122. package/dist/src/modules/ifc/IfcSubtree.vue.d.ts +7 -0
  123. package/dist/src/modules/index.d.ts +5 -0
  124. package/dist/src/modules/ply/PlyEntity.d.ts +33 -0
  125. package/dist/src/providers/Alticoding.d.ts +32 -0
  126. package/dist/src/providers/BanProvider.d.ts +11 -0
  127. package/dist/src/providers/Geocoding.d.ts +7 -0
  128. package/dist/src/providers/IgnProvider.d.ts +11 -0
  129. package/dist/src/services/AnalysisManager.d.ts +10 -0
  130. package/dist/src/services/AnnotationManager.d.ts +48 -0
  131. package/dist/src/services/CameraController.d.ts +99 -0
  132. package/dist/src/services/DatasetManager.d.ts +27 -0
  133. package/dist/src/services/Giro3DManager.d.ts +42 -0
  134. package/dist/src/services/Highlighter.d.ts +11 -0
  135. package/dist/src/services/LayerManager.d.ts +37 -0
  136. package/dist/src/services/MeasureTool.d.ts +13 -0
  137. package/dist/src/services/MeasurementManager.d.ts +31 -0
  138. package/dist/src/services/MinimapController.d.ts +19 -0
  139. package/dist/src/services/Picker.d.ts +53 -0
  140. package/dist/src/services/analysis/ClippingBoxManager.d.ts +41 -0
  141. package/dist/src/services/analysis/CrossSectionManager.d.ts +9 -0
  142. package/dist/src/services/analysis/FloodingPlaneManager.d.ts +11 -0
  143. package/dist/src/stores/analysis.d.ts +1571 -0
  144. package/dist/src/stores/annotations.d.ts +60 -0
  145. package/dist/src/stores/bookmarks.d.ts +21 -0
  146. package/dist/src/stores/camera.d.ts +39 -0
  147. package/dist/src/stores/datasets.d.ts +49 -0
  148. package/dist/src/stores/giro3d.d.ts +45 -0
  149. package/dist/src/stores/layers.d.ts +40 -0
  150. package/dist/src/stores/measurement.d.ts +45 -0
  151. package/dist/src/stores/modules.d.ts +11 -0
  152. package/dist/src/stores/notifications.d.ts +8 -0
  153. package/dist/src/stores/statistics.d.ts +8 -0
  154. package/dist/src/types/Annotation.d.ts +35 -0
  155. package/dist/src/types/AnnotationMode.d.ts +7 -0
  156. package/dist/src/types/BaseLayer.d.ts +30 -0
  157. package/dist/src/types/Bookmark.d.ts +19 -0
  158. package/dist/src/types/CameraPosition.d.ts +7 -0
  159. package/dist/src/types/Configuration.d.ts +106 -0
  160. package/dist/src/types/Dataset.d.ts +78 -0
  161. package/dist/src/types/Feature.d.ts +13 -0
  162. package/dist/src/types/FloodingPlane.d.ts +14 -0
  163. package/dist/src/types/IFCTypes.d.ts +5 -0
  164. package/dist/src/types/LayerObject.d.ts +20 -0
  165. package/dist/src/types/Measure.d.ts +20 -0
  166. package/dist/src/types/MeasurementMode.d.ts +7 -0
  167. package/dist/src/types/Named.d.ts +5 -0
  168. package/dist/src/types/NavigationMode.d.ts +2 -0
  169. package/dist/src/types/Notification.d.ts +8 -0
  170. package/dist/src/types/OLGeometry.d.ts +1 -0
  171. package/dist/src/types/Overlay.d.ts +24 -0
  172. package/dist/src/types/VectorStyle.d.ts +31 -0
  173. package/dist/src/types/Viewbox.d.ts +7 -0
  174. package/dist/src/types/configuration/analysis.d.ts +26 -0
  175. package/dist/src/types/configuration/bookmark.d.ts +16 -0
  176. package/dist/src/types/configuration/camera.d.ts +19 -0
  177. package/dist/src/types/configuration/color.d.ts +18 -0
  178. package/dist/src/types/configuration/datasets/cityjson.d.ts +9 -0
  179. package/dist/src/types/configuration/datasets/core.d.ts +49 -0
  180. package/dist/src/types/configuration/datasets/featureCollection.d.ts +6 -0
  181. package/dist/src/types/configuration/datasets/ifc.d.ts +10 -0
  182. package/dist/src/types/configuration/datasets/index.d.ts +27 -0
  183. package/dist/src/types/configuration/datasets/layer.d.ts +43 -0
  184. package/dist/src/types/configuration/datasets/ply.d.ts +10 -0
  185. package/dist/src/types/configuration/datasets/pointCloud.d.ts +12 -0
  186. package/dist/src/types/configuration/datasets/potreePointCloud.d.ts +10 -0
  187. package/dist/src/types/configuration/datasets/tiledIfc.d.ts +9 -0
  188. package/dist/src/types/configuration/datasets/tiledPointCloud.d.ts +9 -0
  189. package/dist/src/types/configuration/datasets/vector.d.ts +34 -0
  190. package/dist/src/types/configuration/features.d.ts +2 -0
  191. package/dist/src/types/configuration/geographic.d.ts +51 -0
  192. package/dist/src/types/configuration/layers/core.d.ts +50 -0
  193. package/dist/src/types/configuration/layers/index.d.ts +51 -0
  194. package/dist/src/types/configuration/sources/bingMaps.d.ts +5 -0
  195. package/dist/src/types/configuration/sources/core/baseConfig.d.ts +70 -0
  196. package/dist/src/types/configuration/sources/core/tiled.d.ts +19 -0
  197. package/dist/src/types/configuration/sources/core/vector.d.ts +13 -0
  198. package/dist/src/types/configuration/sources/core/vectorTile.d.ts +8 -0
  199. package/dist/src/types/configuration/sources/customVector.d.ts +7 -0
  200. package/dist/src/types/configuration/sources/customVectorTile.d.ts +8 -0
  201. package/dist/src/types/configuration/sources/geojson.d.ts +5 -0
  202. package/dist/src/types/configuration/sources/geotiff.d.ts +8 -0
  203. package/dist/src/types/configuration/sources/gpx.d.ts +5 -0
  204. package/dist/src/types/configuration/sources/kml.d.ts +5 -0
  205. package/dist/src/types/configuration/sources/mvt.d.ts +10 -0
  206. package/dist/src/types/configuration/sources/osm.d.ts +5 -0
  207. package/dist/src/types/configuration/sources/stadiaMaps.d.ts +5 -0
  208. package/dist/src/types/configuration/sources/wms.d.ts +15 -0
  209. package/dist/src/types/configuration/sources/wmts.d.ts +15 -0
  210. package/dist/src/types/configuration/sources/xyz.d.ts +9 -0
  211. package/dist/src/types/utilities.d.ts +5 -0
  212. package/dist/src/utils/Components.d.ts +8 -0
  213. package/dist/src/utils/Configuration.d.ts +15 -0
  214. package/dist/src/utils/Download.d.ts +11 -0
  215. package/dist/src/utils/Fetcher.d.ts +77 -0
  216. package/dist/src/utils/Measure.d.ts +7 -0
  217. package/dist/src/utils/OLFeatures.d.ts +57 -0
  218. package/dist/src/utils/Projections.d.ts +10 -0
  219. package/dist/src/utils/Types.d.ts +11 -0
  220. package/package.json +103 -0
@@ -0,0 +1,9 @@
1
+ "use strict";var Nt=Object.defineProperty;var Ot=(s,o,t)=>o in s?Nt(s,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[o]=t;var A=(s,o,t)=>Ot(s,typeof o!="symbol"?o+"":o,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const R=require("/builds/giro3d/piero/node_modules/pinia/dist/pinia.mjs"),e=require("/builds/giro3d/piero/node_modules/vue/dist/vue.runtime.esm-bundler.js"),u=require("./Components.cjs.js"),ne=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/geographic/Extent.js"),Lt=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/entities/FeatureCollection.js"),J=require("/builds/giro3d/piero/node_modules/ol/format.js"),Dt=require("/builds/giro3d/piero/node_modules/ol/loadingstrategy.js"),Pt=require("/builds/giro3d/piero/node_modules/ol/source/Vector.js"),Ft=require("/builds/giro3d/piero/node_modules/ol/tilegrid.js"),p=require("/builds/giro3d/piero/node_modules/three"),jt=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/sources/COPCSource.js"),zt=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/sources/LASSource.js"),Rt=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/OperationCounter.js"),Tt=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/entities/PointCloud.js"),Ut=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/sources/PointCloudSource.js"),De=require("/builds/giro3d/piero/node_modules/@loaders.gl/core/dist/index.js"),Ht=require("/builds/giro3d/piero/node_modules/@loaders.gl/csv/dist/index.js"),Gt=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/entities/Tiles3D.js"),Zt=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/renderer/PointCloudMaterial.js"),Wt=require("/builds/giro3d/piero/node_modules/@loaders.gl/geopackage/dist/index.js"),Ge=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/FeatureTypes.js"),ot=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/entities/Entity3D.js"),Jt=require("/builds/giro3d/piero/node_modules/ol/format/GeoJSON.js"),Xt=require("/builds/giro3d/piero/node_modules/ol/format/GPX.js"),Yt=require("/builds/giro3d/piero/node_modules/ol/format/KML.js"),O=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/geographic/Coordinates.js"),qt=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/renderer/geometries/GeometryConverter.js"),Pe=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/Instance.js"),Kt=require("/builds/giro3d/piero/node_modules/proj4"),Qt=require("/builds/giro3d/piero/node_modules/@loaders.gl/shapefile/dist/index.js"),_t=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/utils/ColorUtils.js"),Ve=require("/builds/giro3d/piero/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js"),L=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/entities/Shape.js"),$t=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/picking/PickPointsAt.js"),nt=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/picking/PickTilesAt.js"),te=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/entities/Map.js"),X=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/layer/ColorLayer.js"),ee=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/layer/ElevationLayer.js"),eo=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/layer/Interpretation.js"),ge=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/layer/MaskLayer.js"),Ze=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/formats/BilFormat.js"),to=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/formats/GeoTIFFFormat.js"),oo=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/formats/MapboxTerrainFormat.js"),no=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/sources/GeoTIFFSource.js"),H=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/sources/TiledImageSource.js"),$=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/sources/VectorSource.js"),We=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/sources/VectorTileSource.js"),W=require("/builds/giro3d/piero/node_modules/ol/source.js"),io=require("/builds/giro3d/piero/node_modules/ol/source/WMTS.js"),B=require("/builds/giro3d/piero/node_modules/ol/style.js");require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/utils/HttpConfiguration.js");const so=require("/builds/giro3d/piero/node_modules/three/examples/jsm/controls/TransformControls.js"),U=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/interactions/DrawTool.js"),P=require("/builds/giro3d/piero/node_modules/camera-controls"),ao=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/gui/Panel.js"),ro=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/entities/AxisGrid.js"),lo=require("/builds/giro3d/piero/node_modules/ol/Feature.js"),co=require("/builds/giro3d/piero/node_modules/ol/geom/Polygon.js");require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/utils/Fetcher.js");const go=require("/builds/giro3d/piero/node_modules/ol/source/OSM.js"),Ao=require("/builds/giro3d/piero/node_modules/bootstrap/dist/js/bootstrap.esm.js");require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/gui/Inspector.js");const uo=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/utils/PromiseUtils.js"),F=require("/builds/giro3d/piero/node_modules/chart.js/dist/chart.mjs"),Co=require("/builds/giro3d/piero/node_modules/@tarekraafat/autocomplete.js/dist/autoComplete.min.js");function po(s){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const t in s)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(s,t);Object.defineProperty(o,t,n.get?n:{enumerable:!0,get:()=>s[t]})}}return o.default=s,Object.freeze(o)}const Io=po(Ao);class mo{constructor(o){A(this,"_store");this._store=o}clearBookmarks(){this._store.clear()}getBookmarks(){return this._store.getBookmarks()}setBookmarks(o){this._store.clear();for(const t of o)this._store.add(t)}}let be=null;function it(){return be||(be=[{enabled:!0,icon:"bi-database",key:"datasets",title:"Datasets"},{enabled:!0,icon:"bi-vector-pen",key:"annotations",title:"Annotations"},{enabled:u.hasExperimentalFeature("measurements"),icon:"bi-rulers",key:"measures",title:"Measurements"},{enabled:!0,icon:"bi-graph-up",key:"analysis",title:"Analysis"},{enabled:!0,icon:"bi-bookmarks",key:"bookmarks",title:"Bookmarks"},{enabled:!0,icon:"bi-info-circle",key:"about",title:"About Piero"}]),be}const ae=new Map,st={colorLayer:"fg-landcover-map",elevationLayer:"fg-contour-map",featureCollection:"bi-buildings",maskLayer:"fg-hex-map",pointcloud:"fg-multipoint",tiledIfc:"bi-building",vector:"fg-polygon-pt"},at={colorLayer:"Color Layer",elevationLayer:"Elevation layer",featureCollection:"Feature Collection",maskLayer:"Mask Layer",pointcloud:"Point Cloud",tiledIfc:"IFC",vector:"Vector"};class ho extends Lt{constructor(o){const t=o.featureProjection;let n;switch(o.source){case"bdtopo":n="BDTOPO_V3:batiment";break;default:return o.source}const i=new Pt({format:new J.GeoJSON,strategy:Dt.tile(Ft.createXYZ({tileSize:512})),url:function(C){return`${`https://data.geopf.fr/wfs/ows?SERVICE=WFS&VERSION=2.0.0&request=GetFeature&typename=BDTOPO_V3:batiment&outputFormat=application/json&SRSNAME=${t}&startIndex=0&bbox=`}${C.join(",")},${t}`}}),a=o.extent??new ne("EPSG:2154",-111629.52,127502884e-2,597603379e-2,723016164e-2),r=o.extrusionOffset??(c=>{const I=-c.getProperties().hauteur;return Number.isNaN(I)?0:I}),l=o.style??(c=>{const C=c.getProperties();let d="#FFFFFF";switch(C.usage_1){case"Agricole":d="#96ff0d";break;case"Commercial et services":d="#d8ffd4";break;case"Industriel":d="#f0bb41";break;case"Religieux":d="#41b5f0";break;case"Résidentiel":d="#cec8be";break;case"Sportif":d="#ff0d45";break}return{fill:{color:new p.Color(d),shading:!0},stroke:{color:"black",lineWidth:void 0}}}),g={extent:a,extrusionOffset:r,maxLevel:o.maxLevel??11,minLevel:o.minLevel??11,source:i,style:l};super(g),this.name=o.source,u.fillObject3DUserData(this,{filename:n})}}const fo=s=>{const o=s.dataset.config,t=new ho({...o,featureProjection:s.instance.referenceCrs});return Promise.resolve(t)};class bo extends Ut.PointCloudSourceBase{constructor(t){super();A(this,"dataProjection");A(this,"isCSVPointCloudSource",!0);A(this,"type","CSVPointCloudSource");A(this,"url");A(this,"_localVolume",null);A(this,"_metadata",null);A(this,"_opCounter",new Rt);A(this,"_origin",null);A(this,"_points",null);A(this,"_root",null);A(this,"_zArray",null);this.url=t.url,this.dataProjection=t.dataProjection}get loading(){return this._opCounter.loading}get progress(){return this._opCounter.progress}dispose(){}getHierarchy(){if(this._root==null)throw new Error("not initialized");return Promise.resolve(this._root)}getMemoryUsage(t){this._points!=null&&t.objects.set(this.id,{cpuMemory:this._points.byteLength,gpuMemory:this._points.byteLength})}getMetadata(){if(this._metadata==null)throw new Error("not initialized");return Promise.resolve(this._metadata)}getNodeData(t){if(this._points==null||this._origin==null||this._zArray==null||this._metadata==null||this._localVolume==null)throw new Error("not initialized");let n;return t.attribute!=null&&t.attribute.name==="Z"&&(n=new p.Float32BufferAttribute(this._zArray,1)),Promise.resolve({attribute:n,localBoundingBox:this._localVolume,origin:this._origin,pointCount:this._points.length/3,position:t.position?new p.Float32BufferAttribute(this._points,3,!1):void 0})}async initializeOnce(){this._opCounter.increment();const t=await De.load(this.url,Ht.CSVLoader,{csv:{shape:"array-row-table"},fetch:u.Fetcher.fetch}),n=new Float32Array(t.data.length*3),i=new Float32Array(t.data.length),a=new p.Box3().makeEmpty(),r=new p.Box3().makeEmpty(),l=new p.Vector3,g=new p.Vector3(t.data[0][0],t.data[0][1],t.data[0][2]);for(let d=0;d<t.data.length;d+=1){const I=t.data[d][0],b=t.data[d][1],m=t.data[d][2],h=I-g.x,v=b-g.y,E=m-g.z;a.expandByPoint(l.set(I,b,m)),r.expandByPoint(l.set(h,v,E)),n[d*3+0]=h,n[d*3+1]=v,n[d*3+2]=E,i[d]=m}this._points=n,this._zArray=i,this._origin=g,this._localVolume=r;const c=n.length/3,C={center:a.getCenter(new p.Vector3),depth:0,geometricError:0,hasData:!0,id:"root",pointCount:c,sourceId:this.id,volume:a};return this._root=C,this._metadata={attributes:[{dimension:1,interpretation:"unknown",max:a.max.z,min:a.min.z,name:"Z",size:4,type:"float"}],crs:this.dataProjection!=null?{name:this.dataProjection}:void 0,pointCount:c,volume:a},this._opCounter.decrement(),this}}class vo extends Tt{constructor(t){super(t);A(this,"isPointCloudEntity",!0);const n=u.getConfig();if(this.colorMap=u.getColorMap(n.pointcloud),"url"in t.source){const i=u.Fetcher.getContext(t.source.url);u.fillObject3DUserData(this,{filename:i.filename})}}async initialize(t){await super.initialize(t),this.setActiveAttribute("Z")}}const wo=s=>{const{dataset:o}=s,t=o.config;let n;switch(t.source.type){case"copc":n=new jt({url:typeof t.source.url=="string"?u.getPublicFolderUrl(t.source.url):async(a,r)=>{const c=await t.source.url.slice(a,r).arrayBuffer();return new Uint8Array(c)}});break;case"csv":n=new bo({...t.source});break;case"las":n=new zt({url:typeof t.source.url=="string"?u.getPublicFolderUrl(t.source.url):async()=>{const a=await u.Fetcher.fetchArrayBuffer(t.source.url);return new Uint8Array(a.slice(0))}});break;default:return t.source}const i=new vo({source:n});return Promise.resolve(i)};class rt extends Gt{constructor(o,t){super({...o,...t}),u.fillObject3DUserData(this,{filename:o.url})}}const yo=s=>{const o=s.dataset.config,t=new rt({...o.source,url:u.getPublicFolderUrl(o.source.url)});return Promise.resolve(t)};class ko extends rt{constructor(o){const t=u.getConfig();super(o,{colorMap:u.getColorMap(t.pointcloud),pointCloudMode:Zt.MODE.ELEVATION}),this.name=`pointcloud-${o.name}`}}const Eo=s=>{const{dataset:o}=s,t=o.config,n=new ko({...t.source,name:t.name,url:u.getPublicFolderUrl(t.source.url)});return Promise.resolve(n)},ve=new O("EPSG:4326",0,0,0);async function xo(s,o){const n=[];for(let a=0;a<s.length;a+=200){const r=s.slice(a,a+200),l=o.slice(a,a+200);n.push(Mo(r,l))}return(await Promise.all(n)).flat()}async function Mo(s,o){return(await u.Fetcher.fetchJson(`https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json?lon=${s.join("|")}&lat=${o.join("|")}&zonly=true&resource=ign_rge_alti_wld&delimiter=|&indent=false`)).elevations}const lt={async alticode(s){const o=[],t=[];s.forEach(i=>{i.as("EPSG:4326",ve),o.push(ve.longitude),t.push(ve.latitude)}),(await xo(o,t)).forEach((i,a)=>{s[a]._values[2]=i})}},Je=s=>lt.alticode(s),Bo=s=>{const o=s.getEntities(n=>n.isMap).at(0);if(o==null)throw new Error("No map attached to the instance");return async n=>(n.forEach(i=>{const a=o.getElevation({coordinates:i}).samples.sort((r,l)=>r.resolution-l.resolution).at(0);a!=null&&(i._values[2]=a.elevation)}),Promise.resolve())},Vo=(s,o=0)=>async n=>{let i=n.filter(a=>a._values[2]===o);for(const a of s)if(await a(i),i=i.filter(r=>r._values[2]===o),i.length===0)break},ct=(s,o,t=0)=>o?Vo([Bo(s),Je],t):Je;async function So(s){let o=null;const t=[/EPSG:+(\d+)/,/http:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/,/https:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/];for(const n of t){const i=s.match(n);if(i!==null){o=i[1];break}}if(o!=null){const n=`EPSG:${o}`;if(Kt.defs(n)===void 0){const i=await u.Fetcher.fetchText(`https://epsg.io/${o}.proj4`);Pe.registerCRS(n,i)}return n}throw new Error(`Could not find projection for ${s}`)}const Fe={loadProjCrsIfNeeded:So};async function No(s,o,t,n,i){const a=new p.Clock;a.start();const r=[],l=new Map;for(const g of s){const c=g.getGeometry(),C=c==null?void 0:c.getType();if(c==null||C==null)continue;const d=[],I=c.getFlatCoordinates(),b=c.getStride();if(!(b>=3&&I[2]!=null&&I[2]!==i)){for(let m=0;m<I.length;m+=b){const h=new O(o,I[m+0],I[m+1],b>=3?I[m+2]:i);d.push(h),r.push(h)}l.set(g.ol_uid,d)}}console.debug(`Fetching altitudes for ${r.length} coordinates from ${s.length} features...`),await t(r);for(const g of s){const c=l.get(g.ol_uid),C=g.getGeometry();if(!(C==null||c==null))switch(C.getType()){case"LineString":case"MultiPoint":{const d=C,I=d.getCoordinates();for(let b=0;b<I.length;b+=1)I[b][2]=c[b].values[2]+n;d.setCoordinates(I);break}case"MultiLineString":case"Polygon":{const d=C,I=d.getCoordinates();let b=0;for(let m=0;m<I.length;m+=1)for(let h=0;h<I[m].length;h+=1)I[m][h][2]=c[b].values[2]+n,b+=1;d.setCoordinates(I);break}case"MultiPolygon":{const d=C,I=d.getCoordinates();let b=0;for(let m=0;m<I.length;m+=1)for(let h=0;h<I[m].length;h+=1)for(let v=0;v<I[m][h].length;v+=1)I[m][h][v][2]=c[b].values[2]+n,b+=1;d.setCoordinates(I);break}case"Point":{const d=C,I=d.getCoordinates();I[2]=c[0].values[2]+n,d.setCoordinates(I);break}}}console.debug(`Fetched all missing altitudes in ${a.getElapsedTime()}s`),a.stop()}function Oo(s,o,t){for(const n of s){const i=n.getGeometry();if(i==null)continue;const a=i.getStride(),r=i.getFlatCoordinates();if(!(a>=3&&r[2]!=null&&r[2]!==t))switch(i.getType()){case"LineString":case"MultiPoint":{const l=i,g=l.getCoordinates();for(let c=0;c<g.length;c+=1)g[c][2]=o;l.setCoordinates(g);break}case"MultiLineString":case"Polygon":{const l=i,g=l.getCoordinates();for(let c=0;c<g.length;c+=1)for(let C=0;C<g[c].length;C+=1)g[c][C][2]=o;l.setCoordinates(g);break}case"MultiPolygon":{const l=i,g=l.getCoordinates();for(let c=0;c<g.length;c+=1)for(let C=0;C<g[c].length;C+=1)for(let d=0;d<g[c][C].length;d+=1)g[c][C][d][2]=o;l.setCoordinates(g);break}case"Point":{const l=i,g=l.getCoordinates();g[2]=o,l.setCoordinates(g);break}}}}async function Lo(s,o,t,n){const i=await Fe.loadProjCrsIfNeeded(t??"EPSG:4326");return o.readFeatures(s,{dataProjection:i,featureProjection:n})}function Do(s,o,t,n){return gt(o.readFeatures(s,{dataProjection:t,featureProjection:n}))}function Po(s,o){const t=new p.Group,n=new qt,i=s.map(a=>{const r=a.getGeometry();if(r!=null){const l=r.getType();let g;switch(l){case"LineString":g=n.build(r);break;case"MultiLineString":g=n.build(r);break;case"MultiPoint":g=n.build(r);break;case"MultiPolygon":g=n.build(r,o);break;case"Point":g=n.build(r);break;case"Polygon":g=n.build(r,o);break;default:console.warn(`Unsupported type ${l}`),g=null}if(g)for(const[c,C]of Object.entries(a.getProperties()))c!=="geometry"&&(g.userData[c]=C);return g}});for(const a of i)a!=null&&t.add(a);return t}function gt(s){return s.filter(o=>{var n;if("getType"in o)return!1;const t=(n=o.getGeometry())==null?void 0:n.getType();return!(t==null||!["LineString","MultiLineString","MultiPoint","MultiPolygon","Point","Polygon"].includes(t))})}const Y={fetchZCoordinates:No,fillZCoordinates:Oo,readFeatures:Lo,readSimpleFeatures:Do,toMeshes:Po,toSimpleFeatures:gt},Fo=new Jt,jo=new Xt,zo=new Yt,D={dataProjection:"EPSG:4326",elevation:0,fetchElevation:!1,fetchElevationFast:!1,fetchElevationOffset:.1,noDataValue:0};class Ro{constructor(o){A(this,"elevation");A(this,"options");this.options=o,this.elevation=o.elevation}context(){return u.Fetcher.getContext(this.options.url)}async load(o){const t=await u.Fetcher.fetchJson(this.options.url),n=Go(t);return await ze(o,n,this.options)}}class je{constructor(o,t){A(this,"elevation");A(this,"format");A(this,"noDataValue");A(this,"options");this.format=o,this.options=t,this.elevation=t.elevation,this.noDataValue=t.noDataValue}context(){return u.Fetcher.getContext(this.options.url)}async load(o){const t=await u.Fetcher.fetchText(this.options.url);return await Zo(o,t,this.format,this.options)}}class To extends je{constructor(o){super(jo,o)}}class Uo extends je{constructor(o){super(zo,o)}}async function ze(s,o,t){const n=await Fe.loadProjCrsIfNeeded(t.dataProjection??D.dataProjection),i=o.flatMap(l=>Fo.readFeatures(l,{dataProjection:n,featureProjection:t.featureProjection})),a=Y.toSimpleFeatures(i);if(t.fetchElevation??D.fetchElevation){const l=t.fetchElevationFast??D.fetchElevationFast,g=t.fetchElevationOffset??D.fetchElevationOffset,c=t.noDataValue??D.noDataValue;await Y.fetchZCoordinates(a,t.featureProjection,ct(s,l,c),g,c)}return a}function Ho(s,o,t=D.elevation,n=D.noDataValue){const i=(Array.isArray(o==null?void 0:o.elevation)?o.elevation[0]:o==null?void 0:o.elevation)??t;return Y.fillZCoordinates(s,i,n),Y.toMeshes(s,o)}function Go(s){switch(s.type){case"Feature":return[s];case"FeatureCollection":return s.features;case"GeometryCollection":return s.geometries.map(t=>({geometry:t,properties:{},type:"Feature"}));default:return[{geometry:s,properties:{},type:"Feature"}]}}async function Zo(s,o,t,n){const i=Y.readSimpleFeatures(o,t,n.dataProjection??D.dataProjection,n.featureProjection);if(n.fetchElevation??D.fetchElevation){const r=n.fetchElevationFast??D.fetchElevationFast,l=n.fetchElevationOffset??D.fetchElevationOffset,g=n.noDataValue??D.noDataValue;await Y.fetchZCoordinates(i,n.featureProjection,ct(s,r,g),l,g)}return i}class Wo extends ot{constructor(t){super(new p.Group);A(this,"sources");this.sources=Array.isArray(t)?t:[t]}async preprocess(){for(const t of this.sources){const n=await t.load(this.instance),i=Ho(n,{elevation:t.elevation,fill:{color:Ge.DEFAULT_SURFACE_COLOR},stroke:{color:Ge.DEFAULT_LINE_COLOR}},t.elevation,t.noDataValue);this.object3d.add(i),this.onObjectCreated(i);const a=t.context();u.fillObject3DUserData(i,{filename:a.filename})}this.notifyChange(this.object3d)}}async function Jo(s,o){const t=await De.load(s,Wt.GeoPackageLoader,{fetch:u.Fetcher.fetch,gis:{_targetCrs:o,format:"geojson",reproject:!0}}),n=[];for(const[i,a]of Object.entries(t.tables))for(const r of a.table.features)r.properties||(r.properties={}),r.properties.table=i,n.push(r);return n}class Xo{constructor(o){A(this,"elevation");A(this,"options");this.options=o,this.elevation=o.elevation}context(){return u.Fetcher.getContext(this.options.url)}async load(o){const t=await Jo(this.options.url,this.options.featureProjection);return await ze(o,t,{...this.options,dataProjection:this.options.featureProjection})}}async function Yo(s,o){return(await De.load(s,Qt.ShapefileLoader,{fetch:u.Fetcher.fetch,gis:{_targetCrs:o,format:"geojson",reproject:!0},shapefile:{shape:"geojson-table"}})).features}class qo{constructor(o){A(this,"elevation");A(this,"options");this.options=o,this.elevation=o.elevation}context(){return u.Fetcher.getContext(this.options.url)}async load(o){const t=await Yo(this.options.url,this.options.featureProjection);return await ze(o,t,{...this.options,dataProjection:this.options.featureProjection})}}const T="#377c5f",Ko="yellow",Qo="#ffd500",_o="#73d1bd",re=5,$o=new p.Vector2,At=new p.Color(T),en=new p.Color,we=en.copyLinearToSRGB(At),Xe=`#${new p.Color(_t.getContrastColor(At)).getHexString()}`,ye=12,tn="bold",ke=[];class on extends ot{constructor(t,n){super(new p.Group);A(this,"sources");A(this,"_labels");A(this,"_styleCallback");A(this,"_textCallback");this.sources=Array.isArray(t)?t:[t],this._labels=[],this._textCallback=(n==null?void 0:n.text)||(()=>"P"),this._styleCallback=n==null?void 0:n.style}getBoundingBox(){const t=this._labels.map(i=>i.position);return new p.Box3().setFromPoints(t)}pick(t,n){const i=this.instance.canvasToNormalizedCoords(t,$o),a=new p.Raycaster;a.setFromCamera(i,this.instance.view.camera);const r=this.pickLabels(a);return r?[{distance:r.position.distanceTo(a.ray.origin),entity:this,isLabelPickResult:!0,object:r,point:r.position}]:[]}updateOpacity(){const t=`${this.opacity*100}%`;this._labels.forEach(n=>n.element.style.opacity=t)}updateVisibility(){this.object3d.traverse(t=>{t.visible=this.visible})}async preprocess(){for(const t of this.sources){const n=await t.load(this.instance),i=new p.Group,a=t.elevation??0,r=g=>new p.Vector3(g[0],g[1],g[2]??a);for(const g of n){const c=g.getGeometry();if(c!=null){const C=c.getType(),d=[];switch(C){case"LineString":case"MultiPoint":d.push(...c.getCoordinates());break;case"MultiLineString":case"Polygon":d.push(...c.getCoordinates()[0]);break;case"MultiPolygon":d.push(...c.getCoordinates()[0][0]);break;case"Point":d.push(c.getCoordinates());break}if(d.length>0){const I=d.map(m=>this.createLabel(r(m),g)),b=new p.Group;I.forEach(m=>{b.add(m),this._labels.push(m)});for(const[m,h]of Object.entries(g.getProperties()))m!=="geometry"&&(b.userData[m]=h);i.add(b)}}}this.object3d.add(i),this.onObjectCreated(i);const l=t.context();u.fillObject3DUserData(i,{filename:l.filename})}this.notifyChange(this.object3d)}createLabel(t,n){const i=document.createElement("div"),a=document.createElement("span");this.updateStyle(a,n),a.innerText=this._textCallback(n,t);const r=document.createElement("div");i.appendChild(r),r.appendChild(a);const l=new Ve.CSS2DObject(i);return l.position.copy(t),l.updateMatrix(),l.updateMatrixWorld(!0),i.addEventListener("mouseover",()=>l.userData.hover=!0),i.addEventListener("mouseleave",()=>l.userData.hover=!1),l}pickLabels(t){let n=null;return this._labels.forEach(i=>{n==null&&(ke.length=0,this.raycastLabel(i,t,ke),ke.length>0&&(n=i))}),n}raycastLabel(t,n,i){t.userData.hover===!0&&i.push({distance:t.position.distanceTo(n.ray.origin),object:t,point:t.position})}updateStyle(t,n){t.style.backgroundColor=`rgb(${we.r*255} ${we.g*255} ${we.b*255})`,t.style.borderWidth="1px",t.style.borderStyle="solid",t.style.borderColor=Xe,t.style.borderRadius=`${p.MathUtils.clamp(ye-4,5,10)}px`,t.style.color=Xe;const i=p.MathUtils.clamp(Math.round(ye/4),2,10);t.style.padding=`${i}px ${i}px ${i}px ${i}px`,t.style.fontSize=`${ye}px`,t.style.fontWeight=tn,t.style.pointerEvents="auto",this._styleCallback&&this._styleCallback(t,n)}}class nn extends L{constructor(t){super({color:T,showLine:!0,showVertexLabels:!0,showVertices:!0,vertexRadius:re});A(this,"source");this.source=t}async preprocess(){const n=(await this.source.load(this.instance)).at(0),i=n==null?void 0:n.getGeometry();if(n!=null&&i!=null){const a=this.source.elevation??0,r=c=>new p.Vector3(c[0],c[1],c[2]??a);switch(i.getType()){case"LineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(i.getCoordinates().map(r));break;case"MultiLineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(i.getCoordinates()[0].map(r));break;case"MultiPoint":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(i.getCoordinates().map(r));break;case"MultiPolygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(i.getCoordinates()[0][0].map(r));break;case"Point":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints([r(i.getCoordinates())]);break;case"Polygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(i.getCoordinates()[0].map(r));break;default:throw new Error("could not import shape from given geometry: "+i.getType())}const g=this.source.context();u.fillObject3DUserData(this,{filename:g.filename});for(const[c,C]of Object.entries(n.getProperties()))c!=="geometry"&&(this.userData[c]=C)}this.notifyChange(this.object3d)}}const sn=s=>{const{dataset:o,instance:t}=s,n=o.config,i=Array.isArray(n.source)?n.source:[n.source],a=[],r=n.rendering??"mesh";let l;for(const g of i){const c={dataProjection:g.dataProjection??o.get("dataProjection"),elevation:g.elevation??o.get("elevation"),featureProjection:t.referenceCrs,fetchElevation:g.fetchElevation??o.get("fetchElevation"),fetchElevationFast:g.fetchElevationFast??o.get("fetchElevationFast"),fetchElevationOffset:g.fetchElevationOffset??o.get("fetchElevationOffset"),noDataValue:g.noDataValue??o.get("noDataValue"),url:g.url};switch(g.type){case"geojson":a.push(new Ro({...c}));break;case"geopackage":a.push(new Xo({...c}));break;case"gpx":a.push(new To({...c}));break;case"kml":a.push(new Uo({...c}));break;case"ol":a.push(new je(g.format,{...c}));break;case"shapefile":a.push(new qo({...c}));break;default:return g}}switch(r){case"label":l=new on(a,n);break;case"mesh":l=new Wo(a);break;case"shape":l=new nn(a[0]);break;default:return r}return Promise.resolve(l)},Se={featureCollection:fo,flatPointcloud:wo,pointcloud:Eo,tiledIfc:yo,vector:sn};async function an(s,o){const t={dataset:o,instance:s},n=Se[o.type];if(n==null)throw new Error(`no entity builder found for dataset type '${o.type}'`);const i=await n(t);return"dataset"in i.object3d.userData||(i.object3d.userData.dataset={}),i.object3d.userData.dataset.name=o.name,i}function rn(s,o){Se[s]!=null&&console.warn(`replacing entity builder for dataset type '${s}'`),Se[s]=o}const ln={getEntity:an},Ee=s=>({name:s.filename,source:{type:"csv",url:s.file},type:"flatPointcloud",visible:!0}),Ye=s=>({name:s.filename,source:{type:s.filename.endsWith(".copc.laz")?"copc":"las",url:s.file},type:"flatPointcloud",visible:!0}),cn=s=>{let o;switch(s.extension){case"geojson":case"json":o="geojson";break;case"gpx":o="gpx";break;case"kml":o="kml";break;default:throw new Error(`File extension '${s.extension}' not supported`)}return{name:s.filename,source:{style:"default",type:o,url:s.file},type:"colorLayer",visible:!0}},gn=s=>{let o;switch(s.extension){case"geojson":case"json":o="geojson";break;case"gpkg":o="geopackage";break;case"gpx":o="gpx";break;case"kml":o="kml";break;default:throw new Error(`File extension '${s.extension}' not supported`)}return{name:s.filename,rendering:s.configuration.importedVectorDatasetRendering,source:{fetchElevation:s.configuration.importedMeshDatasetFetchElevation??!0,fetchElevationFast:s.configuration.importedMeshDatasetFetchElevationFast??!1,type:o,url:s.file},type:"vector",visible:!0}},_=s=>s.configuration.importedVectorDatasetRendering==="overlay"?cn(s):gn(s),Ae={csv:Ee,dsv:Ee,"geo.json":_,geojson:_,gpkg:_,gpx:_,kml:_,las:Ye,laz:Ye,tsv:Ee};function An(s,o){if(typeof s=="string"){const n=u.getPublicFolderUrl(s),i=new URL(n),l=`${i.origin}${i.pathname}`.split("/").pop();if(l==null)throw new Error("Could not determine filename");const g=l.split(".").at(-1);if(g==null)throw new Error(`File has no extension: ${l}`);return{configuration:o,extension:g,file:s,filename:l}}if(s.name==null)throw new Error("Could not determine filename");const t=s.name.split(".").at(-1);if(t==null)throw new Error(`File has no extension: ${s.name}`);return{configuration:o,extension:t,file:s,filename:s.name}}async function un(s,o){const t=An(s,o),n=dn(t.filename);if(n==null)throw new Error(`File format ${t.extension} not supported`);const i=n(t);return Promise.resolve(new u.Dataset(i))}function dn(s){const o=Object.keys(Ae);for(const t of o)if(s.endsWith(t))return Ae[t];return null}function Cn(s,o){Ae[s]!=null&&console.warn(`replacing loader for file extension '.${s}'`),Ae[s]=o}const pn={importFile:un},ut=[];class In{constructor(){A(this,"_clearHighlight",null)}clear(){this._clearHighlight&&(this._clearHighlight(),this._clearHighlight=null)}dispose(){this.clear()}highlightFromPick(o){if(this.clear(),!!o.entity){L.isShapePickResult(o)&&this.highlightShape(o);for(const t of ut){const n=t(o);n&&(this._clearHighlight=n)}}}highlightShape(o){const t=o.entity;if(t.userData.highlightable){const n=new p.Color(t.color);t.color=t.userData.highlightColor,t.instance.notifyChange(),this._clearHighlight=()=>{t.color=n,t.instance.notifyChange()}}}}const mn=new Intl.NumberFormat(void 0,{maximumFractionDigits:2,style:"unit",unit:"meter",unitDisplay:"short"}),hn=s=>`${mn.format(s.length)}`,ue=class ue extends L{constructor(){super({color:Ko,lineLabelFormatter:hn,showLineLabel:!0});A(this,"isMeasure3D",!0);this.userData.highlightable=!0,this.userData.highlightColor=Qo,this.depthTest=!0}get from(){return this.points[0]}get length(){return this.getLength()}get to(){return this.points[1]}clone(){return new ue().copy(this)}copy(t){return this.setPoints([t.from,t.to]),this}};A(ue,"isMeasure3D",t=>u.isObject(t)&&t.isMeasure3D);let oe=ue;class fn{constructor(o,t,n,i){A(this,"attributes");A(this,"name");A(this,"parent");A(this,"point");this.name=o,this.parent=t,this.attributes=n,this.point=i.clone()}}class bn{constructor(o,t,n){A(this,"_grid");A(this,"_instance");this._instance=o;const i=t.dimensions(),a=t.center();this._grid=new p.GridHelper(1,100),this._grid.name=n,this._grid.scale.set(i.x,1,i.y),this._grid.visible=!0,this._grid.position.set(a.x,a.y,-100),this._grid.rotateOnAxis(new p.Vector3(1,0,0),Math.PI/2);const r=this._grid.material;r.opacity=.5,r.transparent=!0,this._grid.updateMatrixWorld(),this._instance.add(this._grid)}get visible(){return this._grid.visible}set visible(o){this._grid.visible=o,this._instance.notifyChange(this._grid)}dispose(){this._instance.remove(this._grid),this._grid.geometry.dispose(),this._grid.material.dispose()}}async function vn(s,o,t,n){const i=new J.WMTSCapabilities,a=await u.Fetcher.fetchText(o),r=i.read(a),l=io.optionsFromCapabilities(r,{layer:s});if(l===null)throw new Error("Cannot resolve WMTS source from capabilities");return new W.WMTS(l)}async function wn(s,o){const t=await de(o.config);switch(o.type){case"colorLayer":{const n=o.config;return new X({...t,elevationRange:n.elevationRange,magFilter:n.magFilter,minFilter:n.minFilter})}case"elevationLayer":{const n=o.config;return new ee({...t,minmax:n.minmax})}case"maskLayer":{const n=o.config;return new ge({...t,maskMode:n.maskMode})}default:return o.type}}function yn(s){if(s==null)return new B.Style;switch(s){case"LineString":case"MultiLineString":return new B.Style({stroke:new B.Stroke({color:"yellow",width:1})});case"MultiPoint":case"Point":return new B.Style({image:new B.Circle({fill:new B.Fill({color:"yellow"}),radius:3,stroke:new B.Stroke({color:"black"})})});case"MultiPolygon":case"Polygon":return new B.Style({fill:new B.Fill({color:"rgba(50, 50, 200, 0.4)"}),stroke:new B.Stroke({color:"black",width:1})});default:return console.warn(`Geometry ${s} not supported`),new B.Style}}function kn(s){if(s.imageFormat)switch(s.imageFormat){case"Bil":return new Ze;case"GeoTIFF":return new to;case"MapboxTerrain":return new oo;default:return s.imageFormat}switch(s.format){case"image/x-bil;bits=32":return new Ze;default:return}}function En(s){return{colorSpace:s.colorSpace,flipY:s.flipY,is8bit:s.is8bit}}async function xn(s){const o=await de(s);switch(s.type){case"color":{const t=s.options;return new X({...o,elevationRange:t.elevationRange})}case"elevation":{const t=s.options;return new ee({...o,magFilter:t.magFilter,minFilter:t.minFilter,minmax:t.minmax??{max:5e3,min:0},noDataOptions:{replaceNoData:!1}})}case"mask":{const t=s.options;return new ge({...o,maskMode:t.maskMode})}default:return s.type}}async function de(s){const o=u.getConfig(),t=await dt(s.source),n="options"in s?s.options:s,i=u.getExtent(n.extent),a=n.interpretation?new eo(n.interpretation.mode,n.interpretation):void 0,r=n.colorMap??("type"in s&&s.type==="elevation"?o.basemap.colormap:void 0),l=r?u.getColorMap(r):void 0,g="resolution"in s.source?s.source.resolution:void 0;let c,C;return"type"in s&&s.type==="color"&&(c=s.options.minFilter,C=s.options.magFilter),{backgroundColor:n.backgroundColor,colorMap:l,extent:i,interpretation:a,magFilter:C,minFilter:c,name:s.name,noDataOptions:n.noDataOptions,preloadImages:n.preloadImages,resolutionFactor:g,showEmptyTextures:n.showEmptyTextures,showTileBorders:n.showTileBorders,source:t}}async function Mn(s,o){const t=await de(s),n=s.options;return new X({extent:o,...t,elevationRange:n.elevationRange,magFilter:n.magFilter,minFilter:n.minFilter})}async function dt(s){const o=En(s);switch(s.type){case"bingmaps":return new H({...o,source:new W.BingMaps(s)});case"cog":return new no({...o,crs:le(s,s.projection),url:u.getPublicFolderUrl(s.url)});case"geojson":return new $({...o,...await ie(s,new J.GeoJSON)});case"gpx":return new $({...o,...await ie(s,new J.GPX)});case"kml":return new $({...o,...await ie(s,new J.KML)});case"mvt":return new We({...o,...qe(s),format:new J.MVT});case"osm":return new H({...o,source:new W.OSM(s)});case"stadiamaps":return new H({...o,source:new W.StadiaMaps(s)});case"vector":return new $({...o,...await ie(s,s.format)});case"vector-tile":return new We({...o,...qe(s),format:s.format});case"wms":{const t=new W.TileWMS({crossOrigin:"anonymous",params:{FORMAT:s.format,LAYERS:Array.isArray(s.layer)?s.layer:[s.layer]},projection:le(s),url:s.url});return new H({...o,...xe(s,t)})}case"wmts":{const t=await vn(s.layer,s.url,s.format,le(s));return new H({...o,...xe(s,t)})}case"xyz":return new H({...o,...xe(s,new W.XYZ(s))});default:return s}}async function Bn(s){return s.url instanceof Blob?u.Fetcher.toDataURL(s.url):u.getPublicFolderUrl(s.url)}function le(s,o){return s.dataProjection??("projection"in s?s.projection:void 0)??o}function Ct(s){if(typeof s=="string"){if(s==="default")return t=>{var n;return yn((n=t.getGeometry())==null?void 0:n.getType())};const o=u.getDynamicStyles();return o[s]==null?(console.warn(`Could not find style ${s} in configuration`),new B.Style({})):o[s]}return Vn(s)}function xe(s,o){return{extent:u.getExtent(s.extent),format:kn(s),httpTimeout:s.httpTimeout,noDataValue:s.noDataValue??s.nodata,retries:s.retries,source:o}}async function ie(s,o){const t=await Bn(s);return{data:{format:o,url:t},dataProjection:le(s,"EPSG:4326"),style:Ct(s.style)}}function qe(s){return{backgroundColor:s.backgroundColor,style:Ct(s.style),url:u.getPublicFolderUrl(s.url)}}function Vn(s){function o(i){if(i)return new B.Stroke({color:i.color,width:i.width})}function t(i){if(i)return new B.Fill({color:i.color})}function n(i){if(i)return new B.Circle({fill:t(i.fill),radius:i.radius,stroke:o(i.stroke)})}return new B.Style({fill:t(s.fill),image:n(s.point),stroke:o(s.stroke)})}const Ne={getDatasetLayer:wn,getLayer:xn,getLayerOptions:de,getOverlay:Mn,getSource:dt};class Sn{constructor(o,t,n){A(this,"_instance");A(this,"_plane");this._instance=o;const i=t.dimensions(),a=t.center();this._plane=new p.Mesh(new p.PlaneGeometry(i.x,i.y,1,1),new p.MeshBasicMaterial({color:"black"})),this._plane.name=n,this._plane.position.set(a.x,a.y,-101),this._plane.updateMatrixWorld(),this._instance.add(this._plane)}get visible(){return this._plane.visible}set visible(o){this._plane.visible=o,this._instance.notifyChange(this._plane)}dispose(){this._instance.remove(this._plane),this._plane.geometry.dispose(),this._plane.material.dispose()}}const q=R.defineStore("giro3d",()=>{const s=e.shallowRef(null),o=e.shallowRef(null),t=e.shallowRef(null);function n(){return s.value}function i(h){s.value=h}function a(){return o.value}function r(h){o.value=h}function l(){return t.value}function g(h){t.value=h}function c(){const h=u.getConfig(),v=h.camera;return Array.isArray(v.position)?(console.warn("Configuration is using an array for camera.position, you should switch to an object; see https://gitlab.com/giro3d/piero/-/issues/24 for more information. This will be removed in release v24.7."),new O("EPSG:4326",v.position[0],v.position[1],v.altitude).as(h.default_crs)):("z"in v.position||console.warn("Configuration is using a 2D object for camera.position, you should switch to a 3D object; see https://gitlab.com/giro3d/piero/-/issues/38 for more information. This will be removed in release v24.7."),new O(v.position.crs??h.default_crs,v.position.x,v.position.y,"z"in v.position?v.position.z:v.altitude).as(h.default_crs))}function C(){const h=u.getConfig();return"lookAt"in h.camera&&h.camera.lookAt?new O(h.camera.lookAt.crs??h.default_crs,h.camera.lookAt.x,h.camera.lookAt.y,h.camera.lookAt.z).as(h.default_crs):I().center()}function d(){const h=u.getConfig();return{backgroundColor:h.basemap.backgroundColor??"white",backgroundOpacity:h.basemap.backgroundOpacity,colorimetry:h.basemap.colorimetry,contourLines:h.basemap.contourLines,elevationRange:h.basemap.elevationRange,graticule:h.basemap.graticule,lighting:h.basemap.lighting??{elevationLayersOnly:!0,enabled:!0},showOutline:h.basemap.showOutline,side:h.basemap.side??p.FrontSide,terrain:h.basemap.terrain}}function I(){const h=u.getConfig();if(h.basemap.extent)return u.getExtent(h.basemap.extent);console.warn("Configuration is using basemap.center/basemap.size, you should switch to extent. This will be removed in release v24.10.");const v=h.basemap.size,E=h.basemap.center;if(v==null||E==null)throw new Error("basemap.center and basemap.size need to be defined");let V;return Array.isArray(E)?(console.warn("Configuration is using an array for basemap.center, you should switch to an object; see https://gitlab.com/giro3d/piero/-/issues/24 for more information. This will be removed in release v24.7."),V=new O("EPSG:4326",E[0],E[1],0)):V=new O(E.crs??h.default_crs,E.x,E.y,0),V=V.as(h.default_crs),ne.fromCenterAndSize(h.default_crs,{x:V.x,y:V.y},v[0],v[1])}function b(){return u.getConfig().default_crs}function m(){var h;(h=s.value)==null||h.notifyChange()}return{getCRS:b,getDefaultBasemapExtent:I,getDefaultBasemapOptions:d,getDefaultCameraLookAt:C,getDefaultCameraPosition:c,getInspector:l,getMainView:n,getMinimapView:a,notifyChange:m,setInspector:g,setMainView:i,setMinimapView:r}});class Nn extends p.EventDispatcher{constructor(){super(...arguments);A(this,"canSetOpacity",!1);A(this,"name","Graticule");A(this,"uuid","graticule");A(this,"_enabled",!1);A(this,"_instance");A(this,"_map");A(this,"_visible",!1)}get displayed(){return this.enabled&&this.visible}get enabled(){return this._enabled}set enabled(t){this._enabled=t,this._updateVisible()}set instance(t){this._instance=t}set map(t){this._map=t}get visible(){return this._visible}set visible(t){this._visible=t,this._updateVisible()}_updateVisible(){this._map&&this._instance&&(this._map.graticule.enabled=this.displayed,this._instance.notifyChange(this._map))}}class pt extends p.EventDispatcher{constructor(t){super();A(this,"name");A(this,"uuid");A(this,"_opacity",1);A(this,"_visible",!1);this.name=t,this.uuid=p.MathUtils.generateUUID()}get opacity(){return this._opacity}set opacity(t){this._opacity=t,this.dispatchEvent({type:"opacity"})}get visible(){return this._visible}set visible(t){this._visible=t,this.dispatchEvent({type:"visible"})}delete(){this.dispatchEvent({type:"delete"})}}class On extends pt{constructor({name:t,source:n,type:i,...a}){super(t);A(this,"options");A(this,"source");A(this,"type");A(this,"_loading");this._loading=!1,this.type=i,this.source=n,this.options=a}get isLoading(){return this._loading}set isLoading(t){this._loading=t}}class Ln extends pt{constructor({name:t,source:n,...i}){super(t);A(this,"options");A(this,"source");A(this,"_loading");this._loading=!1,this.source=n,this.options=i}get isLoading(){return this._loading}set isLoading(t){this._loading=t}}function Dn(){const s=u.getConfig(),o=[],t=s.basemap.layers;for(const n of t){const i=new On(n);i.visible=n.visible,o.push(i)}return o}function Pn(){const s=u.getConfig();if("graticule"in s.basemap&&s.basemap.graticule!==void 0){const o=new Nn;return typeof s.basemap.graticule=="boolean"?o.visible=s.basemap.graticule:o.visible=s.basemap.graticule.enabled??!0,e.shallowReactive(o)}}function Fn(){const s=u.getConfig(),o=[];for(const t of s.overlays){let n;"source"in t?n=t:(console.warn(`Configuration for ${t.name} is deprecated. This will be removed in release v24.7.`),n={name:t.name,source:{...t},visible:t.visible});const i=new Ln(n);i.visible=t.visible,o.push(i)}return o}const It=R.defineStore("layers",()=>{const s=e.shallowReactive(Dn().map(m=>e.shallowReactive(m))),o=e.computed(()=>s.length),t=e.shallowReactive(Fn().map(m=>e.shallowReactive(m))),n=e.computed(()=>t.length),i=Pn();function a(){return s}function r(){return i}function l(m,h){m.visible=h}function g(m,h){m.opacity=h}function c(){return t}function C(m,h){m.visible=h}function d(m,h){m.opacity=h}function I(m){const h=t.indexOf(m);if(h>0){const v=t[h-1];t[h-1]=m,t[h]=v}}function b(m){const h=t.indexOf(m);if(h<t.length-1){const v=t[h+1];t[h+1]=m,t[h]=v}}return{basemapCount:o,getBasemaps:a,getGraticuleLayer:r,getOverlays:c,moveOverlayDown:b,moveOverlayUp:I,overlayCount:n,setBasemapOpacity:g,setBasemapVisibility:l,setOverlayOpacity:d,setOverlayVisibility:C}}),jn=3e3,Oe="grid",Le="plane",zn=5e3;class Rn extends p.EventDispatcher{constructor(t){super();A(this,"_baseLayers");A(this,"_basemap");A(this,"_boundOnAfterCameraUpdate");A(this,"_cameraStore",u.useCameraStore());A(this,"_datasetLayers");A(this,"_giro3dStore",q());A(this,"_grid");A(this,"_instance");A(this,"_layerStore",It());A(this,"_overlays");A(this,"_plane");this._instance=t,this._baseLayers=new Map,this._overlays=new Map,this._datasetLayers=new Set;const n=this._giro3dStore.getDefaultBasemapExtent(),i=this._giro3dStore.getDefaultBasemapOptions();this._basemap=new te({extent:n,...i}),this._basemap.terrain.segments=32,this._basemap.name="basemaps",this._instance.add(this._basemap),this._grid=new bn(this._instance,n,Oe),this._plane=new Sn(this._instance,n,Le),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);for(const r of this._layerStore.getOverlays())r.visible&&this.loadOverlay(r);for(const r of this._layerStore.getBasemaps())r.visible&&this.loadBasemap(r);const a=this._layerStore.getGraticuleLayer();a&&(a.instance=this._instance,a.map=this._basemap),this._layerStore.$onAction(({after:r,args:l,name:g})=>{r(()=>{switch(g){case"moveOverlayDown":case"moveOverlayUp":this.onOverlayReordered(l[0]);break;case"setBasemapOpacity":this.onLayerOpacityChanged(l[0],l[1]);break;case"setBasemapVisibility":this.onLayerVisibilityChanged(l[0],l[1]);break;case"setOverlayOpacity":this.onOverlayOpacityChanged(l[0],l[1]);break;case"setOverlayVisibility":this.onOverlayVisibilityChanged(l[0],l[1]);break}})})}get extent(){return this._basemap.extent}async addDatasetLayer(t){this._datasetLayers.add(t.id),await this._basemap.addLayer(t),this.updateLayerOrdering()}dispose(){this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._instance.remove(this._basemap),this._plane.dispose(),this._grid.dispose(),this._basemap.dispose({disposeLayers:!0})}notify(t){this._instance.notifyChange(t)}removeBasemapLayer(t){this._datasetLayers.delete(t.id),this._basemap.removeLayer(t,{disposeLayer:!0}),this._instance.notifyChange(this._basemap)}setMapOpacity(t){this._basemap.opacity=t,this._instance.notifyChange(this._basemap)}async getLayer(t,n=!0){const i=this._baseLayers.get(t.uuid);return!i&&n?this.loadBasemap(t):i}async getOverlay(t,n=!0){const i=this._overlays.get(t.uuid);return!i&&n?this.loadOverlay(t):i}async loadBasemap(t){const n=await Ne.getLayer(t);return this._baseLayers.set(t.uuid,n),await this._basemap.addLayer(n),this.updateLayerOrdering(),n.visible=t.visible,X.isColorLayer(n)&&(n.opacity=t.opacity),ee.isElevationLayer(n)&&(n.addEventListener("visible-property-changed",()=>{this._basemap.visible=n.visible,this._instance.notifyChange(this._basemap)}),this._basemap.visible=n.visible),this._instance.notifyChange(this._basemap),n}async loadOverlay(t){const n=await Ne.getOverlay(t,this.extent);return this._overlays.set(t.uuid,n),await this._basemap.addLayer(n),this.updateLayerOrdering(),n.visible=t.visible,n.opacity=t.opacity,this._instance.notifyChange(this._basemap),n}onAfterCameraUpdate(){const t=this._cameraStore.getCamera3dPosition(),n=this._grid.visible,i=t.z<jn;n!==i&&(this._grid.visible=i,this._plane.visible=i);const a=this._layerStore.getGraticuleLayer();if(a){const r=a.enabled,l=t.z<zn;r!==l&&(a.enabled=l)}}async onLayerOpacityChanged(t,n){const i=await this.getLayer(t);i&&X.isColorLayer(i)&&(i.opacity=n,this.notify(i)),i&&ee.isElevationLayer(i)&&this.setMapOpacity(t.opacity)}async onLayerVisibilityChanged(t,n){t.type==="elevation"&&n&&[...this._baseLayers.keys()].forEach(r=>{if(r===t.uuid)return;const l=this._baseLayers.get(r);if(l&&ee.isElevationLayer(l)){this._baseLayers.delete(r),this.removeBasemapLayer(l);const g=this._layerStore.getBasemaps().find(c=>c.uuid===r);g&&this._layerStore.setBasemapVisibility(g,!1)}});const i=await this.getLayer(t,n);i&&(i.visible=n,n||(this._baseLayers.delete(t.uuid),this.removeBasemapLayer(i)),this.notify(i))}async onOverlayOpacityChanged(t,n){const i=await this.getOverlay(t);i&&(i.opacity=n,this.notify(i))}onOverlayReordered(t){t.visible&&this.updateLayerOrdering()}async onOverlayVisibilityChanged(t,n){const i=await this.getOverlay(t,n);i&&(i.visible=n,n||(this._overlays.delete(t.uuid),this.removeBasemapLayer(i)),this.notify(i))}updateLayerOrdering(){const t=[...this._layerStore.getBasemaps().map(n=>{var i;return(i=this._baseLayers.get(n.uuid))==null?void 0:i.id}).reverse(),...this._layerStore.getOverlays().map(n=>{var i;return(i=this._overlays.get(n.uuid))==null?void 0:i.id}).reverse(),...[...this._datasetLayers.values()].reverse()];this._basemap.sortColorLayers((n,i)=>{const a=t.indexOf(n.id),r=t.indexOf(i.id);return a>=0&&r>=0?a-r:0})}}const mt=[];function Tn(s,o){return L.isShapePickResult(s)?-1:L.isShapePickResult(o)?1:s.distance-o.distance}class Ke{constructor(){A(this,"_analysisStore",u.useAnalysisStore())}getFeatureFromPickedObject(o){var C,d;const{entity:t,features:n,object:i}=o,a=(t==null?void 0:t.object3d)??i;let r=(d=(C=a.userData)==null?void 0:C.dataset)==null?void 0:d.name;const l=(t==null?void 0:t.id)??a.uuid,g=[],c=new Map;if(c.set("Dataset",g),t){if(nt.isMapPickResult(o)){if(n==null||n.length===0)return null;const I=n.at(0);r=this.getNameFromOLFeature(I.feature)??r,this.getAttributesFromOLFeature(I.feature,c),g.push({key:"Layer",value:I.layer.name})}else if($t.isPointsPickResult(o))this.getAttributesFromPointCloud(o,c);else if(!t.isFeatureCollection){if(L.isShapePickResult(o)){const I=o.entity;if(oe.isMeasure3D(I)){const b=I.userData.measure;r=(b==null?void 0:b.title)??r,this.getAttributesFromMeasure(o,c)}else{const b=I.userData.annotation;r=(b==null?void 0:b.title)??r,this.getAttributesFromAnnotation(o,c)}}}for(const I of mt)I(o,c)}return t!=null&&t.userData&&this.getAttributesFromEntity(t,c),(i==null?void 0:i.userData)!=null&&this.getAttributesFromPickedObject3D(o,c),i!=null&&this.getDatasetAttributes(i,g),new fn(r,l,c,o.point)}getFirstFeatureAt(o,t,n=1,i){const a=this.getObjectsAt(o,t,n,i);if(a!=null&&a.length>0)return a;const r=this.getMapAt(o,t,n);return r?[r]:null}getGeometryAttributes(o,t){const n=new p.Box3,i=new p.Vector3,a=new p.Vector3;n.setFromObject(o),n.getCenter(a),n.getSize(i),t.push({key:"Center",value:[a.x.toFixed(2),a.y.toFixed(2),a.z.toFixed(2)]});const r="m";t.push({key:"Size",value:[`${i.x.toFixed(2)}${r}`,`${i.y.toFixed(2)}${r}`,`${i.z.toFixed(2)}${r}`]})}getMapAt(o,t,n=1){const i=o.getObjects(r=>r.isMap);return o.pickObjectsAt(t,{limit:1,pickFeatures:!0,radius:n,sortByDistance:!0,where:i}).at(0)??null}getMouseCoordinate(o,t){const n=o.getObjects(a=>a.isMap),i=o.pickObjectsAt(t,{limit:1,radius:0,where:n}).at(0);return(i==null?void 0:i.point)??null}getObjectsAt(o,t,n=1,i){let a=o.getObjects(l=>te.isMap(l)!==!0&&l.name!==Le&&l.name!==Oe);i&&(a=a.filter(i));const r=o.pickObjectsAt(t,{filter:l=>this.filterPick(o,l),pickFeatures:!0,radius:n,where:a});return r.sort(Tn),r??null}hasFeature(o,t){const n=o.getObjects(a=>a.isMap!==!0&&a.name!==Le&&a.name!==Oe);return o.pickObjectsAt(t,{limit:1,radius:0,where:n}).at(0)!=null}pick(o,t){var i;const n=(i=this.getFirstFeatureAt(o,t))==null?void 0:i.at(0);if(n){const a=this.getFeatureFromPickedObject(n);if(a)return{feature:a,pickResult:n,point:n.point}}return null}filterPick(o,t){if(this._analysisStore.isClippingBoxEnabled()){const n=this._analysisStore.getClippingBox().containsPoint(t.point);if(this._analysisStore.isClippingBoxInverted()){if(n)return!1}else if(!n)return!1}return!(t.distance<o.view.camera.near||t.distance>o.view.camera.far)}getAttributesFromAnnotation(o,t){t.has("GeoJSON")||t.set("GeoJSON",[]);const n=t.get("GeoJSON"),i=o.entity,a=i.userData,{annotation:r,measurements:l,type:g}=a;if(r!=null)for(const[d,I]of Object.entries(r.properties))d==="geometry"||d==="geometryProperty"||d==="metadata"||d==="entity"||n.push({key:d,value:I});t.has("Measurement")||t.set("Measurement",[]);const c=t.get("Measurement");g==="MultiPoint"&&c.push({key:"Number of points",value:i.points.length});const C="m";l.area!=null&&c.push({key:"Area",value:`${l.area.toFixed(2)}${C}²`}),l.perimeter!=null&&c.push({key:g==="Polygon"?"Perimeter":"Length",value:`${l.perimeter.toFixed(2)}${C}`}),l.minmax!=null&&(c.push({key:"Min altitude",value:`${l.minmax[0].toFixed(2)}${C}`}),c.push({key:"Max altitude",value:`${l.minmax[1].toFixed(2)}${C}`}))}getAttributesFromEntity(o,t){t.has("Feature")||t.set("Feature",[]);const n=t.get("Feature");(o==null?void 0:o.userData)!=null&&this.getAttributesFromUserData(o.userData,n)}getAttributesFromMeasure(o,t){t.has("GeoJSON")||t.set("GeoJSON",[]);const n=t.get("GeoJSON"),i=o.entity;for(const[r,l]of Object.entries(i.userData.measure.properties))r==="geometry"||r==="geometryProperty"||r==="metadata"||r==="entity"||n.push({key:r,value:l});t.has("Measurement")||t.set("Measurement",[]);const a=t.get("Measurement");a.push({key:"From",value:i.from}),a.push({key:"To",value:i.to}),a.push({key:"Length",value:`${i.length.toFixed(2)}m`})}getAttributesFromObject3D(o,t){if((o==null?void 0:o.userData)!=null&&this.getAttributesFromUserData(o.userData,t),o!=null&&o.parent){if("isFeatureTile"in o.parent&&o.parent.isFeatureTile===!0)return;this.getAttributesFromObject3D(o.parent,t)}}getAttributesFromOLFeature(o,t){t.has("Feature")||t.set("Feature",[]);const n=t.get("Feature");o.getId()!==void 0&&n.push({key:"fid",value:o.getId()});for(const[i,a]of Object.entries(o.getProperties()))i==="geometry"||i==="geometryProperty"||n.push({key:i,value:a})}getAttributesFromPickedObject3D(o,t){t.has("Feature")||t.set("Feature",[]);const n=t.get("Feature");this.getAttributesFromObject3D(o.object,n)}getAttributesFromPointCloud(o,t){var n;(n=t.get("Dataset"))==null||n.push({key:"Tile",value:o.object.name})}getAttributesFromUserData(o,t){for(const[n,i]of Object.entries(o))if(!(n==="geometry"||n==="geometryProperty"||n==="metadata"||n==="entity"||n==="dataset"||n==="bbox"||n==="hover")){if(n==="feature"&&typeof i=="object"&&"ol_uid"in i){this.getAttributesFromUserData(i.getProperties(),t);continue}if(n==="properties"){this.getAttributesFromUserData(i,t);continue}if(typeof i!="object"){if(n==="id"){t.push({key:"fid",value:i});continue}t.push({key:n,value:i})}}}getDatasetAttributes(o,t){var n,i,a,r;((i=(n=o==null?void 0:o.userData)==null?void 0:n.dataset)==null?void 0:i.name)!=null&&t.push({key:"Dataset",value:o.userData.dataset.name}),((r=(a=o==null?void 0:o.userData)==null?void 0:a.dataset)==null?void 0:r.filename)!=null&&t.push({key:"File",value:o.userData.dataset.filename}),o.parent&&this.getDatasetAttributes(o.parent,t)}getNameFromOLFeature(o){return o.get("nom")??o.get("name")??o.getId()}}class Un{registerDatasetType(o,t){if(t.icon!=null&&(st[o]=t.icon),t.name!=null&&(at[o]=t.name),t.highlight&&ut.push(t.highlight),rn(o,t.entityBuilder),t.fileExtensions)if(t.loader==null)console.warn(`File extensions have been specified for dataset ${o}, but no loader function has been provided.`);else for(const n of t.fileExtensions)Cn(n,t.loader);t.propertyView&&ae.set(o,t.propertyView),t.attributeExtractor&&mt.push(t.attributeExtractor)}}const Hn=170;class Gn{constructor(){A(this,"geometry");A(this,"material");A(this,"object3D");A(this,"_height");this.geometry=new p.PlaneGeometry(1,1,1,1),this.material=new p.MeshBasicMaterial({color:43690,opacity:.5,transparent:!0}),this.object3D=new p.Mesh(this.geometry,this.material),this.object3D.renderOrder=2,this.visible=!1,this._height=Hn}set height(o){this._height=o}get height(){return this._height}set visible(o){this.object3D.visible=o}get visible(){return this.object3D.visible}dispose(){this.object3D.removeFromParent(),this.geometry.dispose(),this.material.dispose()}setPosition(o,t,n,i,a){this.object3D.scale.set(i,a,1),this.object3D.position.set(o,t,n),this.object3D.updateMatrixWorld()}}class Zn{constructor(o,t){A(this,"_instance");A(this,"_layerManager");A(this,"_plane");A(this,"_store",u.useAnalysisStore());this._instance=o,this._layerManager=t,this._plane=null,this._store.$onAction(({after:n,name:i})=>{n(()=>{switch(i){case"enableFloodingPlane":this.updatePlane();break;case"setFloodingPlaneHeight":this.updatePlane();break}})})}dispose(){this._plane&&(this._instance.remove(this._plane.object3D),this._plane.dispose())}async updatePlane(){this._plane||(this._plane=new Gn,await this._instance.add(this._plane.object3D));const o=this._layerManager.extent,t=o.centerAsVector2(),n=o.dimensions();this._plane.visible=this._store.isFloodingPlaneEnabled(),this._plane.setPosition(t.x,t.y,this._store.floodingPlaneHeight,n.x,n.y),this._instance.notifyChange()}}const Wn=new p.MeshBasicMaterial({color:"yellow",opacity:.1,transparent:!0});class Jn{constructor(o){A(this,"_cameraStore",u.useCameraStore());A(this,"_clippingBox");A(this,"_clippingBoxHelper");A(this,"_clippingBoxMesh");A(this,"_datasetStore",u.useDatasetStore());A(this,"_instance");A(this,"_previousTransformControls");A(this,"_store",u.useAnalysisStore());A(this,"_transformControls");A(this,"_volumeHelpers");this._instance=o,this._volumeHelpers=new p.Group,o.scene.add(this._volumeHelpers),this._clippingBox=null,this._clippingBoxHelper=null,this._clippingBoxMesh=null,this._transformControls=null,this._previousTransformControls=this._cameraStore.getNavigationMode(),this._store.$onAction(({after:t,name:n})=>{t(()=>{switch(n){case"displayClippingBoxHelper":case"enableClippingBox":case"setClippingBox":case"setClippingBoxSize":this.updateClippingBox();break;case"setClippingBoxCenter":this.moveClippingBox();break;case"setClippingBoxInverted":this.applyClippingPlanes();break}})}),this._datasetStore.$onAction(({after:t,name:n})=>{t(()=>{switch(n){case"attachEntity":this.applyClippingPlanes();break}})})}dispose(){this._instance.scene.remove(this._volumeHelpers),this.disposeClippingBox()}applyClippingPlanes(){const o=this._store.isClippingBoxEnabled()?this.getPlanesFromBoxSides():[];for(const t of this._datasetStore.getDatasets()){const n=this._datasetStore.getEntity(t);n&&(n.clippingPlanes=o,n.traverseMaterials(i=>{i.clipIntersection=this._store.isClippingBoxInverted()}),this._instance.notifyChange(n))}}createClippingBox(o,t){if(this._clippingBox=new p.Box3,this._clippingBox.setFromCenterAndSize(o,t),this._store.isClippingBoxHelperDisplayed()){const n=new p.BoxGeometry(t.x,t.y,t.z);this._clippingBoxMesh=new p.Mesh(n,Wn),this._clippingBoxHelper=new p.Box3Helper(this._clippingBox,new p.Color("yellow")),this._clippingBoxMesh.renderOrder=2,this._clippingBoxMesh.position.copy(o),this._clippingBoxMesh.updateMatrixWorld(),this._clippingBoxHelper.updateMatrixWorld(),this._transformControls=new so.TransformControls(this._instance.view.camera,this._instance.domElement),this._transformControls.addEventListener("change",()=>{this._cameraStore.getNavigationMode()!=="disabled"||this._clippingBoxMesh===null||(this._store.clippingBoxCenter.copy(this._clippingBoxMesh.position),this.moveClippingBox())}),this._transformControls.addEventListener("dragging-changed",i=>{i.value!=null?(this._previousTransformControls=this._cameraStore.getNavigationMode(),this._cameraStore.setNavigationMode("disabled"),this._cameraStore.setIsUserInteracting(!0)):(this._cameraStore.setNavigationMode(this._previousTransformControls),setTimeout(()=>this._cameraStore.setIsUserInteracting(!1),0))}),this._volumeHelpers.add(this._clippingBoxHelper),this._volumeHelpers.add(this._clippingBoxMesh),this._transformControls.attach(this._clippingBoxMesh),this._transformControls.getHelper().updateMatrixWorld(),this._instance.scene.add(this._transformControls.getHelper()),this._instance.notifyChange()}}disposeClippingBox(){var o,t,n,i,a,r,l,g;(o=this._transformControls)==null||o.detach(),(t=this._transformControls)==null||t.getHelper().removeFromParent(),(n=this._transformControls)==null||n.dispose(),(a=(i=this._clippingBoxMesh)==null?void 0:i.geometry)==null||a.dispose(),(r=this._clippingBoxMesh)==null||r.removeFromParent(),(l=this._clippingBoxHelper)==null||l.removeFromParent(),(g=this._clippingBoxHelper)==null||g.dispose(),this._instance.notifyChange()}getPlanesFromBoxSides(){if(this._clippingBox===null)throw new Error("No clippingBox defined");const o=[];return o.push(new p.Plane(new p.Vector3(0,0,1),-this._clippingBox.min.z)),o.push(new p.Plane(new p.Vector3(0,0,-1),+this._clippingBox.max.z)),o.push(new p.Plane(new p.Vector3(1,0,0),-this._clippingBox.min.x)),o.push(new p.Plane(new p.Vector3(-1,0,0),+this._clippingBox.max.x)),o.push(new p.Plane(new p.Vector3(0,1,0),-this._clippingBox.min.y)),o.push(new p.Plane(new p.Vector3(0,-1,0),+this._clippingBox.max.y)),this._store.isClippingBoxInverted()&&o.forEach(t=>t.negate()),o}moveClippingBox(){var o,t,n,i,a;this._store.isClippingBoxEnabled()&&(this._clippingBox===null&&this.createClippingBox(this._store.clippingBoxCenter,this._store.clippingBoxSize),(o=this._clippingBox)==null||o.setFromCenterAndSize(this._store.clippingBoxCenter,this._store.clippingBoxSize),this._store.isClippingBoxHelperDisplayed()&&((t=this._clippingBoxMesh)==null||t.position.copy(this._store.clippingBoxCenter),(n=this._clippingBoxMesh)==null||n.updateMatrixWorld(),(i=this._clippingBoxHelper)==null||i.updateMatrixWorld(),(a=this._transformControls)==null||a.getHelper().updateMatrixWorld(),this._instance.notifyChange(this._volumeHelpers),this._instance.notifyChange(this._transformControls))),this.applyClippingPlanes()}updateClippingBox(){this.disposeClippingBox(),this._store.isClippingBoxEnabled()&&this.createClippingBox(this._store.clippingBoxCenter,this._store.clippingBoxSize),this.applyClippingPlanes()}}class Xn{constructor(o){A(this,"_datasetStore",u.useDatasetStore());A(this,"_instance");A(this,"_store",u.useAnalysisStore());this._instance=o,this._store.$onAction(({after:t,name:n})=>{t(()=>{switch(n){case"enableCrossSection":case"setCrossSectionCenter":case"setCrossSectionOrientation":this.updateCrossSection();break}})}),this.updateCrossSection()}dispose(){}updateCrossSection(){const o=[];if(this._store.isCrossSectionEnabled()){const t=p.MathUtils.DEG2RAD*this._store.crossSectionOrientation,n=Math.cos(t),i=Math.sin(t),a=new p.Vector3(n,i,0),r=new p.Plane(a,0).distanceToPoint(this._store.crossSectionCenter),l=new p.Plane(a,-r);o.push(l)}this._instance.renderer.clippingPlanes=o;for(const t of this._datasetStore.getDatasets()){const n=this._datasetStore.getEntity(t);n&&n.dispatchEvent({clippingPlanes:o,type:"clippingPlanes-property-changed"})}this._instance.notifyChange()}}class Yn{constructor(o,t){A(this,"_clippingBoxManager");A(this,"_crossSectionManager");A(this,"_floodingPlaneManager");A(this,"_instance");this._instance=o,this._floodingPlaneManager=new Zn(o,t),this._crossSectionManager=new Xn(o),this._clippingBoxManager=new Jn(o)}dispose(){this._clippingBoxManager.dispose(),this._crossSectionManager.dispose(),this._floodingPlaneManager.dispose()}}const Re=R.defineStore("annotations",()=>{const s=e.reactive([]),o=e.ref("normal"),t=e.computed(()=>s.length),n=e.ref(!1),i=e.ref(!0);function a(){return n.value}function r(){return i.value}function l(S){i.value=S}function g(S){n.value=S}function c(){return o.value}function C(S){o.value=S}function d(){return s}function I(S){s.splice(s.indexOf(S),1)}function b(){}function m(){}function h(){}function v(S){s.push(S)}function E(S){return s.some(he=>he.title===S)}function V(S){}function w(){}function f(S){}function k(S){}return{add:v,count:t,createLine:m,createPoint:b,createPolygon:h,edit:V,getAnnotationMode:c,getAnnotations:d,hasAnnotation:E,importAnnotationFile:f,importAnnotationsFiles:k,isUserDrawing:a,remove:I,setAnnotationMode:C,setIsUserDrawing:g,setShowLabels:l,showLabels:r,stopEdition:w}}),K=R.defineStore("notifications",()=>{function s(o){}return{push:s}});class ht extends p.EventDispatcher{constructor(t,n,i={}){super();A(this,"properties");A(this,"title");A(this,"uuid");A(this,"_isEditing");A(this,"_object");A(this,"_visible");this.title=t,this._visible=!0,this._isEditing=!1,this._object=n,this.properties=i,this.uuid=p.MathUtils.generateUUID()}get isEditing(){return this._isEditing}set isEditing(t){this._isEditing=t,this.dispatchEvent({type:"isEditing"})}get object(){return this._object()}get visible(){return this._visible}set visible(t){this._visible=t,this.dispatchEvent({type:"visible"})}static toCollection(t){return{features:t.map(i=>i.toGeoJSON()),type:"FeatureCollection",id:`${u.Download.getBaseUrl()}#${p.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:u.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D annotations",updated:new Date().toISOString()}}}toGeoJSON(){const t=this.object.toGeoJSON({includeAltitudes:!0});return t.id=`${u.Download.getBaseUrl()}#${this.uuid}`,t.properties={...t.properties,title:this.title,updated:new Date().toISOString()},t}}class N{constructor(o,t,n="info"){A(this,"level");A(this,"text");A(this,"title");this.title=o,this.text=t,this.level=n}static empty(){return new N("","","info")}}function qn(s){let o=1/0,t=-1/0,n;Array.isArray(s)?n=s:n=s.points;for(let i=0;i<n.length;i+=1)o=Math.min(o,n[i].z),t=Math.max(t,n[i].z);return[o,t]}const Kn={getMinMaxAltitudes:qn};function Qn(s){return window.prompt("Annotation name",s)}const ft=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),Qe=s=>{let o=s.area,t="m²";return o>1e6&&(o=o/1e6,t="km²"),`${ft.format(o)} ${t}`},_n=new p.Vector3,$n=new p.Vector3,_e=s=>o=>{const{camera:t}=s,{end:n,start:i}=o,a=_n.copy(i).project(t),r=$n.copy(n).project(t),l=Math.pow(100/s.width,2);if(a.distanceToSquared(r)<l)return null;let c=o.length;if(c==null||c<=0)return null;let C="m";return c>1e3&&(c=c/1e3,C="km"),`${ft.format(c)} ${C}`},Me=s=>{const o=s.shape;return o.userData.annotation?o.userData.annotation.title:null};class ei{constructor(o,t,n){A(this,"_boundExitEdition");A(this,"_boundOnEndDrag");A(this,"_boundOnKeyDown");A(this,"_boundOnStartDrag");A(this,"_boundUpdateLabels");A(this,"_drawTool");A(this,"_editedShape",null);A(this,"_editedShapePreviousPoints",null);A(this,"_instance");A(this,"_isEditing",!1);A(this,"_notificationStore",K());A(this,"_picker");A(this,"_shapes",new Map);A(this,"_store",Re());this._instance=o,this._picker=n,this._drawTool=new U({instance:o}),this._boundOnEndDrag=()=>{t.enabled=!0},this._boundOnStartDrag=()=>{t.enabled=!1},this._boundUpdateLabels=this.updateLabels.bind(this),this._boundExitEdition=()=>{this._instance.domElement.removeEventListener("contextmenu",this._boundExitEdition),this.stopEdition(!1)},this._drawTool.addEventListener("start-drag",this._boundOnStartDrag),this._drawTool.addEventListener("end-drag",this._boundOnEndDrag),this._boundOnKeyDown=this.onKeyDown.bind(this),document.addEventListener("keydown",this._boundOnKeyDown),this._instance.addEventListener("after-camera-update",this._boundUpdateLabels),this._store.$onAction(({after:i,args:a,name:r})=>{i(()=>{switch(r){case"createLine":this.drawLine();break;case"createPoint":this.drawPoint();break;case"createPolygon":this.drawPolygon();break;case"edit":this.editAnnotation(a[0]);break;case"importAnnotationFile":this.importAnnotationFile(a[0]);break;case"importAnnotationsFiles":this.importAnnotationFiles(a[0]);break;case"remove":this.deleteAnnotation(a[0]);break;case"setShowLabels":this.udpateLabelVisibility(a[0]);break;case"stopEdition":this.stopEdition(!1);break}})})}dispose(){document.removeEventListener("keydown",this._boundOnKeyDown),this._drawTool.removeEventListener("start-drag",this._boundOnStartDrag),this._drawTool.removeEventListener("end-drag",this._boundOnEndDrag),this._instance.removeEventListener("after-camera-update",this._boundUpdateLabels),this._shapes.forEach(o=>this._instance.remove(o)),this._drawTool.dispose()}pushNewAnnotation(o,t,n={}){const i=new ht(o,()=>t,n);return t.userData.annotation=i,i.addEventListener("visible",()=>this.updateDrawing(i)),this._store.add(i),this._shapes.set(i.uuid,t),i}addShape(o,t,n){if(o&&!this._shapes.has(o.id)){const i=o.userData;i.type=t,i.highlightable=!0;let a=n;if(this._store.hasAnnotation(a)){for(let l=1;l<1e3&&(a=`${n} (${l})`,!!this._store.hasAnnotation(a));l+=1);this._store.hasAnnotation(a)&&(a="Achievement unlocked: 1000 annotations with default name")}const r=Qn(a);if(r!=null){this.computeMeasurements(o);const l=this.pushNewAnnotation(r,o);this._shapes.set(l.uuid,o)}else this._instance.remove(o)}}computeMeasurements(o){o.userData.measurements={minmax:Kn.getMinMaxAltitudes(o)},(o.userData.type==="Polygon"||o.userData.type==="LineString")&&(o.userData.measurements.perimeter=o.getLength()),o.userData.type==="Polygon"&&(o.userData.measurements.area=o.getArea())}deleteAnnotation(o){if(this._shapes.has(o.uuid)){const t=o.object;this._instance.remove(t),this._shapes.delete(o.uuid)}}draw(o,t,n,i){this._store.setIsUserDrawing(!0),this._drawTool[o]({...this.getCreationOptions(),...i}).then(a=>{this.addShape(a,t,n)}).finally(()=>this._store.setIsUserDrawing(!1))}drawLine(){this.draw("createLineString","LineString","New line annotation",{segmentLabelFormatter:_e(this._instance.view),showSegmentLabels:this._store.showLabels()})}drawPoint(){this.draw("createPoint","Point","New point annotation",{borderWidth:3,showVertexLabels:this._store.showLabels(),vertexLabelFormatter:Me,vertexRadius:re})}drawPolygon(){this.draw("createPolygon","Polygon","New polygon annotation",{showSurfaceLabel:this._store.showLabels(),surfaceLabelFormatter:Qe})}editAnnotation(o){const t=this._shapes.get(o.uuid);if(!t){console.warn(`no shape found for annotation ${o.uuid}`);return}this._editedShape=t,this._editedShapePreviousPoints=[...t.points],o.isEditing=!0,t.color=_o,t.userData.highlightable=!1,this._instance.notifyChange(t),this._store.setIsUserDrawing(!0),this._instance.domElement.addEventListener("contextmenu",this._boundExitEdition),this._isEditing=!0,this._drawTool.enterEditMode({pick:this.pick.bind(this),shapesToEdit:[t]})}filterPickResults(o,t){return t?o:o.filter(n=>!L.isShapePickResult(n))}getCreationOptions(){return{color:T,pick:this.pick.bind(this)}}async importAnnotation(o,t){if((o.properties==null||typeof o.properties!="object")&&(o.properties={}),o.properties.title==null&&(o.properties.title=p.MathUtils.generateUUID()),t.has(o.properties.title))return!1;const n=await this.importShapeFromGeoJSON(o);return this.pushNewAnnotation(o.properties.title,n,o.properties),!0}async importAnnotationFile(o){const t=new Set(this._store.getAnnotations().map(n=>n.title));try{const{nbImported:n,nbSkipped:i}=await this.importBlob(o,t);this._notificationStore.push(new N("Annotations",`${n} annotations imported (${i} skipped)`,"success"))}catch{}}async importAnnotationFiles(o){const t=[];let n=0,i=0;const a=[],r=new Set(this._store.getAnnotations().map(l=>l.title));for(const l of o)t.push(this.importBlob(l,r).then(({nbImported:g,nbSkipped:c})=>{n+=g,i+=c}).catch(g=>{a.push(g.message)}));await Promise.allSettled(t),a.length>0?this._notificationStore.push(new N("Annotations",`${n} annotations imported (${i} skipped); ${a.length} errors: ${a}`,"warning")):this._notificationStore.push(new N("Annotations",`${n} annotations imported (${i} skipped)`,"success"))}async importBlob(o,t){const n=await o.text(),i=JSON.parse(n),a=i.type==="FeatureCollection"?i.features:[i];let r=0,l=0;for(const g of a)await this.importAnnotation(g,t)?r++:l++;return{nbImported:r,nbSkipped:l}}async importShapeFromGeoJSON(o){if(o.type!=="Feature")throw new Error("not a valid GeoJSON feature");const t="EPSG:4326",n=a=>{const r=new O(t,a[0],a[1],a[2]??0);return r.as(this._instance.referenceCrs,r).toVector3()};let i;switch(o.geometry.type){case"LineString":i=new L({beforeRemovePoint:U.limitRemovePointHook(2),color:T,segmentLabelFormatter:_e(this._instance.view),showLine:!0,showSegmentLabels:!0,showVertexLabels:!1,showVertices:!0}),i.setPoints(o.geometry.coordinates.map(n));break;case"MultiPoint":i=new L({beforeRemovePoint:U.limitRemovePointHook(1),color:T,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Me,vertexRadius:re}),i.setPoints(o.geometry.coordinates.map(n));break;case"Point":i=new L({beforeRemovePoint:U.inhibitHook,color:T,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Me,vertexRadius:re}),i.setPoints([n(o.geometry.coordinates)]);break;case"Polygon":i=new L({afterRemovePoint:U.afterRemovePointOfRing,afterUpdatePoint:U.afterUpdatePointOfRing,beforeRemovePoint:U.limitRemovePointHook(4),color:T,showLine:!0,showSurface:!0,showSurfaceLabel:!0,showVertexLabels:!1,showVertices:!0,surfaceLabelFormatter:Qe}),i.setPoints(o.geometry.coordinates[0].map(n));break;default:throw new Error("could not import shape from given GeoJSON geometry: "+o.geometry.type)}return this.computeMeasurements(i),await this._instance.add(i),i}onKeyDown(o){o.code==="Escape"&&this.stopEdition(!0)}pick(o){let t;switch(this._store.getAnnotationMode()){case"mapOnly":t=this.pickMap(o);break;case"normal":t=this.pickDefault(o);break;case"objectsOnly":t=this.pickFeatures(o);break}return t}pickDefault(o){const t=this._instance.pickObjectsAt(o,{sortByDistance:!0});return this.filterPickResults(t,this._isEditing)}pickFeatures(o){const t=this._picker.getObjectsAt(this._instance,o,0)??[];return this.filterPickResults(t,this._isEditing)}pickMap(o){const t=this._instance.pickObjectsAt(o,{filter:n=>L.isShapePickResult(n)||nt.isMapPickResult(n),sortByDistance:!0});return this.filterPickResults(t,this._isEditing)}stopEdition(o){this._drawTool.exitEditMode(),this._isEditing=!1,this._store.setIsUserDrawing(!1),this._editedShape&&(o&&this._editedShapePreviousPoints&&(this._editedShape.setPoints(this._editedShapePreviousPoints),this._editedShapePreviousPoints=null),this._editedShape.userData.annotation!=null&&(this._editedShape.userData.annotation.isEditing=!1),this._editedShape.color=T,this._editedShape.userData.highlightable=!0,this._editedShape=null)}udpateLabelVisibility(o){this._shapes.forEach(t=>{switch(t.userData.type){case"LineString":t.showSegmentLabels=o;break;case"MultiPoint":case"Point":t.showVertexLabels=o;break;case"Polygon":t.showSurfaceLabel=o;break}})}updateDrawing(o){o.object.visible=o.visible,o.object.traverse(t=>t.visible=o.visible),this._instance.notifyChange()}updateLabels(){this._shapes.forEach(o=>{o.visible&&o.rebuildLabels()})}}class Ce{constructor(o,t,n){A(this,"camera");A(this,"focalOffset");A(this,"target");this.camera=o,this.target=t,this.focalOffset=n}}class ti extends ao{constructor(t,n,i){super(t,i,"Camera Controls");A(this,"camera");A(this,"_boundOnAfterCameraUpdate");A(this,"_cameraPosition");this.camera=n,this._cameraPosition=new Ce(new p.Vector3,new p.Vector3,new p.Vector3),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this.instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);const a=this.gui.addFolder("Position");a.close(),this._controllers.push(a.add(this._cameraPosition.camera,"x")),this._controllers.push(a.add(this._cameraPosition.camera,"y")),this._controllers.push(a.add(this._cameraPosition.camera,"z"));const r=this.gui.addFolder("Target");r.close(),this._controllers.push(r.add(this._cameraPosition.target,"x")),this._controllers.push(r.add(this._cameraPosition.target,"y")),this._controllers.push(r.add(this._cameraPosition.target,"z"));const l=this.gui.addFolder("Focal offset");l.close(),this._controllers.push(l.add(this._cameraPosition.focalOffset,"x")),this._controllers.push(l.add(this._cameraPosition.focalOffset,"y")),this._controllers.push(l.add(this._cameraPosition.focalOffset,"z"))}dispose(){this.instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),super.dispose()}onAfterCameraUpdate(){this.camera.getCameraPosition(this._cameraPosition)}}P.install({THREE:{Box3:p.Box3,MathUtils:p.MathUtils,Matrix4:p.Matrix4,Quaternion:p.Quaternion,Raycaster:p.Raycaster,Sphere:p.Sphere,Spherical:p.Spherical,Vector2:p.Vector2,Vector3:p.Vector3,Vector4:p.Vector4}});class oi extends p.EventDispatcher{constructor(t,n){super();A(this,"_boundOnAfterCameraUpdate");A(this,"_boundOnBeforeCameraUpdate");A(this,"_boundOrbitControlsOnContextMenu");A(this,"_boundOrbitControlsOnKey");A(this,"_boundOrbitControlsOnMouseUp");A(this,"_boundOrbitControlsOnWheel");A(this,"_boundPositionOnMapOnClick");A(this,"_boundPositionOnMapOnContextMenu");A(this,"_boundPositionOnMapOnMouseMove");A(this,"_cameraControlsInspector");A(this,"_clock");A(this,"_giro3dStore",q());A(this,"_instance");A(this,"_orbitControls");A(this,"_orbitHelper");A(this,"_picker");A(this,"_pickObjectsAt");A(this,"_positionOnMapHelper");A(this,"_store",u.useCameraStore());this._instance=t,this._picker=n,this._orbitControls=new P(this._instance.view.camera,this._instance.domElement);const i=document.createElement("div");i.className="helper",i.id="orbit-helper";const a=document.createElement("i");a.className="bi bi-mouse2-fill text-dark shadow",i.append(a),this._orbitHelper=new Ve.CSS2DObject(i),this._instance.add(this._orbitHelper);const r=document.createElement("div");r.className="helper",r.id="position-on-map-helper";const l=document.createElement("i");l.className="fg-position-man text-dark shadow",r.append(l),this._positionOnMapHelper=new Ve.CSS2DObject(r),this._instance.add(this._positionOnMapHelper),this._cameraControlsInspector=null,this.initializeOrbitControls(),this._pickObjectsAt=c=>{var C;return((C=this._picker.getFirstFeatureAt(this._instance,c,1))==null?void 0:C.at(0))??null},this._clock=new p.Clock,this._boundOnBeforeCameraUpdate=this.onBeforeCameraUpdate.bind(this),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu=null,this._store.$onAction(({args:c,name:C})=>{switch(C){case"lookTopDownAt":this.lookTopDownAt(c[0]);break;case"setCameraPosition":this.setCamera(c[0]);break;case"setNavigationMode":this.setNavigationMode(c[0]);break}});const g=this._giro3dStore.getInspector();g!=null&&this.initializeInspector(g),this._giro3dStore.$onAction(({after:c,args:C,name:d})=>{c(()=>{switch(d){case"setInspector":this.initializeInspector(C[0]);break}})})}get enabled(){return this._orbitControls.enabled}set enabled(t){this._orbitControls.enabled=t}dispose(){this._instance.removeEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._disablePositionOnMap(),this.disposeOrbitControls(),this._instance.remove(this._positionOnMapHelper),this._instance.remove(this._orbitHelper)}executeInteraction(t){this._orbitControls.update(this._clock.getDelta());const n=t();return this._orbitControls.update(this._clock.getDelta()),this._orbitControls.dispatchEvent({type:"update"}),n}getCameraPosition(t){const n=this._orbitControls,i=t??new Ce(new p.Vector3,new p.Vector3,new p.Vector3);return n.getPosition(i.camera),n.getTarget(i.target),n.getFocalOffset(i.focalOffset),i}goToBox(t,n=!0,i={paddingBottom:10,paddingLeft:10,paddingRight:10,paddingTop:10}){const a=this.getBox(t);return this.executeInteraction(()=>(this._orbitControls.setFocalOffset(0,0,0),this._orbitControls.fitToBox(a,n,i)))}async lookAt(t,n,i=!1){await this.executeInteraction(async()=>(this._orbitControls.setFocalOffset(0,0,0,!1),this._orbitControls.setLookAt(t.x,t.y,t.z,n.x,n.y,n.z,i))),this._orbitControls.setOrbitPoint(n.x,n.y,n.z)}lookTopDownAt(t,n=!0){const i=new p.Vector3,a=new p.Vector3,r=new p.Vector3(0,0,1),l=this.getBox(t);l.min.z=l.max.z,l.getCenter(i),l.getSize(a);const g=this._orbitControls.getDistanceToFitBox(a.x,a.y,0),c=r.multiplyScalar(g).add(i);return c.x+=a.x/10,c.y-=a.y/10,this.lookAt(c,i,n)}setCamera(t){this.executeInteraction(async()=>(this._orbitControls.setOrbitPoint(0,0,0),this._orbitControls.setLookAt(t.camera.x,t.camera.y,t.camera.z,t.target.x,t.target.y,t.target.z,!1),this._orbitControls.setFocalOffset(t.focalOffset.z,t.focalOffset.y,t.focalOffset.z,!1),this._orbitControls.update(0),Promise.resolve()))}setInitialPosition(t,n=4e3){const i=new O(t.crs,t.west,t.south,n).toVector3(),a=t.centerAsVector3();this.lookAt(i,a,!1)}getBox(t){let n=new p.Box3;if(t.isBox3)n=t.clone();else if(t.isEntity3D){const i=t,a=i.getBoundingBox();a&&!a.isEmpty()?n=a.clone():"extent"in i&&(n=i.extent.toBox3(0,200))}else if(t.isObject3D)n.setFromObject(t);else throw new Error("obj should be instanceof Box3, Object3D or Entity3D");if(n.isEmpty())throw new Error("Could not find bounding box of object");return n.min.z=Math.max(n.min.z,0),n.max.z=Math.min(n.max.z,2e3),n}_disablePositionOnMap(){(this._boundPositionOnMapOnClick||this._boundPositionOnMapOnMouseMove||this._boundPositionOnMapOnContextMenu)&&(this._boundPositionOnMapOnClick&&this._instance.domElement.removeEventListener("click",this._boundPositionOnMapOnClick),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove&&this._instance.domElement.removeEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu&&this._instance.domElement.removeEventListener("contextmenu",this._boundPositionOnMapOnContextMenu),this._boundPositionOnMapOnContextMenu=null,this._positionOnMapHelper.visible=!1,this._instance.domElement.style.cursor="auto",this._instance.notifyChange())}_enablePositionOnMap(){this._boundPositionOnMapOnClick=this.onPositionOnMapClick.bind(this),this._boundPositionOnMapOnMouseMove=this.onPositionOnMapMouseMove.bind(this),this._boundPositionOnMapOnContextMenu=this.onPositionOnMapContextMenu.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._instance.domElement.addEventListener("click",this._boundPositionOnMapOnClick),this._instance.domElement.addEventListener("contextmenu",this._boundPositionOnMapOnContextMenu)}disposeOrbitControls(){this._instance.domElement.removeEventListener("keydown",this._boundOrbitControlsOnKey),this._instance.domElement.removeEventListener("wheel",this._boundOrbitControlsOnWheel),this._instance.domElement.removeEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.removeEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._orbitControls.disconnect()}initializeInspector(t){this._cameraControlsInspector&&this._cameraControlsInspector.dispose(),t&&(this._cameraControlsInspector=new ti(t.gui,this,this._instance),t.addPanel(this._cameraControlsInspector))}initializeOrbitControls(){this._orbitControls.infinityDolly=!0,this.setNavigationMode(this._store.getNavigationMode()),this._boundOrbitControlsOnContextMenu=this.orbitControlsOnContextMenu.bind(this),this._boundOrbitControlsOnMouseUp=this.orbitControlsOnMouseUp.bind(this),this._instance.domElement.addEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.addEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._boundOrbitControlsOnWheel=this.orbitControlsOnWheel.bind(this),this._instance.domElement.addEventListener("wheel",this._boundOrbitControlsOnWheel),this._orbitControls.addEventListener("update",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>{(this._orbitControls.active||this._orbitControls.currentAction!==0)&&(this.dispatchEvent({type:"interaction-start"}),this._store.setIsUserInteracting(!0))}),this._orbitControls.addEventListener("controlend",()=>setTimeout(()=>{this._store.setIsUserInteracting(!1),this.dispatchEvent({type:"interaction-end"})})),this._boundOrbitControlsOnKey=this.orbitControlsOnKey.bind(this),this._instance.domElement.addEventListener("keydown",this._boundOrbitControlsOnKey)}onAfterCameraUpdate(){this._store.setCurrentPosition(this.getCameraPosition(),this._instance.view.camera.position)}onBeforeCameraUpdate(){const t=this._clock.getDelta();this._orbitControls.update(t)&&this._instance.notifyChange(this._instance.view.camera)}onPositionOnMapClick(t){const n=this._picker.getMapAt(this._instance,t);if(n){this._disablePositionOnMap();const i=new p.Vector3;this._instance.view.camera.getWorldDirection(i),i.normalize().setLength(3);const a=n.point.clone();a.z+=1.7;const r=a.clone();r.add(i),r.z=a.z,this.lookAt(a,r,!0).finally(()=>this._store.setNavigationMode("first-person"))}}onPositionOnMapContextMenu(t){this._disablePositionOnMap(),this._store.setNavigationMode("orbit"),t.preventDefault()}onPositionOnMapMouseMove(t){const n=this._picker.getMapAt(this._instance,t);this._instance.domElement.style.cursor=n?"none":"auto",this._positionOnMapHelper.visible=n!=null,n&&(this._positionOnMapHelper.position.copy(n.point),this._positionOnMapHelper.updateMatrixWorld()),this._instance.notifyChange()}orbitControlsOnContextMenu(t){if(this._store.getNavigationMode()!=="orbit")return;const n=this._pickObjectsAt(t);n?(this._orbitHelper.visible=!0,this._orbitHelper.position.copy(n.point),this._orbitHelper.updateMatrixWorld(),this._orbitControls.setOrbitPoint(n.point.x,n.point.y,n.point.z)):(this._orbitHelper.visible=!0,this._orbitControls.getTarget(this._orbitHelper.position),this._orbitHelper.updateMatrixWorld())}orbitControlsOnKey(t){const n=this._store.getNavigationMode();if(n==="position-on-map"){t.code==="Escape"&&this._store.setNavigationMode("orbit");return}if(n!=="orbit"&&n!=="first-person")return;const i={ARROW_BOTTOM:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",KEY_DOWN:"KeyS",KEY_LEFT:"KeyA",KEY_RIGHT:"KeyD",KEY_UP:"KeyW"};let a=0,r=0,l=0,g=0,c=t.ctrlKey||t.metaKey||t.shiftKey?200:20;switch(n==="first-person"&&(c/=10),t.code){case i.ARROW_BOTTOM:n==="first-person"?r=-1:a=-1;break;case i.ARROW_LEFT:case i.KEY_LEFT:l=-1;break;case i.ARROW_RIGHT:case i.KEY_RIGHT:l=1;break;case i.ARROW_UP:n==="first-person"?r=1:a=1;break;case i.KEY_DOWN:g=1;break;case i.KEY_UP:g=-1;break}a&&this.executeInteraction(()=>this._orbitControls.forward(a*this._orbitControls.truckSpeed*c,!0)),r&&this.executeInteraction(()=>this._orbitControls.dollyInFixed(r*this._orbitControls.truckSpeed*c,!0)),l&&this.executeInteraction(()=>this._orbitControls.truck(l*this._orbitControls.truckSpeed*c,0,!0)),g&&this.executeInteraction(()=>this._orbitControls.truck(0,g*this._orbitControls.truckSpeed*c,!0))}orbitControlsOnMouseUp(){this._store.getNavigationMode()==="orbit"&&(this._orbitHelper.visible=!1,this._instance.notifyChange())}orbitControlsOnWheel(){this._orbitControls.dispatchEvent({type:"controlstart"}),setTimeout(()=>this._orbitControls.dispatchEvent({type:"controlend"}),0)}setNavigationMode(t){switch(this._disablePositionOnMap(),t){case"disabled":this._orbitControls.enabled=!1;break;case"first-person":{this._orbitControls.dollyToCursor=!1,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=2,this._orbitControls.dollySpeed=20,this._orbitControls.azimuthRotateSpeed=.3,this._orbitControls.polarRotateSpeed=.3,this._orbitControls.mouseButtons.left=P.ACTION.ROTATE,this._orbitControls.mouseButtons.right=P.ACTION.TRUCK,this._orbitControls.mouseButtons.wheel=P.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=P.ACTION.DOLLY,this._orbitControls.enabled=!0;const n=new p.Vector3,i=this._instance.view.camera.position.clone(),a=new p.Vector3;this._instance.view.camera.getWorldDirection(n),n.normalize().setLength(3),a.copy(i).add(n),this.lookAt(i,a,!1)}break;case"orbit":{this._orbitControls.dollyToCursor=!0,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=1/0,this._orbitControls.dollySpeed=1,this._orbitControls.azimuthRotateSpeed=1,this._orbitControls.polarRotateSpeed=1,this._orbitControls.mouseButtons.left=P.ACTION.TRUCK,this._orbitControls.mouseButtons.right=P.ACTION.ROTATE,this._orbitControls.mouseButtons.wheel=P.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=P.ACTION.DOLLY,this._orbitControls.enabled=!0;const n=new p.Vector3,i=this._instance.view.camera.position.clone();this._instance.view.camera.getWorldDirection(n);const a=new p.Raycaster;a.camera=this._instance.view.camera,a.set(i,n);const r=a.intersectObject(this._instance.scene).at(0);r&&this.lookAt(i,r.point,!1)}break;case"position-on-map":this._orbitControls.enabled=!1,this._enablePositionOnMap();break;default:return t}this._instance.domElement.focus()}}const G=new p.EventDispatcher,bt=s=>u.isObject(s)&&(s.type==="colorLayer"||s.type==="maskLayer"||s.type==="elevationLayer"),ni=s=>u.isObject(s)&&!bt(s);class ii{constructor(o,t){A(this,"_axisGrids",new Map);A(this,"_entities",new Map);A(this,"_instance");A(this,"_layerManager");A(this,"_masks",new Map);A(this,"_notifications",K());A(this,"_overlays",new Map);A(this,"_store",u.useDatasetStore());this._instance=o,this._layerManager=t,this._store.$onAction(({after:n,args:i,name:a})=>{n(()=>{switch(a){case"importFromFile":this.importFromFile(i[0]);break;case"remove":this.deleteDataset(i[0]);break;case"setVisible":this.onVisibilityChanged(i[0],i[1]);break;case"toggleGrid":this.onToggleGrid(i[0]);break;case"toggleMask":this.onToggleMask(i[0]);break}})});for(const n of this._store.getDatasets())n.visible&&this.preloadDataset(n)}dispose(){}async createGrid(o){const t=this._store.getBoundingBox(o);if(t==null||t.isEmpty())return;const n=new ro({style:{color:new p.Color("orange"),fontSize:12,numberFormat:Intl.NumberFormat("fr")},ticks:{x:50,y:50,z:50},volume:{ceiling:t.max.z+10,extent:ne.fromBox3(this._instance.referenceCrs,t).withMargin(20,20),floor:t.min.z-10}});n.name=`AxisGrid-${o.uuid}`,await this._instance.add(n),this._axisGrids.set(o.uuid,n)}async createMask(o){const t=this._store.getBoundingBox(o);if(t==null||t.isEmpty())return;t.expandByVector(new p.Vector3(-5,-5,0));const n=new lo({geometry:new co([[[t.min.x,t.min.y],[t.min.x,t.max.y],[t.max.x,t.max.y],[t.max.x,t.min.y],[t.min.x,t.min.y]]]),name:"Mask polygon"}),i=new ge({name:`mask-${o.uuid}`,source:new $({data:[n],style:new B.Style({fill:new B.Fill({color:"white"})})})});i.maskMode=ge.MaskMode.Inverted;const a=this._instance.getObjects(r=>te.isMap(r));for(const r of a)await r.addLayer(i),this._instance.notifyChange(r);this._masks.set(o.uuid,i)}deleteDataset(o){this.deleteGrid(o),this.deleteMask(o);const t=this._entities.get(o.uuid);t&&(this._instance.remove(t),this._instance.notifyChange());const n=this._overlays.get(o.uuid);n&&this._layerManager.removeBasemapLayer(n),G.dispatchEvent({type:"dataset-removed",value:o})}deleteGrid(o){const t=this._axisGrids.get(o.uuid);t&&this._instance.remove(t),this._axisGrids.delete(o.uuid)}deleteMask(o){const t=this._masks.get(o.uuid);t&&this._instance.getObjects(i=>te.isMap(i)).forEach(i=>{i.removeLayer(t),this._instance.notifyChange(i)}),this._masks.delete(o.uuid)}async importFromFile(o){let t;const n=o instanceof File?o.name:o;try{this._notifications.push(new N(n,"Importing file..."));const i=await pn.importFile(o,u.getConfig());t=this._store.add(i),this._notifications.push(new N(t.name,"Import done, parsing data...","success"))}catch(i){console.error(i),this._notifications.push(new N(n,i.message,"error"));return}try{t.isPreloading=!0,await this.preloadDataset(t),this._notifications.push(new N(t.name,"Import successful.","success"))}catch{}G.dispatchEvent({type:"dataset-added",value:t})}onDatasetPreloaded(o,t){o.isPreloaded=!0,o.isPreloading=!1,o.onObjectPreloaded&&o.onObjectPreloaded(o,t),this._store.attachEntity(o,t)}onDatasetPreloadedAsLayer(o,t){o.isPreloaded=!0,o.isPreloading=!1,this._store.attachLayer(o,t)}async onToggleGrid(o){this._axisGrids.has(o.uuid)?this.deleteGrid(o):await this.createGrid(o)}async onToggleMask(o){this._masks.has(o.uuid)?this.deleteMask(o):await this.createMask(o)}async onVisibilityChanged(o,t){try{o.visible=t,!o.isPreloaded&&t&&await this.preloadDataset(o),await this.updateDataset(o),u.Datagroup.isGroup(o)&&o.children.forEach(n=>void this.onVisibilityChanged(n,t))}catch{o.visible=!1}G.dispatchEvent({type:"dataset-visibility-changed",value:o})}async preloadDataset(o){if(o.isPreloaded)return Promise.resolve(o);if(u.Datagroup.isGroup(o))return o.isPreloaded=!0,Promise.resolve(o);o.isPreloading=!0;try{if(bt(o)){const t=await Ne.getDatasetLayer(this._instance,o);t.visible=o.visible,this._overlays.set(o.uuid,t),await this._layerManager.addDatasetLayer(t),this.onDatasetPreloadedAsLayer(o,t)}else if(ni(o)){const t=await ln.getEntity(this._instance,o);t.visible=o.visible,this._entities.set(o.uuid,t),await this._instance.add(t),this.onDatasetPreloaded(o,t)}else throw new Error("Dataset is neither an overlay or 3d mesh")}catch(t){throw console.error("Could not load dataset",o,t),o.isPreloading=!1,this._notifications.push(new N(o.name,`Could not load dataset : ${t.message}`,"error")),t}return o}async updateDataset(o){const t=this._entities.get(o.uuid);t&&(t.visible=o.visible,o.visible&&"isMaskingBasemap"in o.config&&o.config.isMaskingBasemap===!0?await this.createMask(o):!o.visible&&this._masks.has(o.uuid)&&this.deleteMask(o),this._instance.notifyChange(t));const n=this._overlays.get(o.uuid);n&&(n.visible=o.visible,this._layerManager.notify(n))}}class si{constructor(o){A(this,"_hoverMeasurement");A(this,"_picker");A(this,"_raycaster");this._picker=o,this._raycaster=new p.Raycaster,this._hoverMeasurement=null}clean(){this._hoverMeasurement&&(this._hoverMeasurement.instance.remove(this._hoverMeasurement),this._hoverMeasurement=null)}dispose(){this.clean()}getLastMeasurement(){var o;return(o=this._hoverMeasurement)==null?void 0:o.clone()}measure(o,t){var i;const n=(i=this._picker.getFirstFeatureAt(o,t,0,a=>!L.isShape(a)))==null?void 0:i.at(0);if(n&&n.normal){const a=n.normal.clone();a.transformDirection(n.object.matrixWorld),a.normalize(),this._raycaster.camera=o.view.camera,this._raycaster.set(n.point,a);const r=this._raycaster.intersectObject(o.scene,!0).filter(l=>l.distance>1e-5&&l.object.userData.parentEntity!==this._hoverMeasurement).at(0);r&&(this._hoverMeasurement||(this._hoverMeasurement=new oe,o.add(this._hoverMeasurement)),this._hoverMeasurement.visible=!0,this._hoverMeasurement.setPoints([n.point,r.point]),o.notifyChange(this._hoverMeasurement))}}}const Te=R.defineStore("measurement",()=>{const s=e.reactive([]),o=e.ref("laser"),t=e.computed(()=>s.length),n=e.ref(!1);function i(){return n.value}function a(v){n.value=v}function r(){return o.value}function l(v){o.value=v}function g(){return s}function c(v){s.splice(s.indexOf(v),1)}function C(v){s.push(v)}function d(v){return s.some(E=>E.title===v)}function I(v){}function b(v){}function m(){}function h(){}return{add:C,count:t,end:h,getMeasurementMode:r,getMeasures:g,hasMeasure:d,importMeasureFile:I,importMeasureFiles:b,isUserMeasuring:i,remove:c,setIsUserMeasuring:a,setMeasurementMode:l,start:m}});class vt extends p.EventDispatcher{constructor(t,n,i={}){super();A(this,"properties");A(this,"title");A(this,"uuid");A(this,"_object");A(this,"_visible");this.title=t,this._visible=!0,this._object=n,this.properties=i,this.uuid=p.MathUtils.generateUUID()}get object(){return this._object}set object(t){this._object=t}get visible(){return this._visible}set visible(t){this._visible=t,this.dispatchEvent({type:"visible"})}static toCollection(t){return{features:t.map(i=>i.toGeoJSON()),type:"FeatureCollection",id:`${u.Download.getBaseUrl()}#${p.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:u.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D measures",updated:new Date().toISOString()}}}toGeoJSON(){return{geometry:{coordinates:[this.object.from.toArray(),this.object.to.toArray()],type:"LineString"},id:`${u.Download.getBaseUrl()}#${this.uuid}`,properties:{...this.properties,title:this.title,updated:new Date().toISOString()},type:"Feature"}}}function ai(s){return window.prompt("Measure name",s)}class ri{constructor(o,t,n){A(this,"_boundMeasure");A(this,"_boundOnEscape");A(this,"_boundPause");A(this,"_boundRestart");A(this,"_boundSaveMeasure");A(this,"_camera");A(this,"_instance");A(this,"_measureTool");A(this,"_notificationStore",K());A(this,"_paused",!1);A(this,"_store",Te());this._instance=o,this._measureTool=new si(n),this._camera=t,this._boundPause=()=>{this._paused=!0},this._boundRestart=()=>{this._paused=!1},this._camera.addEventListener("interaction-start",this._boundPause),this._camera.addEventListener("interaction-end",this._boundRestart),this._boundOnEscape=this.onEscape.bind(this),document.addEventListener("keydown",this._boundOnEscape),this._store.$onAction(({after:i,args:a,name:r})=>{i(()=>{switch(r){case"end":this.stopMeasuring();break;case"importMeasureFile":this.importMeasureFile(a[0]);break;case"importMeasureFiles":this.importMeasureFiles(a[0]);break;case"remove":this.deleteMeasure(a[0]);break;case"start":this.startMeasuring();break}})}),this._boundMeasure=this.measure.bind(this),this._boundSaveMeasure=this.saveMeasure.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundMeasure),this._instance.domElement.addEventListener("click",this._boundSaveMeasure)}dispose(){this._instance.domElement.removeEventListener("mousemove",this._boundMeasure),this._instance.domElement.removeEventListener("click",this._boundSaveMeasure),this._camera.removeEventListener("interaction-start",this._boundPause),this._camera.removeEventListener("interaction-end",this._boundRestart),document.removeEventListener("keydown",this._boundOnEscape),this._measureTool.dispose()}startMeasuring(){this._store.setIsUserMeasuring(!0)}stopMeasuring(){this._store.setIsUserMeasuring(!1),this._measureTool.clean(),this._instance.notifyChange()}updateMeasure(o){o.object.visible=o.visible,o.object.traverse(t=>t.visible=o.visible),this._instance.notifyChange()}deleteMeasure(o){this._instance.remove(o.object),this._instance.notifyChange()}async importBlob(o,t){const n=await o.text(),i=JSON.parse(n),a=i.type==="FeatureCollection"?i.features:[i];let r=0,l=0;for(const g of a)await this.importMeasure(g,t)?r++:l++;return{nbImported:r,nbSkipped:l}}async importMeasure(o,t){var r;if(o.geometry.type!=="LineString")throw new Error(`Cannot import geometry type ${o.geometry.type}`);if((o.properties==null||typeof o.properties!="object")&&(o.properties={}),o.properties.title==null&&(o.properties.title=p.MathUtils.generateUUID()),t.has(o.properties.title))return!1;const n=new p.Vector3(...o.geometry.coordinates[0]),i=new p.Vector3(...o.geometry.coordinates[1]),a=new oe;return a.setPoints([n,i]),await this.pushNewMeasure((r=o.properties)==null?void 0:r.title,a,o.properties),!0}async importMeasureFile(o){const t=new Set(this._store.getMeasures().map(n=>n.title));try{const{nbImported:n,nbSkipped:i}=await this.importBlob(o,t);this._notificationStore.push(new N("Measures",`${n} measures imported (${i} skipped)`,"success"))}catch{}}async importMeasureFiles(o){const t=[];let n=0,i=0;const a=[],r=new Set(this._store.getMeasures().map(l=>l.title));for(const l of o)t.push(this.importBlob(l,r).then(({nbImported:g,nbSkipped:c})=>{n+=g,i+=c}).catch(g=>{a.push(g.message)}));await Promise.allSettled(t),a.length>0?this._notificationStore.push(new N("Measures",`${n} measures imported (${i} skipped); ${a.length} errors: ${a}`,"warning")):this._notificationStore.push(new N("Measures",`${n} measures imported (${i} skipped)`,"success"))}measure(o){!this._paused&&this._store.isUserMeasuring()&&this._measureTool.measure(this._instance,o)}onEscape(o){o.code==="Escape"&&this._store.isUserMeasuring()&&this.stopMeasuring()}async pushNewMeasure(o,t,n={}){await this._instance.add(t);const i=new vt(o,t,n);t.userData.measure=i,i.addEventListener("visible",()=>this.updateMeasure(i)),this._store.add(i),this._instance.notifyChange(t)}saveMeasure(){if(!this._paused&&this._store.isUserMeasuring()){const o=this._measureTool.getLastMeasurement();if(o&&!Number.isNaN(o.length)){let t="New measurement";if(this._store.hasMeasure(t)){for(let i=1;i<1e3&&(t=`New measurement (${i})`,!!this._store.hasMeasure(t));i+=1);this._store.hasMeasure(t)&&(t="Achieved unlocked: 1000 measurements with default name")}const n=ai(t);n!=null&&this.pushNewMeasure(n,o)}}}}class li extends p.EventDispatcher{constructor(t){super();A(this,"ambientLight");A(this,"analysisManager");A(this,"annotationManager");A(this,"camera");A(this,"datasetManager");A(this,"dirLight");A(this,"highlighter");A(this,"layerManager");A(this,"mainInstance");A(this,"measurementManager");A(this,"picker");A(this,"_boundOnFrameEnd");A(this,"_store",q());this.mainInstance=t,this.picker=new Ke,this.camera=new oi(this.mainInstance,this.picker);const n=this._store.getDefaultCameraPosition(),i=this._store.getDefaultCameraLookAt();this.camera.lookAt(n.toVector3(),i.toVector3()),this.layerManager=new Rn(this.mainInstance),this.datasetManager=new ii(this.mainInstance,this.layerManager),this.annotationManager=new ei(this.mainInstance,this.camera,this.picker),this.analysisManager=new Yn(this.mainInstance,this.layerManager),this.highlighter=new In,this.picker=new Ke,this.measurementManager=new ri(this.mainInstance,this.camera,this.picker),this._boundOnFrameEnd=this.onFrameEnd.bind(this),this.mainInstance.addEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.renderingOptions.enableEDL=!0,this.mainInstance.renderingOptions.enableInpainting=!1,this.mainInstance.renderingOptions.enablePointCloudOcclusion=!1;const a=16777215;this.ambientLight=new p.AmbientLight(a,.6),this.mainInstance.scene.add(this.ambientLight),this.dirLight=new p.DirectionalLight(a,2),this.dirLight.position.set(i.x-1e4,i.y-1e4,1e4),this.dirLight.target.position.set(i.x,i.y,0),this.mainInstance.scene.add(this.dirLight),this.mainInstance.scene.add(this.dirLight.target),this.dirLight.updateMatrixWorld(),this.mainInstance.scene.updateMatrixWorld(),this.mainInstance.notifyChange()}dispose(){this.mainInstance.removeEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.scene.remove(this.dirLight.target),this.mainInstance.scene.remove(this.dirLight),this.mainInstance.scene.remove(this.ambientLight),this.measurementManager.dispose(),this.highlighter.dispose(),this.analysisManager.dispose(),this.annotationManager.dispose(),this.layerManager.dispose(),this.camera.dispose()}getBoundingBox(){const t=new p.Box3,n=new p.Box3;return this.mainInstance.scene.traverse(i=>{n.setFromObject(i),t.union(n)}),t}getObjects3d(){const t=[];return this.mainInstance.scene.traverse(n=>{t.push(n)}),t}onFrameEnd(){const t=this.mainInstance.view.camera;t.near=2,this.dispatchEvent({type:"update"})}}class ci{constructor(){A(this,"geometry");A(this,"object3D");this.geometry=new p.BufferGeometry,this.object3D=new p.LineSegments(this.geometry,new p.LineBasicMaterial({color:16711680})),this.object3D.position.set(0,0,1),this.object3D.updateMatrixWorld()}setCorners(o,t,n,i){this.geometry.setFromPoints([o,t,t,n,n,i,i,o])}}const gi=new ne("EPSG:3857",-20037508342789244e-9,20037508342789244e-9,-20037508342789244e-9,20037508342789244e-9);function Ai(s){const o=new X({name:"osm",source:new H({source:new go})});return o.visible=!0,s.addLayer(o)}class ui{constructor(o){A(this,"_basemap");A(this,"_boundUpdateViewbox");A(this,"_mainInstance");A(this,"_minimapInstance");A(this,"_viewbox");this._mainInstance=null,this._minimapInstance=o,this._viewbox=new ci,this._minimapInstance.scene.add(this._viewbox.object3D),this._viewbox.object3D.updateMatrixWorld(),this._minimapInstance.notifyChange(),this._basemap=new te({extent:gi}),this._basemap.name="minimap",this._minimapInstance.add(this._basemap),Ai(this._basemap);const t=new O("EPSG:4326",4.84,45.76).as(this._minimapInstance.referenceCrs),n=new p.Vector3(t.x,t.y,0),i=this._minimapInstance.view.camera;i.position.set(n.x,n.y,2e4),i.lookAt(n.x,n.y+1,0),this._minimapInstance.notifyChange(),this._boundUpdateViewbox=this.updateViewbox.bind(this)}dispose(){this._mainInstance&&this._mainInstance.removeEventListener("after-camera-update",this._boundUpdateViewbox),this._minimapInstance.remove(this._basemap),this._minimapInstance.scene.remove(this._viewbox.object3D),this._basemap.dispose(),this._viewbox.geometry.dispose(),this._viewbox.object3D.geometry.dispose(),this._viewbox.object3D.material.dispose()}getCorners(){const o=this._mainInstance,t=this._minimapInstance;if(o===null)throw new Error("Must call setMainInstance before getCorners");const n=o.engine.getWindowSize(),i=(c,C)=>{var b;const I=(b=o.pickObjectsAt(new p.Vector2(c,C),{limit:1,radius:0}).at(0))==null?void 0:b.point;if(I){const m=new O(o.referenceCrs,I.x,I.y,1).as(t.referenceCrs).toVector3();return m.z=1,m}},a=i(0,0),r=i(n.x-1,0),l=i(0,n.y-1),g=i(n.x-1,n.y-1);if(!(!a||!r||!l||!g))return{ll:l,lr:g,ul:a,ur:r}}setMainInstance(o){this._mainInstance&&this._mainInstance.removeEventListener("after-camera-update",this._boundUpdateViewbox),this._mainInstance=o,o&&o.addEventListener("after-camera-update",this._boundUpdateViewbox)}updateViewbox(){if(this._mainInstance===null)throw new Error("Must call setMainInstance before updateViewbox");const o=this._mainInstance.view.camera,t=this._minimapInstance.view.camera;this._viewbox.object3D.visible=!1;const n=o.position,i=new O(this._mainInstance.referenceCrs,n.x,n.y,0).as(this._minimapInstance.referenceCrs),{x:a,y:r}=i;t.position.set(a,r,t.position.z),t.lookAt(a,r+1,0),this._minimapInstance.notifyChange(this._basemap)}}class di{constructor(o){A(this,"_cameraController");this._cameraController=o.camera}getCameraController(){return this._cameraController}}const Ci={class:"toast-container"},pi=["v-if"],Ii={class:"me-auto mx-2"},mi=["innerHTML"],hi=e.defineComponent({__name:"AlertToast",setup(s){const o=e.ref(null),t=e.ref(N.empty());function n(l){t.value=l,Io.Toast.getOrCreateInstance(o.value).show()}K().$onAction(({args:l,name:g})=>{switch(g){case"push":n(l[0]);break}});function a(){if(t.value==null)return"text-bg-success";switch(t.value.level){case"error":return"bi-exclamation-circle-fill";case"info":return"bi-check-circle-fill";case"success":return"bi-check-lg";case"warning":return"bi-exclamation-triangle-fill";default:return"text-bg-success"}}function r(){if(t.value==null)return"text-bg-success";switch(t.value.level){case"error":return"text-bg-danger";case"info":return"text-bg-secondary";case"success":return"text-bg-success";case"warning":return"text-bg-warning";default:return"text-bg-success"}}return(l,g)=>(e.openBlock(),e.createElementBlock("div",Ci,[e.createElementVNode("div",{ref_key:"alertToast",ref:o,class:"toast",role:"alert","aria-live":"assertive","aria-atomic":"true"},[e.createElementVNode("div",{class:e.normalizeClass(["toast-header",r()])},[e.createElementVNode("i",{"v-if":t.value.level==="info",class:e.normalizeClass(["bi",a()])},null,10,pi),e.createElementVNode("strong",Ii,e.toDisplayString(t.value.title),1),g[0]||(g[0]=e.createElementVNode("button",{type:"button",class:"btn-close","data-bs-dismiss":"toast","aria-label":"Close"},null,-1))],2),e.createElementVNode("div",{class:"toast-body",innerHTML:t.value.text},null,8,mi)],512)]))}}),fi=u._export_sfc(hi,[["__scopeId","data-v-002327a6"]]),bi=e.defineComponent({__name:"ColorFragment",props:{color:{}},setup(s){e.useCssVars(n=>({"8f755d56":t}));const t=`#${s.color.getHexString()}`;return(n,i)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("span",{class:"color"},[e.createElementVNode("span",{class:"d-none"},e.toDisplayString(t))]),e.createTextVNode(" "+e.toDisplayString(t))],64))}}),vi=u._export_sfc(bi,[["__scopeId","data-v-535f5fef"]]),wi={class:"text-secondary"},yi=e.defineComponent({__name:"CoordinateFragment",props:{prefix:String,suffix:String,value:String},setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("div",wi,[e.createElementVNode("span",null,[e.createElementVNode("b",null,e.toDisplayString(s.prefix),1),e.createTextVNode(" "+e.toDisplayString(s.value)+e.toDisplayString(s.suffix),1)])]))}}),z=u._export_sfc(yi,[["__scopeId","data-v-ce90ec07"]]),ki=["href"],Ei=["src","alt"],xi={controls:"",style:{"max-width":"200px"}},Mi=["src","type"],Bi=["href"],Vi=["href"],Si=["title","src"],Ni=["href"],Oi=["href"],Li=e.defineComponent({__name:"LinkFragment",props:{href:{},title:{},type:{}},setup(s){const o=s;return(t,n)=>{var i,a;return(i=o.type)!=null&&i.startsWith("image/")?(e.openBlock(),e.createElementBlock("a",{key:0,href:o.href,target:"_blank"},[e.createElementVNode("img",{src:o.href,alt:o.title,style:{"max-width":"200px"}},null,8,Ei)],8,ki)):(a=o.type)!=null&&a.startsWith("video/")?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("video",xi,[e.createElementVNode("source",{src:o.href,type:o.type},null,8,Mi),n[0]||(n[0]=e.createTextVNode(" Download the ",-1)),e.createElementVNode("a",{href:o.href},"video",8,Bi),n[1]||(n[1]=e.createTextVNode(".",-1))]),n[2]||(n[2]=e.createElementVNode("br",null,null,-1)),n[3]||(n[3]=e.createTextVNode(" Download the ",-1)),e.createElementVNode("a",{href:o.href,target:"_blank"},"video",8,Vi),n[4]||(n[4]=e.createTextVNode(". ",-1))],64)):o.type==="application/pdf"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("iframe",{title:o.title,width:"200",height:"300",src:o.href,frameborder:"1",sandbox:"allow-same-origin allow-scripts"},null,8,Si),n[5]||(n[5]=e.createElementVNode("br",null,null,-1)),n[6]||(n[6]=e.createTextVNode(" Download the ",-1)),e.createElementVNode("a",{href:o.href,target:"_blank"},"file",8,Ni),n[7]||(n[7]=e.createTextVNode(". ",-1))],64)):(e.openBlock(),e.createElementBlock("a",{key:3,href:o.href,target:"_blank"},e.toDisplayString(o.title),9,Oi))}}}),Di=["title"],Pi={key:0,class:"text-secondary"},Fi={key:1,class:"text-secondary"},ji={key:0},zi={key:3,class:"d-flex align-items-center justify-content-between"},Ri={key:4,class:"text-secondary"},Ti=["title"],Ui=e.defineComponent({__name:"AttributeItem",props:{attrName:{},attrValue:{}},setup(s){const o=s;let t;switch(o.attrName){case"IFCType":t=["badge","bg-secondary","text-light","text-truncate"];break;default:t=["text-truncate"]}return(n,i)=>{const a=e.resolveComponent("AttributeItem",!0);return e.openBlock(),e.createElementBlock("tr",null,[e.createElementVNode("th",{title:n.attrName,class:"align-top text-truncate"},e.toDisplayString(n.attrName),9,Di),e.createElementVNode("td",{class:e.normalizeClass(e.unref(t))},[o.attrValue===void 0?(e.openBlock(),e.createElementBlock("span",Pi,"undefined")):o.attrValue===null?(e.openBlock(),e.createElementBlock("span",Fi,"null")):typeof o.attrValue=="object"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[Array.isArray(o.attrValue)?(e.openBlock(),e.createElementBlock("table",ji,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.attrValue,(r,l)=>(e.openBlock(),e.createBlock(a,{key:l,"attr-name":`[${l}]`,"attr-value":r},null,8,["attr-name","attr-value"]))),128))])):e.unref(u.isLink)(o.attrValue)?(e.openBlock(),e.createBlock(Li,{key:1,href:o.attrValue.href,title:o.attrValue.title,type:o.attrValue.type},null,8,["href","title","type"])):e.unref(u.isColor)(o.attrValue)?(e.openBlock(),e.createBlock(vi,{key:o.attrValue.getHexString(),color:o.attrValue},null,8,["color"])):e.unref(u.isVector3)(o.attrValue)?(e.openBlock(),e.createElementBlock("div",zi,[e.createVNode(z,{value:o.attrValue.x.toFixed(0),prefix:"X:"},null,8,["value"]),e.createVNode(z,{value:o.attrValue.y.toFixed(0),prefix:"Y:"},null,8,["value"]),e.createVNode(z,{value:o.attrValue.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])):(e.openBlock(),e.createElementBlock("span",Ri,"Object"))],64)):(e.openBlock(),e.createElementBlock("span",{key:3,title:o.attrValue},e.toDisplayString(o.attrValue),9,Ti))],2)])}}}),wt=u._export_sfc(Ui,[["__scopeId","data-v-1c2e92b2"]]),Hi={key:0},Gi={class:"badge bg-info-subtle text-dark mb-0"},Zi={class:"table table-striped table-sm w-100"},Wi=e.defineComponent({__name:"AttributeGroup",props:{children:{},title:{}},setup(s){return(o,t)=>o.children.length>0?(e.openBlock(),e.createElementBlock("div",Hi,[e.createElementVNode("h6",Gi,e.toDisplayString(o.title),1),e.createElementVNode("table",Zi,[e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.children,(n,i)=>(e.openBlock(),e.createBlock(wt,{key:i,"attr-name":n.key,"attr-value":n.value},null,8,["attr-name","attr-value"]))),128))])])])):e.createCommentVNode("",!0)}}),Ji={class:"card"},Xi={class:"card-header d-flex align-items-center justify-content-between"},Yi={class:"text-truncate mx-2"},qi={class:"card-body content py-2 px-1"},Ki={class:"card-footer py-0"},Qi={class:"d-flex align-items-center column-gap-3"},_i=e.defineComponent({__name:"AttributePanel",props:{attributes:{},name:{},parent:{},point:{}},emits:["close"],setup(s){const o=s,t=e.ref(!1);function n(){const i=`${o.point.x};${o.point.y};${o.point.z}`;navigator.clipboard.writeText(i).then(()=>{t.value=!0,setTimeout(()=>t.value=!1,2e3)}).catch(a=>{console.log("failed",a)})}return(i,a)=>(e.openBlock(),e.createElementBlock("div",Ji,[e.createElementVNode("div",Xi,[a[1]||(a[1]=e.createElementVNode("i",{class:"bi bi-card-checklist"},null,-1)),e.createElementVNode("span",Yi,e.toDisplayString(i.name??i.parent),1),e.createElementVNode("button",{onClick:a[0]||(a[0]=r=>i.$emit("close")),type:"button",class:"btn-close","aria-label":"Close"})]),e.createElementVNode("div",qi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.attributes.entries(),(r,l)=>(e.openBlock(),e.createBlock(Wi,{key:l,title:r[0],children:r[1]},null,8,["title","children"]))),128))]),e.createElementVNode("div",Ki,[e.createElementVNode("div",Qi,[e.createVNode(z,{value:i.point.x.toFixed(0),prefix:"X:"},null,8,["value"]),e.createVNode(z,{value:i.point.y.toFixed(0),prefix:"Y:"},null,8,["value"]),e.createVNode(z,{value:i.point.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"]),e.createElementVNode("button",{onClick:n,type:"button",class:"btn btn-link"},[e.createElementVNode("i",{class:e.normalizeClass(["bi",t.value?["bi-clipboard-check","test-success"]:["bi-clipboard"]])},null,2)])])])]))}}),$i=u._export_sfc(_i,[["__scopeId","data-v-b1912966"]]),es="data:image/png;base64,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",ts={id:"loading-screen",class:"container"},os={xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",fill:"currentColor",class:"bi bi-geo-alt-fill pulse",viewBox:"0 0 16 16",style:{"vertical-align":"middle"}},ns={class:"logo"},is=["src"],ss=e.defineComponent({__name:"LoadingScreen",setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("div",ts,[t[1]||(t[1]=e.createElementVNode("h1",null,"Loading...",-1)),e.createElementVNode("h2",null,[(e.openBlock(),e.createElementBlock("svg",os,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6"},null,-1)])]))]),e.createElementVNode("div",ns,[e.createElementVNode("img",{src:e.unref(es)},null,8,is)])]))}}),as=u._export_sfc(ss,[["__scopeId","data-v-712b955c"]]),rs={class:"main"},ls=e.defineComponent({__name:"MainView",setup(s){const o=e.ref(null),t=e.ref(null),n=e.shallowRef(null),i=q();return e.onMounted(()=>{n.value=new Pe({backgroundColor:null,crs:i.getCRS(),target:o.value}),i.setMainView(n.value)}),e.onUnmounted(()=>{i.setMainView(null),n.value&&(n.value.view.setControls(null),n.value.dispose())}),(a,r)=>(e.openBlock(),e.createElementBlock("div",rs,[e.createElementVNode("div",{ref_key:"mainView",ref:o,class:"main",id:"main-view"},null,512),e.createElementVNode("div",{ref_key:"inspectorView",ref:t,id:"inspector",class:"position-absolute top-0 start-0 mh-100 overflow-auto"},null,512)]))}}),cs=u._export_sfc(ls,[["__scopeId","data-v-0d10144c"]]),gs=e.defineComponent({__name:"MinimapView",setup(s){const o=e.ref(null),t=e.shallowRef(),n=q();return e.onMounted(()=>{t.value=new Pe({backgroundColor:13421772,crs:"EPSG:3857",target:o.value}),t.value.scene.add(new p.DirectionalLight),n.setMinimapView(t.value)}),e.onUnmounted(()=>{var i;n.setMinimapView(null),(i=t.value)==null||i.dispose()}),(i,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"target",ref:o,class:"main"},null,512))}}),As=u._export_sfc(gs,[["__scopeId","data-v-d78f1f47"]]),us={class:"form-check form-switch"},ds=["checked"],Ue=e.defineComponent({__name:"SwitchToggle",props:["modelValue"],emits:["update:modelValue"],setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("div",us,[e.createElementVNode("input",{class:"form-check-input",type:"checkbox",role:"switch",checked:s.modelValue,onInput:t[0]||(t[0]=n=>o.$emit("update:modelValue",n.target.checked))},null,40,ds),e.renderSlot(o.$slots,"default")]))}}),Cs={class:"card root"},ps={class:"d-flex align-items-center"},Is=["aria-pressed"],ms=e.defineComponent({__name:"NavigationButtons",setup(s){const o=u.useCameraStore(),t=K(),n=e.ref(o.getNavigationModeRef());e.watch(n,a=>{o.setNavigationMode(a);let r,l;switch(a){case"disabled":{r="Disabled",l="Camera is disabled";break}case"first-person":{r="First person",l=`<i class="bi bi-hand-index-thumb"></i> Left-click to rotate; Right-click to pan<br>
2
+ <i class="bi bi-mouse2"></i> Scroll to zoom<br>
3
+ <i class="bi bi-keyboard"></i> Up/Down/Left/Right: move forward/backward/left/right<br>
4
+ <i class="bi bi-keyboard"></i> W/D/A/S: move up/down/left/right`;break}case"orbit":{r="Free navigation",l=`<i class="bi bi-hand-index-thumb"></i> Left-click to pan; Right-click to orbit<br>
5
+ <i class="bi bi-mouse2"></i> Scroll to zoom to cursor<br>
6
+ <i class="bi bi-keyboard"></i> Up/Down/Left/Right: move forward/backward/left/right`;break}case"position-on-map":{r="Position on map",l=`<i class="bi bi-hand-index-thumb"></i> Left-click on the map to move to First Person view on the ground.<br>
7
+ Cancel with right-click or Escape`;break}default:return a}t.push(new N("Navigation",`Navigation mode set to <strong>${r}</strong>.<br>${l}`,"success"))});function i(){n.value!=="position-on-map"?n.value="position-on-map":n.value="orbit"}return(a,r)=>(e.openBlock(),e.createElementBlock("div",Cs,[e.createElementVNode("div",ps,[r[2]||(r[2]=e.createElementVNode("i",{title:"Free navigation",class:"mx-2 bi bi-camera-reels-fill"},null,-1)),e.createVNode(Ue,{"model-value":n.value==="first-person","onUpdate:modelValue":r[0]||(r[0]=l=>n.value=l?"first-person":"orbit")},null,8,["model-value"]),r[3]||(r[3]=e.createElementVNode("i",{title:"First person view",class:"bi bi-universal-access"},null,-1)),r[4]||(r[4]=e.createElementVNode("div",{class:"vr mx-2"},null,-1)),e.createElementVNode("button",{class:e.normalizeClass(["btn btn-sm btn-outline-secondary",n.value==="position-on-map"?"active":null]),"aria-pressed":n.value==="position-on-map","data-bs-toggle":"button",title:"Position on map",onClick:i},[...r[1]||(r[1]=[e.createElementVNode("i",{class:"fg-position-man"},null,-1)])],10,Is)])]))}}),hs=u._export_sfc(ms,[["__scopeId","data-v-b890a4be"]]),fs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABXCAYAAAC+73jDAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio7gBw97HPKo1A06fo/gSEnUkzgftjkMaf9+3uk1IJxTLs2q10pA9uzSIYwm+sFM+eADsobiez6VFocEKUXUubU6I5/5OHBG7lDlYmRrFJZ7wXP428MoLtIxkUBsYeRhpDILHAZ9PouqW7s+YdnpDpsrDVqIDjv2aH7sc8PvbQX3qMiurARWtTmAjlWSdggHI4FGRsPQDczaYhJ8yL9/OpF+mhJaGNqk9l0AAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA5daVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjM5NTZmNTIxLWU2YjAtNGRiNi1hMTk2LWM3ZjkwZjE1YzYwZiIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMTVlNTExOS1lZDExLTRjY2YtOGEzYi1lN2QyZDJkZjBkNzUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4NjYzMjQ3ZS1mMmVjLTQwZmQtYjE3OC03NzFhNjEwMTRmYWMiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjM3MjAyNDAyIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjE3KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzoxNyswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFiYjlmOWJiLWYyYzAtNGM4Yi1iYjgxLTU1ODE4NjY0NmQ2YiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDMtMTlUMTQ6NDc6MjYrMDE6MDAiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTUwOTQ2YzYtODBkMy00MmI4LTgwOTUtZDcwYTE3MjNlNDM1IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6MTcrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+wSyPngAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAywAAAMsABKGRa2wAAAAd0SU1FB+kJFAsbEeAnRtoAACAASURBVHja7Z15mBXVnfc/p6ru0vf2vi/0ytqsoiIgKiogxp1EMkFnjJqocTIzmSWTmUzezCRxljca500m+6hjYsYlibtRcV/iBiqICMjaNND0vnfftarO+0dVX7qhl6ru24hwf8/TDw/Q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",bs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACTCAYAAABszOBRAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBBEsMgCLz7ij5BBBWeYxo70x/0+QUhnSTTnXGzsmRF0/y8X+lhKECJaucmrWUFCUkZKjg7xmLItHhBWnhwrSfBMIqWTMee4wc46vAL8M9QVU9B/AxjuxpCkc+3oDgIbaKiYj8miiAsbkAEDL9WbsL9fIVt5ivYVzJiWbNYmHu3PXV9vb3qOVjKRMCsjMjeg7ZqwqFClLWgjaANpruyt4I/yL93OpC+DARZTFnCKNgAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM0N2M4ZTNiLTg2ZjUtNDM3NC04Mzg2LTBjMGQwNGE1YTQxNSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNDVjNDdmMC1mODVmLTQ3NzAtYjVlNy1hMmU0ZDFmNWUwNzkiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMDVhMDI1NS05NzY5LTRhZGQtYjQ3Yy1iOGU4MjlkZDdlNDciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjU4NjgwODMzIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjM4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzozOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmYwMzU4MmQ4LWUxMTgtNGY1Yi1hNDdiLTlkYjM4ZjIxNTk2ZiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI3OjM4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Ptv0Ik4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfpCRQLGyZYmuPVAAAgAElEQVR42u2dd3gc5bX/P2dmd1Use9eybIMNXorp/VJCCZAAAUy4kOQmJEAS4ELosPSA6WB6y8iEml9CAjcJhB4IJgQIhBAw3XSDgTFuuMhaWX135vz+eF/Z69VIVrMsGZ3nmcfyzpaZd77v6UX4GpLrerEwpASIqzISWA9YFxgNjAFKgCqgvOijCiwGmoA6+/dXwDxgrgj1QGtpqbQ0NZ2ufI1J1vYbjMU8NwhIqjIW2BHYBtgE2BiYACR7uR5tAAotyHzgE+BD4G3gAxGWqmaWDQFrsN+UeFWqTAS+CewFbAlsCDir+GjOcqJllis1AYuARgugLwuAVAUMs3+vZ7lcOVABjCjgds3Ax8C7wD+B/4jwhWqmcQhYg4K89YA9gUOBnboApAXAXGAm8J59+F8CNUBWhHrVTFM3OWOFKikgBYwFJlpQbwuMAzayYP0E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",vs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcQwCPvPFDdCAnnAOOlLug1u/HMKrdqqlmIIRg4hrL/vFj4DlHLIpUnVWiOQNSt1JBINfecU88475kNL93o4BUKJEdmuUr3/qKfTwEJHVi5GMrsw3QXN7i8PI3+Ix0SEZHEjdSMmE5IbdPtWrCrt+oVpjXeInTBom0lHrUymPe+5YXtLwTtMtHLiCGYWG4DHKYE7EgWjgMaEhpE3cGHySbCQtz0dCH8eW1rDzUi1YAAAAYNpQ0NQSUNDIHByb2ZpbGUAAHicfZE7SMNAHMa/pkp9VBzMIMUhQ3Wyi4p0rFUoQoVQK7TqYB59QZOGJMXFUXAtOPhYrDq4OOvq4CoIgg8Qd8FJ0UVK/F9SaBHjwXE/vrvv4+47gGtWFc3qSQCabpuZVFLI5VeF0Cv6wWMQEcQlxTLmRDEN3/F1jwBb72Isy//cn2NILVgKEBCIE4ph2sQbxLObtsF4n5hXypJKfE48adIFiR+ZLnv8xrjkMscyeTObmSfmiYVSF8tdrJRNjXiGOKpqOuVzOY9VxluMtWpdad+TvTBc0FeWmU5zDCksYgkiBMioo4IqbMRo1UmxkKH9pI8/4vpFcsnkqkAhxwJq0CC5frA/+N2tVZye8pLCSaD3xXE+xoHQLtBqOM73seO0ToDgM3Cld/y1JhD/JL3R0aJHwPA2cHHd0eQ94HIHGH0yJFNypSBNrlgE3s/om/LAyC0wsOb11t7H6QOQpa7SN8DBITBRoux1n3f3dff275l2fz/Q5HLMN5rr0QAADXppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NGVjMGMxNzUtNmE3NS00OGJlLTllZGYtOGNlNDQyM2ZmMmU0IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU1YmZlYWVjLWNhZDAtNGZlNi1iMGJkLTM2ODEyMWNmYWFmMSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjliODczYjYyLTY4ZDUtNDU3ZS1iNzVkLWFmN2Y3MGU5YTkzMyIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3NTgzNjc2NzMwNDY0MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjU6MDk6MjBUMTM6Mjc6NTIrMDI6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjUyKzAyOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OGJhNTc0MjgtZDMyOS00MzUzLWI2YjMtYzk1YjRmYzg1MzQ0IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6NTMrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+fJLSCgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJFAsbNdwkogsAACAASURBVHja7J13eBRV98c/syVt03shvRA6KbQkdGkCERAQEMuLxgoWFAs2FLF3BQuCgoqIiPTeew+EXkIICek92ZRt8/sj+QHJbpJNsiHhfTnPw6PMDHfn3rnfe/o5Anep2ch1/hQrwA/wBtwAZ8AesK36r7TqDzX+Xwdoqv5fW/X3AqAYyKv6kwmkAElZcQuVd1e7eUi4uwQmAYIP0B4IAYKr/j8UcL9ljZtjrcWqP1nAeeAMkAhcBM5kxS28evfr3AXI7QaDAxAGhAM9gRjAqer0b03rqaniOnuBw8BR4FhW3MK8u1/xLkBMLSZFAP2BYUBXwPwOXDsRUAGngLXAHuBIVtzC4rtf+S5AGgoKD6AvcD8wELADJP9l0xSBImAX8DewMytuYerdr38XILWBwhUYCjwERAFWphpbi0iFKFIO+Mkt8JRb4SyzwlIi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",ws="data:image/png;base64,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",ys="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAAtCAYAAADr0SSvAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBRDsMgCP3nFDuCgFo4jm1tshvs+EOhS9vsJT6QR54I9M/7gNcAYYZcFqlaazJkzUrNEkmONhlTnjyxnRre60B7CGQltsh+lRr9Zx1/Bh6aZeViJFsI613QHP7yMIqHeExElsQgoGHE5AKGQfNvpaqyXL+w9nSH+IFBx0Y6amV17XnPi21vL/YOE3VGTsbM4gPwOAW4WaLGVrBGtIaRizHOVvSF/NvTCfgCF5hawfSmwyAAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM4NjdiYjcyLWU1NWEtNGZkZS1hYTlmLTdiYzZhNTJhNGIzZSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0NWE1ZGEyYy01YjhmLTQ1ZTQtOGJkYy01N2Q0ZmJkZGQ1NWUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplN2YyOWQyZS1kMDg1LTQ4ZWYtODYyZS0wZDM1NTRjOGVlYWQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3Njk4OTQxNjMxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI4OjE4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyODoxOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZlNDAxNmZmLWZkZDItNDA4MS05YjU2LWY2ODYzYjk1Y2E1ZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI4OjE4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pl6bkfoAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfpCRQLHBI2b4GnAAAU8UlEQVR42u2deXwV1dnHv/feDCQkyCpQFtkXZS0KAi8UpSqgqCMuMB3FQa0bBV+LS1GLSNVirdoWS221dWy9jlIsA1YQRBZFVFbZ14Y1IEsgELKQIbnvH+eZZnLfBIkmrPf5fPKZ3Jk55zxz5jznWc7vOROKxWJfTJ21uu1T0dUa5zHdfFmDwvGj+uUBLUKhUF78dU23uwPTyij+IvB7YANwHOjkuZZ3JjyXptvNgU+BecBdnmsdJ0EnTUlA3VgsVmtztnded0Th8UKAGkCorLEGNAAOyoALUoYc1wOFQOwMerQbgFXAiIRwfDcBSVD5aKPnWjeVMlOHgL+KcBRpul0DuBpIB/KB64Fc4F3PtfZLGQ0YBHQQzfM1MMtzrSJNtxsDPYCVwIXAlcAe4D3PtXICbfYA+gobn3qutSjAUwPAA74Aemm6/bHnWkWl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",yt=R.defineStore("modules",()=>{const s=e.ref([]);function o(n){s.value=n}function t(){return s.value}return{getLoadedModules:t,setLoadedModules:o}});var ks={"@loaders.gl/core":{description:"The core API for working with loaders.gl loaders and writers",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/csv":{description:"Framework-independent loader for CSV and DSV table formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/geopackage":{description:"GeoPackage data loaders",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/las":{description:"Framework-independent loader for the LAS and LAZ formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/shapefile":{description:"Loader for the Shapefile Format",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@popperjs/core":{description:"Tooltip and Popover Positioning Engine",homepage:"https://github.com/popperjs/popper-core",license:"MIT"},"@tarekraafat/autocomplete.js":{description:"Simple autocomplete pure vanilla Javascript library.",homepage:"https://tarekraafat.github.io/autoComplete.js",license:"Apache-2.0"},bootstrap:{description:"The most popular front-end framework for developing responsive, mobile first projects on the web.",homepage:"https://getbootstrap.com/",license:"MIT"},"bootstrap-icons":{description:"Official open source SVG icon library for Bootstrap",homepage:"https://icons.getbootstrap.com/",license:"MIT"},"camera-controls":{homepage:"https://github.com/yomotsu/camera-controls",license:"MIT"},"chart.js":{description:"Simple HTML5 charts using the canvas element.",homepage:"https://www.chartjs.org",license:"MIT"},"chroma-js":{description:"JavaScript library for color conversions",homepage:"https://github.com/gka/chroma.js",license:"(BSD-3-Clause AND Apache-2.0)"},"d3-dsv":{description:"A parser and formatter for delimiter-separated values, such as CSV and TSV",homepage:"https://d3js.org/d3-dsv/",license:"BSD-3-Clause"},"font-gis":{description:"Icon font set for use with GIS and spatial analysis tools",homepage:"https://github.com/Viglino/font-gis",license:"Apache-2.0"},"openbim-components":{homepage:"https://ifcjs.github.io/components/",license:"MIT"},pinia:{description:"Intuitive, type safe and flexible Store for Vue",homepage:"https://github.com/vuejs/pinia#readme",license:"MIT"},proj4:{description:"Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.",homepage:"https://proj4js.github.io/proj4js/",license:"MIT"},"regenerator-runtime":{description:"Runtime for Regenerator-compiled generator and async functions.",homepage:"https://github.com/facebook/regenerator/tree/main/packages/runtime",license:"MIT"},"shepherd.js":{description:"Guide your users through a tour of your app.",homepage:"https://shepherdjs.dev",license:"MIT"},"web-ifc":{description:"ifc loading on the web",homepage:"https://ifcjs.github.io/web-ifc/docs/"}};const Es={class:"list-group my-3"},xs={href:"https://oslandia.com",target:"_blank",class:"list-group-item"},Ms={class:"d-flex w-100 justify-content-between"},Bs=["src"],Vs={href:"https://www.bpifrance.com/",target:"_blank",class:"list-group-item"},Ss={class:"d-flex w-100 justify-content-between"},Ns=["src"],Os={class:"list-group-item"},Ls={class:"d-flex w-100 justify-content-between"},Ds=["src"],Ps={class:"list-group-item"},Fs={class:"d-flex w-100 justify-content-between"},js={class:"text-end"},zs=["src"],Rs=["src"],Ts=["href"],Us={key:0,class:"blockquote fw-light"},Hs=e.defineComponent({__name:"AboutPanel",setup(s){const o=ks,t=yt().getLoadedModules();return(n,i)=>(e.openBlock(),e.createElementBlock("div",null,[i[4]||(i[4]=e.createStaticVNode('<p data-v-8c8cc9e6><a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-8c8cc9e6>Piero</a> is a fully-configurable open-source web application for 3D visualization. It is powered by <a href="https://giro3d.org" target="_blank" data-v-8c8cc9e6>Giro3D</a>, a versatile framework to visualize geospatial data in the browser. </p><h5 class="mt-3" data-v-8c8cc9e6>Going further</h5><p data-v-8c8cc9e6> If you wish to run your own instance of Piero, or if you wish to contribute to this application, head up to <a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-8c8cc9e6>our GitLab project</a> for more info. </p><h5 data-v-8c8cc9e6>Contributors</h5><p data-v-8c8cc9e6><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/CONTRIBUTORS.md" data-v-8c8cc9e6>Brought to you by the Giro3D contributors.</a></p><h5 data-v-8c8cc9e6>Sponsors</h5>',6)),e.createElementVNode("div",Es,[e.createElementVNode("a",xs,[e.createElementVNode("div",Ms,[i[0]||(i[0]=e.createElementVNode("span",null,"Oslandia",-1)),e.createElementVNode("img",{src:e.unref(ws),class:"logo",alt:"Oslandia"},null,8,Bs)])]),e.createElementVNode("a",Vs,[e.createElementVNode("div",Ss,[i[1]||(i[1]=e.createElementVNode("span",null,"BPI France",-1)),e.createElementVNode("img",{src:e.unref(fs),class:"logo",alt:"BPI France"},null,8,Ns)])]),e.createElementVNode("span",Os,[e.createElementVNode("div",Ls,[i[2]||(i[2]=e.createElementVNode("span",null,"Funded by the French government as part of France 2030",-1)),e.createElementVNode("img",{src:e.unref(bs),class:"logo",alt:"France 2030"},null,8,Ds)])]),e.createElementVNode("span",Ps,[e.createElementVNode("div",Fs,[i[3]||(i[3]=e.createElementVNode("span",null,"Funded by the European Union - Next Generation EU as part of the France Relance plan",-1)),e.createElementVNode("div",js,[e.createElementVNode("img",{src:e.unref(vs),class:"logo",alt:"France Relance"},null,8,zs),e.createElementVNode("img",{src:e.unref(ys),class:"logo",alt:"European Union - Next Generation EU"},null,8,Rs)])])])]),i[5]||(i[5]=e.createStaticVNode('<p data-v-8c8cc9e6> If you wish to sponsor Giro3D and Piero, you can contact us at <a href="mailto:infos+3d@oslandia.com" data-v-8c8cc9e6>infos+3d@oslandia.com</a>. </p><h5 data-v-8c8cc9e6>License</h5><p data-v-8c8cc9e6><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/LICENSE" data-v-8c8cc9e6>MIT License</a></p><h5 data-v-8c8cc9e6>Credits</h5><p data-v-8c8cc9e6>Data and services used from:</p><ul data-v-8c8cc9e6><li data-v-8c8cc9e6><a target="_blank" href="https://ign.fr/" data-v-8c8cc9e6>IGN</a> (Imagery, Elevation model, LIDAR data, Elevation API) </li><li data-v-8c8cc9e6><a target="_blank" href="https://www.grandlyon.com/" data-v-8c8cc9e6>Métropole Grand Lyon</a> (Imagery, Elevation model, overlay layers) </li><li data-v-8c8cc9e6><a target="_blank" href="https://www.openstreetmap.org" data-v-8c8cc9e6>OpenStreetMap</a> (Imagery) </li><li data-v-8c8cc9e6><a target="_blank" href="https://adresse.data.gouv.fr/" data-v-8c8cc9e6>adresse.data.gouv.fr</a> (Geocoding API) </li><li data-v-8c8cc9e6><a target="_blank" href="https://cadastre.data.gouv.fr" data-v-8c8cc9e6>Données cadastrales ouvertes</a> (Cadastre) </li><li data-v-8c8cc9e6><a target="_blank" href="https://oslandia.com" data-v-8c8cc9e6>Oslandia</a> (CityJSON reconstructions, overlay layers) </li><li data-v-8c8cc9e6><a target="_blank" href="https://bimdata.io/" data-v-8c8cc9e6>BIMData</a> (IFC model)</li></ul><p data-v-8c8cc9e6>Third-parties:</p>',7)),e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Object.entries(e.unref(o)),([a,r])=>(e.openBlock(),e.createElementBlock("li",{key:a},[e.createElementVNode("a",{target:"_blank",href:r.homepage},e.toDisplayString(a)+" ("+e.toDisplayString(r.license)+")",9,Ts),r.description?(e.openBlock(),e.createElementBlock("blockquote",Us,e.toDisplayString(r.description),1)):e.createCommentVNode("",!0)]))),128))]),i[6]||(i[6]=e.createElementVNode("p",null,"Loaded modules:",-1)),e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(t),a=>(e.openBlock(),e.createElementBlock("li",{key:a.name},e.toDisplayString(a.name),1))),128))]),i[7]||(i[7]=e.createElementVNode("hr",null,null,-1))]))}}),Gs=u._export_sfc(Hs,[["__scopeId","data-v-8c8cc9e6"]]),Zs={class:"input-group"},Ws={class:"form-check form-switch"},Js=["checked"],Xs={class:"input-group"},Ys={class:"form-check form-switch"},qs=["checked"],Ks={class:"accordion mt-3"},Qs={class:"accordion-item"},_s={id:"clippingbox-size",class:"accordion-collapse collapse show","data-bs-parent":"#accordionExample"},$s={class:"accordion-body"},ea={class:"d-flex justify-content-between align-items-end w-100"},ta={class:"input-group mb-3"},oa=["value"],na=["value"],ia=["value"],sa={class:"input-group mb-3"},aa=["value"],ra=["value"],la=["value"],ca={class:"accordion-item"},ga={id:"clippingbox-floorpreset",class:"accordion-collapse collapse show","data-bs-parent":"#accordionExample"},Aa={class:"accordion-body"},ua={class:"row w-100"},da={class:"col-sm-6"},Ca={class:"input-group input-group-sm"},pa={class:"row w-100"},Ia={class:"col-sm-6"},ma={class:"input-group input-group-sm"},ha={class:"row w-100"},fa={class:"col-sm-6"},ba={class:"input-group input-group-sm"},va=e.defineComponent({__name:"ClippingBox",setup(s){const o=u.getConfig(),t=u.useAnalysisStore(),n=u.useCameraStore(),i=w=>Number.parseFloat(w.target.value);function a(){const{target:w}=n.getCameraPosition();t.setClippingBoxCenter(w.clone())}function r(w){const f=t.clippingBoxSize.clone();f.setX(w),t.setClippingBoxSize(f)}function l(w){const f=t.clippingBoxSize.clone();f.setY(w),t.setClippingBoxSize(f)}function g(w){const f=t.clippingBoxSize.clone();f.setZ(w),t.setClippingBoxSize(f)}function c(w){const f=t.clippingBoxCenter.clone();f.setX(w),t.setClippingBoxCenter(f)}function C(w){const f=t.clippingBoxCenter.clone();f.setY(w),t.setClippingBoxCenter(f)}function d(w){const f=t.clippingBoxCenter.clone();f.setZ(w),t.setClippingBoxCenter(f)}const I=e.ref(o.analysis.clipping_box.floor_preset.altitude),b=e.ref(o.analysis.clipping_box.floor_preset.size),m=e.ref(o.analysis.clipping_box.floor_preset.floor);function h(){m.value-=1;const w=t.clippingBoxCenter.clone();w.setZ(E()),t.setClippingBoxCenter(w)}function v(){m.value+=1;const w=t.clippingBoxCenter.clone();w.setZ(E()),t.setClippingBoxCenter(w)}function E(){return I.value+(m.value+.5)*b.value}function V(){const{target:w}=n.getCameraPosition(),f=w.clone();f.z=E();const k=new p.Vector3(1e3,1e3,b.value);t.setClippingBoxSize(k),t.setClippingBoxCenter(f)}return(w,f)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",Zs,[e.createElementVNode("div",Ws,[e.createElementVNode("input",{class:"form-check-input",checked:e.unref(t).isClippingBoxInverted(),type:"checkbox",role:"switch",id:"invert-clippingbox",onInput:f[0]||(f[0]=k=>e.unref(t).setClippingBoxInverted(!e.unref(t).isClippingBoxInverted()))},null,40,Js),f[13]||(f[13]=e.createElementVNode("label",{class:"form-check-label",for:"invert-clippingbox"},"Invert clipping box",-1))])]),e.createElementVNode("div",Xs,[e.createElementVNode("div",Ys,[e.createElementVNode("input",{class:"form-check-input",checked:e.unref(t).isClippingBoxHelperDisplayed(),type:"checkbox",role:"switch",id:"enable-clippingbox-helper",onInput:f[1]||(f[1]=k=>e.unref(t).displayClippingBoxHelper(!e.unref(t).isClippingBoxHelperDisplayed()))},null,40,qs),f[14]||(f[14]=e.createElementVNode("label",{class:"form-check-label",for:"enable-clippingbox-helper"},"Show 3D helper",-1))])]),e.createElementVNode("div",Ks,[e.createElementVNode("div",Qs,[f[17]||(f[17]=e.createElementVNode("h2",{class:"accordion-header"},[e.createElementVNode("button",{class:"accordion-button",type:"button","data-bs-toggle":"collapse","data-bs-target":"#clippingbox-size","aria-expanded":"true","aria-controls":"clippingbox-size"}," Clipping box size ")],-1)),e.createElementVNode("div",_s,[e.createElementVNode("div",$s,[e.createElementVNode("div",ea,[f[15]||(f[15]=e.createElementVNode("label",{class:"form-label flex-grow"},"Center (x, y, z)",-1)),e.createElementVNode("button",{type:"button",class:"btn btn-outline-secondary btn-sm",onClick:f[2]||(f[2]=k=>a())}," Set from view ")]),e.createElementVNode("div",ta,[e.createElementVNode("input",{type:"number",class:"form-control",id:"plane-center-x",value:e.unref(t).clippingBoxCenter.x,onInput:f[3]||(f[3]=k=>c(i(k)))},null,40,oa),e.createElementVNode("input",{type:"number",class:"form-control",id:"plane-center-y",value:e.unref(t).clippingBoxCenter.y,onInput:f[4]||(f[4]=k=>C(i(k)))},null,40,na),e.createElementVNode("input",{type:"number",class:"form-control",id:"plane-center-z",value:e.unref(t).clippingBoxCenter.z,onInput:f[5]||(f[5]=k=>d(i(k)))},null,40,ia)]),f[16]||(f[16]=e.createElementVNode("label",{class:"form-label"},"Size (x, y, z)",-1)),e.createElementVNode("div",sa,[e.createElementVNode("input",{type:"number",class:"form-control",id:"plane-size-x",min:"1",value:e.unref(t).clippingBoxSize.x,onInput:f[6]||(f[6]=k=>r(i(k)))},null,40,aa),e.createElementVNode("input",{type:"number",class:"form-control",id:"plane-size-y",min:"1",value:e.unref(t).clippingBoxSize.y,onInput:f[7]||(f[7]=k=>l(i(k)))},null,40,ra),e.createElementVNode("input",{type:"number",class:"form-control",id:"plane-size-z",min:"1",value:e.unref(t).clippingBoxSize.z,onInput:f[8]||(f[8]=k=>g(i(k)))},null,40,la)])])])]),e.createElementVNode("div",ca,[f[25]||(f[25]=e.createElementVNode("h2",{class:"accordion-header"},[e.createElementVNode("button",{class:"accordion-button",type:"button","data-bs-toggle":"collapse","data-bs-target":"#clippingbox-floorpreset","aria-expanded":"true","aria-controls":"clippingbox-floorpreset"}," Floor preset ")],-1)),e.createElementVNode("div",ga,[e.createElementVNode("div",Aa,[e.createElementVNode("div",ua,[f[19]||(f[19]=e.createElementVNode("label",{for:"floor-reference-altitude",class:"col-sm-6 col-form-label col-form-label-sm"},"Reference altitude",-1)),e.createElementVNode("div",da,[e.createElementVNode("div",Ca,[e.withDirectives(e.createElementVNode("input",{type:"number",class:"form-control form-control-sm",id:"floor-reference-altitude","onUpdate:modelValue":f[9]||(f[9]=k=>I.value=k)},null,512),[[e.vModelText,I.value]]),f[18]||(f[18]=e.createElementVNode("span",{class:"input-group-text"},"m",-1))])])]),e.createElementVNode("div",pa,[f[21]||(f[21]=e.createElementVNode("label",{for:"floor-size",class:"col-sm-6 col-form-label col-form-label-sm"},"Floor size",-1)),e.createElementVNode("div",Ia,[e.createElementVNode("div",ma,[e.withDirectives(e.createElementVNode("input",{type:"number",class:"form-control form-control-sm",id:"floor-size","onUpdate:modelValue":f[10]||(f[10]=k=>b.value=k)},null,512),[[e.vModelText,b.value]]),f[20]||(f[20]=e.createElementVNode("span",{class:"input-group-text"},"m",-1))])])]),e.createElementVNode("div",ha,[f[24]||(f[24]=e.createElementVNode("label",{for:"floor-number",class:"col-sm-6 col-form-label col-form-label-sm"},"Floor number",-1)),e.createElementVNode("div",fa,[e.createElementVNode("div",ba,[e.withDirectives(e.createElementVNode("input",{type:"number",class:"form-control form-control-sm",id:"floor-number","onUpdate:modelValue":f[11]||(f[11]=k=>m.value=k)},null,512),[[e.vModelText,m.value]]),e.createElementVNode("button",{class:"btn btn-outline-secondary btn-sm px-0",type:"button",onClick:v},[...f[22]||(f[22]=[e.createElementVNode("i",{class:"bi bi-arrow-up-short"},null,-1)])]),e.createElementVNode("button",{class:"btn btn-outline-secondary btn-sm px-0",type:"button",onClick:h},[...f[23]||(f[23]=[e.createElementVNode("i",{class:"bi bi-arrow-down-short"},null,-1)])])])])]),e.createElementVNode("button",{type:"button",class:"btn btn-outline-secondary btn-sm",onClick:f[12]||(f[12]=k=>V())}," Set ")])])])])]))}}),wa=u._export_sfc(va,[["__scopeId","data-v-c3db5a32"]]),ya={class:"input-group mb-3"},ka=["value"],Ea={class:"input-group mb-3"},xa=["value"],Ma={class:"input-group mb-3"},Ba={class:"input-group mb-3"},Va=["value"],Sa=["value"],Na=e.defineComponent({__name:"CrossSection",setup(s){const o=u.useAnalysisStore();function t(a){o.setCrossSectionOrientation(a)}function n(a){const r=o.crossSectionCenter.clone();r.setX(a),o.setCrossSectionCenter(r)}function i(a){const r=o.crossSectionCenter.clone();r.setY(a),o.setCrossSectionCenter(r)}return(a,r)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",ya,[r[4]||(r[4]=e.createElementVNode("label",{for:"plane-orientation-range",class:"form-label"},"Plane orientation (0-360°)",-1)),e.createElementVNode("input",{id:"plane-orientation-range",title:"Altitude",type:"range",class:"form-range",min:"0",step:"0.1",max:"360",value:e.unref(o).crossSectionOrientation,onInput:r[0]||(r[0]=l=>t(Number.parseFloat(l.target.value)))},null,40,ka),e.createElementVNode("div",Ea,[e.createElementVNode("input",{type:"number",class:"form-control",id:"plane-orientation-number",step:"0.1",value:e.unref(o).crossSectionOrientation,onInput:r[1]||(r[1]=l=>t(Number.parseFloat(l.target.value)))},null,40,xa)])]),r[6]||(r[6]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("div",Ma,[r[5]||(r[5]=e.createElementVNode("label",{class:"form-label"},"Center (x, y)",-1)),e.createElementVNode("div",Ba,[e.createElementVNode("input",{type:"number",class:"form-control",id:"plane-center-x",value:e.unref(o).crossSectionCenter.x,onInput:r[2]||(r[2]=l=>n(Number.parseFloat(l.target.value)))},null,40,Va),e.createElementVNode("input",{type:"number",class:"form-control",id:"plane-center-y",value:e.unref(o).crossSectionCenter.y,onInput:r[3]||(r[3]=l=>i(Number.parseFloat(l.target.value)))},null,40,Sa)])])]))}}),Oa={class:"input-group mb-3"},La=["value"],Da={class:"input-group mb-3"},Pa=["value"],Fa=e.defineComponent({__name:"FloodingPlane",setup(s){const o=u.useAnalysisStore();function t(n){o.setFloodingPlaneHeight(n)}return(n,i)=>(e.openBlock(),e.createElementBlock("div",Oa,[i[3]||(i[3]=e.createElementVNode("label",{for:"flooding-altitude-range",class:"form-label"},"Altitude",-1)),e.createElementVNode("input",{id:"flooding-altitude-range",title:"Altitude",type:"range",class:"form-range",min:"0",step:"0.1",max:"500",value:e.unref(o).floodingPlaneHeight,onInput:i[0]||(i[0]=a=>t(Number.parseFloat(a.target.value)))},null,40,La),e.createElementVNode("div",Da,[e.createElementVNode("input",{type:"number",class:"form-control",id:"flooding-altitude-number",step:"0.1",value:e.unref(o).floodingPlaneHeight,onInput:i[1]||(i[1]=a=>t(Number.parseFloat(a.target.value)))},null,40,Pa),i[2]||(i[2]=e.createElementVNode("span",{class:"input-group-text"},"m",-1))])]))}}),ja=e.defineComponent({__name:"BarChart",setup(s){F.Chart.register(F.BarController,F.BarElement,F.CategoryScale,F.LinearScale);const o=e.ref();return e.onMounted(()=>{new F.Chart(o.value,{data:{datasets:[{backgroundColor:["rgba(255, 99, 132, 0.2)","rgba(54, 162, 235, 0.2)","rgba(255, 206, 86, 0.2)","rgba(75, 192, 192, 0.2)","rgba(153, 102, 255, 0.2)","rgba(255, 159, 64, 0.2)"],borderColor:["rgba(255, 99, 132, 1)","rgba(54, 162, 235, 1)","rgba(255, 206, 86, 1)","rgba(75, 192, 192, 1)","rgba(153, 102, 255, 1)","rgba(255, 159, 64, 1)"],borderWidth:1,data:[12,19,3,5,2,3],label:"# of Votes"}],labels:["Red","Blue","Yellow","Green","Purple","Orange"]},type:"bar"})}),(t,n)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("canvas",{ref_key:"ctx",ref:o},null,512)]))}}),za=e.defineComponent({__name:"DoughnutChart",setup(s){F.Chart.register(F.DoughnutController,F.ArcElement);const o=e.ref();return e.onMounted(()=>{new F.Chart(o.value,{data:{datasets:[{backgroundColor:["rgb(255, 99, 132)","rgb(54, 162, 235)","rgb(255, 205, 86)"],data:[300,50,100],hoverOffset:4,label:"My First Dataset"}],labels:["Red","Blue","Yellow"]},type:"doughnut"})}),(t,n)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("canvas",{ref_key:"ctx",ref:o},null,512)]))}}),Ra={class:"border p-2"},Ta={class:"float-none w-auto form-text mb-0 px-2"},Ua={key:0,class:"form-text mt-0 mx-2"},Ha=["id","aria-label"],Ga=["value"],Za={key:1,class:"form-text mt-0 mx-2"},He=e.defineComponent({__name:"DropdownView",props:{current:{},descriptionPosition:{},items:{},label:{}},emits:["updated:current"],setup(s,{emit:o}){const t=s,n=o,i=e.ref(t.current);function a(l){const g=t.items[l];i.value=g,n("updated:current",g)}const r=p.MathUtils.generateUUID();return(l,g)=>(e.openBlock(),e.createElementBlock("fieldset",Ra,[e.createElementVNode("legend",Ta,e.toDisplayString(l.label),1),l.descriptionPosition==="top"&&i.value!==null&&i.value.description?(e.openBlock(),e.createElementBlock("div",Ua,e.toDisplayString(i.value.description),1)):e.createCommentVNode("",!0),e.createElementVNode("select",{id:e.unref(r),class:"form-select","aria-label":l.label,onInput:g[0]||(g[0]=c=>a(c.target.selectedIndex))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.items,(c,C)=>(e.openBlock(),e.createElementBlock("option",{key:C,value:C},e.toDisplayString(c.name),9,Ga))),128))],40,Ha),l.descriptionPosition!=="top"&&i.value!==null&&i.value.description?(e.openBlock(),e.createElementBlock("div",Za,e.toDisplayString(i.value.description),1)):e.createCommentVNode("",!0)]))}}),Wa={class:"root"},Ja={class:"text-align-center"},Xa=e.defineComponent({__name:"LoadingIndicator",props:{text:String},setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("div",Wa,[t[0]||(t[0]=e.createElementVNode("div",{class:"spinner-border text-secondary",role:"status"},[e.createElementVNode("span",{class:"visually-hidden"},"Loading...")],-1)),e.createElementVNode("div",Ja,e.toDisplayString(s.text),1)]))}}),Ya=u._export_sfc(Xa,[["__scopeId","data-v-012bbf48"]]),qa=R.defineStore("statistics",()=>{function s(){return[]}return{getCompatibleDatasets:s}}),Ka={class:"mb-3"},Qa={class:"row w-100 my-2"},_a={key:1},$a={class:"border m-2 p-1"},er={class:"border m-2 p-1"},tr=e.defineComponent({__name:"Statistics",setup(s){const o=qa(),t=e.ref(null),n=e.ref(!1),i=e.ref(!1);async function a(){n.value=!0,i.value=!1,await uo.delay(1e3),n.value=!1,i.value=!0}function r(l){t.value=l,n.value=!1,i.value=!1}return(l,g)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",Ka,[e.createVNode(He,{label:"Source",current:null,items:e.unref(o).getCompatibleDatasets(),"onUpdated:current":g[0]||(g[0]=c=>r(c))},null,8,["items"])]),e.createVNode(u._sfc_main,{title:"Generate stats...",class:"btn-primary",onClick:a,icon:"bi-pie-chart-fill",text:"Generate"}),e.createElementVNode("div",Qa,[n.value?(e.openBlock(),e.createBlock(Ya,{key:0,text:"processing..."})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createElementBlock("div",_a,[e.createElementVNode("div",$a,[e.createVNode(ja)]),e.createElementVNode("div",er,[e.createVNode(za)])])):e.createCommentVNode("",!0)])],64))}}),or=u._export_sfc(tr,[["__scopeId","data-v-89145074"]]),nr={class:"card"},ir={class:"card-header"},sr={class:"form-check form-switch d-flex"},ar=["checked","disabled","id"],rr=["for"],lr={key:0,class:"card-body"},cr=e.defineComponent({__name:"ToolWrapper",props:{collapsible:{type:Boolean},expanded:{type:Boolean},icon:{},id:{},title:{}},emits:["update:expanded"],setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("div",nr,[e.createElementVNode("h5",ir,[e.createElementVNode("div",sr,[e.createElementVNode("input",{class:"form-check-input",checked:o.expanded,disabled:!o.collapsible,type:"checkbox",role:"switch",id:`enable-${o.id}`,onInput:t[0]||(t[0]=n=>o.$emit("update:expanded",!o.expanded))},null,40,ar),e.createElementVNode("label",{class:"form-check-label flex-fill",for:`enable-${o.id}`},[o.icon?(e.openBlock(),e.createElementBlock("i",{key:0,class:e.normalizeClass(["bi icon",o.icon])},null,2)):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(o.title),1)],8,rr)])]),o.expanded?(e.openBlock(),e.createElementBlock("div",lr,[e.renderSlot(o.$slots,"default",{},void 0,!0)])):e.createCommentVNode("",!0)]))}}),se=u._export_sfc(cr,[["__scopeId","data-v-54281730"]]),gr=e.defineComponent({__name:"AnalysisPanel",setup(s){const o=u.useAnalysisStore();return(t,n)=>(e.openBlock(),e.createElementBlock("div",null,[e.createVNode(se,{class:"tool",id:"flooding-plane",title:"Flooding plane",icon:"bi-layers-half",expanded:e.unref(o).isFloodingPlaneEnabled(),collapsible:!0,"onUpdate:expanded":e.unref(o).enableFloodingPlane},{default:e.withCtx(()=>[e.createVNode(Fa)]),_:1},8,["expanded","onUpdate:expanded"]),e.createVNode(se,{class:"tool",id:"cross-section",title:"Cross section",icon:"bi-circle-half",expanded:e.unref(o).isCrossSectionEnabled(),collapsible:!0,"onUpdate:expanded":e.unref(o).enableCrossSection},{default:e.withCtx(()=>[e.createVNode(Na)]),_:1},8,["expanded","onUpdate:expanded"]),e.createVNode(se,{class:"tool",id:"clipping-box",title:"Clipping Box",icon:"bi-bounding-box",expanded:e.unref(o).isClippingBoxEnabled(),collapsible:!0,"onUpdate:expanded":e.unref(o).enableClippingBox},{default:e.withCtx(()=>[e.createVNode(wa)]),_:1},8,["expanded","onUpdate:expanded"]),e.createVNode(se,{class:"tool",id:"statistics",title:"Statistics",icon:"bi-bar-chart-line",expanded:e.unref(o).isStatisticsEnabled(),collapsible:!0,"onUpdate:expanded":e.unref(o).enableStatistics},{default:e.withCtx(()=>[e.createVNode(or)]),_:1},8,["expanded","onUpdate:expanded"])]))}}),Ar=u._export_sfc(gr,[["__scopeId","data-v-c440c28f"]]),ur={},dr={class:"vstack gap-1 flex-grow-0 flew-shrink-0"};function Cr(s,o){return e.openBlock(),e.createElementBlock("fieldset",dr,[o[0]||(o[0]=e.createElementVNode("hr",null,null,-1)),e.renderSlot(s.$slots,"default")])}const pe=u._export_sfc(ur,[["render",Cr]]),Ie=e.defineComponent({__name:"ImportButton",props:{icon:{},text:{},title:{}},emits:["import"],setup(s,{emit:o}){const t=o,n=e.ref(!1),i=e.ref(null);function a(d){if(d){const I=[];for(const b of d)I.push(b);t("import",I)}}function r(d){const I=d.target.files;a(I)}function l(d){n.value=!0,d.preventDefault()}function g(d){n.value=!1,d.preventDefault()}function c(d){d.preventDefault(),d.dataTransfer&&(d.dataTransfer.dropEffect="copy")}function C(d){var b;n.value=!1;const I=(b=d.dataTransfer)==null?void 0:b.files;a(I),d.preventDefault()}return(d,I)=>(e.openBlock(),e.createElementBlock("div",{draggable:"true",onDragover:c,onDragenter:l,onDragleave:g,onDrop:C},[e.createVNode(u._sfc_main,{title:d.title,text:d.text,icon:d.icon??"bi-box-arrow-left",onClick:I[0]||(I[0]=b=>i.value.click()),class:e.normalizeClass(["w-100",n.value?"btn-primary":"btn-outline-secondary"])},null,8,["title","text","icon","class"]),e.createElementVNode("input",{ref_key:"hiddenInput",ref:i,class:"btn btn-outline-secondary d-none",type:"file",onInput:r,multiple:"true"},null,544)],32))}}),pr=e.defineComponent({__name:"VisibilityControl",props:{visible:{type:Boolean}},emits:["update:visible"],setup(s){return(o,t)=>(e.openBlock(),e.createBlock(Ue,{"model-value":o.visible,"onUpdate:modelValue":t[0]||(t[0]=n=>o.$emit("update:visible",n))},null,8,["model-value"]))}}),Q=u._export_sfc(pr,[["__scopeId","data-v-7c3ff3bf"]]),Ir=e.defineComponent({__name:"EmptyIndicator",props:{text:String},setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("div",null,e.toDisplayString(s.text),1))}}),me=u._export_sfc(Ir,[["__scopeId","data-v-a385fce5"]]),mr={class:"list-group-item item"},hr={class:"d-flex"},fr=["title"],br={class:"icons"},vr=["data-bs-target"],wr=["id"],yr={key:1,class:"table table-striped table-sm table-responsive-sm"},kr=e.defineComponent({__name:"AnnotationItem",props:{annotation:{},visible:{type:Boolean}},emits:["edit","stop-edit","delete","download","update:visible","zoom"],setup(s){const o=s,t=e.ref(o.annotation.isEditing),n=()=>{t.value=o.annotation.isEditing};return e.onMounted(()=>{o.annotation.addEventListener("isEditing",n)}),e.onUnmounted(()=>{o.annotation.removeEventListener("isEditing",n)}),(i,a)=>(e.openBlock(),e.createElementBlock("li",mr,[e.createElementVNode("div",hr,[e.createVNode(Q,{visible:i.visible,"onUpdate:visible":a[0]||(a[0]=r=>i.$emit("update:visible",r))},null,8,["visible"]),e.createElementVNode("a",{class:"title",title:i.annotation.title,href:"#",onClick:a[1]||(a[1]=r=>i.$emit("zoom"))},e.toDisplayString(i.annotation.title),9,fr),e.createElementVNode("div",br,[e.createElementVNode("a",{href:"#",class:"icon",title:"Attribute table","data-bs-toggle":"collapse","data-bs-target":`#collapse-${i.annotation.uuid}`,"aria-expanded":"false","aria-controls":"`#collapse-${annotation.uuid}`"},[...a[5]||(a[5]=[e.createElementVNode("i",{class:"bi bi-card-list"},null,-1)])],8,vr),e.createElementVNode("a",{href:"#",class:"icon",title:"Edit geometry (right-click to exit edition, or press Escape to cancel modifications)",onClick:a[2]||(a[2]=r=>t.value?i.$emit("stop-edit"):i.$emit("edit"))},[e.createElementVNode("i",{class:e.normalizeClass(`bi bi-pencil ${t.value?"text-primary":""}`)},null,2)]),e.createElementVNode("a",{href:"#",class:"icon",title:"Download...",onClick:a[3]||(a[3]=r=>i.$emit("download"))},[...a[6]||(a[6]=[e.createElementVNode("i",{class:"bi bi-download"},null,-1)])]),e.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:a[4]||(a[4]=r=>i.$emit("delete"))},[...a[7]||(a[7]=[e.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])]),e.createElementVNode("div",{class:"collapse m-2",id:`collapse-${i.annotation.uuid}`},[Object.entries(i.annotation.properties).length===0?(e.openBlock(),e.createBlock(me,{key:0,text:"No properties"})):(e.openBlock(),e.createElementBlock("table",yr,[a[8]||(a[8]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"Key"),e.createElementVNode("th",null,"Value")])],-1)),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Object.entries(i.annotation.properties),([r,l])=>(e.openBlock(),e.createBlock(wt,{key:r,"attr-name":r,"attr-value":l},null,8,["attr-name","attr-value"]))),128))])]))],8,wr)]))}}),Er=u._export_sfc(kr,[["__scopeId","data-v-364a81a5"]]),$e=[{name:"Default",value:"normal"},{description:"Will only pick points from the map and not to any 3D object",name:"Map only",value:"mapOnly"},{description:"Will only pick points from 3D objects, and not from the map",name:"3D objects only",value:"objectsOnly"}],xr={class:"d-flex flex-column h-100"},Mr={class:"list-group list-group-flush flex-fill overflow-auto"},Br=e.defineComponent({__name:"AnnotationPanel",setup(s){const o=Re(),t=u.useCameraStore(),n=e.ref(o.getAnnotationMode());e.watch(n,c=>{o.setAnnotationMode(c)});function i(c){const C=c.toGeoJSON();u.Download.downloadAsJson(C,`annotation-${c.title}.json`)}function a(){const c=ht.toCollection(o.getAnnotations());u.Download.downloadAsJson(c,"annotations.json")}function r(c){t.lookTopDownAt(c.object)}function l(c){o.importAnnotationsFiles(c)}function g(c){n.value=c==null?void 0:c.value}return(c,C)=>(e.openBlock(),e.createElementBlock("div",xr,[e.unref(o).count===0?(e.openBlock(),e.createBlock(me,{key:0,text:"No annotations"})):e.createCommentVNode("",!0),e.createElementVNode("ul",Mr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).getAnnotations(),d=>(e.openBlock(),e.createBlock(Er,{key:d.title,annotation:d,visible:d.visible,"onUpdate:visible":()=>{d.visible=!d.visible,c.$forceUpdate()},onEdit:I=>e.unref(o).edit(d),onStopEdit:C[0]||(C[0]=I=>e.unref(o).stopEdition()),onDelete:I=>e.unref(o).remove(d),onDownload:I=>i(d),onZoom:I=>r(d)},null,8,["annotation","visible","onUpdate:visible","onEdit","onDelete","onDownload","onZoom"]))),128))]),e.createVNode(pe,{disabled:e.unref(o).isUserDrawing(),id:"annotations-fieldset"},{default:e.withCtx(()=>[e.createVNode(Ue,{"model-value":e.unref(o).showLabels(),"onUpdate:modelValue":C[1]||(C[1]=d=>e.unref(o).setShowLabels(d)),title:"show labels"},{default:e.withCtx(()=>[...C[6]||(C[6]=[e.createTextVNode("Show annotation labels",-1)])]),_:1},8,["model-value"]),e.createVNode(He,{label:"Picking mode","description-position":"top",current:e.unref($e)[0],items:e.unref($e),"onUpdated:current":C[2]||(C[2]=d=>g(d)),class:"mb-2"},null,8,["current","items"]),e.createVNode(u._sfc_main,{title:"Add point annotation",text:"New points",icon:"bi-pin",class:"btn-primary",onClick:C[3]||(C[3]=d=>e.unref(o).createPoint())}),e.createVNode(u._sfc_main,{title:"Add line annotation",text:"New line",icon:"bi-bezier2",class:"btn-primary",onClick:C[4]||(C[4]=d=>e.unref(o).createLine())}),e.createVNode(u._sfc_main,{title:"Add polygon annotation",text:"New polygon",icon:"bi-heptagon",class:"btn-primary",onClick:C[5]||(C[5]=d=>e.unref(o).createPolygon())}),e.createVNode(u._sfc_main,{title:"Export annotations to GeoJSON",text:"Export annotations",icon:"bi-box-arrow-right",class:"btn-outline-secondary",onClick:a}),e.createVNode(Ie,{title:"Import annotation from GeoJSON",text:"Import annotations",onImport:l})]),_:1},8,["disabled"])]))}}),Vr={key:0},Sr={class:"modal-dialog"},Nr={class:"modal-content"},Or={class:"modal-header"},Lr={class:"modal-title fs-5",id:"exampleModalLabel"},Dr={class:"modal-body"},Pr={class:"modal-footer"},Fr=e.defineComponent({__name:"ModalOverlay",props:{show:Boolean,title:String},setup(s){return(o,t)=>s.show?(e.openBlock(),e.createElementBlock("div",Vr,[t[2]||(t[2]=e.createElementVNode("div",{class:"background"},null,-1)),e.createElementVNode("div",{class:e.normalizeClass(["modal","fade","d-block",s.show?"show":null]),id:"exampleModal",tabindex:"-1","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},[e.createElementVNode("div",Sr,[e.createElementVNode("div",Nr,[e.createElementVNode("div",Or,[e.createElementVNode("h1",Lr,e.toDisplayString(s.title),1),e.createElementVNode("button",{type:"button",class:"btn-close",onClick:t[0]||(t[0]=n=>o.$emit("close")),"data-bs-dismiss":"modal","aria-label":"Close"})]),e.createElementVNode("div",Dr,[e.renderSlot(o.$slots,"default",{},void 0,!0)]),e.createElementVNode("div",Pr,[e.createElementVNode("button",{type:"button",onClick:t[1]||(t[1]=n=>o.$emit("close")),class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ")])])])],2)])):e.createCommentVNode("",!0)}}),jr=u._export_sfc(Fr,[["__scopeId","data-v-1f7f2e97"]]),zr={class:"list-group-item item d-flex d-flex-end"},Rr=e.defineComponent({__name:"BookmarkItem",props:["url","name"],emits:["delete","share","goto"],setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("li",zr,[e.createElementVNode("a",{class:"bookmark",href:"#",onClick:t[0]||(t[0]=n=>o.$emit("goto"))},e.toDisplayString(s.name),1),e.createElementVNode("a",{href:"#",class:"icon",title:"Share this bookmark",onClick:t[1]||(t[1]=n=>o.$emit("share"))},[...t[3]||(t[3]=[e.createElementVNode("i",{class:"bi bi-share"},null,-1)])]),e.createElementVNode("a",{href:"#",class:"icon",title:"Delete this bookmark",onClick:t[2]||(t[2]=n=>o.$emit("delete"))},[...t[4]||(t[4]=[e.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])]))}}),Tr=u._export_sfc(Rr,[["__scopeId","data-v-682112f6"]]),Ur={class:"input-group mb-3"},Hr={class:"form-control text-truncate"},Gr={class:"input-group-text",id:"basic-addon2"},Zr=e.defineComponent({__name:"ShareBookmarkModal",props:{url:{}},setup(s){function o(t){navigator.clipboard.writeText(t)}return(t,n)=>(e.openBlock(),e.createElementBlock("div",null,[n[2]||(n[2]=e.createElementVNode("p",null,"Use this link to share your bookmark",-1)),e.createElementVNode("div",Ur,[e.createElementVNode("span",Hr,e.toDisplayString(t.url),1),e.createElementVNode("span",Gr,[e.createElementVNode("a",{title:"Copy to clipboard",href:"#",class:"text-secondary",onClick:n[0]||(n[0]=()=>o(t.url))},[...n[1]||(n[1]=[e.createElementVNode("i",{class:"bi bi-clipboard"},null,-1)])])])])]))}});class Z extends p.EventDispatcher{constructor(t,n){super();A(this,"camera");A(this,"name");this.name=t,this.camera=n}static new(t,n){const a=new URL(n).searchParams.get("view");if(a===null)throw new Error("Could not deserialize bookmark");const r=JSON.parse(a),l=new p.Vector3(r.camera[0],r.camera[1],r.camera[2]),g=new p.Vector3(r.target[0],r.target[1],r.target[2]),c=new p.Vector3(r.focalOffset[0],r.focalOffset[1],r.focalOffset[2]),C=new Ce(l,g,c);return new Z(t,C)}delete(){this.dispatchEvent({type:"delete"})}getUrl(){const t=u.Download.getBaseUrl()+"?",n=this.camera,i={camera:[n.camera.x,n.camera.y,n.camera.z],focalOffset:[n.focalOffset.x,n.focalOffset.y,n.focalOffset.z],target:[n.target.x,n.target.y,n.target.z]},a=new URL(t),r=a.searchParams;return r.set("tour","none"),r.set("view",JSON.stringify(i)),a}goTo(){this.dispatchEvent({type:"goto"})}}function Wr(){const s=u.getConfig(),o=[];for(const t of s.bookmarks){const n=t.position,i=t.target,a=t.focalOffset,r=t.title,l=new Ce(new p.Vector3(n.x,n.y,n.z),new p.Vector3(i.x,i.y,i.z),new p.Vector3(a.x,a.y,a.z));o.push(new Z(r,l))}return o}const kt=R.defineStore("bookmarks",()=>{const s=e.ref(new Set(Wr())),o=e.computed(()=>s.value.size);function t(r){s.value.add(r),G.dispatchEvent({type:"bookmark-added",value:r})}function n(r){s.value.delete(r),G.dispatchEvent({type:"bookmark-removed",value:r})}function i(){s.value.clear()}function a(){return[...s.value]}return{add:t,clear:i,count:o,getBookmarks:a,remove:n}}),Jr={class:"d-flex flex-column h-100"},Xr={class:"list-group list-group-flush flex-fill overflow-auto"},Yr=e.defineComponent({__name:"BookmarkPanel",setup(s){const o=e.ref(!1),t=e.ref(null),n=e.ref(null),i=K(),a=kt(),r=u.useCameraStore();function l(){const m=window.prompt("Bookmark name","New bookmark");if(m!=null){const h=new Z(m,r.getCameraPosition());a.add(h)}}function g(){const m=[];for(const h of a.getBookmarks())m.push({title:h.name,url:h.getUrl().toString()});u.Download.downloadAsJson(m,"bookmarks.json")}function c(m){r.setCameraPosition(m.camera)}function C(m){for(const h of m)d(h)}async function d(m){const h=await m.text(),v=JSON.parse(h),E=new Set(a.getBookmarks().map(f=>f.name));let V=0,w=0;v.forEach(f=>{E.has(f.title)?w++:(a.add(Z.new(f.title,f.url)),V++)}),i.push(new N("Bookmarks",`${V} bookmarks imported (${w} skipped)`,"success"))}function I(m){t.value=m.getUrl().toString(),n.value="Share bookmark",o.value=!0}function b(){const m=new Z("temp",r.getCameraPosition());t.value=m.getUrl().toString(),n.value="Share current view",o.value=!0}return(m,h)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",Jr,[e.unref(a).count===0?(e.openBlock(),e.createBlock(me,{key:0,text:"No bookmarks"})):e.createCommentVNode("",!0),e.createElementVNode("ul",Xr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(a).getBookmarks(),v=>(e.openBlock(),e.createBlock(Tr,{key:v.name,name:v.name,onShare:E=>I(v),onDelete:E=>e.unref(a).remove(v),onGoto:E=>c(v)},null,8,["name","onShare","onDelete","onGoto"]))),128))]),e.createVNode(pe,null,{default:e.withCtx(()=>[e.createVNode(u._sfc_main,{text:"New bookmark",icon:"bi-plus-lg",title:"Create a new bookmark from the current view",class:"btn-primary",onClick:h[0]||(h[0]=()=>{l(),m.$forceUpdate()})}),e.createVNode(u._sfc_main,{text:"Share view",icon:"bi-share",title:"Share current view",class:"btn-outline-secondary",onClick:b}),e.createVNode(u._sfc_main,{title:"Export bookmarks to GeoJSON",class:"btn-outline-secondary",onClick:g,icon:"bi-box-arrow-right",text:"Export bookmarks"}),e.createVNode(Ie,{title:"Import bookmarks from GeoJSON",text:"Import bookmarks",onImport:C})]),_:1})]),e.createVNode(jr,{show:o.value,title:n.value,onClose:h[1]||(h[1]=()=>o.value=!1)},{default:e.withCtx(()=>[e.createVNode(Zr,{url:t.value},null,8,["url"])]),_:1},8,["show","title"])],64))}}),qr={},Kr={class:"list-group list-group-flush border-start"};function Qr(s,o){return e.openBlock(),e.createElementBlock("ul",Kr,[e.renderSlot(s.$slots,"default")])}const ce=u._export_sfc(qr,[["render",Qr],["__scopeId","data-v-461b97dc"]]),_r=["aria-expanded","aria-controls"],$r={key:0,class:"icon me-2"},el={class:"flex-fill"},tl={key:1,class:"icon ms-2"},ol=["id"],Be=e.defineComponent({__name:"SectionCollapsible",props:{expanded:{type:Boolean},iconPosition:{},title:{}},emits:["update:expanded"],setup(s,{emit:o}){const t=s,n=o,i=p.MathUtils.generateUUID(),a=`#${i}`,r=e.ref(null);return e.onMounted(()=>{var l,g,c;t.expanded&&((l=r.value)==null||l.classList.add("show")),(g=r.value)==null||g.addEventListener("hidden.bs.collapse",()=>n("update:expanded",!1)),(c=r.value)==null||c.addEventListener("shown.bs.collapse",()=>n("update:expanded",!0))}),(l,g)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("h6",null,[e.createElementVNode("a",{class:"d-flex text-nowrap text-truncate overflow-hidden link-underline link-underline-opacity-0 link-underline-opacity-75-hover link-body-emphasis",href:a,"data-bs-toggle":"collapse",role:"button","aria-expanded":l.expanded,"aria-controls":e.unref(i)},[l.iconPosition==="left"?(e.openBlock(),e.createElementBlock("div",$r,[...g[0]||(g[0]=[e.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):e.createCommentVNode("",!0),e.createElementVNode("span",el,e.toDisplayString(l.title),1),l.iconPosition!=="left"?(e.openBlock(),e.createElementBlock("div",tl,[...g[1]||(g[1]=[e.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):e.createCommentVNode("",!0)],8,_r)]),e.createElementVNode("div",{ref_key:"collapsible",ref:r,id:e.unref(i),class:"collapse"},[e.renderSlot(l.$slots,"default")],8,ol)]))}}),nl=e.defineComponent({__name:"ListLabel",props:{title:{}},setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["d-inline-block flex-fill text-nowrap text-truncate overflow-hidden px-1",o.$attrs.class])},e.toDisplayString(o.title),3))}}),il={class:"slider d-flex"},sl={key:0,title:"Transparent",class:"bi-x-diamond me-1"},al={key:1,title:"Opacity",class:"bi-x-diamond-fill opacity-75 me-1"},rl=["value"],ll={key:2,title:"Opaque",class:"bi-x-diamond-fill ms-1"},cl=e.defineComponent({__name:"OpacitySlider",props:{opacity:{},size:{}},emits:["update:opacity"],setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("div",il,[o.size!=="small"?(e.openBlock(),e.createElementBlock("i",sl)):e.createCommentVNode("",!0),o.size==="small"?(e.openBlock(),e.createElementBlock("i",al)):e.createCommentVNode("",!0),e.createElementVNode("input",{title:"Opacity",type:"range",class:"form-range",min:"0",step:"0.01",max:"1",onInput:t[0]||(t[0]=n=>o.$emit("update:opacity",Number.parseFloat(n.target.value))),value:o.opacity},null,40,rl),o.size!=="small"?(e.openBlock(),e.createElementBlock("i",ll)):e.createCommentVNode("",!0)]))}}),Et=u._export_sfc(cl,[["__scopeId","data-v-5b0604f2"]]),gl={class:"list-group-item"},Al={class:"d-flex"},ul=e.defineComponent({__name:"BasemapItem",props:{hasOpacitySlider:{type:Boolean},isLoading:{type:Boolean},name:{},opacity:{},type:{},visible:{type:Boolean}},emits:["update:opacity","update:visible"],setup(s){const o={color:"fg-landcover-map",elevation:"fg-profile",graticule:"fg-grid",mask:"bi-mask"},t={color:"Color layer",elevation:"Elevation layer",graticule:"Graticule",mask:"Mask layer"};return(n,i)=>(e.openBlock(),e.createElementBlock("li",gl,[e.createElementVNode("div",Al,[e.createVNode(u.IconList,{class:"me-1 text-body-tertiary"},{default:e.withCtx(()=>[e.createVNode(u._sfc_main$1,{icon:o[n.type],title:t[n.type]},null,8,["icon","title"])]),_:1}),e.createVNode(Q,{visible:n.visible,"onUpdate:visible":i[0]||(i[0]=a=>n.$emit("update:visible",a))},null,8,["visible"]),e.createVNode(nl,{title:n.name,class:e.normalizeClass(["label",n.visible?null:"disabled"])},null,8,["title","class"]),n.hasOpacitySlider?(e.openBlock(),e.createBlock(Et,{key:0,class:e.normalizeClass(["opacity-slider",n.visible?null:"disabled"]),opacity:n.opacity,"onUpdate:opacity":i[1]||(i[1]=a=>n.$emit("update:opacity",a))},null,8,["class","opacity"])):e.createCommentVNode("",!0)])]))}}),et=u._export_sfc(ul,[["__scopeId","data-v-a7bbfe26"]]),dl={},Cl={class:"spinner-border spinner-border-sm text-secondary",role:"status"};function pl(s,o){return e.openBlock(),e.createElementBlock("div",Cl,[...o[0]||(o[0]=[e.createElementVNode("span",{class:"visually-hidden"},"Loading...",-1)])])}const xt=u._export_sfc(dl,[["render",pl]]),Il={class:"d-flex"},ml={key:0,class:"icon spinner d-inline-block"},hl={key:1,class:"list-group-item"},fl=e.defineComponent({__name:"DatagroupItem",props:{group:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(s){const o=s,t=e.reactive(o.group.leafs()),n=e.ref(!1),i=e.ref(!1),a=e.ref(o.group.visible);e.watch(t,g=>{n.value=g.some(c=>c.isPreloading),i.value=g.some(c=>c.isPreloaded),a.value=g.some(c=>c.visible)});const r=p.MathUtils.generateUUID(),l=`#${r}`;return(g,c)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",Il,[e.createVNode(u.IconList,{class:"me-1 text-body-tertiary"},{default:e.withCtx(()=>[...c[10]||(c[10]=[e.createElementVNode("i",{class:"bi bi-folder2",title:"Group"},null,-1)])]),_:1}),e.createVNode(Q,{visible:a.value,"onUpdate:visible":c[0]||(c[0]=C=>g.$emit("update:visible",g.group,C))},null,8,["visible"]),e.createVNode(u.IconList,{class:"me-1"},{default:e.withCtx(()=>[e.createVNode(u.IconListButton,{title:"Expand group",icon:"bi-chevron-down","data-bs-toggle":"collapse","data-bs-target":l,"aria-controls":e.unref(r),"aria-expanded":"false"},null,8,["aria-controls"])]),_:1}),e.createVNode(u._sfc_main$2,{class:"label",disabled:!a.value||!i.value,text:g.group.name,title:`Zoom to ${g.group.name}`,onClick:c[1]||(c[1]=C=>g.$emit("zoom",g.group))},null,8,["disabled","text","title"]),e.createVNode(u.IconList,{class:"ms-1"},{default:e.withCtx(()=>[n.value?(e.openBlock(),e.createElementBlock("div",ml,[e.createVNode(xt,{title:"Loading..."})])):e.createCommentVNode("",!0),i.value&&(g.group.config.canMaskBasemap||g.group.config.isMaskingBasemap)?(e.openBlock(),e.createBlock(u.IconListButton,{key:1,title:"Toggle basemap masking",icon:"bi-mask",onClick:c[2]||(c[2]=C=>g.$emit("update:toggle-mask",g.group))})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createBlock(u.IconListButton,{key:2,title:"Clip to",icon:"bi-bounding-box",onClick:c[3]||(c[3]=C=>g.$emit("clipTo",g.group))})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createBlock(u.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:c[4]||(c[4]=C=>g.$emit("update:toggle-grid",g.group))})):e.createCommentVNode("",!0)]),_:1})]),e.createVNode(ce,{id:e.unref(r),class:"collapse pb-3"},{default:e.withCtx(()=>[g.group.children.length>0?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(g.group.children,C=>(e.openBlock(),e.createBlock(Mt,{key:C.name,dataset:C,onZoom:c[5]||(c[5]=d=>g.$emit("zoom",d)),onClipTo:c[6]||(c[6]=d=>g.$emit("clipTo",d)),"onUpdate:toggleGrid":c[7]||(c[7]=d=>g.$emit("update:toggle-grid",d)),"onUpdate:toggleMask":c[8]||(c[8]=d=>g.$emit("update:toggle-mask",d)),"onUpdate:visible":c[9]||(c[9]=(d,I)=>g.$emit("update:visible",d,I))},null,8,["dataset"]))),128)):(e.openBlock(),e.createElementBlock("li",hl,"No dataset in this group"))]),_:1},8,["id"])],64))}}),bl=u._export_sfc(fl,[["__scopeId","data-v-7592eab8"]]),vl={class:"d-flex"},wl={key:0,class:"icon spinner d-inline-block"},yl=["id"],kl=e.defineComponent({__name:"DatasetItem",props:{dataset:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(s){const o=u.useDatasetStore(),t=s,n=u.refAndWatch(t.dataset,"isPreloading"),i=u.refAndWatch(t.dataset,"isPreloaded"),a=u.refAndWatch(t.dataset,"visible");function r(){o.remove(t.dataset)}return(l,g)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",vl,[e.createVNode(u.IconList,{class:"me-1 text-body-tertiary"},{default:e.withCtx(()=>[e.createVNode(u._sfc_main$1,{icon:e.unref(st)[l.dataset.type]??"bi-file-earmark-x",title:e.unref(at)[l.dataset.type]??"Unknown"},null,8,["icon","title"])]),_:1}),e.createVNode(Q,{visible:e.unref(a),"onUpdate:visible":g[0]||(g[0]=c=>l.$emit("update:visible",l.dataset,c))},null,8,["visible"]),e.createVNode(u._sfc_main$2,{class:"label",disabled:!e.unref(a)||!e.unref(i),text:l.dataset.name,title:`Zoom to ${l.dataset.name}`,onClick:g[1]||(g[1]=c=>l.$emit("zoom",l.dataset))},null,8,["disabled","text","title"]),e.createVNode(u.IconList,{class:"ms-1"},{default:e.withCtx(()=>[e.unref(n)?(e.openBlock(),e.createElementBlock("div",wl,[e.createVNode(xt,{title:"Loading..."})])):e.createCommentVNode("",!0),e.unref(ae).has(l.dataset.type)&&e.unref(i)?(e.openBlock(),e.createBlock(u.IconListButton,{key:1,title:"Show dataset properties",icon:"bi-card-list","data-bs-toggle":"collapse","data-bs-target":`#collapse-${l.dataset.uuid}`,"aria-controls":`collapse-${l.dataset.uuid}`,"aria-expanded":"false"},null,8,["data-bs-target","aria-controls"])):e.createCommentVNode("",!0),e.unref(i)&&("canMaskBasemap"in l.dataset.config&&l.dataset.config.canMaskBasemap||"isMaskingBasemap"in l.dataset.config&&l.dataset.config.isMaskingBasemap)?(e.openBlock(),e.createBlock(u.IconListButton,{key:2,title:"Toggle basemap masking",icon:"bi-mask",onClick:g[2]||(g[2]=c=>l.$emit("update:toggle-mask",l.dataset))})):e.createCommentVNode("",!0),e.unref(i)?(e.openBlock(),e.createBlock(u.IconListButton,{key:3,title:"Clip to",icon:"bi-bounding-box",onClick:g[3]||(g[3]=c=>l.$emit("clipTo",l.dataset))})):e.createCommentVNode("",!0),e.unref(i)?(e.openBlock(),e.createBlock(u.IconListButton,{key:4,title:"Toggle 3D grid",icon:"bi-box",onClick:g[4]||(g[4]=c=>l.$emit("update:toggle-grid",l.dataset))})):e.createCommentVNode("",!0),e.createVNode(u.IconListButton,{title:"Delete this dataset",icon:"bi-trash",onClick:r})]),_:1})]),e.unref(ae).has(l.dataset.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:"collapse m-2",id:`collapse-${l.dataset.uuid}`},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(ae).get(l.dataset.type)),{dataset:l.dataset},null,8,["dataset"]))],8,yl)):e.createCommentVNode("",!0)],64))}}),El=u._export_sfc(kl,[["__scopeId","data-v-eaf54a36"]]),xl={class:"list-group-item"},Mt=e.defineComponent({__name:"DatasetOrGroupItem",props:{dataset:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("li",xl,[e.unref(u.Datagroup).isGroup(o.dataset)?(e.openBlock(),e.createBlock(bl,{key:0,group:o.dataset,onZoom:t[0]||(t[0]=n=>o.$emit("zoom",n)),onClipTo:t[1]||(t[1]=n=>o.$emit("clipTo",n)),"onUpdate:toggleGrid":t[2]||(t[2]=n=>o.$emit("update:toggle-grid",n)),"onUpdate:toggleMask":t[3]||(t[3]=n=>o.$emit("update:toggle-mask",n)),"onUpdate:visible":t[4]||(t[4]=(n,i)=>o.$emit("update:visible",n,i))},null,8,["group"])):(e.openBlock(),e.createBlock(El,{key:1,dataset:o.dataset,onZoom:t[5]||(t[5]=n=>o.$emit("zoom",n)),onClipTo:t[6]||(t[6]=n=>o.$emit("clipTo",n)),"onUpdate:toggleGrid":t[7]||(t[7]=n=>o.$emit("update:toggle-grid",n)),"onUpdate:toggleMask":t[8]||(t[8]=n=>o.$emit("update:toggle-mask",n)),"onUpdate:visible":t[9]||(t[9]=(n,i)=>o.$emit("update:visible",n,i))},null,8,["dataset"]))]))}}),Ml={class:"list-group-item d-flex"},Bl=e.defineComponent({__name:"OverlayItem",props:{name:{},opacity:{},visible:{type:Boolean}},emits:["update:visible","update:opacity","update:move-up","update:move-down","zoom"],setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("li",Ml,[e.createVNode(u.IconList,{class:"me-1 text-body-tertiary"},{default:e.withCtx(()=>[e.createVNode(u._sfc_main$1,{icon:"fg-contour-map",title:"Overlay"})]),_:1}),e.createVNode(Q,{visible:o.visible,"onUpdate:visible":t[0]||(t[0]=n=>o.$emit("update:visible",n))},null,8,["visible"]),e.createVNode(u._sfc_main$2,{class:"label",disabled:!o.visible,title:`Zoom to ${o.name}`,text:o.name,onClick:t[1]||(t[1]=n=>o.$emit("zoom"))},null,8,["disabled","title","text"]),e.createVNode(Et,{class:e.normalizeClass(["opacity-slider",o.visible?null:"disabled"]),opacity:o.opacity,size:"small","onUpdate:opacity":t[2]||(t[2]=n=>o.$emit("update:opacity",n))},null,8,["class","opacity"]),e.createVNode(u.IconList,{class:"ms-1"},{default:e.withCtx(()=>[e.createVNode(u.IconListButton,{title:"Move up",icon:"bi-arrow-up",onClick:t[3]||(t[3]=n=>o.$emit("update:move-up"))}),e.createVNode(u.IconListButton,{title:"Move down",icon:"bi-arrow-down",onClick:t[4]||(t[4]=n=>o.$emit("update:move-down"))})]),_:1})]))}}),Vl=u._export_sfc(Bl,[["__scopeId","data-v-8755c19f"]]),Sl={class:"d-flex flex-column h-100"},Nl={class:"flex-fill overflow-auto"},Ol=e.defineComponent({__name:"DatasetPanel",setup(s){const o=u.useDatasetStore(),t=u.useCameraStore(),n=u.useAnalysisStore(),i=It();function a(c){const C=o.getBoundingBox(c);C!=null&&C.isEmpty()||(n.setClippingBox(C),n.enableClippingBox(!0))}function r(c){for(const C of c)o.importFromFile(C)}function l(){const c=document.getElementById("dataset-import-url");o.importFromFile(c.value)}function g(c){const C=o.getBoundingBox(c);C!=null&&C.isEmpty()||t.lookTopDownAt(C)}return(c,C)=>(e.openBlock(),e.createElementBlock("div",Sl,[e.createElementVNode("div",Nl,[e.createVNode(Be,{title:"Basemaps","icon-position":"left",id:"basemap-list",class:"border-bottom mb-3"},{default:e.withCtx(()=>[e.createVNode(ce,{id:"layers-list-group"},{default:e.withCtx(()=>[e.unref(i).getGraticuleLayer()!==void 0?(e.openBlock(),e.createBlock(et,{key:0,type:"graticule",opacity:1,name:e.unref(i).getGraticuleLayer().name,isLoading:!1,visible:e.unref(i).getGraticuleLayer().visible,hasOpacitySlider:!1,"onUpdate:visible":C[0]||(C[0]=d=>e.unref(i).getGraticuleLayer().visible=d)},null,8,["name","visible"])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i).getBasemaps(),d=>(e.openBlock(),e.createBlock(et,{key:d.name,type:d.type,opacity:d.opacity,name:d.name,isLoading:d.isLoading,visible:d.visible,hasOpacitySlider:d.type==="color"||d.type==="elevation","onUpdate:visible":I=>e.unref(i).setBasemapVisibility(d,I),"onUpdate:opacity":I=>e.unref(i).setBasemapOpacity(d,I)},null,8,["type","opacity","name","isLoading","visible","hasOpacitySlider","onUpdate:visible","onUpdate:opacity"]))),128))]),_:1})]),_:1}),e.unref(i).overlayCount>0?(e.openBlock(),e.createBlock(Be,{key:0,title:"Overlays","icon-position":"left",id:"overlay-list",class:"border-bottom mb-3"},{default:e.withCtx(()=>[e.createVNode(ce,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i).getOverlays(),d=>(e.openBlock(),e.createBlock(Vl,{key:d.name,opacity:d.opacity,name:d.name,visible:d.visible,"onUpdate:visible":I=>e.unref(i).setOverlayVisibility(d,I),"onUpdate:opacity":I=>e.unref(i).setOverlayOpacity(d,I),"onUpdate:moveUp":I=>e.unref(i).moveOverlayUp(d),"onUpdate:moveDown":I=>e.unref(i).moveOverlayDown(d)},null,8,["opacity","name","visible","onUpdate:visible","onUpdate:opacity","onUpdate:moveUp","onUpdate:moveDown"]))),128))]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(Be,{title:"Datasets",expanded:!0,"icon-position":"left",id:"dataset-list"},{default:e.withCtx(()=>[e.createVNode(ce,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).getTree(),d=>(e.openBlock(),e.createBlock(Mt,{key:d.name,dataset:d,onUpdated:C[1]||(C[1]=I=>c.$forceUpdate()),onZoom:C[2]||(C[2]=I=>g(I)),onClipTo:C[3]||(C[3]=I=>a(I)),"onUpdate:toggleGrid":C[4]||(C[4]=I=>e.unref(o).toggleGrid(I)),"onUpdate:toggleMask":C[5]||(C[5]=I=>e.unref(o).toggleMask(I)),"onUpdate:visible":C[6]||(C[6]=(I,b)=>e.unref(o).setVisible(I,b))},null,8,["dataset"]))),128))]),_:1})]),_:1})]),e.createVNode(pe,null,{default:e.withCtx(()=>[e.createElementVNode("div",{class:"input-group mb-3"},[C[7]||(C[7]=e.createElementVNode("input",{type:"text",id:"dataset-import-url",class:"form-control",placeholder:"https://","aria-label":"URL to import","aria-describedby":"button-dataset-import-url"},null,-1)),e.createElementVNode("button",{onClick:l,class:"btn btn-outline-secondary",type:"button",id:"button-dataset-import-url"}," Import URL ")]),e.createVNode(Ie,{title:"Import file",text:"Import file",onImport:r})]),_:1})]))}}),Ll={class:"list-group-item item"},Dl={class:"d-flex"},Pl=["title"],Fl={class:"icons"},jl=e.defineComponent({__name:"MeasurementItem",props:{measure:{},visible:{type:Boolean}},emits:["delete","download","update:visible","zoom"],setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("li",Ll,[e.createElementVNode("div",Dl,[e.createVNode(Q,{visible:o.visible,"onUpdate:visible":t[0]||(t[0]=n=>o.$emit("update:visible",n))},null,8,["visible"]),e.createElementVNode("a",{class:"title",title:o.measure.title,href:"#",onClick:t[1]||(t[1]=n=>o.$emit("zoom"))},e.toDisplayString(o.measure.title)+" ("+e.toDisplayString(o.measure.object.length.toFixed(2))+"m)",9,Pl),e.createElementVNode("div",Fl,[e.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:t[2]||(t[2]=n=>o.$emit("delete"))},[...t[3]||(t[3]=[e.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])])]))}}),zl=u._export_sfc(jl,[["__scopeId","data-v-bcecb7b2"]]),tt=[{description:"Will automatically beam perpendicularly to the selected point until a geometry is hit",name:"Laser",value:"laser"}],Rl={class:"d-flex flex-column h-100"},Tl={class:"list-group list-group-flush flex-fill overflow-auto"},Ul=e.defineComponent({__name:"MeasurementPanel",setup(s){const o=Te(),t=u.useCameraStore(),n=e.ref(o.getMeasurementMode());e.watch(n,c=>{o.setMeasurementMode(c)});function i(c){const C=c.toGeoJSON();u.Download.downloadAsJson(C,`measure-${c.title}.json`)}function a(){const c=vt.toCollection(o.getMeasures());u.Download.downloadAsJson(c,"measures.json")}function r(c){t.lookTopDownAt(c.object)}function l(c){o.importMeasureFiles(c)}function g(c){n.value=c==null?void 0:c.value}return(c,C)=>(e.openBlock(),e.createElementBlock("div",Rl,[C[3]||(C[3]=e.createElementVNode("div",{class:"alert alert-warning py-2",role:"alert"},[e.createElementVNode("i",{class:"bi bi-cone-striped"}),e.createTextVNode(" This feature is experimental ")],-1)),e.unref(o).count===0?(e.openBlock(),e.createBlock(me,{key:0,text:"No measurements"})):e.createCommentVNode("",!0),e.createElementVNode("ul",Tl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o).getMeasures(),d=>(e.openBlock(),e.createBlock(zl,{key:d.title,measure:d,visible:d.visible,"onUpdate:visible":()=>{d.visible=!d.visible,c.$forceUpdate()},onDelete:I=>e.unref(o).remove(d),onDownload:I=>i(d),onZoom:I=>r(d)},null,8,["measure","visible","onUpdate:visible","onDelete","onDownload","onZoom"]))),128))]),e.createVNode(pe,{id:"measures-fieldset"},{default:e.withCtx(()=>[e.createVNode(He,{label:"Mode","description-position":"top",current:e.unref(tt)[0],items:e.unref(tt),"onUpdated:current":C[0]||(C[0]=d=>g(d)),class:"mb-2"},null,8,["current","items"]),e.unref(o).isUserMeasuring()?(e.openBlock(),e.createBlock(u._sfc_main,{key:0,title:"Stop measuring",text:"Stop measuring",icon:"bi-stop-circle",class:"btn-primary",onClick:C[1]||(C[1]=d=>e.unref(o).end())})):(e.openBlock(),e.createBlock(u._sfc_main,{key:1,title:"Start measuring",text:"Start measuring",icon:"bi-rulers",class:"btn-primary",onClick:C[2]||(C[2]=d=>e.unref(o).start())})),e.createVNode(u._sfc_main,{title:"Export measures to GeoJSON",class:"btn-outline-secondary",onClick:a,icon:"bi-box-arrow-right",text:"Export measures"}),e.createVNode(Ie,{title:"Import measures from GeoJSON",text:"Import measures",onImport:l})]),_:1})]))}}),Hl={class:"panel",id:"panel-container"},Gl={class:"title"},Zl={key:0,class:"badge text-bg-primary rounded-pill float-end",title:"Version"},Wl={class:"content"},Jl=e.defineComponent({__name:"PanelContainer",props:{selected:{}},setup(s){const o=it(),t=`packages-v1.0.0-beta.0
8
+ `;return(n,i)=>{var a;return e.openBlock(),e.createElementBlock("div",Hl,[e.createElementVNode("h5",Gl,[e.createTextVNode(e.toDisplayString((a=e.unref(o).find(r=>r.key===n.selected))==null?void 0:a.title)+" ",1),n.selected==="about"?(e.openBlock(),e.createElementBlock("span",Zl,"Version: "+e.toDisplayString(e.unref(t)),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Wl,[n.selected==="datasets"?(e.openBlock(),e.createBlock(Ol,{key:0})):e.createCommentVNode("",!0),n.selected==="about"?(e.openBlock(),e.createBlock(Gs,{key:1})):e.createCommentVNode("",!0),n.selected==="bookmarks"?(e.openBlock(),e.createBlock(Yr,{key:2})):e.createCommentVNode("",!0),n.selected==="analysis"?(e.openBlock(),e.createBlock(Ar,{key:3})):e.createCommentVNode("",!0),n.selected==="annotations"?(e.openBlock(),e.createBlock(Br,{key:4})):e.createCommentVNode("",!0),n.selected==="measures"?(e.openBlock(),e.createBlock(Ul,{key:5})):e.createCommentVNode("",!0)])])}}}),Xl=u._export_sfc(Jl,[["__scopeId","data-v-381fd038"]]),Yl=["aria-valuenow"],ql={methods:{tick(){this.$forceUpdate()}}},Kl=e.defineComponent({...ql,__name:"ProgressBar",props:{progress:{required:!0,type:Number}},setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("div",{class:"progress",role:"progressbar","aria-label":"Progress","aria-valuenow":s.progress*100,"aria-valuemin":"0","aria-valuemax":"100"},[s.progress!=1?(e.openBlock(),e.createElementBlock("div",{key:0,class:"progress-bar progress-bar-striped progress-bar-animated",style:e.normalizeStyle(`width: ${s.progress*100}%`)},null,4)):e.createCommentVNode("",!0)],8,Yl))}}),Ql={async geocode(s){const o=await u.Fetcher.fetchJson(`https://api-adresse.data.gouv.fr/search/?q=${s}`),t=o.features.map(n=>new O("EPSG:4326",n.geometry.coordinates[0],n.geometry.coordinates[1],0));return await lt.alticode(t),t.forEach((n,i)=>{o.features[i].properties.crs="EPSG:2154",o.features[i].properties.z=n.altitude}),o.features.map(n=>n.properties)}},_l={class:"main"},$l={class:"input-group",id:"address-search"},ec=e.defineComponent({__name:"SearchOverlay",emits:["update:poi"],setup(s,{emit:o}){const t=e.ref(null),n=o;return e.onMounted(()=>{new Co({data:{keys:["label"],src:a=>Ql.geocode(a)},debounce:300,placeHolder:"Search places...",resultItem:{highlight:!0},resultsList:{noResults:!0},selector:"#search-place-autocomplete",threshold:3,searchEngine:(a,r)=>r}),t.value.addEventListener("selection",a=>{const r=a.detail.selection.value;n("update:poi",r)})}),(i,a)=>(e.openBlock(),e.createElementBlock("div",_l,[e.createElementVNode("div",$l,[e.createElementVNode("input",{ref_key:"inputField",ref:t,id:"search-place-autocomplete",class:"rounded-pill form-control",type:"search",dir:"ltr",placeholder:"Search places...",spellcheck:"false",autocorrect:"off",autocomplete:"off",autocapitalize:"off",maxlength:"2048",tabindex:"1"},null,512)])]))}}),tc=u._export_sfc(ec,[["__scopeId","data-v-46d63936"]]),oc={class:"d-flex column-gap-3"},nc=e.defineComponent({__name:"StatusBar",props:{x:Number,y:Number,z:Number},setup(s){return(o,t)=>{var n,i,a;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",oc,[t[0]||(t[0]=e.createElementVNode("i",{class:"bi text-secondary bi-cursor-fill"},null,-1)),e.createVNode(z,{value:(n=s.x)==null?void 0:n.toFixed(0),prefix:"X:"},null,8,["value"]),e.createVNode(z,{value:(i=s.y)==null?void 0:i.toFixed(0),prefix:"Y:"},null,8,["value"]),e.createVNode(z,{value:(a=s.z)==null?void 0:a.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])])}}}),ic=u._export_sfc(nc,[["__scopeId","data-v-3d05468b"]]),sc="data:image/png;base64,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",ac={class:"nav-item"},rc=["id","title"],lc=e.defineComponent({__name:"ToolbarButton",props:["icon","tourkey","title","active"],setup(s){return(o,t)=>(e.openBlock(),e.createElementBlock("li",ac,[e.createElementVNode("a",{id:`toolbar-${s.tourkey}`,class:e.normalizeClass(["nav-link",s.active?"active":null]),href:"#",title:s.title},[e.createElementVNode("i",{class:e.normalizeClass(["bi",s.icon])},null,2)],10,rc)]))}}),cc={class:"toolbar"},gc={id:"menu",class:"nav nav-pills flex-column"},Ac={class:"nav-item mt-2"},uc={href:"https://giro3d.org",target:"_blank",title:"Piero, powered by Giro3D"},dc=["src"],Cc=e.defineComponent({__name:"ToolBar",props:{active:{}},emits:["selected"],setup(s){const o=it();return(t,n)=>(e.openBlock(),e.createElementBlock("div",cc,[e.createElementVNode("ul",gc,[e.createElementVNode("li",Ac,[e.createElementVNode("a",uc,[e.createElementVNode("img",{src:e.unref(sc),alt:"Piero, powered by Giro3D",class:"mb-3 w-100 p-1"},null,8,dc)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o),i=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[i.enabled?(e.openBlock(),e.createBlock(lc,{active:t.active===i.key,key:i.key,tourkey:i.key,title:i.title,icon:i.icon,onClick:a=>t.$emit("selected",i.key)},null,8,["active","tourkey","title","icon","onClick"])):e.createCommentVNode("",!0)],64))),256))])]))}}),pc=u._export_sfc(Cc,[["__scopeId","data-v-f84bccda"]]),Ic=e.defineComponent({__name:"App",props:{getContext:{type:Function}},setup(s){const o=e.ref("datasets"),t=e.ref(1),n=e.ref(new p.Vector3(0,0,0)),i=new p.Vector2,a=e.ref(null),r=e.ref(null),l=e.ref(!1),g=e.ref(!0);let c=!1;const C=q(),d=u.useCameraStore(),I=Re(),b=Te(),m=e.shallowRef(null),h=e.shallowRef(null),v=e.ref();e.onMounted(()=>{const y=C.getMainView(),M=C.getMinimapView();y&&w(y),M&&f(M),C.$onAction(({after:x,args:j,name:fe})=>{x(()=>{switch(fe){case"setMainView":j[0]===null?E():w(j[0]);break;case"setMinimapView":j[0]===null?V():f(j[0]);break}})}),v.value=setInterval(()=>{c&&(Vt(i),St(i),c=!1)},50),setTimeout(()=>{g.value=!1},1e3),G.dispatchEvent({type:"ready"})}),e.onUnmounted(()=>{v.value!=null&&(clearInterval(v.value),v.value=void 0),V(),E()});function E(){var y;h.value&&h.value.setMainInstance(null),(y=m.value)==null||y.dispose(),m.value=null}function V(){var y;(y=h.value)==null||y.dispose()}function w(y){const M=C.getMainView();if(M===null)throw new Error("mainview is null");m.value=new li(M),m.value.addEventListener("update",()=>{m.value&&(t.value=m.value.mainInstance.progress,l.value=m.value.mainInstance.loading)}),s.getContext().view=new di({camera:m.value.camera}),h.value&&h.value.setMainInstance(y)}function f(y){h.value=new ui(y),m.value&&h.value.setMainInstance(m.value.mainInstance)}function k(y){m.value&&(m.value.mainInstance.eventToCanvasCoords(y,i),c=!0)}function S(y){if(!m.value)return;const M=m.value.mainInstance,x=new O(y.crs,y.x,y.y,y.z).as(M.referenceCrs),fe=ne.fromCenterAndSize(x.crs,x.toVector2(),1e3,1e3).toBox3(y.z,y.z+200);m.value.camera.lookTopDownAt(fe,!1)}function he(y,M){if(m.value==null||m.value.mainInstance==null||d.getNavigationMode()==="position-on-map"||d.isUserInteracting()||I.isUserDrawing()||b.isUserMeasuring())return;const x=m.value.picker.pick(m.value.mainInstance,y);if((x==null?void 0:x.point)!=null){const j=x.point;n.value.x=j.x,n.value.y=j.y,n.value.z=j.z}(x==null?void 0:x.feature)!=null?(r.value=x.feature.name,a.value=x.feature):(r.value=null,a.value=null),(x==null?void 0:x.pickResult)!=null?m.value.highlighter.highlightFromPick(x.pickResult):m.value.highlighter.clear()}function Bt(y){y===o.value?o.value=null:o.value=y}function Vt(y){if(m.value!=null){const M=m.value.picker.getMouseCoordinate(m.value.mainInstance,y);M&&(n.value.x=M.x,n.value.y=M.y,n.value.z=M.z)}}function St(y){if(m.value){if(d.getNavigationMode()==="position-on-map"||I.isUserDrawing()||b.isUserMeasuring())return;const M=m.value.picker.hasFeature(m.value.mainInstance,y);m.value.mainInstance.domElement.style.cursor=M?"pointer":"auto"}}return(y,M)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[g.value?(e.openBlock(),e.createBlock(as,{key:0})):e.createCommentVNode("",!0),e.createVNode(cs,{id:"main-view",onClick:M[0]||(M[0]=x=>he(x)),onMousemove:k,class:"mainview"}),a.value!=null?(e.openBlock(),e.createBlock($i,{key:1,onClose:M[1]||(M[1]=x=>a.value=null),attributes:a.value.attributes,name:a.value.name,parent:a.value.parent,point:a.value.point,class:"component attribute-panel"},null,8,["attributes","name","parent","point"])):e.createCommentVNode("",!0),e.createVNode(ic,{class:"component statusbar",x:n.value.x,y:n.value.y,z:n.value.z},null,8,["x","y","z"]),e.createVNode(pc,{id:"toolbar",active:o.value,class:"component toolbar",onSelected:M[2]||(M[2]=x=>Bt(x))},null,8,["active"]),e.createVNode(As,{class:"component minimap"}),o.value!=null?(e.openBlock(),e.createBlock(Xl,{key:2,class:"component panel",selected:o.value},null,8,["selected"])):e.createCommentVNode("",!0),e.createVNode(Kl,{progress:t.value,class:"loading-indicator"},null,8,["progress"]),e.createVNode(tc,{id:"address-search",class:"search","onUpdate:poi":S}),e.createVNode(hs,{class:"navigation-buttons"}),e.createVNode(fi)],64))}}),mc=u._export_sfc(Ic,[["__scopeId","data-v-f76ce0d4"]]);async function hc(s){let o;if(typeof s.configuration=="string"){console.info(`Loading remote configuration from: ${s.configuration}`);const t=await u.loadRemoteConfiguration(s.configuration);console.info("Remote configuration successfuly loaded."),o=t}else o=s.configuration;return o}async function fc(s){const o=await hc(s);await u.setConfiguration(o),console.info("Configuration loaded."),s.dynamicStyles&&u.setDynamicStyles(s.dynamicStyles),u.Download.setBaseUrl(s.baseUrl);const t=R.createPinia();yt(t).setLoadedModules(s.modules??[]);const i={baseURL:new URL(u.Download.getBaseUrl()),bookmarks:new mo(kt(t)),configuration:o,datasets:new Un,events:G},a=i,r=[];if(s.modules)for(const g of s.modules){const c=Promise.resolve(g.initialize(a));r.push(c),console.info(`Module ${g.name} initialized.`)}await Promise.all(r);const l=e.createApp(mc,{getContext:()=>i});l.use(t),l.mount(s.container)}exports.Fetcher=u.Fetcher;exports.fillObject3DUserData=u.fillObject3DUserData;exports.Bookmark=Z;exports.Projections=Fe;exports.createPieroApp=fc;
9
+ //# sourceMappingURL=index.cjs.js.map