@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
package/LICENSE ADDED
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright 2023-2024 Giro3D contributors.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,134 @@
1
+ <div align="center">
2
+ <a href="https://piero.giro3d.org">
3
+ <img src="https://piero.giro3d.org/piero_logo.svg" height="120" alt="Piero">
4
+ </a>
5
+ </div>
6
+
7
+ <div align="center">
8
+ A versatile web library to visualize 3D geospatial data in the browser.
9
+ </div>
10
+
11
+ <br>
12
+
13
+ <div align="center">
14
+ <a href="https://gitlab.com/giro3d/piero/badges/main/pipeline.svg"><img src="https://gitlab.com/giro3d/piero/badges/main/pipeline.svg" alt="Pipeline status"></a>
15
+ <a href="https://www.npmjs.com/package/@giro3d/piero"><img alt="NPMJS latest package badge" src="https://img.shields.io/npm/v/@giro3d/piero?color=blue"></a>
16
+ <a href="https://matrix.to/#/#giro3d:matrix.org"><img src="https://img.shields.io/matrix/giro3d:matrix.org" alt="Matrix chat"></a>
17
+ </div>
18
+
19
+ ## The Piero library
20
+
21
+ This is the library version of the [Piero web application](https://giro3d.org/piero.html). The library version allows you to customize and use your own modules and plugins.
22
+
23
+ ## Getting started
24
+
25
+ This library is built with Vue.js, but you don't need Vue to use the library (unless you want to write your own components).
26
+
27
+ ```shell
28
+ npm install @giro3d/piero
29
+ ```
30
+
31
+ Then create an `index.html` file
32
+
33
+ ```html
34
+ <!doctype html>
35
+ <html lang="en">
36
+ <head>
37
+ <meta charset="UTF-8" />
38
+ <title>My custom Piero app</title>
39
+ </head>
40
+ <body>
41
+ <div id="app"></div>
42
+ <script type="module" src="./index.ts"></script>
43
+ </body>
44
+ </html>
45
+ ```
46
+
47
+ And an `index.ts` file:
48
+
49
+ ```ts
50
+ // index.ts
51
+ import { createPieroApp } from '@giro3d/piero';
52
+ import '@giro3d/piero/piero.css';
53
+
54
+ import configuration from './config';
55
+
56
+ createPieroApp({
57
+ container: '#app',
58
+ baseUrl: 'http://localhost:8080/',
59
+ configuration,
60
+ });
61
+ ```
62
+
63
+ Note that you have to import the CSS file from Piero.
64
+
65
+ Create the `config.ts` file in the same folder as `index.ts`, and fill it with your configuration (you can use the [sample configuration](https://gitlab.com/giro3d/piero/-/blob/main/config.ts.sample) as a starting point).
66
+
67
+ Bundle your application and run it. For example with Vite:
68
+
69
+ ```shell
70
+ vite --port 8080
71
+ ```
72
+
73
+ Then open your browser at <http://localhost:8080>.
74
+
75
+ This is the minimal configuration to use the Piero library.
76
+
77
+ ### Using a remote configuration
78
+
79
+ Alternatively, you can pass a URL to a remote JSON configuration
80
+
81
+ ```ts
82
+ // index.ts
83
+ import { createPieroApp } from '@giro3d/piero';
84
+ import '@giro3d/piero/piero.css';
85
+
86
+ createPieroApp({
87
+ container: '#app',
88
+ baseUrl: 'http://localhost:8080/',
89
+ configuration: 'https://example.com/config.json',
90
+ });
91
+ ```
92
+
93
+ ### Deploying
94
+
95
+ To deploy your app, update the `baseUrl` to be the URL from which the app is served. For example, if you want your app to be accessible from `https://example.com/piero`, the base URL would be (don't forget the slash):
96
+
97
+ ```ts
98
+ // index.ts
99
+ import { createPieroApp } from '@giro3d/piero';
100
+ import '@giro3d/piero/piero.css';
101
+
102
+ createPieroApp({
103
+ container: '#app',
104
+ baseUrl: 'https://example.com/piero/',
105
+ configuration: 'https://example.com/config.json',
106
+ });
107
+ ```
108
+
109
+ ## Register custom modules
110
+
111
+ You can register your own modules (classes that implement the `Module` interface) at startup:
112
+
113
+ ```ts
114
+ // index.ts
115
+ import { createPieroApp, Module, PieroContext } from '@giro3d/piero';
116
+ import '@giro3d/piero/piero.css';
117
+
118
+ class MyCustomModule implements Module {
119
+ name = 'A custom module';
120
+
121
+ initialize(context: PieroContext) {
122
+ console.log('hello, world!');
123
+ }
124
+ }
125
+
126
+ createPieroApp({
127
+ container: '#app',
128
+ baseUrl: 'https://example.com/piero/',
129
+ configuration: 'https://example.com/config.json',
130
+ modules: [new MyCustomModule()],
131
+ });
132
+ ```
133
+
134
+ Refer to [CONFIGURATION.md](https://gitlab.com/giro3d/piero/-/blob/main/CONFIGURATION.md) for more information.
@@ -0,0 +1,2 @@
1
+ "use strict";var fe=Object.defineProperty;var de=(e,t,n)=>t in e?fe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var f=(e,t,n)=>de(e,typeof t!="symbol"?t+"":t,n);const $=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/geographic/Coordinates.js"),V=require("/builds/giro3d/piero/node_modules/pinia/dist/pinia.mjs"),p=require("/builds/giro3d/piero/node_modules/three"),o=require("/builds/giro3d/piero/node_modules/vue/dist/vue.runtime.esm-bundler.js"),pe=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/Instance.js"),_e=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/utils/Fetcher.js"),ge=require("/builds/giro3d/piero/node_modules/@loaders.gl/core/dist/index.js"),he=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/ColorMap.js"),ve=require("/builds/giro3d/piero/node_modules/@giro3d/giro3d/core/geographic/Extent.js"),q=require("/builds/giro3d/piero/node_modules/chroma-js/index.js");function ye(e){return URL.canParse(e)&&(e.startsWith("http://")||e.startsWith("https://"))}async function me(e,t){return(await j(e,t)).arrayBuffer()}function j(e,t){if(typeof e=="string"){const n=G(e);return _e.fetch(n,t)}return ge.fetchFile(e,t)}async function be(e,t){return await(await j(e,t)).json()}async function Ce(e,t){return(await j(e,t)).text()}function Be(e){let t,n;if(e instanceof Response){const l=new URL(e.url);t=`${l.origin}${l.pathname}`,n=l.search}else if(e instanceof File)t=e.name;else if(e instanceof Blob)t="";else if(typeof e=="string"){const l=G(e),d=new URL(l);t=`${d.origin}${d.pathname}`,n=d.search}else return e;const i=t.split("/"),a=i.pop(),_=i.join("/");return{baseUrl:t,dirname:_,fileext:a==null?void 0:a.split(".").at(-1),filename:a,queryString:n}}async function Se(e){return new Promise((t,n)=>{if(typeof e=="string")return G(e);{const i=new FileReader;i.addEventListener("load",()=>t(i.result),!1),i.addEventListener("error",()=>n(i.error)),i.readAsDataURL(e)}})}const H={checkAbsoluteHost:ye,fetch:j,fetchArrayBuffer:me,fetchJson:be,fetchText:Ce,getContext:Be,toDataURL:Se};let M=null,O={};function C(){if(!M)throw new Error("No configuration loaded");return M}function we(){return O}async function xe(e){return await H.fetchJson(e)}async function ke(e){e.crs_definitions||(console.warn("Configuration is not specifying CRS definitions. You should define the projections you use. See https://gitlab.com/giro3d/piero/-/issues/78 for more information."),e.crs_definitions={"EPSG:2154":"+proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs","EPSG:3857":"+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs","EPSG:3946":"+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs","EPSG:3948":"+proj=lcc +lat_0=48 +lon_0=3 +lat_1=47.25 +lat_2=48.75 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs","EPSG:4171":"+proj=longlat +ellps=GRS80 +no_defs +type=crs","EPSG:4326":"+proj=longlat +datum=WGS84 +no_defs +type=crs","IGNF:WGS84G":'GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]'});for(const[t,n]of Object.entries(e.crs_definitions))try{pe.registerCRS(t,n)}catch(i){throw console.error(`Failed to register CRS "${t}" as "${n}".`),i}return M=e,Promise.resolve()}function Pe(e){O=e}function Ee(e,t){const n=JSON.stringify(e,null,2),i=new Blob([n],{type:"application/json"});T(i,t)}function T(e,t){const n=URL.createObjectURL(e),i=document.createElement("a");i.href=n,i.download=t,i.innerHTML="Click here to download the file",document.body.appendChild(i),i.click(),i.remove(),URL.revokeObjectURL(n)}let N="/";function Re(e="http://localhost:8080/"){const t=N??e;return t.at(-1)==="/"?t:t+"/"}function Ue(e){N=e}const J={downloadAsJson:Ee,downloadBlob:T,getBaseUrl:Re,setBaseUrl:Ue};function De(e){const t=q.scale(e.ramp).mode("lab").colors(256).map(n=>{const i=q(n).gl();return new p.Color().setRGB(i[0],i[1],i[2],"srgb")});return new he({colors:t,...e})}function Le(e){const t=C();return e?new $(e.crs??t.default_crs,e.x,e.y,e.z??0).as(t.default_crs):void 0}function je(e){const t=C();return e?new ve(e.crs??t.default_crs,e).as(t.default_crs):void 0}function G(e){return e.startsWith("http://")||e.startsWith("https://")?e:new URL(e,J.getBaseUrl()).toString()}function Ge(e){var n;return((n=C().enabled_features)==null?void 0:n.includes(e))??!1}function Ie(e,t){const n=e.isEntity3D?e.object3d:e;"dataset"in n.userData||(n.userData.dataset={});for(const[i,a]of Object.entries(t))n.userData.dataset[i]=a}const P=e=>e!=null&&typeof e=="object",$e=e=>P(e)&&"href"in e,Me=e=>P(e)&&e.isColor,Ve=e=>P(e)&&e.isVector3;class Y extends p.EventDispatcher{constructor(n){super();f(this,"config");f(this,"name");f(this,"onObjectPreloaded");f(this,"type");f(this,"uuid");f(this,"_isPreloaded");f(this,"_isPreloading");f(this,"_opacity");f(this,"_parent");f(this,"_visible");this.type=n.type,this.uuid=p.MathUtils.generateUUID(),this.name=n.name,this.onObjectPreloaded=n.onObjectPreloaded,this._parent=null,this._visible=n.visible??!1,this._opacity=n.opacity??1,this._isPreloading=!1,this._isPreloaded=!1,this.config=n}get isPreloaded(){return this._isPreloaded}set isPreloaded(n){this._isPreloaded=n,this.dispatchEvent({type:"isPreloaded"})}get isPreloading(){return this._isPreloading}set isPreloading(n){this._isPreloading=n,this.dispatchEvent({type:"isPreloading"})}get opacity(){return this._opacity}set opacity(n){this._opacity=n,this.dispatchEvent({type:"opacity"})}get parent(){return this._parent}set parent(n){this._parent=n}get visible(){return this._visible}set visible(n){this._visible=n,this.dispatchEvent({type:"visible"})}delete(){this.dispatchEvent({type:"delete"})}get(n){var i;return n in this.config&&this.config[n]!=null?this.config[n]:(i=this.parent)==null?void 0:i.get(n)}}class z extends Y{constructor(n){super(n);f(this,"_children");this._children=Q(n.children,this),this._isPreloaded=!0}get children(){return this._children}set children(n){this._children.forEach(i=>i.parent=null),this._children=n,this._children.forEach(i=>{i.parent=this,i.visible=i.visible||this._visible})}leafs(){return this._children.map(n=>n.leafs()).flat()}traverse(n){var i;n(this),(i=this._children)==null||i.forEach(a=>a.traverse(n))}}f(z,"isGroup",n=>P(n)&&n.type==="group");class K extends Y{constructor(t){super(t)}leafs(){return[this]}traverse(t){t(this)}}function Q(e,t){return e.map(n=>{let i;return n.type==="group"?i=new z(n):i=new K(n),t&&(i.parent=t,i.visible=i.visible||t.visible),i})}const ze=V.defineStore("analysis",()=>{const e=C(),t=o.ref(170),n=o.ref(!1),i=o.ref(e.analysis.cross_section.orientation),a=e.analysis.cross_section.pivot,_=new $(a.crs??e.default_crs,a.x,a.y,0).as(e.default_crs),l=o.ref(_.toVector3()),d=o.ref(!1),{center:v,size:y}=e.analysis.clipping_box,B=new $(v.crs??e.default_crs,v.x,v.y,v.z).as(e.default_crs),g=o.ref(B.toVector3()),h=o.ref(new p.Vector3(y.x,y.y,y.z)),m=o.ref(new p.Box3().setFromCenterAndSize(g.value,h.value)),u=o.ref(!1),b=o.ref(!1),E=o.ref(!1),R=o.ref(!1);function I(r){t.value=r}function s(r){n.value=r}function c(){return n.value}function U(r){d.value=r}function S(){return d.value}function w(r){i.value=r}function x(r){l.value=r}function k(r){u.value=r}function D(){return u.value}function L(){m.value=new p.Box3().setFromCenterAndSize(g.value,h.value)}function te(r){g.value=r,L()}function ne(r){h.value=r,L()}function ie(r){m.value=r.clone();const W=new p.Vector3,A=new p.Vector3;r.getCenter(W),r.getSize(A),g.value=W,h.value=A}function oe(){return m.value}function se(r){E.value=r}function re(){return E.value}function ae(r){b.value=r}function ce(){return b.value}function le(r){R.value=r}function ue(){return R.value}return{clippingBoxCenter:g,clippingBoxSize:h,crossSectionCenter:l,crossSectionOrientation:i,displayClippingBoxHelper:se,enableClippingBox:k,enableCrossSection:U,enableFloodingPlane:s,enableStatistics:le,floodingPlaneHeight:t,getClippingBox:oe,isClippingBoxEnabled:D,isClippingBoxHelperDisplayed:re,isClippingBoxInverted:ce,isCrossSectionEnabled:S,isFloodingPlaneEnabled:c,isStatisticsEnabled:ue,setClippingBox:ie,setClippingBoxCenter:te,setClippingBoxInverted:ae,setClippingBoxSize:ne,setCrossSectionCenter:x,setCrossSectionOrientation:w,setFloodingPlaneHeight:I}}),Fe=V.defineStore("camera",()=>{const e=o.ref(),t=o.ref(new p.Vector3),n=o.ref("orbit"),i=o.ref(!1);function a(){if(e.value===void 0)throw new Error("Cannot get cameraPosition");return e.value}function _(){return t.value}function l(u){e.value=u}function d(u,b){e.value=u,t.value.copy(b)}function v(){return n.value}function y(){return n}function B(u){n.value=u}function g(){return i.value}function h(u){i.value=u}function m(u){}return{getCamera3dPosition:_,getCameraPosition:a,getNavigationMode:v,getNavigationModeRef:y,isUserInteracting:g,lookTopDownAt:m,setCameraPosition:l,setCurrentPosition:d,setIsUserInteracting:h,setNavigationMode:B}});function X(e){const t=o.shallowReactive(e);return t.type==="group"&&(t.children=o.shallowReactive(t.children.map(n=>X(n)))),t}const We=V.defineStore("datasets",()=>{const e=C(),t=o.shallowReactive(Q(e.datasets).map(s=>X(s))),n=o.computed(()=>t.map(s=>s.leafs()).flat()),i=o.computed(()=>n.value.length),a=new Map,_=new Map;function l(){return t}function d(){return n.value}function v(s){const c=o.shallowReactive(s);return t.push(c),c}function y(s,c){a.set(s.uuid,c)}function B(s,c){_.set(s.uuid,c)}function g(s){const c=s.parent!=null?s.parent.children:t;c.splice(c.indexOf(s),1)}function h(s){const c=new p.Box3;return s.traverse(U=>{var D;const S=a.get(U.uuid),w=S==null?void 0:S.getBoundingBox();if(w&&!w.isEmpty()){c.union(w);return}const x=_.get(U.uuid),k=(D=x==null?void 0:x.getExtent())==null?void 0:D.as(e.default_crs);if(k&&k.isValid()){const L=k.toBox3(0,0);c.union(L);return}}),c}function m(s){return a.get(s.uuid)}function u(s){return _.get(s.uuid)}function b(s){}function E(s,c){}function R(s){}function I(s){}return{add:v,attachEntity:y,attachLayer:B,count:i,getBoundingBox:h,getDatasets:d,getEntity:m,getLayer:u,getTree:l,importFromFile:b,remove:g,setVisible:E,toggleGrid:R,toggleMask:I}}),F=(e,t)=>{const n=e.__vccOpts||e;for(const[i,a]of t)n[i]=a;return n},Ae=["title"],qe=["title"],Z=o.defineComponent({__name:"Icon",props:{icon:{},title:{}},setup(e){return(t,n)=>t.icon.startsWith("bi-")?(o.openBlock(),o.createElementBlock("i",{key:0,class:o.normalizeClass(["bi",t.icon]),title:t.title},null,10,Ae)):(o.openBlock(),o.createElementBlock("i",{key:1,class:o.normalizeClass(t.icon),title:t.title},null,10,qe))}}),He=["title"],ee=o.defineComponent({__name:"ButtonWithIcon",props:{icon:{},text:{},title:{}},emits:["click"],setup(e){return(t,n)=>(o.openBlock(),o.createElementBlock("button",{title:t.title,class:"btn",type:"button",onClick:n[0]||(n[0]=i=>t.$emit("click",i))},[t.icon?(o.openBlock(),o.createBlock(Z,{key:0,icon:t.icon},null,8,["icon"])):o.createCommentVNode("",!0),o.createTextVNode(" "+o.toDisplayString(t.text),1)],8,He))}}),Oe={},Te={class:"icons text-nowrap d-flex justify-content-evenly"};function Ne(e,t){return o.openBlock(),o.createElementBlock("div",Te,[o.renderSlot(e.$slots,"default")])}const Je=F(Oe,[["render",Ne]]),Ye=o.defineComponent({__name:"IconListButton",props:{icon:{},title:{}},emits:["click"],setup(e){return(t,n)=>(o.openBlock(),o.createBlock(ee,{title:t.title,icon:t.icon,onClick:n[0]||(n[0]=i=>t.$emit("click",i)),class:"btn-link link-secondary link-opacity-75 link-opacity-100-hover p-0 border-0"},null,8,["title","icon"]))}}),Ke=F(Ye,[["__scopeId","data-v-10315937"]]),Qe=["title","disabled"],Xe=o.defineComponent({__name:"ListLabelButton",props:{disabled:{type:Boolean},text:{},title:{}},emits:["click"],setup(e){return(t,n)=>(o.openBlock(),o.createElementBlock("button",{class:o.normalizeClass(["btn btn-link d-inline-block flex-fill text-start text-nowrap text-truncate overflow-hidden px-1 py-0 link-underline link-underline-opacity-0 link-underline-opacity-75-hover",t.$attrs.class]),title:t.title??t.text,disabled:!!t.disabled,type:"button",onClick:n[0]||(n[0]=i=>t.$emit("click",i))},o.toDisplayString(t.text),11,Qe))}});function Ze(e,t){const n=o.ref(e[t]);return o.watch(()=>e[t],i=>{n.value=i}),n}exports.Datagroup=z;exports.Dataset=K;exports.Download=J;exports.Fetcher=H;exports.IconList=Je;exports.IconListButton=Ke;exports._export_sfc=F;exports._sfc_main=ee;exports._sfc_main$1=Z;exports._sfc_main$2=Xe;exports.fillObject3DUserData=Ie;exports.getColorMap=De;exports.getConfig=C;exports.getCoordinates=Le;exports.getDynamicStyles=we;exports.getExtent=je;exports.getPublicFolderUrl=G;exports.hasExperimentalFeature=Ge;exports.isColor=Me;exports.isLink=$e;exports.isObject=P;exports.isVector3=Ve;exports.loadRemoteConfiguration=xe;exports.refAndWatch=Ze;exports.setConfiguration=ke;exports.setDynamicStyles=Pe;exports.useAnalysisStore=ze;exports.useCameraStore=Fe;exports.useDatasetStore=We;
2
+ //# sourceMappingURL=Components.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Components.cjs.js","sources":["../src/utils/Fetcher.ts","../src/config-loader.ts","../src/utils/Download.ts","../src/utils/Configuration.ts","../src/loaders/userData.ts","../src/utils/Types.ts","../src/types/Dataset.ts","../src/stores/analysis.ts","../src/stores/camera.ts","../src/stores/datasets.ts","../src/components/atoms/Icon.vue","../src/components/atoms/ButtonWithIcon.vue","../src/components/atoms/IconList.vue","../src/components/atoms/IconListButton.vue","../src/components/atoms/ListLabelButton.vue","../src/utils/Components.ts"],"sourcesContent":["import Fetcher from '@giro3d/giro3d/utils/Fetcher';\nimport { fetchFile } from '@loaders.gl/core';\n\nimport { getPublicFolderUrl } from './Configuration';\n\n/**\n * Checks a host is parsable and starts with `http(s)://`.\n * This is useful when passing hosts to Giro3D's HttpConfiguration.\n *\n * @param host - Host (e.g. https://example.com/foobar)\n * @returns true if valid\n */\nfunction checkAbsoluteHost(host: string): boolean {\n return URL.canParse(host) && (host.startsWith('http://') || host.startsWith('https://'));\n}\n/**\n * Fetches a url, Blob-like object and returns an ArrayBuffer object\n * @param url - URL or Blob-like object\n * @param fetchOptions - fetch options\n * @returns ArrayBuffer\n */\nasync function fetchArrayBuffer(url: UrlOrData, fetchOptions?: RequestInit): Promise<ArrayBuffer> {\n const f = await fetchInternal(url, fetchOptions);\n return f.arrayBuffer();\n}\n\n/**\n * Fetcher that is able to fetch a URL (if string) or make a Response from a File-object.\n *\n * This redefines loaders.gl's fetch function to use Giro3D's fetcher.\n *\n * @param urlOrData - URL to fetch or Blob\n * @param fetchOptions - fetch options\n * @returns The response object\n */\nfunction fetchInternal(urlOrData: UrlOrData, fetchOptions?: RequestInit): Promise<Response> {\n if (typeof urlOrData === 'string') {\n const url = getPublicFolderUrl(urlOrData);\n return Fetcher.fetch(url, fetchOptions);\n }\n\n return fetchFile(urlOrData, fetchOptions);\n}\n\n/**\n * Fetches a url or Blob-like object and returns the content as a JSON object\n * @param params - URL or Blob-like object\n * @param fetchOptions - fetch options\n * @returns Content as JSON object\n * @typeParam T - Type of the JSON object returned\n */\nasync function fetchJson<T extends object = object>(\n url: UrlOrData,\n fetchOptions?: RequestInit,\n): Promise<T> {\n const f = await fetchInternal(url, fetchOptions);\n const json: T = await f.json();\n return json;\n}\n\n/**\n * Fetches a url or Blob-like object and returns the content as a string\n * @param url - URL or Blob-like object\n * @param fetchOptions - fetch options\n * @returns Content as string\n */\nasync function fetchText(url: UrlOrData, fetchOptions?: RequestInit): Promise<string> {\n const f = await fetchInternal(url, fetchOptions);\n return f.text();\n}\n\n/**\n * Gets the context from a url, Response or Blob-like object\n * @param urlOrFetchedData - URL, Response or Blob-like object\n * @returns Fetch context\n */\nfunction getContext(urlOrFetchedData: UrlOrFetchedData): FetchContext {\n let baseUrl: string;\n let queryString: string | undefined;\n\n if (urlOrFetchedData instanceof Response) {\n const url = new URL(urlOrFetchedData.url);\n baseUrl = `${url.origin}${url.pathname}`;\n queryString = url.search;\n } else if (urlOrFetchedData instanceof File) {\n baseUrl = urlOrFetchedData.name;\n } else if (urlOrFetchedData instanceof Blob) {\n baseUrl = '';\n } else if (typeof urlOrFetchedData === 'string') {\n const absoluteUrl = getPublicFolderUrl(urlOrFetchedData);\n const url = new URL(absoluteUrl);\n baseUrl = `${url.origin}${url.pathname}`;\n queryString = url.search;\n } else {\n // Exhaustiveness checking\n const _exhaustiveCheck: never = urlOrFetchedData;\n return _exhaustiveCheck;\n }\n\n const parts = baseUrl.split('/');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const filename = parts.pop()!;\n const dirname = parts.join('/');\n\n return {\n baseUrl,\n dirname,\n fileext: filename?.split('.').at(-1),\n filename,\n queryString,\n };\n}\n\nasync function toDataURL(url: UrlOrData): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof url === 'string') {\n return getPublicFolderUrl(url);\n } else {\n const reader = new FileReader();\n reader.addEventListener('load', () => resolve(reader.result as string), false);\n reader.addEventListener('error', () => reject(reader.error as DOMException));\n reader.readAsDataURL(url);\n }\n });\n}\n\n/**\n * Info on a file.\n * Inspired by loaders.gl LoaderContext\n */\nexport interface FetchContext {\n /** Full URL of the resource (without query string) */\n baseUrl: string;\n /** Directory name (`baseUrl` up to the filename) */\n dirname: string;\n /** File extension */\n fileext?: string;\n /** Filename */\n filename: string;\n /** Query string (beginning with the leading `?` character) */\n queryString?: string;\n}\n\n/** URL to load or Blob (drag-and-drop) */\nexport type UrlOrData = Blob | string;\n\n/** URL to load, or Response (already loaded), or Blob (drag-and-drop) */\nexport type UrlOrFetchedData = Blob | Response | string;\n\nexport default {\n checkAbsoluteHost,\n fetch: fetchInternal,\n fetchArrayBuffer,\n fetchJson,\n fetchText,\n getContext,\n toDataURL,\n};\n","import Instance from '@giro3d/giro3d/core/Instance';\n\nimport type { Configuration } from '@/types/Configuration';\n\nimport type { DynamicStyleCollection } from './types/VectorStyle';\n\nimport Fetcher from './utils/Fetcher';\n\nlet currentConfiguration: Readonly<Configuration> | null = null;\nlet dynamicStyles: DynamicStyleCollection = {};\n\nexport function getConfig(): Readonly<Configuration> {\n if (!currentConfiguration) {\n throw new Error('No configuration loaded');\n }\n return currentConfiguration;\n}\n\nexport function getDynamicStyles(): DynamicStyleCollection {\n return dynamicStyles;\n}\n\nexport async function loadRemoteConfiguration(url: string): Promise<Configuration> {\n return await Fetcher.fetchJson<Configuration>(url);\n}\n\nexport async function setConfiguration(newConfiguration: Configuration): Promise<void> {\n if (!newConfiguration.crs_definitions) {\n console.warn(\n 'Configuration is not specifying CRS definitions. You should define the projections you use. See https://gitlab.com/giro3d/piero/-/issues/78 for more information.',\n );\n\n newConfiguration.crs_definitions = {\n 'EPSG:2154':\n '+proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs',\n 'EPSG:3857':\n '+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs',\n 'EPSG:3946':\n '+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs',\n 'EPSG:3948':\n '+proj=lcc +lat_0=48 +lon_0=3 +lat_1=47.25 +lat_2=48.75 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs',\n 'EPSG:4171': '+proj=longlat +ellps=GRS80 +no_defs +type=crs',\n 'EPSG:4326': '+proj=longlat +datum=WGS84 +no_defs +type=crs',\n 'IGNF:WGS84G':\n 'GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]',\n };\n }\n\n for (const [name, definition] of Object.entries(newConfiguration.crs_definitions)) {\n try {\n Instance.registerCRS(name, definition);\n } catch (error: unknown) {\n console.error(`Failed to register CRS \"${name}\" as \"${definition}\".`);\n throw error;\n }\n }\n\n currentConfiguration = newConfiguration;\n // Reserve promise usage for future\n return Promise.resolve();\n}\n\nexport function setDynamicStyles(styles: DynamicStyleCollection): void {\n dynamicStyles = styles;\n}\n","function downloadAsJson(object: object, filename: string): void {\n const text = JSON.stringify(object, null, 2);\n const blob = new Blob([text], { type: 'application/json' });\n downloadBlob(blob, filename);\n}\n\nfunction downloadBlob(object: Blob | MediaSource, filename: string): void {\n const blobUrl = URL.createObjectURL(object);\n const link = document.createElement('a');\n link.href = blobUrl;\n link.download = filename;\n link.innerHTML = 'Click here to download the file';\n document.body.appendChild(link);\n link.click();\n link.remove();\n URL.revokeObjectURL(blobUrl);\n}\n\nlet baseUrl = import.meta.env.PROD ? import.meta.env.BASE_URL : undefined;\n\nfunction getBaseUrl(fallback: string = 'http://localhost:8080/'): string {\n const url = baseUrl ?? fallback;\n return url.at(-1) === '/' ? url : url + '/';\n}\n\nfunction setBaseUrl(url: string): void {\n baseUrl = url;\n}\n\nexport default { downloadAsJson, downloadBlob, getBaseUrl, setBaseUrl };\n","import ColorMap from '@giro3d/giro3d/core/ColorMap';\nimport Coordinates from '@giro3d/giro3d/core/geographic/Coordinates';\nimport Extent from '@giro3d/giro3d/core/geographic/Extent';\nimport chroma from 'chroma-js';\nimport { Color } from 'three';\n\nimport type { ColorMapConfig } from '@/types/configuration/color';\nimport type { ExperimentalFeatures } from '@/types/configuration/features';\nimport type { GeoExtent, GeoVec3 } from '@/types/configuration/geographic';\n\nimport { getConfig } from '@/config-loader';\n\nimport Download from './Download';\n\nexport function getColorMap(config: ColorMapConfig): ColorMap {\n const colors = chroma\n .scale(config.ramp)\n .mode('lab')\n .colors(256)\n .map(c => {\n const rgb = chroma(c).gl();\n return new Color().setRGB(rgb[0], rgb[1], rgb[2], 'srgb');\n });\n return new ColorMap({ colors, ...config });\n}\n\nexport function getCoordinates(): undefined;\nexport function getCoordinates(geovec3: GeoVec3): Coordinates;\nexport function getCoordinates(geovec3?: GeoVec3): Coordinates | undefined;\nexport function getCoordinates(geovec3?: GeoVec3): Coordinates | undefined {\n const config = getConfig();\n return geovec3\n ? new Coordinates(\n geovec3.crs ?? config.default_crs,\n geovec3.x,\n geovec3.y,\n geovec3.z ?? 0,\n ).as(config.default_crs)\n : undefined;\n}\n\nexport function getExtent(): undefined;\nexport function getExtent(extent: GeoExtent): Extent;\nexport function getExtent(extent?: GeoExtent): Extent | undefined;\nexport function getExtent(extent?: GeoExtent): Extent | undefined {\n const config = getConfig();\n return extent\n ? new Extent(extent.crs ?? config.default_crs, extent).as(config.default_crs)\n : undefined;\n}\nexport function getPublicFolderUrl(url: string): string {\n if (url.startsWith('http://') || url.startsWith('https://')) {\n // url is absolute\n return url;\n }\n\n return new URL(url, Download.getBaseUrl()).toString();\n}\nexport function hasExperimentalFeature(feature: ExperimentalFeatures): boolean {\n const config = getConfig();\n return config.enabled_features?.includes(feature) ?? false;\n}\n","import type Entity3D from '@giro3d/giro3d/entities/Entity3D';\n\nimport { type Object3D } from 'three';\n\n/** User data to be set on the loaded entities */\nexport interface UserData {\n /** File that the entity was loaded from */\n filename?: string | null;\n}\n\nexport function fillObject3DUserData(root: Entity3D | Object3D, userData: UserData): void {\n const obj3d = (root as Entity3D).isEntity3D ? (root as Entity3D).object3d : root;\n if (!('dataset' in obj3d.userData)) {\n obj3d.userData.dataset = {};\n }\n\n for (const [key, value] of Object.entries(userData)) {\n obj3d.userData.dataset[key] = value;\n }\n}\n","import { type Color, type Vector3 } from 'three';\n\ntype Link = {\n href: string;\n title: string;\n type?: string;\n};\n\nexport const isObject = (obj: unknown): obj is object => obj != null && typeof obj === 'object';\n\nexport const isLink = (obj: unknown): obj is Link => isObject(obj) && 'href' in obj;\nexport const isColor = (obj: unknown): obj is Color => isObject(obj) && (obj as Color).isColor;\nexport const isVector3 = (obj: unknown): obj is Vector3 =>\n isObject(obj) && (obj as Vector3).isVector3;\n","import type ColorLayer from '@giro3d/giro3d/core/layer/ColorLayer';\nimport type ElevationLayer from '@giro3d/giro3d/core/layer/ElevationLayer';\nimport type MaskLayer from '@giro3d/giro3d/core/layer/MaskLayer';\n\nimport { EventDispatcher, MathUtils } from 'three';\n\nimport { isObject } from '@/utils/Types';\n\nimport type {\n DatagroupConfig,\n DatasetConfig,\n DatasetOrGroupConfig,\n DatasetType,\n} from './configuration/datasets';\nimport type { DatasetCascadingConfig, OnObjectPreloaded } from './configuration/datasets/core';\n\nexport type DatasetEventMap = {\n delete: {\n /** empty */\n };\n isPreloaded: {\n /** empty */\n };\n isPreloading: {\n /** empty */\n };\n opacity: {\n /** empty */\n };\n visible: {\n /** empty */\n };\n};\nexport type DatasetGroupEventMap = DatasetEventMap & {\n /** empty */\n};\n\nexport type DatasetLayer = ColorLayer | ElevationLayer | MaskLayer;\n\n/** Dataset or group item */\nexport type DatasetOrGroup = Datagroup | Dataset;\n\nexport type DatasetOrGroupType = 'group' | DatasetType;\n\nexport abstract class DatasetBase<\n TConfig extends DatasetOrGroupConfig,\n TEventMap extends DatasetEventMap = DatasetEventMap,\n> extends EventDispatcher<DatasetEventMap & TEventMap> {\n public readonly config: TConfig;\n public readonly name: string;\n public readonly onObjectPreloaded?: OnObjectPreloaded;\n public readonly type: TConfig['type'];\n\n public readonly uuid: string;\n public get isPreloaded(): boolean {\n return this._isPreloaded;\n }\n public set isPreloaded(v: boolean) {\n this._isPreloaded = v;\n this.dispatchEvent({ type: 'isPreloaded' });\n }\n public get isPreloading(): boolean {\n return this._isPreloading;\n }\n public set isPreloading(v: boolean) {\n this._isPreloading = v;\n this.dispatchEvent({ type: 'isPreloading' });\n }\n\n public get opacity(): number {\n return this._opacity;\n }\n\n public set opacity(v: number) {\n this._opacity = v;\n this.dispatchEvent({ type: 'opacity' });\n }\n\n public get parent(): Datagroup | null {\n return this._parent;\n }\n public set parent(v: Datagroup | null) {\n this._parent = v;\n }\n\n public get visible(): boolean {\n return this._visible;\n }\n public set visible(v: boolean) {\n this._visible = v;\n this.dispatchEvent({ type: 'visible' });\n }\n protected _isPreloaded: boolean;\n protected _isPreloading: boolean;\n\n protected _opacity: number;\n protected _parent: Datagroup | null;\n\n protected _visible: boolean;\n public constructor(config: TConfig) {\n super();\n this.type = config.type;\n this.uuid = MathUtils.generateUUID();\n this.name = config.name;\n this.onObjectPreloaded = config.onObjectPreloaded;\n this._parent = null;\n this._visible = config.visible ?? false;\n this._opacity = config.opacity ?? 1;\n this._isPreloading = false;\n this._isPreloaded = false;\n\n this.config = config;\n }\n\n public delete(): void {\n this.dispatchEvent({ type: 'delete' });\n }\n\n /**\n * Gets the value of a property from this object or its ancestors.\n * @param propertyName - Name of the property\n * @returns Value\n */\n public get<K extends keyof DatasetCascadingConfig>(\n propertyName: K,\n ): DatasetCascadingConfig[K] | undefined {\n if (\n propertyName in this.config &&\n (this.config as DatasetCascadingConfig)[propertyName] != null\n ) {\n return (this.config as DatasetCascadingConfig)[propertyName];\n }\n\n return this.parent?.get(propertyName);\n }\n /** Gets the leafs Dataset from this object */\n public abstract leafs(): Dataset[];\n\n /**\n * Executes the callback on this object and all descendants.\n * @param callback - Callback to execute\n */\n public abstract traverse(callback: (dataset: DatasetOrGroup) => void): void;\n}\n\n/** Datagroup item */\nexport class Datagroup extends DatasetBase<DatagroupConfig, DatasetGroupEventMap> {\n public get children(): DatasetOrGroup[] {\n return this._children;\n }\n\n public set children(items: DatasetOrGroup[]) {\n this._children.forEach(c => (c.parent = null));\n this._children = items;\n this._children.forEach(c => {\n c.parent = this;\n c.visible = c.visible || this._visible;\n });\n }\n\n protected _children: DatasetOrGroup[];\n public constructor(conf: DatagroupConfig) {\n super(conf);\n this._children = parseDatasetConfig(conf.children, this);\n this._isPreloaded = true;\n }\n\n public static isGroup = (obj: unknown): obj is Datagroup =>\n isObject(obj) && (obj as Datagroup).type === 'group';\n public leafs(): Dataset[] {\n return this._children.map(c => c.leafs()).flat();\n }\n public traverse(callback: (dataset: DatasetOrGroup) => void): void {\n callback(this);\n this._children?.forEach(c => c.traverse(callback));\n }\n}\n\n/** Dataset item */\nexport class Dataset extends DatasetBase<DatasetConfig, DatasetEventMap> {\n public constructor(conf: DatasetConfig) {\n super(conf);\n }\n\n public leafs(): Dataset[] {\n return [this];\n }\n\n public traverse(callback: (dataset: DatasetOrGroup) => void): void {\n callback(this);\n }\n}\n\n/**\n * Creates a hierarchy of DatasetOrGroup from an array of configuration.\n * @param datasets - Datasets\n * @param parent - Parent datagroup, if any\n * @returns Hierarchy of DatasetOrGroup\n */\nexport function parseDatasetConfig(\n datasets: DatasetOrGroupConfig[],\n parent?: Datagroup,\n): DatasetOrGroup[] {\n return datasets.map(childconf => {\n let child: DatasetOrGroup;\n if (childconf.type === 'group') {\n child = new Datagroup(childconf);\n } else {\n child = new Dataset(childconf);\n }\n if (parent) {\n child.parent = parent;\n child.visible = child.visible || parent.visible;\n }\n return child;\n });\n}\n","import Coordinates from '@giro3d/giro3d/core/geographic/Coordinates';\nimport { defineStore } from 'pinia';\nimport { Box3, Vector3 } from 'three';\nimport { ref } from 'vue';\n\nimport { getConfig } from '@/config-loader';\n\nexport const useAnalysisStore = defineStore('analysis', () => {\n const config = getConfig();\n const floodingPlaneHeight = ref(170);\n const _enableFloodingPlane = ref(false);\n\n const crossSectionOrientation = ref(config.analysis.cross_section.orientation);\n const crossSectionPivot = config.analysis.cross_section.pivot;\n const pivotLocal = new Coordinates(\n crossSectionPivot.crs ?? config.default_crs,\n crossSectionPivot.x,\n crossSectionPivot.y,\n 0,\n ).as(config.default_crs);\n const crossSectionCenter = ref(pivotLocal.toVector3());\n const _enableCrossSection = ref(false);\n\n const { center: clippingPlanesCenter, size } = config.analysis.clipping_box;\n const centerLocal = new Coordinates(\n clippingPlanesCenter.crs ?? config.default_crs,\n clippingPlanesCenter.x,\n clippingPlanesCenter.y,\n clippingPlanesCenter.z,\n ).as(config.default_crs);\n const clippingBoxCenter = ref(centerLocal.toVector3());\n const clippingBoxSize = ref(new Vector3(size.x, size.y, size.z));\n const clippingBox = ref(\n new Box3().setFromCenterAndSize(clippingBoxCenter.value, clippingBoxSize.value),\n );\n const _enableClippingBox = ref(false);\n const _invertClippingBox = ref(false);\n const _displayClippingBoxHelper = ref(false);\n\n const _enableStatistics = ref(false);\n\n function setFloodingPlaneHeight(height: number): void {\n floodingPlaneHeight.value = height;\n }\n\n function enableFloodingPlane(enable: boolean): void {\n _enableFloodingPlane.value = enable;\n }\n\n function isFloodingPlaneEnabled(): boolean {\n return _enableFloodingPlane.value;\n }\n\n function enableCrossSection(enable: boolean): void {\n _enableCrossSection.value = enable;\n }\n\n function isCrossSectionEnabled(): boolean {\n return _enableCrossSection.value;\n }\n\n function setCrossSectionOrientation(orientation: number): void {\n crossSectionOrientation.value = orientation;\n }\n\n function setCrossSectionCenter(center: Vector3): void {\n crossSectionCenter.value = center;\n }\n\n function enableClippingBox(enable: boolean): void {\n _enableClippingBox.value = enable;\n }\n\n function isClippingBoxEnabled(): boolean {\n return _enableClippingBox.value;\n }\n\n function _recomputeClippingBox(): void {\n clippingBox.value = new Box3().setFromCenterAndSize(\n clippingBoxCenter.value,\n clippingBoxSize.value,\n );\n }\n\n function setClippingBoxCenter(center: Vector3): void {\n clippingBoxCenter.value = center;\n _recomputeClippingBox();\n }\n\n function setClippingBoxSize(size: Vector3): void {\n clippingBoxSize.value = size;\n _recomputeClippingBox();\n }\n\n function setClippingBox(box: Box3): void {\n clippingBox.value = box.clone();\n const center = new Vector3();\n const size = new Vector3();\n box.getCenter(center);\n box.getSize(size);\n clippingBoxCenter.value = center;\n clippingBoxSize.value = size;\n }\n\n function getClippingBox(): Box3 {\n return clippingBox.value;\n }\n\n function displayClippingBoxHelper(display: boolean): void {\n _displayClippingBoxHelper.value = display;\n }\n\n function isClippingBoxHelperDisplayed(): boolean {\n return _displayClippingBoxHelper.value;\n }\n\n function setClippingBoxInverted(inverted: boolean): void {\n _invertClippingBox.value = inverted;\n }\n\n function isClippingBoxInverted(): boolean {\n return _invertClippingBox.value;\n }\n\n function enableStatistics(enable: boolean): void {\n _enableStatistics.value = enable;\n }\n\n function isStatisticsEnabled(): boolean {\n return _enableStatistics.value;\n }\n\n return {\n clippingBoxCenter,\n clippingBoxSize,\n crossSectionCenter,\n crossSectionOrientation,\n\n displayClippingBoxHelper,\n enableClippingBox,\n enableCrossSection,\n enableFloodingPlane,\n enableStatistics,\n floodingPlaneHeight,\n\n getClippingBox,\n isClippingBoxEnabled,\n isClippingBoxHelperDisplayed,\n isClippingBoxInverted,\n isCrossSectionEnabled,\n isFloodingPlaneEnabled,\n isStatisticsEnabled,\n setClippingBox,\n setClippingBoxCenter,\n setClippingBoxInverted,\n setClippingBoxSize,\n setCrossSectionCenter,\n\n setCrossSectionOrientation,\n setFloodingPlaneHeight,\n };\n});\n","import type Entity3D from '@giro3d/giro3d/entities/Entity3D';\nimport type { Box3, Object3D } from 'three';\nimport type { Ref } from 'vue';\n\nimport { defineStore } from 'pinia';\nimport { Vector3 } from 'three';\nimport { ref } from 'vue';\n\nimport type CameraPosition from '@/types/CameraPosition';\nimport type NavigationMode from '@/types/NavigationMode';\n\nexport const useCameraStore = defineStore('camera', () => {\n const cameraPosition = ref<CameraPosition>();\n // Giro3D camera3D.position is *not always* the same as orbitControls.getPosition()\n const camera3dPosition = ref<Vector3>(new Vector3());\n const navigationMode = ref<NavigationMode>('orbit');\n const _isUserInteracting = ref<boolean>(false);\n\n /** Gets the current camera position and parameters */\n function getCameraPosition(): CameraPosition {\n if (cameraPosition.value === undefined) {\n throw new Error('Cannot get cameraPosition');\n }\n return cameraPosition.value;\n }\n\n /** Gets the \"real\" camera position */\n function getCamera3dPosition(): Vector3 {\n return camera3dPosition.value;\n }\n\n /** Sets the camera position (e.g. from bookmark) */\n function setCameraPosition(pos: CameraPosition): void {\n cameraPosition.value = pos;\n }\n\n /** Sets the camera position internally (after being updated) */\n function setCurrentPosition(pos: CameraPosition, position3d: Vector3): void {\n cameraPosition.value = pos;\n camera3dPosition.value.copy(position3d);\n }\n\n /** Gets the navigation mode */\n function getNavigationMode(): NavigationMode {\n return navigationMode.value;\n }\n\n function getNavigationModeRef(): Ref<NavigationMode> {\n return navigationMode;\n }\n\n /** Updates the navigation mode */\n function setNavigationMode(mode: NavigationMode): void {\n navigationMode.value = mode;\n }\n\n /** Gets wether the user is interacting with the controls or not */\n function isUserInteracting(): boolean {\n return _isUserInteracting.value;\n }\n\n /** Sets whether the user is interacting */\n function setIsUserInteracting(value: boolean): void {\n _isUserInteracting.value = value;\n }\n\n /** Moves the camera to look to an object from top-down with a smooth transition */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function lookTopDownAt(obj: Box3 | Entity3D | Object3D): void {\n // Nothing to do, rely on action listeners.\n }\n\n return {\n getCamera3dPosition,\n getCameraPosition,\n getNavigationMode,\n getNavigationModeRef,\n isUserInteracting,\n lookTopDownAt,\n setCameraPosition,\n setCurrentPosition,\n setIsUserInteracting,\n setNavigationMode,\n };\n});\n","import type Entity3D from '@giro3d/giro3d/entities/Entity3D';\n\nimport { defineStore } from 'pinia';\nimport { Box3 } from 'three';\nimport { computed, shallowReactive } from 'vue';\n\nimport { getConfig } from '@/config-loader';\nimport {\n type Dataset,\n type DatasetLayer,\n type DatasetOrGroup,\n parseDatasetConfig,\n} from '@/types/Dataset';\n\nfunction buildDatasets(root: DatasetOrGroup): DatasetOrGroup {\n // We have multiple levels or shallowReactive-ness because we want to react to:\n // 1. Changes in the root properties (visible, isPreloading, etc.)\n const ds = shallowReactive(root);\n if (ds.type === 'group') {\n // 2. To the list of children (in case we add/delete datasets)\n // 3. To the children themselves (see 1.)\n ds.children = shallowReactive(ds.children.map(c => buildDatasets(c)));\n }\n return ds;\n}\n\nexport const useDatasetStore = defineStore('datasets', () => {\n const config = getConfig();\n const datasets = shallowReactive(\n parseDatasetConfig(config.datasets).map(ds => buildDatasets(ds)),\n );\n const leafs = computed(() => datasets.map(c => c.leafs()).flat());\n const count = computed(() => leafs.value.length);\n\n const entities: Map<string, Entity3D> = new Map();\n const layers: Map<string, DatasetLayer> = new Map();\n\n /** Get hierarchy of datasets & groups */\n function getTree(): DatasetOrGroup[] {\n return datasets;\n }\n\n /** Get leaf datasets */\n function getDatasets(): Dataset[] {\n return leafs.value;\n }\n\n /** Adds a dataset at the end of the tree */\n function add(ds: DatasetOrGroup): DatasetOrGroup {\n const dataset = shallowReactive(ds);\n datasets.push(dataset);\n return dataset;\n }\n\n /** Binds an entity to a dataset */\n function attachEntity(ds: DatasetOrGroup, entity: Entity3D): void {\n entities.set(ds.uuid, entity);\n }\n\n /** Binds a layer to a dataset */\n function attachLayer(ds: DatasetOrGroup, layer: DatasetLayer): void {\n layers.set(ds.uuid, layer);\n }\n\n /** Removes a dataset from the hierarchy */\n function remove(ds: DatasetOrGroup): void {\n const list = ds.parent != null ? ds.parent.children : datasets;\n list.splice(list.indexOf(ds), 1);\n }\n\n /**\n * Gets the bounding box of a dataset or group.\n *\n * For a group, the bounding box is the union of its *loaded* datasets.\n *\n * @returns Bounding box - can be empty\n */\n function getBoundingBox(dataset: DatasetOrGroup): Box3 {\n const box = new Box3();\n dataset.traverse(ds => {\n const entity = entities.get(ds.uuid);\n const localBox = entity?.getBoundingBox();\n if (localBox && !localBox.isEmpty()) {\n box.union(localBox);\n return;\n }\n\n const layer = layers.get(ds.uuid);\n const layerExtent = layer?.getExtent()?.as(config.default_crs);\n if (layerExtent && layerExtent.isValid()) {\n const localBox = layerExtent.toBox3(0, 0);\n box.union(localBox);\n return;\n }\n });\n return box;\n }\n\n /** Gets the entity attached to a dataset (if bound) */\n function getEntity(ds: DatasetOrGroup): Entity3D | undefined {\n return entities.get(ds.uuid);\n }\n\n /** Gets the layer attached to a dataset (if bound) */\n function getLayer(ds: DatasetOrGroup): DatasetLayer | undefined {\n return layers.get(ds.uuid);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function importFromFile(file: File | string): void {\n // Nothing to do, rely on action listeners.\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function setVisible(ds: DatasetOrGroup, newVisibility: boolean): void {\n // Nothing to do, rely on action listeners.\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function toggleGrid(ds: DatasetOrGroup): void {\n // Nothing to do, rely on action listeners.\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function toggleMask(ds: DatasetOrGroup): void {\n // Nothing to do, rely on action listeners.\n }\n\n return {\n add,\n attachEntity,\n attachLayer,\n count,\n getBoundingBox,\n getDatasets,\n getEntity,\n getLayer,\n getTree,\n importFromFile,\n remove,\n setVisible,\n toggleGrid,\n toggleMask,\n };\n});\n","<script setup lang=\"ts\">\n defineProps<{\n icon: string;\n title?: string;\n }>();\n</script>\n<template>\n <i v-if=\"icon.startsWith('bi-')\" class=\"bi\" :class=\"icon\" :title=\"title\" />\n <i v-else :class=\"icon\" :title=\"title\" />\n</template>\n","<script setup lang=\"ts\">\n import Icon from './Icon.vue';\n\n defineProps<{\n icon?: string;\n text?: string;\n title: string;\n }>();\n\n defineEmits(['click']);\n</script>\n\n<template>\n <button :title=\"title\" class=\"btn\" type=\"button\" @click=\"$emit('click', $event)\">\n <Icon v-if=\"icon\" :icon=\"icon\" />\n {{ text }}\n </button>\n</template>\n","<template>\n <div class=\"icons text-nowrap d-flex justify-content-evenly\">\n <slot></slot>\n </div>\n</template>\n","<script setup lang=\"ts\">\n import ButtonWithIcon from './ButtonWithIcon.vue';\n\n defineProps<{\n icon: string;\n title: string;\n }>();\n\n defineEmits(['click']);\n</script>\n\n<template>\n <ButtonWithIcon\n :title=\"title\"\n :icon=\"icon\"\n @click=\"$emit('click', $event)\"\n class=\"btn-link link-secondary link-opacity-75 link-opacity-100-hover p-0 border-0\"\n />\n</template>\n\n<style scoped>\n .btn-link {\n width: 1.2rem;\n height: 1.2rem;\n }\n</style>\n","<script setup lang=\"ts\">\n defineProps<{\n disabled?: boolean;\n text: string;\n title?: string;\n }>();\n defineEmits(['click']);\n</script>\n\n<template>\n <button\n class=\"btn btn-link d-inline-block flex-fill text-start text-nowrap text-truncate overflow-hidden px-1 py-0 link-underline link-underline-opacity-0 link-underline-opacity-75-hover\"\n :class=\"$attrs.class\"\n :title=\"title ?? text\"\n :disabled=\"!!disabled\"\n type=\"button\"\n @click=\"$emit('click', $event)\"\n >\n {{ text }}\n </button>\n</template>\n","import type { Ref } from 'vue';\n\nimport { ref, watch } from 'vue';\n\n/**\n * Stores reference and watches for changes on a property of an object\n * @param object - Object\n * @param propName - Property name\n * @returns Watched reference to the property\n */\nexport function refAndWatch<T, K extends keyof T>(object: T, propName: K): Ref<T[K]> {\n const p = ref(object[propName]) as Ref<T[K]>;\n watch(\n () => object[propName],\n newValue => {\n p.value = newValue;\n },\n );\n return p;\n}\n"],"names":["checkAbsoluteHost","host","fetchArrayBuffer","url","fetchOptions","fetchInternal","urlOrData","getPublicFolderUrl","Fetcher","fetchFile","fetchJson","fetchText","getContext","urlOrFetchedData","baseUrl","queryString","absoluteUrl","parts","filename","dirname","toDataURL","resolve","reject","reader","currentConfiguration","dynamicStyles","getConfig","getDynamicStyles","loadRemoteConfiguration","setConfiguration","newConfiguration","name","definition","Instance","error","setDynamicStyles","styles","downloadAsJson","object","text","blob","downloadBlob","blobUrl","link","getBaseUrl","fallback","setBaseUrl","Download","getColorMap","config","colors","chroma","c","rgb","Color","ColorMap","getCoordinates","geovec3","Coordinates","getExtent","extent","Extent","hasExperimentalFeature","feature","_a","fillObject3DUserData","root","userData","obj3d","key","value","isObject","obj","isLink","isColor","isVector3","DatasetBase","EventDispatcher","__publicField","MathUtils","v","propertyName","Datagroup","conf","parseDatasetConfig","items","callback","Dataset","datasets","parent","childconf","child","useAnalysisStore","defineStore","floodingPlaneHeight","ref","_enableFloodingPlane","crossSectionOrientation","crossSectionPivot","pivotLocal","crossSectionCenter","_enableCrossSection","clippingPlanesCenter","size","centerLocal","clippingBoxCenter","clippingBoxSize","Vector3","clippingBox","Box3","_enableClippingBox","_invertClippingBox","_displayClippingBoxHelper","_enableStatistics","setFloodingPlaneHeight","height","enableFloodingPlane","enable","isFloodingPlaneEnabled","enableCrossSection","isCrossSectionEnabled","setCrossSectionOrientation","orientation","setCrossSectionCenter","center","enableClippingBox","isClippingBoxEnabled","_recomputeClippingBox","setClippingBoxCenter","setClippingBoxSize","setClippingBox","box","getClippingBox","displayClippingBoxHelper","display","isClippingBoxHelperDisplayed","setClippingBoxInverted","inverted","isClippingBoxInverted","enableStatistics","isStatisticsEnabled","useCameraStore","cameraPosition","camera3dPosition","navigationMode","_isUserInteracting","getCameraPosition","getCamera3dPosition","setCameraPosition","pos","setCurrentPosition","position3d","getNavigationMode","getNavigationModeRef","setNavigationMode","mode","isUserInteracting","setIsUserInteracting","lookTopDownAt","buildDatasets","ds","shallowReactive","useDatasetStore","leafs","computed","count","entities","layers","getTree","getDatasets","add","dataset","attachEntity","entity","attachLayer","layer","remove","list","getBoundingBox","localBox","layerExtent","getEntity","getLayer","importFromFile","file","setVisible","newVisibility","toggleGrid","toggleMask","icon","_createElementBlock","_normalizeClass","title","_cache","$event","$emit","_createBlock","Icon","_createTextVNode","_hoisted_1","_openBlock","_renderSlot","_ctx","ButtonWithIcon","$attrs","disabled","refAndWatch","propName","p","watch","newValue"],"mappings":"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"}