@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 @@
1
+ {"version":3,"file":"Components.es.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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"}