{"version":3,"file":"igo2-geo.mjs","sources":["../../../packages/geo/src/lib/map/shared/map.utils.ts","../../../packages/geo/src/lib/layer/utils/layer.utils.ts","../../../packages/geo/src/lib/layer/utils/outputLegend.ts","../../../packages/geo/src/lib/print/shared/geopdf.ts","../../../packages/geo/src/lib/print/shared/print.type.ts","../../../packages/geo/src/lib/print/shared/print.service.ts","../../../packages/geo/src/lib/directions/directions-sources/directions-source.ts","../../../packages/geo/src/lib/directions/shared/directions-source.service.ts","../../../packages/geo/src/lib/utils/id-generator.ts","../../../packages/geo/src/lib/datasource/shared/datasources/datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/feature-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/data.service.ts","../../../packages/geo/src/lib/datasource/shared/datasources/osm-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/xyz-datasource.ts","../../../packages/geo/src/lib/filter/shared/ogc-filter.enum.ts","../../../packages/geo/src/lib/filter/shared/ogc-filter.ts","../../../packages/geo/src/lib/datasource/shared/datasources/wms-wfs.utils.ts","../../../packages/geo/src/lib/datasource/shared/datasources/wfs-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/wfs.service.ts","../../../packages/geo/src/lib/query/shared/query.enums.ts","../../../packages/geo/src/lib/datasource/shared/datasources/wms-datasource.ts","../../../packages/geo/src/lib/datasource/utils/tilegrid.ts","../../../packages/geo/src/lib/datasource/shared/datasources/wmts-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/carto-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/arcgisrest-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/imagearcgisrest-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/tilearcgisrest-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/tiledebug-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/websocket-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/mvt-datasource.ts","../../../packages/geo/src/lib/datasource/shared/datasources/cluster-datasource.ts","../../../packages/geo/src/lib/offline/geoDB/geoDB.enums.ts","../../../packages/geo/src/lib/style/shared/vector/conversion.utils.ts","../../../packages/geo/src/lib/layer/utils/vector-watcher.ts","../../../packages/geo/src/lib/layer/shared/layers/linked/linked-layer.utils.ts","../../../packages/geo/src/lib/layer/shared/layers/layer-base.ts","../../../packages/geo/src/lib/map/shared/linkedLayers.utils.ts","../../../packages/geo/src/lib/layer/shared/layers/linked/linked-layer.interface.ts","../../../packages/geo/src/lib/map/utils/layer-watcher.ts","../../../packages/geo/src/lib/layer/shared/layers/linked/linked-layer.ts","../../../packages/geo/src/lib/layer/shared/layers/layer.ts","../../../packages/geo/src/lib/layer/shared/layers/vector-layer.ts","../../../packages/geo/src/lib/feature/shared/feature-store.utils.ts","../../../packages/geo/src/lib/feature/shared/feature.enums.ts","../../../packages/geo/src/lib/feature/shared/strategies/loading.ts","../../../packages/geo/src/lib/feature/shared/feature.utils.ts","../../../packages/geo/src/lib/feature/shared/store.ts","../../../packages/geo/src/lib/feature/shared/strategies/selection.ts","../../../packages/geo/src/lib/feature/shared/strategies.utils.ts","../../../packages/geo/src/lib/style/shared/overlay/overlay-marker-style.utils.ts","../../../packages/geo/src/lib/directions/shared/directions.enum.ts","../../../packages/geo/src/lib/directions/shared/directions.utils.ts","../../../packages/geo/src/lib/directions/shared/directions.service.ts","../../../packages/geo/src/lib/directions/shared/store.ts","../../../packages/geo/src/lib/directions/directions-buttons/directions-buttons.component.ts","../../../packages/geo/src/lib/directions/directions-buttons/directions-buttons.component.html","../../../packages/geo/src/lib/directions/directions-inputs/directions-inputs.component.ts","../../../packages/geo/src/lib/directions/directions-inputs/directions-inputs.component.html","../../../packages/geo/src/lib/directions/directions-results/directions-results.component.ts","../../../packages/geo/src/lib/directions/directions-results/directions-results.component.html","../../../packages/geo/src/lib/layer/layer-visibility-button/layer-visibility-button.component.ts","../../../packages/geo/src/lib/layer/layer-visibility-button/layer-visibility-button.component.html","../../../packages/geo/src/lib/layer/layer-group/layer-group.component.ts","../../../packages/geo/src/lib/layer/layer-group/layer-group.component.html","../../../packages/geo/src/lib/query/shared/query.utils.ts","../../../packages/geo/src/lib/filter/shared/time-filter.enum.ts","../../../packages/geo/src/lib/map/shared/map.service.ts","../../../packages/geo/src/lib/style/shared/datasource/esri-style-generator.ts","../../../packages/geo/src/lib/datasource/shared/capabilities.interface.ts","../../../packages/geo/src/lib/datasource/shared/capabilities.service.ts","../../../packages/geo/src/lib/layer/shared/layers/layer.interface.ts","../../../packages/geo/src/lib/layer/utils/image-watcher.ts","../../../packages/geo/src/lib/layer/shared/layers/image-layer.ts","../../../packages/geo/src/lib/layer/utils/tile-watcher.ts","../../../packages/geo/src/lib/layer/shared/layers/tile-layer.ts","../../../packages/geo/src/lib/layer/shared/layers/vectortile-layer.ts","../../../packages/geo/src/lib/layer/shared/layers/layer-group.ts","../../../packages/geo/src/lib/layer/layer-legend/layer-legend.component.ts","../../../packages/geo/src/lib/layer/layer-legend/layer-legend.component.html","../../../packages/geo/src/lib/layer/layer-item/layer-item.component.ts","../../../packages/geo/src/lib/layer/layer-item/layer-item.component.html","../../../packages/geo/src/lib/layer/layer-legend-item/layer-legend-item.component.ts","../../../packages/geo/src/lib/layer/layer-legend-item/layer-legend-item.component.html","../../../packages/geo/src/lib/layer/layer-legend-list/layer-legend-list.component.ts","../../../packages/geo/src/lib/layer/layer-legend-list/layer-legend-list.component.html","../../../packages/geo/src/lib/layer/layer-legend-list/layer-legend-list-binding.directive.ts","../../../packages/geo/src/lib/layer/layer-search/layer-search.component.ts","../../../packages/geo/src/lib/layer/layer-search/layer-search.component.html","../../../packages/geo/src/lib/datasource/shared/options/options.service.ts","../../../packages/geo/src/lib/datasource/shared/datasource.service.ts","../../../packages/geo/src/lib/offline/layerDB/layerDB.service.ts","../../../packages/geo/src/lib/offline/geoDB/geoDB.service.ts","../../../packages/geo/src/lib/offline/shared/geo-network.service.ts","../../../packages/geo/src/lib/style/style-service/style.service.ts","../../../packages/geo/src/lib/layer/shared/layer.service.ts","../../../packages/geo/src/lib/layer/layer-list-tool/layer-list-tool.service.ts","../../../packages/geo/src/lib/layer/layer-list-tool/layer-list-tool.component.ts","../../../packages/geo/src/lib/layer/layer-list-tool/layer-list-tool.component.html","../../../packages/geo/src/lib/layer/layer-list-tool/layer-list-tool.interface.ts","../../../packages/geo/src/lib/layer/layer-list/layer-list.component.ts","../../../packages/geo/src/lib/layer/layer-list/layer-list.component.html","../../../packages/geo/src/lib/layer/layer-unavailable/layer-unavailable.component.ts","../../../packages/geo/src/lib/layer/layer-unavailable/layer-unavailable.component.html","../../../packages/geo/src/lib/layer/shared/layer.enums.ts","../../../packages/geo/src/lib/layer/shared/layer-selection.ts","../../../packages/geo/src/lib/layer/shared/layer-controller.ts","../../../packages/geo/src/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.ts","../../../packages/geo/src/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.html","../../../packages/geo/src/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.ts","../../../packages/geo/src/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.html","../../../packages/geo/src/lib/layer/layer-viewer/layer-viewer.component.ts","../../../packages/geo/src/lib/layer/layer-viewer/layer-viewer.component.html","../../../packages/geo/src/lib/layer/track-feature-button/track-feature-button.component.ts","../../../packages/geo/src/lib/layer/track-feature-button/track-feature-button.component.html","../../../packages/geo/src/lib/style/shared/overlay/overlay-style.utils.ts","../../../packages/geo/src/lib/overlay/shared/overlay.utils.ts","../../../packages/geo/src/lib/overlay/shared/overlay.ts","../../../packages/geo/src/lib/map/shared/controllers/controller.ts","../../../packages/geo/src/lib/map/shared/controllers/geolocation.interface.ts","../../../packages/geo/src/lib/map/shared/controllers/geolocation.ts","../../../packages/geo/src/lib/map/shared/map.enums.ts","../../../packages/geo/src/lib/map/shared/controllers/view.ts","../../../packages/geo/src/lib/map/shared/map.ts","../../../packages/geo/src/lib/map/shared/map.abstract.ts","../../../packages/geo/src/lib/map/map-browser/map-browser.component.ts","../../../packages/geo/src/lib/map/map-browser/map-browser.component.html","../../../packages/geo/src/lib/map/shared/mapOffline.directive.ts","../../../packages/geo/src/lib/map/shared/map-pointer-position.directive.ts","../../../packages/geo/src/lib/style/shared/feature/feature-style.ts","../../../packages/geo/src/lib/map/shared/hover-feature.directive.ts","../../../packages/geo/src/lib/map/shared/projection.service.ts","../../../packages/geo/src/lib/map/shared/projection.utils.ts","../../../packages/geo/src/lib/map/zoom-button/zoom-button.component.ts","../../../packages/geo/src/lib/map/zoom-button/zoom-button.component.html","../../../packages/geo/src/lib/map/menu-button/menu-button.component.ts","../../../packages/geo/src/lib/map/menu-button/menu-button.component.html","../../../packages/geo/src/lib/map/geolocate-button/geolocate-button.component.ts","../../../packages/geo/src/lib/map/geolocate-button/geolocate-button.component.html","../../../packages/geo/src/lib/map/home-extent-button/home-extent-button.component.ts","../../../packages/geo/src/lib/map/home-extent-button/home-extent-button.component.html","../../../packages/geo/src/lib/map/offline-button/offline-button.component.ts","../../../packages/geo/src/lib/map/offline-button/offline-button.component.html","../../../packages/geo/src/lib/map/wake-lock-button/wake-lock-button.component.ts","../../../packages/geo/src/lib/map/wake-lock-button/wake-lock-button.component.html","../../../packages/geo/src/lib/map/baselayers-switcher/baselayers-switcher.animation.ts","../../../packages/geo/src/lib/map/baselayers-switcher/mini-basemap.component.ts","../../../packages/geo/src/lib/map/baselayers-switcher/mini-basemap.component.html","../../../packages/geo/src/lib/map/baselayers-switcher/baselayers-switcher.component.ts","../../../packages/geo/src/lib/map/baselayers-switcher/baselayers-switcher.component.html","../../../packages/geo/src/lib/map/rotation-button/rotation-button.component.ts","../../../packages/geo/src/lib/map/rotation-button/rotation-button.component.html","../../../packages/geo/src/lib/map/swipe-control/swipe-control.component.ts","../../../packages/geo/src/lib/map/swipe-control/swipe-control.component.html","../../../packages/geo/src/lib/map/map-center/map-center.component.ts","../../../packages/geo/src/lib/map/map-center/map-center.component.html","../../../packages/geo/src/lib/map/info-section/info-section.component.ts","../../../packages/geo/src/lib/map/info-section/info-section.component.html","../../../packages/geo/src/lib/query/shared/query.service.ts","../../../packages/geo/src/lib/search/shared/search-source.service.ts","../../../packages/geo/src/lib/search/shared/search.utils.ts","../../../packages/geo/src/lib/search/shared/search.service.ts","../../../packages/geo/src/lib/directions/directions.component.ts","../../../packages/geo/src/lib/directions/directions.component.html","../../../packages/geo/src/lib/directions/directions.module.ts","../../../packages/geo/src/lib/filter/shared/filterable-datasource.pipe.ts","../../../packages/geo/src/lib/filter/shared/time-filter.service.ts","../../../packages/geo/src/lib/filter/shared/ogc-filter.service.ts","../../../packages/geo/src/lib/filter/shared/spatial-filter.enum.ts","../../../packages/geo/src/lib/filter/shared/spatial-filter.service.ts","../../../packages/geo/src/lib/download/shared/download.service.ts","../../../packages/geo/src/lib/download/download-button/download-button.component.ts","../../../packages/geo/src/lib/download/download-button/download-button.component.html","../../../packages/geo/src/lib/download/download.module.ts","../../../packages/geo/src/lib/wkt/shared/wkt.service.ts","../../../packages/geo/src/lib/filter/shared/ogc-filter-time.service.ts","../../../packages/geo/src/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.ts","../../../packages/geo/src/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.html","../../../packages/geo/src/lib/filter/ogc-filter-time/ogc-filter-time.component.ts","../../../packages/geo/src/lib/filter/ogc-filter-time/ogc-filter-time.component.html","../../../packages/geo/src/lib/filter/ogc-filter-form/ogc-filter-form.component.ts","../../../packages/geo/src/lib/filter/ogc-filter-form/ogc-filter-form.component.html","../../../packages/geo/src/lib/filter/ogc-filter-selection/ogc-filter-selection.component.ts","../../../packages/geo/src/lib/filter/ogc-filter-selection/ogc-filter-selection.component.html","../../../packages/geo/src/lib/filter/ogc-filterable-form/ogc-filterable-form.component.ts","../../../packages/geo/src/lib/filter/ogc-filterable-form/ogc-filterable-form.component.html","../../../packages/geo/src/lib/filter/ogc-filterable-item/ogc-filterable-item.component.ts","../../../packages/geo/src/lib/filter/ogc-filterable-item/ogc-filterable-item.component.html","../../../packages/geo/src/lib/filter/ogc-filter-button/ogc-filter-button.component.ts","../../../packages/geo/src/lib/filter/ogc-filter-button/ogc-filter-button.component.html","../../../packages/geo/src/lib/filter/ogc-filterable-list/ogc-filterable-list.component.ts","../../../packages/geo/src/lib/filter/ogc-filterable-list/ogc-filterable-list.component.html","../../../packages/geo/src/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.ts","../../../packages/geo/src/lib/datasource/shared/options/options-api.service.ts","../../../packages/geo/src/lib/datasource/shared/options/options-api.providers.ts","../../../packages/geo/src/lib/draw/shared/draw.enum.ts","../../../packages/geo/src/lib/draw/shared/draw-icon.service.ts","../../../packages/geo/src/lib/measure/shared/measure.enum.ts","../../../packages/geo/src/lib/measure/shared/measure.utils.ts","../../../packages/geo/src/lib/draw/shared/draw.utils.ts","../../../packages/geo/src/lib/feature/shared/strategies/in-map-extent.ts","../../../packages/geo/src/lib/feature/shared/strategies/in-map-resolution.ts","../../../packages/geo/src/lib/feature/shared/strategies/geo-properties.ts","../../../packages/geo/src/lib/feature/shared/strategies/loading-layer.ts","../../../packages/geo/src/lib/feature/shared/strategies/search.ts","../../../packages/geo/src/lib/search/shared/sources/source.ts","../../../packages/geo/src/lib/feature/feature-details/feature-details.component.ts","../../../packages/geo/src/lib/feature/feature-details/feature-details.component.html","../../../packages/geo/src/lib/feature/feature-details/feature-details.directive.ts","../../../packages/geo/src/lib/feature/feature-details/feature-details.module.ts","../../../packages/geo/src/lib/feature/feature-form/feature-form.component.ts","../../../packages/geo/src/lib/feature/feature-form/feature-form.component.html","../../../packages/geo/src/lib/feature/feature.module.ts","../../../packages/geo/src/lib/geometry/shared/geometry.errors.ts","../../../packages/geo/src/lib/geometry/shared/geometry.utils.ts","../../../packages/geo/src/lib/geometry/shared/controls/draw.ts","../../../packages/geo/src/lib/style/shared/font.enum.ts","../../../packages/geo/src/lib/style/style-service/draw-style.service.ts","../../../packages/geo/src/lib/style/style-modal/drawing/style-modal-drawing.component.ts","../../../packages/geo/src/lib/style/style-modal/drawing/style-modal-drawing.component.html","../../../packages/geo/src/lib/draw/draw/draw-layer-popup.component.ts","../../../packages/geo/src/lib/draw/draw/draw-layer-popup.component.html","../../../packages/geo/src/lib/draw/draw/draw-popup.component.ts","../../../packages/geo/src/lib/draw/draw/draw-popup.component.html","../../../packages/geo/src/lib/draw/draw/draw-shorcuts.component.ts","../../../packages/geo/src/lib/draw/draw/draw-shorcuts.component.html","../../../packages/geo/src/lib/draw/draw/draw.component.ts","../../../packages/geo/src/lib/draw/draw/draw.component.html","../../../packages/geo/src/lib/measure/measurer/measure-format.pipe.ts","../../../packages/geo/src/lib/geometry/shared/controls/modify.ts","../../../packages/geo/src/lib/geometry/shared/controls/slice.ts","../../../packages/geo/src/lib/measure/measurer/measurer-dialog.component.ts","../../../packages/geo/src/lib/measure/measurer/measurer-dialog.component.html","../../../packages/geo/src/lib/measure/measurer/measurer-item.component.ts","../../../packages/geo/src/lib/measure/measurer/measurer-item.component.html","../../../packages/geo/src/lib/measure/measurer/measurer.component.ts","../../../packages/geo/src/lib/measure/measurer/measurer.component.html","../../../packages/geo/src/lib/measure/measurer/index.ts","../../../packages/geo/src/lib/geometry/geometry-form-field/geometry-form-field-input.component.ts","../../../packages/geo/src/lib/geometry/geometry-form-field/geometry-form-field-input.component.html","../../../packages/geo/src/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.ts","../../../packages/geo/src/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.html","../../../packages/geo/src/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.ts","../../../packages/geo/src/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.html","../../../packages/geo/src/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.ts","../../../packages/geo/src/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.html","../../../packages/geo/src/lib/filter/time-filter-form/time-filter-form.component.ts","../../../packages/geo/src/lib/filter/time-filter-form/time-filter-form.component.html","../../../packages/geo/src/lib/filter/time-filter-item/time-filter-item.component.ts","../../../packages/geo/src/lib/filter/time-filter-item/time-filter-item.component.html","../../../packages/geo/src/lib/filter/time-filter-button/time-filter-button.component.ts","../../../packages/geo/src/lib/filter/time-filter-button/time-filter-button.component.html","../../../packages/geo/src/lib/filter/time-filter-list/time-filter-list.component.ts","../../../packages/geo/src/lib/filter/time-filter-list/time-filter-list.component.html","../../../packages/geo/src/lib/filter/time-filter-list/time-filter-list-binding.directive.ts","../../../packages/geo/src/lib/filter/filter.module.ts","../../../packages/geo/src/lib/import-export/export-button/export-button.component.ts","../../../packages/geo/src/lib/import-export/export-button/export-button.component.html","../../../packages/geo/src/lib/style/style-list/style-list.service.ts","../../../packages/geo/src/lib/import-export/shared/export.errors.ts","../../../packages/geo/src/lib/import-export/shared/export.utils.ts","../../../packages/geo/src/lib/import-export/shared/export.service.ts","../../../packages/geo/src/lib/import-export/shared/export.type.ts","../../../packages/geo/src/lib/import-export/shared/import.errors.ts","../../../packages/geo/src/lib/import-export/shared/import.utils.ts","../../../packages/geo/src/lib/import-export/shared/import.service.ts","../../../packages/geo/src/lib/import-export/import-export/import-export.component.ts","../../../packages/geo/src/lib/import-export/import-export/import-export.component.html","../../../packages/geo/src/lib/import-export/shared/drop-geo-file.directive.ts","../../../packages/geo/src/lib/import-export/import-export.module.ts","../../../packages/geo/src/lib/layer/layer.module.ts","../../../packages/geo/src/lib/metadata/shared/metadata.service.ts","../../../packages/geo/src/lib/metadata/metadata-button/metadata-button.component.ts","../../../packages/geo/src/lib/metadata/metadata-button/metadata-button.component.html","../../../packages/geo/src/lib/metadata/metadata-button/metadata-abstract.component.html","../../../packages/geo/src/lib/metadata/metadata.module.ts","../../../packages/geo/src/lib/query/shared/query-search-source.ts","../../../packages/geo/src/lib/query/shared/query-search-source.providers.ts","../../../packages/geo/src/lib/query/shared/query.directive.ts","../../../packages/geo/src/lib/query/query.module.ts","../../../packages/geo/src/lib/search/shared/search.enums.ts","../../../packages/geo/src/lib/search/search-selector/search-selector.component.ts","../../../packages/geo/src/lib/search/search-selector/search-selector.component.html","../../../packages/geo/src/lib/search/search-settings/search-settings.component.ts","../../../packages/geo/src/lib/search/search-settings/search-settings.component.html","../../../packages/geo/src/lib/search/search-bar/search-bar.component.ts","../../../packages/geo/src/lib/search/search-bar/search-bar.component.html","../../../packages/geo/src/lib/search/search-bar/search-bar.module.ts","../../../packages/geo/src/lib/search/search-results/search-results-item.component.ts","../../../packages/geo/src/lib/search/search-results/search-results-item.component.html","../../../packages/geo/src/lib/search/search-results/save-feature-dialog.component.ts","../../../packages/geo/src/lib/search/search-results/save-feature-dialog.component.html","../../../packages/geo/src/lib/search/search-results/search-results-add-button.component.ts","../../../packages/geo/src/lib/search/search-results/search-results-add-button.component.html","../../../packages/geo/src/lib/search/search-results/search-results.component.ts","../../../packages/geo/src/lib/search/search-results/search-results.component.html","../../../packages/geo/src/lib/search/search-results/search-results.module.ts","../../../packages/geo/src/lib/search/search-results/search-results.directive.ts","../../../packages/geo/src/lib/search/search-selector/search-selector.module.ts","../../../packages/geo/src/lib/search/search-settings/search-settings.module.ts","../../../packages/geo/src/lib/search/shared/search-pointer-summary.directive.ts","../../../packages/geo/src/lib/search/shared/search-source-service.providers.ts","../../../packages/geo/src/lib/utils/googleLinks.ts","../../../packages/geo/src/lib/utils/osmLinks.ts","../../../packages/geo/src/lib/search/shared/sources/coordinates.ts","../../../packages/geo/src/lib/search/shared/sources/source.interfaces.ts","../../../packages/geo/src/lib/search/shared/sources/coordinates.providers.ts","../../../packages/geo/src/lib/search/shared/sources/icherche-icons.ts","../../../packages/geo/src/lib/search/shared/sources/icherche.ts","../../../packages/geo/src/lib/search/shared/sources/icherche.providers.ts","../../../packages/geo/src/lib/search/shared/sources/ilayer.ts","../../../packages/geo/src/lib/search/shared/sources/ilayer.providers.ts","../../../packages/geo/src/lib/search/search.module.ts","../../../packages/geo/src/lib/style/style-list/style-list.provider.ts","../../../packages/geo/src/lib/style/style-list/style-list.module.ts","../../../packages/geo/src/lib/style/style-modal/layer/style-modal-layer.component.ts","../../../packages/geo/src/lib/style/style-modal/layer/style-modal-layer.component.html","../../../packages/geo/src/lib/style/style-modal/layer-button/style-modal-layer-button.component.ts","../../../packages/geo/src/lib/style/style-modal/layer-button/style-modal-layer-button.component.html","../../../packages/geo/src/lib/style/style.module.ts","../../../packages/geo/src/lib/toast/toast.component.ts","../../../packages/geo/src/lib/toast/toast.component.html","../../../packages/geo/src/lib/toast/toast.module.ts","../../../packages/geo/src/lib/wkt/wkt.module.ts","../../../packages/geo/src/lib/workspace/widgets/ogc-filter/ogc-filter.component.ts","../../../packages/geo/src/lib/workspace/widgets/ogc-filter/ogc-filter.component.html","../../../packages/geo/src/lib/workspace/widgets/ogc-filter/ogc-filter.module.ts","../../../packages/geo/src/lib/workspace/widgets/widgets.ts","../../../packages/geo/src/lib/workspace/confirmation-popup/confirmation-popup.component.ts","../../../packages/geo/src/lib/workspace/confirmation-popup/confirmation-popup.component.html","../../../packages/geo/src/lib/workspace/shared/edition-workspace.ts","../../../packages/geo/src/lib/workspace/shared/workspace.utils.ts","../../../packages/geo/src/lib/workspace/shared/edition-workspace.service.ts","../../../packages/geo/src/lib/style/shared/vector/commonVectorStyle.ts","../../../packages/geo/src/lib/utils/propertyTypeDetector/propertyTypeDetector.service.ts","../../../packages/geo/src/lib/workspace/shared/feature-workspace.ts","../../../packages/geo/src/lib/workspace/shared/feature-workspace.service.ts","../../../packages/geo/src/lib/workspace/shared/wfs-workspace.ts","../../../packages/geo/src/lib/workspace/shared/wfs-workspace.service.ts","../../../packages/geo/src/lib/workspace/shared/wms-workspace.service.ts","../../../packages/geo/src/lib/workspace/workspace-selector/workspace-selector.directive.ts","../../../packages/geo/src/lib/workspace/workspace-selector/workspace-selector.module.ts","../../../packages/geo/src/lib/workspace/workspace.module.ts","../../../packages/geo/src/lib/geo.module.ts","../../../packages/geo/src/lib/catalog/shared/catalog.enum.ts","../../../packages/geo/src/lib/catalog/shared/catalog.abstract.ts","../../../packages/geo/src/lib/catalog/shared/catalogs.ts","../../../packages/geo/src/lib/catalog/shared/catalog.service.ts","../../../packages/geo/src/lib/catalog/catalog-browser/catalog-browser-layer.component.ts","../../../packages/geo/src/lib/catalog/catalog-browser/catalog-browser-layer.component.html","../../../packages/geo/src/lib/catalog/catalog-browser/catalog-browser-group.component.ts","../../../packages/geo/src/lib/catalog/catalog-browser/catalog-browser-group.component.html","../../../packages/geo/src/lib/catalog/catalog-browser/catalog-browser.component.ts","../../../packages/geo/src/lib/catalog/catalog-browser/catalog-browser.component.html","../../../packages/geo/src/lib/catalog/catalog-browser/catalog-browser.module.ts","../../../packages/geo/src/lib/catalog/catalog-library/add-catalog-dialog.component.ts","../../../packages/geo/src/lib/catalog/catalog-library/add-catalog-dialog.component.html","../../../packages/geo/src/lib/catalog/catalog-library/catalog-library-item.component.ts","../../../packages/geo/src/lib/catalog/catalog-library/catalog-library-item.component.html","../../../packages/geo/src/lib/catalog/catalog-library/catalog-library.component.ts","../../../packages/geo/src/lib/catalog/catalog-library/catalog-library.component.html","../../../packages/geo/src/lib/catalog/catalog-library/catalog-library.module.ts","../../../packages/geo/src/lib/catalog/catalog.module.ts","../../../packages/geo/src/lib/draw/draw/draw.module.ts","../../../packages/geo/src/lib/draw/drawingTool.module.ts","../../../packages/geo/src/lib/feature/feature-form/feature-form.module.ts","../../../packages/geo/src/lib/geometry/geometry-form-field/geometry-form-field.component.ts","../../../packages/geo/src/lib/geometry/geometry-form-field/geometry-form-field.component.html","../../../packages/geo/src/lib/geometry/geometry-form-field/geometry-form-field.module.ts","../../../packages/geo/src/lib/geometry/geometry.module.ts","../../../packages/geo/src/lib/map/map.module.ts","../../../packages/geo/src/lib/measure/measurer/measurer.module.ts","../../../packages/geo/src/lib/measure/measure.module.ts","../../../packages/geo/src/lib/print/print-form/print-form.component.ts","../../../packages/geo/src/lib/print/print-form/print-form.component.html","../../../packages/geo/src/lib/print/print/print.component.ts","../../../packages/geo/src/lib/print/print/print.component.html","../../../packages/geo/src/lib/print/print.module.ts","../../../packages/geo/src/lib/directions/directions.provider.ts","../../../packages/geo/src/lib/directions/directions-sources/directions-source.interface.ts","../../../packages/geo/src/lib/directions/directions-sources/osrm-directions-source.ts","../../../packages/geo/src/lib/directions/directions-sources/directions-source.provider.ts","../../../packages/geo/src/lib/offline/geoDB/configFileToGeoDB.service.ts","../../../packages/geo/src/lib/offline/offline.provider.ts","../../../packages/geo/src/lib/overlay/shared/overlay.enum.ts","../../../packages/geo/src/lib/search/shared/search.provider.ts","../../../packages/geo/src/lib/search/shared/sources/cadastre.ts","../../../packages/geo/src/lib/search/shared/sources/cadastre.providers.ts","../../../packages/geo/src/lib/search/shared/sources/nominatim.ts","../../../packages/geo/src/lib/search/shared/sources/nominatim.providers.ts","../../../packages/geo/src/lib/search/shared/sources/storedqueries.ts","../../../packages/geo/src/lib/search/shared/sources/storedqueries.providers.ts","../../../packages/geo/src/lib/search/shared/sources/workspace.ts","../../../packages/geo/src/lib/search/shared/sources/workspace.providers.ts","../../../packages/geo/src/lib/workspace/confirmation-popup/confirmation-popup.module.ts","../../../packages/geo/src/lib/workspace/workspace-updator/workspace-updator.directive.ts","../../../packages/geo/src/lib/workspace/workspace-updator/workspace-updator.module.ts","../../../packages/geo/src/public_api.ts","../../../packages/geo/src/igo2-geo.ts"],"sourcesContent":["import { NumberUtils } from '@igo2/utils';\n\nimport MapBrowserPointerEvent from 'ol/MapBrowserEvent';\nimport { Coordinate } from 'ol/coordinate';\nimport { MAC } from 'ol/has';\nimport * as olproj from 'ol/proj';\n\nimport { Position } from 'geojson';\n\nimport { MapViewState } from './map.interface';\nimport { Projection } from './projection.interfaces';\n\n/**\n * This method extracts a coordinate tuple from a string.\n * @param str Any string\n * @param mapProjection string Map Projection\n * @param opts.forceNA boolean Force North America Zone\n * @returns object:\n *             lonLat: Coordinate,\n *             message: Message of error,\n *             radius: radius of the confience of coordinate,\n *             conf: confidence of the coordinate}\n */\nexport function stringToLonLat(\n  str: string,\n  mapProjection: string,\n  opts: { forceNA?: boolean } = {}\n): {\n  lonLat: [number, number] | undefined;\n  message: string;\n  radius: number | undefined;\n  conf: number | undefined;\n} {\n  let lonLat: [number, number];\n  let coordStr: string;\n  let negativeLon: string;\n  let degreesLon: string;\n  let minutesLon: string;\n  let secondsLon: string;\n  let directionLon: string;\n  let decimalLon: string;\n  let negativeLat: string;\n  let degreesLat: string;\n  let minutesLat: string;\n  let secondsLat: string;\n  let directionLat: string;\n  let decimalLat: string;\n  let zone: string;\n  let radius: string;\n  let conf: string;\n  let lon: any;\n  let lat: any;\n\n  const projectionPattern = '(\\\\s*;\\\\s*[\\\\d]{4,6})';\n  const toProjection = '4326';\n  let projectionStr: string;\n  const projectionRegex = new RegExp(projectionPattern, 'g');\n\n  const lonlatCoord = '([-+])?([\\\\d]{1,3})([,.](\\\\d+))?°?';\n  const lonLatPattern = `${lonlatCoord}[\\\\s,]+${lonlatCoord}`;\n  const lonLatRegex = new RegExp(`^${lonLatPattern}$`, 'g');\n\n  const dmsCoord =\n    '([0-9]{1,2})[:|°]?\\\\s*([0-9]{1,2})?[:|\\'|′|’]?\\\\s*([0-9]{1,2}(?:.[0-9]+){0,1})?\\\\s*[\"|″|”]?\\\\s*';\n  const dmsCoordPattern = `${dmsCoord}([N|S|E|W|O]),?\\\\s*${dmsCoord}([N|S|E|W|O])`;\n  const dmsRegex = new RegExp(`^${dmsCoordPattern}$`, 'gi');\n\n  const patternUtm =\n    '(UTM)-?(\\\\d{1,2})[\\\\s,]*(\\\\d+[.,]?\\\\d+)[\\\\s,]+(\\\\d+[.,]?\\\\d+)';\n  const utmRegex = new RegExp(`^${patternUtm}`, 'gi');\n\n  const patternMtm =\n    '(MTM)-?(\\\\d{1,2})[\\\\s,]*(\\\\d+[.,]?\\\\d+)[\\\\s,]+(\\\\d+[.,]?\\\\d+)';\n  const mtmRegex = new RegExp(`^${patternMtm}`, 'gi');\n\n  const ddCoord = '([-+])?(\\\\d{1,3})[,.](\\\\d+)';\n  const patternDd = `${ddCoord}\\\\s*[,]?\\\\s*${ddCoord}`;\n  const ddRegex = new RegExp(`^${patternDd}`, 'g');\n\n  const dmdCoord =\n    '([-+])?(\\\\d{1,3})[\\\\s,.]{1}(\\\\d{1,2})[\\\\s,.]{1}(\\\\d{1,2})[.,]?(\\\\d{1,5})?';\n  const patternDmd = `${dmdCoord}\\\\s*[,.]?\\\\s*${dmdCoord}`;\n  const dmdRegex = new RegExp(`^${patternDmd}`, 'g');\n\n  const patternBELL =\n    'LAT\\\\s*[\\\\s:]*\\\\s*([-+])?(\\\\d{1,2})[\\\\s.,]?(\\\\d+)?[\\\\s.,]?\\\\s*(\\\\d{1,2}([.,]\\\\d+)?)?\\\\s*(N|S|E|W)?\\\\s*LONG\\\\s*[\\\\s:]*\\\\s*([-+])?(\\\\d{1,3})[\\\\s.,]?(\\\\d+)?[\\\\s.,]?\\\\s*(\\\\d{1,2}([.,]\\\\d+)?)?\\\\s*(N|S|E|W)?\\\\s*UNC\\\\s*[\\\\s:]?\\\\s*(\\\\d+)\\\\s*CONF\\\\s*[\\\\s:]?\\\\s*(\\\\d{1,3})';\n  const bellRegex = new RegExp(`^${patternBELL}?`, 'gi');\n\n  const mmCoord = '([-+]?\\\\d+)[,.]?(\\\\d+)?';\n  const mmPattern = `${mmCoord}[\\\\s,]+${mmCoord}`;\n  const mmRegex = new RegExp(`^${mmPattern}$`, 'g');\n\n  let isXYCoords = false;\n\n  str = str.toLocaleUpperCase().trim();\n\n  // Extract projection\n  if (projectionRegex.test(str)) {\n    [coordStr, projectionStr] = str.split(';').map((s) => s.trim());\n  } else {\n    coordStr = str;\n  }\n  if (lonLatRegex.test(coordStr)) {\n    [, negativeLon, lon, , decimalLon, negativeLat, lat, , decimalLat] =\n      coordStr.match(lonLatPattern);\n\n    lon = parseFloat((negativeLon ? negativeLon : '') + lon + '.' + decimalLon);\n    lat = parseFloat((negativeLat ? negativeLat : '') + lat + '.' + decimalLat);\n  } else if (dmsRegex.test(coordStr)) {\n    [\n      ,\n      degreesLon,\n      minutesLon,\n      secondsLon,\n      directionLon,\n      degreesLat,\n      minutesLat,\n      secondsLat,\n      directionLat\n    ] = coordStr.match(dmsCoordPattern);\n\n    if (directionLon === 'S' || directionLon === 'N') {\n      degreesLon = [degreesLat, (degreesLat = degreesLon)][0];\n      minutesLon = [minutesLat, (minutesLat = minutesLon)][0];\n      secondsLon = [secondsLat, (secondsLat = secondsLon)][0];\n      directionLon = [directionLat, (directionLat = directionLon)][0];\n    }\n\n    lon = convertDMSToDD(\n      parseFloat(degreesLon),\n      parseFloat(minutesLon),\n      parseFloat(secondsLon),\n      directionLon\n    );\n    lat = convertDMSToDD(\n      parseFloat(degreesLat),\n      parseFloat(minutesLat),\n      parseFloat(secondsLat),\n      directionLat\n    );\n  } else if (utmRegex.test(coordStr)) {\n    isXYCoords = true;\n    [, , zone, lon, lat] = coordStr.match(patternUtm);\n    const epsgUtm = Number(zone) < 10 ? `EPSG:3260${zone}` : `EPSG:326${zone}`;\n    [lon, lat] = olproj.transform(\n      [parseFloat(lon), parseFloat(lat)],\n      epsgUtm,\n      'EPSG:4326'\n    );\n  } else if (mtmRegex.test(coordStr)) {\n    isXYCoords = true;\n    [, , zone, lon, lat] = coordStr.match(patternMtm);\n    const epsgMtm =\n      Number(zone) < 10 ? `EPSG:3218${zone}` : `EPSG:321${80 + Number(zone)}`;\n    [lon, lat] = olproj.transform(\n      [parseFloat(lon), parseFloat(lat)],\n      epsgMtm,\n      'EPSG:4326'\n    );\n  } else if (dmdRegex.test(coordStr)) {\n    [\n      ,\n      negativeLon,\n      degreesLon,\n      minutesLon,\n      secondsLon,\n      decimalLon,\n      negativeLat,\n      degreesLat,\n      minutesLat,\n      secondsLat,\n      decimalLat\n    ] = coordStr.match(patternDmd);\n\n    lon = convertDMSToDD(\n      parseFloat((negativeLon ? negativeLon : '') + degreesLon),\n      parseFloat(minutesLon),\n      parseFloat(secondsLon),\n      directionLon\n    );\n    lat = convertDMSToDD(\n      parseFloat((negativeLat ? negativeLat : '') + degreesLat),\n      parseFloat(minutesLat),\n      parseFloat(secondsLat),\n      directionLat\n    );\n  } else if (ddRegex.test(coordStr)) {\n    [\n      ,\n      negativeLon,\n      degreesLon,\n      decimalLon,\n      negativeLat,\n      degreesLat,\n      decimalLat\n    ] = coordStr.match(patternDd);\n\n    lon = convertDMSToDD(\n      parseFloat((negativeLon ? negativeLon : '') + degreesLon),\n      parseFloat(minutesLon),\n      parseFloat(secondsLon),\n      directionLon\n    );\n    lat = convertDMSToDD(\n      parseFloat((negativeLat ? negativeLat : '') + degreesLat),\n      parseFloat(minutesLat),\n      parseFloat(secondsLat),\n      directionLat\n    );\n  } else if (bellRegex.test(coordStr)) {\n    [\n      ,\n      negativeLat,\n      degreesLat,\n      minutesLat,\n      secondsLat,\n      ,\n      directionLat,\n      negativeLon,\n      degreesLon,\n      minutesLon,\n      secondsLon,\n      ,\n      directionLon,\n      radius,\n      conf\n    ] = coordStr.match(patternBELL);\n\n    // Set default value for North America\n    if (!directionLon) {\n      directionLon = 'W';\n    }\n\n    // Check if real minutes or decimals\n    if (minutesLon && minutesLon.length > 2) {\n      lon = parseFloat(\n        (negativeLon ? negativeLon : '') + degreesLon + '.' + minutesLon\n      );\n    } else {\n      lon = convertDMSToDD(\n        parseFloat(degreesLon),\n        parseFloat(minutesLon),\n        parseFloat(secondsLon),\n        directionLon\n      );\n    }\n\n    if (minutesLat && minutesLat.length > 2) {\n      lat = parseFloat(\n        (negativeLat ? negativeLat : '') + degreesLat + '.' + minutesLat\n      );\n    } else {\n      lat = convertDMSToDD(\n        parseFloat(degreesLat),\n        parseFloat(minutesLat),\n        parseFloat(secondsLat),\n        directionLat\n      );\n    }\n  } else if (mmRegex.test(coordStr)) {\n    isXYCoords = true;\n    [, lon, decimalLon, lat, decimalLat] = coordStr.match(mmPattern);\n\n    if (decimalLon) {\n      lon = parseFloat(lon + '.' + decimalLon);\n    }\n\n    if (decimalLat) {\n      lat = parseFloat(lat + '.' + decimalLat);\n    }\n  } else {\n    return {\n      lonLat: undefined,\n      message: '',\n      radius: undefined,\n      conf: undefined\n    };\n  }\n\n  if (opts.forceNA && !isXYCoords) {\n    // Set a negative coordinate for North America zone\n    if (lon > 0 && lat > 0) {\n      if (lon > lat) {\n        lon = -lon;\n      } else {\n        lat = -lat;\n      }\n    }\n\n    // Reverse coordinate to respect lonLat convention\n    if (lon > lat) {\n      lon = [lat, (lat = lon)][0];\n    }\n  }\n\n  lonLat = [Number(lon), Number(lat)] as [number, number];\n\n  // Reproject the coordinate if projection parameter have been set and coord is not 4326\n  if (\n    (projectionStr !== undefined && projectionStr !== toProjection) ||\n    lonLat[0] > 180 ||\n    lonLat[0] < -180 ||\n    lonLat[1] > 90 ||\n    lonLat[1] < -90\n  ) {\n    const source = projectionStr ? 'EPSG:' + projectionStr : mapProjection;\n    const dest = 'EPSG:' + toProjection;\n\n    try {\n      lonLat = olproj.transform(lonLat, source, dest) as [number, number];\n    } catch {\n      return {\n        lonLat: undefined,\n        message: 'Projection ' + source + ' not supported',\n        radius: undefined,\n        conf: undefined\n      };\n    }\n  }\n  if (Math.abs(lonLat[0]) <= 180 && Math.abs(lonLat[1]) <= 90) {\n    return {\n      lonLat,\n      message: '',\n      radius: radius ? parseInt(radius, 10) : undefined,\n      conf: conf ? parseInt(conf, 10) : undefined\n    };\n  } else {\n    return {\n      lonLat: undefined,\n      message: 'Coordinate out of Longitude/Latitude bounds',\n      radius: undefined,\n      conf: undefined\n    };\n  }\n}\n\n/**\n * Convert degrees minutes seconds to dd\n * @param degrees Degrees\n * @param minutes Minutes\n * @param seconds Seconds\n * @param direction Direction\n */\nfunction convertDMSToDD(\n  degrees: number,\n  minutes: number,\n  seconds: number,\n  direction: string\n) {\n  minutes = minutes || 0;\n  seconds = seconds || 0;\n\n  const neg = degrees < 0;\n  let dd = Math.abs(degrees) + minutes / 60 + seconds / 3600;\n\n  if (neg || direction === 'S' || direction === 'W') {\n    dd = -dd;\n  } // Don't do anything for N or E\n  return dd;\n}\n\n/**\n * Convert dd to degrees minutes seconds\n * @param lonLatDD longitude and latitude in dd\n * @param decimal number of decimals for seconds\n * @returns longitude and latitude in dms\n */\nexport function convertDDToDMS(lonLatDD: Coordinate, decimal = 3): string[] {\n  const lonLatDMS = [];\n\n  lonLatDD.forEach((dd) => {\n    const degrees = dd < 0 ? Math.ceil(dd) : Math.floor(dd);\n    const int = dd < 0 ? (degrees - dd) * 60 : (dd - degrees) * 60;\n    const minutes = Math.floor(int);\n    const seconds = ((int - minutes) * 60).toFixed(decimal);\n\n    lonLatDMS.push(`${degrees}° ${minutes}' ${seconds}\"`);\n  });\n  return lonLatDMS;\n}\n\n/**\n * Return true of two view states are equal.\n * @param state1 View state\n * @param state2 View state\n * @returns True if the view states are equal\n */\nexport function viewStatesAreEqual(\n  state1: MapViewState,\n  state2: MapViewState\n): boolean {\n  if (state1 === undefined || state2 === undefined) {\n    return false;\n  }\n\n  const tolerance = 1 / 10000;\n  return (\n    state1.zoom === state2.zoom &&\n    Math.trunc(state1.center[0] / tolerance) ===\n      Math.trunc(state2.center[0] / tolerance) &&\n    Math.trunc(state1.center[1] / tolerance) ===\n      Math.trunc(state2.center[1] / tolerance)\n  );\n}\n\n/**\n * Format the scale to a human readable text\n * @param Scale of the map\n * @returns Human readable scale text\n */\nexport function formatScale(scale) {\n  scale = Math.round(scale);\n  if (scale < 10000) {\n    return scale + '';\n  }\n\n  scale = Math.round(scale / 1000);\n  if (scale < 1000) {\n    return scale + 'K';\n  }\n\n  scale = Math.round(scale / 1000);\n  return scale + 'M';\n}\n\n/**\n * Return the resolution from a scale denom\n * @param scale Scale denom\n * @param dpi DPI\n * @returns Resolution\n */\nexport function getResolutionFromScale(scale: number, dpi = 96): number {\n  const inchesPerMeter = 39.3701;\n  return scale / (inchesPerMeter * dpi);\n}\n\n/**\n * Return the resolution from a scale denom\n * @param Scale denom\n * @returns Resolution\n */\nexport function getScaleFromResolution(\n  resolution: number,\n  unit = 'm',\n  dpi = 96\n): number {\n  const inchesPerMeter = 39.3701;\n  return resolution * olproj.METERS_PER_UNIT[unit] * inchesPerMeter * dpi;\n}\n\n/**\n * Returns true if the CTRL key is pushed during an Ol MapBrowserPointerEvent\n * @param event OL MapBrowserPointerEvent\n * @returns Whether the CTRL key is pushed\n */\nexport function ctrlKeyDown(event: MapBrowserPointerEvent<any>): boolean {\n  const originalEvent = event.originalEvent;\n  return (\n    !originalEvent.altKey &&\n    (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n    !originalEvent.shiftKey\n  );\n}\n\nexport function roundCoordTo(\n  coord: [number, number] | Position | Coordinate,\n  decimal = 3\n): Coordinate {\n  return [\n    NumberUtils.roundToNDecimal(coord[0], decimal),\n    NumberUtils.roundToNDecimal(coord[1], decimal)\n  ];\n}\n\nexport function roundCoordToString(\n  coord: [number, number] | Position | Coordinate,\n  decimal = 3\n): [string, string] {\n  return roundCoordTo(coord, decimal).map((r) => r.toString() + '°') as [\n    string,\n    string\n  ];\n}\n\n/**\n * Returns an array of converted coordinates.\n * Conversion is done for every configured projections\n * and for the current UTM zone and MTM zone.\n * @param lonLat [number, number] array of the coordinate to transform.\n * @param projections  Projection[] Array of destination projection.\n * @param reverseCoords To reverse coords from latLon to lonLat (search option)\n * @returns Returns an array of converted coordinates.\n */\nexport function lonLatConversion(\n  lonLat: [number, number],\n  projections: Projection[]\n): {\n  code: string;\n  alias: string;\n  coord: [number, number];\n  igo2CoordFormat: string;\n}[] {\n  const rawCoord3857 = olproj.transform(lonLat, 'EPSG:4326', 'EPSG:3857') as [\n    number,\n    number\n  ];\n  const convertedLonLat = [\n    {\n      code: 'EPSG:3857',\n      alias: 'Web Mercator',\n      coord: rawCoord3857,\n      igo2CoordFormat: `${roundCoordTo(rawCoord3857).join(', ')} ; 3857`\n    }\n  ];\n\n  // detect the current utm zone.\n  const utmZone = utmZoneFromLonLat(lonLat);\n  const epsgUtm = utmZone < 10 ? `EPSG:3260${utmZone}` : `EPSG:326${utmZone}`;\n  const utmName = `UTM-${utmZone}`;\n  const rawCoordUtm = olproj.transform(lonLat, 'EPSG:4326', epsgUtm) as [\n    number,\n    number\n  ];\n  convertedLonLat.push({\n    code: epsgUtm,\n    alias: 'UTM',\n    coord: rawCoordUtm,\n    igo2CoordFormat: `${utmName} ${roundCoordTo(rawCoordUtm).join(', ')}`\n  });\n\n  // detect the current mtm zone.\n  const mtmZone = mtmZoneFromLonLat(lonLat);\n  if (mtmZone) {\n    const epsgMtm =\n      mtmZone < 10 ? `EPSG:3218${mtmZone}` : `EPSG:321${80 + mtmZone}`;\n    const mtmName = `MTM-${mtmZone}`;\n    const rawCoordMtm = olproj.transform(lonLat, 'EPSG:4326', epsgMtm) as [\n      number,\n      number\n    ];\n    convertedLonLat.push({\n      code: epsgMtm,\n      alias: 'MTM',\n      coord: rawCoordMtm,\n      igo2CoordFormat: `${mtmName} ${roundCoordTo(rawCoordMtm).join(', ')}`\n    });\n  }\n\n  projections.forEach((projection) => {\n    const rawCoord = olproj.transform(lonLat, 'EPSG:4326', projection.code) as [\n      number,\n      number\n    ];\n    const numericEpsgCode = projection.code.split(':')[1];\n    convertedLonLat.push({\n      code: projection.code,\n      alias: projection.alias || projection.code,\n      coord: rawCoord,\n      igo2CoordFormat: `${roundCoordTo(rawCoord).join(\n        ', '\n      )} ; ${numericEpsgCode}`\n    });\n  });\n\n  return convertedLonLat;\n}\n\n/**\n * Detect the current utm zone of the lon/lat coordinate.\n * @param lonLat [number, number] array of the coordinate to detect the UTM zone.\n * @returns number The UTM zone.\n */\nexport function utmZoneFromLonLat(lonLat: [number, number]) {\n  return Math.ceil((lonLat[0] + 180) / 6);\n}\n\n/**\n * Detect the current mtm zone of the lon/lat coordinate.\n * @param lonLat [number, number] array of the coordinate to detect the MTM zone.\n * @returns number The MTM zone. Undefined if outside of the mtm application zone.\n */\nexport function mtmZoneFromLonLat(lonLat: [number, number]) {\n  const long = lonLat[0];\n  let mtmZone;\n  if (long < -51 && long > -54) {\n    mtmZone = 1;\n  }\n  if (long < -54 && long > -57) {\n    mtmZone = 2;\n  }\n  if (long < -57 && long > -60) {\n    mtmZone = 3;\n  }\n  if (long < -60 && long > -63) {\n    mtmZone = 4;\n  }\n  if (long < -63 && long > -66) {\n    mtmZone = 5;\n  }\n  if (long < -66 && long > -69) {\n    mtmZone = 6;\n  }\n  if (long < -69 && long > -72) {\n    mtmZone = 7;\n  }\n  if (long < -72 && long > -75) {\n    mtmZone = 8;\n  }\n  if (long < -75 && long > -78) {\n    mtmZone = 9;\n  }\n  if (long < -78 && long > -81) {\n    mtmZone = 10;\n  }\n  return mtmZone;\n}\n","import type {\n  AnyLayer,\n  AnyLayerItemOptions,\n  AnyLayerOptions,\n  Layer,\n  LayerGroup,\n  LayerGroupOptions,\n  VectorTileLayerOptions\n} from '../shared/layers';\n\ntype SortDirection = 'asc' | 'desc';\n\nexport function isLayerGroupOptions(\n  option: AnyLayerOptions\n): option is LayerGroupOptions {\n  return (option as LayerGroupOptions).type === 'group';\n}\n\nexport function isLayerItemOptions(\n  options: AnyLayerOptions\n): options is AnyLayerItemOptions {\n  return 'source' in options || 'sourceOptions' in options;\n}\n\nexport function isLayerGroup(layer: AnyLayer): layer is LayerGroup {\n  return layer.type === 'group';\n}\n\nexport function isLayerItem(layer: AnyLayer): layer is Layer {\n  return !isLayerGroup(layer);\n}\n\nexport function isBaseLayer(layer: AnyLayer): layer is Layer {\n  return isLayerItem(layer) && layer.baseLayer;\n}\n\nfunction isInternalLayer(layer: AnyLayer): boolean {\n  return layer.isIgoInternalLayer;\n}\n\nexport function computeMVTOptionsOnHover(layerOptions: AnyLayerItemOptions) {\n  const vectorTileLayerOptions = layerOptions as VectorTileLayerOptions;\n  if (\n    vectorTileLayerOptions.sourceOptions?.type === 'mvt' &&\n    (vectorTileLayerOptions.igoStyle?.styleByAttribute?.hoverStyle ||\n      vectorTileLayerOptions.igoStyle?.hoverStyle)\n  ) {\n    const fc = vectorTileLayerOptions.sourceOptions.featureClass;\n    vectorTileLayerOptions.sourceOptions.featureClass = fc ? fc : 'feature';\n  }\n  return layerOptions;\n}\n\nexport function isSaveableLayer(layer: Layer): boolean {\n  if (isBaseLayer(layer) && !layer.visible) {\n    return false;\n  }\n\n  if (isInternalLayer(layer)) {\n    return false;\n  }\n\n  if (layer.options.sourceOptions?.type) {\n    return true;\n  }\n}\n\n/** Recursive */\nexport function sortLayersByZindex(\n  layers: AnyLayer[],\n  direction: SortDirection\n): AnyLayer[] {\n  return layers\n    .sort(direction === 'desc' ? sortLayerByZIndexDesc : sortLayerByZIndexAsc)\n    .map((layer) => {\n      if (isLayerGroup(layer)) {\n        sortLayersByZindex([...layer.children], direction);\n      }\n      return layer;\n    });\n}\n\nfunction sortLayerByZIndexDesc(layer1: AnyLayer, layer2: AnyLayer) {\n  return layer2.zIndex - layer1.zIndex;\n}\n\nfunction sortLayerByZIndexAsc(layer1: AnyLayer, layer2: AnyLayer) {\n  return layer1.zIndex - layer2.zIndex;\n}\n","import { AnyLayer } from '../shared';\nimport { OutputLayerLegend } from '../shared/layers/legend.interface';\nimport { isLayerGroup } from './layer.utils';\n\n/**\n * Get all the layers legend\n * @return Array of legend\n */\nexport function getLayersLegends(layers: AnyLayer[]): OutputLayerLegend[] {\n  const legends = [];\n\n  for (const layer of layers) {\n    if (isLayerGroup(layer)) {\n      continue;\n    }\n    const legendOptions = layer.options.legendOptions;\n    if (layer.visible === false) {\n      continue;\n    }\n\n    const legendUrls = layer.dataSource.getLegend() || [];\n    for (const legendUrl of legendUrls) {\n      if (legendUrl.url === undefined) {\n        continue;\n      }\n\n      // Add legend info to the list\n      legends.push({\n        title: layer.title || '',\n        url: legendUrl.url,\n        display:\n          legendOptions?.display === undefined ? true : legendOptions.display,\n        isInResolutionsRange: layer.isInResolutionsRange\n      });\n    }\n  }\n\n  return legends;\n}\n","/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016-2017 Dan \"Ducky\" Little\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport default function jsGeoPdfPlugin(jsPDFAPI) {\n  const setGeoArea = function (pdfExt, geoExt) {\n    const bbox = pdfExt.join(' ');\n    // the ordering may seem odd here but PDF\n    //  flips the Y axis upside down and this accounts for that\n    //  change.\n    const minx = geoExt[0];\n    const maxx = geoExt[2];\n    const maxy = geoExt[1];\n    const miny = geoExt[3];\n    const bounds = [miny, minx, maxy, minx, maxy, maxx, miny, maxx].join(' ');\n    const bbox_obj = this.internal.newAdditionalObject();\n    const bounds_obj = this.internal.newAdditionalObject();\n    const proj_obj = this.internal.newAdditionalObject();\n\n    proj_obj.content =\n      '<< /EPSG 3857 /Type /PROJCS /WKT (PROJCS[\"WGS_1984_Web_Mercator_Auxiliary_Sphere\"' +\n      ',GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]' +\n      ',UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Mercator_Auxiliary_Sphere\"],PARAMETER[\"False_Easting\",0.0]' +\n      ',PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",0.0],PARAMETER[\"Standard_Parallel_1\",0.0]' +\n      ',PARAMETER[\"Auxiliary_Sphere_Type\",0.0],UNIT[\"Meter\",1.0]]) >>';\n\n    bounds_obj.content =\n      '<< /Bounds [ 0 1 0 0 1 0 1 1 ] /GCS ' +\n      proj_obj.objId +\n      ' 0 R /GPTS [ ' +\n      bounds +\n      ' ] /LPTS [ 0 1 0 0 1 0 1 1 ] /Subtype /GEO /Type /Measure >>';\n\n    bbox_obj.content =\n      '<< /BBox [ ' +\n      bbox +\n      ' ] /Measure ' +\n      bounds_obj.objId +\n      ' 0 R /Name (Layer) /Type /Viewport >>';\n\n    const title_obj = this.internal.newAdditionalObject();\n    const date = new Date().toLocaleDateString('en-CA');\n    title_obj.content = '<< /Name IGO2 /Type /OCG /Date ' + date + ' >>';\n\n    return bbox_obj.objId;\n  };\n\n  jsPDFAPI.setGeoArea = function (pdfExt, geoExt) {\n    this.internal.events.subscribe('putPage', function () {\n      const bbox_id = setGeoArea.call(this, pdfExt, geoExt);\n      this.internal.write('/VP [ ' + bbox_id + ' 0 R ]');\n    });\n  };\n}\n","import { strEnum } from '@igo2/utils';\n\nexport const PrintOutputFormat = strEnum(['Pdf', 'Image']);\n\nexport type PrintOutputFormat = keyof typeof PrintOutputFormat;\n\nexport const PrintPaperFormat = strEnum([\n  'A0',\n  'A1',\n  'A2',\n  'A3',\n  'A4',\n  'A5',\n  'Letter',\n  'Legal'\n]);\nexport type PrintPaperFormat = keyof typeof PrintPaperFormat;\n\nexport const PrintOrientation = strEnum(['landscape', 'portrait']);\nexport type PrintOrientation = keyof typeof PrintOrientation;\n\nexport const PrintResolution = ['72', '96', '150', '300'] as const;\nexport type PrintResolution = (typeof PrintResolution)[number];\n\nexport const PrintSaveImageFormat = strEnum([\n  'Bmp',\n  'Gif',\n  'Jpeg',\n  'Png',\n  'Tiff'\n]);\nexport type PrintSaveImageFormat = keyof typeof PrintSaveImageFormat;\n\nexport const PrintLegendPosition = strEnum([\n  'none',\n  'topright',\n  'topleft',\n  'bottomleft',\n  'bottomright',\n  'newpage'\n]);\nexport type PrintLegendPosition = keyof typeof PrintLegendPosition;\n","import { DOCUMENT } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { SecureImagePipe } from '@igo2/common/image';\nimport { ActivityService } from '@igo2/core/activity';\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { SubjectStatus } from '@igo2/utils';\n\nimport { saveAs } from 'file-saver';\nimport html2canvas from 'html2canvas';\nimport jsPDF from 'jspdf';\nimport { default as JSZip } from 'jszip';\nimport { Observable, Subject, forkJoin } from 'rxjs';\nimport { map as rxMap } from 'rxjs/operators';\n\nimport { getLayersLegends } from '../../layer/utils/outputLegend';\nimport { IgoMap } from '../../map/shared/map';\nimport { formatScale } from '../../map/shared/map.utils';\nimport GeoPdfPlugin from './geopdf';\nimport { PrintOptions, TextPdfSizeAndMargin } from './print.interface';\nimport {\n  PrintLegendPosition,\n  PrintPaperFormat,\n  PrintResolution\n} from './print.type';\n\ndeclare global {\n  interface Navigator {\n    msSaveBlob?: (blob: any, defaultName?: string) => boolean;\n  }\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PrintService {\n  zipFile: JSZip;\n  nbFileToProcess: number;\n  activityId: string;\n  mapPrintExtent: number[];\n  imgSizeAdded: number[];\n\n  TEXTPDFFONT = {\n    titleFont: 'times',\n    titleFontStyle: 'bold',\n    subtitleFont: 'times',\n    subtitleFontStyle: 'bold',\n    commentFont: 'times',\n    commentFontStyle: 'normal',\n    commentFontSize: 12\n  };\n\n  constructor(\n    private http: HttpClient,\n    private messageService: MessageService,\n    private activityService: ActivityService,\n    private languageService: LanguageService,\n    private configService: ConfigService,\n    @Inject(DOCUMENT) private document: Document\n  ) {}\n\n  print(map: IgoMap, options: PrintOptions): Subject<any> {\n    const status$ = new Subject();\n    const paperFormat: string = options.paperFormat;\n    const resolution = +options.resolution; // Default is 96\n    const orientation = options.orientation;\n    const legendPostion = options.legendPosition;\n    this.activityId = this.activityService.register();\n\n    GeoPdfPlugin(jsPDF.API);\n\n    const doc = new jsPDF({\n      orientation,\n      format: paperFormat.toLowerCase(),\n      unit: 'mm' // default\n    });\n\n    const { width: pageWidth, height: pageHeight } = doc.internal.pageSize;\n\n    /** top | right | bottom | left */\n    const baseMargins: [number, number, number, number] = [10, 10, 10, 10];\n\n    let titleSizes: TextPdfSizeAndMargin;\n    let subtitleSizes: TextPdfSizeAndMargin;\n\n    // if paper format A1 or A0 add margin top\n    if (\n      (options.title !== '' || options.subtitle !== '') &&\n      (paperFormat === PrintPaperFormat.A1 ||\n        paperFormat === PrintPaperFormat.A0)\n    ) {\n      baseMargins[0] += 10;\n    }\n    // PDF title\n    const fontSizeInPt = Math.round(2 * (pageHeight + 145) * 0.05) / 2; //calculate the fontSize title from the page height.\n    if (options.title !== undefined && options.title !== '') {\n      titleSizes = this.getTextPdfObjectSizeAndMarg(\n        options.title,\n        baseMargins,\n        this.TEXTPDFFONT.titleFont,\n        fontSizeInPt,\n        this.TEXTPDFFONT.titleFontStyle,\n        doc\n      );\n\n      this.addTextInPdfDoc(\n        doc,\n        options.title,\n        this.TEXTPDFFONT.titleFont,\n        this.TEXTPDFFONT.titleFontStyle,\n        titleSizes.fontSize,\n        titleSizes.marginLeft + baseMargins[3],\n        baseMargins[0]\n      );\n\n      baseMargins[0] = titleSizes.height + baseMargins[0]; // cumulative margin top for next elem to place in pdf doc\n    }\n\n    // PDF subtitle\n    if (options.subtitle !== undefined && options.subtitle !== '') {\n      subtitleSizes = this.getTextPdfObjectSizeAndMarg(\n        options.subtitle,\n        baseMargins,\n        this.TEXTPDFFONT.subtitleFont,\n        options.title !== '' ? titleSizes.fontSize * 0.7 : fontSizeInPt * 0.7, // 70% size of title\n        this.TEXTPDFFONT.subtitleFontStyle,\n        doc\n      );\n\n      this.addTextInPdfDoc(\n        doc,\n        options.subtitle,\n        this.TEXTPDFFONT.subtitleFont,\n        this.TEXTPDFFONT.subtitleFontStyle,\n        subtitleSizes.fontSize,\n        subtitleSizes.marginLeft + baseMargins[3],\n        baseMargins[0]\n      );\n\n      baseMargins[0] += 5; // cumulative marg top for next elem to place in pdf doc. 5 is a fix it could be adjust\n    }\n\n    const verticalSpacing = 5;\n    if (options.comment !== undefined && options.comment !== '') {\n      this.addComment(doc, options.comment, baseMargins, verticalSpacing);\n    }\n\n    this.handleFooter(\n      map,\n      doc,\n      options,\n      resolution,\n      verticalSpacing,\n      baseMargins\n    );\n\n    const width = pageWidth - baseMargins[3] - baseMargins[1];\n    const height = pageHeight - baseMargins[0] - baseMargins[2];\n    const size: [number, number] = [width, height];\n\n    this.addMap(doc, map, resolution, size, baseMargins).subscribe(\n      async (status: SubjectStatus) => {\n        if (status === SubjectStatus.Done) {\n          const width = this.imgSizeAdded[0];\n          const height = this.imgSizeAdded[1];\n          this.addGeoRef(doc, map, width, height, baseMargins);\n          await this.handleMeasureLayer(doc, map, baseMargins);\n          if (options.showNorthArrow) {\n            const northArrowCanvas = await this.createNorthDirectionArrow(\n              map.viewController.getRotation()\n            );\n            await this.addNorthArrowInDoc(\n              doc,\n              northArrowCanvas,\n              baseMargins,\n              legendPostion,\n              width\n            );\n          }\n\n          if (options.legendPosition !== 'none') {\n            if (\n              ['topleft', 'topright', 'bottomleft', 'bottomright'].indexOf(\n                options.legendPosition\n              ) > -1\n            ) {\n              await this.addLegendSamePage(\n                doc,\n                map,\n                baseMargins,\n                resolution,\n                options.legendPosition\n              );\n            } else if (options.legendPosition === 'newpage') {\n              await this.addLegend(doc, map, baseMargins, resolution);\n            }\n          } else {\n            await this.saveDoc(doc);\n          }\n        }\n\n        if (status === SubjectStatus.Done || status === SubjectStatus.Error) {\n          this.activityService.unregister(this.activityId);\n          status$.next(SubjectStatus.Done);\n        }\n      }\n    );\n\n    return status$;\n  }\n  // ref GeoMoose https://github.com/geomoose/gm3/tree/main/src/gm3/components/print\n  addGeoRef(\n    doc,\n    map: IgoMap,\n    width: number,\n    height: number,\n    baseMargins: [number, number, number, number]\n  ) {\n    const unit = 'mm';\n    const docHeight = doc.internal.pageSize.getHeight();\n\n    // x,y = margin left-bottom corner for img in pdf doc\n    const x = baseMargins[3];\n    const y = docHeight - baseMargins[0] - height;\n\n    const pdf_extents = [x, y, x + width, y + height];\n    for (let i = 0; i < pdf_extents.length; i++) {\n      pdf_extents[i] = this.pdf_units2points(pdf_extents[i], unit);\n    }\n    doc.setGeoArea(pdf_extents, this.mapPrintExtent);\n  }\n\n  /**\n   * Add measure overlay on the map on the document when the measure layer is present\n   * @param  doc - Pdf document where measure tooltip will be added\n   * @param  map - Map of the app\n   * @param  baseMargins - Page margins\n   */\n  private async handleMeasureLayer(\n    doc: jsPDF,\n    map: IgoMap,\n    baseMargins: [number, number, number, number]\n  ) {\n    if (\n      map.layerController.all.find(\n        (layer) => layer.visible && layer.id.startsWith('igo-measures-')\n      )\n    ) {\n      let canvasOverlayHTMLMeasures;\n      const mapOverlayMeasuresHTML = map.ol.getOverlayContainer();\n      await html2canvas(mapOverlayMeasuresHTML, {\n        scale: 1,\n        backgroundColor: null\n      }).then((e) => {\n        canvasOverlayHTMLMeasures = e;\n      });\n      this.addCanvas(doc, canvasOverlayHTMLMeasures, baseMargins); // this adds measure overlays\n    }\n  }\n\n  /**\n   * Get html code for all layers legend\n   * @param  map IgoMap\n   * @param  width The width that the legend need to be\n   * @return Html code for the legend\n   */\n  getLayersLegendHtml(map: IgoMap, width: number): Observable<string> {\n    return new Observable((observer) => {\n      let html = '';\n      const legends = getLayersLegends(map.layerController.all);\n\n      if (legends.filter((l) => l.display === true).length === 0) {\n        observer.next(html);\n        observer.complete();\n        return;\n      }\n      // Define important style to be sure that all container is convert\n      // to image not just visible part\n      html += '<style media=\"screen\" type=\"text/css\">';\n      html +=\n        '.html2canvas-container { width: ' +\n        width +\n        'mm !important; height: 2000px !important; }';\n      html += 'table.tableLegend {table-layout: auto;}';\n      html +=\n        'div.styleLegend {padding-top: 5px; padding-right:5px;padding-left:5px;padding-bottom:5px;}';\n      html += '</style>';\n      // The font size will also be lowered afterwards (globally along the legend size)\n      // this allows having a good relative font size here and to keep ajusting the legend size\n      // while keeping good relative font size\n      html += '<font size=\"3\" face=\"Times\" >';\n      html += '<div class=\"styleLegend\">';\n      html += '<table class=\"tableLegend\" >';\n\n      // For each legend, define an html table cell\n      const images$ = legends\n        .filter((l) => l.display && l.isInResolutionsRange === true)\n        .map((legend) =>\n          this.getDataImage(legend.url).pipe(\n            rxMap((dataImage) => {\n              let htmlImg =\n                '<tr><td>' + legend.title.toUpperCase() + '</td></tr>';\n              htmlImg += '<tr><td><img src=\"' + dataImage + '\"></td></tr>';\n              return htmlImg;\n            })\n          )\n        );\n      forkJoin(images$).subscribe((dataImages) => {\n        html = dataImages.reduce((acc, current) => (acc += current), html);\n        html += '</table>';\n        html += '</div>';\n        observer.next(html);\n        observer.complete();\n      });\n    });\n  }\n\n  getDataImage(url: string): Observable<string> {\n    const secureIMG = new SecureImagePipe(this.http, this.configService);\n    return secureIMG.transform(url);\n  }\n\n  /**\n   * Get all the legend in a single image\n   * * @param  format - Image format. default value to \"png\"\n   * @return The image of the legend\n   */\n  async getLayersLegendImage(map, format = 'png', doZipFile: boolean) {\n    const status$ = new Subject();\n    // Get html code for the legend\n    const width = 200; // milimeters unit, originally define for document pdf\n    let html = await this.getLayersLegendHtml(map, width).toPromise();\n    format = format.toLowerCase();\n\n    // If no legend show No LEGEND in an image\n    if (html.length === 0) {\n      html = '<font size=\"12\" face=\"Courier New\" >';\n      html += '<div align=\"center\"><b>NO LEGEND</b></div>';\n    }\n    // Create div to contain html code for legend\n    const div = window.document.createElement('div');\n    div.style.position = 'absolute';\n    div.style.top = '0';\n    div.style.zIndex = '-1';\n    // Add html code to convert in the new window\n    window.document.body.appendChild(div);\n    div.innerHTML = html;\n\n    await this.timeout(1);\n    const canvas = await html2canvas(div, { useCORS: true }).catch((e) => {\n      console.log(e);\n    });\n    this.removeHtmlElement(div);\n    if (canvas) {\n      let status = SubjectStatus.Done;\n      try {\n        if (!doZipFile) {\n          // Save the canvas as file\n          this.saveCanvasImageAsFile(canvas, 'legendImage', format);\n        } else {\n          // Add the canvas to zip\n          this.generateCanvaFileToZip(canvas, 'legendImage' + '.' + format);\n        }\n      } catch {\n        status = SubjectStatus.Error;\n      }\n      status$.next(status);\n    }\n\n    return status$;\n  }\n\n  private removeHtmlElement(element: HTMLElement) {\n    element.parentNode.removeChild(element);\n  }\n\n  getTextPdfObjectSizeAndMarg(\n    text: string,\n    margins,\n    font: string,\n    fontSizeInPt: number,\n    fontStyle: string,\n    doc: jsPDF\n  ): TextPdfSizeAndMargin {\n    const docWidth = doc.internal.pageSize.getWidth();\n    const pageWidth = docWidth - margins[1] - margins[3];\n\n    // important to set it first, the textDimension change when font change!\n    doc.setFont(font, fontStyle);\n    doc.setFontSize(fontSizeInPt);\n\n    let textDimensions = doc.getTextDimensions(text);\n    let textMarginLeft: number;\n\n    if (textDimensions.w > pageWidth) {\n      // if the text is to long, reduce fontSize 70% and the overflow with be cut in print...\n      textMarginLeft = 0;\n      fontSizeInPt = fontSizeInPt * 0.7;\n      doc.setFontSize(fontSizeInPt);\n      textDimensions = doc.getTextDimensions(text);\n    } else {\n      textMarginLeft = (pageWidth - textDimensions.w) / 2;\n    }\n\n    return {\n      fontSize: fontSizeInPt,\n      marginLeft: textMarginLeft,\n      height: textDimensions.h\n    };\n  }\n\n  /**\n   * Add comment to the document\n   * @param  doc - pdf document\n   * @param  comment - Comment to add in the document\n   * @param baseMargins - top | right | bottom | left\n   * @param verticalSpacing - calculate text position and map height\n   */\n  private addComment(\n    doc: jsPDF,\n    comment: string,\n    baseMargins: [number, number, number, number],\n    verticalSpacing: number\n  ) {\n    // calculate map image height\n    baseMargins[2] += verticalSpacing;\n\n    const xPosition = baseMargins[3]; //margin left and bottom is fix\n    const marginBottom = baseMargins[2];\n    // calculate text position Y\n    const yPosition =\n      doc.internal.pageSize.height - marginBottom + verticalSpacing;\n\n    this.addTextInPdfDoc(\n      doc,\n      comment,\n      this.TEXTPDFFONT.commentFont,\n      this.TEXTPDFFONT.commentFontStyle,\n      this.TEXTPDFFONT.commentFontSize,\n      xPosition,\n      yPosition,\n      true\n    );\n  }\n\n  private addTextInPdfDoc(\n    doc: jsPDF,\n    textToAdd: string,\n    textFont: string,\n    textFontStyle: string,\n    textFontSize: number,\n    textMarginLeft: number,\n    textMarginTop: number,\n    isComment = false\n  ) {\n    doc.setFont(textFont, textFontStyle);\n    doc.setFontSize(textFontSize);\n\n    if (isComment) {\n      textToAdd = doc.splitTextToSize(\n        textToAdd,\n        doc.internal.pageSize.getWidth() - textMarginLeft * 3\n      );\n    }\n    doc.text(textToAdd, textMarginLeft, textMarginTop);\n  }\n\n  /**\n   * Add attribution and/or (projection and/or scale) to the document\n   * @param  map - Map of the app\n   * @param  doc - pdf document\n   * @param  options - Print options\n   * @param  resolution - cart resolution\n   * @param baseMargins - top | right | bottom | left\n   * @param verticalSpacing - calculate text position and map height\n   */\n  private async handleFooter(\n    map: IgoMap,\n    doc: jsPDF,\n    options: PrintOptions,\n    resolution: number,\n    verticalSpacing: number,\n    baseMargins: [number, number, number, number]\n  ) {\n    let text = '';\n\n    const attributionText: string = this.getAttributionText(map);\n    if (attributionText) {\n      text += attributionText + '. ';\n    }\n    if (options.showProjection === true || options.showScale === true) {\n      text += this.getProjScale(map, options, resolution);\n    }\n\n    if (text) {\n      baseMargins[2] += verticalSpacing;\n    }\n\n    const xPosition = baseMargins[3];\n    const marginBottom = baseMargins[2];\n    // calculate text position Y\n    const yPosition =\n      doc.internal.pageSize.height - marginBottom + verticalSpacing;\n\n    this.addTextInPdfDoc(\n      doc,\n      text,\n      this.TEXTPDFFONT.commentFont,\n      this.TEXTPDFFONT.commentFontStyle,\n      this.TEXTPDFFONT.commentFontSize,\n      xPosition,\n      yPosition\n    );\n  }\n\n  getAttributionText(map: IgoMap): string {\n    const mapOverlayHtml = map.ol.getOverlayContainerStopEvent() as HTMLElement;\n    const htmlAttribution = mapOverlayHtml\n      .getElementsByClassName('ol-attribution')[0]\n      .cloneNode(true) as HTMLElement;\n    htmlAttribution.getElementsByTagName('button')[0].remove();\n    return htmlAttribution.innerText;\n  }\n\n  private getProjScale(\n    map: IgoMap,\n    options: PrintOptions,\n    dpi: number\n  ): string {\n    const translate = this.languageService.translate;\n    let textProjScale = '';\n    if (options.showProjection === true) {\n      const projText = translate.instant('igo.geo.printForm.projection');\n      textProjScale += projText + ': ' + map.projection;\n    }\n    if (options.showScale === true) {\n      if (options.showProjection === true) {\n        textProjScale += '   ';\n      }\n      const scaleText = translate.instant('igo.geo.printForm.scale');\n      const mapScale = map.viewController.getScale(dpi);\n      textProjScale += scaleText + ': ~ 1 / ' + formatScale(mapScale);\n    }\n    return textProjScale;\n  }\n\n  /**\n   * Add the legend to the document\n   * @param  doc - Pdf document where legend will be added\n   * @param  map - Map of the app\n   * @param  margins - Page margins\n   */\n  private async addLegend(\n    doc: jsPDF,\n    map: IgoMap,\n    margins: number[],\n    resolution: number\n  ) {\n    // Get html code for the legend\n    const width = doc.internal.pageSize.width;\n    const html = await this.getLayersLegendHtml(map, width).toPromise();\n    // If no legend, save the map directly\n    if (html === '') {\n      await this.saveDoc(doc);\n      return true;\n    }\n    // Create div to contain html code for legend\n    const div = window.document.createElement('div');\n    div.style.position = 'absolute';\n    div.style.top = '0';\n    div.style.zIndex = '-1';\n\n    // Add html code to convert in the new window\n    window.document.body.appendChild(div);\n    div.innerHTML = html;\n\n    await this.timeout(1);\n    const canvas = await html2canvas(div, { useCORS: true }).catch((e) => {\n      console.log(e);\n    });\n    this.removeHtmlElement(div);\n    if (canvas) {\n      const pourcentageReduction = 0.85;\n      const imageSize = [\n        (pourcentageReduction * (25.4 * canvas.width)) / resolution,\n        (pourcentageReduction * (25.4 * canvas.height)) / resolution\n      ];\n      doc.addPage();\n      const imgData = canvas.toDataURL('image/png');\n      doc.addImage(imgData, 'PNG', 10, 10, imageSize[0], imageSize[1]);\n    }\n\n    await this.saveDoc(doc);\n  }\n\n  /**\n   * Add the legend to the document\n   * @param  doc - Pdf document where legend will be added\n   * @param  map - Map of the app\n   * @param  baseMargins - Page margins\n   */\n  private async addLegendSamePage(\n    doc: jsPDF,\n    map: IgoMap,\n    baseMargins: [number, number, number, number],\n    resolution: number,\n    legendPosition: string\n  ) {\n    // Get html code for the legend\n    const width = doc.internal.pageSize.width;\n    const html = await this.getLayersLegendHtml(map, width).toPromise();\n    // If no legend, save the map directly\n    if (html === '') {\n      await this.saveDoc(doc);\n      return true;\n    }\n    // Create div to contain html code for legend\n    const div = window.document.createElement('div');\n    div.style.position = 'absolute';\n    div.style.top = '0';\n    div.style.zIndex = '-1';\n    // Add html code to convert in the new window\n    window.document.body.appendChild(div);\n    div.innerHTML = html;\n    await this.timeout(1);\n    const canvas = await html2canvas(div, { useCORS: true }).catch((e) => {\n      console.log(e);\n    });\n    this.removeHtmlElement(div);\n    let marginsLegend;\n    if (canvas) {\n      const pourcentageReduction = 0.85;\n      const imageSize = [\n        (pourcentageReduction * (25.4 * canvas.width)) / resolution,\n        (pourcentageReduction * (25.4 * canvas.height)) / resolution\n      ];\n      // Move the legend to the correct position on the page\n      if (legendPosition === 'bottomright') {\n        marginsLegend = [\n          doc.internal.pageSize.height - baseMargins[2] - imageSize[1],\n          baseMargins[1],\n          baseMargins[2],\n          doc.internal.pageSize.width - baseMargins[1] - imageSize[0]\n        ];\n      } else if (legendPosition === 'topright') {\n        marginsLegend = [\n          baseMargins[0],\n          baseMargins[1],\n          doc.internal.pageSize.height - baseMargins[0] - imageSize[1],\n          doc.internal.pageSize.width - baseMargins[1] - imageSize[0]\n        ];\n      } else if (legendPosition === 'bottomleft') {\n        // When the legend is in the bottom left, raise the legend slightly upward so that attributions are visible\n        marginsLegend = [\n          doc.internal.pageSize.height - baseMargins[2] - imageSize[1],\n          doc.internal.pageSize.width - baseMargins[3] - imageSize[0],\n          baseMargins[2],\n          baseMargins[3]\n        ];\n      } else if (legendPosition === 'topleft') {\n        marginsLegend = [\n          baseMargins[0],\n          doc.internal.pageSize.width - baseMargins[3] - imageSize[0],\n          doc.internal.pageSize.height - baseMargins[0] - imageSize[1],\n          baseMargins[3]\n        ];\n      }\n      this.addCanvas(doc, canvas, marginsLegend); // this adds the legend\n      await this.saveDoc(doc);\n    }\n  }\n\n  defineNbFileToProcess(nbFileToProcess) {\n    this.nbFileToProcess = nbFileToProcess;\n  }\n\n  private timeout(ms) {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n\n  private addCanvas(\n    doc: jsPDF,\n    canvas: HTMLCanvasElement,\n    baseMargins: [number, number, number, number]\n  ) {\n    let image;\n    if (canvas) {\n      image = canvas.toDataURL('image/png');\n    }\n\n    if (image !== undefined) {\n      if (image.length < 20) {\n        console.log('Warning: An image cannot be print in pdf file');\n        return;\n      }\n      const imageSize = this.getImageSizeToFitPdf(doc, canvas, baseMargins);\n      doc.addImage(\n        image,\n        'PNG',\n        baseMargins[3],\n        baseMargins[0],\n        imageSize[0],\n        imageSize[1]\n      );\n      doc.rect(baseMargins[3], baseMargins[0], imageSize[0], imageSize[1]);\n      this.imgSizeAdded = imageSize; // keep img size for georef later\n    }\n  }\n\n  // TODO fix printing with image resolution\n  addMap(\n    doc: jsPDF,\n    map: IgoMap,\n    resolution: number,\n    imageDimensions: [number, number],\n    baseMargins: [number, number, number, number]\n  ) {\n    const mapSize: number[] = map.ol.getSize();\n    const viewResolution: number = map.ol.getView().getResolution();\n    const dimensionPixels = this.setMapResolution(\n      map,\n      imageDimensions,\n      resolution,\n      viewResolution\n    );\n    const status$ = new Subject();\n\n    let timeout;\n    map.ol.once('rendercomplete', async (event: any) => {\n      const mapCanvas = event.target\n        .getViewport()\n        .getElementsByTagName('canvas') as HTMLCollectionOf<HTMLCanvasElement>;\n\n      const mapResultCanvas = await this.drawMap(dimensionPixels, mapCanvas);\n\n      this.mapPrintExtent = map.viewController.getExtent('EPSG:3857');\n\n      this.resetOriginalMapSize(map, mapSize, viewResolution);\n      await this.drawMapControls(map, mapResultCanvas);\n\n      const mapStatus$$ = map.status$.subscribe((mapStatus: SubjectStatus) => {\n        clearTimeout(timeout);\n        if (mapStatus !== SubjectStatus.Done) {\n          return;\n        }\n        mapStatus$$.unsubscribe();\n        let status = SubjectStatus.Done;\n        try {\n          if (mapResultCanvas.width !== 0) {\n            this.addCanvas(doc, mapResultCanvas, baseMargins);\n          }\n        } catch {\n          status = SubjectStatus.Error;\n          this.messageService.error(\n            'igo.geo.printForm.corsErrorMessageBody',\n            'igo.geo.printForm.corsErrorMessageHeader'\n          );\n        }\n        status$.next(status);\n      });\n\n      // If no loading as started after 200ms, then probably no loading\n      // is required.\n      timeout = window.setTimeout(() => {\n        mapStatus$$.unsubscribe();\n\n        let status = SubjectStatus.Done;\n        try {\n          if (mapResultCanvas.width !== 0) {\n            this.addCanvas(doc, mapResultCanvas, baseMargins);\n          }\n        } catch {\n          status = SubjectStatus.Error;\n          this.messageService.error(\n            'igo.geo.printForm.corsErrorMessageBody',\n            'igo.geo.printForm.corsErrorMessageHeader'\n          );\n        }\n        this.resetOriginalMapSize(map, mapSize, viewResolution);\n        status$.next(status);\n      }, 200);\n    });\n\n    return status$;\n  }\n\n  private setMapResolution(\n    map: IgoMap,\n    initialSize: [number, number],\n    resolution: number,\n    viewResolution: number\n  ): [number, number] {\n    const mapSize = map.ol.getSize();\n    const widthPixels = Math.round((initialSize[0] * resolution) / 25.4);\n    const heightPixels = Math.round((initialSize[1] * resolution) / 25.4);\n\n    // Set print size\n    const printSize = [widthPixels, heightPixels];\n    map.ol.setSize(printSize);\n    const scaling = Math.min(\n      widthPixels / mapSize[0],\n      heightPixels / mapSize[1]\n    );\n    map.ol.getView().setResolution(viewResolution / scaling);\n\n    return [widthPixels, heightPixels];\n  }\n\n  private resetOriginalMapSize(\n    map: IgoMap,\n    initialSize: number[],\n    viewResolution: number\n  ) {\n    map.ol.setSize(initialSize);\n    map.ol.getView().setResolution(viewResolution);\n    map.ol.updateSize();\n    map.ol.renderSync();\n  }\n\n  async drawMap(\n    size: number[],\n    mapCanvas: HTMLCollectionOf<HTMLCanvasElement>\n  ): Promise<HTMLCanvasElement> {\n    const mapResultCanvas = document.createElement('canvas');\n    mapResultCanvas.width = size[0];\n    mapResultCanvas.height = size[1];\n\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let index = 0; index < mapCanvas.length; index++) {\n      const canvas = mapCanvas[index];\n      if (canvas.width > 0) {\n        this.handleCanvas(canvas, mapResultCanvas);\n      }\n    }\n    return mapResultCanvas;\n  }\n\n  private handleCanvas(\n    canvas: HTMLCanvasElement,\n    mapResultCanvas: HTMLCanvasElement\n  ) {\n    const mapContextResult = mapResultCanvas.getContext('2d');\n    const opacity = canvas.parentElement.style.opacity || canvas.style.opacity;\n    mapContextResult.globalAlpha = opacity === '' ? 1 : Number(opacity);\n    const transform = canvas.style.transform;\n    let matrix: number[];\n    if (transform) {\n      // Get the transform parameters from the style's transform matrix\n      matrix = transform\n        .match(/^matrix\\(([^\\(]*)\\)$/)[1]\n        .split(',')\n        .map(Number);\n    } else {\n      matrix = [\n        parseFloat(canvas.style.width) / canvas.width,\n        0,\n        0,\n        parseFloat(canvas.style.height) / canvas.height,\n        0,\n        0\n      ];\n    }\n    CanvasRenderingContext2D.prototype.setTransform.apply(\n      mapContextResult,\n      matrix\n    );\n    const backgroundColor = canvas.parentElement.style.backgroundColor;\n    if (backgroundColor) {\n      mapContextResult.fillStyle = backgroundColor;\n      mapContextResult.fillRect(0, 0, canvas.width, canvas.height);\n    }\n    mapContextResult.drawImage(canvas, 0, 0);\n    mapContextResult.globalAlpha = 1;\n    // reset canvas transform to initial\n    mapContextResult.setTransform(1, 0, 0, 1, 0, 0);\n  }\n\n  async drawMapControls(map: IgoMap, canvas: HTMLCanvasElement): Promise<void> {\n    const context = canvas.getContext('2d');\n    // Get the scale and attribution\n    // we use cloneNode to modify the nodes to print without modifying it on the page, using deep:true to get children\n    const mapOverlayHTML = map.ol\n      .getOverlayContainerStopEvent()\n      .cloneNode(true) as HTMLElement;\n\n    // set 'OverlayContainer' size to print size\n    mapOverlayHTML.style.width = canvas.width + 'px';\n    mapOverlayHTML.style.height = canvas.height + 'px';\n    // we add zindex -1 to not show modification to the user\n    mapOverlayHTML.style.zIndex = '-1';\n    // and make sure html2canvas to render the image correctly\n    document\n      .getElementsByClassName('ol-viewport')[0]\n      .appendChild(mapOverlayHTML);\n    // Change the styles of hyperlink in the printed version\n    // Transform the Overlay into a canvas\n    // scale is necessary to make it in google chrome\n    // background as null because otherwise it is white and cover the map\n    // allowtaint is to allow rendering images in the attributions\n    // useCORS: true pour permettre de renderer les images (ne marche pas en local)\n    const canvasOverlayHTML = await html2canvas(mapOverlayHTML, {\n      scale: 1,\n      backgroundColor: null,\n      allowTaint: true,\n      useCORS: true,\n      ignoreElements: (element: Element) => {\n        return element instanceof HTMLElement\n          ? element.className.includes('ol-attribution')\n          : false;\n      }\n    });\n\n    if (canvasOverlayHTML.width !== 0 && canvasOverlayHTML.height !== 0) {\n      context.drawImage(canvasOverlayHTML, 0, 0);\n    }\n\n    // remove 'mapOverlayHTML' after generating canvas\n    mapOverlayHTML.remove();\n  }\n\n  private async addNorthArrowInDoc(\n    doc: jsPDF | CanvasRenderingContext2D,\n    arrawCanvas: HTMLCanvasElement,\n    baseMargins: [number, number, number, number],\n    legendPosition: PrintLegendPosition,\n    width: number,\n    yPosition = 0\n  ) {\n    let xPosition = 0;\n    let northArrowDimension = 0;\n    if (doc instanceof CanvasRenderingContext2D) {\n      northArrowDimension = 50;\n      xPosition =\n        legendPosition === 'topright' ? 0 : width - northArrowDimension;\n      doc.drawImage(\n        arrawCanvas,\n        xPosition,\n        yPosition,\n        northArrowDimension,\n        northArrowDimension\n      );\n    } else {\n      northArrowDimension = 16;\n      xPosition = legendPosition === 'topright' ? 10 : width - baseMargins[1];\n      yPosition = baseMargins[0];\n      doc.addImage(\n        arrawCanvas.toDataURL(),\n        xPosition,\n        yPosition,\n        northArrowDimension,\n        northArrowDimension\n      );\n    }\n  }\n\n  /**\n   * @param rotation - map rotation 'rad' unit\n   *\n   */\n  private async createNorthDirectionArrow(\n    rotation: number\n  ): Promise<HTMLCanvasElement> {\n    const div = this.document.createElement('div');\n    div.style.maxWidth = '50mm';\n    div.style.maxHeight = '50mm';\n    div.style.textAlign = 'center';\n\n    const img = this.document.createElement('img');\n    img.src = './assets/igo2/geo/images/north-direction.png';\n    img.style.maxWidth = '50mm';\n    img.style.maxHeight = '50mm';\n    img.style.transform = 'rotate(' + rotation + 'rad)';\n    img.style.padding = '5mm';\n    div.appendChild(img);\n    this.document.body.appendChild(div);\n    const canvas = await html2canvas(div, { backgroundColor: null });\n    this.removeHtmlElement(div);\n    if (canvas) {\n      return canvas;\n    }\n  }\n\n  /**\n   * Download an image of the map with addition of informations\n   * @param  map - Map of the app\n   * @param  format - Image format. default value to \"png\"\n   * @param  projection - Indicate if projection need to be add. Default to false\n   * @param  scale - Indicate if scale need to be add. Default to false\n   * @param  legend - Indicate if the legend of layers need to be download. Default to false\n   * @param  title - Title to add for the map - Default to blank\n   * @param  subtitle - Subtitle to add for the map - Default to blank\n   * @param  comment - Comment to add for the map - Default to blank\n   * @param  doZipFile - Indicate if we do a zip with the file\n   * @return Image file of the map with extension format given as parameter\n   */\n  downloadMapImage(\n    map: IgoMap,\n    printResolution: PrintResolution,\n    format = 'png',\n    projection = false,\n    scale = false,\n    title = '',\n    subtitle = '',\n    comment = '',\n    doZipFile = true,\n    legendPosition: PrintLegendPosition,\n    showNorthArrow: boolean\n  ) {\n    const status$ = new Subject();\n    this.activityId = this.activityService.register();\n    const translate = this.languageService.translate;\n    format = format.toLowerCase();\n    const resolution = +printResolution;\n    const initialMapSize = map.ol.getSize() as [number, number];\n    const viewResolution = map.ol.getView().getResolution();\n\n    map.ol.once('rendercomplete', async (event: any) => {\n      const size = map.ol.getSize();\n      const mapCanvas = event.target\n        .getViewport()\n        .getElementsByTagName('canvas') as HTMLCollectionOf<HTMLCanvasElement>;\n      const mapResultCanvas = await this.drawMap(size, mapCanvas);\n\n      this.resetOriginalMapSize(map, initialMapSize, viewResolution);\n\n      await this.drawMapControls(map, mapResultCanvas);\n\n      // Check the legendPosition\n      if (legendPosition !== 'none') {\n        if (\n          ['topleft', 'topright', 'bottomleft', 'bottomright'].indexOf(\n            legendPosition\n          ) > -1\n        ) {\n          await this.addLegendToImage(\n            mapResultCanvas,\n            map,\n            resolution,\n            legendPosition,\n            format\n          );\n        } else if (legendPosition === 'newpage') {\n          await this.getLayersLegendImage(map, format, doZipFile);\n        }\n      }\n      // add other information to final canvas before exporting\n      const newCanvas = document.createElement('canvas');\n      const newContext = newCanvas.getContext('2d');\n      // Postion in height to set the canvas in new canvas\n      let positionHCanvas = 0;\n      // Get height/width of map canvas\n      const width = mapResultCanvas.width;\n      let height = mapResultCanvas.height;\n      // Set Font to calculate comment width\n      newContext.font = '20px Calibri';\n      const commentWidth = newContext.measureText(comment).width;\n      // Add height for title if defined\n      height = title !== '' ? height + 30 : height;\n      // Add height for title if defined\n      height = subtitle !== '' ? height + 30 : height;\n      // Add height for projection or scale (same line) if defined\n      height = projection !== false || scale !== false ? height + 30 : height;\n      const positionHProjScale = height - 10;\n      // Define number of line depending of the comment length\n      const commentNbLine = Math.ceil(commentWidth / width);\n      // Add height for multiline comment if defined\n      height = comment !== '' ? height + commentNbLine * 30 : height;\n      let positionHComment = height - commentNbLine * 20 + 5;\n      // Set the new canvas with the new calculated size\n      newCanvas.width = width;\n      newCanvas.height = height;\n\n      if (['bmp', 'gif', 'jpeg', 'png', 'tiff'].indexOf(format) > -1) {\n        // Patch Jpeg default black background to white\n        if (\n          format === 'jpeg' ||\n          title !== '' ||\n          subtitle !== '' ||\n          comment !== '' ||\n          projection !== false ||\n          scale !== false\n        ) {\n          newContext.fillStyle = '#ffffff';\n          newContext.fillRect(0, 0, width, height);\n          newContext.fillStyle = '#000000';\n        }\n      }\n      // If a title need to be added to canvas\n      if (title !== '') {\n        // Set font for title\n        // Adjust according to title length\n        newContext.font = '26px Calibri';\n        positionHCanvas = 30;\n        newContext.textAlign = 'center';\n        newContext.fillText(title, width / 2, 20, width * 0.9);\n      }\n\n      if (subtitle !== '') {\n        // Set font for subtitle\n        // Adjust according to title length\n        newContext.font = '26px Calibri';\n        positionHCanvas = 60;\n        newContext.textAlign = 'center';\n        newContext.fillText(subtitle, width / 2, 50, width * 0.9);\n      }\n\n      // Set font for next section\n      newContext.font = '20px Calibri';\n      // If projection or/end scale need to be added to canvas\n      if (projection !== false || scale !== false) {\n        let projectionScaleText = '';\n        if (projection !== false) {\n          const projText = translate.instant('igo.geo.printForm.projection');\n          projectionScaleText = projText + ': ' + map.projection + '         ';\n        }\n\n        if (scale !== false) {\n          const scaleText = translate.instant('igo.geo.printForm.scale');\n          const mapScale = map.viewController.getScale(resolution);\n          projectionScaleText += scaleText + ': ~ 1 / ' + formatScale(mapScale);\n        }\n        newContext.textAlign = 'center';\n        newContext.fillText(\n          projectionScaleText,\n          width / 2,\n          positionHProjScale,\n          width * 0.9\n        );\n      }\n\n      // If a comment need to be added to canvas\n      if (comment !== '') {\n        newContext.textAlign = 'center';\n        // If only one line, no need to multiline the comment\n        if (commentNbLine === 1) {\n          newContext.fillText(comment, width / 2, positionHComment);\n        } else {\n          // Separate the setenses to be approx. the same length\n          const nbCommentChar = comment.length;\n          const CommentLengthToCut = Math.floor(nbCommentChar / commentNbLine);\n          let commentCurrentLine = '';\n          let positionFirstCutChar = 0;\n          let positionLastBlank;\n          // Loop for the number of line calculated\n          for (let i = 0; i < commentNbLine; i++) {\n            // For all line except last\n            if (commentNbLine - 1 > i) {\n              // Get comment current line to find the right place tu cut comment\n              commentCurrentLine = comment.substr(\n                positionFirstCutChar,\n                CommentLengthToCut\n              );\n              // Cut the setence at blank\n              positionLastBlank = commentCurrentLine.lastIndexOf(' ');\n              newContext.fillText(\n                commentCurrentLine.substr(0, positionLastBlank),\n                width / 2,\n                positionHComment\n              );\n              positionFirstCutChar += positionLastBlank;\n              // Go to next line for insertion\n              positionHComment += 20;\n            } else {\n              // Don't cut last part\n              newContext.fillText(\n                comment.substr(positionFirstCutChar),\n                width / 2,\n                positionHComment\n              );\n            }\n          }\n        }\n      }\n\n      newContext.drawImage(mapResultCanvas, 0, positionHCanvas);\n\n      if (showNorthArrow) {\n        const northArrowCanvas = await this.createNorthDirectionArrow(\n          map.viewController.getRotation()\n        );\n        await this.addNorthArrowInDoc(\n          newContext,\n          northArrowCanvas,\n          null,\n          legendPosition,\n          width,\n          positionHCanvas\n        );\n      }\n\n      let status = SubjectStatus.Done;\n      let fileNameWithExt = 'map.' + format;\n      if (format.toLowerCase() === 'tiff') {\n        fileNameWithExt =\n          'map' + map.projection.replace(':', '_') + '.' + format;\n      }\n\n      try {\n        // Save the canvas as file\n        if (!doZipFile) {\n          this.saveCanvasImageAsFile(newCanvas, fileNameWithExt, format);\n        } else if (format.toLowerCase() === 'tiff') {\n          // Add the canvas to zip\n          this.generateCanvaFileToZip(newCanvas, fileNameWithExt);\n        } else {\n          // Add the canvas to zip\n          this.generateCanvaFileToZip(newCanvas, fileNameWithExt);\n        }\n      } catch {\n        status = SubjectStatus.Error;\n      }\n      status$.next(status);\n\n      if (format.toLowerCase() === 'tiff') {\n        const tfwFileNameWithExt =\n          fileNameWithExt.substring(\n            0,\n            fileNameWithExt.toLowerCase().indexOf('.tiff')\n          ) + '.tfw';\n        const tiwContent = this.getWorldFileInformation(map);\n        const blob = new Blob([tiwContent], {\n          type: 'text/plain;charset=utf-8'\n        });\n        if (!doZipFile) {\n          // saveAs automaticly replace ':' for '_'\n          saveAs(blob, tfwFileNameWithExt);\n          this.saveFileProcessing();\n        } else {\n          // Add the canvas to zip\n          this.addFileToZip(tfwFileNameWithExt, blob);\n        }\n      }\n    });\n\n    this.setMapImageResolution(map, initialMapSize, resolution, viewResolution);\n\n    return status$;\n  }\n\n  private setMapImageResolution(\n    map: IgoMap,\n    initialMapSize: [number, number],\n    resolution: number,\n    viewResolution: number\n  ): void {\n    const scaleFactor = resolution / 96;\n    const newMapSize = [\n      Math.round(initialMapSize[0] * scaleFactor), // width\n      Math.round(initialMapSize[1] * scaleFactor) // height\n    ];\n    map.ol.setSize(newMapSize);\n    const scaling = Math.min(\n      newMapSize[0] / initialMapSize[0],\n      newMapSize[1] / initialMapSize[1]\n    );\n    const view = map.ol.getView();\n    view.setResolution(viewResolution / scaling);\n    map.ol.renderSync();\n  }\n\n  /**\n   * Create and Add Legend to the map canvas\n   * @param  canvas Canvas of the map\n   * @param  map Map of the app\n   * @param  resolution Resolution of map\n   * @param  legendPosition Legend position\n   * @param  format Image format\n   */\n  private async addLegendToImage(\n    canvas: HTMLCanvasElement,\n    map: IgoMap,\n    resolution: number,\n    legendPosition: string,\n    format: string\n  ) {\n    const fileNameWithExt = 'map.' + format;\n    const context = canvas.getContext('2d');\n\n    // Get html code for the legend\n    const html = await this.getLayersLegendHtml(map, canvas.width).toPromise();\n    // If no legend, save the map directly\n    if (html === '') {\n      await this.saveCanvasImageAsFile(canvas, fileNameWithExt, format);\n      return true;\n    }\n    // Create div to contain html code for legend\n    const div = window.document.createElement('div');\n    div.style.position = 'absolute';\n    div.style.top = '0';\n    div.style.zIndex = '-1';\n    // Add html code to convert in the new window\n    window.document.body.appendChild(div);\n    div.innerHTML = html;\n    await this.timeout(1);\n    const canvasLegend = await html2canvas(div, { useCORS: true }).catch(\n      (e) => {\n        console.log(e);\n      }\n    );\n\n    if (canvasLegend) {\n      const canvasHeight = canvas.height;\n      const canvasWidth = canvas.width;\n      const legendHeight = canvasLegend.height;\n      const legendWidth = canvasLegend.width;\n      // Move the legend to the correct position on the page\n      const offset = canvasHeight * 0.01;\n      let legendX: number;\n      let legendY: number;\n\n      if (legendPosition === 'bottomright') {\n        legendX = canvasWidth - legendWidth - offset;\n        legendY = canvasHeight - legendHeight - offset;\n      } else if (legendPosition === 'topright') {\n        legendX = canvasWidth - legendWidth - offset;\n        legendY = offset;\n      } else if (legendPosition === 'bottomleft') {\n        legendX = offset;\n        legendY = canvasHeight - legendHeight - offset - 15;\n      } else if (legendPosition === 'topleft') {\n        legendX = offset;\n        legendY = offset;\n      }\n\n      context.drawImage(\n        canvasLegend,\n        legendX,\n        legendY,\n        legendWidth,\n        legendHeight\n      );\n      context.strokeRect(legendX, legendY, legendWidth, legendHeight);\n      this.removeHtmlElement(div);\n      return true;\n    }\n  }\n\n  /**\n   * Save document\n   * @param  doc - Document to save\n   */\n  protected async saveDoc(doc: jsPDF) {\n    await doc.save('map_georef.pdf', { returnPromise: true });\n  }\n\n  /**\n   * Calculate the best Image size to fit in pdf\n   * @param doc - Pdf Document\n   * @param canvas - Canvas of image\n   * @param margins - Page margins\n   */\n  getImageSizeToFitPdf(doc, canvas, margins) {\n    // Define variable to calculate best size to fit in one page\n    const pageHeight =\n      doc.internal.pageSize.getHeight() - (margins[0] + margins[2]);\n    const pageWidth =\n      doc.internal.pageSize.getWidth() - (margins[1] + margins[3]);\n    const canHeight = this.pdf_units2points(canvas.height, 'mm');\n    const canWidth = this.pdf_units2points(canvas.width, 'mm');\n\n    const heightRatio = canHeight / pageHeight;\n    const widthRatio = canWidth / pageWidth;\n    const maxRatio = heightRatio > widthRatio ? heightRatio : widthRatio;\n    const imgHeigh = maxRatio > 1 ? canHeight / maxRatio : canHeight;\n    const imgWidth = maxRatio > 1 ? canWidth / maxRatio : canWidth;\n    return [imgWidth, imgHeigh];\n  }\n\n  /**\n   * Get a world file information for tiff\n   * @param  map - Map of the app\n   */\n  private getWorldFileInformation(map) {\n    const currentResolution = map.viewController.getResolution();\n    const currentExtent = map.viewController.getExtent(); // Return [minx, miny, maxx, maxy]\n    return [\n      currentResolution,\n      0,\n      0,\n      -currentResolution,\n      currentExtent[0] + currentResolution / 0.5,\n      currentExtent[3] - currentResolution / 0.5\n    ].join('\\n');\n  }\n\n  /**\n   * Save canvas image as file\n   * @param canvas - Canvas to save\n   * @param name - Name of the file\n   * @param format - file format\n   */\n  private saveCanvasImageAsFile(canvas, nameWithExt, format) {\n    const blobFormat = 'image/' + format;\n\n    try {\n      canvas.toDataURL(); // Just to make the catch trigger wihtout toBlob Error throw not catched\n      canvas.toBlob((blob) => {\n        // download image\n        saveAs(blob, nameWithExt);\n        this.saveFileProcessing();\n      }, blobFormat);\n    } catch {\n      this.messageService.error(\n        'igo.geo.printForm.corsErrorMessageBody',\n        'igo.geo.printForm.corsErrorMessageHeader'\n      );\n    }\n  }\n\n  /**\n   * Add file to a zip\n   * @param canvas - File to add to the zip\n   * @param  name -Name of the fileoverview\n   */\n  private generateCanvaFileToZip(canvas, name) {\n    const blobFormat = 'image/' + 'jpeg';\n    if (\n      // eslint-disable-next-line no-prototype-builtins\n      !this.hasOwnProperty('zipFile') ||\n      typeof this.zipFile === 'undefined'\n    ) {\n      this.zipFile = new JSZip();\n    }\n\n    try {\n      canvas.toDataURL(); // Just to make the catch trigger wihtout toBlob Error throw not catched\n      if (navigator.msSaveBlob) {\n        this.addFileToZip(name, canvas.msToBlob());\n      } else {\n        canvas.toBlob((blob) => {\n          this.addFileToZip(name, blob);\n        }, blobFormat);\n      }\n    } catch {\n      this.messageService.error(\n        'igo.geo.printForm.corsErrorMessageBody',\n        'igo.geo.printForm.corsErrorMessageHeader'\n      );\n    }\n  }\n\n  /**\n   * Add file to zip, if all file are zipped, download\n   * @param name - Name of the files\n   * @param blob - Contain of file\n   */\n  private addFileToZip(name, blob) {\n    // add file to zip\n    this.zipFile.file(name, blob);\n    this.nbFileToProcess--;\n\n    // If all files are proccessed\n    if (this.nbFileToProcess === 0) {\n      // Download zip file\n      this.getZipFile();\n      // Stop loading\n      this.activityService.unregister(this.activityId);\n    }\n  }\n\n  private saveFileProcessing() {\n    this.nbFileToProcess--;\n\n    // If all files are proccessed\n    if (this.nbFileToProcess === 0) {\n      // Stop loading\n      this.activityService.unregister(this.activityId);\n    }\n  }\n\n  /**\n   * Get the zipped file\n   * @return Retun a zip file\n   */\n  private getZipFile() {\n    this.zipFile.generateAsync({ type: 'blob' }).then((blob) => {\n      // 1) generate the zip file\n      saveAs(blob, 'map.zip');\n      delete this.zipFile;\n    });\n  }\n\n  private pdf_units2points(n, unit): number {\n    let k = 1;\n\n    // this code is borrowed from jsPDF\n    //  as it does not expose a public API\n    //  for converting units to points.\n    switch (unit) {\n      case 'pt':\n        k = 1;\n        break;\n      case 'mm':\n        k = 72 / 25.4;\n        break;\n      case 'cm':\n        k = 72 / 2.54;\n        break;\n      case 'in':\n        k = 72;\n        break;\n      case 'px':\n        k = 96 / 72;\n        break;\n      case 'pc':\n        k = 12;\n        break;\n      case 'em':\n        k = 12;\n        break;\n      case 'ex':\n        k = 6;\n        break;\n      default:\n        throw new Error('Invalid unit: ' + unit);\n    }\n\n    return n * k;\n  }\n}\n","import { Position } from 'geojson';\nimport { Observable } from 'rxjs';\n\nimport { DirectionOptions, Directions } from '../shared/directions.interface';\nimport { BaseDirectionsSourceOptionsProfile } from './directions-source.interface';\n\nexport abstract class DirectionsSource {\n  abstract profiles: BaseDirectionsSourceOptionsProfile[];\n  abstract getSourceName(): string;\n  abstract getEnabledProfile(): BaseDirectionsSourceOptionsProfile;\n  abstract getProfileWithAuthorization(): BaseDirectionsSourceOptionsProfile;\n  abstract route(\n    coordinates: Position[],\n    directionsOptions: DirectionOptions\n  ): Observable<Directions[]>;\n}\n","import { DirectionsSource } from '../directions-sources/directions-source';\n\nexport class DirectionsSourceService {\n  constructor(public sources: DirectionsSource[]) {}\n}\n\nexport function directionsSourceServiceFactory(sources: DirectionsSource[]) {\n  return new DirectionsSourceService(sources);\n}\n\nexport function provideDirectionsSourceService() {\n  return {\n    provide: DirectionsSourceService,\n    useFactory: directionsSourceServiceFactory,\n    deps: [DirectionsSource]\n  };\n}\n","import { uuid } from '@igo2/utils';\n\nimport { Md5 } from 'ts-md5';\n\nimport type { AnyDataSourceOptions } from '../datasource/shared/datasources/any-datasource.interface';\nimport type { DataSourceOptions } from '../datasource/shared/datasources/datasource.interface';\nimport type { WFSDataSourceOptions } from '../datasource/shared/datasources/wfs-datasource.interface';\nimport type { WMSDataSourceOptions } from '../datasource/shared/datasources/wms-datasource.interface';\nimport type { WMTSDataSourceOptions } from '../datasource/shared/datasources/wmts-datasource.interface';\nimport type { ArcGISRestDataSourceOptions } from './../datasource/shared/datasources/arcgisrest-datasource.interface';\n\n/**\n * Generate a id from it's datasource options.\n * @param options Data source options\n * @returns A id\n */\nexport function generateIdFromSourceOptions(\n  options: DataSourceOptions\n): string {\n  const generators = {\n    wms: generateWMSIdFromSourceOptions,\n    wmts: generateWMTSIdFromSourceOptions,\n    xyz: generateXYZIdFromSourceOptions,\n    feature: generateFeatureIdFromSourceOptions,\n    wfs: generateWfsIdFromSourceOptions,\n    arcgisrest: generateArcgisRestIdFromSourceOptions,\n    imagearcgisrest: generateArcgisRestIdFromSourceOptions,\n    tilearcgisrest: generateArcgisRestIdFromSourceOptions,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    osm: (_options: AnyDataSourceOptions) => 'OSM',\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    tiledebug: (_options: AnyDataSourceOptions) => 'tiledebug'\n  };\n  const generator = generators[options.type] || generateId;\n  return generator(options);\n}\n\n/**\n * Generate a id from WMS data source options\n * @param options WMS data source options\n * @returns A md5 hash of the the url and layers\n */\nexport function generateWMSIdFromSourceOptions(options: WMSDataSourceOptions) {\n  const layers = options.params.LAYERS;\n  const url = standardizeUrl(options.url);\n  const chain = 'wms' + url + layers;\n  return Md5.hashStr(chain) as string;\n}\n\n/**\n * Generate a id from WMTS data source options\n * @param options WMTS data source options\n * @returns A md5 hash of the the url and layer\n */\nexport function generateWMTSIdFromSourceOptions(\n  options: WMTSDataSourceOptions\n) {\n  const layer = options.layer;\n  const url = standardizeUrl(options.url);\n  const chain = 'wmts' + url + layer;\n  return Md5.hashStr(chain) as string;\n}\n\n/**\n * Generate a id from XYZ data source options\n * @param options XYZ data source options\n * @returns A md5 hash of the the url and layer\n */\nexport function generateXYZIdFromSourceOptions(options: WMTSDataSourceOptions) {\n  const url = standardizeUrl(options.url);\n  const chain = 'xyz' + url;\n  return Md5.hashStr(chain) as string;\n}\n\n/**\n * Generate a id from feature data source options\n * @param options XYZ data source options\n * @returns A md5 hash of the the url and layer\n */\nexport function generateFeatureIdFromSourceOptions(\n  options: WMTSDataSourceOptions\n) {\n  if (!options.url) {\n    return generateId();\n  }\n  const url = standardizeUrl(options.url);\n  const chain = 'feature' + url;\n  return Md5.hashStr(chain) as string;\n}\n\n/**\n * Generate a id from feature data source options\n * @param options XYZ data source options\n * @returns A md5 hash of the the url and layer\n */\nexport function generateWfsIdFromSourceOptions(options: WFSDataSourceOptions) {\n  if (!options.url || !options.params) {\n    return generateId();\n  }\n  const url = standardizeUrl(options.url);\n  const chain = 'wfs' + url + options.params.featureTypes;\n  return Md5.hashStr(chain) as string;\n}\n/**\n * Generate a id from ArcGIS Rest data source options\n * @param options ArcGIS Rest data source options\n * @returns A md5 hash of the url and layers\n */\nexport function generateArcgisRestIdFromSourceOptions(\n  options: ArcGISRestDataSourceOptions\n) {\n  const layers = options.layer;\n  const url = standardizeUrl(options.url);\n  const chain = (options.type || 'arcgis') + url + layers;\n  return Md5.hashStr(chain) as string;\n}\n\n/**\n * Generate a unique id\n * @returns A uuid\n */\nexport function generateId() {\n  return uuid();\n}\n\nexport function standardizeUrl(url: string): string {\n  const absUrl = url.charAt(0) === '/' ? window.location.origin + url : url;\n  const urlDecomposed = absUrl.split(/[?&]/);\n  let urlStandardized = urlDecomposed.shift();\n  const paramsToKeep = urlDecomposed.filter(\n    (p) => p.length !== 0 && p.charAt(0) !== '_'\n  );\n  if (paramsToKeep.length) {\n    urlStandardized += '?' + paramsToKeep.join('&');\n  }\n  return urlStandardized;\n}\n","import olClusterSource from 'ol/source/Cluster';\nimport olSource from 'ol/source/Source';\nimport olVectorSource from 'ol/source/Vector';\n\nimport { LegendOptions } from '../../../layer/shared/layers/legend.interface';\nimport { generateIdFromSourceOptions } from '../../../utils/id-generator';\nimport { DataService } from './data.service';\nimport { DataSourceOptions, Legend } from './datasource.interface';\n\nexport abstract class DataSource {\n  public id: string;\n  public ol: olSource | olVectorSource | olClusterSource;\n  private legend: Legend[];\n\n  get saveableOptions(): Partial<DataSourceOptions> {\n    return {\n      id: this.options.id,\n      type: this.options.type,\n      url: this.options.url\n    };\n  }\n\n  constructor(\n    public options: DataSourceOptions = {},\n    protected dataService?: DataService\n  ) {\n    this.options = options;\n    this.id = this.options.id || this.generateId();\n    this.ol = this.createOlSource();\n  }\n\n  protected abstract createOlSource(): olSource;\n\n  protected generateId(): string {\n    return generateIdFromSourceOptions(this.options);\n  }\n\n  public getLegend(): Legend[] {\n    return this.legend ? this.legend : [];\n  }\n\n  public setLegend(options: LegendOptions): Legend[] {\n    if (options.url) {\n      this.legend = [{ url: options.url }];\n    } else if (options.html) {\n      this.legend = [{ html: options.html }];\n    } else {\n      this.legend = [];\n    }\n\n    return this.legend;\n  }\n\n  protected abstract onUnwatch();\n}\n","import * as olformat from 'ol/format';\nimport olSourceVector from 'ol/source/Vector';\n\nimport { DataSource } from './datasource';\nimport { FeatureDataSourceOptions } from './feature-datasource.interface';\n\nexport class FeatureDataSource extends DataSource {\n  declare public options: FeatureDataSourceOptions;\n  declare public ol: olSourceVector;\n\n  get saveableOptions(): Partial<FeatureDataSourceOptions> {\n    const baseOptions = super.saveableOptions;\n    return {\n      ...baseOptions,\n      params: this.options.params\n    };\n  }\n\n  protected createOlSource(): olSourceVector {\n    const sourceOptions = {\n      format: this.getSourceFormatFromOptions(this.options)\n    };\n\n    return new olSourceVector(Object.assign(sourceOptions, this.options));\n  }\n\n  protected getSourceFormatFromOptions(options: FeatureDataSourceOptions) {\n    if (options.format) {\n      return options.format;\n    }\n    let olFormatCls;\n    const formatType = options.formatType;\n    if (!formatType) {\n      olFormatCls = olformat.GeoJSON;\n    } else {\n      olFormatCls = olformat[formatType];\n      if (olFormatCls === undefined) {\n        throw new Error('Invalid vector source format ${formatType}.');\n      }\n    }\n\n    const formatOptions = options.formatOptions;\n    let format;\n    if (formatOptions) {\n      format = new olFormatCls(formatOptions);\n    } else {\n      format = new olFormatCls();\n    }\n\n    return format;\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n\n  get queryTitle(): string {\n    return (this.options as any).queryTitle\n      ? (this.options as any).queryTitle\n      : 'title';\n  }\n}\n","export abstract class DataService {\n  abstract getData(): string;\n}\n","import olSourceOSM from 'ol/source/OSM';\n\nimport { DataSource } from './datasource';\nimport { OSMDataSourceOptions } from './osm-datasource.interface';\n\nexport class OSMDataSource extends DataSource {\n  declare public options: OSMDataSourceOptions;\n  declare public ol: olSourceOSM;\n\n  protected createOlSource(): olSourceOSM {\n    if (!this.options.url) {\n      this.options.url = 'https://tile.openstreetmap.org/{z}/{x}/{y}.png';\n    }\n    return new olSourceOSM(this.options);\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n","import olSourceXYZ from 'ol/source/XYZ';\n\nimport { DataSource } from './datasource';\nimport { XYZDataSourceOptions } from './xyz-datasource.interface';\n\nexport class XYZDataSource extends DataSource {\n  declare public options: XYZDataSourceOptions;\n  declare public ol: olSourceXYZ;\n\n  protected createOlSource(): olSourceXYZ {\n    return new olSourceXYZ(this.options);\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n","export enum OgcFilterOperatorType {\n  BasicNumericOperator = 'basicnumericoperator',\n  Basic = 'basic',\n  BasicAndSpatial = 'basicandspatial',\n  Spatial = 'spatial',\n  All = 'all',\n  Time = 'time'\n}\n\nexport enum OgcFilterOperator {\n  BBOX = 'BBox',\n  PropertyIsBetween = 'PropertyIsBetween',\n  Contains = 'Contains',\n  During = 'During',\n  PropertyIsEqualTo = 'PropertyIsEqualTo',\n  PropertyIsGreaterThan = 'PropertyIsGreaterThan',\n  PropertyIsGreaterThanOrEqualTo = 'PropertyIsGreaterThanOrEqualTo',\n  Intersects = 'Intersects',\n  PropertyIsNull = 'PropertyIsNull',\n  PropertyIsLessThan = 'PropertyIsLessThan',\n  PropertyIsLessThanOrEqualTo = 'PropertyIsLessThanOrEqualTo',\n  PropertyIsLike = 'PropertyIsLike',\n  PropertyIsNotEqualTo = 'PropertyIsNotEqualTo',\n  Within = 'Within',\n  And = 'And',\n  Or = 'Or',\n  Not = 'Not'\n}\n","/* eslint-disable no-prototype-builtins */\nimport { ObjectUtils, uuid } from '@igo2/utils';\n\nimport { Extent } from 'ol/extent';\nimport olFormatWFS, { WriteGetFeatureOptions } from 'ol/format/WFS';\nimport olFormatWKT from 'ol/format/WKT';\nimport * as olfilter from 'ol/format/filter';\nimport olGeometry from 'ol/geom/Geometry';\nimport olProjection from 'ol/proj/Projection';\n\nimport { default as moment } from 'moment';\n\nimport { SourceFieldsOptionsParams } from '../../datasource/shared/datasources/datasource.interface';\nimport { OgcFilterOperator, OgcFilterOperatorType } from './ogc-filter.enum';\nimport {\n  AnyBaseOgcFilterOptions,\n  IgoOgcFilterObject,\n  IgoOgcSelector,\n  OgcFilter,\n  OgcFilterableDataSourceOptions,\n  OgcFiltersOptions,\n  OgcInterfaceFilterOptions,\n  OgcSelectorBundle,\n  SelectorGroup\n} from './ogc-filter.interface';\n\nexport class OgcFilterWriter {\n  private filterSequence: OgcInterfaceFilterOptions[] = [];\n  public operators = {\n    [OgcFilterOperator.PropertyIsEqualTo as string]: {\n      spatial: false,\n      fieldRestrict: []\n    },\n    [OgcFilterOperator.PropertyIsNotEqualTo as string]: {\n      spatial: false,\n      fieldRestrict: []\n    },\n    [OgcFilterOperator.PropertyIsLike as string]: {\n      spatial: false,\n      fieldRestrict: ['string']\n    },\n    [OgcFilterOperator.PropertyIsGreaterThan as string]: {\n      spatial: false,\n      fieldRestrict: ['number']\n    },\n    [OgcFilterOperator.PropertyIsGreaterThanOrEqualTo as string]: {\n      spatial: false,\n      fieldRestrict: ['number']\n    },\n    [OgcFilterOperator.PropertyIsLessThan as string]: {\n      spatial: false,\n      fieldRestrict: ['number']\n    },\n    [OgcFilterOperator.PropertyIsLessThanOrEqualTo as string]: {\n      spatial: false,\n      fieldRestrict: ['number']\n    },\n    [OgcFilterOperator.PropertyIsBetween as string]: {\n      spatial: false,\n      fieldRestrict: ['number']\n    },\n    [OgcFilterOperator.During as string]: { spatial: false, fieldRestrict: [] },\n    [OgcFilterOperator.PropertyIsNull as string]: {\n      spatial: false,\n      fieldRestrict: []\n    },\n    [OgcFilterOperator.Intersects as string]: {\n      spatial: true,\n      fieldRestrict: []\n    },\n    [OgcFilterOperator.Within as string]: { spatial: true, fieldRestrict: [] },\n    [OgcFilterOperator.Contains as string]: { spatial: true, fieldRestrict: [] }\n  };\n\n  defineOgcFiltersDefaultOptions(\n    ogcFiltersOptions: OgcFiltersOptions,\n    fieldNameGeometry: string,\n    srcType?: string\n  ): OgcFiltersOptions {\n    let ogcFiltersDefaultValue = true; // default values for wfs.\n    if (srcType && srcType === 'wms') {\n      ogcFiltersDefaultValue = false;\n    }\n\n    ogcFiltersOptions = ogcFiltersOptions || {};\n    ogcFiltersOptions.enabled =\n      ogcFiltersOptions.enabled === undefined\n        ? ogcFiltersDefaultValue\n        : ogcFiltersOptions.enabled;\n    ogcFiltersOptions.editable =\n      ogcFiltersOptions.editable === undefined\n        ? ogcFiltersDefaultValue\n        : ogcFiltersOptions.editable;\n    ogcFiltersOptions.geometryName = fieldNameGeometry;\n\n    ogcFiltersOptions.advancedOgcFilters = true;\n    if (\n      ogcFiltersOptions.enabled &&\n      (ogcFiltersOptions.pushButtons ||\n        ogcFiltersOptions.checkboxes ||\n        ogcFiltersOptions.radioButtons ||\n        ogcFiltersOptions.select ||\n        ogcFiltersOptions.autocomplete)\n    ) {\n      ogcFiltersOptions.advancedOgcFilters = false;\n    }\n    return ogcFiltersOptions;\n  }\n\n  public buildFilter(\n    filters?: IgoOgcFilterObject,\n    extent?: Extent,\n    proj?: olProjection,\n    fieldNameGeometry?: string,\n    options?: OgcFilterableDataSourceOptions\n  ): string {\n    let ourBboxFilter;\n    let enableBbox: boolean;\n    if (/intersects|contains|within/gi.test(JSON.stringify(filters))) {\n      enableBbox = false;\n    } else {\n      enableBbox = true;\n    }\n    if (filters) {\n      fieldNameGeometry =\n        (filters as any).geometryName !== undefined\n          ? (filters as any).geometryName\n          : fieldNameGeometry;\n    }\n    if (extent && filters) {\n      ourBboxFilter = olfilter.bbox(fieldNameGeometry, extent, proj.getCode());\n    }\n    let filterAssembly: OgcFilter;\n    if (filters) {\n      filters = this.checkIgoFiltersProperties(\n        filters,\n        fieldNameGeometry,\n        proj\n      );\n      if (extent && enableBbox) {\n        filterAssembly = olfilter.and(\n          ourBboxFilter,\n          this.bundleFilter(filters, options)\n        );\n      } else {\n        filterAssembly = this.bundleFilter(filters, options);\n      }\n    } else {\n      if (extent && proj) {\n        return 'bbox=' + extent.join(',') + ',' + proj.getCode();\n      } else {\n        return undefined;\n      }\n    }\n\n    const wfsOptions: WriteGetFeatureOptions = {\n      srsName: '',\n      featureNS: '',\n      featurePrefix: '',\n      featureTypes: ['featureTypes'],\n      filter: filterAssembly,\n      outputFormat: '',\n      geometryName: fieldNameGeometry\n    };\n\n    const query = new olFormatWFS().writeGetFeature(wfsOptions);\n    const str = new XMLSerializer().serializeToString(query);\n    const regexp1 = /typenames *=|typename *=\\\"featureTypes\\\" *>/gi;\n    const regexp2 = /<\\/Query><\\/GetFeature>/gi;\n\n    return 'filter=' + str.split(regexp1)[1].split(regexp2)[0];\n  }\n\n  private bundleFilter(\n    filterObject: any,\n    options?: OgcFilterableDataSourceOptions\n  ) {\n    if (filterObject instanceof Array) {\n      const logicalArray = [];\n      filterObject.forEach((element) => {\n        logicalArray.push(this.bundleFilter(element, options));\n      });\n      return logicalArray;\n    } else {\n      if (filterObject.hasOwnProperty('logical')) {\n        return this.createFilter(\n          {\n            operator: filterObject.logical,\n            logicalArray: this.bundleFilter(filterObject.filters, options)\n          },\n          options\n        );\n      } else if (filterObject.hasOwnProperty('operator')) {\n        return this.createFilter(\n          filterObject as AnyBaseOgcFilterOptions,\n          options\n        );\n      }\n    }\n  }\n\n  private createFilter(\n    filterOptions,\n    options?: OgcFilterableDataSourceOptions\n  ): OgcFilter {\n    const operator = filterOptions.operator;\n    const logicalArray = filterOptions.logicalArray;\n\n    const wfsPropertyName = filterOptions.propertyName;\n    const wfsPattern = filterOptions.pattern;\n    const wfsMatchCase = filterOptions.matchCase\n      ? filterOptions.matchCase\n      : true;\n    const wfsWildCard = filterOptions.wildCard ? filterOptions.wildCard : '*';\n    const wfsSingleChar = filterOptions.singleChar\n      ? filterOptions.singleChar\n      : '.';\n    const wfsEscapeChar = filterOptions.escapeChar\n      ? filterOptions.escapeChar\n      : '!';\n\n    const wfsLowerBoundary = filterOptions.lowerBoundary;\n    const wfsUpperBoundary = filterOptions.upperBoundary;\n\n    const wfsGeometryName = filterOptions.geometryName;\n    const wfsExtent = filterOptions.extent;\n    const wfsWktGeometry = filterOptions.wkt_geometry;\n    const wfsSrsName = filterOptions.srsName\n      ? filterOptions.srsName\n      : 'EPSG:3857';\n\n    const wfsBegin = this.parseFilterOptionDate(\n      filterOptions.begin,\n      options ? options.minDate : undefined\n    );\n    const wfsEnd = this.parseFilterOptionDate(\n      filterOptions.end,\n      options ? options.maxDate : undefined\n    );\n\n    const wfsExpression = filterOptions.expression;\n\n    let geometry: olGeometry;\n    if (wfsWktGeometry) {\n      const wkt = new olFormatWKT();\n      geometry = wkt.readGeometry(wfsWktGeometry, {\n        dataProjection: wfsSrsName,\n        featureProjection: wfsSrsName || 'EPSG:3857'\n      });\n    }\n\n    switch (operator.toLowerCase()) {\n      case OgcFilterOperator.BBOX.toLowerCase():\n        return olfilter.bbox(wfsGeometryName, wfsExtent, wfsSrsName);\n      case OgcFilterOperator.PropertyIsBetween.toLowerCase():\n        return olfilter.between(\n          wfsPropertyName,\n          wfsLowerBoundary || 1e40 * -1,\n          wfsUpperBoundary || 1e40\n        );\n      case OgcFilterOperator.Contains.toLowerCase():\n        return olfilter.contains(wfsGeometryName, geometry, wfsSrsName);\n      case OgcFilterOperator.During.toLowerCase():\n        return olfilter.during(wfsPropertyName, wfsBegin, wfsEnd);\n      case OgcFilterOperator.PropertyIsEqualTo.toLowerCase():\n        return olfilter.equalTo(wfsPropertyName, wfsExpression, wfsMatchCase);\n      case OgcFilterOperator.PropertyIsGreaterThan.toLowerCase():\n        return olfilter.greaterThan(wfsPropertyName, wfsExpression);\n      case OgcFilterOperator.PropertyIsGreaterThanOrEqualTo.toLowerCase():\n        return olfilter.greaterThanOrEqualTo(wfsPropertyName, wfsExpression);\n      case OgcFilterOperator.Intersects.toLowerCase():\n        return olfilter.intersects(wfsGeometryName, geometry, wfsSrsName);\n      case OgcFilterOperator.PropertyIsNull.toLowerCase():\n        return olfilter.isNull(wfsPropertyName);\n      case OgcFilterOperator.PropertyIsLessThan.toLowerCase():\n        return olfilter.lessThan(wfsPropertyName, wfsExpression);\n      case OgcFilterOperator.PropertyIsLessThanOrEqualTo.toLowerCase():\n        return olfilter.lessThanOrEqualTo(wfsPropertyName, wfsExpression);\n      case OgcFilterOperator.PropertyIsLike.toLowerCase():\n        return olfilter.like(\n          wfsPropertyName,\n          wfsPattern\n            ? wfsPattern.replace(/[()_]/gi, wfsSingleChar)\n            : wfsWildCard,\n          wfsWildCard,\n          wfsSingleChar,\n          wfsEscapeChar,\n          wfsMatchCase\n        );\n      case OgcFilterOperator.PropertyIsNotEqualTo.toLowerCase():\n        return olfilter.notEqualTo(\n          wfsPropertyName,\n          wfsExpression,\n          wfsMatchCase\n        );\n      case OgcFilterOperator.Within.toLowerCase():\n        return olfilter.within(wfsGeometryName, geometry, wfsSrsName);\n      // LOGICAL\n      case OgcFilterOperator.And.toLowerCase():\n        return olfilter.and.apply(null, logicalArray);\n      case OgcFilterOperator.Or.toLowerCase():\n        return olfilter.or.apply(null, logicalArray);\n      case OgcFilterOperator.Not.toLowerCase():\n        return olfilter.not.apply(null, logicalArray);\n\n      default:\n        return undefined;\n    }\n  }\n\n  public defineInterfaceFilterSequence(\n    filterObject: any,\n    geometryName,\n    logical = '',\n    level = -1\n  ): OgcInterfaceFilterOptions[] {\n    if (filterObject instanceof Array) {\n      filterObject.forEach((element) => {\n        this.filterSequence.concat(\n          this.defineInterfaceFilterSequence(\n            element,\n            geometryName,\n            logical,\n            level\n          )\n        );\n      });\n    } else {\n      if (filterObject.hasOwnProperty('logical')) {\n        level = level + 1;\n        this.filterSequence.concat(\n          this.defineInterfaceFilterSequence(\n            filterObject.filters,\n            geometryName,\n            filterObject.logical,\n            level\n          )\n        );\n      } else if (filterObject.hasOwnProperty('operator')) {\n        this.filterSequence.push(\n          this.addInterfaceFilter(filterObject, geometryName, level, logical)\n        );\n      }\n    }\n    return this.filterSequence;\n  }\n\n  public computeAllowedOperators(\n    fields?: SourceFieldsOptionsParams[],\n    propertyName?: string,\n    defaultOperatorsType?: OgcFilterOperatorType\n  ) {\n    let effectiveOperators = {};\n    let allowedOperators;\n    let fieldsHasSpatialOperator: boolean;\n    let includeContains: boolean;\n\n    if (fields && propertyName) {\n      const srcField = fields.find((field) => field.name === propertyName);\n      allowedOperators =\n        srcField && srcField.allowedOperatorsType\n          ? srcField.allowedOperatorsType\n          : defaultOperatorsType;\n    }\n\n    if (fields) {\n      fields.map((field) => {\n        if (!field.allowedOperatorsType) {\n          return;\n        }\n        const allowedOperatorsType = field.allowedOperatorsType.toLowerCase();\n        if (\n          allowedOperatorsType === OgcFilterOperatorType.All.toLowerCase() ||\n          allowedOperatorsType ===\n            OgcFilterOperatorType.Spatial.toLowerCase() ||\n          allowedOperatorsType ===\n            OgcFilterOperatorType.BasicAndSpatial.toLowerCase()\n        ) {\n          fieldsHasSpatialOperator = true;\n          if (\n            allowedOperatorsType === OgcFilterOperatorType.All.toLowerCase()\n          ) {\n            includeContains = true;\n          }\n        }\n      });\n    }\n\n    allowedOperators = allowedOperators\n      ? allowedOperators\n      : OgcFilterOperatorType.BasicAndSpatial;\n\n    switch (allowedOperators.toLowerCase()) {\n      case OgcFilterOperatorType.All:\n        effectiveOperators = this.operators;\n        break;\n      case OgcFilterOperatorType.Spatial:\n        effectiveOperators = {\n          [OgcFilterOperator.Intersects]: { spatial: true, fieldRestrict: [] },\n          [OgcFilterOperator.Within]: { spatial: true, fieldRestrict: [] }\n        };\n        break;\n      case OgcFilterOperatorType.BasicAndSpatial:\n        effectiveOperators = {\n          [OgcFilterOperator.PropertyIsEqualTo]: {\n            spatial: false,\n            fieldRestrict: []\n          },\n          [OgcFilterOperator.PropertyIsNotEqualTo]: {\n            spatial: false,\n            fieldRestrict: []\n          },\n          [OgcFilterOperator.Intersects]: { spatial: true, fieldRestrict: [] },\n          [OgcFilterOperator.Within]: { spatial: true, fieldRestrict: [] }\n        };\n        break;\n      case OgcFilterOperatorType.Basic:\n        effectiveOperators = {\n          [OgcFilterOperator.PropertyIsEqualTo]: {\n            spatial: false,\n            fieldRestrict: []\n          },\n          [OgcFilterOperator.PropertyIsNotEqualTo]: {\n            spatial: false,\n            fieldRestrict: []\n          }\n        };\n        break;\n      case OgcFilterOperatorType.Time:\n        effectiveOperators = {\n          [OgcFilterOperator.During]: { spatial: false, fieldRestrict: [] }\n        };\n        break;\n      case OgcFilterOperatorType.BasicNumericOperator:\n        effectiveOperators = {\n          [OgcFilterOperator.PropertyIsEqualTo]: {\n            spatial: false,\n            fieldRestrict: []\n          },\n          [OgcFilterOperator.PropertyIsNotEqualTo]: {\n            spatial: false,\n            fieldRestrict: []\n          },\n          [OgcFilterOperator.PropertyIsGreaterThan]: {\n            spatial: false,\n            fieldRestrict: ['number']\n          },\n          [OgcFilterOperator.PropertyIsGreaterThanOrEqualTo]: {\n            spatial: false,\n            fieldRestrict: ['number']\n          },\n          [OgcFilterOperator.PropertyIsLessThan]: {\n            spatial: false,\n            fieldRestrict: ['number']\n          },\n          [OgcFilterOperator.PropertyIsLessThanOrEqualTo]: {\n            spatial: false,\n            fieldRestrict: ['number']\n          }\n        };\n        break;\n      default:\n        effectiveOperators = {\n          [OgcFilterOperator.PropertyIsEqualTo]: {\n            spatial: false,\n            fieldRestrict: []\n          },\n          [OgcFilterOperator.PropertyIsNotEqualTo]: {\n            spatial: false,\n            fieldRestrict: []\n          },\n          [OgcFilterOperator.Intersects]: { spatial: true, fieldRestrict: [] },\n          [OgcFilterOperator.Within]: { spatial: true, fieldRestrict: [] }\n        };\n    }\n\n    if (fieldsHasSpatialOperator) {\n      (effectiveOperators as any).Intersects = {\n        spatial: true,\n        fieldRestrict: []\n      };\n      (effectiveOperators as any).Within = { spatial: true, fieldRestrict: [] };\n      if (includeContains) {\n        (effectiveOperators as any).Contains = {\n          spatial: true,\n          fieldRestrict: []\n        };\n      }\n    }\n\n    return effectiveOperators;\n  }\n\n  public addInterfaceFilter(\n    igoOgcFilterObject?,\n    geometryName?,\n    level = 0,\n    parentLogical = 'Or'\n  ): OgcInterfaceFilterOptions {\n    if (!igoOgcFilterObject) {\n      igoOgcFilterObject = { operator: 'PropertyIsEqualTo' };\n    }\n    const f = {\n      propertyName: '',\n      operator: '',\n      active: '',\n      filterid: uuid(),\n      step: '',\n      begin: '',\n      end: '',\n      sliderOptions: {},\n      lowerBoundary: '',\n      upperBoundary: '',\n      expression: '',\n      pattern: '',\n      wildCard: '*',\n      singleChar: '.',\n      escapeChar: '!',\n      matchCase: true,\n      igoSpatialSelector: '',\n      igoSNRC: '',\n      geometryName: '',\n      geometry: '',\n      wkt_geometry: '',\n      extent: '',\n      srsName: '',\n      parentLogical: '',\n      level: 0\n    };\n\n    return Object.assign(\n      f,\n      {\n        parentLogical,\n        level,\n        geometryName\n      },\n      igoOgcFilterObject\n    );\n  }\n\n  public checkIgoFiltersProperties(\n    filterObject: any,\n    fieldNameGeometry,\n    proj: olProjection,\n    active = false\n  ) {\n    const filterArray = [];\n    if (filterObject instanceof Array) {\n      filterObject.forEach((element) => {\n        filterArray.push(\n          this.checkIgoFiltersProperties(\n            element,\n            fieldNameGeometry,\n            proj,\n            active\n          )\n        );\n      });\n      return filterArray;\n    } else {\n      if (filterObject.hasOwnProperty('logical')) {\n        return Object.assign(\n          {},\n          {\n            logical: filterObject.logical,\n            filters: this.checkIgoFiltersProperties(\n              filterObject.filters,\n              fieldNameGeometry,\n              proj,\n              active\n            )\n          }\n        );\n      } else if (filterObject.hasOwnProperty('operator')) {\n        return this.addFilterProperties(\n          filterObject as OgcInterfaceFilterOptions,\n          fieldNameGeometry,\n          proj,\n          active\n        );\n      }\n    }\n  }\n\n  private addFilterProperties(\n    igoOgcFilterObject: OgcInterfaceFilterOptions,\n    fieldNameGeometry,\n    proj: olProjection,\n    active = false\n  ) {\n    const filterid = igoOgcFilterObject.hasOwnProperty('filterid')\n      ? igoOgcFilterObject.filterid\n      : uuid();\n    const status = igoOgcFilterObject.hasOwnProperty('active')\n      ? igoOgcFilterObject.active\n      : active;\n\n    const srsName = igoOgcFilterObject.hasOwnProperty('srsName')\n      ? igoOgcFilterObject.srsName\n      : proj\n        ? proj.getCode()\n        : 'EPSG:3857';\n\n    return Object.assign(\n      {},\n      {\n        filterid,\n        active: status,\n        igoSpatialSelector: 'fixedExtent',\n        srsName\n      },\n      igoOgcFilterObject,\n      { geometryName: fieldNameGeometry }\n    );\n  }\n\n  public rebuiltIgoOgcFilterObjectFromSequence(\n    sequence: OgcInterfaceFilterOptions[]\n  ): IgoOgcFilterObject {\n    if (sequence instanceof Array) {\n      if (sequence.length >= 1) {\n        let lastParentLogical = sequence[0].parentLogical;\n        let nextElement: any;\n        let logicalArray = [];\n        let lastProcessedFilter;\n        sequence.forEach((uiFilter) => {\n          const element = Object.assign({}, uiFilter);\n          const index = sequence.indexOf(uiFilter);\n          if (index >= 0 && index < sequence.length - 1) {\n            nextElement = sequence[index + 1];\n          } else {\n            nextElement = element;\n          }\n          delete element.active;\n          delete element.filterid;\n          delete element.parentLogical;\n          logicalArray.push(element);\n\n          if (sequence.length === 1) {\n            lastProcessedFilter = element;\n          } else if (lastParentLogical !== nextElement.parentLogical) {\n            if (logicalArray.length === 1) {\n              console.log(\n                'You must set at ' +\n                  'least two operator in a logical (' +\n                  lastParentLogical +\n                  ')'\n              );\n            } else {\n              lastProcessedFilter = Object.assign(\n                {},\n                { logical: lastParentLogical, filters: logicalArray }\n              );\n              logicalArray = [lastProcessedFilter];\n              lastParentLogical = nextElement.parentLogical;\n            }\n          }\n        });\n        return lastProcessedFilter;\n      } else {\n        return undefined;\n      }\n    } else {\n      return undefined;\n    }\n  }\n\n  private computeIgoSelector(selectors: IgoOgcSelector): IgoOgcSelector {\n    if (\n      selectors.groups.every((group) => group.computedSelectors !== undefined)\n    ) {\n      return selectors;\n    }\n    let selector: IgoOgcSelector;\n    if (selectors.groups && selectors.bundles) {\n      if (!selectors.bundles.every((bundle) => bundle.id !== undefined)) {\n        throw new Error('You must set an id for each of your bundles');\n      }\n      selector = ObjectUtils.copyDeep(selectors);\n      selector.groups.forEach((group) => {\n        group.title = group.title ? group.title : group.name;\n        group.enabled = group.enabled ? group.enabled : false;\n        group.computedSelectors = ObjectUtils.copyDeep(\n          selector.bundles.filter((b) => group.ids.includes(b.id))\n        );\n      });\n    } else if (!selectors.groups && selectors.bundles) {\n      selector = ObjectUtils.copyDeep(selectors);\n      selector.groups = [\n        {\n          title: 'group1',\n          name: 'group1',\n          computedSelectors: ObjectUtils.copyDeep(selector.bundles)\n        } as SelectorGroup\n      ];\n    } else {\n      selector = {\n        bundles: selectors as any,\n        groups: [\n          {\n            title: 'group1',\n            name: 'group1',\n            computedSelectors: ObjectUtils.copyDeep(\n              selectors\n            ) as OgcSelectorBundle[]\n          } as SelectorGroup\n        ],\n        selectorType: selector.selectorType\n      };\n    }\n    if (!selector.groups.find((selectorGroup) => selectorGroup.enabled)) {\n      selector.groups[0].enabled = true;\n    }\n    return selector;\n  }\n\n  public handleOgcFiltersAppliedValue(\n    options: OgcFilterableDataSourceOptions,\n    fieldNameGeometry: string,\n    extent?: Extent,\n    proj?: olProjection\n  ): string {\n    const ogcFilters = options.ogcFilters;\n    if (!ogcFilters) {\n      return;\n    }\n    const conditions = [];\n    let filterQueryStringSelector = '';\n    let filterQueryStringAdvancedFilters = '';\n    if (\n      ogcFilters.enabled &&\n      (ogcFilters.pushButtons ||\n        ogcFilters.checkboxes ||\n        ogcFilters.radioButtons ||\n        ogcFilters.select ||\n        ogcFilters.autocomplete)\n    ) {\n      let selectors;\n      if (ogcFilters.pushButtons) {\n        selectors = ogcFilters.pushButtons;\n        const pushConditions = this.formatGroupAndFilter(ogcFilters, selectors);\n        for (const condition of pushConditions) {\n          conditions.push(condition);\n        }\n      }\n      if (ogcFilters.checkboxes) {\n        selectors = ogcFilters.checkboxes;\n        const checkboxConditions = this.formatGroupAndFilter(\n          ogcFilters,\n          selectors\n        );\n        for (const condition of checkboxConditions) {\n          conditions.push(condition);\n        }\n      }\n      if (ogcFilters.radioButtons) {\n        selectors = ogcFilters.radioButtons;\n        const selectorsCorr = this.verifyMultipleEnableds(selectors);\n        const radioConditions = this.formatGroupAndFilter(\n          ogcFilters,\n          selectorsCorr\n        );\n        for (const condition of radioConditions) {\n          conditions.push(condition);\n        }\n      }\n      if (ogcFilters.select) {\n        selectors = ogcFilters.select;\n        const selectorsCorr = this.verifyMultipleEnableds(selectors);\n        const selectConditions = this.formatGroupAndFilter(\n          ogcFilters,\n          selectorsCorr\n        );\n        for (const condition of selectConditions) {\n          conditions.push(condition);\n        }\n      }\n      if (ogcFilters.autocomplete) {\n        selectors = ogcFilters.autocomplete;\n        const selectConditions = this.formatGroupAndFilter(\n          ogcFilters,\n          selectors\n        );\n        for (const condition of selectConditions) {\n          conditions.push(condition);\n        }\n      }\n\n      if (\n        ogcFilters.filters &&\n        'operator' in ogcFilters.filters &&\n        ogcFilters.filters.operator.toLowerCase() ===\n          OgcFilterOperator.During.toLowerCase() &&\n        ogcFilters.filters.active &&\n        ogcFilters.interfaceOgcFilters?.length > 0\n      ) {\n        conditions.push(ogcFilters.interfaceOgcFilters[0]);\n      }\n\n      if (conditions.length >= 1) {\n        filterQueryStringSelector = this.buildFilter(\n          conditions.length === 1\n            ? conditions[0]\n            : { logical: 'And', filters: conditions },\n          extent,\n          proj,\n          ogcFilters.geometryName\n        );\n      }\n    }\n    if (ogcFilters.enabled && ogcFilters.filters) {\n      ogcFilters.geometryName = ogcFilters.geometryName || fieldNameGeometry;\n      const igoFilters = ogcFilters.filters;\n      filterQueryStringAdvancedFilters = this.buildFilter(\n        igoFilters,\n        extent,\n        proj,\n        ogcFilters.geometryName,\n        options\n      );\n    }\n\n    let filterQueryString = ogcFilters.advancedOgcFilters\n      ? filterQueryStringAdvancedFilters\n      : filterQueryStringSelector;\n    if (options.type === 'wms') {\n      filterQueryString = this.formatProcessedOgcFilter(\n        filterQueryString,\n        (options as any).params.LAYERS\n      );\n    }\n    if (options.type === 'wfs') {\n      filterQueryString = this.formatProcessedOgcFilter(\n        filterQueryString,\n        (options as any).params.featureTypes\n      );\n    }\n\n    return filterQueryString;\n  }\n\n  public verifyMultipleEnableds(selectors) {\n    selectors.bundles.forEach((bundle) => {\n      if (!bundle.multiple && bundle.selectors) {\n        const enableds = bundle.selectors.reduce(\n          (list, filter, index) =>\n            filter.enabled === true ? list.concat(index) : list,\n          []\n        );\n        if (enableds.length > 1) {\n          enableds.splice(0, 1);\n          enableds.forEach((index) => {\n            bundle.selectors[index].enabled = false;\n          });\n        }\n      }\n    });\n    return selectors;\n  }\n\n  public formatGroupAndFilter(ogcFilters: OgcFiltersOptions, selectors) {\n    selectors = this.computeIgoSelector(selectors);\n    const selectorBundle = selectors.groups.find(\n      (g) => g.enabled\n    ).computedSelectors;\n    const conditions = [];\n    selectorBundle.map((bundle) => {\n      const bundleCondition = [];\n      const selectorsType = bundle.selectors as any;\n      if (!selectorsType) {\n        return;\n      }\n      selectorsType\n        .filter((ogcselector) => ogcselector.enabled === true)\n        .forEach((enabledSelector) =>\n          bundleCondition.push(enabledSelector.filters)\n        );\n      if (bundleCondition.length === 1) {\n        conditions.push(bundleCondition[0]);\n      } else if (bundleCondition.length > 1) {\n        conditions.push({\n          logical: bundle.logical,\n          filters: bundleCondition\n        });\n      }\n    });\n\n    if (selectors.selectorType === 'pushButton') {\n      ogcFilters.pushButtons = selectors;\n    } else if (selectors.selectorType === 'checkbox') {\n      ogcFilters.checkboxes = selectors;\n    } else if (selectors.selectorType === 'radioButton') {\n      ogcFilters.radioButtons = selectors;\n    } else if (selectors.selectorType === 'select') {\n      ogcFilters.select = selectors;\n    } else if (selectors.selectorType === 'autocomplete') {\n      ogcFilters.autocomplete = selectors;\n    }\n    return conditions;\n  }\n\n  public formatProcessedOgcFilter(\n    processedFilter: string,\n    layersOrTypenames: string\n  ): string {\n    if (!processedFilter) {\n      return undefined;\n    }\n    let appliedFilter = '';\n    if (processedFilter.length === 0 && layersOrTypenames.indexOf(',') === -1) {\n      appliedFilter = processedFilter;\n    } else {\n      layersOrTypenames.split(',').forEach(() => {\n        appliedFilter = `${appliedFilter}(${processedFilter.replace(\n          'filter=',\n          ''\n        )})`;\n      });\n    }\n    appliedFilter = appliedFilter.replace(/\\(\\)/g, '');\n    const filterValue =\n      appliedFilter.length > 0\n        ? appliedFilter.replace('filter=', '')\n        : undefined;\n    return filterValue;\n  }\n\n  public parseFilterOptionDate(value: string, defaultValue?: string): string {\n    if (!value) {\n      return defaultValue;\n    } else if (\n      value.toLowerCase().includes('now') ||\n      value.toLowerCase().includes('today')\n    ) {\n      return this.parseDateOperation(value);\n    } else if (moment(value).isValid()) {\n      return value;\n    } else {\n      return undefined;\n    }\n  }\n  /**\n   * this function to parse date with specific format\n   * exemple 'today + 1 days' or 'now + 1 years'\n   * @param value string date\n   * @returns date\n   */\n  private parseDateOperation(value: string): string {\n    const operationSplitted = value.toLowerCase().split(' ');\n    const leftOperand = operationSplitted[0];\n    const operator = ['+', '-'].includes(operationSplitted[1])\n      ? operationSplitted[1]\n      : undefined;\n    const rightOperand = /^[0-9]*$/.test(operationSplitted[2])\n      ? operationSplitted[2]\n      : undefined;\n    const rightUnitOperand = (\n      ['years', 'months', 'weeks', 'days', 'hours', 'seconds'].includes(\n        operationSplitted[3]\n      )\n        ? operationSplitted[3]\n        : undefined\n    ) as moment.DurationInputArg2;\n\n    if (!operator || !rightUnitOperand || !rightOperand) {\n      return leftOperand === 'now'\n        ? moment().format()\n        : moment().endOf('day').format();\n    }\n\n    if (operator === '+') {\n      return leftOperand === 'now'\n        ? moment().add(parseInt(rightOperand, 10), rightUnitOperand).format()\n        : moment()\n            .endOf('day')\n            .add(parseInt(rightOperand, 10), rightUnitOperand)\n            .format();\n    } else {\n      return leftOperand === 'now'\n        ? moment()\n            .subtract(parseInt(rightOperand, 10), rightUnitOperand)\n            .format()\n        : moment()\n            .endOf('day')\n            .subtract(parseInt(rightOperand, 10), rightUnitOperand)\n            .format();\n    }\n  }\n}\n","import { Extent } from 'ol/extent';\nimport * as OlFormat from 'ol/format';\nimport olFormatGML2 from 'ol/format/GML2';\nimport olFormatGML3 from 'ol/format/GML3';\nimport olFormatGML32 from 'ol/format/GML32';\nimport olFormatOSMXML from 'ol/format/OSMXML';\nimport olProjection from 'ol/proj/Projection';\n\nimport { OgcFilterWriter } from '../../../filter/shared/ogc-filter';\nimport { OgcFiltersOptions } from '../../../filter/shared/ogc-filter.interface';\nimport { WFSDataSourceOptions } from './wfs-datasource.interface';\nimport { WMSDataSourceOptions } from './wms-datasource.interface';\n\nexport const defaultEpsg = 'EPSG:3857';\nexport const defaultMaxFeatures = 5000;\nexport const defaultWfsVersion = '2.0.0';\nexport const defaultFieldNameGeometry = 'geometry';\nexport const gmlRegex = new RegExp(/(.*)?gml(.*)?/gi);\nexport const jsonRegex = new RegExp(/(.*)?json(.*)?/gi);\n\n/**\n * This method build the WFS URL based on the layer property.\n * @param options  WFSDataSourceOptions The common wfs datasource options interface\n * @param extent  An extent like array [number, number, number, number]\n * @param proj  olProjection\n * @param ogcFilters  OgcFiltersOptions\n * @returns A string representing the datasource options, based on filter and views\n */\nexport function buildUrl(\n  options: WFSDataSourceOptions,\n  extent: Extent,\n  proj: olProjection,\n  ogcFilters: OgcFiltersOptions,\n  randomParam?: boolean\n): string {\n  const paramsWFS = options.paramsWFS;\n  const queryStringValues = formatWFSQueryString(\n    options,\n    undefined,\n    options.paramsWFS.srsName\n  );\n  let igoFilters;\n  if (ogcFilters?.enabled) {\n    igoFilters = ogcFilters?.filters;\n  }\n  const ogcFilterWriter = new OgcFilterWriter();\n  const filterOrBox = ogcFilterWriter.buildFilter(\n    igoFilters,\n    extent,\n    proj,\n    ogcFilters?.geometryName,\n    options\n  );\n  let filterOrPush = ogcFilterWriter.handleOgcFiltersAppliedValue(\n    options,\n    ogcFilters?.geometryName,\n    extent,\n    proj\n  );\n\n  let prefix = 'filter';\n  if (extent && !filterOrPush) {\n    prefix = 'bbox';\n    filterOrPush = extent.join(',') + ',' + proj.getCode();\n  }\n\n  if (ogcFilters?.advancedOgcFilters || filterOrPush) {\n    paramsWFS.xmlFilter = ogcFilters?.advancedOgcFilters\n      ? filterOrBox\n      : `${prefix}=${filterOrPush}`;\n  }\n\n  let baseUrl = queryStringValues.find((f) => f.name === 'getfeature').value;\n  const patternFilter = /(filter|bbox)=.*/gi;\n  baseUrl = patternFilter.test(paramsWFS.xmlFilter)\n    ? `${baseUrl}&${paramsWFS.xmlFilter}`\n    : baseUrl;\n  options.download = Object.assign({}, options.download, {\n    dynamicUrl: baseUrl\n  });\n  if (randomParam) {\n    baseUrl += `$&_t${new Date().getTime()}`;\n  }\n  return baseUrl.replace(/&&/g, '&');\n}\n\n/**\n * This method build/standardize WFS call query params based on the layer property.\n * @param wfsDataSourceOptions  WFSDataSourceOptions The common wfs datasource options interface\n * @param count  Number: Used to control the number of feature. Used to bypass whe wfs datasource options interface (maxFeatures)\n * @param epsg  String: Used to control the EPSG code (es: 'EPSG3857'). Used to bypass whe wfs datasource options interface (srsName)\n * @param properties  String: Used to control the queried fields  (WFS service).\n * @returns An array array of {name: '', value: ''} of predefined query params.\n */\nexport function formatWFSQueryString(\n  dataSourceOptions: WFSDataSourceOptions | WMSDataSourceOptions,\n  count?: number,\n  epsg?: string,\n  properties?: string,\n  startIndex = 0,\n  forceDefaultOutputFormat = false\n): { name: string; value: string }[] {\n  const versionWfs200 = '2.0.0'; // not the same usage as defaultWfsVersion.\n  const url = dataSourceOptions.urlWfs;\n  const paramsWFS = dataSourceOptions.paramsWFS;\n  const effectiveCount = count || defaultMaxFeatures;\n  const effectiveStartIndex =\n    paramsWFS.version === versionWfs200 ? `startIndex=${startIndex}` : '';\n  const epsgCode = epsg || defaultEpsg;\n  let outputFormat = paramsWFS.outputFormat\n    ? `outputFormat=${paramsWFS.outputFormat}`\n    : '';\n  let version = paramsWFS.version\n    ? `version=${paramsWFS.version}`\n    : `version=${defaultWfsVersion}`;\n  const paramTypename =\n    paramsWFS.version === versionWfs200 ? 'typenames' : 'typename';\n  const featureTypes = `${paramTypename}=${paramsWFS.featureTypes}`;\n  const paramMaxFeatures =\n    paramsWFS.version === versionWfs200 ? 'count' : 'maxFeatures';\n  let cnt = count\n    ? `${paramMaxFeatures}=${effectiveCount}`\n    : paramsWFS.maxFeatures\n      ? `${paramMaxFeatures}=${paramsWFS.maxFeatures}`\n      : `${paramMaxFeatures}=${effectiveCount}`;\n  if (forceDefaultOutputFormat) {\n    outputFormat = '';\n    version = 'version=1.1.0';\n    cnt = cnt.replace('count', 'maxFeatures');\n  }\n\n  const srs = epsg\n    ? `srsname=${epsgCode}`\n    : paramsWFS.srsName\n      ? 'srsname=' + paramsWFS.srsName\n      : `srsname=${epsgCode}`;\n\n  let propertyName = '';\n  let valueReference = '';\n  if (properties) {\n    propertyName = `propertyName=${properties}`;\n    valueReference = `valueReference=${properties}`;\n  }\n  const sourceFields = dataSourceOptions.sourceFields;\n  if (!propertyName && sourceFields && sourceFields.length > 0) {\n    const fieldsNames = [];\n    dataSourceOptions.sourceFields.forEach((sourcefield) => {\n      fieldsNames.push(sourcefield.name);\n    });\n    propertyName = `propertyName=${fieldsNames.join(',')},${\n      paramsWFS.fieldNameGeometry\n    }`;\n  }\n\n  const separator = url.indexOf('?') === -1 ? '?' : '&';\n  const getCapabilities = `${url}${separator}service=WFS&request=GetCapabilities&${version}`;\n  let getFeature = `${url}${separator}service=WFS&request=GetFeature&${version}&${featureTypes}&`;\n  getFeature += `${outputFormat}&${srs}&${cnt}&${propertyName}&${effectiveStartIndex}`;\n\n  let getpropertyvalue = `${url}?service=WFS&request=GetPropertyValue&version=${versionWfs200}&${featureTypes}&`;\n  getpropertyvalue += `&${cnt}&${valueReference}`;\n\n  return [\n    { name: 'outputformat', value: outputFormat },\n    { name: 'version', value: version },\n    { name: 'typename', value: featureTypes },\n    { name: 'count', value: cnt },\n    { name: 'srsname', value: srs },\n    { name: 'propertyname', value: propertyName },\n    { name: 'valuereference', value: valueReference },\n    { name: 'getcapabilities', value: getCapabilities.replace(/&&/g, '&') },\n    { name: 'getfeature', value: getFeature.replace(/&&/g, '&') },\n    { name: 'getpropertyvalue', value: getpropertyvalue.replace(/&&/g, '&') }\n  ];\n}\n\n/**\n * Validate/Modify layer's wfs options based on :\n * 1- an Openlayers's issue with GML provided from WFS. Refer to\n * https://github.com/openlayers/openlayers/pull/6400\n * 2- Set default values for optionals parameters.\n * @param wfsDataSourceOptions  WFSDataSourceOptions The common wfs datasource options interface\n * @returns An array array of {name: '', value: ''} of predefined query params.\n */\nexport function checkWfsParams(wfsDataSourceOptions, srcType?: string) {\n  if (srcType && srcType === 'wfs') {\n    // reassignation of params to paramsWFS and url to urlWFS to have a common interface with wms-wfs datasources\n    wfsDataSourceOptions.paramsWFS = wfsDataSourceOptions.params;\n  }\n\n  const paramsWFS = wfsDataSourceOptions.paramsWFS;\n  wfsDataSourceOptions.urlWfs =\n    wfsDataSourceOptions.urlWfs || wfsDataSourceOptions.url;\n\n  paramsWFS.version = paramsWFS.version || defaultWfsVersion;\n  paramsWFS.fieldNameGeometry =\n    paramsWFS.fieldNameGeometry || defaultFieldNameGeometry;\n  paramsWFS.maxFeatures = paramsWFS.maxFeatures || defaultMaxFeatures;\n\n  let outputFormat;\n  if (paramsWFS.outputFormat) {\n    outputFormat = paramsWFS.outputFormat;\n  }\n\n  if (gmlRegex.test(outputFormat) || !outputFormat) {\n    paramsWFS.version = '1.1.0';\n  }\n  return Object.assign({}, wfsDataSourceOptions);\n}\n\nexport function getFormatFromOptions(\n  options: WFSDataSourceOptions | WMSDataSourceOptions\n) {\n  const wfsOptions = options as WFSDataSourceOptions;\n\n  let olFormatCls;\n  const outputFormat = wfsOptions.paramsWFS.outputFormat\n    ? wfsOptions.paramsWFS.outputFormat\n    : undefined;\n\n  if (!outputFormat) {\n    olFormatCls = OlFormat.WFS;\n    return new olFormatCls(wfsOptions.formatOptions);\n  }\n\n  if (OlFormat[outputFormat]) {\n    olFormatCls = OlFormat[outputFormat];\n    return new olFormatCls(wfsOptions.formatOptions);\n  } else if (outputFormat.toLowerCase().match('gml2')) {\n    olFormatCls = OlFormat.WFS;\n    return new olFormatCls({\n      ...wfsOptions.formatOptions,\n      ...{ gmlFormat: olFormatGML2 }\n    });\n  } else if (outputFormat.toLowerCase().match('gml32')) {\n    olFormatCls = OlFormat.WFS;\n    return new olFormatCls({\n      ...wfsOptions.formatOptions,\n      ...{ gmlFormat: olFormatGML32 }\n    });\n  } else if (outputFormat.toLowerCase().match('gml3')) {\n    olFormatCls = OlFormat.WFS;\n    return new olFormatCls({\n      ...wfsOptions.formatOptions,\n      ...{ gmlFormat: olFormatGML3 }\n    });\n  } else if (outputFormat.toLowerCase().match('topojson')) {\n    olFormatCls = OlFormat.TopoJSON;\n    return new olFormatCls(wfsOptions.formatOptions);\n  } else if (outputFormat.toLowerCase().match('geojson')) {\n    olFormatCls = OlFormat.GeoJSON;\n    return new olFormatCls(wfsOptions.formatOptions);\n  } else if (outputFormat.toLowerCase().match('esrijson')) {\n    olFormatCls = OlFormat.EsriJSON;\n    return new olFormatCls(wfsOptions.formatOptions);\n  } else if (outputFormat.toLowerCase().match('json')) {\n    olFormatCls = OlFormat.GeoJSON;\n    return new olFormatCls(wfsOptions.formatOptions);\n  } else if (outputFormat.toLowerCase().match('gpx')) {\n    olFormatCls = OlFormat.GPX;\n    return new olFormatCls(wfsOptions.formatOptions);\n  } else if (outputFormat.toLowerCase().match('WKT')) {\n    olFormatCls = OlFormat.WKT;\n    return new olFormatCls(wfsOptions.formatOptions);\n  } else if (outputFormat.toLowerCase().match('osmxml')) {\n    olFormatCls = olFormatOSMXML;\n    return new olFormatCls(wfsOptions.formatOptions);\n  } else if (outputFormat.toLowerCase().match('kml')) {\n    olFormatCls = OlFormat.KML;\n    return new olFormatCls(wfsOptions.formatOptions);\n  }\n\n  return new olFormatCls();\n}\n","import type { HttpClient } from '@angular/common/http';\n\nimport { AuthInterceptor } from '@igo2/auth';\n\nimport OlFeature from 'ol/Feature';\nimport { Extent } from 'ol/extent';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport * as OlLoadingStrategy from 'ol/loadingstrategy';\nimport * as OlProj from 'ol/proj';\nimport olProjection from 'ol/proj/Projection';\nimport olSourceVector from 'ol/source/Vector';\n\nimport { Observable, catchError, map } from 'rxjs';\n\nimport { OgcFilterWriter } from '../../../filter/shared/ogc-filter';\nimport {\n  OgcFilterableDataSourceOptions,\n  OgcFiltersOptions\n} from '../../../filter/shared/ogc-filter.interface';\nimport { DataSource } from './datasource';\nimport { WFSDataSourceOptions } from './wfs-datasource.interface';\nimport { WFSService } from './wfs.service';\nimport {\n  buildUrl,\n  checkWfsParams,\n  defaultFieldNameGeometry,\n  defaultMaxFeatures,\n  getFormatFromOptions\n} from './wms-wfs.utils';\n\ninterface FetchFeatureOptions {\n  extent: Extent;\n  projection: olProjection;\n  httpClient: HttpClient;\n}\n\nexport class WFSDataSource extends DataSource {\n  declare public ol: olSourceVector;\n\n  set ogcFilters(value: OgcFiltersOptions) {\n    (this.options as OgcFilterableDataSourceOptions).ogcFilters = value;\n  }\n  get ogcFilters(): OgcFiltersOptions {\n    return (this.options as OgcFilterableDataSourceOptions).ogcFilters;\n  }\n\n  get saveableOptions(): Partial<WFSDataSourceOptions> {\n    const baseOptions = super.saveableOptions;\n    return {\n      ...baseOptions,\n      params: this.options.params\n    };\n  }\n\n  constructor(\n    public options: WFSDataSourceOptions,\n    protected wfsService: WFSService,\n    private authInterceptor?: AuthInterceptor\n  ) {\n    super(checkWfsParams(options, 'wfs'));\n\n    const ogcFilters = (this.options as OgcFilterableDataSourceOptions)\n      .ogcFilters;\n    const fieldNameGeometry =\n      this.options.paramsWFS.fieldNameGeometry || defaultFieldNameGeometry;\n    const ogcFilterWriter = new OgcFilterWriter();\n    (this.options as OgcFilterableDataSourceOptions).ogcFilters =\n      ogcFilterWriter.defineOgcFiltersDefaultOptions(\n        ogcFilters,\n        fieldNameGeometry\n      );\n    if (\n      (this.options as OgcFilterableDataSourceOptions).ogcFilters.enabled &&\n      (this.options as OgcFilterableDataSourceOptions).ogcFilters.editable &&\n      (options.sourceFields || []).filter((sf) => !sf.values).length > 0\n    ) {\n      this.wfsService.getSourceFieldsFromWFS(this.options);\n    }\n\n    if (ogcFilters?.pushButtons) {\n      ogcFilters.pushButtons.selectorType = 'pushButton';\n    }\n    if (ogcFilters?.checkboxes) {\n      ogcFilters.checkboxes.selectorType = 'checkbox';\n    }\n    if (ogcFilters?.radioButtons) {\n      ogcFilters.radioButtons.selectorType = 'radioButton';\n    }\n    if (ogcFilters?.select) {\n      ogcFilters.select.selectorType = 'select';\n    }\n    if (ogcFilters?.autocomplete) {\n      ogcFilters.autocomplete.selectorType = 'autocomplete';\n    }\n\n    this.setOgcFilters(\n      (this.options as OgcFilterableDataSourceOptions).ogcFilters,\n      true\n    );\n  }\n\n  protected createOlSource(): olSourceVector {\n    const vectorSource = new olSourceVector({\n      format: getFormatFromOptions(this.options),\n      strategy: OlLoadingStrategy.bbox\n    });\n    return vectorSource;\n  }\n\n  setOgcFilters(ogcFilters: OgcFiltersOptions, triggerEvent = false) {\n    this.ogcFilters = ogcFilters;\n    if (triggerEvent) {\n      this.ol.notify('ogcFilters', this.ogcFilters);\n    }\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n\n  fetchFeatures({\n    extent,\n    projection,\n    httpClient\n  }: FetchFeatureOptions): Observable<OlFeature<OlGeometry>[]> {\n    const paramsWFS = this.options.paramsWFS;\n    const wfsProj = paramsWFS.srsName\n      ? new olProjection({ code: paramsWFS.srsName })\n      : projection;\n\n    const currentExtent = extent\n      ? OlProj.transformExtent(extent, projection, wfsProj)\n      : undefined;\n    const ogcFilters = this.ogcFilters;\n\n    paramsWFS.srsName = paramsWFS.srsName || projection.getCode();\n    let url = buildUrl(this.options, currentExtent, wfsProj, ogcFilters);\n\n    // Exportation want to fetch without extent/bbox restrictions\n    if (!extent && url.includes('bbox')) {\n      const [baseUrl, params] = url.split('?');\n      const paramSegments = params.split('&');\n      const paramsWithoutBbox = paramSegments.filter(\n        (segment) => !segment.includes('bbox')\n      );\n      url = `${baseUrl}?${paramsWithoutBbox.join('&')}`;\n    }\n\n    let startIndex = 0;\n    if (\n      paramsWFS.version === '2.0.0' &&\n      paramsWFS.maxFeatures > defaultMaxFeatures\n    ) {\n      const nbOfFeature = 1000;\n      while (startIndex < paramsWFS.maxFeatures) {\n        let alteredUrl = url.replace(\n          'count=' + paramsWFS.maxFeatures,\n          'count=' + nbOfFeature\n        );\n        alteredUrl = alteredUrl.replace('startIndex=0', '0');\n        alteredUrl += '&startIndex=' + startIndex;\n        alteredUrl.replace(/&&/g, '&');\n\n        return this._fetchFeatures(wfsProj, alteredUrl, {\n          extent: currentExtent,\n          projection,\n          httpClient\n        }).pipe(\n          map((res) => {\n            startIndex += nbOfFeature;\n            return res;\n          })\n        );\n      }\n    } else {\n      return this._fetchFeatures(wfsProj, url, {\n        extent: currentExtent,\n        projection,\n        httpClient\n      });\n    }\n  }\n\n  private _fetchFeatures(\n    featureProjection: olProjection,\n    url: string,\n    { extent, projection, httpClient }: FetchFeatureOptions\n  ): Observable<OlFeature<OlGeometry>[]> {\n    return httpClient.get(url, { responseType: 'text' }).pipe(\n      map((response) => {\n        return this._parseXmlFeatures(response, projection, featureProjection);\n      }),\n      catchError((e) => {\n        if (extent) this.ol.removeLoadedExtent(extent);\n        throw e;\n      })\n    );\n  }\n\n  private _parseXmlFeatures(\n    xml: string,\n    dataProjection: olProjection,\n    featureProjection: olProjection\n  ): OlFeature<OlGeometry>[] {\n    const features = this.ol.getFormat().readFeatures(xml, {\n      dataProjection,\n      featureProjection\n    }) as OlFeature<OlGeometry>[];\n    return features;\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport olFeature from 'ol/Feature';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\n\nimport { Observable, combineLatest, of } from 'rxjs';\nimport { concatMap } from 'rxjs/operators';\n\nimport { DataService } from './data.service';\nimport { WFSDataSourceOptions } from './wfs-datasource.interface';\nimport { WMSDataSourceOptions } from './wms-datasource.interface';\nimport {\n  defaultEpsg,\n  defaultMaxFeatures,\n  formatWFSQueryString,\n  getFormatFromOptions,\n  gmlRegex\n} from './wms-wfs.utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WFSService extends DataService {\n  constructor(private http: HttpClient) {\n    super();\n  }\n\n  getData() {\n    console.log('This is defining a data service.');\n    return 'This is defining a data service.';\n  }\n\n  public getSourceFieldsFromWFS(\n    dataSourceOptions: WFSDataSourceOptions | WMSDataSourceOptions\n  ) {\n    if (\n      !dataSourceOptions.sourceFields ||\n      dataSourceOptions.sourceFields.length === 0\n    ) {\n      dataSourceOptions.sourceFields = [];\n      this.defineFieldAndValuefromWFS(dataSourceOptions).subscribe(\n        (getfeatureSourceField) => {\n          dataSourceOptions.sourceFields = getfeatureSourceField;\n        }\n      );\n    } else {\n      this.defineFieldAndValuefromWFS(dataSourceOptions).subscribe(\n        (getfeatureSourceField) => {\n          dataSourceOptions.sourceFields.forEach((sourcefield) => {\n            if (sourcefield.alias === undefined) {\n              sourcefield.alias = sourcefield.name; // to allow only a list of sourcefield with names\n            }\n            if (\n              sourcefield.values === undefined ||\n              sourcefield.values.length === 0\n            ) {\n              sourcefield.values = getfeatureSourceField.find(\n                (sf) => sf.name === sourcefield.name\n              ).values;\n            }\n          });\n        }\n      );\n    }\n  }\n\n  private wfsGetFeature(\n    dataSourceOptions: WFSDataSourceOptions | WMSDataSourceOptions,\n    nb: number = defaultMaxFeatures,\n    epsgCode: string = defaultEpsg,\n    propertyName?: string,\n    startIndex = 0,\n    forceDefaultOutputFormat = false\n  ): Observable<any> {\n    const queryStringValues = formatWFSQueryString(\n      dataSourceOptions,\n      nb,\n      epsgCode,\n      propertyName,\n      startIndex,\n      forceDefaultOutputFormat\n    );\n    const baseUrl = queryStringValues.find(\n      (f) => f.name === 'getfeature'\n    ).value;\n    const outputFormat = dataSourceOptions.paramsWFS.outputFormat;\n    if (\n      forceDefaultOutputFormat ||\n      gmlRegex.test(outputFormat) ||\n      !outputFormat\n    ) {\n      return this.http.get(baseUrl, { responseType: 'text' });\n    } else {\n      return this.http.get(baseUrl);\n    }\n  }\n\n  defineFieldAndValuefromWFS(\n    dataSourceOptions: WFSDataSourceOptions | WMSDataSourceOptions\n  ): Observable<any> {\n    return new Observable((d) => {\n      const sourceFields = [];\n      let fieldList;\n      let fieldListWoGeom;\n      let fieldListWoGeomStr;\n      let effectiveOlFormats;\n\n      const olFormats = getFormatFromOptions(dataSourceOptions);\n      const gmlDataSourceOptions: WFSDataSourceOptions | WMSDataSourceOptions =\n        JSON.parse(JSON.stringify(dataSourceOptions));\n      delete gmlDataSourceOptions.paramsWFS.outputFormat;\n      delete (gmlDataSourceOptions as WFSDataSourceOptions).formatOptions;\n\n      effectiveOlFormats = getFormatFromOptions(gmlDataSourceOptions);\n      let sourceFieldsToRetrieveValues = dataSourceOptions.sourceFields\n        ?.filter((f) => !f.values)\n        .map((f) => f.name);\n\n      // Validate if the service manage no outputformat (wfs 1.0.0 and GML is the default return)\n      this.wfsGetFeature(dataSourceOptions, 1, undefined, undefined, 0, true)\n        .pipe(\n          concatMap((res) =>\n            String(res).toLowerCase().includes('exception')\n              ? of(false)\n              : of(true)\n          ),\n          concatMap((allowGml) => {\n            // If the service return GML (return no exception)\n            return this.wfsGetFeature(dataSourceOptions, 1).pipe(\n              concatMap((firstFeature) => {\n                const features = olFormats.readFeatures(firstFeature);\n                fieldList = features[0].getKeys();\n                if (\n                  dataSourceOptions.sourceFields ||\n                  dataSourceOptions.sourceFields.length === 0\n                ) {\n                  sourceFieldsToRetrieveValues = fieldList;\n                }\n                fieldListWoGeom = fieldList.filter(\n                  (field) =>\n                    sourceFieldsToRetrieveValues.includes(field) &&\n                    field !== features[0].getGeometryName() &&\n                    !field.match(/boundedby/gi)\n                );\n                fieldListWoGeomStr = fieldListWoGeom.join(',');\n                const processingArray = [];\n                let startIndex = 0;\n                // If the service do not allow gml return, dice the call in multiple\n                // calls by increment of chunkSize with the original outputFormat\n                if (\n                  !allowGml &&\n                  dataSourceOptions.paramsWFS.version === '2.0.0' &&\n                  dataSourceOptions.paramsWFS.maxFeatures > defaultMaxFeatures\n                ) {\n                  const chunkSize = 1000;\n                  while (startIndex < dataSourceOptions.paramsWFS.maxFeatures) {\n                    processingArray.push(\n                      this.wfsGetFeature(\n                        dataSourceOptions,\n                        chunkSize,\n                        dataSourceOptions.paramsWFS.srsName,\n                        fieldListWoGeomStr,\n                        startIndex\n                      )\n                    );\n                    startIndex += chunkSize;\n                  }\n                  effectiveOlFormats = olFormats;\n                } else {\n                  processingArray.push(\n                    this.wfsGetFeature(\n                      dataSourceOptions,\n                      dataSourceOptions.paramsWFS.maxFeatures ||\n                        defaultMaxFeatures,\n                      dataSourceOptions.paramsWFS.srsName,\n                      fieldListWoGeomStr,\n                      0,\n                      true\n                    )\n                  );\n                }\n                return combineLatest(processingArray);\n              })\n            );\n          })\n        )\n        .subscribe((results) => {\n          let mfeatures: olFeature<OlGeometry>[] = [];\n          results.map((result) => {\n            const loopFeatures = effectiveOlFormats.readFeatures(result);\n            mfeatures = mfeatures.concat(loopFeatures);\n          });\n          this.built_properties_value(mfeatures).forEach((element) => {\n            sourceFields.push(element);\n          });\n          d.next(sourceFields);\n          d.complete();\n        });\n    });\n  }\n\n  private built_properties_value(features: olFeature<OlGeometry>[]): string[] {\n    if (features.length === 0) {\n      return [];\n    }\n    const kv = Object.assign({}, features[0].getProperties());\n    delete kv[features[0].getGeometryName()];\n    delete kv.boundedBy;\n    const sourceFields = [];\n    for (const property in kv) {\n      // eslint-disable-next-line no-prototype-builtins\n      if (kv.hasOwnProperty(property)) {\n        const fieldType =\n          typeof features[0].get(property) === 'object'\n            ? undefined\n            : typeof features[0].get(property);\n        sourceFields.push({\n          name: property,\n          alias: property,\n          type: fieldType,\n          values: [kv[property]]\n        });\n      }\n    }\n    features.every((element) => {\n      const featureProperties = element.getProperties();\n      for (const key in featureProperties) {\n        // eslint-disable-next-line no-prototype-builtins\n        if (featureProperties.hasOwnProperty(key) && key in kv) {\n          sourceFields\n            .filter((f) => f.name === key)\n            .forEach((v) => {\n              if (v.values.indexOf(featureProperties[key]) === -1) {\n                v.values.push(featureProperties[key]);\n              }\n            });\n        }\n      }\n      return true;\n    });\n    return sourceFields;\n  }\n}\n","export enum QueryFormat {\n  GML2 = 'gml2',\n  GML3 = 'gml3',\n  JSON = 'json',\n  GEOJSON = 'geojson',\n  GEOJSON2 = 'geojson2',\n  ESRIJSON = 'esrijson',\n  TEXT = 'text',\n  HTML = 'html',\n  HTMLGML2 = 'htmlgml2'\n}\n\nexport enum QueryFormatMimeType {\n  GML2 = 'application/vnd.ogc.gml',\n  GML3 = 'application/vnd.ogc.gml/3.1.1',\n  JSON = 'application/json',\n  GEOJSON = 'application/geojson',\n  GEOJSON2 = 'geojson',\n  // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n  ESRIJSON = 'application/json',\n  TEXT = 'text/plain',\n  HTML = 'text/html',\n  // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n  HTMLGML2 = 'text/html'\n}\n\nexport enum QueryHtmlTarget {\n  IFRAME = 'iframe',\n  BLANK = '_blank'\n}\n","import { ObjectUtils } from '@igo2/utils';\n\nimport olSourceImageWMS from 'ol/source/ImageWMS';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { OgcFilterWriter } from '../../../filter/shared/ogc-filter';\nimport {\n  OgcFilterDuringOptions,\n  OgcFilterableDataSourceOptions,\n  OgcFiltersOptions\n} from '../../../filter/shared/ogc-filter.interface';\nimport { TimeFilterOptions } from '../../../filter/shared/time-filter.interface';\nimport { LegendMapViewOptions } from '../../../layer/shared/layers/legend.interface';\nimport { QueryHtmlTarget } from '../../../query/shared/query.enums';\nimport { DataSource } from './datasource';\nimport { Legend } from './datasource.interface';\nimport { WFSService } from './wfs.service';\nimport {\n  TimeFilterableDataSourceOptions,\n  WMSDataSourceOptions\n} from './wms-datasource.interface';\nimport {\n  checkWfsParams,\n  defaultFieldNameGeometry,\n  formatWFSQueryString\n} from './wms-wfs.utils';\n\nexport interface TimeFilterableDataSource extends WMSDataSource {\n  options: TimeFilterableDataSourceOptions;\n  timeFilter$: BehaviorSubject<TimeFilterOptions>;\n  setTimeFilter(ogcFilters: TimeFilterOptions, triggerEvent?: boolean);\n  filterByDate(date: Date | [Date, Date]);\n  filterByYear(year: string | [string, string]);\n}\n\nexport class WMSDataSource extends DataSource {\n  declare public ol: olSourceImageWMS;\n\n  get params(): any {\n    return this.options.params as any;\n  }\n\n  get queryTitle(): string {\n    return (this.options as any).queryTitle\n      ? (this.options as any).queryTitle\n      : 'title';\n  }\n\n  get mapLabel(): string {\n    return (this.options as any).mapLabel;\n  }\n\n  get queryHtmlTarget(): string {\n    return (this.options as any).queryHtmlTarget\n      ? (this.options as any).queryHtmlTarget\n      : QueryHtmlTarget.BLANK;\n  }\n\n  set ogcFilters(value: OgcFiltersOptions) {\n    (this.options as OgcFilterableDataSourceOptions).ogcFilters = value;\n  }\n  get ogcFilters(): OgcFiltersOptions {\n    return (this.options as OgcFilterableDataSourceOptions).ogcFilters;\n  }\n\n  set timeFilter(value: TimeFilterOptions) {\n    (this.options as TimeFilterableDataSourceOptions).timeFilter = value;\n  }\n  get timeFilter(): TimeFilterOptions {\n    return (this.options as TimeFilterableDataSourceOptions).timeFilter;\n  }\n  readonly timeFilter$ = new BehaviorSubject<TimeFilterOptions>(undefined);\n\n  get saveableOptions(): Partial<WMSDataSourceOptions> {\n    const baseOptions = super.saveableOptions;\n    return {\n      ...baseOptions,\n      params: this.params\n    };\n  }\n\n  constructor(\n    public options: WMSDataSourceOptions,\n    protected wfsService: WFSService\n  ) {\n    super(options);\n    const sourceParams: any = options.params;\n\n    const dpi = sourceParams.DPI || 96;\n    sourceParams.DPI = dpi;\n    sourceParams.MAP_RESOLUTION = dpi;\n    sourceParams.FORMAT_OPTIONS = 'dpi:' + dpi;\n\n    if (options.refreshIntervalSec && options.refreshIntervalSec > 0) {\n      setInterval(() => {\n        this.refresh();\n      }, options.refreshIntervalSec * 1000); // Convert seconds to MS\n    }\n\n    let fieldNameGeometry = defaultFieldNameGeometry;\n\n    // ####   START if paramsWFS\n    if (options.paramsWFS) {\n      const wfsCheckup = checkWfsParams(options, 'wms');\n      ObjectUtils.mergeDeep(options.paramsWFS, wfsCheckup.paramsWFS);\n\n      fieldNameGeometry =\n        options.paramsWFS.fieldNameGeometry || fieldNameGeometry;\n\n      options.download = Object.assign({}, options.download, {\n        dynamicUrl: this.buildDynamicDownloadUrlFromParamsWFS(options)\n      });\n    } //  ####   END  if paramsWFS\n\n    if (!options.sourceFields || options.sourceFields.length === 0) {\n      options.sourceFields = [];\n    } else {\n      options.sourceFields.forEach((sourceField) => {\n        sourceField.alias = sourceField.alias\n          ? sourceField.alias\n          : sourceField.name;\n        // to allow only a list of sourcefield with names\n      });\n    }\n    const initOgcFilters = (options as OgcFilterableDataSourceOptions)\n      .ogcFilters;\n    const ogcFilterWriter = new OgcFilterWriter();\n\n    if (!initOgcFilters) {\n      (options as OgcFilterableDataSourceOptions).ogcFilters =\n        ogcFilterWriter.defineOgcFiltersDefaultOptions(\n          initOgcFilters,\n          fieldNameGeometry,\n          'wms'\n        );\n    } else {\n      initOgcFilters.advancedOgcFilters =\n        initOgcFilters.pushButtons ||\n        initOgcFilters.checkboxes ||\n        initOgcFilters.radioButtons ||\n        initOgcFilters.select ||\n        initOgcFilters.autocomplete\n          ? false\n          : true;\n      if (initOgcFilters.advancedOgcFilters && initOgcFilters.filters) {\n        const filterDuring = initOgcFilters.filters as OgcFilterDuringOptions;\n        if (filterDuring.calendarModeYear) {\n          initOgcFilters.advancedOgcFilters = false;\n        }\n      }\n      if (initOgcFilters.pushButtons) {\n        initOgcFilters.pushButtons.selectorType = 'pushButton';\n      }\n      if (initOgcFilters.checkboxes) {\n        initOgcFilters.checkboxes.selectorType = 'checkbox';\n      }\n      if (initOgcFilters.radioButtons) {\n        initOgcFilters.radioButtons.selectorType = 'radioButton';\n      }\n      if (initOgcFilters.select) {\n        initOgcFilters.select.selectorType = 'select';\n      }\n      if (initOgcFilters.autocomplete) {\n        initOgcFilters.autocomplete.selectorType = 'autocomplete';\n      }\n    }\n\n    if (\n      sourceParams.LAYERS.split(',').length > 1 &&\n      initOgcFilters &&\n      initOgcFilters.enabled\n    ) {\n      console.log('*******************************');\n      console.log(\n        'BE CAREFULL, YOUR WMS LAYERS (' +\n          sourceParams.LAYERS +\n          ') MUST SHARE THE SAME FIELDS TO ALLOW ogcFilters TO WORK !! '\n      );\n      console.log('*******************************');\n    }\n\n    if (\n      options.paramsWFS &&\n      initOgcFilters &&\n      initOgcFilters.enabled &&\n      initOgcFilters.editable &&\n      (options.sourceFields || []).filter((sf) => !sf.values).length > 0\n    ) {\n      this.wfsService.getSourceFieldsFromWFS(options);\n    }\n\n    const filterQueryString = ogcFilterWriter.handleOgcFiltersAppliedValue(\n      options,\n      fieldNameGeometry\n    );\n    sourceParams.FILTER = filterQueryString;\n    this.ol.updateParams({ FILTER: sourceParams.FILTER });\n    this.setOgcFilters(initOgcFilters, true);\n\n    const timeFilterableDataSourceOptions =\n      options as TimeFilterableDataSourceOptions;\n    if (\n      timeFilterableDataSourceOptions?.timeFilterable &&\n      timeFilterableDataSourceOptions?.timeFilter\n    ) {\n      this.setTimeFilter(timeFilterableDataSourceOptions.timeFilter, true);\n    }\n  }\n\n  refresh() {\n    this.ol.updateParams({ igoRefresh: Math.random() });\n  }\n\n  private buildDynamicDownloadUrlFromParamsWFS(asWFSDataSourceOptions) {\n    const queryStringValues = formatWFSQueryString(asWFSDataSourceOptions);\n    const downloadUrl = queryStringValues.find(\n      (f) => f.name === 'getfeature'\n    ).value;\n    return downloadUrl;\n  }\n\n  protected createOlSource(): olSourceImageWMS {\n    return new olSourceImageWMS(Object.assign({ ratio: 1 }, this.options));\n  }\n\n  setOgcFilters(ogcFilters: OgcFiltersOptions, triggerEvent = false) {\n    this.ogcFilters = ogcFilters;\n    if (triggerEvent) {\n      this.ol.notify('ogcFilters', this.ogcFilters);\n    }\n  }\n\n  setTimeFilter(timeFilter: TimeFilterOptions, triggerEvent = false) {\n    this.timeFilter = timeFilter;\n    if (triggerEvent) {\n      this.timeFilter$.next(this.timeFilter);\n      this.ol.notify('timeFilter', this.ogcFilters);\n    }\n  }\n\n  getLegend(style?: string, view?: LegendMapViewOptions): Legend[] {\n    let legend = super.getLegend();\n    if (legend.length > 0 && style === undefined && !view?.scale) {\n      return legend;\n    }\n\n    let contentDependent = false;\n    let projParam;\n\n    if (\n      view?.size &&\n      view?.extent &&\n      view?.projection &&\n      this.options.contentDependentLegend\n    ) {\n      projParam =\n        this.params.VERSION === '1.3.0' || this.params.VERSION === undefined\n          ? 'CRS'\n          : 'SRS';\n      contentDependent = true;\n    }\n\n    const sourceParams = this.params;\n\n    let layers = [];\n    if (sourceParams.LAYERS !== undefined) {\n      layers = sourceParams.LAYERS.split(',');\n    }\n\n    const baseUrl = this.options.url.replace(/\\?$/, '');\n    const params = [\n      'REQUEST=GetLegendGraphic',\n      'SERVICE=WMS',\n      'FORMAT=image/png',\n      'SLD_VERSION=1.1.0',\n      `VERSION=${sourceParams.VERSION || '1.3.0'}`\n    ];\n    if (style !== undefined) {\n      params.push(`STYLE=${style}`);\n    }\n    if (view?.scale !== undefined) {\n      params.push(`SCALE=${view.scale}`);\n    }\n    if (contentDependent) {\n      params.push(`WIDTH=${view.size[0]}`);\n      params.push(`HEIGHT=${view.size[1]}`);\n      params.push(`BBOX=${view.extent.join(',')}`);\n      params.push(`${projParam}=${view.projection}`);\n    }\n\n    legend = layers.map((layer: string) => {\n      const separator = baseUrl.match(/\\?/) ? '&' : '?';\n      return {\n        url: `${baseUrl}${separator}${params.join('&')}&LAYER=${layer}`,\n        title: layers.length > 1 ? layer : undefined,\n        currentStyle: style === undefined ? undefined : (style as string)\n      };\n    });\n\n    return legend;\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n\nexport interface TimeFilterableDataSource extends WMSDataSource {\n  options: TimeFilterableDataSourceOptions;\n  timeFilter$: BehaviorSubject<TimeFilterOptions>;\n  setTimeFilter(ogcFilters: TimeFilterOptions, triggerEvent?: boolean);\n  filterByDate(date: Date | [Date, Date]);\n  filterByYear(year: string | [string, string]);\n}\n","import {\n  getTopLeft as extentGetTopLeft,\n  getWidth as extentGetWidth\n} from 'ol/extent.js';\nimport * as olproj from 'ol/proj';\nimport olTileGridWMTS from 'ol/tilegrid/WMTS';\n\nexport function createDefaultTileGrid(epsg?: string): olTileGridWMTS {\n  const projection = epsg ? olproj.get(epsg) : olproj.get('EPSG:3857');\n  const projectionExtent = projection.getExtent();\n  const size = extentGetWidth(projectionExtent) / 256;\n  const resolutions = new Array(20);\n  const matrixIds = new Array(20);\n  for (let z = 0; z < 20; ++z) {\n    resolutions[z] = size / Math.pow(2, z);\n    matrixIds[z] = z;\n  }\n\n  return new olTileGridWMTS({\n    origin: extentGetTopLeft(projectionExtent),\n    resolutions,\n    matrixIds\n  });\n}\n","import { Options } from 'ol/source/WMTS';\nimport olSourceWMTS from 'ol/source/WMTS';\n\nimport { createDefaultTileGrid } from '../../utils/tilegrid';\nimport { DataSource } from './datasource';\nimport { WMTSDataSourceOptions } from './wmts-datasource.interface';\n\nexport class WMTSDataSource extends DataSource {\n  declare public options: WMTSDataSourceOptions;\n  declare public ol: olSourceWMTS;\n\n  constructor(options: WMTSDataSourceOptions) {\n    super(options);\n  }\n\n  protected createOlSource(): olSourceWMTS {\n    const sourceOptions = Object.assign(\n      {\n        tileGrid: createDefaultTileGrid(this.options.projection as string)\n      },\n      this.options\n    ) as Options;\n\n    return new olSourceWMTS(sourceOptions);\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n","import olSourceCarto from 'ol/source/CartoDB';\n\nimport { QueryHtmlTarget } from '../../../query/shared/query.enums';\nimport { CartoDataSourceOptions } from './carto-datasource.interface';\nimport { DataSource } from './datasource';\nimport { Legend } from './datasource.interface';\n\nexport class CartoDataSource extends DataSource {\n  declare public ol: olSourceCarto;\n  declare public options: CartoDataSourceOptions;\n\n  get params(): any {\n    return this.options.params as any;\n  }\n\n  get queryTitle(): string {\n    return (this.options as any).queryTitle\n      ? (this.options as any).queryTitle\n      : 'title';\n  }\n\n  get mapLabel(): string {\n    return (this.options as any).mapLabel;\n  }\n\n  get queryHtmlTarget(): string {\n    return (this.options as any).queryHtmlTarget\n      ? (this.options as any).queryHtmlTarget\n      : QueryHtmlTarget.BLANK;\n  }\n\n  get saveableOptions(): Partial<CartoDataSourceOptions> {\n    const baseOptions = super.saveableOptions;\n    return {\n      ...baseOptions,\n      params: this.options.params\n    };\n  }\n\n  protected createOlSource(): olSourceCarto {\n    const crossOrigin = this.options.crossOrigin\n      ? this.options.crossOrigin\n      : 'anonymous';\n    const sourceOptions = Object.assign(\n      {\n        crossOrigin\n      },\n      this.options\n    );\n    return new olSourceCarto(sourceOptions);\n  }\n\n  getLegend(): Legend[] {\n    const legend = super.getLegend();\n    if (legend.length > 0) {\n      return legend;\n    }\n\n    let htmlString = '<table>';\n    if (this.options.config.layers[0].legend) {\n      this.options.config.layers[0].legend.items.forEach((f) => {\n        if (f.visible === true) {\n          htmlString +=\n            '<tr><td>' +\n            '<p><font size=\"5\" color=\"' +\n            f.value +\n            '\"> &#9679</font></p></td>' +\n            '<td>' +\n            f.name +\n            '</td></tr>';\n        }\n      });\n      htmlString += '</table>';\n      return [{ html: htmlString }];\n    } else {\n      // Try to build the legend from the cartocss options\n      const layerOptions = this.options.config.layers[0].options;\n      // All available cartocss style options\n      const types = [\n        'polygon-fill:',\n        'marker-fill:',\n        'shield-fill:',\n        'building-fill:',\n        'line-color:'\n      ];\n      for (const oneType of types) {\n        if (layerOptions.cartocss.includes(oneType)) {\n          const type = layerOptions.cartocss.split(oneType).pop();\n          const color = type.substr(0, type.indexOf(';'));\n          if (color.includes('ramp')) {\n            const colors = color.split(', (')[1].split(',');\n            const data = color.split(', (')[2].split(',');\n            for (let j = 0; j < colors.length; j++) {\n              colors[j] = colors[j].replace(/(\"|\\))/g, '');\n              data[j] = data[j].replace(/(\"|\\))/g, '');\n              if (data[j].replace(/\\s+/g, '') === '=') {\n                data[j] = 'Autres';\n              }\n              htmlString +=\n                '<tr><td>' +\n                '<p><font size=\"5\" color=\"' +\n                colors[j] +\n                '\"> &#9679</font></p></td>' +\n                '<td>' +\n                data[j] +\n                '</td></tr>';\n            }\n            break;\n          } else {\n            const title = layerOptions.layer_name\n              ? layerOptions.layer_name\n              : '';\n            htmlString +=\n              '<tr><td>' +\n              '<p><font size=\"5\" color=\"' +\n              color +\n              '\"> &#9679</font></p>' +\n              '</td><td>' +\n              title +\n              '</td></tr>';\n            break;\n          }\n        }\n      }\n      htmlString += '</table>';\n      return [{ html: htmlString }];\n    }\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n","import olFormatEsriJSON from 'ol/format/EsriJSON';\nimport * as olloadingstrategy from 'ol/loadingstrategy';\nimport olSourceVector from 'ol/source/Vector';\n\nimport { ArcGISRestDataSourceOptions } from './arcgisrest-datasource.interface';\nimport { DataSource } from './datasource';\nimport { Legend } from './datasource.interface';\n\nexport class ArcGISRestDataSource extends DataSource {\n  declare public ol: olSourceVector;\n  declare public options: ArcGISRestDataSourceOptions;\n\n  get saveableOptions(): Partial<ArcGISRestDataSourceOptions> {\n    const baseOptions = super.saveableOptions;\n    return {\n      ...baseOptions,\n      params: this.options.params,\n      url: this.options.url\n    };\n  }\n\n  protected createOlSource(): olSourceVector {\n    const esrijsonFormat = new olFormatEsriJSON();\n    return new olSourceVector({\n      attributions: this.options.params.attributions,\n      overlaps: false,\n      format: esrijsonFormat,\n      url: function (extent) {\n        const baseUrl = this.options.url + '/' + this.options.layer + '/query/';\n        const geometry = encodeURIComponent(\n          '{\"xmin\":' +\n            extent[0] +\n            ',\"ymin\":' +\n            extent[1] +\n            ',\"xmax\":' +\n            extent[2] +\n            ',\"ymax\":' +\n            extent[3] +\n            ',\"spatialReference\":{\"wkid\":102100}}'\n        );\n        const params = [\n          'f=json',\n          `geometry=${geometry}`,\n          'geometryType=esriGeometryEnvelope',\n          'inSR=102100',\n          'spatialRel=esriSpatialRelIntersects',\n          'outFields=*',\n          'returnGeometry=true',\n          'outSR=102100'\n        ];\n        if (this.options.params.time) {\n          const time = `time=${this.options.params.time}`;\n          params.push(time);\n        }\n        if (this.options.params.customParams) {\n          this.options.params.customParams.forEach((element) => {\n            params.push(element);\n          });\n        }\n        return `${baseUrl}?${params.join('&')}`;\n      }.bind(this),\n      strategy: olloadingstrategy.bbox\n    });\n  }\n\n  getLegend(): Legend[] {\n    const legendInfo = this.options.legendInfo;\n    const legend = super.getLegend();\n    if (legendInfo === undefined || legend.length > 0) {\n      return legend;\n    }\n    if (!legendInfo) {\n      return;\n    }\n    let htmlString = '<table>';\n    let src: string;\n    let label: string;\n    let svg: string;\n\n    if (legendInfo.legend) {\n      for (const legendElement of legendInfo.legend) {\n        src = this.htmlImgSrc(\n          legendElement.contentType,\n          legendElement.imageData\n        );\n        label = legendElement.label\n          ? legendElement.label.replace('<Null>', 'Null')\n          : '';\n        htmlString +=\n          `<tr><td align='left'><img src=\"` +\n          src +\n          `\" alt ='' /></td><td class=\"mat-typography\">` +\n          label +\n          '</td></tr>';\n      }\n    } else if (legendInfo.type === 'uniqueValue') {\n      for (const legendElement of legendInfo.uniqueValueInfos) {\n        label = legendElement.label.replace('<Null>', 'Null');\n        if (legendElement.symbol.type === 'esriPMS') {\n          src = this.htmlImgSrc(\n            legendElement.symbol.contentType,\n            legendElement.symbol.imageData\n          );\n          htmlString +=\n            `<tr><td align='left'><img src=\"` +\n            src +\n            `\" alt ='' /></td><td class=\"mat-typography\">` +\n            label +\n            '</td></tr>';\n        } else if (legendElement.symbol.type !== 'esriPMS') {\n          svg = this.createSVG(legendElement.symbol);\n          htmlString +=\n            `<tr><td align='left'>` +\n            svg +\n            `</td><td class=\"mat-typography\">` +\n            label +\n            '</td></tr>';\n        }\n      }\n    } else if (legendInfo.type === 'simple') {\n      label = legendInfo.label\n        ? legendInfo.label.replace('<Null>', 'Null')\n        : '';\n      if (legendInfo.symbol.type === 'esriPMS') {\n        src = this.htmlImgSrc(\n          legendInfo.symbol.contentType,\n          legendInfo.symbol.imageData\n        );\n        htmlString +=\n          `<tr><td align='left'><img src=\"` +\n          src +\n          `\" alt ='' /></td><td class=\"mat-typography\">` +\n          label +\n          '</td></tr>';\n      } else if (legendInfo.symbol.type !== 'esriPMS') {\n        svg = this.createSVG(legendInfo.symbol);\n        htmlString +=\n          `<tr><td align='left'>` +\n          svg +\n          `</td><td class=\"mat-typography\">` +\n          label +\n          '</td></tr>';\n      }\n    }\n    htmlString += '</table>';\n    return [{ html: htmlString }];\n  }\n\n  htmlImgSrc(contentType: string, imageData: string): string {\n    return `data:${contentType};base64,${imageData}`;\n  }\n\n  createSVG(symbol): string {\n    let svg = '';\n\n    const color: number[] = symbol.color ? symbol.color : [0, 0, 0, 0];\n\n    if (symbol.type === 'esriSLS') {\n      const width: number = symbol.width ? symbol.width : 0;\n\n      const stroke: string =\n        `stroke:rgba(` +\n        color[0] +\n        ',' +\n        color[1] +\n        ',' +\n        color[2] +\n        ',' +\n        color[3] +\n        ')';\n      const strokeWidth: string = `stroke-width:` + width;\n\n      if (symbol.style === 'esriSLSSolid') {\n        svg =\n          `<svg height=\"30\" width=\"30\"><line x1=\"0\" y1=\"15\" x2=\"30\" y2=\"15\" style=\"` +\n          stroke +\n          ';' +\n          strokeWidth +\n          `\"/></svg>`;\n      } else if (symbol.style === 'esriSLSDash') {\n        const strokeDashArray = `stroke-dasharray=\"5,5\"`;\n        svg =\n          `<svg height=\"30\" width=\"30\"><line x1=\"0\" y1=\"15\" x2=\"30\" y2=\"15\" style=\"` +\n          stroke +\n          ';' +\n          strokeWidth +\n          `\" ` +\n          strokeDashArray +\n          `/></svg>`;\n      }\n    } else if (\n      symbol.style === 'esriSMSCircle' ||\n      symbol.style === 'esriSFSSolid'\n    ) {\n      const outlineColor = symbol.outline.color;\n      const outlineWidth = symbol.outline.width;\n      const size = symbol.size;\n\n      const stroke =\n        `stroke:rgba(` +\n        outlineColor[0] +\n        ',' +\n        outlineColor[1] +\n        ',' +\n        outlineColor[2] +\n        ',' +\n        outlineColor[3] +\n        ')';\n      const strokeWidth = `stroke-width:` + outlineWidth;\n      const fill =\n        `fill:rgba(` +\n        color[0] +\n        ',' +\n        color[1] +\n        ',' +\n        color[2] +\n        ',' +\n        color[3] +\n        ')';\n\n      if (symbol.style === 'esriSMSCircle') {\n        svg =\n          `<svg height=\"30\" width=\"30\"><circle cx=\"15\" cy=\"15\" r=\"` +\n          size / 2 +\n          `\" style=\"` +\n          stroke +\n          ';' +\n          strokeWidth +\n          ';' +\n          fill +\n          `\"/></svg>`;\n      } else {\n        svg =\n          `<svg height=\"30\" width=\"30\"><rect x=\"5\" y=\"5\" width=\"20\" height=\"20\" style =\"` +\n          stroke +\n          ';' +\n          strokeWidth +\n          ';' +\n          fill +\n          `\"/></svg>`;\n      }\n    }\n    return svg;\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n","import ImageArcGISRest from 'ol/source/ImageArcGISRest';\n\nimport { QueryHtmlTarget } from '../../../query/shared/query.enums';\nimport { DataSource } from './datasource';\nimport { Legend } from './datasource.interface';\nimport { ArcGISRestImageDataSourceOptions } from './imagearcgisrest-datasource.interface';\n\nexport class ImageArcGISRestDataSource extends DataSource {\n  declare public ol: ImageArcGISRest;\n  declare public options: ArcGISRestImageDataSourceOptions;\n\n  get params(): any {\n    return this.options.params as any;\n  }\n\n  get queryTitle(): string {\n    return (this.options as any).queryTitle\n      ? (this.options as any).queryTitle\n      : 'title';\n  }\n\n  get mapLabel(): string {\n    return (this.options as any).mapLabel;\n  }\n\n  get queryHtmlTarget(): string {\n    return (this.options as any).queryHtmlTarget\n      ? (this.options as any).queryHtmlTarget\n      : QueryHtmlTarget.BLANK;\n  }\n\n  get saveableOptions(): Partial<ArcGISRestImageDataSourceOptions> {\n    const baseOptions = super.saveableOptions;\n    return {\n      ...baseOptions,\n      params: this.options.params\n    };\n  }\n\n  protected createOlSource(): ImageArcGISRest {\n    const params =\n      this.options.layer === undefined\n        ? this.options.params\n        : Object.assign(\n            { LAYERS: `show:${this.options.layer}` },\n            this.options.params\n          );\n\n    if (typeof params.renderingRule === 'object') {\n      params.renderingRule = JSON.stringify(params.renderingRule);\n    }\n\n    return new ImageArcGISRest({\n      ratio: 1,\n      params,\n      url: this.options.url\n    });\n  }\n\n  getLegend(): Legend[] {\n    const legendInfo = this.options.legendInfo;\n    const legend = super.getLegend();\n    if (\n      legendInfo === undefined ||\n      this.options.layer === undefined ||\n      legend.length > 0\n    ) {\n      return legend;\n    }\n\n    if (!legendInfo) {\n      return;\n    }\n    let htmlString = '<table>';\n\n    for (const legendElement of legendInfo.legend) {\n      const src = `${this.options.url}/${legendInfo.layerId}/images/${legendElement.url}`;\n      const label = legendElement.label.replace('<Null>', 'Null');\n      htmlString +=\n        `<tr><td align='left'><img src=\"` +\n        src +\n        `\" alt ='' /></td><td class=\"mat-typography\">` +\n        label +\n        '</td></tr>';\n    }\n    htmlString += '</table>';\n    return [{ html: htmlString }];\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n","import olSourceTileArcGISRest from 'ol/source/TileArcGISRest';\nimport { Options } from 'ol/source/TileArcGISRest';\n\nimport { QueryHtmlTarget } from '../../../query/shared/query.enums';\nimport { DataSource } from './datasource';\nimport { Legend } from './datasource.interface';\nimport { TileArcGISRestDataSourceOptions } from './tilearcgisrest-datasource.interface';\n\nexport class TileArcGISRestDataSource extends DataSource {\n  declare public ol: olSourceTileArcGISRest;\n  declare public options: TileArcGISRestDataSourceOptions;\n\n  get params(): any {\n    return this.options.params as any;\n  }\n\n  get queryTitle(): string {\n    return (this.options as any).queryTitle\n      ? (this.options as any).queryTitle\n      : 'title';\n  }\n\n  get mapLabel(): string {\n    return (this.options as any).mapLabel;\n  }\n\n  get queryHtmlTarget(): string {\n    return (this.options as any).queryHtmlTarget\n      ? (this.options as any).queryHtmlTarget\n      : QueryHtmlTarget.BLANK;\n  }\n\n  get saveableOptions(): Partial<TileArcGISRestDataSourceOptions> {\n    const baseOptions = super.saveableOptions;\n    return {\n      ...baseOptions,\n      params: this.options.params\n    };\n  }\n\n  protected createOlSource(): olSourceTileArcGISRest {\n    return new olSourceTileArcGISRest(this.options as Options);\n  }\n\n  getLegend(): Legend[] {\n    const legendInfo = this.options.legendInfo;\n    const legend = super.getLegend();\n    if (\n      legendInfo === undefined ||\n      this.options.layer === undefined ||\n      legend.length > 0\n    ) {\n      return legend;\n    }\n\n    if (!legendInfo) {\n      return;\n    }\n    let htmlString = '<table>';\n\n    for (const legendElement of legendInfo.legend) {\n      const src = `${this.options.url}/${legendInfo.layerId}/images/${legendElement.url}`;\n      const label = legendElement.label.replace('<Null>', 'Null');\n      htmlString +=\n        `<tr><td align='left'><img src=\"` +\n        src +\n        `\" alt ='' /></td><td class=\"mat-typography\">` +\n        label +\n        '</td></tr>';\n    }\n    htmlString += '</table>';\n    return [{ html: htmlString }];\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n","import TileDebug from 'ol/source/TileDebug';\nimport TileGrid from 'ol/tilegrid/TileGrid';\n\nimport { DataSource } from './datasource';\nimport { TileDebugDataSourceOptions } from './tiledebug-datasource.interface';\n\nexport class TileDebugDataSource extends DataSource {\n  declare public options: TileDebugDataSourceOptions;\n  declare public ol: TileDebug;\n\n  protected createOlSource(): TileDebug {\n    const baseOptions = JSON.parse(JSON.stringify(this.options)); // to avoid to alter the original options\n    if (this.options.tileGrid) {\n      delete baseOptions.tileGrid;\n      baseOptions.tileGrid = new TileGrid(this.options.tileGrid);\n    }\n    return new TileDebug(baseOptions);\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n","import olFeature from 'ol/Feature';\nimport olSourceVector from 'ol/source/Vector';\n\nimport { FeatureDataSource } from './feature-datasource';\nimport { WebSocketDataSourceOptions } from './websocket-datasource.interface';\n\nexport class WebSocketDataSource extends FeatureDataSource {\n  public ws: WebSocket;\n  declare public options: WebSocketDataSourceOptions;\n\n  protected createOlSource(): olSourceVector {\n    this.createWebSocket();\n    this.options.format = this.getSourceFormatFromOptions(this.options);\n    return super.createOlSource();\n  }\n\n  private createWebSocket() {\n    this.ws = new WebSocket(this.options.url);\n    this.ws.onmessage = this.onMessage.bind(this);\n\n    if (this.options.onclose) {\n      this.ws.onclose = this.onClose.bind(this);\n    }\n\n    if (this.options.onerror) {\n      this.ws.onerror = this.onError.bind(this);\n    }\n\n    if (this.options.onopen) {\n      this.ws.onopen = this.onOpen.bind(this);\n    }\n  }\n\n  onMessage(event) {\n    const featureAdded = this.options.format.readFeature(\n      event.data\n    ) as olFeature;\n\n    switch (this.options.onmessage) {\n      case 'update': {\n        // ol don't add if same ID\n        const featureToRemove = this.ol.getFeatureById(featureAdded.getId());\n        if (featureToRemove) {\n          this.ol.removeFeature(featureToRemove);\n        }\n        this.ol.addFeature(featureAdded);\n        break;\n      }\n      case 'delete':\n        this.ol.clear(true);\n        this.ol.addFeature(featureAdded);\n        break;\n      case 'add':\n      default:\n        this.ol.addFeature(featureAdded);\n    }\n  }\n\n  onClose() {\n    // thrown message to user\n  }\n\n  onError() {\n    // thrown message to user\n  }\n\n  onOpen() {\n    // thrown message to user ?\n  }\n\n  public onUnwatch() {\n    this.ws.close();\n  }\n}\n","import { uuid } from '@igo2/utils';\n\nimport feature from 'ol/Feature';\nimport olFormatMVT from 'ol/format/MVT';\nimport olSourceVectorTile from 'ol/source/VectorTile';\n\nimport { Md5 } from 'ts-md5';\n\nimport { DataSource } from './datasource';\nimport { MVTDataSourceOptions } from './mvt-datasource.interface';\n\nexport class MVTDataSource extends DataSource {\n  declare public options: MVTDataSourceOptions;\n  declare public ol: olSourceVectorTile;\n\n  get saveableOptions(): Partial<MVTDataSourceOptions> {\n    return super.saveableOptions;\n  }\n\n  protected createOlSource(): olSourceVectorTile {\n    let mvtFormat;\n    if (this.options.featureClass === 'feature') {\n      mvtFormat = new olFormatMVT({ featureClass: feature });\n    } else {\n      mvtFormat = new olFormatMVT();\n    }\n    this.options.format = mvtFormat;\n    return new olSourceVectorTile(this.options);\n  }\n\n  protected generateId() {\n    if (!this.options.url) {\n      return uuid();\n    }\n    const chain = 'mvt' + this.options.url;\n    return Md5.hashStr(chain) as string;\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n","import { uuid } from '@igo2/utils';\n\nimport olSourceCluster from 'ol/source/Cluster';\n\nimport { ClusterDataSourceOptions } from './cluster-datasource.interface';\nimport { FeatureDataSource } from './feature-datasource';\n\nexport class ClusterDataSource extends FeatureDataSource {\n  declare public options: ClusterDataSourceOptions;\n  declare public ol: olSourceCluster;\n\n  get saveableOptions(): Partial<ClusterDataSourceOptions> {\n    const baseOptions = super.saveableOptions;\n    return {\n      ...baseOptions,\n      params: this.options.params\n    };\n  }\n\n  protected createOlSource(): olSourceCluster {\n    this.options.format = this.getSourceFormatFromOptions(this.options);\n    this.options.source = super.createOlSource();\n    return new olSourceCluster(this.options);\n  }\n\n  protected generateId() {\n    return uuid();\n  }\n\n  public onUnwatch() {\n    // empty\n  }\n}\n","export enum InsertSourceInsertDBEnum {\n  System = 'system',\n  User = 'user'\n}\n","import olLayerVector from 'ol/layer/Vector';\nimport olSourceVector from 'ol/source/Vector';\n\nexport function olStyleToBasicIgoStyle(layer: olLayerVector<olSourceVector>) {\n  const layerOlStyle = layer.getStyle();\n  if (typeof layerOlStyle === 'function' || layerOlStyle instanceof Array) {\n    return;\n  }\n\n  const rStyle = {\n    fill: {\n      color: layerOlStyle.getFill().getColor()\n    },\n    stroke: {\n      color: layerOlStyle.getStroke().getColor(),\n      width: 2\n    },\n    circle: {\n      fill: {\n        color: (layerOlStyle.getImage() as any).getFill().getColor()\n      },\n      stroke: {\n        color: (layerOlStyle.getImage() as any).getStroke().getColor(),\n        width: 2\n      },\n      radius: 5\n    }\n  };\n  return rStyle;\n}\n","import { SubjectStatus, Watcher, uuid } from '@igo2/utils';\n\nimport { ClusterDataSource } from '../../datasource/shared/datasources/cluster-datasource';\nimport type { VectorLayer } from '../shared/layers/vector-layer';\n\nexport class VectorWatcher extends Watcher {\n  private id: string;\n  private loaded = 0;\n  private loading = 0;\n\n  private layer: VectorLayer;\n\n  constructor(layer: VectorLayer) {\n    super();\n    this.layer = layer;\n    this.id = uuid();\n  }\n\n  protected watch() {\n    let olSource = this.layer.options.source.ol;\n    if (this.layer.dataSource instanceof ClusterDataSource) {\n      olSource = (this.layer.options.source.options as any).source;\n    }\n\n    if (olSource.getUrl()) {\n      olSource.on(`featuresloadstart`, () => this.handleLoadStart());\n      olSource.on(`featuresloadend`, () => this.handleLoadEnd());\n      olSource.on(`featuresloaderror`, () => this.handleLoadEnd());\n    }\n  }\n\n  protected unwatch() {\n    let olSource = this.layer.options.source.ol;\n    if (this.layer.dataSource instanceof ClusterDataSource) {\n      olSource = (this.layer.options.source.options as any).source;\n    }\n    if (olSource.getUrl()) {\n      olSource.un(`featuresloadstart`, () => this.handleLoadStart());\n      olSource.un(`featuresloadend`, () => this.handleLoadEnd());\n      olSource.un(`featuresloaderror`, () => this.handleLoadEnd());\n    }\n  }\n\n  private handleLoadStart() {\n    this.loading += 1;\n    this.status = SubjectStatus.Working;\n  }\n\n  private handleLoadEnd() {\n    this.loaded += 1;\n\n    const loading = this.loading;\n    if (this.loaded >= loading) {\n      if (loading === this.loading) {\n        this.status = SubjectStatus.Done;\n        this.loaded = this.loading = 0;\n      }\n    }\n  }\n}\n","import {\n  isBaseLayer,\n  isLayerItem,\n  isLayerItemOptions\n} from '../../../utils/layer.utils';\nimport type { AnyLayer } from '../any-layer';\nimport type {\n  AnyLayerItemOptions,\n  AnyLayerOptions\n} from '../any-layer.interface';\nimport type { Layer } from '../layer';\nimport type {\n  LayersLinkProperties,\n  LinkedProperties\n} from './linked-layer.interface';\n\nexport function isLayerLinked(layer: AnyLayer): layer is Layer {\n  return isLayerItem(layer) && !!layer.options.linkedLayers;\n}\n\nexport function isLinkMaster(layer: Layer): boolean {\n  return !!layer.options.linkedLayers?.links;\n}\n\nexport function isLayerLinkedTogether(\n  layerA: AnyLayer,\n  layerB: AnyLayer,\n  layers: AnyLayer[],\n  property?: LinkedProperties\n): boolean {\n  if (!isLayerLinked(layerA) || !isLayerLinked(layerB)) {\n    return false;\n  }\n\n  let masterLink = isLinkMaster(layerA)\n    ? layerA\n    : isLinkMaster(layerB)\n      ? layerB\n      : undefined;\n  const isMasterRelation = !!masterLink;\n\n  if (!masterLink) {\n    const masterA = getLinkedLayerMaster(layerA, layers);\n    const masterB = getLinkedLayerMaster(layerB, layers);\n    if (masterA?.id !== masterB?.id) {\n      return false;\n    }\n\n    masterLink = masterA;\n  }\n\n  const links = masterLink.options.linkedLayers.links;\n  if (isMasterRelation) {\n    const child = masterLink === layerA ? layerB : layerA;\n    return !!getLayerLinks(links, child, property);\n  }\n\n  const potentialLinks = getLayerLinks(links, layerA, property);\n  return potentialLinks?.some((link) => link.linkedIds.includes(layerB.id));\n}\n\nfunction getLayerLinks(\n  links: LayersLinkProperties[],\n  layer: Layer,\n  property?: LinkedProperties\n): LayersLinkProperties[] {\n  const linkId = layer.options.linkedLayers!.linkId;\n  return links.filter((link) => {\n    const hasLink = link.linkedIds.includes(linkId);\n    if (property) {\n      return hasLink && link.properties.includes(property);\n    }\n\n    return hasLink;\n  });\n}\n\nexport function isLayerLinkedOptions(\n  options: AnyLayerOptions\n): options is AnyLayerItemOptions {\n  return isLayerItemOptions(options) && !!options.linkedLayers;\n}\n\nexport function isBaseLayerLinked(\n  layer: AnyLayer,\n  allLayers: AnyLayer[]\n): layer is Layer {\n  if (!isLayerItem(layer)) {\n    return;\n  }\n\n  const linkedMaster = getLinkedLayerMaster(layer, allLayers);\n  return linkedMaster && isBaseLayer(linkedMaster);\n}\n\nfunction getLinkedLayerMaster(\n  layer: Layer,\n  layers: AnyLayer[]\n): Layer | undefined {\n  if (!layer.options.linkedLayers) {\n    return;\n  }\n\n  return layers.find((list_layer) =>\n    _isLinkedMaster(layer, list_layer)\n  ) as Layer;\n}\n\nfunction _isLinkedMaster(layer: Layer, layerToCheck: AnyLayer): boolean {\n  if (!isLayerItem(layerToCheck)) {\n    return;\n  }\n  const links = layerToCheck.options.linkedLayers?.links;\n  if (links) {\n    return links.some((link) =>\n      link.linkedIds.includes(layer.options.linkedLayers.linkId)\n    );\n  }\n\n  return false;\n}\n","import { SubjectStatus } from '@igo2/utils';\n\nimport BaseLayer from 'ol/layer/Base';\n\nimport { BehaviorSubject, Subject, Subscription, combineLatest } from 'rxjs';\n\nimport type { DataSource } from '../../../datasource/shared/datasources/datasource';\nimport type { MapBase } from '../../../map/shared/map.abstract';\nimport { getResolutionFromScale } from '../../../map/shared/map.utils';\nimport type { LayerOptions, LayerType } from './layer.interface';\n\nexport type AnyLayerBase = LayerBase | LayerGroupBase;\n\nexport abstract class LayerBase {\n  abstract type: LayerType;\n  abstract ol: BaseLayer;\n  abstract parent: LayerGroupBase;\n  protected abstract createOlLayer(): BaseLayer;\n\n  public collapsed: boolean;\n  public firstLoadComponent = true;\n  public map: MapBase;\n  public olLoadingProblem = false;\n  public status$: Subject<SubjectStatus>;\n  dataSource: DataSource | undefined;\n\n  /**\n   * Define if a layer is generated by code OR defined by layer/context user layer.\n   * Useful for filtering layers list in mapOffline.directive or in the sharemap...\n   * return false by default.\n   */\n  get isIgoInternalLayer(): boolean {\n    return this.options.isIgoInternalLayer || false;\n  }\n\n  get id(): string {\n    return String(this.options.id);\n  }\n\n  get parentId(): string {\n    return this.options.parentId;\n  }\n\n  get alias(): string {\n    return this.options.alias;\n  }\n\n  get title(): string {\n    return this.options.title;\n  }\n  set title(title: string) {\n    this.options.title = title;\n  }\n\n  get zIndex(): number {\n    return this.ol.getZIndex();\n  }\n  set zIndex(zIndex: number) {\n    if (zIndex === this.zIndex) {\n      return;\n    }\n    this.ol.setZIndex(zIndex);\n  }\n\n  get baseLayer(): boolean {\n    return this.options.baseLayer;\n  }\n  set baseLayer(baseLayer: boolean) {\n    this.options.baseLayer = baseLayer;\n  }\n\n  get opacity(): number {\n    return this.ol.get('opacity');\n  }\n  set opacity(opacity: number) {\n    this.ol.setOpacity(opacity);\n  }\n\n  set isInResolutionsRange(value: boolean) {\n    this.isInResolutionsRange$.next(value);\n  }\n  get isInResolutionsRange(): boolean {\n    return this.isInResolutionsRange$.value;\n  }\n  readonly isInResolutionsRange$ = new BehaviorSubject(false);\n\n  set maxResolution(value: number) {\n    this.ol.setMaxResolution(value === 0 ? 0 : value || Infinity);\n  }\n  get maxResolution(): number {\n    return this.ol.getMaxResolution();\n  }\n\n  set minResolution(value: number) {\n    this.ol.setMinResolution(value || 0);\n  }\n  get minResolution(): number {\n    return this.ol.getMinResolution();\n  }\n\n  set visible(value: boolean) {\n    if (value === this.visible) {\n      return;\n    }\n    this.ol.setVisible(value);\n    this._visible$.next(value);\n  }\n  get visible(): boolean {\n    return this._visible$.value;\n  }\n  private _visible$ = new BehaviorSubject<boolean>(undefined);\n  readonly visible$ = this._visible$.asObservable();\n\n  get displayed(): boolean {\n    return this._displayed$.value;\n  }\n  set displayed(value: boolean) {\n    if (value === this.displayed) {\n      return;\n    }\n    this._displayed$.next(value);\n  }\n  private _displayed$ = new BehaviorSubject<boolean>(undefined);\n  displayed$ = this._displayed$.asObservable();\n  private displayed$$: Subscription;\n\n  get showInLayerList(): boolean {\n    return this.options.showInLayerList !== false;\n  }\n\n  get saveableOptions(): Partial<LayerOptions> {\n    return {\n      title: this.options.title,\n      zIndex: this.zIndex,\n      visible: this.visible,\n      security: this.options.security,\n      opacity: this.opacity\n    };\n  }\n\n  constructor(public options: LayerOptions) {\n    this.initDisplayed$$();\n  }\n\n  afterCreated(): void {\n    if (this.options.zIndex !== undefined) {\n      this.zIndex = this.options.zIndex;\n    }\n\n    if (this.options.baseLayer && this.options.visible === undefined) {\n      this.options.visible = false;\n    }\n\n    this.maxResolution =\n      this.options.maxResolution ||\n      getResolutionFromScale(Number(this.options.maxScaleDenom));\n    this.minResolution =\n      this.options.minResolution ||\n      getResolutionFromScale(Number(this.options.minScaleDenom));\n\n    this.visible =\n      this.options.visible === undefined ? true : this.options.visible;\n    this.opacity =\n      this.options.opacity === undefined ? 1 : this.options.opacity;\n  }\n\n  init(map: MapBase): void {\n    this.map = map;\n  }\n\n  add(parent?: LayerGroupBase): void {\n    this._add(parent);\n  }\n\n  private _add(parent?: LayerGroupBase): void {\n    this.addParent(parent);\n    this.parent ? this.parent.addChild(this) : this.map.ol.addLayer(this.ol);\n  }\n\n  addParent(parent?: LayerGroupBase): void {\n    if (this.parent && this.parent === parent) {\n      return;\n    }\n\n    this.parent = parent;\n\n    if (!this.map && this.parent) {\n      this.map = this.parent.map;\n    }\n\n    this.initDisplayed$$();\n  }\n\n  remove(): void {\n    this._remove();\n  }\n\n  private _remove(): void {\n    if (!this.map) {\n      console.error(`No map for ${this.title}`);\n      return;\n    }\n    this.parent\n      ? this.parent.removeChild(this)\n      : this.map.ol.removeLayer(this.ol);\n  }\n\n  reset(parent?: LayerGroupBase): void {\n    this._remove();\n    this._add(parent);\n  }\n\n  moveTo(parent?: LayerGroupBase): void {\n    if (parent == null && this.parent == null) {\n      return;\n    }\n\n    if (this.parent) {\n      if (this.parent.id === parent?.id) {\n        return;\n      }\n    }\n\n    this.reset(parent);\n  }\n\n  clone(): LayerBase {\n    const clone = Object.assign({}, this);\n    return Object.setPrototypeOf(clone, LayerBase.prototype);\n  }\n\n  private initDisplayed$$(): void {\n    this.displayed$$?.unsubscribe();\n\n    const obs$ = [this.isInResolutionsRange$, this.visible$];\n\n    if (this.parent) {\n      obs$.push(this.parent.displayed$);\n    }\n\n    this.displayed$$ = combineLatest(obs$).subscribe(\n      ([inRes, visible, parentDisplayed = null]) => {\n        const isVisible = this.parent ? parentDisplayed && visible : visible;\n        this.displayed = isVisible && inRes;\n      }\n    );\n  }\n}\n\nexport abstract class LayerGroupBase extends LayerBase {\n  type: LayerType = 'group';\n  children: LayerBase[];\n\n  abstract get descendants(): LayerBase[];\n\n  abstract addChild(layer: LayerBase): void;\n  abstract removeChild(layer: LayerBase): void;\n  abstract isDescendant(layer: LayerBase): boolean;\n}\n","import olSourceImageWMS from 'ol/source/ImageWMS';\nimport { getUid } from 'ol/util';\n\nimport {\n  TimeFilterableDataSource,\n  type TimeFilterableDataSourceOptions\n} from '../../datasource/shared/datasources/';\nimport { WMSDataSource } from '../../datasource/shared/datasources/wms-datasource';\nimport { OgcFilterWriter } from '../../filter/shared/ogc-filter';\nimport {\n  OgcFilterableDataSource,\n  OgcFilterableDataSourceOptions\n} from '../../filter/shared/ogc-filter.interface';\nimport type { AnyLayer } from '../../layer/shared/layers/any-layer';\nimport type { Layer } from '../../layer/shared/layers/layer';\nimport {\n  LayersLinkProperties,\n  LinkedProperties\n} from '../../layer/shared/layers/linked/linked-layer.interface';\nimport { isLayerGroup, isLayerItem } from '../../layer/utils/layer.utils';\nimport { MapViewController } from '../../map/shared/controllers/view';\nimport { LayerWatcherChange } from '../utils/layer-watcher';\n\nexport function getRootParentByProperty(\n  layers: AnyLayer[],\n  layer: Layer,\n  property: LinkedProperties\n): Layer {\n  let layerToUse = layer;\n  let parentLayer = layerToUse;\n  let hasParentLayer = true;\n  while (hasParentLayer) {\n    layerToUse = parentLayer;\n    parentLayer = getDirectParentLayerByProperty(layers, layerToUse, property);\n    hasParentLayer = parentLayer ? true : false;\n  }\n  if (!hasParentLayer) {\n    if (!layerHasLinkWithProperty(layerToUse, property)) {\n      layerToUse = undefined;\n    }\n  }\n  return hasParentLayer ? parentLayer : layerToUse;\n}\n\nexport function getAllChildLayersByProperty(\n  layers: AnyLayer[],\n  layer: Layer,\n  knownChildLayers: AnyLayer[],\n  property: LinkedProperties\n): AnyLayer[] {\n  const childLayers = getDirectChildLayersByProperty(layers, layer, property);\n  childLayers.map((cl) => {\n    knownChildLayers.push(cl);\n    const directChildLayers = getDirectChildLayersByProperty(\n      layers,\n      cl,\n      property\n    );\n    if (directChildLayers) {\n      getAllChildLayersByProperty(layers, cl, knownChildLayers, property);\n    }\n  });\n  return knownChildLayers;\n}\n\nexport function getRootParentByDeletion(\n  layer: Layer,\n  layers: AnyLayer[]\n): Layer {\n  let layerToUse = layer;\n  let parentLayer = layerToUse;\n  let hasParentLayer = true;\n  while (hasParentLayer) {\n    layerToUse = parentLayer;\n    parentLayer = getDirectParentLayerByDeletion(layerToUse, layers);\n    hasParentLayer = parentLayer ? true : false;\n  }\n  if (!hasParentLayer) {\n    if (!hasLinkDeletion(layerToUse)) {\n      layerToUse = undefined;\n    }\n  }\n  return hasParentLayer ? parentLayer : layerToUse;\n}\n\nexport function getAllChildLayersByDeletion(\n  layers: Layer[],\n  layer: Layer,\n  knownChildLayers: Layer[]\n): Layer[] {\n  const childLayers = getLayersByDeletion(\n    layers,\n    layer.options.linkedLayers.links\n  );\n  childLayers.map((cl) => {\n    knownChildLayers.push(cl);\n    const directChildLayers = getLayersByDeletion(\n      layers,\n      cl.options.linkedLayers.links\n    );\n    if (directChildLayers) {\n      getAllChildLayersByDeletion(layers, cl, knownChildLayers);\n    }\n  });\n  return knownChildLayers;\n}\n\nfunction getDirectParentLayerByProperty(\n  layers: AnyLayer[],\n  layer: Layer,\n  property: LinkedProperties\n): Layer {\n  if (layer?.options.linkedLayers?.linkId) {\n    const currentLinkId = layer.options.linkedLayers.linkId;\n    const parents = layers.filter((pl) => {\n      if (isLayerGroup(pl)) {\n        return false;\n      }\n      const linkedLayers = pl.options.linkedLayers;\n      if (linkedLayers && linkedLayers.links) {\n        const a = linkedLayers.links.find(\n          (l) =>\n            l.linkedIds.includes(currentLinkId) &&\n            l.properties.includes(property)\n        );\n        return a;\n      }\n    }) as Layer[];\n    if (parents.length > 1) {\n      console.warn(`Your layer ${\n        layer.title || layer.id\n      } must only have 1 parent (${parents.map((p) => p.title || p.id)})\n            , The first parent (${\n              parents[0].title || parents[0].id\n            }) will be use to sync properties`);\n    }\n    return parents[0];\n  }\n}\n\nfunction getDirectChildLayersByProperty(\n  layers: AnyLayer[],\n  layer: Layer,\n  property: LinkedProperties\n): Layer[] {\n  let linkedIds = [];\n  if (layer?.options.linkedLayers?.links) {\n    layer.options.linkedLayers.links\n      .filter((l) => l.properties.includes(property))\n      .map((link) => {\n        linkedIds = linkedIds.concat(link.linkedIds);\n      });\n  }\n  const layerItems = layers.filter((layer) => isLayerItem(layer)) as Layer[];\n  return linkedIds.map((lid) => findLayerByLinkId(layerItems, lid));\n}\n\nfunction layerHasLinkWithProperty(\n  layer: Layer,\n  property: LinkedProperties\n): boolean {\n  let hasLinkWithProperty = false;\n  const layerLLOptions = getLinkedLayersOptions(layer);\n  if (layerLLOptions?.links) {\n    const link = layerLLOptions.links.find((l) =>\n      l.properties.includes(property)\n    );\n    hasLinkWithProperty = link ? true : false;\n  }\n  return hasLinkWithProperty;\n}\n\nfunction hasLinkDeletion(layer: Layer): boolean {\n  const layerLLOptions = getLinkedLayersOptions(layer);\n  return layerLLOptions?.links\n    ? layerLLOptions.links.some((l) => l.syncedDelete)\n    : false;\n}\n\nexport function getLinkedLayersOptions(layer: Layer) {\n  return layer.options.linkedLayers;\n}\n\nexport function findLayerByLinkId(layers: Layer[], id: string) {\n  return layers.find((l) => l.options.linkedLayers?.linkId === id);\n}\n\nfunction getDirectParentLayerByDeletion(\n  layer: Layer,\n  layers: AnyLayer[]\n): Layer {\n  if (layer.options.linkedLayers?.linkId) {\n    const currentLinkId = layer.options.linkedLayers.linkId;\n    const parents = layers.filter((parent) => {\n      if (isLayerGroup(parent)) {\n        return false;\n      }\n      const linkedLayers = parent.options.linkedLayers;\n      if (linkedLayers && linkedLayers.links) {\n        const a = linkedLayers.links.find(\n          (l) => l.linkedIds.includes(currentLinkId) && l.syncedDelete\n        );\n        return a;\n      }\n    }) as Layer[];\n    if (parents.length > 1) {\n      console.warn(`Your layer ${\n        layer.title || layer.id\n      } must only have 1 parent (${parents.map((p) => p.title || p.id)})\n          , The first parent (${\n            parents[0].title || parents[0].id\n          }) will be use to sync properties`);\n    }\n    return parents[0];\n  }\n}\n\nexport function getLayersByDeletion(\n  layers: Layer[],\n  links: LayersLinkProperties[]\n): Layer[] {\n  return links\n    ?.filter((l) => l.syncedDelete)\n    .reduce((layerAcc, link) => {\n      const linkedLayers = getLayersByLink(link, layers);\n      return layerAcc.concat(linkedLayers);\n    }, []);\n}\n\nfunction getLayersByLink(link: LayersLinkProperties, layers: Layer[]): Layer[] {\n  return link.linkedIds.reduce((linkedLayers, id) => {\n    const linkedLayer = findLayerByLinkId(layers, id);\n    if (linkedLayer) {\n      linkedLayers.push(linkedLayer);\n    }\n    return linkedLayers;\n  }, []);\n}\n\nexport function handleLayerPropertyChange(\n  layers: AnyLayer[],\n  change: LayerWatcherChange,\n  viewController: MapViewController\n) {\n  if (!change) {\n    return;\n  }\n  const ogcFilterWriter = new OgcFilterWriter();\n  let isLayerProperty = true;\n  let isDatasourceProperty = true;\n  const key = change.event.key;\n  let newValue;\n  if (key === 'ogcFilters') {\n    isLayerProperty = false;\n    isDatasourceProperty = true;\n    newValue = (\n      change.layer.dataSource.options as OgcFilterableDataSourceOptions\n    ).ogcFilters;\n  } else if (key === 'timeFilter') {\n    isLayerProperty = false;\n    isDatasourceProperty = true;\n    newValue = (\n      change.layer.dataSource.options as TimeFilterableDataSourceOptions\n    ).timeFilter;\n  } else {\n    isLayerProperty = true;\n    isDatasourceProperty = false;\n    newValue = change.layer.ol.get(key);\n  }\n\n  const initiatorLinkedLayersOptions = getLinkedLayersOptions(change.layer);\n  if (initiatorLinkedLayersOptions) {\n    let rootParentByProperty = getRootParentByProperty(\n      layers,\n      change.layer,\n      key as LinkedProperties\n    );\n    if (!rootParentByProperty) {\n      rootParentByProperty = change.layer;\n    }\n\n    const clbp = [rootParentByProperty];\n    getAllChildLayersByProperty(\n      layers,\n      rootParentByProperty,\n      clbp,\n      key as LinkedProperties\n    );\n\n    let resolutionPropertyHasChanged = false;\n    const initiatorIgoLayerSourceType =\n      change.layer.options.source.options.type;\n    const initiatorIgoLayerOgcFilterableDataSourceOptions = change.layer\n      .dataSource.options as OgcFilterableDataSourceOptions;\n    clbp.map((l) => {\n      if (change.layer && l && getUid(change.layer.ol) !== getUid(l?.ol)) {\n        const lLayerType = l.options.source.options.type;\n        if (isLayerProperty) {\n          if (key === 'visible') {\n            // Exception for layer not in list when the changed layer have a group not displayed\n            if (\n              newValue &&\n              change.layer.showInLayerList &&\n              change.layer.parent &&\n              !change.layer.parent.displayed\n            ) {\n              newValue = change.layer.displayed;\n            }\n            l.visible = newValue;\n          }\n          l.ol.set(key, newValue, true);\n          if (key === 'minResolution' || key === 'maxResolution') {\n            resolutionPropertyHasChanged = true;\n          }\n        } else if (isDatasourceProperty) {\n          if (key === 'ogcFilters') {\n            (l.dataSource as OgcFilterableDataSource).setOgcFilters(\n              newValue,\n              false\n            );\n            if (lLayerType === 'wfs') {\n              l.ol.getSource().refresh();\n            }\n            if (lLayerType === 'wms') {\n              let appliedOgcFilter;\n              if (initiatorIgoLayerSourceType === 'wfs') {\n                appliedOgcFilter = ogcFilterWriter.handleOgcFiltersAppliedValue(\n                  initiatorIgoLayerOgcFilterableDataSourceOptions,\n                  (change.layer.dataSource.options as any).fieldNameGeometry,\n                  undefined,\n                  viewController.getOlProjection()\n                );\n              } else if (initiatorIgoLayerSourceType === 'wms') {\n                appliedOgcFilter = (\n                  change.layer.dataSource as WMSDataSource\n                ).ol.getParams().FILTER;\n              }\n              (l.dataSource as WMSDataSource).ol.updateParams({\n                FILTER: appliedOgcFilter\n              });\n            }\n          } else if (\n            l.dataSource instanceof WMSDataSource &&\n            key === 'timeFilter'\n          ) {\n            (l.dataSource as TimeFilterableDataSource).setTimeFilter(\n              newValue,\n              false\n            );\n            const appliedTimeFilter = (\n              change.layer.ol.getSource() as olSourceImageWMS\n            ).getParams().TIME;\n            l.dataSource.ol.updateParams({ TIME: appliedTimeFilter });\n          }\n        }\n      }\n    });\n    if (resolutionPropertyHasChanged) {\n      viewController.resolution$.next(viewController.resolution$.value);\n    }\n  }\n}\n","import type { AnyLayer } from '../any-layer';\nimport type { Layer } from '../layer';\n\nexport type AnyPropertyOptions = ZindexPropertyOptions | BasePropertyOptions;\n\nexport interface ZindexPropertyOptions extends BasePropertyOptions {\n  initialOrder: AnyLayer[];\n}\n\ninterface BasePropertyOptions {\n  layers: Layer[];\n}\n\nexport interface LayersLink {\n  linkId: string;\n  /** Default value is true */\n  showInMiniBaseMap?: boolean;\n  links?: LayersLinkProperties[];\n}\nexport interface LayersLinkProperties {\n  bidirectionnal?: boolean;\n  linkedIds: string[];\n  syncedDelete: boolean;\n  properties: LinkedProperties[];\n}\n\nexport enum LinkedProperties {\n  OPACITY = 'opacity',\n  VISIBLE = 'visible',\n  DISPLAYED = 'displayed',\n  OGCFILTERS = 'ogcFilters',\n  MINRESOLUTION = 'minResolution',\n  MAXRESOLUTION = 'maxResolution',\n  ZINDEX = 'zIndex',\n  TIMEFILTER = 'timeFilter'\n}\n","import { SubjectStatus, Watcher } from '@igo2/utils';\n\nimport BaseObject, { ObjectEvent } from 'ol/Object';\nimport LayerGroup from 'ol/layer/Group';\n\nimport {\n  BehaviorSubject,\n  Observable,\n  Subscription,\n  fromEvent,\n  merge\n} from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\nimport type { AnyLayer } from '../../layer/shared/layers/any-layer';\nimport type { Layer } from '../../layer/shared/layers/layer';\nimport { LinkedProperties } from '../../layer/shared/layers/linked/linked-layer.interface';\n\nexport interface LayerWatcherChange {\n  event: LayerWatcherEvent;\n  layer: Layer;\n}\n\ntype LayerWatcherEvent = Pick<ObjectEvent, 'key' | 'oldValue'> & {\n  value: unknown;\n};\n\nexport class LayerWatcher extends Watcher {\n  public propertyChange$ = new BehaviorSubject<LayerWatcherChange>(undefined);\n  private loaded = 0;\n  private loading = 0;\n  private layers: Layer[] = [];\n  private subscriptionsByLayerId = new Map<string, Subscription[]>();\n  private subscriptions: Subscription[] = [];\n\n  constructor() {\n    super();\n  }\n\n  watch() {\n    // empty watch\n  }\n\n  unwatch() {\n    this.layers.forEach((layer) => this.unwatchLayer(layer), this);\n  }\n\n  setPropertyChange(change: LayerWatcherChange) {\n    if (\n      ![\n        LinkedProperties.TIMEFILTER,\n        LinkedProperties.OGCFILTERS,\n        LinkedProperties.VISIBLE,\n        LinkedProperties.OPACITY,\n        LinkedProperties.MINRESOLUTION,\n        LinkedProperties.MAXRESOLUTION,\n        LinkedProperties.ZINDEX,\n        LinkedProperties.DISPLAYED\n      ].includes(change.event.key as any)\n    ) {\n      return;\n    }\n    this.propertyChange$.next(change);\n  }\n\n  watchLayer(layer: AnyLayer) {\n    if (layer.status$ === undefined) {\n      return;\n    }\n\n    if (layer.ol instanceof LayerGroup) {\n      return;\n    }\n\n    this._watchLayer(layer as Layer);\n\n    const layer$$ = layer.status$\n      .pipe(distinctUntilChanged())\n      .subscribe((status) => {\n        if (status === SubjectStatus.Error) {\n          this.loading = 0;\n          this.loaded = -1;\n        }\n        if (status === SubjectStatus.Working) {\n          this.loading += 1;\n        } else if (status === SubjectStatus.Done) {\n          this.loaded += 1;\n        }\n\n        if (this.loaded >= this.loading) {\n          this.loading = this.loaded = 0;\n          this.status = SubjectStatus.Done;\n        } else if (this.loading > 0) {\n          this.status = SubjectStatus.Working;\n        }\n      });\n\n    this.subscriptions.push(layer$$);\n  }\n\n  private _watchLayer(layer: Layer) {\n    const displayed$: Observable<LayerWatcherChange> = layer.displayed$.pipe(\n      map((value) => ({\n        event: {\n          key: 'displayed',\n          oldValue: !value,\n          value: layer.displayed\n        },\n        layer\n      }))\n    );\n    const subscription = merge(\n      this.createOlEventObservable(layer.ol, layer),\n      this.createOlEventObservable(layer.dataSource.ol, layer),\n      displayed$\n    ).subscribe((change) => this.setPropertyChange(change));\n\n    this.layers.push(layer);\n    this.subscriptionsByLayerId.set(layer.id, [subscription]);\n  }\n\n  private createOlEventObservable(\n    target: BaseObject,\n    layer: Layer\n  ): Observable<LayerWatcherChange> {\n    return fromEvent<ObjectEvent>(target, 'propertychange').pipe(\n      map((change) => ({\n        event: { ...change, value: target.get(change.key) },\n        layer\n      }))\n    );\n  }\n\n  unwatchLayer(layer: AnyLayer) {\n    if (layer.ol instanceof LayerGroup) {\n      return;\n    }\n\n    this._unwatchLayer(layer as Layer);\n  }\n\n  private _unwatchLayer(layer: Layer) {\n    layer.status$.next(SubjectStatus.Done);\n\n    this.subscriptionsByLayerId.get(layer.id)?.forEach((sub$) => {\n      sub$.unsubscribe();\n      this.subscriptionsByLayerId.delete(layer.id);\n    });\n\n    const index = this.layers.indexOf(layer);\n    if (index >= 0) {\n      const status = (layer as any).watcher.status;\n      if (\n        [SubjectStatus.Working, SubjectStatus.Waiting].indexOf(status) !== -1\n      ) {\n        this.loaded += 1;\n      }\n      this.subscriptions[index].unsubscribe();\n      this.subscriptions.splice(index, 1);\n      this.layers.splice(index, 1);\n      (layer as any).watcher.unwatch();\n    }\n  }\n}\n","import {\n  findLayerByLinkId,\n  getLayersByDeletion,\n  handleLayerPropertyChange\n} from '../../../../map/shared/linkedLayers.utils';\nimport {\n  LayerWatcher,\n  LayerWatcherChange\n} from '../../../../map/utils/layer-watcher';\nimport { isLayerItem, sortLayersByZindex } from '../../../utils/layer.utils';\nimport type { LayerController } from '../../layer-controller';\nimport type { AnyLayer } from '../any-layer';\nimport type { Layer } from '../layer';\nimport type { LayerGroup } from '../layer-group';\nimport {\n  AnyPropertyOptions,\n  LayersLinkProperties,\n  LinkedProperties,\n  ZindexPropertyOptions\n} from './linked-layer.interface';\n\nexport class Linked {\n  private children: Layer[] = [];\n  private watcher = new LayerWatcher();\n  private bidirectionnalChildren: Layer[] = [];\n  private childrenByProperty = new Map<LinkedProperties, AnyPropertyOptions>();\n  private disabledProperties: LinkedProperties[] = [];\n\n  constructor(public layer: Layer) {\n    this.init();\n\n    this.watcher.watchLayer(layer);\n\n    this.watcher.propertyChange$.subscribe((change) => {\n      if (!change) {\n        return;\n      }\n      this.handleChange(change);\n    });\n  }\n\n  get options() {\n    return this.layer.options;\n  }\n\n  get links() {\n    return this.layer.options.linkedLayers.links!;\n  }\n\n  get map() {\n    return this.layer.map;\n  }\n\n  init(): void {\n    const children = this.findChildren(\n      this.map.layerController.all,\n      this.links\n    );\n\n    this.links.forEach((link) => {\n      link.properties.forEach((property) => {\n        let options = this.getByProperty(property);\n\n        if (property === LinkedProperties.ZINDEX) {\n          const layers = [this.layer, ...children];\n          options = this.initZIndexLinkOptions(\n            options as ZindexPropertyOptions,\n            layers\n          );\n        }\n\n        this.childrenByProperty.set(property, options);\n      });\n    });\n\n    children.forEach((child) => this.add(child));\n  }\n\n  private initZIndexLinkOptions(\n    options: ZindexPropertyOptions,\n    layers: Layer[]\n  ) {\n    options.initialOrder = sortLayersByZindex(layers, 'desc');\n\n    return options;\n  }\n\n  destroy(): void {\n    this.children.forEach((child) => {\n      this.remove(child);\n    });\n    this.unwatch();\n  }\n\n  add(layer: Layer): void {\n    if (!this.children.includes(layer)) {\n      this.children.push(layer);\n    }\n\n    this.getLayerLinks(layer).forEach((link) => {\n      if (link.bidirectionnal) {\n        if (this.bidirectionnalChildren.includes(layer)) {\n          return;\n        }\n        this.bidirectionnalChildren.push(layer);\n        this.watcher.watchLayer(layer);\n      }\n\n      link.properties.forEach((property) => {\n        const options = this.getByProperty(property);\n        if (options.layers.includes(layer)) {\n          return;\n        }\n\n        // We have a property displayed for layer out of resolution or in a group\n        // If the visiblity is linked, we need to reflect the displayed value\n        if (property === LinkedProperties.VISIBLE && !layer.showInLayerList) {\n          const displayedOptions = this.getByProperty(\n            LinkedProperties.DISPLAYED\n          );\n          displayedOptions.layers.push(layer);\n          this.childrenByProperty.set(\n            LinkedProperties.DISPLAYED,\n            displayedOptions\n          );\n        }\n\n        if (property === LinkedProperties.ZINDEX) {\n          const zIndexOptions = options as ZindexPropertyOptions;\n          if (!zIndexOptions.initialOrder.includes(layer)) {\n            zIndexOptions.initialOrder = sortLayersByZindex(\n              [...zIndexOptions.initialOrder, layer],\n              'desc'\n            );\n          }\n        }\n\n        options.layers.push(layer);\n        this.childrenByProperty.set(property, options);\n\n        if (layer[property] !== this.layer[property]) {\n          this.handleChange({\n            event: {\n              key: property,\n              oldValue: layer[property],\n              value: this.layer[property]\n            },\n            layer: this.layer\n          });\n        }\n      });\n    });\n  }\n\n  hasSyncDeletion(layer: Layer): boolean {\n    return this.getLayerLinks(layer).some((link) => link.syncedDelete);\n  }\n\n  remove(layer: Layer): void {\n    layer.linkMaster = undefined;\n    this.removeArrayItem(layer, this.children, 'id');\n\n    this.getLayerLinks(layer).forEach((link) => {\n      if (link.bidirectionnal) {\n        this.watcher.unwatchLayer(layer);\n      }\n\n      link.properties.forEach((property) => {\n        const options = this.getByProperty(property);\n        this.removeArrayItem(layer, options.layers, 'id');\n        this.childrenByProperty.set(property, options);\n      });\n    });\n  }\n\n  deleteChildren(controller: LayerController): void {\n    const layers = getLayersByDeletion(this.children, this.links);\n    layers?.forEach((layer) => {\n      this.remove(layer);\n      controller.remove(layer);\n    });\n  }\n\n  move(layer: Layer, parent?: LayerGroup): void {\n    if (this.propertyIsDisabled(LinkedProperties.ZINDEX)) {\n      return;\n    }\n\n    const options = this.getByProperty(\n      LinkedProperties.ZINDEX\n    ) as ZindexPropertyOptions;\n    if (!options.layers.length) {\n      return;\n    }\n\n    const linkedLayers = this.getLinkedLayersOnZindex(layer.id);\n\n    this.disable(LinkedProperties.ZINDEX);\n\n    const index = options.initialOrder.findIndex((l) => l.id === layer.id);\n    linkedLayers?.forEach((linkLayer) => {\n      if (!linkLayer.showInLayerList) {\n        linkLayer.zIndex = layer.zIndex;\n        if (parent !== linkLayer.parent) {\n          linkLayer.reset(parent);\n        }\n        return;\n      }\n\n      const linkedIndex = options.initialOrder.findIndex(\n        (l) => l.id === linkLayer.id\n      );\n      linkedIndex < index\n        ? this.map.layerController.moveAbove(layer, linkLayer)\n        : this.map.layerController.moveBelow(layer, linkLayer);\n    });\n\n    this.enable(LinkedProperties.ZINDEX);\n  }\n\n  private disable(...properties: LinkedProperties[]): void {\n    properties.forEach((property) => {\n      if (this.disabledProperties.includes(property)) {\n        return;\n      }\n      this.disabledProperties.push(property);\n    });\n\n    this.bidirectionnalChildren.forEach((layer) => {\n      this.watcher.unwatchLayer(layer);\n    });\n  }\n\n  private enable(...properties: LinkedProperties[]): void {\n    properties.forEach((property) => {\n      const index = this.disabledProperties.findIndex(\n        (disableProperty) => disableProperty === property\n      );\n      if (index > -1) {\n        this.disabledProperties.splice(index, 1);\n      }\n    });\n\n    this.bidirectionnalChildren.forEach((layer) => {\n      this.watcher.watchLayer(layer);\n    });\n  }\n\n  private getByProperty(property: LinkedProperties): AnyPropertyOptions {\n    return this.childrenByProperty.get(property) ?? { layers: [] };\n  }\n\n  private propertyIsDisabled(property: LinkedProperties): boolean {\n    return this.disabledProperties.includes(property);\n  }\n\n  private getLayerLinks(layer: Layer): LayersLinkProperties[] {\n    const linkId = layer.options.linkedLayers!.linkId;\n    return this.links.filter((link) => link.linkedIds.includes(linkId));\n  }\n\n  private removeArrayItem<T extends { id: string }>(\n    item: T,\n    array: T[],\n    key: keyof T = 'id'\n  ) {\n    const index = array.findIndex((n) => n[key] === item[key]);\n    if (index !== -1) {\n      array.splice(index, 1);\n    }\n  }\n\n  private getLinkedLayersOnZindex(id: string): Layer[] {\n    return [...this.getByProperty(LinkedProperties.ZINDEX).layers]\n      ?.concat(this.layer)\n      .filter((layer) => layer.id !== id);\n  }\n\n  private unwatch(): void {\n    this.watcher.unwatch();\n  }\n\n  private handleChange = (change: LayerWatcherChange) => {\n    const isMasterChage = change.layer.id === this.layer.id;\n\n    const property = change.event.key as LinkedProperties;\n    if (this.propertyIsDisabled(property)) {\n      return;\n    }\n\n    const options = this.getByProperty(property);\n    let layers = [...options.layers];\n    if (!layers?.length && isMasterChage) {\n      return;\n    }\n\n    if (!isMasterChage) {\n      layers = layers.filter((n) => n.id !== change.layer.id);\n      layers.push(this.layer);\n    }\n\n    if (property === LinkedProperties.DISPLAYED && isMasterChage) {\n      return this.handleDisplayChange(change, layers);\n    }\n\n    handleLayerPropertyChange(layers, change, this.map.viewController);\n  };\n\n  private handleDisplayChange(change: LayerWatcherChange, children: Layer[]) {\n    const affectedProperties = [\n      LinkedProperties.DISPLAYED,\n      LinkedProperties.VISIBLE\n    ];\n    this.disable(...affectedProperties);\n    children.forEach((child) => {\n      if (!child.showInLayerList) {\n        child.visible = !!change.event.value;\n      }\n    });\n    this.enable(...affectedProperties);\n  }\n\n  private findChildren(\n    layers: AnyLayer[],\n    links: LayersLinkProperties[]\n  ): Layer[] {\n    const layersFiltered = layers.filter((n) => isLayerItem(n)) as Layer[];\n\n    return links.reduce((linked: Layer[], link) => {\n      const layerFromLink = link.linkedIds\n        .map((id) => {\n          return findLayerByLinkId(layersFiltered, id);\n        })\n        .filter(Boolean);\n\n      return linked.concat(layerFromLink);\n    }, []);\n  }\n}\n","import { AuthInterceptor } from '@igo2/auth';\nimport { Message, MessageService } from '@igo2/core/message';\n\nimport OlLayer from 'ol/layer/Layer';\nimport { Source } from 'ol/source';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { DataSource, Legend } from '../../../datasource/shared/datasources';\nimport type { MapBase } from '../../../map/shared/map.abstract';\nimport {\n  isLayerLinked,\n  isLinkMaster\n} from '../../shared/layers/linked/linked-layer.utils';\nimport { isLayerItem, isSaveableLayer } from '../../utils/layer.utils';\nimport { AnyLayer } from './any-layer';\nimport { LayerBase, LayerGroupBase } from './layer-base';\nimport { type LayerGroup } from './layer-group';\nimport { type LayerOptions } from './layer.interface';\nimport { Linked } from './linked/linked-layer';\n\nexport abstract class Layer extends LayerBase {\n  declare dataSource: DataSource;\n  parent: LayerGroup;\n\n  ol: OlLayer<Source>;\n  hasBeenVisible$ = new BehaviorSubject<boolean>(undefined);\n  legend: Legend[];\n  legendCollapsed = true;\n  link?: Linked;\n  linkMaster?: Linked;\n  private resolution$$: Subscription;\n\n  get id(): string {\n    return String(this.options.id || this.dataSource.id);\n  }\n\n  get visible() {\n    return super.visible;\n  }\n  set visible(value: boolean) {\n    super.visible = value;\n    if (!this.hasBeenVisible$.value && value) {\n      this.hasBeenVisible$.next(value);\n    }\n    if (this.options?.messages && value) {\n      this.options?.messages\n        .filter((m) => m.options?.showOnEachLayerVisibility)\n        .map((message) => this.showMessage(message));\n    }\n  }\n\n  get maxResolution() {\n    return super.maxResolution;\n  }\n  set maxResolution(value: number) {\n    super.maxResolution = value;\n    this.updateInResolutionsRange();\n  }\n\n  get minResolution() {\n    return super.minResolution;\n  }\n  set minResolution(value: number) {\n    super.minResolution = value;\n    this.updateInResolutionsRange();\n  }\n\n  get saveableOptions(): Partial<LayerOptions> | undefined {\n    if (!isSaveableLayer(this)) {\n      return undefined;\n    }\n\n    return {\n      ...super.saveableOptions,\n      sourceOptions: this.dataSource.saveableOptions\n    };\n  }\n\n  constructor(\n    public options: LayerOptions,\n    protected messageService?: MessageService,\n    protected authInterceptor?: AuthInterceptor\n  ) {\n    super(options);\n\n    this.dataSource = options.source;\n\n    this.legendCollapsed = options.legendOptions\n      ? options.legendOptions.collapsed\n        ? options.legendOptions.collapsed\n        : true\n      : true;\n\n    if (\n      options.legendOptions &&\n      (options.legendOptions.url || options.legendOptions.html)\n    ) {\n      this.legend = this.dataSource.setLegend(options.legendOptions);\n    }\n\n    this.ol = this.createOlLayer();\n    this.ol.set('_layer', this, true);\n\n    super.afterCreated();\n  }\n\n  protected abstract createOlLayer(): OlLayer<Source>;\n\n  init(map: MapBase): void {\n    super.init(map);\n\n    map.layerWatcher.watchLayer(this);\n\n    this.observeResolution();\n    this.hasBeenVisible$.subscribe(() => {\n      if (this.options.messages && this.visible) {\n        this.options.messages.map((message) => {\n          this.showMessage(message);\n        });\n      }\n    });\n\n    this.createLink();\n  }\n\n  createLink(): void {\n    if (!isLinkMaster(this) || this.link) {\n      return;\n    }\n    this.link = new Linked(this);\n  }\n\n  remove(): void {\n    super.remove();\n\n    this.unobserveResolution();\n\n    this.map.layerWatcher.unwatchLayer(this);\n\n    if (isLinkMaster(this)) {\n      this.link?.deleteChildren(this.map.layerController);\n      this.link?.destroy();\n    }\n\n    if (isLayerLinked(this)) {\n      if (!this.linkMaster) {\n        return;\n      }\n      const masterLayer = this.linkMaster.layer;\n      const hasSync = this.linkMaster.hasSyncDeletion(this);\n\n      this.linkMaster.remove(this);\n\n      if (hasSync && masterLayer) {\n        this.map.layerController.remove(masterLayer);\n      }\n    }\n  }\n\n  add(parent?: LayerGroupBase): void {\n    super.add(parent);\n\n    if (isLayerLinked(this)) {\n      if (isLinkMaster(this)) {\n        this.link.init();\n      }\n\n      this.createLinkWithParent();\n    }\n  }\n\n  moveTo(parent?: LayerGroup): void {\n    super.moveTo(parent);\n\n    if (isLayerLinked(this)) {\n      this.link?.move(this, parent);\n      this.linkMaster?.move(this, parent);\n    }\n  }\n\n  private createLinkWithParent() {\n    const masterLayer = this.findParentByLinkId(\n      this.map.layerController.all,\n      this.options.linkedLayers.linkId\n    );\n    if (masterLayer) {\n      this.linkMaster = masterLayer.link;\n      masterLayer?.link.add(this);\n    }\n  }\n\n  private findParentByLinkId(layers: AnyLayer[], id: string): Layer {\n    return layers.find((layer) => {\n      if (!isLayerItem(layer)) {\n        return;\n      }\n      if (layer.options.linkedLayers?.links) {\n        return layer.options.linkedLayers.links.some((l) =>\n          l.linkedIds.includes(id)\n        );\n      }\n      return false;\n    }) as Layer;\n  }\n\n  private showMessage(message: Message) {\n    if (!this.messageService) {\n      return;\n    }\n    this.messageService.message(message as Message);\n  }\n\n  private observeResolution() {\n    this.resolution$$ = this.map.viewController.resolution$.subscribe(() =>\n      this.updateInResolutionsRange()\n    );\n  }\n\n  private unobserveResolution() {\n    if (this.resolution$$ !== undefined) {\n      this.resolution$$.unsubscribe();\n      this.resolution$$ = undefined;\n    }\n  }\n\n  private updateInResolutionsRange() {\n    if (this.map !== undefined) {\n      const resolution = this.map.viewController.getResolution();\n      const minResolution = this.minResolution;\n      const maxResolution =\n        this.maxResolution === undefined ? Infinity : this.maxResolution;\n      this.isInResolutionsRange =\n        resolution >= minResolution && resolution <= maxResolution;\n    } else {\n      this.isInResolutionsRange = false;\n    }\n  }\n}\n","import { AuthInterceptor } from '@igo2/auth';\nimport { MessageService } from '@igo2/core/message';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport olFeature from 'ol/Feature';\nimport OlFeature from 'ol/Feature';\nimport { unByKey } from 'ol/Observable';\nimport { asArray as ColorAsArray } from 'ol/color';\nimport { easeOut } from 'ol/easing';\nimport BaseEvent from 'ol/events/Event';\nimport { Extent } from 'ol/extent';\nimport { FeatureLoader } from 'ol/featureloader';\nimport * as olformat from 'ol/format';\nimport olLayerVector from 'ol/layer/Vector';\nimport * as olproj from 'ol/proj';\nimport olProjection from 'ol/proj/Projection';\nimport { getVectorContext } from 'ol/render';\nimport olSourceVector from 'ol/source/Vector';\n\nimport { fromEvent, of, zip } from 'rxjs';\nimport {\n  catchError,\n  concatMap,\n  debounceTime,\n  delay,\n  first\n} from 'rxjs/operators';\n\nimport { ArcGISRestDataSource } from '../../../datasource/shared/datasources/arcgisrest-datasource';\nimport { ClusterDataSource } from '../../../datasource/shared/datasources/cluster-datasource';\nimport { FeatureDataSource } from '../../../datasource/shared/datasources/feature-datasource';\nimport { FeatureDataSourceOptions } from '../../../datasource/shared/datasources/feature-datasource.interface';\nimport { WebSocketDataSource } from '../../../datasource/shared/datasources/websocket-datasource';\nimport { WFSDataSource } from '../../../datasource/shared/datasources/wfs-datasource';\nimport { WFSDataSourceOptions } from '../../../datasource/shared/datasources/wfs-datasource.interface';\nimport {\n  buildUrl,\n  defaultMaxFeatures\n} from '../../../datasource/shared/datasources/wms-wfs.utils';\nimport {\n  OgcFilterableDataSourceOptions,\n  OgcFiltersOptions\n} from '../../../filter/shared/ogc-filter.interface';\nimport type { MapBase } from '../../../map/shared/map.abstract';\nimport { MapExtent } from '../../../map/shared/map.interface';\nimport { getResolutionFromScale } from '../../../map/shared/map.utils';\nimport { InsertSourceInsertDBEnum } from '../../../offline/geoDB/geoDB.enums';\nimport { GeoDBService } from '../../../offline/geoDB/geoDB.service';\nimport { LayerDBData } from '../../../offline/layerDB/layerDB.interface';\nimport { LayerDBService } from '../../../offline/layerDB/layerDB.service';\nimport {\n  GeoNetworkService,\n  SimpleGetOptions\n} from '../../../offline/shared/geo-network.service';\nimport { olStyleToBasicIgoStyle } from '../../../style/shared/vector/conversion.utils';\nimport { VectorWatcher } from '../../utils/vector-watcher';\nimport { Layer } from './layer';\nimport { LayerType } from './layer.interface';\nimport type { VectorLayerOptions } from './vector-layer.interface';\n\nexport class VectorLayer extends Layer {\n  type: LayerType = 'vector';\n  private previousLoadExtent: Extent;\n  private previousLoadResolution: number;\n  private previousOgcFilters: OgcFiltersOptions;\n  private xhrAccumulator: XMLHttpRequest[] = [];\n  declare public dataSource:\n    | FeatureDataSource\n    | WFSDataSource\n    | ArcGISRestDataSource\n    | WebSocketDataSource\n    | ClusterDataSource;\n  declare public options: VectorLayerOptions;\n  declare public ol: olLayerVector<olSourceVector>;\n  private watcher: VectorWatcher;\n  private trackFeatureListenerId;\n\n  get browsable(): boolean {\n    return this.options.browsable !== false;\n  }\n\n  get exportable(): boolean {\n    return this.options.exportable !== false;\n  }\n\n  constructor(\n    options: VectorLayerOptions,\n    public messageService?: MessageService,\n    public authInterceptor?: AuthInterceptor,\n    private geoNetworkService?: GeoNetworkService,\n    public geoDBService?: GeoDBService,\n    public layerDBService?: LayerDBService\n  ) {\n    super(options, messageService, authInterceptor);\n    this.watcher = new VectorWatcher(this);\n    this.status$ = this.watcher.status$;\n  }\n\n  protected createOlLayer(): olLayerVector<olSourceVector> {\n    const initialOpacityValue = this.options.opacity || 1;\n    const initialVisibleValue = this.options.visible !== false;\n    const initialMinResValue =\n      this.options.minResolution ||\n      getResolutionFromScale(Number(this.options.minScaleDenom));\n    const initialMaxResValue =\n      this.options.maxResolution ||\n      getResolutionFromScale(Number(this.options.maxScaleDenom));\n    const so = this.options.sourceOptions as FeatureDataSourceOptions;\n    if (this.dataSource instanceof FeatureDataSource) {\n      if (so?.preload?.bypassResolution || so?.preload?.bypassVisible) {\n        this.options.opacity = 0;\n        if (\n          so.preload.bypassResolution &&\n          (this.options.minResolution || this.options.maxResolution)\n        ) {\n          this.options.minResolution = 0;\n          this.options.maxResolution = Infinity;\n        }\n        if (so.preload.bypassVisible && !initialVisibleValue) {\n          this.options.visible = true;\n        }\n      }\n    }\n\n    const olOptions = Object.assign({}, this.options, {\n      source: this.options.source.ol as olSourceVector,\n      sourceOptions: this.options.sourceOptions || this.options.source.options\n    });\n\n    if (this.options.animation) {\n      this.dataSource.ol.on(\n        'addfeature',\n        function (e) {\n          this.flash(e.feature);\n        }.bind(this)\n      );\n    }\n    if (this.options.idbInfo?.storeToIdb && this.geoDBService) {\n      if (this.options.idbInfo.firstLoad) {\n        this.maintainFeaturesInIdb();\n      }\n      this.dataSource.ol.once('featuresloadend', () => {\n        this.dataSource.ol.on('addfeature', () => this.maintainFeaturesInIdb());\n        this.dataSource.ol.on('changefeature', () =>\n          this.maintainFeaturesInIdb()\n        );\n        this.dataSource.ol.on('clear', () => this.maintainFeaturesInIdb());\n        this.dataSource.ol.on('removefeature', () =>\n          this.maintainFeaturesInIdb()\n        );\n      });\n    }\n\n    if (\n      this.dataSource instanceof FeatureDataSource &&\n      (so?.preload?.bypassResolution || so?.preload?.bypassVisible)\n    ) {\n      this.dataSource.ol.once('featuresloadend', () => {\n        if (initialOpacityValue) {\n          this.opacity = initialOpacityValue;\n        }\n        if (so.preload.bypassResolution) {\n          this.minResolution = initialMinResValue;\n          this.maxResolution = initialMaxResValue;\n        }\n        if (so.preload.bypassVisible) {\n          this.visible = initialVisibleValue;\n        }\n      });\n    }\n\n    if (this.options.trackFeature) {\n      this.enableTrackFeature(this.options.trackFeature);\n    }\n\n    const vector = new olLayerVector(olOptions);\n    const vectorSource = vector.getSource() as olSourceVector;\n    const url = vectorSource.getUrl();\n    if (typeof url === 'function') {\n      return vector;\n    }\n    if (url || olOptions.sourceOptions?.type === 'wfs') {\n      let loader: FeatureLoader;\n      const wfsOptions = olOptions.sourceOptions as WFSDataSourceOptions;\n      if (\n        wfsOptions?.type === 'wfs' &&\n        (wfsOptions.params || wfsOptions.paramsWFS)\n      ) {\n        loader = (extent, resolution, proj, success, failure) => {\n          this.customWFSLoader(\n            vectorSource,\n            wfsOptions,\n            this.authInterceptor,\n            extent,\n            resolution,\n            proj,\n            success,\n            failure\n          );\n        };\n      } else {\n        loader = (extent, resolution, proj, success, failure) => {\n          this.customLoader(\n            vectorSource,\n            url,\n            extent,\n            resolution,\n            proj,\n            success,\n            failure\n          );\n        };\n      }\n      if (loader) {\n        vectorSource.setLoader(loader);\n      }\n    } else if (this.options.idbInfo?.storeToIdb && this.geoDBService) {\n      const idbLoader = (extent, resolution, proj, success, failure) => {\n        this.customIDBLoader(\n          vectorSource,\n          olOptions.id,\n          extent,\n          proj,\n          success,\n          failure\n        );\n      };\n      if (idbLoader) {\n        vectorSource.setLoader(idbLoader);\n      }\n    }\n\n    if (this.options.idbInfo?.storeToIdb && this.geoDBService) {\n      vector.once('sourceready', () => {\n        if (this.options.idbInfo.firstLoad) {\n          this.maintainOptionsInIdb();\n        }\n        fromEvent<BaseEvent>(vector, 'change')\n          .pipe(debounceTime(750))\n          .subscribe(() => this.maintainOptionsInIdb());\n        vector.on('change:zIndex', () => this.maintainOptionsInIdb());\n      });\n    }\n    return vector;\n  }\n\n  remove(): void {\n    this.watcher.unsubscribe();\n    this.removeLayerFromIDB();\n    super.remove();\n  }\n\n  private removeLayerFromIDB() {\n    if (this.geoDBService && this.layerDBService) {\n      zip(\n        this.geoDBService.deleteByKey(this.id),\n        this.layerDBService.deleteByKey(this.id)\n      ).subscribe();\n    }\n  }\n\n  private maintainOptionsInIdb() {\n    this.options.igoStyle.igoStyleObject = olStyleToBasicIgoStyle(this.ol);\n    const layerData: LayerDBData = ObjectUtils.removeUndefined({\n      layerId: this.id,\n      detailedContextUri: this.options.idbInfo.contextUri,\n      sourceOptions: {\n        id: this.id,\n        type: 'vector',\n        queryable: true\n      },\n      layerOptions: {\n        workspace: this.options.workspace,\n        zIndex: this.ol ? this.zIndex : 1000000,\n        id: this.id,\n        isIgoInternalLayer: this.isIgoInternalLayer,\n        title: this.title,\n        igoStyle: this.options.igoStyle,\n        idbInfo: Object.assign({}, this.options.idbInfo, { firstLoad: false })\n      },\n      insertEvent: `${this.title}-${this.id}-${new Date()}`\n    });\n    this.layerDBService.update(layerData);\n  }\n\n  private maintainFeaturesInIdb() {\n    const dsFeatures = this.dataSource.ol.getFeatures();\n    const geojsonObject = JSON.parse(\n      new olformat.GeoJSON().writeFeatures(dsFeatures, {\n        dataProjection: 'EPSG:4326',\n        featureProjection: this.dataSource.ol.getProjection() || 'EPSG:3857'\n      })\n    );\n    this.geoDBService.update(\n      this.id,\n      this.id,\n      geojsonObject,\n      InsertSourceInsertDBEnum.User,\n      `${this.title}-${this.id}-${new Date()}`\n    );\n  }\n\n  protected flash(feature) {\n    const start = new Date().getTime();\n    const listenerKey = this.ol.on('postrender', animate.bind(this));\n\n    function animate(event) {\n      const vectorContext = getVectorContext(event);\n      const frameState = event.frameState;\n      const flashGeom = feature.getGeometry().clone();\n      const elapsed = frameState.time - start;\n      const elapsedRatio = elapsed / this.options.animation.duration;\n      const opacity = easeOut(1 - elapsedRatio);\n      const newColor = ColorAsArray(this.options.animation.color || 'red');\n      newColor[3] = opacity;\n      let style = this.ol\n        .getStyleFunction()\n        .call(this, feature)\n        .find((style2) => {\n          return style2.getImage();\n        });\n      if (!style) {\n        style = this.ol.getStyleFunction().call(this, feature)[0];\n      }\n      const styleClone = style.clone();\n\n      switch (feature.getGeometry().getType()) {\n        case 'Point':\n          if (\n            styleClone.getImage() !== null &&\n            typeof styleClone.getImage().getRadius === 'function'\n          ) {\n            const radius =\n              easeOut(elapsedRatio) * (styleClone.getImage().getRadius() * 3);\n            styleClone.getImage().setRadius(radius);\n            styleClone.getImage().setOpacity(opacity);\n          }\n\n          break;\n        case 'LineString':\n          // TODO\n          if (styleClone.getImage()) {\n            styleClone.getImage().getStroke().setColor(newColor);\n            styleClone\n              .getImage()\n              .getStroke()\n              .setWidth(\n                easeOut(elapsedRatio) *\n                  (styleClone.getImage().getStroke().getWidth() * 3)\n              );\n          }\n          if (styleClone.getStroke()) {\n            styleClone.getStroke().setColor(newColor);\n            styleClone\n              .getStroke()\n              .setWidth(\n                easeOut(elapsedRatio) * (styleClone.getStroke().getWidth() * 3)\n              );\n          }\n          break;\n        case 'Polygon':\n          // TODO\n          if (styleClone.getImage()) {\n            styleClone.getImage().getFill().setColor(newColor);\n          }\n          if (styleClone.getFill()) {\n            styleClone.getFill().setColor(newColor);\n          }\n          break;\n      }\n\n      styleClone.setText('');\n      vectorContext.setStyle(styleClone);\n      vectorContext.drawGeometry(flashGeom);\n\n      if (elapsed > this.options.animation.duration) {\n        unByKey(listenerKey);\n        // remove last geometry\n        // there is a little flash before feature disappear, better solution ?\n        this.map.ol.render();\n        return;\n      }\n      // tell OpenLayers to continue postcompose animation\n      this.map.ol.render();\n    }\n  }\n\n  public init(map: MapBase | undefined) {\n    if (map === undefined) {\n      this.watcher.unsubscribe();\n    } else {\n      this.watcher.subscribe(() => void 1);\n    }\n    super.init(map);\n  }\n\n  public setExtent(extent: MapExtent): void {\n    this.options.extent = extent;\n  }\n\n  public onUnwatch() {\n    this.dataSource.onUnwatch();\n    this.stopAnimation();\n  }\n\n  public stopAnimation() {\n    this.dataSource.ol.un(\n      'addfeature',\n      function (e) {\n        if (this.visible) {\n          this.flash(e.feature);\n        }\n      }.bind(this)\n    );\n  }\n\n  public enableTrackFeature(id: string | number) {\n    this.trackFeatureListenerId = this.dataSource.ol.on(\n      'addfeature',\n      this.trackFeature.bind(this, id)\n    );\n  }\n  public centerMapOnFeature(id: string | number) {\n    const feat = this.dataSource.ol.getFeatureById(id);\n    if (feat) {\n      this.map.ol\n        .getView()\n        .setCenter((feat.getGeometry() as any).getCoordinates());\n    }\n  }\n\n  public trackFeature(id, feat) {\n    if (feat.feature.getId() === id && this.visible) {\n      this.centerMapOnFeature(id);\n    }\n  }\n\n  public disableTrackFeature() {\n    unByKey(this.trackFeatureListenerId);\n  }\n\n  /**\n   * Custom loader for a WFS datasource\n   * @internal\n   * @param vectorSource the vector source to be created\n   * @param options olOptions from source\n   * @param interceptor the interceptor of the data\n   * @param extent the extent of the requested data\n   * @param resolution the current resolution\n   * @param proj the projection to retrieve the data\n   * @param success success callback\n   * @param failure failure callback\n   * @param randomParam random parameter to ensure cache is not causing problems in retrieving new data\n   */\n  public customWFSLoader(\n    vectorSource: olSourceVector,\n    options: WFSDataSourceOptions,\n    interceptor: AuthInterceptor,\n    extent: Extent,\n    resolution: number,\n    proj: olProjection,\n    success: (features: olFeature[]) => void,\n    failure: () => void,\n    randomParam?: boolean\n  ) {\n    {\n      const paramsWFS = options.paramsWFS;\n      const wfsProj = paramsWFS.srsName\n        ? new olProjection({ code: paramsWFS.srsName })\n        : proj;\n      const currentExtent = olproj.transformExtent(extent, proj, wfsProj);\n      const ogcFilters = (options as OgcFilterableDataSourceOptions).ogcFilters;\n\n      if (\n        (this.previousLoadExtent &&\n          this.previousLoadExtent !== currentExtent) ||\n        (this.previousLoadResolution &&\n          this.previousLoadResolution !== resolution) ||\n        (this.previousOgcFilters && this.previousOgcFilters !== ogcFilters)\n      ) {\n        vectorSource.removeLoadedExtent(this.previousLoadExtent);\n        for (const xhr of this.xhrAccumulator) {\n          xhr.abort();\n        }\n      }\n\n      this.previousLoadExtent = currentExtent;\n      this.previousLoadResolution = resolution;\n      this.previousOgcFilters = ogcFilters;\n\n      paramsWFS.srsName = paramsWFS.srsName || proj.getCode();\n\n      const url = buildUrl(\n        options,\n        currentExtent,\n        wfsProj,\n        ogcFilters,\n        randomParam\n      );\n      let startIndex = 0;\n      if (\n        paramsWFS.version === '2.0.0' &&\n        paramsWFS.maxFeatures > defaultMaxFeatures\n      ) {\n        const nbOfFeature = 1000;\n        while (startIndex < paramsWFS.maxFeatures) {\n          let alteredUrl = url.replace(\n            'count=' + paramsWFS.maxFeatures,\n            'count=' + nbOfFeature\n          );\n          alteredUrl = alteredUrl.replace('startIndex=0', '0');\n          alteredUrl += '&startIndex=' + startIndex;\n          alteredUrl.replace(/&&/g, '&');\n          this.getFeatures(\n            vectorSource,\n            currentExtent,\n            wfsProj,\n            proj,\n            alteredUrl,\n            success,\n            failure\n          );\n          startIndex += nbOfFeature;\n        }\n      } else {\n        this.getFeatures(\n          vectorSource,\n          currentExtent,\n          wfsProj,\n          proj,\n          url,\n          success,\n          failure\n        );\n      }\n    }\n  }\n\n  /**\n   * Custom loader to get feature from a WFS datasource\n   * @internal\n   * @param vectorSource the vector source to be created\n   * @param extent the extent of the requested data\n   * @param dataProjection the projection of the retrieved data\n   * @param featureProjection the projection of the created features\n   * @param url the url string to retrieve the data\n   * @param success success callback\n   * @param failure failure callback\n   */\n  private getFeatures(\n    vectorSource: olSourceVector,\n    extent: Extent,\n    dataProjection: olProjection,\n    featureProjection: olProjection,\n    url: string,\n    success: (features: olFeature[]) => void,\n    failure: () => void\n  ) {\n    const xhr = new XMLHttpRequest();\n    const alteredUrlWithKeyAuth = this.authInterceptor.alterUrlWithKeyAuth(url);\n    let modifiedUrl = url;\n    if (alteredUrlWithKeyAuth) {\n      modifiedUrl = alteredUrlWithKeyAuth;\n    }\n\n    xhr.open('GET', modifiedUrl);\n    if (this.authInterceptor) {\n      this.authInterceptor.interceptXhr(xhr, modifiedUrl);\n    }\n    const onError = () => {\n      vectorSource.removeLoadedExtent(extent);\n      failure();\n    };\n    xhr.onerror = onError;\n\n    xhr.onload = () => {\n      if (xhr.status === 200 && xhr.responseText.length > 0) {\n        const features = vectorSource\n          .getFormat()\n          .readFeatures(xhr.responseText, {\n            dataProjection,\n            featureProjection\n          }) as olFeature[];\n        if (features) {\n          vectorSource.addFeatures(features);\n          success(features);\n        } else {\n          success([]);\n        }\n      } else {\n        onError();\n      }\n    };\n    this.xhrAccumulator.push(xhr);\n    xhr.send();\n  }\n\n  /**\n   * Custom loader for vector layer.\n   * @internal\n   * @param vectorSource the vector source to be created\n   * @param url the url string or function to retrieve the data\n   * @param extent the extent of the requested data\n   * @param resolution the current resolution\n   * @param projection the projection to retrieve the data\n   */\n  private customLoader(\n    vectorSource: olSourceVector,\n    url: string,\n    extent: Extent,\n    resolution: number,\n    projection: olProjection,\n    success: (features: olFeature[]) => void,\n    failure: () => void\n  ) {\n    const xhr = new XMLHttpRequest();\n    let modifiedUrl = url;\n    if (typeof url !== 'function') {\n      const alteredUrlWithKeyAuth =\n        this.authInterceptor.alterUrlWithKeyAuth(url);\n      if (alteredUrlWithKeyAuth) {\n        modifiedUrl = alteredUrlWithKeyAuth;\n      }\n    }\n\n    if (this.geoNetworkService && typeof url !== 'function') {\n      const format = vectorSource.getFormat();\n      const type = format.getType();\n\n      const responseType = type;\n      const onError = () => {\n        vectorSource.removeLoadedExtent(extent);\n        failure();\n      };\n\n      const options: SimpleGetOptions = { responseType };\n      this.geoNetworkService.geoDBService\n        .get(url)\n        .pipe(delay(750))\n        .pipe(\n          concatMap((r) =>\n            r\n              ? of(r)\n              : this.geoNetworkService.get(modifiedUrl as string, options).pipe(\n                  first(),\n                  catchError((res) => {\n                    onError();\n                    throw res;\n                  })\n                )\n          )\n        )\n        .subscribe((content) => {\n          if (content) {\n            const format = vectorSource.getFormat();\n            const type = format.getType();\n            let source;\n            if (type === 'json' || type === 'text') {\n              source = content;\n            } else if (type === 'xml') {\n              source = content;\n              if (!source) {\n                source = new DOMParser().parseFromString(\n                  content,\n                  'application/xml'\n                );\n              }\n            } else if (type === 'arraybuffer') {\n              source = content;\n            }\n            if (source) {\n              const features = format.readFeatures(source, {\n                extent,\n                featureProjection: projection\n              }) as OlFeature[];\n              vectorSource.addFeatures(features);\n              success(features);\n            } else {\n              onError();\n            }\n          }\n        });\n    } else {\n      xhr.open('GET', modifiedUrl as string);\n      const format = vectorSource.getFormat();\n      if (format.getType() === 'arraybuffer') {\n        xhr.responseType = 'arraybuffer';\n      }\n      if (this.authInterceptor) {\n        this.authInterceptor.interceptXhr(xhr, modifiedUrl as string);\n      }\n\n      const onError = () => {\n        vectorSource.removeLoadedExtent(extent);\n        failure();\n      };\n      xhr.onerror = onError;\n      xhr.onload = () => {\n        // status will be 0 for file:// urls\n        if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {\n          const type = format.getType();\n          let source;\n          if (type === 'json' || type === 'text') {\n            source = xhr.responseText;\n          } else if (type === 'xml') {\n            source = xhr.responseXML;\n            if (!source) {\n              source = new DOMParser().parseFromString(\n                xhr.responseText,\n                'application/xml'\n              );\n            }\n          } else if (type === 'arraybuffer') {\n            source = xhr.response;\n          }\n          if (source) {\n            const features = format.readFeatures(source, {\n              extent,\n              featureProjection: projection\n            }) as OlFeature[];\n            vectorSource.addFeatures(features);\n            success(features);\n          } else {\n            onError();\n          }\n        } else {\n          onError();\n        }\n      };\n      xhr.send();\n    }\n  }\n\n  /**\n   * Custom loader for vector layer.\n   * @internal\n   * @param vectorSource the vector source to be created\n   * @param layerID the url string or function to retrieve the data\n   * @param extent the extent of the requested data\n   * @param resolution the current resolution\n   * @param projection the projection to retrieve the data\n   */\n  private customIDBLoader(\n    vectorSource,\n    layerID,\n    extent,\n    projection,\n    success,\n    failure\n  ) {\n    if (this.geoNetworkService) {\n      const onError = () => {\n        vectorSource.removeLoadedExtent(extent);\n        failure();\n      };\n      this.geoNetworkService.geoDBService.get(layerID).subscribe((content) => {\n        if (content) {\n          const format = vectorSource.getFormat();\n          const type = format.getType();\n          let source;\n          if (type === 'json' || type === 'text') {\n            source = content;\n          } else if (type === 'xml') {\n            source = content;\n            if (!source) {\n              source = new DOMParser().parseFromString(\n                content,\n                'application/xml'\n              );\n            }\n          } else if (type === 'arraybuffer') {\n            source = content;\n          }\n          if (source) {\n            const features = format.readFeatures(source, {\n              extent,\n              featureProjection: projection\n            });\n            vectorSource.addFeatures(features, format.readProjection(source));\n            success(features);\n          } else {\n            onError();\n          }\n        }\n      });\n    }\n  }\n}\n","import { FeatureDataSource } from '../../datasource/shared/datasources';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport type { FeatureStore } from './store';\n\n/**\n * Try to bind a layer to a store if none is bound already.\n * The layer will also be added to the store's map.\n * If no layer is given to that function, a basic one will be created.\n * @param store The store to bind the layer\n * @param layer An optional VectorLayer\n */\nexport function tryBindStoreLayer(\n  store: FeatureStore,\n  layer?: VectorLayer\n): VectorLayer {\n  if (store.layer !== undefined) {\n    if (!store.map.layerController.getById(store.layer.id)) {\n      store.map.layerController.add(store.layer);\n    }\n    return store.layer;\n  }\n\n  layer = layer\n    ? layer\n    : new VectorLayer({\n        source: new FeatureDataSource()\n      });\n  store.bindLayer(layer);\n  if (!store.map.layerController.getById(store.layer.id)) {\n    store.map.layerController.add(store.layer);\n  }\n\n  return layer;\n}\n","export const FEATURE = 'Feature';\n\nexport enum FeatureMotion {\n  None,\n  Move,\n  Zoom,\n  Default\n}\n","import { EntityStoreStrategy } from '@igo2/common/entity';\n\nimport { Subscription } from 'rxjs';\n\nimport { FeatureMotion } from '../feature.enums';\nimport {\n  Feature,\n  FeatureStoreLoadingStrategyOptions\n} from '../feature.interfaces';\nimport { FeatureStore } from '../store';\n\n/**\n * This strategy loads a store's features into it's layer counterpart.\n * The store -> layer binding is a one-way binding. That means any entity\n * added to the store will be added to the layer but the opposite is false.\n *\n * Important: This strategy observes filtered entities, not raw entities. This\n * is not configurable yet.\n */\nexport class FeatureStoreLoadingStrategy extends EntityStoreStrategy {\n  /**\n   * Subscription to the store's features\n   */\n  private stores$$ = new Map<FeatureStore, Subscription>();\n\n  private motion: FeatureMotion;\n\n  constructor(protected options: FeatureStoreLoadingStrategyOptions) {\n    super(options);\n    this.setMotion(options.motion);\n  }\n\n  /**\n   * Bind this strategy to a store and start watching for entities changes\n   * @param store Feature store\n   */\n  bindStore(store: FeatureStore) {\n    super.bindStore(store);\n    if (this.active === true) {\n      this.watchStore(store);\n    }\n  }\n\n  /**\n   * Unbind this strategy from a store and stop watching for entities changes\n   * @param store Feature store\n   */\n  unbindStore(store: FeatureStore) {\n    super.unbindStore(store);\n    if (this.active === true) {\n      this.unwatchStore(store);\n    }\n  }\n\n  /**\n   * Define the motion to apply on load\n   * @param motion Feature motion\n   */\n  setMotion(motion: FeatureMotion) {\n    this.motion = motion;\n  }\n\n  /**\n   * Start watching all stores already bound to that strategy at once.\n   * @internal\n   */\n  protected doActivate() {\n    this.stores.forEach((store: FeatureStore) => this.watchStore(store));\n  }\n\n  /**\n   * Stop watching all stores bound to that strategy\n   * @internal\n   */\n  protected doDeactivate() {\n    this.unwatchAll();\n  }\n\n  /**\n   * Watch for entities changes in a store.\n   * Important: Never observe a store's sorted entities. It makes no sense\n   * to display sorted entities (instead of unsorted) on a layer and it\n   * would potentially result in a lot of useless computation.\n   * @param store Feature store\n   */\n  private watchStore(store: FeatureStore) {\n    if (this.stores$$.has(store)) {\n      return;\n    }\n\n    const subscription = store.view\n      .all$()\n      .subscribe((features: Feature[]) =>\n        this.onFeaturesChange(features, store)\n      );\n    this.stores$$.set(store, subscription);\n  }\n\n  /**\n   * Stop watching for entities changes in a store.\n   * @param store Feature store\n   */\n  private unwatchStore(store: FeatureStore) {\n    const subscription = this.stores$$.get(store);\n    if (subscription !== undefined) {\n      subscription.unsubscribe();\n      this.stores$$.delete(store);\n    }\n  }\n\n  /**\n   * Stop watching for entities changes in all stores.\n   */\n  private unwatchAll() {\n    Array.from(this.stores$$.entries()).forEach(\n      (entries: [FeatureStore, Subscription]) => {\n        entries[1].unsubscribe();\n      }\n    );\n    this.stores$$.clear();\n  }\n\n  /**\n   * Load features into a layer or clear the layer if the array of features is empty.\n   * @param features Store filtered features\n   * @param store Feature store\n   */\n  private onFeaturesChange(features: Feature[], store: FeatureStore) {\n    if (features.length === 0) {\n      store.clearLayer();\n    } else {\n      store.setLayerFeatures(\n        features,\n        this.selectMotion(store),\n        this.options.viewScale,\n        this.options.areaRatio,\n        this.options.getFeatureId\n      );\n    }\n  }\n\n  /**\n   * Selects the best motion\n   * @param store A FeatureStore to apply the motion\n   * @returns The motion selected\n   */\n  private selectMotion(store: FeatureStore) {\n    if (this.motion !== undefined) {\n      return this.motion;\n    }\n\n    if (store.pristine === true) {\n      // If features have just been loaded into the store, move/zoom on them\n      return FeatureMotion.Default;\n    } else if (store.count > store.view.count) {\n      // If features have been filtered, move/zoom on the remaining ones\n      return FeatureMotion.Default;\n    } else {\n      // On insert, update or delete, do nothing\n      return FeatureMotion.None;\n    }\n  }\n}\n","import {\n  EntityKey,\n  getEntityIcon,\n  getEntityId,\n  getEntityProperty,\n  getEntityRevision,\n  getEntityTitle\n} from '@igo2/common/entity';\nimport { uuid } from '@igo2/utils';\n\nimport OlFeature from 'ol/Feature';\nimport * as olextent from 'ol/extent';\nimport OlFormatGeoJSON from 'ol/format/GeoJSON';\nimport type { GeometryLayout } from 'ol/geom/Geometry';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport OlLineString from 'ol/geom/LineString';\nimport OlPoint from 'ol/geom/Point';\nimport OlPolygon from 'ol/geom/Polygon';\nimport OlLayer from 'ol/layer/Layer';\nimport * as olproj from 'ol/proj';\nimport OlRenderFeature from 'ol/render/Feature';\nimport OlSource from 'ol/source/Source';\nimport * as olstyle from 'ol/style';\n\nimport { MapViewController } from '../../map/shared/controllers/view';\nimport { MapExtent } from '../../map/shared/map.interface';\nimport { FEATURE, FeatureMotion } from './feature.enums';\nimport { Feature, FeatureGeometry } from './feature.interfaces';\n\n/**\n * Create an Openlayers feature object out of a feature definition.\n * The output object has a reference to the feature id.\n * @param feature Feature definition\n * @param projectionOut Feature object projection\n * @returns OpenLayers feature object\n */\nexport function featureToOl(\n  feature: Feature,\n  projectionOut: string,\n  getId?: (Feature) => EntityKey\n): OlFeature<OlGeometry> {\n  getId = getId ? getId : getEntityId;\n\n  const olFormat = new OlFormatGeoJSON();\n  const olFeature = olFormat.readFeature(feature, {\n    dataProjection: feature.projection,\n    featureProjection: projectionOut\n  });\n\n  olFeature.setId(getId(feature));\n\n  const title = getEntityTitle(feature);\n  if (title !== undefined) {\n    olFeature.set('_title', title, true);\n  }\n\n  if (feature.extent !== undefined) {\n    olFeature.set('_extent', feature.extent, true);\n  }\n\n  if (feature.projection !== undefined) {\n    olFeature.set('_projection', feature.projection, true);\n  }\n\n  const mapTitle = getEntityProperty(feature, 'meta.mapTitle');\n  if (mapTitle !== undefined) {\n    olFeature.set('_mapTitle', mapTitle, true);\n  }\n\n  olFeature.set('_entityRevision', getEntityRevision(feature), true);\n\n  const icon = getEntityIcon(feature);\n  if (icon !== undefined) {\n    olFeature.set('_icon', icon, true);\n  }\n\n  if (feature.meta && feature.meta.style) {\n    olFeature.set('_style', feature.meta.style, true);\n  }\n\n  if (feature.sourceId) {\n    olFeature.set('_sourceId', feature.sourceId, true);\n  }\n\n  return olFeature;\n}\n\nexport function renderFeatureFromOl(\n  olRenderFeature: OlRenderFeature,\n  projectionIn: string,\n  olLayer?: OlLayer<OlSource>,\n  projectionOut = 'EPSG:4326'\n): Feature {\n  let geom;\n  let title;\n  let exclude;\n  let excludeOffline;\n\n  if (olLayer) {\n    title = olLayer.get('title');\n    if (olLayer.get('sourceOptions')) {\n      exclude = olLayer.get('sourceOptions').excludeAttribute;\n      excludeOffline = olLayer.get('sourceOptions').excludeAttributeOffline;\n    }\n  } else {\n    title = olRenderFeature.get('_title');\n  }\n\n  const olFormat = new OlFormatGeoJSON();\n  const properties = olRenderFeature.getProperties();\n  const geometryType = olRenderFeature.getType();\n\n  if (geometryType === 'Polygon') {\n    const ends = olRenderFeature.getEnds() as number[];\n    geom = new OlPolygon(\n      olRenderFeature.getFlatCoordinates(),\n      'XY' as GeometryLayout,\n      ends\n    );\n  } else if (geometryType === 'Point') {\n    geom = new OlPoint(\n      olRenderFeature.getFlatCoordinates(),\n      'XY' as GeometryLayout\n    );\n  } else if (geometryType === 'LineString') {\n    geom = new OlLineString(\n      olRenderFeature.getFlatCoordinates(),\n      'XY' as GeometryLayout\n    );\n  }\n\n  const geometry = olFormat.writeGeometryObject(geom, {\n    dataProjection: projectionOut,\n    featureProjection: projectionIn\n  }) as FeatureGeometry;\n\n  const id = olRenderFeature.getId() ? olRenderFeature.getId() : uuid();\n  const mapTitle = olRenderFeature.get('_mapTitle');\n  const extent = olproj.transformExtent(\n    olRenderFeature.getExtent(),\n    projectionIn,\n    projectionOut\n  ) as [number, number, number, number];\n  return {\n    type: FEATURE,\n    projection: projectionOut,\n    extent,\n    meta: {\n      id,\n      title: title ? title : mapTitle ? mapTitle : id,\n      mapTitle,\n      excludeAttribute: exclude,\n      excludeAttributeOffline: excludeOffline\n    },\n    properties,\n    geometry,\n    ol: olRenderFeature\n  };\n}\n/**\n * Create a feature object out of an OL feature\n * The output object has a reference to the feature id.\n * @param olFeature OL Feature\n * @param projectionIn OL feature projection\n * @param olLayer OL Layer\n * @param projectionOut Feature projection\n * @returns Feature\n */\nexport function featureFromOl(\n  olFeature: OlFeature<OlGeometry>,\n  projectionIn: string,\n  olLayer?: OlLayer<OlSource>,\n  projectionOut = 'EPSG:4326'\n): Feature {\n  let title;\n  let exclude;\n  let excludeOffline;\n  let idColumn; // for arcgisrest and tilearcgisrest source\n  const olFormat = new OlFormatGeoJSON();\n\n  const keys = olFeature.getKeys().filter((key: string) => {\n    return !key.startsWith('_') && key !== 'geometry';\n  });\n  const properties = keys.reduce((acc: object, key: string) => {\n    acc[key] = olFeature.get(key);\n    return acc;\n  }, {});\n\n  const geometry = olFormat.writeGeometryObject(olFeature.getGeometry(), {\n    dataProjection: projectionOut,\n    featureProjection: projectionIn\n  }) as FeatureGeometry;\n\n  if (olLayer) {\n    title = olLayer.get('title');\n    const sourceOptions = olLayer.get('sourceOptions');\n    if (sourceOptions) {\n      exclude = sourceOptions.excludeAttribute;\n      excludeOffline = sourceOptions.excludeAttributeOffline;\n      idColumn =\n        sourceOptions.idColumn ||\n        (sourceOptions.type === 'arcgisrest' ||\n        sourceOptions.type === 'tilearcgisrest'\n          ? 'OBJECTID'\n          : undefined);\n    }\n  } else {\n    title = olFeature.get('_title');\n  }\n  const mapTitle = olFeature.get('_mapTitle');\n  const id = olFeature.getId()\n    ? olFeature.getId()\n    : olFeature.get(idColumn)\n      ? olFeature.get(idColumn)\n      : uuid();\n\n  return {\n    type: FEATURE,\n    projection: projectionOut,\n    extent: olFeature.get('_extent'),\n    meta: {\n      id,\n      title: title ? title : mapTitle ? mapTitle : id,\n      mapTitle,\n      revision: olFeature.getRevision(),\n      style: olFeature.get('_style'),\n      excludeAttribute: exclude,\n      excludeAttributeOffline: excludeOffline\n    },\n    properties,\n    geometry,\n    ol: olFeature\n  };\n}\n\n/**\n * Compute an OL feature extent in it's map projection\n * @param map Map\n * @param olFeature OL feature\n * @returns Extent in the map projection\n */\nexport function computeOlFeatureExtent(\n  olFeature: OlFeature<OlGeometry>,\n  projection: olproj.Projection\n): [number, number, number, number] {\n  let olExtent = olextent.createEmpty();\n\n  const olFeatureExtent = olFeature.get('_extent');\n  const olFeatureProjection = olFeature.get('_projection');\n  if (olFeatureExtent !== undefined && olFeatureProjection !== undefined) {\n    olExtent = olproj.transformExtent(\n      olFeatureExtent,\n      olFeatureProjection,\n      projection\n    );\n  } else {\n    const olGeometry = olFeature.getGeometry();\n    if (olGeometry !== null) {\n      olExtent = olGeometry.getExtent();\n    }\n  }\n\n  return olExtent as [number, number, number, number];\n}\n\n/**\n * Compute a multiple OL features extent in their map projection\n * @param map Map\n * @param olFeatures OL features\n * @returns Extent in the map projection\n */\nexport function computeOlFeaturesExtent(\n  olFeatures: OlFeature<OlGeometry>[],\n  projection: olproj.Projection\n): [number, number, number, number] {\n  const extent = olextent.createEmpty();\n\n  olFeatures.forEach((olFeature: OlFeature<OlGeometry>) => {\n    const featureExtent = computeOlFeatureExtent(olFeature, projection);\n    olextent.extend(extent, featureExtent);\n  });\n\n  return extent as [number, number, number, number];\n}\n\n/**\n * Scale an extent.\n * @param extent Extent\n * @param Scaling factors for top, right, bottom and left directions, in that order\n * @returns Scaled extent\n */\nexport function scaleExtent(\n  extent: [number, number, number, number],\n  scale: [number, number, number, number]\n): [number, number, number, number] {\n  const [width, height] = olextent.getSize(extent);\n  return [\n    scale[3] ? extent[0] - width * scale[3] : extent[0],\n    scale[2] ? extent[1] - height * scale[2] : extent[1],\n    scale[1] ? extent[2] + width * scale[1] : extent[2],\n    scale[0] ? extent[3] + height * scale[0] : extent[3]\n  ];\n}\n\n/**\n * Return true if features are out of view.\n * If features are too close to the edge, they are considered out of view.\n * By default, we define the edge as 5% (0.05) of the extent size.\n * @param map Map\n * @param featuresExtent The features's extent\n * @param edgeRatio Number or Number[] Single value OR an array =>\n *  [top,right,bottom,left] directions, in that order\n * @returns Return true if features are out of view\n */\nexport function featuresAreOutOfView(\n  extent: MapExtent,\n  featuresExtent: [number, number, number, number],\n  edgeRatio: number | number[] = 0.05\n) {\n  const edgesRatio = Array.isArray(edgeRatio)\n    ? edgeRatio\n    : [edgeRatio, edgeRatio, edgeRatio, edgeRatio];\n  const scale = [-1, -1, -1, -1].map((x, i) => x * edgesRatio[i]);\n  const viewExtent = scaleExtent(\n    extent,\n    scale as [number, number, number, number]\n  );\n\n  return !olextent.containsExtent(viewExtent, featuresExtent);\n}\n\n/**\n * Return true if features are too deep into the view. This results\n * in features being too small.\n * Features are considered too small if their extent occupies less than\n * 1% of the map extent.\n * @param map Map\n * @param featuresExtent The features's extent\n * @param areaRatio The features extent to view extent acceptable ratio\n * @returns Return true if features are too deep in the view\n */\nexport function featuresAreTooDeepInView(\n  viewController: MapViewController,\n  featuresExtent: [number, number, number, number],\n  areaRatio?: number\n) {\n  // An area ratio of 0.004 means that the feature extent's width and height\n  // should be about 1/16 of the map extent's width and height\n  areaRatio = areaRatio ? areaRatio : 0.004;\n  const mapExtent = viewController.getExtent();\n  const mapExtentArea = olextent.getArea(mapExtent);\n  const featuresExtentArea = olextent.getArea(featuresExtent);\n\n  if (featuresExtentArea === 0 && viewController.getZoom() > 13) {\n    // In case it's a point\n    return false;\n  }\n\n  return featuresExtentArea / mapExtentArea < areaRatio;\n}\n\n/**\n * Fit view to include the features extent.\n * By default, this method will let the features occupy about 50% of the viewport.\n * @param map Map\n * @param olFeatures OL features\n * @param motion To motion to the new map view\n * @param scale If this is defined, the original view will be scaled\n *  by that factor before any logic is applied.\n */\nexport function moveToOlFeatures(\n  viewController: MapViewController,\n  olFeatures: OlFeature<OlGeometry>[],\n  motion: FeatureMotion = FeatureMotion.Default,\n  scale?: [number, number, number, number],\n  areaRatio?: number\n) {\n  const extent = viewController.getExtent();\n  const projection = viewController.getOlProjection();\n  const featuresExtent = computeOlFeaturesExtent(olFeatures, projection);\n  let viewExtent = featuresExtent;\n  if (scale !== undefined) {\n    viewExtent = scaleExtent(viewExtent, scale);\n  }\n\n  if (motion === FeatureMotion.Zoom) {\n    viewController.zoomToExtent(viewExtent);\n  } else if (motion === FeatureMotion.Move) {\n    viewController.moveToExtent(viewExtent);\n  } else if (motion === FeatureMotion.Default) {\n    if (\n      featuresAreOutOfView(extent, featuresExtent) ||\n      featuresAreTooDeepInView(viewController, featuresExtent, areaRatio)\n    ) {\n      viewController.zoomToExtent(viewExtent);\n    }\n  }\n}\n\n/**\n * Hide an OL feature\n * @param olFeature OL feature\n */\nexport function hideOlFeature(olFeature: OlFeature<OlGeometry>) {\n  olFeature.setStyle(new olstyle.Style({}));\n}\n\n/**\n * Compute a diff between a source array of Ol features and a target array\n * @param source Source array of OL features\n * @param starget Target array of OL features\n * @returns Features to add and remove\n */\nexport function computeOlFeaturesDiff(\n  source: OlFeature<OlGeometry>[],\n  target: OlFeature<OlGeometry>[]\n): {\n  add: OlFeature<OlGeometry>[];\n  remove: OlFeature<OlGeometry>[];\n} {\n  const olFeaturesMap = new Map();\n  target.forEach((olFeature: OlFeature<OlGeometry>) => {\n    olFeaturesMap.set(olFeature.getId(), olFeature);\n  });\n\n  const olFeaturesToRemove = [];\n  source.forEach((olFeature: OlFeature<OlGeometry>) => {\n    const newOlFeature = olFeaturesMap.get(olFeature.getId());\n    if (newOlFeature === undefined) {\n      olFeaturesToRemove.push(olFeature);\n    } else if (\n      newOlFeature.get('_entityRevision') !== olFeature.get('_entityRevision')\n    ) {\n      olFeaturesToRemove.push(olFeature);\n    } else {\n      olFeaturesMap.delete(newOlFeature.getId());\n    }\n  });\n\n  const olFeaturesToAddIds = Array.from(olFeaturesMap.keys());\n  const olFeaturesToAdd = target.filter((olFeature: OlFeature<OlGeometry>) => {\n    return olFeaturesToAddIds.indexOf(olFeature.getId()) >= 0;\n  });\n\n  return {\n    add: olFeaturesToAdd,\n    remove: olFeaturesToRemove\n  };\n}\n","import { EntityKey, EntityStore, getEntityId } from '@igo2/common/entity';\n\nimport OlFeature from 'ol/Feature';\nimport * as olextent from 'ol/extent';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\n\nimport { Document } from 'flexsearch';\n\nimport { FeatureDataSource } from '../../datasource/shared/datasources';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport type { IgoMap, MapExtent } from '../../map/shared';\nimport { FeatureMotion } from './feature.enums';\nimport { Feature, FeatureStoreOptions } from './feature.interfaces';\nimport {\n  computeOlFeaturesDiff,\n  computeOlFeaturesExtent,\n  featureFromOl,\n  featureToOl,\n  moveToOlFeatures\n} from './feature.utils';\n\n/**\n * The class is a specialized version of an EntityStore that stores\n * features and the map layer to display them on. Synchronization\n * between the store and the layer is handled by strategies.\n */\nexport class FeatureStore<T extends Feature = Feature> extends EntityStore<T> {\n  /**\n   * Vector layer to display the features on\n   */\n  layer: VectorLayer;\n\n  /**\n   * The map the layer is bound to\n   */\n  readonly map: IgoMap;\n\n  /**\n   * The layer's data source\n   */\n  get source(): FeatureDataSource {\n    return this.layer\n      ? (this.layer.dataSource as FeatureDataSource)\n      : undefined;\n  }\n\n  /**\n   * The searchable index of loaded feature. Computed if strategy is provided\n   */\n  set searchDocument(v: Document<T>) {\n    this._searchDocument = v;\n  }\n\n  get searchDocument(): Document<T> {\n    return this._searchDocument;\n  }\n  private _searchDocument: Document<T>;\n\n  constructor(entities: T[], options: FeatureStoreOptions) {\n    super(entities, options);\n    this.map = options.map;\n  }\n\n  /**\n   * Bind this store to a vector layer\n   * @param layer Vector layer\n   * @returns Feature store\n   */\n  bindLayer(layer: VectorLayer): FeatureStore {\n    this.layer = layer;\n    return this;\n  }\n\n  /**\n   * Set the layer's features and perform a motion to make them visible. Strategies\n   * make extensive use of that method.\n   * @param features Features\n   * @param motion Optional: The type of motion to perform\n   */\n  setLayerFeatures(\n    features: Feature[],\n    motion: FeatureMotion = FeatureMotion.Default,\n    viewScale?: [number, number, number, number],\n    areaRatio?: number,\n    getId?: (Feature) => EntityKey\n  ) {\n    getId = getId ? getId : getEntityId;\n    this.checkLayer();\n\n    const olFeatures = features.map((feature: Feature) =>\n      featureToOl(feature, this.map.projection, getId)\n    );\n    this.setLayerOlFeatures(olFeatures, motion, viewScale, areaRatio);\n  }\n\n  /**\n   * Set the store's features from an array of OL features.\n   * @param olFeatures Ol features\n   */\n  setStoreOlFeatures(olFeatures: OlFeature<OlGeometry>[]) {\n    this.checkLayer();\n\n    const features = olFeatures.map((olFeature: OlFeature<OlGeometry>) => {\n      olFeature.set('_featureStore', this, true);\n      return featureFromOl(olFeature, this.layer.map.projection);\n    });\n    this.load(features as T[]);\n  }\n\n  /**\n   * Remove all features from the layer\n   */\n  clearLayer() {\n    this.checkLayer();\n    this.source.ol.clear();\n  }\n\n  /**\n   * Check wether a layer is bound or not and throw an error if not.\n   */\n  private checkLayer() {\n    if (this.layer === undefined) {\n      throw new Error('This FeatureStore is not bound to a layer.');\n    }\n  }\n\n  /**\n   * Set the layer's features and perform a motion to make them visible.\n   * @param features Openlayers feature objects\n   * @param motion Optional: The type of motion to perform\n   */\n  public setLayerOlFeatures(\n    olFeatures: OlFeature<OlGeometry>[],\n    motion: FeatureMotion = FeatureMotion.Default,\n    viewScale?: [number, number, number, number],\n    areaRatio?: number\n  ) {\n    const olSource = this.layer.ol.getSource();\n    const diff = computeOlFeaturesDiff(olSource.getFeatures(), olFeatures);\n    if (diff.remove.length > 0) {\n      this.removeOlFeaturesFromLayer(diff.remove);\n    }\n\n    if (diff.add.length > 0) {\n      this.addOlFeaturesToLayer(diff.add);\n    }\n\n    if (diff.add.length > 0) {\n      // If features are added, do a motion toward the newly added features\n      moveToOlFeatures(\n        this.map.viewController,\n        diff.add,\n        motion,\n        viewScale,\n        areaRatio\n      );\n    } else if (diff.remove.length > 0) {\n      // Else, do a motion toward all the features\n      moveToOlFeatures(\n        this.map.viewController,\n        olFeatures,\n        motion,\n        viewScale,\n        areaRatio\n      );\n    }\n  }\n\n  setLayerExtent(): void {\n    const features = this.entities$.getValue();\n    const extent = olextent.createEmpty() as MapExtent;\n    const olFeatures = [];\n\n    features.forEach((feature) => {\n      olFeatures.push(featureToOl(feature, this.map.projection));\n    });\n    const featuresExtent = computeOlFeaturesExtent(\n      olFeatures,\n      this.map.viewProjection\n    );\n    olextent.extend(extent, featuresExtent);\n    this.layer.setExtent(extent);\n  }\n  /**\n   * Add features to the the layer\n   * @param features Openlayers feature objects\n   */\n  private addOlFeaturesToLayer(olFeatures: OlFeature<OlGeometry>[]) {\n    olFeatures.forEach((olFeature: OlFeature<OlGeometry>) => {\n      olFeature.set('_featureStore', this, true);\n    });\n    this.source.ol.addFeatures(olFeatures);\n  }\n\n  /**\n   * Remove features from the the layer\n   * @param features Openlayers feature objects\n   */\n  private removeOlFeaturesFromLayer(olFeatures: OlFeature<OlGeometry>[]) {\n    olFeatures.forEach((olFeature: OlFeature<OlGeometry>) => {\n      this.source.ol.removeFeature(olFeature);\n    });\n  }\n}\n","import {\n  EntityKey,\n  EntityRecord,\n  EntityStoreStrategy\n} from '@igo2/common/entity';\n\nimport OlFeature from 'ol/Feature';\nimport MapBrowserPointerEvent from 'ol/MapBrowserEvent';\nimport { unByKey } from 'ol/Observable';\nimport { EventsKey } from 'ol/events';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport OlDragBoxInteraction, { DragBoxEvent } from 'ol/interaction/DragBox';\nimport { DragBoxEvent as OlDragBoxEvent } from 'ol/interaction/DragBox';\n\nimport { Subscription, combineLatest } from 'rxjs';\nimport { debounceTime, map, skip } from 'rxjs/operators';\n\nimport { FeatureDataSource } from '../../../datasource/shared/datasources';\nimport { VectorLayer } from '../../../layer/shared/layers/vector-layer';\nimport { IgoMap } from '../../../map/shared/map';\nimport { ctrlKeyDown } from '../../../map/shared/map.utils';\nimport { FeatureMotion } from '../feature.enums';\nimport {\n  Feature,\n  FeatureStoreSelectionStrategyOptions\n} from '../feature.interfaces';\nimport { FeatureStore } from '../store';\n\nexport class OlDragSelectInteraction extends OlDragBoxInteraction {\n  constructor(options) {\n    super(options);\n  }\n}\n\n/**\n * This strategy synchronizes a store and a layer selected entities.\n * The store <-> layer binding is a two-way binding.\n *\n * In many cases, a single strategy bound to multiple stores\n * will yield better results that multiple strategies with each their\n * own store. In the latter scenario, a click on overlapping features\n * would trigger the strategy of each layer and they would cancel\n * each other as well as move the map view around needlessly.\n */\nexport class FeatureStoreSelectionStrategy extends EntityStoreStrategy {\n  /**\n   * Listener to the map click event that allows selecting a feature\n   * by clicking on the map\n   */\n  private mapClickListener;\n\n  private olDragSelectInteraction: OlDragSelectInteraction;\n\n  private olDragSelectInteractionEndKey: EventsKey | EventsKey[];\n\n  /**\n   * Subscription to all stores selected entities\n   */\n  private stores$$: Subscription;\n\n  private motion: FeatureMotion;\n\n  /**\n   * The map the layers belong to\n   */\n  get map(): IgoMap {\n    return this.options.map;\n  }\n\n  /**\n   * A feature store that'll contain the selected features. It has it's own\n   * layer, shared by all the stores this staretgy is bound to.\n   */\n  get overlayStore(): FeatureStore {\n    return this._overlayStore;\n  }\n  private _overlayStore: FeatureStore;\n\n  constructor(protected options: FeatureStoreSelectionStrategyOptions) {\n    super(options);\n    this.setMotion(options.motion);\n    this._overlayStore = this.createOverlayStore();\n  }\n\n  /**\n   * Bind this strategy to a store and force this strategy's\n   * reactivation to properly setup watchers.\n   * @param store Feature store\n   */\n  bindStore(store: FeatureStore) {\n    super.bindStore(store);\n    if (this.active === true) {\n      // Force reactivation\n      this.activate();\n    }\n  }\n\n  /**\n   * Unbind this strategy from a store and force this strategy's\n   * reactivation to properly setup watchers.\n   * @param store Feature store\n   */\n  unbindStore(store: FeatureStore) {\n    super.unbindStore(store);\n    if (this.active === true) {\n      // Force reactivation\n      this.activate();\n    }\n  }\n\n  /**\n   * Define the motion to apply on select\n   * @param motion Feature motion\n   */\n  setMotion(motion: FeatureMotion) {\n    this.motion = motion;\n  }\n\n  /**\n   * Unselect all entities, from all stores\n   */\n  unselectAll() {\n    this.stores.forEach((store: FeatureStore) => {\n      store.state.updateAll({ selected: false });\n    });\n  }\n\n  /**\n   * Clear the overlay\n   */\n  clear() {\n    this.overlayStore.source.ol.clear();\n    this.overlayStore.clear();\n  }\n\n  /**\n   * Deactivate the selection without removing the selection\n   * overlay.\n   */\n  deactivateSelection() {\n    this.unlistenToMapClick();\n    this.removeDragBoxInteraction();\n    this.unwatchAll();\n  }\n\n  /**\n   * Add the overlay layer, setup the map click lsitener and\n   * start watching for stores selection\n   * @internal\n   */\n  protected doActivate() {\n    this.addOverlayLayer();\n    this.listenToMapClick();\n    if (this.options.dragBox === true) {\n      this.addDragBoxInteraction();\n    }\n    this.watchAll();\n  }\n\n  /**\n   * Remove the overlay layer, remove the map click lsitener and\n   * stop watching for stores selection\n   * @internal\n   */\n  protected doDeactivate() {\n    this.deactivateSelection();\n    this.removeOverlayLayer();\n  }\n\n  /**\n   * Create a single observable of all the stores. With a single observable,\n   * features can be added all at once to the overlay layer and a single\n   * motion can be performed. Multiple observable would have\n   * a cancelling effect on each other.\n   */\n  private watchAll() {\n    this.unwatchAll();\n\n    const stores$ = this.stores.map((store: FeatureStore) => {\n      return store.stateView\n        .manyBy$((record: EntityRecord<Feature>) => {\n          return record.state.selected === true;\n        })\n        .pipe(\n          map((records: EntityRecord<Feature>[]) =>\n            records.map((record) => record.entity)\n          )\n        );\n    });\n    this.stores$$ = combineLatest(stores$)\n      .pipe(\n        debounceTime(5),\n        skip(1), // Skip intial selection\n        map((features: Feature[][]) => features.reduce((a, b) => a.concat(b)))\n      )\n      .subscribe((features: Feature[]) => this.onSelectFromStore(features));\n  }\n\n  /**\n   * Stop watching for selection in all stores.\n   */\n  private unwatchAll() {\n    if (this.stores$$ !== undefined) {\n      this.stores$$.unsubscribe();\n    }\n  }\n\n  /**\n   * Add a 'singleclick' listener to the map that'll allow selecting\n   * features by clicking on the map. The selection will be performed\n   * only on the layers bound to this strategy.\n   */\n  private listenToMapClick() {\n    this.mapClickListener = this.map.ol.on(\n      'singleclick',\n      (event: MapBrowserPointerEvent<any>) => {\n        this.onMapClick(event);\n      }\n    );\n  }\n\n  /**\n   * Remove the map click listener\n   */\n  private unlistenToMapClick() {\n    unByKey(this.mapClickListener);\n  }\n\n  /**\n   * On map click, select feature at pixel\n   * @param event OL MapBrowserPointerEvent\n   */\n  private onMapClick(event: MapBrowserPointerEvent<any>) {\n    const exclusive = !ctrlKeyDown(event);\n    const reverse = !exclusive;\n    const olFeatures = event.map.getFeaturesAtPixel(event.pixel, {\n      hitTolerance: this.options.hitTolerance || 0,\n      layerFilter: (olLayer) => {\n        const storeOlLayer = this.stores.find((store: FeatureStore) => {\n          return store.layer?.ol === olLayer;\n        });\n        return storeOlLayer !== undefined;\n      }\n    }) as OlFeature<OlGeometry>[];\n    this.onSelectFromMap(olFeatures, exclusive, reverse);\n  }\n\n  /**\n   * Add a drag box interaction and, on drag box end, select features\n   */\n  private addDragBoxInteraction() {\n    let olDragSelectInteraction;\n    const olInteractions = this.map.ol.getInteractions().getArray();\n\n    // There can only be one dragbox interaction, so find the current one, if any\n    // Don't keep a reference to the current dragbox because we don't want\n    // to remove it when this startegy is deactivated\n    for (const olInteraction of olInteractions) {\n      if (olInteraction instanceof OlDragSelectInteraction) {\n        olDragSelectInteraction = olInteraction;\n        break;\n      }\n    }\n    // If no drag box interaction is found, create a new one and add it to the map\n    if (olDragSelectInteraction === undefined) {\n      olDragSelectInteraction = new OlDragSelectInteraction({\n        condition: ctrlKeyDown\n      });\n      this.map.ol.addInteraction(olDragSelectInteraction);\n      this.olDragSelectInteraction = olDragSelectInteraction;\n    }\n\n    this.olDragSelectInteractionEndKey = olDragSelectInteraction.on(\n      'boxend',\n      (event: DragBoxEvent) => this.onDragBoxEnd(event)\n    );\n  }\n\n  /**\n   * Remove drag box interaction\n   */\n  private removeDragBoxInteraction() {\n    if (this.olDragSelectInteractionEndKey !== undefined) {\n      unByKey(this.olDragSelectInteractionEndKey);\n    }\n    if (this.olDragSelectInteraction !== undefined) {\n      this.map.ol.removeInteraction(this.olDragSelectInteraction);\n    }\n    this.olDragSelectInteraction = undefined;\n  }\n\n  /**\n   * On dragbox end, select features in drag box\n   * @param event OL MapBrowserPointerEvent\n   */\n  private onDragBoxEnd(event: OlDragBoxEvent) {\n    const exclusive = !ctrlKeyDown(event.mapBrowserEvent);\n    const target = event.target as any;\n    const extent = target.getGeometry().getExtent();\n    const olFeatures = this.stores.reduce(\n      (acc: OlFeature<OlGeometry>[], store: FeatureStore) => {\n        const olSource = store.layer.ol.getSource();\n        acc.push(...olSource.getFeaturesInExtent(extent));\n        return acc;\n      },\n      []\n    );\n    this.onSelectFromMap(olFeatures, exclusive, false);\n  }\n\n  /**\n   * When features are selected from the store, add\n   * them to this startegy's overlay layer (select on map)\n   * @param features Store features\n   */\n  private onSelectFromStore(features: Feature[]) {\n    const motion = this.motion;\n    const olOverlayFeatures = this.overlayStore.layer.ol\n      .getSource()\n      .getFeatures();\n    const overlayFeaturesKeys = olOverlayFeatures.map(\n      (olFeature: OlFeature<OlGeometry>) => olFeature.getId()\n    );\n    const featuresKeys = features.map(this.overlayStore.getKey);\n\n    let doMotion;\n    if (features.length === 0) {\n      doMotion = false;\n    } else {\n      doMotion =\n        overlayFeaturesKeys.length !== featuresKeys.length ||\n        !overlayFeaturesKeys.every(\n          (key: EntityKey) => featuresKeys.indexOf(key) >= 0\n        );\n    }\n\n    this.overlayStore.setLayerFeatures(\n      features,\n      doMotion ? motion : FeatureMotion.None,\n      this.options.viewScale,\n      this.options.areaRatio,\n      this.options.getFeatureId\n    );\n  }\n\n  /**\n   * When features are selected from the map, also select them\n   * in their store.\n   * @param olFeatures OL feature objects\n   */\n  private onSelectFromMap(\n    olFeatures: OlFeature<OlGeometry>[],\n    exclusive: boolean,\n    reverse: boolean\n  ) {\n    const groupedFeatures = this.groupFeaturesByStore(olFeatures);\n\n    this.stores.forEach((store: FeatureStore) => {\n      const features = groupedFeatures.get(store);\n      if (features === undefined && exclusive === true) {\n        this.unselectAllFeaturesFromStore(store);\n      } else if (features === undefined && exclusive === false) {\n        // Do nothing\n      } else {\n        this.selectFeaturesFromStore(store, features, exclusive, reverse);\n      }\n    });\n  }\n\n  /**\n   * Select features in store\n   * @param store: Feature store\n   * @param features Features\n   */\n  private selectFeaturesFromStore(\n    store: FeatureStore,\n    features: Feature[],\n    exclusive: boolean,\n    reverse: boolean\n  ) {\n    if (reverse === true) {\n      store.state.reverseMany(features, ['selected']);\n    } else {\n      store.state.updateMany(features, { selected: true }, exclusive);\n    }\n  }\n\n  /**\n   * Unselect all features from store\n   * @param store: Feature store\n   */\n  private unselectAllFeaturesFromStore(store: FeatureStore) {\n    store.state.updateAll({ selected: false });\n  }\n\n  /**\n   * This method returns a store -> features mapping from a list\n   * of OL selected features. OL features keep a reference to the store\n   * they are from.\n   * @param olFeatures: OL feature objects\n   * @returns Store -> features mapping\n   */\n  private groupFeaturesByStore(\n    olFeatures: OlFeature<OlGeometry>[]\n  ): Map<FeatureStore, Feature[]> {\n    const groupedFeatures = new Map<FeatureStore, Feature[]>();\n    if (olFeatures === null || olFeatures === undefined) {\n      return groupedFeatures;\n    }\n\n    olFeatures.forEach((olFeature: OlFeature<OlGeometry>) => {\n      const store = olFeature.get('_featureStore');\n      if (store === undefined) {\n        return;\n      }\n\n      let features = groupedFeatures.get(store);\n      if (features === undefined) {\n        features = [];\n        groupedFeatures.set(store, features);\n      }\n\n      const feature = store.get(olFeature.getId());\n      if (feature !== undefined) {\n        features.push(feature);\n      }\n    });\n\n    return groupedFeatures;\n  }\n\n  /**\n   * Create an overlay store that'll contain the selected features.\n   * @returns Overlay store\n   */\n  private createOverlayStore(): FeatureStore {\n    const overlayLayer = this.options.layer\n      ? this.options.layer\n      : this.createOverlayLayer();\n    return new FeatureStore([], { map: this.map }).bindLayer(overlayLayer);\n  }\n\n  /**\n   * Create an overlay store that'll contain the selected features.\n   * @returns Overlay layer\n   */\n  private createOverlayLayer(): VectorLayer {\n    return new VectorLayer({\n      zIndex: 300,\n      source: new FeatureDataSource(),\n      style: undefined,\n      showInLayerList: false,\n      exportable: false,\n      browsable: false\n    });\n  }\n\n  /**\n   * Add the overlay store's layer to the map to display the selected\n   * features.\n   */\n  private addOverlayLayer() {\n    const layer = this.overlayStore.layer;\n    if (!this.map.layerController.getById(layer.id)) {\n      this.map.layerController.add(layer);\n    }\n  }\n\n  /**\n   * Remove the overlay layer from the map\n   */\n  private removeOverlayLayer() {\n    this.overlayStore.source.ol.clear();\n    this.map.layerController.remove(this.overlayStore.layer);\n  }\n}\n","import { FeatureStore } from './store';\nimport { FeatureStoreLoadingStrategy } from './strategies/loading';\nimport { FeatureStoreSelectionStrategy } from './strategies/selection';\n\n/**\n * Try to add a loading strategy to a store and activate it.\n * If no strategy is given to that function, a basic one will be created.\n * @param store The store to bind the loading strategy\n * @param strategy An optional loading strategy\n */\nexport function tryAddLoadingStrategy(\n  store: FeatureStore,\n  strategy?: FeatureStoreLoadingStrategy\n) {\n  if (store.getStrategyOfType(FeatureStoreLoadingStrategy) !== undefined) {\n    store.activateStrategyOfType(FeatureStoreLoadingStrategy);\n    return;\n  }\n\n  strategy = strategy ? strategy : new FeatureStoreLoadingStrategy({});\n  store.addStrategy(strategy);\n  strategy.activate();\n}\n\n/**\n * Try to add a selection strategy to a store and activate it.\n * If no strategy is given to that function, a basic one will be created.\n * @param store The store to bind the selection strategy\n * @param [strategy] An optional selection strategy\n */\nexport function tryAddSelectionStrategy(\n  store: FeatureStore,\n  strategy?: FeatureStoreSelectionStrategy\n) {\n  if (store.getStrategyOfType(FeatureStoreSelectionStrategy) !== undefined) {\n    store.activateStrategyOfType(FeatureStoreSelectionStrategy);\n    return;\n  }\n  strategy = strategy\n    ? strategy\n    : new FeatureStoreSelectionStrategy({\n        map: store.map\n      });\n  store.addStrategy(strategy);\n  strategy.activate();\n}\n","import { asArray as ColorAsArray } from 'ol/color';\nimport * as olstyle from 'ol/style';\n\n/**\n * Create a marker style for points\n * @returns Style\n */\nexport function createOverlayMarkerStyle({\n  text,\n  opacity = 1,\n  markerColor = [0, 161, 222],\n  markerOutlineColor = [255, 255, 255]\n}: {\n  text?: string;\n  opacity?: number;\n  markerColor?: string | number[];\n  markerOutlineColor?: string | number[];\n} = {}): olstyle.Style {\n  const newColor = ColorAsArray(markerColor).slice(0);\n  const newOutlineColor = ColorAsArray(markerOutlineColor).slice(0);\n\n  if (\n    newColor.length === 4 &&\n    (typeof markerColor !== 'string' ||\n      /^#[0-9A-F]{8}$/i.test(markerColor as string))\n  ) {\n    opacity = newColor[3];\n  }\n\n  const svgIconColor = `\"rgba(${newColor[0]},${newColor[1]},${newColor[2]},${opacity})\"`;\n  const svgOutlineColor = `\"rgb(${newOutlineColor[0]},${newOutlineColor[1]},${newOutlineColor[2]})\"`;\n  const svg =\n    'data:image/svg+xml;utf8,<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" height=\"36\" width=\"36\" viewBox=\"0 0 36 36\">' +\n    '<path fill=' +\n    svgIconColor +\n    ' stroke=' +\n    svgOutlineColor +\n    ` stroke-width=\"2\" d=\"M 17.692635,32.565644 C 15.71852,30.330584 13.290925,27.058065 11.6766,24.455732 9.3398623,20.688851 7.8905694,17.205334 7.6297492,14.728733 7.5616025,14.081649 7.5739557,12.528552 7.6513363,12.014724 8.1013861,9.0262716 9.8047068,6.3655569 12.310675,4.7364878 c 1.113691,-0.7239832 2.508083,-1.2834131 3.776687,-1.5152052 0.242945,-0.044389 0.451656,-0.09393 0.463804,-0.1100911 0.01215,-0.016161 0.638282,-0.025502 1.391411,-0.02076 1.088235,0.00685 1.450932,0.024316 1.766871,0.085071 2.650763,0.5097353 4.947142,1.8701891 6.498786,3.8501033 0.628018,0.8013587 1.297046,2.0200608 1.640967,2.9891872 0.191065,0.538399 0.427644,1.447408 0.477391,1.834287 0.0164,0.127546 0.0434,0.231902 0.06,0.231902 0.0166,0 0.03122,0.626135 0.03249,1.391411 0.0013,0.765276 -0.011,1.391411 -0.02726,1.391411 -0.01626,0 -0.05449,0.154049 -0.08495,0.342331 -0.08815,0.544879 -0.387235,1.721449 -0.604837,2.379406 -1.209421,3.656888 -4.014463,8.349762 -7.849521,13.132357 -0.790496,0.985807 -1.795217,2.167992 -1.842543,2.167992 -0.01896,0 -0.161766,-0.144111 -0.317336,-0.320246 z m 1.066937,-15.36525 c 0.133519,-0.02121 0.248766,-0.05657 0.256105,-0.07859 0.0073,-0.02202 0.04918,-0.03066 0.09298,-0.0192 0.0438,0.01145 0.107628,-0.0072 0.141834,-0.04137 0.03421,-0.03421 0.08456,-0.05474 0.111888,-0.04563 0.02733,0.0091 0.07703,-0.01077 0.110429,-0.04417 0.03341,-0.03341 0.08416,-0.05293 0.112796,-0.04338 0.02863,0.0095 0.08974,-0.01867 0.135802,-0.06271 0.04606,-0.04403 0.111902,-0.08625 0.146319,-0.09381 0.204084,-0.04483 0.762371,-0.519108 1.079463,-0.917027 0.26749,-0.335672 0.570987,-0.878795 0.529019,-0.946701 -0.01496,-0.0242 -0.0067,-0.044 0.01835,-0.044 0.05645,0 0.196809,-0.467982 0.158801,-0.529481 -0.01521,-0.02461 -0.0043,-0.04475 0.02427,-0.04475 0.03157,0 0.04365,-0.04329 0.03082,-0.11043 -0.01161,-0.06074 -0.0066,-0.110429 0.01124,-0.110429 0.01779,0 0.03235,-0.258405 0.03235,-0.574233 0,-0.315829 -0.01545,-0.574234 -0.03434,-0.574234 -0.01889,0 -0.02437,-0.03811 -0.01219,-0.08469 0.04412,-0.168712 -0.336329,-1.152668 -0.481536,-1.245401 -0.02327,-0.01486 -0.04022,-0.03992 -0.03765,-0.05568 0.01222,-0.07498 -0.156557,-0.318365 -0.406379,-0.586027 -0.295921,-0.317054 -0.773059,-0.690104 -0.83427,-0.652274 -0.0206,0.01273 -0.03745,0.0024 -0.03745,-0.02289 0,-0.06107 -0.433076,-0.2789369 -0.487546,-0.245273 -0.02338,0.01445 -0.04251,0.0068 -0.04251,-0.01695 0,-0.056281 -0.393995,-0.1865457 -0.613804,-0.2029397 -0.0943,-0.00703 -0.188579,-0.023183 -0.209503,-0.035888 -0.02092,-0.012705 -0.276571,-0.023337 -0.568105,-0.023627 -0.534044,-5.301e-4 -1.12638,0.091025 -1.12638,0.1741017 0,0.023781 -0.01713,0.032648 -0.03808,0.019705 -0.05054,-0.031232 -0.403641,0.1088602 -0.403641,0.1601422 0,0.02204 -0.01988,0.02779 -0.04417,0.01278 -0.0243,-0.01501 -0.04417,-0.0051 -0.04417,0.02209 0,0.02716 -0.01988,0.0371 -0.04417,0.02209 -0.0243,-0.01501 -0.04417,-0.0051 -0.04417,0.02209 0,0.02716 -0.01915,0.03755 -0.04256,0.02308 -0.02341,-0.01447 -0.08138,0.01252 -0.128834,0.05997 -0.04745,0.04745 -0.0974,0.07515 -0.111001,0.06155 -0.0136,-0.0136 -0.03722,0.0078 -0.05248,0.0476 -0.01526,0.03978 -0.0411,0.06408 -0.0574,0.054 -0.03277,-0.02025 -0.462299,0.323995 -0.491977,0.394291 -0.01026,0.02429 -0.07454,0.0912 -0.142856,0.148686 -0.248033,0.208705 -0.730279,0.974169 -0.672565,1.067553 0.0145,0.02346 0.0059,0.04266 -0.01914,0.04266 -0.05907,0 -0.241471,0.599428 -0.208527,0.685278 0.01385,0.0361 0.0044,0.06564 -0.02098,0.06564 -0.02539,0 -0.04169,0.0646 -0.03622,0.143558 0.0055,0.07896 -0.0042,0.213129 -0.02144,0.29816 -0.04741,0.233576 0.0511,1.055502 0.167516,1.397721 0.126048,0.370516 0.310099,0.740163 0.426484,0.856548 0.04776,0.04776 0.07554,0.08684 0.06174,0.08684 -0.0138,0 0.01516,0.05653 0.06436,0.125632 0.131301,0.184396 0.499365,0.587266 0.518785,0.567846 0.0092,-0.0092 0.09821,0.06081 0.197812,0.155562 0.09961,0.09475 0.190589,0.162786 0.202187,0.151188 0.0116,-0.0116 0.05991,0.01774 0.107361,0.06519 0.04745,0.04745 0.105426,0.07444 0.128834,0.05997 0.02341,-0.01447 0.04256,-0.0057 0.04256,0.01958 0,0.06106 0.344664,0.23496 0.399061,0.201341 0.02346,-0.0145 0.04266,-0.0059 0.04266,0.01914 0,0.05907 0.599429,0.241471 0.685279,0.208527 0.0361,-0.01385 0.06564,-0.0065 0.06564,0.01645 0,0.05196 1.079115,0.04833 1.413314,-0.0048 z\"></path>` +\n    '</svg>';\n\n  return new olstyle.Style({\n    image: new olstyle.Icon({\n      src: svg,\n      opacity,\n      anchor: [0.5, 0.92]\n    }),\n    text: new olstyle.Text({\n      text,\n      font: '12px Calibri,sans-serif',\n      fill: new olstyle.Fill({ color: '#000' }),\n      stroke: new olstyle.Stroke({ color: '#fff', width: 3 }),\n      overflow: true\n    })\n  });\n}\n","export enum DirectionsFormat {\n  GeoJSON,\n  JSON\n}\nexport enum SourceDirectionsType {\n  Route = 'route',\n  Trip = 'trip'\n}\n\nexport enum ProposalType {\n  Coord = 'coord',\n  Text = 'text'\n}\n\nexport enum DirectionsType {\n  Stop = 'stop',\n  Route = 'route',\n  Vertex = 'vertex'\n}\n\nexport enum DirectionRelativePositionType {\n  Start = 'start',\n  Intermediate = 'intermediate',\n  End = 'end'\n}\n\nexport enum ManeuverType {\n  Turn = 'turn',\n  NewName = 'new name',\n  Depart = 'depart',\n  Arrive = 'arrive',\n  Merge = 'merge',\n  Ramp = 'ramp',\n  OnRamp = 'on ramp',\n  OffRamp = 'off ramp',\n  Fork = 'fork',\n  EndOfRoad = 'end of road',\n  UseLane = 'use lane',\n  Continue = 'continue',\n  Roundabout = 'roundabout',\n  Rotary = 'rotary',\n  RoundaboutTurn = 'roundabout turn',\n  Notification = 'notification',\n  ExitRoundabout = 'exit roundabout',\n  ExitRotary = 'exit rotary'\n}\n\nexport enum ManeuverModifier {\n  Uturn = 'uturn',\n  SharpRight = 'sharp right',\n  Right = 'right',\n  SlightRight = 'slight right',\n  SharpLeft = 'sharp left',\n  Left = 'left',\n  SlightLeft = 'slight left',\n  Straight = 'straight'\n}\n\nexport enum LaneType {\n  None = 'none',\n  Uturn = 'uturn',\n  SharpRight = 'sharp right',\n  Right = 'right',\n  SlightRight = 'slight right',\n  SharpLeft = 'sharp left',\n  Left = 'left',\n  SlightLeft = 'slight left',\n  Straight = 'straight'\n}\n","import { LanguageService } from '@igo2/core/language';\nimport { NumberUtils, uuid } from '@igo2/utils';\n\nimport olFeature from 'ol/Feature';\nimport { Coordinate } from 'ol/coordinate';\nimport OlGeoJSON from 'ol/format/GeoJSON';\nimport * as olGeom from 'ol/geom';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport * as olProj from 'ol/proj';\nimport * as olStyle from 'ol/style';\n\nimport { TranslateService } from '@ngx-translate/core';\n\nimport { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';\nimport { tryBindStoreLayer } from '../../feature/shared/feature-store.utils';\nimport { FEATURE, FeatureMotion } from '../../feature/shared/feature.enums';\nimport { FeatureGeometry } from '../../feature/shared/feature.interfaces';\nimport { tryAddLoadingStrategy } from '../../feature/shared/strategies.utils';\nimport { FeatureStoreLoadingStrategy } from '../../feature/shared/strategies/loading';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport { createOverlayMarkerStyle } from '../../style/shared/overlay/overlay-marker-style.utils';\nimport {\n  DirectionRelativePositionType,\n  DirectionsType,\n  ManeuverModifier,\n  ManeuverType\n} from './directions.enum';\nimport {\n  Directions,\n  FeatureWithDirections,\n  FeatureWithStop,\n  IgoStep,\n  Stop\n} from './directions.interface';\nimport {\n  RoutesFeatureStore,\n  StepsFeatureStore,\n  StopsFeatureStore,\n  StopsStore\n} from './store';\n\n/**\n * Updates the sorting of the stops in the provided StopsStore based on the specified field and direction.\n *\n * @param {StopsStore} stopsStore - The StopsStore to update the sorting for.\n * @param {'asc' | 'desc'} [direction='asc'] - The direction of sorting ('asc' for ascending, 'desc' for descending).\n * @param {string} [field='position'] - The field to sort the stops by.\n */\nexport function updateStoreSorting(\n  stopsStore: StopsStore,\n  direction: 'asc' | 'desc' = 'asc',\n  field = 'position'\n): void {\n  stopsStore.view.sort({\n    direction,\n    valueAccessor: (entity: Stop) => entity[field]\n  });\n}\n\n/**\n * Computes the relative position of a stop in a list of stops.\n *\n * @param {number} stopIndex - The index of the stop.\n * @param {number} stopListLength - The total number of stops.\n * @return {DirectionRelativePositionType} The relative position of the stop.\n */\nexport function computeRelativePosition(\n  stopIndex: number,\n  stopListLength: number\n): DirectionRelativePositionType {\n  let relativePosition: DirectionRelativePositionType =\n    DirectionRelativePositionType.Intermediate;\n  if (stopIndex === 0) {\n    relativePosition = DirectionRelativePositionType.Start;\n  } else if (stopIndex === stopListLength) {\n    relativePosition = DirectionRelativePositionType.End;\n  }\n  return relativePosition;\n}\n\n/**\n * Computes the position and relative position of stops in the given stopsStore.\n *\n * @param {StopsStore} stopsStore - The store containing the stops.\n */\nexport function computeStopsPosition(\n  deletedStopIndex: number,\n  stopsStore: StopsStore\n): void {\n  for (const stop of stopsStore.all()) {\n    stop.position =\n      stop.position > deletedStopIndex ? (stop.position -= 1) : stop.position;\n    stop.relativePosition = computeRelativePosition(\n      stop.position,\n      stopsStore.all().length - 1\n    );\n  }\n}\n\n/**\n * Adds a stop to the given stopsStore. The stop is always added as the last stop.\n *\n * @param {StopsStore} stopsStore - The store containing the stops.\n * @return {Stop} The newly added stop.\n */\nexport function addStopToStore(stopsStore: StopsStore): Stop {\n  const id: string = uuid();\n  const stops: Stop[] = stopsStore.all();\n  const insertIndex = stops.length;\n\n  for (const stop of stopsStore.all()) {\n    stop.relativePosition = computeRelativePosition(\n      stop.position,\n      stops.length\n    );\n  }\n\n  stopsStore.insert({\n    id,\n    position: insertIndex,\n    relativePosition: computeRelativePosition(insertIndex, stops.length)\n  });\n\n  updateStoreSorting(stopsStore);\n  return stopsStore.get(id);\n}\n\n/**\n * Removes a stop from the given stopsStore and updates the positions of the remaining stops.\n *\n * @param {StopsStore} stopsStore - The store containing the stops.\n * @param {Stop} stop - The stop to be removed.\n */\nexport function removeStopFromStore(stopsStore: StopsStore, stop: Stop): void {\n  stopsStore.delete(stop);\n  computeStopsPosition(stop.position, stopsStore);\n}\n\n/**\n * Create a style for the directions steps, stops and route\n * @param feature OlFeature\n * @returns OL style function\n */\nexport function directionsStyle(\n  feature: olFeature<OlGeometry>\n): olStyle.Style | olStyle.Style[] {\n  const stepStyle = [\n    new olStyle.Style({\n      geometry: feature.getGeometry(),\n      image: new olStyle.Circle({\n        radius: 7,\n        stroke: new olStyle.Stroke({ color: '#FF0000', width: 3 })\n      })\n    })\n  ];\n\n  const stopStyle: olStyle.Style = createOverlayMarkerStyle({\n    text: feature.get('stopText'),\n    opacity: feature.get('stopOpacity'),\n    markerColor: feature.get('stopColor'),\n    markerOutlineColor: [255, 255, 255]\n  });\n\n  const routeStyle: olStyle.Style[] = [\n    new olStyle.Style({\n      stroke: new olStyle.Stroke({\n        color: `rgba(106, 121, 130, ${feature.get('active') ? 0.75 : 0})`,\n        width: 10\n      })\n    }),\n    new olStyle.Style({\n      stroke: new olStyle.Stroke({\n        color: `rgba(79, 169, 221, ${feature.get('active') ? 0.75 : 0})`,\n        width: 6\n      })\n    })\n  ];\n\n  if (feature.get('type') === DirectionsType.Stop) {\n    return stopStyle;\n  }\n  if (feature.get('type') === DirectionsType.Vertex) {\n    return stepStyle;\n  }\n  if (feature.get('type') === DirectionsType.Route) {\n    return routeStyle;\n  }\n}\n\n/**\n * Initializes the stops feature store with the provided language service.\n *\n * @param {StopsFeatureStore} stopsFeatureStore - The stops feature store to initialize.\n * @param {LanguageService} languageService - The language service used for translations.\n */\nexport function initStopsFeatureStore(\n  stopsFeatureStore: StopsFeatureStore,\n  languageService: LanguageService\n): void {\n  const loadingStrategy: FeatureStoreLoadingStrategy =\n    new FeatureStoreLoadingStrategy({\n      motion: FeatureMotion.None\n    });\n\n  const stopsLayer: VectorLayer = new VectorLayer({\n    isIgoInternalLayer: true,\n    id: 'igo-direction-stops-layer',\n    title: languageService.translate.instant('igo.geo.directions.layer.stops'),\n    zIndex: 911,\n    source: new FeatureDataSource(),\n    showInLayerList: true,\n    visible: true,\n    workspace: {\n      enabled: false\n    },\n    linkedLayers: {\n      linkId: 'igo-direction-stops-layer',\n      links: [\n        {\n          syncedDelete: true,\n          linkedIds: ['igo-direction-route-layer'],\n          properties: []\n        }\n      ]\n    },\n    exportable: true,\n    browsable: false,\n    style: directionsStyle\n  });\n  tryBindStoreLayer(stopsFeatureStore, stopsLayer);\n  tryAddLoadingStrategy(stopsFeatureStore, loadingStrategy);\n}\n\n/**\n * Initializes the routes feature store with the provided language service.\n *\n * @param {StopsFeatureStore} routesFeatureStore - The routes feature store to initialize.\n * @param {LanguageService} languageService - The language service used for translations.\n */\nexport function initRoutesFeatureStore(\n  routesFeatureStore: RoutesFeatureStore,\n  languageService: LanguageService\n): void {\n  const loadingStrategy: FeatureStoreLoadingStrategy =\n    new FeatureStoreLoadingStrategy({\n      motion: FeatureMotion.None\n    });\n\n  const routeLayer: VectorLayer = new VectorLayer({\n    isIgoInternalLayer: true,\n    id: 'igo-direction-route-layer',\n    title: languageService.translate.instant('igo.geo.directions.layer.route'),\n    zIndex: 910,\n    source: new FeatureDataSource(),\n    showInLayerList: true,\n    visible: true,\n    workspace: {\n      enabled: false\n    },\n    linkedLayers: {\n      linkId: 'igo-direction-route-layer'\n    },\n    exportable: true,\n    browsable: false,\n    style: directionsStyle\n  });\n  tryBindStoreLayer(routesFeatureStore, routeLayer);\n  tryAddLoadingStrategy(routesFeatureStore, loadingStrategy);\n}\n\n/**\n * Initializes the routes feature store.\n *\n * @param {StopsFeatureStore} stepsFeatureStore - The steps feature store to initialize.\n */\nexport function initStepsFeatureStore(stepsFeatureStore: StepsFeatureStore) {\n  const loadingStrategy: FeatureStoreLoadingStrategy =\n    new FeatureStoreLoadingStrategy({\n      motion: FeatureMotion.None\n    });\n\n  const stepLayer: VectorLayer = new VectorLayer({\n    isIgoInternalLayer: true,\n    id: 'igo-direction-step-layer',\n    title: '',\n    zIndex: 910,\n    source: new FeatureDataSource(),\n    showInLayerList: false,\n    visible: true,\n    workspace: {\n      enabled: false\n    },\n    linkedLayers: {\n      linkId: 'igo-direction-route-layer'\n    },\n    exportable: false,\n    browsable: false,\n    style: directionsStyle\n  });\n  tryBindStoreLayer(stepsFeatureStore, stepLayer);\n  tryAddLoadingStrategy(stepsFeatureStore, loadingStrategy);\n}\n\n/**\n * Adds a stop to the stopsFeatureStore.\n *\n * @param {Stop} stop - The stop to be added.\n * @param {StopsFeatureStore} stopsFeatureStore - The stopsFeatureStore to add the stop to.\n * @param {string} projection - The projection of the stop coordinates.\n * @param {LanguageService} languageService - The language service for translating stop text.\n */\nexport function addStopToStopsFeatureStore(\n  stop: Stop,\n  stopsFeatureStore: StopsFeatureStore,\n  projection: string,\n  languageService: LanguageService\n): void {\n  let stopColor: string;\n  let stopText: string;\n\n  switch (stop.relativePosition) {\n    case DirectionRelativePositionType.Start:\n      stopColor = '#008000';\n      stopText = languageService.translate.instant(\n        'igo.geo.directions.input.start'\n      );\n      break;\n    case DirectionRelativePositionType.End:\n      stopColor = '#f64139';\n      stopText = languageService.translate.instant(\n        'igo.geo.directions.input.end'\n      );\n      break;\n    default:\n      stopColor = '#ffd700';\n      stopText =\n        languageService.translate.instant(\n          'igo.geo.directions.input.intermediate'\n        ) +\n        ' #' +\n        stop.position;\n      break;\n  }\n\n  const point: olGeom.Point = new olGeom.Point(\n    olProj.transform(\n      stop.coordinates,\n      projection,\n      stopsFeatureStore.map.projectionCode\n    )\n  );\n\n  const geojsonGeom: FeatureGeometry = new OlGeoJSON().writeGeometryObject(\n    point,\n    {\n      featureProjection: stopsFeatureStore.map.projectionCode,\n      dataProjection: stopsFeatureStore.map.projectionCode\n    }\n  ) as FeatureGeometry;\n\n  const previousStop: FeatureWithStop = stopsFeatureStore.get(stop.id);\n  const previousStopRevision: number = previousStop\n    ? previousStop.meta.revision\n    : 0;\n\n  const stopFeatureStore: FeatureWithStop = {\n    type: FEATURE,\n    geometry: geojsonGeom,\n    projection: stopsFeatureStore.map.projectionCode,\n    properties: {\n      id: stop.id,\n      type: DirectionsType.Stop,\n      stopText,\n      stopColor,\n      stopOpacity: 1,\n      stop\n    },\n    meta: {\n      id: stop.id,\n      revision: previousStopRevision + 1\n    },\n    ol: new olFeature({ point })\n  };\n  stopsFeatureStore.update(stopFeatureStore);\n}\n\n/**\n * Adds a route to the routes feature store.\n *\n * @param {RoutesFeatureStore} routesFeatureStore - The routes feature store to add the route to.\n * @param {Directions} directions - The directions object containing the geometry and other information.\n * @param {string} projection - The projection of the geometry coordinates.\n * @param {boolean} [active=false] - Indicates whether the direction is active or not. Default is false.\n */\nexport function addRouteToRoutesFeatureStore(\n  routesFeatureStore: RoutesFeatureStore,\n  directions: Directions,\n  projection: string,\n  active = false\n): void {\n  const coordinate: Coordinate = directions.geometry.coordinates;\n  const linestring4326: olGeom.LineString = new olGeom.LineString(coordinate);\n  const linestringStore: olGeom.LineString = linestring4326.transform(\n    projection,\n    routesFeatureStore.map.projectionCode\n  );\n\n  const geojsonGeom: FeatureGeometry = new OlGeoJSON().writeGeometryObject(\n    linestringStore,\n    {\n      featureProjection: routesFeatureStore.map.projectionCode,\n      dataProjection: routesFeatureStore.map.projectionCode\n    }\n  ) as FeatureGeometry;\n\n  const previousRoute: FeatureWithDirections = routesFeatureStore.get(\n    directions.id\n  );\n  const previousRouteRevision: number = previousRoute\n    ? previousRoute.meta.revision\n    : 0;\n\n  const routeFeatureStore: FeatureWithDirections = {\n    type: FEATURE,\n    geometry: geojsonGeom,\n    projection: routesFeatureStore.map.projectionCode,\n    properties: {\n      id: directions.id,\n      type: DirectionsType.Route,\n      active,\n      directions\n    },\n    meta: {\n      id: directions.id,\n      revision: previousRouteRevision + 1\n    },\n    ol: new olFeature({ linestringStore })\n  };\n  routesFeatureStore.update(routeFeatureStore);\n}\n\n/**\n * Formats the given distance in meters to a human-readable string.\n *\n * @param {number} meters - The distance in meters to be formatted.\n * @return {string | undefined} The formatted distance string.\n */\nexport function formatDistance(meters: number): string {\n  if (meters === 0) {\n    return undefined;\n  }\n\n  if (meters < 1000) {\n    return `${Math.round(meters)} m`;\n  }\n\n  const kilometers: number = meters / 1000;\n  const roundToDecimal: 0 | 1 = kilometers >= 10 ? 1 : 0;\n\n  return `${NumberUtils.roundToNDecimal(kilometers, roundToDecimal)} km`.replace(\n    '.',\n    ','\n  );\n}\n\n/**\n * Formats the given duration in seconds to a human-readable string.\n *\n * @param {number} seconds - The duration in seconds to be formatted.\n * @return {string} The formatted duration string.\n */\nexport function formatDuration(seconds: number): string {\n  const hours: number = Math.floor(seconds / 3600);\n  const minutes: number = Math.floor((seconds % 3600) / 60);\n\n  if (hours) {\n    return `${hours} h ${minutes} min`;\n  }\n\n  if (minutes) {\n    return `${minutes} min`;\n  }\n\n  return '< 1 min';\n}\n\nexport function formatStep(\n  step: IgoStep,\n  languageService: LanguageService,\n  lastStep = false\n) {\n  const maneuverType: ManeuverType = step.maneuver.type;\n  const maneuverModifier: ManeuverModifier = step.maneuver.modifier;\n  const name: string = step.name;\n  const maneuverBearingAfter: number = step.maneuver.bearing_after;\n\n  const translate: TranslateService = languageService.translate;\n  const translatedManeuverBearingAfter: string = translateManeuverBearing(\n    maneuverBearingAfter,\n    languageService\n  );\n  const translatedManeuverModifier: string = translateManeuverModifier(\n    maneuverModifier,\n    languageService\n  );\n\n  let iconName = 'straight'; // arrow point up by default\n  let instruction = '';\n\n  if (maneuverType === ManeuverType.Turn) {\n    if (\n      maneuverModifier === ManeuverModifier.Uturn ||\n      maneuverModifier === ManeuverModifier.Straight\n    ) {\n      instruction = translate.instant(\n        `igo.geo.directions.results.maneuverType.turn.${maneuverModifier}`,\n        {\n          maneuverModifier: translatedManeuverModifier,\n          name\n        }\n      );\n      if (maneuverModifier === ManeuverModifier.Uturn) {\n        iconName = 'u_turn_left';\n      }\n    } else {\n      instruction = translate.instant(\n        'igo.geo.directions.results.maneuverType.turn.else',\n        {\n          maneuverModifier: translatedManeuverModifier,\n          name\n        }\n      );\n\n      if (maneuverModifier === ManeuverModifier.SlightRight) {\n        iconName = 'turn_slight_right';\n      } else if (\n        maneuverModifier === ManeuverModifier.Right ||\n        maneuverModifier === ManeuverModifier.SharpRight\n      ) {\n        iconName = 'turn_right';\n      } else if (\n        maneuverModifier === ManeuverModifier.Left ||\n        maneuverModifier === ManeuverModifier.SharpLeft\n      ) {\n        iconName = 'turn_left';\n      } else if (maneuverModifier === ManeuverModifier.SlightLeft) {\n        iconName = 'turn_slight_left';\n      }\n    }\n  } else if (maneuverType === ManeuverType.NewName) {\n    instruction = translate.instant(\n      `igo.geo.directions.results.maneuverType.new name`,\n      {\n        name,\n        maneuverBearing: translatedManeuverBearingAfter\n      }\n    );\n  } else if (maneuverType === ManeuverType.Depart) {\n    iconName = 'directions';\n    instruction = translate.instant(\n      `igo.geo.directions.results.maneuverType.depart`,\n      {\n        name,\n        maneuverBearing: translatedManeuverBearingAfter\n      }\n    );\n  } else if (maneuverType === ManeuverType.Arrive) {\n    iconName = 'sports_score';\n    instruction = translate.instant(\n      `igo.geo.directions.results.maneuverType.arrive.${lastStep ? 'lastStep' : 'intermediate'}`,\n      {\n        name\n      }\n    );\n  } else if (maneuverType === ManeuverType.Merge) {\n    instruction = translate.instant(\n      'igo.geo.directions.results.maneuverType.merge',\n      {\n        name\n      }\n    );\n    iconName = 'merge';\n  } else if (\n    maneuverType === ManeuverType.OnRamp ||\n    maneuverType === ManeuverType.OffRamp\n  ) {\n    instruction = translate.instant(\n      `igo.geo.directions.results.maneuverType.${maneuverType}`,\n      {\n        maneuverModifier: translatedManeuverModifier\n      }\n    );\n  } else if (maneuverType === ManeuverType.Fork) {\n    const directionKey: string =\n      maneuverModifier.search('left') >= 0 ? 'left' : 'right';\n    iconName =\n      directionKey === 'left' ? 'turn_slight_left' : 'turn_slight_right';\n    instruction = translate.instant(\n      `igo.geo.directions.results.maneuverType.fork.${directionKey}`,\n      {\n        name\n      }\n    );\n  } else if (\n    maneuverType === ManeuverType.EndOfRoad ||\n    maneuverType === ManeuverType.UseLane ||\n    maneuverType === ManeuverType.Continue\n  ) {\n    if (maneuverType === ManeuverType.Continue) {\n      if (maneuverModifier === ManeuverModifier.Uturn) {\n        iconName = 'u_turn_left';\n        instruction = translate.instant(\n          `igo.geo.directions.results.maneuverType.turn.${maneuverModifier}`,\n          {\n            maneuverModifier: translatedManeuverModifier,\n            name\n          }\n        );\n      } else {\n        instruction = translate.instant(\n          `igo.geo.directions.results.maneuverType.${maneuverType}`,\n          {\n            maneuverModifier: translatedManeuverModifier,\n            name\n          }\n        );\n      }\n    } else {\n      if (\n        maneuverModifier === ManeuverModifier.SharpRight ||\n        maneuverModifier === ManeuverModifier.Right\n      ) {\n        iconName = 'turn_right';\n      } else if (\n        maneuverModifier === ManeuverModifier.SharpLeft ||\n        maneuverModifier === ManeuverModifier.Left\n      ) {\n        iconName = 'turn_left';\n      } else if (maneuverModifier === ManeuverModifier.SlightRight) {\n        iconName = 'turn_slight_right';\n      } else if (maneuverModifier === ManeuverModifier.SlightLeft) {\n        iconName = 'turn_slight_left';\n      }\n      instruction = translate.instant(\n        `igo.geo.directions.results.maneuverType.${maneuverType}`,\n        {\n          maneuverModifier: translatedManeuverModifier,\n          name\n        }\n      );\n    }\n  } else if (\n    maneuverType === ManeuverType.Roundabout ||\n    maneuverType === ManeuverType.Rotary ||\n    maneuverType === ManeuverType.RoundaboutTurn ||\n    maneuverType === ManeuverType.ExitRoundabout\n  ) {\n    const roundaboutKey = maneuverType.replace('roundabout ', '');\n    instruction = translate.instant(\n      `igo.geo.directions.results.maneuverType.${roundaboutKey}`,\n      {\n        name\n      }\n    );\n    iconName = 'donut_large';\n  } else if (maneuverType === ManeuverType.Notification) {\n    instruction = translate.instant(\n      'igo.geo.directions.results.maneuverType.notification'\n    );\n  }\n\n  return { instruction, iconName };\n}\n\n/**\n * Translates a maneuver modifier into a human-readable string using the provided language service.\n *\n * @param {ManeuverModifier} maneuverModifier - The maneuver modifier to be translated.\n * @param {LanguageService} languageService - The language service used for translation.\n * @return {string | undefined} The translated maneuver modifier string, or undefined if the modifier is falsy.\n */\nexport function translateManeuverModifier(\n  maneuverModifier: ManeuverModifier,\n  languageService: LanguageService\n): string {\n  const translate = languageService.translate;\n  return maneuverModifier\n    ? translate.instant(\n        `igo.geo.directions.results.maneuverModifier.${maneuverModifier}`\n      )\n    : undefined;\n}\n\n/**\n * Translates the given bearing value into a human-readable direction using the provided language service.\n *\n * @param {number} bearing - The bearing value to be translated.\n * @param {LanguageService} languageService - The language service used for translation.\n * @return {string} The translated direction corresponding to the given bearing value.\n */\nexport function translateManeuverBearing(\n  bearing: number,\n  languageService: LanguageService\n): string {\n  const translate: TranslateService = languageService.translate;\n  const directions: string[] = ['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'];\n\n  const directionIndex: number = Math.round(bearing / 45) % 8;\n\n  return translate.instant(\n    `igo.geo.directions.results.direction.${directions[directionIndex]}`\n  );\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { ActivityService } from '@igo2/core/activity';\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { SubjectStatus } from '@igo2/utils';\n\nimport { Position } from 'geojson';\nimport html2canvas from 'html2canvas';\nimport jsPDF from 'jspdf';\nimport 'jspdf-autotable';\nimport { UserOptions } from 'jspdf-autotable';\nimport moment from 'moment';\nimport { Observable, Subject } from 'rxjs';\n\nimport { IgoMap } from '../../map/shared/map';\nimport { PrintService } from '../../print/shared/print.service';\nimport { DirectionsSource } from '../directions-sources/directions-source';\nimport { DirectionOptions, Directions } from '../shared/directions.interface';\nimport { DirectionsSourceService } from './directions-source.service';\nimport { FormattedStep, IgoStep } from './directions.interface';\nimport { formatDistance, formatDuration, formatStep } from './directions.utils';\n\n@Injectable()\nexport class DirectionsService {\n  constructor(\n    private directionsSourceService: DirectionsSourceService,\n    private configService: ConfigService,\n    private languageService: LanguageService,\n    private printService: PrintService,\n    @Inject(DOCUMENT) private document: Document,\n    private activityService: ActivityService\n  ) {}\n\n  /**\n   * Routes the given coordinates using the specified directions source and options.\n   *\n   * @param {DirectionsSource} source - The directions source to use for routing.\n   * @param {Position[]} coordinates - The array of coordinates to route.\n   * @param {DirectionOptions} [directionsOptions={}] - The optional direction options.\n   * @return {Observable<Directions[]>} An observable that emits an array of directions.\n   */\n  route(\n    coordinates: Position[],\n    directionsOptions: DirectionOptions = {}\n  ): Observable<Directions[]> {\n    if (coordinates.length === 0) {\n      return;\n    }\n    const source: DirectionsSource = this.directionsSourceService.sources[0];\n    const request = source.route(coordinates, directionsOptions);\n    return request;\n  }\n\n  /**\n   * Downloads directions for a given map and directions object.\n   *\n   * @param {IgoMap} map - The map object to download directions for.\n   * @param {Directions} directions - The directions object containing the route information.\n   * @return {Observable<SubjectStatus>} An observable that emits the status of the download process.\n   */\n  downloadDirections(\n    map: IgoMap,\n    directions: Directions\n  ): Observable<SubjectStatus> {\n    const activityId: string = this.activityService.register();\n    const status$: Subject<SubjectStatus> = new Subject<SubjectStatus>();\n\n    const doc: jsPDF = new jsPDF({\n      orientation: 'p',\n      format: 'letter',\n      unit: 'mm' // default\n    });\n\n    const pageSize = doc.internal.pageSize;\n\n    const margins: [number, number, number, number] = [30, 10, 20, 10];\n\n    const zoneWidth: number = pageSize.getWidth() - margins[3] - margins[1];\n    const zoneHeight: number = pageSize.getHeight() - margins[0] - margins[2];\n    const imageDimensions: [number, number] = [zoneWidth, zoneHeight];\n\n    const distance: string = formatDistance(directions.distance);\n    const duration: string = formatDuration(directions.duration);\n\n    const title: string =\n      distance && duration\n        ? `${directions.title} (${distance} - ${duration})`\n        : directions.title;\n\n    doc.text(title, pageSize.getWidth() / 2, 25, {\n      align: 'center'\n    });\n\n    const resolution = 96; // Default is 96\n    this.printService\n      .addMap(doc, map, resolution, imageDimensions, margins)\n      .subscribe(async (status: SubjectStatus) => {\n        if (status === SubjectStatus.Done) {\n          await this.addInstructions(doc, directions, title);\n          this.setPageHeaderFooter(doc);\n          await doc.save(`${title}.pdf`, { returnPromise: true });\n        }\n\n        this.activityService.unregister(activityId);\n        status$.next(status);\n      });\n\n    return status$;\n  }\n\n  /**\n   * Generates an HTML table element with directions steps.\n   *\n   * @param {Directions} directions - The directions object containing the steps.\n   * @return {Promise<HTMLTableElement>} - A promise that resolves to the generated HTML table element.\n   */\n  private async setHTMLTableDirections(\n    directions: Directions\n  ): Promise<HTMLTableElement> {\n    const steps = await this.directionsSteps(directions);\n    const table: HTMLTableElement = document.createElement('table');\n    const tblBody: HTMLTableSectionElement = document.createElement('tbody');\n\n    for (const step of steps) {\n      const row: HTMLTableRowElement = document.createElement('tr');\n\n      // icon\n      const cellIcon: HTMLTableCellElement = document.createElement('td');\n      const iconElement: HTMLImageElement = document.createElement('img');\n      iconElement.style.verticalAlign = 'middle';\n      iconElement.src = step.icon;\n      cellIcon.appendChild(iconElement);\n      row.append(cellIcon);\n\n      // instruction\n      const cellText: HTMLTableCellElement = document.createElement('td');\n      const spanInstructionElement: HTMLSpanElement =\n        document.createElement('span');\n      spanInstructionElement.style.verticalAlign = 'middle';\n      spanInstructionElement.innerHTML = step.instruction;\n      cellText.appendChild(spanInstructionElement);\n\n      // distance/duration\n      if (step.distanceDuration) {\n        const spanDistanceElement: HTMLSpanElement =\n          document.createElement('span');\n        spanDistanceElement.style.verticalAlign = 'middle';\n        spanDistanceElement.innerHTML = ' ' + step.distanceDuration;\n        cellText.appendChild(spanDistanceElement);\n      }\n\n      row.append(cellText);\n      tblBody.appendChild(row);\n    }\n    table.appendChild(tblBody);\n    return table;\n  }\n\n  /**\n   * Generates formatted steps for the given directions.\n   *\n   * @param {Directions} directions - The directions object containing the steps.\n   * @return {Promise<{ instruction: string; icon: string; distanceDuration: string }[]>}\n   * A promise that resolves to an array of formatted steps.\n   */\n  private async directionsSteps(\n    directions: Directions\n  ): Promise<\n    { instruction: string; icon: string; distanceDuration: string }[]\n  > {\n    const matListElement: Element = this.document\n      .getElementsByTagName('igo-directions-results')[0]\n      .getElementsByTagName('mat-list')[0];\n    const matListItemElements: HTMLCollectionOf<Element> =\n      matListElement.getElementsByTagName('mat-list-item');\n    // convert icons list to base64\n    const icons: { name: string; icon: string }[] = [];\n    for (const element of Array.from(matListItemElements)) {\n      const iconElement: HTMLElement = element.getElementsByTagName(\n        'mat-icon'\n      )[0] as HTMLElement;\n      const iconName: string = iconElement.innerText;\n      const found: boolean = icons.some((icon) => icon.name === iconName);\n      if (!found) {\n        const iconCanvas: HTMLCanvasElement = await html2canvas(iconElement);\n        icons.push({ name: iconName, icon: iconCanvas.toDataURL() });\n      }\n    }\n\n    const formattedSteps: {\n      instruction: string;\n      icon: string;\n      distanceDuration: string;\n    }[] = [];\n    for (let stepIndex = 0; stepIndex < directions.steps.length; stepIndex++) {\n      const step: IgoStep = directions.steps[stepIndex];\n      const formattedStep: FormattedStep = formatStep(\n        step,\n        this.languageService,\n        stepIndex === directions.steps.length - 1\n      );\n\n      const formattedDistance: string = formatDistance(step.distance);\n      const formattedDuration: string = formatDuration(step.duration);\n\n      if (\n        (formattedDistance && formattedDuration) ||\n        stepIndex === directions.steps.length - 1\n      ) {\n        formattedSteps.push({\n          instruction: `${formattedStep.instruction}`,\n          icon: icons.find((icon) => icon.name === formattedStep.iconName).icon,\n          distanceDuration:\n            formattedDistance && formattedDuration\n              ? `(${formattedDistance} - ${formattedDuration})`\n              : ''\n        });\n      }\n    }\n    return formattedSteps;\n  }\n\n  /**\n   * Adds instructions to the given jsPDF document.\n   *\n   * @param {jsPDF} doc - The jsPDF document to add instructions to.\n   * @param {Directions} directions - The directions object containing the instructions.\n   * @param {string} title - The title of the instructions.\n   * @return {Promise<void>} A promise that resolves when the instructions are added to the document.\n   */\n  private async addInstructions(\n    doc: jsPDF,\n    directions: Directions,\n    title: string\n  ): Promise<void> {\n    doc.addPage();\n    doc.text(title, doc.internal.pageSize.getWidth() / 2, 25, {\n      align: 'center'\n    });\n    const HTMLtable: HTMLTableElement =\n      await this.setHTMLTableDirections(directions);\n    (doc as any).autoTable({\n      html: HTMLtable,\n      startY: 30,\n      margin: { top: 20, bottom: 20 },\n      columnStyles: {\n        0: { cellWidth: 10 }\n      },\n      theme: 'plain',\n      styles: {\n        fontSize: 10\n      },\n      didDrawCell: function (data) {\n        if (data.column.index === 0 && data.cell.section === 'body') {\n          data.row.height = 10;\n          const td: HTMLElement = data.cell.raw as HTMLElement;\n          const img: HTMLImageElement = td.getElementsByTagName('img')[0];\n          doc.addImage(img.src, data.cell.x, data.cell.y, 8, 8);\n        }\n      }\n    } satisfies UserOptions);\n  }\n\n  /**\n   * Sets the header and footer of each page in the given jsPDF document.\n   *\n   * @param {jsPDF} doc - The jsPDF document to modify.\n   */\n  private setPageHeaderFooter(doc: jsPDF): void {\n    const pageCount: number = doc.getNumberOfPages();\n    const dateTime: string = moment(Date.now()).format('YYYY-MM-DD HH:mm');\n\n    const logo: string = this.configService.getConfig('directionsSources.logo')\n      ? this.configService.getConfig('directionsSources.logo')\n      : 'assets/logo.png';\n\n    for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {\n      doc.setPage(pageIndex);\n      doc.setFontSize(8);\n      const pageSize = doc.internal.pageSize;\n      doc.text(dateTime, 10, 10, { baseline: 'top' });\n      doc.addImage(logo, 'PNG', pageSize.getWidth() - 20, 5, 10, 10);\n      doc.text(dateTime, 10, pageSize.getHeight() - 10);\n      doc.text(\n        'Page ' + doc.getCurrentPageInfo().pageNumber + ' / ' + pageCount,\n        pageSize.getWidth() - 20,\n        pageSize.getHeight() - 10\n      );\n    }\n  }\n}\n","import { EntityStore } from '@igo2/common/entity';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { FeatureStore } from '../../feature/shared/store';\nimport {\n  FeatureWithDirections,\n  FeatureWithStep,\n  FeatureWithStop,\n  Stop\n} from './directions.interface';\n\n/**\n * The class is a specialized version of an EntityStore that stores\n * stops.\n */\nexport class StopsStore extends EntityStore<Stop> {\n  public storeInitialized$ = new BehaviorSubject<boolean>(false);\n\n  public clearStops() {\n    this.storeInitialized$.next(false);\n    this.clear();\n  }\n}\n\nexport class StopsFeatureStore extends FeatureStore<FeatureWithStop> {}\nexport class RoutesFeatureStore extends FeatureStore<FeatureWithDirections> {}\nexport class StepsFeatureStore extends FeatureStore<FeatureWithStep> {}\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { Component, Input, Optional } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { RouteService } from '@igo2/core/route';\nimport { Clipboard } from '@igo2/utils';\n\nimport { Coordinate } from 'ol/coordinate';\n\nimport { Subject } from 'rxjs';\n\nimport { roundCoordTo, roundCoordToString } from '../../map/shared/map.utils';\nimport { DirectionsService } from '../shared';\nimport { FeatureWithDirections, IgoStep } from '../shared/directions.interface';\nimport {\n  formatDistance,\n  formatDuration,\n  formatStep\n} from '../shared/directions.utils';\nimport {\n  RoutesFeatureStore,\n  StepsFeatureStore,\n  StopsStore\n} from '../shared/store';\n\n@Component({\n  selector: 'igo-directions-buttons',\n  templateUrl: './directions-buttons.component.html',\n  styleUrls: ['./directions-buttons.component.scss'],\n  standalone: true,\n  imports: [\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    NgIf,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class DirectionsButtonsComponent {\n  @Input({ required: true }) contextUri: string;\n  @Input({ required: true }) zoomOnActiveRoute$ = new Subject<void>();\n  @Input({ required: true }) stopsStore: StopsStore;\n  @Input({ required: true }) routesFeatureStore: RoutesFeatureStore;\n  @Input({ required: true }) stepsFeatureStore: StepsFeatureStore;\n\n  public downloadDirectionsBtnDisabled = false;\n\n  constructor(\n    private languageService: LanguageService,\n    private messageService: MessageService,\n    @Optional() private routeService: RouteService,\n    private directionsService: DirectionsService\n  ) {}\n\n  /**\n   * Returns the active route from the routesFeatureStore.\n   *\n   * @return {FeatureWithDirections | undefined} The active route, or undefined if no active route is found.\n   */\n  get activeRoute(): FeatureWithDirections {\n    return this.routesFeatureStore\n      .all()\n      .find((route) => route.properties.active);\n  }\n\n  /**\n   * Resets the stops in the stopsStore by clearing all the stops.\n   *\n   */\n  resetStops(): void {\n    this.stopsStore.clearStops();\n  }\n\n  /**\n   * Triggers the zoom on the active route.\n   *\n   */\n  zoomOnActiveRoute(): void {\n    this.zoomOnActiveRoute$.next();\n  }\n\n  /**\n   * Copies the directions to the clipboard and displays a success message if the copy is successful.\n   *\n   */\n  copyDirectionsToClipboard(): void {\n    const directions: string = this.directionsToText();\n    const successful: boolean = Clipboard.copy(directions);\n    if (successful) {\n      this.messageService.success(\n        'igo.geo.directions.buttons.message.copyDirections'\n      );\n    }\n  }\n\n  /**\n   * Copies the link to the clipboard and displays a success message if the copy is successful.\n   *\n   */\n  copyLinkToClipboard(): void {\n    const copySuccessful: boolean = Clipboard.copy(this.getLink());\n    if (copySuccessful) {\n      this.messageService.success(\n        'igo.geo.directions.buttons.message.copyLink'\n      );\n    }\n  }\n\n  /**\n   * Downloads the directions.\n   *\n   */\n  downloadDirections(): void {\n    this.stepsFeatureStore.clear();\n    this.downloadDirectionsBtnDisabled = true;\n    this.directionsService\n      .downloadDirections(\n        this.routesFeatureStore.map,\n        this.activeRoute.properties.directions\n      )\n      .subscribe(() => {\n        this.downloadDirectionsBtnDisabled = false;\n      });\n  }\n\n  /**\n   * Generates a text representation of the directions, including summary, stops, URL, and directions.\n   *\n   * @return {string} The directions in text format.\n   */\n  private directionsToText(): string {\n    const indent = '\\t';\n    const newLine = '\\n';\n\n    let summary: string =\n      this.languageService.translate.instant(\n        'igo.geo.directions.directionsText.summary'\n      ) +\n      ':' +\n      newLine +\n      indent +\n      this.activeRoute.properties.directions.title;\n\n    const distance: string = formatDistance(\n      this.activeRoute.properties.directions.distance\n    );\n    const duration: string = formatDuration(\n      this.activeRoute.properties.directions.duration\n    );\n\n    if (distance && duration) {\n      summary += ' (' + distance + ' - ' + duration + ')';\n    }\n\n    summary += newLine + newLine;\n\n    let stops: string =\n      this.languageService.translate.instant(\n        'igo.geo.directions.directionsText.stopList'\n      ) +\n      ':' +\n      newLine;\n\n    let stopNumber = 1;\n    this.stopsStore.view.all().forEach((stop) => {\n      let coords = '';\n      let stopText = '';\n      if (stop.text !== roundCoordToString(stop.coordinates, 6).join(', ')) {\n        stopText = stop.text;\n        coords = ` (${roundCoordToString(stop.coordinates, 6).join(', ')})`;\n      } else {\n        stopText = roundCoordToString(stop.coordinates, 6).join(', ');\n      }\n\n      stops =\n        stops +\n        indent +\n        stopNumber.toLocaleString() +\n        '. ' +\n        stopText +\n        coords +\n        newLine;\n      stopNumber++;\n    });\n    stops += newLine;\n\n    const url: string =\n      this.languageService.translate.instant(\n        'igo.geo.directions.directionsText.link'\n      ) +\n      ':' +\n      newLine +\n      indent +\n      this.getLink() +\n      newLine +\n      newLine;\n\n    let directions: string =\n      this.languageService.translate.instant('igo.geo.directions.directions') +\n      ':' +\n      newLine;\n\n    this.activeRoute.properties.directions.steps.forEach(\n      (step, stepIndex, steps) => {\n        const distance: string = formatDistance(step.distance);\n        const duration: string = formatDuration(step.duration);\n        if ((distance && duration) || stepIndex === steps.length - 1) {\n          const instruction: string = this.getFormattedStepInstruction(\n            step,\n            stepIndex\n          );\n          const formattedDistanceDuration: string =\n            distance && duration ? ` (${distance} - ${duration}) ` : '';\n          directions =\n            directions +\n            indent +\n            '- ' +\n            instruction +\n            formattedDistanceDuration +\n            newLine;\n        }\n      }\n    );\n\n    const directionsBody: string = summary + stops + url + directions;\n\n    return directionsBody;\n  }\n\n  /**\n   * Formats a step.\n   *\n   * @param {IgoStep} step - The step to format.\n   * @param {number} stepIndex - The index of the step in the directions.\n   * @return {string} The formatted instruction for the step.\n   */\n  private getFormattedStepInstruction(\n    step: IgoStep,\n    stepIndex: number\n  ): string {\n    return formatStep(\n      step,\n      this.languageService,\n      stepIndex === this.activeRoute.properties.directions.steps.length - 1\n    ).instruction;\n  }\n\n  /**\n   * Generates a link based on the current route and stops.\n   *\n   * @return {string | undefined} The generated link, or undefined if the route service is not available.\n   */\n  private getLink(): string | undefined {\n    if (!this.routeService) {\n      return;\n    }\n\n    let context = '';\n    if (this.contextUri) {\n      context = `context=${this.contextUri}&`;\n    }\n\n    const routeIndex: number = this.routesFeatureStore\n      .all()\n      .map((direction) => direction.properties.id)\n      .indexOf(this.activeRoute.properties.id);\n    let routingOptions = '';\n    if (routeIndex !== 0) {\n      const routingOptionsKey: string | boolean =\n        this.routeService.options.directionsOptionsKey;\n      routingOptions = `&${routingOptionsKey}=result:${routeIndex}`;\n    }\n    const directionsKey: string | boolean =\n      this.routeService.options.directionsCoordKey;\n    const stopsCoordinates: Coordinate[] = this.stopsStore.view\n      .all()\n      .map((stop) => roundCoordTo(stop.coordinates, 6));\n    let directionsUrl = '';\n    if (stopsCoordinates.length >= 2) {\n      directionsUrl = `${directionsKey}=${stopsCoordinates.join(';')}`;\n      return `${location.origin}${location.pathname}?${context}tool=directions&sidenav=1&${directionsUrl}${routingOptions}`;\n    }\n    return;\n  }\n}\n","<button\n  mat-icon-button\n  [matTooltip]=\"'igo.geo.directions.buttons.resetStops' | translate\"\n  color=\"warn\"\n  (click)=\"resetStops()\"\n>\n  <mat-icon>restart_alt</mat-icon>\n</button>\n<button\n  mat-icon-button\n  [matTooltip]=\"'igo.geo.directions.buttons.zoomOnRoute' | translate\"\n  color=\"primary\"\n  (click)=\"zoomOnActiveRoute()\"\n>\n  <mat-icon>frame_inspect</mat-icon>\n</button>\n<button\n  mat-icon-button\n  [matTooltip]=\"'igo.geo.directions.buttons.copyDirections' | translate\"\n  color=\"primary\"\n  (click)=\"copyDirectionsToClipboard()\"\n>\n  <mat-icon>content_copy</mat-icon>\n</button>\n<button\n  mat-icon-button\n  [matTooltip]=\"'igo.geo.directions.buttons.copyLink' | translate\"\n  color=\"primary\"\n  (click)=\"copyLinkToClipboard()\"\n>\n  <mat-icon>link</mat-icon>\n</button>\n\n<button\n  mat-icon-button\n  [disabled]=\"downloadDirectionsBtnDisabled\"\n  [matTooltip]=\"'igo.geo.directions.buttons.downloadDirections' | translate\"\n  color=\"primary\"\n  (click)=\"downloadDirections()\"\n>\n  <mat-icon>download</mat-icon>\n</button>\n","import {\n  CdkDrag,\n  CdkDragDrop,\n  CdkDragHandle,\n  CdkDropList,\n  moveItemInArray\n} from '@angular/cdk/drag-drop';\nimport { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  MatAutocomplete,\n  MatAutocompleteModule\n} from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOption, MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport * as olObservable from 'ol/Observable';\nimport { Coordinate } from 'ol/coordinate';\nimport { EventsKey } from 'ol/events';\nimport * as olProj from 'ol/proj';\n\nimport pointOnFeature from '@turf/point-on-feature';\nimport { Position } from 'geojson';\n\nimport {\n  Feature,\n  FeatureGeometry\n} from '../../feature/shared/feature.interfaces';\nimport { roundCoordTo, roundCoordToString } from '../../map/shared/map.utils';\nimport { Stop } from '../shared/directions.interface';\nimport {\n  addStopToStore,\n  computeRelativePosition,\n  removeStopFromStore,\n  updateStoreSorting\n} from '../shared/directions.utils';\nimport { StopsFeatureStore, StopsStore } from '../shared/store';\nimport { DirectionRelativePositionType } from './../shared/directions.enum';\n\n@Component({\n  selector: 'igo-directions-inputs',\n  templateUrl: './directions-inputs.component.html',\n  styleUrls: ['./directions-inputs.component.scss'],\n  standalone: true,\n  imports: [\n    CdkDropList,\n    NgFor,\n    CdkDrag,\n    NgClass,\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule,\n    MatAutocompleteModule,\n    MatTooltipModule,\n    NgIf,\n    MatButtonModule,\n    MatIconModule,\n    MatOptionModule,\n    CdkDragHandle,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class DirectionsInputsComponent implements OnDestroy {\n  @Input({ required: true }) stopsStore: StopsStore;\n  @Input({ required: true }) stopsFeatureStore: StopsFeatureStore;\n  @Input({ required: true }) projection: string;\n  @Input() coordRoundedDecimals = 6;\n  @Input() debounce = 200;\n  @Input() length = 2;\n  @Output() stopInputHasFocus: EventEmitter<boolean> =\n    new EventEmitter<boolean>(false);\n\n  private readonly invalidKeys: string[] = ['Control', 'Shift', 'Alt'];\n  private onMapClickEventKeys = [];\n  public stopWithHover: Stop;\n  public stopIsDragged = false;\n\n  constructor(private languageService: LanguageService) {}\n\n  /**\n   * Returns the position property of the geolocationController.\n   *\n   * @return {BehaviorSubject<boolean> | undefined} The position property of\n   * the geolocationController.\n   */\n  get currentPosition(): boolean {\n    return (\n      this.stopsFeatureStore?.map?.geolocationController?.position$?.value\n        ?.position &&\n      this.stopsFeatureStore?.map?.geolocationController?.tracking\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.unlistenMapSingleClick();\n  }\n  /**\n   * Sets the stop with hover to the given stop.\n   *\n   * @param {Stop} stop - The stop to set as the stop with hover.\n   */\n  onStopEnter(stop: Stop): void {\n    this.stopWithHover = stop;\n  }\n  /**\n   * Sets the stop with hover to undefined.\n   *\n   */\n  onStopLeave(): void {\n    this.stopWithHover = undefined;\n  }\n\n  /**\n   * Adds a stop to the stops store.\n   *\n   */\n  addStop(): void {\n    addStopToStore(this.stopsStore);\n  }\n\n  /**\n   * Returns the title of the option if it is an object and has a meta property with a title,\n   * otherwise returns the option itself.\n   *\n   * @param {any} option - The option to get the text from.\n   * @return {string} The title of the option if it is an object and has a meta property with a title,\n   * otherwise returns the option itself.\n   */\n  getOptionText(option: any): string {\n    if (option instanceof Object) {\n      const { meta } = option;\n      return meta?.title || '';\n    }\n    return option;\n  }\n\n  /**\n   * Chooses an option from a MatAutocomplete and updates the stop coordinates and text\n   * based on the selected feature.\n   *\n   * @param {Object} event - The event object containing the MatAutocomplete and MatOption.\n   * @param {MatAutocomplete} event.source - The MatAutocomplete component.\n   * @param {MatOption} event.option - The selected MatOption.\n   * @param {Stop} stop - The stop object to update.\n   */\n  chooseOption(\n    event: { source: MatAutocomplete; option: MatOption },\n    stop: Stop\n  ): void {\n    const feature: Feature = event.option.value;\n    if (feature) {\n      let coords: Coordinate;\n      const geometry: FeatureGeometry = feature.geometry;\n      if (geometry.type === 'Point') {\n        coords = geometry.coordinates as Position;\n      } else {\n        const point = pointOnFeature(feature.geometry);\n        coords = [point.geometry.coordinates[0], point.geometry.coordinates[1]];\n      }\n      if (coords) {\n        stop.coordinates = coords;\n        stop.text = feature.meta.title;\n        this.stopsStore.update(stop);\n      }\n    }\n  }\n\n  /**\n   * Sets the text of a stop based on the value of an input field.\n   *\n   * @param {KeyboardEvent} event - The keyboard event triggered by the input field.\n   * @param {Stop} stop - The stop object to update.\n   */\n  setStopText(event: KeyboardEvent, stop: Stop): void {\n    this.unlistenMapSingleClick();\n    const searchTerm: string = (event.target as HTMLInputElement).value;\n    if (searchTerm.length === 0) {\n      this.clearStopInput(stop);\n    } else if (this.validateSearchTerm(searchTerm)) {\n      stop.text = searchTerm;\n      this.stopsStore.update(stop);\n    }\n  }\n\n  /**\n   * Validates a search term by checking if it contains any invalid characters and if its length is valid.\n   *\n   * @param {string} searchTerm - The search term to be validated.\n   * @return {boolean} Returns true if the search term is valid, false otherwise.\n   */\n  private validateSearchTerm(searchTerm: string): boolean {\n    const charactersAreValid: boolean =\n      this.invalidKeys.indexOf(searchTerm) === -1;\n    const lengthIsValid: boolean =\n      searchTerm.length >= this.length || searchTerm.length === 0;\n    return charactersAreValid && lengthIsValid;\n  }\n\n  /**\n   * Returns the label for the given stop input.\n   *\n   * @param {Stop} stop - The stop containing relativePosition and position.\n   * @return {string} The label for the stop input.\n   */\n  getInputLabel(stop: Stop): string {\n    const { relativePosition, position } = stop;\n    const label: string = relativePosition\n      ? this.languageService.translate.instant(\n          `igo.geo.directions.input.${relativePosition}`\n        )\n      : '';\n    return relativePosition === DirectionRelativePositionType.Intermediate\n      ? `${label} #${position}`\n      : label;\n  }\n\n  /**\n   * Removes a stop from the stops store.\n   *\n   * @param {Stop} stop - The stop object to be removed.\n   */\n  removeStop(stop: Stop): void {\n    removeStopFromStore(this.stopsStore, stop);\n  }\n\n  /**\n   * Clears the specified stop in the stops store.\n   *\n   * @param {Stop} stop - The stop to be cleared.\n   */\n  clearStopInput(stop: Stop): void {\n    this.stopsStore.update({\n      id: stop.id,\n      relativePosition: stop.relativePosition,\n      position: stop.position\n    });\n  }\n\n  /**\n   * Use the current position as a stop.\n   *\n   * @param {Stop} stop - The stop to update with the current position.\n   */\n  useCurrentPosition(stop: Stop): void {\n    this.useCoordinatesAsStop(\n      this.stopsFeatureStore.map.geolocationController.position$.value.position,\n      stop\n    );\n  }\n\n  /**\n   * Moves a stop in the list of stops..\n   *\n   * @param {CdkDragDrop<string[]>} event - The event containing the previous and current index of the dropped stop.\n   */\n  dropStop(event: CdkDragDrop<string[]>): void {\n    this.moveStops(event.previousIndex, event.currentIndex);\n  }\n\n  /**\n   * Moves a stop in the list of stops from one index to another.\n   *\n   * @param {number} fromIndex - The index to move the stop from.\n   * @param {number} toIndex - The index to move the stop to.\n   */\n  private moveStops(fromIndex: number, toIndex: number): void {\n    if (fromIndex !== toIndex) {\n      const stops: Stop[] = [...this.stopsStore.view.all()];\n      moveItemInArray(stops, fromIndex, toIndex);\n      stops.map((stop, stopIndex) => {\n        stop.relativePosition = computeRelativePosition(\n          stopIndex,\n          stops.length - 1\n        );\n        stop.position = stopIndex;\n      });\n      this.stopsStore.updateMany(stops);\n      updateStoreSorting(this.stopsStore);\n    }\n  }\n\n  /**\n   * Handles the focus event on an input field for a stop.\n   *\n   * @param {Stop} stop - The stop that the input field is associated with.\n   */\n  onInputFocus(stop: Stop): void {\n    this.unlistenMapSingleClick();\n    this.stopInputHasFocus.emit(true);\n    this.listenMapSingleClick(stop);\n  }\n\n  /**\n   * Listens for a single click event on the map and uses the coordinates of the click\n   * to set the given stop's coordinates.\n   *\n   * @param {Stop} stop - The stop to update with the clicked coordinates.\n   */\n  private listenMapSingleClick(stop: Stop): void {\n    const key: EventsKey = this.stopsFeatureStore.layer.map.ol.once(\n      'singleclick',\n      (event) => {\n        this.useCoordinatesAsStop(event.coordinate, stop);\n      }\n    );\n    this.onMapClickEventKeys.push(key);\n  }\n\n  /**\n   * Unlistens for map single click events and clears the list of event keys.\n   */\n  private unlistenMapSingleClick(): void {\n    this.onMapClickEventKeys.map((key) => {\n      olObservable.unByKey(key);\n    });\n    this.onMapClickEventKeys = [];\n  }\n\n  /**\n   * Uses the given coordinates to update the given stop.\n   *\n   * @param {Coordinate} coordinates - The coordinates to transform and round.\n   * @param {Stop} stop - The stop to update with the new coordinates and text.\n   */\n  private useCoordinatesAsStop(coordinates: Coordinate, stop: Stop): void {\n    const projectedCoordinates: Coordinate = olProj.transform(\n      coordinates,\n      this.stopsFeatureStore.layer.map.projection,\n      this.projection\n    );\n    const roundedCoordinates: Coordinate = roundCoordTo(\n      projectedCoordinates,\n      this.coordRoundedDecimals\n    );\n\n    stop.text = roundCoordToString(\n      projectedCoordinates,\n      this.coordRoundedDecimals\n    ).join(', ');\n    stop.coordinates = roundedCoordinates;\n    this.stopsStore.update(stop);\n    setTimeout(() => {\n      this.stopInputHasFocus.emit(false);\n    }, 500);\n  }\n}\n","<div cdkDropList class=\"stops-list\" (cdkDropListDropped)=\"dropStop($event)\">\n  <div\n    *ngFor=\"let stop of stopsStore.view.all$() | async; let stopIndex = index\"\n    class=\"stop\"\n  >\n    <div\n      (touchenter)=\"onStopEnter(stop)\"\n      (touchleave)=\"onStopLeave()\"\n      (mouseover)=\"onStopEnter(stop)\"\n      (mouseleave)=\"onStopLeave()\"\n      (cdkDragStarted)=\"stopIsDragged = true\"\n      (cdkDragEnded)=\"stopIsDragged = false\"\n      cdkDragLockAxis=\"y\"\n      class=\"stop-box\"\n      cdkDrag\n    >\n      <div class=\"prefix-actions\">\n        <button\n          class=\"swipe-vertical\"\n          cdkDragHandle\n          mat-icon-button\n          [matTooltip]=\"'igo.geo.directions.input.moveStop' | translate\"\n          color=\"primary\"\n        >\n          <mat-icon>drag_indicator</mat-icon>\n        </button>\n      </div>\n\n      <div class=\"igo-input-container\">\n        <mat-form-field subscriptSizing=\"dynamic\">\n          <mat-label>{{ getInputLabel(stop) }}</mat-label>\n          <input\n            [id]=\"stop.id\"\n            type=\"text\"\n            [placeholder]=\"'igo.geo.directions.input.placeholder' | translate\"\n            matInput\n            (focus)=\"onInputFocus(stop)\"\n            [(ngModel)]=\"stop.text\"\n            (keyup)=\"setStopText($event, stop)\"\n            (keydown.enter)=\"$event.preventDefault()\"\n            [matAutocomplete]=\"auto\"\n          />\n          <button\n            *ngIf=\"currentPosition\"\n            mat-icon-button\n            matPrefix\n            [matTooltip]=\"\n              'igo.geo.directions.input.currentPosition' | translate\n            \"\n            color=\"accent\"\n            (click)=\"useCurrentPosition(stop); $event.stopPropagation()\"\n          >\n            <mat-icon>my_location</mat-icon>\n          </button>\n          <button\n            *ngIf=\"stop.text || stop.coordinates\"\n            mat-icon-button\n            matSuffix\n            [matTooltip]=\"'igo.geo.directions.input.clearStop' | translate\"\n            color=\"warn\"\n            (click)=\"clearStopInput(stop)\"\n          >\n            <mat-icon>close</mat-icon>\n          </button>\n\n          <mat-autocomplete\n            [displayWith]=\"getOptionText\"\n            #auto=\"matAutocomplete\"\n            (optionSelected)=\"chooseOption($event, stop)\"\n          >\n            <mat-optgroup\n              *ngFor=\"let source of stop.searchProposals\"\n              [label]=\"source.source.title\"\n              [disabled]=\"!source.source.enabled\"\n            >\n              <mat-option\n                *ngFor=\"let result of source.results\"\n                [value]=\"result\"\n              >\n                {{ result.meta ? result.meta.title : '' }}\n              </mat-option>\n            </mat-optgroup>\n          </mat-autocomplete>\n        </mat-form-field>\n      </div>\n      <button\n        class=\"delete-button\"\n        *ngIf=\"(stopsStore.count$ | async) > 2\"\n        mat-icon-button\n        [matTooltip]=\"'igo.geo.directions.input.removeStop' | translate\"\n        color=\"warn\"\n        (click)=\"removeStop(stop)\"\n      >\n        <mat-icon>delete</mat-icon>\n      </button>\n    </div>\n  </div>\n  <div class=\"prefix-actions\">\n    <button\n      mat-icon-button\n      [disabled]=\"\n        (stopsStore.count$ | async) !== (stopsFeatureStore.count$ | async) ||\n        stopIsDragged\n      \"\n      [matTooltip]=\"'igo.geo.directions.input.addStop' | translate\"\n      color=\"primary\"\n      (click)=\"addStop()\"\n    >\n      <mat-icon>add_location_alt</mat-icon>\n    </button>\n  </div>\n</div>\n","import { NgClass, NgFor, NgIf } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport olFeature from 'ol/Feature';\nimport { Coordinate } from 'ol/coordinate';\nimport OlGeoJSON from 'ol/format/GeoJSON';\nimport * as olGeom from 'ol/geom';\n\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { FEATURE } from '../../feature/shared/feature.enums';\nimport { FeatureGeometry } from '../../feature/shared/feature.interfaces';\nimport { DirectionsType } from '../shared/directions.enum';\nimport {\n  Directions,\n  FeatureWithDirections,\n  FeatureWithStep,\n  FormattedStep,\n  IgoStep\n} from '../shared/directions.interface';\nimport {\n  formatDistance,\n  formatDuration,\n  formatStep\n} from '../shared/directions.utils';\nimport { RoutesFeatureStore, StepsFeatureStore } from '../shared/store';\n\n@Component({\n  selector: 'igo-directions-results',\n  templateUrl: './directions-results.component.html',\n  styleUrls: ['./directions-results.component.scss'],\n  standalone: true,\n  imports: [\n    NgIf,\n    MatFormFieldModule,\n    MatSelectModule,\n    FormsModule,\n    NgFor,\n    MatOptionModule,\n    MatDividerModule,\n    MatTooltipModule,\n    MatListModule,\n    MatIconModule,\n    NgClass,\n    IgoLanguageModule\n  ]\n})\nexport class DirectionsResultsComponent implements OnInit, OnDestroy {\n  @Input({ required: true }) routesFeatureStore: RoutesFeatureStore;\n  @Input({ required: true }) stepsFeatureStore: StepsFeatureStore;\n\n  public activeRoute: Directions;\n  public routes: Directions[];\n  private entities$$: Subscription;\n\n  constructor(\n    private languageService: LanguageService,\n    private cdRef: ChangeDetectorRef\n  ) {}\n\n  ngOnInit(): void {\n    this.entities$$ = this.routesFeatureStore.entities$\n      .pipe(debounceTime(200))\n      .subscribe((features) => {\n        const activeFeature: FeatureWithDirections = features.find(\n          (entity) => entity.properties.active\n        );\n        this.routes = features.map((entity) => entity.properties.directions);\n        this.activeRoute = activeFeature\n          ? activeFeature.properties.directions\n          : undefined;\n        this.cdRef.detectChanges();\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.entities$$.unsubscribe();\n  }\n\n  /**\n   * Toggles the active state of all features in the routesFeatureStore and updates\n   * the active state of their corresponding features in the layer.\n   */\n  chooseRouteOption(): void {\n    this.routesFeatureStore.entities$.value.map(\n      (feature) => (feature.properties.active = !feature.properties.active)\n    );\n    this.routesFeatureStore.layer.ol\n      .getSource()\n      .getFeatures()\n      .map((feature) => feature.set('active', !feature.get('active')));\n  }\n\n  /**\n   * Formats the given distance in meters.\n   *\n   * @param {number} distance - The distance in meters to be formatted.\n   * @return {string} The formatted distance string.\n   */\n  formatDistance(distance: number): string {\n    return formatDistance(distance);\n  }\n\n  /**\n   * Formats the given duration in seconds.\n   *\n   * @param {number} duration - The duration in seconds to be formatted.\n   * @return {string} The formatted duration string.\n   */\n  formatDuration(duration: number): string {\n    return formatDuration(duration);\n  }\n\n  /**\n   * Returns a formatted string containing the distance and duration of the active route.\n   *\n   * @return {string} The formatted string, or an empty string if either distance or duration is undefined.\n   */\n  getTitleDurationAndDistance(): string {\n    return this.formatDistance(this.activeRoute.distance) &&\n      this.formatDuration(this.activeRoute.duration)\n      ? ' (' +\n          this.formatDistance(this.activeRoute.distance) +\n          ' - ' +\n          this.formatDuration(this.activeRoute.duration) +\n          ')'\n      : '';\n  }\n\n  /**\n   * Formats a step and returns the formatted step.\n   *\n   * @param {IgoStep} step - The step to be formatted.\n   * @param {number} stepIndex - The index of the step in the active route.\n   * @return {FormattedStep} The formatted step.\n   */\n  getFormattedStep(step: IgoStep, stepIndex: number): FormattedStep {\n    return formatStep(\n      step,\n      this.languageService,\n      stepIndex === this.activeRoute.steps.length - 1\n    );\n  }\n\n  /**\n   * Clears the step feature store when the user's mouse leaves the list.\n   */\n  onLeaveList(): void {\n    this.stepsFeatureStore.clear();\n  }\n\n  /**\n   * Shows a step on the map and optionally zooming to the step.\n   *\n   * @param {IgoStep} step - The step to be shown.\n   * @param {boolean} [zoomToExtent=false] - Whether to zoom to the extent of the route segment geometry.\n   */\n  showStep(step: IgoStep, zoomToExtent = false): void {\n    this.showRouteSegmentGeometry(step, zoomToExtent);\n  }\n\n  private showRouteSegmentGeometry(step: IgoStep, zoomToExtent = false) {\n    const coordinates: Coordinate = step.geometry.coordinates;\n    const vertexId = 'vertex';\n    const geometry4326: olGeom.LineString = new olGeom.LineString(coordinates);\n    const geometryMapProjection: olGeom.Geometry = geometry4326.transform(\n      'EPSG:4326',\n      this.stepsFeatureStore.layer.map.projection\n    );\n    const routeSegmentCoordinates: Coordinate[] = (\n      geometryMapProjection as any\n    ).getCoordinates();\n    const lastPointCoordinates: Coordinate = routeSegmentCoordinates[0];\n\n    const lastPointGeometry: olGeom.Point = new olGeom.Point(\n      lastPointCoordinates\n    );\n    const lastPointFeature: olFeature<olGeom.Point> =\n      new olFeature<olGeom.Point>({\n        geometry: lastPointGeometry\n      });\n\n    const geojsonGeom: FeatureGeometry = new OlGeoJSON().writeGeometryObject(\n      lastPointGeometry,\n      {\n        featureProjection: this.stepsFeatureStore.layer.map.projection,\n        dataProjection: this.stepsFeatureStore.layer.map.projection\n      }\n    ) as FeatureGeometry;\n\n    const previousVertex: FeatureWithStep =\n      this.stepsFeatureStore.get(vertexId);\n    const previousVertexRevision: number = previousVertex\n      ? previousVertex.meta.revision\n      : 0;\n\n    const stepFeature: FeatureWithStep = {\n      type: FEATURE,\n      geometry: geojsonGeom,\n      projection: this.stepsFeatureStore.layer.map.projection,\n      properties: {\n        id: vertexId,\n        step,\n        type: DirectionsType.Vertex\n      },\n      meta: {\n        id: vertexId,\n        revision: previousVertexRevision + 1\n      },\n      ol: lastPointFeature\n    };\n    this.stepsFeatureStore.update(stepFeature);\n    if (zoomToExtent) {\n      this.stepsFeatureStore.layer.map.viewController.zoomToExtent(\n        lastPointFeature.getGeometry().getExtent() as [\n          number,\n          number,\n          number,\n          number\n        ]\n      );\n    }\n  }\n}\n","<div class=\"igo-input-container\" *ngIf=\"routes && activeRoute\">\n  <mat-form-field *ngIf=\"routes.length > 1\" [matTooltip]=\"activeRoute.title\">\n    <mat-label>{{\n      'igo.geo.directions.results.routeOptions' | translate\n    }}</mat-label>\n    <mat-select\n      (selectionChange)=\"chooseRouteOption()\"\n      [(ngModel)]=\"activeRoute\"\n    >\n      <mat-option\n        *ngFor=\"let route of routes; let routeIndex = index\"\n        [value]=\"route\"\n      >\n        Option {{ routeIndex + 1 }}: {{ route.title }} ({{\n          formatDistance(route.distance)\n        }}\n        - {{ formatDuration(route.duration) }})\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n\n  <h3 mat-header class=\"igo-route-title\">\n    {{ activeRoute.title }}\n    {{ getTitleDurationAndDistance() }}\n  </h3>\n  <mat-list (mouseleave)=\"onLeaveList()\">\n    <ng-container *ngFor=\"let step of activeRoute.steps; let stepIndex = index\">\n      <mat-list-item\n        *ngIf=\"\n          (formatDistance(step.distance) && formatDuration(step.duration)) ||\n          stepIndex === activeRoute.steps.length - 1\n        \"\n        matListItem\n        class=\"igo-steps step\"\n        (mouseenter)=\"showStep(step)\"\n        (click)=\"showStep(step, true)\"\n      >\n        <mat-icon\n          matListItemIcon\n          [matTooltip]=\"\n            'igo.geo.directions.results.stepTitleTooltip' | translate\n          \"\n          >{{ getFormattedStep(step, stepIndex).iconName }}\n        </mat-icon>\n\n        <span\n          matListItemTitle\n          class=\"step-title\"\n          [matTooltip]=\"getFormattedStep(step, stepIndex).instruction\"\n        >\n          {{ getFormattedStep(step, stepIndex).instruction }}\n        </span>\n        <span\n          *ngIf=\"stepIndex !== activeRoute.steps.length - 1\"\n          matListItemLine\n        >\n          {{ formatDistance(step.distance) }} -\n          {{ formatDuration(step.duration) }}\n        </span>\n      </mat-list-item>\n    </ng-container>\n  </mat-list>\n</div>\n","import { NgClass } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IconSvg, IgoIconComponent } from '@igo2/common/icon';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { AnyLayer } from '../shared/layers/any-layer';\n\nconst EYE_CLOSE_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><title>eye-closed</title><path d=\"M12 17.5C8.2 17.5 4.8 15.4 3.2 12H1C2.7 16.4 7 19.5 12 19.5S21.3 16.4 23 12H20.8C19.2 15.4 15.8 17.5 12 17.5Z\" /></svg>`;\n\n@Component({\n  selector: 'igo-layer-visibility-button',\n  templateUrl: './layer-visibility-button.component.html',\n  styleUrls: ['./layer-visibility-button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgClass,\n    MatBadgeModule,\n    MatButtonModule,\n    MatIconModule,\n    MatTooltipModule,\n    IgoLanguageModule,\n    IgoIconComponent\n  ]\n})\nexport class LayerVisibilityButtonComponent implements OnInit {\n  eyeClosedSvg: IconSvg = {\n    name: 'eye-closed',\n    svg: EYE_CLOSE_SVG\n  };\n  hiddenByParent?: boolean;\n  visible: boolean;\n\n  @Input({ required: true }) layer: AnyLayer;\n  @Input() tooltip: string;\n  @Input() disabled: boolean;\n  @Input() showQueryBadge: boolean;\n  @Input() inResolutionsRange: boolean;\n\n  get defaultTooltip(): string {\n    return !this.layer.isInResolutionsRange\n      ? 'igo.geo.layer.notInResolution'\n      : this.layer.visible && this.disabled\n        ? 'igo.geo.layer.group.hideChildren'\n        : this.layer.visible\n          ? 'igo.geo.layer.hideLayer'\n          : 'igo.geo.layer.showLayer';\n  }\n\n  @Output() visibilityChange = new EventEmitter<Event>();\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    this.layer.parent?.displayed$.subscribe((displayed) => {\n      this.hiddenByParent = !displayed;\n      this.cdr.markForCheck();\n    });\n\n    this.layer.visible$.subscribe((visible) => {\n      this.visible = visible;\n      this.cdr.markForCheck();\n    });\n  }\n\n  toggle(event: Event) {\n    this.layer.visible = !this.layer.visible;\n    this.visibilityChange.emit(event);\n  }\n}\n","<button\n  mat-icon-button\n  [ngClass]=\"{\n    disabled: disabled,\n    'out-of-range': !inResolutionsRange,\n    'visibility-hidden': !visible\n  }\"\n  [color]=\"visible ? 'primary' : 'default'\"\n  tooltip-position=\"below\"\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"tooltip ?? defaultTooltip | translate\"\n  (click)=\"toggle($event)\"\n>\n  <igo-icon\n    matBadge=\"?\"\n    matBadgeColor=\"accent\"\n    matBadgeSize=\"small\"\n    matBadgePosition=\"after\"\n    [matBadgeHidden]=\"!showQueryBadge\"\n    [icon]=\"\n      visible\n        ? hiddenByParent\n          ? eyeClosedSvg\n          : 'visibility'\n        : 'visibility_off'\n    \"\n    iconPositionEnd\n  />\n</button>\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MatCheckboxChange,\n  MatCheckboxModule\n} from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { LayerViewerOptions } from '../layer-viewer/layer-viewer.interface';\nimport { LayerVisibilityButtonComponent } from '../layer-visibility-button';\nimport type { AnyLayer } from '../shared/layers/any-layer';\nimport type { LayerGroup } from '../shared/layers/layer-group';\n\n@Component({\n  selector: 'igo-layer-group',\n  templateUrl: './layer-group.component.html',\n  styleUrls: ['./layer-group.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    AsyncPipe,\n    NgIf,\n    MatButtonModule,\n    MatCheckboxModule,\n    MatTooltipModule,\n    MatIconModule,\n    LayerVisibilityButtonComponent,\n    IgoLanguageModule\n  ]\n})\nexport class LayerGroupComponent implements OnInit {\n  @Input() layer: LayerGroup;\n  @Input() viewerOptions: LayerViewerOptions;\n\n  @Input() selected: boolean;\n  @Input() selectionDisabled: boolean;\n\n  @Output() action = new EventEmitter<AnyLayer>(undefined);\n  @Output() visibilityChange = new EventEmitter<Event>(undefined);\n  @Output() expand = new EventEmitter<void>(undefined);\n  @Output() selectChange = new EventEmitter<boolean>();\n\n  @HostBinding('class.disabled') isDisabled: boolean;\n\n  get title(): string {\n    return this.layer.title;\n  }\n\n  get collapsed(): boolean {\n    return this.layer.collapsed;\n  }\n  set collapsed(value: boolean) {\n    this.layer.collapsed = value;\n  }\n\n  get tooltipMessage(): string {\n    return !this.layer.isInResolutionsRange\n      ? 'igo.geo.layer.notInResolution'\n      : this.layer.visible && this.isDisabled\n        ? 'igo.geo.layer.group.hideChildren'\n        : this.layer.visible\n          ? 'igo.geo.layer.group.hide'\n          : 'igo.geo.layer.group.show';\n  }\n\n  ngOnInit(): void {\n    this.layer.displayed$.subscribe((displayed) => {\n      this.isDisabled = !displayed;\n    });\n  }\n\n  onToggle(): void {\n    this.collapsed = !this.collapsed;\n  }\n\n  toggleVisibility(event: Event): void {\n    event.stopPropagation();\n    this.visibilityChange.emit(event);\n  }\n\n  toggleLayerGroupTool(event: Event): void {\n    event.stopPropagation();\n    this.action.emit(this.layer);\n  }\n\n  toggleLayerTool(layer: AnyLayer): void {\n    this.action.emit(layer);\n  }\n\n  handleExpand(): void {\n    this.expand.emit();\n  }\n\n  handleSelect(event: MatCheckboxChange): void {\n    this.selectChange.emit(event.checked);\n  }\n}\n","<div class=\"layer-content\">\n  <mat-checkbox\n    *ngIf=\"viewerOptions.mode === 'selection'\"\n    [checked]=\"selected\"\n    [disabled]=\"selectionDisabled\"\n    (change)=\"handleSelect($event)\"\n  >\n  </mat-checkbox>\n  <ng-content></ng-content>\n  <span class=\"igo-layer-title\" (click)=\"handleExpand()\">{{\n    layer.title\n  }}</span>\n</div>\n\n<div class=\"list-actions\">\n  <div class=\"list-secondary-actions\">\n    <button\n      class=\"actions-button\"\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"'igo.geo.layer.moreOptions' | translate\"\n      mat-icon-button\n      color=\"primary\"\n      (click)=\"toggleLayerGroupTool($event)\"\n    >\n      <mat-icon>more_horiz</mat-icon>\n    </button>\n  </div>\n\n  <igo-layer-visibility-button\n    [layer]=\"layer\"\n    [disabled]=\"isDisabled\"\n    [tooltip]=\"tooltipMessage\"\n    [inResolutionsRange]=\"layer.isInResolutionsRange$ | async\"\n    (visibilityChange)=\"toggleVisibility($event)\"\n  ></igo-layer-visibility-button>\n</div>\n","import OlLayer from 'ol/layer/Layer';\nimport OlSource from 'ol/source/Source';\n\nimport { AnyLayer } from '../../layer/shared/layers/any-layer';\nimport { Layer } from '../../layer/shared/layers/layer';\nimport { isLayerGroup } from '../../layer/utils/layer.utils';\nimport { QueryableDataSource } from './query.interfaces';\n\n/**\n * Whether a layer is queryable\n * @param layer Layer\n * @returns True if the layer s squeryable\n */\nexport function layerIsQueryable(layer: AnyLayer): boolean {\n  if (isLayerGroup(layer)) {\n    return false;\n  }\n  const dataSource = layer.dataSource as QueryableDataSource;\n  return dataSource.options.queryable === true;\n}\n\n/**\n * Whether an OL layer is queryable\n * @param layer Layer\n * @returns True if the ol layer is queryable\n */\nexport function olLayerIsQueryable(olLayer: OlLayer<OlSource>): boolean {\n  const layer = olLayer.get('_layer');\n  return layer === undefined ? false : layerIsQueryable(layer);\n}\n\n/**\n * Whether a layer's feature is queryable\n * @param layer Layer\n * @returns True if the layer's feature is queryable\n */\nexport function layerFeatureIsQueryable(layer: Layer): boolean {\n  const dataSource = layer.dataSource as QueryableDataSource;\n  return dataSource.options.queryLayerFeatures !== undefined\n    ? dataSource.options.queryLayerFeatures === true\n    : true;\n}\n\n/**\n * Whether an OL Vector layer is queryable\n * @param layer Layer\n * @returns True if the ol vector layer is queryable\n */\nexport function olLayerFeatureIsQueryable(olLayer: OlLayer<OlSource>): boolean {\n  const layer = olLayer.get('_layer');\n  return layer === undefined\n    ? false\n    : layerIsQueryable(layer) && layerFeatureIsQueryable(layer);\n}\n","export enum TimeFilterType {\n  DATE = 'date',\n  TIME = 'time',\n  DATETIME = 'datetime',\n  YEAR = 'year'\n}\n\nexport enum TimeFilterStyle {\n  CALENDAR = 'calendar',\n  SLIDER = 'slider'\n}\n","import { Injectable } from '@angular/core';\n\nimport type { IgoMap } from './map';\n\n/**\n * MapService\n *\n * This service tracks the IgoMap instance, if any.\n * Currently, only one map instance is supported\n * but support for multiple maps may be added in the future.\n * This will impact other services such as the OverlayService\n * because these maps won't be sharing overlayed features.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class MapService {\n  private map: IgoMap;\n\n  getMap(): IgoMap {\n    return this.map;\n  }\n\n  setMap(map: IgoMap) {\n    this.map = map;\n  }\n}\n","import * as olproj from 'ol/proj';\nimport * as olstyle from 'ol/style';\n\nexport class EsriStyleGenerator {\n  public _converters: any;\n  public _renderers: any;\n\n  constructor() {\n    this._converters = {};\n    this._converters.esriPMS = EsriStyleGenerator._convertEsriPMS;\n    this._converters.esriSFS = EsriStyleGenerator._convertEsriSFS;\n    this._converters.esriSLS = EsriStyleGenerator._convertEsriSLS;\n    this._converters.esriSMS = EsriStyleGenerator._convertEsriSMS;\n    this._converters.esriTS = EsriStyleGenerator._convertEsriTS;\n    this._renderers = {};\n    this._renderers.uniqueValue = this._renderUniqueValue;\n    this._renderers.simple = this._renderSimple;\n    this._renderers.classBreaks = this._renderClassBreaks;\n  }\n  static _convertPointToPixel(point) {\n    return point / 0.75;\n  }\n  static _transformColor(color): [number, number, number, number] {\n    // alpha channel is different, runs from 0-255 but in ol3 from 0-1\n    return [color[0], color[1], color[2], color[3] / 255];\n  }\n\n  static _getResolutionForScale(scale, units) {\n    const dpi = 96;\n    const mpu = olproj.METERS_PER_UNIT[units];\n    const inchesPerMeter = 39.3701;\n    return parseFloat(scale) / (mpu * inchesPerMeter * dpi);\n  }\n\n  /* convert an Esri Text Symbol */\n  static _convertEsriTS(symbol) {\n    const rotation = EsriStyleGenerator._transformAngle(symbol.angle);\n    const text = symbol.text !== undefined ? symbol.text : undefined;\n    return new olstyle.Style({\n      text: new olstyle.Text({\n        fill: new olstyle.Fill({\n          color: EsriStyleGenerator._transformColor(symbol.color)\n        }),\n        font:\n          symbol.font.style +\n          ' ' +\n          symbol.font.weight +\n          ' ' +\n          symbol.font.size +\n          ' px ' +\n          symbol.font.family,\n        textBaseline: symbol.verticalAlignment,\n        textAlign: symbol.horizontalAlignment,\n        offsetX: EsriStyleGenerator._convertPointToPixel(symbol.xoffset),\n        offsetY: EsriStyleGenerator._convertPointToPixel(symbol.yoffset),\n        rotation,\n        text\n      })\n    });\n  }\n  /* convert an Esri Picture Marker Symbol */\n  static _convertEsriPMS(symbol) {\n    const src = 'data:' + symbol.contentType + ';base64, ' + symbol.imageData;\n    const rotation = EsriStyleGenerator._transformAngle(symbol.angle);\n\n    return new olstyle.Style({\n      image: new olstyle.Icon({\n        src,\n        rotation\n      })\n    });\n  }\n  /* convert an Esri Simple Fill Symbol */\n  static _convertEsriSFS(symbol) {\n    // there is no support in openlayers currently for fill patterns, so style is not interpreted\n    const fill = new olstyle.Fill({\n      color: EsriStyleGenerator._transformColor(symbol.color)\n    });\n    const stroke = symbol.outline\n      ? EsriStyleGenerator._convertOutline(symbol.outline)\n      : undefined;\n    return new olstyle.Style({\n      fill,\n      stroke\n    });\n  }\n  static _convertOutline(outline) {\n    let lineDash;\n    const color = EsriStyleGenerator._transformColor(outline.color);\n    if (outline.style === 'esriSLSDash') {\n      lineDash = [5];\n    } else if (outline.style === 'esriSLSDashDot') {\n      lineDash = [5, 5, 1, 2];\n    } else if (outline.style === 'esriSLSDashDotDot') {\n      lineDash = [5, 5, 1, 2, 1, 2];\n    } else if (outline.style === 'esriSLSDot') {\n      lineDash = [1, 2];\n    } else if (outline.style === 'esriSLSNull') {\n      // line not visible, make color fully transparent\n      color[3] = 0;\n    }\n    return new olstyle.Stroke({\n      color,\n      lineDash,\n      width: EsriStyleGenerator._convertPointToPixel(outline.width)\n    });\n  }\n  /* convert an Esri Simple Line Symbol */\n  static _convertEsriSLS(symbol) {\n    return new olstyle.Style({\n      stroke: EsriStyleGenerator._convertOutline(symbol)\n    });\n  }\n  static _transformAngle(angle) {\n    if (angle === 0 || angle === undefined) {\n      return undefined;\n    }\n    const normalRad = (angle * Math.PI) / 180;\n    const ol3Rad = -normalRad + Math.PI / 2;\n    if (ol3Rad < 0) {\n      return 2 * Math.PI + ol3Rad;\n    } else {\n      return ol3Rad;\n    }\n  }\n  /* convert an Esri Simple Marker Symbol */\n  static _convertEsriSMS(symbol) {\n    const fill = new olstyle.Fill({\n      color: EsriStyleGenerator._transformColor(symbol.color)\n    });\n    const stroke = symbol.outline\n      ? EsriStyleGenerator._convertOutline(symbol.outline)\n      : undefined;\n    const radius = EsriStyleGenerator._convertPointToPixel(symbol.size) / 2;\n    const rotation = EsriStyleGenerator._transformAngle(symbol.angle);\n    if (symbol.style === 'esriSMSCircle') {\n      return new olstyle.Style({\n        image: new olstyle.Circle({\n          radius,\n          fill,\n          stroke\n        })\n      });\n    } else if (symbol.style === 'esriSMSCross') {\n      return new olstyle.Style({\n        image: new olstyle.RegularShape({\n          fill,\n          stroke,\n          points: 4,\n          radius,\n          radius2: 0,\n          angle: 0,\n          rotation\n        })\n      });\n    } else if (symbol.style === 'esriSMSDiamond') {\n      return new olstyle.Style({\n        image: new olstyle.RegularShape({\n          fill,\n          stroke,\n          points: 4,\n          radius,\n          rotation\n        })\n      });\n    } else if (symbol.style === 'esriSMSSquare') {\n      return new olstyle.Style({\n        image: new olstyle.RegularShape({\n          fill,\n          stroke,\n          points: 4,\n          radius,\n          angle: Math.PI / 4,\n          rotation\n        })\n      });\n    } else if (symbol.style === 'esriSMSX') {\n      return new olstyle.Style({\n        image: new olstyle.RegularShape({\n          fill,\n          stroke,\n          points: 4,\n          radius,\n          radius2: 0,\n          angle: Math.PI / 4,\n          rotation\n        })\n      });\n    } else if (symbol.style === 'esriSMSTriangle') {\n      return new olstyle.Style({\n        image: new olstyle.RegularShape({\n          fill,\n          stroke,\n          points: 3,\n          radius,\n          angle: 0,\n          rotation\n        })\n      });\n    }\n  }\n\n  _convertLabelingInfo(labelingInfo, mapUnits) {\n    const styles = [];\n    for (let i = 0, ii = labelingInfo.length; i < ii; ++i) {\n      const labelExpression = labelingInfo[i].labelExpression;\n      // only limited support for label expressions\n      const field = labelExpression.substr(\n        labelExpression.indexOf('[') + 1,\n        labelExpression.indexOf(']') - 1\n      );\n      const symbol = labelingInfo[i].symbol;\n      const maxScale = labelingInfo[i].maxScale;\n      const minScale = labelingInfo[i].minScale;\n      let minResolution = null;\n      if (maxScale !== 0) {\n        minResolution = EsriStyleGenerator._getResolutionForScale(\n          maxScale,\n          mapUnits\n        );\n      }\n      let maxResolution = null;\n      if (minScale !== 0) {\n        maxResolution = EsriStyleGenerator._getResolutionForScale(\n          minScale,\n          mapUnits\n        );\n      }\n      const style = this._converters[symbol.type].call(this, symbol);\n      styles.push(\n        (() => {\n          return function (feature, resolution) {\n            let visible = true;\n            if (this.minResolution !== null && this.maxResolution !== null) {\n              visible =\n                resolution < this.maxResolution &&\n                resolution >= this.minResolution;\n            } else if (this.minResolution !== null) {\n              visible = resolution >= this.minResolution;\n            } else if (this.maxResolution !== null) {\n              visible = resolution < this.maxResolution;\n            }\n            if (visible) {\n              const value = feature.get(this.field);\n              this.style.getText().setText(value);\n              return [this.style];\n            }\n          };\n        })().bind({\n          minResolution,\n          maxResolution,\n          field,\n          style\n        })\n      );\n    }\n    return styles;\n  }\n\n  _renderSimple(renderer) {\n    const style = this._converters[renderer.symbol.type].call(\n      this,\n      renderer.symbol\n    );\n    return (() => {\n      return () => {\n        return [style];\n      };\n    })();\n  }\n  _renderClassBreaks(renderer) {\n    const defaultSymbol = renderer.defaultSymbol;\n    const defaultStyle = this._converters[defaultSymbol.type].call(\n      this,\n      defaultSymbol\n    );\n    const field = renderer.field;\n    const classes = [];\n    for (let i = 0, ii = renderer.classBreakInfos.length; i < ii; ++i) {\n      const classBreakInfo = renderer.classBreakInfos[i];\n      let min;\n      if (\n        classBreakInfo.classMinValue === null ||\n        classBreakInfo.classMinValue === undefined\n      ) {\n        if (i === 0) {\n          min = renderer.minValue;\n        } else {\n          min = renderer.classBreakInfos[i - 1].classMaxValue;\n        }\n      } else {\n        min = classBreakInfo.classMinValue;\n      }\n      const max = classBreakInfo.classMaxValue;\n      const symbol = classBreakInfo.symbol;\n      const style = this._converters[symbol.type].call(this, symbol);\n      classes.push({ min, max, style });\n    }\n    return (() => {\n      return (feature) => {\n        const value = feature.get(field);\n        for (let i = 0, ii = classes.length; i < ii; ++i) {\n          let condition;\n          if (i === 0) {\n            condition = value >= classes[i].min && value <= classes[i].max;\n          } else {\n            condition = value > classes[i].min && value <= classes[i].max;\n          }\n          if (condition) {\n            return [classes[i].style];\n          }\n        }\n        return [defaultStyle];\n      };\n    })();\n  }\n  _renderUniqueValue(renderer) {\n    const defaultSymbol = renderer.defaultSymbol;\n    let defaultStyle = [];\n    if (defaultSymbol) {\n      defaultStyle = [\n        this._converters[defaultSymbol.type].call(this, defaultSymbol)\n      ];\n    }\n    const field = renderer.field1;\n    const infos = renderer.uniqueValueInfos;\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const me = this;\n    return (() => {\n      const hash = {};\n      for (let i = 0, ii = infos.length; i < ii; ++i) {\n        const info = infos[i];\n        const symbol = info.symbol;\n        hash[info.value] = [me._converters[symbol.type].call(me, symbol)];\n      }\n\n      return (feature) => {\n        const style = hash[feature.get(field)];\n        return style ? style : defaultStyle;\n      };\n    })();\n  }\n  generateStyle(layerInfo, mapUnits) {\n    const drawingInfo = layerInfo.drawingInfo;\n    let styleFunctions = [];\n    const drawingInfoStyle = this._renderers[drawingInfo.renderer.type].call(\n      this,\n      drawingInfo.renderer\n    );\n    if (drawingInfoStyle !== undefined) {\n      styleFunctions.push(drawingInfoStyle);\n    }\n    if (layerInfo.labelingInfo) {\n      const labelingInfoStyleFunctions = this._convertLabelingInfo(\n        layerInfo.labelingInfo,\n        mapUnits\n      );\n      styleFunctions = styleFunctions.concat(labelingInfoStyleFunctions);\n    }\n    if (styleFunctions.length === 1) {\n      return styleFunctions[0];\n    } else {\n      return (() => {\n        return (feature, resolution) => {\n          let styles = [];\n          for (let i = 0, ii = styleFunctions.length; i < ii; ++i) {\n            const result = styleFunctions[i].call(null, feature, resolution);\n            if (result) {\n              styles = styles.concat(result);\n            }\n          }\n          return styles;\n        };\n      })();\n    }\n  }\n}\n","export enum TypeCapabilities {\n  wms = 'wms',\n  wmts = 'wmts',\n  arcgisrest = 'esriJSON',\n  // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n  imagearcgisrest = 'esriJSON',\n  // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n  tilearcgisrest = 'esriJSON'\n}\n\nexport type TypeCapabilitiesStrings = keyof typeof TypeCapabilities;\n\nexport interface ArcGISRestCapabilitiesLayer {\n  id: number;\n  name: string;\n  parentLayerId: number;\n  defaultVisibility?: boolean;\n  subLayerIds: number[];\n  minScale: number;\n  maxScale: number;\n  type: ArcGISRestCapabilitiesLayerTypes;\n  geometryType?: string;\n}\n\nexport enum ArcGISRestCapabilitiesLayerTypes {\n  FeatureLayer = 'Feature Layer',\n  RasterLayer = 'Raster Layer',\n  GroupLayer = 'Group Layer'\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport olAttribution from 'ol/control/Attribution';\nimport { EsriJSON, WMSCapabilities, WMTSCapabilities } from 'ol/format';\nimport * as olproj from 'ol/proj';\nimport { optionsFromCapabilities } from 'ol/source/WMTS.js';\n\nimport { Observable, forkJoin, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { Cacheable } from 'ts-cacheable';\n\nimport {\n  TimeFilterStyle,\n  TimeFilterType\n} from '../../filter/shared/time-filter.enum';\nimport type {\n  ItemStyleOptions,\n  LegendOptions\n} from '../../layer/shared/layers/legend.interface';\nimport { MapService } from '../../map/shared/map.service';\nimport { getResolutionFromScale } from '../../map/shared/map.utils';\nimport {\n  QueryFormat,\n  QueryFormatMimeType\n} from '../../query/shared/query.enums';\nimport { EsriStyleGenerator } from '../../style/shared/datasource/esri-style-generator';\nimport {\n  TypeCapabilities,\n  TypeCapabilitiesStrings\n} from './capabilities.interface';\nimport { ArcGISRestDataSourceOptions } from './datasources/arcgisrest-datasource.interface';\nimport { CartoDataSourceOptions } from './datasources/carto-datasource.interface';\nimport { ArcGISRestImageDataSourceOptions } from './datasources/imagearcgisrest-datasource.interface';\nimport { TileArcGISRestDataSourceOptions } from './datasources/tilearcgisrest-datasource.interface';\nimport { WMSDataSourceOptions } from './datasources/wms-datasource.interface';\nimport { WMTSDataSourceOptions } from './datasources/wmts-datasource.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CapabilitiesService {\n  private parsers = {\n    wms: new WMSCapabilities(),\n    wmts: new WMTSCapabilities(),\n    esriJSON: new EsriJSON()\n  };\n\n  constructor(\n    private http: HttpClient,\n    private mapService: MapService\n  ) {}\n\n  getWMSOptions(\n    baseOptions: WMSDataSourceOptions\n  ): Observable<WMSDataSourceOptions> {\n    const url = baseOptions.url;\n    const version = (baseOptions.params as any).VERSION;\n\n    return this.getCapabilities('wms', url, version).pipe(\n      map((capabilities: any) => {\n        return capabilities\n          ? this.parseWMSOptions(baseOptions, capabilities)\n          : undefined;\n      })\n    );\n  }\n\n  getWMTSOptions(\n    baseOptions: WMTSDataSourceOptions\n  ): Observable<WMTSDataSourceOptions> {\n    const url = baseOptions.url;\n    const version = baseOptions.version;\n\n    const options = this.getCapabilities('wmts', url, version).pipe(\n      map((capabilities: any) => {\n        return capabilities\n          ? this.parseWMTSOptions(baseOptions, capabilities)\n          : undefined;\n      })\n    );\n    return options;\n  }\n\n  getCartoOptions(\n    baseOptions: CartoDataSourceOptions\n  ): Observable<CartoDataSourceOptions> {\n    const baseUrl =\n      'https://' +\n      baseOptions.account +\n      '.carto.com/api/v2/viz/' +\n      baseOptions.mapId +\n      '/viz.json';\n\n    return this.http\n      .jsonp(baseUrl, 'callback')\n      .pipe(\n        map((cartoOptions: any) =>\n          this.parseCartoOptions(baseOptions, cartoOptions)\n        )\n      );\n  }\n\n  @Cacheable({\n    maxCacheCount: 20\n  })\n  getArcgisOptions(\n    baseOptions: ArcGISRestDataSourceOptions\n  ): Observable<ArcGISRestDataSourceOptions> {\n    const baseUrl = baseOptions.url + '/' + baseOptions.layer + '?f=json';\n    const serviceCapabilities = this.getCapabilities(\n      'arcgisrest',\n      baseOptions.url\n    );\n    const arcgisOptions = this.http.get(baseUrl);\n    return forkJoin([arcgisOptions, serviceCapabilities]).pipe(\n      map((res: any) => {\n        return this.parseArcgisOptions(baseOptions, res[0], res[1]);\n      })\n    );\n  }\n\n  @Cacheable({\n    maxCacheCount: 20\n  })\n  getImageArcgisOptions(\n    baseOptions:\n      | ArcGISRestImageDataSourceOptions\n      | TileArcGISRestDataSourceOptions\n  ): Observable<\n    ArcGISRestImageDataSourceOptions | TileArcGISRestDataSourceOptions\n  > {\n    const baseUrl = baseOptions.url + '/' + baseOptions.layer + '?f=json';\n    const legendUrl = baseOptions.url + '/legend?f=json';\n    const serviceCapabilities = this.getCapabilities(\n      'imagearcgisrest',\n      baseOptions.url\n    );\n    const arcgisOptions = this.http.get(baseUrl);\n    const legend = this.http.get(legendUrl).pipe(\n      map((res: any) => res),\n      catchError((err) => {\n        console.log('No legend associated with this Image Service');\n        return of(err);\n      })\n    );\n    return forkJoin([arcgisOptions, legend, serviceCapabilities]).pipe(\n      map((res: any) => {\n        return this.parseTileOrImageArcgisOptions(\n          baseOptions,\n          res[0],\n          res[1],\n          res[2]\n        );\n      })\n    );\n  }\n\n  @Cacheable({\n    maxCacheCount: 20\n  })\n  getTileArcgisOptions(\n    baseOptions: TileArcGISRestDataSourceOptions\n  ): Observable<\n    ArcGISRestImageDataSourceOptions | TileArcGISRestDataSourceOptions\n  > {\n    const baseUrl = baseOptions.url + '/' + baseOptions.layer + '?f=json';\n    const legendUrl = baseOptions.url + '/legend?f=json';\n    const serviceCapabilities = this.getCapabilities(\n      'tilearcgisrest',\n      baseOptions.url\n    );\n    const arcgisOptions = this.http.get(baseUrl);\n    const legendInfo = this.http.get(legendUrl).pipe(\n      map((res: any) => res),\n      catchError((err) => {\n        console.log('No legend associated with this Tile Service');\n        return of(err);\n      })\n    );\n    return forkJoin([arcgisOptions, legendInfo, serviceCapabilities]).pipe(\n      map((res: any) =>\n        this.parseTileOrImageArcgisOptions(baseOptions, res[0], res[1], res[2])\n      )\n    );\n  }\n\n  @Cacheable({\n    maxCacheCount: 20\n  })\n  getCapabilities(\n    service: TypeCapabilitiesStrings,\n    baseUrl: string,\n    version?: string\n  ): Observable<any> {\n    const params = new HttpParams({\n      fromObject: {\n        request: 'GetCapabilities',\n        service: service.toUpperCase(),\n        version: version || '1.3.0',\n        _i: 'true'\n      }\n    });\n\n    let request;\n    if (TypeCapabilities[service] === 'esriJSON') {\n      request = this.http.get(baseUrl + '?f=json');\n    } else {\n      request = this.http.get(baseUrl, {\n        params,\n        responseType: 'text'\n      });\n    }\n\n    return request.pipe(\n      map((res) => {\n        if (TypeCapabilities[service] === 'esriJSON') {\n          return res as object;\n        }\n        if (\n          String(res).toLowerCase().includes('serviceexception') &&\n          String(res).toLowerCase().includes('access denied')\n        ) {\n          throw {\n            error: {\n              message: 'Service error getCapabilities: Access is denied'\n            }\n          };\n        } else {\n          return this.parsers[service].read(res);\n        }\n      }),\n      catchError((e) => {\n        if (typeof e.error !== 'undefined') {\n          e.error.caught = true;\n        }\n        throw e;\n      })\n    );\n  }\n\n  private parseWMSOptions(\n    baseOptions: WMSDataSourceOptions,\n    capabilities: any\n  ): WMSDataSourceOptions {\n    const layers = (baseOptions.params as any).LAYERS;\n    const layer = this.findDataSourceInCapabilities(\n      capabilities.Capability.Layer,\n      layers\n    );\n\n    if (!layer) {\n      throw {\n        error: {\n          message: 'Layer not found'\n        }\n      };\n    }\n    const metadata = layer.DataURL ? layer.DataURL[0] : undefined;\n    const abstract = layer.Abstract ? layer.Abstract : undefined;\n    const keywordList = layer.KeywordList ? layer.KeywordList : undefined;\n    let queryable = layer.queryable;\n    const timeFilter = this.getTimeFilter(layer);\n    const timeFilterable = timeFilter && Object.keys(timeFilter).length > 0;\n    const legendOptions = layer.Style ? this.getStyle(layer.Style) : undefined;\n    let isExtentInGeographic = true;\n    if (layer.EX_GeographicBoundingBox) {\n      layer.EX_GeographicBoundingBox.forEach((coord, index) => {\n        if (index < 2 && (coord > 180 || coord < -180)) {\n          isExtentInGeographic = false;\n        }\n        if (index >= 2 && (coord > 90 || coord < -90)) {\n          isExtentInGeographic = false;\n        }\n      });\n    } else {\n      isExtentInGeographic = false;\n    }\n\n    const extent = isExtentInGeographic\n      ? olproj.transformExtent(\n          layer.EX_GeographicBoundingBox,\n          'EPSG:4326',\n          this.mapService.getMap().projection\n        )\n      : undefined;\n\n    let queryFormat: QueryFormat;\n    const queryFormatMimeTypePriority = [\n      QueryFormatMimeType.GEOJSON,\n      QueryFormatMimeType.GEOJSON2,\n      QueryFormatMimeType.GML3,\n      QueryFormatMimeType.GML2,\n      QueryFormatMimeType.JSON,\n      QueryFormatMimeType.HTML\n    ];\n\n    for (const mimeType of queryFormatMimeTypePriority) {\n      if (\n        capabilities.Capability.Request.GetFeatureInfo.Format.indexOf(\n          mimeType\n        ) !== -1\n      ) {\n        const keyEnum = Object.keys(QueryFormatMimeType).find(\n          (key) => QueryFormatMimeType[key] === mimeType\n        );\n        queryFormat = QueryFormat[keyEnum];\n        break;\n      }\n    }\n    if (!queryFormat) {\n      queryable = false;\n    }\n\n    const options: WMSDataSourceOptions = ObjectUtils.removeUndefined({\n      _layerOptionsFromSource: {\n        title: layer.Title,\n        maxResolution: getResolutionFromScale(layer.MaxScaleDenominator),\n        minResolution: getResolutionFromScale(layer.MinScaleDenominator),\n        extent,\n        metadata: {\n          url: metadata ? metadata.OnlineResource : undefined,\n          extern: metadata ? true : undefined,\n          abstract,\n          keywordList\n        },\n        legendOptions\n      },\n      queryable,\n      queryFormat,\n      timeFilter: timeFilterable ? timeFilter : undefined,\n      timeFilterable: timeFilterable ? true : undefined,\n      minDate: timeFilterable ? timeFilter.min : undefined,\n      maxDate: timeFilterable ? timeFilter.max : undefined,\n      stepDate: timeFilterable ? timeFilter.step : undefined\n    });\n\n    return ObjectUtils.mergeDeep(options, baseOptions);\n  }\n\n  private parseWMTSOptions(\n    baseOptions: WMTSDataSourceOptions,\n    capabilities: any\n  ): WMTSDataSourceOptions {\n    // Put Title source in _layerOptionsFromSource. (For source & catalog in _layerOptionsFromSource, if not already on config)\n    const layer = capabilities.Contents.Layer.find(\n      (el) => el.Identifier === baseOptions.layer\n    );\n\n    const options = optionsFromCapabilities(capabilities, baseOptions);\n\n    const ouputOptions = Object.assign(options, baseOptions);\n    const sourceOptions = ObjectUtils.removeUndefined({\n      _layerOptionsFromSource: {\n        title: layer.Title\n      }\n    });\n\n    return ObjectUtils.mergeDeep(sourceOptions, ouputOptions);\n  }\n\n  private parseCartoOptions(\n    baseOptions: CartoDataSourceOptions,\n    cartoOptions: any\n  ): CartoDataSourceOptions {\n    const layers = [];\n    const params = cartoOptions.layers[1].options.layer_definition;\n    params.layers.forEach((element) => {\n      layers.push({\n        type: element.type.toLowerCase(),\n        options: element.options,\n        legend: element.legend\n      });\n    });\n    const options = ObjectUtils.removeUndefined({\n      config: {\n        version: params.version,\n        layers\n      }\n    });\n    return ObjectUtils.mergeDeep(options, baseOptions);\n  }\n\n  private parseArcgisOptions(\n    baseOptions: ArcGISRestDataSourceOptions,\n    arcgisOptions: any,\n    serviceCapabilities: any\n  ): ArcGISRestDataSourceOptions {\n    const title = arcgisOptions.name;\n    let legendInfo: any;\n\n    if (arcgisOptions.drawingInfo?.renderer) {\n      legendInfo = arcgisOptions.drawingInfo.renderer;\n    } else {\n      legendInfo = undefined;\n    }\n\n    let style;\n    if (arcgisOptions.drawingInfo) {\n      const styleGenerator = new EsriStyleGenerator();\n      const units = arcgisOptions.units === 'esriMeters' ? 'm' : 'degrees';\n      style = styleGenerator.generateStyle(arcgisOptions, units);\n    }\n    const attributions = new olAttribution({\n      target: arcgisOptions.copyrightText\n    });\n    let timeExtent;\n    let timeFilter;\n    if (arcgisOptions.timeInfo) {\n      const time = arcgisOptions.timeInfo.timeExtent;\n      timeExtent = time[0] + ',' + time[1];\n      const min = new Date();\n      min.setTime(time[0]);\n      const max = new Date();\n      max.setTime(time[1]);\n      timeFilter = {\n        min: min.toUTCString(),\n        max: max.toUTCString(),\n        range: true,\n        type: TimeFilterType.DATETIME,\n        style: TimeFilterStyle.CALENDAR\n      };\n    }\n    const params = Object.assign(\n      {},\n      {\n        style,\n        LAYERS: baseOptions.layer ? 'show:' + baseOptions.layer : undefined,\n        time: timeExtent\n      }\n    );\n    const options = ObjectUtils.removeUndefined({\n      params,\n      _layerOptionsFromSource: {\n        title,\n        minResolution: getResolutionFromScale(arcgisOptions.maxScale),\n        maxResolution: getResolutionFromScale(arcgisOptions.minScale),\n        metadata: {\n          extern: false,\n          abstract:\n            arcgisOptions.description || serviceCapabilities.serviceDescription\n        }\n      },\n      legendInfo,\n      timeFilter,\n      sourceFields: arcgisOptions.fields,\n      queryTitle: arcgisOptions.displayField\n    });\n    options.attributions = attributions;\n    return ObjectUtils.mergeDeep(options, baseOptions);\n  }\n\n  private parseTileOrImageArcgisOptions(\n    baseOptions:\n      | TileArcGISRestDataSourceOptions\n      | ArcGISRestImageDataSourceOptions,\n    arcgisOptions: any,\n    legend: any,\n    serviceCapabilities: any\n  ): TileArcGISRestDataSourceOptions | ArcGISRestImageDataSourceOptions {\n    const title = arcgisOptions.name;\n    const legendInfo = legend.layers\n      ? legend.layers.find((x) => x.layerName === title)\n      : undefined;\n    const attributions = new olAttribution({\n      target: arcgisOptions.copyrightText\n    });\n    let timeExtent;\n    let timeFilter;\n    if (arcgisOptions.timeInfo) {\n      const time = arcgisOptions.timeInfo.timeExtent;\n      timeExtent = time[0] + ',' + time[1];\n      const min = new Date();\n      min.setTime(time[0]);\n      const max = new Date();\n      max.setTime(time[1]);\n      timeFilter = {\n        min: min.toUTCString(),\n        max: max.toUTCString(),\n        range: true,\n        type: TimeFilterType.DATETIME,\n        style: TimeFilterStyle.CALENDAR\n      };\n    }\n    const params = Object.assign(\n      {},\n      {\n        LAYERS: baseOptions.layer ? 'show:' + baseOptions.layer : undefined,\n        time: timeExtent\n      }\n    );\n    const options = ObjectUtils.removeUndefined({\n      params,\n      _layerOptionsFromSource: {\n        title,\n        minResolution: getResolutionFromScale(arcgisOptions.maxScale),\n        maxResolution: getResolutionFromScale(arcgisOptions.minScale),\n        metadata: {\n          extern: false,\n          abstract:\n            arcgisOptions.description || serviceCapabilities.serviceDescription\n        }\n      },\n      legendInfo,\n      timeFilter,\n      sourceFields: arcgisOptions.fields,\n      queryTitle: arcgisOptions.displayField\n    });\n    options.attributions = attributions;\n    return ObjectUtils.mergeDeep(options, baseOptions);\n  }\n\n  private findDataSourceInCapabilities(layerArray, name): any {\n    if (Array.isArray(layerArray)) {\n      let layer;\n      layerArray.find((value) => {\n        layer = this.findDataSourceInCapabilities(value, name);\n        return layer !== undefined;\n      }, this);\n\n      return layer;\n    } else if (layerArray.Layer) {\n      return this.findDataSourceInCapabilities(layerArray.Layer, name);\n    } else {\n      if (layerArray.Name && layerArray.Name === name) {\n        return layerArray;\n      }\n      return undefined;\n    }\n  }\n\n  getTimeFilter(layer) {\n    let dimension;\n\n    if (layer.Dimension) {\n      const timeFilter: any = {};\n      dimension = layer.Dimension[0];\n\n      if (dimension.values) {\n        const minMaxDim = dimension.values.split('/');\n        timeFilter.min = minMaxDim[0] !== undefined ? minMaxDim[0] : undefined;\n        timeFilter.max = minMaxDim[1] !== undefined ? minMaxDim[1] : undefined;\n        timeFilter.step = minMaxDim[2] !== undefined ? minMaxDim[2] : undefined;\n      }\n\n      if (dimension.default) {\n        timeFilter.value = dimension.default;\n      }\n      return timeFilter;\n    }\n  }\n\n  getStyle(Style): LegendOptions {\n    const styleOptions: ItemStyleOptions[] = Style.map((style) => {\n      return {\n        name: style.Name,\n        title: style.Title\n      };\n    })\n      // Handle repeat the style \"default\" in output  (MapServer or OpenLayer)\n      .filter(\n        (item, index, self) =>\n          self.findIndex((i: ItemStyleOptions) => i.name === item.name) ===\n          index\n      );\n\n    const legendOptions: LegendOptions = {\n      stylesAvailable: styleOptions\n    } as LegendOptions;\n\n    return legendOptions;\n  }\n}\n","import { Message } from '@igo2/core/message';\n\nimport olLayer from 'ol/layer/Layer';\nimport olSource from 'ol/source/Source';\n\nimport type {\n  AnyDataSourceOptions,\n  DataSource\n} from '../../../datasource/shared/datasources';\nimport type { MapExtent } from '../../../map/shared/map.interface';\nimport type { LegendOptions } from './legend.interface';\nimport type { LayersLink } from './linked/linked-layer.interface';\n\nexport interface LayerOptions extends LayerOptionsBase {\n  isIgoInternalLayer?: boolean; // useful when mapOffline directive set the resolution of the layers.\n  source?: DataSource;\n  sourceOptions?: AnyDataSourceOptions;\n  alias?: string;\n  security?: LayerSecurityOptions;\n  baseLayer?: boolean;\n  messages?: Message[];\n  minScaleDenom?: number;\n  maxScaleDenom?: number;\n  removable?: boolean;\n  workspace?: GeoWorkspaceOptions;\n  legendOptions?: LegendOptions;\n  ol?: olLayer<olSource>;\n  tooltip?: TooltipContent;\n  _internal?: Record<string, string>;\n  linkedLayers?: LayersLink;\n  showButtonZoomToExtent?: boolean;\n}\n\nexport interface LayerOptionsBase {\n  id?: string | number;\n  /**\n   * An unique identifier calculated client side\n   * The name prop provide a way to have a unique identifier between all layers\n   **/\n  name?: string;\n  title?: string;\n  opacity?: number;\n  visible?: boolean;\n  extent?: MapExtent;\n  zIndex?: number;\n  minResolution?: number;\n  maxResolution?: number;\n  showInLayerList?: boolean;\n  parentId?: string;\n}\n\nexport interface LayerSecurityOptions {\n  profils?: string[];\n}\n\nexport interface GeoWorkspaceOptions {\n  srcId?: string;\n  workspaceId?: string;\n  minResolution?: number;\n  maxResolution?: number;\n  enabled?: boolean;\n  queryOptions?: GeoWorkspaceQueryOptions;\n  pageSize?: number;\n  pageSizeOptions?: number[];\n  searchIndexEnabled?: boolean;\n  printable?: boolean;\n}\n\nexport interface GeoWorkspaceQueryOptions {\n  mapQueryOnOpenTab?: boolean;\n  tabQuery?: boolean;\n}\n\nexport interface TooltipContent {\n  type?: TooltipType;\n  text?: string;\n}\nexport enum TooltipType {\n  TITLE = 'title',\n  ABSTRACT = 'abstract',\n  CUSTOM = 'custom'\n}\nexport type LayerType = 'vector' | 'raster' | 'group';\n","import { MessageService } from '@igo2/core/message';\nimport { SubjectStatus, Watcher, uuid } from '@igo2/utils';\n\nimport olSourceImage from 'ol/source/Image';\n\nimport type { ImageLayer } from '../shared/layers/image-layer';\n\nexport class ImageWatcher extends Watcher {\n  protected id: string;\n  protected loaded = 0;\n  protected loading = 0;\n\n  private source: olSourceImage;\n\n  private messageService: MessageService;\n\n  constructor(layer: ImageLayer, messageService: MessageService) {\n    super();\n    this.source = layer.options.source.ol;\n    this.id = uuid();\n    this.messageService = messageService;\n  }\n\n  protected watch() {\n    this.source.on(`imageloadstart`, (e) => this.handleLoadStart(e));\n    this.source.on(`imageloadend`, (e) => this.handleLoadEnd(e));\n    this.source.on(`imageloaderror`, (e) => this.handleLoadEnd(e));\n    this.source.on(`imageloaderror`, (e) => this.handleLoadError(e));\n  }\n\n  protected unwatch() {\n    this.source.un(`imageloadstart`, (e) => this.handleLoadStart(e));\n    this.source.un(`imageloadend`, (e) => this.handleLoadEnd(e));\n    this.source.un(`imageloaderror`, (e) => this.handleLoadEnd(e));\n    this.source.un(`imageloaderror`, (e) => this.handleLoadError(e));\n  }\n\n  private handleLoadStart(event: any) {\n    if (!event.image.__watchers__) {\n      event.image.__watchers__ = [];\n    }\n    event.image.__watchers__.push(this.id);\n\n    this.loading += 1;\n    this.status = SubjectStatus.Working;\n  }\n\n  private handleLoadEnd(event) {\n    if (!event.image.__watchers__) {\n      return;\n    }\n\n    const watcherIndex = event.image.__watchers__.indexOf(this.id);\n    if (watcherIndex < 0) {\n      return;\n    }\n\n    event.image.__watchers__.splice(watcherIndex, 1);\n\n    this.loaded += 1;\n\n    const loading = this.loading;\n    if (this.loaded >= loading) {\n      if (loading === this.loading) {\n        this.status = SubjectStatus.Done;\n        this.loaded = this.loading = 0;\n      }\n    }\n  }\n\n  private handleLoadError(event) {\n    if (!event.image.__watchers__) {\n      return;\n    }\n    this.messageService.error(\n      'igo.geo.dataSource.unavailable',\n      'igo.geo.dataSource.unavailableTitle',\n      undefined,\n      { value: event.target.params_.LAYERS }\n    );\n    this.loaded = -1;\n    this.loading = 0;\n    this.status = SubjectStatus.Error;\n  }\n}\n","import { AuthInterceptor } from '@igo2/auth';\nimport { MessageService } from '@igo2/core/message';\n\nimport olLayerImage from 'ol/layer/Image';\nimport olSourceImage from 'ol/source/Image';\n\nimport { ImageArcGISRestDataSource } from '../../../datasource/shared/datasources/imagearcgisrest-datasource';\nimport { WMSDataSource } from '../../../datasource/shared/datasources/wms-datasource';\nimport { type MapBase } from '../../../map/shared/map.abstract';\nimport { ImageWatcher } from '../../utils/image-watcher';\nimport { ImageLayerOptions } from './image-layer.interface';\nimport { Layer } from './layer';\nimport { LayerType } from './layer.interface';\n\nexport class ImageLayer extends Layer {\n  type: LayerType = 'raster';\n  declare public dataSource: WMSDataSource | ImageArcGISRestDataSource;\n  declare public options: ImageLayerOptions;\n  declare public ol: olLayerImage<olSourceImage>;\n\n  private watcher: ImageWatcher;\n\n  constructor(\n    options: ImageLayerOptions,\n    public messageService: MessageService,\n    public authInterceptor?: AuthInterceptor\n  ) {\n    super(options, messageService, authInterceptor);\n    this.watcher = new ImageWatcher(this, this.messageService);\n    this.status$ = this.watcher.status$;\n    this.status$.subscribe((valStatus) => {\n      if (valStatus === 0) {\n        this.olLoadingProblem = true;\n      }\n    });\n  }\n\n  protected createOlLayer(): olLayerImage<olSourceImage> {\n    const olOptions = Object.assign({}, this.options, {\n      source: this.options.source.ol as olSourceImage\n    });\n\n    const image = new olLayerImage(olOptions);\n    if (this.authInterceptor) {\n      (image.getSource() as any).setImageLoadFunction((tile, src) => {\n        this.customLoader(tile, src, this.authInterceptor, this.messageService);\n      });\n    }\n\n    return image;\n  }\n\n  public init(map: MapBase | undefined) {\n    if (map === undefined) {\n      this.watcher.unsubscribe();\n    } else {\n      this.watcher.subscribe(() => void 1);\n    }\n    super.init(map);\n  }\n\n  remove(): void {\n    this.watcher.unsubscribe();\n    super.remove();\n  }\n\n  private customLoader(\n    tile,\n    src: string,\n    interceptor: AuthInterceptor,\n    messageService: MessageService\n  ) {\n    const xhr = new XMLHttpRequest();\n\n    const alteredUrlWithKeyAuth = interceptor.alterUrlWithKeyAuth(src);\n    let url = src;\n    if (alteredUrlWithKeyAuth) {\n      url = alteredUrlWithKeyAuth;\n    }\n    xhr.open('GET', url);\n    const intercepted = interceptor.interceptXhr(xhr, url);\n    if (!intercepted) {\n      xhr.abort();\n      tile.getImage().src = url;\n      return;\n    }\n\n    xhr.responseType = 'arraybuffer';\n\n    xhr.onload = function () {\n      const arrayBufferView = new Uint8Array((this as any).response);\n      const responseString = new TextDecoder().decode(arrayBufferView);\n      if (responseString.includes('ServiceExceptionReport')) {\n        messageService.error(\n          'igo.geo.dataSource.optionsApiUnavailable',\n          'igo.geo.dataSource.unavailableTitle'\n        );\n      }\n      const blob = new Blob([arrayBufferView], { type: 'image/png' });\n      const urlCreator = window.URL;\n      const imageUrl = urlCreator.createObjectURL(blob);\n      tile.getImage().src = imageUrl;\n    };\n    xhr.send();\n  }\n}\n","import { SubjectStatus, Watcher, uuid } from '@igo2/utils';\n\nimport olSourceTile from 'ol/source/Tile';\n\nimport type { TileLayer } from '../shared/layers/tile-layer';\nimport type { VectorTileLayer } from '../shared/layers/vectortile-layer';\n\nexport class TileWatcher extends Watcher {\n  private id: string;\n  private loaded = 0;\n  private loading = 0;\n\n  private source: olSourceTile;\n\n  constructor(layer: TileLayer | VectorTileLayer) {\n    super();\n    this.source = layer.options.source.ol;\n    this.id = uuid();\n  }\n\n  protected watch() {\n    this.source.on(`tileloadstart`, (e) => this.handleLoadStart(e));\n    this.source.on(`tileloadend`, (e) => this.handleLoadEnd(e));\n    this.source.on(`tileloaderror`, (e) => this.handleLoadEnd(e));\n  }\n\n  protected unwatch() {\n    this.source.un(`tileloadstart`, (e) => this.handleLoadStart(e));\n    this.source.un(`tileloadend`, (e) => this.handleLoadEnd(e));\n    this.source.un(`tileloaderror`, (e) => this.handleLoadEnd(e));\n  }\n\n  private handleLoadStart(event: any) {\n    // This is to avoid increasing\n    // the number of loaded tiles if a tile was loading\n    // before subscribing to this watcher\n    if (!event.tile.__watchers__) {\n      event.tile.__watchers__ = [];\n    }\n    event.tile.__watchers__.push(this.id);\n\n    this.loading += 1;\n    this.status = SubjectStatus.Working;\n  }\n\n  private handleLoadEnd(event) {\n    if (!event.tile.__watchers__) {\n      return;\n    }\n\n    const watcherIndex = event.tile.__watchers__.indexOf(this.id);\n    if (watcherIndex < 0) {\n      return;\n    }\n\n    event.tile.__watchers__.splice(watcherIndex, 1);\n\n    this.loaded += 1;\n\n    const loading = this.loading;\n    if (this.loaded >= loading) {\n      if (loading === this.loading) {\n        this.status = SubjectStatus.Done;\n        this.loaded = this.loading = 0;\n      }\n    }\n  }\n}\n","import { AuthInterceptor } from '@igo2/auth';\nimport { MessageService } from '@igo2/core/message';\n\nimport Tile from 'ol/Tile';\nimport olLayerTile from 'ol/layer/Tile';\nimport olSourceTile from 'ol/source/Tile';\n\nimport { CartoDataSource } from '../../../datasource/shared/datasources/carto-datasource';\nimport { OSMDataSource } from '../../../datasource/shared/datasources/osm-datasource';\nimport { TileArcGISRestDataSource } from '../../../datasource/shared/datasources/tilearcgisrest-datasource';\nimport { TileDebugDataSource } from '../../../datasource/shared/datasources/tiledebug-datasource';\nimport { WMTSDataSource } from '../../../datasource/shared/datasources/wmts-datasource';\nimport { XYZDataSource } from '../../../datasource/shared/datasources/xyz-datasource';\nimport type { MapBase } from '../../../map/shared/map.abstract';\nimport { TileWatcher } from '../../utils/tile-watcher';\nimport { Layer } from './layer';\nimport { LayerType } from './layer.interface';\nimport { TileLayerOptions } from './tile-layer.interface';\n\nexport class TileLayer extends Layer {\n  type: LayerType = 'raster';\n  declare public dataSource:\n    | OSMDataSource\n    | WMTSDataSource\n    | XYZDataSource\n    | TileDebugDataSource\n    | CartoDataSource\n    | TileArcGISRestDataSource;\n  declare public options: TileLayerOptions;\n  declare public ol: olLayerTile<olSourceTile>;\n\n  private watcher: TileWatcher;\n\n  constructor(\n    options: TileLayerOptions,\n    public messageService?: MessageService,\n    public authInterceptor?: AuthInterceptor\n  ) {\n    super(options, messageService);\n\n    this.watcher = new TileWatcher(this);\n    this.status$ = this.watcher.status$;\n  }\n\n  protected createOlLayer(): olLayerTile<olSourceTile> {\n    const olOptions = Object.assign({}, this.options, {\n      source: this.options.source.ol\n    });\n    const tileLayer = new olLayerTile(olOptions);\n    const tileSource = tileLayer.getSource();\n    tileSource.setTileLoadFunction((tile: Tile, url: string) => {\n      this.customLoader(tile, url, this.authInterceptor);\n    });\n\n    return tileLayer;\n  }\n\n  /**\n   * Custom loader for tile layer.\n   * @internal\n   * @param tile the current tile\n   * @param url the url string or function to retrieve the data\n   */\n  customLoader(tile, url: string, interceptor: AuthInterceptor) {\n    const alteredUrlWithKeyAuth = interceptor.alterUrlWithKeyAuth(url);\n    let modifiedUrl = url;\n    if (alteredUrlWithKeyAuth) {\n      modifiedUrl = alteredUrlWithKeyAuth;\n    }\n    tile.getImage().src = modifiedUrl;\n  }\n\n  public init(map: MapBase | undefined) {\n    if (map === undefined) {\n      this.watcher.unsubscribe();\n    } else {\n      this.watcher.subscribe(() => void 1);\n    }\n    super.init(map);\n  }\n\n  remove(): void {\n    this.watcher.unsubscribe();\n    super.remove();\n  }\n}\n","import { AuthInterceptor } from '@igo2/auth';\nimport { MessageService } from '@igo2/core/message';\n\nimport VectorTile from 'ol/VectorTile';\nimport olLayerVectorTile from 'ol/layer/VectorTile';\nimport olSourceVectorTile from 'ol/source/VectorTile';\n\nimport { MVTDataSource } from '../../../datasource/shared/datasources/mvt-datasource';\nimport type { MapBase } from '../../../map/shared/map.abstract';\nimport { TileWatcher } from '../../utils/tile-watcher';\nimport { Layer } from './layer';\nimport { LayerType } from './layer.interface';\nimport { VectorTileLayerOptions } from './vectortile-layer.interface';\n\nexport class VectorTileLayer extends Layer {\n  type: LayerType = 'vector';\n  declare public dataSource: MVTDataSource;\n  declare public options: VectorTileLayerOptions;\n  declare public ol: olLayerVectorTile;\n\n  private watcher: TileWatcher;\n\n  constructor(\n    options: VectorTileLayerOptions,\n    public messageService?: MessageService,\n    public authInterceptor?: AuthInterceptor\n  ) {\n    super(options, messageService, authInterceptor);\n    this.watcher = new TileWatcher(this);\n    this.status$ = this.watcher.status$;\n  }\n\n  protected createOlLayer(): olLayerVectorTile {\n    const olOptions = Object.assign({}, this.options, {\n      source: this.options.source.ol as olSourceVectorTile\n    });\n\n    const vectorTile = new olLayerVectorTile(olOptions);\n    const vectorTileSource = vectorTile.getSource() as olSourceVectorTile;\n\n    vectorTileSource.setTileLoadFunction((tile: VectorTile, url: string) => {\n      const loader = this.customLoader(\n        url,\n        tile.getFormat(),\n        this.authInterceptor,\n        tile.onLoad.bind(tile)\n      );\n      if (loader) {\n        tile.setLoader(loader);\n      }\n    });\n\n    return vectorTile;\n  }\n\n  /**\n   * Custom loader for vector tile layer. Modified from the loadFeaturesXhr function in ol\\featureloader.js\n   * @internal\n   * @param url the url string or function to retrieve the data\n   * @param format the format of the tile\n   * @param interceptor the interceptor of the data\n   * @param success On success event action to trigger\n   * @param failure On failure event action to trigger TODO\n   */\n  customLoader(url, format, interceptor, success, failure?) {\n    return (extent, resolution, projection) => {\n      const xhr = new XMLHttpRequest();\n      let modifiedUrl = url;\n      if (typeof url !== 'function') {\n        const alteredUrlWithKeyAuth = interceptor.alterUrlWithKeyAuth(url);\n        if (alteredUrlWithKeyAuth) {\n          modifiedUrl = alteredUrlWithKeyAuth;\n        }\n      } else {\n        modifiedUrl = url(extent, resolution, projection);\n      }\n      xhr.open('GET', modifiedUrl);\n      if (interceptor) {\n        interceptor.interceptXhr(xhr, modifiedUrl);\n      }\n\n      if (format.getType() === 'arraybuffer') {\n        xhr.responseType = 'arraybuffer';\n      }\n      xhr.onload = () => {\n        if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {\n          const type = format.getType();\n          let source;\n          if (type === 'json' || type === 'text') {\n            source = xhr.responseText;\n          } else if (type === 'xml') {\n            source = xhr.responseXML;\n            if (!source) {\n              source = new DOMParser().parseFromString(\n                xhr.responseText,\n                'application/xml'\n              );\n            }\n          } else if (type === 'arraybuffer') {\n            source = xhr.response;\n          }\n          if (source) {\n            success.call(\n              this,\n              format.readFeatures(source, {\n                extent,\n                featureProjection: projection\n              }),\n              format.readProjection(source)\n            );\n          } else {\n            // TODO\n            failure.call(this);\n          }\n        } else {\n          // TODO\n          failure.call(this);\n        }\n      };\n      xhr.onerror = () => {\n        // TODO\n        failure.call(this);\n      };\n      xhr.send();\n    };\n  }\n\n  public init(map: MapBase | undefined) {\n    if (map === undefined) {\n      this.watcher.unsubscribe();\n    } else {\n      this.watcher.subscribe(() => void 1);\n    }\n    super.init(map);\n  }\n\n  remove(): void {\n    this.watcher.unsubscribe();\n    super.remove();\n  }\n}\n","import { uuid } from '@igo2/utils';\n\nimport { Group } from 'ol/layer.js';\n\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\n\nimport type { MapBase } from '../../../map/shared/map.abstract';\nimport { type AnyLayer } from './any-layer';\nimport { LayerGroupBase } from './layer-base';\nimport { type LayerGroupOptions } from './layer-group.interface';\n\nconst ID_PREFIX = 'local-group_';\n\nexport class LayerGroup extends LayerGroupBase {\n  parent: LayerGroup;\n  declare ol: Group;\n  expanded: boolean;\n  private isInResolutionsRange$$: Subscription;\n  readonly isInResolutionsRange$ = new BehaviorSubject(true);\n\n  get saveableOptions(): Partial<LayerGroupOptions> {\n    return {\n      ...super.saveableOptions,\n      id: String(this.options.id).includes(ID_PREFIX) ? null : this.options.id,\n      type: this.options.type,\n      children: [...this.children]\n        .map((layer) => layer.saveableOptions)\n        .filter(Boolean),\n      expanded: this.expanded\n    };\n  }\n\n  get descendants(): AnyLayer[] {\n    return this._getDescendants();\n  }\n\n  get descendantsLevel(): number {\n    return this._getDescendantsLevel();\n  }\n\n  constructor(\n    public children: AnyLayer[] | null,\n    public options: LayerGroupOptions\n  ) {\n    super(options);\n\n    this.children = children ?? [];\n\n    this.expanded = options.expanded === undefined ? false : options.expanded;\n\n    if (!options.id) {\n      options.id = ID_PREFIX + uuid();\n    }\n\n    this.ol = this.createOlLayer();\n\n    super.afterCreated();\n  }\n\n  init(map: MapBase): void {\n    super.init(map);\n    this.children.forEach((child) => child.init(map));\n  }\n\n  add(parent?: LayerGroupBase): void {\n    super.add(parent);\n\n    this.setChildrenObserver();\n\n    this.children.forEach((layer) => {\n      layer.add(this);\n    });\n  }\n\n  addChild(...layers: AnyLayer[]): void {\n    this.ol.getLayers().extend(layers.map((layer) => layer.ol));\n\n    layers.forEach((layer) => {\n      if (this.hasChildren(layer)) {\n        return;\n      }\n      layer.addParent(this);\n      this.children.push(layer);\n    });\n\n    this.setChildrenObserver();\n  }\n\n  remove(): void {\n    super.remove();\n    this.children.forEach((layer) => layer.remove());\n  }\n\n  removeChild(layer: AnyLayer): void {\n    this.ol.getLayers().remove(layer.ol);\n    const index = this.children.indexOf(layer);\n    if (index >= 0) {\n      this.children.splice(index, 1);\n    }\n    layer.parent = null;\n    layer.options.parentId = null;\n\n    this.setChildrenObserver();\n  }\n\n  isDescendant(layer: AnyLayer): boolean {\n    return this._getDescendants().some(\n      (descendant) => descendant.id === layer.id\n    );\n  }\n\n  private setChildrenObserver(): void {\n    this.isInResolutionsRange$$?.unsubscribe();\n\n    if (!this.children) {\n      return;\n    }\n\n    const observers = this.children.map((layer) => layer.isInResolutionsRange$);\n    this.isInResolutionsRange$$ = combineLatest(observers).subscribe(\n      (values) => {\n        this.isInResolutionsRange = values.some((value) => value);\n      }\n    );\n  }\n\n  protected createOlLayer(): Group {\n    return new Group({ properties: { title: this.title } });\n  }\n\n  private hasChildren(layer: AnyLayer): boolean {\n    return this.children.some((child) => child.id === layer.id);\n  }\n\n  /** recursive */\n  private _getDescendants(children = this.children): AnyLayer[] {\n    return children.reduce((list, child) => {\n      if (child instanceof LayerGroup) {\n        return list.concat(child, ...this._getDescendants(child.children));\n      } else {\n        return list.concat(child);\n      }\n    }, []);\n  }\n\n  /** recursive */\n  private _getDescendantsLevel(children = this.children): number {\n    return children.reduce((level, child) => {\n      if (child instanceof LayerGroup) {\n        level = level + 1;\n        const descendantLevel = this._getDescendantsLevel(child.children);\n        return level + descendantLevel;\n      }\n\n      return level;\n    }, 0);\n  }\n}\n","import { AsyncPipe, NgClass, NgFor, NgIf, NgStyle } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewChildren\n} from '@angular/core';\nimport type { QueryList } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { CollapseDirective } from '@igo2/common/collapsible';\nimport { SanitizeHtmlPipe } from '@igo2/common/custom-html';\nimport { ImageErrorDirective, SecureImagePipe } from '@igo2/common/image';\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Observable, Subscription, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { CapabilitiesService } from '../../datasource/shared/capabilities.service';\nimport {\n  Legend,\n  WMSDataSource,\n  WMSDataSourceOptions\n} from '../../datasource/shared/datasources';\nimport {\n  ItemStyleOptions,\n  Layer,\n  LegendMapViewOptions\n} from '../shared/layers';\n\n@Component({\n  selector: 'igo-layer-legend',\n  templateUrl: './layer-legend.component.html',\n  styleUrls: ['./layer-legend.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    NgFor,\n    MatListModule,\n    MatIconModule,\n    CollapseDirective,\n    NgClass,\n    MatFormFieldModule,\n    MatSelectModule,\n    MatTooltipModule,\n    FormsModule,\n    MatOptionModule,\n    ImageErrorDirective,\n    NgStyle,\n    AsyncPipe,\n    IgoLanguageModule,\n    SanitizeHtmlPipe\n  ]\n})\nexport class LayerLegendComponent implements OnInit, OnDestroy {\n  @Input() updateLegendOnResolutionChange = false;\n\n  /**\n   * Observable of the legend items\n   */\n  legendItems$ = new BehaviorSubject<Legend[]>([]);\n\n  /**\n   * Subscription to the map's resolution\n   */\n  private state$$: Subscription;\n\n  /**\n   * The available styles\n   */\n  public styles;\n\n  /**\n   * The style used to make the legend\n   */\n  public currentStyle;\n\n  /**\n   * The scale used to make the legend\n   */\n  private scale: number = undefined;\n\n  /**\n   * The extent used to make the legend\n   */\n  private view: LegendMapViewOptions = undefined;\n  /**\n   * Get list of images display\n   */\n  @ViewChildren('renderedLegend') renderedLegends: QueryList<ElementRef>;\n\n  /**\n   * List of size of images displayed\n   */\n  public imagesHeight: Record<string, number> = {};\n\n  @Input() layer: Layer;\n\n  /**\n   * if getLegendGraphic is authorized\n   */\n  public getLegend = true;\n\n  /**\n   * activeLegend\n   */\n\n  constructor(\n    private capabilitiesService: CapabilitiesService,\n    private languageService: LanguageService,\n    private configService: ConfigService,\n    private http: HttpClient,\n    private cdRef: ChangeDetectorRef\n  ) {}\n\n  /**\n   * On init, subscribe to the map's resolution and update the legend accordingly\n   */\n  ngOnInit() {\n    let lastlLegend = this.layer.legend;\n    this.styles = this.listStyles();\n    const sourceOptions = this.layer.options.source.options as any;\n    if (sourceOptions && sourceOptions.params && sourceOptions.params.STYLES) {\n      // if a styles is provided into the layers wms params\n      this.currentStyle = this.styles.find(\n        (style) => style.name === sourceOptions.params.STYLES\n      ).name;\n    } else if (!lastlLegend) {\n      // if no legend is manually provided\n      if (this.styles && this.styles.length > 1) {\n        this.currentStyle = this.styles[0].name;\n      }\n    } else if (this.styles && this.styles.length > 1) {\n      this.currentStyle = lastlLegend[0].currentStyle;\n    }\n    if (\n      typeof this.layer.options.legendOptions !== 'undefined' &&\n      this.layer.options.legendOptions.display === false\n    ) {\n      lastlLegend = [];\n    } else {\n      lastlLegend = this.layer.dataSource.getLegend();\n    }\n\n    if (\n      this.updateLegendOnResolutionChange ||\n      (sourceOptions as WMSDataSourceOptions).contentDependentLegend\n    ) {\n      const state$ = this.layer.map.viewController.state$;\n      this.state$$ = state$.subscribe(() => this.onViewControllerStateChange());\n    } else if (lastlLegend && lastlLegend.length !== 0) {\n      this.legendItems$.next(lastlLegend);\n      for (const legend of lastlLegend) {\n        this.getLegendGraphic(legend);\n      }\n    }\n  }\n\n  /**\n   * On destroy, unsubscribe to the map's view state\n   */\n  ngOnDestroy() {\n    if (this.state$$ !== undefined) {\n      this.state$$.unsubscribe();\n    }\n  }\n\n  getLegendGraphic(item: Legend) {\n    if (item.url) {\n      const secureIMG = new SecureImagePipe(this.http, this.configService);\n      secureIMG\n        .transform(item.url)\n        .pipe(\n          catchError((err) => {\n            if (err.error) {\n              err.error.caught = true;\n              this.getLegend = false;\n              this.cdRef.detectChanges();\n              return err;\n            }\n          })\n        )\n        .subscribe((obsLegGraph) => {\n          const idx = this.legendItems$.value.findIndex(\n            (leg) => leg.title === item.title\n          );\n          const legendGraph = obsLegGraph as string;\n          this.legendItems$.value[idx].imgGraphValue = legendGraph;\n          this.cdRef.detectChanges();\n        });\n    }\n  }\n\n  toggleLegendItem(collapsed: boolean, item: Legend) {\n    item.collapsed = collapsed;\n  }\n\n  private transfertToggleLegendItem(newLegends: Legend[]): Legend[] {\n    const outLegends: Legend[] = newLegends;\n    const lastLegends = this.layer.legend;\n    for (let i = 0; i < lastLegends.length; i++) {\n      outLegends[i].collapsed = lastLegends[i].collapsed;\n    }\n    return outLegends;\n  }\n\n  computeItemTitle(layerLegend): Observable<string> {\n    const layerOptions = this.layer.dataSource.options as any;\n    if (layerOptions.type !== 'wms') {\n      return of(layerLegend.title);\n    }\n\n    const layers = layerOptions.params.LAYERS.split(',');\n    const localLayerOptions = JSON.parse(JSON.stringify(layerOptions)); // to avoid to alter the original options.\n    localLayerOptions.params.LAYERS = layers.find(\n      (layer) => layer === layerLegend.title\n    );\n    return this.capabilitiesService.getWMSOptions(localLayerOptions).pipe(\n      map((wmsDataSourceOptions) => {\n        return wmsDataSourceOptions._layerOptionsFromSource.title;\n      })\n    );\n  }\n\n  /**\n   * On resolution change, compute the effective scale level and update the\n   * legend accordingly.\n   * @param resolution Map resolution\n   */\n  private onViewControllerStateChange() {\n    this.view = {\n      resolution: this.layer.map.viewController.getResolution(),\n      extent: this.layer.map.viewController.getExtent(),\n      projection: this.layer.map.viewController.getOlProjection().getCode(),\n      scale: this.layer.map.viewController.getScale(),\n      size: this.layer.map.ol.getSize()\n    } as LegendMapViewOptions;\n    this.updateLegend();\n  }\n\n  /**\n   * Update the legend with scale level and style define\n   */\n  private updateLegend() {\n    let legendItems = this.layer.dataSource.getLegend();\n    if (this.layer.legend && this.layer.legend.length > 1) {\n      legendItems = this.transfertToggleLegendItem(legendItems);\n    }\n    this.layer.legend = legendItems;\n\n    if (legendItems.length === 0 && this.legendItems$.value.length === 0) {\n      return;\n    }\n    this.legendItems$.next(legendItems);\n    for (const legend of this.legendItems$.value) {\n      this.getLegendGraphic(legend);\n    }\n  }\n\n  private listStyles() {\n    const layerOptions = this.layer.options;\n    if (layerOptions && layerOptions.legendOptions) {\n      const translate = this.languageService.translate;\n      const title = translate.instant('igo.geo.layer.legend.default');\n      let stylesAvailable = [{ name: '', title } as ItemStyleOptions];\n      if (layerOptions.legendOptions.stylesAvailable) {\n        stylesAvailable = stylesAvailable.concat(\n          layerOptions.legendOptions.stylesAvailable.filter(\n            (sA) =>\n              sA.name.normalize('NFD').replace(/[\\u0300-\\u036f]/gi, '') !==\n                'default' &&\n              sA.name.normalize('NFD').replace(/[\\u0300-\\u036f]/gi, '') !==\n                'defaut'\n          )\n        );\n      }\n      stylesAvailable\n        .filter((sa) => !sa.title)\n        .map((sa) => (sa.title = sa.name));\n      stylesAvailable.map(\n        (s) =>\n          (s.title =\n            s.title.charAt(0).toUpperCase() +\n            s.title.slice(1).replace(/_/g, ' '))\n      );\n      return stylesAvailable;\n    }\n    return;\n  }\n\n  onChangeStyle() {\n    this.updateLegend();\n    let STYLES = '';\n    if (this.layer.dataSource instanceof WMSDataSource) {\n      this.layer.dataSource.ol\n        .getParams()\n        .LAYERS.split(',')\n        .map(() => (STYLES += this.currentStyle + ','));\n      STYLES = STYLES.slice(0, -1);\n      this.layer.dataSource.ol.updateParams({ STYLES });\n    }\n  }\n\n  onLoadImage(id: string) {\n    let elemRef: HTMLImageElement;\n    if (this.renderedLegends.length === 1) {\n      elemRef = this.renderedLegends.first.nativeElement as HTMLImageElement;\n    } else {\n      elemRef = this.renderedLegends.find(\n        (renderedLegend) => renderedLegend.nativeElement.id === id\n      ).nativeElement as HTMLImageElement;\n    }\n    this.imagesHeight[id] = elemRef.height;\n  }\n}\n","<ng-container *ngIf=\"legendItems$ | async as items\">\n  <ng-container *ngIf=\"items.length; else noItems\">\n    <ng-container *ngFor=\"let item of items.slice().reverse()\" #renderedLegends>\n      <div *ngIf=\"getLegend; else noItems\">\n        <mat-list-item *ngIf=\"item.title\">\n          <mat-icon\n            id=\"legend-toggle\"\n            class=\"igo-chevron\"\n            matListItemIcon\n            igoCollapse\n            [target]=\"legend\"\n            [collapsed]=\"item.collapsed\"\n            (toggle)=\"toggleLegendItem($event, item)\"\n            >expand_less\n          </mat-icon>\n          <span matListItemTitle>{{ computeItemTitle(item) | async }} </span>\n        </mat-list-item>\n        <div\n          #legend\n          class=\"igo-layer-legend\"\n          [ngClass]=\"{ 'with-title': item.title }\"\n        >\n          <mat-form-field\n            *ngIf=\"currentStyle !== undefined\"\n            subscriptSizing=\"dynamic\"\n          >\n            <mat-select\n              tooltip-position=\"below\"\n              matTooltipShowDelay=\"500\"\n              [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n              [(ngModel)]=\"currentStyle\"\n              (selectionChange)=\"onChangeStyle()\"\n            >\n              <mat-option *ngFor=\"let style of styles\" [value]=\"style.name\">{{\n                style.title\n              }}</mat-option>\n            </mat-select>\n          </mat-form-field>\n          <div *ngIf=\"!item.collapsed\">\n            <div *ngIf=\"item.url\">\n              <img\n                igoImageError\n                *ngIf=\"item.imgGraphValue\"\n                [hideError]=\"true\"\n                #renderedLegend\n                id=\"{{ item.title }}\"\n                (load)=\"onLoadImage(item.title)\"\n                [src]=\"item.imgGraphValue\"\n                alt=\"{{ 'igo.geo.layer.legend.loadingLegendText' | translate }}\"\n              />\n              <small *ngIf=\"imagesHeight[item.title] < 16\">\n                {{ 'igo.geo.layer.legend.noLegendScale' | translate }}\n              </small>\n            </div>\n            <div\n              [ngStyle]=\"item.style\"\n              [innerHTML]=\"item.html | sanitizeHtml\"\n              *ngIf=\"item.html\"\n            ></div>\n          </div>\n        </div>\n      </div>\n    </ng-container>\n  </ng-container>\n\n  <ng-template #noItems>\n    <small>\n      {{ 'igo.geo.layer.legend.noLegendText' | translate }}\n    </small>\n  </ng-template>\n</ng-container>\n","import { AsyncPipe, NgClass, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { ConnectionState, NetworkService } from '@igo2/core/network';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { MetadataLayerOptions } from '../../metadata/shared/metadata.interface';\nimport { layerIsQueryable } from '../../query/shared/query.utils';\nimport { LayerLegendComponent } from '../layer-legend';\nimport { LayerViewerOptions } from '../layer-viewer/layer-viewer.interface';\nimport { LayerVisibilityButtonComponent } from '../layer-visibility-button';\nimport type { Layer } from '../shared/layers/layer';\nimport { TooltipType } from '../shared/layers/layer.interface';\n\n@Component({\n  selector: 'igo-layer-item',\n  templateUrl: './layer-item.component.html',\n  styleUrls: ['./layer-item.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatListModule,\n    NgIf,\n    MatCheckboxModule,\n    MatTooltipModule,\n    MatButtonModule,\n    MatIconModule,\n    MatBadgeModule,\n    NgClass,\n    LayerLegendComponent,\n    AsyncPipe,\n    IgoLanguageModule,\n    LayerVisibilityButtonComponent\n  ]\n})\nexport class LayerItemComponent implements OnInit, OnDestroy {\n  showLegend$ = new BehaviorSubject(true);\n  inResolutionRange$ = new BehaviorSubject(true);\n  queryBadgeHidden$ = new BehaviorSubject(true);\n  tooltipText: string;\n  state: ConnectionState;\n\n  private resolution$$: Subscription;\n  private network$$: Subscription;\n\n  @Input({ required: true }) layer: Layer;\n\n  /** Pass the visibility to trigger change detection */\n  @Input({ required: true }) visible: boolean;\n\n  @Input() selected: boolean;\n  @Input() selectionDisabled: boolean;\n\n  @Input() viewerOptions: LayerViewerOptions;\n\n  @Output() action = new EventEmitter<Layer>();\n  @Output() selectChange = new EventEmitter<boolean>();\n  @Output() visibilityChange = new EventEmitter<Event>(undefined);\n\n  @HostBinding('class.disabled') isDisabled: boolean;\n\n  get opacity() {\n    return this.layer.opacity * 100;\n  }\n  set opacity(opacity: number) {\n    this.layer.opacity = opacity / 100;\n  }\n\n  get visibilityTooltip() {\n    if (\n      this.viewerOptions.mode !== 'selection' &&\n      this.inResolutionRange$.getValue() === false\n    ) {\n      return 'igo.geo.layer.notInResolution';\n    } else {\n      return this.layer.visible && this.isDisabled\n        ? 'igo.geo.layer.group.hideChildren'\n        : this.layer.visible\n          ? 'igo.geo.layer.hideLayer'\n          : 'igo.geo.layer.showLayer';\n    }\n  }\n\n  constructor(private networkService: NetworkService) {}\n\n  ngOnInit() {\n    this.layer.displayed$.subscribe((displayed) => {\n      this.isDisabled = !displayed;\n    });\n    if (\n      this.layer.visible &&\n      this.viewerOptions?.legend?.showForVisibleLayers &&\n      this.layer.firstLoadComponent === true\n    ) {\n      this.layer.firstLoadComponent = false;\n      this.layer.legendCollapsed = false;\n    }\n\n    this.toggleLegend(this.layer.legendCollapsed);\n    this.updateQueryBadge();\n\n    const resolution$ = this.layer.map.viewController.resolution$;\n    this.resolution$$ = resolution$.subscribe(() => {\n      this.onResolutionChange();\n    });\n    this.tooltipText = this.computeTooltip();\n\n    this.network$$ = this.networkService\n      .currentState()\n      .subscribe((state: ConnectionState) => {\n        this.state = state;\n        this.onResolutionChange();\n      });\n  }\n\n  ngOnDestroy() {\n    this.resolution$$?.unsubscribe();\n    this.network$$?.unsubscribe();\n  }\n\n  toggleLegend(collapsed: boolean) {\n    this.layer.legendCollapsed = collapsed;\n    this.showLegend$.next(!collapsed);\n  }\n\n  toggleLegendOnClick() {\n    this.toggleLegend(this.showLegend$.value);\n  }\n\n  handleVisibilityChange(event: Event) {\n    event.stopPropagation();\n\n    if (this.viewerOptions.legend.showOnVisibilityChange) {\n      this.toggleLegend(!this.layer.visible);\n    }\n    this.updateQueryBadge();\n\n    this.visibilityChange.emit(event);\n  }\n\n  computeTooltip(): string {\n    const layerOptions = this.layer.options;\n    if (!layerOptions.tooltip) {\n      return this.layer.title;\n    }\n    const layerTooltip = layerOptions.tooltip;\n    const layerMetadata = (layerOptions as MetadataLayerOptions).metadata;\n    switch (layerOptions.tooltip.type) {\n      case TooltipType.TITLE:\n        return this.layer.title;\n      case TooltipType.ABSTRACT:\n        if (layerMetadata && layerMetadata.abstract) {\n          return layerMetadata.abstract;\n        } else {\n          return this.layer.title;\n        }\n      case TooltipType.CUSTOM:\n        if (layerTooltip && layerTooltip.text) {\n          return layerTooltip.text;\n        } else {\n          return this.layer.title;\n        }\n      default:\n        return this.layer.title;\n    }\n  }\n\n  private onResolutionChange() {\n    const inResolutionRange = this.layer.isInResolutionsRange;\n    if (\n      inResolutionRange === false &&\n      this.viewerOptions.legend.updateOnResolutionChange === true\n    ) {\n      this.toggleLegend(true);\n    }\n    this.inResolutionRange$.next(inResolutionRange);\n  }\n\n  private updateQueryBadge() {\n    const hidden =\n      this.viewerOptions.queryBadge === false ||\n      this.layer.visible === false ||\n      !layerIsQueryable(this.layer);\n    this.queryBadgeHidden$.next(hidden);\n  }\n\n  toggleLayerTool() {\n    this.action.emit(this.layer);\n  }\n\n  handleSelect(event: MatCheckboxChange): void {\n    this.selectChange.emit(event.checked);\n  }\n}\n","<div class=\"igo-layer-list-item\">\n  <div class=\"layer-content\">\n    <mat-checkbox\n      *ngIf=\"viewerOptions.mode === 'selection'\"\n      [checked]=\"selected\"\n      [disabled]=\"selectionDisabled\"\n      (change)=\"handleSelect($event)\"\n    >\n    </mat-checkbox>\n    <ng-content></ng-content>\n    <span\n      class=\"igo-layer-title\"\n      [matTooltip]=\"tooltipText\"\n      matTooltipShowDelay=\"500\"\n      (click)=\"toggleLegendOnClick()\"\n    >\n      {{ layer.title }}\n    </span>\n  </div>\n\n  <div class=\"list-actions\">\n    <div class=\"list-secondary-actions\">\n      <button\n        *ngIf=\"viewerOptions.mode !== 'selection'\"\n        class=\"actions-button\"\n        tooltip-position=\"below\"\n        matTooltipShowDelay=\"500\"\n        [matTooltip]=\"'igo.geo.layer.moreOptions' | translate\"\n        mat-icon-button\n        color=\"primary\"\n        (click)=\"toggleLayerTool()\"\n      >\n        <mat-icon>more_horiz</mat-icon>\n      </button>\n    </div>\n\n    <igo-layer-visibility-button\n      [layer]=\"layer\"\n      [tooltip]=\"visibilityTooltip\"\n      [disabled]=\"isDisabled\"\n      [inResolutionsRange]=\"layer.isInResolutionsRange$ | async\"\n      [showQueryBadge]=\"(queryBadgeHidden$ | async) === false\"\n      (visibilityChange)=\"handleVisibilityChange($event)\"\n    ></igo-layer-visibility-button>\n  </div>\n</div>\n\n<div *ngIf=\"showLegend$ | async\" class=\"igo-layer-legend-container\">\n  <igo-layer-legend\n    [layer]=\"layer\"\n    [updateLegendOnResolutionChange]=\"\n      viewerOptions.legend.updateOnResolutionChange\n    \"\n  >\n  </igo-layer-legend>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit\n} from '@angular/core';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ConnectionState, NetworkService } from '@igo2/core/network';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { MetadataLayerOptions } from '../../metadata/shared/metadata.interface';\nimport { LayerLegendComponent } from '../layer-legend/layer-legend.component';\nimport { Layer } from '../shared/layers/layer';\nimport { TooltipType } from '../shared/layers/layer.interface';\n\n@Component({\n  selector: 'igo-layer-legend-item',\n  templateUrl: './layer-legend-item.component.html',\n  styleUrls: ['./layer-legend-item.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [MatListModule, MatTooltipModule, LayerLegendComponent]\n})\nexport class LayerLegendItemComponent implements OnInit, OnDestroy {\n  inResolutionRange$ = new BehaviorSubject<boolean>(true);\n\n  tooltipText: string;\n\n  state: ConnectionState;\n\n  private resolution$$: Subscription;\n  private network$$: Subscription;\n\n  @Input() layer: Layer;\n\n  @Input() updateLegendOnResolutionChange = false;\n\n  constructor(private networkService: NetworkService) {}\n\n  ngOnInit() {\n    const resolution$ = this.layer.map.viewController.resolution$;\n    this.resolution$$ = resolution$.subscribe(() => {\n      this.onResolutionChange();\n    });\n    this.tooltipText = this.computeTooltip();\n\n    this.network$$ = this.networkService\n      .currentState()\n      .subscribe((state: ConnectionState) => {\n        this.state = state;\n        this.onResolutionChange();\n      });\n  }\n\n  ngOnDestroy() {\n    this.resolution$$.unsubscribe();\n    this.network$$.unsubscribe();\n  }\n\n  computeTooltip(): string {\n    const layerOptions = this.layer.options;\n    if (!layerOptions.tooltip) {\n      return this.layer.title;\n    }\n    const layerTooltip = layerOptions.tooltip;\n    const layerMetadata = (layerOptions as MetadataLayerOptions).metadata;\n    switch (layerOptions.tooltip.type) {\n      case TooltipType.TITLE:\n        return this.layer.title;\n      case TooltipType.ABSTRACT:\n        if (layerMetadata && layerMetadata.abstract) {\n          return layerMetadata.abstract;\n        } else {\n          return this.layer.title;\n        }\n      case TooltipType.CUSTOM:\n        if (layerTooltip && layerTooltip.text) {\n          return layerTooltip.text;\n        } else {\n          return this.layer.title;\n        }\n      default:\n        return this.layer.title;\n    }\n  }\n\n  private onResolutionChange() {\n    const inResolutionRange = this.layer.isInResolutionsRange;\n    this.inResolutionRange$.next(inResolutionRange);\n  }\n}\n","<mat-list-item class=\"igo-layer-list-item\">\n  <span\n    matListItemTitle\n    class=\"igo-layer-title\"\n    [matTooltip]=\"tooltipText\"\n    matTooltipShowDelay=\"500\"\n    >{{ layer.title }}</span\n  >\n</mat-list-item>\n\n<div #legend class=\"igo-layer-legend-container\">\n  <igo-layer-legend\n    [layer]=\"layer\"\n    [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\n  >\n  </igo-layer-legend>\n</div>\n","import { AsyncPipe, NgFor, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ListComponent, ListItemDirective } from '@igo2/common/list';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport {\n  BehaviorSubject,\n  EMPTY,\n  ReplaySubject,\n  Subscription,\n  timer\n} from 'rxjs';\nimport { debounce } from 'rxjs/operators';\n\nimport { LayerLegendItemComponent } from '../layer-legend-item/layer-legend-item.component';\nimport { AnyLayer } from '../shared/layers/any-layer';\nimport { isBaseLayer, isLayerItem, sortLayersByZindex } from '../utils';\n\n@Component({\n  selector: 'igo-layer-legend-list',\n  templateUrl: './layer-legend-list.component.html',\n  styleUrls: ['./layer-legend-list.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    MatSlideToggleModule,\n    MatTooltipModule,\n    MatDividerModule,\n    ListComponent,\n    NgFor,\n    LayerLegendItemComponent,\n    ListItemDirective,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class LayerLegendListComponent implements OnInit, OnDestroy {\n  orderable = true;\n  hasVisibleOrInRangeLayers$ = new BehaviorSubject<boolean>(true);\n  hasVisibleAndNotInRangeLayers$ = new BehaviorSubject<boolean>(true);\n  layersInUi$ = new BehaviorSubject<AnyLayer[]>([]);\n  layers$ = new BehaviorSubject<AnyLayer[]>([]);\n  showAllLegend = false;\n\n  public change$ = new ReplaySubject<void>(1);\n  private change$$: Subscription;\n\n  @Input() layers: AnyLayer[];\n\n  @Input() excludeBaseLayers = false;\n\n  @Input() updateLegendOnResolutionChange = false;\n\n  @Input() allowShowAllLegends = false;\n\n  @Input() showAllLegendsValue = false;\n\n  @Output() allLegendsShown = new EventEmitter<boolean>(false);\n\n  isLayerItem = isLayerItem;\n\n  ngOnInit(): void {\n    this.change$$ = this.change$\n      .pipe(\n        debounce(() => {\n          return this.layers.length === 0 ? EMPTY : timer(50);\n        })\n      )\n      .subscribe(() => {\n        const layers = this.computeShownLayers(this.layers.slice(0));\n        this.layers$.next(layers);\n        this.hasVisibleOrInRangeLayers$.next(\n          this.layers\n            .slice(0)\n            .filter((layer) => !isBaseLayer(layer))\n            .filter((layer) => layer.displayed).length > 0\n        );\n        this.hasVisibleAndNotInRangeLayers$.next(\n          this.layers\n            .slice(0)\n            .filter((layer) => !isBaseLayer(layer))\n            .filter((layer) => layer.visible && !layer.isInResolutionsRange)\n            .length > 0\n        );\n\n        this.layersInUi$.next(\n          this.layers\n            .slice(0)\n            .filter(\n              (layer) =>\n                layer.showInLayerList !== false &&\n                (!this.excludeBaseLayers || !isBaseLayer(layer))\n            )\n        );\n      });\n  }\n\n  ngOnDestroy() {\n    this.change$$.unsubscribe();\n  }\n  private next() {\n    this.change$.next();\n  }\n  private computeShownLayers(layers: AnyLayer[]) {\n    let shownLayers = layers.filter((layer) => layer.displayed);\n    if (this.showAllLegendsValue) {\n      shownLayers = layers;\n    }\n    return sortLayersByZindex(shownLayers, 'desc');\n  }\n\n  toggleShowAllLegends(toggle: boolean) {\n    this.showAllLegendsValue = toggle;\n    this.next();\n    this.allLegendsShown.emit(toggle);\n  }\n}\n","<div class=\"layer-legend-list-container\">\n  <mat-slide-toggle\n    tooltip-position=\"above\"\n    matTooltipShowDelay=\"500\"\n    [matTooltip]=\"'igo.geo.layer.legend.showAll' | translate\"\n    [checked]=\"showAllLegendsValue\"\n    class=\"mat-typography\"\n    *ngIf=\"(layersInUi$ | async).length && allowShowAllLegends\"\n    [labelPosition]=\"'before'\"\n    (change)=\"toggleShowAllLegends($event.checked)\"\n  >\n    {{ 'igo.geo.layer.legend.showAll' | translate }}\n  </mat-slide-toggle>\n  <mat-divider\n    *ngIf=\"(layersInUi$ | async).length && allowShowAllLegends\"\n  ></mat-divider>\n  <igo-list [navigation]=\"false\" [selection]=\"false\">\n    <ng-template ngFor let-layer let-i=\"index\" [ngForOf]=\"layers$ | async\">\n      <igo-layer-legend-item\n        *ngIf=\"!(excludeBaseLayers && isLayerItem(layer) && layer.baseLayer)\"\n        igoListItem\n        [layer]=\"$any(layer)\"\n        [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\n      >\n      </igo-layer-legend-item>\n    </ng-template>\n  </igo-list>\n  <p\n    class=\"layers-empty mat-typography\"\n    *ngIf=\"\n      !showAllLegendsValue &&\n      (layersInUi$ | async).length &&\n      (hasVisibleOrInRangeLayers$ | async) === false &&\n      (hasVisibleAndNotInRangeLayers$ | async) === false &&\n      allowShowAllLegends\n    \"\n  >\n    {{ 'igo.geo.layer.legend.noLayersVisibleWithShowAllButton' | translate }}\n  </p>\n  <p\n    class=\"layers-empty mat-typography\"\n    *ngIf=\"\n      !showAllLegendsValue &&\n      (layersInUi$ | async).length &&\n      (hasVisibleOrInRangeLayers$ | async) === false &&\n      (hasVisibleAndNotInRangeLayers$ | async) &&\n      allowShowAllLegends\n    \"\n  >\n    {{\n      'igo.geo.layer.legend.noLayersVisibleWithShowAllButtonButZoom' | translate\n    }}\n  </p>\n  <p\n    class=\"layers-empty mat-typography\"\n    *ngIf=\"\n      (layersInUi$ | async).length &&\n      (hasVisibleOrInRangeLayers$ | async) === false &&\n      (hasVisibleAndNotInRangeLayers$ | async) === false &&\n      !allowShowAllLegends\n    \"\n  >\n    {{ 'igo.geo.layer.legend.noLayersVisible' | translate }}\n  </p>\n  <p\n    class=\"layers-empty mat-typography\"\n    *ngIf=\"\n      (layersInUi$ | async).length &&\n      (hasVisibleOrInRangeLayers$ | async) === false &&\n      (hasVisibleAndNotInRangeLayers$ | async) &&\n      !allowShowAllLegends\n    \"\n  >\n    {{ 'igo.geo.layer.legend.noLayersVisibleButZoom' | translate }}\n  </p>\n</div>\n","import { Directive, OnDestroy, OnInit, Self } from '@angular/core';\n\nimport { Subscription, combineLatest } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { MapService } from '../../map/shared/map.service';\nimport { AnyLayer } from '../shared/layers/any-layer';\nimport { Layer } from '../shared/layers/layer';\nimport { isLayerItem } from '../utils';\nimport { LayerLegendListComponent } from './layer-legend-list.component';\n\n@Directive({\n  selector: '[igoLayerLegendListBinding]',\n  standalone: true\n})\nexport class LayerLegendListBindingDirective implements OnInit, OnDestroy {\n  private component: LayerLegendListComponent;\n  private layersOrResolutionChange$$: Subscription;\n  layersVisibility$$: Subscription;\n\n  constructor(\n    @Self() component: LayerLegendListComponent,\n    private mapService: MapService\n  ) {\n    this.component = component;\n  }\n\n  ngOnInit() {\n    // Override input layers\n    this.component.layers = [];\n    this.layersOrResolutionChange$$ = combineLatest([\n      this.mapService.getMap().layerController.all$,\n      this.mapService.getMap().viewController.resolution$\n    ])\n      .pipe(debounceTime(10))\n      .subscribe((bunch: [AnyLayer[], number]) => {\n        const shownLayers = bunch[0].filter((layer) => {\n          return isLayerItem(layer) && layer.showInLayerList === true;\n        }) as Layer[];\n        this.component.layers = shownLayers;\n\n        this.layersVisibility$$ = combineLatest(\n          shownLayers.map((layer) => layer.visible$)\n        ).subscribe(() => this.component.change$.next());\n      });\n  }\n\n  ngOnDestroy() {\n    this.layersOrResolutionChange$$.unsubscribe();\n    if (this.layersVisibility$$ !== undefined) {\n      this.layersVisibility$$.unsubscribe();\n      this.layersVisibility$$ = undefined;\n    }\n  }\n}\n","import { NgIf } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  FloatLabelType,\n  MatFormFieldModule\n} from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { debounceTime } from 'rxjs';\n\n@Component({\n  selector: 'igo-layer-search',\n  templateUrl: './layer-search.component.html',\n  styleUrls: ['./layer-search.component.scss'],\n  standalone: true,\n  imports: [\n    NgIf,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatButtonModule,\n    MatInputModule,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class LayerSearchComponent implements OnInit {\n  control = new FormControl();\n\n  @Input() initialValue: string;\n  @Input() floatLabel: FloatLabelType;\n  @Input() placeholder: string;\n  @Input() tooltip: string;\n\n  @Output() searchChange = new EventEmitter<string | undefined>();\n\n  ngOnInit(): void {\n    if (this.initialValue) {\n      this.control.setValue(this.initialValue, {\n        emitEvent: false\n      });\n    }\n\n    this.control.valueChanges.pipe(debounceTime(300)).subscribe((value) => {\n      this.searchChange.emit(value);\n    });\n  }\n\n  clearTerm(): void {\n    this.control.reset();\n  }\n}\n","<mat-form-field [floatLabel]=\"floatLabel\" subscriptSizing=\"dynamic\">\n  <input\n    matInput\n    [placeholder]=\"placeholder | translate\"\n    [matTooltip]=\"tooltip | translate\"\n    [matTooltipDisabled]=\"!tooltip\"\n    matTooltipShowDelay=\"500\"\n    type=\"text\"\n    [formControl]=\"control\"\n  />\n  <button\n    *ngIf=\"control.value\"\n    matSuffix\n    mat-icon-button\n    aria-label=\"Clear\"\n    color=\"warn\"\n    (click)=\"clearTerm()\"\n  >\n    <mat-icon>close</mat-icon>\n  </button>\n</mat-form-field>\n","import { Observable } from 'rxjs';\n\nimport {\n  ArcGISRestDataSourceOptions,\n  ArcGISRestImageDataSourceOptions,\n  TileArcGISRestDataSourceOptions,\n  WMSDataSourceOptions\n} from '../datasources';\n\nexport abstract class OptionsService {\n  abstract getWMSOptions(\n    _baseOptions: WMSDataSourceOptions,\n    detailedContextUri?: string\n  ): Observable<WMSDataSourceOptions>;\n  abstract getArcgisRestOptions(\n    _baseOptions:\n      | ArcGISRestDataSourceOptions\n      | ArcGISRestImageDataSourceOptions\n      | TileArcGISRestDataSourceOptions,\n    detailedContextUri?: string\n  ): Observable<\n    | ArcGISRestDataSourceOptions\n    | ArcGISRestImageDataSourceOptions\n    | TileArcGISRestDataSourceOptions\n  >;\n}\n","import { Injectable, Optional } from '@angular/core';\n\nimport { AuthInterceptor } from '@igo2/auth';\nimport { LanguageService } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { BehaviorSubject, Observable, forkJoin, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { CapabilitiesService } from './capabilities.service';\nimport {\n  AnyDataSourceOptions,\n  ArcGISRestDataSource,\n  ArcGISRestDataSourceOptions,\n  ArcGISRestImageDataSourceOptions,\n  CartoDataSource,\n  CartoDataSourceOptions,\n  ClusterDataSource,\n  ClusterDataSourceOptions,\n  DataSource,\n  FeatureDataSource,\n  FeatureDataSourceOptions,\n  ImageArcGISRestDataSource,\n  MVTDataSource,\n  MVTDataSourceOptions,\n  OSMDataSource,\n  OSMDataSourceOptions,\n  TileArcGISRestDataSource,\n  TileArcGISRestDataSourceOptions,\n  TileDebugDataSource,\n  TileDebugDataSourceOptions,\n  WFSDataSource,\n  WFSDataSourceOptions,\n  WMSDataSource,\n  WMSDataSourceOptions,\n  WMTSDataSource,\n  WMTSDataSourceOptions,\n  WebSocketDataSource,\n  XYZDataSource,\n  XYZDataSourceOptions\n} from './datasources';\nimport { WFSService } from './datasources/wfs.service';\nimport { OptionsService } from './options/options.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DataSourceService {\n  public datasources$ = new BehaviorSubject<DataSource[]>([]);\n\n  constructor(\n    private capabilitiesService: CapabilitiesService,\n    @Optional() private optionsService: OptionsService,\n    private wfsDataSourceService: WFSService,\n    private languageService: LanguageService,\n    private messageService: MessageService,\n    private authInterceptor?: AuthInterceptor\n  ) {}\n\n  createAsyncDataSource(\n    context: AnyDataSourceOptions,\n    detailedContextUri?: string\n  ): Observable<DataSource> {\n    if (!context.type) {\n      console.error(context);\n      throw new Error('Datasource needs a type');\n    }\n    let dataSource;\n    switch (context.type.toLowerCase()) {\n      case 'osm':\n        dataSource = this.createOSMDataSource(context as OSMDataSourceOptions);\n        break;\n      case 'vector':\n        dataSource = this.createFeatureDataSource(\n          context as FeatureDataSourceOptions\n        );\n        break;\n      case 'wfs':\n        dataSource = this.createWFSDataSource(context as WFSDataSourceOptions);\n        break;\n      case 'wms': {\n        const wmsContext = context as WMSDataSourceOptions;\n        ObjectUtils.removeDuplicateCaseInsensitive(wmsContext.params);\n        dataSource = this.createWMSDataSource(wmsContext, detailedContextUri);\n        break;\n      }\n      case 'wmts':\n        dataSource = this.createWMTSDataSource(\n          context as WMTSDataSourceOptions\n        );\n        break;\n      case 'xyz':\n        dataSource = this.createXYZDataSource(context as XYZDataSourceOptions);\n        break;\n      case 'tiledebug':\n        dataSource = this.createTileDebugDataSource(\n          context as TileDebugDataSource\n        );\n        break;\n      case 'carto':\n        dataSource = this.createCartoDataSource(\n          context as CartoDataSourceOptions\n        );\n        break;\n      case 'arcgisrest':\n        dataSource = this.createArcGISRestDataSource(\n          context as ArcGISRestDataSourceOptions,\n          detailedContextUri\n        );\n        break;\n      case 'imagearcgisrest':\n        dataSource = this.createArcGISRestImageDataSource(\n          context as ArcGISRestImageDataSourceOptions,\n          detailedContextUri\n        );\n        break;\n      case 'websocket':\n        dataSource = this.createWebSocketDataSource(\n          context as FeatureDataSourceOptions\n        );\n        break;\n      case 'mvt':\n        dataSource = this.createMVTDataSource(context as MVTDataSourceOptions);\n        break;\n      case 'tilearcgisrest':\n        dataSource = this.createTileArcGISRestDataSource(\n          context as TileArcGISRestDataSourceOptions,\n          detailedContextUri\n        );\n        break;\n      case 'cluster':\n        dataSource = this.createClusterDataSource(\n          context as ClusterDataSourceOptions\n        );\n        break;\n      default:\n        console.error(context);\n        throw new Error('Invalid datasource type');\n    }\n\n    this.datasources$.next(this.datasources$.value.concat([dataSource]));\n\n    return dataSource;\n  }\n\n  private createOSMDataSource(\n    context: OSMDataSourceOptions\n  ): Observable<OSMDataSource> {\n    return new Observable((d) => d.next(new OSMDataSource(context)));\n  }\n\n  private createFeatureDataSource(\n    context: FeatureDataSourceOptions\n  ): Observable<FeatureDataSource> {\n    return new Observable((d) => d.next(new FeatureDataSource(context)));\n  }\n\n  private createWebSocketDataSource(\n    context: FeatureDataSourceOptions\n  ): Observable<WebSocketDataSource> {\n    return new Observable((d) => d.next(new WebSocketDataSource(context)));\n  }\n\n  private createWFSDataSource(\n    context: WFSDataSourceOptions\n  ): Observable<WFSDataSource> {\n    return new Observable((d) =>\n      d.next(\n        new WFSDataSource(\n          context,\n          this.wfsDataSourceService,\n          this.authInterceptor\n        )\n      )\n    );\n  }\n\n  private createWMSDataSource(\n    context: WMSDataSourceOptions,\n    detailedContextUri?: string\n  ): Observable<any> {\n    const observables = [];\n    if (context.optionsFromCapabilities && window.navigator.onLine) {\n      observables.push(\n        this.capabilitiesService.getWMSOptions(context).pipe(\n          catchError((e) => {\n            this.messageService.error(\n              'igo.geo.dataSource.unavailable',\n              'igo.geo.dataSource.unavailableTitle',\n              undefined,\n              { value: context.params.LAYERS }\n            );\n            throw e;\n          })\n        )\n      );\n    }\n\n    if (\n      this.optionsService &&\n      context.optionsFromApi &&\n      window.navigator.onLine\n    ) {\n      observables.push(\n        this.optionsService.getWMSOptions(context, detailedContextUri).pipe(\n          catchError((e) => {\n            e.error.toDisplay = true;\n            e.error.title = this.languageService.translate.instant(\n              'igo.geo.dataSource.unavailableTitle'\n            );\n            e.error.message = this.languageService.translate.instant(\n              'igo.geo.dataSource.optionsApiUnavailable'\n            );\n            return of({});\n          })\n        )\n      );\n    }\n\n    observables.push(of(context));\n\n    return forkJoin(observables).pipe(\n      map((options: WMSDataSourceOptions[]) => {\n        const optionsMerged = options.reduce((a, b) =>\n          ObjectUtils.mergeDeep(a, b)\n        );\n        return new WMSDataSource(optionsMerged, this.wfsDataSourceService);\n      }),\n      catchError(() => {\n        return of(undefined);\n      })\n    );\n  }\n\n  private createWMTSDataSource(\n    context: WMTSDataSourceOptions\n  ): Observable<WMTSDataSource> {\n    if (context.optionsFromCapabilities && window.navigator.onLine) {\n      return this.capabilitiesService.getWMTSOptions(context).pipe(\n        map((options: WMTSDataSourceOptions) => {\n          return options ? new WMTSDataSource(options) : undefined;\n        }),\n        catchError(() => {\n          this.messageService.error(\n            'igo.geo.dataSource.unavailable',\n            'igo.geo.dataSource.unavailableTitle',\n            undefined,\n            { value: context.layer }\n          );\n          return of(undefined);\n        })\n      );\n    }\n\n    return new Observable((d) => d.next(new WMTSDataSource(context)));\n  }\n\n  private createXYZDataSource(\n    context: XYZDataSourceOptions\n  ): Observable<XYZDataSource> {\n    return new Observable((d) => d.next(new XYZDataSource(context)));\n  }\n\n  private createTileDebugDataSource(\n    context: TileDebugDataSourceOptions\n  ): Observable<TileDebugDataSource> {\n    return new Observable((d) => d.next(new TileDebugDataSource(context)));\n  }\n\n  private createCartoDataSource(\n    context: CartoDataSourceOptions\n  ): Observable<CartoDataSource> {\n    if (context.mapId) {\n      return this.capabilitiesService\n        .getCartoOptions(context)\n        .pipe(\n          map((options: CartoDataSourceOptions) => new CartoDataSource(options))\n        );\n    }\n    return new Observable((d) => d.next(new CartoDataSource(context)));\n  }\n\n  private createArcGISRestDataSource(\n    context: ArcGISRestDataSourceOptions,\n    detailedContextUri?: string\n  ): Observable<ArcGISRestDataSource> {\n    const observables = [];\n    if (window.navigator.onLine) {\n      observables.push(\n        this.capabilitiesService.getArcgisOptions(context).pipe(\n          catchError((e) => {\n            this.messageService.error(\n              'igo.geo.dataSource.unavailable',\n              'igo.geo.dataSource.unavailableTitle',\n              undefined,\n              { value: context.layer }\n            );\n            throw e;\n          })\n        )\n      );\n    }\n    if (\n      this.optionsService &&\n      context.optionsFromApi &&\n      window.navigator.onLine\n    ) {\n      observables.push(\n        this.optionsService\n          .getArcgisRestOptions(context, detailedContextUri)\n          .pipe(\n            catchError((e) => {\n              e.error.toDisplay = true;\n              e.error.title = this.languageService.translate.instant(\n                'igo.geo.dataSource.unavailableTitle'\n              );\n              e.error.message = this.languageService.translate.instant(\n                'igo.geo.dataSource.optionsApiUnavailable'\n              );\n              return of({});\n            })\n          )\n      );\n    }\n    observables.push(of(context));\n    return forkJoin(observables).pipe(\n      map((options: ArcGISRestDataSource[]) => {\n        const optionsMerged = options.reduce((a, b) =>\n          ObjectUtils.mergeDeep(a, b)\n        );\n        return new ArcGISRestDataSource(optionsMerged);\n      }),\n      catchError(() => {\n        return of(undefined);\n      })\n    );\n  }\n\n  private createArcGISRestImageDataSource(\n    context: ArcGISRestImageDataSourceOptions,\n    detailedContextUri?: string\n  ): Observable<ArcGISRestImageDataSourceOptions> {\n    const observables = [];\n\n    if (window.navigator.onLine) {\n      observables.push(\n        this.capabilitiesService.getImageArcgisOptions(context).pipe(\n          catchError((e) => {\n            this.messageService.error(\n              'igo.geo.dataSource.unavailable',\n              'igo.geo.dataSource.unavailableTitle',\n              undefined,\n              { value: context.params.LAYERS }\n            );\n            throw e;\n          })\n        )\n      );\n    }\n    if (\n      this.optionsService &&\n      context.optionsFromApi &&\n      window.navigator.onLine\n    ) {\n      observables.push(\n        this.optionsService\n          .getArcgisRestOptions(context, detailedContextUri)\n          .pipe(\n            catchError((e) => {\n              e.error.toDisplay = true;\n              e.error.title = this.languageService.translate.instant(\n                'igo.geo.dataSource.unavailableTitle'\n              );\n              e.error.message = this.languageService.translate.instant(\n                'igo.geo.dataSource.optionsApiUnavailable'\n              );\n              return of({});\n            })\n          )\n      );\n    }\n    observables.push(of(context));\n    return forkJoin(observables).pipe(\n      map((options: ImageArcGISRestDataSource[]) => {\n        const optionsMerged = options.reduce((a, b) =>\n          ObjectUtils.mergeDeep(a, b)\n        );\n        return new ImageArcGISRestDataSource(optionsMerged);\n      }),\n      catchError(() => {\n        return of(undefined);\n      })\n    );\n  }\n\n  private createTileArcGISRestDataSource(\n    context: TileArcGISRestDataSourceOptions,\n    detailedContextUri?: string\n  ): Observable<TileArcGISRestDataSource> {\n    const observables = [];\n    if (window.navigator.onLine) {\n      observables.push(\n        this.capabilitiesService.getImageArcgisOptions(context).pipe(\n          catchError((e) => {\n            this.messageService.error(\n              'igo.geo.dataSource.unavailable',\n              'igo.geo.dataSource.unavailableTitle',\n              undefined,\n              { value: context.params.LAYERS }\n            );\n            throw e;\n          })\n        )\n      );\n    }\n    if (\n      this.optionsService &&\n      context.optionsFromApi &&\n      window.navigator.onLine\n    ) {\n      observables.push(\n        this.optionsService\n          .getArcgisRestOptions(context, detailedContextUri)\n          .pipe(\n            catchError((e) => {\n              e.error.toDisplay = true;\n              e.error.title = this.languageService.translate.instant(\n                'igo.geo.dataSource.unavailableTitle'\n              );\n              e.error.message = this.languageService.translate.instant(\n                'igo.geo.dataSource.optionsApiUnavailable'\n              );\n              return of({});\n            })\n          )\n      );\n    }\n    observables.push(of(context));\n    return forkJoin(observables).pipe(\n      map((options: TileArcGISRestDataSource[]) => {\n        const optionsMerged = options.reduce((a, b) =>\n          ObjectUtils.mergeDeep(a, b)\n        );\n        return new TileArcGISRestDataSource(optionsMerged);\n      }),\n      catchError(() => {\n        return of(undefined);\n      })\n    );\n  }\n\n  private createMVTDataSource(\n    context: MVTDataSourceOptions\n  ): Observable<MVTDataSource> {\n    return new Observable((d) => d.next(new MVTDataSource(context)));\n  }\n\n  private createClusterDataSource(\n    context: ClusterDataSourceOptions\n  ): Observable<ClusterDataSource> {\n    return new Observable((d) => d.next(new ClusterDataSource(context)));\n  }\n}\n","import { Injectable, Optional } from '@angular/core';\n\nimport { NgxIndexedDBService } from 'ngx-indexed-db';\nimport { Observable, Subject, of } from 'rxjs';\nimport { concatMap, first } from 'rxjs/operators';\n\nimport { LayerDBData } from './layerDB.interface';\n\n@Injectable()\nexport class LayerDBService {\n  readonly dbName: string = 'layerData';\n\n  constructor(@Optional() private ngxIndexedDBService: NgxIndexedDBService) {}\n\n  /**\n   * This method allow to update the stored layer into the indexeddb (layerData)\n   * @param layerDBData\n   * @returns\n   */\n  update(layerDBData: LayerDBData): Observable<any> {\n    const subject = new Subject<LayerDBData>();\n    this.ngxIndexedDBService\n      ?.getByID(this.dbName, layerDBData.layerId)\n      .pipe(\n        first(),\n        concatMap((dbObject: LayerDBData) => {\n          if (!dbObject) {\n            return this.ngxIndexedDBService?.add(this.dbName, layerDBData);\n          } else {\n            return this.customUpdate(layerDBData);\n          }\n        })\n      )\n      .subscribe((response) => {\n        subject.next(response);\n        subject.complete();\n      });\n    return subject;\n  }\n\n  private customUpdate(layerDBData: LayerDBData): Observable<LayerDBData> {\n    const subject = new Subject<LayerDBData>();\n    const deleteRequest = this.ngxIndexedDBService?.deleteByKey(\n      this.dbName,\n      layerDBData.layerId\n    );\n    deleteRequest\n      .pipe(\n        concatMap((isDeleted) =>\n          isDeleted\n            ? this.ngxIndexedDBService?.add(this.dbName, layerDBData)\n            : of(undefined)\n        )\n      )\n      .subscribe((object) => {\n        if (object) {\n          subject.next(object);\n        }\n        subject.complete();\n      });\n    return subject;\n  }\n\n  /**\n   * This method retrieve an idb layer definition\n   * @param layerId\n   * @returns\n   */\n  getByID(layerId: string): Observable<LayerDBData> {\n    return this.ngxIndexedDBService?.getByID(this.dbName, layerId);\n  }\n\n  /**\n   * This method delete an idb layer definition\n   * @param layerId\n   * @returns\n   */\n  deleteByKey(layerId: string): Observable<boolean> {\n    return this.ngxIndexedDBService?.deleteByKey(this.dbName, layerId);\n  }\n\n  /**\n   * This method retrive all idb layer definition\n   * @param layerId\n   * @returns\n   */\n  getAll(): Observable<LayerDBData[]> {\n    return this.ngxIndexedDBService?.getAll(this.dbName);\n  }\n}\n","import { Injectable, Optional } from '@angular/core';\n\nimport { Compression } from '@igo2/utils';\n\nimport { DBMode, NgxIndexedDBService } from 'ngx-indexed-db';\nimport { Observable, Subject, of } from 'rxjs';\nimport { concatMap, first, map, take } from 'rxjs/operators';\n\nimport { InsertSourceInsertDBEnum } from './geoDB.enums';\nimport { GeoDBData } from './geoDB.interface';\n\n@Injectable()\nexport class GeoDBService {\n  readonly dbName: string = 'geoData';\n  public collisionsMap = new Map<number, string[]>();\n  public _newData = 0;\n  private compression = new Compression();\n\n  constructor(\n    @Optional()\n    private ngxIndexedDBService: NgxIndexedDBService\n  ) {}\n\n  /**\n   * Only blob can be compressed\n   * @param url\n   * @param regionID\n   * @param object object to handle\n   * @param insertSource type of event user or system\n   * @param insertEvent Name of the event where the insert has been triggered\n   * @returns\n   */\n  update(\n    url: string,\n    regionID: any,\n    object: any,\n    insertSource: InsertSourceInsertDBEnum,\n    insertEvent: string\n  ): Observable<any> {\n    if (!object) {\n      return;\n    }\n    let compress = false;\n\n    const subject = new Subject<GeoDBData>();\n    let object$: Observable<any> = of(object);\n    if (object instanceof Blob) {\n      object$ = this.compression.compressBlob(object);\n      compress = true;\n    }\n    let geoDBData: GeoDBData;\n    object$\n      .pipe(\n        first(),\n        concatMap((object) => {\n          geoDBData = {\n            url,\n            regionID,\n            object: object,\n            compressed: compress,\n            insertSource,\n            insertEvent\n          };\n          return this.ngxIndexedDBService?.getByID(this.dbName, url);\n        }),\n        concatMap((dbObject: GeoDBData) => {\n          if (!dbObject) {\n            this._newData++;\n            return this.ngxIndexedDBService?.add(this.dbName, geoDBData);\n          } else {\n            const currentRegionID = dbObject.regionID;\n            if (currentRegionID !== regionID) {\n              const collisions = this.collisionsMap.get(currentRegionID);\n              if (collisions !== undefined) {\n                collisions.push(dbObject.url);\n                this.collisionsMap.set(currentRegionID, collisions);\n              } else {\n                this.collisionsMap.set(currentRegionID, [dbObject.url]);\n              }\n            }\n            return this.customUpdate(geoDBData);\n          }\n        })\n      )\n      .subscribe((response) => {\n        subject.next(response);\n        subject.complete();\n      });\n    return subject;\n  }\n\n  private customUpdate(geoDBData: GeoDBData): Observable<GeoDBData> {\n    const subject = new Subject<GeoDBData>();\n    const deleteRequest = this.ngxIndexedDBService?.deleteByKey(\n      this.dbName,\n      geoDBData.url\n    );\n    deleteRequest\n      .pipe(\n        concatMap((isDeleted) =>\n          isDeleted\n            ? this.ngxIndexedDBService?.add(this.dbName, geoDBData)\n            : of(undefined)\n        )\n      )\n      .subscribe((object) => {\n        if (object) {\n          subject.next(object);\n        }\n        subject.complete();\n      });\n    return subject;\n  }\n\n  get(url: string): Observable<any> {\n    return this.ngxIndexedDBService?.getByID(this.dbName, url).pipe(\n      map((data: GeoDBData) => {\n        if (data) {\n          const object = data.object;\n          if (!data.compressed) {\n            return object;\n          }\n          return this.compression.decompressBlob(object);\n        }\n      })\n    );\n  }\n\n  getByID(url: string): Observable<any> {\n    return this.ngxIndexedDBService?.getByID(this.dbName, url);\n  }\n\n  deleteByKey(url: string): Observable<any> {\n    return this.ngxIndexedDBService?.deleteByKey(this.dbName, url);\n  }\n\n  getRegionCountByID(id: number): Observable<number> {\n    const subject = new Subject<number>();\n    this.getRegionByID(id).subscribe((datas) => {\n      subject.next(datas.length);\n      subject.complete();\n    });\n    return subject;\n  }\n\n  getRegionByID(id: number): Observable<any[]> {\n    if (!id) {\n      return;\n    }\n\n    const IDBKey: IDBKeyRange = IDBKeyRange.only(id);\n    const dbRequest = this.ngxIndexedDBService?.getAllByIndex(\n      this.dbName,\n      'regionID',\n      IDBKey\n    );\n    return dbRequest;\n  }\n\n  deleteByRegionID(id: number): Observable<any> {\n    if (!id) {\n      return;\n    }\n\n    const IDBKey: IDBKeyRange = IDBKeyRange.only(id);\n    const dbRequest = this.ngxIndexedDBService?.getAllByIndex(\n      this.dbName,\n      'regionID',\n      IDBKey\n    );\n    dbRequest.subscribe((datas: GeoDBData[]) => {\n      datas.forEach((data) => {\n        this.ngxIndexedDBService?.deleteByKey(this.dbName, data.url);\n      });\n    });\n    return dbRequest;\n  }\n\n  openCursor(\n    keyRange: IDBKeyRange = IDBKeyRange.lowerBound(0),\n    mode: DBMode = DBMode.readonly\n  ) {\n    const request = this.ngxIndexedDBService?.openCursorByIndex(\n      this.dbName,\n      'regionID',\n      keyRange,\n      undefined,\n      mode\n    );\n    return request;\n  }\n\n  resetCounters() {\n    this.resetCollisionsMap();\n    this._newData = 0;\n  }\n\n  resetCollisionsMap() {\n    this.collisionsMap = new Map();\n  }\n\n  revertCollisions() {\n    for (const [regionID, collisions] of this.collisionsMap) {\n      for (const url of collisions) {\n        this.ngxIndexedDBService\n          ?.getByKey(this.dbName, url)\n          .pipe(take(1))\n          .subscribe((dbObject: GeoDBData) => {\n            const updatedObject = dbObject;\n            updatedObject.regionID = regionID;\n            this.customUpdate(dbObject);\n          });\n      }\n    }\n  }\n\n  get newData(): number {\n    return this._newData;\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, Optional } from '@angular/core';\n\nimport { ConnectionState, NetworkService } from '@igo2/core/network';\n\nimport { Type } from 'ol/format/Feature';\n\nimport { Observable } from 'rxjs';\n\nimport { GeoDBService } from '../geoDB/geoDB.service';\n\nexport enum ResponseType {\n  Arraybuffer = 'arraybuffer',\n  Blob = 'blob',\n  Text = 'text',\n  Json = 'json'\n}\nexport interface SimpleGetOptions {\n  responseType: Type;\n  withCredentials?: boolean;\n}\n@Injectable()\nexport class GeoNetworkService {\n  private networkOnline = true;\n  constructor(\n    private http: HttpClient,\n    private networkService: NetworkService,\n    @Optional() public geoDBService?: GeoDBService\n  ) {\n    this.networkService.currentState().subscribe((state: ConnectionState) => {\n      this.networkOnline = state.connection;\n    });\n  }\n\n  get(url: string, simpleGetOptions: SimpleGetOptions): Observable<any> {\n    if (window.navigator.onLine && this.networkOnline) {\n      return this.getOnline(url, simpleGetOptions);\n    }\n    return this.getOffline(url);\n  }\n\n  private getOnline(\n    url: string,\n    simpleGetOptions: SimpleGetOptions\n  ): Observable<any> {\n    let request;\n    switch (simpleGetOptions.responseType) {\n      case 'arraybuffer':\n        request = this.http.get(url, {\n          responseType: 'arraybuffer',\n          withCredentials: simpleGetOptions.withCredentials\n        });\n        break;\n      case 'text':\n        request = this.http.get(url, {\n          responseType: 'text',\n          withCredentials: simpleGetOptions.withCredentials\n        });\n        break;\n      case 'json':\n        request = this.http.get(url, {\n          responseType: 'json',\n          withCredentials: simpleGetOptions.withCredentials\n        });\n        break;\n      default:\n        request = this.http.get(url, {\n          responseType: 'blob',\n          withCredentials: simpleGetOptions.withCredentials\n        });\n        break;\n    }\n    return request;\n  }\n\n  private getOffline(url: string): Observable<any> {\n    return this.geoDBService?.get(url);\n  }\n\n  public isOnline() {\n    return this.networkOnline && window.navigator.onLine;\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport OlFeature from 'ol/Feature';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport RenderFeature from 'ol/render/Feature';\nimport * as olStyle from 'ol/style';\n\nimport { ClusterParam } from '../../layer/shared/clusterParam';\nimport { getResolutionFromScale } from '../../map/shared/map.utils';\nimport { createOverlayMarkerStyle } from '../shared/overlay/overlay-marker-style.utils';\nimport { StyleByAttribute } from '../shared/vector/vector-style.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class StyleService {\n  public style: olStyle.Style;\n\n  /**\n   * Create a style based on a object as\n   * style: {\n   *       \"stroke\": {\n   *         \"color\": \"blue\",\n   *         \"lineDash\": [10, 5]\n   *       },\n   *       \"text\": {\n   *         \"minScaleDenom\": 50000,\n   *         \"maxScaleDenom\": 200000,\n   *         \"minResolution\": 100,\n   *         \"maxResolution\": 400,\n   *         \"attribute\": \"THE COLUMN NAME TO RETRIEVE THE LABEL VALUE\",\n   *         \"text\": \"MY HARCODED TEXT\",\n   *         \"stroke\": {\n   *           \"color\": \"blue\",\n   *           \"width\": 0.75\n   *         },\n   *         \"fill\": {\n   *           \"color\": \"black\"\n   *         },\n   *         \"font\": \"20px sans-serif\",\n   *         \"overflow\": true,\n   *         \"offsetX\": 10,\n   *         \"offsetY\": 20,\n   *         \"padding\": [2.5, 2.5, 2.5, 2.5]\n   *       },\n   *       \"width\": 5\n   *     }\n   *\n   * @param options\n   * @param feature feature to apply style on\n   * @param resolution current map resolution, to control label resolution range\n   * @returns\n   */\n  createStyle(\n    options: Record<string, any>,\n    feature?: RenderFeature | OlFeature<OlGeometry>,\n    resolution?: number\n  ) {\n    if (!options) {\n      return createOverlayMarkerStyle();\n    }\n    if (typeof options === 'function' || options instanceof olStyle.Style) {\n      return options;\n    }\n    const parsedStyle = this.parseStyle('style', options);\n    if (parsedStyle.getText()) {\n      let labelMinResolution = 0;\n      let labelMaxResolution = Infinity;\n      if (options.text) {\n        const labelMinResolutionFromScale = options.text?.minScaleDenom\n          ? getResolutionFromScale(Number(options.text.minScaleDenom))\n          : undefined;\n        const labelMaxResolutionFromScale = options.text?.maxScaleDenom\n          ? getResolutionFromScale(Number(options.text.maxScaleDenom))\n          : undefined;\n        const minResolution = options.text?.minResolution\n          ? options.text.minResolution\n          : 0;\n        const maxResolution = options.text?.maxResolution\n          ? options.text.maxResolution\n          : Infinity;\n\n        labelMinResolution = labelMinResolutionFromScale || minResolution;\n        labelMaxResolution = labelMaxResolutionFromScale || maxResolution;\n      }\n      if (\n        options.text?.minScaleDenom ||\n        options.text?.maxScaleDenom ||\n        options.text?.minResolution ||\n        options.text?.maxResolution\n      ) {\n        if (\n          feature &&\n          resolution >= labelMinResolution &&\n          resolution <= labelMaxResolution\n        ) {\n          if (feature && options.text.attribute) {\n            parsedStyle\n              .getText()\n              .setText(this.getLabel(feature, options.text.attribute));\n          }\n        } else {\n          parsedStyle.setText();\n        }\n      }\n    }\n    return parsedStyle;\n  }\n\n  public parseStyle(key: string, value: any) {\n    const styleOptions = {};\n    const olCls = this.getOlCls(key);\n\n    if (olCls && value instanceof Object) {\n      Object.keys(value).forEach((_key) => {\n        const olKey = this.getOlKey(_key);\n        styleOptions[olKey] = this.parseStyle(_key, value[_key]);\n      });\n      return new olCls(styleOptions);\n    } else {\n      return value;\n    }\n  }\n\n  private getOlKey(key: any) {\n    let olKey;\n    switch (key.toLowerCase()) {\n      case 'circle':\n      case 'regularshape':\n      case 'icon':\n        olKey = 'image';\n        break;\n      default:\n        break;\n    }\n\n    return olKey || key;\n  }\n\n  private getOlCls(key: any) {\n    let olCls = olStyle[key.charAt(0).toUpperCase() + key.slice(1)];\n    if (key === 'regularshape') {\n      olCls = olStyle.RegularShape;\n    }\n    if (key === 'backgroundFill') {\n      olCls = olStyle.Fill;\n    }\n    if (key === 'backgroundStroke') {\n      olCls = olStyle.Stroke;\n    }\n\n    return olCls;\n  }\n\n  createStyleByAttribute(\n    feature: RenderFeature | OlFeature<OlGeometry>,\n    styleByAttribute: StyleByAttribute,\n    resolution: number\n  ) {\n    let style;\n    const type = styleByAttribute.type\n      ? styleByAttribute.type\n      : this.guessTypeFeature(feature);\n    const attribute = styleByAttribute.attribute;\n    const data = styleByAttribute.data;\n    const stroke = styleByAttribute.stroke;\n    const width = styleByAttribute.width;\n    const fill = styleByAttribute.fill;\n    const anchor = styleByAttribute.anchor;\n    const radius = styleByAttribute.radius;\n    const icon = styleByAttribute.icon;\n    const scale = styleByAttribute.scale;\n    const size = data ? data.length : 0;\n    const label = styleByAttribute.label\n      ? styleByAttribute.label.attribute\n      : undefined;\n    const labelMinResolutionFromScale = styleByAttribute.label?.minScaleDenom\n      ? getResolutionFromScale(Number(styleByAttribute.label.minScaleDenom))\n      : undefined;\n    const labelMaxResolutionFromScale = styleByAttribute.label?.maxScaleDenom\n      ? getResolutionFromScale(Number(styleByAttribute.label.maxScaleDenom))\n      : undefined;\n    const minResolution = styleByAttribute.label?.minResolution\n      ? styleByAttribute.label.minResolution\n      : 0;\n    const maxResolution = styleByAttribute.label?.maxResolution\n      ? styleByAttribute.label.maxResolution\n      : Infinity;\n\n    const labelMinResolution = labelMinResolutionFromScale || minResolution;\n    const labelMaxResolution = labelMaxResolutionFromScale || maxResolution;\n\n    let labelStyle = styleByAttribute.label?.style\n      ? this.parseStyle('text', styleByAttribute.label.style)\n      : undefined;\n    if (!labelStyle && label) {\n      labelStyle = new olStyle.Text();\n    }\n    const baseStyle = styleByAttribute.baseStyle;\n\n    if (labelStyle) {\n      if (\n        resolution >= labelMinResolution &&\n        resolution <= labelMaxResolution\n      ) {\n        labelStyle.setText(this.getLabel(feature, label));\n      } else {\n        labelStyle.setText('');\n      }\n    }\n\n    if (type === 'circle') {\n      for (let i = 0; i < size; i++) {\n        const val =\n          typeof feature.get(attribute) !== 'undefined' &&\n          feature.get(attribute) !== null\n            ? feature.get(attribute)\n            : '';\n        if (\n          val === data[i] ||\n          val.toString().match(new RegExp(data[i], 'gmi'))\n        ) {\n          if (icon) {\n            style = [\n              new olStyle.Style({\n                image: new olStyle.Icon({\n                  color: fill ? fill[i] : undefined,\n                  src: icon[i],\n                  scale: scale ? scale[i] : 1,\n                  anchor: anchor ? anchor[i] : [0.5, 0.5]\n                }),\n                text:\n                  labelStyle instanceof olStyle.Text ? labelStyle : undefined\n              })\n            ];\n            return style;\n          }\n          style = [\n            new olStyle.Style({\n              image: new olStyle.Circle({\n                radius: radius ? radius[i] : 4,\n                stroke: new olStyle.Stroke({\n                  color: stroke ? stroke[i] : 'black',\n                  width: width ? width[i] : 1\n                }),\n                fill: new olStyle.Fill({\n                  color: fill ? fill[i] : 'black'\n                })\n              }),\n              text: labelStyle instanceof olStyle.Text ? labelStyle : undefined\n            })\n          ];\n          return style;\n        }\n      }\n      if (!(feature as OlFeature<OlGeometry>).getStyle()) {\n        if (baseStyle) {\n          style = this.createStyle(baseStyle, feature, resolution);\n          if (labelStyle) {\n            style.setText(labelStyle);\n          }\n          return style;\n        }\n        style = [\n          new olStyle.Style({\n            image: new olStyle.Circle({\n              radius: 4,\n              stroke: new olStyle.Stroke({\n                color: 'black'\n              }),\n              fill: new olStyle.Fill({\n                color: '#bbbbf2'\n              })\n            })\n          })\n        ];\n        return style;\n      }\n    } else if (type === 'regular') {\n      for (let i = 0; i < size; i++) {\n        const val =\n          typeof feature.get(attribute) !== 'undefined' &&\n          feature.get(attribute) !== null\n            ? feature.get(attribute)\n            : '';\n        if (\n          val === data[i] ||\n          val.toString().match(new RegExp(data[i], 'gmi'))\n        ) {\n          style = [\n            new olStyle.Style({\n              stroke: new olStyle.Stroke({\n                color: stroke ? stroke[i] : 'black',\n                width: width ? width[i] : 1\n              }),\n              fill: new olStyle.Fill({\n                color: fill ? fill[i] : 'rgba(255,255,255,0.4)'\n              }),\n              text: labelStyle instanceof olStyle.Text ? labelStyle : undefined\n            })\n          ];\n          return style;\n        }\n      }\n      if (feature instanceof OlFeature) {\n        if (!feature.getStyle()) {\n          if (baseStyle) {\n            style = this.createStyle(baseStyle, feature, resolution);\n            if (labelStyle) {\n              style.setText(labelStyle);\n            }\n            return style;\n          }\n          style = [\n            new olStyle.Style({\n              stroke: new olStyle.Stroke({\n                color: 'black'\n              }),\n              fill: new olStyle.Fill({\n                color: '#bbbbf2'\n              })\n            })\n          ];\n          return style;\n        }\n      }\n    }\n  }\n\n  createClusterStyle(\n    feature: RenderFeature | OlFeature<OlGeometry>,\n    resolution: number,\n    clusterParam: ClusterParam = {},\n    layerStyle\n  ) {\n    let style;\n    const size = feature.get('features').length;\n    if (size !== 1) {\n      if (clusterParam.clusterRanges) {\n        for (const r of clusterParam.clusterRanges) {\n          if (\n            (!r.minRadius || r.minRadius <= size) &&\n            (!r.maxRadius || r.maxRadius >= size)\n          ) {\n            style = this.createStyle(r.style) as olStyle.Circle;\n\n            if (r.showRange) {\n              const text = new olStyle.Text({\n                text: size.toString(),\n                fill: new olStyle.Fill({\n                  color: '#fff'\n                })\n              });\n              style.setText(text);\n            }\n\n            if (r.dynamicRadius) {\n              let clusterRadius: number;\n              const radiusMin = style.getRadius();\n              clusterRadius = 5 * Math.log(size);\n              if (clusterRadius < radiusMin) {\n                clusterRadius = radiusMin;\n              }\n              style.image_.setRadius(clusterRadius);\n            }\n            break;\n          }\n        }\n      }\n\n      if (!style) {\n        let clusterRadius: number;\n        if (clusterParam.radiusCalc) {\n          clusterRadius = clusterParam.radiusCalc(size);\n        } else {\n          const radiusMin = 6;\n          clusterRadius = 5 * Math.log(size);\n          if (clusterRadius < radiusMin) {\n            clusterRadius = radiusMin;\n          }\n        }\n\n        style = [\n          new olStyle.Style({\n            image: new olStyle.Circle({\n              radius: clusterRadius,\n              stroke: new olStyle.Stroke({\n                color: 'black'\n              }),\n              fill: new olStyle.Fill({\n                color: 'rgba(24, 134, 45, 0.5)'\n              })\n            }),\n            text: new olStyle.Text({\n              text: size.toString(),\n              fill: new olStyle.Fill({\n                color: '#fff'\n              })\n            })\n          })\n        ];\n      }\n    } else {\n      style = this.createStyle(layerStyle, feature, resolution);\n    }\n    return style;\n  }\n\n  getLabel(feature, labelMatch): string {\n    let label = labelMatch;\n    if (!label) {\n      return;\n    }\n    const labelToGet = Array.from(labelMatch.matchAll(/\\$\\{([^\\{\\}]+)\\}/g));\n\n    labelToGet.forEach((v) => {\n      label = label.replace(v[0], feature.get(v[1]));\n    });\n\n    // Nothing done? check feature's attribute\n    if (labelToGet.length === 0 && label === labelMatch) {\n      label = feature.get(labelMatch) || labelMatch;\n    }\n\n    return label;\n  }\n\n  private guessTypeFeature(feature) {\n    switch (feature.getGeometry().getType()) {\n      case 'Point':\n      case 'MultiPoint':\n      case 'Circle':\n        return 'circle';\n      default:\n        return 'regular';\n    }\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, Optional } from '@angular/core';\n\nimport { AuthInterceptor } from '@igo2/auth';\nimport { MessageService } from '@igo2/core/message';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport olLayerVectorTile from 'ol/layer/VectorTile';\nimport { Style } from 'ol/style';\nimport * as olStyle from 'ol/style';\nimport { StyleLike as OlStyleLike } from 'ol/style/Style';\n\nimport { stylefunction } from 'ol-mapbox-style';\nimport { Observable, combineLatest, of } from 'rxjs';\nimport { catchError, concatMap, map } from 'rxjs/operators';\n\nimport { DataSourceService } from '../../datasource/shared/datasource.service';\nimport {\n  AnyDataSourceOptions,\n  AnyDataSourceOptionsWithParams,\n  ArcGISRestDataSource,\n  ArcGISRestDataSourceOptions,\n  CartoDataSource,\n  ClusterDataSource,\n  FeatureDataSource,\n  ImageArcGISRestDataSource,\n  MVTDataSource,\n  OSMDataSource,\n  TileArcGISRestDataSource,\n  TileDebugDataSource,\n  WFSDataSource,\n  WMSDataSource,\n  WMTSDataSource,\n  WMTSDataSourceOptions,\n  WebSocketDataSource,\n  XYZDataSource\n} from '../../datasource/shared/datasources';\nimport { LayerDBService } from '../../offline/layerDB/layerDB.service';\nimport { GeoNetworkService } from '../../offline/shared/geo-network.service';\nimport { StyleService } from '../../style/style-service/style.service';\nimport {\n  computeMVTOptionsOnHover,\n  isLayerGroupOptions\n} from '../utils/layer.utils';\nimport {\n  AnyLayer,\n  AnyLayerItemOptions,\n  AnyLayerOptions,\n  ImageLayer,\n  ImageLayerOptions,\n  Layer,\n  LayerGroupOptions,\n  LayerOptions,\n  TileLayer,\n  TileLayerOptions,\n  VectorLayer,\n  VectorLayerOptions,\n  VectorTileLayer,\n  VectorTileLayerOptions\n} from './layers';\nimport { LayerGroup } from './layers/layer-group';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LayerService {\n  public unavailableLayers: AnyLayerItemOptions[] = [];\n\n  constructor(\n    private http: HttpClient,\n    private styleService: StyleService,\n    private dataSourceService: DataSourceService,\n    private messageService: MessageService,\n    @Optional() private geoNetworkService?: GeoNetworkService,\n    @Optional() private layerDBService?: LayerDBService,\n    @Optional() private authInterceptor?: AuthInterceptor\n  ) {}\n\n  createLayers(\n    layersOption: AnyLayerOptions[],\n    contextUri?: string\n  ): Observable<(AnyLayer | undefined)[]> {\n    const arrayObsLayers = layersOption.map((option) => {\n      return isLayerGroupOptions(option)\n        ? this.createAsyncGroup(option)\n        : this.createAsyncLayer(option, contextUri);\n    });\n\n    return combineLatest(arrayObsLayers);\n  }\n\n  createLayer(layerOptions: AnyLayerItemOptions): Layer {\n    if (layerOptions.source?.options?._layerOptionsFromSource) {\n      layerOptions = ObjectUtils.mergeDeep(\n        layerOptions.source.options._layerOptionsFromSource,\n        layerOptions || {}\n      );\n    }\n\n    let layer: Layer;\n    switch (layerOptions.source.constructor) {\n      case OSMDataSource:\n      case WMTSDataSource:\n      case XYZDataSource:\n      case TileDebugDataSource:\n      case CartoDataSource:\n      case TileArcGISRestDataSource:\n        layer = this.createTileLayer(layerOptions as TileLayerOptions);\n        break;\n      case FeatureDataSource:\n      case WFSDataSource:\n      case ArcGISRestDataSource:\n      case WebSocketDataSource:\n      case ClusterDataSource:\n        layer = this.createVectorLayer(layerOptions as VectorLayerOptions);\n        break;\n      case ImageArcGISRestDataSource:\n      case WMSDataSource:\n        layer = this.createImageLayer(layerOptions as ImageLayerOptions);\n        break;\n      case MVTDataSource: {\n        const _layerOptions = computeMVTOptionsOnHover(layerOptions);\n        layer = this.createVectorTileLayer(\n          _layerOptions as VectorTileLayerOptions\n        );\n        break;\n      }\n      default:\n        break;\n    }\n\n    return layer;\n  }\n\n  createAsyncLayer(\n    options: AnyLayerItemOptions,\n    detailedContextUri?: string\n  ): Observable<Layer | undefined> {\n    const optionsCloned = { ...options };\n\n    computeMVTOptionsOnHover(optionsCloned);\n    if (optionsCloned.source) {\n      return new Observable((d) => d.next(this.createLayer(optionsCloned)));\n    }\n\n    return this.dataSourceService\n      .createAsyncDataSource(optionsCloned.sourceOptions, detailedContextUri)\n      .pipe(\n        map((source) => {\n          if (source === undefined) {\n            const found = this.unavailableLayers.some(\n              (el) => el === optionsCloned\n            );\n            if (!found) {\n              this.unavailableLayers.push(optionsCloned);\n            }\n\n            return undefined;\n          }\n          return this.createLayer(Object.assign(optionsCloned, { source }));\n        })\n      );\n  }\n\n  createAsyncGroup(\n    options: LayerGroupOptions,\n    detailedContextUri?: string\n  ): Observable<LayerGroup> {\n    if (!options.children?.length) {\n      return of(this.createGroup(null, options));\n    }\n\n    return this.createLayers(options.children, detailedContextUri).pipe(\n      map((layers) => this.createGroup(layers.filter(Boolean), options))\n    );\n  }\n\n  private createGroup(\n    layers: AnyLayer[],\n    options: LayerGroupOptions\n  ): LayerGroup {\n    const group = new LayerGroup(layers, options);\n    return group;\n  }\n\n  private createImageLayer(layerOptions: ImageLayerOptions): ImageLayer {\n    return new ImageLayer(\n      layerOptions,\n      this.messageService,\n      this.authInterceptor\n    );\n  }\n\n  private createTileLayer(layerOptions: TileLayerOptions): TileLayer {\n    return new TileLayer(\n      layerOptions,\n      this.messageService,\n      this.authInterceptor\n    );\n  }\n\n  private createVectorLayer(layerOptions: VectorLayerOptions): VectorLayer {\n    let style: Style[] | Style | OlStyleLike = layerOptions.style;\n    let igoLayer: VectorLayer;\n\n    if (!layerOptions.igoStyle) {\n      layerOptions.igoStyle = {};\n    }\n    const legacyStyleOptions = [\n      'styleByAttribute',\n      'hoverStyle',\n      'mapboxStyle',\n      'clusterBaseStyle',\n      'style'\n    ];\n    // handling legacy property.\n    this.handleLegacyStyles(layerOptions, legacyStyleOptions);\n    if (\n      layerOptions.igoStyle.igoStyleObject &&\n      !layerOptions.idbInfo?.storeToIdb\n    ) {\n      style = (feature, resolution) =>\n        this.styleService.createStyle(\n          layerOptions.igoStyle.igoStyleObject,\n          feature,\n          resolution\n        );\n    } else if (\n      layerOptions.igoStyle.igoStyleObject &&\n      layerOptions.idbInfo?.storeToIdb\n    ) {\n      style = this.styleService.parseStyle(\n        'style',\n        layerOptions.igoStyle.igoStyleObject\n      );\n    }\n\n    if (layerOptions.source instanceof ArcGISRestDataSource) {\n      const source = layerOptions.source as ArcGISRestDataSource;\n      style = source.options.params.style;\n    } else if (layerOptions.igoStyle?.styleByAttribute) {\n      const serviceStyle = this.styleService;\n      layerOptions.style = (feature, resolution) => {\n        return serviceStyle.createStyleByAttribute(\n          feature,\n          layerOptions.igoStyle.styleByAttribute,\n          resolution\n        );\n      };\n\n      igoLayer = new VectorLayer(\n        layerOptions,\n        this.messageService,\n        this.authInterceptor,\n        this.geoNetworkService,\n        this.geoNetworkService?.geoDBService,\n        this.layerDBService\n      );\n    }\n\n    if (layerOptions.source instanceof ClusterDataSource) {\n      const serviceStyle = this.styleService;\n      const baseStyle = layerOptions.igoStyle.clusterBaseStyle;\n      layerOptions.style = (feature, resolution) => {\n        return serviceStyle.createClusterStyle(\n          feature,\n          resolution,\n          layerOptions.clusterParam,\n          baseStyle\n        );\n      };\n\n      igoLayer = new VectorLayer(\n        layerOptions,\n        this.messageService,\n        this.authInterceptor,\n        this.geoNetworkService,\n        this.geoNetworkService?.geoDBService,\n        this.layerDBService\n      );\n    }\n\n    const layerOptionsOl = Object.assign({}, layerOptions, {\n      style\n    });\n\n    if (!igoLayer) {\n      igoLayer = new VectorLayer(\n        layerOptionsOl,\n        this.messageService,\n        this.authInterceptor,\n        this.geoNetworkService,\n        this.geoNetworkService?.geoDBService,\n        this.layerDBService\n      );\n    }\n\n    this.applyMapboxStyle(igoLayer, layerOptionsOl as any);\n\n    return igoLayer;\n  }\n\n  private handleLegacyStyles(layerOptions, legacyStyleOptions: string[]) {\n    legacyStyleOptions.map((legacyOption) => {\n      if (layerOptions[legacyOption]) {\n        let newKey = legacyOption;\n        if (legacyOption === 'style') {\n          if (layerOptions[legacyOption] instanceof olStyle.Style) {\n            return;\n          }\n          if (typeof layerOptions[legacyOption] === 'object') {\n            newKey = 'igoStyleObject';\n          } else {\n            return;\n          }\n        }\n        layerOptions.igoStyle[newKey] = layerOptions[legacyOption];\n        delete layerOptions[legacyOption];\n        console.warn(`\n        The location of this style option (${legacyOption}) is deprecated.\n        Please move this property within igoStyle property.\n        Ex: ${legacyOption}: {...} must be transfered to igoStyle: { ${newKey}: {...} }\n        This legacy conversion will be deleted in 2024.\n        `);\n      }\n    });\n  }\n\n  private createVectorTileLayer(\n    layerOptions: VectorTileLayerOptions\n  ): VectorTileLayer {\n    let style: Style[] | Style | OlStyleLike;\n    let igoLayer: VectorTileLayer;\n\n    if (!layerOptions.igoStyle) {\n      layerOptions.igoStyle = {};\n    }\n    const legacyStyleOptions = [\n      'styleByAttribute',\n      'hoverStyle',\n      'mapboxStyle',\n      'style'\n    ];\n    // handling legacy property.\n    this.handleLegacyStyles(layerOptions, legacyStyleOptions);\n\n    if (layerOptions.igoStyle.igoStyleObject) {\n      style = (feature, resolution) =>\n        this.styleService.createStyle(\n          layerOptions.igoStyle.igoStyleObject,\n          feature,\n          resolution\n        );\n    }\n\n    if (layerOptions.igoStyle.styleByAttribute) {\n      const serviceStyle = this.styleService;\n      layerOptions.style = (feature, resolution) => {\n        return serviceStyle.createStyleByAttribute(\n          feature,\n          layerOptions.igoStyle.styleByAttribute,\n          resolution\n        );\n      };\n      igoLayer = new VectorTileLayer(\n        layerOptions,\n        this.messageService,\n        this.authInterceptor\n      );\n    }\n\n    const layerOptionsOl = Object.assign({}, layerOptions, {\n      style\n    });\n\n    if (!igoLayer) {\n      igoLayer = new VectorTileLayer(\n        layerOptionsOl,\n        this.messageService,\n        this.authInterceptor\n      );\n    }\n\n    this.applyMapboxStyle(igoLayer, layerOptionsOl);\n    return igoLayer;\n  }\n\n  private applyMapboxStyle(layer: Layer, layerOptions: VectorTileLayerOptions) {\n    if (layerOptions.igoStyle?.mapboxStyle) {\n      this.getStuff(layerOptions.igoStyle.mapboxStyle.url).subscribe((res) => {\n        if (res.sprite) {\n          const url = this.getAbsoluteUrl(\n            layerOptions.igoStyle.mapboxStyle.url,\n            res.sprite\n          );\n          this.getStuff(url + '.json').subscribe((res2) => {\n            stylefunction(\n              layer.ol as olLayerVectorTile,\n              res,\n              layerOptions.igoStyle.mapboxStyle.source,\n              undefined,\n              res2,\n              url + '.png'\n            );\n          });\n        } else {\n          stylefunction(\n            layer.ol as olLayerVectorTile,\n            res,\n            layerOptions.igoStyle.mapboxStyle.source\n          );\n        }\n      });\n    }\n  }\n\n  private getStuff(url: string) {\n    return this.http.get(url).pipe(\n      map((res: any) => res),\n      catchError((err) => {\n        console.log('No style was found');\n        return of(err);\n      })\n    );\n  }\n\n  private getAbsoluteUrl(source, url) {\n    const r = new RegExp('^http|//', 'i');\n    if (r.test(url)) {\n      return url;\n    } else {\n      if (source.substr(source.length - 1) === '/') {\n        return source + url;\n      } else {\n        return source + '/' + url;\n      }\n    }\n  }\n\n  createAsyncIdbLayers(contextUri = '*'): Observable<Layer[]> {\n    return this.layerDBService?.getAll().pipe(\n      concatMap((res) => {\n        const idbLayers =\n          contextUri !== '*'\n            ? res.filter((l) => l.detailedContextUri === contextUri)\n            : res;\n        const layersOptions: LayerOptions[] = idbLayers.map((idbl) =>\n          Object.assign({}, idbl.layerOptions, {\n            sourceOptions: idbl.sourceOptions\n          })\n        );\n        return combineLatest(\n          layersOptions.map((layerOptions) =>\n            this.createAsyncLayer(layerOptions)\n          )\n        );\n      })\n    );\n  }\n\n  deleteUnavailableLayers(anyLayerOptions: AnyLayerItemOptions) {\n    const anyLayerSourceOptions = anyLayerOptions.sourceOptions;\n    const index = this.unavailableLayers.findIndex((item) => {\n      const baseSourceOptions = item.sourceOptions;\n      if (\n        this.sourceOptionsWithParams(baseSourceOptions) &&\n        this.sourceOptionsWithParams(anyLayerSourceOptions)\n      ) {\n        return (\n          baseSourceOptions.params.LAYERS ===\n          anyLayerSourceOptions.params.LAYERS\n        );\n      } else if (\n        this.sourceOptionsWithLayer(baseSourceOptions) &&\n        this.sourceOptionsWithLayer(anyLayerSourceOptions)\n      ) {\n        return baseSourceOptions.layer === anyLayerSourceOptions.layer;\n      }\n    });\n    this.unavailableLayers.splice(index, index >= 0 ? 1 : 0);\n  }\n\n  sourceOptionsWithParams(\n    sourceOptions: AnyDataSourceOptions\n  ): sourceOptions is AnyDataSourceOptionsWithParams {\n    return 'params' in sourceOptions;\n  }\n\n  sourceOptionsWithLayer(\n    sourceOptions: AnyDataSourceOptions\n  ): sourceOptions is ArcGISRestDataSourceOptions | WMTSDataSourceOptions {\n    return 'layer' in sourceOptions;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Validators } from '@angular/forms';\n\nimport { FormDialogFormConfig, FormDialogService } from '@igo2/common/form';\n\nimport { Observable, map, of, switchMap } from 'rxjs';\n\nimport { LayerService } from '../shared/layer.service';\nimport { LayerGroup } from '../shared/layers/layer-group';\n\nconst FORM_GROUP_CONFIG: FormDialogFormConfig = {\n  formFieldConfigs: [\n    {\n      name: 'name',\n      title: 'igo.geo.layer.group.name',\n      type: 'text',\n      options: {\n        validator: Validators.required,\n        errors: { required: 'igo.common.form.errors.required' }\n      }\n    }\n  ]\n};\n\n@Injectable()\nexport class LayerListToolService {\n  constructor(\n    private layerService: LayerService,\n    private formDialogService: FormDialogService\n  ) {}\n\n  createGroup(): Observable<LayerGroup | undefined> {\n    return this.formDialogService\n      .open(FORM_GROUP_CONFIG, {\n        title: 'igo.geo.layer.group.create',\n        minWidth: '25%'\n      })\n      .pipe(\n        switchMap((result) => {\n          return result\n            ? this.layerService.createAsyncGroup({\n                type: 'group',\n                title: result.name\n              })\n            : of(undefined);\n        })\n      );\n  }\n\n  renameGroup(group: LayerGroup): Observable<string | undefined> {\n    const config = { ...FORM_GROUP_CONFIG };\n    const field = config.formFieldConfigs.find(\n      (field) => field.name === 'name'\n    );\n    field.options.initialValue = group.title;\n\n    return this.formDialogService\n      .open(config, {\n        title: 'igo.geo.layer.group.rename',\n        minWidth: '25%'\n      })\n      .pipe(map((result) => result?.name));\n  }\n}\n","import { NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  FloatLabelType,\n  MatFormFieldModule\n} from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoBadgeIconDirective } from '@igo2/common/badge';\nimport { FormDialogService } from '@igo2/common/form';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { LayerSearchComponent } from '../layer-search/layer-search.component';\nimport {\n  LayerToolMode,\n  LayerViewerOptions\n} from '../layer-viewer/layer-viewer.interface';\nimport { LayerGroup } from '../shared/layers/layer-group';\nimport { LayerListToolService } from './layer-list-tool.service';\n\n@Component({\n  selector: 'igo-layer-list-tool',\n  templateUrl: './layer-list-tool.component.html',\n  styleUrls: ['./layer-list-tool.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    FormsModule,\n    NgIf,\n    MatFormFieldModule,\n    MatInputModule,\n    MatTooltipModule,\n    MatButtonModule,\n    MatMenuModule,\n    MatIconModule,\n    MatBadgeModule,\n    IgoBadgeIconDirective,\n    IgoLanguageModule,\n    LayerSearchComponent\n  ],\n  providers: [LayerListToolService, FormDialogService]\n})\nexport class LayerListToolComponent {\n  @Input({ required: true }) mode: LayerToolMode;\n  @Input() viewerOptions: LayerViewerOptions;\n  @Input() floatLabel: FloatLabelType = 'auto';\n  @Input() onlyVisible: boolean;\n  @Input() term: string;\n\n  @Output() searchChange = new EventEmitter<string>();\n  @Output() visibilityOnlyChange = new EventEmitter<boolean>();\n  @Output() modeChange = new EventEmitter<boolean>();\n  @Output() addedLayer = new EventEmitter<LayerGroup>();\n\n  get selectionActive(): boolean {\n    return this.mode === 'selection';\n  }\n\n  constructor(private layerListToolService: LayerListToolService) {}\n\n  handleTermChange(value: string | undefined): void {\n    this.searchChange.emit(value);\n  }\n\n  toggleSelectionMode() {\n    this.modeChange.emit(!this.selectionActive);\n  }\n\n  createGroup(): void {\n    this.layerListToolService.createGroup().subscribe((group) => {\n      if (!group) {\n        return;\n      }\n      this.addedLayer.emit(group);\n    });\n  }\n}\n","<igo-layer-search\n  [initialValue]=\"term\"\n  [floatLabel]=\"floatLabel\"\n  placeholder=\"igo.geo.layer.filterPlaceholder\"\n  tooltip=\"igo.geo.layer.subsetLayersListKeyword\"\n  (searchChange)=\"handleTermChange($event)\"\n></igo-layer-search>\n\n<div class=\"actions-container\">\n  <button\n    mat-icon-button\n    [color]=\"selectionActive ? 'warn' : 'primary'\"\n    [matTooltip]=\"\n      selectionActive\n        ? ('igo.geo.layer.deactivateSelectionMode' | translate)\n        : ('igo.geo.layer.activateSelectionMode' | translate)\n    \"\n    matTooltipShowDelay=\"500\"\n    (click)=\"toggleSelectionMode()\"\n  >\n    <mat-icon>{{\n      selectionActive ? 'remove_done' : 'library_add_check'\n    }}</mat-icon>\n  </button>\n\n  <button\n    *ngIf=\"viewerOptions?.group?.canCreate\"\n    mat-icon-button\n    [disabled]=\"!viewerOptions.group.enable\"\n    [matTooltip]=\"'igo.geo.layer.group.create' | translate\"\n    matTooltipShowDelay=\"500\"\n    type=\"button\"\n    color=\"primary\"\n    (click)=\"createGroup()\"\n  >\n    <mat-icon>create_new_folder</mat-icon>\n  </button>\n</div>\n","export interface LayerListControlsOptions {\n  excludeBaseLayers?: boolean;\n  showToolbar?: LayerListControlsEnum;\n  keyword?: string;\n  sortAlpha?: boolean;\n  onlyVisible?: boolean;\n}\n\nexport enum LayerListControlsEnum {\n  always = 'always',\n  never = 'never',\n  default = 'default'\n}\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { AsyncPipe, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n  MatTreeFlatDataSource,\n  MatTreeFlattener,\n  MatTreeModule\n} from '@angular/material/tree';\n\nimport {\n  DropPermission,\n  TreeDragDropDirective,\n  TreeDropEvent,\n  TreeFlatNode\n} from '@igo2/common/drag-drop';\nimport {\n  IconSvg,\n  IgoIconComponent,\n  VECTOR_SQUARE_ICON\n} from '@igo2/common/icon';\nimport { ListComponent, ListItemDirective } from '@igo2/common/list';\nimport { PanelComponent } from '@igo2/common/panel';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\n\nimport { LayerGroupComponent } from '../layer-group';\nimport { LayerItemComponent } from '../layer-item';\nimport { LayerListToolComponent } from '../layer-list-tool';\nimport type { LayerViewerOptions } from '../layer-viewer/layer-viewer.interface';\nimport { LayerType } from '../shared';\nimport type { LayerController } from '../shared/layer-controller';\nimport type { AnyLayer } from '../shared/layers/any-layer';\nimport type { Layer } from '../shared/layers/layer';\nimport type { LayerGroup } from '../shared/layers/layer-group';\nimport { isLayerGroup, isLayerItem } from '../utils/layer.utils';\n\ntype LayerFlatNode<T = AnyLayer> = TreeFlatNode<T>;\n\n@Component({\n  selector: 'igo-layer-list',\n  templateUrl: './layer-list.component.html',\n  styleUrls: ['./layer-list.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    NgFor,\n    NgTemplateOutlet,\n    FormsModule,\n    AsyncPipe,\n    MatBadgeModule,\n    MatButtonModule,\n    MatCheckboxModule,\n    MatDividerModule,\n    MatIconModule,\n    MatMenuModule,\n    MatSliderModule,\n    MatTreeModule,\n    MatTooltipModule,\n    TreeDragDropDirective,\n    LayerListToolComponent,\n    LayerGroupComponent,\n    ListComponent,\n    LayerItemComponent,\n    ListItemDirective,\n    PanelComponent,\n    IgoLanguageModule,\n    IgoIconComponent\n  ]\n})\nexport class LayerListComponent {\n  public toggleOpacity = false;\n  isInit: boolean;\n\n  @Input({ required: true }) controller: LayerController;\n\n  @Input({ required: true })\n  set layers(layers: AnyLayer[]) {\n    this._layers = layers;\n    this.updateDatasource(layers ?? []);\n  }\n  get layers(): AnyLayer[] {\n    return this._layers;\n  }\n  private _layers: AnyLayer[];\n\n  @Input() isDesktop: boolean;\n  @Input() isDragDropDisabled: boolean;\n  @Input() selectAll: boolean;\n  @Input() viewerOptions: LayerViewerOptions;\n\n  @Output() activeChange = new EventEmitter<AnyLayer>();\n\n  private _transformer = (layer: AnyLayer, level: number): LayerFlatNode => {\n    return {\n      id: layer.id || layer.options.name,\n      isGroup: !!isLayerGroup(layer),\n      descendantLevels: isLayerGroup(layer)\n        ? layer.descendantsLevel\n        : undefined,\n      level: level,\n      data: layer,\n      disabled: false\n    };\n  };\n\n  treeControl = new FlatTreeControl<LayerFlatNode>(\n    (node) => node.level,\n    (node) => node.isGroup\n  );\n\n  treeFlattener = new MatTreeFlattener(\n    this._transformer,\n    (node) => node.level,\n    (node) => node.isGroup,\n    (node) =>\n      (node as LayerGroup).children\n        .filter((layer) => layer.showInLayerList)\n        .sort((a, b) => a.zIndex + b.zIndex)\n  );\n\n  dataSource: MatTreeFlatDataSource<AnyLayer, LayerFlatNode>;\n\n  constructor(private messageService: MessageService) {\n    this.dataSource = new MatTreeFlatDataSource(\n      this.treeControl,\n      this.treeFlattener,\n      []\n    );\n  }\n\n  isGroup = (_: number, node: LayerFlatNode) => node.isGroup;\n\n  isLayerGroup = isLayerGroup;\n  isLayerItem = isLayerItem;\n\n  isSelected = (layer: AnyLayer): boolean => this.controller.isSelected(layer);\n  isDescendantSelection = (layer: AnyLayer): boolean =>\n    this.controller.isDescendantSelection(layer);\n\n  toggleActive(layer: AnyLayer): void {\n    const isSelected = this.controller.isSelected(layer);\n\n    this.controller.clearSelection();\n\n    if (!isSelected) {\n      this.controller.select(layer);\n    }\n    this.activeChange.emit(layer);\n  }\n\n  handleSelect(checked: boolean, layer: AnyLayer): void {\n    checked ? this.controller.select(layer) : this.controller.deselect(layer);\n  }\n\n  getLayerType(layer: Layer): LayerType | 'measure' | 'draw' {\n    return layer.type === 'raster'\n      ? 'raster'\n      : layer.id.includes('measure')\n        ? 'measure'\n        : layer.id.includes('draw')\n          ? 'draw'\n          : 'vector';\n  }\n\n  getLayerIcon(layer: Layer): string | IconSvg {\n    const type = this.getLayerType(layer);\n    return type === 'raster'\n      ? layer.baseLayer\n        ? 'wallpaper'\n        : 'image'\n      : type === 'measure'\n        ? 'square_foot'\n        : type === 'draw'\n          ? 'draw'\n          : VECTOR_SQUARE_ICON;\n  }\n\n  dropNode({ node, ref, position }: TreeDropEvent<AnyLayer>): void {\n    let nodesToDrop = [node.data];\n\n    if (this.controller.hasSelection) {\n      // The selection could contains data from the outside the TreeController\n      nodesToDrop = this.controller.selected.filter(\n        (layer) => !!this.findNodeByLayerId(layer.id)\n      );\n    }\n\n    if (node.isGroup) {\n      nodesToDrop = nodesToDrop.filter(\n        (nodeDrop) => !(node.data as LayerGroup).isDescendant(nodeDrop)\n      );\n    }\n\n    if (ref.isGroup) {\n      const isSelected = nodesToDrop.some((nodeDrop) => nodeDrop.id === ref.id);\n      if (isSelected) {\n        nodesToDrop = nodesToDrop.filter((nodeDrop) => nodeDrop.id !== ref.id);\n      }\n    }\n\n    if (!nodesToDrop.includes(node.data)) {\n      nodesToDrop.push(node.data);\n    }\n\n    switch (position) {\n      case 'above':\n        this.controller.moveAbove(ref.data, ...nodesToDrop);\n        break;\n      case 'inside':\n        this.controller.moveInside(ref.data as LayerGroup, ...nodesToDrop);\n        break;\n\n      default:\n        this.controller.moveBelow(ref.data, ...nodesToDrop);\n        break;\n    }\n  }\n\n  dropNodeError(details: DropPermission): void {\n    this.messageService.alert(\n      details.message,\n      'igo.geo.layer.layer',\n      null,\n      details.params\n    );\n  }\n\n  dragStart(): void {\n    if (this.viewerOptions.mode === 'selection') {\n      return;\n    }\n\n    this.controller.clearSelection();\n  }\n\n  handleNodeToggle(node: LayerFlatNode<LayerGroup>): void {\n    node.data.expanded = this.treeControl.isExpanded(node);\n  }\n\n  private findNodeByLayerId(id: string): LayerFlatNode | undefined {\n    return this.treeControl.dataNodes.find((node) => node.id === id);\n  }\n\n  private updateDatasource(layers: AnyLayer[]): void {\n    const expansionModel = this.treeControl.expansionModel;\n    this.dataSource.data = layers;\n\n    this.isInit\n      ? this.restoreModel(expansionModel, (node) =>\n          this.treeControl.expand(node)\n        )\n      : this.expandGroup(layers);\n\n    if (!this.isInit && layers.length) {\n      this.isInit = true;\n    }\n  }\n\n  /** Recursive */\n  private expandGroup(layers: AnyLayer[]): void {\n    layers.forEach((layer) => {\n      if (!isLayerGroup(layer)) {\n        return;\n      }\n      if (layer.expanded) {\n        const node = this.findNodeByLayerId(layer.id);\n        if (!node) {\n          return;\n        }\n        this.treeControl.expand(node);\n      }\n\n      this.expandGroup(layer.children);\n    });\n  }\n\n  private restoreModel(\n    model: SelectionModel<LayerFlatNode>,\n    callback: (node: LayerFlatNode) => void\n  ) {\n    const ids: string[] = Array.from(model['_selection']).map(\n      (value) => value['id']\n    );\n    model.clear();\n    this.treeControl.dataNodes.forEach((node) => {\n      if (model.isSelected(node) || ids.includes(node.id)) {\n        callback(node);\n      }\n    });\n  }\n}\n","<mat-tree\n  [class.--not-desktop]=\"!isDesktop\"\n  igoTreeDragDrop\n  [treeDragDropIsDisabled]=\"isDragDropDisabled\"\n  [maxLevel]=\"viewerOptions?.group?.maxHierarchyLevel\"\n  [dataSource]=\"dataSource\"\n  [treeControl]=\"treeControl\"\n  (dragStart)=\"dragStart()\"\n  (onDrop)=\"dropNode($event)\"\n  (onDropError)=\"dropNodeError($event)\"\n>\n  <!-- This is the tree node template for leaf nodes -->\n  <mat-tree-node\n    *matTreeNodeDef=\"let node\"\n    [class.--selected]=\"isSelected(node.data)\"\n    [class.--children-selected]=\"isDescendantSelection(node.data)\"\n  >\n    <igo-layer-item\n      [matTreeNodePadding]=\"node.level === 0 ? 1 : node.level\"\n      [matTreeNodePaddingIndent]=\"node.level === 0 ? 16 : 24 + 16 / node.level\"\n      class=\"tree-node-item\"\n      [layer]=\"node.data\"\n      [visible]=\"node.data.visible\"\n      [viewerOptions]=\"viewerOptions\"\n      [selected]=\"isSelected(node.data) || isDescendantSelection(node.data)\"\n      [selectionDisabled]=\"isDescendantSelection(node.data)\"\n      (action)=\"toggleActive($event)\"\n      (selectChange)=\"handleSelect($event, node.data)\"\n    >\n    </igo-layer-item>\n  </mat-tree-node>\n  <!-- This is the tree node template for expandable nodes -->\n  <mat-tree-node\n    *matTreeNodeDef=\"let node; when: isGroup\"\n    [class.--selected]=\"isSelected(node.data)\"\n    [class.--children-selected]=\"isDescendantSelection(node.data)\"\n  >\n    <igo-layer-group\n      matTreeNodePadding\n      [matTreeNodePaddingIndent]=\"24\"\n      class=\"tree-node-item\"\n      [layer]=\"node.data\"\n      [viewerOptions]=\"viewerOptions\"\n      [selected]=\"isSelected(node.data) || isDescendantSelection(node.data)\"\n      [selectionDisabled]=\"isDescendantSelection(node.data)\"\n      (action)=\"toggleActive($event)\"\n      (expand)=\"treeControl.toggle(node); handleNodeToggle(node)\"\n      (selectChange)=\"handleSelect($event, node.data)\"\n    >\n      <button\n        mat-icon-button\n        matTreeNodeToggle\n        class=\"layer-indicator\"\n        [attr.aria-label]=\"'Toggle ' + node.data.title\"\n        (click)=\"handleNodeToggle(node)\"\n      >\n        <mat-icon class=\"mat-icon-rtl-mirror\">\n          {{\n            treeControl.isExpanded(node)\n              ? 'keyboard_arrow_down'\n              : 'keyboard_arrow_right'\n          }}\n        </mat-icon>\n      </button>\n    </igo-layer-group>\n  </mat-tree-node>\n</mat-tree>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output\n} from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { AnyLayerItemOptions, AnyLayerOptions } from '../shared';\n\n@Component({\n  selector: 'igo-layer-unavailable',\n  templateUrl: './layer-unavailable.component.html',\n  styleUrls: ['./layer-unavailable.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [MatListModule, MatIconModule, MatTooltipModule, IgoLanguageModule]\n})\nexport class LayerUnavailableComponent {\n  @Input() layerOptions: AnyLayerItemOptions;\n\n  @Output() remove = new EventEmitter<AnyLayerOptions>();\n\n  get title(): string | undefined {\n    const sourceOptions = this.layerOptions.sourceOptions;\n    return (\n      this.layerOptions.title ??\n      sourceOptions?.['params']?.LAYERS ??\n      sourceOptions?.['params']?.layers ??\n      sourceOptions?.['layer']\n    );\n  }\n\n  handleRemove(layerOptions: AnyLayerOptions): void {\n    this.remove.emit(layerOptions);\n  }\n}\n","<mat-list-item>\n  <button mat-icon-button disabled class=\"layer-indicator\">\n    <mat-icon aria-hidden=\"false\" color=\"warn\">warning</mat-icon>\n  </button>\n  <span\n    matListItemTitle\n    [matTooltip]=\"title\"\n    tooltip-position=\"below\"\n    matTooltipShowDelay=\"500\"\n  >\n    {{ title }}\n  </span>\n  <div matListItemMeta>\n    <div\n      class=\"align-disabled-button-with-tooltip\"\n      [matTooltip]=\"'igo.geo.layer.unavailableLayer' | translate\"\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n    ></div>\n    <button\n      mat-icon-button\n      color=\"warn\"\n      [matTooltip]=\"'igo.geo.layer.deleteLayer' | translate\"\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      (click)=\"handleRemove(layerOptions)\"\n    >\n      <mat-icon aria-hidden=\"false\">delete</mat-icon>\n    </button>\n  </div>\n</mat-list-item>\n","export const LAYER = 'Layer';\n","import { SelectionModel } from '@angular/cdk/collections';\n\nimport { isLayerGroup } from '../utils/layer.utils';\nimport { AnyLayer } from './layers/any-layer';\n\nexport class LayerSelectionModel {\n  private selection = new SelectionModel<AnyLayer>(true);\n  private descendantSelection = new SelectionModel<AnyLayer>(true);\n\n  get selected(): AnyLayer[] {\n    return this.selection.selected;\n  }\n\n  get hasSelection(): boolean {\n    return this.selection.hasValue();\n  }\n\n  get isSelectionEmpty(): boolean {\n    return this.selection.isEmpty();\n  }\n\n  clearSelection(): void {\n    this.selection.clear();\n    this.descendantSelection.clear();\n  }\n\n  select(...layers: AnyLayer[]): void {\n    this.selection.select(...layers);\n    this.descendantSelection.select(...this.getDescendants(...layers));\n  }\n\n  deselect(...layers: AnyLayer[]): void {\n    this.selection.deselect(...layers);\n    this.descendantSelection.deselect(...this.getDescendants(...layers));\n  }\n\n  isSelected = (layer: AnyLayer): boolean => this.selection.isSelected(layer);\n  isDescendantSelection = (layer: AnyLayer): boolean =>\n    this.descendantSelection.isSelected(layer);\n\n  private getDescendants(...layers: AnyLayer[]): AnyLayer[] {\n    return layers.reduce((descendants: AnyLayer[], layer) => {\n      if (isLayerGroup(layer)) {\n        return descendants.concat(layer.descendants);\n      }\n      return descendants;\n    }, []);\n  }\n}\n","import { TREE_SEPERATOR, Tree } from '@igo2/utils';\n\nimport {\n  BehaviorSubject,\n  Observable,\n  combineLatest,\n  debounceTime,\n  map\n} from 'rxjs';\n\nimport { type MapBase } from '../../map/shared/map.abstract';\nimport { isBaseLayer, isLayerGroup, isLayerItem } from '../utils/layer.utils';\nimport { LayerSelectionModel } from './layer-selection';\nimport type { AnyLayer } from './layers/any-layer';\nimport type { Layer } from './layers/layer';\nimport type { LayerGroup } from './layers/layer-group';\nimport { isLayerLinked } from './layers/linked/linked-layer.utils';\n\n// Below 10 is reserved for BaseLayer\nconst ZINDEX_MIN = 10;\n\n/**\n * We got four kind of layers\n * TreeLayer: all layers to show in the layer manager\n * Baselayer: Layer dedicated for the basemap\n * SystemLayer: Every layer dedicated to good function of the map (Selection, hovering)\n * OtherLayer: all remaining layer that is linked to another layer or simply not a systemLayer that need to be cleaned on map reset\n */\nexport class LayerController extends LayerSelectionModel {\n  private tree: Tree<AnyLayer>;\n\n  /** Selection, Hovering, every internalLayer not in the tree is here */\n  private _systemLayers: AnyLayer[] = [];\n\n  /** LinkedLayer and other layer that are not in the previous category and not visible in tree */\n  private _otherLayers: AnyLayer[] = [];\n\n  layersFlattened: AnyLayer[] = [];\n\n  private _layers$ = new BehaviorSubject<AnyLayer[] | undefined>(undefined);\n  layers$ = this._layers$.asObservable();\n\n  layersFlattened$ = this._layers$\n    .asObservable()\n    .pipe(map(() => this.layersFlattened));\n\n  private _baseLayers: Layer[] = [];\n  private _baseLayers$ = new BehaviorSubject<Layer[] | undefined>(undefined);\n  baseLayers$ = this._baseLayers$.asObservable();\n\n  baseLayerSelection: Layer;\n\n  /** All layers with the tree flattened */\n  all$: Observable<AnyLayer[]>;\n\n  constructor(\n    private _map: MapBase,\n    layers: AnyLayer[]\n  ) {\n    super();\n\n    this.all$ = combineLatest([this.layersFlattened$, this.baseLayers$]).pipe(\n      debounceTime(10),\n      map(() => this.all)\n    );\n\n    this.tree = new Tree(layers, {\n      getChildren: (node) => isLayerGroup(node) && node.children,\n      getId: (node) => node.id,\n      getLevel: (node) => node.zIndex,\n      reverse: true\n    });\n  }\n\n  get all(): AnyLayer[] {\n    return [\n      ...this.baseLayers,\n      ...this.layersFlattened,\n      ...this._systemLayers,\n      ...this._otherLayers\n    ];\n  }\n\n  get baseLayers(): readonly Layer[] {\n    return this._baseLayers;\n  }\n\n  get baseLayer(): Layer {\n    return this.baseLayers.find((layer) => layer.visible);\n  }\n\n  get treeLayers(): readonly AnyLayer[] {\n    return this.tree.data;\n  }\n\n  add(...layers: AnyLayer[]): void {\n    const offset = 0;\n\n    const addedLayers = layers\n      .map((layer) => this.handleAdd(layer, offset))\n      .filter(Boolean);\n\n    if (!addedLayers.length) {\n      this.notify();\n      return;\n    }\n\n    this.tree.add(...addedLayers);\n\n    // Notify the layers change before the iteration on the addedLayer\n    // Because the Layer may have have LinkedLayer who need to find the parent.\n    this.layersFlattened = [...this.tree.flattened];\n    addedLayers.forEach((layer) => layer.add());\n\n    this.recalculateZindex();\n    this.notify();\n  }\n\n  selectBaseLayer(layer: Layer): void {\n    if (!isBaseLayer(layer)) {\n      return;\n    }\n\n    if (this.baseLayerSelection) {\n      this.baseLayerSelection.visible = false;\n    }\n\n    layer.visible = true;\n    this.baseLayerSelection = layer;\n\n    this._map.viewController.olView.setMinZoom(\n      layer.dataSource.options.minZoom || (this._map.options.view || {}).minZoom\n    );\n    this._map.viewController.olView.setMaxZoom(\n      layer.dataSource.options.maxZoom || (this._map.options.view || {}).maxZoom\n    );\n  }\n\n  remove(...layers: AnyLayer[]): void {\n    const list = layers.reduce((list, layer) => {\n      if (this.isSelected(layer)) {\n        this.deselect(layer);\n      }\n      const result = this._remove(layer);\n      Array.isArray(result) ? list.push(...result) : list.push(result);\n      return list;\n    }, []);\n    this.tree.remove(...list);\n\n    this.notify();\n  }\n\n  /**\n   * Move a layer into the tree\n   * @param layer Layer to move\n   * @param beforeTo The index position to move inside a tree\n   */\n  moveTo(beforeTo: number[], ...layers: AnyLayer[]): AnyLayer[] {\n    const movedLayers = this.tree.moveTo(beforeTo, ...layers);\n    if (!movedLayers?.length) {\n      return;\n    }\n\n    return movedLayers;\n  }\n\n  moveBelow(layerRef: AnyLayer | undefined, ...layers: AnyLayer[]): void {\n    const position = this.getPosition(layerRef, 'below');\n\n    const movedLayers = this.moveTo(position, ...layers);\n    this.handleMove(movedLayers, layerRef.parent);\n  }\n\n  moveAbove(layerRef: AnyLayer | undefined, ...layers: AnyLayer[]): void {\n    const position = this.getPosition(layerRef);\n\n    const movedLayers = this.moveTo(position, ...layers);\n    this.handleMove(movedLayers, layerRef.parent);\n  }\n\n  moveInside(layerRef: LayerGroup, ...layers: AnyLayer[]): void {\n    const position = this.getPosition(layerRef);\n\n    const movedLayers = this.moveTo(position.concat(0), ...layers);\n    this.handleMove(movedLayers, layerRef);\n  }\n\n  raise(...layers: AnyLayer[]): void {\n    const position = this.getPosition(layers[0]);\n    const nextPosition = this.findLowestVisiblePostion(position, -1);\n    this.moveTo(nextPosition, ...layers);\n    this.handleMove(layers, null, true);\n  }\n\n  lower(...layers: AnyLayer[]): void {\n    const position = this.getPosition(layers[layers.length - 1]);\n    const nextPosition = this.findLowestVisiblePostion(position, 2); // +2 because we use moveBefore\n    this.moveTo(nextPosition, ...layers);\n    this.handleMove(layers, null, true);\n  }\n\n  /** Reset all except SystemLayer */\n  reset(): void {\n    this.clearBaselayers();\n    this.clearTree();\n    this.clearOther();\n    this.clearSelection();\n\n    this.notify();\n  }\n\n  getById(id: string): AnyLayer {\n    return this.all.find((layer) => layer.id && layer.id === id);\n  }\n\n  getBySourceId(id: string): AnyLayer {\n    return this.all.find(\n      (layer) => layer.dataSource?.id && layer.dataSource.id === id\n    );\n  }\n\n  getPosition(layer: AnyLayer, type: 'below' | 'above' = 'above'): number[] {\n    const position = this.tree.getPosition(layer);\n\n    if (type === 'below') {\n      let index = position.pop();\n      return position.concat(++index);\n    }\n\n    return position;\n  }\n\n  getLayerRecipient(layer: AnyLayer): AnyLayer[] {\n    return layer.parent\n      ? this.tree.getChildren(layer.parent)\n      : [...this.treeLayers];\n  }\n\n  /**\n   * We got non visible layer in the tree like LinkedLayer. We want the next visible layer in tree\n   */\n  private findLowestVisiblePostion(\n    position: number[],\n    increment: number\n  ): number[] {\n    const index = position.pop();\n    const nextPosition = position.concat(index + increment);\n    const layer = this.tree.getNodeByPosition(nextPosition);\n    if (layer && !layer.showInLayerList) {\n      const nextIndex = increment > 1 ? 1 : increment;\n      return this.findLowestVisiblePostion(nextPosition, nextIndex);\n    }\n    return nextPosition;\n  }\n\n  private handleMove(\n    layers: AnyLayer[],\n    parent?: LayerGroup,\n    keepCurrentParent?: boolean\n  ): void {\n    if (!layers?.length) {\n      return;\n    }\n\n    layers.forEach((layer) => {\n      layer.moveTo(keepCurrentParent ? layer.parent : parent);\n    });\n    this._internalMove();\n  }\n\n  private _internalMove() {\n    this.recalculateZindex();\n    this.notify();\n  }\n\n  private getBefore(layer: AnyLayer): AnyLayer {\n    return this.treeLayers.find(\n      (layerTree) => layerTree.zIndex <= layer.zIndex\n    );\n  }\n\n  /** Recursive */\n  private recalculateZindex(\n    minIndex = this.baseLayers.length,\n    layers = this.treeLayers\n  ) {\n    return [...layers].reverse().reduce((previousZindex, layer) => {\n      let zIndex = ++previousZindex;\n      layer.zIndex = zIndex;\n      if (isLayerGroup(layer)) {\n        zIndex = this.recalculateZindex(zIndex, layer.children);\n      }\n\n      return zIndex;\n    }, minIndex);\n  }\n\n  private handleAdd(layer: AnyLayer, offset?: number): AnyLayer {\n    const existingLayer = this.getById(layer.id);\n    if (existingLayer !== undefined) {\n      existingLayer.visible = true;\n      return;\n    }\n\n    const zIndex = this.getZindexOffset(layer, offset);\n    this.setZindex(layer, zIndex);\n\n    layer.init(this._map);\n\n    if (isBaseLayer(layer)) {\n      if (layer.visible) {\n        this.selectBaseLayer(layer);\n      }\n      this._baseLayers.push(layer);\n    } else if (this.isOtherLayer(layer)) {\n      this._otherLayers.push(layer);\n    } else if (this.isSystemLayer(layer) && !layer.showInLayerList) {\n      this._systemLayers.push(layer);\n    } else if (layer.showInLayerList) {\n      return layer;\n    } else {\n      this._otherLayers.push(layer);\n    }\n\n    const parent: LayerGroup | undefined = layer.parentId\n      ? (this.getById(layer.parentId.split(TREE_SEPERATOR).pop()) as LayerGroup)\n      : undefined;\n    layer.add(parent);\n\n    return;\n  }\n\n  private _remove(layer: AnyLayer): AnyLayer | AnyLayer[] {\n    if (isBaseLayer(layer)) {\n      this.removeBaselayer(layer);\n    } else if (this.isOtherLayer(layer)) {\n      this.removeOtherLayer(layer);\n    } else if (this.isSystemLayer(layer)) {\n      this.removeSystemLayer(layer);\n    }\n\n    layer.remove();\n    return layer;\n  }\n\n  private removeBaselayer(layer: AnyLayer) {\n    this.removeIn(layer, this._baseLayers);\n  }\n\n  private removeSystemLayer(layer: AnyLayer) {\n    this.removeIn(layer, this._systemLayers);\n  }\n\n  private removeOtherLayer(layer: AnyLayer) {\n    this.removeIn(layer, this._otherLayers);\n  }\n\n  private removeIn(layer: AnyLayer, store: AnyLayer[]) {\n    const index = store.findIndex((sysLayer) => sysLayer.id === layer.id);\n    if (index === -1) {\n      return;\n    }\n    store.splice(index, 1);\n  }\n\n  private isSystemLayer(layer: AnyLayer): boolean {\n    return isLayerItem(layer) && layer.isIgoInternalLayer;\n  }\n\n  private isOtherLayer(layer: AnyLayer): boolean {\n    return isLayerLinked(layer) && !layer.showInLayerList;\n  }\n\n  private clearBaselayers(): void {\n    this.baseLayers.forEach((layer) => this._remove(layer));\n    this._baseLayers = [];\n  }\n\n  private clearTree(): void {\n    this.treeLayers.forEach((layer) => this._remove(layer));\n    this.tree.clear();\n  }\n\n  private clearSystems(): void {\n    this._systemLayers.forEach((layer) => this._remove(layer));\n    this._systemLayers = [];\n  }\n\n  private clearOther(): void {\n    this._otherLayers.forEach((layer) => this._remove(layer));\n    this._otherLayers = [];\n  }\n\n  private getZindexOffset(layer: AnyLayer, previousOffset = 0): number {\n    return layer.zIndex ? 0 : previousOffset++;\n  }\n\n  private setZindex(layer: AnyLayer, offset?: number): void {\n    if (isBaseLayer(layer)) {\n      return this.handleBaselayerZIndex(layer, offset);\n    }\n    if (layer.zIndex === undefined || layer.zIndex === 0) {\n      const maxZIndex = Math.max(\n        ZINDEX_MIN,\n        ...this.treeLayers.map((l) => l.zIndex)\n      );\n      layer.zIndex = maxZIndex + 1 + (offset ?? 0);\n    }\n  }\n\n  private handleBaselayerZIndex(layer: Layer, offset?: number) {\n    const maxZIndex = Math.max(0, ...this.baseLayers.map((l) => l.zIndex));\n\n    const zIndex = maxZIndex + 1 + (offset ?? 0);\n    layer.zIndex = zIndex > ZINDEX_MIN ? ZINDEX_MIN : zIndex;\n  }\n\n  private notify(): void {\n    this.layersFlattened = [...this.tree.flattened];\n    this._layers$.next([...this.treeLayers]);\n    this._baseLayers$.next([...this.baseLayers]);\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ListComponent, ListItemDirective } from '@igo2/common/list';\n\nimport { AnyLayerOptions, LayerService } from '../../shared';\nimport { LayerUnavailableComponent } from '../layer-unavailable.component';\n\n@Component({\n  selector: 'igo-layer-unavailable-list',\n  templateUrl: './layer-unavailable-list.component.html',\n  styleUrls: ['./layer-unavailable-list.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [ListComponent, ListItemDirective, LayerUnavailableComponent]\n})\nexport class LayerUnavailableListComponent {\n  @Input() layersOptions: AnyLayerOptions[];\n\n  constructor(private layerService: LayerService) {}\n\n  deleteUnavailableLayer(options: AnyLayerOptions): void {\n    this.layerService.deleteUnavailableLayers(options);\n  }\n}\n","<igo-list [navigation]=\"false\" [selection]=\"false\">\n  <igo-layer-unavailable\n    *ngFor=\"let layer of layersOptions\"\n    igoListItem\n    [layerOptions]=\"layer\"\n    (remove)=\"deleteUnavailableLayer($event)\"\n  >\n  </igo-layer-unavailable>\n</igo-list>\n","import { NgIf, NgTemplateOutlet } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSliderChange, MatSliderModule } from '@angular/material/slider';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FormDialogService } from '@igo2/common/form';\nimport { PanelComponent } from '@igo2/common/panel';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport * as olextent from 'ol/extent';\n\nimport type { MapBase } from '../../map/shared/map.abstract';\nimport { LayerListToolService } from '../layer-list-tool';\nimport { LayerViewerOptions } from '../layer-viewer/layer-viewer.interface';\nimport { LayerController } from '../shared/layer-controller';\nimport type { AnyLayer, LayerGroup } from '../shared/layers';\nimport {\n  LinkedProperties,\n  isLayerLinked,\n  isLayerLinkedTogether\n} from '../shared/layers/linked';\nimport { isBaseLayer, isLayerGroup, isLayerItem } from '../utils/layer.utils';\n\n@Component({\n  selector: 'igo-layer-viewer-bottom-actions',\n  templateUrl: './layer-viewer-bottom-actions.component.html',\n  styleUrls: ['./layer-viewer-bottom-actions.component.scss'],\n  standalone: true,\n  imports: [\n    NgIf,\n    NgTemplateOutlet,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    MatBadgeModule,\n    MatMenuModule,\n    MatSliderModule,\n    IgoLanguageModule,\n    PanelComponent\n  ],\n  providers: [LayerListToolService, FormDialogService]\n})\nexport class LayerViewerBottomActionsComponent {\n  orderable = true;\n\n  @Input({ required: true }) map: MapBase;\n  @Input({ required: true }) controller: LayerController;\n  @Input({ required: true }) searchTerm: string;\n  @Input() viewerOptions: LayerViewerOptions;\n\n  @Output() layerChange = new EventEmitter();\n\n  get layersFlattened() {\n    return this.controller.layersFlattened;\n  }\n\n  get hasMultipleSelection() {\n    return this.controller.selected.length > 1;\n  }\n\n  get selected() {\n    return this.controller.selected;\n  }\n\n  get opacity() {\n    return Math.round(this.selected[0].opacity * 100);\n  }\n  set opacity(opacity: number) {\n    this.selected[0].opacity = opacity / 100;\n  }\n\n  get allSelectionVisibilityHidden(): boolean {\n    return this.controller.selected.every((layer) => !layer.visible);\n  }\n\n  get isSelectionRaisable(): boolean {\n    return this.controller.selected.every((layer) => this.isRaisable(layer));\n  }\n  get isSelectionLowerable(): boolean {\n    return this.controller.selected.every((layer) => this.isLowerable(layer));\n  }\n\n  get canRename(): boolean {\n    if (!this.viewerOptions.group.canRename || this.selected.length > 1) {\n      return false;\n    }\n\n    const layer = this.selected[0];\n    return isLayerGroup(layer);\n  }\n\n  constructor(private layerListToolService: LayerListToolService) {}\n\n  isLayerItem = isLayerItem;\n\n  handleRename(): void {\n    const layer = this.selected[0] as LayerGroup;\n    this.layerListToolService.renameGroup(layer).subscribe((name) => {\n      if (!name) {\n        return;\n      }\n      layer.title = name;\n      this.layerChange.emit();\n    });\n  }\n\n  isLayersRemovable(layers: AnyLayer[]): boolean {\n    if (layers.length === 1) {\n      return this.isLayerRemovable(layers[0]);\n    }\n    return layers?.every((l) => this.isLayerRemovable(l));\n  }\n\n  removeLayers(): void {\n    this.controller.remove(...this.selected);\n    this.controller.clearSelection();\n  }\n\n  isExtentsValid(): boolean {\n    let valid = false;\n    const layersExtent = olextent.createEmpty();\n    const maxLayerZoomExtent = this.map.viewController.maxLayerZoomExtent;\n    if (\n      this.selected.some(\n        (layer) =>\n          isLayerItem(layer) && layer.options.showButtonZoomToExtent === false\n      )\n    ) {\n      return false;\n    }\n\n    for (const layer of this.selected) {\n      const layerExtent = layer.options.extent;\n\n      if (layerExtent && !layerExtent.includes(Infinity)) {\n        olextent.extend(layersExtent, layerExtent);\n      }\n    }\n\n    if (!olextent.isEmpty(layersExtent)) {\n      if (maxLayerZoomExtent) {\n        valid = olextent.containsExtent(maxLayerZoomExtent, layersExtent);\n      } else {\n        valid = true;\n      }\n    }\n    return valid;\n  }\n  zoomLayersExtents(): void {\n    const layersExtent = olextent.createEmpty();\n\n    for (const layer of this.selected) {\n      const layerExtent = layer.options.extent;\n\n      if (layerExtent) {\n        olextent.extend(layersExtent, layerExtent);\n      }\n    }\n    this.map.viewController.zoomToExtent(\n      layersExtent as [number, number, number, number]\n    );\n  }\n\n  raiseSelection(): void {\n    this.map.layerController.raise(...this.selected);\n  }\n\n  lowerSelection(): void {\n    this.map.layerController.lower(...this.selected);\n  }\n\n  changeOpacity(event: MatSliderChange): void {\n    this.opacity = event.value;\n  }\n\n  toggleSelectionVisibility(): void {\n    this.selected.forEach((layer) => {\n      layer.visible = !layer.visible;\n    });\n    this.layerChange.emit();\n  }\n\n  private isLowerable(layer: AnyLayer): boolean {\n    if (isBaseLayer(layer)) {\n      return false;\n    }\n    const recipient = this.getRecipientOfVisibleLayer(layer);\n    const index = recipient.findIndex((lay) => lay.id === layer.id);\n    if (index >= recipient.length - 1) {\n      return false;\n    }\n\n    if (isLayerLinked(layer)) {\n      const layerBelow = recipient[index + 1];\n      return !isLayerLinkedTogether(\n        layer,\n        layerBelow,\n        this.controller.layersFlattened,\n        LinkedProperties.ZINDEX\n      );\n    }\n\n    return true;\n  }\n\n  private isRaisable(layer: AnyLayer): boolean {\n    if (isBaseLayer(layer)) {\n      return false;\n    }\n    const recipient = this.getRecipientOfVisibleLayer(layer);\n    const index = recipient.findIndex((lay) => lay.id === layer.id);\n    if (index <= 0) {\n      return false;\n    }\n\n    if (isLayerLinked(layer)) {\n      const layerAbove = recipient[index - 1];\n      return !isLayerLinkedTogether(\n        layer,\n        layerAbove,\n        this.controller.layersFlattened,\n        LinkedProperties.ZINDEX\n      );\n    }\n\n    return true;\n  }\n\n  private getRecipientOfVisibleLayer(layer: AnyLayer): AnyLayer[] {\n    return [...this.controller.getLayerRecipient(layer)].filter(\n      (layer) => layer.showInLayerList\n    );\n  }\n\n  private isLayerRemovable(layer: AnyLayer): boolean {\n    if (isLayerGroup(layer)) {\n      return true;\n    }\n    return layer.options.removable !== false;\n  }\n}\n","<igo-panel\n  class=\"igo-layer-actions-container\"\n  [title]=\"\n    hasMultipleSelection\n      ? ('igo.geo.layer.tools' | translate)\n      : selected[0].title\n  \"\n>\n  <div class=\"igo-layer-button-group\">\n    <button\n      *ngIf=\"isLayersRemovable(selected)\"\n      class=\"delete-button\"\n      mat-icon-button\n      color=\"warn\"\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"\n        (hasMultipleSelection\n          ? isLayersRemovable(selected)\n            ? ('igo.geo.layer.removeSelectedLayers' | translate)\n            : ('igo.geo.layer.removeSelectedLayersRestriction' | translate)\n          : 'igo.geo.layer.removeLayer'\n        ) | translate\n      \"\n      (click)=\"removeLayers()\"\n    >\n      <mat-icon\n        aria-hidden=\"false\"\n        [matBadge]=\"'!'\"\n        matBadgeColor=\"warn\"\n        matBadgeSize=\"medium\"\n        [matBadgeHidden]=\"!hasMultipleSelection || isLayersRemovable(selected)\"\n        >delete</mat-icon\n      >\n    </button>\n\n    <button\n      *ngIf=\"hasMultipleSelection\"\n      class=\"eye-button\"\n      mat-icon-button\n      color=\"primary\"\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [disabled]=\"selected.length === 0\"\n      [matTooltip]=\"\n        allSelectionVisibilityHidden\n          ? ('igo.geo.layer.showSelectedLayers' | translate)\n          : ('igo.geo.layer.hideSelectedLayers' | translate)\n      \"\n      (click)=\"toggleSelectionVisibility()\"\n    >\n      <mat-icon>{{\n        allSelectionVisibilityHidden ? 'visibility_off' : 'visibility'\n      }}</mat-icon>\n    </button>\n\n    <button\n      class=\"down-button\"\n      mat-icon-button\n      color=\"primary\"\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"\n        searchTerm\n          ? ('igo.geo.layer.filterLowerLayer' | translate)\n          : ('igo.geo.layer.lowerLayer' | translate)\n      \"\n      [disabled]=\"!isSelectionLowerable\"\n      (click)=\"lowerSelection()\"\n    >\n      <mat-icon\n        aria-hidden=\"false\"\n        [matBadge]=\"searchTerm ? '!' : ''\"\n        matBadgeColor=\"warn\"\n        matBadgeSize=\"medium\"\n        [matBadgeHidden]=\"!isSelectionLowerable\"\n        >arrow_downward</mat-icon\n      >\n    </button>\n\n    <button\n      class=\"up-button\"\n      color=\"primary\"\n      mat-icon-button\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"\n        searchTerm\n          ? ('igo.geo.layer.filterRaiseLayer' | translate)\n          : ('igo.geo.layer.raiseLayer' | translate)\n      \"\n      [disabled]=\"!isSelectionRaisable\"\n      (click)=\"raiseSelection()\"\n    >\n      <mat-icon\n        aria-hidden=\"false\"\n        [matBadge]=\"searchTerm ? '!' : ''\"\n        matBadgeColor=\"warn\"\n        matBadgeSize=\"medium\"\n        [matBadgeHidden]=\"!isSelectionRaisable\"\n        >arrow_upward</mat-icon\n      >\n    </button>\n\n    <ng-container *ngIf=\"controller.selected.length === 1\">\n      <button\n        class=\"opacity-button\"\n        color=\"primary\"\n        mat-icon-button\n        tooltip-position=\"below\"\n        matTooltipShowDelay=\"500\"\n        [matMenuTriggerFor]=\"opacityMenu\"\n        [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n      >\n        <mat-icon\n          aria-hidden=\"false\"\n          [matBadge]=\"opacity === 100 ? null : opacity\"\n          matBadgeColor=\"primary\"\n          matBadgeSize=\"medium\"\n          >opacity</mat-icon\n        >\n      </button>\n\n      <mat-menu #opacityMenu=\"matMenu\" class=\"panel-opacity-menu\">\n        <mat-slider\n          id=\"opacity-slider\"\n          color=\"primary\"\n          discrete\n          step=\"5\"\n          [min]=\"0\"\n          [max]=\"100\"\n          [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n          (click)=\"$event.stopPropagation()\"\n          matTooltipShowDelay=\"500\"\n          tooltip-position=\"below\"\n          #ngSlider\n          ><input\n            matSliderThumb\n            [value]=\"opacity\"\n            (input)=\"\n              changeOpacity({\n                source: ngSliderThumb,\n                parent: ngSlider,\n                value: ngSliderThumb.value\n              })\n            \"\n            #ngSliderThumb=\"matSliderThumb\"\n          />\n        </mat-slider>\n      </mat-menu>\n    </ng-container>\n\n    <button\n      *ngIf=\"isExtentsValid()\"\n      class=\"zoomLayer-button\"\n      color=\"primary\"\n      mat-icon-button\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"\n        (hasMultipleSelection\n          ? 'igo.geo.layer.zoomLayers'\n          : 'igo.geo.layer.zoomLayer'\n        ) | translate\n      \"\n      (click)=\"zoomLayersExtents()\"\n    >\n      <mat-icon matBadgeColor=\"primary\" matBadgeSize=\"medium\"\n        >frame_inspect</mat-icon\n      >\n    </button>\n\n    <button\n      *ngIf=\"canRename\"\n      color=\"primary\"\n      mat-icon-button\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"'igo.geo.layer.group.rename' | translate\"\n      (click)=\"handleRename()\"\n    >\n      <mat-icon>edit</mat-icon>\n    </button>\n\n    <ng-content></ng-content>\n  </div>\n</igo-panel>\n","import { NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, EMPTY, Observable, combineLatest, timer } from 'rxjs';\nimport { debounce, debounceTime } from 'rxjs/operators';\n\nimport type { MapBase } from '../../map/shared/map.abstract';\nimport { LayerListComponent } from '../layer-list';\nimport { LayerListToolComponent } from '../layer-list-tool';\nimport {\n  LayerListControlsEnum,\n  LayerListControlsOptions\n} from '../layer-list-tool/layer-list-tool.interface';\nimport { LayerUnavailableListComponent } from '../layer-unavailable';\nimport { LayerViewerBottomActionsComponent } from '../layer-viewer-bottom-actions';\nimport { LayerController } from '../shared';\nimport { LayerService } from '../shared/layer.service';\nimport {\n  AnyLayer,\n  ImageLayerOptions,\n  LayerGroup,\n  LayerOptionsBase\n} from '../shared/layers';\nimport {\n  isLayerGroup,\n  isLayerItem,\n  sortLayersByZindex\n} from '../utils/layer.utils';\nimport { LayerToolMode, LayerViewerOptions } from './layer-viewer.interface';\n\n@Component({\n  selector: 'igo-layer-viewer',\n  templateUrl: './layer-viewer.component.html',\n  styleUrls: ['./layer-viewer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    NgIf,\n    NgTemplateOutlet,\n    MatButtonModule,\n    MatCheckboxModule,\n    MatDividerModule,\n    MatIconModule,\n    LayerListComponent,\n    LayerUnavailableListComponent,\n    LayerViewerBottomActionsComponent,\n    IgoLanguageModule,\n    LayerListToolComponent\n  ],\n  standalone: true\n})\nexport class LayerViewerComponent implements OnInit {\n  layers: AnyLayer[];\n  baselayers: AnyLayer[];\n  keyword$ = new BehaviorSubject<string>(undefined);\n  mode: LayerToolMode;\n  isDragDropDisabled: boolean;\n\n  @Input({ required: true }) map: MapBase;\n  @Input() options: LayerViewerOptions;\n  @Input() isDesktop: boolean;\n  @Input() excludeBaseLayers: boolean;\n\n  @Output() appliedFilterAndSort = new EventEmitter<LayerListControlsOptions>();\n\n  @ContentChild('customBottomActions', { read: TemplateRef })\n  customBottomActions: TemplateRef<unknown> | undefined;\n\n  get layerViewerOptions(): LayerViewerOptions {\n    return {\n      ...this.options,\n      mode: this.mode\n    };\n  }\n\n  get layerController() {\n    return this.map.layerController as LayerController;\n  }\n\n  get unavailableLayers(): LayerOptionsBase[] {\n    return this.layerService.unavailableLayers;\n  }\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private layerService: LayerService\n  ) {}\n\n  isLayerItem = isLayerItem;\n\n  /**\n   * Subscribe to the search term stream and trigger researches\n   * @internal\n   */\n  ngOnInit(): void {\n    const baseObs$: [Observable<AnyLayer[]>, Observable<string>] = [\n      this.layerController.layers$,\n      this.keyword$\n    ];\n\n    const otherObs$: Observable<AnyLayer[]>[] = [];\n    if (!this.excludeBaseLayers) {\n      otherObs$.push(this.layerController.baseLayers$);\n    }\n\n    combineLatest([...baseObs$, ...otherObs$])\n      .pipe(debounceTime(10))\n      .subscribe(([layers, keyword, baselayers]) => {\n        if (layers) {\n          this.layers = this.computeLayers(layers, keyword);\n        }\n\n        if (baselayers) {\n          const baselayersInViewer = baselayers.filter(\n            (layer) => layer.showInLayerList\n          );\n          this.baselayers = this.computeLayers(baselayersInViewer, keyword);\n        }\n\n        this.cdr.markForCheck();\n      });\n    this.keyword$\n      .pipe(\n        debounce(() => {\n          return this.layers?.length === 0 ? EMPTY : timer(50);\n        })\n      )\n      .subscribe((keyword) => {\n        this.isDragDropDisabled = !!keyword;\n        this.appliedFilterAndSort.emit({\n          keyword\n        });\n      });\n  }\n\n  clearKeyword() {\n    this.keyword$.next(undefined);\n  }\n\n  onVisibilityOnlyChange(): void {\n    this.layers = this.computeLayers(\n      [...this.layerController.treeLayers],\n      this.keyword$.value\n    );\n  }\n\n  onLayerChange(): void {\n    // Trigger change detection for component using layers\n    this.layers = [...this.layers];\n  }\n\n  onSearchChange(value: string | undefined): void {\n    this.keyword$.next(value);\n  }\n\n  toggleSelectionMode(active: boolean): void {\n    if (!active) {\n      this.layerController.clearSelection();\n    }\n    this.mode = active ? 'selection' : undefined;\n  }\n\n  toggleAllRows() {\n    const isAllSelected = this.isAllSelected();\n    this.layerController.clearSelection();\n    if (isAllSelected) {\n      return;\n    }\n    this.layerController.select(...this.layerController.treeLayers);\n  }\n\n  isAllSelected(): boolean {\n    const numSelected = this.layerController.selected.length;\n    const numRows = this.layerController.treeLayers.length;\n    return (\n      numSelected >= numRows &&\n      this.layerController.treeLayers.every((layer) =>\n        this.layerController.isSelected(layer)\n      )\n    );\n  }\n\n  isScrolledIntoView(elemSource, elem) {\n    const docViewTop = elemSource.scrollTop;\n    const docViewBottom = docViewTop + elemSource.clientHeight;\n\n    const elemTop = elem.offsetTop;\n    const elemBottom = elemTop + elem.clientHeight;\n    return elemBottom <= docViewBottom && elemTop >= docViewTop;\n  }\n\n  createGroup(group: LayerGroup): void {\n    this.map.layerController.add(group);\n    this.cdr.markForCheck();\n  }\n\n  private computeLayers(layers: AnyLayer[], keyword: string): AnyLayer[] {\n    const layersOut = this.filterLayers([...layers], keyword);\n    return sortLayersByZindex(layersOut, 'desc');\n  }\n\n  private filterLayers(layers: AnyLayer[], keyword: string): AnyLayer[] {\n    if (\n      this.options?.filterAndSortOptions?.showToolbar ===\n      LayerListControlsEnum.never\n    ) {\n      return layers;\n    }\n\n    if (keyword) {\n      layers = this.filterSearch(keyword, layers);\n    }\n\n    return layers;\n  }\n\n  /** Recursive */\n  private filterSearch(value: string, layers: AnyLayer[]): AnyLayer[] {\n    if (!value) {\n      return layers;\n    }\n\n    return [...layers].reduce((results: AnyLayer[], layer) => {\n      const clonedLayer: AnyLayer = layer.clone() as AnyLayer;\n      if (isLayerGroup(clonedLayer)) {\n        if (this.layerHasTerm(value, clonedLayer)) {\n          return results.concat(clonedLayer);\n        }\n\n        clonedLayer.children = this.filterSearch(value, [\n          ...clonedLayer.children\n        ]);\n        if (clonedLayer.children.length) {\n          return results.concat(clonedLayer);\n        }\n      }\n\n      if (this.layerHasTerm(value, clonedLayer)) {\n        return results.concat(clonedLayer);\n      }\n      return results;\n    }, []);\n  }\n\n  private layerHasTerm(term: string, layer: AnyLayer): boolean {\n    const metadata = (layer.options as ImageLayerOptions).metadata ?? {};\n    const keywords = metadata.keywordList || [];\n    const layerKeywords = keywords.map((kw: string) => {\n      return kw.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n    });\n\n    const localKeyword = this.normalizeString(term);\n    const layerTitle = this.normalizeString(layer.title);\n    const dataSourceType = isLayerGroup(layer)\n      ? ''\n      : layer.dataSource.options.type || '';\n    const keywordRegex = new RegExp(localKeyword, 'gi');\n    const keywordInList =\n      layerKeywords.find((kw: string) => keywordRegex.test(kw)) !== undefined;\n    return (\n      keywordRegex.test(layerTitle) ||\n      term.toLowerCase() === dataSourceType.toLowerCase() ||\n      keywordInList\n    );\n  }\n\n  private normalizeString(value: string): string {\n    return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n  }\n}\n","<igo-layer-list-tool\n  floatLabel=\"auto\"\n  [viewerOptions]=\"layerViewerOptions\"\n  [term]=\"options?.filterAndSortOptions?.keyword\"\n  [mode]=\"mode\"\n  (addedLayer)=\"createGroup($event)\"\n  (modeChange)=\"toggleSelectionMode($event)\"\n  (searchChange)=\"onSearchChange($event)\"\n  (visibilityOnlyChange)=\"onVisibilityOnlyChange()\"\n>\n</igo-layer-list-tool>\n\n<ng-container *ngIf=\"mode === 'selection'\">\n  <mat-divider></mat-divider>\n  <div class=\"header-item active-background\">\n    <mat-checkbox\n      class=\"select-all-checkbox\"\n      [color]=\"isAllSelected() ? 'primary' : 'accent'\"\n      (change)=\"toggleAllRows()\"\n      [checked]=\"isAllSelected()\"\n      [indeterminate]=\"!isAllSelected() && layerController.selected.length > 0\"\n    >\n      {{\n        isAllSelected()\n          ? ('igo.geo.layer.deselectAll' | translate)\n          : ('igo.geo.layer.selectAll' | translate)\n      }}\n    </mat-checkbox>\n\n    <button mat-icon-button color=\"warn\" (click)=\"toggleSelectionMode(false)\">\n      <mat-icon>close</mat-icon>\n    </button>\n  </div>\n</ng-container>\n<mat-divider></mat-divider>\n\n<div class=\"layer-view\">\n  <ng-container\n    *ngIf=\"\n      layers?.length > 0 ||\n        unavailableLayers?.length > 0 ||\n        baselayers?.length > 0;\n      else showEmptyList\n    \"\n  >\n    <div class=\"layer-list-container\">\n      <igo-layer-unavailable-list\n        *ngIf=\"unavailableLayers?.length\"\n        [layersOptions]=\"unavailableLayers\"\n      ></igo-layer-unavailable-list>\n\n      <igo-layer-list\n        [controller]=\"map.layerController\"\n        [layers]=\"layers\"\n        [viewerOptions]=\"layerViewerOptions\"\n        [isDragDropDisabled]=\"isDragDropDisabled\"\n        [isDesktop]=\"isDesktop\"\n      ></igo-layer-list>\n\n      <div *ngIf=\"!excludeBaseLayers && baselayers?.length\">\n        <mat-divider></mat-divider>\n        <igo-layer-list\n          [controller]=\"map.layerController\"\n          [layers]=\"baselayers\"\n          [viewerOptions]=\"layerViewerOptions\"\n          [isDragDropDisabled]=\"true\"\n          [isDesktop]=\"isDesktop\"\n        ></igo-layer-list>\n      </div>\n    </div>\n  </ng-container>\n\n  <ng-template #showEmptyList>\n    <ng-content select=\"[emptyList]\"></ng-content>\n  </ng-template>\n</div>\n\n<igo-layer-viewer-bottom-actions\n  *ngIf=\"layerController.hasSelection\"\n  [map]=\"map\"\n  [viewerOptions]=\"layerViewerOptions\"\n  [controller]=\"layerController\"\n  [searchTerm]=\"keyword$.value\"\n  (layerChange)=\"onLayerChange()\"\n>\n  <ng-container\n    *ngIf=\"\n      layerController.selected.length === 1 &&\n      isLayerItem(layerController.selected[0])\n    \"\n    [ngTemplateOutlet]=\"customBottomActions\"\n    [ngTemplateOutletContext]=\"{ layer: layerController.selected[0] }\"\n  ></ng-container>\n</igo-layer-viewer-bottom-actions>\n\n<ng-content></ng-content>\n","import { NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnInit\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { VectorLayer } from '../shared/layers/vector-layer';\nimport { VectorLayerOptions } from '../shared/layers/vector-layer.interface';\n\n@Component({\n  selector: 'igo-track-feature-button',\n  templateUrl: './track-feature-button.component.html',\n  styleUrls: ['./track-feature-button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class TrackFeatureButtonComponent implements OnInit {\n  @Input() layer: VectorLayer;\n\n  @Input() trackFeature = false;\n\n  get options(): VectorLayerOptions {\n    if (!this.layer) {\n      return;\n    }\n    return this.layer.options;\n  }\n\n  public color = 'primary';\n\n  ngOnInit() {\n    this.color = this.trackFeature ? 'primary' : 'basic';\n  }\n\n  toggleTrackFeature() {\n    if (this.trackFeature) {\n      this.layer.disableTrackFeature();\n      this.color = 'basic';\n    } else {\n      this.layer.enableTrackFeature(this.layer.options.trackFeature);\n      this.color = 'primary';\n    }\n    this.trackFeature = !this.trackFeature;\n  }\n}\n","<button\n  *ngIf=\"options.trackFeature\"\n  mat-icon-button\n  collapsibleButton\n  tooltip-position=\"below\"\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"'igo.geo.layer.trackFeature' | translate\"\n  [color]=\"color\"\n  (click)=\"toggleTrackFeature()\"\n>\n  <mat-icon>my_location</mat-icon>\n</button>\n","import OlFeature from 'ol/Feature';\nimport { asArray as ColorAsArray } from 'ol/color';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport * as olstyle from 'ol/style';\n\nimport { StyleService } from '../../../style/style-service/style.service';\nimport { createOverlayMarkerStyle } from './overlay-marker-style.utils';\n\n/**\n * Create an overlay style with markers for points and a basic stroke/fill\n * combination for lines and polygons\n * @returns Style function\n */\nexport function createOverlayLayerStyle(): (\n  olFeature: OlFeature<OlGeometry>,\n  resolution: number\n) => olstyle.Style {\n  const defaultStyle = createOverlayDefaultStyle();\n  const markerStyle = createOverlayMarkerStyle();\n\n  let style;\n\n  return (olFeature: OlFeature<OlGeometry>, resolution) => {\n    if (olFeature.getId() === 'bufferFeature') {\n      style = createBufferStyle(\n        olFeature.get('bufferStroke'),\n        2,\n        olFeature.get('bufferFill'),\n        olFeature.get('bufferText')\n      );\n      return style;\n    } else {\n      const customStyle = olFeature.get('_style');\n      if (customStyle) {\n        const styleService = new StyleService();\n        return styleService.createStyle(customStyle, olFeature, resolution);\n      }\n      const geometryType = olFeature.getGeometry().getType();\n      style = geometryType === 'Point' ? markerStyle : defaultStyle;\n      style.getText().setText(olFeature.get('_mapTitle'));\n      return style;\n    }\n  };\n}\n\n/**\n * Create a basic style for lines and polygons\n * @returns Style\n */\nexport function createOverlayDefaultStyle({\n  text,\n  strokeWidth = 2,\n  fillColor = [0, 161, 222, 0.3],\n  strokeColor = [0, 161, 222, 0.9]\n}: {\n  text?: string;\n  strokeWidth?: number;\n  fillColor?: string | number[];\n  strokeColor?: string | number[];\n} = {}): olstyle.Style {\n  const fillWithOpacity = ColorAsArray(fillColor).slice(0);\n  const strokeWithOpacity = ColorAsArray(strokeColor).slice(0);\n\n  const stroke = new olstyle.Stroke({\n    width: strokeWidth,\n    color: strokeWithOpacity\n  });\n\n  const fill = new olstyle.Fill({\n    color: fillWithOpacity\n  });\n\n  return new olstyle.Style({\n    stroke,\n    fill,\n    image: new olstyle.Circle({\n      radius: 5,\n      stroke,\n      fill\n    }),\n    text: new olstyle.Text({\n      text,\n      font: '12px Calibri,sans-serif',\n      fill: new olstyle.Fill({ color: '#000' }),\n      stroke: new olstyle.Stroke({ color: '#fff', width: 3 }),\n      overflow: true\n    })\n  });\n}\n\nfunction createBufferStyle(\n  strokeRGBA: [number, number, number, number] = [0, 161, 222, 1],\n  strokeWidth = 2,\n  fillRGBA: [number, number, number, number] = [0, 161, 222, 0.15],\n  bufferRadius?\n): olstyle.Style {\n  const stroke = new olstyle.Stroke({\n    width: strokeWidth,\n    color: strokeRGBA\n  });\n\n  const fill = new olstyle.Fill({\n    color: fillRGBA\n  });\n\n  return new olstyle.Style({\n    stroke,\n    fill,\n    image: new olstyle.Circle({\n      radius: 5,\n      stroke,\n      fill\n    }),\n    text: new olstyle.Text({\n      font: '12px Calibri,sans-serif',\n      text: bufferRadius,\n      fill: new olstyle.Fill({ color: '#000' }),\n      stroke: new olstyle.Stroke({ color: '#fff', width: 3 }),\n      overflow: true\n    })\n  });\n}\n","import { FeatureDataSource } from '../../datasource/shared/datasources';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport { createOverlayLayerStyle } from '../../style/shared/overlay/overlay-style.utils';\n\n/**\n * Create an overlay layer and it's source\n * @returns Overlay layer\n */\nexport function createOverlayLayer(): VectorLayer {\n  const overlayDataSource = new FeatureDataSource();\n  return new VectorLayer({\n    title: 'Overlay',\n    zIndex: 300,\n    source: overlayDataSource,\n    style: createOverlayLayerStyle()\n  });\n}\n","import OlFeature from 'ol/Feature';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\n\nimport { FeatureDataSource } from '../../datasource/shared/datasources';\nimport { FeatureMotion } from '../../feature/shared/feature.enums';\nimport type { Feature } from '../../feature/shared/feature.interfaces';\nimport {\n  featureToOl,\n  moveToOlFeatures\n} from '../../feature/shared/feature.utils';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport type { MapBase } from '../../map/shared/map.abstract';\nimport { createOverlayLayer } from './overlay.utils';\n\n/**\n * This class is simply a shortcut for adding features to a map.\n * It does nothing more than a standard layer but it's shipped with\n * a defautl style based on the geometry type of the features it contains.\n * @todo Enhance that by using a FeatureStore and strategies.\n */\nexport class Overlay<T extends MapBase = MapBase> {\n  /**\n   * The map to add the layer to\n   */\n  private map: T;\n\n  /**\n   * Overlay layer\n   */\n  private layer: VectorLayer;\n\n  /**\n   * Overlay layer's data source\n   */\n  get dataSource(): FeatureDataSource {\n    return this.layer.dataSource as FeatureDataSource;\n  }\n\n  constructor(map?: T) {\n    this.layer = createOverlayLayer();\n    this.setMap(map);\n  }\n\n  /**\n   * Bind this to a map and add the overlay layer to that map\n   * @param map Map\n   */\n  setMap(map: T) {\n    if (map === undefined) {\n      if (this.map !== undefined) {\n        this.map.ol.removeLayer(this.layer.ol);\n      }\n    } else {\n      map.ol.addLayer(this.layer.ol);\n    }\n    this.map = map;\n  }\n\n  /**\n   * Set the overlay features and, optionally, move to them\n   * @param features Features\n   * @param motion Optional: Apply this motion to the map view\n   * @param sourceId Optional: Remove features of certain sourceId (ex: 'Map' for query features)\n   */\n  setFeatures(\n    features: Feature[],\n    motion: FeatureMotion = FeatureMotion.Default,\n    sourceId?: string\n  ) {\n    if (sourceId) {\n      for (const olFeature of this.dataSource.ol.getFeatures()) {\n        if (olFeature.get('_sourceId') === sourceId) {\n          this.removeOlFeature(olFeature);\n        }\n      }\n    } else {\n      this.clear();\n    }\n    this.addFeatures(features, motion);\n  }\n\n  /**\n   * Add a feature to the  overlay and, optionally, move to it\n   * @param feature Feature\n   * @param motion Optional: Apply this motion to the map view (default on FeatureMotion.Default)\n   */\n  addFeature(feature: Feature, motion: FeatureMotion = FeatureMotion.Default) {\n    this.addFeatures([feature], motion);\n  }\n\n  /**\n   * Add features to the  overlay and, optionally, move to them\n   * @param features Features\n   * @param motion Optional: Apply this motion to the map view\n   */\n  addFeatures(\n    features: Feature[],\n    motion: FeatureMotion = FeatureMotion.Default\n  ) {\n    const olFeatures = [];\n    features.forEach((feature: Feature) => {\n      const olFeature = featureToOl(feature, this.map.projection);\n      const olGeometry = olFeature.getGeometry();\n      if (olGeometry === null) {\n        return;\n      }\n      olFeatures.push(olFeature);\n    });\n\n    this.addOlFeatures(olFeatures, motion);\n  }\n\n  /**\n   * Add a OpenLayers feature to the  overlay and, optionally, move to it\n   * @param olFeature OpenLayers Feature\n   * @param motion Optional: Apply this motion to the map view\n   */\n  addOlFeature(\n    olFeature: OlFeature<OlGeometry>,\n    motion: FeatureMotion = FeatureMotion.Default\n  ) {\n    this.addOlFeatures([olFeature], motion);\n  }\n\n  /**\n   * Add OpenLayers features to the overlay and, optionally, move to them\n   * @param olFeatures OpenLayers Features\n   * @param motion Optional: Apply this motion to the map view\n   */\n  addOlFeatures(\n    olFeatures: OlFeature<OlGeometry>[],\n    motion: FeatureMotion = FeatureMotion.Default\n  ) {\n    this.dataSource.ol.addFeatures(olFeatures);\n    moveToOlFeatures(this.map.viewController, olFeatures, motion);\n  }\n\n  /**\n   * Remove a feature from the overlay\n   * @param feature Feature\n   */\n  removeFeature(feature: Feature) {\n    this.removeFeatures([feature]);\n  }\n\n  /**\n   * Remove features from the overlay\n   * @param features Features\n   */\n  removeFeatures(features: Feature[]) {\n    features.forEach((feature: Feature) => {\n      if (feature.meta) {\n        if (this.dataSource.ol.getFeatureById(feature.meta.id)) {\n          this.removeOlFeature(\n            this.dataSource.ol.getFeatureById(feature.meta.id)\n          );\n        }\n      }\n    });\n  }\n\n  /**\n   * Remove an OpenLayers feature from the overlay\n   * @param olFeature OpenLayers Feature\n   */\n  removeOlFeature(olFeature: OlFeature<OlGeometry>) {\n    this.dataSource.ol.removeFeature(olFeature);\n  }\n\n  /**\n   * Clear the overlay\n   */\n  clear() {\n    this.dataSource.ol.clear();\n  }\n}\n","import OlMap from 'ol/Map';\nimport { unByKey } from 'ol/Observable';\nimport { EventsKey } from 'ol/events';\n\n/**\n * Base map controller\n */\nexport class MapController {\n  /**\n   * OL Map\n   */\n  protected olMap: OlMap;\n\n  /**\n   * Array of observer keys\n   */\n  protected observerKeys: EventsKey[] = [];\n\n  /**\n   * Return the OL map this controller is bound to\n   * @returns OL Map\n   */\n  getOlMap(): OlMap {\n    return this.olMap;\n  }\n\n  /**\n   * Add or remove this controller to/from a map.\n   * @param map OL Map\n   */\n  setOlMap(olMap: OlMap | undefined) {\n    if (olMap !== undefined && this.getOlMap() !== undefined) {\n      throw new Error('This controller is already bound to a map.');\n    }\n\n    if (olMap === undefined) {\n      this.teardownObservers();\n      this.olMap = olMap;\n      return;\n    }\n\n    this.olMap = olMap;\n  }\n\n  /**\n   * Teardown any observers\n   */\n  teardownObservers() {\n    this.observerKeys.forEach((key: EventsKey) => unByKey(key));\n    this.observerKeys = [];\n  }\n}\n","import { Coordinate } from 'ol/coordinate';\nimport { ProjectionLike } from 'ol/proj';\n\nexport interface GeolocationOptions {\n  activateDefault?: boolean;\n  basic?: boolean; // to control the button icon.\n  followPosition?: boolean; // to overide the followPosition define at the context level.\n  button?: {\n    visible: boolean;\n  };\n}\n\nexport interface MapGeolocationControllerOptions {\n  projection: ProjectionLike;\n  accuracyThreshold?: number;\n  followPosition?: boolean;\n  buffer?: GeolocationBuffer;\n}\n\nexport interface MapGeolocationState {\n  position: Coordinate;\n  projection: string;\n  accuracy: number;\n  altitude: number;\n  altitudeAccuracy: number;\n  heading: number;\n  speed: number;\n  enableHighAccuracy: boolean;\n  timestamp: Date;\n}\nexport interface GeolocationBuffer {\n  bufferRadius?: number;\n  bufferStroke?: [number, number, number, number];\n  bufferFill?: [number, number, number, number];\n  showBufferRadius?: boolean;\n}\n\nexport enum GeolocationOverlayType {\n  Position = 'position',\n  PositionDirection = 'positionDirection',\n  Accuracy = 'accuracy',\n  Buffer = 'buffer'\n}\n","/* eslint-disable @typescript-eslint/no-unused-expressions */\nimport { ConfigService } from '@igo2/core/config';\nimport { StorageService } from '@igo2/core/storage';\n\nimport olFeature from 'ol/Feature';\nimport olGeolocation from 'ol/Geolocation';\nimport OlMap from 'ol/Map';\nimport { Point, Polygon } from 'ol/geom';\nimport OlCircle from 'ol/geom/Circle';\nimport Geometry from 'ol/geom/Geometry';\nimport { fromCircle } from 'ol/geom/Polygon';\nimport * as olproj from 'ol/proj';\nimport * as olSphere from 'ol/sphere';\nimport * as olstyle from 'ol/style';\n\nimport { BehaviorSubject, Subscription, interval } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\nimport { FeatureMotion } from '../../../feature/shared/feature.enums';\nimport {\n  computeOlFeaturesExtent,\n  featuresAreOutOfView,\n  hideOlFeature,\n  moveToOlFeatures\n} from '../../../feature/shared/feature.utils';\nimport { Overlay } from '../../../overlay/shared/overlay';\nimport type { MapBase } from '../map.abstract';\nimport { MapViewOptions } from '../map.interface';\nimport { MapController } from './controller';\nimport {\n  GeolocationBuffer,\n  GeolocationOverlayType,\n  MapGeolocationControllerOptions,\n  MapGeolocationState\n} from './geolocation.interface';\n\n/**\n * Controller to handle map view interactions\n */\nexport class MapGeolocationController extends MapController {\n  private arrowRotation: number;\n  private subscriptions$$: Subscription[] = [];\n  private geolocationOverlay: Overlay;\n  private positionFeatureStyle: olstyle.Style | olstyle.Style[] =\n    new olstyle.Style({\n      image: new olstyle.Circle({\n        radius: 6,\n        fill: new olstyle.Fill({\n          color: '#3399CC'\n        }),\n        stroke: new olstyle.Stroke({\n          color: '#fff',\n          width: 2\n        })\n      })\n    });\n  private accuracyFeatureStyle: olstyle.Style | olstyle.Style[] =\n    new olstyle.Style({\n      stroke: new olstyle.Stroke({\n        color: 'rgba(120, 120, 120, 0.4)',\n        width: 1\n      }),\n      fill: new olstyle.Fill({\n        color: 'rgba(120, 120, 120, 0.4)'\n      })\n    });\n\n  private get bufferStyle(): olstyle.Style {\n    return new olstyle.Style({\n      stroke: new olstyle.Stroke({ width: 2, color: this.buffer.bufferStroke }),\n      fill: new olstyle.Fill({ color: this.buffer.bufferFill }),\n      text: new olstyle.Text({\n        textAlign: 'left',\n        offsetX: 10,\n        offsetY: -10,\n        font: '12px Calibri,sans-serif',\n        text: this.buffer.showBufferRadius\n          ? `${this.buffer.bufferRadius}m`\n          : '',\n        fill: new olstyle.Fill({ color: '#000' }),\n        stroke: new olstyle.Stroke({ color: '#fff', width: 3 })\n      })\n    });\n  }\n\n  private get arrowStyle(): olstyle.Style {\n    return new olstyle.Style({\n      image: new olstyle.RegularShape({\n        radius: 5.5,\n        fill: new olstyle.Fill({\n          color: 'rgba(0, 132, 202)'\n        }),\n        stroke: new olstyle.Stroke({\n          color: '#fff',\n          width: 1.5\n        }),\n        points: 3,\n        displacement: [0, 9],\n        rotation: this.arrowRotation,\n        rotateWithView: true\n      })\n    });\n  }\n\n  private geolocation: olGeolocation;\n\n  /**\n   * Observable of the current emission interval of the position. In seconds\n   */\n  public readonly emissionIntervalSeconds$ = new BehaviorSubject<number>(5);\n\n  /**\n   * Observable of the current position\n   */\n  public readonly position$ = new BehaviorSubject<MapGeolocationState>(\n    undefined\n  );\n  /**\n   * Observable of the tracking state\n   */\n  public readonly tracking$ = new BehaviorSubject<boolean>(undefined);\n  /**\n   * Observable of the follow position state\n   */\n  public readonly followPosition$ = new BehaviorSubject<boolean>(undefined);\n\n  private lastPosition: { coordinates: number[]; dateTime: Date };\n\n  /**\n   * Whether the geolocate should show a buffer around the current position\n   */\n  set buffer(value: GeolocationBuffer) {\n    this._buffer = value;\n    this.handleFeatureCreation(this.position$.value);\n  }\n  get buffer(): GeolocationBuffer {\n    return this._buffer;\n  }\n  private _buffer: GeolocationBuffer;\n\n  /**\n   * Whether the geolocate controller accuracy threshold to store/show the position.\n   */\n  set accuracyThreshold(value: number) {\n    this._accuracyThreshold = value;\n    this.handleFeatureCreation(this.position$.value);\n  }\n\n  get accuracyThreshold(): number {\n    return this._accuracyThreshold;\n  }\n  private _accuracyThreshold;\n\n  get olGeolocation() {\n    return this.geolocation;\n  }\n\n  /**\n   * Whether the activate the geolocation.\n   */\n  get tracking() {\n    return this.geolocation.getTracking();\n  }\n\n  set tracking(value: boolean) {\n    this.geolocation.setTracking(value || false);\n    this.tracking$.next(value);\n    if (this.storageService && value !== undefined) {\n      this.storageService.set('geolocation.tracking', value);\n    }\n    if (!value) {\n      this.position$.next(undefined);\n    }\n  }\n\n  /**\n   * Whether the activate the view tracking of the current position\n   */\n  set followPosition(value: boolean) {\n    this._followPosition = value;\n    this.followPosition$.next(value);\n    if (this.configService?.getConfig('geolocate.followPosition') === false) {\n      this._followPosition = false;\n      this.followPosition$.next(false);\n    }\n    this.handleFeatureCreation(this.position$.value);\n    if (this.storageService && value !== undefined) {\n      this.storageService.set('geolocation.followPosition', value);\n    }\n  }\n\n  get followPosition() {\n    return this._followPosition;\n  }\n\n  private _followPosition;\n\n  constructor(\n    private map: MapBase,\n    private options?: MapGeolocationControllerOptions,\n    private storageService?: StorageService,\n    private configService?: ConfigService\n  ) {\n    super();\n    this.geolocationOverlay = new Overlay(this.map);\n    this._followPosition =\n      this.options && this.options.followPosition\n        ? this.options.followPosition\n        : false;\n\n    this._buffer =\n      this.options && this.options.buffer ? this.options.buffer : undefined;\n    this._accuracyThreshold =\n      this.options && this.options.accuracyThreshold\n        ? this.options.accuracyThreshold\n        : 5000;\n  }\n\n  /**\n   * Add or remove this controller to/from a map.\n   * @param map OL Map\n   */\n  setOlMap(olMap: OlMap | undefined) {\n    super.setOlMap(olMap);\n    this.setupObservers();\n  }\n\n  private deleteGeolocationFeatures() {\n    this.deleteFeatureByType(GeolocationOverlayType.Position);\n    this.deleteFeatureByType(GeolocationOverlayType.PositionDirection);\n    this.deleteFeatureByType(GeolocationOverlayType.Accuracy);\n    this.deleteFeatureByType(GeolocationOverlayType.Buffer);\n  }\n\n  setupObservers() {\n    this.tracking$.subscribe((tracking) => {\n      if (tracking) {\n        this.onPositionChange(true, true);\n      } else {\n        this.deleteGeolocationFeatures();\n      }\n    });\n\n    this.geolocation = new olGeolocation({\n      // enableHighAccuracy must be set to true to have the heading value.\n      trackingOptions: {\n        enableHighAccuracy: true,\n        maximumAge: 10000,\n        timeout: 600000\n      },\n      projection: this.options.projection\n    });\n    let tracking = false;\n    this.subscriptions$$.push(\n      this.emissionIntervalSeconds$\n        .pipe(switchMap((value) => interval(value * 1000)))\n        .subscribe(() => {\n          if (tracking === this.tracking) {\n            this.onPositionChange(true);\n          } else {\n            tracking = this.tracking;\n            this.onPositionChange(true, true);\n          }\n        })\n    );\n\n    this.geolocation.on('change', () => {\n      this.onPositionChange(false, false);\n    });\n  }\n\n  updateArrowFeatureOrientation(position: MapGeolocationState) {\n    const position4326 = olproj.transform(\n      position.position,\n      position.projection,\n      'EPSG:4326'\n    );\n    if (!this.lastPosition) {\n      this.lastPosition = { coordinates: position4326, dateTime: new Date() };\n      return;\n    }\n    const arrowFeature = this.getFeatureByType(\n      GeolocationOverlayType.PositionDirection\n    );\n    const isMoving =\n      position?.speed > 1.25 &&\n      this.distanceBetweenPoints(this.lastPosition.coordinates, position4326) >\n        0.003;\n    if (position.accuracy <= this.accuracyThreshold && isMoving) {\n      // Calculate the heading using current position and last recorded\n      // because ol heading not returning right value\n      const dx = position4326[1] - this.lastPosition.coordinates[1];\n      const dy = position4326[0] - this.lastPosition.coordinates[0];\n      let theta = Math.atan2(dy, dx);\n      if (theta < 0) theta = 2 * Math.PI + theta;\n      this.arrowRotation = theta;\n      if (arrowFeature) {\n        arrowFeature.setStyle(this.arrowStyle);\n      }\n      this.lastPosition = { coordinates: position4326, dateTime: new Date() };\n    } else {\n      if (\n        arrowFeature &&\n        new Date().getTime() - this.lastPosition.dateTime.getTime() > 3000\n      )\n        hideOlFeature(arrowFeature);\n    }\n  }\n\n  /**\n   * @returns distance in km between coord1 and coord2\n   */\n  private distanceBetweenPoints(coord1: number[], coord2: number[]): number {\n    return olSphere.getDistance(coord1, coord2) / 1000;\n  }\n\n  public addOnChangedListener(event: (geo: olGeolocation) => any) {\n    const listener = () => {\n      event(this.geolocation);\n    };\n    this.geolocation.on('change', listener);\n    return listener;\n  }\n\n  public deleteChangedListener(event: () => any) {\n    this.geolocation.un('change', event);\n  }\n\n  public updateGeolocationOptions(options: MapViewOptions) {\n    if (!options) {\n      return;\n    }\n    // todo maybe a dedicated interface for geolocation should be defined instead of putting these inside the mapviewoptions?\n    let tracking = options.geolocate;\n    let followPosition = options.alwaysTracking;\n    if (this.storageService) {\n      const storedTracking = this.storageService.get(\n        'geolocation.tracking'\n      ) as boolean;\n      if (storedTracking !== null && storedTracking !== undefined) {\n        tracking = storedTracking;\n      }\n\n      const storedFollowPosition = this.storageService.get(\n        'geolocation.followPosition'\n      ) as boolean;\n      if (storedFollowPosition !== null && storedFollowPosition !== undefined) {\n        followPosition = storedFollowPosition;\n      }\n    }\n    this.tracking = tracking;\n    this.followPosition = followPosition;\n    this.buffer = options.buffer;\n  }\n\n  /**\n   * Teardown any observers\n   */\n  teardownObservers() {\n    if (this.subscriptions$$.length) {\n      this.subscriptions$$.map((s) => s.unsubscribe());\n    }\n    super.teardownObservers();\n  }\n\n  /**\n   * On position change, get the position, show it on the map and record it.\n   * @param emitEvent Map event\n   */\n  private onPositionChange(emitEvent = false, zoomTo = false) {\n    if (!this.tracking) {\n      return;\n    }\n    const geolocateProperties = this.geolocation.getProperties();\n\n    if (geolocateProperties.accuracy > this.accuracyThreshold) {\n      console.warn('Poor geolocation accuracy. No position are stored/shown');\n      this.position$.next(undefined);\n      return;\n    }\n\n    const position: MapGeolocationState = {\n      position: geolocateProperties.position,\n      projection: this.geolocation.getProjection().getCode(),\n      accuracy: geolocateProperties.accuracy,\n      altitude: geolocateProperties.altitude,\n      altitudeAccuracy: geolocateProperties.altitudeAccuracy,\n      heading: geolocateProperties.heading,\n      speed: geolocateProperties.speed,\n      enableHighAccuracy: geolocateProperties.trackingOptions\n        ?.enableHighAccuracy\n        ? true\n        : false,\n      timestamp: new Date()\n    };\n    this.handleFeatureCreation(position);\n    this.handleViewFromFeatures(position, zoomTo);\n    if (emitEvent) {\n      this.position$.next(position);\n    }\n  }\n\n  private getFeatureByType(type: GeolocationOverlayType): olFeature<Geometry> {\n    return this.geolocationOverlay.dataSource.ol.getFeatureById(type);\n  }\n\n  private deleteFeatureByType(type: GeolocationOverlayType) {\n    const featureById =\n      this.geolocationOverlay?.dataSource.ol.getFeatureById(type);\n    if (featureById) {\n      this.geolocationOverlay.dataSource.ol.removeFeature(featureById);\n    }\n  }\n\n  private handleFeatureCreation(position: MapGeolocationState) {\n    if (!position || !position.position) {\n      return;\n    }\n    const positionGeometry = new Point(position.position);\n    const accuracyGeometry = fromCircle(\n      new OlCircle(position.position, position.accuracy || 0)\n    );\n    let positionFeature = this.getFeatureByType(\n      GeolocationOverlayType.Position\n    );\n    let positionFeatureArrow = this.getFeatureByType(\n      GeolocationOverlayType.PositionDirection\n    );\n    let accuracyFeature = this.getFeatureByType(\n      GeolocationOverlayType.Accuracy\n    );\n    const positionFeatureExists = positionFeature ? true : false;\n    const positionFeatureArrowExists = positionFeatureArrow ? true : false;\n    const accuracyFeatureExists = accuracyFeature ? true : false;\n    if (!positionFeatureArrowExists) {\n      positionFeatureArrow = new olFeature<Point>({\n        geometry: positionGeometry\n      });\n      positionFeatureArrow.setId(GeolocationOverlayType.PositionDirection);\n      hideOlFeature(positionFeatureArrow);\n    }\n    if (!positionFeatureExists) {\n      positionFeature = new olFeature<Point>({ geometry: positionGeometry });\n      positionFeature.setId(GeolocationOverlayType.Position);\n      positionFeature.setStyle(this.positionFeatureStyle);\n    }\n    if (!accuracyFeatureExists) {\n      accuracyFeature = new olFeature<Polygon>({ geometry: accuracyGeometry });\n      accuracyFeature.setId(GeolocationOverlayType.Accuracy);\n      accuracyFeature.setStyle(this.accuracyFeatureStyle);\n    }\n\n    if (positionGeometry) {\n      positionFeatureExists\n        ? positionFeature.setGeometry(positionGeometry)\n        : this.geolocationOverlay.addOlFeature(\n            positionFeature,\n            FeatureMotion.None\n          );\n      positionFeatureArrowExists\n        ? positionFeatureArrow.setGeometry(positionGeometry)\n        : this.geolocationOverlay.addOlFeature(\n            positionFeatureArrow,\n            FeatureMotion.None\n          );\n      this.updateArrowFeatureOrientation(position);\n      accuracyFeatureExists\n        ? accuracyFeature.setGeometry(accuracyGeometry)\n        : this.geolocationOverlay.addOlFeature(\n            accuracyFeature,\n            FeatureMotion.None\n          );\n\n      if (this.buffer) {\n        let bufferFeature = this.getFeatureByType(\n          GeolocationOverlayType.Buffer\n        );\n        const bufferFeatureExists = bufferFeature ? true : false;\n        const bufferGeometry = new OlCircle(\n          position.position,\n          this.buffer.bufferRadius\n        );\n        if (!bufferFeatureExists) {\n          bufferFeature = new olFeature(bufferGeometry);\n          bufferFeature.setId(GeolocationOverlayType.Buffer);\n          bufferFeature.setStyle(this.positionFeatureStyle);\n        }\n        bufferFeature.setStyle(this.bufferStyle);\n        bufferFeatureExists\n          ? bufferFeature.setGeometry(bufferGeometry)\n          : this.geolocationOverlay.addOlFeature(\n              bufferFeature,\n              FeatureMotion.None\n            );\n      }\n    }\n  }\n  handleViewFromFeatures(position: MapGeolocationState, zoomTo = false) {\n    const positionFeature = this.getFeatureByType(\n      GeolocationOverlayType.Position\n    );\n    const positionFeatureArrow = this.getFeatureByType(\n      GeolocationOverlayType.PositionDirection\n    );\n    const accuracyFeature = this.getFeatureByType(\n      GeolocationOverlayType.Accuracy\n    );\n    const bufferFeature = this.getFeatureByType(GeolocationOverlayType.Buffer);\n    const features = [\n      positionFeature,\n      positionFeatureArrow,\n      accuracyFeature,\n      bufferFeature\n    ].filter((f) => f);\n    if (features.length > 0) {\n      const featuresExtent = computeOlFeaturesExtent(\n        features,\n        this.map.viewProjection\n      );\n      const edgeRatios =\n        position?.speed > 12.5\n          ? [0.25, 0.25, 0.25, 0.25]\n          : [0.15, 0.1, 0.1, 0.1];\n      const areOutOfView = featuresAreOutOfView(\n        this.map.getExtent(),\n        featuresExtent,\n        edgeRatios\n      );\n      let motion =\n        this.followPosition && areOutOfView\n          ? FeatureMotion.Move\n          : FeatureMotion.None;\n      if (zoomTo) {\n        motion = FeatureMotion.Zoom;\n      }\n      motion !== FeatureMotion.None\n        ? moveToOlFeatures(this.map.viewController, features, motion)\n        : undefined;\n    }\n  }\n}\n","export enum MapViewAction {\n  Move,\n  Zoom\n}\n","import OlMap from 'ol/Map';\nimport { ObjectEvent } from 'ol/Object';\nimport OlView from 'ol/View';\nimport * as oleasing from 'ol/easing';\nimport { EventsKey } from 'ol/events';\nimport * as olproj from 'ol/proj';\nimport OlProjection from 'ol/proj/Projection';\n\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { MapViewAction } from '../map.enums';\nimport { MapExtent, MapViewState } from '../map.interface';\nimport { getScaleFromResolution, viewStatesAreEqual } from '../map.utils';\nimport { MapController } from './controller';\n\nexport interface MapViewControllerOptions {\n  stateHistory: boolean;\n}\n\n/**\n * Controller to handle map view interactions\n */\nexport class MapViewController extends MapController {\n  /**\n   * Observable of the current rotation in radians\n   */\n  readonly rotation$ = new BehaviorSubject<number>(0);\n\n  /**\n   * Observable of the current resolution\n   */\n  resolution$ = new BehaviorSubject<number>(undefined);\n\n  /**\n   * Observable of the current state\n   */\n  state$ = new BehaviorSubject<MapViewState>(undefined);\n\n  /**\n   * View Padding\n   * Values in the array are top, right, bottom and left padding.\n   */\n  padding = [0, 0, 0, 0];\n\n  /**\n   * Max zoom after set extent\n   */\n  maxZoomOnExtent = 19;\n\n  /**\n   * Max extent possible when zooming\n   */\n  maxLayerZoomExtent: MapExtent;\n\n  /**\n   * Extent stream\n   */\n  private extent$ = new Subject<{ extent: MapExtent; action: MapViewAction }>();\n\n  /**\n   * Subscription to the movement stream\n   */\n  private extent$$: Subscription;\n\n  /**\n   * History of states\n   */\n  private states: MapViewState[] = [];\n\n  /**\n   * Current state index\n   */\n  private stateIndex = 0;\n\n  /**\n   * Whether the view controller should keep the view's state history\n   */\n  get stateHistory(): boolean {\n    return this.options ? this.options.stateHistory === true : false;\n  }\n\n  /**\n   * OL View\n   */\n  get olView(): OlView {\n    return this.olMap.getView();\n  }\n\n  constructor(private options?: MapViewControllerOptions) {\n    super();\n  }\n\n  setPadding(padding: {\n    top?: number;\n    bottom?: number;\n    left?: number;\n    right?: number;\n  }) {\n    // Values in the array are top, right, bottom and left padding.\n    if (padding.top || padding.top === 0) {\n      this.padding[0] = padding.top;\n    }\n    if (padding.right || padding.right === 0) {\n      this.padding[1] = padding.right;\n    }\n    if (padding.bottom || padding.bottom === 0) {\n      this.padding[2] = padding.bottom;\n    }\n    if (padding.left || padding.left === 0) {\n      this.padding[3] = padding.left;\n    }\n  }\n\n  /**\n   * Add or remove this controller to/from a map.\n   * @param map OL Map\n   */\n  setOlMap(olMap: OlMap | undefined) {\n    super.setOlMap(olMap);\n    this.setupObservers();\n  }\n\n  /**\n   * Observe move moveend and subscribe to the extent stream\n   */\n  setupObservers() {\n    if (this.stateHistory === true) {\n      this.observerKeys.push(\n        this.olMap.on('moveend', () => this.onMoveEnd()) as EventsKey\n      );\n    }\n\n    this.extent$$ = this.extent$\n      .pipe(debounceTime(25))\n      .subscribe((value: { extent: MapExtent; action: MapViewAction }) => {\n        this.setExtent(value.extent, value.action);\n      });\n  }\n\n  monitorRotation() {\n    this.observerKeys.push(\n      this.olMap.getView().on('change:rotation', (evt: ObjectEvent) => {\n        this.rotation$.next(evt.target.getRotation());\n      }) as EventsKey\n    );\n    this.rotation$.next(this.getRotation());\n  }\n\n  /**\n   * Teardown any observers\n   */\n  teardownObservers() {\n    super.teardownObservers();\n    if (this.extent$$ !== undefined) {\n      this.extent$$.unsubscribe();\n      this.extent$$ = undefined;\n    }\n  }\n\n  /**\n   * Get the view's OL projection\n   * @returns OL projection\n   */\n  getOlProjection(): OlProjection {\n    return this.olView.getProjection();\n  }\n\n  /**\n   * Get the current map view center\n   * @param projection Output projection\n   * @returns Center\n   */\n  getCenter(projection?: string | OlProjection): [number, number] {\n    let center = this.olView.getCenter() as [number, number];\n    if (projection && center) {\n      center = olproj.transform(center, this.getOlProjection(), projection) as [\n        number,\n        number\n      ];\n    }\n    return center;\n  }\n\n  /**\n   * Get the current view extent\n   * @param projection Output projection\n   * @returns Extent\n   */\n  getExtent(projection?: string | OlProjection): MapExtent {\n    let extent = this.olView.calculateExtent(this.olMap.getSize());\n    if (projection && extent) {\n      extent = olproj.transformExtent(\n        extent,\n        this.getOlProjection(),\n        projection\n      );\n    }\n    return extent as MapExtent;\n  }\n\n  /**\n   * Get the current scale\n   * @param dpi Dot per inches\n   * @returns View scale\n   */\n  getScale(dpi = 96) {\n    return getScaleFromResolution(\n      this.getResolution(),\n      this.getOlProjection().getUnits(),\n      dpi\n    );\n  }\n\n  /**\n   * Get the current resolution\n   * @returns Projection denominator\n   */\n  getResolution(): number {\n    return this.olView.getResolution();\n  }\n\n  /**\n   * Get the current zoom level\n   * @returns Zoom level\n   */\n  getZoom(): number {\n    return Math.round(this.olView.getZoom());\n  }\n\n  /**\n   * Zoom in\n   */\n  zoomIn() {\n    this.zoomTo(this.olView.getZoom() + 1);\n  }\n\n  /**\n   * Zoom out\n   */\n  zoomOut() {\n    this.zoomTo(this.olView.getZoom() - 1);\n  }\n\n  /**\n   * Zoom to specific zoom level\n   * @param zoom Zoom level\n   */\n  zoomTo(zoom: number) {\n    this.olView.cancelAnimations();\n    this.olView.animate({\n      zoom,\n      duration: 250,\n      easing: oleasing.easeOut\n    });\n  }\n\n  /**\n   * Move to extent after a short delay (100ms) unless\n   * a new movement gets registered in the meantime.\n   * @param extent Extent to move to\n   */\n  moveToExtent(extent: [number, number, number, number]) {\n    this.extent$.next({ extent, action: MapViewAction.Move });\n  }\n\n  /**\n   * Zoom to extent after a short delay (100ms) unless\n   * a new movement gets registered in the meantime.\n   * @param extent Extent to zoom to\n   */\n  zoomToExtent(extent: [number, number, number, number]) {\n    this.extent$.next({ extent, action: MapViewAction.Zoom });\n  }\n\n  /**\n   * Return the current view rotation\n   * @returns Rotation angle in radians\n   */\n  getRotation(): number {\n    return this.olView.getRotation();\n  }\n\n  /**\n   * Reset the view rotation to 0\n   */\n  resetRotation() {\n    this.olView.animate({ rotation: 0 });\n  }\n\n  /**\n   * Whether the view has a previous state\n   * @returns True if the view has a previous state\n   */\n  hasPreviousState(): boolean {\n    return this.states.length > 1 && this.stateIndex > 0;\n  }\n\n  /**\n   * Whether the view has a next state\n   * @returns True if the view has a next state\n   */\n  hasNextState(): boolean {\n    return this.states.length > 1 && this.stateIndex < this.states.length - 1;\n  }\n\n  /**\n   * Restore the previous view state\n   */\n  previousState() {\n    if (this.hasPreviousState()) {\n      this.setStateIndex(this.stateIndex - 1);\n    }\n  }\n\n  /**\n   * Restore the next view state\n   */\n  nextState() {\n    if (this.hasNextState()) {\n      this.setStateIndex(this.stateIndex + 1);\n    }\n  }\n\n  /**\n   * Clear the state history\n   */\n  clearStateHistory() {\n    this.states = [];\n    this.stateIndex = 0;\n  }\n\n  /**\n   * Update the the view to it's intial state\n   */\n  setInitialState() {\n    if (this.states.length > 0) {\n      this.setStateIndex(0);\n    }\n  }\n\n  /**\n   * Move to the extent retrieved from the stream\n   * @param extent Extent\n   * @param action Either zoom or move\n   * @param animation With or without animation to the target extent.\n   */\n  private setExtent(\n    extent: MapExtent,\n    action: MapViewAction,\n    animation = true\n  ) {\n    const olView = this.olView;\n    olView.cancelAnimations();\n    const duration = animation ? 500 : 0;\n    const zoom = olView.getZoom();\n\n    const fromCenter = olView.getCenter();\n    const toCenter = [\n      extent[0] + (extent[2] - extent[0]) / 2,\n      extent[1] + (extent[3] - extent[1]) / 2\n    ];\n    const distCenter = Math.sqrt(\n      Math.pow(fromCenter[0] - toCenter[0], 2) +\n        Math.pow(fromCenter[1] - toCenter[1], 2)\n    );\n    const fromExtent = olView.calculateExtent();\n    const fromSize = Math.sqrt(\n      Math.pow(fromExtent[2] - fromExtent[0], 2) +\n        Math.pow(fromExtent[3] - fromExtent[1], 2)\n    );\n    const toSize = Math.sqrt(\n      Math.pow(extent[2] - extent[0], 2) + Math.pow(extent[3] - extent[1], 2)\n    );\n    const moySize = (toSize + fromSize) / 2;\n    const xSize = distCenter / moySize;\n\n    const maxZoom =\n      action === MapViewAction.Move || zoom > this.maxZoomOnExtent\n        ? zoom\n        : this.maxZoomOnExtent;\n\n    olView.fit(extent, {\n      size: this.olMap.getSize(),\n      maxZoom,\n      padding: this.padding,\n      duration: xSize > 4 ? 0 : duration,\n      callback: (isFinished: boolean) => {\n        if (!isFinished) {\n          olView.fit(extent, {\n            size: this.olMap.getSize(),\n            maxZoom,\n            padding: this.padding,\n            duration: xSize > 4 ? 0 : duration\n          });\n        }\n      }\n    });\n  }\n\n  /**\n   * Set the view state index\n   * @param index State index\n   */\n  private setStateIndex(index: number) {\n    this.stateIndex = index;\n    this.setState(this.states[index]);\n  }\n\n  /**\n   * Set the view state\n   * @param state View state\n   */\n  private setState(state: MapViewState) {\n    this.olView.animate({\n      resolution: state.resolution,\n      center: state.center,\n      duration: 0\n    });\n  }\n\n  /**\n   * On move end, get the view state and record it.\n   * @param event Map event\n   */\n  private onMoveEnd() {\n    const resolution = this.getResolution();\n    if (this.resolution$.value !== resolution) {\n      this.resolution$.next(resolution);\n    }\n\n    const state = {\n      resolution,\n      center: this.getCenter(),\n      zoom: this.getZoom()\n    };\n\n    if (this.stateHistory === true) {\n      const stateIndex = this.stateIndex;\n      const stateAtIndex =\n        this.states.length === 0 ? undefined : this.states[stateIndex];\n      if (!viewStatesAreEqual(state, stateAtIndex)) {\n        this.states = this.states.slice(0, stateIndex + 1).concat([state]);\n        this.stateIndex = this.states.length - 1;\n      }\n    }\n\n    this.state$.next(state);\n  }\n}\n","import { ConfigService } from '@igo2/core/config';\nimport { StorageService } from '@igo2/core/storage';\nimport { SubjectStatus } from '@igo2/utils';\n\nimport olMap from 'ol/Map';\nimport olView, { ViewOptions } from 'ol/View';\nimport olControlAttribution from 'ol/control/Attribution';\nimport olControlScaleLine from 'ol/control/ScaleLine';\nimport * as olinteraction from 'ol/interaction';\nimport * as olproj from 'ol/proj';\nimport OlProjection from 'ol/proj/Projection';\nimport * as olproj4 from 'ol/proj/proj4';\nimport { getUid } from 'ol/util';\n\nimport proj4 from 'proj4';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';\nimport { LayerController } from '../../layer';\nimport type { AnyLayer, Layer } from '../../layer/shared/layers';\nimport { Overlay } from '../../overlay/shared/overlay';\nimport { LayerWatcher, LayerWatcherChange } from '../utils/layer-watcher';\nimport { MapGeolocationController } from './controllers/geolocation';\nimport { MapViewController } from './controllers/view';\nimport type { MapBase } from './map.abstract';\nimport {\n  MapAttributionOptions,\n  MapControlsOptions,\n  MapExtent,\n  MapOptions,\n  MapScaleLineOptions,\n  MapViewOptions\n} from './map.interface';\n\nexport class IgoMap implements MapBase {\n  public ol: olMap;\n  public forcedOffline$ = new BehaviorSubject<boolean>(false);\n  public layersAddedByClick$ = new BehaviorSubject<AnyLayer[]>(undefined);\n  public status$: Subject<SubjectStatus>;\n  public propertyChange$: Subject<LayerWatcherChange>;\n  public overlay: Overlay;\n  public queryResultsOverlay: Overlay;\n  public searchResultsOverlay: Overlay;\n  public viewController: MapViewController;\n  public layerController: LayerController;\n  public geolocationController: MapGeolocationController;\n  public swipeEnabled$ = new BehaviorSubject<boolean>(false);\n  public mapCenter$ = new BehaviorSubject<boolean>(false);\n  public selectedFeatures$ = new BehaviorSubject<Layer[]>(null);\n\n  public bufferDataSource: FeatureDataSource;\n\n  public layerWatcher: LayerWatcher;\n  readonly options: MapOptions;\n  private mapViewOptions: MapViewOptions;\n  private defaultOptions: Partial<MapOptions> = {\n    controls: { attribution: false }\n  };\n\n  /** @deprecated use projectionCode */\n  get projection(): string {\n    return this.projectionCode;\n  }\n\n  get viewProjection(): olproj.Projection {\n    return this.viewController.getOlProjection();\n  }\n\n  get projectionCode(): string {\n    return this.viewProjection.getCode();\n  }\n\n  constructor(\n    options?: MapOptions,\n    private storageService?: StorageService,\n    private configService?: ConfigService\n  ) {\n    this.options = Object.assign({}, this.defaultOptions, options);\n    this.layerController = new LayerController(this, []);\n    this.layerWatcher = new LayerWatcher();\n    this.status$ = this.layerWatcher.status$;\n    this.propertyChange$ = this.layerWatcher.propertyChange$;\n    olproj4.register(proj4);\n    this.init();\n  }\n\n  init() {\n    const controls = [];\n    if (this.options.controls) {\n      if (this.options.controls.attribution) {\n        const attributionOpt = (\n          this.options.controls.attribution === true\n            ? {}\n            : this.options.controls.attribution\n        ) as MapAttributionOptions;\n        controls.push(new olControlAttribution(attributionOpt));\n      }\n      if (this.options.controls.scaleLine) {\n        const scaleLineOpt = (\n          this.options.controls.scaleLine === true\n            ? {}\n            : this.options.controls.scaleLine\n        ) as MapScaleLineOptions;\n        controls.push(new olControlScaleLine(scaleLineOpt));\n      }\n    }\n    let interactions = {};\n    if (this.options.interactions === false) {\n      interactions = {\n        altShiftDragRotate: false,\n        doubleClickZoom: false,\n        keyboard: false,\n        mouseWheelZoom: false,\n        shiftDragZoom: false,\n        dragPan: false,\n        pinchRotate: false,\n        pinchZoom: false\n      };\n    }\n\n    this.ol = new olMap({\n      interactions: olinteraction.defaults(interactions),\n      controls\n    });\n\n    this.setView(this.options.view || {});\n    this.viewController = new MapViewController({\n      stateHistory: true\n    });\n    this.viewController.setOlMap(this.ol);\n    this.overlay = new Overlay(this);\n    this.queryResultsOverlay = new Overlay(this);\n    this.searchResultsOverlay = new Overlay(this);\n    this.ol.once('rendercomplete', () => {\n      this.geolocationController = new MapGeolocationController(\n        this,\n        {\n          projection: this.viewController.getOlProjection()\n        },\n        this.storageService,\n        this.configService\n      );\n      this.geolocationController.setOlMap(this.ol);\n      if (this.geolocationController) {\n        this.geolocationController.updateGeolocationOptions(\n          this.mapViewOptions\n        );\n      }\n      this.viewController.monitorRotation();\n    });\n  }\n\n  setTarget(id: string) {\n    this.ol.setTarget(id);\n    if (id !== undefined) {\n      this.layerWatcher.subscribe(() => void 1, null);\n    } else {\n      this.layerWatcher.unsubscribe();\n    }\n  }\n\n  updateView(options: MapViewOptions) {\n    const currentView = this.ol.getView();\n    const viewOptions: MapViewOptions = {\n      ...currentView.getProperties(),\n      ...options\n    };\n\n    if (options.zoom && options.resolution == null) {\n      viewOptions.resolution = undefined;\n    }\n\n    this.setView(viewOptions);\n    if (options.maxZoomOnExtent) {\n      this.viewController.maxZoomOnExtent = options.maxZoomOnExtent;\n    }\n    this.mapViewOptions = options;\n  }\n\n  /**\n   * Set the map view\n   * @param options Map view options\n   */\n  setView(options: MapViewOptions) {\n    if (this.viewController !== undefined) {\n      this.viewController.clearStateHistory();\n    }\n\n    const viewOptions: ViewOptions = { constrainResolution: true, ...options };\n    if (options.center) {\n      viewOptions.center = olproj.fromLonLat(\n        options.center,\n        options.projection\n      );\n    }\n\n    this.ol.setView(new olView(viewOptions));\n\n    if (options.maxLayerZoomExtent) {\n      this.viewController.maxLayerZoomExtent = options.maxLayerZoomExtent;\n    }\n  }\n\n  updateControls(value: MapControlsOptions) {\n    if (value === undefined) {\n      return;\n    }\n\n    const controls = [];\n    if (value.attribution) {\n      const attributionOpt = (\n        value.attribution === true ? {} : value.attribution\n      ) as MapAttributionOptions;\n      controls.push(new olControlAttribution(attributionOpt));\n    }\n    if (value.scaleLine) {\n      const scaleLineOpt = (\n        value.scaleLine === true ? {} : value.scaleLine\n      ) as MapScaleLineOptions;\n      controls.push(new olControlScaleLine(scaleLineOpt));\n    }\n\n    const currentControls = Object.assign([], this.ol.getControls().getArray());\n    currentControls.forEach((control) => {\n      this.ol.removeControl(control);\n    });\n    controls.forEach((control) => {\n      this.ol.addControl(control);\n    });\n  }\n\n  /**\n   * @deprecated\n   * TODO: Move to ViewController and update every place it's used\n   */\n  getCenter(projection?: string | OlProjection): [number, number] {\n    return this.viewController.getCenter(projection);\n  }\n\n  /**\n   * @deprecated\n   * TODO: Move to ViewController and update every place it's used\n   */\n  getExtent(projection?: string | OlProjection): MapExtent {\n    return this.viewController.getExtent(projection);\n  }\n  /**\n   * @deprecated\n   * TODO: Move to ViewController and update every place it's used\n   */\n  getZoom(): number {\n    return this.viewController.getZoom();\n  }\n\n  /** @deprecated find a way to remove this method. For now we discourage to use it until we find the way to remove it */\n  getLayerByOlUId(olUId: string): AnyLayer {\n    return this.layerController.all.find(\n      (layer) => getUid(layer.ol) && getUid(layer.ol) === olUId\n    );\n  }\n}\n","import { SubjectStatus } from '@igo2/utils';\n\nimport { Projection } from 'ol/proj';\n\nimport { Map } from 'ol';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { FeatureDataSource } from '../../datasource/shared/datasources';\nimport { LayerController } from '../../layer/shared/layer-controller';\nimport type { AnyLayer } from '../../layer/shared/layers/any-layer';\nimport type { Layer } from '../../layer/shared/layers/layer';\nimport { Overlay } from '../../overlay/shared/overlay';\nimport {\n  MapGeolocationController,\n  MapViewController\n} from '../shared/controllers';\nimport {\n  MapControlsOptions,\n  MapExtent,\n  MapOptions,\n  MapViewOptions\n} from '../shared/map.interface';\nimport { LayerWatcher, LayerWatcherChange } from '../utils';\n\nexport abstract class MapBase {\n  ol: Map;\n  forcedOffline$: BehaviorSubject<boolean>;\n  layersAddedByClick$: BehaviorSubject<AnyLayer[]>;\n  status$: Subject<SubjectStatus>;\n  propertyChange$: Subject<LayerWatcherChange>;\n  overlay: Overlay;\n  queryResultsOverlay: Overlay;\n  searchResultsOverlay: Overlay;\n  viewController: MapViewController;\n  geolocationController: MapGeolocationController;\n  swipeEnabled$: BehaviorSubject<boolean>;\n  mapCenter$: BehaviorSubject<boolean>;\n  selectedFeatures$: BehaviorSubject<Layer[]>;\n  bufferDataSource: FeatureDataSource;\n  layerWatcher: LayerWatcher;\n  readonly options: MapOptions;\n\n  // Getter\n  layerController: LayerController;\n  projection: string;\n  viewProjection: Projection;\n  projectionCode: string;\n\n  abstract setTarget(id: string): void;\n  abstract updateView(options: MapViewOptions): void;\n  abstract setView(options: MapViewOptions): void;\n  abstract updateControls(value: MapControlsOptions): void;\n  abstract getCenter(projection?: string | Projection): [number, number];\n  abstract getExtent(projection?: string | Projection): MapExtent;\n  abstract getZoom(): number;\n  /** @deprecated find a way to remove this method. For now we discourage to use it until we find the way to remove it */\n  abstract getLayerByOlUId(olUId: string): AnyLayer;\n}\n","import {\n  AfterViewInit,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit\n} from '@angular/core';\n\nimport { ActivityService } from '@igo2/core/activity';\nimport { SubjectStatus, uuid } from '@igo2/utils';\n\nimport { Subscription } from 'rxjs';\n\nimport { IgoMap } from '../shared/map';\nimport { MapControlsOptions, MapViewOptions } from '../shared/map.interface';\n\n@Component({\n  selector: 'igo-map-browser',\n  templateUrl: './map-browser.component.html',\n  styleUrls: ['./map-browser.component.scss'],\n  standalone: true\n})\nexport class MapBrowserComponent implements OnInit, AfterViewInit, OnDestroy {\n  private activityId: string;\n  private status$$: Subscription;\n\n  @Input() map: IgoMap;\n\n  @Input()\n  get view(): MapViewOptions {\n    return this._view;\n  }\n  set view(value: MapViewOptions) {\n    this._view = value;\n    if (this.map !== undefined) {\n      this.map.updateView(value);\n    }\n  }\n  private _view: MapViewOptions;\n\n  get controls(): MapControlsOptions {\n    return this._controls;\n  }\n\n  set controls(value: MapControlsOptions) {\n    this._controls = value;\n    if (this.map !== undefined) {\n      this.map.updateControls(value);\n    }\n  }\n  private _controls: MapControlsOptions;\n\n  public id = `igo-map-target-${uuid()}`;\n\n  constructor(private activityService: ActivityService) {}\n\n  ngOnInit() {\n    this.status$$ = this.map.status$.subscribe((status) =>\n      this.handleStatusChange(status)\n    );\n  }\n\n  ngAfterViewInit() {\n    this.map.setTarget(this.id);\n  }\n\n  ngOnDestroy() {\n    this.map.setTarget(undefined);\n    this.activityService.unregister(this.activityId);\n    this.status$$.unsubscribe();\n  }\n\n  private handleStatusChange(status: SubjectStatus) {\n    if (status === SubjectStatus.Working && this.activityId === undefined) {\n      this.activityId = this.activityService.register();\n    } else if (status === SubjectStatus.Done && this.activityId !== undefined) {\n      this.activityService.unregister(this.activityId);\n      this.activityId = undefined;\n    }\n  }\n}\n","<div [id]=\"id\" class=\"igo-map-browser-target\"></div>\n<ng-content></ng-content>\n","import { AfterViewInit, Directive } from '@angular/core';\n\nimport { MessageService } from '@igo2/core/message';\nimport { NetworkService } from '@igo2/core/network';\nimport { SubjectStatus } from '@igo2/utils';\n\nimport { combineLatest, filter } from 'rxjs';\n\nimport { DataSourceOptions } from '../../datasource/shared/datasources/datasource.interface';\nimport { AnyLayer, isLayerGroup } from '../../layer';\nimport { MapBrowserComponent } from '../map-browser/map-browser.component';\nimport { IgoMap } from './map';\n\ninterface OfflinableSourceOptions extends DataSourceOptions {\n  pathOffline?: string;\n}\n\n@Directive({\n  selector: '[igoMapOffline]',\n  standalone: true\n})\nexport class MapOfflineDirective implements AfterViewInit {\n  private component: MapBrowserComponent;\n\n  get map(): IgoMap {\n    return this.component.map;\n  }\n\n  private previousMessageId;\n\n  constructor(\n    component: MapBrowserComponent,\n    private networkService: NetworkService,\n    private messageService: MessageService\n  ) {\n    this.component = component;\n  }\n\n  ngAfterViewInit() {\n    const initialOnline = window.navigator.onLine;\n    this.map.forcedOffline$.subscribe((forcedOffline: boolean) => {\n      const online = window.navigator.onLine;\n      // prevent first online message if no state change.\n      if (initialOnline && initialOnline === online && !forcedOffline) {\n        return;\n      }\n      if (this.previousMessageId) {\n        this.messageService.remove(this.previousMessageId);\n      }\n      if (!forcedOffline && online) {\n        const messageObj = this.messageService.info(\n          'igo.geo.network.online.message',\n          'igo.geo.network.online.title'\n        );\n        this.previousMessageId = messageObj.toastId;\n      } else if (forcedOffline) {\n        const messageObj = this.messageService.info(\n          'igo.geo.network.offline.message',\n          'igo.geo.network.offline.title'\n        );\n        this.previousMessageId = messageObj.toastId;\n      }\n    });\n\n    combineLatest([\n      this.networkService.currentState(),\n      this.map.forcedOffline$,\n      this.map.status$.pipe(filter((status) => status === SubjectStatus.Done))\n    ]).subscribe((bunch) => {\n      const online = bunch[0].connection;\n      const forcedOffline = bunch[1];\n      this.handleLayersOnlineState(\n        online,\n        forcedOffline,\n        this.map.layerController.all\n      );\n    });\n  }\n\n  private handleNonOfflinableLayerResolution(\n    online: boolean,\n    forcedOffline: boolean,\n    layer: AnyLayer\n  ) {\n    if (!online || forcedOffline) {\n      layer.maxResolution = 0;\n    } else if (online || !forcedOffline) {\n      layer.maxResolution = layer.options.maxResolution || Infinity;\n    }\n  }\n\n  private handleLayersOnlineState(\n    online: boolean,\n    forcedOffline: boolean,\n    layers: AnyLayer[]\n  ) {\n    layers.forEach((layer) => {\n      if (isLayerGroup(layer)) {\n        return;\n      }\n      let offlinableByUrlSourceOptions;\n      if (layer.isIgoInternalLayer) {\n        return;\n      }\n      // detect if layer/source are offlinable by url/pathOffline properties\n      if (\n        (layer.options.sourceOptions as OfflinableSourceOptions)?.pathOffline\n      ) {\n        offlinableByUrlSourceOptions = layer.options.sourceOptions;\n      }\n      if (offlinableByUrlSourceOptions) {\n        const type = offlinableByUrlSourceOptions.type;\n        if (type === 'mvt') {\n          layer.ol.getSource().refresh();\n        }\n        if (!online || forcedOffline) {\n          if (['vector', 'cluster'].includes(type)) {\n            return;\n          }\n          (layer.ol.getSource() as any).setUrl(\n            offlinableByUrlSourceOptions.pathOffline\n          );\n        } else if (!online || !forcedOffline) {\n          if (['vector', 'cluster'].includes(type)) {\n            return;\n          }\n          (layer.ol.getSource() as any).setUrl(\n            offlinableByUrlSourceOptions.url\n          );\n        } else {\n          this.handleNonOfflinableLayerResolution(online, forcedOffline, layer);\n        }\n      } else {\n        // FOR ALL NON OFFLINABLE SOURCE (i.e. EXCEPT PREVIOUS);\n        this.handleNonOfflinableLayerResolution(online, forcedOffline, layer);\n        return;\n      }\n    });\n  }\n}\n","import {\n  Directive,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Self\n} from '@angular/core';\n\nimport { MediaService } from '@igo2/core/media';\n\nimport MapBrowserPointerEvent from 'ol/MapBrowserEvent';\nimport { unByKey } from 'ol/Observable';\nimport { transform } from 'ol/proj';\n\nimport { MapBrowserComponent } from '../../map/map-browser/map-browser.component';\nimport { IgoMap } from '../../map/shared/map';\n\n/**\n * This directive return the pointer coordinate (on click or pointermove)\n * in [longitude, latitude], delayed by in input (pointerMoveDelay)\n * to avoid too many emitted values.\n */\n@Directive({\n  selector: '[igoPointerPosition]',\n  standalone: true\n})\nexport class PointerPositionDirective implements OnInit, OnDestroy {\n  private lastTimeoutRequest;\n\n  /**\n   * Listener to the pointer move event\n   */\n  private pointerMoveListener;\n\n  /**\n   * Listener to the map click event\n   */\n  private mapClickListener;\n\n  /**\n   * Delay before emitting an event\n   */\n  @Input() pointerPositionDelay = 1000;\n\n  /**\n   * Event emitted when the pointer move, delayed by pointerMoveDelay\n   */\n  @Output() pointerPositionCoord = new EventEmitter<[number, number]>();\n\n  /**\n   * IGO map\n   * @internal\n   */\n  get map(): IgoMap {\n    return this.component.map;\n  }\n\n  get mapProjection(): string {\n    return (this.component.map as IgoMap).projection;\n  }\n\n  constructor(\n    @Self() private component: MapBrowserComponent,\n    private mediaService: MediaService\n  ) {}\n\n  /**\n   * Start listening to pointermove\n   * @internal\n   */\n  ngOnInit(): void {\n    this.listenToMapPointerMove();\n    this.listenToMapClick();\n  }\n\n  /**\n   * Stop listening to pointermove\n   * @internal\n   */\n  ngOnDestroy() {\n    this.unlistenToMapPointerMove();\n    this.unlistenToMapClick();\n  }\n\n  /**\n   * On map pointermove\n   */\n  private listenToMapPointerMove() {\n    this.pointerMoveListener = this.map.ol.on(\n      'pointermove',\n      (event: MapBrowserPointerEvent<any>) =>\n        this.onPointerEvent(event, this.pointerPositionDelay)\n    );\n  }\n\n  /**\n   * On map click\n   */\n  private listenToMapClick() {\n    this.mapClickListener = this.map.ol.on(\n      'singleclick',\n      (event: MapBrowserPointerEvent<any>) => this.onPointerEvent(event, 0)\n    );\n  }\n\n  /**\n   * Stop listening for map pointermove\n   */\n  private unlistenToMapPointerMove() {\n    unByKey(this.pointerMoveListener);\n    this.pointerMoveListener = undefined;\n  }\n\n  /**\n   * Stop listening for map clicks\n   */\n  private unlistenToMapClick() {\n    this.mapClickListener = undefined;\n  }\n\n  /**\n   * emit delayed coordinate (longitude, latitude array) based on pointerMoveDelay or on click\n   * @param event OL map browser pointer event\n   */\n  private onPointerEvent(event: MapBrowserPointerEvent<any>, delay: number) {\n    if (event.dragging || this.mediaService.isTouchScreen()) {\n      return;\n    }\n    if (typeof this.lastTimeoutRequest !== 'undefined') {\n      // cancel timeout when the mouse moves\n      clearTimeout(this.lastTimeoutRequest);\n    }\n\n    const lonlat = transform(\n      event.coordinate,\n      this.mapProjection,\n      'EPSG:4326'\n    ) as [number, number];\n    this.lastTimeoutRequest = setTimeout(() => {\n      this.pointerPositionCoord.emit(lonlat);\n    }, delay);\n  }\n}\n","import { isValidJSON } from '@igo2/utils';\n\nimport olFeature from 'ol/Feature';\nimport * as olGeom from 'ol/geom';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport * as olStyle from 'ol/style';\n\nimport { StyleService } from '../../style-service/style.service';\n\nexport function featureRandomStyleFunction(): (\n  olFeature: olFeature<OlGeometry>,\n  resolution: number\n) => olStyle.Style {\n  const r = Math.floor(Math.random() * 255);\n  const g = Math.floor(Math.random() * 255);\n  const b = Math.floor(Math.random() * 255);\n  const stroke = new olStyle.Stroke({\n    color: [r, g, b, 1],\n    width: 2\n  });\n  const fill = new olStyle.Fill({\n    color: [r, g, b, 0.4]\n  });\n  return (olFeature: olFeature<OlGeometry>, resolution: number) => {\n    const customStyle = olFeature.get('_style');\n    if (customStyle && isValidJSON(customStyle)) {\n      if (\n        customStyle.circle &&\n        olFeature.get('rad') &&\n        olFeature.get('longitude') &&\n        olFeature.get('latitude')\n      ) {\n        const lonLat: [number, number] = [\n          olFeature.get('longitude'),\n          olFeature.get('latitude')\n        ];\n        const radius =\n          olFeature.get('rad') /\n          Math.cos((Math.PI / 180) * lonLat[1]) /\n          resolution;\n        customStyle.circle.radius = radius;\n      }\n      const styleService = new StyleService();\n      return styleService.createStyle(customStyle, undefined, resolution);\n    }\n    const style = new olStyle.Style({\n      stroke,\n      fill,\n      image: new olStyle.Circle({\n        radius: 5,\n        stroke,\n        fill\n      }),\n      text: olFeature.get('_mapTitle')\n        ? new olStyle.Text({\n            text: olFeature.get('_mapTitle').toString(),\n            offsetX: 5,\n            offsetY: -5,\n            font: '12px Calibri,sans-serif',\n            fill: new olStyle.Fill({ color: '#000' }),\n            stroke: new olStyle.Stroke({ color: '#fff', width: 3 }),\n            overflow: true\n          })\n        : undefined\n    });\n    return style;\n  };\n}\n\nexport function featureRandomStyle(): olStyle.Style {\n  const r = Math.floor(Math.random() * 255);\n  const g = Math.floor(Math.random() * 255);\n  const b = Math.floor(Math.random() * 255);\n  const stroke = new olStyle.Stroke({\n    color: [r, g, b, 1],\n    width: 2\n  });\n  const fill = new olStyle.Fill({\n    color: [r, g, b, 0.4]\n  });\n\n  const style = new olStyle.Style({\n    stroke,\n    fill,\n    image: new olStyle.Circle({\n      radius: 5,\n      stroke,\n      fill\n    })\n  });\n  return style;\n}\n\n/**\n * Create a default style for the pointer position and it's label summary.\n * @param feature olFeature\n * @returns OL style function\n */\nexport function hoverFeatureMarkerStyle(\n  feature: olFeature<olGeom.Geometry>\n): olStyle.Style[] {\n  const olStyleText = new olStyle.Style({\n    text: new olStyle.Text({\n      text: feature.get('hoverSummary'),\n      textAlign: 'left',\n      textBaseline: 'top',\n      font: '12px Calibri,sans-serif',\n      fill: new olStyle.Fill({ color: '#000' }),\n      backgroundFill: new olStyle.Fill({ color: 'rgba(255, 255, 255, 0.5)' }),\n      backgroundStroke: new olStyle.Stroke({\n        color: 'rgba(200, 200, 200, 0.75)',\n        width: 2\n      }),\n      stroke: new olStyle.Stroke({ color: '#fff', width: 3 }),\n      overflow: true,\n      offsetX: 10,\n      offsetY: 20,\n      padding: [2.5, 2.5, 2.5, 2.5]\n    })\n  });\n  const olStyles = [olStyleText];\n  switch (feature.getGeometry().getType()) {\n    case 'Point':\n      olStyles.push(\n        new olStyle.Style({\n          image: new olStyle.Circle({\n            radius: 10,\n            stroke: new olStyle.Stroke({\n              color: 'blue',\n              width: 3\n            })\n          })\n        })\n      );\n      break;\n    default:\n      olStyles.push(\n        new olStyle.Style({\n          stroke: new olStyle.Stroke({\n            color: 'white',\n            width: 5\n          })\n        })\n      );\n      olStyles.push(\n        new olStyle.Style({\n          stroke: new olStyle.Stroke({\n            color: 'blue',\n            width: 3\n          })\n        })\n      );\n  }\n\n  return olStyles;\n}\n\n/**\n * Create a default style for the pointer position and it's label summary.\n * @param feature olFeature\n * @returns OL style function\n */\nexport function pointerPositionSummaryMarkerStyle(\n  feature: olFeature<OlGeometry>\n): olStyle.Style {\n  return new olStyle.Style({\n    image: new olStyle.Icon({\n      src: './assets/igo2/geo/icons/cross_black_18px.svg'\n    }),\n\n    text: new olStyle.Text({\n      text: feature.get('pointerSummary'),\n      textAlign: 'left',\n      textBaseline: 'bottom',\n      font: '12px Calibri,sans-serif',\n      fill: new olStyle.Fill({ color: '#000' }),\n      backgroundFill: new olStyle.Fill({ color: 'rgba(255, 255, 255, 0.5)' }),\n      backgroundStroke: new olStyle.Stroke({\n        color: 'rgba(200, 200, 200, 0.75)',\n        width: 2\n      }),\n      stroke: new olStyle.Stroke({ color: '#fff', width: 3 }),\n      overflow: true,\n      offsetX: 10,\n      offsetY: -10,\n      padding: [2.5, 2.5, 2.5, 2.5]\n    })\n  });\n}\n","import {\n  Directive,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  Self\n} from '@angular/core';\n\nimport { EntityStore } from '@igo2/common/entity';\nimport { MediaService } from '@igo2/core/media';\nimport { SubjectStatus } from '@igo2/utils';\n\nimport OlFeature from 'ol/Feature';\nimport type { default as OlMapBrowserEvent } from 'ol/MapBrowserEvent';\nimport { unByKey } from 'ol/Observable';\nimport * as OlGeom from 'ol/geom';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport olLayerVector from 'ol/layer/Vector';\nimport olLayerVectorTile from 'ol/layer/VectorTile';\nimport RenderFeature from 'ol/render/Feature';\nimport olVectorTileSource from 'ol/source/VectorTile';\n\nimport { Subscription } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nimport { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';\nimport { tryBindStoreLayer } from '../../feature/shared/feature-store.utils';\nimport { FeatureMotion } from '../../feature/shared/feature.enums';\nimport { Feature } from '../../feature/shared/feature.interfaces';\nimport { FeatureStore } from '../../feature/shared/store';\nimport { VectorLayer, VectorTileLayer } from '../../layer/shared/layers';\nimport { MapBrowserComponent } from '../../map/map-browser/map-browser.component';\nimport { IgoMap } from '../../map/shared/map';\nimport { hoverFeatureMarkerStyle } from '../../style/shared/feature/feature-style';\nimport { StyleByAttribute } from '../../style/shared/vector/vector-style.interface';\nimport { StyleService } from '../../style/style-service/style.service';\n\n/**\n * This directive makes the mouse coordinate trigger a reverse search on available search sources.\n * The search results are placed into a label, on a cross icon, representing the mouse coordinate.\n * By default, no search sources. Config in config file must be defined.\n * the layer level.\n */\n@Directive({\n  selector: '[igoHoverFeature]',\n  standalone: true\n})\nexport class HoverFeatureDirective implements OnInit, OnDestroy {\n  public store: FeatureStore<Feature>;\n  private pointerHoverFeatureStore: EntityStore<OlFeature<OlGeometry>> =\n    new EntityStore<OlFeature<OlGeometry>>([]);\n  private lastTimeoutRequest;\n  private store$$: Subscription;\n\n  private selectionLayer: olLayerVectorTile;\n  private selectionMVT = {};\n  private mvtStyleOptions: StyleByAttribute;\n\n  /**\n   * Listener to the pointer move event\n   */\n  private pointerMoveListener;\n\n  private singleClickMapListener;\n\n  private hoverFeatureId = 'hoverFeatureId';\n  /**\n   * The delay where the mouse must be motionless before trigger the reverse search\n   */\n  @Input() igoHoverFeatureDelay = 1000;\n\n  /**\n   * If the user has enabled or not the directive\n   */\n  @Input() igoHoverFeatureEnabled = false;\n\n  @HostListener('mouseout')\n  mouseout() {\n    clearTimeout(this.lastTimeoutRequest);\n    this.clearLayer();\n  }\n\n  /**\n   * IGO map\n   * @internal\n   */\n  get map(): IgoMap {\n    return this.component.map;\n  }\n\n  get mapProjection(): string {\n    return (this.component.map as IgoMap).projection;\n  }\n\n  constructor(\n    @Self() private component: MapBrowserComponent,\n    private mediaService: MediaService,\n    private styleService: StyleService\n  ) {}\n\n  /**\n   * Start listening to pointermove and reverse search results.\n   * @internal\n   */\n  ngOnInit() {\n    this.map.status$\n      .pipe(first((status) => status === SubjectStatus.Done))\n      .subscribe(() => {\n        this.store = new FeatureStore<Feature>([], { map: this.map });\n        this.initStore();\n        this.listenToMapPointerMove();\n        this.subscribeToPointerStore();\n        this.listenToMapClick();\n      });\n  }\n\n  /**\n   * Initialize the pointer position store\n   * @internal\n   */\n  private initStore() {\n    const store = this.store;\n\n    const layer = new VectorLayer({\n      isIgoInternalLayer: true,\n      id: 'hoverFeatureId',\n      title: 'hoverFeature',\n      zIndex: 900,\n      source: new FeatureDataSource(),\n      showInLayerList: false,\n      exportable: false,\n      browsable: false,\n      style: hoverFeatureMarkerStyle\n    });\n    tryBindStoreLayer(store, layer);\n\n    this.selectionLayer = new olLayerVectorTile({\n      map: this.map.ol,\n      zIndex: 901,\n      renderMode: 'vector',\n      declutter: true,\n      source: new olVectorTileSource({ projection: this.map.projection }),\n      style: (feature, resolution) => {\n        if (this.mvtStyleOptions && feature.getId() in this.selectionMVT) {\n          return this.createHoverStyle(\n            feature,\n            this.mvtStyleOptions,\n            resolution\n          );\n        }\n      }\n    });\n  }\n\n  createHoverStyle(\n    feature: RenderFeature | OlFeature<OlGeometry>,\n    hoverStyle: StyleByAttribute,\n    resolution: number\n  ) {\n    const localHoverStyle = { ...hoverStyle };\n    let label = hoverStyle.label ? hoverStyle.label.attribute : undefined;\n    let hasLabelStyle = hoverStyle.label?.style ? true : false;\n\n    if (!feature.get('_isLabel')) {\n      localHoverStyle.label = undefined;\n      hasLabelStyle = false;\n      label = undefined;\n    } else {\n      // clear the style for label....\n      const size = localHoverStyle.data ? localHoverStyle.data.length : 0;\n      const radius = [];\n      const stroke = [];\n      const width = [];\n      const fill = [];\n      for (let i = 0; i < size; i++) {\n        radius.push(0);\n        stroke.push('rgba(255, 255, 255, 0)');\n        width.push(0);\n        fill.push('rgba(255, 255, 255, 0)');\n      }\n      localHoverStyle.radius = radius;\n      localHoverStyle.stroke = stroke;\n      localHoverStyle.width = width;\n      localHoverStyle.fill = fill;\n    }\n    if (!hasLabelStyle && label) {\n      localHoverStyle.label.style = {\n        textAlign: 'left',\n        textBaseline: 'top',\n        font: '12px Calibri,sans-serif',\n        fill: { color: '#000' },\n        backgroundFill: { color: 'rgba(255, 255, 255, 0.5)' },\n        backgroundStroke: { color: 'rgba(200, 200, 200, 0.75)', width: 2 },\n        stroke: { color: '#fff', width: 3 },\n        overflow: true,\n        offsetX: 10,\n        offsetY: 20,\n        padding: [2.5, 2.5, 2.5, 2.5]\n      };\n    }\n    return this.styleService.createStyleByAttribute(\n      feature,\n      localHoverStyle,\n      resolution\n    );\n  }\n\n  /**\n   * Stop listening to pointermove and reverse search results.\n   * @internal\n   */\n  ngOnDestroy() {\n    this.unlistenToMapPointerMove();\n    this.unsubscribeToPointerStore();\n    this.unlistenToMapSingleClick();\n  }\n\n  /**\n   * Subscribe to pointermove result store\n   * @internal\n   */\n  subscribeToPointerStore() {\n    this.store$$ = this.pointerHoverFeatureStore.entities$.subscribe(\n      (resultsUnderPointerPosition) => {\n        this.addFeatureOverlay(resultsUnderPointerPosition);\n      }\n    );\n  }\n\n  /**\n   * On map pointermove\n   */\n  private listenToMapPointerMove() {\n    this.pointerMoveListener = this.map.ol.on(\n      'pointermove',\n      (event: OlMapBrowserEvent<any>) => this.onMapEvent(event)\n    );\n  }\n\n  /**\n   * On map singleclick\n   */\n  private listenToMapClick() {\n    this.singleClickMapListener = this.map.ol.on('singleclick', () =>\n      this.onMapSingleClickEvent()\n    );\n  }\n\n  /**\n   * Unsubscribe to pointer store.\n   * @internal\n   */\n  unsubscribeToPointerStore() {\n    this.store$$?.unsubscribe();\n  }\n\n  /**\n   * Stop listening for map pointermove\n   * @internal\n   */\n  private unlistenToMapPointerMove() {\n    unByKey(this.pointerMoveListener);\n    this.pointerMoveListener = undefined;\n  }\n\n  /**\n   * Stop listening for map singleclick\n   * @internal\n   */\n  private unlistenToMapSingleClick() {\n    unByKey(this.singleClickMapListener);\n    this.singleClickMapListener = undefined;\n  }\n\n  /**\n   * Trigger clear layer on singleclick.\n   * @param event OL map browser singleclick event\n   */\n  private onMapSingleClickEvent() {\n    this.clearLayer();\n  }\n\n  /**\n   * Trigger hover when the mouse is motionless during the defined delay (pointerMoveDelay).\n   * @param event OL map browser pointer event\n   */\n  private onMapEvent(event: OlMapBrowserEvent<any>) {\n    if (\n      event.dragging ||\n      !this.igoHoverFeatureEnabled ||\n      this.mediaService.isTouchScreen()\n    ) {\n      this.clearLayer();\n      return;\n    }\n    if (typeof this.lastTimeoutRequest !== 'undefined') {\n      // cancel timeout when the mouse moves\n      clearTimeout(this.lastTimeoutRequest);\n    }\n    let maximumZindex = -Infinity;\n    let topMostOlLayer;\n    const pixel = this.map.ol.getPixelFromCoordinate(event.coordinate);\n    this.lastTimeoutRequest = setTimeout(() => {\n      // retrieve the topmost layer with feature to only apply the hover on this layer.\n      this.map.ol.forEachFeatureAtPixel(\n        pixel,\n        (mapFeature: RenderFeature | OlFeature<OlGeometry>, layerOL: any) => {\n          if (!layerOL) {\n            return;\n          }\n          const igoLayer = this.map.getLayerByOlUId((layerOL as any).ol_uid);\n          if (!this.canProcessHover(igoLayer as any)) {\n            return;\n          }\n          if (igoLayer.zIndex <= maximumZindex) {\n            return;\n          }\n          maximumZindex = igoLayer.zIndex;\n          topMostOlLayer = layerOL;\n        },\n        {\n          hitTolerance: 10,\n          layerFilter: (olLayer) =>\n            olLayer instanceof olLayerVector ||\n            olLayer instanceof olLayerVectorTile\n        }\n      );\n      if (!topMostOlLayer) {\n        // To clear label\n        this.clearLayer();\n        this.pointerHoverFeatureStore.clear();\n        return;\n      }\n\n      this.map.ol.forEachFeatureAtPixel(\n        pixel,\n        (mapFeature: RenderFeature | OlFeature<OlGeometry>, layerOL: any) => {\n          // To avoid flashing feature\n          if (\n            mapFeature.get('hoverSummary') === undefined &&\n            mapFeature.getProperties() !==\n              this.pointerHoverFeatureStore.all()[0]?.getProperties()\n          ) {\n            this.clearLayer();\n            if (layerOL instanceof olLayerVector) {\n              const myLayerVector = this.map.getLayerByOlUId(\n                (layerOL as any).ol_uid\n              ) as VectorLayer;\n              if (!this.canProcessHover(myLayerVector)) {\n                return;\n              }\n              const localOlFeature = this.handleRenderFeature(mapFeature);\n              this.setLayerStyleFromOptions(myLayerVector, localOlFeature);\n              const featuresToLoad = [localOlFeature];\n              localOlFeature.set('_isLabel', false);\n              const myLabelOlFeature = new OlFeature();\n              myLabelOlFeature.setProperties(localOlFeature.getProperties());\n              const labelGeom =\n                localOlFeature.getGeometry().getType() === 'Point'\n                  ? localOlFeature.getGeometry()\n                  : new OlGeom.Point(event.coordinate);\n              myLabelOlFeature.setGeometry(labelGeom);\n              myLabelOlFeature.setId(localOlFeature.getId());\n              myLabelOlFeature.set('_isLabel', true);\n              this.setLayerStyleFromOptions(myLayerVector, myLabelOlFeature);\n              featuresToLoad.push(myLabelOlFeature);\n              this.pointerHoverFeatureStore.load(featuresToLoad);\n              return true;\n            }\n            if (layerOL instanceof olLayerVectorTile) {\n              const myLayerVectorTile = this.map.getLayerByOlUId(\n                (layerOL as any).ol_uid\n              ) as VectorTileLayer;\n              if (!this.canProcessHover(myLayerVectorTile)) {\n                return;\n              }\n              if (\n                myLayerVectorTile?.options?.igoStyle?.styleByAttribute\n                  ?.hoverStyle\n              ) {\n                this.mvtStyleOptions =\n                  myLayerVectorTile.options.igoStyle.styleByAttribute.hoverStyle;\n              } else if (myLayerVectorTile?.options?.igoStyle?.hoverStyle) {\n                this.mvtStyleOptions =\n                  myLayerVectorTile.options.igoStyle.hoverStyle;\n              }\n              this.selectionLayer.setSource(layerOL.getSource());\n              layerOL\n                .getFeatures(event.pixel)\n                .then(\n                  (mvtFeatures: (RenderFeature | OlFeature<OlGeometry>)[]) => {\n                    if (!mvtFeatures.length) {\n                      this.selectionMVT = {};\n                      this.selectionLayer.changed();\n                      this.clearLayer();\n                      return;\n                    }\n                    const feature = mvtFeatures[0];\n                    if (!feature) {\n                      this.clearLayer();\n                      return;\n                    }\n                    const localOlFeature = this.handleRenderFeature(feature);\n                    localOlFeature.set('_isLabel', false);\n                    const myLabelOlFeature = new OlFeature();\n                    myLabelOlFeature.setProperties(\n                      localOlFeature.getProperties()\n                    );\n                    const labelGeom =\n                      localOlFeature.getGeometry().getType() === 'Point'\n                        ? localOlFeature.getGeometry()\n                        : new OlGeom.Point(event.coordinate);\n                    myLabelOlFeature.setGeometry(labelGeom);\n                    myLabelOlFeature.setId(localOlFeature.getId());\n                    myLabelOlFeature.set('_isLabel', true);\n                    this.setLayerStyleFromOptions(\n                      myLayerVectorTile,\n                      myLabelOlFeature\n                    );\n                    this.pointerHoverFeatureStore.load([myLabelOlFeature]);\n                    this.selectionMVT[feature.getId()] = localOlFeature;\n                    this.selectionLayer.changed();\n                  }\n                );\n            }\n          }\n        },\n        {\n          hitTolerance: 10,\n          layerFilter: (olLayer) => olLayer === topMostOlLayer\n        }\n      );\n    }, this.igoHoverFeatureDelay);\n  }\n\n  canProcessHover(igoLayer: VectorLayer | VectorTileLayer): boolean {\n    if (!igoLayer) {\n      return false;\n    }\n    if (!igoLayer.visible) {\n      return false;\n    }\n    if (!igoLayer.options) {\n      return false;\n    }\n\n    if (\n      !igoLayer.options.igoStyle?.styleByAttribute &&\n      !igoLayer.options.igoStyle?.hoverStyle\n    ) {\n      return false;\n    }\n\n    if (\n      igoLayer.options.igoStyle?.styleByAttribute &&\n      !igoLayer.options.igoStyle?.styleByAttribute.hoverStyle &&\n      !igoLayer.options.igoStyle?.hoverStyle\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  handleRenderFeature(\n    feature: RenderFeature | OlFeature<OlGeometry>\n  ): OlFeature<OlGeometry> {\n    let localFeature: OlFeature<OlGeometry>;\n    if (feature instanceof RenderFeature) {\n      localFeature = new OlFeature({\n        geometry: this.getGeometry(feature)\n      });\n      localFeature.setId(feature.getId());\n    } else if (feature instanceof OlFeature) {\n      localFeature = feature;\n    }\n    localFeature.setProperties(feature.getProperties());\n    return localFeature;\n  }\n\n  /**\n   * Add a feature to the pointer store\n   * @param text string\n   */\n  private addFeatureOverlay(hoverEntity: OlFeature<OlGeometry>[]) {\n    if (hoverEntity.length > 0) {\n      const result = hoverEntity[0];\n      this.clearLayer();\n      const feature = new OlFeature({\n        geometry: result.getGeometry(),\n        meta: { id: this.hoverFeatureId },\n        hoverSummary: this.getHoverSummary(result.getProperties())\n      });\n\n      this.store.setLayerOlFeatures([feature], FeatureMotion.None);\n    }\n  }\n\n  private setLayerStyleFromOptions(\n    igoLayer: VectorLayer | VectorTileLayer,\n    feature: OlFeature<OlGeometry>\n  ) {\n    const resolution = this.store.layer.map.viewController.getResolution();\n    if (igoLayer?.options?.igoStyle?.styleByAttribute?.hoverStyle) {\n      this.store.layer.ol.setStyle(\n        this.createHoverStyle(\n          feature,\n          igoLayer.options.igoStyle.styleByAttribute.hoverStyle,\n          resolution\n        )\n      );\n      return;\n    }\n    if (igoLayer?.options?.igoStyle?.hoverStyle) {\n      this.store.layer.ol.setStyle(\n        this.createHoverStyle(\n          feature,\n          igoLayer.options.igoStyle.hoverStyle,\n          resolution\n        )\n      );\n    }\n  }\n\n  private getHoverSummary(properties): string {\n    let summary = '';\n    for (const [key, value] of Object.entries(properties)) {\n      if (!key.startsWith('_') && key !== 'geometry') {\n        summary += `${key}: ${value}` + '\\n';\n      }\n    }\n    return summary.length >= 2 ? summary.slice(0, -2) : summary;\n  }\n\n  private getGeometry(feature): OlGeom.Geometry {\n    let geom;\n    if (!feature.getOrientedFlatCoordinates) {\n      geom = feature.getGeometry();\n    } else {\n      const coords = feature.getOrientedFlatCoordinates();\n      const flatCoords = [];\n\n      coords.forEach((c, idx) => {\n        if (idx % 2 === 0) {\n          flatCoords.push([\n            parseFloat(coords[idx]),\n            parseFloat(coords[idx + 1])\n          ]);\n        }\n      });\n\n      // TODO: test MultiX\n      switch (feature.getType()) {\n        case 'Point':\n          geom = new OlGeom.Point(flatCoords);\n          break;\n        case 'Polygon':\n          geom = new OlGeom.Polygon([flatCoords]);\n          break;\n        case 'LineString':\n          geom = new OlGeom.LineString([flatCoords]);\n          break;\n      }\n    }\n\n    return geom;\n  }\n\n  /**\n   * Clear the pointer store features\n   */\n  private clearLayer() {\n    this.selectionMVT = {};\n    if (this.selectionLayer) {\n      this.selectionLayer.changed();\n    }\n    if (this.store) {\n      this.store.clearLayer();\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport * as olproj from 'ol/proj';\nimport * as olproj4 from 'ol/proj/proj4';\n\nimport proj4 from 'proj4';\n\nimport { Projection } from './projection.interfaces';\n\n/**\n * When injected, this service automatically registers and\n * projection defined in the application config. A custom projection\n * needs to be registered to be usable by OL.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class ProjectionService {\n  constructor(private config: ConfigService) {\n    const projections: Projection[] =\n      this.config.getConfig('projections') || [];\n    projections.forEach((projection) => {\n      projection.alias = projection.alias ? projection.alias : projection.code;\n      this.registerProjection(projection);\n    });\n\n    // register all utm zones\n    for (let utmZone = 1; utmZone < 61; utmZone++) {\n      const code = utmZone < 10 ? `EPSG:3260${utmZone}` : `EPSG:326${utmZone}`;\n      const def = `+proj=utm +zone=${utmZone} +datum=WGS84 +units=m +no_defs`;\n      const proj: Projection = { code, def, extent: undefined };\n      this.registerProjection(proj);\n    }\n\n    // register all mtm zones\n    for (let mtmZone = 1; mtmZone < 11; mtmZone++) {\n      const code =\n        mtmZone < 10 ? `EPSG:3218${mtmZone}` : `EPSG:321${80 + mtmZone}`;\n      let lon0;\n      if (Number(mtmZone) <= 2) {\n        lon0 = -50 - Number(mtmZone) * 3;\n      } else if (Number(mtmZone) >= 12) {\n        lon0 = -81 - (Number(mtmZone) - 12) * 3;\n      } else {\n        lon0 = -49.5 - Number(mtmZone) * 3;\n      }\n      const def = `+proj=tmerc +lat_0=0 +lon_0=${lon0} +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\"`;\n      const proj: Projection = { code, def, extent: undefined };\n      this.registerProjection(proj);\n    }\n  }\n\n  /**\n   * Define a proj4 projection and register it in OL\n   * @param projection Projection\n   */\n  registerProjection(projection: Projection) {\n    proj4.defs(projection.code, projection.def);\n    olproj4.register(proj4);\n    if (projection.extent) {\n      olproj.get(projection.code).setExtent(projection.extent);\n    }\n  }\n}\n","import { Observable, from } from 'rxjs';\n\nimport { ProjectionsLimitationsOptions } from './projection.interfaces';\n\n/**\n * Return a number of zone MTM for a longitude for province of Quebec only\n * @param lon number\n * @returns zone\n */\nexport function zoneMtm(lon: number): number {\n  let lonMin = -54;\n  const lonMax = -81;\n  if (lon < lonMax || lon > lonMin) {\n    return 0;\n  } else {\n    const deltaLon = 3;\n    let zone = 2;\n    while (Math.abs(lon - lonMin) > deltaLon) {\n      lonMin = lonMin - deltaLon;\n      zone++;\n    }\n    return zone;\n  }\n}\n/**\n * Return a number of zone UTM for a longitude\n * @param lon number\n * @returns zone\n */\nexport function zoneUtm(lon: number): number {\n  let lonMin = -180;\n  const deltaLon = 6;\n  let zone = 1;\n  while (Math.abs(lon - lonMin) > deltaLon) {\n    lonMin = lonMin + deltaLon;\n    zone++;\n  }\n  return zone;\n}\n\n/**\n * Compute the contraints of projections\n * @param projectionsLimitations: ProjectionsLimitationsOptions\n * @returns projectionsContraints: ProjectionsLimitationsOptions\n */\nexport function computeProjectionsConstraints(\n  projectionsLimitations: ProjectionsLimitationsOptions\n): ProjectionsLimitationsOptions {\n  const mtmZone = projectionsLimitations.mtmZone;\n  const utmZone = projectionsLimitations.utmZone;\n  const projectionsConstraints = {\n    projFromConfig:\n      projectionsLimitations.projFromConfig === false ? false : true,\n    nad83: projectionsLimitations.nad83 === false ? false : true,\n    wgs84: projectionsLimitations.wgs84 === false ? false : true,\n    webMercator: projectionsLimitations.webMercator === false ? false : true,\n    utm: projectionsLimitations.utm === false ? false : true,\n    mtm: projectionsLimitations.mtm === false ? false : true,\n    utmZone: {\n      minZone: utmZone && utmZone.minZone ? utmZone.minZone : 17,\n      maxZone: utmZone && utmZone.maxZone ? utmZone.maxZone : 21\n    },\n    mtmZone: {\n      minZone: mtmZone && mtmZone.minZone ? mtmZone.minZone : 2,\n      maxZone: mtmZone && mtmZone.maxZone ? mtmZone.maxZone : 10\n    }\n  };\n  return projectionsConstraints;\n}\n/**\n * Method allowing to read the file and try to detect projection/Coord system\n * Only geojson/json/gml could be detected at this moment.\n * @param options A file and an optional number of line to read the EPSG Code. Used only for GML files\n * @returns Observable string, epsgNotDefined if the EPSG is not detected or a EPSG string ex: EPSG:3857\n */\nexport function detectFileEPSG(options: {\n  file: File;\n  nbLines?: number;\n}): Observable<string> {\n  const file = options.file;\n  const nbLines = options.nbLines ?? 500;\n\n  const reader = new FileReader();\n  return from(\n    new Promise<string>((resolve) => {\n      if (\n        !file.name.toLowerCase().endsWith('.geojson') &&\n        !file.name.toLowerCase().endsWith('.json') &&\n        !file.name.toLowerCase().endsWith('.gml')\n      ) {\n        resolve('epsgNotDefined');\n        return;\n      }\n\n      reader.onload = () => {\n        if (\n          file.name.toLowerCase().endsWith('.geojson') ||\n          file.name.toLowerCase().endsWith('.json')\n        ) {\n          const geojson = JSON.parse(reader.result as string);\n          if (geojson.crs?.properties?.name) {\n            const epsg =\n              geojson.crs.properties.name.match(/EPSG:{1,2}\\d{0,6}/gm);\n            if (epsg !== null && epsg.length) {\n              resolve(epsg[0].replace(/::/g, ':'));\n              return;\n            } else {\n              resolve('epsgNotDefined');\n              return;\n            }\n          } else {\n            resolve('epsgNotDefined');\n            return;\n          }\n        } else if (file.name.toLowerCase().endsWith('.gml')) {\n          const text = reader.result as string;\n          const lines = (text as string).split('\\n');\n          for (let line = 0; line <= nbLines; line++) {\n            const epsg = lines[line].match(/EPSG:\\d{0,6}/gm);\n            if (epsg !== null && epsg.length) {\n              resolve(epsg[0]);\n              break;\n            } else {\n              resolve(undefined);\n            }\n          }\n        } else {\n          resolve('epsgNotDefined');\n        }\n      };\n      reader.readAsText(file, 'UTF-8');\n    })\n  );\n}\n","import { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { IgoMap } from '../shared/map';\n\n@Component({\n  selector: 'igo-zoom-button',\n  templateUrl: './zoom-button.component.html',\n  styleUrls: ['./zoom-button.component.scss'],\n  standalone: true,\n  imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule]\n})\nexport class ZoomButtonComponent {\n  @Input() map: IgoMap;\n\n  @Input() color: string;\n\n  get zoom(): number {\n    return this.map.viewController.getZoom();\n  }\n\n  get minZoom(): number {\n    return this.map.viewController.olView.getMinZoom() || 1;\n  }\n\n  get maxZoom(): number {\n    return this.map.viewController.olView.getMaxZoom();\n  }\n}\n","<div class=\"igo-zoom-button-container\">\n  <button\n    mat-icon-button\n    [matTooltip]=\"'igo.geo.mapButtons.zoomIn' | translate: { zoom: zoom + 1 }\"\n    matTooltipPosition=\"left\"\n    [color]=\"color\"\n    [disabled]=\"zoom >= maxZoom\"\n    (click)=\"map.viewController.zoomIn()\"\n  >\n    <mat-icon>add</mat-icon>\n  </button>\n\n  <button\n    mat-icon-button\n    [matTooltip]=\"'igo.geo.mapButtons.zoomOut' | translate: { zoom: zoom - 1 }\"\n    matTooltipPosition=\"left\"\n    [color]=\"color\"\n    [disabled]=\"zoom <= minZoom\"\n    (click)=\"map.viewController.zoomOut()\"\n  >\n    <mat-icon>remove</mat-icon>\n  </button>\n</div>\n","import { NgClass } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\n@Component({\n  selector: 'igo-menu-button',\n  templateUrl: './menu-button.component.html',\n  styleUrls: ['./menu-button.component.scss'],\n  standalone: true,\n  imports: [\n    MatButtonModule,\n    NgClass,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class MenuButtonComponent {\n  @Input()\n  get sidenavOpened(): boolean {\n    return this._sidenavOpenend;\n  }\n  set sidenavOpened(value: boolean) {\n    this._sidenavOpenend = value;\n    this.getClassMenuButton();\n  }\n  private _sidenavOpenend: boolean;\n\n  @Output() openSidenav = new EventEmitter<any>();\n\n  public useThemeColor: boolean;\n\n  public menuButtonClass;\n\n  constructor(public configService: ConfigService) {\n    const configValue = this.configService.getConfig(\n      'menu.button.useThemeColor'\n    );\n    this.useThemeColor = configValue !== undefined ? configValue : false;\n  }\n\n  getClassMenuButton() {\n    this.menuButtonClass = {\n      'menu-button-white-background': !this.useThemeColor\n    };\n  }\n\n  onToggleSidenavClick() {\n    this.openSidenav.emit();\n  }\n}\n","<button\n  mat-icon-button\n  id=\"menu-button\"\n  [ngClass]=\"menuButtonClass\"\n  tooltip-position=\"below\"\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"(sidenavOpened ? 'menu.close' : 'menu.open') | translate\"\n  (click)=\"onToggleSidenavClick()\"\n>\n  <mat-icon>menu</mat-icon>\n</button>\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { AfterContentInit, Component, Input, OnDestroy } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { IgoMap } from '../shared/map';\n\n@Component({\n  selector: 'igo-geolocate-button',\n  templateUrl: './geolocate-button.component.html',\n  styleUrls: ['./geolocate-button.component.scss'],\n  standalone: true,\n  imports: [\n    NgIf,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class GeolocateButtonComponent implements AfterContentInit, OnDestroy {\n  private tracking$$: Subscription;\n  readonly icon$ = new BehaviorSubject<string>('my_location');\n\n  @Input()\n  get map(): IgoMap {\n    return this._map;\n  }\n  set map(value: IgoMap) {\n    this._map = value;\n  }\n  private _map: IgoMap;\n\n  @Input()\n  get color(): string {\n    return this._color;\n  }\n  set color(value: string) {\n    this._color = value;\n  }\n  private _color: string;\n\n  constructor(private configService: ConfigService) {}\n  ngAfterContentInit(): void {\n    this.map.ol.once('rendercomplete', () => {\n      this.tracking$$ = this.map.geolocationController.tracking$.subscribe(\n        (tracking) => {\n          if (tracking) {\n            this.icon$.next('my_location');\n          } else {\n            this.icon$.next(\n              this.configService.getConfig('geolocate.basic')\n                ? 'my_location'\n                : 'location_searching'\n            );\n          }\n        }\n      );\n    });\n  }\n\n  ngOnDestroy(): void {\n    if (this.tracking$$) {\n      this.tracking$$.unsubscribe();\n    }\n  }\n\n  onGeolocationClick() {\n    const tracking = this.map.geolocationController.tracking;\n    this.map.geolocationController.tracking = tracking ? false : true;\n  }\n}\n","<div class=\"igo-geolocate-button-container\" *ngIf=\"map.geolocationController\">\n  <button\n    mat-icon-button\n    [matTooltip]=\"\n      map.geolocationController.tracking\n        ? ('igo.geo.mapButtons.geolocateInactive' | translate)\n        : ('igo.geo.mapButtons.geolocate' | translate)\n    \"\n    matTooltipPosition=\"left\"\n    [color]=\"color\"\n    (click)=\"onGeolocationClick()\"\n  >\n    <mat-icon>{{ icon$ | async }}</mat-icon>\n  </button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport * as olproj from 'ol/proj';\n\nimport { IgoMap } from '../shared/map';\nimport { MapExtent } from '../shared/map.interface';\nimport { HomeExtentButtonOptions } from './home-extent-button.interface';\n\n/*\nButton to center the map to the home extent\n*/\n@Component({\n  selector: 'igo-home-extent-button',\n  templateUrl: './home-extent-button.component.html',\n  styleUrls: ['./home-extent-button.component.scss'],\n  standalone: true,\n  imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule]\n})\nexport class HomeExtentButtonComponent {\n  @Input() map: IgoMap;\n  @Input() color: string;\n  @Input() extentOverride?: MapExtent;\n  @Input() centerOverride?: [number, number];\n  @Input() zoomOverride?: number;\n\n  private homeExtentButtonExtent;\n  private homeExtentButtonCenter;\n  private homeExtentButtonZoom;\n\n  constructor(public configService: ConfigService) {\n    this.computeHomeExtent();\n  }\n\n  computeHomeExtent() {\n    const homeExtentButtonOptions: HomeExtentButtonOptions =\n      this.configService.getConfig('homeExtentButton');\n\n    this.homeExtentButtonExtent =\n      this.extentOverride || homeExtentButtonOptions?.homeExtButtonExtent;\n    this.homeExtentButtonCenter =\n      this.centerOverride || homeExtentButtonOptions?.homeExtButtonCenter;\n    this.homeExtentButtonZoom =\n      this.zoomOverride || homeExtentButtonOptions?.homeExtButtonZoom;\n\n    // priority over extent if these 2 properties are defined;\n    if (this.centerOverride && this.zoomOverride) {\n      this.homeExtentButtonExtent = undefined;\n    }\n  }\n\n  onToggleClick() {\n    this.computeHomeExtent();\n    if (this.homeExtentButtonExtent) {\n      this.map.viewController.zoomToExtent(this.homeExtentButtonExtent);\n    } else if (this.homeExtentButtonCenter && this.homeExtentButtonZoom) {\n      const center = olproj.fromLonLat(\n        this.homeExtentButtonCenter,\n        this.map.viewController.olView.getProjection().getCode()\n      );\n      this.map.viewController.olView.setCenter(center);\n      this.map.viewController.zoomTo(this.homeExtentButtonZoom);\n    }\n  }\n}\n","<div class=\"igo-home-extent-button-container\">\n  <button\n    mat-icon-button\n    [matTooltip]=\"'igo.geo.mapButtons.home-extent' | translate\"\n    matTooltipPosition=\"left\"\n    [color]=\"color\"\n    (click)=\"onToggleClick()\"\n  >\n    <mat-icon>home</mat-icon>\n  </button>\n</div>\n","import { NgClass } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { IgoMap } from '../shared/map';\n\n@Component({\n  selector: 'igo-offline-button',\n  templateUrl: './offline-button.component.html',\n  styleUrls: ['./offline-button.component.scss'],\n  standalone: true,\n  imports: [\n    MatButtonModule,\n    MatTooltipModule,\n    NgClass,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class OfflineButtonComponent implements OnInit {\n  btnStyle = 'onlineStyle';\n\n  @Input() map: IgoMap;\n  @Input() color: string;\n  @Input() enabled = false;\n\n  ngOnInit(): void {\n    this.map.forcedOffline$.next(this.enabled);\n  }\n\n  onClick() {\n    this.enabled = !this.enabled;\n    this.handleButtonStyle();\n    this.map.forcedOffline$.next(this.enabled);\n  }\n\n  private handleButtonStyle() {\n    if (this.enabled) {\n      this.btnStyle = 'offlineStyle';\n    } else {\n      this.btnStyle = 'onlineStyle';\n    }\n  }\n}\n","<div class=\"igo-user-button-container\">\n  <button\n    mat-icon-button\n    [matTooltip]=\"\n      enabled\n        ? ('igo.geo.mapButtons.online' | translate)\n        : ('igo.geo.mapButtons.offline' | translate)\n    \"\n    matTooltipPosition=\"left\"\n    [ngClass]=\"[btnStyle]\"\n    [color]=\"enabled ? color : null\"\n    (click)=\"onClick()\"\n  >\n    <mat-icon>wifi_off</mat-icon>\n  </button>\n</div>\n","import { AsyncPipe } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\nimport { userAgent } from '@igo2/utils';\n\nimport NoSleep from 'nosleep.js';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n  selector: 'igo-wake-lock-button',\n  templateUrl: './wake-lock-button.component.html',\n  styleUrls: ['./wake-lock-button.component.scss'],\n  standalone: true,\n  imports: [\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\n\n/**\n * Prevent display sleep and enable wake lock in all Android and iOS web browsers.\n * On iOS, the Wake Lock API is not supported\n * https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake_Lock_API\n * On not supported browser, a fake video is used to keep the screen open.\n *\n * TODO: When the API will be supported by every browser, We should remove the NoSleep.js dependency\n * and replace it by a WakeLock API implementation.\n */\nexport class WakeLockButtonComponent {\n  @Input() color = 'primary';\n  @Input()\n  get enabled(): boolean {\n    return this.storageService.get('wakeLockEnabled') as boolean;\n  }\n  set enabled(value: boolean) {\n    this.storageService.set('wakeLockEnabled', value);\n  }\n\n  private noSleep: NoSleep;\n  readonly icon$ = new BehaviorSubject<string>('bedtime');\n  public visible = false;\n\n  constructor(private storageService: StorageService) {\n    this.noSleep = new NoSleep();\n    const nonWakeLockApiBrowser = userAgent.satisfies({\n      ie: '>0',\n      edge: '<84',\n      chrome: '<84',\n      firefox: '>0',\n      opera: '<70',\n      safari: '>0'\n    });\n    if (nonWakeLockApiBrowser) {\n      this.disableWakeLock();\n      this.enabled = false;\n      window.addEventListener('blur', () => {\n        this.disableWakeLock();\n        this.enabled = false;\n      });\n    }\n    this.enabled ? this.enableWakeLock() : this.disableWakeLock();\n  }\n\n  /**\n   * Prevent display sleep and enable wake lock in all Android and iOS web browsers.\n   * On iOS, the Wake Lock API is not supported\n   * https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake_Lock_API\n   * On not supported browser, a fake video is used to keep the screen open.\n   */\n  private enableWakeLock() {\n    this.noSleep.enable();\n    this.enabled = true;\n    this.icon$.next('bedtime_off');\n  }\n  /**\n   * Let display sleep\n   */\n  private disableWakeLock() {\n    this.noSleep.disable();\n    this.enabled = false;\n    this.icon$.next('bedtime');\n  }\n\n  toggleWakeLock() {\n    if (this.enabled) {\n      this.disableWakeLock();\n    } else {\n      this.enableWakeLock();\n    }\n  }\n}\n","<div class=\"igo-wake-lock-button-container\">\n  <button\n    [color]=\"color\"\n    mat-icon-button\n    [matTooltip]=\"\n      enabled\n        ? ('igo.geo.mapButtons.preventScreenLock' | translate)\n        : ('igo.geo.mapButtons.letScreenLock' | translate)\n    \"\n    matTooltipPosition=\"left\"\n    (click)=\"toggleWakeLock()\"\n  >\n    <mat-icon>{{ icon$ | async }}</mat-icon>\n  </button>\n</div>\n","import {\n  AnimationTriggerMetadata,\n  animate,\n  state,\n  style,\n  transition,\n  trigger\n} from '@angular/animations';\n\nexport function baseLayersSwitcherSlideInOut(): AnimationTriggerMetadata {\n  return trigger('baseLayerSwitcherState', [\n    state(\n      'collapseIcon',\n      style({\n        height: '40px',\n        width: '40px',\n        overflow: 'hidden'\n      })\n    ),\n    state(\n      'collapseMap',\n      style({\n        height: '80px',\n        overflow: 'hidden'\n      })\n    ),\n    state(\n      'expand',\n      style({\n        overflow: 'hidden'\n      })\n    ),\n    transition('collapse => expand', animate('200ms')),\n    transition('expand => collapse', animate('200ms'))\n  ]);\n}\n","import { NgIf } from '@angular/common';\nimport {\n  AfterViewInit,\n  ApplicationRef,\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnDestroy\n} from '@angular/core';\n\nimport OlMap from 'ol/Map';\nimport OlView from 'ol/View';\n\nimport { isLayerItem } from '../../layer';\nimport {\n  Layer,\n  LayerOptions,\n  LayersLink,\n  LayersLinkProperties\n} from '../../layer/shared';\nimport { LayerService } from '../../layer/shared/layer.service';\nimport { MapBrowserComponent } from '../map-browser/map-browser.component';\nimport { IgoMap } from '../shared/map';\n\n@Component({\n  selector: 'igo-mini-basemap',\n  templateUrl: './mini-basemap.component.html',\n  styleUrls: ['./mini-basemap.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [NgIf, MapBrowserComponent]\n})\nexport class MiniBaseMapComponent implements AfterViewInit, OnDestroy {\n  @Input() map: IgoMap;\n  @Input() disabled: boolean;\n  @Input() title: string;\n\n  @Input()\n  get display(): boolean {\n    return this._display;\n  }\n  set display(value: boolean) {\n    this._display = value;\n    this.basemap.ol.getView().changed();\n  }\n  private _display: boolean;\n\n  @Input()\n  get baseLayer(): Layer {\n    return this._baseLayer;\n  }\n  set baseLayer(value: Layer) {\n    this._baseLayer = value;\n    this.handleBaseLayerChanged(value);\n  }\n  private _baseLayer: Layer;\n\n  public basemap = new IgoMap({\n    controls: {},\n    interactions: false\n  });\n\n  constructor(\n    private layerService: LayerService,\n    private appRef: ApplicationRef\n  ) {}\n\n  ngAfterViewInit() {\n    this.handleMainMapViewChange(this.map.ol.getView());\n    this.map.viewController.olView.on('change', (change) => {\n      this.handleMainMapViewChange(change.target as OlView);\n    });\n    this.map.ol.on('pointerdrag', (change) => {\n      this.handleMainMapViewChange((change.target as OlMap).getView());\n    });\n  }\n\n  ngOnDestroy() {\n    this.map.viewController.olView.un('change', (change) => {\n      this.handleMainMapViewChange(change.target as OlView);\n    });\n    this.map.ol.un('pointerdrag', (change) => {\n      this.handleMainMapViewChange((change.target as OlMap).getView());\n    });\n  }\n\n  changeBaseLayer(baseLayer: Layer) {\n    if (this.disabled) {\n      return;\n    }\n    this.map.layerController.selectBaseLayer(baseLayer);\n    this.appRef.tick();\n  }\n\n  private handleMainMapViewChange(mainMapView) {\n    const mainMapViewProperties = mainMapView.getProperties();\n    this.basemap.viewController.olView.setResolution(\n      mainMapViewProperties.resolution\n    );\n    this.basemap.viewController.olView.setRotation(\n      mainMapViewProperties.rotation\n    );\n    this.basemap.viewController.olView.setCenter(\n      this.map.viewController.getCenter()\n    );\n  }\n\n  private handleBaseLayerChanged(baselayer: Layer) {\n    this.basemap.layerController.reset();\n\n    const options: any = Object.assign(\n      Object.create(baselayer.options),\n      baselayer.options,\n      {\n        visible: true,\n        baseLayer: false\n      }\n    );\n\n    const layer = this.layerService.createLayer(options);\n    this.basemap.layerController.add(layer);\n    this.handleLinkedBaseLayer(layer);\n  }\n\n  private handleLinkedBaseLayer(baselayer: Layer): void {\n    const linkedLayers: LayersLink = baselayer.options.linkedLayers;\n    if (!linkedLayers) {\n      return;\n    }\n    const links: LayersLinkProperties[] = linkedLayers.links;\n    const isParentLayer: boolean = links ? true : false;\n    if (isParentLayer) {\n      // search for child layers\n      links.map((link: LayersLinkProperties) => {\n        link.linkedIds.map((linkedId: string) => {\n          const layerToApply = this.map.layerController.all.find(\n            (layer) =>\n              isLayerItem(layer) &&\n              layer.options.linkedLayers?.linkId === linkedId\n          ) as Layer;\n          if (layerToApply) {\n            const linkedLayerOptions: LayerOptions = Object.assign(\n              Object.create(layerToApply.options),\n              layerToApply.options,\n              {\n                zIndex: 9000,\n                visible:\n                  layerToApply.options.linkedLayers?.showInMiniBaseMap ?? true,\n                baseLayer: false\n              } as LayerOptions\n            );\n            this.basemap.layerController.add(\n              this.layerService.createLayer(linkedLayerOptions)\n            );\n          }\n        });\n      });\n    }\n  }\n}\n","<div class=\"igo-mini-basemap-container\">\n  <div *ngIf=\"display\" (click)=\"changeBaseLayer(baseLayer)\">\n    <igo-map-browser [map]=\"basemap\"></igo-map-browser>\n    <div *ngIf=\"title\" class=\"igo-mini-basemap-title\">{{ title }}</div>\n  </div>\n</div>\n","import { NgClass, NgFor, NgIf } from '@angular/common';\nimport { AfterViewInit, Component, Input, OnDestroy } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { Media, MediaService } from '@igo2/core/media';\n\nimport { Subscription } from 'rxjs';\n\nimport { Layer } from '../../layer/shared';\nimport { IgoMap } from '../shared/map';\nimport { baseLayersSwitcherSlideInOut } from './baselayers-switcher.animation';\nimport { MiniBaseMapComponent } from './mini-basemap.component';\n\n@Component({\n  selector: 'igo-baselayers-switcher',\n  templateUrl: './baselayers-switcher.component.html',\n  styleUrls: ['./baselayers-switcher.component.scss'],\n  animations: [baseLayersSwitcherSlideInOut()],\n  standalone: true,\n  imports: [\n    NgIf,\n    NgClass,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    NgFor,\n    MiniBaseMapComponent,\n    IgoLanguageModule\n  ]\n})\nexport class BaseLayersSwitcherComponent implements AfterViewInit, OnDestroy {\n  @Input() map: IgoMap;\n  @Input() useStaticIcon: boolean;\n\n  public _baseLayers: Layer[] = [];\n  public expand = false;\n  public showButton = true;\n\n  private layers$$: Subscription;\n\n  get hasMoreThanTwo(): boolean {\n    return this.baseLayers.length > 1;\n  }\n\n  constructor(private mediaService: MediaService) {\n    const media = this.mediaService.media$.value;\n    if (media === Media.Mobile && this.useStaticIcon === undefined) {\n      this.useStaticIcon = true;\n    }\n  }\n\n  ngAfterViewInit() {\n    this.layers$$ = this.map.layerController.baseLayers$.subscribe((layers) => {\n      this._baseLayers = layers ?? [];\n    });\n  }\n\n  ngOnDestroy() {\n    this.layers$$.unsubscribe();\n  }\n\n  collapseOrExpand() {\n    if (this.hasMoreThanTwo || this.useStaticIcon) {\n      this.expand = !this.expand;\n    } else {\n      this.expand = false;\n    }\n  }\n\n  get baseLayers(): Layer[] {\n    const mapResolution = this.map.viewController.getResolution();\n    const mapZoom = this.map.viewController.getZoom();\n\n    const bl = this._baseLayers.filter((l) => {\n      return (\n        (!l.options.maxResolution ||\n          mapResolution <= l.options.maxResolution) &&\n        (!l.options.minResolution ||\n          mapResolution >= l.options.minResolution) &&\n        (!l.options.source.options.maxZoom ||\n          mapZoom <= l.options.source.options.maxZoom) &&\n        (!l.options.source.options.minZoom ||\n          mapZoom >= l.options.source.options.minZoom)\n      );\n    });\n\n    const blHidden = bl.filter((l) => !l.visible);\n    return blHidden.length + 1 === bl.length ? blHidden : bl;\n  }\n}\n","<div\n  *ngIf=\"baseLayers.length > 0\"\n  class=\"igo-baselayers-switcher-container\"\n  [ngClass]=\"{ 'container-expand': expand }\"\n  [@baseLayerSwitcherState]=\"\n    expand ? 'expand' : useStaticIcon ? 'collapseIcon' : 'collapseMap'\n  \"\n  (@baseLayerSwitcherState.start)=\"showButton = false\"\n  (@baseLayerSwitcherState.done)=\"showButton = true\"\n  (click)=\"collapseOrExpand()\"\n>\n  <div\n    *ngIf=\"useStaticIcon && !expand && showButton\"\n    class=\"igo-baselayers-switcher-button-container\"\n  >\n    <button\n      mat-icon-button\n      [matTooltip]=\"'igo.geo.mapButtons.baselayerSwitcher' | translate\"\n      matTooltipPosition=\"right\"\n      color=\"primary\"\n    >\n      <mat-icon>photo_library</mat-icon>\n    </button>\n  </div>\n\n  <div class=\"basemap-list\">\n    <igo-mini-basemap\n      *ngFor=\"let baseLayer of baseLayers; let i = index\"\n      [map]=\"map\"\n      [baseLayer]=\"baseLayer\"\n      [title]=\"\n        baseLayers.length > 2 && !expand\n          ? ('igo.geo.baselayersSwitcher.title' | translate)\n          : baseLayer.title\n      \"\n      [display]=\"expand || (i === 0 && !useStaticIcon)\"\n      [disabled]=\"!expand && baseLayers.length > 1\"\n    >\n    </igo-mini-basemap>\n  </div>\n\n  <div *ngIf=\"hasMoreThanTwo\" class=\"more-baselayers\">\n    <mat-icon class=\"material-icons mat-icon\" color=\"primary\"\n      >arrow_drop_down</mat-icon\n    >\n  </div>\n</div>\n","import { AsyncPipe, NgIf, NgStyle } from '@angular/common';\nimport { AfterContentInit, Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { bearingToAzimuth } from '@turf/helpers';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { IgoMap } from '../shared/map';\n\n@Component({\n  selector: 'igo-rotation-button',\n  templateUrl: './rotation-button.component.html',\n  styleUrls: ['./rotation-button.component.scss'],\n  standalone: true,\n  imports: [\n    NgIf,\n    MatTooltipModule,\n    MatButtonModule,\n    MatIconModule,\n    NgStyle,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class RotationButtonComponent implements AfterContentInit {\n  readonly rotated$ = new BehaviorSubject<boolean>(false);\n  public azimuthRounded = 0;\n  public rotationRounded = 0;\n  readonly currentStyle$ = new BehaviorSubject({\n    transform: 'rotate(0rad)'\n  });\n\n  @Input() map: IgoMap;\n  @Input() showIfNoRotation: boolean;\n  @Input() color: string;\n\n  ngAfterContentInit() {\n    this.map.viewController.rotation$.subscribe((r) => {\n      const radians = r || 0;\n      const deg = (radians * 180) / Math.PI;\n      this.rotationRounded = Math.round(deg);\n      this.azimuthRounded = Math.round(bearingToAzimuth(deg * -1));\n      this.currentStyle$.next({\n        transform: 'rotate(' + radians + 'rad)'\n      });\n      this.rotated$.next(radians !== 0);\n    });\n  }\n}\n","<div\n  *ngIf=\"((rotated$ | async) && !showIfNoRotation) || showIfNoRotation\"\n  class=\"igo-rotation-button-container\"\n  [matTooltip]=\"\n    (rotated$ | async)\n      ? ('igo.geo.mapButtons.resetRotation'\n        | translate: { azimuth: azimuthRounded, rotation: rotationRounded })\n      : ('igo.geo.mapButtons.tipRotation' | translate)\n  \"\n  matTooltipPosition=\"left\"\n>\n  <button\n    mat-icon-button\n    matTooltipPosition=\"left\"\n    [color]=\"color\"\n    [disabled]=\"(rotated$ | async) === false\"\n    (click)=\"map.viewController.resetRotation()\"\n  >\n    <mat-icon [ngStyle]=\"currentStyle$ | async\">navigation </mat-icon>\n  </button>\n</div>\n","import { AfterViewInit, Component, Input, OnDestroy } from '@angular/core';\n\nimport { getRenderPixel } from 'ol/render';\n\nimport { Subscription } from 'rxjs';\n\nimport { Layer } from '../../layer';\nimport { IgoMap } from '../shared/map';\n\n/**\n * Tool to swipe the layers\n */\n@Component({\n  selector: 'igo-swipe-control',\n  templateUrl: './swipe-control.component.html',\n  styleUrls: ['./swipe-control.component.scss'],\n  standalone: true\n})\nexport class SwipeControlComponent implements AfterViewInit, OnDestroy {\n  /**\n   * Get an active map\n   */\n  @Input() map: IgoMap;\n\n  /**\n   * The list of layers for swipe\n   */\n  private layers: Layer[];\n\n  /**\n   * Final position of the swiped element\n   */\n  private pos1: number;\n\n  /**\n   * Intermediate position of the swiped element\n   */\n  private pos3: number;\n\n  /**\n   * State of draggable action\n   */\n  private inDragAction = false;\n\n  /**\n   * Listener of toggle from advanced-map-tool\n   */\n  private swipeEnabled$$: Subscription;\n\n  /**\n   * Binder of prerender on the same element\n   */\n  private boundPrerender = this.prerender.bind(this);\n\n  /**\n   * Get the list of layers for swipe and activate of deactivate the swipe\n   * @internal\n   */\n  ngAfterViewInit(): void {\n    this.getListOfLayers();\n    this.swipeEnabled$$ = this.map.swipeEnabled$.subscribe((value) => {\n      value ? this.displaySwipe() : this.displaySwipeOff();\n    });\n    this.letZoom();\n  }\n\n  /**\n   * Clear the overlay layer and any interaction added by this component.\n   * @internal\n   */\n  ngOnDestroy(): void {\n    this.swipeEnabled$$.unsubscribe();\n    this.map.swipeEnabled$.unsubscribe();\n    this.displaySwipeOff();\n  }\n\n  /**\n   * Display a swipe-element and render the layers\n   */\n  displaySwipe() {\n    if (this.swipeId) {\n      this.swipeId.style.visibility = 'visible';\n    }\n    this.layers.map((layer) => layer.ol.on('prerender', this.boundPrerender));\n    this.layers.map((layer) => layer.ol.on('postrender', this.postrender));\n    this.map.ol.render();\n  }\n\n  /**\n   * Clear a swipe-element and render the layers on the initial state\n   */\n  displaySwipeOff() {\n    if (this.swipeId) {\n      this.swipeId.style.visibility = 'hidden';\n    }\n    this.layers.map((layer) => layer.ol.un('prerender', this.boundPrerender));\n    this.layers.map((layer) => layer.ol.un('postrender', this.postrender));\n    this.map.ol.render();\n    this.layers = [];\n  }\n\n  /**\n   * Getter of element\n   */\n  get swipeId() {\n    return document.getElementById('igo-layer-swipe');\n  }\n\n  /**\n   * Get the list of layers for swipe\n   */\n  getListOfLayers() {\n    this.map.selectedFeatures$.subscribe((layers) => {\n      this.layers = [];\n      if (layers !== null) {\n        for (const layer of layers) {\n          if (!this.layers.includes(layer)) {\n            this.layers.push(layer);\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Get a position of click or touch\n   */\n  dragDown(event) {\n    this.inDragAction = true;\n    event.preventDefault();\n    if (event.type === 'mousedown') {\n      this.pos3 = event.clientX;\n      this.mouseSwipe();\n      document.onmouseup = this.closeDragMouseElement;\n    } else if (event.type === 'touchstart') {\n      document.getElementById('arrows').style.visibility = 'hidden';\n      this.pos3 = event.touches[0].clientX;\n      this.touchSwipe();\n      document.ontouchend = this.closeDragTouchElement;\n    }\n  }\n\n  /**\n   * Moving a line with a mouse\n   */\n  mouseSwipe() {\n    document.addEventListener('mousemove', (event) => {\n      if (this.inDragAction) {\n        event.preventDefault();\n        this.pos1 = this.pos3 - event.clientX;\n        this.pos3 = event.clientX;\n        this.swipeId.style.left = this.swipeId.offsetLeft - this.pos1 + 'px';\n      }\n      this.map.ol.render();\n    });\n  }\n\n  /**\n   * Moving a line with a touch\n   */\n  touchSwipe() {\n    document.addEventListener('touchmove', (event) => {\n      if (this.inDragAction) {\n        event.preventDefault();\n        document.getElementById('arrows').style.visibility = 'hidden';\n        this.pos1 = this.pos3 - event.changedTouches[0].clientX;\n        this.pos3 = event.changedTouches[0].clientX;\n        this.swipeId.style.left = this.swipeId.offsetLeft - this.pos1 + 'px';\n      }\n      this.map.ol.render();\n    });\n  }\n\n  /**\n   * Deactivate a listener of a mouse-action\n   */\n  closeDragMouseElement() {\n    document.onmouseup = null;\n    document.onmousemove = null;\n    this.inDragAction = false;\n  }\n\n  /**\n   * Deactivate a listener of a touch-action\n   */\n  closeDragTouchElement() {\n    document.ontouchend = null;\n    document.ontouchmove = null;\n    document.getElementById('arrows').style.visibility = 'visible';\n    this.inDragAction = false;\n  }\n\n  /**\n   * Cut the image of a layer by the position of swiped-element\n   */\n  prerender(event) {\n    const ctx = event.context;\n    const mapSize = this.map.ol.getSize();\n    const width = this.swipeId.offsetLeft;\n    const tl = getRenderPixel(event, [width, 0]);\n    const tr = getRenderPixel(event, [0, 0]);\n    const bl = getRenderPixel(event, [width, mapSize[1]]);\n    const br = getRenderPixel(event, [0, mapSize[1]]);\n    ctx.save();\n    ctx.beginPath();\n    ctx.moveTo(tl[0], tl[1]);\n    ctx.lineTo(bl[0], bl[1]);\n    ctx.lineTo(br[0], br[1]);\n    ctx.lineTo(tr[0], tr[1]);\n    ctx.closePath();\n    ctx.clip();\n  }\n\n  /**\n   * Save a current state of the context\n   */\n  postrender(event) {\n    event.context.restore();\n    event.context.save();\n  }\n\n  /**\n   * Zoom on div\n   */\n  private letZoom() {\n    document.getElementById('igo-layer-swipe').addEventListener(\n      'wheel',\n      (event) => {\n        event.deltaY > 0\n          ? this.map.viewController.zoomOut()\n          : this.map.viewController.zoomIn();\n      },\n      true\n    );\n  }\n}\n","<div\n  class=\"igo-swipe-control-container\"\n  id=\"igo-layer-swipe\"\n  (mousedown)=\"dragDown($event)\"\n  (mouseup)=\"closeDragMouseElement()\"\n  (touchstart)=\"dragDown($event)\"\n  (touchend)=\"closeDragTouchElement()\"\n>\n  <div class=\"igo-swipe-control-line\"></div>\n\n  <div class=\"igo-swipe-control-arrows\" id=\"arrows\">\n    <div class=\"igo-arrow-left\"></div>\n    <div class=\"igo-arrow-right\"></div>\n  </div>\n</div>\n","import { AfterViewInit, Component, Input, OnDestroy } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { IgoMap } from '../shared/map';\n\n/**\n * Tool to display the center of the map\n */\n@Component({\n  selector: 'igo-map-center',\n  templateUrl: './map-center.component.html',\n  styleUrls: ['./map-center.component.scss'],\n  standalone: true\n})\nexport class MapCenterComponent implements AfterViewInit, OnDestroy {\n  /**\n   * Get an active map\n   */\n  @Input() map: IgoMap;\n\n  /**\n   * Listener of toggle from advanced-map-tool\n   */\n  private displayCenter$$: Subscription;\n\n  /**\n   * Set a visibility for cursor of the center of the map\n   */\n  ngAfterViewInit() {\n    if (this.map) {\n      this.displayCenter$$ = this.map.mapCenter$.subscribe((value) => {\n        document.getElementById('mapCenter').style.visibility = value\n          ? 'visible'\n          : 'hidden';\n      });\n    }\n    this.letZoom();\n  }\n\n  /**\n   * Destroyer of a component\n   */\n  ngOnDestroy() {\n    if (this.displayCenter$$) {\n      this.displayCenter$$.unsubscribe();\n    }\n  }\n\n  /**\n   * Zoom on div\n   */\n  private letZoom() {\n    document.getElementById('mapCenter').addEventListener(\n      'wheel',\n      (event) => {\n        event.deltaY > 0\n          ? this.map.viewController.zoomOut()\n          : this.map.viewController.zoomIn();\n      },\n      true\n    );\n  }\n}\n","<div class=\"mapCenter\" id=\"mapCenter\">\n  <div class=\"vertical\"></div>\n  <div class=\"horizontal\"></div>\n</div>\n","import { NgIf } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'igo-info-section',\n  templateUrl: './info-section.component.html',\n  styleUrls: ['./info-section.component.scss'],\n  standalone: true,\n  imports: [NgIf]\n})\nexport class InfoSectionComponent {\n  @Input() infoContent = '';\n}\n","<div *ngIf=\"infoContent && infoContent.length\" class=\"infoSection\">\n  <pre>{{ infoContent }}</pre>\n</div>\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { MessageService } from '@igo2/core/message';\nimport { uuid } from '@igo2/utils';\n\nimport olFeature from 'ol/Feature';\nimport * as olextent from 'ol/extent';\nimport * as olformat from 'ol/format';\nimport olFormatEsriJSON from 'ol/format/EsriJSON';\nimport olFormatGML2 from 'ol/format/GML2';\nimport olFormatGML3 from 'ol/format/GML3';\nimport * as olgeom from 'ol/geom';\n\nimport { Observable, of } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { default as striptags } from 'striptags';\n\nimport {\n  CartoDataSource,\n  ImageArcGISRestDataSource,\n  TileArcGISRestDataSource,\n  WMSDataSource,\n  WMSDataSourceOptions\n} from '../../datasource/shared/datasources';\nimport { FEATURE } from '../../feature/shared/feature.enums';\nimport {\n  Feature,\n  FeatureGeometry\n} from '../../feature/shared/feature.interfaces';\nimport { Layer } from '../../layer';\nimport { MapExtent } from '../../map/shared/map.interface';\nimport {\n  QueryFormat,\n  QueryFormatMimeType,\n  QueryHtmlTarget\n} from './query.enums';\nimport {\n  QueryOptions,\n  QueryUrlData,\n  QueryableDataSource,\n  QueryableDataSourceOptions\n} from './query.interfaces';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class QueryService {\n  public queryEnabled = true;\n  public defaultFeatureCount = 20;\n  public featureCount = 20;\n\n  private previousMessageIds = [];\n\n  constructor(\n    private http: HttpClient,\n    private messageService: MessageService\n  ) {}\n\n  query(layers: Layer[], options: QueryOptions): Observable<Feature[]>[] {\n    if (this.previousMessageIds.length) {\n      this.previousMessageIds.forEach((id) => {\n        this.messageService.remove(id);\n      });\n    }\n\n    const queries$ = layers\n      .filter((layer) => layer.displayed === true)\n      .map((layer) => this.queryLayer(layer, options));\n    // the directive accept array in this format [observable, observable...]\n    // if we use multiple 'url' in queryUrl so the result => this form [observable, observable, [observable, observable]]\n    // so we need to flat the array\n    // eslint-disable-next-line prefer-spread\n    const flattenedQueries$ = [].concat.apply([], queries$);\n    return flattenedQueries$;\n  }\n\n  queryLayer(\n    layer: Layer,\n    options: QueryOptions\n  ): Observable<Feature[]> | Observable<Feature[]>[] {\n    const url = this.getQueryUrl(\n      layer.dataSource as QueryableDataSource,\n      options,\n      false,\n      layer.map.viewController.getExtent()\n    );\n    if (!url) {\n      return of([]);\n    }\n\n    const resolution: number = layer.map.viewController.getResolution();\n    const scale: number = layer.map.viewController.getScale();\n\n    if (\n      (layer.dataSource as QueryableDataSource).options.queryFormat ===\n      QueryFormat.HTMLGML2\n    ) {\n      if (typeof url === 'string') {\n        const urlGml = this.getQueryUrl(\n          layer.dataSource as QueryableDataSource,\n          options,\n          true\n        ) as string;\n        return this.http.get(urlGml, { responseType: 'text' }).pipe(\n          mergeMap((gmlRes) => {\n            const mergedGML = this.mergeGML(gmlRes, url, layer);\n            const imposedGeom = mergedGML[0];\n            const imposedProperties = mergedGML[1];\n            return this.http\n              .get(url, { responseType: 'text' })\n              .pipe(\n                map((res) =>\n                  this.extractData(\n                    res,\n                    layer,\n                    options,\n                    url,\n                    imposedGeom,\n                    imposedProperties\n                  )\n                )\n              );\n          })\n        );\n      }\n      const urlGmls = this.getQueryUrl(\n        layer.dataSource as QueryableDataSource,\n        options,\n        true\n      );\n      const observables: Observable<Feature[]>[] = [];\n      for (let i = 0; i < urlGmls.length; i++) {\n        const element = urlGmls[i] as QueryUrlData;\n        if (this.checkScaleAndResolution(resolution, scale, element)) {\n          observables.push(\n            this.requestDataForHTMLGML2(element.url, url[i].url, layer, options)\n          );\n        }\n      }\n      return observables;\n    } else {\n      if (typeof url === 'string') {\n        const request = this.http.get(url, { responseType: 'text' });\n        return request.pipe(\n          map((res) => this.extractData(res, layer, options, url))\n        );\n      }\n      const observables: any = [];\n      // eslint-disable-next-line @typescript-eslint/prefer-for-of\n      for (let i = 0; i < url.length; i++) {\n        const element: QueryUrlData = url[i];\n        if (this.checkScaleAndResolution(resolution, scale, element)) {\n          const request = this.http.get(element.url, { responseType: 'text' });\n          observables.push(\n            request.pipe(\n              map((res) => this.extractData(res, layer, options, element.url))\n            )\n          );\n        }\n      }\n      return observables;\n    }\n  }\n\n  private requestDataForHTMLGML2(\n    urlGml: string,\n    url: string,\n    layer: Layer,\n    options: QueryOptions\n  ): Observable<Feature[]> {\n    return this.http.get(urlGml, { responseType: 'text' }).pipe(\n      mergeMap((gmlRes) => {\n        const mergedGML = this.mergeGML(gmlRes, url, layer);\n        const imposedGeom = mergedGML[0];\n        const imposedProperties = mergedGML[1];\n        return this.http\n          .get(url, { responseType: 'text' })\n          .pipe(\n            map((res) =>\n              this.extractData(\n                res,\n                layer,\n                options,\n                url,\n                imposedGeom,\n                imposedProperties\n              )\n            )\n          );\n      })\n    );\n  }\n\n  private checkScaleAndResolution(\n    resolution: number,\n    scale: number,\n    element: QueryUrlData\n  ): boolean {\n    let checkScale: boolean;\n    let checkResolution: boolean;\n\n    if (\n      !element.minResolution &&\n      !element.maxResolution &&\n      !element.minScale &&\n      !element.maxScale\n    ) {\n      return true;\n    } else {\n      /******************* checking Resolution *******************/\n      if (element.minResolution && element.maxResolution) {\n        // if \"minResolution\" and \"maxResolution\" exists check if resoltion is between\n        if (\n          resolution >= element.minResolution &&\n          resolution <= element.maxResolution\n        ) {\n          checkResolution = true;\n        }\n      } else {\n        // check if \"minResolution\" or \"maxResolution\" exists\n        if (element.minResolution && resolution >= element.minResolution) {\n          checkResolution = true;\n        }\n        if (element.maxResolution && resolution <= element.maxResolution) {\n          checkResolution = true;\n        }\n      }\n\n      /******************* checking Scale *******************/\n      if (element.minScale && element.maxScale) {\n        // if \"minScale\" and \"maxScale\" exists check if scale is between\n        if (scale > element.minScale && scale < element.maxScale) {\n          checkScale = true;\n        }\n      } else {\n        // check if \"minScale\" or \"maxScale\" exists\n        if (element.maxScale && scale <= element.maxScale) {\n          checkScale = true;\n        }\n        if (element.minScale && scale >= element.minScale) {\n          checkScale = true;\n        }\n      }\n\n      /******************* result of checking *******************/\n      if (checkScale === true && checkResolution === true) {\n        return true;\n      } else if (\n        (checkResolution === true && !checkScale) ||\n        (checkScale === true && !checkResolution)\n      ) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n  }\n\n  private mergeGML(\n    gmlRes,\n    url,\n    layer: Layer\n  ): [FeatureGeometry, Record<string, any>] {\n    const parser = new olFormatGML2();\n    let features = parser.readFeatures(gmlRes);\n    // Handle non standard GML output (MapServer)\n    if (features.length === 0) {\n      const wmsParser = new olformat.WMSGetFeatureInfo();\n      features = wmsParser.readFeatures(gmlRes);\n    }\n    const olmline = new olgeom.MultiLineString([]);\n    let pts;\n    const ptsArray = [];\n    let olmpoly = new olgeom.MultiPolygon([]);\n    let firstFeatureType;\n    const nbFeatures = features.length;\n\n    // Check if geometry intersect bbox\n    // for geoserver getfeatureinfo response in data projection, not call projection\n    const searchParams: any = this.getQueryParams(url.toLowerCase());\n    const bboxRaw = searchParams.bbox;\n    const bbox = bboxRaw.split(',');\n    const bboxExtent = olextent.createEmpty();\n    olextent.extend(bboxExtent, bbox);\n    const outBboxExtent = false;\n    let titleContent;\n    let queryTileField;\n    if (layer.options?.source?.options) {\n      const dataSourceOptions = layer.options.source\n        .options as QueryableDataSourceOptions;\n      if (dataSourceOptions.queryTitle) {\n        queryTileField = dataSourceOptions.queryTitle;\n      }\n    }\n    features.map((feature) => {\n      if (queryTileField) {\n        const queryTitleContent = feature.getProperties()[queryTileField];\n        if (queryTitleContent) {\n          titleContent = !titleContent\n            ? queryTitleContent\n            : `${titleContent},${queryTitleContent}`;\n        }\n      }\n      /*  if (!feature.getGeometry().simplify(100).intersectsExtent(bboxExtent)) {\n        outBboxExtent = true;\n        // TODO: Check to project the geometry?\n      }*/\n      const featureGeometryCoordinates = (\n        feature.getGeometry() as any\n      ).getCoordinates();\n      const featureGeometryType = feature.getGeometry().getType();\n\n      if (!firstFeatureType && !outBboxExtent) {\n        firstFeatureType = featureGeometryType;\n      }\n      if (!outBboxExtent) {\n        switch (featureGeometryType) {\n          case 'Point':\n            if (nbFeatures === 1) {\n              pts = new olgeom.Point(featureGeometryCoordinates, 'XY');\n            } else {\n              ptsArray.push(featureGeometryCoordinates);\n            }\n            break;\n          case 'LineString':\n            olmline.appendLineString(\n              new olgeom.LineString(featureGeometryCoordinates, 'XY')\n            );\n            break;\n          case 'Polygon':\n            olmpoly.appendPolygon(\n              new olgeom.Polygon(featureGeometryCoordinates, 'XY')\n            );\n            break;\n          case 'MultiPolygon':\n            olmpoly = new olgeom.MultiPolygon(featureGeometryCoordinates, 'XY');\n            break;\n          default:\n            return;\n        }\n      }\n    });\n\n    let olmpts;\n    if (ptsArray.length === 0 && pts) {\n      olmpts = {\n        type: pts.getType(),\n        coordinates: pts.getCoordinates()\n      };\n    } else {\n      olmpts = {\n        type: 'Polygon',\n        coordinates: [this.convexHull(ptsArray)]\n      };\n    }\n\n    let returnGeometry;\n    switch (firstFeatureType) {\n      case 'LineString':\n        returnGeometry = {\n          type: olmline.getType(),\n          coordinates: olmline.getCoordinates()\n        };\n        break;\n      case 'Point':\n        returnGeometry = olmpts;\n        break;\n      case 'Polygon':\n        returnGeometry = {\n          type: olmpoly.getType(),\n          coordinates: olmpoly.getCoordinates()\n        };\n        break;\n      case 'MultiPolygon':\n        returnGeometry = {\n          type: olmpoly.getType(),\n          coordinates: olmpoly.getCoordinates()\n        };\n        break;\n    }\n    const imposedProperties = {};\n\n    if (queryTileField) {\n      imposedProperties[queryTileField] = titleContent;\n    }\n\n    return [returnGeometry, imposedProperties];\n  }\n\n  cross(a, b, o) {\n    return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]);\n  }\n\n  /**\n   * @param points An array of [X, Y] coordinates\n   * This method is use instead of turf.js convexHull because Turf needs at least 3 point to make a hull.\n   * https://en.wikibooks.org/wiki/Algorithm_Implementation/Geometry/Convex_hull/Monotone_chain#JavaScript\n   */\n  convexHull(points) {\n    points.sort((a, b) => {\n      return a[0] === b[0] ? a[1] - b[1] : a[0] - b[0];\n    });\n\n    const lower = [];\n    for (const point of points) {\n      while (\n        lower.length >= 2 &&\n        this.cross(lower[lower.length - 2], lower[lower.length - 1], point) <= 0\n      ) {\n        lower.pop();\n      }\n      lower.push(point);\n    }\n\n    const upper = [];\n    for (let i = points.length - 1; i >= 0; i--) {\n      while (\n        upper.length >= 2 &&\n        this.cross(\n          upper[upper.length - 2],\n          upper[upper.length - 1],\n          points[i]\n        ) <= 0\n      ) {\n        upper.pop();\n      }\n      upper.push(points[i]);\n    }\n\n    upper.pop();\n    lower.pop();\n    return lower.concat(upper);\n  }\n\n  private extractData(\n    res,\n    layer: Layer,\n    options: QueryOptions,\n    url: string,\n    imposedGeometry?,\n    imposedProperties?: Record<string, any>\n  ): Feature[] {\n    const queryDataSource = layer.dataSource as QueryableDataSource;\n\n    const allowedFieldsAndAlias = this.getAllowedFieldsAndAlias(layer);\n    let features = [];\n    switch (queryDataSource.options.queryFormat) {\n      case QueryFormat.GML3:\n        features = this.extractGML3Data(\n          res,\n          layer.zIndex,\n          allowedFieldsAndAlias\n        );\n        break;\n      case QueryFormat.JSON:\n      case QueryFormat.GEOJSON:\n      case QueryFormat.GEOJSON2:\n        features = this.extractGeoJSONData(\n          res,\n          layer.zIndex,\n          allowedFieldsAndAlias\n        );\n        break;\n      case QueryFormat.ESRIJSON:\n        features = this.extractEsriJSONData(\n          res,\n          layer.zIndex,\n          allowedFieldsAndAlias\n        );\n        break;\n      case QueryFormat.TEXT:\n        break;\n      case QueryFormat.HTML:\n        features = this.extractHtmlData(\n          res,\n          queryDataSource.queryHtmlTarget,\n          url\n        );\n        break;\n      case QueryFormat.HTMLGML2:\n        features = this.extractHtmlData(\n          res,\n          queryDataSource.queryHtmlTarget,\n          url,\n          imposedGeometry,\n          imposedProperties\n        );\n        break;\n      case QueryFormat.GML2:\n      default:\n        features = this.extractGML2Data(res, layer, allowedFieldsAndAlias);\n        break;\n    }\n    if (\n      features.length > 0 &&\n      (features[0].geometry === null || !features[0].geometry)\n    ) {\n      const geomToAdd = this.createGeometryFromUrlClick(url);\n\n      for (const feature of features) {\n        feature.geometry = geomToAdd;\n      }\n    }\n\n    const wmsDatasource = layer.dataSource as WMSDataSource;\n    const featureCount = wmsDatasource.params?.FEATURE_COUNT\n      ? new RegExp('FEATURE_COUNT=' + this.featureCount)\n      : new RegExp('FEATURE_COUNT=' + this.defaultFeatureCount);\n\n    if (\n      featureCount.test(url) &&\n      ((wmsDatasource.params?.FEATURE_COUNT &&\n        this.featureCount > 1 &&\n        features.length === this.featureCount) ||\n        (!wmsDatasource.params?.FEATURE_COUNT &&\n          features.length === this.defaultFeatureCount))\n    ) {\n      const messageObj = this.messageService.info(\n        'igo.geo.query.featureCountMax',\n        undefined,\n        undefined,\n        { value: layer.title }\n      );\n      this.previousMessageIds.push(messageObj.toastId);\n    }\n\n    return features.map((feature: Feature, index: number) => {\n      const mapLabel = feature.properties[queryDataSource.mapLabel];\n\n      let exclude;\n      if (layer.options.sourceOptions?.type === 'wms') {\n        const sourceOptions = layer.options\n          .sourceOptions as WMSDataSourceOptions;\n        exclude = sourceOptions ? sourceOptions.excludeAttribute : undefined;\n      }\n\n      let title = this.getQueryTitle(feature, layer);\n      if (!title && features.length > 1) {\n        title = `${layer.title} (${index + 1})`;\n      } else if (!title) {\n        title = layer.title;\n      }\n\n      const meta = Object.assign({}, feature.meta || {}, {\n        id: uuid(),\n        title,\n        mapTitle: mapLabel,\n        sourceTitle: layer.title,\n        order: 1000 - layer.zIndex,\n        excludeAttribute: exclude\n      });\n\n      return Object.assign(feature, {\n        meta,\n        projection:\n          queryDataSource.options.type === 'carto'\n            ? 'EPSG:4326'\n            : options.projection\n      });\n    });\n  }\n\n  private createGeometryFromUrlClick(url) {\n    const searchParams: any = this.getQueryParams(url.toLowerCase());\n    const bboxRaw = searchParams.bbox;\n    const width = parseInt(searchParams.width, 10);\n    const height = parseInt(searchParams.height, 10);\n    const xPosition = parseInt(searchParams.i || searchParams.x, 10);\n    const yPosition = parseInt(searchParams.j || searchParams.y, 10);\n\n    const bbox = bboxRaw.split(',');\n    let threshold =\n      (Math.abs(parseFloat(bbox[0])) - Math.abs(parseFloat(bbox[2]))) * 0.05;\n\n    // for context in degree (EPSG:4326,4269...)\n    if (Math.abs(parseFloat(bbox[0])) < 180) {\n      threshold = 0.045;\n    }\n    const clickx =\n      parseFloat(bbox[0]) +\n      (Math.abs(parseFloat(bbox[0]) - parseFloat(bbox[2])) * xPosition) /\n        width -\n      threshold;\n    const clicky =\n      parseFloat(bbox[1]) +\n      (Math.abs(parseFloat(bbox[1]) - parseFloat(bbox[3])) * yPosition) /\n        height -\n      threshold;\n    const clickx1 = clickx + threshold * 2;\n    const clicky1 = clicky + threshold * 2;\n\n    const wktPoly =\n      'POLYGON((' +\n      clickx +\n      ' ' +\n      clicky +\n      ', ' +\n      clickx +\n      ' ' +\n      clicky1 +\n      ', ' +\n      clickx1 +\n      ' ' +\n      clicky1 +\n      ', ' +\n      clickx1 +\n      ' ' +\n      clicky +\n      ', ' +\n      clickx +\n      ' ' +\n      clicky +\n      '))';\n\n    const format = new olformat.WKT();\n    const tenPercentWidthGeom = format.readFeature(wktPoly);\n    const f = tenPercentWidthGeom.getGeometry() as any;\n\n    const newGeom = {\n      type: f.getType(),\n      coordinates: f.getCoordinates()\n    };\n\n    return newGeom;\n  }\n\n  private extractGML2Data(res, zIndex, allowedFieldsAndAlias?) {\n    const parser = new olFormatGML2();\n    let features = parser.readFeatures(res);\n    // Handle non standard GML output (MapServer)\n    if (features.length === 0) {\n      const wmsParser = new olformat.WMSGetFeatureInfo();\n      try {\n        features = wmsParser.readFeatures(res);\n      } catch {\n        console.warn(\n          'query.service: Multipolygons are badly managed in mapserver in GML2. Use another format.'\n        );\n      }\n    }\n\n    return features.map((feature) =>\n      this.featureToResult(feature, zIndex, allowedFieldsAndAlias)\n    );\n  }\n\n  private extractGML3Data(res, zIndex, allowedFieldsAndAlias?) {\n    const parser = new olFormatGML3();\n    let features = [];\n    try {\n      features = parser.readFeatures(res);\n    } catch {\n      console.warn('query.service: GML3 is not well supported');\n    }\n    return features.map((feature) =>\n      this.featureToResult(feature, zIndex, allowedFieldsAndAlias)\n    );\n  }\n\n  private extractGeoJSONData(res, zIndex, allowedFieldsAndAlias?) {\n    let features = [];\n    try {\n      features = JSON.parse(res.replace(/(\\r|\\n)/g, ' ')).features;\n    } catch {\n      console.warn('query.service: Unable to parse geojson', '\\n', res);\n    }\n    features.map(\n      (feature) =>\n        (feature.meta = {\n          id: uuid(),\n          order: 1000 - zIndex,\n          alias: allowedFieldsAndAlias\n        })\n    );\n    return features;\n  }\n\n  private extractEsriJSONData(res, zIndex, allowedFieldsAndAlias) {\n    if (res) {\n      try {\n        if (JSON.parse(res).error) {\n          return [];\n        }\n      } catch {\n        // empty catch\n      }\n    }\n    const parser = new olFormatEsriJSON();\n    const features = parser.readFeatures(res);\n\n    return features.map((feature) =>\n      this.featureToResult(feature, zIndex, allowedFieldsAndAlias)\n    );\n  }\n\n  private extractHtmlData(\n    res,\n    htmlTarget: QueryHtmlTarget,\n    url,\n    imposedGeometry?,\n    imposedProperties?: Record<string, any>\n  ) {\n    const searchParams: any = this.getQueryParams(url.toLowerCase());\n    const projection = searchParams.crs || searchParams.srs || 'EPSG:3857';\n    const geomToAdd = this.createGeometryFromUrlClick(url);\n\n    if (\n      htmlTarget !== QueryHtmlTarget.BLANK &&\n      htmlTarget !== QueryHtmlTarget.IFRAME\n    ) {\n      htmlTarget = QueryHtmlTarget.IFRAME;\n    }\n\n    const bodyTagStart = res.toLowerCase().indexOf('<body>');\n    const bodyTagEnd = res.toLowerCase().lastIndexOf('</body>') + 7;\n    // replace \\r \\n  and ' ' with '' to validate if the body is really empty. Clear all the html tags from body\n    const body = striptags(\n      res.slice(bodyTagStart, bodyTagEnd).replace(/(\\r|\\n|\\s)/g, '')\n    );\n    if (body === '' || res === '') {\n      return [];\n    }\n\n    return [\n      {\n        type: FEATURE,\n        projection,\n        properties: Object.assign(\n          { target: htmlTarget, body: res, url },\n          imposedProperties\n        ),\n        geometry: imposedGeometry || geomToAdd\n      }\n    ];\n  }\n\n  private getQueryParams(url) {\n    const queryString = url.split('?');\n    if (!queryString[1]) {\n      return;\n    }\n    const pairs = queryString[1].split('&');\n\n    const result = {};\n    pairs.forEach((pair) => {\n      pair = pair.split('=');\n      result[pair[0]] = decodeURIComponent(pair[1] || '');\n    });\n    return result;\n  }\n\n  public featureToResult(\n    featureOL: olFeature<olgeom.Geometry>,\n    zIndex: number,\n    allowedFieldsAndAlias?\n  ): Feature {\n    const featureGeometry = featureOL.getGeometry() as any;\n    const properties: any = Object.assign({}, featureOL.getProperties());\n    delete properties.geometry;\n    delete properties.GEOMETRIE;\n    delete properties.boundedBy;\n    delete properties.shape;\n    delete properties.SHAPE;\n    delete properties.SHAPE_S;\n    delete properties.SHAPE_L;\n    delete properties.SHAPE_P;\n    delete properties.the_geom;\n    delete properties.geom;\n    delete properties.geom32198;\n\n    let geometry;\n    if (featureGeometry) {\n      geometry = {\n        type: featureGeometry.getType(),\n        coordinates: featureGeometry.getCoordinates()\n      };\n    }\n\n    return {\n      type: FEATURE,\n      projection: undefined,\n      properties,\n      geometry,\n      meta: {\n        id: uuid(),\n        order: 1000 - zIndex,\n        alias: allowedFieldsAndAlias\n      }\n    };\n  }\n\n  private getQueryUrl(\n    datasource: QueryableDataSource,\n    options: QueryOptions,\n    forceGML2 = false,\n    mapExtent?: MapExtent\n  ): string | QueryUrlData[] {\n    let url;\n\n    if (datasource.options.queryUrls) {\n      return this.getCustomQueryUrl(datasource, options, mapExtent);\n    }\n\n    switch (datasource.constructor) {\n      case WMSDataSource: {\n        const wmsDatasource = datasource as WMSDataSource;\n\n        const WMSGetFeatureInfoOptions = {\n          INFO_FORMAT:\n            wmsDatasource.params.INFO_FORMAT ||\n            this.getMimeInfoFormat(datasource.options.queryFormat),\n          QUERY_LAYERS: wmsDatasource.params.LAYERS,\n          FEATURE_COUNT:\n            wmsDatasource.params.FEATURE_COUNT || this.defaultFeatureCount\n        };\n\n        if (wmsDatasource.params.FEATURE_COUNT) {\n          this.featureCount = wmsDatasource.params.FEATURE_COUNT;\n        }\n\n        if (forceGML2) {\n          WMSGetFeatureInfoOptions.INFO_FORMAT = this.getMimeInfoFormat(\n            QueryFormat.GML2\n          );\n        }\n\n        url = wmsDatasource.ol.getFeatureInfoUrl(\n          options.coordinates,\n          options.resolution,\n          options.projection,\n          WMSGetFeatureInfoOptions\n        );\n        // const wmsVersion =\n        //   wmsDatasource.params.VERSION ||\n        //   wmsDatasource.params.version ||\n        //   '1.3.0';\n        // if (wmsVersion !== '1.3.0') {\n        //   url = url.replace('&I=', '&X=');\n        //   url = url.replace('&J=', '&Y=');\n        // }\n        break;\n      }\n      case CartoDataSource: {\n        const cartoDatasource = datasource as CartoDataSource;\n        const baseUrl =\n          'https://' +\n          cartoDatasource.options.account +\n          '.carto.com/api/v2/sql?';\n        const format = 'format=GeoJSON';\n        const sql =\n          '&q=' + cartoDatasource.options.config.layers[0].options.sql;\n        const clause =\n          ' WHERE ST_Intersects(the_geom_webmercator,ST_BUFFER(ST_SetSRID(ST_POINT(';\n        const meters = cartoDatasource.options.queryPrecision\n          ? cartoDatasource.options.queryPrecision\n          : '1000';\n        const coordinates =\n          options.coordinates[0] +\n          ',' +\n          options.coordinates[1] +\n          '),3857),' +\n          meters +\n          '))';\n\n        url = `${baseUrl}${format}${sql}${clause}${coordinates}`;\n        break;\n      }\n      case ImageArcGISRestDataSource:\n      case TileArcGISRestDataSource: {\n        const tileArcGISRestDatasource = datasource as TileArcGISRestDataSource;\n        const deltaX = Math.abs(mapExtent[0] - mapExtent[2]);\n        const deltaY = Math.abs(mapExtent[1] - mapExtent[3]);\n        const maxDelta = deltaX > deltaY ? deltaX : deltaY;\n        const clickBuffer = maxDelta * 0.005;\n        const threshold = tileArcGISRestDatasource.options.queryPrecision\n          ? tileArcGISRestDatasource.options.queryPrecision\n          : clickBuffer;\n        const extent = olextent.buffer(\n          olextent.boundingExtent([options.coordinates]),\n          threshold\n        );\n        const serviceUrl =\n          tileArcGISRestDatasource.options.url +\n          '/' +\n          tileArcGISRestDatasource.options.layer +\n          '/query/';\n        const geometry = encodeURIComponent(\n          '{\"xmin\":' +\n            extent[0] +\n            ',\"ymin\":' +\n            extent[1] +\n            ',\"xmax\":' +\n            extent[2] +\n            ',\"ymax\":' +\n            extent[3] +\n            ',\"spatialReference\":{\"wkid\":102100}}'\n        );\n        const params = [\n          'f=json',\n          `geometry=${geometry}`,\n          'geometryType=esriGeometryEnvelope',\n          'inSR=102100',\n          'spatialRel=esriSpatialRelIntersects',\n          'outFields=*',\n          'returnGeometry=true',\n          'outSR=102100'\n        ];\n        url = `${serviceUrl}?${params.join('&')}`;\n        break;\n      }\n      default:\n        break;\n    }\n\n    return url;\n  }\n\n  private getMimeInfoFormat(queryFormat: string) {\n    let mime = 'application/vnd.ogc.gml';\n    const keyEnum = Object.keys(QueryFormat).find(\n      (key) => QueryFormat[key] === queryFormat\n    );\n    if (keyEnum) {\n      mime = QueryFormatMimeType[keyEnum];\n    }\n\n    return mime;\n  }\n\n  getAllowedFieldsAndAlias(layer: any) {\n    let allowedFieldsAndAlias;\n    if (\n      layer.options?.source?.options?.sourceFields &&\n      layer.options.source.options.sourceFields.length >= 1\n    ) {\n      allowedFieldsAndAlias = {};\n      layer.options.source.options.sourceFields.forEach((sourceField) => {\n        const alias = sourceField.alias ? sourceField.alias : sourceField.name;\n        allowedFieldsAndAlias[sourceField.name] = alias;\n      });\n    }\n    return allowedFieldsAndAlias;\n  }\n\n  getQueryTitle(feature: Feature, layer: Layer): string {\n    let title;\n    if (layer.options?.source?.options) {\n      const dataSourceOptions = layer.options.source\n        .options as QueryableDataSourceOptions;\n      if (dataSourceOptions.queryTitle) {\n        title = this.getLabelMatch(feature, dataSourceOptions.queryTitle);\n      }\n    }\n\n    return title;\n  }\n\n  getLabelMatch(feature: Feature, labelMatch): string {\n    let label = labelMatch;\n    const labelToGet = Array.from(labelMatch.matchAll(/\\$\\{([^\\{\\}]+)\\}/g));\n\n    labelToGet.forEach((v) => {\n      label = label.replace(v[0], feature.properties[v[1]]);\n    });\n\n    // Nothing done? check feature's attribute\n    if (labelToGet.length === 0 && label === labelMatch) {\n      label = feature.properties[labelMatch] || labelMatch;\n    }\n\n    return label;\n  }\n\n  /**\n   * @param datasource QueryableDataSource\n   * @param options QueryOptions\n   * @mapExtent extent of the map when click event\n   *\n   */\n\n  getCustomQueryUrl(\n    datasource: QueryableDataSource,\n    options: QueryOptions,\n    mapExtent?: MapExtent\n  ): QueryUrlData[] {\n    const extent = olextent.getForViewAndSize(\n      options.coordinates,\n      options.resolution,\n      0,\n      [101, 101]\n    );\n\n    return datasource.options.queryUrls.map((item) => {\n      const data: QueryUrlData = {\n        url: item.url\n          .replace(/\\{bbox\\}/g, extent.join(','))\n          .replace(/\\{x\\}/g, options.coordinates[0].toString())\n          .replace(/\\{y\\}/g, options.coordinates[1].toString())\n          .replace(/\\{resolution\\}/g, options.resolution.toString())\n          .replace(/\\{srid\\}/g, options.projection.replace('EPSG:', ''))\n      };\n\n      // if the queryFormat changed to \"QueryFormat.HTMLGML2\": mapExtent will be undefined\n      // we need to check \"mapExtent\" befor replace variables in the url\n      if (mapExtent) {\n        data.url\n          .replace(/\\{xmin\\}/g, mapExtent[0].toString())\n          .replace(/\\{ymin\\}/g, mapExtent[1].toString())\n          .replace(/\\{xmax\\}/g, mapExtent[2].toString())\n          .replace(/\\{ymax\\}/g, mapExtent[3].toString());\n      }\n\n      if (item.maxResolution) {\n        data.maxResolution = item.maxResolution;\n      }\n\n      if (item.minResolution) {\n        data.minResolution = item.minResolution;\n      }\n\n      if (item.minScale) {\n        data.minScale = item.minScale;\n      }\n\n      if (item.maxScale) {\n        data.maxScale = item.maxScale;\n      }\n\n      return data;\n    });\n  }\n}\n","import { Workspace } from '@igo2/common/workspace';\n\nimport { SearchSource } from './sources/source';\nimport { SearchSourceSettings } from './sources/source.interfaces';\n\n/**\n * Service where all available search sources are registered.\n */\nexport class SearchSourceService {\n  constructor(private sources: SearchSource[]) {}\n\n  /**\n   * Return available search sources\n   * @returns Search sources\n   */\n  getSources(): SearchSource[] {\n    return this.sources;\n  }\n\n  /**\n   * Return enabled search sources\n   * @returns Search sources\n   */\n  getEnabledSources(): SearchSource[] {\n    return this.getSources().filter(\n      (source: SearchSource) => source.enabled === true\n    );\n  }\n\n  /**\n   * Enable search sources of given type\n   * @param type Search type\n   * @todo It would be better to track the enabled search sources\n   *  without updating their 'enabled' property.\n   */\n  enableSourcesByType(type: string) {\n    this.getSources().forEach((source: SearchSource) => {\n      if ((source.constructor as typeof SearchSource).type === type) {\n        source.enabled = true;\n      } else {\n        source.enabled = false;\n      }\n    });\n  }\n\n  /**\n   * Set Param from the selected settings\n   * @param source search-source\n   * @param setting settings\n   */\n  setParamFromSetting(source: SearchSource, setting: SearchSourceSettings) {\n    source.setParamFromSetting(setting);\n  }\n\n  /**\n   * Set Param from the selected settings\n   * @param source search-source\n   * @param setting settings\n   */\n  setWorkspaces(source: SearchSource, workspaces: Workspace[]) {\n    source.setWorkspaces(workspaces);\n  }\n}\n","import { FEATURE } from '../../feature/shared/feature.enums';\nimport { Feature } from '../../feature/shared/feature.interfaces';\nimport { SearchResult } from './search.interfaces';\nimport { SearchSource } from './sources/source';\n\n/**\n * Function that checks whether a search source implements TextSearch\n * @param source Search source\n * @returns True if the search source implements TextSearch\n */\nexport function sourceCanSearch(source: SearchSource): boolean {\n  return (source as any).search !== undefined;\n}\n\n/**\n * Function that checks whether a search source implements ReverseSearch\n * @param source Search source\n * @returns True if the search source implements ReverseSearch\n */\nexport function sourceCanReverseSearch(source: SearchSource): boolean {\n  return (source as any).reverseSearch !== undefined;\n}\n\n/**\n * Function that checks whether a search source implements ReverseSearch AND is shown in the pointer summary\n * @param source Search source\n * @returns True if the search source implements ReverseSearch AND is shown in the pointer summary\n */\nexport function sourceCanReverseSearchAsSummary(source: SearchSource): boolean {\n  return (\n    (source as any).reverseSearch !== undefined &&\n    source.showInPointerSummary === true\n  );\n}\n\n/**\n * Return a search result out of an Feature. This is used to adapt\n * the IGO query module to the new Feature/SearchResult interfaces\n * @param feature feature\n * @param source Search source\n * @returns SearchResult\n */\nexport function featureToSearchResult(\n  feature: Feature,\n  source: SearchSource\n): SearchResult<Feature> {\n  if (feature.properties) {\n    delete feature.properties.geometry;\n    delete feature.properties.GEOMETRIE;\n    delete feature.properties.boundedBy;\n    delete feature.properties.shape;\n    delete feature.properties.SHAPE;\n    delete feature.properties.SHAPE_S;\n    delete feature.properties.SHAPE_L;\n    delete feature.properties.SHAPE_P;\n    delete feature.properties.the_geom;\n    delete feature.properties.geom;\n    delete feature.properties.geom32198;\n  }\n  feature.sourceId = source.getId();\n  return {\n    source,\n    data: feature,\n    meta: {\n      dataType: FEATURE,\n      id: feature.meta.id as string,\n      title: feature.meta.title,\n      icon: feature.meta.icon || 'location_on'\n    }\n  };\n}\n\nexport function findDiff(str1: string, str2: string) {\n  let diff = '';\n  str2.split('').forEach((val, i) => {\n    if (val !== str1.charAt(i)) {\n      diff += val;\n    }\n  });\n  return diff;\n}\n\n/**\n * Return a score calculation based on \"from\" term with the \"to\" term,\n * where the perfect match is 100 and a total difference is 0 or under.\n * @param from string\n * @param to string\n * @param caseSensitive boolean\n * @returns number\n */\nexport function computeTermSimilarity(from, to, caseSensitive = false): number {\n  if (!from || !to) {\n    return 0;\n  }\n  const termFrom = caseSensitive ? from : from.toString().toLowerCase();\n  const termTo = caseSensitive ? to : to.toString().toLowerCase();\n  const fromToDiff = findDiff(termFrom, termTo);\n  const toFromDiff = findDiff(termTo, termFrom);\n  const totalDiff = fromToDiff + toFromDiff;\n\n  let delta = 0;\n  if (totalDiff.length) {\n    delta = (totalDiff.length / termFrom.length) * 100;\n  }\n\n  return 100 - Math.floor(delta);\n}\n","import {\n  Inject,\n  Injectable,\n  Optional,\n  WritableSignal,\n  effect,\n  signal\n} from '@angular/core';\n\nimport { AnalyticsService } from '@igo2/core/analytics';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { MapService } from '../../map/shared/map.service';\nimport { stringToLonLat } from '../../map/shared/map.utils';\nimport { SearchSourceService } from './search-source.service';\nimport { Research, ReverseSearch, TextSearch } from './search.interfaces';\nimport {\n  sourceCanReverseSearch,\n  sourceCanReverseSearchAsSummary,\n  sourceCanSearch\n} from './search.utils';\nimport { SearchSource } from './sources/source';\nimport {\n  ReverseSearchOptions,\n  TextSearchOptions\n} from './sources/source.interfaces';\n\n/**\n * This service perform researches in all the search sources enabled.\n * It returns Research objects who's 'request' property needs to be\n * subscribed to in order to trigger the research. This services has\n * keeps internal state of the researches it performed\n * and the results they yielded.\n */\n@Injectable()\nexport class SearchService {\n  searchTerm: WritableSignal<string> = signal(null);\n\n  constructor(\n    private searchSourceService: SearchSourceService,\n    private mapService: MapService,\n    private storageService: StorageService,\n    private analyticsService: AnalyticsService,\n    @Inject('searchAnalytics')\n    @Optional()\n    analytics: boolean\n  ) {\n    if (analytics) {\n      this.handleAnalytics();\n    }\n  }\n\n  private handleAnalytics(): void {\n    effect(() => {\n      const term = this.searchTerm();\n      if (term != null) {\n        this.analyticsService.trackSearch(term, null);\n      }\n    });\n  }\n\n  /**\n   * Perform a research by text\n   * @param term Any text\n   * @returns Researches\n   */\n  search(term: string, options: TextSearchOptions = {}): Research[] {\n    if (!this.termIsValid(term)) {\n      return [];\n    }\n\n    this.searchTerm.set(term);\n\n    const proj = this.mapService.getMap()?.projection || 'EPSG:3857';\n    const response = stringToLonLat(term, proj, {\n      forceNA: options.forceNA\n    });\n    if (response.lonLat) {\n      return this.reverseSearch(response.lonLat, {\n        distance: response.radius,\n        conf: response.conf\n      });\n    } else if (response.message) {\n      console.log(response.message);\n    }\n\n    options.extent = this.mapService\n      .getMap()\n      ?.viewController.getExtent('EPSG:4326');\n\n    let sources;\n\n    if (options.getEnabledOnly || options.getEnabledOnly === undefined) {\n      sources = this.searchSourceService.getEnabledSources();\n    } else {\n      sources = this.searchSourceService.getSources();\n    }\n\n    if (options.sourceId) {\n      sources = sources.filter((source) => source.getId() === options.sourceId);\n    } else if (options.searchType) {\n      sources = sources.filter(\n        (source) => source.getType() === options.searchType\n      );\n    }\n\n    sources = sources.filter(sourceCanSearch);\n    return this.searchSources(sources, term, options);\n  }\n\n  /**\n   * Perform a research by lon/lat\n   * @param lonLat Any lon/lat coordinates\n   * @returns Researches\n   */\n  reverseSearch(\n    lonLat: [number, number],\n    options?: ReverseSearchOptions,\n    asPointerSummary = false\n  ) {\n    const reverseSourceFonction = asPointerSummary\n      ? sourceCanReverseSearchAsSummary\n      : sourceCanReverseSearch;\n    const sources = this.searchSourceService\n      .getEnabledSources()\n      .filter(reverseSourceFonction);\n    const reverseSearchCoordsFormat =\n      (this.storageService.get(\n        'reverseSearchCoordsFormatEnabled'\n      ) as boolean) || false;\n\n    return this.reverseSearchSources(\n      sources,\n      lonLat,\n      options || {},\n      reverseSearchCoordsFormat\n    );\n  }\n\n  /**\n   * Create a text research out of all given search sources\n   * @param sources Search sources that implement TextSearch\n   * @param term Search term\n   * @returns Observable of Researches\n   */\n  private searchSources(\n    sources: SearchSource[],\n    term: string,\n    options: TextSearchOptions\n  ): Research[] {\n    return sources.map((source: SearchSource) => {\n      return {\n        request: (source as any as TextSearch).search(term, options),\n        reverse: false,\n        source\n      };\n    });\n  }\n\n  /**\n   * Create a reverse research out of all given search sources\n   * @param sources Search sources that implement ReverseSearch\n   * @param lonLat Any lon/lat coordinates\n   * @returns Observable of Researches\n   */\n  private reverseSearchSources(\n    sources: SearchSource[],\n    lonLat: [number, number],\n    options: ReverseSearchOptions,\n    reverseSearchCoordsFormat: boolean\n  ): Research[] {\n    return sources.map((source: SearchSource) => {\n      return {\n        request: (source as any as ReverseSearch).reverseSearch(\n          lonLat,\n          options,\n          reverseSearchCoordsFormat\n        ),\n        reverse: true,\n        source\n      };\n    });\n  }\n\n  /**\n   * Validate that a search term is valid\n   * @param term Search term\n   * @returns True if the search term is valid\n   */\n  private termIsValid(term: string): boolean {\n    return typeof term === 'string' && term !== '';\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit\n} from '@angular/core';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\nimport { EntityStoreWatcher } from '@igo2/common/entity';\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { ChangeUtils, ObjectUtils } from '@igo2/utils';\n\nimport Collection from 'ol/Collection';\nimport { Coordinate } from 'ol/coordinate';\nimport * as olCondition from 'ol/events/condition';\nimport * as olInteraction from 'ol/interaction';\nimport * as olProj from 'ol/proj';\n\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\n\nimport { Feature } from '../feature/shared/feature.interfaces';\nimport { FeatureStoreLoadingStrategy } from '../feature/shared/strategies/loading';\nimport { roundCoordTo, roundCoordToString, stringToLonLat } from '../map';\nimport { QueryService } from '../query/shared/query.service';\nimport { SearchResult } from '../search/shared/search.interfaces';\nimport { SearchService } from '../search/shared/search.service';\nimport { DirectionsButtonsComponent } from './directions-buttons/directions-buttons.component';\nimport { DirectionsInputsComponent } from './directions-inputs/directions-inputs.component';\nimport { DirectionsResultsComponent } from './directions-results/directions-results.component';\nimport { BaseDirectionsSourceOptionsProfile } from './directions-sources';\nimport { DirectionsSourceService } from './shared/directions-source.service';\nimport { DirectionsType, ProposalType } from './shared/directions.enum';\nimport {\n  DirectionOptions,\n  FeatureWithDirections,\n  FeatureWithStopProperties,\n  Stop\n} from './shared/directions.interface';\nimport { DirectionsService } from './shared/directions.service';\nimport {\n  addRouteToRoutesFeatureStore,\n  addStopToStopsFeatureStore,\n  addStopToStore,\n  initRoutesFeatureStore,\n  initStepsFeatureStore,\n  initStopsFeatureStore,\n  updateStoreSorting\n} from './shared/directions.utils';\nimport {\n  RoutesFeatureStore,\n  StepsFeatureStore,\n  StopsFeatureStore,\n  StopsStore\n} from './shared/store';\n\n@Component({\n  selector: 'igo-directions',\n  templateUrl: './directions.component.html',\n  styleUrls: ['./directions.component.scss'],\n  standalone: true,\n  imports: [\n    CommonModule,\n    MatSlideToggleModule,\n    DirectionsButtonsComponent,\n    DirectionsInputsComponent,\n    DirectionsResultsComponent,\n    IgoLanguageModule\n  ]\n})\nexport class DirectionsComponent implements OnInit, OnDestroy {\n  private watcher: EntityStoreWatcher<Stop>;\n\n  public projection = 'EPSG:4326';\n  public hasOsrmPrivateAccess = false;\n  public twoSourcesAvailable = false;\n\n  private zoomOnActiveRoute$$: Subscription;\n  private storeEmpty$$: Subscription;\n  private storeChange$$: Subscription;\n  private routesQueries$$: Subscription[] = [];\n\n  private selectStopInteraction: olInteraction.Select;\n  private translateStop: olInteraction.Translate;\n  private selectedRoute: olInteraction.Select;\n  private focusOnStop = false;\n  private isTranslating = false;\n\n  public previousStops: Stop[] = [];\n\n  private searchs$$: Subscription[] = [];\n  private authenticated$$: Subscription;\n\n  @Input() contextUri: string;\n  @Input({ required: true }) stopsStore: StopsStore;\n  @Input({ required: true }) stopsFeatureStore: StopsFeatureStore;\n  @Input({ required: true }) routesFeatureStore: RoutesFeatureStore;\n  @Input({ required: true }) stepsFeatureStore: StepsFeatureStore;\n  @Input() debounce = 200;\n  @Input() length = 2;\n  @Input() coordRoundedDecimals = 6;\n  @Input({ required: true }) zoomOnActiveRoute$ = new Subject<void>();\n  @Input({ required: true }) authenticated$: BehaviorSubject<boolean>;\n\n  /**\n   * Wheter one of the direction control is active\n   * @internal\n   */\n  get directionControlIsActive(): boolean {\n    return !this.queryService.queryEnabled;\n  }\n\n  get interactions(): olInteraction.Interaction[] {\n    return [this.selectStopInteraction, this.translateStop, this.selectedRoute];\n  }\n\n  get enabledProfileHasAuthorization() {\n    return this.directionsSourceService.sources[0].getEnabledProfile()\n      .authorization;\n  }\n\n  constructor(\n    private cdRef: ChangeDetectorRef,\n    private http: HttpClient,\n    private languageService: LanguageService,\n    private directionsService: DirectionsService,\n    private directionsSourceService: DirectionsSourceService,\n    private searchService: SearchService,\n    private queryService: QueryService,\n    private messageService: MessageService\n  ) {}\n\n  ngOnInit(): void {\n    this.authenticated$$ = this.authenticated$.subscribe(\n      (authenticated: boolean) => {\n        if (authenticated) {\n          const profileWithAuth: BaseDirectionsSourceOptionsProfile =\n            this.directionsSourceService.sources[0].getProfileWithAuthorization();\n          if (profileWithAuth) {\n            this.http\n              .get(profileWithAuth.authorization.url)\n              .subscribe((user) => {\n                this.hasOsrmPrivateAccess =\n                  user[profileWithAuth.authorization.property];\n              });\n          }\n        }\n      }\n    );\n    this.twoSourcesAvailable =\n      this.directionsSourceService.sources[0].profiles.length === 2\n        ? true\n        : false;\n    this.queryService.queryEnabled = false;\n    this.initEntityStores();\n    setTimeout(() => {\n      initStopsFeatureStore(this.stopsFeatureStore, this.languageService);\n      initRoutesFeatureStore(this.routesFeatureStore, this.languageService);\n      initStepsFeatureStore(this.stepsFeatureStore);\n      this.initOlInteraction();\n    }, 1);\n  }\n\n  ngOnDestroy(): void {\n    this.queryService.queryEnabled = true;\n    this.storeEmpty$$.unsubscribe();\n    this.storeChange$$.unsubscribe();\n    this.routesQueries$$.map((u) => u.unsubscribe());\n    this.zoomOnActiveRoute$$.unsubscribe();\n    this.authenticated$$.unsubscribe();\n    this.freezeStores();\n\n    if (this.stopsFeatureStore.empty) {\n      this.stopsFeatureStore.map.layerController.remove(\n        this.stopsFeatureStore.layer\n      );\n    }\n    if (this.routesFeatureStore.empty) {\n      this.routesFeatureStore.map.layerController.remove(\n        this.routesFeatureStore.layer\n      );\n    }\n  }\n\n  private freezeStores() {\n    this.interactions.map((interaction) =>\n      this.routesFeatureStore.layer.map.ol.removeInteraction(interaction)\n    );\n    this.stopsFeatureStore.deactivateStrategyOfType(\n      FeatureStoreLoadingStrategy\n    );\n    this.routesFeatureStore.deactivateStrategyOfType(\n      FeatureStoreLoadingStrategy\n    );\n    this.stepsFeatureStore.deactivateStrategyOfType(\n      FeatureStoreLoadingStrategy\n    );\n  }\n\n  private initEntityStores() {\n    this.watcher = new EntityStoreWatcher(this.stopsStore, this.cdRef);\n    this.monitorEmptyEntityStore();\n    this.monitorEntityStoreChange();\n    this.monitorActiveRouteZoom();\n  }\n\n  private monitorActiveRouteZoom() {\n    this.zoomOnActiveRoute$$ = this.zoomOnActiveRoute$.subscribe(() => {\n      if (this.routesFeatureStore.count >= 1) {\n        const activeRoute: FeatureWithDirections = this.routesFeatureStore\n          .all()\n          .find((route) => route.properties.active);\n\n        if (activeRoute) {\n          const stopsCoordinates: Coordinate[] = this.stopsStore\n            .all()\n            .map((stop) =>\n              olProj.transform(stop.coordinates, 'EPSG:4326', 'EPSG:3857')\n            );\n          const routeCoordinates: Coordinate[] =\n            activeRoute.geometry.coordinates;\n          const coordinates: Coordinate[] = [\n            ...stopsCoordinates,\n            ...routeCoordinates\n          ];\n          const routeExtent = coordinates.reduce(\n            ([x_min, y_min, x_max, y_max], [x, y]) => [\n              Math.min(x_min, x),\n              Math.min(y_min, y),\n              Math.max(x_max, x),\n              Math.max(y_max, y)\n            ],\n            [Infinity, Infinity, -Infinity, -Infinity]\n          );\n          this.routesFeatureStore.layer.map.viewController.zoomToExtent(\n            routeExtent as [number, number, number, number]\n          );\n        }\n      }\n    });\n  }\n\n  private initOlInteraction() {\n    this.selectStopInteraction = new olInteraction.Select({\n      layers: [this.stopsFeatureStore.layer.ol],\n      hitTolerance: 7,\n      condition: (event) => {\n        return event.type === 'pointermove' && !event.dragging;\n      }\n    });\n\n    this.translateStop = new olInteraction.Translate({\n      features: this.selectStopInteraction.getFeatures()\n    });\n    this.translateStop.on('translating', (evt) => {\n      this.isTranslating = true;\n      this.executeStopTranslation(evt.features);\n    });\n    this.translateStop.on('translateend', (evt) => {\n      this.isTranslating = false;\n      this.executeStopTranslation(evt.features);\n    });\n\n    this.selectedRoute = new olInteraction.Select({\n      layers: [this.routesFeatureStore.layer.ol],\n      condition: olCondition.click,\n      hitTolerance: 7,\n      filter: (feature) => {\n        return (\n          feature.get('type') === DirectionsType.Route &&\n          feature.get('active') &&\n          !this.isTranslating\n        );\n      }\n    });\n    this.selectedRoute.on('select', (evt) => {\n      if (this.focusOnStop === false) {\n        const selectCoordinates: Coordinate = olProj.transform(\n          (evt as any).mapBrowserEvent.coordinate,\n          this.routesFeatureStore.layer.map.projection,\n          this.projection\n        );\n        const addedStop: Stop = addStopToStore(this.stopsStore);\n        addedStop.text = roundCoordToString(\n          selectCoordinates,\n          this.coordRoundedDecimals\n        ).join(', ');\n        addedStop.coordinates = [selectCoordinates[0], selectCoordinates[1]];\n      }\n    });\n\n    this.interactions.map((interaction) =>\n      this.routesFeatureStore.layer.map.ol.addInteraction(interaction)\n    );\n  }\n\n  onStopInputHasFocusChange(stopInputHasFocus: boolean) {\n    stopInputHasFocus\n      ? this.routesFeatureStore.layer.map.ol.removeInteraction(\n          this.selectedRoute\n        )\n      : this.routesFeatureStore.layer.map.ol.addInteraction(this.selectedRoute);\n  }\n\n  private executeStopTranslation(features: Collection<any>) {\n    if (features.getLength() === 0) {\n      return;\n    }\n    const firstFeature = features.getArray()[0];\n    const translatedStopId = firstFeature.getId();\n\n    const translationCoordinates = olProj.transform(\n      firstFeature.getGeometry().getCoordinates(),\n      this.stopsFeatureStore.layer.map.projection,\n      this.projection\n    );\n    const translatedStop = this.stopsStore.get(translatedStopId);\n    const roundedCoord = roundCoordTo(\n      translationCoordinates,\n      this.coordRoundedDecimals\n    );\n    translatedStop.coordinates = roundedCoord;\n    translatedStop.text = roundCoordToString(\n      translationCoordinates,\n      this.coordRoundedDecimals\n    ).join(', ');\n    this.stopsStore.update(translatedStop);\n  }\n\n  private monitorEmptyEntityStore() {\n    // Watch if the store is empty to reset it\n    this.storeEmpty$$ = this.stopsStore.count$\n      .pipe(distinctUntilChanged())\n      .subscribe((count) => {\n        if (count < 2) {\n          addStopToStore(this.stopsStore);\n          if (this.stopsStore.count === 2) {\n            this.stopsStore.storeInitialized$.next(true);\n            return;\n          }\n          this.stopsStore.storeInitialized$.next(false);\n        }\n        this.routesQueries$$.map((u) => u.unsubscribe());\n      });\n  }\n\n  private monitorEntityStoreChange() {\n    this.storeChange$$ = this.stopsStore.entities$\n      .pipe(debounceTime(this.debounce))\n      .subscribe((stops) => {\n        this.handleStopDiff(stops);\n        updateStoreSorting(this.stopsStore);\n        this.handleStopsFeature();\n        this.getRoutes(this.isTranslating);\n      });\n  }\n\n  cancelSearch() {\n    this.searchs$$.map((s) => s.unsubscribe());\n  }\n\n  private handleStopDiff(stops: Stop[]) {\n    const simplifiedStops = stops.map((stop) => {\n      return ObjectUtils.removeUndefined({\n        ...{ id: stop.id, text: stop.text, coordinates: stop.coordinates }\n      });\n    });\n    const diff = ChangeUtils.findChanges(this.previousStops, simplifiedStops, [\n      'coordinates'\n    ]);\n    const stopIdToProcess = diff.added.concat(diff.modified);\n    if (stopIdToProcess) {\n      stopIdToProcess.map((change) => {\n        const changedStop = change.newValue as Stop;\n        if (changedStop) {\n          const stop: Stop = this.stopsStore.get(changedStop.id);\n          const term = stop.text;\n          if (!term || term.length === 0) {\n            return;\n          }\n          const response = stringToLonLat(\n            term,\n            this.stopsFeatureStore.layer.map.projection\n          );\n          let isCoord = false;\n          if (response.lonLat) {\n            isCoord = true;\n          }\n          const researches = this.searchService.search(term, {\n            searchType: 'Feature'\n          });\n          this.cancelSearch();\n          const requests$ = researches.map((res) =>\n            res.request.pipe(\n              map((results: SearchResult[]) =>\n                results.filter((r) =>\n                  isCoord\n                    ? r.data.geometry.type === 'Point' && r.data.geometry\n                    : r.data.geometry\n                )\n              )\n            )\n          );\n          this.searchs$$ = requests$.map((request) => {\n            return request\n              .pipe(\n                map((results) =>\n                  results.filter((r) =>\n                    isCoord\n                      ? r.data.geometry.type === 'Point' && r.data.geometry\n                      : r.data.geometry\n                  )\n                )\n              )\n              .subscribe((res) => {\n                if (res.length > 0) {\n                  const source = res[0].source;\n                  const meta = res[0].meta;\n                  const results = res.map((r) => r.data);\n                  if (!stop.searchProposals) {\n                    stop.searchProposals = [];\n                  }\n                  stop.searchProposals = stop.searchProposals.filter(\n                    (sp) =>\n                      sp.type ===\n                      (isCoord ? ProposalType.Coord : ProposalType.Text)\n                  );\n                  const storedSource = stop.searchProposals.find(\n                    (sp) => sp.source === source\n                  );\n                  if (storedSource) {\n                    storedSource.results = results;\n                  } else {\n                    stop.searchProposals.push({\n                      type: isCoord ? ProposalType.Coord : ProposalType.Text,\n                      source,\n                      meta,\n                      results\n                    });\n                  }\n                }\n                this.cdRef.detectChanges();\n              });\n          });\n        }\n      });\n    }\n    this.previousStops = simplifiedStops;\n  }\n\n  private handleStopsFeature() {\n    const stops = this.stopsStore.all();\n    const stopsWithCoordinates = stops.filter((stop) => stop.coordinates);\n    stopsWithCoordinates.map((stop) => this.addStopOverlay(stop));\n    this.stopsFeatureStore\n      .all()\n      .map((stopFeature: Feature<FeatureWithStopProperties>) => {\n        if (!this.stopsStore.get(stopFeature.properties.id)) {\n          this.stopsFeatureStore.delete(stopFeature);\n        }\n      });\n    const stopsWithoutCoordinates = stops.filter((stop) => !stop.coordinates);\n    stopsWithoutCoordinates.map((stop) => {\n      const stopFeature = this.stopsFeatureStore.get(stop.id);\n      if (stopFeature) {\n        this.stopsFeatureStore.delete(stopFeature);\n      }\n    });\n  }\n\n  private getRoutes(isOverview = false) {\n    const stopsWithCoordinates = this.stopsStore.view\n      .all()\n      .filter((stop) => stop.coordinates);\n    if (stopsWithCoordinates.length < 2) {\n      this.routesFeatureStore.deleteMany(this.routesFeatureStore.all());\n      return;\n    }\n\n    const roundedCoordinates = stopsWithCoordinates.map((stop) => {\n      const roundedCoord = roundCoordTo(\n        stop.coordinates,\n        this.coordRoundedDecimals\n      );\n      return roundedCoord;\n    });\n    const overviewDirectionsOptions: DirectionOptions = {\n      overview: true,\n      steps: false,\n      alternatives: false,\n      continue_straight: false\n    };\n    this.routesQueries$$.map((u) => u.unsubscribe());\n    const routeResponse = this.directionsService.route(\n      roundedCoordinates,\n      isOverview ? overviewDirectionsOptions : undefined\n    );\n    if (routeResponse) {\n      this.routesQueries$$.push(\n        routeResponse.subscribe((directions) => {\n          this.routesFeatureStore.deleteMany(this.routesFeatureStore.all());\n          directions.map((direction) =>\n            addRouteToRoutesFeatureStore(\n              this.routesFeatureStore,\n              direction,\n              this.projection,\n              direction === directions[0] ? true : false\n            )\n          );\n        })\n      );\n    }\n  }\n\n  public addStopOverlay(stop: Stop) {\n    addStopToStopsFeatureStore(\n      stop,\n      this.stopsFeatureStore,\n      this.projection,\n      this.languageService\n    );\n  }\n\n  onToggleDirectionsControl(isActive: boolean) {\n    this.queryService.queryEnabled = !isActive;\n    const ol = this.routesFeatureStore.layer.map.ol;\n    this.interactions.map((interaction) =>\n      isActive\n        ? ol.addInteraction(interaction)\n        : ol.removeInteraction(interaction)\n    );\n  }\n\n  onTogglePrivateModeControl(isActive: boolean) {\n    this.directionsSourceService.sources[0].profiles.forEach(\n      (profile) => (profile.enabled = false)\n    );\n    if (isActive) {\n      this.directionsSourceService.sources[0].profiles.find(\n        (profile) => profile.authorization\n      ).enabled = true;\n      this.messageService.alert(\n        this.languageService.translate.instant(\n          'igo.geo.directions.forestRoadsWarning.text'\n        ),\n        this.languageService.translate.instant(\n          'igo.geo.directions.forestRoadsWarning.title'\n        )\n      );\n    } else {\n      this.directionsSourceService.sources[0].profiles.find(\n        (profile) => !profile.authorization\n      ).enabled = true;\n    }\n    this.getRoutes();\n  }\n}\n","<div class=\"directions-options\">\n  <mat-slide-toggle\n    [checked]=\"directionControlIsActive\"\n    [labelPosition]=\"'before'\"\n    (change)=\"onToggleDirectionsControl($event.checked)\"\n  >\n    {{ 'igo.geo.directions.toggle.activateControl' | translate }}\n  </mat-slide-toggle>\n  <mat-slide-toggle\n    *ngIf=\"hasOsrmPrivateAccess && twoSourcesAvailable\"\n    [checked]=\"enabledProfileHasAuthorization\"\n    [labelPosition]=\"'before'\"\n    (change)=\"onTogglePrivateModeControl($event.checked)\"\n  >\n    {{ 'igo.geo.directions.toggle.type' | translate }}\n  </mat-slide-toggle>\n</div>\n\n<igo-directions-inputs\n  (stopInputHasFocus)=\"onStopInputHasFocusChange($event)\"\n  [coordRoundedDecimals]=\"coordRoundedDecimals\"\n  [projection]=\"projection\"\n  [stopsFeatureStore]=\"stopsFeatureStore\"\n  [stopsStore]=\"stopsStore\"\n  [debounce]=\"debounce\"\n  [length]=\"length\"\n></igo-directions-inputs>\n\n<igo-directions-buttons\n  *ngIf=\"routesFeatureStore.all().length > 0\"\n  [stepsFeatureStore]=\"stepsFeatureStore\"\n  [contextUri]=\"contextUri\"\n  [zoomOnActiveRoute$]=\"zoomOnActiveRoute$\"\n  [routesFeatureStore]=\"routesFeatureStore\"\n  [stopsStore]=\"stopsStore\"\n></igo-directions-buttons>\n\n<igo-directions-results\n  [stepsFeatureStore]=\"stepsFeatureStore\"\n  [routesFeatureStore]=\"routesFeatureStore\"\n></igo-directions-results>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DirectionsButtonsComponent } from './directions-buttons/directions-buttons.component';\nimport { DirectionsInputsComponent } from './directions-inputs/directions-inputs.component';\nimport { DirectionsResultsComponent } from './directions-results/directions-results.component';\nimport { DirectionsComponent } from './directions.component';\n\n@NgModule({\n  imports: [\n    DirectionsComponent,\n    DirectionsInputsComponent,\n    DirectionsButtonsComponent,\n    DirectionsResultsComponent\n  ],\n  exports: [\n    DirectionsComponent,\n    DirectionsInputsComponent,\n    DirectionsButtonsComponent,\n    DirectionsResultsComponent\n  ]\n})\nexport class IgoDirectionsModule {\n  /**\n   * @deprecated it has no effect\n   */\n  static forRoot(): ModuleWithProviders<IgoDirectionsModule> {\n    return {\n      ngModule: IgoDirectionsModule\n    };\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { TimeFilterableDataSource } from '../../datasource/shared/datasources/wms-datasource';\nimport { AnyLayer, Layer, isLayerGroup } from '../../layer';\nimport { OgcFilterableDataSource } from './ogc-filter.interface';\n\n@Pipe({\n  name: 'filterableDataSource',\n  standalone: true\n})\nexport class FilterableDataSourcePipe implements PipeTransform {\n  transform(value: AnyLayer[], arg: string): Layer[] {\n    let layers: Layer[];\n    if (arg === 'time') {\n      layers = value.filter((layer) => {\n        if (isLayerGroup(layer)) {\n          return false;\n        }\n        const datasource = layer.dataSource as TimeFilterableDataSource;\n        return (\n          this.isTimeFilterable(datasource) &&\n          datasource.options.timeFilter !== undefined &&\n          Object.keys(datasource.options.timeFilter).length\n        );\n      }) as Layer[];\n    }\n    if (arg === 'ogc') {\n      layers = value.filter((layer) => {\n        if (isLayerGroup(layer)) {\n          return false;\n        }\n        const datasource = layer.dataSource as OgcFilterableDataSource;\n        return this.isOgcFilterable(datasource);\n      }) as Layer[];\n    }\n    return layers;\n  }\n\n  private isTimeFilterable(dataSource: TimeFilterableDataSource) {\n    if (dataSource.options.type !== 'wms') {\n      return false;\n    }\n    return dataSource.options.timeFilterable;\n  }\n\n  private isOgcFilterable(dataSource: OgcFilterableDataSource): boolean {\n    let isOgcFilterable = false;\n    if (\n      dataSource.options.ogcFilters &&\n      dataSource.options.ogcFilters.enabled &&\n      dataSource.options.ogcFilters.editable\n    ) {\n      isOgcFilterable = true;\n    }\n    if (\n      dataSource.options.ogcFilters &&\n      dataSource.options.ogcFilters.enabled &&\n      (dataSource.options.ogcFilters.pushButtons ||\n        dataSource.options.ogcFilters.checkboxes ||\n        dataSource.options.ogcFilters.radioButtons ||\n        dataSource.options.ogcFilters.select ||\n        dataSource.options.ogcFilters.autocomplete)\n    ) {\n      isOgcFilterable = true;\n    }\n    return isOgcFilterable;\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { TileArcGISRestDataSource } from '../../datasource/shared/datasources/tilearcgisrest-datasource';\nimport { WMSDataSource } from '../../datasource/shared/datasources/wms-datasource';\n\n@Injectable()\nexport class TimeFilterService {\n  filterByDate(\n    datasource: WMSDataSource | TileArcGISRestDataSource,\n    date: Date | [Date, Date]\n  ) {\n    let time;\n    let newdateform;\n    let newdateformStart;\n    let newdateformEnd;\n\n    if (Array.isArray(date)) {\n      const dates = [];\n      if (date[0]) {\n        newdateformStart = this.reformatDateTime(date[0]);\n        dates.push(date[0]);\n      }\n      if (date[1]) {\n        newdateformEnd = this.reformatDateTime(date[1]);\n        dates.push(date[1]);\n      }\n      if (dates.length === 2 && newdateformStart !== newdateformEnd) {\n        if (datasource instanceof TileArcGISRestDataSource) {\n          time = newdateformStart + ',' + newdateformEnd;\n        } else {\n          time = newdateformStart + '/' + newdateformEnd;\n        }\n      }\n      if (newdateformStart === newdateformEnd) {\n        time = newdateformStart;\n      }\n    } else if (date) {\n      newdateform = this.reformatDateTime(date);\n      time = newdateform;\n    }\n\n    const params = { TIME: time };\n    datasource.ol.updateParams(params);\n    if (datasource instanceof WMSDataSource) {\n      const wmsDataSource = datasource as WMSDataSource;\n      wmsDataSource.setTimeFilter(wmsDataSource.timeFilter, true);\n    }\n  }\n\n  filterByYear(\n    datasource: WMSDataSource | TileArcGISRestDataSource,\n    year: string | [string, string]\n  ) {\n    let time;\n    let newdateformStart;\n    let newdateformEnd;\n\n    if (Array.isArray(year)) {\n      const years = [];\n      if (year[0]) {\n        newdateformStart = year[0];\n        years.push(year[0]);\n      }\n      if (year[1]) {\n        newdateformEnd = year[1];\n        years.push(year[1]);\n      }\n      if (years.length === 2 && newdateformStart !== newdateformEnd) {\n        if (datasource instanceof TileArcGISRestDataSource) {\n          time = newdateformStart + ',' + newdateformEnd;\n        } else {\n          time = newdateformStart + '/' + newdateformEnd;\n        }\n      }\n      if (newdateformStart === newdateformEnd) {\n        time = newdateformStart;\n      }\n    } else {\n      // to reset filter.\n      time = year;\n    }\n\n    const params = { TIME: time };\n    datasource.ol.updateParams(params);\n    if (datasource instanceof WMSDataSource) {\n      const wmsDataSource = datasource as WMSDataSource;\n      wmsDataSource.setTimeFilter(wmsDataSource.timeFilter, true);\n    }\n  }\n\n  private reformatDateTime(value) {\n    const year = value.getFullYear();\n    let month = value.getMonth() + 1;\n    let day = value.getUTCDate();\n    let hour = value.getUTCHours();\n    let minute = value.getUTCMinutes();\n\n    if (Number(month) < 10) {\n      month = '0' + month;\n    }\n\n    if (Number(day) < 10) {\n      day = '0' + day;\n    }\n\n    if (Number(hour) < 10) {\n      hour = '0' + hour;\n    }\n\n    if (Number(minute) < 10) {\n      minute = '0' + minute;\n    }\n\n    return year + '-' + month + '-' + day + 'T' + hour + ':' + minute + ':00Z';\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport olProjection from 'ol/proj/Projection';\n\nimport { WMSDataSource } from '../../datasource/shared/datasources/wms-datasource';\nimport { OgcFilterWriter } from './ogc-filter';\nimport { OgcFilterableDataSource } from './ogc-filter.interface';\n\n@Injectable()\nexport class OGCFilterService {\n  public filterByOgc(wmsDatasource: WMSDataSource, filterString: string) {\n    const appliedFilter = new OgcFilterWriter().formatProcessedOgcFilter(\n      filterString,\n      wmsDatasource.options.params.LAYERS\n    );\n    wmsDatasource.ol.updateParams({ FILTER: appliedFilter });\n  }\n\n  public setOgcWFSFiltersOptions(wfsDatasource: OgcFilterableDataSource) {\n    const options: any = wfsDatasource.options;\n    const ogcFilterWriter = new OgcFilterWriter();\n\n    if (options.ogcFilters.enabled && options.ogcFilters.filters) {\n      options.ogcFilters.filters = ogcFilterWriter.checkIgoFiltersProperties(\n        options.ogcFilters.filters,\n        options.paramsWFS.fieldNameGeometry,\n        new olProjection({ code: options.paramsWFS.srsName }),\n        true\n      );\n      if (!options.ogcFilters.interfaceOgcFilters) {\n        options.ogcFilters.interfaceOgcFilters =\n          ogcFilterWriter.defineInterfaceFilterSequence(\n            options.ogcFilters.filters,\n            options.paramsWFS.fieldNameGeometry\n          );\n      }\n    }\n  }\n\n  public setOgcWMSFiltersOptions(wmsDatasource: OgcFilterableDataSource) {\n    const options: any = wmsDatasource.options;\n    const ogcFilterWriter = new OgcFilterWriter();\n\n    if (options.ogcFilters.enabled && options.ogcFilters.filters) {\n      options.ogcFilters.filters = ogcFilterWriter.checkIgoFiltersProperties(\n        options.ogcFilters.filters,\n        options.fieldNameGeometry,\n        undefined,\n        true\n      );\n      if (!options.ogcFilters.interfaceOgcFilters) {\n        options.ogcFilters.interfaceOgcFilters =\n          ogcFilterWriter.defineInterfaceFilterSequence(\n            // With some wms server, this param must be set to make spatials call.\n            options.ogcFilters.filters,\n            options.fieldNameGeometry\n          );\n      }\n      this.filterByOgc(\n        wmsDatasource as WMSDataSource,\n        ogcFilterWriter.buildFilter(\n          options.ogcFilters.filters,\n          undefined,\n          undefined,\n          undefined,\n          wmsDatasource.options\n        )\n      );\n      options.filtered = true;\n    } else {\n      options.ogcFilters.filters = undefined;\n      options.ogcFilters.interfaceOgcFilters = [];\n      options.filtered = false;\n    }\n  }\n}\n","export enum SpatialFilterQueryType {\n  AdmRegion = 'AdmRegion',\n  Mun = 'Mun',\n  Arrond = 'Arrond',\n  CircFed = 'CircFed',\n  CircProv = 'CircProv',\n  DirReg = 'DirReg',\n  MRC = 'MRC',\n  RegTour = 'RegTour'\n}\n\nexport enum SpatialFilterType {\n  Predefined = 'Predefined',\n  Polygon = 'Polygon',\n  Point = 'Point'\n}\n\nexport enum SpatialFilterItemType {\n  Address = 'Address',\n  Thematics = 'Thematics'\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { Feature } from '../../feature/shared/feature.interfaces';\nimport {\n  SpatialFilterItemType,\n  SpatialFilterQueryType,\n  SpatialFilterType\n} from './spatial-filter.enum';\nimport { SpatialFilterThematic } from './spatial-filter.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SpatialFilterService {\n  public baseUrl = 'https://geoegl.msp.gouv.qc.ca/apis/terrapi/';\n\n  /*\n   * Type association with URL\n   */\n  public urlFilterList = {\n    AdmRegion: 'regadmin',\n    Arrond: 'arrondissements',\n    CircFed: 'circ-fed',\n    CircProv: 'circ-prov',\n    DirReg: 'dir-reg',\n    MRC: 'mrc',\n    Mun: 'municipalites',\n    RegTour: 'tourisme',\n    bornes: 'bornes-sumi',\n    hydro: 'hydro',\n    routes: 'routes'\n  };\n\n  constructor(\n    private http: HttpClient,\n    private languageService: LanguageService,\n    private configService: ConfigService\n  ) {\n    this.baseUrl =\n      this.configService.getConfig('spatialFilter.url') || this.baseUrl;\n  }\n\n  getKeyByValue(object, value) {\n    return Object.keys(object).find((key) => object[key] === value);\n  }\n\n  /*\n   * Loading data for spatial filter list component (NO GEOMETRY)\n   */\n  loadFilterList(type: SpatialFilterQueryType): Observable<Feature[]> {\n    const urlPath = type as string;\n    if (urlPath) {\n      return this.http\n        .get<{\n          features: Feature[];\n        }>(this.baseUrl + this.urlFilterList[urlPath])\n        .pipe(\n          map((featureCollection) =>\n            featureCollection.features.map((f) => {\n              f.meta = {\n                id: f.properties.code\n              };\n              return f;\n            })\n          )\n        );\n    }\n  }\n\n  /*\n   * Loading item list (STRING)\n   */\n  loadThematicsList() {\n    const url = 'types';\n    const items: SpatialFilterThematic[] = [];\n    return this.http.get(this.baseUrl + url).pipe(\n      map((types: string[]) => {\n        types.forEach((type) => {\n          if (type.startsWith('lieux')) {\n            const item: SpatialFilterThematic = {\n              name: undefined,\n              source: type\n            };\n            let substr = type.substring(6, type.length);\n            let name = substr;\n            if (substr.includes('.')) {\n              const index = substr.indexOf('.');\n              name = substr.substring(index + 1, substr.length);\n              substr = substr.substring(0, index);\n            }\n            try {\n              item.name = this.languageService.translate.instant(\n                'igo.geo.terrapi.' + name\n              );\n            } catch {\n              item.name =\n                name.substring(0, 1).toUpperCase() +\n                name.substring(1, name.length - 1);\n            }\n\n            try {\n              item.group = this.languageService.translate.instant(\n                'igo.geo.spatialFilter.group.' + substr\n              );\n            } catch {\n              item.group =\n                substr.substring(0, 1).toUpperCase() +\n                substr.substring(1, name.length - 1);\n            }\n\n            items.push(item);\n          } else {\n            if (this.getKeyByValue(this.urlFilterList, type)) {\n              const item: SpatialFilterThematic = {\n                name: undefined,\n                source: type\n              };\n              const name = this.getKeyByValue(this.urlFilterList, type);\n              try {\n                item.name = this.languageService.translate.instant(\n                  'igo.geo.terrapi.' + name\n                );\n              } catch {\n                item.name =\n                  name.substring(0, 1).toUpperCase() +\n                  name.substring(1, name.length - 1);\n              }\n              item.source = type;\n\n              items.push(item);\n            }\n          }\n        });\n        return items;\n      })\n    );\n  }\n\n  /*\n   * Loading data for spatial filter item component (Address or Thematics) depends on predefined zone or draw zone (feature)\n   */\n  loadFilterItem(\n    feature,\n    itemType: SpatialFilterItemType,\n    type?: SpatialFilterQueryType,\n    thematic?: SpatialFilterThematic,\n    buffer?: number\n  ) {\n    if (type) {\n      // Predefined type\n      const urlType = type as string;\n      const url = this.baseUrl + this.urlFilterList[urlType];\n      let urlItem = '';\n      if (itemType === SpatialFilterItemType.Address) {\n        urlItem = 'adresses';\n        return this.http\n          .get<{ features: Feature[] }>(\n            url + '/' + feature.properties.code + '/' + urlItem,\n            {\n              params: {\n                geometry: 'true',\n                icon: 'true',\n                bufferInput: buffer.toString(),\n                simplified: '100'\n              }\n            }\n          )\n          .pipe(\n            map((featureCollection) =>\n              featureCollection.features.map((f) => {\n                f.meta = {\n                  id: f.properties.code,\n                  title: this.languageService.translate.instant(\n                    'igo.geo.spatialFilter.Address'\n                  ),\n                  icon: (f as any).icon\n                };\n                return f;\n              })\n            )\n          );\n      } else {\n        // If thematics search\n        urlItem = thematic.source;\n        return this.http\n          .get<{ features: Feature[] }>(\n            url + '/' + feature.properties.code + '/' + urlItem,\n            {\n              params: {\n                geometry: 'true',\n                icon: 'true',\n                bufferInput: buffer.toString(),\n                simplified: '100'\n              }\n            }\n          )\n          .pipe(\n            map((featureCollection) =>\n              featureCollection.features.map((f) => {\n                f.meta = {\n                  id: f.properties.code,\n                  title: thematic.name,\n                  icon: (f as any).icon\n                };\n                return f;\n              })\n            )\n          );\n      }\n    } else {\n      // Draw type\n      const url = this.baseUrl + 'locate';\n      if (itemType === SpatialFilterItemType.Address) {\n        const urlItem = '?type=adresses';\n        return this.http\n          .post<{ features: Feature[] }>(url + urlItem, {\n            geometry: 'true',\n            icon: 'true',\n            loc: JSON.stringify(feature),\n            bufferInput: buffer.toString(),\n            simplified: '100'\n          })\n          .pipe(\n            map((featureCollection) =>\n              featureCollection.features.map((f) => {\n                f.meta = {\n                  id: f.properties.code,\n                  title: this.languageService.translate.instant(\n                    'igo.geo.spatialFilter.Address'\n                  ),\n                  icon: (f as any).icon\n                };\n                return f;\n              })\n            )\n          );\n      } else {\n        // If thematics search\n        const urlItem = '?type=' + thematic.source;\n        return this.http\n          .post<{ features: Feature[] }>(url + urlItem, {\n            geometry: 'true',\n            icon: 'true',\n            loc: JSON.stringify(feature),\n            bufferInput: buffer.toString(),\n            simplified: '100'\n          })\n          .pipe(\n            map((featureCollection) =>\n              featureCollection.features.map((f) => {\n                f.meta = {\n                  id: f.properties.code,\n                  title: thematic.name,\n                  icon: (f as any).icon\n                };\n                return f;\n              })\n            )\n          );\n      }\n    }\n  }\n\n  /*\n   * Get one territory by id (WITH GEOMETRY)\n   */\n  loadItemById(\n    feature: Feature,\n    type: SpatialFilterQueryType\n  ): Observable<Feature> {\n    const featureType = this.urlFilterList[type];\n    const featureCode = '/' + feature.properties.code;\n    if (featureType && featureCode) {\n      return this.http\n        .get<Feature>(this.baseUrl + featureType + featureCode, {\n          params: {\n            geometry: 'true'\n          }\n        })\n        .pipe(\n          map((f) => {\n            f.meta = {\n              id: f.properties.code,\n              alias: f.properties.nom,\n              title: f.properties.nom\n            };\n            return f;\n          })\n        );\n    }\n  }\n\n  /*\n   * Get buffer geometry\n   */\n  loadBufferGeometry(\n    feature: Feature,\n    filterType: SpatialFilterType,\n    buffer?: number,\n    type?: SpatialFilterQueryType\n  ): Observable<Feature> {\n    if (filterType === SpatialFilterType.Predefined) {\n      const featureType = this.urlFilterList[type];\n      const featureCode = '/' + feature.properties.code;\n      if (featureType && featureCode) {\n        return this.http\n          .get<Feature>(this.baseUrl + featureType + featureCode, {\n            params: {\n              geometry: '100',\n              bufferOutput: buffer.toString()\n            }\n          })\n          .pipe(\n            map((f) => {\n              f.meta = {\n                id: f.properties.code,\n                alias: f.properties.nom,\n                title: f.properties.nom\n              };\n              return f;\n            })\n          );\n      }\n    } else {\n      return this.http\n        .post<Feature>(this.baseUrl + 'geospatial/buffer?', {\n          buffer,\n          loc: JSON.stringify(feature)\n        })\n        .pipe(\n          map((f) => {\n            return f;\n          })\n        );\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { MessageService } from '@igo2/core/message';\n\nimport * as olproj from 'ol/proj';\nimport olProjection from 'ol/proj/Projection';\n\nimport { DataSourceOptions } from '../../datasource/shared/datasources/datasource.interface';\nimport {\n  OgcFilterWriter,\n  OgcFilterableDataSourceOptions\n} from '../../filter/shared';\nimport { Layer } from '../../layer';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DownloadService {\n  constructor(private messageService: MessageService) {}\n\n  open(layer: Layer) {\n    this.messageService.success(\n      'igo.geo.download.start',\n      'igo.geo.download.title'\n    );\n\n    const DSOptions: DataSourceOptions = layer.dataSource.options;\n    if (Object.keys(DSOptions.download).length > 0) {\n      if (\n        DSOptions.download.dynamicUrl &&\n        DSOptions.download.url === undefined\n      ) {\n        let wfsOptions;\n        let currentProj = new olProjection({ code: layer.map.projection });\n        const paramsWFS = (layer.dataSource.options as any).paramsWFS;\n        if (paramsWFS && Object.keys(paramsWFS).length > 0) {\n          currentProj = paramsWFS.srsName\n            ? new olProjection({ code: paramsWFS.srsName })\n            : currentProj;\n          wfsOptions = (layer.dataSource.options as any).paramsWFS;\n        } else {\n          wfsOptions = (layer.dataSource.options as any).params;\n        }\n\n        const currentExtent = olproj.transformExtent(\n          layer.map.viewController.getExtent(),\n          new olProjection({ code: layer.map.projection }),\n          currentProj\n        );\n        const outputFormatDownload =\n          wfsOptions.outputFormatDownload === undefined\n            ? wfsOptions.outputFormat === undefined\n              ? ''\n              : 'outputformat=' + wfsOptions.outputFormat\n            : 'outputformat=' + wfsOptions.outputFormatDownload;\n\n        const baseurl = DSOptions.download.dynamicUrl\n          .replace(/&?outputformat=[^&]*/gi, '')\n          .replace(/&?filter=[^&]*/gi, '')\n          .replace(/&?bbox=[^&]*/gi, '');\n\n        const ogcFilters = (\n          layer.dataSource.options as OgcFilterableDataSourceOptions\n        ).ogcFilters;\n\n        let filterQueryString;\n        filterQueryString = new OgcFilterWriter().handleOgcFiltersAppliedValue(\n          layer.dataSource.options,\n          ogcFilters.geometryName,\n          currentExtent as [number, number, number, number],\n          currentProj\n        );\n        if (!filterQueryString) {\n          // Prevent getting all the features for empty filter\n          filterQueryString = new OgcFilterWriter().buildFilter(\n            undefined,\n            currentExtent as [number, number, number, number],\n            currentProj,\n            ogcFilters.geometryName\n          );\n        } else {\n          filterQueryString = 'filter=' + encodeURIComponent(filterQueryString);\n        }\n        window.open(\n          `${baseurl}&${filterQueryString}&${outputFormatDownload}`,\n          '_blank'\n        );\n      } else if (DSOptions.download) {\n        window.open(DSOptions.download.url, '_blank');\n      }\n    }\n  }\n}\n","import { NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { Layer } from '../../layer';\nimport { DownloadDataSourceOptions } from '../shared/download.interface';\nimport { DownloadService } from '../shared/download.service';\n\n@Component({\n  selector: 'igo-download-button',\n  templateUrl: './download-button.component.html',\n  styleUrls: ['./download-button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class DownloadButtonComponent {\n  @Input() layer: Layer;\n\n  @Input() color = 'primary';\n\n  constructor(private downloadService: DownloadService) {}\n\n  openDownload() {\n    this.downloadService.open(this.layer);\n  }\n\n  get options(): DownloadDataSourceOptions {\n    if (!this.layer) {\n      return;\n    }\n    return this.layer.dataSource.options;\n  }\n}\n","<button\n  *ngIf=\"\n    options &&\n    options.download &&\n    (options.download['dynamicUrl'] || options.download['url'])\n  \"\n  mat-icon-button\n  tooltip-position=\"below\"\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"'igo.geo.download.action' | translate\"\n  [color]=\"color\"\n  (click)=\"openDownload()\"\n>\n  <mat-icon>download</mat-icon>\n</button>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DownloadButtonComponent } from './download-button/download-button.component';\n\n/**\n * @deprecated import the DownloadButtonComponent directly\n */\n@NgModule({\n  imports: [DownloadButtonComponent],\n  exports: [DownloadButtonComponent]\n})\nexport class IgoDownloadModule {\n  static forRoot(): ModuleWithProviders<IgoDownloadModule> {\n    return {\n      ngModule: IgoDownloadModule\n    };\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport olWKT from 'ol/format/WKT';\nimport * as olproj from 'ol/proj';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WktService {\n  public wktToFeature(wkt, wktProj, featureProj) {\n    return new olWKT().readFeature(wkt, {\n      dataProjection: wktProj,\n      featureProjection: featureProj\n    });\n  }\n  public extentToWkt(epsgTO, extent, extentProj) {\n    const currentExtent = olproj.transformExtent(extent, extentProj, epsgTO);\n    this.roundCoordinateArray(currentExtent, epsgTO, 0);\n    const wktPoly = `POLYGON((\n      ${extent[0]} ${extent[1]},\n      ${extent[0]} ${extent[3]},\n      ${extent[2]} ${extent[3]},\n      ${extent[2]} ${extent[1]},\n      ${extent[0]} ${extent[1]}))`;\n    const wktLine = `LINESTRING(\n      ${extent[0]} ${extent[1]},\n      ${extent[0]} ${extent[3]},\n      ${extent[2]} ${extent[3]},\n      ${extent[2]} ${extent[1]},\n      ${extent[0]} ${extent[1]})`;\n    const wktMultiPoints = `MULTIPOINT(\n        ${extent[0]} ${extent[1]},\n        ${extent[0]} ${extent[3]},\n        ${extent[2]} ${extent[3]},\n        ${extent[2]} ${extent[1]})`;\n    return {\n      wktPoly,\n      wktLine,\n      wktMultiPoints\n    };\n  }\n\n  private roundCoordinateArray(coordinateArray, projection, decimal = 0) {\n    const lproj = olproj.get(projection);\n    const units = lproj.getUnits();\n    const olUnits = ['ft', 'm', 'us-ft'];\n    if (olUnits.indexOf(units) !== -1) {\n      coordinateArray = this.roundArray(coordinateArray, decimal);\n    }\n    return coordinateArray;\n  }\n\n  private roundArray(array, decimal = 0) {\n    let x = 0;\n    while (x < array.length) {\n      array[x] = array[x].toFixed(decimal);\n      x++;\n    }\n    return array;\n  }\n\n  public snrcToWkt(snrc, epsgTO) {\n    snrc = snrc.toLowerCase();\n    let wktPoly;\n    const ew = {\n      1: { from: -56, to: -64 },\n      2: { from: -64, to: -72 },\n      3: { from: -72, to: -80 },\n      4: { from: -80, to: -88 },\n      5: { from: -88, to: -96 },\n      6: { from: -96, to: -104 },\n      7: { from: -104, to: -112 },\n      8: { from: -112, to: -120 },\n      9: { from: -120, to: -128 },\n      10: { from: -128, to: -136 }\n    };\n    const sn = {\n      1: { from: 44, to: 48 },\n      2: { from: 48, to: 52 },\n      3: { from: 52, to: 56 },\n      4: { from: 56, to: 60 },\n      5: { from: 60, to: 64 },\n      6: { from: 64, to: 68 },\n      7: { from: 68, to: 72 },\n      8: { from: 72, to: 76 },\n      9: { from: 76, to: -128 }\n    };\n    const snrc250kIndex = [\n      ['m', 'n', 'o', 'p'],\n      ['l', 'k', 'j', 'i'],\n      ['e', 'f', 'g', 'h'],\n      ['d', 'c', 'b', 'a']\n    ];\n\n    const snrc50kIndex = [\n      ['13', '14', '15', '16'],\n      ['12', '11', '10', '09'],\n      ['05', '06', '07', '08'],\n      ['04', '03', '02', '01']\n    ];\n    const checkSNRC50k = /\\d{2,3}[a-p][0,1][0-9]/gi;\n    const checkSNRC250k = /\\d{2,3}[a-p]/gi;\n    const checkSNRC1m = /\\d{2,3}/gi;\n\n    let snrc1m = false;\n    let snrc250k = false;\n    let snrc50k = false;\n\n    if (checkSNRC50k.test(snrc)) {\n      snrc50k = true;\n    } else {\n      if (checkSNRC250k.test(snrc)) {\n        snrc250k = true;\n      } else {\n        if (checkSNRC1m.test(snrc)) {\n          snrc1m = true;\n        }\n      }\n    }\n\n    if (snrc1m) {\n      snrc += 'a01';\n    } else if (snrc250k) {\n      snrc += '01';\n    }\n    if (/\\d{2,3}[a-p][0,1][0-9]/gi.test(snrc)) {\n      const regex1m = /(?=[a-p])/gi;\n      const ar1m = snrc.split(regex1m);\n      const part1m = ar1m[0];\n      const part250k = ar1m[1][0];\n      const part50k = ar1m[1].split(part250k)[1];\n      let separator = 1;\n      if (part1m.length === 3) {\n        separator = 2;\n      }\n      const partEW = part1m.substring(0, separator);\n      const partSN = part1m.substring(separator);\n      const unit1mEW = 8;\n      const unit1mSN = 4;\n      const unit250kEW = 2;\n      const unit250kSN = 1;\n      const unit50kEW = 0.5;\n      const unit50kSN = 0.25;\n      let index250kEW = 0;\n      let index250kSN = 0;\n      let index50kEW = 0;\n      let index50kSN = 0;\n      snrc250kIndex.forEach((element) => {\n        if (element.indexOf(part250k) !== -1) {\n          index250kSN = snrc250kIndex.indexOf(element);\n          index250kEW = element.indexOf(part250k);\n        }\n      });\n      snrc50kIndex.forEach((element) => {\n        if (element.indexOf(part50k) !== -1) {\n          index50kSN = snrc50kIndex.indexOf(element);\n          index50kEW = element.indexOf(part50k);\n        }\n      });\n\n      let increment250kEW = 0;\n      let increment250kSN = 0;\n      let increment50kEW = 0;\n      let increment50kSN = 0;\n      let unitPerTypeEW = unit1mEW;\n      let unitPerTypeSN = unit1mSN;\n      if (snrc250k) {\n        increment250kEW = index250kEW * unit250kEW;\n        increment250kSN = index250kSN * unit250kSN;\n        increment50kEW = 0;\n        increment50kSN = 0;\n        unitPerTypeEW = unit250kEW;\n        unitPerTypeSN = unit250kSN;\n      } else if (snrc50k) {\n        increment250kEW = index250kEW * unit250kEW;\n        increment250kSN = index250kSN * unit250kSN;\n        increment50kEW = index50kEW * unit50kEW;\n        increment50kSN = index50kSN * unit50kSN;\n        unitPerTypeEW = unit50kEW;\n        unitPerTypeSN = unit50kSN;\n      }\n\n      const coord: { ul?: any; lr?: any; ur?: any; ll?: any } = {\n        ul: [\n          ew[partEW].to + increment250kEW + increment50kEW,\n          sn[partSN].to - increment250kSN - increment50kSN\n        ]\n      };\n\n      coord.lr = [coord.ul[0] + unitPerTypeEW, coord.ul[1] - unitPerTypeSN];\n      coord.ur = [coord.ul[0], coord.ul[1] - unitPerTypeSN];\n      coord.ll = [coord.ul[0] + unitPerTypeEW, coord.ul[1]];\n\n      coord.ul = olproj.transform(\n        [coord.ul[0], coord.ul[1]],\n        'EPSG:4326',\n        epsgTO\n      );\n      coord.lr = olproj.transform(\n        [coord.lr[0], coord.lr[1]],\n        'EPSG:4326',\n        epsgTO\n      );\n      coord.ur = olproj.transform(\n        [coord.ur[0], coord.ur[1]],\n        'EPSG:4326',\n        epsgTO\n      );\n      coord.ll = olproj.transform(\n        [coord.ll[0], coord.ll[1]],\n        'EPSG:4326',\n        epsgTO\n      );\n\n      // Rounded coordinate to shorten url in get\n      coord.ul = this.roundCoordinateArray(coord.ul, epsgTO, 0);\n      coord.lr = this.roundCoordinateArray(coord.lr, epsgTO, 0);\n      coord.ur = this.roundCoordinateArray(coord.ur, epsgTO, 0);\n      coord.ll = this.roundCoordinateArray(coord.ll, epsgTO, 0);\n\n      wktPoly =\n        'POLYGON((' +\n        [\n          coord.ul.join(' '),\n          coord.ur.join(' '),\n          coord.lr.join(' '),\n          coord.ll.join(' '),\n          coord.ul.join(' ')\n        ].join(',') +\n        '))';\n      const wktLine =\n        'LINESTRING(' +\n        [\n          coord.ul.join(' '),\n          coord.ur.join(' '),\n          coord.lr.join(' '),\n          coord.ll.join(' '),\n          coord.ul.join(' ')\n        ].join(',') +\n        ')';\n\n      const wktMultiPoints =\n        'MULTIPOINT(' +\n        [\n          coord.ul.join(' '),\n          coord.ur.join(' '),\n          coord.lr.join(' '),\n          coord.ll.join(' ')\n        ].join(',') +\n        ')';\n      return {\n        wktPoly,\n        wktLine,\n        wktMultiPoints\n      };\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { default as moment } from 'moment';\n\nimport { OgcFilterableDataSource } from './ogc-filter.interface';\n\n@Injectable()\nexport class OGCFilterTimeService {\n  readonly defaultStepMillisecond = 60000;\n\n  step(datasource: OgcFilterableDataSource, currentFilter): string {\n    return datasource.options.stepDate\n      ? datasource.options.stepDate\n      : currentFilter.step;\n  }\n\n  stepMillisecond(dataSource: OgcFilterableDataSource, currentFilter): number {\n    const step = moment\n      .duration(this.step(dataSource, currentFilter))\n      .asMilliseconds();\n    return step === 0 ? this.defaultStepMillisecond : step;\n  }\n\n  stepIsYearDuration(step: string) {\n    const year = moment.duration(step);\n    return (\n      year.years() !== 0 &&\n      year.months() === 0 &&\n      year.weeks() === 0 &&\n      year.days() === 0 &&\n      year.hours() === 0 &&\n      year.minutes() === 0\n    );\n  }\n\n  stepIsMonthDuration(step: string) {\n    const month = moment.duration(step);\n    return (\n      month.months() !== 0 &&\n      month.weeks() === 0 &&\n      month.days() === 0 &&\n      month.hours() === 0 &&\n      month.minutes() === 0\n    );\n  }\n\n  stepIsWeekDuration(step: string) {\n    const week = moment.duration(step);\n    return (\n      week.weeks() !== 0 &&\n      week.days() === 7 &&\n      week.hours() === 0 &&\n      week.minutes() === 0\n    );\n  }\n\n  stepIsDayDuration(step: string) {\n    const day = moment.duration(step);\n    return day.days() !== 0 && day.hours() === 0 && day.minutes() === 0;\n  }\n\n  stepIsHourDuration(step: string) {\n    const hour = moment.duration(step);\n    return hour.hours() !== 0 && hour.minutes() === 0;\n  }\n\n  stepIsMinuteDuration(step: string) {\n    const minute = moment.duration(step);\n    return minute.minutes() !== 0;\n  }\n\n  dateToNumber(date: Date): number {\n    let newDate = new Date();\n    if (date) {\n      newDate = new Date(date);\n    }\n    return newDate.getTime();\n  }\n\n  public addStep(value, stepMillisecond) {\n    return moment(value).add(stepMillisecond, 'milliseconds').toDate();\n  }\n\n  public subtractStep(value, stepMillisecond) {\n    return moment(value).subtract(stepMillisecond, 'milliseconds').toDate();\n  }\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSlider, MatSliderModule } from '@angular/material/slider';\n\nimport { default as moment } from 'moment';\n\nimport { OGCFilterTimeService } from '../shared/ogc-filter-time.service';\n\n@Component({\n  selector: 'igo-ogc-filter-time-slider',\n  templateUrl: './ogc-filter-time-slider.component.html',\n  styleUrls: ['./ogc-filter-time-slider.component.scss'],\n  standalone: true,\n  imports: [MatSliderModule, FormsModule, MatButtonModule, MatIconModule],\n  providers: [OGCFilterTimeService]\n})\nexport class OgcFilterTimeSliderComponent implements OnInit {\n  @Input() currentFilter: any;\n  @Input() begin: any;\n  @Input() max: any;\n  @Input() datasource: any;\n  @Output() changeProperty: EventEmitter<{\n    value: any;\n    pos: number;\n    refreshFilter: boolean;\n  }> = new EventEmitter<any>();\n  @ViewChild(MatSlider) slider: MatSlider;\n\n  interval;\n  sliderValue = 1;\n  calculatedStep = 0;\n  readonly _defaultDisplayFormat: string = 'DD/MM/YYYY HH:mm A';\n  readonly _defaultSliderInterval: number = 2000;\n  public playIcon = 'play_circle';\n  public resetIcon = 'replay';\n\n  get sliderInterval(): number {\n    return this.currentFilter.sliderInterval === undefined\n      ? this._defaultSliderInterval\n      : this.currentFilter.sliderInterval;\n  }\n\n  get displayFormat(): string {\n    if (this.currentFilter.sliderOptions?.displayFormat) {\n      return this.currentFilter.sliderOptions.displayFormat;\n    }\n    if (this.currentFilter.displayFormat) {\n      return this.currentFilter.displayFormat;\n    }\n    return this._defaultDisplayFormat;\n  }\n\n  get beginMillisecond(): number {\n    return this.ogcFilterTimeService.dateToNumber(this.begin);\n  }\n\n  get maxMillisecond(): number {\n    return this.ogcFilterTimeService.dateToNumber(this.max);\n  }\n\n  get stepMillisecond(): number {\n    return this.ogcFilterTimeService.stepMillisecond(\n      this.datasource,\n      this.currentFilter\n    );\n  }\n\n  constructor(public ogcFilterTimeService: OGCFilterTimeService) {\n    this.sliderDisplayWith = this.sliderDisplayWith.bind(this);\n  }\n\n  ngOnInit() {\n    this.calculateStep();\n    this.handleSliderInput({ value: 1 });\n  }\n\n  sliderDisplayWith(value) {\n    let dateTmp = new Date(\n      this.beginMillisecond + (value - 1) * this.stepMillisecond\n    );\n\n    if (\n      this.ogcFilterTimeService.stepIsYearDuration(\n        this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n      )\n    ) {\n      const toAdd = moment\n        .duration(\n          this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n        )\n        .years();\n      dateTmp = moment(this.beginMillisecond)\n        .add((value - 1) * toAdd, 'year')\n        .toDate();\n    } else if (\n      this.ogcFilterTimeService.stepIsMonthDuration(\n        this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n      )\n    ) {\n      const toAdd = moment\n        .duration(\n          this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n        )\n        .months();\n      dateTmp = moment(this.beginMillisecond)\n        .add((value - 1) * toAdd, 'month')\n        .toDate();\n    }\n\n    return moment(dateTmp).format(this.displayFormat);\n  }\n\n  playFilter() {\n    if (this.interval) {\n      this.stopFilter();\n    } else {\n      this.playIcon = 'pause_circle';\n      this.interval = setInterval(\n        () => {\n          if (this.slider.step < this.calculatedStep) {\n            const _increment = '_increment';\n            const _emitInputEvent = '_emitInputEvent';\n            this.slider[_increment](1);\n            this.slider[_emitInputEvent]();\n          } else {\n            this.stopFilter();\n          }\n        },\n        this.sliderInterval,\n        this\n      );\n    }\n  }\n\n  stopFilter() {\n    if (this.interval) {\n      clearInterval(this.interval);\n    }\n    this.interval = undefined;\n    this.playIcon = 'play_circle';\n  }\n\n  resetFilter() {\n    if (this.interval) {\n      clearInterval(this.interval);\n    }\n    this.interval = undefined;\n    this.playIcon = 'play_circle';\n    this.slider.step = 1;\n    const _emitInputEvent = '_emitInputEvent';\n    this.slider[_emitInputEvent]();\n  }\n\n  handleSliderInput(matSliderChange) {\n    if (matSliderChange) {\n      if (\n        this.ogcFilterTimeService.stepIsYearDuration(\n          this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n        )\n      ) {\n        const toAdd = moment\n          .duration(\n            this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n          )\n          .years();\n        const dateBeginTmp = moment(this.beginMillisecond)\n          .add((matSliderChange.value - 1) * toAdd, 'year')\n          .toDate();\n        const dateEndTmp = moment(dateBeginTmp).add(toAdd, 'year').toDate();\n        this.changeProperty.next({\n          value: moment(dateBeginTmp).toDate().toISOString(),\n          pos: 1,\n          refreshFilter: false\n        });\n        this.changeProperty.next({\n          value: moment(dateEndTmp).toDate().toISOString(),\n          pos: 2,\n          refreshFilter: true\n        });\n      } else if (\n        this.ogcFilterTimeService.stepIsMonthDuration(\n          this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n        )\n      ) {\n        const toAdd = moment\n          .duration(\n            this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n          )\n          .months();\n        const dateBeginTmp = moment(this.beginMillisecond)\n          .add((matSliderChange.value - 1) * toAdd, 'month')\n          .toDate();\n        const dateEndTmp = moment(dateBeginTmp).add(toAdd, 'month').toDate();\n        this.changeProperty.next({\n          value: moment(dateBeginTmp).startOf('month').toDate().toISOString(),\n          pos: 1,\n          refreshFilter: false\n        });\n        this.changeProperty.next({\n          value: moment(dateEndTmp).toDate().toISOString(),\n          pos: 2,\n          refreshFilter: true\n        });\n      } else if (\n        this.ogcFilterTimeService.stepIsDayDuration(\n          this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n        ) ||\n        this.ogcFilterTimeService.stepIsHourDuration(\n          this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n        ) ||\n        this.ogcFilterTimeService.stepIsMinuteDuration(\n          this.ogcFilterTimeService.step(this.datasource, this.currentFilter)\n        )\n      ) {\n        const dateTmp = new Date(\n          this.beginMillisecond +\n            this.stepMillisecond * (matSliderChange.value - 1)\n        );\n        this.changeProperty.next({\n          value: dateTmp.toISOString(),\n          pos: 1,\n          refreshFilter: false\n        });\n        this.changeProperty.next({\n          value: new Date(\n            this.ogcFilterTimeService.addStep(\n              dateTmp.toISOString(),\n              this.stepMillisecond\n            )\n          ).toISOString(),\n          pos: 2,\n          refreshFilter: true\n        });\n      }\n    }\n  }\n\n  calculateStep() {\n    for (\n      let i = 1;\n      this.maxMillisecond -\n        (this.beginMillisecond + i * this.stepMillisecond) >=\n      -1;\n      i++\n    ) {\n      this.calculatedStep = i;\n    }\n  }\n}\n","<div class=\"slider-container\">\n  <mat-slider\n    id=\"time-slider\"\n    [step]=\"1\"\n    [min]=\"1\"\n    [max]=\"calculatedStep\"\n    [(ngModel)]=\"sliderValue\"\n    [displayWith]=\"sliderDisplayWith\"\n    thumbLabel\n    #ngSlider\n    ><input\n      matSliderThumb\n      (input)=\"\n        handleSliderInput({\n          source: ngSliderThumb,\n          parent: ngSlider,\n          value: ngSliderThumb.value\n        })\n      \"\n      #ngSliderThumb=\"matSliderThumb\"\n    />\n  </mat-slider>\n  <button mat-icon-button color=\"primary\" (click)=\"playFilter()\">\n    <mat-icon>{{ playIcon }}</mat-icon>\n  </button>\n  <button mat-icon-button color=\"primary\" (click)=\"resetFilter()\">\n    <mat-icon>{{ resetIcon }}</mat-icon>\n  </button>\n</div>\n","import { NgFor, NgIf } from '@angular/common';\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormControl\n} from '@angular/forms';\nimport { provideMomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { default as moment } from 'moment';\n\nimport { OgcFilterOperator } from '../../filter/shared/ogc-filter.enum';\nimport { OGCFilterTimeService } from '../shared/ogc-filter-time.service';\nimport {\n  OgcFilterDuringOptions,\n  OgcFilterableDataSource,\n  OgcFilterableDataSourceOptions\n} from '../shared/ogc-filter.interface';\nimport { OgcFilterTimeSliderComponent } from './ogc-filter-time-slider.component';\n\n@Component({\n  selector: 'igo-ogc-filter-time',\n  templateUrl: './ogc-filter-time.component.html',\n  styleUrls: ['./ogc-filter-time.component.scss'],\n  standalone: true,\n  imports: [\n    NgIf,\n    MatSlideToggleModule,\n    FormsModule,\n    OgcFilterTimeSliderComponent,\n    MatFormFieldModule,\n    MatInputModule,\n    MatDatepickerModule,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    MatSelectModule,\n    ReactiveFormsModule,\n    NgFor,\n    MatOptionModule,\n    IgoLanguageModule\n  ],\n  providers: [OGCFilterTimeService, provideMomentDateAdapter()]\n})\nexport class OgcFilterTimeComponent implements OnInit {\n  @Input() datasource: OgcFilterableDataSource;\n  @Input() currentFilter: any;\n  @Output() changeProperty: EventEmitter<{\n    value: string;\n    pos: number;\n    refreshFilter: boolean;\n  }> = new EventEmitter<any>();\n\n  beginHours: number[];\n  endHours: number[];\n  beginMinutes: number[];\n  endMinutes: number[];\n  beginHourFormControl = new UntypedFormControl();\n  beginMinuteFormControl = new UntypedFormControl();\n  endHourFormControl = new UntypedFormControl();\n  endMinuteFormControl = new UntypedFormControl();\n  _beginValue: Date;\n  _endValue: Date;\n  readonly _defaultMin: string = '1900-01-01';\n  readonly _defaultMax: string = '2052-01-06';\n  readonly _defaultDisplayFormat: string = 'DD/MM/YYYY HH:mm A';\n  readonly _defaultSliderModeEnabled: boolean = true;\n  ogcFilterOperator = OgcFilterOperator;\n  public sliderMode = false;\n\n  readonly defaultStepMillisecond = 60000;\n  public options: OgcFilterableDataSourceOptions;\n\n  public onlyYearBegin: number;\n  public onlyYearEnd: number;\n  public calendarTypeYear = false;\n  public resetIcon = 'replay';\n  public filterStateDisable: boolean;\n\n  @ViewChild('endDatepickerTime') endDatepickerTime: ElementRef;\n  @ViewChild('beginDatepickerTime') beginDatepickerTime: ElementRef;\n  @ViewChild('beginTime') beginTime: HTMLInputElement;\n  @ViewChild('endTime') endTime: HTMLInputElement;\n\n  private filterOriginConfig: OgcFilterDuringOptions;\n\n  get step(): string {\n    return this.datasource.options.stepDate\n      ? this.datasource.options.stepDate\n      : this.currentFilter.step;\n  }\n\n  get stepMilliseconds(): number {\n    const step = moment.duration(this.step).asMilliseconds();\n    return step === 0 ? this.defaultStepMillisecond : step;\n  }\n\n  set beginValue(begin: Date) {\n    this._beginValue = begin;\n  }\n\n  get beginValue(): Date {\n    return this._beginValue;\n  }\n\n  set endValue(end: Date) {\n    this._endValue = end;\n  }\n\n  get endValue(): Date {\n    return this._endValue;\n  }\n\n  get sliderInterval(): number {\n    return this.currentFilter.sliderInterval === undefined\n      ? 2000\n      : this.currentFilter.sliderInterval;\n  }\n\n  get maxDate(): string {\n    return this.datasource.options.maxDate\n      ? this.datasource.options.maxDate\n      : this._defaultMax;\n  }\n\n  get displayFormat(): string {\n    return this.currentFilter.displayFormat\n      ? this.currentFilter.displayFormat\n      : this._defaultDisplayFormat;\n  }\n\n  public filterBeginFunction;\n  public filterEndFunction;\n\n  constructor(public ogcFilterTimeService: OGCFilterTimeService) {}\n\n  ngOnInit() {\n    this.filterOriginConfig = this.datasource.options.ogcFilters\n      .filters as OgcFilterDuringOptions;\n    if (this.currentFilter.sliderOptions) {\n      this.currentFilter.sliderOptions.enabled =\n        this.currentFilter.sliderOptions.enabled !== undefined\n          ? this.currentFilter.sliderOptions.enabled\n          : this._defaultSliderModeEnabled;\n    }\n    this.beginValue = this.parseFilter(this.handleMin());\n    this.endValue = this.parseFilter(this.handleMax());\n\n    this.onlyYearBegin = this.beginValue.getUTCFullYear();\n    this.onlyYearEnd = this.endValue.getUTCFullYear();\n    this.calendarTypeYear = this.isCalendarYearMode();\n    this.setFilterStateDisable();\n    this.updateHoursMinutesArray();\n    // update value for now value\n    this.updateValues();\n    this.dateFilter(this.filterBeginFunction, 'begin');\n    this.dateFilter(this.filterEndFunction, 'end');\n  }\n\n  parseFilter(filter): Date {\n    if (!filter) {\n      return new Date();\n    } else if (isNaN(new Date(filter).getTime())) {\n      if (filter.search('now') >= 0) {\n        const interval = filter.match(/years|months|weeks|days|hours|seconds/);\n        if (filter.match(/\\+/)) {\n          const intervalInt = parseInt(\n            filter.substring(filter.indexOf('+') + 1, interval.index),\n            10\n          );\n          return moment().add(intervalInt, interval[0]).toDate();\n        }\n        if (filter.match(/\\-/)) {\n          const intervalInt = parseInt(\n            filter.substring(filter.indexOf('-') + 1, interval.index),\n            10\n          );\n          return moment().subtract(intervalInt, interval[0]).toDate();\n        }\n        return new Date();\n      }\n      if (filter.search('today') >= 0) {\n        const _now = moment().endOf('day').toDate();\n        const interval = filter.match(/years|months|weeks|days|hours|seconds/);\n        if (filter.match(/\\+/)) {\n          const intervalInt = parseInt(\n            filter.substring(filter.indexOf('+') + 1, interval.index),\n            10\n          );\n          return moment(_now).add(intervalInt, interval[0]).toDate();\n        }\n        if (filter.match(/\\-/)) {\n          const intervalInt = parseInt(\n            filter.substring(filter.indexOf('-') + 1, interval.index),\n            10\n          );\n          return moment(_now).subtract(intervalInt, interval[0]).toDate();\n        }\n        return _now;\n      }\n      return new Date();\n    }\n    if (this.currentFilter.calendarModeYear) {\n      const date = this.getDateFromStringWithoutTime(filter);\n      return date;\n    } else {\n      return filter ? new Date(filter) : new Date();\n    }\n  }\n\n  changeTemporalProperty(\n    value: string | Date,\n    position?,\n    refreshFilter = true\n  ) {\n    if (typeof value === 'string') {\n      value = new Date(value);\n    }\n    let valueTmp = this.getDateTime(value, position);\n    if (this.isCalendarYearMode()) {\n      let dateStringFromYearNotime;\n      if (position === 1) {\n        this.beginValue = value;\n        this.onlyYearBegin = this.beginValue.getFullYear();\n        dateStringFromYearNotime = `${this.onlyYearBegin}-01-01`;\n      } else {\n        this.endValue = value;\n        this.onlyYearEnd = this.endValue.getFullYear();\n        dateStringFromYearNotime = `${this.onlyYearEnd}-12-31`;\n      }\n      // call service with string date without time\n      this.changeProperty.next({\n        value: dateStringFromYearNotime,\n        pos: position,\n        refreshFilter\n      });\n      return;\n    }\n    if (position === 2 && this.calendarType() === 'date' && !this.sliderMode) {\n      /* Above month: see yearSelected or monthSelected */\n      valueTmp = moment(valueTmp).endOf('day').toDate();\n    }\n\n    if (position === 1) {\n      this.beginValue = valueTmp;\n      if (this.restrictedToStep()) {\n        this.changeTemporalProperty(\n          this.ogcFilterTimeService.addStep(valueTmp, this.stepMilliseconds),\n          2,\n          refreshFilter\n        );\n      }\n    } else {\n      this.endValue = valueTmp;\n    }\n    this.updateHoursMinutesArray();\n    this.changeProperty.next({\n      value: valueTmp.toISOString(),\n      pos: position,\n      refreshFilter\n    });\n  }\n\n  handleDate(value): Date {\n    if (!value || value === '') {\n      return undefined;\n    }\n    if (typeof value === 'string' && this.currentFilter.calendarModeYear) {\n      return this.getDateFromStringWithoutTime(value);\n    }\n    return new Date(value);\n  }\n\n  calendarType() {\n    if (this.currentFilter.calendarModeYear) {\n      return 'year';\n    }\n    if (this.stepMilliseconds < 86400000) {\n      return 'datetime';\n    }\n    return 'date';\n  }\n\n  isCalendarYearMode(): boolean {\n    if (this.calendarType() === 'year') {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  yearOnlyInputChange(changeEvent, datePicker?: any, property?: string) {\n    const year = changeEvent.target.value;\n    const date = this.getDateFromStringWithoutTime(year);\n    this.yearSelected(date, datePicker, property);\n  }\n\n  yearSelected(\n    year,\n    datePicker?: any,\n    property?: string,\n    refreshFilter = true\n  ) {\n    if (this.ogcFilterTimeService.stepIsYearDuration(this.step)) {\n      if (datePicker) {\n        datePicker.close();\n      }\n      if (property === 'end') {\n        // change value 01 jan to 31 dec same year\n        year = moment(year).endOf('year').toDate();\n      } else if (\n        property === 'begin' &&\n        this.restrictedToStep() &&\n        !this.calendarTypeYear\n      ) {\n        this.yearSelected(year, undefined, 'end');\n      }\n      this.changeTemporalProperty(\n        year,\n        property === 'begin' ? 1 : 2,\n        refreshFilter\n      );\n    }\n  }\n\n  monthSelected(\n    month,\n    datePicker?: any,\n    property?: string,\n    refreshFilter = true\n  ) {\n    if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {\n      if (datePicker) {\n        datePicker.close();\n      }\n      if (property === 'end') {\n        month = moment(month).endOf('month').toDate();\n      } else if (property === 'begin' && this.restrictedToStep()) {\n        this.monthSelected(month, undefined, 'end');\n      }\n      this.changeTemporalProperty(\n        month,\n        property === 'begin' ? 1 : 2,\n        refreshFilter\n      );\n    }\n  }\n\n  calendarView(): 'month' | 'year' | 'multi-year' {\n    const test = this.stepMilliseconds;\n    const diff = Math.abs(\n      this.parseFilter(this.currentFilter.end).getTime() -\n        this.parseFilter(this.currentFilter.begin).getTime()\n    );\n    if (this.ogcFilterTimeService.stepIsYearDuration(this.step)) {\n      return 'multi-year';\n    } else if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {\n      return 'year';\n    } else if (test < 86400000 && diff < 86400000) {\n      return 'clock' as any;\n    } else {\n      return 'month';\n    }\n  }\n\n  dateFilter(type: string, date: string) {\n    const dateValue = new Date(date);\n    const diff = dateValue.getTime() - new Date(this.handleMin()).getTime();\n\n    if (this.ogcFilterTimeService.stepIsYearDuration(this.step)) {\n      const monthDiff = moment(dateValue).diff(\n        moment(this.handleMin()),\n        'years',\n        true\n      );\n      if (type === 'end') {\n        const dateValuePlus1 = moment(dateValue).add(1, 'd');\n        const monthDiffPlus1 = moment(dateValuePlus1).diff(\n          moment(this.handleMin()),\n          'years',\n          true\n        );\n        this.filterEndFunction =\n          monthDiffPlus1 % moment.duration(this.step).asYears() === 0;\n        return;\n      } else if (type === 'begin') {\n        this.filterBeginFunction =\n          monthDiff % moment.duration(this.step).asYears() === 0;\n        return;\n      }\n    } else if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {\n      const monthDiff = moment(dateValue).diff(\n        moment(this.handleMin()),\n        'months',\n        true\n      );\n      if (type === 'end') {\n        const dateValuePlus1 = moment(dateValue).add(1, 'd');\n        const monthDiffPlus1 = moment(dateValuePlus1).diff(\n          moment(this.handleMin()),\n          'months',\n          true\n        );\n        this.filterEndFunction =\n          monthDiffPlus1 % moment.duration(this.step).asMonths() === 0;\n        return;\n      } else if (type === 'begin') {\n        this.filterBeginFunction =\n          monthDiff % moment.duration(this.step).asMonths() === 0;\n        return;\n      }\n    } else if (this.ogcFilterTimeService.stepIsWeekDuration(this.step)) {\n      const weekDiff = moment(dateValue).diff(\n        moment(this.handleMin()),\n        'weeks',\n        true\n      );\n      if (type === 'end') {\n        const dateValuePlus1 = moment(dateValue).add(1, 'd');\n        const weekDiffPlus1 = moment(dateValuePlus1).diff(\n          moment(this.handleMin()),\n          'weeks',\n          true\n        );\n        this.filterEndFunction =\n          weekDiffPlus1 % moment.duration(this.step).asWeeks() === 0;\n        return;\n      } else if (type === 'begin') {\n        this.filterBeginFunction =\n          weekDiff % moment.duration(this.step).asWeeks() === 0;\n        return;\n      }\n    } else if (this.ogcFilterTimeService.stepIsDayDuration(this.step)) {\n      const dayDiff = moment(dateValue).diff(\n        moment(this.handleMin()),\n        'days',\n        true\n      );\n      if (type === 'end') {\n        const dateValuePlus1 = moment(dateValue).add(1, 'd');\n        const dayDiffPlus1 = moment(dateValuePlus1).diff(\n          moment(this.handleMin()),\n          'days',\n          true\n        );\n        const _mod = dayDiffPlus1 % moment.duration(this.step).asDays();\n        this.filterEndFunction =\n          (_mod < 0.0000001 && _mod > -0.0000001) || _mod === 0; // 1 millisecond = 1.1574074074074076e-8\n        return;\n      } else if (type === 'begin') {\n        const _mod = (dayDiff % moment.duration(this.step).asDays()) + 1;\n        this.filterBeginFunction =\n          (_mod < 0.0000001 && _mod > -0.0000001 && _mod !== 0) || _mod === 1; // 1 millisecond = 1.1574074074074076e-8\n        return;\n      }\n    } else if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {\n      if (type === 'end') {\n        const hourDiff = moment(dateValue).diff(\n          moment(this.handleMin()),\n          'hours',\n          true\n        );\n        this.filterEndFunction =\n          hourDiff % moment.duration(this.step).asHours() === 0;\n        return;\n      } else if (type === 'begin') {\n        const hourDiff = moment(dateValue).diff(\n          moment(this.handleMin()),\n          'hours',\n          true\n        );\n        this.filterBeginFunction =\n          hourDiff % moment.duration(this.step).asHours() === 0;\n        return;\n      }\n    } else if (this.ogcFilterTimeService.stepIsMinuteDuration(this.step)) {\n      if (type === 'end') {\n        this.filterEndFunction = true;\n        return;\n      } else if (type === 'begin') {\n        this.filterBeginFunction = true;\n        return;\n      }\n    }\n\n    this.filterEndFunction = diff % this.stepMilliseconds === 0;\n    this.filterBeginFunction = diff % this.stepMilliseconds === 0;\n    return;\n  }\n\n  getDateTime(date, pos) {\n    const valuetmp = new Date(date);\n    let valuetmp2;\n    if (!this.sliderMode) {\n      switch (pos) {\n        case 1: {\n          if (this.currentFilter.calendarModeYear) {\n            valuetmp2 = valuetmp.setHours(0, 0);\n            break;\n          } else {\n            valuetmp2 = valuetmp.setHours(\n              this.beginHourFormControl.value,\n              this.beginMinuteFormControl.value\n            );\n            break;\n          }\n        }\n        case 2: {\n          if (this.currentFilter.calendarModeYear) {\n            valuetmp2 = valuetmp.setHours(0, 0);\n            break;\n          } else {\n            valuetmp2 = valuetmp.setHours(\n              this.endHourFormControl.value,\n              this.endMinuteFormControl.value\n            );\n            break;\n          }\n        }\n      }\n    }\n    return new Date(valuetmp2 ? valuetmp2 : valuetmp);\n  }\n\n  handleMinuteIncrement() {\n    if (this.ogcFilterTimeService.stepIsMinuteDuration(this.step)) {\n      if (this.stepMilliseconds < 3600000) {\n        return this.stepMilliseconds / 1000 === 60\n          ? 1\n          : this.stepMilliseconds / 1000;\n      } else {\n        return (this.stepMilliseconds % 3600000) / 60;\n      }\n    } else if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {\n      return 60;\n    }\n    return 1;\n  }\n\n  handleHourIncrement() {\n    if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {\n      return this.stepMilliseconds / 1000 / 60 / 60;\n    }\n    return 1;\n  }\n\n  fullBeginHoursArray(checkEndValue?) {\n    if (checkEndValue) {\n      this.beginHours = Array.from(\n        {\n          length:\n            (this.endHourFormControl.value - 0) / this.handleHourIncrement() + 1\n        },\n        (_, i) => 0 + i * this.handleHourIncrement()\n      );\n    } else {\n      this.beginHours = Array.from(\n        { length: (23 - 0) / this.handleHourIncrement() + 1 },\n        (_, i) => 0 + i * this.handleHourIncrement()\n      );\n    }\n    this.beginHourFormControl.setValue(this.beginValue.getHours());\n  }\n\n  fullEndHoursArray(checkEndValue?) {\n    if (checkEndValue) {\n      this.endHours = Array.from(\n        {\n          length:\n            (23 - this.beginHourFormControl.value) /\n              this.handleHourIncrement() +\n            1\n        },\n        (_, i) =>\n          this.beginHourFormControl.value + i * this.handleHourIncrement()\n      );\n    } else {\n      this.endHours = Array.from(\n        { length: (23 - 0) / this.handleHourIncrement() + 1 },\n        (_, i) => 0 + i * this.handleHourIncrement()\n      );\n    }\n    this.endHourFormControl.setValue(this.endValue.getHours());\n  }\n\n  fullBeginMinutesArray(checkEndValue?) {\n    if (checkEndValue) {\n      this.beginMinutes = Array.from(\n        {\n          length:\n            (this.endMinuteFormControl.value - 0) /\n              this.handleMinuteIncrement() +\n            1\n        },\n        (_, i) => 0 + i * this.handleMinuteIncrement()\n      );\n    } else {\n      this.beginMinutes = Array.from(\n        { length: (59 - 0) / this.handleMinuteIncrement() + 1 },\n        (_, i) => 0 + i * this.handleMinuteIncrement()\n      );\n    }\n    this.beginMinuteFormControl.setValue(this.beginValue.getMinutes());\n  }\n\n  fullEndMinutesArray(checkEndValue?) {\n    if (checkEndValue) {\n      this.endMinutes = Array.from(\n        {\n          length:\n            (59 - this.beginMinuteFormControl.value) /\n              this.handleMinuteIncrement() +\n            1\n        },\n        (_, i) =>\n          this.beginMinuteFormControl.value + i * this.handleMinuteIncrement()\n      );\n    } else {\n      this.endMinutes = Array.from(\n        { length: (59 - 0) / this.handleMinuteIncrement() + 1 },\n        (_, i) => 0 + i * this.handleMinuteIncrement()\n      );\n    }\n    this.endMinuteFormControl.setValue(this.endValue.getMinutes());\n  }\n\n  updateHoursMinutesArray() {\n    const beginTmp = new Date(this.beginValue);\n    const endTmp = new Date(this.endValue);\n    if (beginTmp.setHours(0, 0) === endTmp.setHours(0, 0)) {\n      this.fullBeginHoursArray(true);\n      this.fullEndHoursArray(true);\n      if (this.beginValue.getHours() === this.endValue.getHours()) {\n        this.fullBeginMinutesArray(true);\n        this.fullEndMinutesArray(true);\n      }\n    } else {\n      this.fullBeginHoursArray();\n      this.fullEndHoursArray();\n      this.fullBeginMinutesArray();\n      this.fullEndMinutesArray();\n    }\n  }\n\n  private updateValues() {\n    this.changeTemporalProperty(this.beginValue, 1, false);\n    this.changeTemporalProperty(this.endValue, 2, true);\n  }\n\n  public restrictedToStep(): boolean {\n    return this.currentFilter.restrictToStep\n      ? this.currentFilter.restrictToStep\n      : false;\n  }\n\n  public handleMin() {\n    return this.currentFilter.begin\n      ? this.currentFilter.begin\n      : this.datasource.options.minDate\n        ? this.datasource.options.minDate\n        : this._defaultMin;\n  }\n\n  public handleMax() {\n    return this.currentFilter.end\n      ? this.currentFilter.end\n      : this.datasource.options.maxDate\n        ? this.datasource.options.maxDate\n        : this._defaultMax;\n  }\n\n  changePropertyByPass(event) {\n    this.changeProperty.next(event);\n  }\n\n  modeChange(event) {\n    if (!event.checked) {\n      this.updateValues();\n    }\n  }\n\n  setFilterStateDisable() {\n    if (this.currentFilter) {\n      this.filterStateDisable = !this.currentFilter.active;\n    } else {\n      this.filterStateDisable = false;\n    }\n    if (this.calendarType() === 'datetime') {\n      if (this.filterStateDisable === true) {\n        this.beginHourFormControl.disable();\n        this.beginMinuteFormControl.disable();\n        this.endHourFormControl.disable();\n        this.endMinuteFormControl.disable();\n      } else {\n        this.beginHourFormControl.enable();\n        this.beginMinuteFormControl.enable();\n        this.endHourFormControl.enable();\n        this.endMinuteFormControl.enable();\n      }\n    }\n  }\n  getDateFromStringWithoutTime(stringDate: string): Date {\n    // warning create date with no time make a date UTC with TZ and the date create maybe not the same year, month and day\n    // exemple:\n    // new Date('2022-01-01') -> Fri Dec 31 2021 19:00:00 GMT-0500 (heure normale de l’Est nord-américain)\n    // to create same date as string, add time 00 in the creation\n    // new Date('2022-01-01 00:00:00') -> Sat Jan 01 2022 00:00:00 GMT-0500 (heure normale de l’Est nord-américain)\n    let year;\n    let month = '01';\n    let day = '01';\n    if (stringDate.length === 10) {\n      const dateItems = stringDate.split('-');\n      if (dateItems.length !== 3) {\n        throw new Error(\n          'Error in config date begin-end for ogcFilter: Date without time format need to be YYYY-MM-DD or YYYY'\n        );\n      } else {\n        year = dateItems[0];\n        month = dateItems[1];\n        day = dateItems[2];\n      }\n    } else if (stringDate.length === 4) {\n      year = stringDate;\n    } else {\n      return new Date(stringDate);\n    }\n    return new Date(`${year}-${month}-${day} 00:00:00`);\n  }\n\n  resetFilter() {\n    let minDefaultDate;\n    let maxDefaultDate;\n    let minDefaultISOString;\n    let maxDefaultISOString;\n\n    if (this.calendarTypeYear) {\n      if (this.filterOriginConfig.end === 'today') {\n        const todayDateStringNoTime = new Date().toLocaleDateString('en-CA'); // '2022-02-13'\n        maxDefaultISOString = `${todayDateStringNoTime.substring(0, 4)}-01-01`;\n      } else {\n        maxDefaultISOString = `${this.filterOriginConfig.end.substring(0, 4)}-01-01`;\n      }\n      minDefaultISOString = `${this.filterOriginConfig.begin.substring(0, 4)}-01-01`;\n      minDefaultDate = this.getDateFromStringWithoutTime(minDefaultISOString);\n      maxDefaultDate = this.getDateFromStringWithoutTime(maxDefaultISOString);\n    } else {\n      minDefaultDate = this.parseFilter(this.filterOriginConfig.begin);\n      maxDefaultDate = this.parseFilter(this.filterOriginConfig.end);\n      minDefaultISOString = minDefaultDate.toISOString();\n      maxDefaultISOString = maxDefaultDate.toISOString();\n    }\n\n    if (\n      this.currentFilter.begin !== minDefaultISOString ||\n      this.currentFilter.end !== maxDefaultISOString\n    ) {\n      this.beginValue = minDefaultDate;\n      this.endValue = maxDefaultDate;\n      this.updateValues();\n    }\n  }\n\n  toggleFilterState() {\n    if (this.currentFilter.active === true) {\n      this.currentFilter.active = false;\n    } else {\n      this.currentFilter.active = true;\n    }\n    this.setFilterStateDisable();\n    this.updateValues();\n  }\n}\n","<div class=\"datetime-container\">\n  <mat-slide-toggle\n    *ngIf=\"this.currentFilter.sliderOptions?.enabled\"\n    [(ngModel)]=\"sliderMode\"\n    (change)=\"modeChange($event)\"\n  >\n    {{ 'igo.geo.filter.sliderModeTitle' | translate }}\n  </mat-slide-toggle>\n\n  <div class=\"slider-container\" *ngIf=\"sliderMode\">\n    <igo-ogc-filter-time-slider\n      [begin]=\"beginValue\"\n      [max]=\"this.restrictedToStep() ? this.maxDate : this.endValue\"\n      [currentFilter]=\"currentFilter\"\n      [datasource]=\"datasource\"\n      (changeProperty)=\"changePropertyByPass($event)\"\n    >\n    </igo-ogc-filter-time-slider>\n  </div>\n\n  <div *ngIf=\"!sliderMode\">\n    <div class=\"year-input-container\" *ngIf=\"calendarTypeYear\">\n      <!-- to emulate a year-picker, 2 input: first input to show user just year and second input hiden and bind \n        with the datepicker  -->\n      <mat-form-field class=\"year-input\" subscriptSizing=\"dynamic\">\n        <mat-label>{{ 'igo.geo.timeFilter.startYear' | translate }}</mat-label>\n        <input\n          matInput\n          class=\"year-input-only-year\"\n          value=\"{{ onlyYearBegin }}\"\n          (change)=\"yearOnlyInputChange($event, beginDatepicker, 'begin')\"\n          [disabled]=\"filterStateDisable\"\n        />\n        <mat-datepicker-toggle\n          matSuffix\n          [for]=\"beginDatepicker\"\n          [disabled]=\"filterStateDisable\"\n        ></mat-datepicker-toggle>\n\n        <mat-datepicker\n          panelClass=\"datepicker-year\"\n          #beginDatepicker\n          [startView]=\"calendarView()\"\n          [startAt]=\"beginValue\"\n          (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n        >\n        </mat-datepicker>\n\n        <input\n          #beginYear\n          class=\"year-input-hide\"\n          matInput\n          [matDatepicker]=\"beginDatepicker\"\n          enabled=\"false\"\n          readonly=\"true\"\n          [value]=\"\n            beginValue ? beginValue : handleDate(datasource.options.minDate)\n          \"\n          [min]=\"handleDate(datasource.options.minDate)\"\n          [max]=\"\n            endValue && !restrictedToStep()\n              ? endValue\n              : handleDate(datasource.options.maxDate)\n          \"\n        />\n      </mat-form-field>\n\n      <mat-form-field class=\"year-input\" subscriptSizing=\"dynamic\">\n        <mat-label>{{ 'igo.geo.timeFilter.endYear' | translate }}</mat-label>\n        <input\n          matInput\n          class=\"year-input-only-year\"\n          value=\"{{ onlyYearEnd }}\"\n          (change)=\"yearOnlyInputChange($event, endDatepicker, 'end')\"\n          [disabled]=\"filterStateDisable\"\n        />\n        <mat-datepicker-toggle\n          matSuffix\n          [for]=\"endDatepicker\"\n          [disabled]=\"filterStateDisable\"\n        ></mat-datepicker-toggle>\n        <mat-datepicker\n          panelClass=\"datepicker-year\"\n          #endDatepicker\n          [startView]=\"calendarView()\"\n          [startAt]=\"endValue\"\n          (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n        >\n        </mat-datepicker>\n\n        <input\n          #endYear\n          class=\"year-input-hide\"\n          matInput\n          [matDatepicker]=\"endDatepicker\"\n          enabled=\"false\"\n          readonly=\"true\"\n          [value]=\"endValue ? endValue : handleDate(datasource.options.maxDate)\"\n          [min]=\"\n            beginValue ? beginValue : handleDate(datasource.options.minDate)\n          \"\n          [max]=\"handleDate(datasource.options.maxDate)\"\n        />\n      </mat-form-field>\n      <div class=\"actions-container\">\n        <button\n          class=\"reset-button\"\n          mat-icon-button\n          color=\"primary\"\n          (click)=\"resetFilter()\"\n          [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n          [disabled]=\"filterStateDisable\"\n        >\n          <mat-icon>{{ resetIcon }}</mat-icon>\n        </button>\n        <mat-slide-toggle\n          class=\"toggle-filter-state\"\n          (change)=\"toggleFilterState()\"\n          [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n          tooltip-position=\"below\"\n          matTooltipShowDelay=\"500\"\n          [checked]=\"!filterStateDisable\"\n        >\n        </mat-slide-toggle>\n      </div>\n    </div>\n\n    <div class=\"datetime-input-container\" *ngIf=\"calendarType() !== 'year'\">\n      <div class=\"datetime-input\">\n        <mat-form-field class=\"date-input\" subscriptSizing=\"dynamic\">\n          <mat-datepicker-toggle\n            matSuffix\n            [for]=\"beginDatepicker\"\n            [disabled]=\"filterStateDisable\"\n          ></mat-datepicker-toggle>\n          <input\n            #begin\n            matInput\n            [matDatepicker]=\"beginDatepicker\"\n            [placeholder]=\"'igo.geo.timeFilter.startDate' | translate\"\n            [attr.disabled]=\"!currentFilter.active\"\n            (dateChange)=\"changeTemporalProperty(begin.value, 1)\"\n            [matDatepickerFilter]=\"filterBeginFunction\"\n            [value]=\"\n              beginValue ? beginValue : handleDate(datasource.options.minDate)\n            \"\n            [min]=\"handleDate(datasource.options.minDate)\"\n            [max]=\"\n              endValue && !restrictedToStep()\n                ? endValue\n                : handleDate(datasource.options.maxDate)\n            \"\n            [disabled]=\"filterStateDisable\"\n          />\n          <span class=\"filler\"></span>\n          <mat-datepicker\n            #beginDatepicker\n            [startView]=\"calendarView()\"\n            [startAt]=\"beginValue\"\n            (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n            (monthSelected)=\"monthSelected($event, beginDatepicker, 'begin')\"\n          >\n          </mat-datepicker>\n        </mat-form-field>\n\n        <div *ngIf=\"calendarType() === 'datetime'\" class=\"time-input\">\n          <mat-form-field class=\"hour-input\" subscriptSizing=\"dynamic\">\n            <mat-label>{{ 'igo.geo.timeFilter.hour' | translate }}</mat-label>\n            <mat-select\n              [formControl]=\"beginHourFormControl\"\n              [attr.disabled]=\"!currentFilter.active\"\n              (selectionChange)=\"changeTemporalProperty(begin.value, 1)\"\n            >\n              <mat-option *ngFor=\"let hour of beginHours\" [value]=\"hour\">{{\n                hour\n              }}</mat-option>\n            </mat-select>\n          </mat-form-field>\n          <mat-form-field class=\"minute-input\" subscriptSizing=\"dynamic\">\n            <mat-label>{{ 'igo.geo.timeFilter.minute' | translate }}</mat-label>\n            <mat-select\n              [formControl]=\"beginMinuteFormControl\"\n              [attr.disabled]=\"!currentFilter.active\"\n              (selectionChange)=\"changeTemporalProperty(begin.value, 1)\"\n            >\n              <mat-option\n                *ngFor=\"let minute of beginMinutes\"\n                [value]=\"minute\"\n                >{{ minute }}</mat-option\n              >\n            </mat-select>\n          </mat-form-field>\n        </div>\n      </div>\n\n      <div *ngIf=\"!restrictedToStep()\" class=\"datetime-input\">\n        <mat-form-field class=\"date-input\" subscriptSizing=\"dynamic\">\n          <mat-datepicker-toggle\n            matSuffix\n            [for]=\"endDatepicker\"\n            [disabled]=\"filterStateDisable\"\n          ></mat-datepicker-toggle>\n          <input\n            #end\n            matInput\n            [matDatepicker]=\"endDatepicker\"\n            [placeholder]=\"'igo.geo.timeFilter.endDate' | translate\"\n            [attr.disabled]=\"!currentFilter.active\"\n            (dateChange)=\"changeTemporalProperty(end.value, 2)\"\n            [matDatepickerFilter]=\"filterEndFunction\"\n            [value]=\"\n              endValue ? endValue : handleDate(datasource.options.maxDate)\n            \"\n            [min]=\"\n              beginValue ? beginValue : handleDate(datasource.options.minDate)\n            \"\n            [max]=\"handleDate(datasource.options.maxDate)\"\n            [disabled]=\"filterStateDisable\"\n          />\n          <span class=\"filler\"></span>\n          <mat-datepicker\n            #endDatepicker\n            [startView]=\"calendarView()\"\n            [startAt]=\"endValue\"\n            (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n            (monthSelected)=\"monthSelected($event, endDatepicker, 'end')\"\n          >\n          </mat-datepicker>\n        </mat-form-field>\n\n        <div *ngIf=\"calendarType() === 'datetime'\" class=\"time-input\">\n          <mat-form-field class=\"hour-input\" subscriptSizing=\"dynamic\">\n            <mat-label>{{ 'igo.geo.timeFilter.hour' | translate }}</mat-label>\n            <mat-select\n              [formControl]=\"endHourFormControl\"\n              [attr.disabled]=\"!currentFilter.active\"\n              (selectionChange)=\"changeTemporalProperty(end.value, 2)\"\n            >\n              <mat-option *ngFor=\"let hour of endHours\" [value]=\"hour\">{{\n                hour\n              }}</mat-option>\n            </mat-select>\n          </mat-form-field>\n          <mat-form-field class=\"minute-input\" subscriptSizing=\"dynamic\">\n            <mat-label>{{ 'igo.geo.timeFilter.minute' | translate }}</mat-label>\n            <mat-select\n              [formControl]=\"endMinuteFormControl\"\n              [attr.disabled]=\"!currentFilter.active\"\n              (selectionChange)=\"changeTemporalProperty(end.value, 2)\"\n            >\n              <mat-option *ngFor=\"let minute of endMinutes\" [value]=\"minute\">{{\n                minute\n              }}</mat-option>\n            </mat-select>\n          </mat-form-field>\n        </div>\n      </div>\n\n      <div class=\"actions-container\">\n        <button\n          class=\"reset-button\"\n          mat-icon-button\n          color=\"primary\"\n          (click)=\"resetFilter()\"\n          [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n          [disabled]=\"filterStateDisable\"\n        >\n          <mat-icon>{{ resetIcon }}</mat-icon>\n        </button>\n        <mat-slide-toggle\n          class=\"toggle-filter-state\"\n          (change)=\"toggleFilterState()\"\n          tooltip-position=\"below\"\n          matTooltipShowDelay=\"500\"\n          [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n          [checked]=\"!filterStateDisable\"\n        >\n        </mat-slide-toggle>\n      </div>\n    </div>\n  </div>\n</div>\n","import { AsyncPipe, KeyValuePipe, NgClass, NgFor, NgIf } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatOptionModule } from '@angular/material/core';\nimport {\n  FloatLabelType,\n  MatFormFieldModule\n} from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Observable, of } from 'rxjs';\n\nimport { SourceFieldsOptionsParams } from '../../datasource/shared/datasources/datasource.interface';\nimport { OgcFilterWriter } from '../../filter/shared/ogc-filter';\nimport { OgcFilterOperator } from '../../filter/shared/ogc-filter.enum';\nimport {\n  OgcFilterableDataSource,\n  OgcFiltersOptions\n} from '../../filter/shared/ogc-filter.interface';\nimport { MapBase } from '../../map';\nimport { WktService } from '../../wkt/shared/wkt.service';\nimport { OgcFilterTimeComponent } from '../ogc-filter-time/ogc-filter-time.component';\n\n@Component({\n  selector: 'igo-ogc-filter-form',\n  templateUrl: './ogc-filter-form.component.html',\n  styleUrls: ['./ogc-filter-form.component.scss'],\n  standalone: true,\n  imports: [\n    MatCheckboxModule,\n    MatTooltipModule,\n    MatFormFieldModule,\n    NgClass,\n    MatSelectModule,\n    MatOptionModule,\n    NgIf,\n    MatInputModule,\n    MatAutocompleteModule,\n    NgFor,\n    MatButtonModule,\n    MatIconModule,\n    OgcFilterTimeComponent,\n    AsyncPipe,\n    KeyValuePipe,\n    IgoLanguageModule\n  ]\n})\nexport class OgcFilterFormComponent implements OnInit {\n  ogcFilterOperator = OgcFilterOperator;\n  filteredValues$: Observable<string[]>;\n  filteredFields$: Observable<SourceFieldsOptionsParams[]>;\n  public allOgcFilterOperators;\n  public ogcFilterOperators$ = new BehaviorSubject<Record<string, any>>(\n    undefined\n  );\n  public igoSpatialSelectors;\n  public value = '';\n  public inputOperator;\n  public selectedField$ = new BehaviorSubject<SourceFieldsOptionsParams>(\n    undefined\n  );\n  public fields$ = new BehaviorSubject<SourceFieldsOptionsParams[]>([]);\n  public color = 'primary';\n  public disabled;\n  public currentFilterIsSpatial$ = new BehaviorSubject<boolean>(false);\n  public defaultStepMillisecond = 6000;\n  public inputClearable: string;\n\n  @Input() refreshFilters: () => void;\n\n  @Input() datasource: OgcFilterableDataSource;\n\n  @Input() map: MapBase;\n\n  @Input() currentFilter: any;\n\n  set snrc(value: any) {\n    const checkSNRC50k = /^\\d{2}[a-l][0,1][0-9]$/gi;\n    const checkSNRC250k = /^\\d{2}[a-p]$/gi;\n    const checkSNRC1m = /^\\d{2}$/gi;\n    if (\n      checkSNRC1m.test(value) ||\n      checkSNRC250k.test(value) ||\n      checkSNRC50k.test(value)\n    ) {\n      this._snrc = value;\n      this.currentFilter.igoSNRC = value;\n    }\n  }\n\n  get snrc(): any {\n    return this._snrc;\n  }\n\n  private _snrc = '';\n\n  @Input() floatLabel: FloatLabelType;\n\n  get activeFilters() {\n    return this.datasource.options.ogcFilters.interfaceOgcFilters.filter(\n      (f) => f.active === true\n    );\n  }\n\n  get allowedOperators() {\n    return new OgcFilterWriter().computeAllowedOperators(\n      this.fields$.value,\n      this.currentFilter.propertyName,\n      this.datasource.options.ogcFilters.allowedOperatorsType\n    );\n  }\n\n  constructor(private wktService: WktService) {\n    // TODO: Filter permitted operator based on wfscapabilities\n    // Need to work on regex on XML capabilities because\n    // comaparison operator's name varies between WFS servers...\n    // Ex: IsNull vs PropertyIsNull vs IsNil ...\n    this.allOgcFilterOperators = new OgcFilterWriter().operators;\n    this.ogcFilterOperators$.next(this.allOgcFilterOperators);\n    this.igoSpatialSelectors = [\n      {\n        type: 'fixedExtent'\n      },\n      {\n        type: 'snrc'\n      }\n    ];\n    // TODO: selectFeature & drawFeature\n  }\n\n  ngOnInit() {\n    if (this.datasource.options.sourceFields) {\n      const sFields = this.datasource.options.sourceFields.filter(\n        (sf) =>\n          sf.excludeFromOgcFilters === undefined || !sf.excludeFromOgcFilters\n      );\n      sFields.map((sfs) => {\n        if (sfs.values) {\n          sfs.values.sort();\n        }\n      });\n      this.fields$.next(sFields);\n    }\n\n    this.updateFieldsList();\n    this.selectedField$.next(\n      this.fields$.value.find((f) => f.name === this.currentFilter.propertyName)\n    );\n    this.updateValuesList();\n    this.selectedField$.subscribe(() => {\n      this.ogcFilterOperators$.next(this.allowedOperators);\n      if (\n        Object.keys(this.allowedOperators).indexOf(\n          this.currentFilter.operator\n        ) === -1\n      ) {\n        this.currentFilter.operator = Object.keys(this.allowedOperators)[0];\n        this.currentFilter.operator = Object.keys(this.allowedOperators)[0];\n      }\n      this.updateValuesList();\n    });\n    this.currentFilterIsSpatial();\n  }\n\n  updateFieldsList(value?: string) {\n    this.filteredFields$ =\n      value && value.length > 0 ? of(this._filterFields(value)) : this.fields$;\n    if (this.fields$.value.find((f) => f.name === value)) {\n      this.changeField(value);\n    }\n  }\n\n  updateValuesList(value?: string, pos?: number) {\n    this.filteredValues$ =\n      value && value.length > 0\n        ? of(this._filterValues(value))\n        : this.selectedField$.value\n          ? of(this.selectedField$.value.values)\n          : of([]);\n    if (value && value.length >= 1) {\n      this.changeProperty(value, pos);\n    }\n  }\n\n  private _filterFields(value: string): SourceFieldsOptionsParams[] {\n    const keywordRegex = new RegExp(\n      value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, ''),\n      'gi'\n    );\n    return this.fields$.value.filter((val) =>\n      keywordRegex.test(\n        val.alias.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '')\n      )\n    );\n  }\n\n  private _filterValues(value: string): string[] {\n    const keywordRegex = new RegExp(\n      value\n        .replace(/[.*+?^${}()|[\\]\\\\]/g, '')\n        .toString()\n        .normalize('NFD')\n        .replace(/[\\u0300-\\u036f]/g, ''),\n      'gi'\n    );\n\n    return this.selectedField$.value?.values?.filter(\n      (val) =>\n        val &&\n        keywordRegex.test(\n          val\n            .toString()\n            .normalize('NFD')\n            .replace(/[\\u0300-\\u036f]/g, '')\n        )\n    );\n  }\n\n  clearSelectedField() {\n    this.currentFilter.propertyName = '';\n    this.selectedField$.next(undefined);\n    this.clearProperty();\n  }\n\n  isClearable(pos?: number) {\n    const detectedProperty = this.detectProperty(pos);\n    if (detectedProperty) {\n      return this.currentFilter[detectedProperty];\n    }\n  }\n  clearProperty(pos?: number) {\n    // this.autoCompleteInputValues.closePanel();\n    const detectedProperty = this.detectProperty(pos);\n    if (detectedProperty) {\n      return (this.currentFilter[detectedProperty] = '');\n    }\n  }\n\n  toggleFilterState(event) {\n    this.datasource.options.ogcFilters.interfaceOgcFilters.find(\n      (f) => f.filterid === this.currentFilter.filterid\n    ).active = event.checked;\n    this.refreshFilters();\n  }\n\n  deleteFilter() {\n    const ogcFilters: OgcFiltersOptions = this.datasource.options.ogcFilters;\n    ogcFilters.interfaceOgcFilters = ogcFilters.interfaceOgcFilters.filter(\n      (f) => f.filterid !== this.currentFilter.filterid\n    );\n    this.refreshFilters();\n  }\n\n  changeLogical(logical: string) {\n    this.currentFilter.parentLogical = logical;\n    this.refreshFilters();\n  }\n\n  changeOperator(operator: string) {\n    this.currentFilter.operator = operator;\n    this.currentFilterIsSpatial();\n\n    if (\n      this.currentFilterIsSpatial$.value &&\n      this.currentFilter.wkt_geometry.length === 0\n    ) {\n      this.changeSpatialSelector(this.currentFilter.igoSpatialSelector);\n    } else {\n      this.refreshFilters();\n    }\n  }\n\n  changeField(field: string) {\n    this.currentFilter.propertyName = field;\n    this.selectedField$.next(\n      this.fields$.value.find((f) => f.name === this.currentFilter.propertyName)\n    );\n    this.refreshFilters();\n  }\n\n  // Issue with mapserver 7.2 and Postgis layers. Fixed in 7.4\n  // Due to this issue, the checkbox is hide.\n  changeCaseSensitive(matchCase) {\n    this.currentFilter.matchCase = matchCase.checked;\n    this.refreshFilters();\n  }\n\n  changeProperty(value: any, pos?: number, refreshFilter = true) {\n    const detectedProperty = this.detectProperty(pos);\n    if (detectedProperty) {\n      this.datasource.options.ogcFilters.interfaceOgcFilters.find(\n        (f) => f.filterid === this.currentFilter.filterid\n      )[detectedProperty] = value;\n\n      if (refreshFilter) {\n        this.refreshFilters();\n      }\n    }\n  }\n\n  changeNumericProperty(value, pos: number) {\n    this.changeProperty(parseFloat(value), pos);\n  }\n\n  changeSpatialSelector(value: any) {\n    this.currentFilter.igoSpatialSelector = value;\n\n    if (value === 'fixedExtent') {\n      this.changeMapExtentGeometry(false);\n    }\n    this.currentFilterIsSpatial();\n    this.refreshFilters();\n  }\n\n  changeSNRC(value: any) {\n    this.snrc = value;\n    this.changeSNRCGeometry();\n  }\n\n  changeSNRCGeometry() {\n    const interfaceOgcFilter =\n      this.datasource.options.ogcFilters.interfaceOgcFilters.find(\n        (f) => f.filterid === this.currentFilter.filterid\n      );\n    if (!interfaceOgcFilter) {\n      return;\n    }\n\n    if (this.snrc && this.currentFilter.igoSpatialSelector === 'snrc') {\n      this.currentFilter.wkt_geometry = this.wktService.snrcToWkt(\n        this.snrc,\n        this.map.projection\n      ).wktPoly;\n    }\n    this.refreshFilters();\n  }\n\n  changeMapExtentGeometry(refresh = true) {\n    const interfaceOgcFilter =\n      this.datasource.options.ogcFilters.interfaceOgcFilters.find(\n        (f) => f.filterid === this.currentFilter.filterid\n      );\n    if (!interfaceOgcFilter) {\n      return;\n    }\n\n    if (this.currentFilter.igoSpatialSelector === 'fixedExtent') {\n      this.currentFilter.wkt_geometry = this.wktService.extentToWkt(\n        this.map.projection,\n        this.map.viewController.getExtent(),\n        this.map.projection\n      ).wktPoly;\n    }\n    if (refresh) {\n      this.refreshFilters();\n    }\n  }\n\n  detectProperty(pos?: number): string {\n    switch (this.currentFilter.operator) {\n      case OgcFilterOperator.PropertyIsNotEqualTo:\n      case OgcFilterOperator.PropertyIsEqualTo:\n      case OgcFilterOperator.PropertyIsGreaterThan:\n      case OgcFilterOperator.PropertyIsGreaterThanOrEqualTo:\n      case OgcFilterOperator.PropertyIsLessThan:\n      case OgcFilterOperator.PropertyIsLessThanOrEqualTo:\n        return 'expression';\n      case OgcFilterOperator.PropertyIsLike:\n        return 'pattern';\n      case OgcFilterOperator.PropertyIsBetween:\n        return pos && pos === 1\n          ? 'lowerBoundary'\n          : pos && pos === 2\n            ? 'upperBoundary'\n            : undefined;\n      case OgcFilterOperator.During:\n        return pos && pos === 1\n          ? 'begin'\n          : pos && pos === 2\n            ? 'end'\n            : undefined;\n      default:\n        return;\n    }\n  }\n\n  private currentFilterIsSpatial() {\n    let isSpatial = false;\n    if (this.currentFilter) {\n      isSpatial =\n        [\n          OgcFilterOperator.Contains,\n          OgcFilterOperator.Intersects,\n          OgcFilterOperator.Within\n        ].indexOf(this.currentFilter.operator) !== -1;\n    }\n    this.currentFilterIsSpatial$.next(isSpatial);\n  }\n\n  isTemporalOperator() {\n    return (\n      this.currentFilter.operator.toLowerCase() ===\n      this.ogcFilterOperator.During.toLowerCase()\n    );\n  }\n}\n","<div class=\"ogc-filter-form-container\">\n  <mat-checkbox\n    tooltip-position=\"below\"\n    matTooltipShowDelay=\"500\"\n    [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n    (click)=\"$event.stopPropagation()\"\n    (change)=\"toggleFilterState($event)\"\n    [checked]=\"currentFilter.active\"\n  >\n  </mat-checkbox>\n\n  <mat-form-field\n    [ngClass]=\"{\n      logical:\n        activeFilters.indexOf(currentFilter) !== 0 &&\n        currentFilter.active === true,\n      logicalHidden:\n        activeFilters.indexOf(currentFilter) === 0 ||\n        currentFilter.active !== true\n    }\"\n  >\n    <mat-select\n      [disabled]=\"!currentFilter.active\"\n      [value]=\"currentFilter.parentLogical\"\n      tooltip-position=\"above\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"\n        currentFilter.parentLogical\n          ? ('igo.geo.operators.tooltip.' + currentFilter.parentLogical\n            | translate)\n          : ''\n      \"\n      (selectionChange)=\"changeLogical($event.value)\"\n    >\n      <mat-option\n        [value]=\"ogcFilterOperator.And\"\n        tooltip-position=\"above\"\n        matTooltipShowDelay=\"500\"\n        [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\"\n      >\n        {{ 'igo.geo.operators.And' | translate }}\n      </mat-option>\n      <mat-option\n        [value]=\"ogcFilterOperator.Or\"\n        tooltip-position=\"above\"\n        matTooltipShowDelay=\"500\"\n        [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\"\n      >\n        {{ 'igo.geo.operators.Or' | translate }}\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n\n  <mat-form-field\n    class=\"field\"\n    *ngIf=\"\n      (currentFilterIsSpatial$ | async) === false &&\n      (fields$ | async) &&\n      (fields$ | async).length > 0 &&\n      (fields$ | async)[0].name !== ''\n    \"\n    (mouseenter)=\"inputClearable = 'selectField'\"\n    (mouseleave)=\"inputClearable = undefined\"\n    [floatLabel]=\"floatLabel\"\n  >\n    <input\n      matInput\n      [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\n      [disabled]=\"!currentFilter.active\"\n      [matAutocomplete]=\"autoCompleteField\"\n      [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\n      tooltip-position=\"above\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"\n        (selectedField$ | async)\n          ? (selectedField$ | async).alias\n          : ('igo.geo.sourceFields.selectField' | translate)\n      \"\n      (input)=\"updateFieldsList($any($event.target).value)\"\n    />\n    <mat-autocomplete\n      #autoCompleteField=\"matAutocomplete\"\n      (optionSelected)=\"changeField($event.option.id)\"\n    >\n      <mat-option\n        *ngFor=\"let field of filteredFields$ | async\"\n        matTooltipShowDelay=\"500\"\n        [value]=\"field.alias\"\n        [id]=\"field.name\"\n        [matTooltip]=\"field.alias\"\n      >\n        {{ field.alias }}\n      </mat-option>\n    </mat-autocomplete>\n    <button\n      *ngIf=\"\n        currentFilter.propertyName &&\n        inputClearable === 'selectField' &&\n        currentFilter.active\n      \"\n      matSuffix\n      mat-icon-button\n      aria-label=\"Clear\"\n      [disabled]=\"!currentFilter.active\"\n      (click)=\"clearSelectedField()\"\n    >\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n\n  <mat-form-field\n    [ngClass]=\"{\n      operator: (currentFilterIsSpatial$ | async) === false,\n      dualInput: (currentFilterIsSpatial$ | async)\n    }\"\n    [floatLabel]=\"floatLabel\"\n  >\n    <mat-select\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"\n        currentFilter.operator\n          ? ('igo.geo.operators.tooltip.' + currentFilter.operator | translate)\n          : ('igo.geo.filter.selectOperator' | translate)\n      \"\n      [disabled]=\"!currentFilter.active\"\n      [value]=\"currentFilter.operator\"\n      (selectionChange)=\"changeOperator($event.value)\"\n    >\n      <mat-option\n        *ngFor=\"let operator of ogcFilterOperators$ | async | keyvalue\"\n        tooltip-position=\"above\"\n        matTooltipShowDelay=\"500\"\n        [value]=\"operator.key\"\n        [matTooltip]=\"'igo.geo.operators.tooltip.' + operator.key | translate\"\n      >\n        {{ 'igo.geo.operators.' + operator.key | translate }}\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n\n  <mat-form-field\n    class=\"spatialSelector\"\n    *ngIf=\"currentFilterIsSpatial$ | async\"\n  >\n    <mat-select\n      [disabled]=\"!currentFilter.active\"\n      [value]=\"currentFilter.igoSpatialSelector\"\n      (selectionChange)=\"changeSpatialSelector($event.value)\"\n    >\n      <mat-option\n        *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\n        [value]=\"igoSpatialSelector.type\"\n      >\n        {{ 'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate }}\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n\n  <mat-form-field\n    class=\"singleInput\"\n    *ngIf=\"['expression', 'pattern'].indexOf(detectProperty()) !== -1\"\n    (mouseenter)=\"inputClearable = 'selectProperty'\"\n    (mouseleave)=\"inputClearable = undefined\"\n    [floatLabel]=\"floatLabel\"\n  >\n    <input\n      matInput\n      [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n      [disabled]=\"!currentFilter.active\"\n      [matAutocomplete]=\"autoCompleteValues\"\n      [value]=\"\n        detectProperty() === 'expression'\n          ? currentFilter.expression\n          : currentFilter.pattern\n      \"\n      tooltip-position=\"above\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"\n        detectProperty() === 'expression'\n          ? currentFilter.expression || ''\n          : currentFilter.pattern || ''\n      \"\n      (input)=\"updateValuesList($any($event.target).value)\"\n    />\n    <mat-autocomplete\n      #autoCompleteValues=\"matAutocomplete\"\n      (optionSelected)=\"changeProperty($event.option.value)\"\n    >\n      <mat-option\n        *ngFor=\"let value of filteredValues$ | async\"\n        matTooltipShowDelay=\"500\"\n        [value]=\"value\"\n        [matTooltip]=\"value\"\n      >\n        {{ value }}\n      </mat-option>\n    </mat-autocomplete>\n    <button\n      *ngIf=\"\n        isClearable() &&\n        inputClearable === 'selectProperty' &&\n        currentFilter.active\n      \"\n      matSuffix\n      mat-icon-button\n      aria-label=\"Clear\"\n      [disabled]=\"!currentFilter.active\"\n      (click)=\"clearProperty()\"\n    >\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n\n  <div class=\"igo-layer-button-group\">\n    <button\n      mat-icon-button\n      collapsibleButton\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n      color=\"warn\"\n      (click)=\"deleteFilter()\"\n    >\n      <mat-icon>delete</mat-icon>\n    </button>\n  </div>\n\n  <mat-form-field\n    class=\"snrc\"\n    *ngIf=\"\n      (currentFilterIsSpatial$ | async) &&\n      currentFilter.igoSpatialSelector === 'snrc'\n    \"\n    (mouseenter)=\"inputClearable = 'selectSNRC'\"\n    (mouseleave)=\"inputClearable = undefined\"\n    [floatLabel]=\"floatLabel\"\n  >\n    <input\n      matInput\n      [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\n      [value]=\"currentFilter.igoSNRC\"\n      tooltip-position=\"above\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\n      (input)=\"changeSNRC($any($event.target).value)\"\n    />\n    <button\n      *ngIf=\"currentFilter.igoSNRC\"\n      matSuffix\n      mat-icon-button\n      aria-label=\"Clear\"\n      [disabled]=\"\n        !currentFilter.active &&\n        inputClearable === 'selectSNRC' &&\n        currentFilter.active\n      \"\n      (click)=\"currentFilter.igoSNRC = ''\"\n    >\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n\n  <ng-container\n    *ngIf=\"\n      (currentFilterIsSpatial$ | async) &&\n      currentFilter.igoSpatialSelector === 'fixedExtent'\n    \"\n  >\n    <button\n      [disabled]=\"!currentFilter.active\"\n      *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\n      matSuffix\n      mat-icon-button\n      [disabled]=\"!currentFilter.active\"\n      (click)=\"changeMapExtentGeometry()\"\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\"\n    >\n      <mat-icon>zoom_out_map</mat-icon>\n    </button>\n  </ng-container>\n</div>\n\n<div class=\"ogc-filter-form-container\">\n  <mat-form-field\n    class=\"dualInput\"\n    *ngIf=\"\n      !isTemporalOperator() &&\n      ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\n    \"\n    (mouseenter)=\"inputClearable = 'selectProperty1'\"\n    (mouseleave)=\"inputClearable = undefined\"\n    [floatLabel]=\"floatLabel\"\n  >\n    <input\n      matInput\n      [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n      [disabled]=\"!currentFilter.active\"\n      [matAutocomplete]=\"autoDualValueOperator1\"\n      type=\"number\"\n      [value]=\"\n        detectProperty(1) === 'lowerBoundary'\n          ? currentFilter.lowerBoundary\n          : currentFilter.begin\n      \"\n      (input)=\"updateValuesList($any($event.target).value, 1)\"\n    />\n    <mat-autocomplete\n      #autoDualValueOperator1=\"matAutocomplete\"\n      (optionSelected)=\"changeNumericProperty($event.option.value, 1)\"\n    >\n      <mat-option\n        *ngFor=\"let value of filteredValues$ | async\"\n        matTooltipShowDelay=\"500\"\n        [value]=\"value\"\n        [matTooltip]=\"value\"\n      >\n        {{ value }}\n      </mat-option>\n    </mat-autocomplete>\n    <button\n      *ngIf=\"\n        isClearable(1) &&\n        inputClearable === 'selectProperty1' &&\n        currentFilter.active\n      \"\n      matSuffix\n      mat-icon-button\n      aria-label=\"Clear\"\n      [disabled]=\"!currentFilter.active\"\n      (click)=\"clearProperty(1)\"\n    >\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n\n  <mat-form-field\n    class=\"dualInput\"\n    *ngIf=\"\n      !isTemporalOperator() &&\n      ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\n    \"\n    (mouseenter)=\"inputClearable = 'selectProperty2'\"\n    (mouseleave)=\"inputClearable = undefined\"\n    [floatLabel]=\"floatLabel\"\n  >\n    <input\n      matInput\n      [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n      [disabled]=\"!currentFilter.active\"\n      [matAutocomplete]=\"autoDualValueOperator2\"\n      type=\"number\"\n      [value]=\"\n        detectProperty(2) === 'upperBoundary'\n          ? currentFilter.upperBoundary\n          : currentFilter.end\n      \"\n      (input)=\"updateValuesList($any($event.target).value, 2)\"\n    />\n    <mat-autocomplete\n      #autoDualValueOperator2=\"matAutocomplete\"\n      (optionSelected)=\"changeNumericProperty($event.option.value, 2)\"\n    >\n      <mat-option\n        *ngFor=\"let value of filteredValues$ | async\"\n        matTooltipShowDelay=\"500\"\n        [value]=\"value\"\n        [matTooltip]=\"value\"\n      >\n        {{ value }}\n      </mat-option>\n    </mat-autocomplete>\n    <button\n      *ngIf=\"\n        isClearable(2) &&\n        inputClearable === 'selectProperty2' &&\n        currentFilter.active\n      \"\n      matSuffix\n      mat-icon-button\n      aria-label=\"Clear\"\n      [disabled]=\"!currentFilter.active\"\n      (click)=\"clearProperty(2)\"\n    >\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n</div>\n\n<igo-ogc-filter-time\n  *ngIf=\"isTemporalOperator()\"\n  [datasource]=\"datasource\"\n  [currentFilter]=\"currentFilter\"\n  (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n>\n</igo-ogc-filter-time>\n","import { AsyncPipe, NgFor, NgIf, NgStyle } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnInit,\n  ViewChild\n} from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder,\n  UntypedFormGroup,\n  Validators\n} from '@angular/forms';\nimport {\n  MatAutocompleteModule,\n  MatAutocompleteTrigger\n} from '@angular/material/autocomplete';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatOption, MatOptionModule } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelect, MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { DOMOptions, DOMService, DOMValue } from '@igo2/common/dom';\nimport { ConfigService } from '@igo2/core/config';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Observable, Subject, of } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { WMSDataSource } from '../../datasource/shared/datasources/wms-datasource';\nimport { OgcFilterWriter } from '../../filter/shared/ogc-filter';\nimport {\n  IgoOgcFilterObject,\n  OgcAutocomplete,\n  OgcFilterableDataSource,\n  OgcPushButton,\n  OgcSelectorBundle,\n  SelectorGroup\n} from '../../filter/shared/ogc-filter.interface';\nimport { MapBase } from '../../map';\nimport { OgcFilterTimeComponent } from '../ogc-filter-time/ogc-filter-time.component';\nimport { OgcFilterOperator } from '../shared/ogc-filter.enum';\nimport { OGCFilterService } from '../shared/ogc-filter.service';\n\n@Component({\n  selector: 'igo-ogc-filter-selection',\n  templateUrl: './ogc-filter-selection.component.html',\n  styleUrls: ['./ogc-filter-selection.component.scss'],\n  providers: [DOMService],\n  standalone: true,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    NgFor,\n    NgIf,\n    MatDividerModule,\n    MatFormFieldModule,\n    MatSelectModule,\n    MatTooltipModule,\n    MatOptionModule,\n    MatButtonToggleModule,\n    NgStyle,\n    MatCheckboxModule,\n    MatRadioModule,\n    MatIconModule,\n    MatInputModule,\n    MatAutocompleteModule,\n    OgcFilterTimeComponent,\n    AsyncPipe,\n    IgoLanguageModule,\n    MatChipsModule\n  ]\n})\nexport class OgcFilterSelectionComponent implements OnInit {\n  @ViewChild('selection') sel: MatSelect;\n  @ViewChild(MatAutocompleteTrigger, { read: MatAutocompleteTrigger })\n  matAutocomplete: MatAutocompleteTrigger;\n\n  @Input() refreshFilters: () => void;\n\n  @Input() datasource: OgcFilterableDataSource;\n\n  @Input() map: MapBase;\n\n  @Input() checkboxesIndex = 5;\n  @Input() radioButtonsIndex = 5;\n  @Input() baseIndex = 5;\n\n  @Input()\n  get currentFilter(): any {\n    return this._currentFilter;\n  }\n  set currentFilter(value) {\n    this._currentFilter = value;\n    if (this._currentFilter?.sliderOptions) {\n      this._currentFilter.sliderOptions.enabled = false; // remove slider toggle (animation temporelle)\n    }\n  }\n  private _currentFilter: any;\n  private inputChangeAutocomplete = new Subject<void>();\n\n  public ogcFilterOperator = OgcFilterOperator;\n\n  public form: UntypedFormGroup;\n  private ogcFilterWriter: OgcFilterWriter;\n  public color = 'primary';\n  public selectAllSelected = false;\n  public selectEnabled$ = new BehaviorSubject(undefined);\n  public selectEnableds$ = new BehaviorSubject([]);\n  public autocompleteEnableds$ = new BehaviorSubject<string[]>([]);\n  public filteredOgcAutocomplete: Record<string, Observable<any[]>> = {};\n\n  public applyFiltersTimeout;\n\n  get ogcFiltersSelectors() {\n    const ogcSelector = [];\n    if (this.datasource?.options?.ogcFilters?.pushButtons) {\n      ogcSelector.push(this.datasource?.options?.ogcFilters?.pushButtons);\n    }\n    if (this.datasource?.options?.ogcFilters?.checkboxes) {\n      ogcSelector.push(this.datasource?.options?.ogcFilters?.checkboxes);\n    }\n    if (this.datasource?.options?.ogcFilters?.radioButtons) {\n      ogcSelector.push(this.datasource?.options?.ogcFilters?.radioButtons);\n    }\n    if (this.datasource?.options?.ogcFilters?.select) {\n      ogcSelector.push(this.datasource?.options?.ogcFilters?.select);\n    }\n    if (this.datasource?.options?.ogcFilters?.autocomplete) {\n      ogcSelector.push(this.datasource?.options?.ogcFilters?.autocomplete);\n    }\n    ogcSelector.sort((a, b) => {\n      if (a.order < b.order) {\n        return -1;\n      }\n      if (a.order > b.order) {\n        return 1;\n      }\n      return 0;\n    });\n    return ogcSelector;\n  }\n\n  get currentPushButtonsGroup() {\n    return this.form.get('pushButtonsGroup').value;\n  }\n  set currentPushButtonsGroup(value) {\n    this.form.patchValue({ pushButtonsGroup: value });\n  }\n\n  get currentCheckboxesGroup() {\n    return this.form.get('checkboxesGroup').value;\n  }\n  set currentCheckboxesGroup(value) {\n    this.form.patchValue({ checkboxesGroup: value });\n  }\n\n  get currentRadioButtonsGroup() {\n    return this.form.get('radioButtonsGroup').value;\n  }\n  set currentRadioButtonsGroup(value) {\n    this.form.patchValue({ radioButtonsGroup: value });\n  }\n\n  get currentSelectGroup() {\n    return this.form.get('selectGroup').value;\n  }\n  set currentSelectGroup(value) {\n    this.form.patchValue({ selectGroup: value });\n    this.cdRef.detectChanges();\n  }\n\n  get currentAutocompleteGroup() {\n    return this.form.get('autocompleteGroup').value;\n  }\n  set currentAutocompleteGroup(value) {\n    this.form.patchValue({ autocompleteGroup: value });\n    this.cdRef.detectChanges();\n  }\n\n  get selectEnabled() {\n    return this.selectEnabled$.value;\n  }\n\n  set selectEnabled(value) {\n    this.selectEnabled$.next(value);\n    clearTimeout(this.applyFiltersTimeout);\n    this.currentSelectGroup.computedSelectors.forEach((compSelect) => {\n      compSelect.selectors?.forEach((selector) => {\n        value === selector\n          ? (selector.enabled = true)\n          : (selector.enabled = false);\n      });\n    });\n\n    this.applyFiltersTimeout = setTimeout(() => {\n      this.applyFilters();\n    }, 750);\n  }\n\n  get selectEnableds() {\n    return this.selectEnableds$.value;\n  }\n\n  set selectEnableds(value) {\n    this.selectEnableds$.next(value);\n    clearTimeout(this.applyFiltersTimeout);\n    this.currentSelectGroup.computedSelectors.forEach((compSelect) => {\n      compSelect.selectors?.forEach((selector) => {\n        value.includes(selector)\n          ? (selector.enabled = true)\n          : (selector.enabled = false);\n      });\n    });\n\n    this.applyFiltersTimeout = setTimeout(() => {\n      this.applyFilters();\n    }, 750);\n  }\n\n  get autocompleteEnableds() {\n    return this.autocompleteEnableds$.value;\n  }\n\n  // Updates the currentAutocompleteGroup and applies filters\n  set autocompleteEnableds(filterList) {\n    this.autocompleteEnableds$.next(filterList);\n    clearTimeout(this.applyFiltersTimeout);\n    this.currentAutocompleteGroup.computedSelectors.forEach((compSelect) => {\n      compSelect.selectors?.forEach((selector) => {\n        selector.enabled = false;\n        for (const filter of filterList) {\n          if (filter === selector.title) {\n            selector.enabled = true;\n          }\n        }\n      });\n    });\n\n    this.applyFiltersTimeout = setTimeout(() => {\n      this.applyFilters();\n    }, 750);\n  }\n\n  // Indicates the checked status of autocomplete checkboxes\n  checkedStatus(autocompleteFilter: string): boolean {\n    return this.autocompleteEnableds.includes(autocompleteFilter);\n  }\n\n  constructor(\n    private ogcFilterService: OGCFilterService,\n    private formBuilder: UntypedFormBuilder,\n    private domService: DOMService,\n    private configService: ConfigService,\n    private cdRef: ChangeDetectorRef\n  ) {\n    this.ogcFilterWriter = new OgcFilterWriter();\n    this.buildForm();\n  }\n\n  private buildForm() {\n    this.form = this.formBuilder.group({\n      pushButtons: [''],\n      radioButtons: [''],\n      pushButtonsGroup: ['', [Validators.required]],\n      checkboxesGroup: ['', [Validators.required]],\n      radioButtonsGroup: ['', [Validators.required]],\n      selectGroup: ['', [Validators.required]],\n      select: [''],\n      selectMulti: [''],\n      autocompleteGroup: ['', [Validators.required]],\n      autocomplete: ['']\n    });\n  }\n\n  getPushButtonsGroups(): SelectorGroup[] {\n    if (this.datasource?.options?.ogcFilters?.pushButtons) {\n      return this.datasource.options.ogcFilters.pushButtons.groups;\n    }\n  }\n\n  getCheckboxesGroups(): SelectorGroup[] {\n    if (this.datasource?.options?.ogcFilters?.checkboxes) {\n      return this.datasource.options.ogcFilters.checkboxes.groups;\n    }\n  }\n\n  getRadioButtonsGroups(): SelectorGroup[] {\n    if (this.datasource?.options?.ogcFilters?.radioButtons) {\n      return this.datasource.options.ogcFilters.radioButtons.groups;\n    }\n  }\n\n  getSelectGroups(): SelectorGroup[] {\n    if (this.datasource?.options?.ogcFilters?.select) {\n      return this.datasource.options.ogcFilters.select.groups;\n    }\n  }\n\n  getAutocompleteGroups(): SelectorGroup[] {\n    if (this.datasource?.options?.ogcFilters?.autocomplete) {\n      return this.datasource.options.ogcFilters.autocomplete.groups;\n    }\n  }\n\n  async ngOnInit() {\n    if (this.datasource.options.ogcFilters) {\n      if (this.datasource.options.ogcFilters.pushButtons) {\n        this.currentPushButtonsGroup =\n          this.datasource.options.ogcFilters.pushButtons.groups.find(\n            (group) => group.enabled\n          ) || this.datasource.options.ogcFilters.pushButtons.groups[0];\n      }\n      if (this.datasource.options.ogcFilters.checkboxes) {\n        this.currentCheckboxesGroup =\n          this.datasource.options.ogcFilters.checkboxes.groups.find(\n            (group) => group.enabled\n          ) || this.datasource.options.ogcFilters.checkboxes.groups[0];\n      }\n      if (this.datasource.options.ogcFilters.radioButtons) {\n        this.currentRadioButtonsGroup =\n          this.datasource.options.ogcFilters.radioButtons.groups.find(\n            (group) => group.enabled\n          ) || this.datasource.options.ogcFilters.radioButtons.groups[0];\n      }\n      if (this.datasource.options.ogcFilters.select) {\n        this.currentSelectGroup =\n          this.datasource.options.ogcFilters.select.groups.find(\n            (group) => group.enabled\n          ) || this.datasource.options.ogcFilters.select.groups[0];\n        this.initSelectEnabled();\n        await this.getSelectDomValues();\n      }\n      if (this.datasource.options.ogcFilters.autocomplete) {\n        this.currentAutocompleteGroup =\n          this.datasource.options.ogcFilters.autocomplete.groups.find(\n            (group) => group.enabled\n          ) || this.datasource.options.ogcFilters.autocomplete.groups[0];\n        this.initAutocompleteEnableds();\n        await this.getAutocompleteDomValues();\n      }\n      this.applyFilters();\n    }\n\n    this.form\n      .get('pushButtonsGroup')\n      .valueChanges.pipe(debounceTime(750))\n      .subscribe(() => {\n        this.onPushButtonsChangeGroup();\n        this.applyFilters();\n      });\n    this.form\n      .get('checkboxesGroup')\n      .valueChanges.pipe(debounceTime(750))\n      .subscribe(() => {\n        this.onCheckboxesChangeGroup();\n        this.applyFilters();\n      });\n    this.form\n      .get('radioButtonsGroup')\n      .valueChanges.pipe(debounceTime(750))\n      .subscribe(() => {\n        this.onRadioButtonsChangeGroup();\n        this.applyFilters();\n      });\n    this.form\n      .get('selectGroup')\n      .valueChanges.pipe(debounceTime(750))\n      .subscribe(() => {\n        this.onSelectChangeGroup();\n        this.applyFilters();\n      });\n    this.form\n      .get('autocompleteGroup')\n      .valueChanges.pipe(debounceTime(750))\n      .subscribe(() => {\n        this.onAutocompleteChangeGroup();\n        this.applyFilters();\n      });\n    this.form\n      .get('pushButtons')\n      .valueChanges.pipe(debounceTime(750))\n      .subscribe(() => {\n        this.applyFilters();\n      });\n    this.form\n      .get('radioButtons')\n      .valueChanges.pipe(debounceTime(750))\n      .subscribe(() => {\n        this.applyFilters();\n      });\n\n    // Debounce time for autocomplete filter options - value chosen arbitrarily\n    this.inputChangeAutocomplete.pipe().subscribe(() => {\n      this.getAutocompleteDomValues();\n    });\n  }\n\n  private initSelectEnabled() {\n    const enableds = [];\n    let enabled;\n    this.currentSelectGroup.computedSelectors.forEach((compSelect) => {\n      if (compSelect.multiple) {\n        compSelect.selectors?.forEach((selector) => {\n          if (selector.enabled) {\n            enableds.push(selector);\n          }\n        });\n        this.selectEnableds = enableds;\n        this.form.controls['selectMulti'].setValue(enableds);\n      } else {\n        compSelect.selectors?.forEach((selector) => {\n          if (selector.enabled) {\n            enabled = selector;\n          }\n        });\n        this.form.controls['select'].reset(enabled);\n        this.selectEnabled$.subscribe((value) => {\n          if (this.form.controls['select'].value !== value) {\n            this.form.controls['select'].setValue(value);\n          }\n        });\n        this.selectEnabled = enabled;\n      }\n    });\n  }\n\n  private initAutocompleteEnableds() {\n    const enabled = [];\n    this.currentAutocompleteGroup.computedSelectors.forEach((compSelect) => {\n      compSelect.selectors?.forEach((selector) => {\n        if (selector.enabled) {\n          const dom = {\n            id: selector.filters.expression,\n            value: selector.title\n          };\n          enabled.push(selector.title);\n          this.form.controls['autocomplete'].setValue(dom);\n        }\n      });\n      this.autocompleteEnableds = enabled;\n    });\n  }\n\n  getToolTip(selector): string {\n    let toolTip;\n    if (selector.tooltip) {\n      if (Array.isArray(selector.tooltip)) {\n        toolTip = selector.tooltip.join('\\n');\n      } else {\n        toolTip = selector.tooltip;\n      }\n    }\n    return toolTip || '';\n  }\n\n  async getSelectDomValues() {\n    for (const bundle of this.datasource.options.ogcFilters.select.bundles) {\n      if (bundle.domSelectors) {\n        let domValues;\n        for (const domSelector of bundle.domSelectors) {\n          let filterDOM;\n          for (const domOptions of this.configService.getConfig<DOMOptions[]>(\n            'dom'\n          )) {\n            if (\n              domSelector.id === domOptions.id ||\n              domSelector.name === domOptions.name\n            ) {\n              filterDOM = {\n                id: domOptions.id,\n                url: domOptions.url,\n                name: domOptions.name,\n                values: domOptions.values\n              };\n            }\n          }\n          filterDOM.url\n            ? (domValues = (await this.domService.getDomValuesFromURL(\n                filterDOM\n              )) as DOMValue[])\n            : (domValues = filterDOM.values);\n\n          if (domValues) {\n            const newBundle = bundle;\n            newBundle.selectors = [];\n            let selector;\n            for (const value of domValues) {\n              if (bundle.multiple) {\n                let enabled;\n                this.selectEnableds?.find((sel) => sel.title === value.value)\n                  ? (enabled = true)\n                  : (enabled = false);\n                selector = {\n                  title: value.value,\n                  enabled,\n                  filters: {\n                    operator: domSelector.operator,\n                    propertyName: domSelector.propertyName,\n                    expression: value.id\n                  }\n                };\n              } else {\n                selector = {\n                  title: value.value,\n                  enabled:\n                    this.selectEnabled?.title === value.value ? true : false,\n                  filters: {\n                    operator: domSelector.operator,\n                    propertyName: domSelector.propertyName,\n                    expression: value.id\n                  }\n                };\n              }\n              newBundle.selectors.push(selector);\n            }\n            this.getSelectGroups()\n              .find((group) => group.ids.includes(newBundle.id))\n              .computedSelectors.find(\n                (comp) => comp.title === newBundle.title\n              ).selectors = newBundle.selectors;\n          }\n        }\n        this.initSelectEnabled();\n      }\n    }\n  }\n\n  // Trigger filter refresh (with debounce)\n  onInputChange() {\n    this.inputChangeAutocomplete.next();\n  }\n\n  async getAutocompleteDomValues() {\n    for (const bundle of this.datasource.options.ogcFilters.autocomplete\n      .bundles) {\n      if (bundle.domSelectors) {\n        let domValues: DOMValue[];\n        for (const domSelector of bundle.domSelectors) {\n          let filterDOM: DOMOptions;\n          for (const configDom of this.configService.getConfig<DOMOptions[]>(\n            'dom'\n          )) {\n            if (\n              domSelector.id === configDom.id ||\n              domSelector.name === configDom.name\n            ) {\n              filterDOM = {\n                id: configDom.id,\n                url: configDom.url,\n                name: configDom.name,\n                values: configDom.values\n              };\n            }\n          }\n          filterDOM.url\n            ? (domValues = (await this.domService.getDomValuesFromURL(\n                filterDOM\n              )) as DOMValue[])\n            : (domValues = filterDOM.values);\n\n          if (domValues) {\n            const newBundle: OgcSelectorBundle = bundle;\n            newBundle.selectors = [];\n            let selector: OgcAutocomplete;\n            for (const domValue of domValues) {\n              selector = {\n                title: domValue.id as string,\n                enabled: this.autocompleteEnableds?.includes(domValue.value)\n                  ? true\n                  : false,\n                filters: {\n                  operator: domSelector.operator,\n                  propertyName: domSelector.propertyName,\n                  expression: domValue.value\n                }\n              };\n              newBundle.selectors.push(selector);\n            }\n            this.getAutocompleteGroups()\n              .find((group: SelectorGroup) => group.ids.includes(newBundle.id))\n              .computedSelectors.find(\n                (computedSelector) => computedSelector.title === newBundle.title\n              ).selectors = newBundle.selectors;\n          }\n        }\n\n        this.filteredOgcAutocomplete[bundle.id] = new Observable<any[]>();\n        this.cdRef.detectChanges();\n        this.filteredOgcAutocomplete[bundle.id] = of(domValues);\n      }\n    }\n  }\n\n  getButtonColor(pushButton: OgcPushButton) {\n    let styles;\n    if (pushButton.color && pushButton.enabled) {\n      styles = {\n        'background-color': `rgba(${pushButton.color})`\n      };\n    }\n    return styles;\n  }\n\n  bundleIsVertical(bundle: OgcSelectorBundle): boolean {\n    return bundle.vertical ? bundle.vertical : false;\n  }\n\n  private onPushButtonsChangeGroup() {\n    this.getPushButtonsGroups().map((group) => (group.enabled = false));\n    this.getPushButtonsGroups().find(\n      (group) => group === this.currentPushButtonsGroup\n    ).enabled = true;\n  }\n\n  private onCheckboxesChangeGroup() {\n    this.getCheckboxesGroups().map((group) => (group.enabled = false));\n    this.getCheckboxesGroups().find(\n      (group) => group === this.currentCheckboxesGroup\n    ).enabled = true;\n  }\n\n  private onRadioButtonsChangeGroup() {\n    this.getRadioButtonsGroups().map((group) => (group.enabled = false));\n    this.getRadioButtonsGroups().find(\n      (group) => group === this.currentRadioButtonsGroup\n    ).enabled = true;\n  }\n\n  private onSelectChangeGroup() {\n    this.getSelectGroups().map((group) => (group.enabled = false));\n    this.getSelectGroups().find(\n      (group) => group === this.currentSelectGroup\n    ).enabled = true;\n  }\n\n  private onAutocompleteChangeGroup() {\n    this.getAutocompleteGroups().map((group) => (group.enabled = false));\n    this.getAutocompleteGroups().find(\n      (group) => group === this.currentAutocompleteGroup\n    ).enabled = true;\n  }\n\n  onSelectionChange(currentOgcSelection?, selectorType?) {\n    clearTimeout(this.applyFiltersTimeout);\n    if (selectorType === 'radioButton') {\n      this.emptyRadioButtons();\n    }\n\n    if (currentOgcSelection) {\n      currentOgcSelection.enabled = !currentOgcSelection.enabled;\n    }\n    this.applyFiltersTimeout = setTimeout(() => {\n      this.applyFilters();\n    }, 750);\n  }\n\n  emptyRadioButtons() {\n    this.currentRadioButtonsGroup.computedSelectors.forEach((compSelect) => {\n      compSelect.selectors.map((selector) => (selector.enabled = false));\n\n      this.applyFiltersTimeout = setTimeout(() => {\n        this.applyFilters();\n      }, 750);\n    });\n  }\n\n  emptySelect() {\n    this.selectEnabled = undefined;\n  }\n\n  emptyAutocomplete() {\n    this.autocompleteEnableds = [];\n    this.form.controls['autocomplete'].setValue('');\n    this.form.controls['autocomplete'].markAsUntouched();\n  }\n\n  toggleAllSelection() {\n    if (this.selectAllSelected) {\n      const enableds = [];\n      this.currentSelectGroup.computedSelectors.forEach((compSelect) => {\n        compSelect.selectors?.forEach((selector) => {\n          enableds.push(selector);\n        });\n      });\n      this.sel.options.forEach((item: MatOption) => item.select());\n      this.selectEnableds = enableds;\n    } else {\n      this.sel.options.forEach((item: MatOption) => item.deselect());\n      this.selectEnableds = [];\n    }\n  }\n\n  selectOptionClick(value, bundle, event?) {\n    if (bundle.multiple) {\n      const enableds = this.selectEnableds;\n      let newStatus = true;\n      this.sel.options.forEach((item: MatOption) => {\n        if (!item.selected) {\n          newStatus = false;\n        }\n      });\n      this.selectAllSelected = newStatus;\n      if (event.isUserInput) {\n        if (enableds.length) {\n          for (const enabled of enableds) {\n            if (enabled.title === value.title) {\n              if (enabled.enabled && value.enabled) {\n                enableds.splice(enableds.indexOf(enabled), 1);\n                this.selectEnableds = enableds;\n                break;\n              }\n            } else if (enableds.indexOf(enabled) === enableds.length - 1) {\n              enableds.push(value);\n              this.selectEnableds = enableds;\n              break;\n            }\n          }\n        } else {\n          enableds.push(value);\n          this.selectEnableds = enableds;\n        }\n      }\n    } else {\n      this.selectEnabled = value;\n    }\n  }\n\n  toggleAutocompleteOption(event: Event, toggledFilter: string) {\n    event.stopPropagation();\n    this.toggleSelection(toggledFilter);\n  }\n\n  toggleSelection(toggledFilter: string) {\n    if (this.autocompleteEnableds.includes(toggledFilter)) {\n      this.autocompleteEnableds = this.autocompleteEnableds.filter(\n        (enabledFilter) => enabledFilter !== toggledFilter\n      );\n    } else {\n      this.autocompleteEnableds = [...this.autocompleteEnableds, toggledFilter];\n    }\n  }\n\n  // Value displayed in the autocomplete input box\n  displayFn(): string {\n    return '';\n  }\n\n  // Applies filters based on the current group of all filter selection types\n  private applyFilters() {\n    let filterQueryString = '';\n    const conditions = [];\n    const currentGroups = [\n      this.currentPushButtonsGroup,\n      this.currentCheckboxesGroup,\n      this.currentRadioButtonsGroup,\n      this.currentSelectGroup,\n      this.currentAutocompleteGroup\n    ];\n    for (const currentGroup of currentGroups) {\n      if (currentGroup.computedSelectors) {\n        currentGroup.computedSelectors.map((selectorBundle) => {\n          const bundleCondition = [];\n          selectorBundle.selectors\n            ?.filter((ogcSelector) => ogcSelector.enabled === true)\n            .forEach((enabledSelector) =>\n              bundleCondition.push(enabledSelector.filters)\n            );\n          if (bundleCondition.length >= 1) {\n            if (bundleCondition.length === 1) {\n              conditions.push(bundleCondition[0]);\n            } else {\n              conditions.push({\n                logical: selectorBundle.logical,\n                filters: bundleCondition\n              });\n            }\n          }\n        });\n      }\n    }\n    if (this.isTemporalOperator() && this._currentFilter.active) {\n      conditions.push(\n        this.datasource.options.ogcFilters.interfaceOgcFilters[0]\n      );\n    }\n    if (conditions.length >= 1) {\n      filterQueryString = this.ogcFilterWriter.buildFilter(\n        conditions.length === 1\n          ? conditions[0]\n          : ({ logical: 'And', filters: conditions } as IgoOgcFilterObject)\n      );\n    }\n    if (this.datasource.options.type === 'wms') {\n      this.ogcFilterService.filterByOgc(\n        this.datasource as WMSDataSource,\n        filterQueryString\n      );\n    }\n    if (this.datasource.options.type === 'wfs') {\n      // TODO: Check how to prevent wfs to refresh when filter icon is pushed...\n      this.datasource.ol.refresh();\n    }\n    this.datasource.setOgcFilters(this.datasource.options.ogcFilters, true);\n  }\n\n  isMoreResults(bundle, type) {\n    const selectorsLength = bundle.selectors.length;\n    const index =\n      type === 'radio' ? this.radioButtonsIndex : this.checkboxesIndex;\n    return selectorsLength > index;\n  }\n\n  displayMoreResults(type) {\n    type === 'radio'\n      ? (this.radioButtonsIndex += 5)\n      : (this.checkboxesIndex += 5);\n    return;\n  }\n\n  isLessResults(bundle, type) {\n    const selectorsLength = bundle.selectors.length;\n    const index =\n      type === 'radio' ? this.radioButtonsIndex : this.checkboxesIndex;\n    return this.baseIndex !== index && selectorsLength > this.baseIndex;\n  }\n\n  displayLessResults(type) {\n    type === 'radio'\n      ? (this.radioButtonsIndex = this.baseIndex)\n      : (this.checkboxesIndex = this.baseIndex);\n    return;\n  }\n\n  isTemporalOperator() {\n    return (\n      this.currentFilter?.operator?.toLowerCase() ===\n      this.ogcFilterOperator.During.toLowerCase()\n    );\n  }\n\n  changeProperty(value: any, pos?: number, refreshFilter = true) {\n    const detectedProperty = this.detectProperty(pos);\n    if (detectedProperty) {\n      this.datasource.options.ogcFilters.interfaceOgcFilters.find(\n        (filter) => filter.filterid === this.currentFilter.filterid\n      )[detectedProperty] = value;\n\n      if (refreshFilter) {\n        this.applyFilters();\n      }\n    }\n  }\n\n  detectProperty(pos?: number): string {\n    switch (this.currentFilter.operator) {\n      case OgcFilterOperator.PropertyIsNotEqualTo:\n      case OgcFilterOperator.PropertyIsEqualTo:\n      case OgcFilterOperator.PropertyIsGreaterThan:\n      case OgcFilterOperator.PropertyIsGreaterThanOrEqualTo:\n      case OgcFilterOperator.PropertyIsLessThan:\n      case OgcFilterOperator.PropertyIsLessThanOrEqualTo:\n        return 'expression';\n      case OgcFilterOperator.PropertyIsLike:\n        return 'pattern';\n      case OgcFilterOperator.PropertyIsBetween:\n        return pos && pos === 1\n          ? 'lowerBoundary'\n          : pos && pos === 2\n            ? 'upperBoundary'\n            : undefined;\n      case OgcFilterOperator.During:\n        return pos && pos === 1\n          ? 'begin'\n          : pos && pos === 2\n            ? 'end'\n            : undefined;\n      default:\n        return;\n    }\n  }\n}\n","<form [formGroup]=\"form\">\n  <div *ngFor=\"let selector of ogcFiltersSelectors\">\n    <div\n      class=\"pushButtonGroups\"\n      *ngIf=\"selector.selectorType === 'pushButton'\"\n    >\n      <mat-divider></mat-divider>\n      <div class=\"groupsSelector\" *ngIf=\"getPushButtonsGroups().length > 1\">\n        <mat-form-field>\n          <mat-select\n            formControlName=\"pushButtonsGroup\"\n            [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            [(value)]=\"currentPushButtonsGroup\"\n          >\n            <mat-option\n              *ngFor=\"let selectorGroup of getPushButtonsGroups()\"\n              [value]=\"selectorGroup\"\n              >{{ selectorGroup.title }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n      <ng-container\n        *ngFor=\"let bundle of currentPushButtonsGroup.computedSelectors\"\n      >\n        <h3>{{ bundle.title }}</h3>\n        <mat-button-toggle-group\n          formControlName=\"pushButtons\"\n          class=\"mat-typography\"\n          appearance=\"legacy\"\n          vertical=\"{{ bundleIsVertical(bundle) }}\"\n          multiple=\"true\"\n        >\n          <mat-button-toggle\n            *ngFor=\"let ogcPushButton of bundle.selectors\"\n            [matTooltip]=\"getToolTip(ogcPushButton)\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            matTooltipClass=\"material-tooltip\"\n            [ngStyle]=\"getButtonColor(ogcPushButton)\"\n            [checked]=\"ogcPushButton.enabled\"\n            (change)=\"onSelectionChange(ogcPushButton, selector.selectorType)\"\n            [value]=\"ogcPushButton\"\n            >{{ ogcPushButton.title }}\n          </mat-button-toggle>\n        </mat-button-toggle-group>\n      </ng-container>\n    </div>\n\n    <div class=\"checkboxGroups\" *ngIf=\"selector.selectorType === 'checkbox'\">\n      <mat-divider></mat-divider>\n      <div class=\"groupsSelector\" *ngIf=\"getCheckboxesGroups().length > 1\">\n        <mat-form-field>\n          <mat-select\n            formControlName=\"checkboxesGroup\"\n            [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            [(value)]=\"currentCheckboxesGroup\"\n          >\n            <mat-option\n              *ngFor=\"let selectorGroup of getCheckboxesGroups()\"\n              [value]=\"selectorGroup\"\n              >{{ selectorGroup.title }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n      <ng-container\n        *ngFor=\"let bundle of currentCheckboxesGroup.computedSelectors\"\n      >\n        <h3>{{ bundle.title }}</h3>\n        <div class=\"checkboxes mat-typography\">\n          <mat-checkbox\n            *ngFor=\"let ogcCheckbox of bundle.selectors\"\n            [matTooltip]=\"getToolTip(ogcCheckbox)\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            matTooltipClass=\"material-tooltip\"\n            [checked]=\"ogcCheckbox.enabled\"\n            (change)=\"onSelectionChange(ogcCheckbox, selector.selectorType)\"\n            [value]=\"ogcCheckbox\"\n            >{{ ogcCheckbox.title }}\n          </mat-checkbox>\n        </div>\n        <p\n          *ngIf=\"\n            isLessResults(bundle, 'checkbox') ||\n            isMoreResults(bundle, 'checkbox')\n          \"\n        >\n          <u\n            *ngIf=\"isLessResults(bundle, 'checkbox')\"\n            class=\"lessResults mat-typography\"\n            (click)=\"displayLessResults('checkbox')\"\n            >{{ 'igo.geo.filter.displayLessResults' | translate }}\n          </u>\n          <u\n            *ngIf=\"isMoreResults(bundle, 'checkbox')\"\n            class=\"moreResults mat-typography\"\n            (click)=\"displayMoreResults('checkbox')\"\n            >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n          </u>\n        </p>\n      </ng-container>\n    </div>\n\n    <div\n      class=\"radioButtonGroups\"\n      *ngIf=\"selector.selectorType === 'radioButton'\"\n    >\n      <mat-divider></mat-divider>\n      <div class=\"groupsSelector\" *ngIf=\"getRadioButtonsGroups().length > 1\">\n        <mat-form-field>\n          <mat-select\n            formControlName=\"radioButtonsGroup\"\n            [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            [(value)]=\"currentRadioButtonsGroup\"\n          >\n            <mat-option\n              *ngFor=\"let selectorGroup of getRadioButtonsGroups()\"\n              [value]=\"selectorGroup\"\n              >{{ selectorGroup.title }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n      <ng-container\n        *ngFor=\"let bundle of currentRadioButtonsGroup.computedSelectors\"\n      >\n        <h3>{{ bundle.title }}</h3>\n        <mat-radio-group formControlName=\"radioButtons\" class=\"mat-typography\">\n          <mat-radio-button\n            *ngIf=\"bundle.unfiltered\"\n            [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            matTooltipClass=\"material-tooltip\"\n            (change)=\"emptyRadioButtons()\"\n            >{{ 'igo.geo.filter.resetFilters' | translate }}\n          </mat-radio-button>\n          <mat-radio-button\n            *ngFor=\"let ogcRadioButton of bundle.selectors\"\n            [matTooltip]=\"getToolTip(ogcRadioButton)\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            matTooltipClass=\"material-tooltip\"\n            [checked]=\"ogcRadioButton.enabled\"\n            (change)=\"onSelectionChange(ogcRadioButton, selector.selectorType)\"\n            [value]=\"ogcRadioButton\"\n            >{{ ogcRadioButton.title }}\n          </mat-radio-button>\n          <p\n            *ngIf=\"\n              isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\n            \"\n          >\n            <u\n              *ngIf=\"isLessResults(bundle, 'radio')\"\n              class=\"lessResults mat-typography\"\n              (click)=\"displayLessResults('radio')\"\n              >{{ 'igo.geo.filter.displayLessResults' | translate }}\n            </u>\n            <u\n              *ngIf=\"isMoreResults(bundle, 'radio')\"\n              class=\"moreResults mat-typography\"\n              (click)=\"displayMoreResults('radio')\"\n              >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n            </u>\n          </p>\n        </mat-radio-group>\n      </ng-container>\n    </div>\n\n    <div class=\"selectGroups\" *ngIf=\"selector.selectorType === 'select'\">\n      <mat-divider></mat-divider>\n      <div class=\"groupsSelector\" *ngIf=\"getSelectGroups().length > 1\">\n        <mat-form-field>\n          <mat-select\n            formControlName=\"selectGroup\"\n            [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            [(value)]=\"currentSelectGroup\"\n          >\n            <mat-option\n              *ngFor=\"let selectorGroup of getSelectGroups()\"\n              [value]=\"selectorGroup\"\n              >{{ selectorGroup.title }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n      <ng-container *ngFor=\"let bundle of currentSelectGroup.computedSelectors\">\n        <h3>{{ bundle.title }}</h3>\n        <div class=\"groupsSelector\">\n          <mat-button\n            *ngIf=\"bundle.unfiltered && !bundle.multiple\"\n            mat-icon-button\n            color=\"warn\"\n            [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            matTooltipClass=\"material-tooltip\"\n            (click)=\"emptySelect()\"\n          >\n            <mat-icon>filter_alt_off</mat-icon>\n          </mat-button>\n          <mat-form-field\n            [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n          >\n            <div *ngIf=\"bundle.multiple; else notMulti\">\n              <mat-select\n                #selection\n                [multiple]=\"bundle.multiple\"\n                [placeholder]=\"bundle.title\"\n                formControlName=\"selectMulti\"\n              >\n                <div class=\"checkboxes mat-typography\">\n                  <mat-checkbox\n                    *ngIf=\"bundle.multiple\"\n                    [(ngModel)]=\"selectAllSelected\"\n                    [ngModelOptions]=\"{ standalone: true }\"\n                    (change)=\"toggleAllSelection()\"\n                    >Tous\n                  </mat-checkbox>\n                </div>\n                <mat-option\n                  *ngFor=\"let ogcSelect of bundle.selectors\"\n                  [matTooltip]=\"getToolTip(ogcSelect)\"\n                  tooltip-position=\"below\"\n                  matTooltipDelay=\"500\"\n                  matTooltipClass=\"material-tooltip\"\n                  (onSelectionChange)=\"\n                    selectOptionClick($event.source.value, bundle, $event)\n                  \"\n                  [value]=\"ogcSelect\"\n                  >{{ ogcSelect.title }}\n                </mat-option>\n              </mat-select>\n            </div>\n            <ng-template #notMulti>\n              <mat-select [placeholder]=\"bundle.title\" formControlName=\"select\">\n                <mat-option\n                  *ngFor=\"let ogcSelect of bundle.selectors\"\n                  [matTooltip]=\"getToolTip(ogcSelect)\"\n                  tooltip-position=\"below\"\n                  matTooltipDelay=\"500\"\n                  matTooltipClass=\"material-tooltip\"\n                  [value]=\"ogcSelect\"\n                  (onSelectionChange)=\"\n                    selectOptionClick($event.source.value, bundle)\n                  \"\n                  >{{ ogcSelect.title }}\n                </mat-option>\n              </mat-select>\n            </ng-template>\n          </mat-form-field>\n        </div>\n      </ng-container>\n    </div>\n\n    <div\n      class=\"autocompleteGroups\"\n      *ngIf=\"selector.selectorType === 'autocomplete'\"\n    >\n      <mat-divider></mat-divider>\n      <div class=\"groupsSelector\" *ngIf=\"getAutocompleteGroups().length > 1\">\n        <mat-form-field>\n          <mat-select\n            formControlName=\"autocompleteGroup\"\n            [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            [(value)]=\"currentAutocompleteGroup\"\n          >\n            <mat-option\n              *ngFor=\"let autocompleteGroup of getAutocompleteGroups()\"\n              [value]=\"autocompleteGroup\"\n              >{{ autocompleteGroup.title }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n      <ng-container\n        *ngFor=\"let bundle of currentAutocompleteGroup.computedSelectors\"\n      >\n        <h3>{{ bundle.title }}</h3>\n        <div class=\"groupsSelector\">\n          <mat-button\n            *ngIf=\"bundle.unfiltered\"\n            mat-icon-button\n            color=\"warn\"\n            [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n            tooltip-position=\"below\"\n            matTooltipShowDelay=\"500\"\n            matTooltipClass=\"material-tooltip\"\n            (click)=\"emptyAutocomplete()\"\n          >\n            <mat-icon>filter_alt_off</mat-icon>\n          </mat-button>\n          <mat-form-field\n            *ngIf=\"filteredOgcAutocomplete[bundle.id]\"\n            floatLabel=\"always\"\n            [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n          >\n            <mat-label>{{ bundle.title }}</mat-label>\n            <mat-chip-set\n              *ngIf=\"\n                filteredOgcAutocomplete[bundle.id] && (bundle.showChips ?? true)\n              \"\n            >\n              <mat-chip\n                *ngFor=\"let autocompleteEnabled of autocompleteEnableds\"\n                (removed)=\"toggleSelection(autocompleteEnabled)\"\n              >\n                {{ autocompleteEnabled }}\n                <button\n                  matChipRemove\n                  [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n                >\n                  <mat-icon>cancel</mat-icon>\n                </button>\n              </mat-chip>\n            </mat-chip-set>\n            <input\n              matInput\n              type=\"text\"\n              formControlName=\"autocomplete\"\n              #input\n              [matAutocomplete]=\"auto\"\n              (input)=\"onInputChange()\"\n            />\n            <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn\">\n              <mat-option\n                *ngFor=\"\n                  let ogcAutocomplete of filteredOgcAutocomplete[bundle.id]\n                    | async\n                \"\n                id=\"mat-option\"\n                [matTooltip]=\"getToolTip(ogcAutocomplete)\"\n              >\n                <div\n                  (click)=\"\n                    toggleAutocompleteOption($event, ogcAutocomplete.value)\n                  \"\n                >\n                  <mat-checkbox\n                    id=\"mat-checkbox\"\n                    color=\"primary\"\n                    [checked]=\"checkedStatus(ogcAutocomplete.value)\"\n                    (click)=\"\n                      toggleAutocompleteOption($event, ogcAutocomplete.value)\n                    \"\n                  >\n                  </mat-checkbox>\n                  {{ ogcAutocomplete.value }}\n                </div>\n              </mat-option>\n            </mat-autocomplete>\n          </mat-form-field>\n        </div>\n      </ng-container>\n    </div>\n  </div>\n</form>\n\n<div *ngIf=\"isTemporalOperator()\">\n  <mat-divider></mat-divider>\n  <h3 *ngIf=\"!currentFilter.title\">\n    {{ 'igo.geo.filter.reportingDate' | translate }}\n  </h3>\n  <h3 *ngIf=\"currentFilter.title\">{{ currentFilter.title }}</h3>\n  <igo-ogc-filter-time\n    [datasource]=\"datasource\"\n    [currentFilter]=\"currentFilter\"\n    (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n  >\n  </igo-ogc-filter-time>\n</div>\n","import { NgFor, NgIf } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { MAT_AUTOCOMPLETE_DEFAULT_OPTIONS } from '@angular/material/autocomplete';\nimport { MAT_SELECT_CONFIG } from '@angular/material/select';\n\nimport { ListItemDirective } from '@igo2/common/list';\n\nimport { MapBase } from '../../map';\nimport { OgcFilterFormComponent } from '../ogc-filter-form/ogc-filter-form.component';\nimport { OgcFilterSelectionComponent } from '../ogc-filter-selection/ogc-filter-selection.component';\nimport { OgcFilterableDataSource } from '../shared/ogc-filter.interface';\n\n@Component({\n  selector: 'igo-ogc-filterable-form',\n  templateUrl: './ogc-filterable-form.component.html',\n  styles: ['::ng-deep.igo-overlay-panel-width { min-width: fit-content;}'],\n  providers: [\n    {\n      provide: MAT_SELECT_CONFIG,\n      useValue: { overlayPanelClass: 'igo-overlay-panel-width' }\n    },\n    {\n      provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\n      useValue: { overlayPanelClass: 'igo-overlay-panel-width' }\n    }\n  ],\n  standalone: true,\n  imports: [\n    NgIf,\n    OgcFilterSelectionComponent,\n    ListItemDirective,\n    NgFor,\n    OgcFilterFormComponent\n  ]\n})\nexport class OgcFilterableFormComponent {\n  @Input() datasource: OgcFilterableDataSource;\n\n  @Input() map: MapBase;\n\n  @Input() refreshFilters: () => void;\n\n  get refreshFunc() {\n    return this.refreshFilters;\n  }\n\n  get advancedOgcFilters(): boolean {\n    if (this.datasource.options.ogcFilters) {\n      return this.datasource.options.ogcFilters.advancedOgcFilters;\n    }\n    return;\n  }\n\n  get currentFilter(): any {\n    return this.datasource.options.ogcFilters.interfaceOgcFilters\n      ? this.datasource.options.ogcFilters.interfaceOgcFilters[0]\n      : undefined;\n  }\n\n  public color = 'primary';\n}\n","<igo-ogc-filter-selection\n  *ngIf=\"!advancedOgcFilters\"\n  igoListItem\n  [refreshFilters]=\"refreshFunc\"\n  [datasource]=\"datasource\"\n  [map]=\"map\"\n  [currentFilter]=\"currentFilter\"\n>\n</igo-ogc-filter-selection>\n\n<ng-template\n  *ngIf=\"advancedOgcFilters && datasource.options.ogcFilters.editable\"\n  ngFor\n  let-currentFilter\n  [ngForOf]=\"datasource.options.ogcFilters.interfaceOgcFilters\"\n>\n  <igo-ogc-filter-form\n    [currentFilter]=\"currentFilter\"\n    [refreshFilters]=\"refreshFunc\"\n    [datasource]=\"datasource\"\n    [map]=\"map\"\n  >\n  </igo-ogc-filter-form>\n</ng-template>\n","import { AsyncPipe, NgClass, NgIf, NgStyle } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { CollapseDirective } from '@igo2/common/collapsible';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { WFSDataSourceOptionsParams } from '../../datasource/shared/datasources/wfs-datasource.interface';\nimport { WMSDataSource } from '../../datasource/shared/datasources/wms-datasource';\nimport { OgcFilterOperator } from '../../filter/shared/ogc-filter.enum';\nimport { Layer } from '../../layer';\nimport { LayerLegendComponent } from '../../layer/layer-legend/layer-legend.component';\nimport { MapBase } from '../../map';\nimport { OgcFilterableFormComponent } from '../ogc-filterable-form/ogc-filterable-form.component';\nimport { OgcFilterWriter } from '../shared/ogc-filter';\nimport {\n  OgcFilterableDataSource,\n  OgcFiltersOptions,\n  OgcInterfaceFilterOptions\n} from '../shared/ogc-filter.interface';\nimport { OGCFilterService } from '../shared/ogc-filter.service';\n\n@Component({\n  selector: 'igo-ogc-filterable-item',\n  templateUrl: './ogc-filterable-item.component.html',\n  styleUrls: ['./ogc-filterable-item.component.scss'],\n  standalone: true,\n  imports: [\n    NgClass,\n    MatListModule,\n    NgIf,\n    MatIconModule,\n    CollapseDirective,\n    NgStyle,\n    MatTooltipModule,\n    MatButtonModule,\n    LayerLegendComponent,\n    OgcFilterableFormComponent,\n    MatDividerModule,\n    MatCheckboxModule,\n    FormsModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ],\n  providers: [OGCFilterService]\n})\nexport class OgcFilterableItemComponent implements OnInit, OnDestroy {\n  public color = 'primary';\n  private lastRunOgcFilter;\n  private defaultLogicalParent = OgcFilterOperator.And;\n  public hasActiveSpatialFilter = false;\n  public filtersAreEditable = true;\n  public filtersCollapsed = true;\n  public hasSelector = false;\n  showLegend$ = new BehaviorSubject<boolean>(false);\n  inResolutionRange$ = new BehaviorSubject<boolean>(true);\n  private resolution$$: Subscription;\n  private ogcFilterWriter;\n\n  @Input() layer: Layer;\n\n  @Input() map: MapBase;\n\n  @Input() header = true;\n\n  get refreshFunc() {\n    return this.refreshFilters.bind(this);\n  }\n\n  get datasource(): OgcFilterableDataSource {\n    return this.layer.dataSource as OgcFilterableDataSource;\n  }\n\n  constructor(private ogcFilterService: OGCFilterService) {\n    this.ogcFilterWriter = new OgcFilterWriter();\n  }\n\n  ngOnInit() {\n    if (this.layer.visible) {\n      this.filtersCollapsed = false;\n    }\n\n    const ogcFilters = this.datasource.options.ogcFilters;\n    if (\n      (ogcFilters.pushButtons && ogcFilters.pushButtons.bundles.length > 0) ||\n      (ogcFilters.checkboxes && ogcFilters.checkboxes.bundles.length > 0) ||\n      (ogcFilters.radioButtons && ogcFilters.radioButtons.bundles.length > 0) ||\n      (ogcFilters.select && ogcFilters.select.bundles.length > 0) ||\n      (ogcFilters.autocomplete && ogcFilters.autocomplete.bundles.length > 0)\n    ) {\n      if (ogcFilters.advancedOgcFilters === undefined) {\n        ogcFilters.advancedOgcFilters = false;\n      }\n      this.hasSelector = true;\n    }\n\n    switch (this.datasource.options.type) {\n      case 'wms':\n        this.ogcFilterService.setOgcWMSFiltersOptions(this.datasource);\n        break;\n      case 'wfs':\n        this.ogcFilterService.setOgcWFSFiltersOptions(this.datasource);\n        break;\n      default:\n        break;\n    }\n\n    if (ogcFilters) {\n      if (ogcFilters.interfaceOgcFilters) {\n        this.lastRunOgcFilter = JSON.parse(\n          JSON.stringify(ogcFilters.interfaceOgcFilters)\n        );\n        if (\n          ogcFilters.interfaceOgcFilters.filter((f) => f.wkt_geometry).length >=\n          1\n        ) {\n          this.hasActiveSpatialFilter = true;\n        }\n      }\n\n      this.filtersAreEditable = ogcFilters.editable\n        ? ogcFilters.editable\n        : false;\n    }\n\n    const resolution$ = this.layer.map.viewController.resolution$;\n    this.resolution$$ = resolution$.subscribe(() => {\n      this.inResolutionRange$.next(this.layer.isInResolutionsRange);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.resolution$$.unsubscribe();\n  }\n\n  addFilterToSequence() {\n    this.filtersCollapsed = false;\n    const interfaceOgcFilters: OgcInterfaceFilterOptions[] =\n      this.datasource.options.ogcFilters.interfaceOgcFilters;\n    const arr = interfaceOgcFilters || [];\n    const lastLevel = arr.length === 0 ? 0 : arr[arr.length - 1].level;\n    let firstFieldName = '';\n    const includedFields = this.datasource.options.sourceFields.filter(\n      (f) => !f.excludeFromOgcFilters\n    );\n    if (includedFields.length > 0) {\n      firstFieldName =\n        includedFields[0].name === undefined ? '' : includedFields[0].name;\n    }\n    let fieldNameGeometry;\n    const datasourceOptions = this.datasource\n      .options as WFSDataSourceOptionsParams;\n    if (datasourceOptions.fieldNameGeometry) {\n      fieldNameGeometry = datasourceOptions.fieldNameGeometry;\n    } else if (\n      (this.datasource.options as any).paramsWFS &&\n      (this.datasource.options as any).paramsWFS.fieldNameGeometry\n    ) {\n      fieldNameGeometry = (this.datasource.options as any).paramsWFS\n        .fieldNameGeometry;\n    }\n    const allowedOperators = this.ogcFilterWriter.computeAllowedOperators(\n      this.datasource.options.sourceFields,\n      firstFieldName,\n      this.datasource.options.ogcFilters.allowedOperatorsType\n    );\n    const firstOperatorName = Object.keys(allowedOperators)[0];\n\n    arr.push(\n      this.ogcFilterWriter.addInterfaceFilter(\n        {\n          propertyName: firstFieldName,\n          operator: firstOperatorName,\n          active: true,\n          igoSpatialSelector: 'fixedExtent',\n          srsName: this.map.projection\n        } as OgcInterfaceFilterOptions,\n        fieldNameGeometry,\n        lastLevel,\n        this.defaultLogicalParent\n      )\n    );\n    this.datasource.options.ogcFilters.interfaceOgcFilters = arr;\n  }\n\n  refreshFilters(force?: boolean) {\n    if (force === true) {\n      this.lastRunOgcFilter = undefined;\n    }\n    const ogcFilters: OgcFiltersOptions = this.datasource.options.ogcFilters;\n    const activeFilters = ogcFilters.interfaceOgcFilters\n      ? ogcFilters.interfaceOgcFilters.filter((f) => f.active === true)\n      : [];\n    if (activeFilters.length === 0) {\n      ogcFilters.filters = undefined;\n      ogcFilters.filtered = false;\n    }\n    if (activeFilters.length > 1) {\n      activeFilters[0].parentLogical = activeFilters[1].parentLogical;\n    }\n    if (\n      activeFilters.filter(\n        (af) => ['Contains', 'Intersects', 'Within'].indexOf(af.operator) !== -1\n      ).length === 0\n    ) {\n      this.hasActiveSpatialFilter = false;\n    } else {\n      this.hasActiveSpatialFilter = true;\n    }\n\n    if (\n      !(JSON.stringify(this.lastRunOgcFilter) === JSON.stringify(activeFilters))\n    ) {\n      if (this.layer.dataSource.options.type === 'wfs') {\n        const ogcDataSource: any = this.layer.dataSource;\n        const ogcLayer: OgcFiltersOptions = ogcDataSource.options.ogcFilters;\n        ogcLayer.filters =\n          this.ogcFilterWriter.rebuiltIgoOgcFilterObjectFromSequence(\n            activeFilters\n          );\n        this.layer.dataSource.ol.refresh();\n      } else if (\n        this.layer.dataSource.options.type === 'wms' &&\n        ogcFilters.enabled\n      ) {\n        let rebuildFilter = '';\n        if (activeFilters.length >= 1) {\n          const ogcDataSource: any = this.layer.dataSource;\n          const ogcLayer: OgcFiltersOptions = ogcDataSource.options.ogcFilters;\n          ogcLayer.filters =\n            this.ogcFilterWriter.rebuiltIgoOgcFilterObjectFromSequence(\n              activeFilters\n            );\n          rebuildFilter = this.ogcFilterWriter.buildFilter(\n            ogcLayer.filters,\n            undefined,\n            undefined,\n            (this.layer.dataSource.options as any).fieldNameGeometry,\n            ogcDataSource.options\n          );\n        }\n        this.ogcFilterService.filterByOgc(\n          this.datasource as WMSDataSource,\n          rebuildFilter\n        );\n        this.datasource.options.ogcFilters.filtered =\n          activeFilters.length === 0 ? false : true;\n      }\n\n      this.lastRunOgcFilter = JSON.parse(JSON.stringify(activeFilters));\n    } else {\n      // identical filter. Nothing triggered\n    }\n    (this.layer.dataSource as OgcFilterableDataSource).setOgcFilters(\n      ogcFilters,\n      true\n    );\n  }\n\n  public setVisible() {\n    this.layer.visible = true;\n  }\n\n  public isAdvancedOgcFilters(): boolean {\n    return this.datasource.options.ogcFilters.advancedOgcFilters;\n  }\n\n  public addFilterDisabled(): boolean {\n    return (\n      !this.datasource.options.sourceFields ||\n      this.datasource.options.sourceFields.length === 0\n    );\n  }\n\n  private changeOgcFiltersAdvancedOgcFilters(value: boolean) {\n    this.datasource.options.ogcFilters.advancedOgcFilters = value;\n  }\n\n  changeOgcFilterType(isAdvancedOgcFilters) {\n    this.changeOgcFiltersAdvancedOgcFilters(isAdvancedOgcFilters.checked);\n    if (isAdvancedOgcFilters.checked) {\n      this.refreshFilters(true);\n    }\n  }\n\n  private toggleLegend(collapsed: boolean) {\n    this.layer.legendCollapsed = collapsed;\n    this.showLegend$.next(!collapsed);\n  }\n\n  toggleLegendOnClick() {\n    if (!this.filtersCollapsed) {\n      this.toggleLegend(this.showLegend$.value);\n    }\n  }\n\n  toggleFiltersCollapsed() {\n    this.filtersCollapsed = !this.filtersCollapsed;\n  }\n}\n","<div [ngClass]=\"{ 'separate-item': header === true }\">\n  <mat-list-item>\n    <mat-icon\n      *ngIf=\"header\"\n      class=\"igo-chevron\"\n      matListItemIcon\n      igoCollapse\n      [target]=\"ogcFilters\"\n      [collapsed]=\"filtersCollapsed\"\n      (click)=\"toggleFiltersCollapsed()\"\n      >expand_less\n    </mat-icon>\n    <span\n      *ngIf=\"header\"\n      matListItemTitle\n      [ngStyle]=\"{ cursor: filtersCollapsed ? 'default' : 'pointer' }\"\n      [matTooltip]=\"layer.title\"\n      matTooltipShowDelay=\"500\"\n      (click)=\"toggleLegendOnClick()\"\n    >\n      {{ layer.title }}\n    </span>\n    <div matListItemMeta>\n      <button\n        *ngIf=\"isAdvancedOgcFilters() && filtersAreEditable\"\n        [disabled]=\"addFilterDisabled()\"\n        mat-icon-button\n        tooltip-position=\"below\"\n        matTooltipShowDelay=\"500\"\n        [matTooltip]=\"'igo.geo.filter.addFilter' | translate\"\n        [color]=\"color\"\n        (click)=\"addFilterToSequence()\"\n      >\n        <mat-icon>add</mat-icon>\n      </button>\n      <button\n        *ngIf=\"header\"\n        mat-icon-button\n        [color]=\"layer.visible ? 'primary' : 'default'\"\n        collapsibleButton\n        tooltip-position=\"below\"\n        matTooltipShowDelay=\"500\"\n        [matTooltip]=\"\n          layer.visible\n            ? ('igo.geo.layer.hideLayer' | translate)\n            : ('igo.geo.layer.showLayer' | translate)\n        \"\n        (click)=\"layer.visible = !layer.visible\"\n      >\n        <mat-icon\n          [ngClass]=\"{ disabled: (inResolutionRange$ | async) === false }\"\n          >{{ layer.visible ? 'visibility' : 'visibility_off' }}\n        </mat-icon>\n      </button>\n    </div>\n  </mat-list-item>\n\n  <div #ogcFilters>\n    <div *ngIf=\"header\" #legend class=\"igo-layer-legend-container\">\n      <igo-layer-legend *ngIf=\"showLegend$ | async\" [layer]=\"layer\">\n      </igo-layer-legend>\n    </div>\n    <igo-ogc-filterable-form\n      [datasource]=\"datasource\"\n      [map]=\"map\"\n      [refreshFilters]=\"refreshFunc\"\n    >\n    </igo-ogc-filterable-form>\n\n    <section\n      *ngIf=\"hasSelector && filtersAreEditable\"\n      class=\"mat-typography advancedOgcFilters\"\n    >\n      <mat-divider></mat-divider>\n      <mat-checkbox\n        (change)=\"changeOgcFilterType($event)\"\n        [(ngModel)]=\"datasource.options.ogcFilters.advancedOgcFilters\"\n      >\n        {{ 'igo.geo.filter.advancedOgcFilters' | translate }}\n      </mat-checkbox>\n    </section>\n  </div>\n</div>\n","import { NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnInit\n} from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ListItemDirective } from '@igo2/common/list';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { Layer } from '../../layer';\nimport { MapBase } from '../../map';\nimport { OgcFilterableItemComponent } from '../ogc-filterable-item';\nimport {\n  IgoOgcSelector,\n  OgcFilterableDataSourceOptions\n} from '../shared/ogc-filter.interface';\n\n@Component({\n  selector: 'igo-ogc-filter-button',\n  templateUrl: './ogc-filter-button.component.html',\n  styleUrls: ['./ogc-filter-button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    MatBadgeModule,\n    OgcFilterableItemComponent,\n    ListItemDirective,\n    IgoLanguageModule\n  ]\n})\nexport class OgcFilterButtonComponent implements OnInit {\n  public options: OgcFilterableDataSourceOptions;\n\n  get badge() {\n    const filter = this.options.ogcFilters as any;\n    let cnt = 0;\n    if (filter && !filter.advancedOgcFilters) {\n      if (filter.pushButtons) {\n        const pushButtons = filter.pushButtons as IgoOgcSelector;\n        const currentPushButtonGroup = pushButtons.groups.find(\n          (gr) => gr.enabled\n        );\n        let cntPushButtons = 0;\n        if (currentPushButtonGroup) {\n          currentPushButtonGroup.computedSelectors?.map(\n            (cb) =>\n              (cntPushButtons += (cb.selectors as any)?.filter(\n                (button) => button.enabled\n              ).length)\n          );\n        }\n        cnt += cntPushButtons;\n      }\n      if (filter.checkboxes) {\n        const checkboxes = filter.checkboxes as IgoOgcSelector;\n        const currentCheckboxGroup = checkboxes.groups.find((gr) => gr.enabled);\n        let cntCheckboxes = 0;\n        if (currentCheckboxGroup) {\n          currentCheckboxGroup.computedSelectors?.map(\n            (cb) =>\n              (cntCheckboxes += (cb.selectors as any)?.filter(\n                (checkbox) => checkbox.enabled\n              ).length)\n          );\n        }\n        cnt += cntCheckboxes;\n      }\n      if (filter.radioButtons) {\n        const radioButtons = filter.radioButtons as IgoOgcSelector;\n        const currentRadioButtonsGroup = radioButtons.groups.find(\n          (gr) => gr.enabled\n        );\n        let cntRadioButtons = 0;\n        if (currentRadioButtonsGroup) {\n          currentRadioButtonsGroup.computedSelectors?.map(\n            (cb) =>\n              (cntRadioButtons += (cb.selectors as any)?.filter(\n                (radio) => radio.enabled\n              ).length)\n          );\n        }\n        cnt += cntRadioButtons;\n      }\n      if (filter.select) {\n        const select = filter.select as IgoOgcSelector;\n        const currentSelectGroup = select.groups.find((gr) => gr.enabled);\n        let cntSelect = 0;\n        if (currentSelectGroup) {\n          currentSelectGroup.computedSelectors?.map(\n            (cb) =>\n              (cntSelect += (cb.selectors as any)?.filter(\n                (multi) => multi.enabled\n              ).length)\n          );\n        }\n        cnt += cntSelect;\n      }\n      if (filter.autocomplete) {\n        const autocomplete = filter.autocomplete as IgoOgcSelector;\n        const currentAutocompleteGroup = autocomplete.groups.find(\n          (gr) => gr.enabled\n        );\n        let cntAutocomplete = 0;\n        if (currentAutocompleteGroup) {\n          currentAutocompleteGroup.computedSelectors?.map(\n            (cb) =>\n              (cntAutocomplete += (cb.selectors as any)?.filter(\n                (autocomplete) => autocomplete.enabled\n              ).length)\n          );\n        }\n        cnt += cntAutocomplete;\n      }\n    } else if (filter && filter.filters && !filter.filters.filters) {\n      return 1;\n    } else if (filter && filter.filters && filter.filters.filters) {\n      return filter.filters.filters.length;\n    }\n    if (\n      filter.filters &&\n      filter.filters.operator === 'During' &&\n      filter.filters.active &&\n      filter.interfaceOgcFilters &&\n      filter.interfaceOgcFilters[0].active\n    ) {\n      const filterActiveValue = filter.interfaceOgcFilters[0];\n      if (filter.filters.calendarModeYear) {\n        // year mode check just year\n        if (\n          filterActiveValue.begin.substring(0, 4) !==\n            this.options.minDate.substring(0, 4) ||\n          filterActiveValue.end.substring(0, 4) !==\n            this.options.maxDate.substring(0, 4)\n        ) {\n          cnt += 1;\n        }\n      } else if (\n        filterActiveValue.begin !== this.options.minDate ||\n        filterActiveValue.end !== this.options.maxDate\n      ) {\n        cnt += 1;\n      }\n    }\n    return cnt > 0 ? cnt : undefined;\n  }\n\n  @Input()\n  get layer(): Layer {\n    return this._layer;\n  }\n  set layer(value: Layer) {\n    this._layer = value;\n    if (value) {\n      this.options = this.layer.dataSource\n        .options as OgcFilterableDataSourceOptions;\n    }\n  }\n  private _layer: Layer;\n\n  @Input() map: MapBase;\n\n  @Input() color = 'primary';\n\n  @Input() header: boolean;\n\n  public ogcFilterCollapse = false;\n\n  ngOnInit() {\n    this.options = this.layer.dataSource\n      .options as OgcFilterableDataSourceOptions;\n  }\n}\n","<button\n  *ngIf=\"\n    header &&\n    options.ogcFilters &&\n    options.ogcFilters.enabled &&\n    (options.ogcFilters.pushButtons ||\n      options.ogcFilters.checkboxes ||\n      options.ogcFilters.radioButtons ||\n      options.ogcFilters.select ||\n      options.ogcFilters.autocomplete ||\n      options.ogcFilters.editable)\n  \"\n  mat-icon-button\n  collapsibleButton\n  tooltip-position=\"below\"\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"'igo.geo.filter.filterBy' | translate\"\n  [color]=\"color\"\n>\n  <mat-icon\n    aria-hidden=\"false\"\n    [matBadge]=\"badge\"\n    matBadgeColor=\"warn\"\n    matBadgeSize=\"medium\"\n    >filter_alt</mat-icon\n  >\n</button>\n\n<div\n  #ogcFilter\n  class=\"igo-layer-actions-container\"\n  *ngIf=\"\n    options.ogcFilters &&\n    options.ogcFilters.enabled &&\n    (options.ogcFilters.pushButtons ||\n      options.ogcFilters.checkboxes ||\n      options.ogcFilters.radioButtons ||\n      options.ogcFilters.select ||\n      options.ogcFilters.autocomplete ||\n      options.ogcFilters.editable)\n  \"\n>\n  <igo-ogc-filterable-item\n    *ngIf=\"ogcFilterCollapse && options.ogcFilters.enabled\"\n    igoListItem\n    [header]=\"false\"\n    [map]=\"layer.map\"\n    [layer]=\"layer\"\n  >\n  </igo-ogc-filterable-item>\n</div>\n","import { NgFor, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ListComponent, ListItemDirective } from '@igo2/common/list';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { AnyLayer } from '../../layer';\nimport { MapBase } from '../../map/shared/map.abstract';\nimport { OgcFilterableItemComponent } from '../ogc-filterable-item/ogc-filterable-item.component';\nimport { FilterableDataSourcePipe } from '../shared/filterable-datasource.pipe';\n\n@Component({\n  selector: 'igo-ogc-filterable-list',\n  templateUrl: './ogc-filterable-list.component.html',\n  styleUrls: ['./ogc-filterable-list.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    ListComponent,\n    NgIf,\n    NgFor,\n    OgcFilterableItemComponent,\n    ListItemDirective,\n    IgoLanguageModule,\n    FilterableDataSourcePipe\n  ]\n})\nexport class OgcFilterableListComponent {\n  @Input() layers: AnyLayer[];\n\n  @Input() map: MapBase;\n}\n","<igo-list [navigation]=\"false\" [selection]=\"false\">\n  <div\n    id=\"no-layer-message\"\n    *ngIf=\"(layers | filterableDataSource: 'ogc').length === 0\"\n  >\n    {{ 'igo.geo.filter.noFilterableLayer' | translate }}\n  </div>\n  <ng-template ngFor let-layer [ngForOf]=\"layers | filterableDataSource: 'ogc'\">\n    <igo-ogc-filterable-item\n      igoListItem\n      [header]=\"true\"\n      [layer]=\"layer\"\n      [map]=\"layer.map\"\n    ></igo-ogc-filterable-item>\n  </ng-template>\n</igo-list>\n","import { Directive, OnDestroy, OnInit, Self } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { MapService } from '../../map/shared/map.service';\nimport { OgcFilterableListComponent } from './ogc-filterable-list.component';\n\n@Directive({\n  selector: '[igoOgcFilterableListBinding]',\n  standalone: true\n})\nexport class OgcFilterableListBindingDirective implements OnInit, OnDestroy {\n  private component: OgcFilterableListComponent;\n  private layers$$: Subscription;\n\n  constructor(\n    @Self() component: OgcFilterableListComponent,\n    private mapService: MapService\n  ) {\n    this.component = component;\n  }\n\n  ngOnInit() {\n    // Override input layers\n    this.component.layers = [];\n\n    this.layers$$ = this.mapService\n      .getMap()\n      .layerController.layersFlattened$.subscribe((layers) => {\n        this.component.layers = layers;\n      });\n  }\n\n  ngOnDestroy() {\n    this.layers$$.unsubscribe();\n  }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n  ArcGISRestDataSourceOptions,\n  ArcGISRestImageDataSourceOptions,\n  TileArcGISRestDataSourceOptions,\n  WMSDataSourceOptions\n} from '../datasources';\nimport { OptionsApiOptions } from './options-api.interface';\nimport { OptionsService } from './options.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class OptionsApiService extends OptionsService {\n  private urlApi: string;\n  private provideContextUri: boolean;\n\n  constructor(\n    private http: HttpClient,\n    @Inject('options') options: OptionsApiOptions = {}\n  ) {\n    super();\n    this.urlApi = options.url || this.urlApi;\n    this.provideContextUri =\n      options.provideContextUri || this.provideContextUri;\n  }\n\n  getWMSOptions(\n    baseOptions: WMSDataSourceOptions,\n    detailedContextUri?: string\n  ): Observable<WMSDataSourceOptions> {\n    if (!this.urlApi) {\n      return of({} as WMSDataSourceOptions);\n    }\n    let params = new HttpParams({\n      fromObject: {\n        type: baseOptions.type,\n        url: baseOptions.url,\n        layers: baseOptions.params.LAYERS\n      }\n    });\n\n    if (detailedContextUri && this.provideContextUri) {\n      params = params.append('context', detailedContextUri);\n    }\n\n    const request = this.http.get(this.urlApi, {\n      params\n    });\n\n    return request.pipe(\n      map(\n        (res: {\n          sourceOptions: WMSDataSourceOptions;\n          layerOptions: Record<string, string>;\n        }) => {\n          if (!res || !res.sourceOptions) {\n            return {} as WMSDataSourceOptions;\n          }\n          if (res.layerOptions) {\n            res.sourceOptions._layerOptionsFromSource = res.layerOptions;\n          }\n          return res.sourceOptions;\n        }\n      )\n    );\n  }\n\n  getArcgisRestOptions(\n    baseOptions:\n      | ArcGISRestDataSourceOptions\n      | ArcGISRestImageDataSourceOptions\n      | TileArcGISRestDataSourceOptions,\n    detailedContextUri?: string\n  ): Observable<\n    | ArcGISRestDataSourceOptions\n    | ArcGISRestImageDataSourceOptions\n    | TileArcGISRestDataSourceOptions\n  > {\n    if (!this.urlApi) {\n      return of({} as ArcGISRestImageDataSourceOptions);\n    }\n    let params = new HttpParams({\n      fromObject: {\n        type: baseOptions.type,\n        url: baseOptions.url,\n        layers: baseOptions.layer\n      }\n    });\n\n    if (detailedContextUri && this.provideContextUri) {\n      params = params.append('context', detailedContextUri);\n    }\n\n    const request = this.http.get(this.urlApi, {\n      params\n    });\n\n    return request.pipe(\n      map(\n        (res: {\n          sourceOptions:\n            | ArcGISRestDataSourceOptions\n            | ArcGISRestImageDataSourceOptions\n            | TileArcGISRestDataSourceOptions;\n          layerOptions: Record<string, string>;\n        }) => {\n          if (!res || !res.sourceOptions) {\n            return {} as\n              | ArcGISRestDataSourceOptions\n              | ArcGISRestImageDataSourceOptions\n              | TileArcGISRestDataSourceOptions;\n          }\n          if (res.layerOptions) {\n            res.sourceOptions._layerOptionsFromSource = res.layerOptions;\n          }\n          return res.sourceOptions;\n        }\n      )\n    );\n  }\n}\n","import { HttpClient } from '@angular/common/http';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport { OptionsApiService } from './options-api.service';\nimport { OptionsService } from './options.service';\n\nexport function optionsApiFactory(\n  http: HttpClient,\n  configService: ConfigService\n) {\n  return new OptionsApiService(http, configService.getConfig('optionsApi'));\n}\n\nexport function provideOptionsApi() {\n  return {\n    provide: OptionsService,\n    useFactory: optionsApiFactory,\n    deps: [HttpClient, ConfigService]\n  };\n}\n","export enum GeometryType {\n  Point = 'Point',\n  LineString = 'LineString',\n  Polygon = 'Polygon',\n  Circle = 'Circle'\n}\n\nexport enum LabelType {\n  Coordinates = 'Coordinates',\n  Length = 'Length',\n  Area = 'Area',\n  Predefined = 'Predefined',\n  Custom = 'Custom'\n}\n\nexport enum CoordinatesUnit {\n  DecimalDegree = 'DD',\n  DegreesMinutesSeconds = 'DMS'\n}\n","import { Injectable } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DrawIconService {\n  protected icons: string[];\n\n  constructor(protected config: ConfigService) {\n    this.getIconsList();\n  }\n\n  getIcons() {\n    return this.icons;\n  }\n\n  getPath(): string[] {\n    return this.config.getConfig('drawingTool.icons') || [];\n  }\n\n  getIconsList() {\n    this.icons = this.getPath();\n  }\n}\n","export const MEASURE_UNIT_AUTO = 'auto';\n\nexport enum MeasureType {\n  Length = 'length',\n  Area = 'area'\n}\n\nexport enum MeasureLengthUnit {\n  Meters = 'meters',\n  Kilometers = 'kilometers',\n  Miles = 'miles',\n  Feet = 'feet'\n}\n\nexport const MeasureLengthUnitAbbreviation = {\n  [MeasureLengthUnit.Meters]: 'm',\n  [MeasureLengthUnit.Kilometers]: 'km',\n  [MeasureLengthUnit.Miles]: 'mi',\n  [MeasureLengthUnit.Feet]: 'ft'\n};\n\nexport enum MeasureAreaUnit {\n  SquareMeters = 'squareMeters',\n  SquareKilometers = 'squareKilometers',\n  SquareMiles = 'squareMiles',\n  SquareFeet = 'squareFeet',\n  Hectares = 'hectares',\n  Acres = 'acres'\n}\n\nexport const MeasureAreaUnitAbbreviation = {\n  [MeasureAreaUnit.SquareMeters]: 'm²',\n  [MeasureAreaUnit.SquareKilometers]: 'km²',\n  [MeasureAreaUnit.SquareMiles]: 'mi²',\n  [MeasureAreaUnit.SquareFeet]: 'ft²',\n  [MeasureAreaUnit.Hectares]: 'ha',\n  [MeasureAreaUnit.Acres]: 'ac'\n};\n","import { LanguageService } from '@igo2/core/language';\n\nimport OlOverlay from 'ol/Overlay';\nimport { getCenter as olGetCenter } from 'ol/extent';\nimport OlCircle from 'ol/geom/Circle';\nimport OlLineString from 'ol/geom/LineString';\nimport OlPoint from 'ol/geom/Point';\nimport OlPolygon from 'ol/geom/Polygon';\nimport { getArea as olGetArea, getLength as olGetLength } from 'ol/sphere';\nimport * as olstyle from 'ol/style';\n\nimport {\n  MeasureAreaUnit,\n  MeasureAreaUnitAbbreviation,\n  MeasureLengthUnit,\n  MeasureLengthUnitAbbreviation\n} from './measure.enum';\nimport { Measure } from './measure.interfaces';\n\n/**\n * Convert value from meters to kilometers\n * @param value Value in meters\n * @returns Value in kilometers\n */\nexport function metersToKilometers(value: number): number {\n  return value * 0.001;\n}\n\n/**\n * Convert value from meters to feet\n * @param value Value in meters\n * @returns Value in feet\n */\nexport function metersToFeet(value: number): number {\n  return value * 3.2808;\n}\n\n/**\n * Convert value from meters to miles\n * @param value Value in meters\n * @returns Value in miles\n */\nexport function metersToMiles(value: number): number {\n  return value * 0.000621;\n}\n\n/**\n * Convert value from square meters to square kilometers\n * @param value Value in square meters\n * @returns Value in square kilometers\n */\nexport function squareMetersToSquareKilometers(value: number): number {\n  return value * 0.000001;\n}\n\n/**\n * Convert value from square meters to square miles\n * @param value Value in square meters\n * @returns Value in square miles\n */\nexport function squareMetersToSquareMiles(value: number): number {\n  return value * 0.0000003861;\n}\n\n/**\n * Convert value from square meters to square feet\n * @param value Value in square meters\n * @returns Value in square feet\n */\nexport function squareMetersToSquareFeet(value: number): number {\n  return value * 10.764;\n}\n\n/**\n * Convert value from square meters to hectares\n * @param value Value in square meters\n * @returns Value in hectares\n */\nexport function squareMetersToHectares(value: number): number {\n  return value * 0.0001;\n}\n\n/**\n * Convert value from square meters to acres\n * @param value Value in square meters\n * @returns Value in acres\n */\nexport function squareMetersToAcres(value: number): number {\n  return value * 0.00024711;\n}\n\n/**\n * Convert value from meters to the specified length unit\n * @param value Value in meters\n * @param unit Length unit\n * @returns Value in unit\n */\nexport function metersToUnit(\n  value: number,\n  unit: MeasureLengthUnit\n): number | undefined {\n  const conversionMapper = new Map([\n    [MeasureLengthUnit.Meters, (val: number) => val],\n    [MeasureLengthUnit.Kilometers, metersToKilometers],\n    [MeasureLengthUnit.Miles, metersToMiles],\n    [MeasureLengthUnit.Feet, metersToFeet]\n  ]);\n  const conversion = conversionMapper.get(unit);\n\n  return conversion ? conversion(value) : undefined;\n}\n\n/**\n * Convert value from square meters to the specified area unit\n * @param value Value in meters\n * @param unit Area unit\n * @returns Value in unit\n */\nexport function squareMetersToUnit(\n  value: number,\n  unit: MeasureAreaUnit\n): number | undefined {\n  const conversionMapper = new Map([\n    [MeasureAreaUnit.SquareMeters, (val: number) => val],\n    [MeasureAreaUnit.SquareKilometers, squareMetersToSquareKilometers],\n    [MeasureAreaUnit.SquareMiles, squareMetersToSquareMiles],\n    [MeasureAreaUnit.SquareFeet, squareMetersToSquareFeet],\n    [MeasureAreaUnit.Hectares, squareMetersToHectares],\n    [MeasureAreaUnit.Acres, squareMetersToAcres]\n  ]);\n  const conversion = conversionMapper.get(unit);\n\n  return conversion ? conversion(value) : undefined;\n}\n\n/**\n * This method format a measure to a readable format\n * @param measure Measure\n * @param options Formatting options\n * @returns Formatted measure\n */\nexport function formatMeasure(\n  measure: number,\n  options?: {\n    decimal?: number;\n    unit?: MeasureAreaUnit | MeasureLengthUnit;\n    unitAbbr?: boolean;\n    locale?: string;\n  },\n  languageService?: LanguageService\n) {\n  let decimal = options.decimal;\n  if (decimal === undefined || decimal < 0) {\n    decimal = 1;\n  }\n\n  const parts = [];\n  if (options.locale !== undefined) {\n    parts.push(\n      measure.toLocaleString(options.locale, {\n        minimumFractionDigits: decimal,\n        maximumFractionDigits: decimal\n      })\n    );\n  } else {\n    parts.push(measure.toFixed(decimal).toString());\n  }\n\n  if (options.unit !== undefined && options.unitAbbr === true) {\n    if (languageService) {\n      parts.push(\n        MeasureLengthUnitAbbreviation[options.unit]\n          ? languageService.translate.instant(\n              'igo.geo.measure.' + MeasureLengthUnitAbbreviation[options.unit]\n            )\n          : languageService.translate.instant(\n              'igo.geo.measure.' + MeasureAreaUnitAbbreviation[options.unit]\n            )\n      );\n    } else {\n      parts.push(\n        MeasureLengthUnitAbbreviation[options.unit] ||\n          MeasureAreaUnitAbbreviation[options.unit]\n      );\n    }\n  }\n\n  return parts.filter((p) => p !== undefined).join(' ');\n}\n\n/**\n * Compute best length measure unit for a given measure in meters\n * @param value Value in meters\n * @returns Measure unit\n */\nexport function computeBestLengthUnit(value: number): MeasureLengthUnit {\n  let unit = MeasureLengthUnit.Meters;\n  let converted = value;\n  const possibleUnits = [MeasureLengthUnit.Kilometers];\n  while (converted > 1000 && possibleUnits.length > 0) {\n    unit = possibleUnits.pop();\n    converted = metersToUnit(value, unit);\n  }\n  return unit;\n}\n\n/**\n * Compute best length measure unit for a given measure in square meters\n * @param value Value in meters\n * @returns Measure unit\n */\nexport function computeBestAreaUnit(value: number): MeasureAreaUnit {\n  let unit = MeasureAreaUnit.SquareMeters;\n  let converted = value;\n  const possibleUnits = [MeasureAreaUnit.SquareKilometers];\n  while (converted > 1000000 && possibleUnits.length > 0) {\n    unit = possibleUnits.pop();\n    converted = squareMetersToUnit(value, unit);\n  }\n  return unit;\n}\n\n/**\n * Create a default style for a measure interaction\n * @returns OL style\n */\nexport function createMeasureInteractionStyle(): olstyle.Style {\n  return new olstyle.Style({\n    stroke: new olstyle.Stroke({\n      color: '#ffcc33',\n      lineDash: [10, 10],\n      width: 2\n    }),\n    fill: new olstyle.Fill({\n      color: 'rgba(255, 255, 255, 0.2)'\n    }),\n    image: new olstyle.Circle({\n      radius: 5,\n      stroke: new olstyle.Stroke({\n        color: '#ffcc33'\n      }),\n      fill: new olstyle.Fill({\n        color: 'rgba(255, 255, 255, 0.2)'\n      })\n    })\n  });\n}\n\n/**\n * Create a default style for a measure layer\n * @returns OL style\n */\nexport function createMeasureLayerStyle(): olstyle.Style {\n  return new olstyle.Style({\n    stroke: new olstyle.Stroke({\n      color: '#ffcc33',\n      width: 2\n    }),\n    fill: new olstyle.Fill({\n      color: 'rgba(255, 255, 255, 0.2)'\n    })\n  });\n}\n\n/**\n * Compute the length in meters of an OL geometry with a given projection\n * @param olGeometry Ol geometry\n * @param projection olGeometry's projection\n * @returns Length in meters\n */\nexport function measureOlGeometryLength(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle,\n  projection: string\n): number | undefined {\n  if (olGeometry instanceof OlPoint) {\n    return undefined;\n  }\n  if (olGeometry.getFlatCoordinates().length === 0) {\n    return undefined;\n  }\n  return olGetLength(olGeometry, { projection });\n}\n\n/**\n * Compute the area in square meters of an OL geometry with a given projection\n * @param olGeometry Ol geometry\n * @param projection olGeometry's projection\n * @returns Area in square meters\n */\nexport function measureOlGeometryArea(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle,\n  projection: string\n): number | undefined {\n  if (olGeometry instanceof OlPoint || olGeometry instanceof OlLineString) {\n    return undefined;\n  }\n  if (olGeometry.getFlatCoordinates().length === 0) {\n    return undefined;\n  }\n  return olGetArea(olGeometry, { projection });\n}\n\n/**\n * Compute the area (square meters), length (meters) and last length (meters)\n * of an OL geometry with a given projection.\n * @param olGeometry Ol geometry\n * @param projection olGeometry's projection\n * @returns Computed measure\n */\nexport function measureOlGeometry(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle,\n  projection: string\n): Measure {\n  const length = measureOlGeometryLength(olGeometry, projection);\n  const area = measureOlGeometryArea(olGeometry, projection);\n\n  const lengths = [];\n  const coordinates = olGeometry.getFlatCoordinates();\n  const coordinatesLength = coordinates.length;\n  for (let i = 0; i <= coordinatesLength - 4; i += 2) {\n    const olSegment = new OlLineString([\n      [coordinates[i], coordinates[i + 1]],\n      [coordinates[i + 2], coordinates[i + 3]]\n    ]);\n\n    lengths.push(measureOlGeometryLength(olSegment, projection));\n  }\n\n  return {\n    area,\n    length,\n    lengths\n  };\n}\n\n/**\n * Update an OL geometry midpoints and return an array of those points\n * @param olGeometry OL Geometry\n * @returns OL points\n */\nexport function updateOlGeometryMidpoints(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle\n): OlPoint[] {\n  let olMidpoints;\n  if (olGeometry instanceof OlPoint) {\n    const olMidpointPoint = new OlPoint(olGeometry.getFlatCoordinates());\n    olMidpoints = new Array(1);\n    olMidpoints[0] = olMidpointPoint;\n  } else {\n    olMidpoints = getOlGeometryMidpoints(olGeometry);\n    // TODO: handle multi geometries\n    const coordinates = olGeometry.getFlatCoordinates();\n    const midpointsLength = olMidpoints.length;\n    for (let i = 0; i < midpointsLength; i++) {\n      const j = i * 2;\n      const olSegment = new OlLineString([\n        [coordinates[j], coordinates[j + 1]],\n        [coordinates[j + 2], coordinates[j + 3]]\n      ]);\n\n      const midpointCoordinate = olSegment.getCoordinateAt(0.5);\n      const olMidpoint = olMidpoints[i];\n      if (olMidpoint !== undefined) {\n        olMidpoint.setCoordinates(midpointCoordinate);\n      } else {\n        olMidpoints[i] = new OlPoint(midpointCoordinate);\n      }\n    }\n  }\n  return olMidpoints;\n}\n\n/**\n * Clear an OL geometry midpoints and return an array of those points\n * @param olGeometry OL Geometry\n */\nexport function clearOlGeometryMidpoints(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle\n) {\n  const olMidpoints = olGeometry.get('_midpoints') || [];\n  const midpointsLength = olMidpoints.length;\n  for (let i = 0; i < midpointsLength; i++) {\n    const olMidpoint = olMidpoints[i];\n    if (olMidpoint !== undefined) {\n      if (olMidpoint !== undefined) {\n        clearOlMidpointTooltip(olMidpoint);\n      }\n    }\n  }\n\n  olGeometry.set('_midpoints', undefined, true);\n\n  return olMidpoints;\n}\n\n/**\n * Return an array of  OL geometry midpoints, if any\n * @param olGeometry OL Geometry\n * @returns OL points\n */\nfunction getOlGeometryMidpoints(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle\n): OlPoint[] {\n  let expectedNumber;\n  if (olGeometry instanceof OlCircle) {\n    expectedNumber = 0;\n  } else {\n    expectedNumber = Math.max(\n      olGeometry.getFlatCoordinates().length / 2 - 1,\n      0\n    );\n  }\n  // TODO: This works but it's quite messy. If time permits,\n  // clean this. Maybe a Tooltip class could handle that\n  let olMidpoints = olGeometry.get('_midpoints');\n\n  if (olMidpoints === undefined) {\n    if (olGeometry instanceof OlPoint) {\n      olMidpoints = new Array(1);\n    } else {\n      olMidpoints = new Array(expectedNumber);\n    }\n    olGeometry.set('_midpoints', olMidpoints, true);\n    return olMidpoints;\n  }\n\n  if (expectedNumber === 0) {\n    return olMidpoints;\n  }\n\n  if (expectedNumber === olMidpoints.length) {\n    return olMidpoints;\n  }\n\n  if (expectedNumber > olMidpoints.length) {\n    olMidpoints.push(...new Array(expectedNumber - olMidpoints.length));\n    return olMidpoints;\n  }\n\n  for (let i = expectedNumber; i < olMidpoints.length; i++) {\n    const olMidpoint = olMidpoints[expectedNumber];\n    if (olMidpoint !== undefined) {\n      clearOlMidpointTooltip(olMidpoint);\n    }\n  }\n  olMidpoints.splice(expectedNumber);\n\n  return olMidpoints;\n}\n\n/**\n * Remove an OL midpoint's tooltip from the map\n * @param olMidpoint OL Point\n */\nfunction clearOlMidpointTooltip(olMidpoint: OlPoint) {\n  const olTooltip = olMidpoint.get('_tooltip');\n  if (olTooltip !== undefined) {\n    const olMap = olTooltip.getMap();\n    if (olMap !== undefined) {\n      olMap.removeOverlay(olTooltip);\n    }\n  }\n}\n\n/**\n * Add an OL overlay at each midpoint and return an array of those overlays\n * @param olGeometry OL Geometry\n * @returns OL overlays\n */\nexport function updateOlTooltipsAtMidpoints(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle\n): OlOverlay[] {\n  const olMidpoints = updateOlGeometryMidpoints(olGeometry);\n  let typeGeom = '';\n  if (olGeometry instanceof OlLineString) {\n    typeGeom = 'line-';\n  } else if (olGeometry instanceof OlPolygon) {\n    typeGeom = 'polygone-';\n  }\n  const olTooltips = olMidpoints.map((olMidpoint: OlPoint) => {\n    let olTooltip = olMidpoint.get('_tooltip');\n    if (olTooltip === undefined) {\n      olTooltip = createOlTooltipAtPoint(olMidpoint, false, typeGeom);\n    } else {\n      olTooltip.setPosition(olMidpoint.getFlatCoordinates());\n    }\n    return olTooltip;\n  });\n  return olTooltips;\n}\n\n/**\n * Return an array of OL overlay at midspoints, if any\n * @param olGeometry OL Geometry\n * @returns OL overlays\n */\nexport function getOlTooltipsAtMidpoints(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle\n): OlOverlay[] {\n  const olMidpoints = getOlGeometryMidpoints(olGeometry);\n  return olMidpoints.map((olMidpoint: OlPoint) => {\n    return olMidpoint ? olMidpoint.get('_tooltip') : undefined;\n  });\n}\n\n/**\n * Update an OL geometry center and return it\n * @param olGeometry OL Geometry\n * @returns OL point\n */\nexport function updateOlGeometryCenter(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle\n): OlPoint {\n  let olCenter = olGeometry.get('_center');\n  const centerCoordinate = olGetCenter(olGeometry.getExtent());\n  if (olCenter !== undefined) {\n    olCenter.setCoordinates(centerCoordinate);\n  } else {\n    olCenter = new OlPoint(centerCoordinate);\n    olGeometry.set('_center', olCenter);\n  }\n\n  return olCenter;\n}\n\n/**\n * Add an OL overlay at the center of a geometry and return that overlay\n * @param olGeometry OL Geometry\n * @returns OL overlay\n */\nexport function updateOlTooltipAtCenter(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle\n): OlOverlay {\n  const olCenter = updateOlGeometryCenter(olGeometry);\n  let olTooltip = olCenter.get('_tooltip');\n  if (olTooltip === undefined) {\n    olTooltip = createOlTooltipAtPoint(olCenter, true);\n  } else {\n    olTooltip.setPosition(olCenter.getFlatCoordinates());\n  }\n  return olTooltip;\n}\n\n/**\n * Return an array of OL overlay at midspoints, if any\n * @param olGeometry OL Geometry\n * @returns OL overlays\n */\nexport function getOlTooltipAtCenter(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle\n): OlOverlay {\n  const olCenter = olGeometry.get('_center');\n  return olCenter ? olCenter.get('_tooltip') : undefined;\n}\n\n/**\n * Get all the tooltips of an OL geometry\n * @param olGeometry OL Geometry\n * @returns OL overlays\n */\nexport function getTooltipsOfOlGeometry(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle\n): OlOverlay[] {\n  const olTooltips = [].concat(getOlTooltipsAtMidpoints(olGeometry) || []);\n  const olCenterTooltip = getOlTooltipAtCenter(olGeometry);\n  if (olCenterTooltip !== undefined) {\n    olTooltips.push(olCenterTooltip);\n  }\n  return olTooltips;\n}\n\n/**\n * Create an OL overlay at a point and bind the overlay to the point\n * @param olPoint OL Point\n * @returns OL overlay\n */\nexport function createOlTooltipAtPoint(\n  olPoint: OlPoint,\n  center = false,\n  srcGeomType = ''\n): OlOverlay {\n  const olTooltip = new OlOverlay({\n    element: document.createElement('div'),\n    offset: [-30, -10],\n    className: (center\n      ? [\n          'igo-map-tooltip',\n          'igo-map-tooltip-measure',\n          'igo-map-tooltip-measure-area'\n        ]\n      : [\n          'igo-map-tooltip',\n          'igo-map-tooltip-measure',\n          `igo-map-tooltip-measure-${srcGeomType}segments`\n        ]\n    ).join(' '),\n    stopEvent: false\n  });\n  olTooltip.setPosition(olPoint.getFlatCoordinates());\n  olPoint.set('_tooltip', olTooltip);\n\n  return olTooltip;\n}\n","import OlOverlay from 'ol/Overlay';\nimport { Coordinate } from 'ol/coordinate';\nimport OlCircle from 'ol/geom/Circle';\nimport OlLineString from 'ol/geom/LineString';\nimport OlPoint from 'ol/geom/Point';\nimport OlPolygon from 'ol/geom/Polygon';\nimport * as Olstyle from 'ol/style';\n\nimport { convertDDToDMS, roundCoordToString } from '../../map/shared/map.utils';\nimport {\n  updateOlGeometryCenter,\n  updateOlGeometryMidpoints\n} from '../../measure/shared/measure.utils';\nimport { CoordinatesUnit } from './draw.enum';\n\n/**\n * Create a default style\n * @param fillColor the fill color\n * @param strokeColor the stroke color\n * @param strokeWidth the stroke width\n * @param label a label\n * @returns OL style\n */\nexport function createInteractionStyle(\n  fillColor?: string,\n  strokeColor?: string,\n  strokeWidth?: number\n): Olstyle.Style {\n  return new Olstyle.Style({\n    stroke: new Olstyle.Stroke({\n      color: strokeColor ? strokeColor : 'rgba(143,7,7,1)',\n      width: strokeWidth ? strokeWidth : 1\n    }),\n    fill: new Olstyle.Fill({\n      color: fillColor ? fillColor : 'rgba(255,255,255,0.4)'\n    }),\n    image: new Olstyle.Circle({\n      radius: 5,\n      stroke: new Olstyle.Stroke({\n        color: strokeColor ? strokeColor : 'rgba(143,7,7,1)',\n        width: strokeWidth ? strokeWidth : 1\n      }),\n      fill: new Olstyle.Fill({\n        color: fillColor ? fillColor : 'rgba(255,255,255,0.4)'\n      })\n    })\n  });\n}\n\n/**\n * Add an OL overlay at each midpoint and return an array of those overlays\n * @param olGeometry OL Geometry\n * @returns OL overlays\n */\nexport function updateOlTooltipsDrawAtMidpoints(\n  olGeometry: OlPoint | OlLineString | OlPolygon | OlCircle\n): OlOverlay[] {\n  let olMidpoints;\n  if (olGeometry instanceof OlPoint) {\n    const olMidpointPoint = new OlPoint(olGeometry.getFlatCoordinates());\n    olMidpoints = new Array(1);\n    olMidpoints[0] = olMidpointPoint;\n    olGeometry.setProperties({ _midpoints: olMidpoints }, true);\n  } else if (olGeometry instanceof OlCircle) {\n    const olMidpointPoint = new OlPoint(olGeometry.getCenter());\n    olMidpoints = new Array(1);\n    olMidpoints[0] = olMidpointPoint;\n    olGeometry.setProperties({ _midpoints: olMidpoints }, true);\n  } else {\n    olMidpoints = updateOlGeometryMidpoints(olGeometry);\n  }\n  const olTooltips = olMidpoints.map((olMidpoint: OlPoint) => {\n    let olTooltip = olMidpoint.get('_tooltip');\n    if (olTooltip === undefined) {\n      olTooltip = createOlTooltipDrawAtPoint(olMidpoint);\n    } else {\n      olTooltip.setPosition(olMidpoint.getFlatCoordinates());\n    }\n    return olTooltip;\n  });\n  return olTooltips;\n}\n\n/**\n * Add an OL overlay at the center of a geometry and return that overlay\n * @param olGeometry OL Geometry\n * @returns OL overlay\n */\nexport function updateOlTooltipDrawAtCenter(\n  olGeometry: OlLineString | OlPolygon\n): OlOverlay {\n  const olCenter = updateOlGeometryCenter(olGeometry);\n  let olTooltip = olCenter.get('_tooltip');\n  if (olTooltip === undefined) {\n    olTooltip = createOlTooltipDrawAtPoint(olCenter);\n  } else {\n    olTooltip.setPosition(olCenter.getFlatCoordinates());\n  }\n  return olTooltip;\n}\n\n/**\n * Create an OL overlay at a point and bind the overlay to the point\n * @param olPoint OL Point\n * @returns OL overlay\n */\nexport function createOlTooltipDrawAtPoint(olPoint: OlPoint): OlOverlay {\n  const olTooltip = new OlOverlay({\n    element: document.createElement('div'),\n    offset: [-30, -10],\n    className: ['igo-map-tooltip', 'igo-map-tooltip-draw'].join(' '),\n    stopEvent: false\n  });\n  olTooltip.setPosition(olPoint.getFlatCoordinates());\n  olPoint.set('_tooltip', olTooltip);\n\n  return olTooltip;\n}\n\nexport function DDtoDMS(\n  value: Coordinate,\n  unit: CoordinatesUnit\n): string[] | undefined {\n  const conversionMapper = new Map([\n    [\n      CoordinatesUnit.DecimalDegree,\n      (val: Coordinate) => {\n        if (typeof val[0] === 'number') {\n          return roundCoordToString(val, 5) as string[];\n        } else {\n          const numVal: Coordinate = [Number(val[0]), Number(val[1])];\n          return roundCoordToString(numVal, 5) as string[];\n        }\n      }\n    ],\n    [\n      CoordinatesUnit.DegreesMinutesSeconds,\n      (val: Coordinate) => convertDDToDMS(val, 2)\n    ]\n  ]);\n  const conversion = conversionMapper.get(unit);\n\n  return conversion ? conversion(value) : undefined;\n}\n","import { EntityStoreStrategy } from '@igo2/common/entity';\n\nimport * as olextent from 'ol/extent';\n\nimport { Subscription } from 'rxjs';\nimport { debounceTime, skipWhile } from 'rxjs/operators';\n\nimport { MapExtent } from '../../../map/shared/map.interface';\nimport {\n  Feature,\n  FeatureStoreInMapExtentStrategyOptions\n} from '../feature.interfaces';\nimport { FeatureStore } from '../store';\n\n/**\n * This strategy maintain the store features updated while the map is moved.\n * The features's state inside the map are tagged inMapExtent = true;\n */\nexport class FeatureStoreInMapExtentStrategy extends EntityStoreStrategy {\n  /**\n   * Subscription to the store's OL source changes\n   */\n  private stores$$ = new Map<FeatureStore, string>();\n  private states$$: Subscription[] = [];\n  private empty$$: Subscription;\n\n  constructor(protected options: FeatureStoreInMapExtentStrategyOptions) {\n    super(options);\n  }\n\n  /**\n   * Bind this strategy to a store and start watching for Ol source changes\n   * @param store Feature store\n   */\n  bindStore(store: FeatureStore) {\n    super.bindStore(store);\n    if (this.active === true) {\n      this.watchStore(store);\n    }\n    this.empty$$ = store.empty$\n      .pipe(skipWhile((empty) => !empty))\n      .subscribe(() => this.updateEntitiesInExtent(store));\n  }\n\n  /**\n   * Unbind this strategy from a store and stop watching for Ol source changes\n   * @param store Feature store\n   */\n  unbindStore(store: FeatureStore) {\n    super.unbindStore(store);\n    if (this.active === true) {\n      this.unwatchStore(store);\n    }\n  }\n\n  /**\n   * Start watching all stores already bound to that strategy at once.\n   * @internal\n   */\n  protected doActivate() {\n    this.stores.forEach((store: FeatureStore) => this.watchStore(store));\n  }\n\n  /**\n   * Stop watching all stores bound to that strategy\n   * @internal\n   */\n  protected doDeactivate() {\n    this.unwatchAll();\n  }\n\n  /**\n   * Watch for a store's  OL source changes\n   * @param store Feature store\n   */\n  private watchStore(store: FeatureStore) {\n    if (this.stores$$.has(store)) {\n      return;\n    }\n\n    this.updateEntitiesInExtent(store);\n    const map = store.map ?? store.layer.map;\n    if (map) {\n      this.states$$.push(\n        map.viewController.state$\n          .pipe(debounceTime(250))\n          .subscribe(() => this.updateEntitiesInExtent(store))\n      );\n    }\n  }\n\n  private updateEntitiesInExtent(store: FeatureStore) {\n    if (store?.layer?.map?.viewController) {\n      store.state.updateAll({ inMapExtent: false });\n      const mapExtent = store.layer.map.viewController.getExtent();\n      const features = store.entities$.value;\n      const entitiesInMapExtent = this.getFeaturesInExtent(features, mapExtent);\n      store.state.updateMany(entitiesInMapExtent, { inMapExtent: true }, false);\n    }\n  }\n\n  private getFeaturesInExtent(\n    features: Feature<any>[],\n    extent: MapExtent\n  ): Feature[] {\n    return features.reduce((acc, feature) => {\n      const geom = feature.ol?.getGeometry();\n      if (geom) {\n        const featureExtent = geom.getExtent();\n\n        if (olextent.intersects(featureExtent, extent)) {\n          acc.push(feature);\n        }\n      } else {\n        // By default, keep entity with no geometry\n        acc.push(feature);\n      }\n      return acc;\n    }, []);\n  }\n\n  /**\n   * Stop watching for a store's OL source changes\n   * @param store Feature store\n   */\n  private unwatchStore(store: FeatureStore) {\n    const key = this.stores$$.get(store);\n    if (key !== undefined) {\n      this.stores$$.delete(store);\n    }\n  }\n\n  /**\n   * Stop watching for OL source changes in all stores.\n   */\n  private unwatchAll() {\n    this.stores$$.clear();\n    this.states$$.map((state) => state.unsubscribe());\n    if (this.empty$$) {\n      this.empty$$.unsubscribe();\n    }\n  }\n}\n","import { EntityStoreStrategy } from '@igo2/common/entity';\n\nimport { Subscription, debounceTime } from 'rxjs';\n\nimport { FeatureStoreInMapResolutionStrategyOptions } from '../feature.interfaces';\nimport { FeatureStore } from '../store';\n\n/**\n * This strategy maintain the store features updated while the map is scrolled.\n * The features's state inside the map's resolution are tagged inMapResolution = true;\n */\nexport class FeatureStoreInMapResolutionStrategy extends EntityStoreStrategy {\n  /**\n   * Subscription to the store's OL source changes\n   */\n  private stores$$ = new Map<FeatureStore, string>();\n  private resolution$$: Subscription[] = [];\n  private empty$$: Subscription;\n\n  constructor(protected options: FeatureStoreInMapResolutionStrategyOptions) {\n    super(options);\n  }\n\n  /**\n   * Bind this strategy to a store and start watching for Ol source changes\n   * @param store Feature store\n   */\n  bindStore(store: FeatureStore) {\n    super.bindStore(store);\n    if (this.active === true) {\n      this.watchStore(store);\n    }\n    this.empty$$ = store.empty$.subscribe(() =>\n      this.updateEntitiesInResolution(\n        store,\n        store.layer.map.viewController.getResolution()\n      )\n    );\n  }\n\n  /**\n   * Unbind this strategy from a store and stop watching for Ol source changes\n   * @param store Feature store\n   */\n  unbindStore(store: FeatureStore) {\n    super.unbindStore(store);\n    if (this.active === true) {\n      this.unwatchStore(store);\n    }\n  }\n\n  /**\n   * Start watching all stores already bound to that strategy at once.\n   * @internal\n   */\n  protected doActivate() {\n    this.stores.forEach((store: FeatureStore) => this.watchStore(store));\n  }\n\n  /**\n   * Stop watching all stores bound to that strategy\n   * @internal\n   */\n  protected doDeactivate() {\n    this.unwatchAll();\n  }\n\n  /**\n   * Watch for a store's  OL source changes\n   * @param store Feature store\n   */\n  private watchStore(store: FeatureStore) {\n    if (this.stores$$.has(store)) {\n      return;\n    }\n\n    this.updateEntitiesInResolution(\n      store,\n      store.layer.map.viewController.getResolution()\n    );\n    this.resolution$$.push(\n      store.layer.map.viewController.resolution$\n        .pipe(debounceTime(250))\n        .subscribe((res) => {\n          this.updateEntitiesInResolution(store, res);\n        })\n    );\n  }\n\n  private updateEntitiesInResolution(store, mapResolution: number) {\n    if (\n      mapResolution > store.layer.minResolution &&\n      mapResolution < store.layer.maxResolution\n    ) {\n      store.state.updateAll({ inMapResolution: true });\n    } else {\n      store.state.updateAll({ inMapResolution: false });\n    }\n  }\n\n  /**\n   * Stop watching for a store's OL source changes\n   * @param store Feature store\n   */\n  private unwatchStore(store: FeatureStore) {\n    const key = this.stores$$.get(store);\n    if (key !== undefined) {\n      this.stores$$.delete(store);\n    }\n  }\n\n  /**\n   * Stop watching for OL source changes in all stores.\n   */\n  private unwatchAll() {\n    this.stores$$.clear();\n    this.resolution$$.map((state) => state.unsubscribe());\n    if (this.empty$$) {\n      this.empty$$.unsubscribe();\n    }\n  }\n}\n","import { EntityStoreStrategy } from '@igo2/common/entity';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { Subscription, debounceTime, pairwise } from 'rxjs';\n\nimport { CapabilitiesService } from '../../../datasource/shared/capabilities.service';\nimport { AnyLayer } from '../../../layer';\nimport { IgoMap } from '../../../map/shared/map';\nimport { generateIdFromSourceOptions } from '../../../utils/id-generator';\nimport { GeoServiceDefinition } from '../../../utils/propertyTypeDetector/propertyTypeDetector.interface';\nimport { PropertyTypeDetectorService } from '../../../utils/propertyTypeDetector/propertyTypeDetector.service';\nimport {\n  Feature,\n  FeatureStorePropertyTypeStrategyOptions\n} from '../feature.interfaces';\nimport { FeatureStore } from '../store';\n\n/**\n * This strategy maintain the store features updated to detect geoproperties\n * (wms/arcgis... layer and url).\n * The features's state inside the map are tagged haveGeoServiceProperties = true;\n */\nexport class GeoPropertiesStrategy extends EntityStoreStrategy {\n  /**\n   * Subscription to the store's OL source changes\n   */\n  private stores$$ = new Map<FeatureStore, string>();\n  private states$$: Subscription[] = [];\n  private empty$$: Subscription;\n\n  /**\n   * The map the layer is bound to\n   */\n  private readonly map: IgoMap;\n\n  constructor(\n    protected options: FeatureStorePropertyTypeStrategyOptions,\n    private propertyTypeDetectorService: PropertyTypeDetectorService,\n    private capabilitiesService: CapabilitiesService\n  ) {\n    super(options);\n    this.map = options.map;\n  }\n\n  /**\n   * Bind this strategy to a store and start watching for Ol source changes\n   * @param store Feature store\n   */\n  bindStore(store: FeatureStore) {\n    super.bindStore(store);\n    if (this.active === true) {\n      this.watchStore(store);\n    }\n  }\n\n  /**\n   * Unbind this strategy from a store and stop watching for Ol source changes\n   * @param store Feature store\n   */\n  unbindStore(store: FeatureStore) {\n    super.unbindStore(store);\n    if (this.active === true) {\n      this.unwatchStore(store);\n    }\n  }\n\n  /**\n   * Start watching all stores already bound to that strategy at once.\n   * @internal\n   */\n  protected doActivate() {\n    this.stores.forEach((store: FeatureStore) => this.watchStore(store));\n  }\n\n  /**\n   * Stop watching all stores bound to that strategy\n   * @internal\n   */\n  protected doDeactivate() {\n    this.unwatchAll();\n  }\n\n  /**\n   * Watch for a store's  OL source changes\n   * @param store Feature store\n   */\n  private watchStore(store: FeatureStore) {\n    if (this.stores$$.has(store)) {\n      return;\n    }\n\n    this.updateEntitiesPropertiesState(store);\n    this.states$$.push(\n      this.map.layerController.all$\n        .pipe(debounceTime(250), pairwise())\n        .subscribe(([prevLayers, currentLayers]) => {\n          let prevLayersId;\n          if (prevLayers) {\n            prevLayersId = prevLayers.map((l) => l.id);\n          }\n          const layers = currentLayers.filter(\n            (l) => !prevLayersId.includes(l.id)\n          );\n          this.updateEntitiesPropertiesState(store, layers);\n        })\n    );\n    this.states$$.push(\n      store.entities$.pipe(debounceTime(250)).subscribe(() => {\n        this.updateEntitiesPropertiesState(store);\n      })\n    );\n  }\n\n  private updateEntitiesPropertiesState(\n    store: FeatureStore,\n    layers?: AnyLayer[]\n  ) {\n    const layersId = this.map.layerController.all.map((l) => l.id);\n    let entities: Feature[] = [];\n    if (layers) {\n      entities = store.entities$.value;\n    } else {\n      const allSV = store.stateView.all();\n      entities = allSV.length\n        ? store.stateView\n            .all()\n            .filter((s) => !s.state.geoService)\n            .map((e) => e.entity)\n        : store.entities$.value;\n    }\n    const sampling = entities.length >= 250 ? 250 : entities.length;\n    const firstN = entities.slice(0, sampling);\n    let allKeys = [];\n    firstN.map((e) => {\n      allKeys = allKeys.concat(Object.keys(e.properties || {}));\n    });\n    allKeys = [...new Set(allKeys)];\n    const distinctValues = {};\n    allKeys.map((k) => {\n      distinctValues[k] = [\n        ...new Set(entities.map((item) => item.properties[k]))\n      ];\n    });\n    const containGeoServices = {};\n    Object.entries(distinctValues).forEach((entry: [string, []]) => {\n      const [key, values] = entry;\n      const valuedAreGeoservices = values.filter((value) =>\n        this.propertyTypeDetectorService.isGeoService(value)\n      );\n      if (valuedAreGeoservices?.length) {\n        containGeoServices[key] = valuedAreGeoservices;\n      }\n    });\n    interface GeoServiceAssociation {\n      url: string;\n      layerNameProperty: string;\n      urlProperty: string;\n      geoService: GeoServiceDefinition;\n    }\n    const geoServiceAssociations: GeoServiceAssociation[] = [];\n    Object.entries(containGeoServices).forEach((entry: [string, []]) => {\n      const [key, values] = entry;\n      values.map((value) => {\n        const geoService = this.propertyTypeDetectorService.getGeoService(\n          value,\n          allKeys\n        );\n        if (geoService) {\n          const propertiesForLayerName = allKeys.filter((p) =>\n            geoService.propertiesForLayerName.includes(p)\n          );\n          // providing the the first matching regex;\n          const propertyForLayerName = propertiesForLayerName.length\n            ? propertiesForLayerName[0]\n            : undefined;\n          if (propertyForLayerName) {\n            geoServiceAssociations.push({\n              url: value,\n              urlProperty: key,\n              layerNameProperty: propertyForLayerName,\n              geoService\n            });\n          }\n        }\n      });\n    });\n    const geoServiceStates: {\n      geoServiceAssociation: GeoServiceAssociation;\n      state: any;\n    }[] = [];\n    geoServiceAssociations.map((geoServiceAssociation) => {\n      const url = geoServiceAssociation.url;\n      const type = geoServiceAssociation.geoService.type || 'wms';\n      distinctValues[geoServiceAssociation.layerNameProperty].map(\n        (layerName) => {\n          let appliedLayerName = layerName;\n          let arcgisLayerName = undefined;\n          if (\n            ['arcgisrest', 'imagearcgisrest', 'tilearcgisrest'].includes(type)\n          ) {\n            appliedLayerName = undefined;\n            arcgisLayerName = layerName;\n          }\n          const so = ObjectUtils.removeUndefined({\n            sourceOptions: {\n              type: type || 'wms',\n              url,\n              optionsFromCapabilities: true,\n              optionsFromApi: true,\n              params: {\n                LAYERS: appliedLayerName,\n                LAYER: arcgisLayerName\n              }\n            }\n          });\n          const potentialLayerId = generateIdFromSourceOptions(\n            so.sourceOptions\n          );\n          geoServiceStates.push({\n            geoServiceAssociation,\n            state: {\n              added: layersId.find((l) => l === potentialLayerId) !== undefined,\n              haveGeoServiceProperties: true,\n              type,\n              url,\n              layerName\n            }\n          });\n        }\n      );\n    });\n    geoServiceStates.map((geoServiceState) => {\n      const urlProperty = geoServiceState.geoServiceAssociation.urlProperty;\n      const layerNameProperty =\n        geoServiceState.geoServiceAssociation.layerNameProperty;\n\n      const urlValue = geoServiceState.state.url;\n      const layerNameValue = geoServiceState.state.layerName;\n      const entitiesToProcess = entities.filter(\n        (e) =>\n          e.properties[urlProperty] === urlValue &&\n          e.properties[layerNameProperty] === layerNameValue\n      );\n      const ns = {\n        geoService: geoServiceState.state\n      };\n      store.state.updateMany(entitiesToProcess, ns, true);\n    });\n  }\n\n  /**\n   * Stop watching for a store's OL source changes\n   * @param store Feature store\n   */\n  private unwatchStore(store: FeatureStore) {\n    const key = this.stores$$.get(store);\n    if (key !== undefined) {\n      this.stores$$.delete(store);\n    }\n  }\n\n  /**\n   * Stop watching for OL source changes in all stores.\n   */\n  private unwatchAll() {\n    this.stores$$.clear();\n    this.states$$.map((state) => state.unsubscribe());\n    if (this.empty$$) {\n      this.empty$$.unsubscribe();\n    }\n  }\n}\n","import { EntityStoreStrategy } from '@igo2/common/entity';\n\nimport { ClusterDataSource } from '../../../datasource/shared/datasources/cluster-datasource';\nimport { FeatureStoreLoadingLayerStrategyOptions } from '../feature.interfaces';\nimport { FeatureStore } from '../store';\n\n/**\n * This strategy loads a layer's features into it's store counterpart.\n * The layer -> store binding is a one-way binding. That means any OL feature\n * added to the layer will be added to the store but the opposite is false.\n *\n * Important: In it's current state, this strategy is to meant to be combined\n * with a standard Loading strategy and it would probably cause recursion issues.\n */\nexport class FeatureStoreLoadingLayerStrategy extends EntityStoreStrategy {\n  /**\n   * Subscription to the store's OL source changes\n   */\n  private stores$$ = new Map<FeatureStore, string>();\n\n  constructor(protected options: FeatureStoreLoadingLayerStrategyOptions) {\n    super(options);\n  }\n\n  /**\n   * Bind this strategy to a store and start watching for Ol source changes\n   * @param store Feature store\n   */\n  bindStore(store: FeatureStore) {\n    super.bindStore(store);\n    if (this.active === true) {\n      this.watchStore(store);\n    }\n  }\n\n  /**\n   * Unbind this strategy from a store and stop watching for Ol source changes\n   * @param store Feature store\n   */\n  unbindStore(store: FeatureStore) {\n    super.unbindStore(store);\n    if (this.active === true) {\n      this.unwatchStore(store);\n    }\n  }\n\n  /**\n   * Start watching all stores already bound to that strategy at once.\n   * @internal\n   */\n  protected doActivate() {\n    this.stores.forEach((store: FeatureStore) => this.watchStore(store));\n  }\n\n  /**\n   * Stop watching all stores bound to that strategy\n   * @internal\n   */\n  protected doDeactivate() {\n    this.unwatchAll();\n  }\n\n  /**\n   * Watch for a store's  OL source changes\n   * @param store Feature store\n   */\n  private watchStore(store: FeatureStore) {\n    if (this.stores$$.has(store)) {\n      return;\n    }\n\n    this.onSourceChanges(store);\n    const olSource = store.layer.ol.getSource();\n    olSource.on('change', () => {\n      this.onSourceChanges(store);\n    });\n  }\n\n  /**\n   * Stop watching for a store's OL source changes\n   * @param store Feature store\n   */\n  private unwatchStore(store: FeatureStore) {\n    const key = this.stores$$.get(store);\n    if (key !== undefined) {\n      this.stores$$.delete(store);\n    }\n  }\n\n  /**\n   * Stop watching for OL source changes in all stores.\n   */\n  private unwatchAll() {\n    this.stores$$.clear();\n  }\n\n  /**\n   * Load features from an OL source into a  store or clear the store if the source is empty\n   * @param features Store filtered features\n   * @param store Feature store\n   */\n  private onSourceChanges(store: FeatureStore) {\n    let olFeatures = store.layer.ol.getSource().getFeatures();\n\n    if (store.layer.dataSource instanceof ClusterDataSource) {\n      olFeatures = (olFeatures as any).flatMap((cluster: any) =>\n        cluster.get('features')\n      );\n    }\n    if (olFeatures.length === 0) {\n      store.clear();\n    } else {\n      store.setStoreOlFeatures(olFeatures);\n    }\n  }\n}\n","import { EntityStoreStrategy } from '@igo2/common/entity';\n\nimport { DocumentOptions, Document as FlexSearchDocument } from 'flexsearch';\nimport { skipWhile } from 'rxjs/operators';\n\nimport { FeatureStoreSearchIndexStrategyOptions } from '../feature.interfaces';\nimport { FeatureStore } from '../store';\n\n/**\n *\n * This strategy loads a layer's features's properties into a searchable index.\n */\nexport class FeatureStoreSearchIndexStrategy extends EntityStoreStrategy {\n  /**\n   * Subscription to the store's OL source changes\n   */\n  private stores$$ = new Map<FeatureStore, string>();\n\n  constructor(protected options: FeatureStoreSearchIndexStrategyOptions) {\n    super(options);\n  }\n\n  /**\n   * Bind this strategy to a store and start watching for entities changes\n   * @param store Feature store\n   */\n  bindStore(store: FeatureStore) {\n    super.bindStore(store);\n    if (this.active === true) {\n      this.watchStore(store);\n    }\n  }\n\n  /**\n   * Unbind this strategy from a store and stop watching for entities changes\n   * @param store Feature store\n   */\n  unbindStore(store: FeatureStore) {\n    super.unbindStore(store);\n    if (this.active === true) {\n      this.unwatchStore(store);\n    }\n  }\n\n  /**\n   * Start watching all stores already bound to that strategy at once.\n   * @internal\n   */\n  protected doActivate() {\n    this.stores.forEach((store: FeatureStore) => this.watchStore(store));\n  }\n\n  /**\n   * Stop watching all stores bound to that strategy\n   * @internal\n   */\n  protected doDeactivate() {\n    this.unwatchAll();\n  }\n\n  private initStoreSearchIndex(store) {\n    store.searchDocument = new FlexSearchDocument({ tokenize: 'full' });\n  }\n\n  /**\n   * Watch for a store's entities changes\n   * @param store Feature store\n   */\n  private watchStore(store: FeatureStore) {\n    if (this.stores$$.has(store)) {\n      return;\n    }\n    this.initStoreSearchIndex(store);\n\n    store.entities$\n      .pipe(skipWhile((e) => !e.length))\n      .subscribe(() => this.onEntitiesChanges(store));\n  }\n\n  /**\n   * Stop watching for a store's entities changes\n   * @param store Feature store\n   */\n  private unwatchStore(store: FeatureStore) {\n    const key = this.stores$$.get(store);\n    if (key !== undefined) {\n      store.searchDocument = undefined;\n      this.stores$$.delete(store);\n    }\n  }\n\n  /**\n   * Stop watching for OL source changes in all stores.\n   */\n  private unwatchAll() {\n    this.stores$$.clear();\n  }\n\n  /**\n   * Maintain searcahble index for every loaded entities\n   * @param store Feature store\n   */\n  private onEntitiesChanges(store: FeatureStore) {\n    const ratio = this.options.percentDistinctValueRatio || 2;\n    const featuresProperties = [];\n    store.index.forEach((value, key) => {\n      const fp = value.properties;\n      fp.igoSearchID = key;\n      featuresProperties.push(fp);\n    });\n    const toIndex = [];\n    let columnsToNotIndex = [];\n    let contentToIndex = [];\n    if (this.options.sourceFields) {\n      columnsToNotIndex = this.options.sourceFields.filter(\n        (sf) => !sf.searchIndex?.enabled\n      );\n      contentToIndex = this.options.sourceFields\n        .filter((sf) => sf.searchIndex?.enabled)\n        .map((sf2) => {\n          return Object.assign(\n            {},\n            { field: sf2.name, tokenize: 'full' },\n            sf2.searchIndex\n          );\n        });\n    } else {\n      if (featuresProperties.length) {\n        // THIS METHOD COMPUTE COLUMN DISTINCT VALUE TO FILTER WHICH COLUMN TO INDEX BASED ON A RATIO or discard float columns\n        const columns = Object.keys(featuresProperties[0]);\n        const columnsToIndex = [];\n        columnsToNotIndex = columns\n          .map((column) => {\n            const distinctValues = [\n              ...new Set(featuresProperties.map((item) => item[column]))\n            ];\n            // identify column to not index based on a ratio distinctValues/nb of features OR discart exclusive float column (ex: lat, long)\n            if (\n              (distinctValues.length / featuresProperties.length) * 100 <=\n                ratio ||\n              distinctValues.every((n) => Number(n) === n && n % 1 !== 0)\n            ) {\n              columnsToNotIndex.push(column);\n            } else {\n              columnsToIndex.push(column);\n            }\n          })\n          .filter((f) => f);\n        const keysToIndex = columnsToIndex.filter((f) => f !== 'igoSearchID');\n        contentToIndex = keysToIndex.map((key) => {\n          return { field: key, tokenize: 'full' };\n        });\n      }\n    }\n    store.index.forEach((value) => {\n      const propertiesToIndex = JSON.parse(JSON.stringify(value.properties));\n      columnsToNotIndex.map((c) => delete propertiesToIndex[c]);\n      if (Object.keys(propertiesToIndex).length) {\n        toIndex.push(propertiesToIndex);\n      }\n    });\n\n    if (toIndex.length === 0) {\n      this.initStoreSearchIndex(store);\n    } else {\n      store.searchDocument = new FlexSearchDocument({\n        document: {\n          id: 'igoSearchID',\n          index: contentToIndex\n        } as DocumentOptions<any>\n      });\n      toIndex.map((i) => {\n        store.searchDocument.add(i.igoSearchID, i);\n      });\n    }\n  }\n}\n","import { Workspace } from '@igo2/common/workspace';\nimport { StorageService } from '@igo2/core/storage';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { FeatureStore } from '../../../feature/shared/store';\nimport {\n  ISearchSourceParams,\n  SearchSourceOptions,\n  SearchSourceSettings\n} from './source.interfaces';\n\n/**\n * Base search source class\n */\nexport class SearchSource {\n  /**\n   * Search source ID\n   * @internal\n   */\n  static id = '';\n\n  /**\n   * Search source type\n   * @internal\n   */\n  static type = '';\n\n  /**\n   * Search source options\n   * @internal\n   */\n  protected options: SearchSourceOptions;\n\n  /**\n   * Get search source's id\n   * @returns Search source's id\n   */\n  getId(): string {\n    throw new Error('You have to implement the method \"getId\".');\n  }\n  /**\n   * Get search source's type\n   * @returns Search source's type\n   */\n  getType(): string {\n    throw new Error('You have to implement the method \"getType\".');\n  }\n\n  /**\n   * Get search source's default options\n   * @returns Search source default options\n   */\n  protected getDefaultOptions(): SearchSourceOptions {\n    throw new Error('You have to implement the method \"getDefaultOptions\".');\n  }\n\n  /**\n   * Search source's title\n   */\n  get title(): string {\n    return this.options.title;\n  }\n\n  /**\n   * Whether the search source is available\n   */\n  get available(): boolean {\n    return this.options.available !== false;\n  }\n\n  /**\n   * Whether the search source is enabled\n   */\n  set enabled(value: boolean) {\n    this.options.enabled = value;\n  }\n  get enabled(): boolean {\n    return this.available && this.options.enabled !== false;\n  }\n\n  get showInPointerSummary(): boolean {\n    const showInPointerSummary = this.options.showInPointerSummary;\n    return showInPointerSummary ? showInPointerSummary : false;\n  }\n\n  get showInSettings(): boolean {\n    const showInSettings = this.options.showInSettings;\n    return showInSettings === undefined ? true : showInSettings;\n  }\n\n  /**\n   * Search url\n   */\n  get searchUrl(): string {\n    return this.options.searchUrl;\n  }\n\n  /**\n   * Search query params\n   */\n  get params(): ISearchSourceParams | null {\n    return this.options.params;\n  }\n\n  /**\n   * Search settings\n   */\n  get settings(): SearchSourceSettings[] {\n    return this.options.settings === undefined ? [] : this.options.settings;\n  }\n\n  set featureStoresWithIndex(storesWithIndex: FeatureStore[]) {\n    this._featureStoresWithIndex = storesWithIndex;\n  }\n  get featureStoresWithIndex() {\n    return this._featureStoresWithIndex;\n  }\n  private _featureStoresWithIndex: FeatureStore[];\n\n  setWorkspaces(workspaces: Workspace[]) {\n    if (\n      workspaces.filter((fw) => (fw.entityStore as FeatureStore).searchDocument)\n        .length >= 1\n    ) {\n      this.options.available = true;\n    } else {\n      this.options.available = false;\n    }\n    const values = [];\n    this.featureStoresWithIndex = workspaces\n      .filter((fw) => (fw.entityStore as FeatureStore).searchDocument)\n      .map((fw) => {\n        values.push({\n          title: fw.title,\n          value: fw.title,\n          enabled: true\n        });\n        return fw.entityStore as FeatureStore;\n      });\n    const datasets = this.options.settings.find((s) => s.title === 'datasets');\n    if (datasets) {\n      datasets.values = values;\n    }\n    this.setParamFromSetting(datasets);\n  }\n\n  /**\n   * Set params from selected settings\n   */\n  setParamFromSetting(setting: SearchSourceSettings, saveInStorage = true) {\n    switch (setting.type) {\n      case 'radiobutton':\n        setting.values.forEach((conf) => {\n          if (conf.enabled) {\n            this.options.params = Object.assign(this.options.params || {}, {\n              [setting.name]: conf.value\n            });\n          }\n        });\n        break;\n      case 'checkbox': {\n        let confValue = '';\n        setting.values\n          .filter((s) => s.available !== false)\n          .forEach((conf) => {\n            if (conf.enabled) {\n              confValue += conf.value + ',';\n            }\n          });\n        confValue = confValue.slice(0, -1);\n        this.options.params = Object.assign(this.options.params || {}, {\n          [setting.name]: confValue\n        });\n        break;\n      }\n    }\n\n    if (saveInStorage && this.storageService) {\n      this.storageService.set(this.getId() + '.options', {\n        params: this.options.params\n      });\n    }\n  }\n\n  /**\n   * Search results display order\n   */\n  get displayOrder(): number {\n    return this.options.order === undefined ? 99 : this.options.order;\n  }\n\n  constructor(\n    options: SearchSourceOptions,\n    private storageService?: StorageService\n  ) {\n    this.options = options;\n    if (this.storageService) {\n      const storageOptions = this.storageService.get(\n        this.getId() + '.options'\n      ) as object;\n      if (storageOptions) {\n        this.options = ObjectUtils.mergeDeep(this.options, storageOptions);\n      }\n    }\n\n    this.options = ObjectUtils.mergeDeep(\n      this.getDefaultOptions(),\n      this.options\n    );\n\n    // Set Default Params from Settings\n    this.settings.forEach((setting) => {\n      this.setParamFromSetting(setting, false);\n    });\n  }\n\n  /**\n   * Get hashtags valid\n   * @param hashtag hashtag from query\n   */\n  getHashtagsValid(term: string, settingsName: string): string[] {\n    const hashtags = term.match(/(#[A-Za-zÀ-ÿ-+]+)/g);\n    if (!hashtags) {\n      return undefined;\n    }\n\n    const searchSourceSetting = this.getSettingsValues(settingsName);\n    const hashtagsValid = [];\n    hashtags.forEach((hashtag) => {\n      searchSourceSetting.values.forEach((conf) => {\n        const hashtagKey = hashtag.substring(1);\n        if (typeof conf.value === 'string') {\n          const types = conf.value\n            .toLowerCase()\n            .normalize('NFD')\n            .replace(/[\\u0300-\\u036f]/g, '')\n            .split(',');\n          const index = types.indexOf(\n            hashtagKey\n              .toLowerCase()\n              .normalize('NFD')\n              .replace(/[\\u0300-\\u036f]/g, '')\n          );\n          if (index !== -1) {\n            hashtagsValid.push(types[index]);\n          }\n        }\n        if (\n          conf.hashtags &&\n          conf.hashtags.indexOf(hashtagKey.toLowerCase()) !== -1\n        ) {\n          hashtagsValid.push(conf.value);\n        }\n      });\n    });\n\n    return hashtagsValid.filter((a, b) => hashtagsValid.indexOf(a) === b);\n  }\n\n  getSettingsValues(search: string): SearchSourceSettings {\n    return this.getDefaultOptions().settings.find(\n      (value: SearchSourceSettings) => {\n        return value.name === search;\n      }\n    );\n  }\n}\n","import {\n  AsyncPipe,\n  JsonPipe,\n  KeyValuePipe,\n  NgFor,\n  NgIf,\n  NgStyle\n} from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\nimport { getEntityIcon, getEntityTitle } from '@igo2/common/entity';\nimport { ImageErrorDirective, SecureImagePipe } from '@igo2/common/image';\nimport type { Toolbox } from '@igo2/common/tool';\nimport { ConfigService } from '@igo2/core/config';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { ConnectionState, NetworkService } from '@igo2/core/network';\nimport { Clipboard } from '@igo2/utils';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { IgoMap } from '../../map/shared/map';\nimport { SearchSource } from '../../search/shared/sources/source';\nimport { Feature } from '../shared';\n\n@Component({\n  selector: 'igo-feature-details',\n  templateUrl: './feature-details.component.html',\n  styleUrls: ['./feature-details.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    NgFor,\n    MatIconModule,\n    NgStyle,\n    ImageErrorDirective,\n    AsyncPipe,\n    JsonPipe,\n    KeyValuePipe,\n    IgoLanguageModule,\n    SecureImagePipe\n  ]\n})\nexport class FeatureDetailsComponent implements OnInit, OnDestroy {\n  private state: ConnectionState;\n  private unsubscribe$ = new Subject<void>();\n  ready = false;\n\n  @Input()\n  get source(): SearchSource {\n    return this._source;\n  }\n  set source(value: SearchSource) {\n    this._source = value;\n    this.cdRef.detectChanges();\n  }\n\n  @Input() map: IgoMap;\n\n  @Input() toolbox: Toolbox;\n\n  @Input()\n  get feature(): Feature {\n    return this._feature;\n  }\n  set feature(value: Feature) {\n    this._feature = value;\n    this.cdRef.detectChanges();\n    this.selectFeature.emit();\n  }\n\n  private _feature: Feature;\n  private _source: SearchSource;\n\n  @Output() routeEvent = new EventEmitter<boolean>();\n  @Output() selectFeature = new EventEmitter<boolean>();\n  @Output() htmlDisplayEvent = new EventEmitter<boolean>();\n\n  /**\n   * @internal\n   */\n  get title(): string {\n    return getEntityTitle(this.feature);\n  }\n\n  /**\n   * @internal\n   */\n  get icon(): string {\n    return getEntityIcon(this.feature) || 'link';\n  }\n\n  constructor(\n    private http: HttpClient,\n    private cdRef: ChangeDetectorRef,\n    private sanitizer: DomSanitizer,\n    private networkService: NetworkService,\n    private messageService: MessageService,\n    private configService: ConfigService\n  ) {\n    this.networkService\n      .currentState()\n      .pipe(takeUntil(this.unsubscribe$))\n      .subscribe((state: ConnectionState) => {\n        this.state = state;\n      });\n  }\n\n  ngOnInit() {\n    this.ready = true;\n  }\n\n  ngOnDestroy() {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n\n  urlSanitizer(value): SafeResourceUrl {\n    return this.sanitizer.bypassSecurityTrustResourceUrl(value);\n  }\n\n  isHtmlDisplay(): boolean {\n    if (\n      this.feature &&\n      this.isObject(this.feature.properties) &&\n      this.feature.properties.target === 'iframe'\n    ) {\n      this.htmlDisplayEvent.emit(true);\n      return true;\n    } else {\n      this.htmlDisplayEvent.emit(false);\n      return false;\n    }\n  }\n\n  htmlSanitizer(value): SafeResourceUrl {\n    if (!value.body) {\n      return;\n    }\n    const regexBase = /<base href=\"[\\w:\\/\\.]+\">/;\n    if (!regexBase.test(value.body)) {\n      const url = new URL(value.url, window.location.origin);\n      value.body = value.body.replace(\n        '<head>',\n        `<head><base href=\"${url.origin}\">`\n      );\n    }\n\n    return this.sanitizer.bypassSecurityTrustHtml(value.body);\n  }\n\n  isObject(value) {\n    return typeof value === 'object';\n  }\n\n  openSecureUrl(value) {\n    let url: string;\n    const regexDepot = new RegExp(\n      this.configService?.getConfig('depot.url') + '.*?(?=\"|$)'\n    );\n\n    if (regexDepot.test(value)) {\n      url = value.match(regexDepot)[0];\n\n      this.http\n        .get(url, {\n          responseType: 'blob'\n        })\n        .subscribe(\n          (docOrImage) => {\n            const fileUrl = URL.createObjectURL(docOrImage);\n            window.open(fileUrl, '_blank');\n            this.cdRef.detectChanges();\n          },\n          () => {\n            this.messageService.error(\n              'igo.geo.targetHtmlUrlUnauthorized',\n              'igo.geo.targetHtmlUrlUnauthorizedTitle'\n            );\n          }\n        );\n    } else {\n      let url = value;\n      if (this.isEmbeddedLink(value)) {\n        const div = document.createElement('div');\n        div.innerHTML = value;\n        url = div.children[0].getAttribute('href');\n      }\n      window.open(url, '_blank');\n    }\n  }\n\n  isUrl(value) {\n    if (typeof value === 'string') {\n      const regex = /^https?:\\/\\//;\n      return regex.test(value);\n    }\n  }\n\n  isDoc(value) {\n    if (typeof value === 'string') {\n      if (this.isUrl(value)) {\n        const regex = /(pdf|docx?|xlsx?)$/;\n        return regex.test(value.toLowerCase());\n      } else {\n        return false;\n      }\n    }\n  }\n\n  isImg(value) {\n    if (typeof value === 'string') {\n      if (this.isUrl(value)) {\n        const regex = /(jpe?g|png|gif)$/;\n        return regex.test(value.toLowerCase());\n      } else {\n        return false;\n      }\n    }\n  }\n\n  isEmbeddedLink(value) {\n    if (typeof value === 'string') {\n      const matchRegex = /<a/g;\n      const match = value.match(matchRegex) || [];\n      const count = match.length;\n      if (count === 1) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n    return false;\n  }\n\n  getEmbeddedLinkText(value) {\n    const regex = /(?:>).*?(?=<|$)/;\n    let text = value.match(regex)[0] as string;\n    text = text.replace(/>/g, '');\n    return text;\n  }\n\n  filterFeatureProperties(feature): Record<string, any> {\n    const allowedFieldsAndAlias = feature.meta ? feature.meta.alias : undefined;\n    const properties = {};\n    let offlineButtonState;\n\n    if (this.map) {\n      this.map.forcedOffline$\n        .pipe(takeUntil(this.unsubscribe$))\n        .subscribe((state) => {\n          offlineButtonState = state;\n        });\n    }\n\n    if (\n      feature.properties &&\n      feature.properties.Route &&\n      this.toolbox &&\n      !this.toolbox.getTool('directions')\n    ) {\n      delete feature.properties.Route;\n    }\n\n    if (allowedFieldsAndAlias) {\n      Object.keys(allowedFieldsAndAlias).forEach((field) => {\n        properties[allowedFieldsAndAlias[field]] = feature.properties[field];\n      });\n      return properties;\n    } else if (offlineButtonState !== undefined) {\n      if (!offlineButtonState) {\n        if (\n          this.state.connection &&\n          feature.meta &&\n          feature.meta.excludeAttribute\n        ) {\n          const excludeAttribute = feature.meta.excludeAttribute;\n          excludeAttribute.forEach((attribute) => {\n            delete feature.properties[attribute];\n          });\n        } else if (\n          !this.state.connection &&\n          feature.meta &&\n          feature.meta.excludeAttributeOffline\n        ) {\n          const excludeAttributeOffline = feature.meta.excludeAttributeOffline;\n          excludeAttributeOffline.forEach((attribute) => {\n            delete feature.properties[attribute];\n          });\n        }\n      } else {\n        if (feature.meta && feature.meta.excludeAttributeOffline) {\n          const excludeAttributeOffline = feature.meta.excludeAttributeOffline;\n          excludeAttributeOffline.forEach((attribute) => {\n            delete feature.properties[attribute];\n          });\n        }\n      }\n    } else {\n      if (\n        this.state.connection &&\n        feature.meta &&\n        feature.meta.excludeAttribute\n      ) {\n        const excludeAttribute = feature.meta.excludeAttribute;\n        excludeAttribute.forEach((attribute) => {\n          delete feature.properties[attribute];\n        });\n      } else if (\n        !this.state.connection &&\n        feature.meta &&\n        feature.meta.excludeAttributeOffline\n      ) {\n        const excludeAttributeOffline = feature.meta.excludeAttributeOffline;\n        excludeAttributeOffline.forEach((attribute) => {\n          delete feature.properties[attribute];\n        });\n      }\n    }\n    return feature.properties;\n  }\n\n  /**\n   * Copy the url to a clipboard\n   */\n  copyTextToClipboard(value: string): void {\n    const successful = Clipboard.copy(value);\n    if (successful) {\n      this.messageService.success('igo.geo.query.link.message');\n    }\n  }\n}\n","<table\n  class=\"igo-striped mat-typography\"\n  *ngIf=\"\n    ready &&\n    feature &&\n    isObject(feature.properties) &&\n    feature.properties.target !== 'iframe'\n  \"\n>\n  <tbody>\n    <tr *ngFor=\"let property of filterFeatureProperties(feature) | keyvalue\">\n      <td\n        *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\"\n      >\n        <mat-icon matListItemIcon>{{ icon }}</mat-icon>\n      </td>\n\n      <td\n        *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\"\n      >\n        <a\n          href=\"{{ property.value }}\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          {{ 'igo.geo.targetHtmlUrl' | translate }} {{ title }}</a\n        >\n        <button\n          class=\"copyClipboard\"\n          mat-icon-button\n          (click)=\"copyTextToClipboard(property.value)\"\n        >\n          <mat-icon>content_copy</mat-icon>\n        </button>\n      </td>\n\n      <td id=\"keyValue\" *ngIf=\"feature.properties.target === undefined\">\n        {{ property.key }}\n      </td>\n\n      <td\n        *ngIf=\"\n          feature.properties.target === undefined &&\n          !isObject(property.value) &&\n          !isUrl(property.value) &&\n          !isEmbeddedLink(property.value)\n        \"\n        [innerHTML]=\"property.value\"\n      ></td>\n\n      <td\n        *ngIf=\"\n          feature.properties.target === undefined &&\n          isEmbeddedLink(property.value)\n        \"\n      >\n        <u\n          [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n          (click)=\"openSecureUrl(property.value)\"\n          >{{ getEmbeddedLinkText(property.value) }}</u\n        >\n      </td>\n\n      <td\n        *ngIf=\"\n          feature.properties.target === undefined &&\n          !isObject(property.value) &&\n          (isDoc(property.value) || isUrl(property.value)) &&\n          !isImg(property.value)\n        \"\n      >\n        <u\n          [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n          (click)=\"openSecureUrl(property.value)\"\n          >{{ 'igo.geo.targetHtmlUrl' | translate }}</u\n        >\n        <button\n          class=\"copyClipboard\"\n          mat-icon-button\n          (click)=\"copyTextToClipboard(property.value)\"\n        >\n          <mat-icon>content_copy</mat-icon>\n        </button>\n      </td>\n\n      <td\n        *ngIf=\"\n          feature.properties.target === undefined &&\n          !isObject(property.value) &&\n          isUrl(property.value) &&\n          isImg(property.value)\n        \"\n      >\n        <a\n          href=\"{{ property.value }}\"\n          target=\"_blank\"\n          (click)=\"openSecureUrl(property.value)\"\n          rel=\"noopener noreferrer\"\n        >\n          <img\n            igoImageError\n            src=\"{{ property.value | secureImage | async }}\"\n            width=\"225\"\n            height=\"auto\"\n          />\n        </a>\n      </td>\n\n      <td\n        *ngIf=\"\n          feature.properties.target === undefined && isObject(property.value)\n        \"\n        [innerHTML]=\"property.value | json\"\n      ></td>\n    </tr>\n  </tbody>\n</table>\n\n<iframe\n  *ngIf=\"isHtmlDisplay()\"\n  [srcdoc]=\"htmlSanitizer(feature.properties)\"\n  [src]=\"urlSanitizer(feature.properties.url)\"\n></iframe>\n","import {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  OnInit,\n  Output,\n  Self\n} from '@angular/core';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { FeatureDetailsComponent } from './feature-details.component';\n\n@Directive({\n  // This directive allow to view the route between the user coordinates and the feature\n  selector: '[igoFeatureDetailsDirective]',\n  standalone: true\n})\nexport class FeatureDetailsDirective implements OnInit {\n  private component: FeatureDetailsComponent;\n\n  get feature() {\n    return this.component.feature;\n  }\n  feature$ = new BehaviorSubject(undefined);\n\n  @Output() routingEvent = new EventEmitter<void>();\n\n  @HostListener('selectFeature')\n  setFeature() {\n    this.feature$.next(this.feature);\n  }\n\n  constructor(\n    @Self() component: FeatureDetailsComponent,\n    private el: ElementRef\n  ) {\n    this.component = component;\n  }\n\n  ngOnInit() {\n    this.feature$.subscribe(() => {\n      if (this.feature.geometry) {\n        this.bindClicking();\n      }\n    });\n  }\n\n  bindClicking() {\n    setTimeout(() => {\n      const routeElement = this.el.nativeElement.querySelector('span.routing');\n      if (routeElement) {\n        routeElement.addEventListener('click', () => {\n          this.routingEvent.emit();\n        });\n      }\n    }, 1);\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { FeatureDetailsComponent } from './feature-details.component';\nimport { FeatureDetailsDirective } from './feature-details.directive';\n\nexport const FEATURE_DETAILS_DIRECTIVES = [\n  FeatureDetailsComponent,\n  FeatureDetailsDirective\n] as const;\n\n/**\n * @deprecated import the FeatureDetailsComponent, FeatureDetailsDirective directly or the FEATURE_DETAILS_DIRECTIVES for all\n */\n@NgModule({\n  imports: [...FEATURE_DETAILS_DIRECTIVES],\n  exports: [...FEATURE_DETAILS_DIRECTIVES]\n})\nexport class IgoFeatureDetailsModule {}\n","import { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  ViewChild\n} from '@angular/core';\n\nimport { getEntityRevision } from '@igo2/common/entity';\nimport { Form, FormComponent } from '@igo2/common/form';\nimport { uuid } from '@igo2/utils';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { FEATURE } from '../shared/feature.enums';\nimport { Feature, FeatureMeta } from '../shared/feature.interfaces';\n\n/**\n * A configurable form, optionnally bound to a feature.\n * This component creates an entity form and, on submit,\n * returns a feature made out of the submitted data. It also\n * does things like managing the feature visibility while it's being updated\n * as well as disabling the selection of another feature.\n */\n@Component({\n  selector: 'igo-feature-form',\n  templateUrl: './feature-form.component.html',\n  styleUrls: ['./feature-form.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [FormComponent, AsyncPipe]\n})\nexport class FeatureFormComponent {\n  /**\n   * Form\n   */\n  @Input() form: Form;\n\n  /**\n   * Feature to update\n   */\n  @Input()\n  set feature(value: Feature | undefined) {\n    this.feature$.next(value);\n  }\n  get feature(): Feature | undefined {\n    return this.feature$.value;\n  }\n  readonly feature$ = new BehaviorSubject<Feature>(undefined);\n\n  /**\n   * Event emitted when the form is submitted\n   */\n  @Output() submitForm = new EventEmitter<Feature>();\n\n  @ViewChild('igoForm', { static: true }) igoForm: FormComponent;\n\n  /**\n   * Transform the form data to a feature and emit an event\n   * @param event Form submit event\n   * @internal\n   */\n  onSubmit(data: Record<string, any>) {\n    const feature = this.formDataToFeature(data);\n    this.submitForm.emit(feature);\n  }\n\n  getData(): Feature {\n    return this.formDataToFeature(this.igoForm.getData());\n  }\n\n  /**\n   * Transform the form data to a feature\n   * @param data Form data\n   * @returns A feature\n   */\n  private formDataToFeature(data: Record<string, any>): Feature {\n    const properties = {};\n    const meta = {};\n    if (this.feature === undefined) {\n      (meta as any).id = uuid();\n    } else {\n      Object.assign(properties, this.feature.properties);\n      Object.assign(meta, this.feature.meta, {\n        revision: getEntityRevision(this.feature) + 1\n      });\n    }\n\n    const propertyPrefix = 'properties.';\n    Object.entries(data).forEach((entry: [string, any]) => {\n      const [key, value] = entry;\n      if (key.startsWith(propertyPrefix)) {\n        const property = key.substr(propertyPrefix.length);\n        properties[property] = value;\n      }\n    });\n\n    let geometry = data.geometry;\n    if (geometry === undefined && this.feature !== undefined) {\n      geometry = this.feature.geometry;\n    }\n\n    return {\n      meta: meta as FeatureMeta,\n      type: FEATURE,\n      geometry,\n      projection: 'EPSG:4326',\n      properties\n    };\n  }\n}\n","<igo-form\n  #igoForm\n  [form]=\"form\"\n  [formData]=\"feature$ | async\"\n  (submitForm)=\"onSubmit($event)\"\n>\n  <ng-content></ng-content>\n\n  <ng-content select=\"[formButtons]\" formButtons></ng-content>\n</igo-form>\n","import { NgModule } from '@angular/core';\n\nimport { FEATURE_DETAILS_DIRECTIVES } from './feature-details';\nimport { FeatureFormComponent } from './feature-form/feature-form.component';\n\nexport const FEATURE_DIRECTIVES = [\n  ...FEATURE_DETAILS_DIRECTIVES,\n  FeatureFormComponent\n] as const;\n\n/**\n * @deprecated import the components directly or the FEATURE_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [...FEATURE_DIRECTIVES],\n  exports: [...FEATURE_DIRECTIVES]\n})\nexport class IgoFeatureModule {}\n","// See this issue: https://github.com/Microsoft/TypeScript/issues/13965\n// And the solution: https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work\n// for an explanation as to why the prototype is set manually\n\nexport class GeometrySliceError extends Error {}\n\nexport class GeometrySliceMultiPolygonError extends GeometrySliceError {\n  constructor() {\n    super(\"Can't slice a MultiPolygon.\");\n    Object.setPrototypeOf(this, GeometrySliceMultiPolygonError.prototype);\n  }\n}\n\nexport class GeometrySliceLineStringError extends GeometrySliceError {\n  constructor() {\n    super(\"Can't slice with a line that has more than 2 points.\");\n    Object.setPrototypeOf(this, GeometrySliceLineStringError.prototype);\n  }\n}\n\nexport class GeometrySliceTooManyIntersectionError extends GeometrySliceError {\n  constructor() {\n    super(\n      'More than 2 intersections found between the target polygon and the slicing line.'\n    );\n    Object.setPrototypeOf(\n      this,\n      GeometrySliceTooManyIntersectionError.prototype\n    );\n  }\n}\n","import BasicEvent from 'ol/events/Event';\nimport OlGeoJSON from 'ol/format/GeoJSON';\nimport OlCircle from 'ol/geom/Circle';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport OlLineString from 'ol/geom/LineString';\nimport OlLinearRing from 'ol/geom/LinearRing';\nimport OlPoint from 'ol/geom/Point';\nimport OlPolygon from 'ol/geom/Polygon';\nimport * as olstyle from 'ol/style';\n\nimport { lineString } from '@turf/helpers';\nimport lineIntersect from '@turf/line-intersect';\n\nimport {\n  GeometrySliceLineStringError,\n  GeometrySliceMultiPolygonError,\n  GeometrySliceTooManyIntersectionError\n} from './geometry.errors';\n\n/**\n * Create a default style for draw and modify interactions\n * @param color Style color (R, G, B)\n * @returns OL style\n */\nexport function createDrawInteractionStyle(\n  color?: [number, number, number]\n): olstyle.Circle {\n  color = color || [0, 153, 255];\n  return new olstyle.Circle({\n    stroke: new olstyle.Stroke({\n      color: color.concat([1]),\n      width: 2\n    }),\n    fill: new olstyle.Fill({\n      color: color.concat([0.2])\n    }),\n    radius: 8\n  });\n}\n\n/**\n * Create a default style for drawing a hole\n * @returns OL style\n */\nexport function createDrawHoleInteractionStyle(): olstyle.Style {\n  return new olstyle.Style({\n    stroke: new olstyle.Stroke({\n      color: [0, 153, 255, 1],\n      width: 2\n    })\n  });\n}\n\n/**\n * Slice geometry into two parts\n * @param olGeometry OL geometry\n * @param olSlicer Slicing line\n * @returns New OL geometries\n */\nexport function sliceOlGeometry(\n  olGeometry: OlLineString | OlPolygon,\n  olSlicer: OlLineString\n): (OlLineString | OlPolygon)[] {\n  if (olGeometry instanceof OlPolygon) {\n    return sliceOlPolygon(olGeometry, olSlicer);\n  } else if (olGeometry instanceof OlLineString) {\n    return [];\n  }\n  return [];\n}\n\n/**\n * Slice OL Polygon into one or more polygons\n * @param olPolygon OL polygon\n * @param olSlicer Slicing line\n * @returns New OL polygons\n */\nexport function sliceOlPolygon(\n  olPolygon: OlPolygon,\n  olSlicer: OlLineString\n): OlPolygon[] {\n  if (olPolygon.getLinearRingCount() > 1) {\n    throw new GeometrySliceMultiPolygonError();\n  }\n\n  if (olSlicer.getCoordinates().length > 2) {\n    throw new GeometrySliceLineStringError();\n  }\n\n  const olGeoJSON = new OlGeoJSON();\n  const slicer = olGeoJSON.writeGeometryObject(olSlicer) as any;\n  const outerCoordinates = olPolygon.getLinearRing(0).getCoordinates();\n\n  const parts = [[], []];\n  let totalIntersectionCount = 0;\n  for (let i = 0, ii = outerCoordinates.length - 1; i < ii; i++) {\n    const segmentCoordinates = [outerCoordinates[i], outerCoordinates[i + 1]];\n    const segment = lineString(segmentCoordinates);\n    const intersections = lineIntersect(segment, slicer).features;\n\n    const intersectionCount = intersections.length;\n    totalIntersectionCount += intersectionCount;\n    if (intersectionCount > 1 || totalIntersectionCount > 2) {\n      throw new GeometrySliceTooManyIntersectionError();\n    }\n\n    parts[0].push(segmentCoordinates[0]);\n    if (intersectionCount === 1) {\n      const intersection = intersections[0].geometry.coordinates;\n      parts[0].push(intersection);\n      parts[1].push(intersection);\n      parts.reverse();\n    }\n  }\n\n  if (totalIntersectionCount <= 1) {\n    return [];\n  }\n\n  parts[0].push(parts[0][0]);\n  parts[1].push(parts[1][0]);\n\n  return [new OlPolygon([parts[0]]), new OlPolygon([parts[1]])];\n}\n\n/**\n * Splice geometry into two parts\n * @param olGeometry OL geometry\n * @param olSlicer Slicing line\n * @returns New OL geometries\n */\nexport function addLinearRingToOlPolygon(\n  olPolygon: OlPolygon,\n  olLinearRing: OlLinearRing\n) {\n  // TODO: make some validation and support updating an existing linear ring\n  olPolygon.appendLinearRing(olLinearRing);\n}\n\nexport function getMousePositionFromOlGeometryEvent(olEvent: BasicEvent) {\n  const olGeometry = olEvent.target as OlGeometry;\n  if (olGeometry instanceof OlPolygon) {\n    return olGeometry.getFlatCoordinates().slice(-4, -2) as [number, number];\n  }\n  const olGeometryCast = olGeometry as OlPoint | OlLineString | OlCircle;\n  return olGeometryCast.getFlatCoordinates().slice(-2) as [number, number];\n}\n","import OlMap from 'ol/Map';\nimport { unByKey } from 'ol/Observable';\nimport { EventsKey } from 'ol/events';\nimport BasicEvent from 'ol/events/Event';\nimport { doubleClick } from 'ol/events/condition';\nimport type { Type } from 'ol/geom/Geometry';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport OlDraw from 'ol/interaction/Draw';\nimport { DrawEvent as OlDrawEvent } from 'ol/interaction/Draw';\nimport OlModify from 'ol/interaction/Modify';\nimport OlSelect from 'ol/interaction/Select';\nimport { SelectEvent as OlSelectEvent } from 'ol/interaction/Select';\nimport OlVectorLayer from 'ol/layer/Vector';\nimport OlVectorSource from 'ol/source/Vector';\nimport { StyleLike as OlStyleLike } from 'ol/style/Style';\n\nimport { BehaviorSubject, Subject, Subscription, fromEvent } from 'rxjs';\n\nimport { getMousePositionFromOlGeometryEvent } from '../geometry.utils';\n\nexport interface DrawControlOptions {\n  geometryType: Type | string;\n  drawingLayerSource?: OlVectorSource;\n  drawingLayer?: OlVectorLayer<OlVectorSource>;\n  drawingLayerStyle?: OlStyleLike;\n  interactionStyle?: OlStyleLike;\n  maxPoints?: number;\n}\n\n/**\n * Control to draw entities\n */\nexport class DrawControl {\n  /**\n   * Draw start observable\n   */\n  public start$ = new Subject<OlGeometry>();\n\n  /**\n   * Draw end observable\n   */\n  public end$ = new Subject<OlGeometry>();\n\n  /**\n   * Draw changes observable (while drawing)\n   */\n  public changes$ = new Subject<any>();\n\n  /**\n   * Draw modify observable (modify drawn features)\n   */\n  public modify$ = new Subject<OlGeometry>();\n\n  /**\n   * Draw select observable (modify drawn features)\n   */\n  public select$ = new Subject<any>();\n\n  /**\n   * Draw abort observable (abort drawn features)\n   */\n  public abort$ = new Subject<any>();\n\n  /**\n   * Freehand mode observable (defaults to false)\n   */\n  freehand$ = new BehaviorSubject<boolean>(false);\n  /**\n   * Observables from predefined radius (defaults to false and undefined)\n   */\n  ispredefinedRadius$ = new BehaviorSubject<boolean>(false);\n  predefinedRadius$ = new BehaviorSubject<number>(undefined);\n  radiusDrawEnd$ = new BehaviorSubject<number>(undefined);\n\n  private keyDown$$: Subscription;\n\n  private olGeometryType: typeof OlGeometry | undefined | string;\n  private olInteractionStyle: OlStyleLike;\n  private olMap: OlMap;\n  private olDrawingLayer: OlVectorLayer<OlVectorSource>;\n  private olDrawInteraction: OlDraw;\n  private olSelectInteraction: OlSelect;\n  private olModifyInteraction: OlModify;\n  private onDrawStartKey: EventsKey;\n  private onDrawEndKey: EventsKey;\n  private onDrawAbortKey: EventsKey;\n  private onDrawKey: EventsKey;\n  public radius: number;\n\n  private mousePosition: [number, number];\n\n  /**\n   * take the value of radius\n   */\n  get radiusVal(): number {\n    return this.predefinedRadius$.getValue();\n  }\n  set radiusValData(radiusCercle: number) {\n    this.predefinedRadius$.next(radiusCercle);\n  }\n\n  /**\n   * Wheter the control is active\n   */\n  get active(): boolean {\n    return this.olMap !== undefined;\n  }\n\n  /**\n   * OL overlay source\n   * @internal\n   */\n  get olDrawingLayerSource(): OlVectorSource {\n    return this.olDrawingLayer.getSource();\n  }\n\n  constructor(private options: DrawControlOptions) {\n    this.olDrawingLayer = options.drawingLayer\n      ? options.drawingLayer\n      : this.createOlInnerOverlayLayer();\n    this.olGeometryType = this.options.geometryType;\n    this.olInteractionStyle = this.options.interactionStyle;\n  }\n\n  /**\n   * Add or remove this control to/from a map.\n   * @param map OL Map\n   */\n  setOlMap(olMap: OlMap | undefined, activateModifyAndSelect?: boolean) {\n    if (!olMap) {\n      this.clearOlInnerOverlaySource();\n      this.removeOlInnerOverlayLayer();\n      this.removeOlInteractions();\n      this.olMap = olMap;\n      return;\n    }\n\n    this.olMap = olMap;\n    this.addOlInnerOverlayLayer();\n    this.addOlInteractions(activateModifyAndSelect);\n  }\n\n  /**\n   * Return the drawing layer source\n   */\n  getSource(): OlVectorSource {\n    return this.olDrawingLayerSource;\n  }\n\n  setOlInteractionStyle(style) {\n    this.olInteractionStyle = style;\n  }\n\n  /**\n   * Set the current geometry type\n   * @param geometryType the geometry type\n   */\n  setGeometryType(geometryType: Type) {\n    this.olGeometryType = geometryType;\n  }\n\n  /**\n   * Get the current geometry type\n   */\n  getGeometryType() {\n    return this.olGeometryType;\n  }\n\n  /**\n   * Create a drawing source if none is defined in the options\n   */\n  private createOlInnerOverlayLayer(): OlVectorLayer<OlVectorSource> {\n    return new OlVectorLayer({\n      source: this.options.drawingLayerSource\n        ? this.options.drawingLayerSource\n        : new OlVectorSource(),\n      style: this.options.drawingLayerStyle,\n      zIndex: 500\n    });\n  }\n\n  /**\n   * Clear the drawing layer if it wasn't defined in the options\n   */\n  private removeOlInnerOverlayLayer() {\n    if (!this.options.drawingLayer && this.olMap) {\n      this.olMap.removeLayer(this.olDrawingLayer);\n    }\n  }\n\n  /**\n   * Add the drawing layer if it wasn't defined in the options\n   */\n  private addOlInnerOverlayLayer() {\n    if (!this.options.drawingLayer) {\n      this.olMap.addLayer(this.olDrawingLayer);\n    }\n  }\n\n  /**\n   * Clear the drawing layer source if it wasn't defined in the options\n   */\n  private clearOlInnerOverlaySource() {\n    if (!this.options.drawingLayer && !this.options.drawingLayerSource) {\n      this.olDrawingLayerSource.clear(true);\n    }\n  }\n\n  /**\n   * Add interactions to the map an set up some listeners\n   */\n  addOlInteractions(activateModifyAndSelect?: boolean) {\n    // Create Draw interaction\n    let olDrawInteraction;\n    if (!this.freehand$.getValue()) {\n      if (!this.ispredefinedRadius$.getValue()) {\n        olDrawInteraction = new OlDraw({\n          type: this.olGeometryType as Type,\n          source: this.getSource(),\n          stopClick: true,\n          style: this.olInteractionStyle,\n          maxPoints: this.options.maxPoints,\n          freehand: false,\n          freehandCondition: () => false\n        });\n      } else {\n        olDrawInteraction = new OlDraw({\n          type: 'Point',\n          source: this.getSource(),\n          stopClick: true,\n          style: this.olInteractionStyle,\n          maxPoints: this.options.maxPoints,\n          freehand: false,\n          freehandCondition: () => false\n        });\n      }\n    } else {\n      if (this.olGeometryType === 'Point') {\n        olDrawInteraction = new OlDraw({\n          type: 'Circle',\n          source: this.getSource(),\n          style:\n            typeof this.olInteractionStyle === 'function'\n              ? undefined\n              : this.olInteractionStyle,\n          maxPoints: this.options.maxPoints,\n          freehand: true\n        });\n      } else {\n        olDrawInteraction = new OlDraw({\n          type: this.olGeometryType as Type,\n          source: this.getSource(),\n          style: this.olInteractionStyle,\n          maxPoints: this.options.maxPoints,\n          freehand: true\n        });\n      }\n    }\n\n    // Add Draw interaction to map and create listeners\n    this.olMap.addInteraction(olDrawInteraction);\n    this.olDrawInteraction = olDrawInteraction;\n    this.onDrawStartKey = olDrawInteraction.on(\n      'drawstart',\n      (event: OlDrawEvent) => this.onDrawStart(event)\n    );\n    this.onDrawEndKey = olDrawInteraction.on('drawend', (event: OlDrawEvent) =>\n      this.onDrawEnd(event)\n    );\n    this.onDrawAbortKey = olDrawInteraction.on(\n      'drawabort',\n      (event: OlDrawEvent) => this.abort$.next(event.feature.getGeometry())\n    );\n\n    if (activateModifyAndSelect) {\n      // Create a Modify interaction, add it to map and create a listener\n      const olModifyInteraction = new OlModify({\n        source: this.getSource()\n      });\n\n      this.olMap.addInteraction(olModifyInteraction);\n      this.olModifyInteraction = olModifyInteraction;\n\n      // Create a select interaction and add it to map\n      if (!this.olSelectInteraction) {\n        const olSelectInteraction = new OlSelect({\n          condition: doubleClick,\n          style: undefined\n        });\n        this.olMap.addInteraction(olSelectInteraction);\n        this.olSelectInteraction = olSelectInteraction;\n\n        this.olSelectInteraction.on('select', (event: OlSelectEvent) =>\n          this.onSelect(event)\n        );\n      }\n    }\n  }\n\n  /**\n   * Remove interactions\n   */\n  private removeOlInteractions() {\n    this.unsubscribeKeyDown();\n    unByKey([\n      this.onDrawStartKey,\n      this.onDrawEndKey,\n      this.onDrawKey,\n      this.onDrawAbortKey\n    ]);\n\n    if (this.olMap) {\n      this.olMap.removeInteraction(this.olDrawInteraction);\n      this.olMap.removeInteraction(this.olModifyInteraction);\n    }\n\n    this.olDrawInteraction = undefined;\n    this.olModifyInteraction = undefined;\n  }\n\n  /**\n   * When drawing starts, clear the overlay and start watching for changes\n   * @param event Draw start event\n   */\n  private onDrawStart(event: OlDrawEvent) {\n    const olGeometry = event.feature.getGeometry();\n    this.start$.next(olGeometry);\n    this.clearOlInnerOverlaySource();\n    this.onDrawKey = olGeometry.on('change', (olGeometryEvent: BasicEvent) => {\n      this.mousePosition = getMousePositionFromOlGeometryEvent(olGeometryEvent);\n      this.changes$.next(olGeometryEvent.target);\n    });\n    this.subscribeKeyDown();\n  }\n\n  /**\n   * When drawing ends, update the drawing (feature) geometry observable and add\n   * @param event Draw event (drawend)\n   */\n  private onDrawEnd(event: OlDrawEvent) {\n    if (event.feature.getGeometry().getType() === 'Point') {\n      this.radiusDrawEnd$.next(this.predefinedRadius$.getValue());\n    }\n    this.unsubscribeKeyDown();\n    unByKey(this.onDrawKey);\n    const olGeometry = event.feature.getGeometry();\n    olGeometry.on('change', () => {\n      this.modify$.next(olGeometry);\n    });\n    this.end$.next(olGeometry);\n  }\n\n  /**\n   * When a feature is selected, update the selected feature observable\n   * @param event Modify event (modifyend)\n   */\n  private onSelect(event: OlSelectEvent) {\n    if (event.selected.length === 1) {\n      this.select$.next(event.selected[0]);\n    }\n  }\n\n  /**\n   * Subscribe to key downs used as drawing interaction shorcuts\n   */\n  private subscribeKeyDown() {\n    this.unsubscribeKeyDown();\n    this.keyDown$$ = fromEvent(document, 'keydown').subscribe(\n      (event: KeyboardEvent) => {\n        // On Escape or 'c' keydowns, abort the current drawing\n        if (event.key === 'Escape') {\n          this.olDrawInteraction.abortDrawing();\n          return;\n        }\n\n        // On Backspace or 'u' keydowns, remove last vertex of current drawing\n        if (event.key === 'Backspace') {\n          this.olDrawInteraction.removeLastPoint();\n        }\n\n        // On Enter or 'f' keydowns, finish current drawing\n        if (event.key === 'Enter') {\n          this.olDrawInteraction.finishDrawing();\n        }\n\n        // On space bar key down, pan to the current mouse position\n        if (event.key === ' ') {\n          this.olMap.getView().animate({\n            center: this.mousePosition,\n            duration: 100\n          });\n          return;\n        }\n      }\n    );\n  }\n\n  /**\n   * Unsubscribe to key down\n   */\n  private unsubscribeKeyDown() {\n    if (this.keyDown$$) {\n      this.keyDown$$.unsubscribe();\n      this.keyDown$$ = undefined;\n    }\n  }\n}\n","export enum FontType {\n  Arial = 'Arial',\n  ArialBlack = 'Arial Black',\n  Verdana = 'Verdana',\n  Tahoma = 'Tahoma',\n  TrebuchetMS = 'Trebuchet MS',\n  Impact = 'Impact',\n  TimesNewRoman = 'Times New Roman',\n  Georgia = 'Georgia',\n  AmericanTypewriter = 'American Typewriter',\n  Courier = 'Courier',\n  LucidaConsole = 'Lucida Console',\n  BrushScriptMT = 'Brush Script MT',\n  ComicSansMS = 'Comic Sans MS'\n}\n","import { Injectable } from '@angular/core';\n\nimport OlPoint from 'ol/geom/Point';\nimport { ProjectionLike, transform } from 'ol/proj';\nimport * as OlStyle from 'ol/style';\n\nimport { FontType } from '../shared/font.enum';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DrawStyleService {\n  private fillColor = 'rgba(255,255,255,0.4)';\n  private strokeColor = 'rgba(143,7,7,1)';\n  private strokeWidth = 1;\n  private labelsAreShown = true;\n  private icon: string;\n  private fontSize = '15';\n  private fontStyle: string = FontType.Arial.toString();\n  private offsetX = 0;\n  private offsetY = 0;\n\n  getFillColor(): string {\n    return this.fillColor;\n  }\n\n  setFillColor(fillColor: string) {\n    this.fillColor = fillColor;\n  }\n\n  getStrokeColor(): string {\n    return this.strokeColor;\n  }\n\n  setStrokeColor(strokeColor: string) {\n    this.strokeColor = strokeColor;\n  }\n\n  getStrokeWidth(): number {\n    return this.strokeWidth;\n  }\n\n  getLabelsAreShown() {\n    return this.labelsAreShown;\n  }\n\n  toggleLabelsAreShown() {\n    this.labelsAreShown = !this.labelsAreShown;\n  }\n\n  setIcon(icon: string) {\n    this.icon = icon;\n  }\n\n  getIcon() {\n    return this.icon;\n  }\n\n  // To edit the label of drawing\n  getFontSize() {\n    return this.fontSize;\n  }\n\n  setFontSize(fontSize: string) {\n    this.fontSize = fontSize;\n  }\n\n  getFontStyle() {\n    return this.fontStyle;\n  }\n\n  setFontStyle(fontStyle: string) {\n    this.fontStyle = fontStyle;\n  }\n\n  getOffsetX(): number {\n    return this.offsetX;\n  }\n\n  setOffsetX(offsetX: number) {\n    this.offsetX = offsetX;\n  }\n\n  getOffsetY(): number {\n    return this.offsetY;\n  }\n\n  setOffsetY(offsetY: number) {\n    this.offsetY = offsetY;\n  }\n\n  createIndividualElementStyle(\n    feature,\n    resolution,\n    labelsAreShown: boolean,\n    fontSizeAndStyle: string,\n    fillColor: string,\n    strokeColor: string,\n    offsetX: number,\n    offsetY: number,\n    proj: ProjectionLike,\n    icon?: string\n  ): OlStyle.Style {\n    let style;\n    let labelsAreOffset = false;\n    const geom = feature.getGeometry();\n\n    if (geom instanceof OlPoint) {\n      labelsAreOffset = !labelsAreOffset;\n    }\n    const textToShow = labelsAreShown ? feature.get('draw') : '';\n    feature.set('_mapTitle', textToShow);\n    const textIgoStyleObject = {\n      text: textToShow,\n      stroke: {\n        color: 'white',\n        width: 0.75\n      },\n      fill: { color: 'black' },\n      font: fontSizeAndStyle,\n      overflow: true,\n      offsetX: offsetX,\n      offsetY: offsetY\n    };\n\n    let igoStyleObject;\n\n    // if feature is a circle\n    if (feature.get('rad')) {\n      const coordinates = transform(\n        feature.getGeometry().flatCoordinates,\n        proj,\n        'EPSG:4326'\n      );\n      const radius =\n        feature.get('rad') /\n        Math.cos((Math.PI / 180) * coordinates[1]) /\n        resolution;\n      igoStyleObject = {\n        text: textIgoStyleObject,\n        circle: {\n          radius,\n          stroke: {\n            color: strokeColor ? strokeColor : this.strokeColor,\n            width: this.strokeWidth\n          },\n          fill: {\n            color: fillColor\n          }\n        }\n      };\n      feature.set('_style', igoStyleObject);\n\n      style = new OlStyle.Style({\n        text: new OlStyle.Text({\n          text: textToShow,\n          stroke: new OlStyle.Stroke({\n            color: 'white',\n            width: 0.75\n          }),\n          fill: new OlStyle.Fill({\n            color: 'black'\n          }),\n\n          font: fontSizeAndStyle,\n          overflow: true,\n          offsetX: offsetX,\n          offsetY: offsetY\n        }),\n\n        image: new OlStyle.Circle({\n          radius,\n          stroke: new OlStyle.Stroke({\n            color: strokeColor ? strokeColor : this.strokeColor,\n            width: this.strokeWidth\n          }),\n          fill: new OlStyle.Fill({\n            color: fillColor\n          })\n        })\n      });\n      return style;\n\n      // if feature is an icon\n    } else if (icon) {\n      this.offsetY = -26;\n      textIgoStyleObject.offsetY = this.offsetY;\n      const igoStyleObject = {\n        text: textIgoStyleObject,\n        stroke: {\n          color: strokeColor,\n          width: this.strokeWidth\n        },\n        fill: {\n          color: fillColor\n        },\n        icon: {\n          src: icon\n        }\n      };\n      feature.set('_style', igoStyleObject);\n\n      style = new OlStyle.Style({\n        text: new OlStyle.Text({\n          text: labelsAreShown ? feature.get('draw') : '',\n          stroke: new OlStyle.Stroke({\n            color: 'white',\n            width: 0.75\n          }),\n          fill: new OlStyle.Fill({\n            color: 'black'\n          }),\n          font: fontSizeAndStyle,\n          overflow: true,\n          offsetX: offsetX,\n          offsetY: offsetY\n        }),\n\n        stroke: new OlStyle.Stroke({\n          color: strokeColor,\n          width: this.strokeWidth\n        }),\n\n        fill: new OlStyle.Fill({\n          color: fillColor\n        }),\n\n        image: new OlStyle.Icon({\n          src: icon\n        })\n      });\n      return style;\n\n      // if feature is a point, a linestring or a polygon\n    } else {\n      this.offsetY = labelsAreOffset ? -15 : 0;\n\n      textIgoStyleObject.offsetY = this.offsetY;\n      const igoStyleObject = {\n        text: textIgoStyleObject,\n        stroke: {\n          color: strokeColor,\n          width: this.strokeWidth\n        },\n        fill: {\n          color: fillColor\n        },\n        circle: {\n          radius: 5,\n          stroke: {\n            color: strokeColor,\n            width: this.strokeWidth\n          },\n          fill: {\n            color: fillColor\n          }\n        }\n      };\n      feature.set('_style', igoStyleObject);\n\n      style = new OlStyle.Style({\n        text: new OlStyle.Text({\n          text: labelsAreShown ? feature.get('draw') : '',\n          stroke: new OlStyle.Stroke({\n            color: 'white',\n            width: 0.75\n          }),\n          fill: new OlStyle.Fill({\n            color: 'black'\n          }),\n          font: fontSizeAndStyle,\n          overflow: true,\n\n          offsetX: offsetX,\n          offsetY: offsetY\n        }),\n\n        stroke: new OlStyle.Stroke({\n          color: strokeColor,\n          width: this.strokeWidth\n        }),\n\n        fill: new OlStyle.Fill({\n          color: fillColor\n        }),\n\n        image: new OlStyle.Circle({\n          radius: 5,\n          stroke: new OlStyle.Stroke({\n            color: strokeColor,\n            width: this.strokeWidth\n          }),\n          fill: new OlStyle.Fill({\n            color: fillColor\n          })\n        })\n      });\n      return style;\n    }\n  }\n}\n","import { NgFor, NgIf } from '@angular/common';\nimport { Component, Inject, Input, OnInit } from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder,\n  UntypedFormGroup\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport {\n  MAT_DIALOG_DATA,\n  MatDialogActions,\n  MatDialogContent,\n  MatDialogRef,\n  MatDialogTitle\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { ColorPickerFormFieldComponent } from '@igo2/common/color';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { FontType } from '../../shared/font.enum';\nimport { DrawStyleService } from '../../style-service/draw-style.service';\nimport {\n  DrawingMatDialogData,\n  StyleModalData\n} from '../shared/style-modal.interface';\n\n@Component({\n  selector: 'igo-style-modal-drawing',\n  templateUrl: './style-modal-drawing.component.html',\n  styleUrls: ['./style-modal-drawing.component.scss'],\n  standalone: true,\n  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    FormsModule,\n    ReactiveFormsModule,\n    NgIf,\n    MatIconModule,\n    ColorPickerFormFieldComponent,\n    MatFormFieldModule,\n    MatInputModule,\n    MatSelectModule,\n    NgFor,\n    MatOptionModule,\n    MatDialogActions,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class StyleModalDrawingComponent implements OnInit {\n  @Input() confirmFlag = false;\n\n  public form: UntypedFormGroup;\n\n  public styleModalData: StyleModalData;\n  public linestringOnly: boolean;\n\n  constructor(\n    public dialogRef: MatDialogRef<StyleModalDrawingComponent>,\n    private formBuilder: UntypedFormBuilder,\n    private drawStyleService: DrawStyleService,\n    @Inject(MAT_DIALOG_DATA) public data: DrawingMatDialogData\n  ) {}\n\n  ngOnInit() {\n    this.linestringOnly = true;\n    for (const feature of this.data.features) {\n      if (feature.geometry.type !== 'LineString') {\n        this.linestringOnly = false;\n      }\n    }\n    this.buildStyleData();\n    this.buildForm();\n  }\n\n  private buildForm() {\n    this.form = this.formBuilder.group({\n      fill: [this.getFeatureFillColor()],\n      stroke: [this.getFeatureStrokeColor()]\n    });\n  }\n\n  private buildStyleData() {\n    this.styleModalData = {\n      fillColor:\n        this.data.features.length > 0\n          ? this.data.features[0].properties.drawingStyle.fill\n          : 'rgba(255,255,255,0.4)',\n      strokeColor:\n        this.data.features.length > 0\n          ? this.data.features[0].properties.drawingStyle.stroke\n          : 'rgba(143,7,7,1)',\n      fontSize:\n        this.data.features.length > 0\n          ? this.data.features[0].properties.fontStyle\n              .split(' ')[0]\n              .replace('px', '')\n          : '20',\n      fontStyle:\n        this.data.features.length > 0\n          ? this.data.features[0].properties.fontStyle.substring(\n              this.data.features[0].properties.fontStyle.indexOf(' ') + 1\n            )\n          : FontType.Arial,\n      offsetX:\n        this.data.features.length > 0\n          ? this.data.features[0].properties.offsetX\n          : this.drawStyleService.getOffsetX(),\n      offsetY:\n        this.data.features.length > 0\n          ? this.data.features[0].properties.offsetY\n          : this.drawStyleService.getOffsetY()\n    };\n  }\n\n  get allFontStyles(): string[] {\n    return Object.values(FontType);\n  }\n\n  getFeatureFontSize(): string {\n    if (!this.styleModalData.fontSize) {\n      return this.data.features.length > 0\n        ? this.data.features[0].properties.fontStyle\n            .split(' ')[0]\n            .replace('px', '')\n        : '20';\n    } else {\n      return this.styleModalData.fontSize;\n    }\n  }\n\n  getFeatureFontStyle() {\n    if (!this.styleModalData.fontStyle) {\n      return this.data.features.length > 0\n        ? this.data.features[0].properties.fontStyle.substring(\n            this.data.features[0].properties.fontStyle.indexOf(' ') + 1\n          )\n        : FontType.Arial;\n    } else {\n      return this.styleModalData.fontStyle;\n    }\n  }\n\n  private getFeatureFillColor() {\n    if (!this.styleModalData.fillColor) {\n      return this.data.features.length > 0\n        ? this.data.features[0].properties.drawingStyle.fill\n        : 'rgba(255,255,255,0.4)';\n    } else {\n      return this.styleModalData.fillColor;\n    }\n  }\n\n  private getFeatureStrokeColor() {\n    if (!this.styleModalData.strokeColor) {\n      return this.data.features.length > 0\n        ? this.data.features[0].properties.drawingStyle.stroke\n        : 'rgba(143,7,7,1)';\n    } else {\n      return this.styleModalData.strokeColor;\n    }\n  }\n\n  getFeatureOffsetX() {\n    if (!this.styleModalData.offsetX) {\n      return this.data.features.length > 0\n        ? this.data.features[0].properties.offsetX\n        : this.drawStyleService.getOffsetX();\n    } else {\n      return this.styleModalData.offsetX;\n    }\n  }\n\n  getFeatureOffsetY() {\n    if (!this.styleModalData.offsetY) {\n      return this.data.features.length > 0\n        ? this.data.features[0].properties.offsetY\n        : this.drawStyleService.getOffsetY();\n    } else {\n      return this.styleModalData.offsetY;\n    }\n  }\n\n  cancelDrawing() {\n    this.dialogRef.close();\n  }\n\n  confirm() {\n    this.confirmFlag = true;\n    if (this.form.get('fill').value) {\n      this.styleModalData.fillColor = this.form.get('fill').value;\n    }\n\n    if (this.form.get('stroke').value) {\n      this.styleModalData.strokeColor = this.form.get('stroke').value;\n    }\n    this.dialogRef.close(this.styleModalData);\n  }\n\n  openPicker() {\n    this.dialogRef.disableClose = true;\n  }\n\n  closePicker() {\n    this.dialogRef.disableClose = false;\n  }\n}\n","<h2 mat-dialog-title>\n  {{ 'igo.geo.style.styleModal' | translate }}\n</h2>\n<div\n  class=\"edition-drawing\"\n  mat-dialog-content\n  [hidden]=\"data.features.length === 0\"\n>\n  <form class=\"igo-form\" [formGroup]=\"form\">\n    <div class=\"color-picker\">\n      <ng-container *ngIf=\"linestringOnly !== true\">\n        <span>\n          <mat-icon class=\"stroke-palette-icon\">format_color_fill</mat-icon>\n          {{ 'igo.geo.style.fill' | translate }}\n        </span>\n\n        <igo-color-picker-form-field\n          formControlName=\"fill\"\n        ></igo-color-picker-form-field>\n      </ng-container>\n\n      <span>\n        <mat-icon class=\"stroke-palette-icon\">border_color </mat-icon>\n        {{ 'igo.geo.style.stroke' | translate }}\n      </span>\n\n      <igo-color-picker-form-field\n        formControlName=\"stroke\"\n      ></igo-color-picker-form-field>\n    </div>\n\n    <div class=\"igo-input-container\">\n      <mat-form-field class=\"igo-form-input-box\" subscriptSizing=\"dynamic\">\n        <mat-label>{{ 'igo.geo.style.fontSize' | translate }}</mat-label>\n        <input\n          matInput\n          #testFontSize\n          type=\"number\"\n          placeholder=\"10\"\n          min=\"10\"\n          onkeydown=\"return event.keyCode !== 69\"\n          [value]=\"getFeatureFontSize()\"\n          (input)=\"styleModalData.fontSize = $any($event.target).value\"\n        />\n        <span matTextSuffix>px</span>\n      </mat-form-field>\n      <mat-form-field class=\"igo-form-input-box\" subscriptSizing=\"dynamic\">\n        <mat-label>{{ 'igo.geo.style.fontStyle' | translate }}</mat-label>\n        <mat-select\n          #testFontStyle\n          [value]=\"getFeatureFontStyle()\"\n          (selectionChange)=\"styleModalData.fontStyle = $event.value\"\n        >\n          <mat-option\n            *ngFor=\"let fontSelect of allFontStyles\"\n            [value]=\"fontSelect\"\n          >\n            {{ fontSelect }}\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n      <mat-form-field class=\"igo-form-input-box\" subscriptSizing=\"dynamic\">\n        <mat-label>{{ 'igo.geo.style.offsetX' | translate }}</mat-label>\n        <input\n          matInput\n          #offsetXInput\n          type=\"number\"\n          onkeydown=\"return event.keyCode !== 69\"\n          [value]=\"getFeatureOffsetX()\"\n          (input)=\"styleModalData.offsetX = $any($event.target).value\"\n        />\n      </mat-form-field>\n      <mat-form-field class=\"igo-form-input-box\" subscriptSizing=\"dynamic\">\n        <mat-label>{{ 'igo.geo.style.offsetY' | translate }}</mat-label>\n        <input\n          matInput\n          #offsetYInput\n          type=\"number\"\n          onkeydown=\"return event.keyCode !== 69\"\n          [value]=\"getFeatureOffsetY()\"\n          (input)=\"styleModalData.offsetY = $any($event.target).value\"\n        />\n      </mat-form-field>\n    </div>\n  </form>\n</div>\n<div mat-dialog-actions>\n  <button mat-raised-button (click)=\"cancelDrawing()\">\n    {{ 'igo.geo.style.cancel' | translate }}\n  </button>\n  <button mat-raised-button color=\"primary\" (click)=\"confirm()\">OK</button>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MatDialogActions,\n  MatDialogContent,\n  MatDialogRef\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nexport interface DialogData {\n  label: string;\n}\n\n@Component({\n  selector: 'igo-draw-popup-component',\n  templateUrl: './draw-layer-popup.component.html',\n  styleUrls: ['./draw-layer-popup.component.scss'],\n  standalone: true,\n  imports: [\n    MatDialogContent,\n    MatFormFieldModule,\n    MatInputModule,\n    MatDialogActions,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class DrawLayerPopupComponent {\n  @Input() confirmFlag = false;\n\n  constructor(public dialogRef: MatDialogRef<DrawLayerPopupComponent>) {}\n\n  cancelDrawing() {\n    this.dialogRef.close();\n  }\n  confirm(labelString: string) {\n    this.confirmFlag = true;\n    this.dialogRef.close(labelString);\n  }\n}\n","<div mat-dialog-content>\n  <p class=\"mat-typography\">\n    {{ 'igo.geo.draw.layer.layerDialogInstruction' | translate }}\n  </p>\n  <mat-form-field class=\"example-full-width\">\n    <input\n      #input\n      matInput\n      placeholder=\"{{ 'igo.geo.draw.layer.title' | translate }}\"\n    />\n  </mat-form-field>\n</div>\n<div mat-dialog-actions>\n  <button mat-raised-button (click)=\"cancelDrawing()\">\n    {{ 'igo.geo.draw.cancel' | translate }}\n  </button>\n  <button mat-raised-button color=\"primary\" (click)=\"confirm(input.value)\">\n    OK\n  </button>\n</div>\n","import { NgFor, NgIf } from '@angular/common';\nimport { Component, Inject, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatOptionModule } from '@angular/material/core';\nimport {\n  MAT_DIALOG_DATA,\n  MatDialogActions,\n  MatDialogContent,\n  MatDialogRef,\n  MatDialogTitle\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport OlFeature from 'ol/Feature';\nimport { Coordinate } from 'ol/coordinate';\nimport Circle from 'ol/geom/Circle';\nimport { fromCircle } from 'ol/geom/Polygon';\nimport { transform } from 'ol/proj';\nimport { getLength } from 'ol/sphere';\n\nimport { IgoMap, roundCoordTo } from '../../map/shared';\nimport {\n  MeasureAreaUnit,\n  MeasureAreaUnitAbbreviation,\n  MeasureLengthUnit,\n  MeasureLengthUnitAbbreviation\n} from '../../measure/shared/measure.enum';\nimport {\n  measureOlGeometryArea,\n  measureOlGeometryLength,\n  metersToUnit,\n  squareMetersToUnit\n} from '../../measure/shared/measure.utils';\nimport { CoordinatesUnit, GeometryType, LabelType } from '../shared/draw.enum';\nimport { DDtoDMS } from '../shared/draw.utils';\n\n@Component({\n  selector: 'igo-draw-popup-component',\n  templateUrl: './draw-popup.component.html',\n  styleUrls: ['./draw-popup.component.scss'],\n  standalone: true,\n  imports: [\n    MatDialogTitle,\n    NgIf,\n    MatDialogContent,\n    MatButtonToggleModule,\n    MatRadioModule,\n    NgFor,\n    MatCheckboxModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatSelectModule,\n    MatOptionModule,\n    MatDialogActions,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class DrawPopupComponent {\n  @Input() confirmFlag = false;\n  @Input() labelFlag: LabelType | [LabelType, LabelType] = LabelType.Custom;\n  @Input() coordinatesMeasureUnit: CoordinatesUnit;\n  @Input() lengthMeasureUnit: MeasureLengthUnit;\n  @Input() areaMeasureUnit: MeasureAreaUnit;\n\n  public geometryType = GeometryType;\n  public labelType = LabelType;\n  public arrayBuiltInType: any[] = [];\n\n  public currentLabel: string;\n  public currentCoordinates: string;\n  public currentArea: string;\n  public currentLength: string;\n\n  public olGeometryType: GeometryType = undefined;\n  public lengthInMeters: string;\n  public areaInMetersSquare: string;\n  public coordinatesInDD: string;\n  public currentCoordinatesUnit: string;\n\n  private longlatDD: Coordinate;\n  private labelLength: number;\n\n  public polygonCheck = 0; // Count for polygon label types checkboxes\n\n  constructor(\n    private languageService: LanguageService,\n    public dialogRef: MatDialogRef<DrawPopupComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: { olGeometry: any; map: IgoMap }\n  ) {\n    this.currentLabel = this.data.olGeometry.get('draw');\n    this.labelLength = this.currentLabel ? this.currentLabel.length : 0;\n    let olGeometry;\n\n    const projection = this.data.map.ol.getView().getProjection();\n\n    if (this.data.olGeometry instanceof OlFeature) {\n      if (this.data.olGeometry.get('rad')) {\n        const longitudeLatitude = [\n          this.data.olGeometry.get('longitude'),\n          this.data.olGeometry.get('latitude')\n        ];\n        this.olGeometryType = GeometryType.Circle;\n        olGeometry = new Circle(\n          longitudeLatitude,\n          this.data.olGeometry.get('rad')\n        );\n      } else {\n        this.olGeometryType = this.data.olGeometry.getGeometry().getType();\n        olGeometry = this.data.olGeometry.get('geometry');\n      }\n    } else {\n      this.olGeometryType = this.data.olGeometry.getType();\n      olGeometry = this.data.olGeometry;\n    }\n\n    if (\n      this.olGeometryType === GeometryType.Point ||\n      this.olGeometryType === GeometryType.Circle\n    ) {\n      if (this.data.olGeometry instanceof OlFeature) {\n        const longitude = this.data.olGeometry.get('longitude');\n        const latitude = this.data.olGeometry.get('latitude');\n        this.longlatDD = roundCoordTo([longitude, latitude], 5);\n        this.coordinatesInDD = '(' + latitude + ', ' + longitude + ')';\n      } else {\n        const point4326 = transform(\n          this.data.olGeometry.getFlatCoordinates(),\n          projection,\n          'EPSG:4326'\n        );\n        this.longlatDD = roundCoordTo([point4326[0], point4326[1]], 5);\n        this.coordinatesInDD =\n          '(' + this.longlatDD[1] + ', ' + this.longlatDD[0] + ')';\n      }\n      this.currentCoordinates = this.coordinatesInDD;\n    }\n    if (this.olGeometryType === GeometryType.LineString) {\n      this.lengthInMeters = measureOlGeometryLength(\n        olGeometry,\n        projection.getCode()\n      ).toFixed(2);\n      this.currentLength = this.lengthInMeters;\n    } else if (this.olGeometryType === GeometryType.Polygon) {\n      this.lengthInMeters = measureOlGeometryLength(\n        olGeometry,\n        projection.getCode()\n      ).toFixed(2);\n      this.currentLength = this.lengthInMeters;\n      this.areaInMetersSquare = measureOlGeometryArea(\n        olGeometry,\n        projection.getCode()\n      ).toFixed(2);\n      this.currentArea = this.areaInMetersSquare;\n    } else if (this.olGeometryType === GeometryType.Circle) {\n      const circularPolygon = fromCircle(olGeometry, 10000);\n      const radius = this.getRadius(circularPolygon);\n      this.lengthInMeters = radius.toFixed(2);\n      this.currentLength = this.lengthInMeters;\n      this.areaInMetersSquare = measureOlGeometryArea(\n        circularPolygon,\n        projection.getCode()\n      ).toFixed(2);\n      this.currentArea = this.areaInMetersSquare;\n    }\n\n    if (data.olGeometry.get('labelType') === LabelType.Coordinates) {\n      this.onLabelTypeChange(LabelType.Predefined);\n      this.onLabelTypeChange(LabelType.Coordinates, true);\n      this.coordinatesMeasureUnit = data.olGeometry.get('measureUnit');\n    } else if (data.olGeometry.get('labelType') === LabelType.Length) {\n      this.onLabelTypeChange(LabelType.Predefined);\n      this.onLabelTypeChange(LabelType.Length, true);\n      this.lengthMeasureUnit = data.olGeometry.get('measureUnit');\n    } else if (data.olGeometry.get('labelType') === LabelType.Area) {\n      this.onLabelTypeChange(LabelType.Predefined);\n      this.onLabelTypeChange(LabelType.Area, true);\n      this.areaMeasureUnit = data.olGeometry.get('measureUnit');\n    } else if (data.olGeometry.get('labelType')?.length === 2) {\n      this.onLabelTypeChange(LabelType.Predefined);\n      this.onLabelTypeChange(LabelType.Length, true);\n      this.onLabelTypeChange(LabelType.Area, true);\n      this.lengthMeasureUnit = data.olGeometry.get('measureUnit')[0];\n      this.areaMeasureUnit = data.olGeometry.get('measureUnit')[1];\n    }\n    this.buildArrayType();\n  }\n\n  /**\n   * HTML Interactions\n   */\n\n  cancelDrawing() {\n    this.dialogRef.close();\n  }\n\n  confirm(input?: string) {\n    this.confirmFlag = true;\n    if (this.labelFlag === LabelType.Predefined) {\n      this.dialogRef.close();\n    } else if (this.labelFlag === LabelType.Custom) {\n      this.dialogRef.close({\n        label: input\n      });\n    } else if (this.labelFlag === LabelType.Coordinates) {\n      this.dialogRef.close({\n        label: this.currentCoordinates,\n        measureUnit: this.coordinatesMeasureUnit\n      });\n    } else if (this.olGeometryType === GeometryType.Polygon) {\n      if (this.polygonCheck === 2) {\n        this.labelFlag = [LabelType.Length, LabelType.Area];\n        this.dialogRef.close({\n          label:\n            'P: ' +\n            this.currentLength +\n            ' ' +\n            MeasureLengthUnitAbbreviation[MeasureLengthUnit.Meters] +\n            '\\n' +\n            this.languageService.translate.instant('igo.geo.draw.labelType.A') +\n            this.currentArea +\n            ' ' +\n            MeasureAreaUnitAbbreviation[MeasureAreaUnit.SquareMeters],\n          measureUnit: [this.lengthMeasureUnit, this.areaMeasureUnit]\n        });\n      } else {\n        this.labelFlag === LabelType.Length\n          ? this.dialogRef.close({\n              label:\n                'P: ' +\n                this.currentLength +\n                ' ' +\n                MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],\n              measureUnit: this.lengthMeasureUnit\n            })\n          : this.dialogRef.close({\n              label:\n                this.currentArea +\n                ' ' +\n                MeasureAreaUnitAbbreviation[this.areaMeasureUnit],\n              measureUnit: this.areaMeasureUnit\n            });\n      }\n    } else if (this.labelFlag === LabelType.Length) {\n      if (this.olGeometryType === GeometryType.Circle) {\n        this.dialogRef.close({\n          label:\n            'R: ' +\n            this.currentLength +\n            ' ' +\n            MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],\n          measureUnit: this.lengthMeasureUnit\n        });\n      } else if (this.olGeometryType === GeometryType.LineString) {\n        this.dialogRef.close({\n          label:\n            this.currentLength +\n            ' ' +\n            MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],\n          measureUnit: this.lengthMeasureUnit\n        });\n      }\n    } else if (this.labelFlag === LabelType.Area) {\n      this.dialogRef.close({\n        label:\n          this.currentArea +\n          ' ' +\n          MeasureAreaUnitAbbreviation[this.areaMeasureUnit],\n        measureUnit: this.areaMeasureUnit\n      });\n    }\n  }\n\n  onLabelTypeChange(labelType: LabelType, checked?: boolean) {\n    if (\n      labelType !== LabelType.Predefined &&\n      labelType !== LabelType.Custom &&\n      this.olGeometryType === GeometryType.Polygon\n    ) {\n      this.arrayBuiltInType.find((type) => type.value === labelType)\n        ? (this.arrayBuiltInType.find(\n            (type) => type.value === labelType\n          ).checked = checked)\n        : (this.labelFlag = undefined);\n      checked\n        ? (this.labelFlag = labelType)\n        : (this.labelFlag = this.arrayBuiltInType.find(\n            (type) => type.checked\n          )?.value);\n    } else {\n      this.labelFlag = labelType;\n    }\n\n    if (labelType === LabelType.Predefined) {\n      if (this.olGeometryType === GeometryType.Point) {\n        this.labelFlag = LabelType.Coordinates;\n        this.currentCoordinates = this.coordinatesInDD;\n        this.coordinatesMeasureUnit = CoordinatesUnit.DecimalDegree;\n      } else if (this.olGeometryType === GeometryType.LineString) {\n        this.labelFlag = LabelType.Length;\n        this.currentLength = this.lengthInMeters;\n        this.lengthMeasureUnit = MeasureLengthUnit.Meters;\n      }\n    } else if (labelType === LabelType.Area) {\n      this.currentArea = this.areaInMetersSquare;\n      this.areaMeasureUnit = MeasureAreaUnit.SquareMeters;\n    } else if (labelType === LabelType.Length) {\n      this.currentLength = this.lengthInMeters;\n      this.lengthMeasureUnit = MeasureLengthUnit.Meters;\n    } else if (this.labelFlag === LabelType.Coordinates) {\n      this.currentCoordinates = this.coordinatesInDD;\n      this.coordinatesMeasureUnit = CoordinatesUnit.DecimalDegree;\n    }\n\n    const labeltypes = [this.labelType.Length, this.labelType.Area];\n    if (\n      this.olGeometryType === GeometryType.Polygon &&\n      labeltypes.includes(labelType)\n    ) {\n      checked ? (this.polygonCheck += 1) : (this.polygonCheck -= 1);\n    } else {\n      this.polygonCheck = 0;\n    }\n  }\n\n  onChangeLengthUnit(lengthUnit: MeasureLengthUnit) {\n    this.lengthMeasureUnit = lengthUnit;\n    this.currentLength = metersToUnit(\n      Number(this.lengthInMeters),\n      lengthUnit\n    ).toFixed(2);\n  }\n\n  onChangeAreaUnit(areaUnit: MeasureAreaUnit) {\n    this.areaMeasureUnit = areaUnit;\n    this.currentArea = squareMetersToUnit(\n      Number(this.areaInMetersSquare),\n      areaUnit\n    ).toFixed(2);\n  }\n\n  onChangeCoordinateUnit(coordinatesUnit: CoordinatesUnit) {\n    this.coordinatesMeasureUnit = coordinatesUnit;\n    const coordinates = DDtoDMS(this.longlatDD, coordinatesUnit);\n    this.currentCoordinates =\n      '(' + coordinates[1] + ', ' + coordinates[0] + ')';\n  }\n\n  buildArrayType() {\n    for (const labelType of Object.values(LabelType)) {\n      if (\n        labelType !== LabelType.Custom &&\n        labelType !== LabelType.Predefined\n      ) {\n        this.arrayBuiltInType.push({\n          value: labelType,\n          checked:\n            this.selectOptions(labelType) ||\n            this.labelFlag === labelType ||\n            (this.polygonCheck === 2 && labelType !== LabelType.Coordinates)\n        });\n      }\n    }\n  }\n\n  noLabelButton() {\n    if (\n      this.labelFlag === LabelType.Predefined ||\n      (this.labelFlag === LabelType.Custom && this.labelLength === 0)\n    ) {\n      return this.languageService.translate.instant('igo.geo.draw.noLabel');\n    }\n\n    return 'OK';\n  }\n\n  get customOrPredefined() {\n    if (this.labelFlag === LabelType.Custom) {\n      return LabelType.Custom;\n    }\n    return LabelType.Predefined;\n  }\n\n  optionAvailable(currentOption: LabelType) {\n    switch (this.olGeometryType) {\n      case GeometryType.Point:\n        if (currentOption === LabelType.Coordinates) {\n          return false;\n        }\n        return true;\n      case GeometryType.LineString:\n        if (currentOption === LabelType.Length) {\n          return false;\n        }\n        return true;\n      case GeometryType.Polygon:\n        if (currentOption === LabelType.Coordinates) {\n          return true;\n        }\n        return false;\n      default:\n        return false;\n    }\n  }\n\n  get allLengthUnits(): MeasureLengthUnit[] {\n    return Object.values(MeasureLengthUnit);\n  }\n\n  getLengthUnitEnum(lengthUnit: MeasureLengthUnit) {\n    return MeasureLengthUnitAbbreviation[lengthUnit];\n  }\n\n  get allAreaUnits(): MeasureAreaUnit[] {\n    return Object.values(MeasureAreaUnit);\n  }\n\n  get allCoordinatesUnits(): CoordinatesUnit[] {\n    return Object.values(CoordinatesUnit);\n  }\n\n  getAreaUnitEnum(areaUnit: MeasureAreaUnit) {\n    return MeasureAreaUnitAbbreviation[areaUnit];\n  }\n\n  private getRadius(olGeometry): number {\n    const length = getLength(olGeometry);\n    return Number(length / (2 * Math.PI));\n  }\n\n  get lengthLabelT() {\n    if (this.olGeometryType === GeometryType.Polygon) {\n      return this.languageService.translate.instant(\n        'igo.geo.measure.perimeter'\n      );\n    }\n    if (this.olGeometryType === GeometryType.Circle) {\n      return this.languageService.translate.instant(\n        'igo.geo.search.coordinates.radius'\n      );\n    }\n    return this.languageService.translate.instant(\n      'igo.geo.draw.labelType.Length'\n    );\n  }\n\n  getLabelLength(event?) {\n    this.labelLength = event.length;\n  }\n\n  selectOptions(option) {\n    if (this.olGeometryType === GeometryType.Point) {\n      return option === LabelType.Coordinates;\n    } else if (this.olGeometryType === GeometryType.LineString) {\n      return option === LabelType.Length;\n    }\n  }\n\n  getProperLengthLabel(option) {\n    if (option === LabelType.Length) {\n      if (this.olGeometryType === GeometryType.Polygon) {\n        return this.languageService.translate.instant(\n          'igo.geo.measure.perimeter'\n        );\n      }\n      if (this.olGeometryType === GeometryType.Circle) {\n        return this.languageService.translate.instant(\n          'igo.geo.search.coordinates.radius'\n        );\n      }\n      return this.languageService.translate.instant(\n        'igo.geo.draw.labelType.Length'\n      );\n    }\n    return this.languageService.translate.instant(\n      'igo.geo.draw.labelType.' + option\n    );\n  }\n}\n","<h2 mat-dialog-title>\n  {{ 'igo.geo.draw.popupTitle' | translate }}\n</h2>\n\n<ng-container *ngIf=\"labelFlag !== labelType.Custom\">\n  <div mat-dialog-content class=\"geometry-type-toggle\">\n    <div class=\"button-toggle-container\">\n      <mat-button-toggle-group\n        (change)=\"onLabelTypeChange($event.value)\"\n        [value]=\"customOrPredefined\"\n      >\n        <mat-button-toggle [value]=\"labelType.Custom\">\n          {{ 'igo.geo.draw.labelType.custom' | translate }}\n        </mat-button-toggle>\n        <mat-button-toggle [value]=\"labelType.Predefined\">\n          {{ 'igo.geo.draw.labelType.predefined' | translate }}\n        </mat-button-toggle>\n      </mat-button-toggle-group>\n    </div>\n    <div>\n      <p>\n        {{ 'igo.geo.draw.builtInInstructions' | translate }}\n      </p>\n      <mat-radio-group *ngIf=\"olGeometryType !== 'Polygon'\">\n        <mat-radio-button\n          *ngFor=\"let option of arrayBuiltInType\"\n          [value]=\"option.value\"\n          [disabled]=\"optionAvailable(option.value)\"\n          (change)=\"onLabelTypeChange($event.value)\"\n          [checked]=\"option.checked\"\n        >\n          {{ getProperLengthLabel(option.value) }}\n        </mat-radio-button>\n      </mat-radio-group>\n      <ng-container *ngIf=\"olGeometryType === 'Polygon'\">\n        <mat-checkbox\n          *ngFor=\"let option of arrayBuiltInType\"\n          class=\"mat-typography\"\n          [value]=\"option.value\"\n          [disabled]=\"optionAvailable(option.value)\"\n          (change)=\"\n            onLabelTypeChange($any($event.source.value), $event.checked)\n          \"\n          [checked]=\"option.checked\"\n        >\n          {{ getProperLengthLabel(option.value) }}\n        </mat-checkbox>\n      </ng-container>\n      <div *ngIf=\"labelFlag === labelType.Coordinates\" class=\"fields-container\">\n        <mat-form-field class=\"readOnly-Input\">\n          <mat-label>(Latitude, Longitude)</mat-label>\n          <input\n            #input\n            matInput\n            placeholder=\"(Latitude, Longitude)\"\n            value=\"{{ currentCoordinates }}\"\n            readonly\n          />\n        </mat-form-field>\n        <mat-form-field class=\"unit-field\">\n          <mat-select\n            [value]=\"coordinatesMeasureUnit\"\n            (selectionChange)=\"onChangeCoordinateUnit($event.value)\"\n          >\n            <mat-option *ngFor=\"let unit of allCoordinatesUnits\" [value]=\"unit\">\n              {{ unit }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n      <div\n        *ngIf=\"labelFlag === labelType.Length || polygonCheck === 2\"\n        class=\"fields-container\"\n      >\n        <mat-form-field class=\"readOnly-Input\">\n          <mat-label>{{ lengthLabelT }}</mat-label>\n          <input\n            #input\n            matInput\n            placeholder=\"{{ lengthLabelT }}\"\n            value=\"{{ currentLength }}\"\n            readonly\n          />\n        </mat-form-field>\n        <mat-form-field class=\"unit-field\">\n          <mat-select\n            [value]=\"lengthMeasureUnit\"\n            (selectionChange)=\"onChangeLengthUnit($event.value)\"\n          >\n            <mat-option *ngFor=\"let unit of allLengthUnits\" [value]=\"unit\">\n              {{ getLengthUnitEnum(unit) }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n      <div\n        *ngIf=\"labelFlag === labelType.Area || polygonCheck === 2\"\n        class=\"fields-container\"\n      >\n        <mat-form-field class=\"readOnly-Input\">\n          <mat-label>{{ 'igo.geo.draw.labelType.Area' | translate }}</mat-label>\n          <input\n            #input\n            matInput\n            placeholder=\"{{ 'igo.geo.draw.labelType.Area' | translate }}\"\n            value=\"{{ currentArea }}\"\n            readonly\n          />\n        </mat-form-field>\n        <mat-form-field class=\"unit-field\">\n          <mat-select\n            [value]=\"areaMeasureUnit\"\n            (selectionChange)=\"onChangeAreaUnit($event.value)\"\n          >\n            <mat-option *ngFor=\"let unit of allAreaUnits\" [value]=\"unit\">\n              {{ getAreaUnitEnum(unit) }}\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n    </div>\n  </div>\n\n  <div mat-dialog-actions>\n    <button mat-raised-button (click)=\"cancelDrawing()\">\n      {{ 'igo.geo.draw.cancel' | translate }}\n    </button>\n    <button mat-raised-button color=\"primary\" (click)=\"confirm()\">\n      {{ noLabelButton() }}\n    </button>\n  </div>\n</ng-container>\n\n<ng-container *ngIf=\"labelFlag === labelType.Custom\">\n  <div mat-dialog-content class=\"geometry-type-toggle\">\n    <div class=\"button-toggle-container\">\n      <mat-button-toggle-group\n        (change)=\"onLabelTypeChange($event.value)\"\n        [value]=\"customOrPredefined\"\n      >\n        <mat-button-toggle [value]=\"labelType.Custom\">\n          {{ 'igo.geo.draw.labelType.custom' | translate }}\n        </mat-button-toggle>\n        <mat-button-toggle [value]=\"labelType.Predefined\">\n          {{ 'igo.geo.draw.labelType.predefined' | translate }}\n        </mat-button-toggle>\n      </mat-button-toggle-group>\n    </div>\n    <p>\n      {{ 'igo.geo.draw.dialogInstruction' | translate }}\n    </p>\n    <mat-form-field class=\"input\">\n      <mat-label>{{ 'igo.geo.draw.dialogTitle' | translate }}</mat-label>\n      <input\n        #input\n        matInput\n        (select)=\"(true)\"\n        (input)=\"getLabelLength($any($event.target).value)\"\n        placeholder=\"{{ 'igo.geo.draw.dialogTitle' | translate }}\"\n        value=\"{{ currentLabel }}\"\n        cdkFocusInitial\n      />\n    </mat-form-field>\n  </div>\n\n  <div mat-dialog-actions>\n    <button mat-raised-button (click)=\"cancelDrawing()\">\n      {{ 'igo.geo.draw.cancel' | translate }}\n    </button>\n    <button mat-raised-button color=\"primary\" (click)=\"confirm(input.value)\">\n      {{ noLabelButton() }}\n    </button>\n  </div>\n</ng-container>\n","import { Component } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MatDialogActions,\n  MatDialogClose,\n  MatDialogContent\n} from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport {\n  IconSvg,\n  IgoIconComponent,\n  KEYBOARD_ESC_ICON\n} from '@igo2/common/icon';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\n@Component({\n  selector: 'igo-draw-shorcuts',\n  templateUrl: './draw-shorcuts.component.html',\n  styleUrls: ['./draw-shorcuts.component.scss'],\n  standalone: true,\n  imports: [\n    MatDialogContent,\n    MatIconModule,\n    MatDialogActions,\n    MatButtonModule,\n    MatDialogClose,\n    IgoLanguageModule,\n    IgoIconComponent\n  ]\n})\nexport class DrawShorcutsComponent {\n  svgIcon: IconSvg = KEYBOARD_ESC_ICON;\n}\n","<mat-dialog-content>\n  <div>\n    <span class=\"shortcut mat-typography\">\n      <mat-icon class=\"shortcut-icon\">keyboard_return</mat-icon\n      >{{ 'igo.geo.draw.finish' | translate }}</span\n    >\n  </div>\n  <div>\n    <span class=\"shortcut mat-typography\">\n      <mat-icon class=\"shortcut-icon\">keyboard_backspace</mat-icon\n      >{{ 'igo.geo.draw.undo' | translate }}</span\n    >\n  </div>\n  <div>\n    <span class=\"shortcut mat-typography\">\n      <igo-icon [icon]=\"svgIcon\" />\n      {{ 'igo.geo.draw.abort' | translate }}\n    </span>\n  </div>\n  <div>\n    <span class=\"shortcut mat-typography\">\n      <mat-icon class=\"shortcut-icon\">space_bar</mat-icon\n      >{{ 'igo.geo.draw.move' | translate }}</span\n    >\n  </div>\n</mat-dialog-content>\n<mat-dialog-actions class=\"shortcuts-close\">\n  <button mat-raised-button mat-dialog-close color=\"primary\">OK</button>\n</mat-dialog-actions>\n","import {\n  animate,\n  state,\n  style,\n  transition,\n  trigger\n} from '@angular/animations';\nimport { AsyncPipe, NgFor, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder,\n  UntypedFormControl,\n  UntypedFormGroup\n} from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS,\n  MatButtonToggleDefaultOptions,\n  MatButtonToggleModule\n} from '@angular/material/button-toggle';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport {\n  EntityRecord,\n  EntityTableButton,\n  EntityTableColumnRenderer,\n  EntityTableComponent,\n  EntityTableTemplate\n} from '@igo2/common/entity';\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport OlFeature from 'ol/Feature';\nimport OlOverlay from 'ol/Overlay';\nimport OlGeoJSON from 'ol/format/GeoJSON';\nimport OlCircle from 'ol/geom/Circle';\nimport type { Type } from 'ol/geom/Geometry';\nimport { default as OlGeometry } from 'ol/geom/Geometry';\nimport OlPoint from 'ol/geom/Point';\nimport Polygon, { fromCircle } from 'ol/geom/Polygon';\nimport * as olproj from 'ol/proj';\nimport { transform } from 'ol/proj';\nimport { VectorSourceEvent as OlVectorSourceEvent } from 'ol/source/Vector';\nimport OlVectorSource from 'ol/source/Vector';\nimport { getDistance, getLength } from 'ol/sphere';\nimport * as OlStyle from 'ol/style';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { first, skip } from 'rxjs/operators';\n\nimport { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';\nimport {\n  FEATURE,\n  FeatureMotion,\n  FeatureStore,\n  FeatureStoreLoadingStrategy,\n  FeatureStoreSelectionStrategy,\n  featureToOl,\n  tryAddLoadingStrategy,\n  tryAddSelectionStrategy\n} from '../../feature';\nimport { tryBindStoreLayer } from '../../feature/shared/feature-store.utils';\nimport { DrawControl } from '../../geometry/shared/controls/draw';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport { IgoMap } from '../../map/shared/map';\nimport {\n  MeasureAreaUnit,\n  MeasureAreaUnitAbbreviation,\n  MeasureLengthUnit,\n  MeasureLengthUnitAbbreviation\n} from '../../measure/shared/measure.enum';\nimport { getTooltipsOfOlGeometry } from '../../measure/shared/measure.utils';\nimport {\n  measureOlGeometryArea,\n  measureOlGeometryLength,\n  metersToUnit,\n  squareMetersToUnit\n} from '../../measure/shared/measure.utils';\nimport { FontType } from '../../style/shared/font.enum';\nimport { StyleModalDrawingComponent } from '../../style/style-modal/drawing/style-modal-drawing.component';\nimport { StyleModalData } from '../../style/style-modal/shared/style-modal.interface';\nimport { DrawStyleService } from '../../style/style-service/draw-style.service';\nimport { DrawIconService } from '../shared/draw-icon.service';\nimport { CoordinatesUnit, GeometryType, LabelType } from '../shared/draw.enum';\nimport { Draw, FeatureWithDraw } from '../shared/draw.interface';\nimport { DDtoDMS, createInteractionStyle } from '../shared/draw.utils';\nimport { DrawLayerPopupComponent } from './draw-layer-popup.component';\nimport { DrawPopupComponent } from './draw-popup.component';\nimport { DrawShorcutsComponent } from './draw-shorcuts.component';\n\n@Component({\n  selector: 'igo-draw',\n  animations: [\n    trigger('openClose', [\n      state(\n        'open',\n        style({\n          opacity: 1\n        })\n      ),\n      state(\n        'closed',\n        style({\n          opacity: 0\n        })\n      ),\n      transition('open => closed', [animate('600ms ease')]),\n      transition('closed => open', [animate('800ms ease')])\n    ])\n  ],\n  templateUrl: './draw.component.html',\n  styleUrls: ['./draw.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatButtonToggleModule,\n    MatSlideToggleModule,\n    NgIf,\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatSelectModule,\n    NgFor,\n    MatOptionModule,\n    MatDividerModule,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    EntityTableComponent,\n    MatBadgeModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ],\n  providers: [\n    {\n      provide: MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS,\n      useValue: {\n        hideSingleSelectionIndicator: true\n      } satisfies MatButtonToggleDefaultOptions\n    }\n  ]\n})\nexport class DrawComponent implements OnInit, OnDestroy {\n  /**\n   * Table template\n   * @internal\n   */\n  public tableTemplate: EntityTableTemplate;\n\n  public geometryType = GeometryType; // Reference to the GeometryType enum\n  @Input() map: IgoMap; // Map to draw on\n\n  @Input()\n  get stores(): FeatureStore<FeatureWithDraw>[] {\n    return this._stores;\n  }\n  set stores(value: FeatureStore<FeatureWithDraw>[]) {\n    this._stores = value;\n  }\n  private _stores: FeatureStore<FeatureWithDraw>[] = [];\n\n  @Input()\n  get drawControls(): [string, DrawControl][] {\n    return this._drawControls;\n  }\n  set drawControls(value: [string, DrawControl][]) {\n    this._drawControls = value;\n  }\n  private _drawControls = [];\n\n  @Input()\n  get activeDrawingLayer(): VectorLayer {\n    return this._activeDrawingLayer;\n  }\n  set activeDrawingLayer(value: VectorLayer) {\n    this._activeDrawingLayer = value;\n  }\n  private _activeDrawingLayer: VectorLayer;\n\n  @Output() activeLayerChange = new EventEmitter<VectorLayer>();\n  @Output() drawControlsEvent = new EventEmitter<[string, DrawControl][]>();\n  @Output() layersIDEvent = new EventEmitter<string>();\n\n  @Output() fillColor: string;\n  @Output() strokeColor: string;\n  @Output() strokeWidth: number;\n\n  @Output() fontSize: string;\n  @Output() fontStyle: string;\n\n  public activeStore: FeatureStore<FeatureWithDraw>;\n  private layerCounterID = 0;\n  public draw$ = new BehaviorSubject<Draw>({}); // Observable of draw\n  private activeDrawingLayerSource = new OlVectorSource();\n  private activeDrawControl: DrawControl;\n  private drawEnd$$: Subscription;\n  private drawSelect$$: Subscription;\n  public selectedFeatures$ = new BehaviorSubject<FeatureWithDraw[]>([]);\n  public fillForm: string;\n  public strokeForm: string;\n  public drawControlIsDisabled = true;\n  public drawControlIsActive = false;\n  public labelsAreShown: boolean;\n  public freehandMode = false;\n  private subscriptions$$: Subscription[] = [];\n\n  public position = 'bottom';\n  public form: UntypedFormGroup;\n  public icons: string[];\n  public icon: string;\n\n  public radiusFormControl = new UntypedFormControl(1000);\n  public measureUnit: MeasureLengthUnit = MeasureLengthUnit.Meters;\n  public radiusFormControlChange$$: Subscription = new Subscription();\n  public predefinedRadius$ = new BehaviorSubject<number>(undefined);\n  public radiusDrawEnd$ = new BehaviorSubject<number>(undefined);\n\n  /**\n   * Available measure units for the measure type given\n   * @internal\n   */\n  get measureUnits(): string[] {\n    return [MeasureLengthUnit.Meters, MeasureLengthUnit.Kilometers];\n  }\n  private numberOfDrawings: number;\n  public isCreatingNewLayer = false;\n  private currGeometryType = this.geometryType.Point as any;\n\n  @ViewChild('selectedLayer') select;\n\n  constructor(\n    private languageService: LanguageService,\n    private formBuilder: UntypedFormBuilder,\n    private drawStyleService: DrawStyleService,\n    private dialog: MatDialog,\n    private drawIconService: DrawIconService\n  ) {\n    this.tableTemplate = {\n      selection: true,\n      selectMany: true,\n      selectionCheckbox: true,\n      sort: true,\n      fixedHeader: true,\n      tableHeight: 'auto',\n      columns: [\n        {\n          name: 'Drawing',\n          title: this.languageService.translate.instant('igo.geo.draw.labels'),\n          valueAccessor: (feature: FeatureWithDraw) => {\n            return feature.properties.draw;\n          }\n        },\n        {\n          name: 'Edition',\n          title: '',\n          sort: false,\n          valueAccessor: (feature: FeatureWithDraw) => {\n            return [\n              {\n                editMode: false,\n                icon: 'edit',\n                color: 'primary',\n                click: () => {\n                  this.editLabelDrawing(feature);\n                },\n                style: 'mat-icon-button'\n              }\n            ] as EntityTableButton[];\n          },\n          renderer: EntityTableColumnRenderer.ButtonGroup\n        }\n      ]\n    };\n    this.buildForm();\n    this.fillColor = this.drawStyleService.getFillColor();\n    this.strokeColor = this.drawStyleService.getStrokeColor();\n    this.strokeWidth = this.drawStyleService.getStrokeWidth();\n    this.labelsAreShown = this.drawStyleService.getLabelsAreShown();\n    this.icons = this.drawIconService.getIcons();\n    this.icon = this.drawStyleService.getIcon();\n\n    this.fontSize = this.drawStyleService.getFontSize();\n    this.fontStyle = this.drawStyleService.getFontStyle();\n  }\n\n  // Initialize the store that will contain the entities and create the Draw control\n  ngOnInit() {\n    if (!this.stores.length) {\n      this.activeStore = new FeatureStore<FeatureWithDraw>([], {\n        map: this.map\n      });\n      this.initStore();\n      this.activeDrawControl = this.createDrawControl(\n        this.fillColor,\n        this.strokeColor,\n        this.strokeWidth\n      );\n      this.activeDrawControl.setGeometryType(this.geometryType.Point as any);\n      this.toggleDrawControl();\n      this.stores.push(this.activeStore);\n      this.drawControls.push([\n        this.activeDrawingLayer.id,\n        this.activeDrawControl\n      ]);\n      this.drawControlsEvent.emit(this.drawControls);\n      this.layersIDEvent.emit(this.activeDrawingLayer.id);\n      this.onLayerChange(this.activeDrawingLayer);\n    } else {\n      this.activeStore = this.stores.find(\n        (store) => store.layer.id === this.activeDrawingLayer.id\n      );\n      this.activeDrawControl = this.drawControls.find(\n        (dc) => dc[0] === this.activeDrawingLayer.id\n      )[1];\n      this.deactivateDrawControl();\n      this.allLayers.forEach((layer) => {\n        if (layer.id !== this.activeDrawingLayer.id) {\n          layer.opacity = 0;\n        }\n        const store = this.stores.find((s) => s.layer.id === layer.id);\n\n        this.subscriptions$$.push(\n          store.stateView\n            .manyBy$((record: EntityRecord<FeatureWithDraw>) => {\n              return record.state.selected === true;\n            })\n            .pipe(first())\n            .subscribe((records: EntityRecord<FeatureWithDraw>[]) => {\n              records.forEach((record) => {\n                record.state.selected = false;\n              });\n            })\n        );\n\n        this.subscriptions$$.push(\n          store.stateView\n            .manyBy$((record: EntityRecord<FeatureWithDraw>) => {\n              return record.state.selected === true;\n            })\n            .pipe(\n              skip(1) // Skip initial emission\n            )\n            .subscribe((records: EntityRecord<FeatureWithDraw>[]) => {\n              this.selectedFeatures$.next(\n                records.map((record) => record.entity)\n              );\n            })\n        );\n      });\n      this.onLayerChange(this.activeDrawingLayer);\n    }\n\n    this.radiusFormControlChange$$ =\n      this.radiusFormControl.valueChanges.subscribe((value) => {\n        if (this.activeDrawControl.ispredefinedRadius$.getValue()) {\n          this.changeRadius(value);\n        }\n      });\n  }\n\n  /**\n   * Remove the drawing layer and the interactions\n   * @internal\n   */\n  ngOnDestroy() {\n    if (this.activeStore.count === 0) {\n      this.activeStore.map.layerController.remove(this.activeDrawingLayer);\n    }\n    this.allLayers.forEach((layer) => (layer.opacity = 1));\n    this.activeStore.state.updateAll({ selected: false });\n    this.deactivateDrawControl();\n    this.subscriptions$$.map((s) => s.unsubscribe());\n    this.radiusFormControlChange$$.unsubscribe();\n  }\n\n  /**\n   * Create a Draw Control\n   * @param fillColor the fill color\n   * @param strokeColor the stroke color\n   * @param strokeWidth the stroke width\n   * @returns a Draw Control\n   */\n  createDrawControl(\n    fillColor?: string,\n    strokeColor?: string,\n    strokeWidth?: number\n  ) {\n    const activeDrawControl = new DrawControl({\n      geometryType: undefined,\n      drawingLayerSource: this.activeDrawingLayerSource,\n      drawingLayerStyle: new OlStyle.Style({}),\n      interactionStyle: createInteractionStyle(\n        fillColor,\n        strokeColor,\n        strokeWidth\n      )\n    });\n    return activeDrawControl;\n  }\n\n  /**\n   * Store initialization, including drawing layer creation\n   */\n\n  private initStore(newTitle?: string, isNewLayer?: boolean) {\n    this.createLayer(newTitle, isNewLayer);\n    this.subscriptions$$.push(\n      this.activeStore.stateView\n        .manyBy$((record: EntityRecord<FeatureWithDraw>) => {\n          return record.state.selected === true;\n        })\n        .pipe(\n          skip(1) // Skip initial emission\n        )\n        .subscribe((records: EntityRecord<FeatureWithDraw>[]) => {\n          this.selectedFeatures$.next(records.map((record) => record.entity));\n        })\n    );\n  }\n\n  /**\n   * Open the style modal dialog box\n   */\n  openStyleModalDialog() {\n    setTimeout(() => {\n      // open the dialog box used to style features\n      const dialogRef = this.dialog.open(StyleModalDrawingComponent, {\n        disableClose: false,\n        data: {\n          features: this.selectedFeatures$.getValue(),\n          icons: this.icons,\n          icon: this.icon\n        },\n        autoFocus: false\n      });\n\n      // when dialog box is closed, get label and set it to geometry\n      dialogRef.afterClosed().subscribe((data: StyleModalData) => {\n        // checks if the user clicked ok\n        if (dialogRef.componentInstance.confirmFlag) {\n          this.onFontChange(this.labelsAreShown, data.fontSize, data.fontStyle);\n          this.onColorChange(\n            this.labelsAreShown,\n            this.icon ? true : false,\n            data.fillColor,\n            data.strokeColor\n          );\n          this.onOffsetLabelChange(\n            this.labelsAreShown,\n            data.offsetX,\n            data.offsetY\n          );\n        }\n      });\n    }, 250);\n  }\n\n  /**\n   * Open a dialog box to enter label and do something\n   * @param olGeometry geometry at draw end or selected geometry\n   * @param drawEnd event fired at drawEnd?\n   */\n  private openDrawDialog(olGeometry, isDrawEnd: boolean) {\n    setTimeout(() => {\n      // open the dialog box used to enter label\n      const dialogRef = this.dialog.open(DrawPopupComponent, {\n        disableClose: false,\n        data: { olGeometry: olGeometry, map: this.map }\n      });\n\n      // when dialog box is closed, get label and set it to geometry\n      dialogRef.afterClosed().subscribe((result) => {\n        // checks if the user clicked ok\n        if (dialogRef.componentInstance.confirmFlag) {\n          this.updateLabelOfOlGeometry(olGeometry, result.label);\n          this.updateLabelType(\n            olGeometry,\n            dialogRef.componentInstance.labelFlag\n          );\n          this.updateMeasureUnit(olGeometry, result.measureUnit);\n\n          if (!(olGeometry instanceof OlFeature)) {\n            this.updateFontSizeAndStyle(olGeometry, '15', FontType.Arial);\n            this.updateFillAndStrokeColor(\n              olGeometry,\n              'rgba(255,255,255,0.4)',\n              'rgba(143,7,7,1)'\n            );\n            this.updateOffset(\n              olGeometry,\n              0,\n              olGeometry instanceof OlPoint ? -15 : 0\n            );\n          }\n\n          isDrawEnd\n            ? this.onDrawEnd(olGeometry)\n            : this.onSelectDraw(olGeometry, result.label, [\n                dialogRef.componentInstance.labelFlag,\n                result.measureUnit\n              ]);\n          this.updateHeightTable();\n        }\n        // deletes the feature\n        else {\n          this.activeDrawingLayerSource\n            .getFeatures()\n            .forEach((drawingLayerFeature) => {\n              const geometry = drawingLayerFeature.getGeometry() as any;\n              if (olGeometry === geometry) {\n                this.activeDrawingLayerSource.removeFeature(\n                  drawingLayerFeature\n                );\n              }\n            });\n        }\n      });\n    }, 250);\n  }\n\n  /**\n   * Clear the draw source and track the geometry being draw\n   * @param olGeometry Ol linestring or polygon\n   */\n  private onDrawEnd(olGeometry: OlGeometry, radius?: number) {\n    this.addFeatureToStore(olGeometry, radius);\n    this.clearLabelsOfOlGeometry(olGeometry);\n    this.activeStore.layer.ol.getSource().refresh();\n  }\n\n  private onModifyDraw(olGeometry) {\n    const entities = this.activeStore.all();\n\n    entities.forEach((entity) => {\n      const entityId = entity.properties.id;\n      const olGeometryId = olGeometry.ol_uid;\n\n      if (entityId === olGeometryId) {\n        if (entity.properties.labelType === LabelType.Coordinates) {\n          const longLat = DDtoDMS(\n            [entity.properties.longitude, entity.properties.latitude],\n            entity.properties.measureUnit as CoordinatesUnit\n          );\n          this.updateLabelOfOlGeometry(\n            olGeometry,\n            '(' + longLat[1] + ', ' + longLat[0] + ')'\n          );\n        } else if (entity.properties.labelType === LabelType.Length) {\n          if (olGeometry instanceof OlCircle) {\n            const circularPolygon = fromCircle(olGeometry, 10000);\n            const radius = metersToUnit(\n              this.getRadius(circularPolygon),\n              entity.properties.measureUnit as MeasureLengthUnit\n            );\n            const unit =\n              MeasureLengthUnitAbbreviation[entity.properties.measureUnit];\n            const radiusLabel =\n              'R: ' + radius.toFixed(2).toString() + ' ' + unit;\n            this.updateLabelOfOlGeometry(olGeometry, radiusLabel);\n          } else {\n            let olGeometryLength = measureOlGeometryLength(\n              olGeometry,\n              this.map.ol.getView().getProjection().getCode()\n            );\n            const temp: MeasureLengthUnit = entity.properties\n              .measureUnit as MeasureLengthUnit;\n            const measureUnit =\n              MeasureLengthUnitAbbreviation[entity.properties.measureUnit];\n            olGeometryLength = metersToUnit(olGeometryLength, temp);\n            const lengthLabel =\n              olGeometry instanceof Polygon\n                ? 'P: ' +\n                  olGeometryLength.toFixed(2).toString() +\n                  ' ' +\n                  measureUnit\n                : olGeometryLength.toFixed(2).toString() + ' ' + measureUnit;\n            this.updateLabelOfOlGeometry(olGeometry, lengthLabel);\n          }\n        } else if (entity.properties.labelType === LabelType.Area) {\n          if (olGeometry instanceof OlCircle) {\n            const circularPolygon = fromCircle(olGeometry, 10000);\n            let circleArea = measureOlGeometryArea(\n              circularPolygon,\n              this.map.ol.getView().getProjection().getCode()\n            );\n            const unit =\n              MeasureAreaUnitAbbreviation[entity.properties.measureUnit];\n            const temp: MeasureAreaUnit = entity.properties\n              .measureUnit as MeasureAreaUnit;\n            circleArea = squareMetersToUnit(circleArea, temp);\n            const areaLabel = circleArea.toFixed(2).toString() + ' ' + unit;\n            this.updateLabelOfOlGeometry(olGeometry, areaLabel);\n          } else {\n            let olGeometryArea = measureOlGeometryArea(\n              olGeometry,\n              this.map.ol.getView().getProjection().getCode()\n            );\n            const temp: MeasureAreaUnit = entity.properties\n              .measureUnit as MeasureAreaUnit;\n            const measureUnit =\n              MeasureAreaUnitAbbreviation[entity.properties.measureUnit];\n            olGeometryArea = squareMetersToUnit(olGeometryArea, temp);\n            const lengthLabel =\n              olGeometryArea.toFixed(2).toString() + ' ' + measureUnit;\n            this.updateLabelOfOlGeometry(olGeometry, lengthLabel);\n          }\n        } else {\n          this.updateLabelOfOlGeometry(olGeometry, entity.properties.draw);\n        }\n\n        this.updateLabelType(olGeometry, entity.properties.labelType);\n        this.updateMeasureUnit(olGeometry, entity.properties.measureUnit);\n        this.updateFontSizeAndStyle(\n          olGeometry,\n          entity.properties.fontStyle.split(' ')[0].replace('px', ''),\n          entity.properties.fontStyle.substring(\n            entity.properties.fontStyle.indexOf(' ') + 1\n          )\n        );\n        this.updateFillAndStrokeColor(\n          olGeometry,\n          entity.properties.drawingStyle.fill,\n          entity.properties.drawingStyle.stroke\n        );\n        this.updateOffset(\n          olGeometry,\n          entity.properties.offsetX,\n          entity.properties.offsetY\n        );\n        this.replaceFeatureInStore(entity, olGeometry);\n      }\n    });\n  }\n\n  private onSelectDraw(\n    olFeature: OlFeature<OlGeometry>,\n    label: string,\n    labelTypeAndUnit?\n  ) {\n    const entities = this.activeStore.all();\n\n    const olGeometry = olFeature.getGeometry() as any;\n    olGeometry.ol_uid = olFeature.get('id');\n\n    const olGeometryCoordinates = JSON.stringify(\n      olGeometry.getCoordinates()[0]\n    );\n\n    entities.forEach((entity) => {\n      const entityCoordinates = JSON.stringify(entity.geometry.coordinates[0]);\n      if (olGeometryCoordinates === entityCoordinates) {\n        const fontSize = olFeature\n          .get('fontStyle')\n          .split(' ')[0]\n          .replace('px', '');\n        const fontStyle = olFeature\n          .get('fontStyle')\n          .substring(olFeature.get('fontStyle').indexOf(' ') + 1);\n\n        const fillColor = olFeature.get('drawingStyle').fill;\n        const strokeColor = olFeature.get('drawingStyle').stroke;\n\n        const offsetX = olFeature.get('offsetX');\n        const offsetY = olFeature.get('offsetY');\n\n        const rad: number = entity.properties.rad\n          ? entity.properties.rad\n          : undefined;\n        this.updateLabelOfOlGeometry(olGeometry, label);\n        this.updateFontSizeAndStyle(olGeometry, fontSize, fontStyle);\n        this.updateFillAndStrokeColor(olGeometry, fillColor, strokeColor);\n        this.updateOffset(olGeometry, offsetX, offsetY);\n        this.updateLabelType(olGeometry, labelTypeAndUnit[0]);\n        this.updateMeasureUnit(olGeometry, labelTypeAndUnit[1]);\n        this.replaceFeatureInStore(entity, olGeometry, rad);\n      }\n    });\n  }\n\n  /**\n   * Add a feature with draw label to the store. The loading stragegy of the store\n   * will trigger and add the feature to the map.\n   * @internal\n   */\n  private addFeatureToStore(\n    olGeometry,\n    radius?: number,\n    feature?: FeatureWithDraw\n  ) {\n    let rad: number;\n    let center4326: number[];\n    let point4326: number[];\n    let lon4326: number;\n    let lat4326: number;\n\n    const featureId = feature ? feature.properties.id : olGeometry.ol_uid;\n    const projection = this.map.ol.getView().getProjection();\n\n    const geometry = new OlGeoJSON().writeGeometryObject(olGeometry, {\n      featureProjection: projection,\n      dataProjection: projection\n    }) as any;\n\n    if (olGeometry instanceof OlCircle || radius) {\n      if (radius) {\n        rad = radius;\n      } else {\n        geometry.type = 'Point';\n        geometry.coordinates = olGeometry.getCenter();\n        const extent4326 = transform(\n          [\n            olGeometry.getFlatCoordinates()[2],\n            olGeometry.getFlatCoordinates()[3]\n          ],\n          projection,\n          'EPSG:4326'\n        );\n        center4326 = transform(\n          [\n            olGeometry.getFlatCoordinates()[0],\n            olGeometry.getFlatCoordinates()[1]\n          ],\n          projection,\n          'EPSG:4326'\n        );\n        lon4326 = center4326[0];\n        lat4326 = center4326[1];\n        rad = getDistance(center4326, extent4326);\n        this.radiusFormControl.setValue(Math.round(rad));\n      }\n    }\n    if (this.activeDrawControl.radiusDrawEnd$.getValue()) {\n      rad = this.activeDrawControl.radiusDrawEnd$.getValue();\n    }\n\n    if (olGeometry instanceof OlPoint) {\n      point4326 = transform(\n        olGeometry.getFlatCoordinates(),\n        projection,\n        'EPSG:4326'\n      );\n      lon4326 = point4326[0];\n      lat4326 = point4326[1];\n    }\n\n    this.activeStore.update({\n      type: FEATURE,\n      geometry,\n      projection: projection.getCode(),\n      properties: {\n        id: featureId,\n        draw: olGeometry.get('_label'),\n        longitude: lon4326 ? lon4326 : null,\n        latitude: lat4326 ? lat4326 : null,\n        rad: rad ? rad : null,\n        fontStyle: olGeometry.get('fontStyle_'),\n        drawingStyle: {\n          fill: olGeometry.get('fillColor_'),\n          stroke: olGeometry.get('strokeColor_')\n        },\n        offsetX: olGeometry.get('offsetX_'),\n        offsetY: olGeometry.get('offsetY_'),\n        labelType: olGeometry.get('labelType_'),\n        measureUnit: olGeometry.get('measureUnit_')\n      },\n      meta: {\n        id: featureId\n      }\n    });\n    this.activeStore.setLayerExtent();\n    this.activeDrawControl.predefinedRadius$.next(undefined);\n    this.activeDrawControl.radiusDrawEnd$.next(undefined);\n  }\n\n  private buildForm() {\n    this.form = this.formBuilder.group({\n      fill: [''],\n      stroke: ['']\n    });\n  }\n\n  public setupLayer(isNewLayer?: boolean) {\n    setTimeout(() => {\n      const dialogRef = this.dialog.open(DrawLayerPopupComponent, {\n        disableClose: false\n      });\n      dialogRef.afterClosed().subscribe((label: string) => {\n        if (dialogRef.componentInstance.confirmFlag) {\n          this.activeStore.state.updateAll({ selected: false });\n          this.activeStore = new FeatureStore<FeatureWithDraw>([], {\n            map: this.map\n          });\n          this.activeDrawingLayerSource = new OlVectorSource();\n          this.activeDrawingLayer.opacity = 0;\n          this.deactivateDrawControl();\n          this.initStore(label, isNewLayer);\n          this.activeDrawControl = this.createDrawControl(\n            this.fillColor,\n            this.strokeColor,\n            this.strokeWidth\n          );\n          this.activeDrawControl.setGeometryType(this.currGeometryType);\n          this.toggleDrawControl();\n          this.stores.push(this.activeStore);\n          this.drawControls.push([\n            this.activeDrawingLayer.id,\n            this.activeDrawControl\n          ]);\n          this.drawControlsEvent.emit(this.drawControls);\n          this.layersIDEvent.emit(this.activeDrawingLayer.id);\n          this.isCreatingNewLayer = false;\n          if (!this.labelsAreShown) {\n            this.onToggleLabels();\n          }\n          this.activeLayerChange.emit(this.activeDrawingLayer);\n        } else {\n          this.select.value = this.activeDrawingLayer;\n          this.select.selectionChange.emit(this.activeDrawingLayer);\n        }\n      });\n    }, 250);\n  }\n\n  // HTML user interactions\n\n  /**\n   * Called when the user double-clicks the selected drawing\n   */\n  editLabelDrawing(feature) {\n    const olGeometryFeature = featureToOl(\n      feature,\n      this.map.ol.getView().getProjection().getCode()\n    );\n    this.openDrawDialog(olGeometryFeature, false);\n  }\n\n  openShorcutsDialog() {\n    this.dialog.open(DrawShorcutsComponent);\n  }\n\n  deleteDrawings() {\n    this.activeStore.deleteMany(this.selectedFeatures$.value);\n    this.selectedFeatures$.value.forEach((selectedFeature) => {\n      this.activeDrawingLayerSource\n        .getFeatures()\n        .forEach((drawingLayerFeature) => {\n          const geometry = drawingLayerFeature.getGeometry() as any;\n          if (selectedFeature.properties.id === geometry.ol_uid) {\n            this.activeDrawingLayerSource.removeFeature(drawingLayerFeature);\n          }\n        });\n    });\n    this.updateHeightTable();\n    this.activeStore.setLayerExtent();\n  }\n\n  /**\n   * Called when the user toggles the labels toggle\n   */\n  onToggleLabels() {\n    this.drawStyleService.toggleLabelsAreShown();\n    this.labelsAreShown = !this.labelsAreShown;\n    this.icon\n      ? this.elementStyle(this.labelsAreShown, true)\n      : this.elementStyle(this.labelsAreShown, false);\n    this.createDrawControl();\n  }\n\n  /**\n   * Called when the user toggles the Draw control is toggled\n   * @internal\n   */\n  onToggleDrawControl(toggleIsChecked: boolean) {\n    toggleIsChecked ? this.toggleDrawControl() : this.deactivateDrawControl();\n  }\n\n  onToggleFreehandMode(event: any) {\n    if (this.isCircle() && !event.checked) {\n      this.activeDrawControl.ispredefinedRadius$.next(true);\n      this.changeRadius(this.radiusFormControl.value);\n    } else {\n      this.activeDrawControl.setOlInteractionStyle(\n        createInteractionStyle(\n          this.fillColor,\n          this.strokeColor,\n          this.strokeWidth\n        )\n      );\n      this.activeDrawControl.ispredefinedRadius$.next(false);\n    }\n    this.freehandMode = event.checked;\n    this.activeDrawControl.freehand$.next(event.checked);\n    this.toggleDrawControl();\n  }\n\n  // User changes properties of a drawing element\n\n  /**\n   * Display the current layer with the current store and the current layerSource\n   */\n\n  public onLayerChange(currLayer?: VectorLayer) {\n    if (currLayer) {\n      this.activeStore.state.updateAll({ selected: false });\n      this.isCreatingNewLayer = false;\n      this.activeDrawingLayer.opacity = 0;\n      this.activeDrawingLayer = currLayer;\n      this.activeDrawingLayer.opacity = 1;\n      this.deactivateDrawControl();\n      if (!this.labelsAreShown) {\n        this.onToggleLabels();\n      }\n      this.activeStore = this.stores.find(\n        (store) => store.layer.id === this.activeDrawingLayer.id\n      );\n      this.activeDrawControl = this.drawControls.find(\n        (dc) => dc[0] === this.activeDrawingLayer.id\n      )[1];\n      this.activeDrawingLayerSource =\n        this.activeDrawControl.olDrawingLayerSource;\n      this.activeDrawControl.setGeometryType(this.currGeometryType);\n      this.toggleDrawControl();\n    } else {\n      this.setupLayer(true);\n    }\n    this.activeLayerChange.emit(this.activeDrawingLayer);\n  }\n\n  public createLayer(newTitle?, isNewLayer?) {\n    for (const layer of this.allLayers) {\n      const numberId = Number(layer.id.replace('igo-draw-layer', ''));\n      this.layerCounterID = Math.max(numberId, this.layerCounterID);\n    }\n    this.activeDrawingLayer = new VectorLayer({\n      isIgoInternalLayer: true,\n      id: 'igo-draw-layer' + ++this.layerCounterID,\n      title: isNewLayer\n        ? newTitle\n        : this.languageService.translate.instant('igo.geo.draw.drawing'),\n      zIndex: 200,\n      source: new FeatureDataSource(),\n      style: (feature, resolution) => {\n        return this.drawStyleService.createIndividualElementStyle(\n          feature,\n          resolution,\n          this.labelsAreShown,\n          feature.get('fontStyle'),\n          feature.get('drawingStyle').fill,\n          feature.get('drawingStyle').stroke,\n          feature.get('offsetX'),\n          feature.get('offsetY'),\n          this.map.projection,\n          this.icon\n        );\n      },\n      showInLayerList: true,\n      exportable: true,\n      browsable: false,\n      workspace: {\n        enabled: false\n      }\n    });\n\n    tryBindStoreLayer(this.activeStore, this.activeDrawingLayer);\n\n    tryAddLoadingStrategy(\n      this.activeStore,\n      new FeatureStoreLoadingStrategy({\n        motion: FeatureMotion.None\n      })\n    );\n\n    tryAddSelectionStrategy(\n      this.activeStore,\n      new FeatureStoreSelectionStrategy({\n        map: this.map,\n        motion: FeatureMotion.None,\n        many: true\n      })\n    );\n    this.activeStore.layer.visible = true;\n    this.activeStore.source.ol.on(\n      'removefeature',\n      (event: OlVectorSourceEvent) => {\n        const olGeometry = event.feature.getGeometry();\n        this.clearLabelsOfOlGeometry(olGeometry);\n      }\n    );\n  }\n\n  /**\n   * Called when the user changes the color in a color picker\n   * @param labelsAreShown wheter the labels are shown or not\n   * @param isAnIcon wheter the feature is an icon or not\n   * @param fillColor which is the filling color\n   * @param strokeColor which is the stroke color\n   */\n  onColorChange(\n    labelsAreShown: boolean,\n    isAnIcon: boolean,\n    fillColor: string,\n    strokeColor: string\n  ) {\n    if (this.selectedFeatures$.value.length > 0 && !isAnIcon) {\n      this.selectedFeatures$.value.forEach((feature) => {\n        const olFeature = featureToOl(\n          feature,\n          this.map.ol.getView().getProjection().getCode()\n        );\n        this.updateFillAndStrokeColor(olFeature, fillColor, strokeColor);\n\n        const entity = this.activeStore\n          .all()\n          .find((e) => e.meta.id === olFeature.getId());\n        entity.properties.drawingStyle.fill = olFeature.get('fillColor_');\n        entity.properties.drawingStyle.stroke = olFeature.get('strokeColor_');\n        this.activeStore.update(entity);\n      });\n    }\n\n    this.elementStyle(labelsAreShown, isAnIcon);\n    this.createDrawControl();\n  }\n\n  /**\n   * Called when the user changes the font size or/and style\n   * @param labelsAreShown wheter the labels are shown or not\n   * @param size the size of the font\n   * @param style the style of the font\n   */\n\n  onFontChange(labelsAreShown: boolean, size: string, style: FontType) {\n    if (this.selectedFeatures$.value.length > 0) {\n      this.selectedFeatures$.value.forEach((feature) => {\n        let olFeature = featureToOl(\n          feature,\n          this.map.ol.getView().getProjection().getCode()\n        );\n        this.updateFontSizeAndStyle(olFeature, size, style);\n        const entity = this.activeStore\n          .all()\n          .find((e) => e.meta.id === olFeature.getId());\n        entity.properties.fontStyle = olFeature.get('fontStyle_');\n        this.activeStore.update(entity);\n        olFeature = this.activeStore.layer.ol\n          .getSource()\n          .getFeatures()\n          .find((f) => f.getId() === entity.meta.id);\n        olFeature.setProperties({ fontStyle: entity.properties.fontStyle });\n        olFeature.changed();\n      });\n\n      this.fontSize = size;\n      this.fontStyle = style;\n\n      this.drawStyleService.setFontSize(size);\n      this.drawStyleService.setFontStyle(style);\n\n      this.elementStyle(labelsAreShown);\n    }\n  }\n\n  /**\n   * Called when the user changes the value of the horizontal/vertical offset\n   * @param labelsAreShown wheter the labels are shown or not\n   * @param offsetX horizontal offset of the label\n   * @param offsetY vertical offset of the label\n   */\n\n  onOffsetLabelChange(\n    labelsAreShown: boolean,\n    offsetX: number,\n    offsetY: number\n  ) {\n    if (this.selectedFeatures$.value.length > 0) {\n      this.selectedFeatures$.value.forEach((feature) => {\n        let olFeature = featureToOl(\n          feature,\n          this.map.ol.getView().getProjection().getCode()\n        );\n        this.updateOffset(olFeature, offsetX, offsetY);\n        const entity = this.activeStore\n          .all()\n          .find((e) => e.meta.id === olFeature.getId());\n        entity.properties.offsetX = olFeature.get('offsetX_');\n        entity.properties.offsetY = olFeature.get('offsetY_');\n        this.activeStore.update(entity);\n        olFeature = this.activeStore.layer.ol\n          .getSource()\n          .getFeatures()\n          .find((f) => f.getId() === entity.meta.id);\n        olFeature.setProperties({\n          offsetX: entity.properties.offsetX,\n          offsetY: entity.properties.offsetY\n        });\n        olFeature.changed();\n      });\n      this.elementStyle(labelsAreShown);\n    }\n  }\n\n  onIconChange(event?) {\n    this.icon = event;\n    this.drawStyleService.setIcon(this.icon);\n    this.elementStyle(true, this.icon);\n  }\n\n  /**\n   * Called when the user selects a new geometry type\n   * @param geometryType the geometry type selected by the user\n   */\n  onGeometryTypeChange(geometryType: Type) {\n    this.currGeometryType = geometryType;\n    this.activeDrawControl.setGeometryType(geometryType);\n    this.freehandMode\n      ? this.onToggleFreehandMode({ checked: true })\n      : this.onToggleFreehandMode({ checked: false });\n    this.toggleDrawControl();\n  }\n\n  // Updates the properties of olFeature inputted\n\n  /**\n   * Update the label of a geometry when a label is entered in a dialog box\n   * @param OlFeature the feature\n   * @param label the label\n   */\n  private updateLabelOfOlGeometry(OlFeature, label: string) {\n    OlFeature.setProperties(\n      {\n        _label: label\n      },\n      true\n    );\n  }\n\n  private updateFontSizeAndStyle(\n    olFeature: OlFeature<OlGeometry>,\n    fontSize: string,\n    fontStyle: string\n  ) {\n    olFeature.setProperties(\n      {\n        fontStyle_: `${fontSize}px ${fontStyle}`\n      },\n      true\n    );\n  }\n\n  private updateFillAndStrokeColor(\n    olFeature: OlFeature<OlGeometry>,\n    fillColor: string,\n    strokeColor: string\n  ) {\n    olFeature.setProperties(\n      {\n        fillColor_: fillColor,\n        strokeColor_: strokeColor\n      },\n      true\n    );\n  }\n\n  private updateOffset(\n    olFeature: OlFeature<OlGeometry>,\n    offsetX: number,\n    offsetY: number\n  ) {\n    olFeature.setProperties(\n      {\n        offsetX_: offsetX,\n        offsetY_: offsetY\n      },\n      true\n    );\n  }\n\n  private updateLabelType(\n    olFeature: OlFeature<OlGeometry>,\n    typeOfLabel: LabelType | [LabelType, LabelType]\n  ) {\n    olFeature.setProperties(\n      {\n        labelType_: typeOfLabel\n      },\n      true\n    );\n  }\n\n  private updateMeasureUnit(\n    olFeature: OlFeature<OlGeometry>,\n    measureUnit: MeasureLengthUnit | MeasureAreaUnit | CoordinatesUnit | []\n  ) {\n    olFeature.setProperties(\n      {\n        measureUnit_: measureUnit\n      },\n      true\n    );\n  }\n\n  // Updates values of the selected element on the HTML view\n\n  getFeatureFontSize(): string {\n    return this.selectedFeatures$.value.length > 0\n      ? this.selectedFeatures$.value[0].properties.fontStyle\n          .split(' ')[0]\n          .replace('px', '')\n      : '15';\n  }\n\n  getFeatureFontStyle() {\n    return this.selectedFeatures$.value.length > 0\n      ? this.selectedFeatures$.value[0].properties.fontStyle.substring(\n          this.selectedFeatures$.value[0].properties.fontStyle.indexOf(' ') + 1\n        )\n      : FontType.Arial;\n  }\n\n  getFeatureFillColor() {\n    return this.selectedFeatures$.value.length > 0\n      ? this.selectedFeatures$.value[0].properties.drawingStyle.fill\n      : 'rgba(255,255,255,0.4)';\n  }\n\n  getFeatureStrokeColor() {\n    return this.selectedFeatures$.value.length > 0\n      ? this.selectedFeatures$.value[0].properties.drawingStyle.stroke\n      : 'rgba(143,7,7,1)';\n  }\n\n  getFeatureOffsetX() {\n    return this.selectedFeatures$.value.length > 0\n      ? this.selectedFeatures$.value[0].properties.offsetX\n      : this.drawStyleService.getOffsetX();\n  }\n\n  getFeatureOffsetY() {\n    return this.selectedFeatures$.value.length > 0\n      ? this.selectedFeatures$.value[0].properties.offsetY\n      : '0';\n  }\n\n  get allFontStyles(): string[] {\n    return Object.values(FontType);\n  }\n\n  get allLayers() {\n    return this.map.layerController.all.filter((layer) =>\n      String(layer.id).includes('igo-draw-layer')\n    );\n  }\n\n  updateHeightTable() {\n    // Check the amount of rows as a possible alternative\n    this.numberOfDrawings = this.activeStore.count$.getValue();\n    this.numberOfDrawings > 10\n      ? (this.tableTemplate.tableHeight = '35vh')\n      : (this.tableTemplate.tableHeight = 'auto');\n  }\n\n  updateActiveLayer() {\n    const currLayer = this.allLayers.find(\n      (layer) => layer.title === this.activeDrawingLayer.title\n    );\n    return currLayer ? currLayer : this.allLayers[0];\n  }\n\n  // Helper methods\n\n  /**\n   * Activate the correct control\n   */\n  private toggleDrawControl() {\n    this.deactivateDrawControl();\n    this.activateDrawControl();\n  }\n\n  /**\n   * Clear the tooltips of an OL geometry\n   * @param olGeometry OL geometry with tooltips\n   */\n  private clearLabelsOfOlGeometry(olGeometry) {\n    getTooltipsOfOlGeometry(olGeometry).forEach(\n      (olTooltip: OlOverlay | undefined) => {\n        if (olTooltip && olTooltip.getMap()) {\n          this.map.ol.removeOverlay(olTooltip);\n        }\n      }\n    );\n  }\n  /**\n   * Replace the feature in the store\n   * @param entity the entity to replace\n   * @param olGeometry the new geometry to insert in the store\n   */\n  private replaceFeatureInStore(\n    entity,\n    olGeometry: OlGeometry,\n    radius?: number\n  ) {\n    this.activeStore.delete(entity);\n    this.onDrawEnd(olGeometry, radius);\n  }\n\n  /**\n   * Deactivate the active draw control\n   */\n  private deactivateDrawControl() {\n    if (!this.activeDrawControl) {\n      return;\n    }\n\n    if (this.drawEnd$$) {\n      this.drawEnd$$.unsubscribe();\n    }\n\n    this.activeDrawControl.setOlMap(undefined);\n    this.drawControlIsActive = false;\n  }\n\n  /**\n   * Activate a given control\n   */\n  private activateDrawControl() {\n    this.drawControlIsDisabled = false;\n    this.drawControlIsActive = true;\n    this.drawEnd$$ = this.activeDrawControl.end$.subscribe(\n      (olGeometry: OlGeometry) => {\n        this.openDrawDialog(olGeometry, true);\n      }\n    );\n\n    this.activeDrawControl.modify$.subscribe((olGeometry: OlGeometry) => {\n      this.onModifyDraw(olGeometry);\n    });\n\n    if (!this.drawSelect$$) {\n      this.drawSelect$$ = this.activeDrawControl.select$.subscribe(\n        (olFeature: OlFeature<OlGeometry>) => {\n          this.openDrawDialog(olFeature, false);\n        }\n      );\n    }\n    this.activeDrawControl.setOlMap(this.map.ol, true);\n  }\n\n  /**\n   * get the geometry of design\n   *\n   */\n\n  isPoint() {\n    return this.activeDrawControl.getGeometryType() === this.geometryType.Point;\n  }\n\n  isLineString() {\n    return (\n      this.activeDrawControl.getGeometryType() === this.geometryType.LineString\n    );\n  }\n\n  isPolygon() {\n    return (\n      this.activeDrawControl.getGeometryType() === this.geometryType.Polygon\n    );\n  }\n\n  isCircle() {\n    return (\n      this.activeDrawControl.getGeometryType() === this.geometryType.Circle\n    );\n  }\n\n  /**\n   * The fonction to predefine the radius of the user\n   *\n   */\n\n  changeRadius(radius: number) {\n    let radiusMeters: number;\n\n    if (radius) {\n      this.measureUnit === MeasureLengthUnit.Meters\n        ? (radiusMeters = radius)\n        : (radiusMeters = radius * 1000);\n    } else {\n      radiusMeters = undefined;\n    }\n\n    const pointStyle = (feature: OlFeature<OlGeometry>, resolution: number) => {\n      const geom = feature.getGeometry() as OlPoint;\n      const coordinates = olproj.transform(\n        geom.getCoordinates(),\n        this.map.projection,\n        'EPSG:4326'\n      );\n\n      const radius =\n        radiusMeters / Math.cos((Math.PI / 180) * coordinates[1]) / resolution;\n      this.activeDrawControl.predefinedRadius$.next(radiusMeters);\n      return new OlStyle.Style({\n        image: new OlStyle.Circle({\n          radius: radius,\n          stroke: new OlStyle.Stroke({\n            width: 1,\n            color: 'rgba(143,7,7,1)'\n          }),\n          fill: new OlStyle.Fill({\n            color: 'rgba(255,255,255,0.4)'\n          })\n        })\n      });\n    };\n\n    this.activeDrawControl.setOlInteractionStyle(pointStyle);\n    this.toggleDrawControl();\n  }\n\n  onMeasureUnitChange(selectedMeasureUnit: MeasureLengthUnit) {\n    if (selectedMeasureUnit === this.measureUnit) {\n      return;\n    } else {\n      this.measureUnit = selectedMeasureUnit;\n      this.measureUnit === MeasureLengthUnit.Meters\n        ? this.radiusFormControl.setValue(this.radiusFormControl.value * 1000)\n        : this.radiusFormControl.setValue(this.radiusFormControl.value / 1000);\n    }\n  }\n\n  /**\n   * Recreates the style of the feature stored\n   */\n  private elementStyle(labelsAreShown: boolean, isAnIcon?) {\n    if (isAnIcon) {\n      this.activeStore.layer.ol.setStyle((feature, resolution) => {\n        return this.drawStyleService.createIndividualElementStyle(\n          feature,\n          resolution,\n          labelsAreShown,\n          feature.get('fontStyle'),\n          feature.get('drawingStyle').fill,\n          feature.get('drawingStyle').stroke,\n          feature.get('offsetX'),\n          feature.get('offsetY'),\n          this.map.projection,\n          this.icon\n        );\n      });\n    } else {\n      this.activeStore.layer.ol.setStyle((feature, resolution) => {\n        return this.drawStyleService.createIndividualElementStyle(\n          feature,\n          resolution,\n          labelsAreShown,\n          feature.get('fontStyle'),\n          feature.get('drawingStyle').fill,\n          feature.get('drawingStyle').stroke,\n          feature.get('offsetX'),\n          feature.get('offsetY'),\n          this.map.projection\n        );\n      });\n    }\n  }\n\n  private getRadius(olGeometry): number {\n    const length = getLength(olGeometry);\n    return Number(length / (2 * Math.PI));\n  }\n}\n","<div>\n  <div class=\"geometry-type-toggle mat-typography\">\n    <mat-button-toggle-group\n      (change)=\"onGeometryTypeChange($event.value)\"\n      [value]=\"geometryType.Point\"\n    >\n      <mat-button-toggle [value]=\"geometryType.Point\">\n        {{ 'igo.geo.draw.' + geometryType.Point | translate }}\n      </mat-button-toggle>\n\n      <mat-button-toggle [value]=\"geometryType.LineString\">\n        {{ 'igo.geo.draw.' + geometryType.LineString | translate }}\n      </mat-button-toggle>\n\n      <mat-button-toggle [value]=\"geometryType.Polygon\">\n        {{ 'igo.geo.draw.' + geometryType.Polygon | translate }}\n      </mat-button-toggle>\n\n      <mat-button-toggle [value]=\"geometryType.Circle\">\n        {{ 'igo.geo.draw.' + geometryType.Circle | translate }}\n      </mat-button-toggle>\n    </mat-button-toggle-group>\n  </div>\n\n  <div class=\"draw-options mat-typography\">\n    <mat-slide-toggle\n      [disabled]=\"drawControlIsDisabled\"\n      [checked]=\"drawControlIsActive\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onToggleDrawControl($event.checked)\"\n    >\n      {{ 'igo.geo.draw.drawControl' | translate }}\n    </mat-slide-toggle>\n\n    <mat-slide-toggle\n      [checked]=\"labelsAreShown\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onToggleLabels()\"\n    >\n      {{ 'igo.geo.draw.toggleMapTooltips' | translate }}\n    </mat-slide-toggle>\n\n    <mat-slide-toggle\n      *ngIf=\"!isPoint()\"\n      [checked]=\"freehandMode\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onToggleFreehandMode($event)\"\n    >\n      {{ 'igo.geo.draw.freehandMode' | translate }}\n    </mat-slide-toggle>\n\n    <div class=\"radius-unit\" *ngIf=\"isCircle()\">\n      <mat-form-field class=\"radius\">\n        <input\n          matInput\n          type=\"number\"\n          min=\"0\"\n          placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\n          [formControl]=\"radiusFormControl\"\n          [readonly]=\"this.freehandMode\"\n        />\n      </mat-form-field>\n\n      <mat-form-field class=\"unit-field\">\n        <mat-select\n          [value]=\"measureUnit\"\n          (selectionChange)=\"onMeasureUnitChange($event.value)\"\n        >\n          <mat-option\n            *ngFor=\"let measureUnit of measureUnits\"\n            [value]=\"measureUnit\"\n          >\n            {{ 'igo.geo.measure.' + measureUnit | translate }}\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n    </div>\n  </div>\n\n  <mat-divider></mat-divider>\n\n  <div class=\"layer-select-container\">\n    <mat-form-field class=\"layer-select\" subscriptSizing=\"dynamic\">\n      <mat-label>{{ 'igo.geo.draw.layer.title' | translate }}</mat-label>\n      <mat-select\n        #selectedLayer\n        (selectionChange)=\"onLayerChange(selectedLayer.value)\"\n        [value]=\"updateActiveLayer()\"\n      >\n        <mat-option *ngFor=\"let layer of allLayers\" [value]=\"layer\">\n          {{ layer.title }}\n        </mat-option>\n        <mat-option id=\"createNewLayer\">\n          {{ 'igo.geo.draw.layer.createNewLayer' | translate }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n    <button\n      *ngIf=\"activeDrawingLayer\"\n      mat-icon-button\n      [color]=\"activeDrawingLayer.visible ? 'primary' : 'default'\"\n      collapsibleButton\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"\n        activeDrawingLayer.visible\n          ? ('igo.geo.layer.hideLayer' | translate)\n          : ('igo.geo.layer.showLayer' | translate)\n      \"\n      (click)=\"activeDrawingLayer.visible = !activeDrawingLayer.visible\"\n    >\n      <mat-icon>\n        {{ activeDrawingLayer.visible ? 'visibility' : 'visibility_off' }}\n      </mat-icon>\n    </button>\n  </div>\n  <mat-divider></mat-divider>\n  <div>\n    <button\n      *ngIf=\"activeStore.count$.getValue() > 0\"\n      class=\"deleteBtn\"\n      mat-icon-button\n      color=\"warn\"\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n      [disabled]=\"(selectedFeatures$ | async).length === 0\"\n      (click)=\"deleteDrawings()\"\n    >\n      <mat-icon>delete</mat-icon>\n    </button>\n\n    <div>\n      <igo-entity-table\n        #table\n        class=\"table-compact\"\n        [store]=\"activeStore\"\n        [template]=\"tableTemplate\"\n      >\n      </igo-entity-table>\n    </div>\n  </div>\n\n  <div class=\"icon-options\">\n    <mat-form-field *ngIf=\"icons.length >= 1\">\n      <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n      <mat-select>\n        <mat-select-trigger>\n          <div *ngIf=\"icon\" class=\"box\">\n            <img src=\"{{ icon }}\" />\n          </div>\n        </mat-select-trigger>\n        <mat-option value=\"\" (click)=\"onIconChange()\">{{\n          'igo.geo.draw.noIcon' | translate\n        }}</mat-option>\n        <mat-option\n          *ngFor=\"let icon_html of icons\"\n          [value]=\"icon_html\"\n          (click)=\"onIconChange(icon_html)\"\n        >\n          <div class=\"box\">\n            <img src=\"{{ icon_html }}\" />\n          </div>\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div class=\"actions-container\">\n    <button\n      mat-icon-button\n      color=\"accent\"\n      disableRipple=\"true\"\n      (click)=\"openShorcutsDialog()\"\n    >\n      <mat-icon\n        class=\"shortcuts-icon\"\n        tooltip-position=\"below\"\n        matTooltipShowDelay=\"500\"\n        [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\"\n        >keyboard\n      </mat-icon>\n    </button>\n\n    <button\n      *ngIf=\"selectedFeatures$.value.length\"\n      mat-raised-button\n      color=\"primary\"\n      (click)=\"openStyleModalDialog()\"\n      [matTooltip]=\"'igo.geo.style.styleModalTooltipSelected' | translate\"\n    >\n      {{ 'igo.geo.style.styleModal' | translate }}\n      <mat-icon\n        aria-hidden=\"false\"\n        iconPositionEnd\n        class=\"style-icon\"\n        [matBadge]=\"selectedFeatures$.value.length\"\n        matBadgeColor=\"warn\"\n        matBadgeSize=\"medium\"\n        >palette\n      </mat-icon>\n    </button>\n  </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { MeasureAreaUnit, MeasureLengthUnit } from '../shared/measure.enum';\nimport {\n  formatMeasure,\n  metersToUnit,\n  squareMetersToUnit\n} from '../shared/measure.utils';\n\n/**\n * This pipe returns a measure converted from meters (or square meters)\n * to the specified unit. It also keeps a certain number of decimals.\n */\n@Pipe({\n  name: 'measureFormat',\n  standalone: true\n})\nexport class MeasureFormatPipe implements PipeTransform {\n  /**\n   * @ignore\n   */\n  transform(\n    value: number,\n    unit: MeasureAreaUnit | MeasureLengthUnit,\n    unitAbbr = false\n  ): number {\n    let out;\n    if (Object.values(MeasureAreaUnit).indexOf(unit as MeasureAreaUnit) >= 0) {\n      out = squareMetersToUnit(value, unit as MeasureAreaUnit);\n    } else if (\n      Object.values(MeasureLengthUnit).indexOf(unit as MeasureLengthUnit) >= 0\n    ) {\n      out = metersToUnit(value, unit as MeasureLengthUnit);\n    }\n\n    return out\n      ? formatMeasure(out, {\n          decimal: 1,\n          unit,\n          unitAbbr,\n          locale: 'fr'\n        })\n      : out;\n  }\n}\n","import OlFeature from 'ol/Feature';\nimport OlMap from 'ol/Map';\nimport MapBrowserEvent from 'ol/MapBrowserEvent';\nimport { unByKey } from 'ol/Observable';\nimport BasicEvent from 'ol/events/Event';\nimport OlCircle from 'ol/geom/Circle';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport OlLineString from 'ol/geom/LineString';\nimport OlLinearRing from 'ol/geom/LinearRing';\nimport OlPolygon from 'ol/geom/Polygon';\nimport OlDragBoxInteraction from 'ol/interaction/DragBox';\nimport OlDraw from 'ol/interaction/Draw';\nimport { DrawEvent as OlDrawEvent } from 'ol/interaction/Draw';\nimport OlInteraction from 'ol/interaction/Interaction';\nimport OlModify from 'ol/interaction/Modify';\nimport { ModifyEvent as OlModifyEvent } from 'ol/interaction/Modify';\nimport OlTranslate from 'ol/interaction/Translate';\nimport { TranslateEvent as OlTranslateEvent } from 'ol/interaction/Translate';\nimport OlVectorLayer from 'ol/layer/Vector';\nimport OlVectorSource from 'ol/source/Vector';\nimport * as OlStyle from 'ol/style';\nimport { StyleLike as OlStyleLike } from 'ol/style/Style';\n\nimport { Subject, Subscription, fromEvent } from 'rxjs';\n\nimport {\n  addLinearRingToOlPolygon,\n  createDrawHoleInteractionStyle,\n  getMousePositionFromOlGeometryEvent\n} from '../geometry.utils';\n\nexport interface ModifyControlOptions {\n  source?: OlVectorSource<any>;\n  layer?: OlVectorLayer<any>;\n  layerStyle?: OlStyleLike;\n  drawStyle?: OlStyleLike;\n  modify?: boolean;\n  translate?: boolean;\n}\n\n/**\n * Control to modify geometries\n */\nexport class ModifyControl {\n  /**\n   * Modify start observable\n   */\n  public start$ = new Subject<OlGeometry>();\n\n  /**\n   * Modify end observable\n   */\n  public end$ = new Subject<OlGeometry>();\n\n  /**\n   * Geometry changes observable\n   */\n  public changes$ = new Subject<OlGeometry>();\n\n  private olMap: OlMap;\n  private olOverlayLayer: OlVectorLayer<any>;\n  public olModifyInteraction: OlModify;\n  private onModifyStartKey: any;\n  private onModifyEndKey: any;\n  private onModifyKey: any;\n  private olModifyInteractionIsActive = false;\n  private olTranslateInteraction: OlTranslate;\n  private onTranslateStartKey: any;\n  private onTranslateEndKey: any;\n  private onTranslateKey: any;\n  private olTranslateInteractionIsActive = false;\n  private olDrawInteraction: OlDraw;\n  private onDrawStartKey: any;\n  private onDrawEndKey: any;\n  private onDrawKey: any;\n  private olDrawInteractionIsActive = false;\n\n  private mousePosition: [number, number];\n\n  private keyDown$$: Subscription;\n  private drawKeyUp$$: Subscription;\n  private drawKeyDown$$: Subscription;\n\n  private removedOlInteractions: OlInteraction[] = [];\n  private olLinearRingsLayer: OlVectorLayer<any>;\n\n  // This is the geometry to test against when drawing holes\n  private olOuterGeometry: OlGeometry;\n\n  /**\n   * Wheter the control is active\n   */\n  get active(): boolean {\n    return this.olMap !== undefined;\n  }\n\n  /**\n   * OL overlay source\n   * @internal\n   */\n  get olOverlaySource(): OlVectorSource<any> {\n    return this.olOverlayLayer.getSource();\n  }\n\n  /**\n   * OL linear rings source\n   * @internal\n   */\n  get olLinearRingsSource(): OlVectorSource<any> {\n    return this.olLinearRingsLayer.getSource();\n  }\n\n  /**\n   * Whether a modify control should be available\n   */\n  private modify = true;\n\n  /**\n   * Whether a translate control should be available\n   */\n  private translate = true;\n\n  constructor(private options: ModifyControlOptions) {\n    if (options.modify !== undefined) {\n      this.modify = options.modify;\n    }\n    if (options.translate !== undefined) {\n      this.translate = options.translate;\n    }\n\n    if (options.layer !== undefined) {\n      this.olOverlayLayer = options.layer;\n    } else {\n      this.olOverlayLayer = this.createOlInnerOverlayLayer();\n    }\n    this.olLinearRingsLayer = this.createOlLinearRingsLayer();\n  }\n\n  /**\n   * Add or remove this control to/from a map.\n   * @param map OL Map\n   */\n  setOlMap(olMap: OlMap | undefined) {\n    if (olMap === undefined) {\n      this.clearOlInnerOverlaySource();\n      this.removeOlInnerOverlayLayer();\n      this.removeOlModifyInteraction();\n      this.removeOlTranslateInteraction();\n      this.removeOlDrawInteraction();\n      this.olMap = olMap;\n      return;\n    }\n\n    this.olMap = olMap;\n    this.addOlInnerOverlayLayer();\n\n    // The order in which these interactions\n    // are added is important\n    if (this.modify === true) {\n      this.addOlDrawInteraction();\n    }\n\n    if (this.translate === true) {\n      this.addOlTranslateInteraction();\n      this.activateTranslateInteraction();\n    }\n\n    if (this.modify === true) {\n      this.addOlModifyInteraction();\n      this.activateModifyInteraction();\n    }\n  }\n\n  /**\n   * Return the overlay source\n   */\n  getSource(): OlVectorSource<any> {\n    return this.olOverlaySource;\n  }\n\n  /**\n   * Add an OL geometry to the overlay and start modifying it\n   * @param olGeometry Ol Geometry\n   */\n  setOlGeometry(olGeometry: OlGeometry) {\n    const olFeature = new OlFeature({ geometry: olGeometry });\n    this.olOverlaySource.clear();\n    this.olOverlaySource.addFeature(olFeature);\n  }\n\n  /**\n   * Create an overlay source if none is defined in the options\n   */\n  private createOlInnerOverlayLayer(): OlVectorLayer<any> {\n    return new OlVectorLayer({\n      source: this.options.source ? this.options.source : new OlVectorSource(),\n      style: this.options.layerStyle,\n      zIndex: 500\n    });\n  }\n\n  /**\n   * Add the overlay layer if it wasn't defined in the options\n   */\n  private addOlInnerOverlayLayer() {\n    if (this.options.layer === undefined) {\n      this.olMap.addLayer(this.olOverlayLayer);\n    }\n  }\n\n  /**\n   * Clear the overlay layer if it wasn't defined in the options\n   */\n  private removeOlInnerOverlayLayer() {\n    if (this.options.layer === undefined && this.olMap !== undefined) {\n      this.olMap.removeLayer(this.olOverlayLayer);\n    }\n  }\n\n  /**\n   * Clear the overlay source if it wasn't defined in the options\n   */\n  private clearOlInnerOverlaySource() {\n    if (this.options.layer === undefined && this.options.source === undefined) {\n      this.olOverlaySource.clear(true);\n    }\n  }\n\n  private createOlLinearRingsLayer(): OlVectorLayer<any> {\n    return new OlVectorLayer({\n      source: new OlVectorSource(),\n      style: createDrawHoleInteractionStyle(),\n      zIndex: 500\n    });\n  }\n\n  /**\n   * Add the linear rings layer\n   */\n  private addOlLinearRingsLayer() {\n    this.olMap.addLayer(this.olLinearRingsLayer);\n  }\n\n  /**\n   * Clear the linear rings layer\n   */\n  private removeOlLinearRingsLayer() {\n    this.olMap.removeLayer(this.olLinearRingsLayer);\n  }\n\n  /**\n   * Clear the linear rings source\n   */\n  private clearOlLinearRingsSource() {\n    this.olLinearRingsSource.clear(true);\n  }\n\n  /**\n   * Add a modify interaction to the map an set up some listeners\n   */\n  private addOlModifyInteraction() {\n    const olModifyInteraction = new OlModify({\n      source: this.olOverlaySource,\n      style: this.options.drawStyle as OlStyle.Style\n    });\n    this.olModifyInteraction = olModifyInteraction;\n  }\n\n  /**\n   * Remove the modify interaction\n   */\n  private removeOlModifyInteraction() {\n    if (this.olModifyInteraction === undefined) {\n      return;\n    }\n\n    this.deactivateModifyInteraction();\n    this.olModifyInteraction = undefined;\n  }\n\n  private activateModifyInteraction() {\n    if (this.olModifyInteractionIsActive === true) {\n      return;\n    }\n\n    this.olModifyInteractionIsActive = true;\n    this.onModifyStartKey = this.olModifyInteraction.on(\n      'modifystart',\n      (event: OlModifyEvent) => this.onModifyStart(event)\n    );\n    this.onModifyEndKey = this.olModifyInteraction.on(\n      'modifyend',\n      (event: OlModifyEvent) => this.onModifyEnd(event)\n    );\n    this.olMap.addInteraction(this.olModifyInteraction);\n  }\n\n  private deactivateModifyInteraction() {\n    if (this.olModifyInteractionIsActive === false) {\n      return;\n    }\n\n    this.olModifyInteractionIsActive = false;\n\n    unByKey([this.onModifyStartKey, this.onModifyEndKey, this.onModifyKey]);\n    if (this.olMap !== undefined) {\n      this.olMap.removeInteraction(this.olModifyInteraction);\n    }\n  }\n\n  /**\n   * When modifying starts, clear the overlay and start watching for changes\n   * @param event Modify start event\n   */\n  private onModifyStart(event: OlModifyEvent) {\n    const olGeometry = event.features.item(0).getGeometry() as OlGeometry;\n    this.start$.next(olGeometry);\n    this.onModifyKey = olGeometry.on(\n      'change',\n      (olGeometryEvent: BasicEvent) => {\n        this.mousePosition =\n          getMousePositionFromOlGeometryEvent(olGeometryEvent);\n        this.changes$.next(\n          olGeometryEvent.target as OlLineString | OlCircle | OlPolygon\n        );\n      }\n    );\n    this.subscribeToKeyDown();\n  }\n\n  /**\n   * When modifying ends, update the geometry observable and stop watching for changes\n   * @param event Modify end event\n   */\n  private onModifyEnd(event: OlModifyEvent) {\n    unByKey(this.onModifyKey);\n    this.end$.next(event.features.item(0).getGeometry() as OlGeometry);\n    this.unsubscribeToKeyDown();\n  }\n\n  /**\n   * Subscribe to space key down to pan the map\n   */\n  private subscribeToKeyDown() {\n    this.keyDown$$ = fromEvent(document, 'keydown').subscribe(\n      (event: KeyboardEvent) => {\n        if (event.key === ' ') {\n          // On space bar, pan to the current mouse position\n          this.olMap.getView().animate({\n            center: this.mousePosition,\n            duration: 0\n          });\n          return;\n        }\n      }\n    );\n  }\n\n  /**\n   * Unsubscribe to key down\n   */\n  private unsubscribeToKeyDown() {\n    if (this.keyDown$$ !== undefined) {\n      this.keyDown$$.unsubscribe();\n    }\n  }\n\n  /**\n   * Add a translate interaction to the map an set up some listeners\n   */\n  private addOlTranslateInteraction() {\n    const olTranslateInteraction = new OlTranslate({\n      layers: [this.olOverlayLayer]\n    });\n    this.olTranslateInteraction = olTranslateInteraction;\n  }\n\n  /**\n   * Remove the translate interaction\n   */\n  private removeOlTranslateInteraction() {\n    if (this.olTranslateInteraction === undefined) {\n      return;\n    }\n\n    this.deactivateTranslateInteraction();\n    this.olTranslateInteraction = undefined;\n  }\n\n  private activateTranslateInteraction() {\n    if (this.olTranslateInteractionIsActive === true) {\n      return;\n    }\n\n    this.olTranslateInteractionIsActive = true;\n    this.onTranslateStartKey = this.olTranslateInteraction.on(\n      'translatestart',\n      (event: OlTranslateEvent) => this.onTranslateStart(event)\n    );\n    this.onTranslateEndKey = this.olTranslateInteraction.on(\n      'translateend',\n      (event: OlTranslateEvent) => this.onTranslateEnd(event)\n    );\n    this.olMap.addInteraction(this.olTranslateInteraction);\n  }\n\n  private deactivateTranslateInteraction() {\n    if (this.olTranslateInteractionIsActive === false) {\n      return;\n    }\n\n    this.olTranslateInteractionIsActive = false;\n    unByKey([\n      this.onTranslateStartKey,\n      this.onTranslateEndKey,\n      this.onTranslateKey\n    ]);\n    if (this.olMap !== undefined) {\n      this.olMap.removeInteraction(this.olTranslateInteraction);\n    }\n  }\n\n  /**\n   * When translation starts, clear the overlay and start watching for changes\n   * @param event Translate start event\n   */\n  private onTranslateStart(event: OlTranslateEvent) {\n    const olGeometry = event.features.item(0).getGeometry() as OlGeometry;\n    this.start$.next(olGeometry);\n  }\n\n  /**\n   * When translation ends, update the geometry observable and stop watchign for changes\n   * @param event Translate end event\n   */\n  private onTranslateEnd(event: OlTranslateEvent) {\n    unByKey(this.onTranslateKey);\n    this.end$.next(event.features.item(0).getGeometry() as OlGeometry);\n  }\n\n  /**\n   * Add a draw interaction to the map an set up some listeners\n   */\n  private addOlDrawInteraction() {\n    const olDrawInteraction = new OlDraw({\n      type: 'Polygon',\n      source: this.olLinearRingsSource,\n      stopClick: true,\n      style: createDrawHoleInteractionStyle(),\n      condition: (event: MapBrowserEvent<any>) => {\n        const olOuterGeometry = this.olOuterGeometry || this.getOlGeometry();\n        const intersects = olOuterGeometry.intersectsCoordinate(\n          event.coordinate\n        );\n        return intersects;\n      }\n    });\n\n    this.olDrawInteraction = olDrawInteraction;\n    this.subscribeToDrawKeyDown();\n  }\n\n  /**\n   * Subscribe to CTRL key down to activate the draw control\n   */\n  private subscribeToDrawKeyDown() {\n    this.drawKeyDown$$ = fromEvent(document, 'keydown').subscribe(\n      (event: KeyboardEvent) => {\n        if (event.key !== 'Control') {\n          return;\n        }\n\n        this.unsubscribeToDrawKeyDown();\n\n        const olGeometry = this.getOlGeometry();\n        if (!olGeometry || !(olGeometry instanceof OlPolygon)) {\n          return;\n        }\n\n        this.subscribeToDrawKeyUp();\n\n        this.deactivateModifyInteraction();\n        this.deactivateTranslateInteraction();\n        this.activateDrawInteraction();\n      }\n    );\n  }\n\n  /**\n   * Subscribe to CTRL key up to deactivate the draw control\n   */\n  private subscribeToDrawKeyUp() {\n    this.drawKeyUp$$ = fromEvent(document, 'keyup').subscribe(\n      (event: KeyboardEvent) => {\n        if (event.key !== 'Control') {\n          return;\n        }\n\n        this.unsubscribeToDrawKeyUp();\n        this.unsubscribeToKeyDown();\n        this.deactivateDrawInteraction();\n\n        this.activateModifyInteraction();\n        if (this.translate === true) {\n          this.activateTranslateInteraction();\n        }\n        this.subscribeToDrawKeyDown();\n\n        this.olOuterGeometry = undefined;\n        this.clearOlLinearRingsSource();\n        this.end$.next(this.getOlGeometry());\n      }\n    );\n  }\n\n  /**\n   * Unsubscribe to draw key down\n   */\n  private unsubscribeToDrawKeyDown() {\n    if (this.drawKeyDown$$ !== undefined) {\n      this.drawKeyDown$$.unsubscribe();\n    }\n  }\n\n  /**\n   * Unsubscribe to key up\n   */\n  private unsubscribeToDrawKeyUp() {\n    if (this.drawKeyUp$$ !== undefined) {\n      this.drawKeyUp$$.unsubscribe();\n    }\n  }\n\n  /**\n   * Remove the draw interaction\n   */\n  private removeOlDrawInteraction() {\n    if (this.olDrawInteraction === undefined) {\n      return;\n    }\n\n    this.unsubscribeToKeyDown();\n    this.unsubscribeToDrawKeyUp();\n    this.unsubscribeToDrawKeyDown();\n    this.deactivateDrawInteraction();\n    this.clearOlLinearRingsSource();\n    this.olDrawInteraction = undefined;\n  }\n\n  /**\n   * Activate the draw interaction\n   */\n  private activateDrawInteraction() {\n    if (this.olDrawInteractionIsActive === true) {\n      return;\n    }\n\n    this.clearOlLinearRingsSource();\n    this.addOlLinearRingsLayer();\n\n    this.olMap.getInteractions().forEach((olInteraction: OlInteraction) => {\n      if (olInteraction instanceof OlDragBoxInteraction) {\n        this.olMap.removeInteraction(olInteraction);\n        this.removedOlInteractions.push(olInteraction);\n      }\n    });\n\n    this.olDrawInteractionIsActive = true;\n    this.onDrawStartKey = this.olDrawInteraction.on(\n      'drawstart',\n      (event: OlDrawEvent) => this.onDrawStart(event)\n    );\n    this.onDrawEndKey = this.olDrawInteraction.on(\n      'drawend',\n      (event: OlDrawEvent) => this.onDrawEnd(event)\n    );\n    this.olMap.addInteraction(this.olDrawInteraction);\n  }\n\n  /**\n   * Deactivate the draw interaction\n   */\n  private deactivateDrawInteraction() {\n    if (this.olDrawInteractionIsActive === false) {\n      return;\n    }\n\n    this.removeOlLinearRingsLayer();\n\n    this.removedOlInteractions.forEach((olInteraction: OlInteraction) => {\n      this.olMap.addInteraction(olInteraction);\n    });\n    this.removedOlInteractions = [];\n\n    this.olDrawInteractionIsActive = false;\n    unByKey([this.onDrawStartKey, this.onDrawEndKey, this.onDrawKey]);\n    if (this.olMap !== undefined) {\n      this.olMap.removeInteraction(this.olDrawInteraction);\n    }\n  }\n\n  /**\n   * When draw start, add a new linerar ring to the geometry and start watching for changes\n   * @param event Draw start event\n   */\n  private onDrawStart(event: OlDrawEvent) {\n    const olGeometry = event.feature.getGeometry();\n    this.olOuterGeometry = this.getOlGeometry().clone();\n\n    const linearRingCoordinates = (\n      (olGeometry as any).getLinearRing() as any\n    ).getCoordinates();\n    this.addLinearRingToOlGeometry(linearRingCoordinates);\n    this.start$.next(this.getOlGeometry());\n\n    this.onDrawKey = olGeometry.on('change', (olGeometryEvent: BasicEvent) => {\n      this.mousePosition = getMousePositionFromOlGeometryEvent(olGeometryEvent);\n      const olGeometryTarget = olGeometryEvent.target as OlPolygon;\n      const _linearRingCoordinates = olGeometryTarget\n        .getLinearRing(0)\n        .getCoordinates();\n      this.updateLinearRingOfOlGeometry(_linearRingCoordinates);\n      this.changes$.next(this.getOlGeometry());\n    });\n    this.subscribeToKeyDown();\n  }\n\n  /**\n   * When translation ends, update the geometry observable and stop watchign for changes\n   * @param event Draw end event\n   */\n  private onDrawEnd(event: OlDrawEvent) {\n    unByKey(this.onDrawKey);\n    this.olOuterGeometry = undefined;\n\n    const linearRingCoordinates = (\n      (event.feature.getGeometry() as any).getLinearRing() as any\n    ).getCoordinates();\n    this.updateLinearRingOfOlGeometry(linearRingCoordinates);\n    this.clearOlLinearRingsSource();\n    this.end$.next(this.getOlGeometry());\n    this.unsubscribeToKeyDown();\n  }\n\n  /**\n   * Add a linear ring to the geometry being modified\n   * @param coordinates Linear ring coordinates\n   */\n  private addLinearRingToOlGeometry(coordinates: number[]) {\n    const olGeometry = this.getOlGeometry() as OlPolygon;\n    const olLinearRing = new OlLinearRing(coordinates);\n    addLinearRingToOlPolygon(olGeometry, olLinearRing);\n  }\n\n  /**\n   * Update the last linear ring of the geometry being modified\n   * @param coordinates Linear ring coordinates\n   */\n  private updateLinearRingOfOlGeometry(coordinates: number[][]) {\n    const olGeometry = this.getOlGeometry() as OlPolygon;\n    // Remove the last linear ring (the one we are updating)\n    const olLinearRings = olGeometry.getLinearRings().slice(0, -1);\n    const newCoordinates = olLinearRings.map((olLinearRing: OlLinearRing) => {\n      return olLinearRing.getCoordinates();\n    });\n    newCoordinates.push(coordinates);\n    olGeometry.setCoordinates(newCoordinates);\n  }\n\n  /**\n   * Get the geometry being modified\n   * @returns OL Geometry\n   */\n  private getOlGeometry(): OlGeometry {\n    const olFeatures = this.olOverlaySource.getFeatures();\n    return olFeatures.length > 0 ? olFeatures[0].getGeometry() : undefined;\n  }\n}\n","import OlFeature from 'ol/Feature';\nimport OlMap from 'ol/Map';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport OlLineString from 'ol/geom/LineString';\nimport OlVectorLayer from 'ol/layer/Vector';\nimport OlVectorSource from 'ol/source/Vector';\nimport { StyleLike as OlStyleLike } from 'ol/style/Style';\n\nimport { Subject, Subscription } from 'rxjs';\n\nimport { GeometrySliceError } from '../geometry.errors';\nimport { sliceOlGeometry } from '../geometry.utils';\nimport { DrawControl } from './draw';\n\nexport interface SliceControlOptions {\n  source?: OlVectorSource;\n  layer?: OlVectorLayer<OlVectorSource>;\n  layerStyle?: OlStyleLike;\n  drawStyle?: OlStyleLike;\n}\n\n/**\n * Control to modify geometries\n */\nexport class SliceControl {\n  /**\n   * Slice end observable\n   */\n  public end$ = new Subject<OlGeometry[]>();\n\n  /**\n   * Slice error, if any\n   */\n  public error$ = new Subject<GeometrySliceError>();\n\n  private olMap: OlMap;\n  private olOverlayLayer: OlVectorLayer<OlVectorSource>;\n\n  /**\n   * Draw line control\n   */\n  private drawLineControl: DrawControl;\n\n  /**\n   * Subscription to draw start\n   */\n  private drawLineStart$$: Subscription;\n\n  /**\n   * Subscription to draw end\n   */\n  private drawLineEnd$$: Subscription;\n\n  /**\n   * Wheter the control is active\n   */\n  get active(): boolean {\n    return this.olMap !== undefined;\n  }\n\n  /**\n   * OL overlay source\n   * @internal\n   */\n  get olOverlaySource(): OlVectorSource {\n    return this.olOverlayLayer.getSource();\n  }\n\n  constructor(private options: SliceControlOptions) {\n    if (options.layer !== undefined) {\n      this.olOverlayLayer = options.layer;\n    } else {\n      this.olOverlayLayer = this.createOlInnerOverlayLayer();\n    }\n  }\n\n  /**\n   * Add or remove this control to/from a map.\n   * @param map OL Map\n   */\n  setOlMap(olMap: OlMap | undefined) {\n    if (olMap === undefined) {\n      this.clearOlInnerOverlaySource();\n      this.removeOlInnerOverlayLayer();\n      this.removeDrawLineControl();\n      this.olMap = olMap;\n      return;\n    }\n\n    this.olMap = olMap;\n    this.addOlInnerOverlayLayer();\n    this.addDrawLineControl();\n  }\n\n  /**\n   * Return the overlay source\n   */\n  getSource(): OlVectorSource {\n    return this.olOverlaySource;\n  }\n\n  /**\n   * Add an OL geometry to the overlay for slicing\n   * @param olGeometry Ol Geometry\n   */\n  setOlGeometry(olGeometry: OlGeometry) {\n    const olFeature = new OlFeature({ geometry: olGeometry });\n    this.olOverlaySource.clear(true);\n    this.olOverlaySource.addFeature(olFeature);\n  }\n\n  /**\n   * Create an overlay source if none is defined in the options\n   */\n  private createOlInnerOverlayLayer(): OlVectorLayer<OlVectorSource> {\n    return new OlVectorLayer({\n      source: this.options.source ? this.options.source : new OlVectorSource(),\n      style: this.options.layerStyle,\n      zIndex: 500\n    });\n  }\n\n  /**\n   * Clear the overlay layer if it wasn't defined in the options\n   */\n  private removeOlInnerOverlayLayer() {\n    if (this.options.layer === undefined && this.olMap !== undefined) {\n      this.olMap.removeLayer(this.olOverlayLayer);\n    }\n  }\n\n  /**\n   * Add the overlay layer if it wasn't defined in the options\n   */\n  private addOlInnerOverlayLayer() {\n    if (this.options.layer === undefined) {\n      this.olMap.addLayer(this.olOverlayLayer);\n    }\n  }\n\n  /**\n   * Clear the overlay source if it wasn't defined in the options\n   */\n  private clearOlInnerOverlaySource() {\n    if (this.options.layer === undefined && this.options.source === undefined) {\n      this.olOverlaySource.clear(true);\n    }\n  }\n\n  /**\n   * Create a draw line control and add it to the map\n   */\n  private addDrawLineControl() {\n    this.drawLineControl = new DrawControl({\n      geometryType: 'LineString',\n      interactionStyle: this.options.drawStyle,\n      maxPoints: 2\n    });\n    this.drawLineStart$$ = this.drawLineControl.start$.subscribe(() =>\n      this.onDrawLineStart()\n    );\n    this.drawLineEnd$$ = this.drawLineControl.end$.subscribe(\n      (olLine: OlLineString) => this.onDrawLineEnd(olLine)\n    );\n    this.drawLineControl.setOlMap(this.olMap);\n  }\n\n  /**\n   * Remove draw line control\n   */\n  private removeDrawLineControl() {\n    if (this.drawLineControl === undefined) {\n      return;\n    }\n\n    this.drawLineStart$$.unsubscribe();\n    this.drawLineEnd$$.unsubscribe();\n    this.drawLineControl.getSource().clear(true);\n    this.drawLineControl.setOlMap(undefined);\n  }\n\n  /**\n   * Clear the draw source and track the geometry being draw\n   * @param olLine Ol linestring or polygon\n   */\n  private onDrawLineStart() {\n    this.drawLineControl.getSource().clear(true);\n  }\n\n  /**\n   * Slice the first geometry encountered with the drawn line\n   * @param olLine Ol linestring\n   */\n  private onDrawLineEnd(olLine: OlLineString) {\n    const olSlicedGeometries = [];\n    const lineExtent = olLine.getExtent();\n\n    const olFeaturesToRemove = [];\n    try {\n      this.olOverlaySource.forEachFeatureInExtent(\n        lineExtent,\n        (olFeature: OlFeature<OlGeometry>) => {\n          const olGeometry = olFeature.getGeometry() as any;\n          const olParts = sliceOlGeometry(olGeometry, olLine);\n          if (olParts.length > 0) {\n            olSlicedGeometries.push(...olParts);\n            olFeaturesToRemove.push(olFeature);\n          }\n        }\n      );\n    } catch (e) {\n      if (e instanceof GeometrySliceError) {\n        this.error$.next(e);\n        return;\n      } else {\n        throw e;\n      }\n    }\n\n    this.drawLineControl.getSource().clear(true);\n\n    this.olOverlaySource.addFeatures(\n      olSlicedGeometries.map(\n        (olGeometry: OlGeometry) => new OlFeature(olGeometry)\n      )\n    );\n    olFeaturesToRemove.forEach((olFeature: OlFeature<OlGeometry>) => {\n      this.olOverlaySource.removeFeature(olFeature);\n    });\n\n    this.error$.next(undefined);\n    this.end$.next(olSlicedGeometries);\n  }\n}\n","import { NgIf } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport {\n  MAT_DIALOG_DATA,\n  MatDialogContent,\n  MatDialogRef,\n  MatDialogTitle\n} from '@angular/material/dialog';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { MeasureAreaUnit, MeasureLengthUnit } from '../shared/measure.enum';\nimport { MeasurerDialogData } from '../shared/measure.interfaces';\nimport { MeasureFormatPipe } from './measure-format.pipe';\n\n@Component({\n  selector: 'igo-measurer-dialog',\n  templateUrl: 'measurer-dialog.component.html',\n  styleUrls: ['./measurer-dialog.component.scss'],\n  standalone: true,\n  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    NgIf,\n    IgoLanguageModule,\n    MeasureFormatPipe\n  ]\n})\nexport class MeasurerDialogComponent {\n  measureAreaUnit = MeasureAreaUnit;\n\n  measureLengthUnit = MeasureLengthUnit;\n\n  constructor(\n    public dialogRef: MatDialogRef<MeasurerDialogComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: MeasurerDialogData\n  ) {}\n\n  onNoClick(): void {\n    this.dialogRef.close();\n  }\n}\n","<h3 mat-dialog-title>{{ 'igo.geo.measure.dialog.title' | translate }}</h3>\n<div mat-dialog-content>\n  <table *ngIf=\"data.length > 0\" class=\"mat-typography\">\n    <thead>\n      <tr>\n        <th colspan=\"2\">\n          {{ 'igo.geo.measure.dialog.length.title' | translate }}\n        </th>\n      </tr>\n    </thead>\n    <tbody>\n      <tr>\n        <td>{{ data.length | measureFormat: measureLengthUnit.Meters }}</td>\n        <td>{{ 'igo.geo.measure.dialog.lengthInMeters' | translate }}</td>\n      </tr>\n      <tr>\n        <td>\n          {{ data.length | measureFormat: measureLengthUnit.Kilometers }}\n        </td>\n        <td>{{ 'igo.geo.measure.dialog.lengthInKilometers' | translate }}</td>\n      </tr>\n      <tr>\n        <td>{{ data.length | measureFormat: measureLengthUnit.Miles }}</td>\n        <td>{{ 'igo.geo.measure.dialog.lengthInMiles' | translate }}</td>\n      </tr>\n      <tr>\n        <td>{{ data.length | measureFormat: measureLengthUnit.Feet }}</td>\n        <td>{{ 'igo.geo.measure.dialog.lengthInFeet' | translate }}</td>\n      </tr>\n    </tbody>\n  </table>\n\n  <table *ngIf=\"data.area > 0\" class=\"mat-typography\">\n    <thead>\n      <tr>\n        <th colspan=\"2\">\n          {{ 'igo.geo.measure.dialog.area.title' | translate }}\n        </th>\n      </tr>\n    </thead>\n    <tbody>\n      <tr>\n        <td>{{ data.area | measureFormat: measureAreaUnit.SquareMeters }}</td>\n        <td>{{ 'igo.geo.measure.dialog.areaInSquareMeters' | translate }}</td>\n      </tr>\n      <tr>\n        <td>\n          {{ data.area | measureFormat: measureAreaUnit.SquareKilometers }}\n        </td>\n        <td>\n          {{ 'igo.geo.measure.dialog.areaInSquareKilometers' | translate }}\n        </td>\n      </tr>\n      <tr>\n        <td>{{ data.area | measureFormat: measureAreaUnit.SquareMiles }}</td>\n        <td>{{ 'igo.geo.measure.dialog.areaInSquareMiles' | translate }}</td>\n      </tr>\n      <tr>\n        <td>{{ data.area | measureFormat: measureAreaUnit.Acres }}</td>\n        <td>{{ 'igo.geo.measure.dialog.areaInAcres' | translate }}</td>\n      </tr>\n      <tr>\n        <td>{{ data.area | measureFormat: measureAreaUnit.Hectares }}</td>\n        <td>{{ 'igo.geo.measure.dialog.areaInHectares' | translate }}</td>\n      </tr>\n      <tr>\n        <td>{{ 'igo.geo.measure.dialog.perimeterInMeters' | translate }}</td>\n        <td>{{ data.perimeter | measureFormat: measureLengthUnit.Meters }}</td>\n      </tr>\n    </tbody>\n  </table>\n</div>\n","import { AsyncPipe, NgFor } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output\n} from '@angular/core';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport {\n  MeasureAreaUnit,\n  MeasureLengthUnit,\n  MeasureType\n} from '../shared/measure.enum';\nimport {\n  computeBestAreaUnit,\n  computeBestLengthUnit\n} from '../shared/measure.utils';\nimport { MeasureFormatPipe } from './measure-format.pipe';\n\n/**\n * Measurer item\n */\n@Component({\n  selector: 'igo-measurer-item',\n  templateUrl: './measurer-item.component.html',\n  styleUrls: ['./measurer-item.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatFormFieldModule,\n    MatInputModule,\n    MatSelectModule,\n    NgFor,\n    MatOptionModule,\n    AsyncPipe,\n    IgoLanguageModule,\n    MeasureFormatPipe\n  ]\n})\nexport class MeasurerItemComponent implements OnDestroy {\n  /**\n   * Measure observable\n   * @internal\n   */\n  public measure$ = new BehaviorSubject<number>(undefined);\n\n  /**\n   * Subscription to the measure observable when the auto mode is on\n   * @internal\n   */\n  public measure$$: Subscription;\n\n  /**\n   * Measure type\n   */\n  @Input() measureType: MeasureType;\n\n  /**\n   * Measure unit\n   */\n  @Input() measureUnit: MeasureAreaUnit | MeasureLengthUnit;\n\n  /**\n   * Measure\n   */\n  @Input()\n  set measure(value: number) {\n    this.measure$.next(value);\n  }\n  get measure(): number {\n    return this.measure$.value;\n  }\n\n  /**\n   * Whther measure units should be automatically determined\n   */\n  @Input()\n  set auto(value: boolean) {\n    this.toggleAutoUnit(value);\n  }\n  get auto(): boolean {\n    return this._auto;\n  }\n  private _auto = false;\n\n  /**\n   * Placeholder\n   */\n  @Input() placeholder: string;\n\n  /**\n   * Event emitted when the measure unit changes\n   */\n  @Output() measureUnitChange = new EventEmitter<\n    MeasureAreaUnit | MeasureLengthUnit\n  >();\n\n  /**\n   * Available measure units for the measure type given\n   * @internal\n   */\n  get measureUnits(): string[] {\n    if (this.measureType === MeasureType.Area) {\n      return Object.values(MeasureAreaUnit);\n    }\n    return Object.values(MeasureLengthUnit);\n  }\n\n  /**\n   * Toggle the auto unit off\n   * @internal\n   */\n  ngOnDestroy() {\n    this.toggleAutoUnit(false);\n  }\n\n  /**\n   * Set the measure unit\n   * @internal\n   */\n  onMeasureUnitChange(unit: MeasureAreaUnit | MeasureLengthUnit) {\n    this.measureUnit = unit;\n    this.measureUnitChange.emit(unit);\n  }\n\n  private toggleAutoUnit(toggle: boolean) {\n    if (this.measure$$ !== undefined) {\n      this.measure$$.unsubscribe();\n    }\n    if (toggle === true) {\n      this.measure$$ = this.measure$.subscribe((measure: number) => {\n        this.computeBestMeasureUnit(measure);\n      });\n    }\n    this._auto = toggle;\n  }\n\n  private computeBestMeasureUnit(measure: number) {\n    let measureUnit = this.measureUnit;\n    if (this.measureType === MeasureType.Area) {\n      measureUnit = computeBestAreaUnit(measure);\n    } else if (this.measureType === MeasureType.Length) {\n      measureUnit = computeBestLengthUnit(measure);\n    }\n    if (measureUnit !== this.measureUnit) {\n      this.onMeasureUnitChange(measureUnit);\n    }\n  }\n}\n","<mat-form-field class=\"measure-field\" floatLabel=\"always\">\n  <mat-label>{{ placeholder }}</mat-label>\n  <input\n    matInput\n    [disabled]=\"true\"\n    [readonly]=\"true\"\n    [value]=\"(measure$ | async) || 0 | measureFormat: measureUnit\"\n  />\n</mat-form-field>\n<mat-form-field class=\"unit-field\">\n  <mat-select\n    [value]=\"measureUnit\"\n    [disabled]=\"auto\"\n    (selectionChange)=\"onMeasureUnitChange($event.value)\"\n  >\n    <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\n      {{ 'igo.geo.measure.' + measureUnit | translate }}\n    </mat-option>\n  </mat-select>\n</mat-form-field>\n","import { AsyncPipe, DOCUMENT, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewChild\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport {\n  EntityRecord,\n  EntityTableComponent,\n  EntityTableTemplate\n} from '@igo2/common/entity';\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { StorageScope, StorageService } from '@igo2/core/storage';\nimport { uuid } from '@igo2/utils';\n\nimport OlFeature from 'ol/Feature';\nimport { unByKey } from 'ol/Observable';\nimport OlOverlay from 'ol/Overlay';\nimport OlGeoJSON from 'ol/format/GeoJSON';\nimport OlLineString from 'ol/geom/LineString';\nimport OlPolygon from 'ol/geom/Polygon';\nimport OlVectorSource from 'ol/source/Vector';\nimport { VectorSourceEvent as OlVectorSourceEvent } from 'ol/source/Vector';\nimport OlStyle from 'ol/style/Style';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\nimport { FeatureDataSource } from '../../datasource/shared/datasources';\nimport {\n  FEATURE,\n  FeatureStore,\n  FeatureStoreLoadingStrategy,\n  FeatureStoreSelectionStrategy,\n  tryAddLoadingStrategy,\n  tryAddSelectionStrategy,\n  tryBindStoreLayer\n} from '../../feature';\nimport { DrawControl, ModifyControl } from '../../geometry/shared';\nimport { VectorLayer } from '../../layer/shared';\nimport { IgoMap } from '../../map/shared/map';\nimport {\n  MeasureAreaUnit,\n  MeasureLengthUnit,\n  MeasureType\n} from '../shared/measure.enum';\nimport {\n  FeatureWithMeasure,\n  Measure,\n  MeasurerDialogData\n} from '../shared/measure.interfaces';\nimport {\n  createMeasureInteractionStyle,\n  createMeasureLayerStyle,\n  formatMeasure,\n  getTooltipsOfOlGeometry,\n  measureOlGeometry,\n  metersToUnit,\n  squareMetersToUnit,\n  updateOlTooltipAtCenter,\n  updateOlTooltipsAtMidpoints\n} from '../shared/measure.utils';\nimport { MeasurerDialogComponent } from './measurer-dialog.component';\nimport { MeasurerItemComponent } from './measurer-item.component';\n\n/**\n * Tool to measure lengths and areas\n */\n@Component({\n  selector: 'igo-measurer',\n  templateUrl: './measurer.component.html',\n  styleUrls: ['./measurer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatButtonToggleModule,\n    MatSlideToggleModule,\n    NgIf,\n    MatDividerModule,\n    MeasurerItemComponent,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    EntityTableComponent,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class MeasurerComponent implements OnInit, OnDestroy {\n  /**\n   * Table template\n   * @internal\n   */\n  public tableTemplate: EntityTableTemplate;\n\n  private subscriptions$$: Subscription[] = [];\n\n  /**\n   * Reference to the MeasureType enum\n   * @internal\n   */\n  public measureType = MeasureType;\n\n  /**\n   * Reference to the AreaMeasureUnit enum\n   * @internal\n   */\n  public measureAreaUnit = MeasureAreaUnit;\n\n  /**\n   * Reference to the LengthMeasureUnit enum\n   * @internal\n   */\n  public measureLengthUnit = MeasureLengthUnit;\n\n  /**\n   * Whether measure units should be automatically determined\n   * @internal\n   */\n  public measureUnitsAuto = false;\n\n  /**\n   * Whether display of distances of areas\n   * @internal\n   */\n  public displayDistance = true;\n\n  /**\n   * Whether display of distances of lines\n   * @internal\n   */\n  public displayLines = true;\n\n  /**\n   * Whether display of areas\n   * @internal\n   */\n  public displayAreas = true;\n\n  /**\n   * Observable of line boolean\n   * @internal\n   */\n  public hasLine$ = new BehaviorSubject<boolean>(false);\n\n  /**\n   * Observable of area boolean\n   * @internal\n   */\n  public hasArea$ = new BehaviorSubject<boolean>(false);\n\n  /**\n   * Observable of area\n   * @internal\n   */\n  public measure$ = new BehaviorSubject<Measure>({});\n\n  /**\n   * Observable of selected features\n   * @internal\n   */\n  public selectedFeatures$ = new BehaviorSubject<FeatureWithMeasure[]>([]);\n\n  /**\n   * OL draw source\n   * @internal\n   */\n  public showTooltips = true;\n\n  /**\n   * Whether draw control toggle is disabled or not\n   * @internal\n   */\n  public drawControlIsDisabled = true;\n\n  /**\n   * Draw line control\n   */\n  private drawLineControl: DrawControl;\n\n  /**\n   * Draw polygon control\n   */\n  private drawPolygonControl: DrawControl;\n\n  /**\n   * Modify control\n   */\n  private modifyControl: ModifyControl;\n\n  /**\n   * Active OL geometry\n   */\n  private activeOlGeometry: OlLineString | OlPolygon;\n\n  /**\n   * Active mlength unit\n   */\n  public activeLengthUnit: MeasureLengthUnit = MeasureLengthUnit.Meters;\n\n  /**\n   * Active area unit\n   */\n  public activeAreaUnit: MeasureAreaUnit = MeasureAreaUnit.SquareMeters;\n\n  /**\n   * Feature added listener key\n   */\n  private onFeatureAddedKey;\n\n  /**\n   * Feature removed listener key\n   */\n  private onFeatureRemovedKey;\n\n  /**\n   * Active draw control\n   * @internal\n   */\n  private activeDrawControl: DrawControl;\n\n  /**\n   * Subscription to draw start\n   */\n  private drawStart$$: Subscription;\n\n  /**\n   * Subscription to draw end\n   */\n  private drawEnd$$: Subscription;\n\n  /**\n   * Subscription to controls changes\n   */\n  private drawChanges$$: Subscription;\n\n  /**\n   * Subscription to modify start\n   */\n  private modifyStart$$: Subscription;\n\n  /**\n   * Subscription to modify end\n   */\n  private modifyEnd$$: Subscription;\n\n  /**\n   * Subscription to controls changes\n   */\n  private modifyChanges$$: Subscription;\n\n  /**\n   * Subscription to measures selection\n   */\n  private selectedFeatures$$: Subscription;\n\n  /**\n   * OL draw source\n   */\n  private olDrawSource = new OlVectorSource();\n\n  /**\n   * The map to measure on\n   */\n  @Input() map: IgoMap;\n\n  /**\n   * The measures store\n   */\n  @Input() store: FeatureStore<FeatureWithMeasure>;\n\n  /**\n   * Measure type\n   * @internal\n   */\n  @Input()\n  set activeMeasureType(value: MeasureType) {\n    this.setActiveMeasureType(value);\n  }\n  get activeMeasureType(): MeasureType {\n    return this._activeMeasureType;\n  }\n  private _activeMeasureType: MeasureType;\n\n  /**\n   * The minimum length a segment must have to display a tooltip.\n   * It also applies to area tooltips.\n   */\n  @Input() minSegmentLength = 10;\n\n  @ViewChild('table', { static: true }) table: EntityTableComponent;\n\n  /**\n   * Wheter one of the draw control is active\n   * @internal\n   */\n  get drawControlIsActive(): boolean {\n    return this.activeDrawControl !== undefined;\n  }\n\n  get projection(): string {\n    return this.map.ol.getView().getProjection().getCode();\n  }\n\n  constructor(\n    private languageService: LanguageService,\n    private dialog: MatDialog,\n    private storageService: StorageService,\n    @Inject(DOCUMENT) private document: Document\n  ) {\n    this.tableTemplate = {\n      selection: true,\n      selectMany: true,\n      selectionCheckbox: true,\n      sort: true,\n      columns: [\n        {\n          name: 'length',\n          title: this.languageService.translate.instant(\n            'igo.geo.measure.lengthHeader'\n          ),\n          valueAccessor: (localFeature: FeatureWithMeasure) => {\n            const unit = this.activeLengthUnit;\n            const measure = metersToUnit(\n              localFeature.properties.measure.length,\n              unit\n            );\n            return formatMeasure(measure, {\n              decimal: 1,\n              unit,\n              unitAbbr: false,\n              locale: 'fr'\n            });\n          }\n        },\n        {\n          name: 'area',\n          title: this.languageService.translate.instant(\n            'igo.geo.measure.areaHeader'\n          ),\n          valueAccessor: (localFeature: FeatureWithMeasure) => {\n            const unit = this.activeAreaUnit;\n            const measure = squareMetersToUnit(\n              localFeature.properties.measure.area,\n              unit\n            );\n            return measure\n              ? formatMeasure(measure, {\n                  decimal: 1,\n                  unit,\n                  unitAbbr: false,\n                  locale: 'fr'\n                })\n              : '';\n          }\n        }\n      ]\n    };\n  }\n\n  /**\n   * Add draw controls and activate one\n   * @internal\n   */\n  ngOnInit() {\n    this.getSavedUnits();\n    this.initStore();\n    this.createDrawLineControl();\n    this.createDrawPolygonControl();\n    this.createModifyControl();\n    this.toggleDrawControl();\n    this.updateTooltipsOfOlSource(this.store.source.ol);\n    this.checkDistanceAreaToggle();\n    this.setActiveMeasureType(MeasureType.Length);\n  }\n\n  /**\n   * Clear the overlay layer and any interaction added by this component.\n   * @internal\n   */\n  ngOnDestroy() {\n    if (this.store.count === 0) {\n      this.store.map.layerController.remove(this.store.layer);\n    }\n\n    this.setActiveMeasureType(undefined);\n    this.deactivateModifyControl();\n    this.freezeStore();\n    this.subscriptions$$.map((s) => s.unsubscribe());\n  }\n\n  /**\n   * Set the measure type\n   * @internal\n   */\n  onMeasureTypeChange(measureType: MeasureType) {\n    this.activeMeasureType = measureType;\n  }\n\n  /**\n   * Activate or deactivate the current draw control\n   * @internal\n   */\n  onToggleDrawControl(toggle: boolean) {\n    if (toggle === true) {\n      this.toggleDrawControl();\n    } else {\n      this.deactivateDrawControl();\n    }\n  }\n\n  /**\n   * Activate or deactivate the current draw control\n   * @internal\n   */\n  onToggleMeasureUnitsAuto(toggle: boolean) {\n    this.measureUnitsAuto = toggle;\n  }\n\n  /**\n   * Activate or deactivate the current display of distances of the areas\n   * @internal\n   */\n  onToggleDisplayDistance(toggle: boolean) {\n    this.displayDistance = toggle;\n    this.onDisplayDistance();\n    this.storageService.set('distanceToggle', toggle, StorageScope.SESSION);\n  }\n\n  /**\n   * Activate or deactivate the current display of distances of the lines\n   * @internal\n   */\n  onToggleDisplayLines(toggle: boolean) {\n    this.displayLines = toggle;\n    this.onDisplayLines();\n    this.storageService.set('linesToggle', toggle, StorageScope.SESSION);\n  }\n\n  /**\n   * Activate or deactivate the current display of areas\n   * @internal\n   */\n  onToggleDisplayAreas(toggle: boolean) {\n    this.displayAreas = toggle;\n    this.onDisplayAreas();\n    this.storageService.set('areasToggle', toggle, StorageScope.SESSION);\n  }\n\n  /**\n   * Set display parametres in current values\n   * @internal\n   */\n  checkDistanceAreaToggle() {\n    if (this.storageService.get('distanceToggle') === false) {\n      this.displayDistance = false;\n    }\n    if (this.storageService.get('linesToggle') === false) {\n      this.displayLines = false;\n    }\n    if (this.storageService.get('areasToggle') === false) {\n      this.displayAreas = false;\n    }\n  }\n\n  /**\n   * Activate or deactivate the current display of distances of areas\n   * @internal\n   */\n  onDisplayDistance() {\n    const elements: HTMLCollectionOf<Element> =\n      this.document.getElementsByClassName(\n        'igo-map-tooltip-measure-polygone-segments'\n      );\n    if (this.displayDistance) {\n      Array.from(elements).map((value: Element) =>\n        value.classList.remove('igo-map-tooltip-hidden')\n      );\n    } else {\n      Array.from(elements).map((value: Element) =>\n        value.classList.add('igo-map-tooltip-hidden')\n      );\n    }\n  }\n\n  /**\n   * Activate or deactivate the current display of distances of lines\n   * @internal\n   */\n  onDisplayLines() {\n    const elements: HTMLCollectionOf<Element> =\n      this.document.getElementsByClassName(\n        'igo-map-tooltip-measure-line-segments'\n      );\n\n    if (this.displayLines) {\n      Array.from(elements).map((value: Element) => {\n        value.classList.remove('igo-map-tooltip-hidden');\n      });\n    } else {\n      Array.from(elements).map((value: Element) => {\n        value.classList.add('igo-map-tooltip-hidden');\n      });\n    }\n  }\n\n  /**\n   * Activate or deactivate the current display of areas\n   * @internal\n   */\n  onDisplayAreas() {\n    const elements: HTMLCollectionOf<Element> =\n      this.document.getElementsByClassName('igo-map-tooltip-measure-area');\n\n    if (this.displayAreas) {\n      Array.from(elements).map((value: Element) =>\n        value.classList.remove('igo-map-tooltip-hidden')\n      );\n    } else {\n      Array.from(elements).map((value: Element) =>\n        value.classList.add('igo-map-tooltip-hidden')\n      );\n    }\n  }\n\n  /**\n   * Set the measure type\n   * @internal\n   */\n  onLengthUnitChange(unit: MeasureLengthUnit) {\n    this.activeLengthUnit = unit;\n    this.saveCurrentUnits();\n    this.refreshTableAndTooltip();\n  }\n\n  /**\n   * Set the measure type\n   * @internal\n   */\n  onAreaUnitChange(unit: MeasureAreaUnit) {\n    this.activeAreaUnit = unit;\n    this.saveCurrentUnits();\n    this.refreshTableAndTooltip();\n  }\n\n  private refreshTableAndTooltip(): void {\n    this.store.stateView.clear();\n\n    this.updateTooltipsOfOlSource(this.store.source.ol);\n    if (this.activeOlGeometry !== undefined) {\n      this.updateTooltipsOfOlGeometry(this.activeOlGeometry);\n    }\n  }\n\n  onCalculateClick() {\n    const features = this.selectedFeatures$.value;\n    const area = features.reduce(\n      (sum: number, localFeature: FeatureWithMeasure) => {\n        return sum + localFeature.properties.measure.area || 0;\n      },\n      0\n    );\n    const length = features.reduce(\n      (sum: number, localFeature: FeatureWithMeasure) => {\n        if (localFeature.geometry.type === 'Polygon') {\n          return sum;\n        }\n        return sum + localFeature.properties.measure.length || 0;\n      },\n      0\n    );\n    const perimeter = features.reduce(\n      (sum: number, localFeature: FeatureWithMeasure) => {\n        if (localFeature.geometry.type === 'LineString') {\n          return sum;\n        }\n        return sum + localFeature.properties.measure.length || 0;\n      },\n      0\n    );\n\n    this.openDialog({\n      area,\n      length,\n      perimeter\n    });\n  }\n\n  onDeleteClick() {\n    this.store.deleteMany(this.selectedFeatures$.value);\n    this.selectedFeatures$.value.forEach((selectedFeature) => {\n      this.olDrawSource.getFeatures().forEach((drawingLayerFeature) => {\n        const geometry = drawingLayerFeature.getGeometry() as any;\n        if (selectedFeature.properties.id === geometry.ol_uid) {\n          this.olDrawSource.removeFeature(drawingLayerFeature);\n        }\n      });\n    });\n  }\n\n  onModifyClick() {\n    if (this.selectedFeatures$.value.length !== 1) {\n      return;\n    }\n\n    if (this.modifyControl.active === true) {\n      this.deactivateModifyControl();\n      this.toggleDrawControl();\n    } else {\n      const localFeature = this.selectedFeatures$.value[0];\n      const olFeatures = this.store.layer.ol.getSource().getFeatures();\n      const olFeature = olFeatures.find((_olFeature: OlFeature) => {\n        return _olFeature.get('id') === localFeature.properties.id;\n      });\n\n      if (olFeature !== undefined) {\n        this.deactivateDrawControl();\n        this.activateModifyControl();\n\n        const olGeometry = olFeature.getGeometry();\n        this.clearTooltipsOfOlGeometry(olGeometry as OlLineString | OlPolygon);\n        this.modifyControl.setOlGeometry(olGeometry);\n      }\n    }\n  }\n\n  private openDialog(data: MeasurerDialogData): void {\n    this.dialog.open(MeasurerDialogComponent, { data });\n  }\n\n  /**\n   * Initialize the measure store and set up some listeners\n   * @internal\n   */\n  private initStore() {\n    const store = this.store;\n\n    let layer = new VectorLayer({\n      title: this.languageService.translate.instant(\n        'igo.geo.measure.layerTitle'\n      ),\n      isIgoInternalLayer: true,\n      id: `igo-measures-${uuid()}`,\n      zIndex: 200,\n      source: new FeatureDataSource(),\n      style: createMeasureLayerStyle(),\n      showInLayerList: true,\n      exportable: true,\n      visible: true,\n      browsable: false,\n      workspace: { enabled: false }\n    });\n    layer = tryBindStoreLayer(store, layer);\n\n    layer.visible$.subscribe((visible) => {\n      const elements: HTMLCollectionOf<Element> =\n        this.document.getElementsByClassName('igo-map-tooltip-measure');\n\n      if (visible) {\n        Array.from(elements).map((value: Element) =>\n          value.classList.remove('igo-map-tooltip-measure-by-display')\n        );\n      } else {\n        Array.from(elements).map((value: Element) =>\n          value.classList.add('igo-map-tooltip-measure-by-display')\n        );\n      }\n    });\n\n    tryAddLoadingStrategy(store);\n\n    tryAddSelectionStrategy(\n      store,\n      new FeatureStoreSelectionStrategy({\n        map: this.map,\n        many: true\n      })\n    );\n\n    this.onFeatureAddedKey = store.source.ol.on(\n      'addfeature',\n      (event: OlVectorSourceEvent) => {\n        const localFeature = event.feature;\n        const olGeometry = localFeature.getGeometry() as any;\n        this.updateMeasureOfOlGeometry(olGeometry, localFeature.get('measure'));\n        this.onDisplayDistance();\n        this.onDisplayLines();\n        this.onDisplayAreas();\n      }\n    );\n\n    this.onFeatureRemovedKey = store.source.ol.on(\n      'removefeature',\n      (event: OlVectorSourceEvent) => {\n        const olGeometry = event.feature.getGeometry() as any;\n        this.clearTooltipsOfOlGeometry(olGeometry);\n      }\n    );\n\n    this.selectedFeatures$$ = store.stateView\n      .manyBy$((record: EntityRecord<FeatureWithMeasure>) => {\n        return record.state.selected === true;\n      })\n      .pipe(\n        skip(1) // Skip initial emission\n      )\n      .subscribe((records: EntityRecord<FeatureWithMeasure>[]) => {\n        if (this.modifyControl.active === true) {\n          this.deactivateModifyControl();\n        }\n        this.selectedFeatures$.next(records.map((record) => record.entity));\n      });\n\n    this.subscriptions$$.push(\n      this.store.entities$.subscribe((objectsExists) => {\n        if (\n          objectsExists.find(\n            (objectExist) => objectExist.geometry.type === 'Polygon'\n          )\n        ) {\n          this.hasArea$.next(true);\n        } else {\n          this.hasArea$.next(false);\n        }\n\n        if (\n          objectsExists.find(\n            (objectExist) => objectExist.geometry.type === 'LineString'\n          )\n        ) {\n          this.hasLine$.next(true);\n        } else {\n          this.hasLine$.next(false);\n        }\n      })\n    );\n  }\n\n  /**\n   * Freeze any store, meaning the layer is removed, strategies are deactivated\n   * and some listener removed\n   * @internal\n   */\n  private freezeStore() {\n    const store = this.store;\n    this.selectedFeatures$$.unsubscribe();\n    unByKey(this.onFeatureAddedKey);\n    unByKey(this.onFeatureRemovedKey);\n    store.deactivateStrategyOfType(FeatureStoreLoadingStrategy);\n    store.deactivateStrategyOfType(FeatureStoreSelectionStrategy);\n  }\n\n  /**\n   * Create a draw line control\n   */\n  private createDrawLineControl() {\n    this.drawLineControl = new DrawControl({\n      geometryType: 'LineString',\n      drawingLayerSource: this.olDrawSource,\n      interactionStyle: createMeasureInteractionStyle(),\n      drawingLayerStyle: new OlStyle({})\n    });\n  }\n\n  /**\n   * Create a draw polygon control\n   */\n  private createDrawPolygonControl() {\n    this.drawPolygonControl = new DrawControl({\n      geometryType: 'Polygon',\n      drawingLayerSource: this.olDrawSource,\n      interactionStyle: createMeasureInteractionStyle(),\n      drawingLayerStyle: new OlStyle({})\n    });\n  }\n\n  /**\n   * Create a draw polygon control\n   */\n  private createModifyControl() {\n    this.modifyControl = new ModifyControl({\n      source: this.olDrawSource,\n      drawStyle: createMeasureInteractionStyle(),\n      layerStyle: new OlStyle({})\n    });\n  }\n\n  /**\n   * Activate the right control\n   */\n  private toggleDrawControl() {\n    this.deactivateDrawControl();\n    // this.deactivateModifyControl();\n    if (this.activeMeasureType === MeasureType.Length) {\n      this.activateDrawControl(this.drawLineControl);\n    } else if (this.activeMeasureType === MeasureType.Area) {\n      this.activateDrawControl(this.drawPolygonControl);\n    }\n  }\n\n  /**\n   * Activate a given control\n   * @param drawControl Draw control\n   */\n  private activateDrawControl(drawControl: DrawControl) {\n    this.drawControlIsDisabled = false;\n    this.activeDrawControl = drawControl;\n    this.drawStart$$ = drawControl.start$.subscribe(\n      (olGeometry: OlLineString | OlPolygon) => this.onDrawStart(olGeometry)\n    );\n    this.drawEnd$$ = drawControl.end$.subscribe(\n      (olGeometry: OlLineString | OlPolygon) => this.onDrawEnd(olGeometry)\n    );\n    this.drawChanges$$ = drawControl.changes$.subscribe(\n      (olGeometry: OlLineString | OlPolygon) => this.onDrawChanges(olGeometry)\n    );\n    this.drawChanges$$ = drawControl.abort$.subscribe(\n      (olGeometry: OlLineString | OlPolygon) => {\n        this.clearTooltipsOfOlGeometry(olGeometry);\n        this.clearMeasures();\n      }\n    );\n    drawControl.setOlMap(this.map.ol, false);\n  }\n\n  /**\n   * Deactivate the active draw control\n   */\n  private deactivateDrawControl() {\n    if (this.activeDrawControl === undefined) {\n      return;\n    }\n\n    this.olDrawSource.clear();\n    if (this.drawStart$$ !== undefined) {\n      this.drawStart$$.unsubscribe();\n    }\n    if (this.drawEnd$$ !== undefined) {\n      this.drawEnd$$.unsubscribe();\n    }\n    if (this.drawChanges$$ !== undefined) {\n      this.drawChanges$$.unsubscribe();\n    }\n\n    this.clearTooltipsOfOlSource(this.olDrawSource);\n    if (this.activeOlGeometry !== undefined) {\n      this.clearTooltipsOfOlGeometry(this.activeOlGeometry);\n    }\n    this.activeDrawControl.setOlMap(undefined);\n    this.activeDrawControl = undefined;\n    this.activeOlGeometry = undefined;\n  }\n\n  private setActiveMeasureType(measureType: MeasureType) {\n    this._activeMeasureType = measureType;\n    this.clearMeasures();\n    this.toggleDrawControl();\n  }\n\n  /**\n   * Clear the draw source and track the geometry being drawn\n   * @param olGeometry Ol linestring or polygon\n   */\n  private onDrawStart(olGeometry: OlLineString | OlPolygon) {\n    this.activeOlGeometry = olGeometry;\n  }\n\n  /**\n   * Clear the draw source and track the geometry being draw\n   * @param olGeometry Ol linestring or polygon\n   */\n  private onDrawEnd(olGeometry: OlLineString | OlPolygon) {\n    this.activeOlGeometry = undefined;\n    this.finalizeMeasureOfOlGeometry(olGeometry);\n    this.addFeatureToStore(olGeometry);\n    this.clearTooltipsOfOlGeometry(olGeometry);\n    this.olDrawSource.clear(true);\n  }\n\n  /**\n   * Update measures observables and map tooltips\n   * @param olGeometry Ol linestring or polygon\n   */\n  private onDrawChanges(olGeometry: OlLineString | OlPolygon) {\n    const measure = measureOlGeometry(olGeometry, this.projection);\n    this.updateMeasureOfOlGeometry(\n      olGeometry,\n      Object.assign({}, measure, {\n        area: undefined // We don't want to display an area tooltip while drawing.\n      })\n    );\n    this.measure$.next(measure);\n  }\n\n  /**\n   * Activate a given control\n   * @param modifyControl Modify control\n   */\n  private activateModifyControl() {\n    const selection = this.store.getStrategyOfType(\n      FeatureStoreSelectionStrategy\n    ) as FeatureStoreSelectionStrategy;\n    selection.deactivate();\n    selection.clear();\n\n    this.modifyStart$$ = this.modifyControl.start$.subscribe(\n      (olGeometry: OlLineString | OlPolygon) => this.onModifyStart(olGeometry)\n    );\n    this.modifyEnd$$ = this.modifyControl.end$.subscribe(\n      (olGeometry: OlLineString | OlPolygon) => this.onModifyEnd(olGeometry)\n    );\n    this.modifyChanges$$ = this.modifyControl.changes$.subscribe(\n      (olGeometry: OlLineString | OlPolygon) => this.onModifyChanges(olGeometry)\n    );\n    this.modifyControl.setOlMap(this.map.ol);\n  }\n\n  /**\n   * Deactivate the active modify control\n   */\n  private deactivateModifyControl() {\n    if (this.modifyStart$$ !== undefined) {\n      this.modifyStart$$.unsubscribe();\n    }\n    if (this.modifyEnd$$ !== undefined) {\n      this.modifyEnd$$.unsubscribe();\n    }\n    if (this.modifyChanges$$ !== undefined) {\n      this.modifyChanges$$.unsubscribe();\n    }\n\n    if (this.activeOlGeometry !== undefined) {\n      if (this.selectedFeatures$.value.length === 1) {\n        const localFeature = this.selectedFeatures$.value[0];\n        this.addFeatureToStore(this.activeOlGeometry, localFeature);\n      }\n      this.finalizeMeasureOfOlGeometry(this.activeOlGeometry);\n    }\n\n    this.olDrawSource.clear();\n\n    this.store.activateStrategyOfType(FeatureStoreSelectionStrategy);\n\n    this.activeOlGeometry = undefined;\n    this.modifyControl.setOlMap(undefined);\n  }\n\n  /**\n   * Clear the draw source and track the geometry being drawn\n   * @param olGeometry Ol linestring or polygon\n   */\n  private onModifyStart(olGeometry: OlLineString | OlPolygon) {\n    this.onDrawStart(olGeometry);\n  }\n\n  /**\n   * Update measures observables and map tooltips\n   * @param olGeometry Ol linestring or polygon\n   */\n  private onModifyChanges(olGeometry: OlLineString | OlPolygon) {\n    this.onDrawChanges(olGeometry);\n  }\n\n  /**\n   * Clear the draw source and track the geometry being draw\n   * @param olGeometry Ol linestring or polygon\n   */\n  private onModifyEnd(olGeometry: OlLineString | OlPolygon) {\n    this.finalizeMeasureOfOlGeometry(olGeometry);\n  }\n\n  private finalizeMeasureOfOlGeometry(olGeometry: OlLineString | OlPolygon) {\n    const measure = measureOlGeometry(olGeometry, this.projection);\n    this.updateMeasureOfOlGeometry(olGeometry, measure);\n  }\n\n  /**\n   * Update measures observables\n   * @param olGeometry Ol linestring or polygon\n   * @param measure Measure\n   */\n  private updateMeasureOfOlGeometry(\n    olGeometry: OlLineString | OlPolygon,\n    measure: Measure\n  ) {\n    olGeometry.setProperties({ _measure: measure }, true);\n    this.updateTooltipsOfOlGeometry(olGeometry);\n  }\n\n  /**\n   * Clear the measures observables\n   */\n  private clearMeasures() {\n    this.measure$.next({});\n  }\n\n  /**\n   * Add a feature with measures to the store. The loading stragegy of the store\n   * will trigger and add the feature to the map.\n   * @internal\n   */\n  private addFeatureToStore(olGeometry, localFeature?: FeatureWithMeasure) {\n    const featureId = localFeature\n      ? localFeature.properties.id\n      : olGeometry.ol_uid;\n    const projection = this.map.ol.getView().getProjection();\n    const geometry = new OlGeoJSON().writeGeometryObject(olGeometry, {\n      featureProjection: projection,\n      dataProjection: projection\n    }) as any;\n    this.store.update({\n      type: FEATURE,\n      geometry,\n      projection: projection.getCode(),\n      properties: {\n        id: featureId,\n        measure: olGeometry.get('_measure')\n      },\n      meta: {\n        id: featureId\n      }\n    });\n  }\n\n  /**\n   * Update all the tooltips of an OL geometry\n   * @param olGeometry OL Geometry\n   * @param lengths Lengths of the OL geometry's segments\n   * @param measureUnit Display tooltip measure in those units\n   */\n  private updateTooltipsOfOlGeometry(olGeometry: OlLineString | OlPolygon) {\n    const measure = olGeometry.get('_measure');\n    const lengths = measure.lengths;\n    const area = measure.area;\n\n    const olMidpointsTooltips = updateOlTooltipsAtMidpoints(olGeometry);\n    if (lengths.length === olMidpointsTooltips.length) {\n      for (let i = 0; i < olMidpointsTooltips.length; i++) {\n        const length = lengths[i];\n        if (length !== undefined) {\n          this.updateOlTooltip(\n            olMidpointsTooltips[i],\n            metersToUnit(length, this.activeLengthUnit),\n            this.activeLengthUnit,\n            MeasureType.Length\n          );\n        }\n      }\n    }\n\n    if (area !== undefined) {\n      this.updateOlTooltip(\n        updateOlTooltipAtCenter(olGeometry),\n        squareMetersToUnit(area, this.activeAreaUnit),\n        this.activeAreaUnit,\n        MeasureType.Area\n      );\n    }\n  }\n\n  /**\n   * Clear the tooltips of an OL geometrys\n   * @param olGeometry OL geometry with tooltips\n   */\n  private clearTooltipsOfOlGeometry(olGeometry: OlLineString | OlPolygon) {\n    getTooltipsOfOlGeometry(olGeometry).forEach(\n      (olTooltip: OlOverlay | undefined) => {\n        if (olTooltip !== undefined && olTooltip.getMap() !== undefined) {\n          this.map.ol.removeOverlay(olTooltip);\n        }\n      }\n    );\n  }\n\n  /**\n   * Show the map tooltips of all the geometries of a source\n   */\n  private updateTooltipsOfOlSource(olSource: OlVectorSource) {\n    olSource.forEachFeature((olFeature: OlFeature) => {\n      this.updateTooltipsOfOlGeometry(olFeature.getGeometry() as any);\n    });\n  }\n\n  /**\n   * Clear the map tooltips\n   * @param olDrawSource OL vector source\n   */\n  private clearTooltipsOfOlSource(olSource: OlVectorSource) {\n    olSource.forEachFeature((olFeature: OlFeature) => {\n      const olGeometry = olFeature.getGeometry();\n      if (olGeometry !== undefined) {\n        this.clearTooltipsOfOlGeometry(olFeature.getGeometry() as any);\n      }\n    });\n  }\n\n  /**\n   * Update an OL tooltip properties and inner HTML and add it to the map if possible\n   * @param olTooltip OL tooltip\n   * @param measure The measure valeu ti display\n   * @param measureUnit Display tooltip measure in those units\n   */\n  private updateOlTooltip(\n    olTooltip: OlOverlay,\n    measure: number,\n    unit: MeasureAreaUnit | MeasureLengthUnit,\n    type: MeasureType\n  ) {\n    olTooltip.setProperties(\n      { _measure: measure, _unit: unit, _type: type },\n      true\n    );\n    olTooltip.getElement().innerHTML = this.computeTooltipInnerHTML(olTooltip);\n    if (this.shouldShowTooltip(olTooltip)) {\n      this.map.ol.addOverlay(olTooltip);\n    }\n  }\n\n  /**\n   * Compute a tooltip's content\n   * @param olTooltip OL overlay\n   * @returns Inner HTML\n   */\n  private computeTooltipInnerHTML(olTooltip: OlOverlay): string {\n    const properties = olTooltip.getProperties() as any;\n    return formatMeasure(\n      properties._measure,\n      {\n        decimal: 1,\n        unit: properties._unit,\n        unitAbbr: true,\n        locale: 'fr'\n      },\n      this.languageService\n    );\n  }\n\n  /**\n   * Whether a tooltip should be showned based on the length\n   * of the segment it is bound to.\n   * @param olTooltip OL overlay\n   * @returns True if the tooltip should be shown\n   */\n  private shouldShowTooltip(olTooltip: OlOverlay): boolean {\n    if (this.showTooltips === false) {\n      return false;\n    }\n\n    const properties = olTooltip.getProperties() as any;\n    const measure = properties._measure;\n    if (measure === undefined) {\n      return false;\n    }\n\n    if (properties._unit === MeasureType.Length) {\n      const minSegmentLength =\n        metersToUnit(this.minSegmentLength, properties._unit) || 0;\n      return measure > Math.max(minSegmentLength, 0);\n    }\n\n    return true;\n  }\n\n  private saveCurrentUnits() {\n    this.storageService.set(\n      'distanceUnit',\n      this.activeLengthUnit,\n      StorageScope.SESSION\n    );\n    this.storageService.set(\n      'areaUnit',\n      this.activeAreaUnit,\n      StorageScope.SESSION\n    );\n  }\n\n  private getSavedUnits() {\n    const distanceUnit = this.storageService.get(\n      'distanceUnit'\n    ) as MeasureLengthUnit;\n    const areaUnit = this.storageService.get('areaUnit') as MeasureAreaUnit;\n\n    this.activeLengthUnit = distanceUnit ? distanceUnit : this.activeLengthUnit;\n    this.activeAreaUnit = areaUnit ? areaUnit : this.activeAreaUnit;\n  }\n}\n","<div>\n  <div class=\"measure-type-toggle mat-typography\">\n    <mat-button-toggle-group\n      [value]=\"activeMeasureType\"\n      (change)=\"onMeasureTypeChange($event.value)\"\n    >\n      <mat-button-toggle [value]=\"measureType.Length\">\n        {{ 'igo.geo.measure.' + measureType.Length | translate }}\n      </mat-button-toggle>\n      <mat-button-toggle [value]=\"measureType.Area\">\n        {{ 'igo.geo.measure.' + measureType.Area | translate }}\n      </mat-button-toggle>\n    </mat-button-toggle-group>\n  </div>\n\n  <div class=\"measure-options mat-typography\">\n    <mat-slide-toggle\n      [disabled]=\"drawControlIsDisabled\"\n      [checked]=\"drawControlIsActive\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onToggleDrawControl($event.checked)\"\n    >\n      {{ 'igo.geo.measure.toggleActive' | translate }}\n    </mat-slide-toggle>\n\n    <mat-divider *ngIf=\"hasLine$ | async\"></mat-divider>\n\n    <mat-slide-toggle\n      *ngIf=\"hasLine$ | async\"\n      [checked]=\"displayLines\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onToggleDisplayLines($event.checked)\"\n    >\n      {{ 'igo.geo.measure.toggleDisplayLines' | translate }}\n    </mat-slide-toggle>\n\n    <mat-divider *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"></mat-divider>\n\n    <mat-slide-toggle\n      *ngIf=\"hasArea$ | async\"\n      [checked]=\"displayDistance\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onToggleDisplayDistance($event.checked)\"\n    >\n      {{ 'igo.geo.measure.toggleDisplayDistance' | translate }}\n    </mat-slide-toggle>\n\n    <mat-slide-toggle\n      *ngIf=\"hasArea$ | async\"\n      [checked]=\"displayAreas\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onToggleDisplayAreas($event.checked)\"\n    >\n      {{ 'igo.geo.measure.toggleDisplayAreas' | translate }}\n    </mat-slide-toggle>\n\n    <mat-divider *ngIf=\"hasArea$ | async\"></mat-divider>\n\n    <mat-slide-toggle\n      [checked]=\"measureUnitsAuto\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onToggleMeasureUnitsAuto($event.checked)\"\n    >\n      {{ 'igo.geo.measure.toggleAutoUnits' | translate }}\n    </mat-slide-toggle>\n  </div>\n\n  <ng-container *ngIf=\"measure$ | async as measure\">\n    <igo-measurer-item\n      *ngIf=\"\n        activeMeasureType === measureType.Length ||\n        activeMeasureType === measureType.Area\n      \"\n      [measureType]=\"measureType.Length\"\n      [measureUnit]=\"activeLengthUnit\"\n      [measure]=\"measure.length\"\n      [auto]=\"measureUnitsAuto\"\n      [placeholder]=\"\n        (activeMeasureType === measureType.Area\n          ? 'igo.geo.measure.perimeter'\n          : 'igo.geo.measure.length'\n        ) | translate\n      \"\n      (measureUnitChange)=\"onLengthUnitChange($any($event))\"\n    >\n    </igo-measurer-item>\n\n    <igo-measurer-item\n      *ngIf=\"activeMeasureType === measureType.Area\"\n      [measureType]=\"measureType.Area\"\n      [measureUnit]=\"activeAreaUnit\"\n      [measure]=\"measure.area\"\n      [auto]=\"measureUnitsAuto\"\n      [placeholder]=\"'igo.geo.measure.area' | translate\"\n      (measureUnitChange)=\"onAreaUnitChange($any($event))\"\n    >\n    </igo-measurer-item>\n  </ng-container>\n\n  <mat-divider *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"></mat-divider>\n\n  <div class=\"measure-store-buttons\">\n    <button\n      *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"\n      mat-icon-button\n      [matTooltip]=\"'igo.geo.measure.actionbar.calculate.tooltip' | translate\"\n      [disabled]=\"(selectedFeatures$ | async).length === 0\"\n      color=\"accent\"\n      (click)=\"onCalculateClick()\"\n    >\n      <mat-icon>calculate</mat-icon>\n    </button>\n\n    <button\n      *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"\n      mat-icon-button\n      [matTooltip]=\"'igo.geo.measure.actionbar.delete.tooltip' | translate\"\n      [disabled]=\"(selectedFeatures$ | async).length === 0\"\n      color=\"warn\"\n      (click)=\"onDeleteClick()\"\n    >\n      <mat-icon>delete</mat-icon>\n    </button>\n  </div>\n\n  <igo-entity-table\n    #table\n    class=\"table-compact\"\n    [store]=\"store\"\n    [template]=\"tableTemplate\"\n  >\n  </igo-entity-table>\n</div>\n","import { MeasureFormatPipe } from './measure-format.pipe';\nimport { MeasurerComponent } from './measurer.component';\n\nexport * from './measure-format.pipe';\nexport * from './measurer.component';\n\nexport const MEASURER_DIRECTIVES = [MeasureFormatPipe, MeasurerComponent];\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Self\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\n\nimport OlFeature from 'ol/Feature';\nimport OlOverlay from 'ol/Overlay';\nimport OlGeoJSON from 'ol/format/GeoJSON';\nimport OlCircle from 'ol/geom/Circle';\nimport OlGeometry from 'ol/geom/Geometry';\nimport type { Type } from 'ol/geom/Geometry';\nimport OlLineString from 'ol/geom/LineString';\nimport Point from 'ol/geom/Point';\nimport OlPoint from 'ol/geom/Point';\nimport OlPolygon from 'ol/geom/Polygon';\nimport OlVectorLayer from 'ol/layer/Vector';\nimport * as olproj from 'ol/proj';\nimport OlVectorSource from 'ol/source/Vector';\nimport * as OlStyle from 'ol/style';\nimport { StyleLike as OlStyleLike } from 'ol/style/Style';\n\nimport { Subscription } from 'rxjs';\n\nimport { IgoMap } from '../../map/shared/map';\nimport {\n  MeasureLengthUnit,\n  formatMeasure,\n  measureOlGeometry,\n  updateOlGeometryMidpoints\n} from '../../measure';\nimport {\n  DrawControl,\n  ModifyControl,\n  ModifyControlOptions\n} from '../shared/controls';\nimport { GeoJSONGeometry } from '../shared/geometry.interfaces';\nimport { createDrawInteractionStyle } from '../shared/geometry.utils';\nimport { DrawControlOptions } from './../shared/controls/draw';\n\ninterface HasRadius {\n  getRadius: () => number;\n  setRadius: (radius: number) => void;\n}\n\n/**\n * This input allows a user to draw a new geometry or to edit\n * an existing one on a map. A text input is also displayed in the\n * form with some instructions.\n * This is still WIP.\n */\n@Component({\n  selector: 'igo-geometry-form-field-input',\n  templateUrl: './geometry-form-field-input.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true\n})\nexport class GeometryFormFieldInputComponent\n  implements OnInit, OnDestroy, ControlValueAccessor\n{\n  private olOverlayLayer: OlVectorLayer<OlVectorSource>;\n  private olGeoJSON = new OlGeoJSON();\n  private ready = false;\n\n  private drawControl: DrawControl;\n  private modifyControl: ModifyControl;\n  private defaultDrawStyleRadius: number;\n  private olGeometryEnds$$: Subscription;\n  private olGeometryChanges$$: Subscription;\n  private olTooltip = this.createMeasureTooltip();\n\n  /**\n   * Active control\n   * @internal\n   */\n  public activeControl: DrawControl | ModifyControl;\n\n  /**\n   * The map to draw the geometry on\n   */\n  @Input() map: IgoMap;\n\n  /**\n   * The geometry type\n   */\n  @Input()\n  set geometryType(value: Type) {\n    this._geometryType = value;\n    if (this.ready === false) {\n      return;\n    }\n\n    this.deactivateControl();\n    this.createDrawControl();\n    this.drawControl.freehand$.next(this.freehandDrawIsActive);\n    this.toggleControl();\n  }\n  get geometryType(): Type {\n    return this._geometryType;\n  }\n  private _geometryType: Type;\n\n  /**\n   * The drawGuide around the mouse pointer to help drawing\n   */\n  @Input() drawGuide: number = null;\n\n  /**\n   * Whether a measure tooltip should be displayed\n   */\n  @Input() measure = false;\n\n  /**\n   * Whether draw control should be active or not\n   */\n  @Input()\n  get drawControlIsActive(): boolean {\n    return this._drawControlIsActive;\n  }\n  set drawControlIsActive(value: boolean) {\n    this._drawControlIsActive = value;\n    if (this.ready === false) {\n      return;\n    }\n    this.deactivateControl();\n    if (!this._drawControlIsActive) {\n      return;\n    } else {\n      this.toggleControl();\n    }\n  }\n  private _drawControlIsActive = true;\n\n  /**\n   * Whether freehand draw control should be active or not\n   */\n  @Input()\n  get freehandDrawIsActive(): boolean {\n    return this._freehandDrawIsActive;\n  }\n  set freehandDrawIsActive(value: boolean) {\n    this._freehandDrawIsActive = value;\n    this.deactivateControl();\n\n    this.createDrawControl();\n    this.createModifyControl();\n\n    this.drawControl.freehand$.next(this.freehandDrawIsActive);\n\n    if (this.ready === false) {\n      return;\n    }\n\n    if (!this.drawControlIsActive) {\n      return;\n    }\n    this.toggleControl();\n  }\n  private _freehandDrawIsActive: boolean;\n\n  /**\n   * Whether freehand draw control should be active or not\n   */\n  @Input()\n  get predefinedRadius(): boolean {\n    return this._predefinedRadius;\n  }\n  set predefinedRadius(value: boolean) {\n    this._predefinedRadius = value;\n    this.drawControl.ispredefinedRadius$.next(value);\n  }\n  private _predefinedRadius: boolean;\n\n  /**\n   * Control options\n   */\n  @Input() controlOptions: Record<string, any> = {};\n\n  /**\n   * Style for the draw control (applies while the geometry is being drawn)\n   */\n  @Input()\n  set drawStyle(value: OlStyleLike | OlStyle.RegularShape) {\n    if (value === undefined) {\n      value = createDrawInteractionStyle();\n    }\n    this._drawStyle = value;\n\n    const olGuideStyle = this.getGuideStyleFromDrawStyle(value);\n    if (olGuideStyle !== undefined) {\n      this.defaultDrawStyleRadius = olGuideStyle.getRadius();\n    } else {\n      this.defaultDrawStyleRadius = null;\n    }\n\n    if (this.ready === false) {\n      return;\n    }\n\n    this.deactivateControl();\n    this.createDrawControl();\n    this.createModifyControl();\n\n    this.drawControl.freehand$.next(this.freehandDrawIsActive);\n    this.toggleControl();\n  }\n  get drawStyle(): OlStyleLike | OlStyle.RegularShape {\n    return this._drawStyle;\n  }\n  private _drawStyle: OlStyleLike | OlStyle.RegularShape;\n\n  /**\n   * Style for the overlay layer (applies once the geometry is added to the map)\n   * If not specified, drawStyle applies\n   */\n  @Input()\n  set overlayStyle(value: OlStyleLike | OlStyle.RegularShape) {\n    this._overlayStyle = value;\n  }\n  get overlayStyle(): OlStyleLike | OlStyle.RegularShape {\n    return this._overlayStyle;\n  }\n  private _overlayStyle: OlStyleLike | OlStyle.RegularShape;\n\n  /**\n   * The geometry value (GeoJSON)\n   * Implemented as part of ControlValueAccessor.\n   */\n  @Input()\n  set value(value: GeoJSONGeometry) {\n    this._value = value;\n    if (this.ready === false) {\n      return;\n    }\n\n    if (value) {\n      this.addGeoJSONToOverlay(value);\n    } else {\n      this.olOverlaySource.clear(true);\n    }\n    this.onChange(value);\n    this.toggleControl();\n    this.cdRef.detectChanges();\n  }\n  get value(): GeoJSONGeometry {\n    return this._value;\n  }\n  private _value: GeoJSONGeometry;\n\n  /**\n   * The vector source to add the geometry to\n   * @internal\n   */\n  get olOverlaySource(): OlVectorSource {\n    return this.olOverlayLayer.getSource();\n  }\n\n  @Input()\n  set radius(value: any) {\n    if (this.ready === false) {\n      return;\n    }\n    if (this.modifyControl.getSource()) {\n      this.modifyControl.getSource().refresh();\n    }\n    if (this.freehandDrawIsActive) {\n      let olModify;\n      setTimeout(() => {\n        olModify = this.modifyControl.olModifyInteraction;\n        if (olModify) {\n          if (olModify.features_) {\n            olModify.features_.clear();\n            this.addGeoJSONToOverlay(this.value);\n          }\n        }\n      }, 0);\n    }\n  }\n\n  constructor(\n    private cdRef: ChangeDetectorRef,\n    @Optional() @Self() public ngControl: NgControl\n  ) {\n    if (this.ngControl !== undefined) {\n      // Setting the value accessor directly (instead of using\n      // the providers) to avoid running into a circular import.\n      this.ngControl.valueAccessor = this;\n    }\n  }\n\n  /**\n   * Create an overlay layer, add the initial geometry to it (if any)\n   * and toggle the right interaction.\n   * @internal\n   */\n  ngOnInit() {\n    if (this.drawStyle === undefined) {\n      this.drawStyle = createDrawInteractionStyle();\n    }\n\n    if (this.overlayStyle === undefined) {\n      this.overlayStyle = this.drawStyle;\n    }\n\n    this.addOlOverlayLayer();\n    this.createDrawControl();\n    this.createModifyControl();\n\n    if (this.value) {\n      this.addGeoJSONToOverlay(this.value);\n    }\n    this.toggleControl();\n\n    this.ready = true;\n  }\n\n  /**\n   * Clear the overlay layer and any interaction added by this component.\n   * @internal\n   */\n  ngOnDestroy() {\n    // This is mandatory when the form control is reused after\n    // this component has been destroyed. It seems like the control\n    // keeps a reference to this component even after it's destroyed\n    // and it attempts to set it's value\n    this.ready = false;\n\n    this.deactivateControl();\n    this.olOverlaySource.clear();\n    this.map.ol.removeLayer(this.olOverlayLayer);\n  }\n\n  /**\n   * Implemented as part of ControlValueAccessor.\n   */\n  registerOnChange(fn: () => void) {\n    this.onChange = fn;\n  }\n  private onChange: any = () => void 1;\n\n  /**\n   * Implemented as part of ControlValueAccessor.\n   */\n  registerOnTouched(fn: () => void) {\n    this.onTouched = fn;\n  }\n  private onTouched: any = () => void 1;\n\n  /**\n   * Implemented as part of ControlValueAccessor.\n   */\n  writeValue(value: GeoJSONGeometry) {\n    this.value = value;\n  }\n\n  /**\n   * Add an overlay layer to the map\n   */\n  private addOlOverlayLayer() {\n    this.olOverlayLayer = new OlVectorLayer({\n      source: new OlVectorSource(),\n      zIndex: 500,\n      style: null\n    });\n    this.map.ol.addLayer(this.olOverlayLayer);\n  }\n\n  /**\n   * Create a draw control and subscribe to it's geometry\n   */\n  private createDrawControl() {\n    const controlOptions = Object.assign({}, this.controlOptions, {\n      geometryType: this.geometryType || 'Point',\n      drawingLayer: this.olOverlayLayer,\n      interactionStyle:\n        typeof this.drawStyle === 'function'\n          ? this.drawStyle\n          : (olFeature: OlFeature<OlGeometry>, resolution: number) => {\n              const style = this.drawStyle;\n              this.updateDrawStyleWithDrawGuide(style, resolution);\n              return style;\n            }\n    }) as DrawControlOptions;\n    this.drawControl = new DrawControl(controlOptions);\n  }\n\n  /**\n   * Create a modify control and subscribe to it's geometry\n   */\n  private createModifyControl() {\n    const controlOptions = Object.assign({}, this.controlOptions, {\n      layer: this.olOverlayLayer,\n      drawStyle:\n        typeof this.drawStyle === 'function'\n          ? this.drawStyle\n          : (olFeature: OlFeature<OlGeometry>, resolution: number) => {\n              const style = this.drawStyle;\n              this.updateDrawStyleWithDrawGuide(style, resolution);\n              return style;\n            }\n    }) as ModifyControlOptions;\n    this.modifyControl = new ModifyControl(controlOptions);\n  }\n\n  /**\n   * Toggle the proper control (draw or modify)\n   */\n  private toggleControl() {\n    let activate;\n    if (!this.value && this.geometryType) {\n      activate = this.drawControl;\n    } else {\n      activate = this.modifyControl;\n    }\n\n    // If the control that should be activated\n    // is not the same as the current active control,\n    // deactivate the current control and activate the new one\n    // Otherwise, do nothing and keep the current control active\n    if (activate !== this.activeControl) {\n      this.deactivateControl();\n      this.activateControl(activate);\n    }\n  }\n\n  /**\n   * Activate a given control\n   * @param control Control\n   */\n  private activateControl(control: DrawControl | ModifyControl) {\n    this.activeControl = control;\n    this.olGeometryEnds$$ = control.end$.subscribe((olGeometry: OlGeometry) =>\n      this.onOlGeometryEnds(olGeometry)\n    );\n    if (this.measure === true && control === this.drawControl) {\n      this.olGeometryChanges$$ = control.changes$.subscribe(\n        (olGeometry: OlPolygon | OlPoint | OlLineString | OlCircle) =>\n          this.onOlGeometryChanges(olGeometry)\n      );\n    }\n    control.setOlMap(this.map.ol, false);\n  }\n\n  /**\n   * Deactivate the active control\n   */\n  private deactivateControl() {\n    this.removeMeasureTooltip();\n    if (this.activeControl !== undefined) {\n      this.activeControl.setOlMap(undefined);\n    }\n    if (this.olGeometryEnds$$ !== undefined) {\n      this.olGeometryEnds$$.unsubscribe();\n    }\n    if (this.olGeometryChanges$$ !== undefined) {\n      this.olGeometryChanges$$.unsubscribe();\n    }\n    this.activeControl = undefined;\n  }\n\n  /**\n   * Update measures observables and map tooltips\n   * @param olGeometry Ol linestring or polygon\n   */\n  private onOlGeometryEnds(olGeometry: OlGeometry | undefined) {\n    this.removeMeasureTooltip();\n    this.setOlGeometry(olGeometry);\n  }\n\n  /**\n   * Update measures observables and map tooltips\n   * @param olGeometry Ol linestring or polygon\n   */\n  private onOlGeometryChanges(\n    olGeometry: OlPolygon | OlPoint | OlLineString | OlCircle\n  ) {\n    if (olGeometry.getType() !== 'Point') {\n      this.updateMeasureTooltip(olGeometry);\n    }\n  }\n\n  /**\n   * When drawing ends, convert the output value to GeoJSON and keep it.\n   * Restore the double click interaction.\n   * @param olGeometry OL geometry\n   */\n  private setOlGeometry(olGeometry: OlGeometry | undefined) {\n    if (olGeometry === undefined) {\n      return;\n    }\n\n    if (olGeometry.getType() === 'Circle') {\n      // Because Circle doesn't exist as a GeoJSON object\n      olGeometry = this.circleToPoint(olGeometry);\n    }\n\n    const value = this.olGeoJSON.writeGeometryObject(olGeometry, {\n      featureProjection: this.map.projection,\n      dataProjection: 'EPSG:4326'\n    }) as any;\n    if (olGeometry.get('radius')) {\n      value.radius = olGeometry.get('radius');\n      olGeometry.set('radius', value.radius);\n    }\n    this.writeValue(value);\n  }\n\n  private circleToPoint(olGeometry) {\n    const center = olGeometry.getCenter();\n    const coordinates = olproj.transform(\n      center,\n      this.map.projection,\n      'EPSG:4326'\n    );\n    const radius = Math.round(\n      olGeometry.getRadius() * Math.cos((Math.PI / 180) * coordinates[1])\n    );\n\n    // Convert it to a point object\n    olGeometry = new Point(center);\n    olGeometry.set('radius', radius, true);\n    return olGeometry;\n  }\n\n  /**\n   * Add a GeoJSON geometry to the overlay\n   * @param geometry GeoJSON geometry\n   */\n  private addGeoJSONToOverlay(geometry: GeoJSONGeometry) {\n    const olGeometry = this.olGeoJSON.readGeometry(geometry, {\n      dataProjection: 'EPSG:4326',\n      featureProjection: this.map.projection\n    });\n    const olFeature = new OlFeature({\n      geometry: olGeometry\n    });\n    olFeature.setStyle(this.overlayStyle as OlStyle.Style);\n    this.olOverlaySource.clear();\n    this.olOverlaySource.addFeature(olFeature);\n  }\n\n  /**\n   * Create the measure tooltip\n   */\n  private createMeasureTooltip() {\n    return new OlOverlay({\n      element: document.createElement('div'),\n      offset: [-30, -10],\n      className: ['igo-map-tooltip', 'igo-map-tooltip-measure'].join(' '),\n      stopEvent: false\n    });\n  }\n\n  /**\n   * Update the measure tooltip of an OL geometry\n   * @param olGeometry OL Geometry\n   */\n  private updateMeasureTooltip(\n    olGeometry: OlPolygon | OlPoint | OlLineString | OlCircle\n  ) {\n    const measure = measureOlGeometry(olGeometry, this.map.projection);\n    const lengths = measure.lengths;\n    const lastIndex =\n      olGeometry.getType() === 'Polygon'\n        ? lengths.length - 2\n        : lengths.length - 1;\n    const lastLength = lengths[lastIndex];\n\n    const olMidpoints = updateOlGeometryMidpoints(olGeometry);\n    const olLastMidpoint = olMidpoints[lastIndex];\n    if (olMidpoints.length === 0 || olLastMidpoint === undefined) {\n      this.removeMeasureTooltip();\n      return;\n    }\n\n    this.olTooltip.setPosition(olLastMidpoint.getFlatCoordinates());\n\n    const innerHtml = formatMeasure(lastLength, {\n      decimal: 1,\n      unit: MeasureLengthUnit.Meters,\n      unitAbbr: true,\n      locale: 'fr'\n    });\n    this.olTooltip.getElement().innerHTML = innerHtml;\n    if (this.olTooltip.getMap() === undefined) {\n      this.map.ol.addOverlay(this.olTooltip);\n    }\n  }\n\n  /**\n   * Remove the measure tooltip from the map\n   */\n  private removeMeasureTooltip() {\n    if (this.olTooltip.getMap && this.olTooltip.getMap() !== undefined) {\n      this.map.ol.removeOverlay(this.olTooltip);\n      this.olTooltip.setMap(undefined);\n    }\n  }\n\n  /**\n   * Adjust the draw style with the specified draw guide distance, if possible\n   * @param olStyle Draw style to update\n   * @param resolution Resolution (to make the screen size of symbol fit the drawGuide value)\n   */\n  private updateDrawStyleWithDrawGuide(\n    olStyle: OlStyleLike | OlStyle.RegularShape,\n    resolution: number\n  ) {\n    const olGuideStyle = this.getGuideStyleFromDrawStyle(olStyle);\n    if (olGuideStyle === undefined) {\n      return;\n    }\n    const drawGuide = this.drawGuide;\n    let radius;\n    if (!drawGuide || drawGuide < 0) {\n      radius = this.defaultDrawStyleRadius;\n    } else {\n      radius = drawGuide > 0 ? drawGuide / resolution : drawGuide;\n    }\n    olGuideStyle.setRadius(radius);\n  }\n\n  /**\n   * Returns wether a given Open Layers style has a radius property that can be set (used to set draw guide)\n   * @param olStyle The style on which to perform the check\n   */\n  private getGuideStyleFromDrawStyle(\n    olStyle: OlStyleLike | OlStyle.RegularShape\n  ): HasRadius | undefined {\n    let baseStyle: unknown;\n    if (Array.isArray(olStyle)) {\n      baseStyle = olStyle[0];\n    } else {\n      baseStyle = olStyle;\n    }\n\n    if (typeof (baseStyle as any).getImage === 'function') {\n      baseStyle = (baseStyle as any).getImage() as OlStyle.Image;\n    }\n\n    let guideStyle: HasRadius;\n    if (typeof (baseStyle as any).setRadius === 'function') {\n      guideStyle = baseStyle as HasRadius;\n    }\n\n    return guideStyle;\n  }\n}\n","<ng-template></ng-template>\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { NestedTreeControl } from '@angular/cdk/tree';\nimport { AsyncPipe, NgFor, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormControl\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule, MatTreeNestedDataSource } from '@angular/material/tree';\n\nimport {\n  EntityStore,\n  EntityStoreFilterSelectionStrategy,\n  EntityTableColumnRenderer,\n  EntityTableComponent,\n  EntityTableTemplate\n} from '@igo2/common/entity';\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\n\nimport OlFeature from 'ol/Feature';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport OlPoint from 'ol/geom/Point';\nimport * as olproj from 'ol/proj';\nimport * as olStyle from 'ol/style';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { FeatureDataSource } from '../../../datasource/shared';\nimport { GeometryType } from '../../../draw';\nimport { FeatureMotion, FeatureStoreSelectionStrategy } from '../../../feature';\nimport { GeometryFormFieldInputComponent } from '../../../geometry/geometry-form-field/geometry-form-field-input.component';\nimport { GeoJSONGeometry } from '../../../geometry/shared/geometry.interfaces';\nimport { AnyLayer, VectorLayer } from '../../../layer/shared';\nimport { IgoMap } from '../../../map/shared/map';\nimport { MeasureLengthUnit } from '../../../measure';\nimport {\n  SpatialFilterQueryType,\n  SpatialFilterType\n} from '../../shared/spatial-filter.enum';\nimport { SpatialFilterService } from '../../shared/spatial-filter.service';\nimport { Feature } from './../../../feature/shared/feature.interfaces';\nimport { SpatialFilterItemType } from './../../shared/spatial-filter.enum';\nimport { SpatialFilterThematic } from './../../shared/spatial-filter.interface';\n\n/**\n * Spatial-Filter-Item (search parameters)\n */\n@Component({\n  selector: 'igo-spatial-filter-item',\n  templateUrl: './spatial-filter-item.component.html',\n  styleUrls: ['./spatial-filter-item.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    GeometryFormFieldInputComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    NgIf,\n    MatSlideToggleModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatSelectModule,\n    NgFor,\n    MatOptionModule,\n    MatRadioModule,\n    MatTableModule,\n    MatCheckboxModule,\n    MatTreeModule,\n    MatButtonModule,\n    MatIconModule,\n    MatTooltipModule,\n    EntityTableComponent,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SpatialFilterItemComponent implements OnDestroy, OnInit {\n  @Input() map: IgoMap;\n\n  @Input()\n  get type(): SpatialFilterType {\n    return this._type;\n  }\n  set type(type: SpatialFilterType) {\n    this._type = type;\n    const index = this.geometryTypes.findIndex(\n      (geom) => geom === (this.type as any)\n    );\n    this.geometryType = this.geometryTypes[index];\n    this.formControl.reset();\n    this.radius = undefined;\n    this.drawGuide$.next(null);\n    this.drawStyle$.next(undefined);\n\n    // Necessary to keep reference to the geometry form field input\n    if (this.type === SpatialFilterType.Predefined) {\n      const geojson: GeoJSONGeometry = {\n        type: 'Point',\n        coordinates: ''\n      };\n      this.formControl.setValue(geojson);\n    }\n\n    // Necessary to apply the right style when geometry type is Point\n    if (this.type === SpatialFilterType.Point) {\n      this.radius = 1000; // Base radius\n      this.radiusFormControl.setValue(this.radius);\n      this.PointStyle = (\n        feature: OlFeature<OlGeometry>,\n        resolution: number\n      ) => {\n        const geom = feature.getGeometry() as OlPoint;\n        const coordinates = olproj.transform(\n          geom.getCoordinates(),\n          this.map.projection,\n          'EPSG:4326'\n        );\n        return new olStyle.Style({\n          image: new olStyle.Circle({\n            radius:\n              this.radius /\n              Math.cos((Math.PI / 180) * coordinates[1]) /\n              resolution, // Latitude correction\n            stroke: new olStyle.Stroke({\n              width: 2,\n              color: 'rgba(0, 153, 255)'\n            }),\n            fill: new olStyle.Fill({\n              color: 'rgba(0, 153, 255, 0.2)'\n            })\n          })\n        });\n      };\n      this.overlayStyle = this.PointStyle;\n      this.drawStyle$.next(this.overlayStyle);\n    } else {\n      // If geometry types is Polygon\n      this.radius = undefined;\n      this.PolyStyle = () => {\n        return new olStyle.Style({\n          stroke: new olStyle.Stroke({\n            width: 2,\n            color: 'rgba(0, 153, 255)'\n          }),\n          fill: new olStyle.Fill({\n            color: 'rgba(0, 153, 255, 0.2)'\n          })\n        });\n      };\n      const color = [0, 153, 255];\n      const drawStyle = () => {\n        return new olStyle.Style({\n          image: new olStyle.Circle({\n            radius: 8,\n            stroke: new olStyle.Stroke({\n              width: 2,\n              color: 'rgba(0, 153, 255)'\n            }),\n            fill: new olStyle.Fill({\n              color: 'rgba(0, 153, 255, 0.2)'\n            })\n          }),\n          stroke: new olStyle.Stroke({\n            color: color.concat([1]),\n            width: 2\n          }),\n          fill: new olStyle.Fill({\n            color: color.concat([0.2])\n          })\n        });\n      };\n      this.overlayStyle = this.PolyStyle;\n      this.drawStyle$.next(drawStyle);\n    }\n    this.overlayStyle$.next(this.overlayStyle);\n  }\n  private _type: SpatialFilterType;\n\n  @Input() queryType: SpatialFilterQueryType;\n\n  @Input() zone: Feature;\n\n  @Input() loading;\n\n  @Input()\n  get store(): EntityStore<Feature> {\n    return this._store;\n  }\n  set store(store: EntityStore<Feature>) {\n    this._store = store;\n    this._store.entities$.subscribe(() => {\n      this.cdRef.detectChanges();\n    });\n  }\n  private _store: EntityStore<Feature>;\n\n  /**\n   * Available measure units for the measure type given\n   * @internal\n   */\n  get measureUnits(): string[] {\n    return [MeasureLengthUnit.Meters, MeasureLengthUnit.Kilometers];\n  }\n\n  @Input() layers: AnyLayer[] = [];\n\n  @Input() allLayers: AnyLayer[] = [];\n\n  @Input()\n  get thematicLength(): number {\n    return this._thematicLength;\n  }\n  set thematicLength(value: number) {\n    this._thematicLength = value;\n  }\n  private _thematicLength: number;\n\n  @Output() toggleSearch = new EventEmitter();\n\n  @Output() itemTypeChange = new EventEmitter<SpatialFilterItemType>();\n\n  @Output() thematicChange = new EventEmitter<SpatialFilterThematic[]>();\n\n  @Output() drawZoneEvent = new EventEmitter<Feature>();\n\n  @Output() bufferEvent = new EventEmitter<number>();\n  @Output() zoneWithBufferChange = new EventEmitter<Feature>();\n  @Output() measureUnitChange = new EventEmitter<MeasureLengthUnit>();\n\n  @Output() radiusEvent = new EventEmitter<number>();\n  @Output() freehandControl = new EventEmitter<boolean>();\n  @Output() predefinedRadius = new EventEmitter<boolean>();\n\n  @Output() clearButtonEvent = new EventEmitter();\n\n  @Output() clearSearchEvent = new EventEmitter();\n\n  @Output() export = new EventEmitter();\n\n  @Output() openWorkspace = new EventEmitter();\n  @Output() entityChange = new EventEmitter<any>();\n\n  public itemType: SpatialFilterItemType[] = [\n    SpatialFilterItemType.Address,\n    SpatialFilterItemType.Thematics\n  ];\n  public selectedItemType: SpatialFilterItemType =\n    SpatialFilterItemType.Address;\n  public selectedSourceAddress;\n\n  treeControl: NestedTreeControl<SpatialFilterThematic> =\n    new NestedTreeControl<SpatialFilterThematic>((node) => node.children);\n\n  // For thematics and results tables\n  public displayedColumns: string[] = ['name', 'select'];\n  public childrens: SpatialFilterThematic[] = [];\n  public groups: string[] = [];\n  public thematics: SpatialFilterThematic[] = [];\n  public dataSource = new MatTreeNestedDataSource<SpatialFilterThematic>();\n  public selectedThematics = new SelectionModel<SpatialFilterThematic>(\n    true,\n    []\n  );\n\n  // For geometry form field input\n  value$ = new BehaviorSubject<GeoJSONGeometry>(undefined);\n  drawGuide$ = new BehaviorSubject<number>(null);\n  overlayStyle$ = new BehaviorSubject<\n    olStyle.Style | ((feature, resolution) => olStyle.Style)\n  >(undefined);\n  drawStyle$ = new BehaviorSubject<\n    olStyle.Style | ((feature, resolution) => olStyle.Style)\n  >(undefined);\n\n  private value$$: Subscription;\n  private radiusChanges$$: Subscription;\n  private bufferChanges$$: Subscription;\n\n  public formControl = new UntypedFormControl();\n  public geometryType: GeometryType;\n  public geometryTypeField = false;\n  public geometryTypes: GeometryType[] = [\n    GeometryType.Point,\n    GeometryType.Polygon\n  ];\n  public drawGuideField = false;\n  public drawGuide: number = null;\n  public drawGuidePlaceholder = '';\n  public measure = false;\n  public drawControlIsActive = true;\n  public freehandDrawIsActive = false;\n  public drawStyle: olStyle.Style | ((feature, resolution) => olStyle.Style);\n  public drawZone;\n  public overlayStyle: olStyle.Style | ((feature, resolution) => olStyle.Style);\n  public PointStyle: olStyle.Style | ((feature, resolution) => olStyle.Style);\n  public PolyStyle: olStyle.Style | ((feature, resolution) => olStyle.Style);\n\n  public radius: number;\n  public buffer = 0;\n  public radiusFormControl = new UntypedFormControl();\n  public bufferFormControl = new UntypedFormControl();\n\n  public measureUnit: MeasureLengthUnit = MeasureLengthUnit.Meters;\n  public zoneWithBuffer;\n\n  public listIsVisible = true;\n  public tableTemplate: EntityTableTemplate;\n\n  constructor(\n    private cdRef: ChangeDetectorRef,\n    private spatialFilterService: SpatialFilterService,\n    private messageService: MessageService,\n    private languageService: LanguageService\n  ) {}\n\n  ngOnInit() {\n    this.spatialFilterService\n      .loadThematicsList()\n      .subscribe((items: SpatialFilterThematic[]) => {\n        for (const item of items) {\n          this.childrens.push(item);\n          this.childrens.sort((a, b) => {\n            return a.name.localeCompare(b.name);\n          });\n        }\n        this.groups.push(\n          this.languageService.translate.instant('igo.geo.terrapi.limites')\n        );\n        const limits: SpatialFilterThematic = {\n          name: this.groups[0],\n          children: []\n        };\n        this.thematics.push(limits);\n        this.childrens.forEach((child) => {\n          if (child.group && this.groups.indexOf(child.group) === -1) {\n            this.groups.push(child.group);\n            const thematic: SpatialFilterThematic = {\n              name: child.group,\n              children: []\n            };\n            this.thematics.push(thematic);\n          }\n\n          if (!child.group) {\n            if (\n              child.name ===\n                this.languageService.translate.instant(\n                  'igo.geo.terrapi.AdmRegion'\n                ) ||\n              child.name ===\n                this.languageService.translate.instant('igo.geo.terrapi.Mun') ||\n              child.name ===\n                this.languageService.translate.instant(\n                  'igo.geo.terrapi.Arrond'\n                ) ||\n              child.name ===\n                this.languageService.translate.instant(\n                  'igo.geo.terrapi.CircFed'\n                ) ||\n              child.name ===\n                this.languageService.translate.instant(\n                  'igo.geo.terrapi.CircProv'\n                ) ||\n              child.name ===\n                this.languageService.translate.instant(\n                  'igo.geo.terrapi.DirReg'\n                ) ||\n              child.name ===\n                this.languageService.translate.instant('igo.geo.terrapi.MRC') ||\n              child.name ===\n                this.languageService.translate.instant(\n                  'igo.geo.terrapi.RegTour'\n                )\n            ) {\n              child.group = limits.name;\n            } else if (\n              child.name ===\n              this.languageService.translate.instant('igo.geo.terrapi.routes')\n            ) {\n              child.group = this.languageService.translate.instant(\n                'igo.geo.spatialFilter.group.transport'\n              );\n            } else {\n              const thematic: SpatialFilterThematic = {\n                name: child.name,\n                children: [],\n                source: child.source\n              };\n              this.thematics.push(thematic);\n            }\n          }\n          this.thematics.sort((a, b) => {\n            return a.name.localeCompare(b.name);\n          });\n        });\n        this.thematics.forEach((thematic) => {\n          for (const child of this.childrens) {\n            if (child.group === thematic.name) {\n              thematic.children.push(child);\n            }\n          }\n        });\n      });\n\n    this.dataSource.data = this.thematics;\n\n    this.drawGuide$.next(null);\n    this.value$.next(\n      this.formControl.value ? this.formControl.value : undefined\n    );\n    this.value$$ = this.formControl.valueChanges.subscribe(\n      (value: GeoJSONGeometry) => {\n        if (value) {\n          this.value$.next(value);\n          this.drawZone = this.formControl.value as Feature;\n          if (this.buffer !== 0) {\n            this.drawZoneEvent.emit(this.drawZone);\n            this.bufferFormControl.setValue(this.buffer);\n          }\n        } else {\n          this.value$.next(undefined);\n          this.drawZone = undefined;\n        }\n      }\n    );\n\n    this.value$.subscribe(() => {\n      this.getRadius();\n      this.cdRef.detectChanges();\n    });\n\n    this.radiusChanges$$ = this.radiusFormControl.valueChanges.subscribe(() => {\n      this.getRadius();\n      this.cdRef.detectChanges();\n    });\n\n    this.bufferChanges$$ = this.bufferFormControl.valueChanges\n      .pipe(debounceTime(500))\n      .subscribe((value) => {\n        if (\n          this.measureUnit === MeasureLengthUnit.Meters &&\n          value > 0 &&\n          value <= 100000\n        ) {\n          this.buffer = value;\n          this.bufferEvent.emit(value);\n          this.spatialFilterService\n            .loadBufferGeometry(this.drawZone, SpatialFilterType.Polygon, value)\n            .subscribe((featureGeom: Feature) => {\n              this.zoneWithBuffer = featureGeom;\n              this.zoneWithBufferChange.emit(this.zoneWithBuffer);\n            });\n        } else if (\n          this.measureUnit === MeasureLengthUnit.Kilometers &&\n          value > 0 &&\n          value <= 100\n        ) {\n          this.buffer = value;\n          this.bufferEvent.emit(value);\n          this.spatialFilterService\n            .loadBufferGeometry(\n              this.drawZone,\n              SpatialFilterType.Polygon,\n              value * 1000\n            )\n            .subscribe((featureGeom: Feature) => {\n              this.zoneWithBuffer = featureGeom;\n              this.zoneWithBufferChange.emit(this.zoneWithBuffer);\n            });\n        } else if (value === 0) {\n          this.buffer = value;\n          this.bufferEvent.emit(value);\n          this.drawZoneEvent.emit(this.drawZone);\n        } else if (\n          value < 0 ||\n          (this.measureUnit === MeasureLengthUnit.Meters && value > 100000) ||\n          (this.measureUnit === MeasureLengthUnit.Kilometers && value > 100)\n        ) {\n          this.bufferFormControl.setValue(0);\n          this.buffer = 0;\n          this.messageService.alert(\n            'igo.geo.spatialFilter.bufferAlert',\n            'igo.geo.spatialFilter.warning'\n          );\n        }\n      });\n\n    const selectedRecordStrategy = new EntityStoreFilterSelectionStrategy({});\n    const selectionStrategy = new FeatureStoreSelectionStrategy({\n      layer: new VectorLayer({\n        zIndex: 300,\n        source: new FeatureDataSource(),\n        style: undefined,\n        showInLayerList: false,\n        exportable: false,\n        browsable: false\n      }),\n      map: this.map,\n      hitTolerance: 15,\n      motion: FeatureMotion.Default,\n      many: true,\n      dragBox: true\n    });\n\n    this.store.addStrategy(selectionStrategy, true);\n    this.store.addStrategy(selectedRecordStrategy, false);\n  }\n\n  /**\n   * Unsubscribe to the value stream\n   * @internal\n   */\n  ngOnDestroy() {\n    this.value$$.unsubscribe();\n    this.radiusChanges$$.unsubscribe();\n    this.bufferChanges$$.unsubscribe();\n    this.cdRef.detach();\n    if (this.radiusChanges$$) {\n      this.radiusChanges$$.unsubscribe();\n    }\n    if (this.value$$) {\n      this.value$$.unsubscribe();\n    }\n  }\n\n  onItemTypeChange(event) {\n    this.selectedItemType = event.value;\n    this.itemTypeChange.emit(this.selectedItemType);\n  }\n\n  /**\n   * Set the measure unit\n   * @internal\n   */\n  onMeasureUnitChange(unit: MeasureLengthUnit) {\n    if (unit === this.measureUnit) {\n      return;\n    } else {\n      this.measureUnit = unit;\n      this.measureUnitChange.emit(this.measureUnit);\n      if (this.isPolygon()) {\n        this.measureUnit === MeasureLengthUnit.Meters\n          ? this.bufferFormControl.setValue(this.bufferFormControl.value * 1000)\n          : this.bufferFormControl.setValue(\n              this.bufferFormControl.value / 1000\n            );\n      } else if (this.isPoint()) {\n        this.measureUnit === MeasureLengthUnit.Meters\n          ? this.radiusFormControl.setValue(this.radiusFormControl.value * 1000)\n          : this.radiusFormControl.setValue(\n              this.radiusFormControl.value / 1000\n            );\n      }\n    }\n  }\n\n  isPredefined() {\n    return this.type === SpatialFilterType.Predefined;\n  }\n\n  isPolygon() {\n    return this.type === SpatialFilterType.Polygon;\n  }\n\n  isPoint() {\n    return this.type === SpatialFilterType.Point;\n  }\n\n  hasChild(_: number, node: SpatialFilterThematic) {\n    if (node.children) {\n      return node.children.length;\n    }\n    return false;\n  }\n\n  onToggleClick(node: SpatialFilterThematic) {\n    this.treeControl.isExpanded(node)\n      ? this.treeControl.collapse(node)\n      : this.treeControl.expand(node);\n  }\n\n  isAllSelected(node?: SpatialFilterThematic) {\n    let numSelected;\n    let numNodes = 0;\n    if (!node) {\n      numSelected = this.selectedThematics.selected.length;\n      this.thematics.forEach((thematic) => {\n        if (this.groups.indexOf(thematic.name) === -1) {\n          numNodes++;\n        }\n      });\n      this.childrens.forEach((children) => {\n        if (\n          !this.thematics.find(\n            (thematic) => thematic.source === children.source\n          )\n        ) {\n          numNodes++;\n        }\n      });\n    } else {\n      numSelected = node.children.length;\n      node.children.forEach((children) => {\n        if (\n          this.selectedThematics.selected.find(\n            (thematic) => thematic === children\n          )\n        ) {\n          numNodes++;\n        }\n      });\n    }\n\n    if (numNodes >= 1) {\n      return numSelected === numNodes;\n    } else {\n      return false;\n    }\n  }\n\n  hasChildrenSelected(node: SpatialFilterThematic) {\n    let bool = false;\n    node.children.forEach((child) => {\n      if (\n        this.selectedThematics.selected.find(\n          (thematic) => thematic.source === child.source\n        )\n      ) {\n        bool = true;\n      }\n    });\n    return bool;\n  }\n\n  /**\n   * Apply header checkbox\n   */\n  masterToggle() {\n    this.isAllSelected() ? this.selectedThematics.clear() : this.selectAll();\n\n    const selectedThematicsName: SpatialFilterThematic[] = [];\n    for (const thematic of this.selectedThematics.selected) {\n      selectedThematicsName.push(thematic);\n    }\n\n    if (this.isAllSelected()) {\n      this.thematics.forEach((thematic) => {\n        if (this.hasChild(0, thematic)) {\n          this.treeControl.expand(thematic);\n        }\n      });\n    } else {\n      this.thematics.forEach((thematic) => {\n        if (this.hasChild(0, thematic)) {\n          this.treeControl.collapse(thematic);\n        }\n      });\n    }\n    this.thematicChange.emit(selectedThematicsName);\n  }\n\n  selectAll(node?: SpatialFilterThematic) {\n    if (!node) {\n      this.thematics.forEach((thematic) => {\n        if (this.groups.indexOf(thematic.name) === -1) {\n          this.selectedThematics.select(thematic);\n        }\n      });\n      this.childrens.forEach((children) => {\n        if (\n          !this.selectedThematics.selected.find(\n            (thematic) => thematic.source === children.source\n          )\n        ) {\n          this.selectedThematics.select(children);\n        }\n      });\n    } else {\n      if (this.hasChild(0, node)) {\n        node.children.forEach((children) =>\n          this.selectedThematics.select(children)\n        );\n      }\n    }\n  }\n\n  childrensToggle(node: SpatialFilterThematic) {\n    this.isAllSelected(node)\n      ? node.children.forEach((child) => this.selectedThematics.deselect(child))\n      : this.selectAll(node);\n\n    const selectedThematicsName: SpatialFilterThematic[] = [];\n    for (const thematic of this.selectedThematics.selected) {\n      selectedThematicsName.push(thematic);\n    }\n    this.treeControl.expand(node);\n    this.thematicChange.emit(selectedThematicsName);\n  }\n\n  /**\n   * Apply changes to the thematics selected tree and emit event\n   */\n  onToggleChange(nodeSelected: SpatialFilterThematic) {\n    let selected = false;\n    if (\n      this.selectedThematics.selected.find(\n        (thematic) => thematic.source === nodeSelected.source\n      ) !== undefined\n    ) {\n      selected = true;\n    }\n\n    this.childrens.forEach((children) => {\n      if (children === nodeSelected && selected === false) {\n        this.selectedThematics.select(children);\n      }\n      if (children === nodeSelected && selected === true) {\n        this.selectedThematics.deselect(children);\n      }\n    });\n    this.thematics.forEach((thematic) => {\n      if (thematic === nodeSelected && selected === false) {\n        this.selectedThematics.select(thematic);\n      }\n      if (thematic === nodeSelected && selected === true) {\n        this.selectedThematics.deselect(thematic);\n      }\n    });\n\n    const selectedThematicsName: SpatialFilterThematic[] = [];\n    for (const thematic of this.selectedThematics.selected) {\n      selectedThematicsName.push(thematic);\n    }\n    this.thematicChange.emit(selectedThematicsName);\n  }\n\n  onDrawControlChange() {\n    this.drawControlIsActive = !this.drawControlIsActive;\n  }\n\n  onfreehandControlChange() {\n    this.freehandDrawIsActive = !this.freehandDrawIsActive;\n    this.freehandControl.emit(this.freehandDrawIsActive);\n    if (this.isPoint()) {\n      this.predefinedRadius.emit(!this.freehandDrawIsActive);\n      if (this.freehandDrawIsActive) {\n        this.overlayStyle$.next(undefined);\n        this.drawStyle$.next(undefined);\n      }\n    } else {\n      this.predefinedRadius.emit(false);\n    }\n  }\n\n  /**\n   * Launch search button\n   */\n  toggleSearchButton() {\n    if (!this.isPredefined()) {\n      if (this.buffer > 0) {\n        this.zoneWithBuffer.meta = {\n          id: undefined,\n          title: 'Zone'\n        };\n        this.zoneWithBuffer.properties = {\n          nom: 'Zone',\n          type: this.type as string\n        };\n        this.drawZoneEvent.emit(this.zoneWithBuffer);\n      } else {\n        this.drawZone.meta = {\n          id: undefined,\n          title: 'Zone'\n        };\n        this.drawZone.properties = {\n          nom: 'Zone',\n          type: this.type as string\n        };\n        this.drawZoneEvent.emit(this.drawZone);\n      }\n    }\n    if (this.isPoint()) {\n      this.radiusEvent.emit(this.radius);\n    } else if (this.isPolygon()) {\n      this.bufferEvent.emit(this.buffer);\n    }\n    this.toggleSearch.emit();\n    this.store.entities$.pipe(debounceTime(500)).subscribe((value) => {\n      if (value.length && this.layers.length === this.thematicLength + 1) {\n        this.openWorkspace.emit();\n        this.createTableTemplate();\n      }\n    });\n  }\n\n  /**\n   * Launch clear button (clear store and map layers)\n   */\n  clearButton() {\n    this.loading = true;\n    if (this.store) {\n      this.store.clear();\n    }\n    if (this.isPoint() || this.isPolygon()) {\n      this.drawZone = undefined;\n      this.formControl.reset();\n    }\n    this.bufferFormControl.setValue(0);\n    this.buffer = 0;\n    this.bufferEvent.emit(0);\n    this.clearButtonEvent.emit();\n    this.loading = false;\n    this.tableTemplate = undefined;\n  }\n\n  clearDrawZone() {\n    this.formControl.reset();\n    this.bufferFormControl.setValue(0);\n    this.buffer = 0;\n  }\n\n  /**\n   * Launch clear search (clear field if type is predefined)\n   */\n  clearSearch() {\n    this.selectedThematics.clear();\n    this.bufferFormControl.setValue(0);\n    this.buffer = 0;\n    this.bufferEvent.emit(0);\n    this.thematicChange.emit([]);\n    this.clearSearchEvent.emit();\n  }\n\n  /**\n   * Verify conditions of incomplete fields or busy service\n   */\n  disableSearchButton(): boolean {\n    if (this.type === SpatialFilterType.Predefined) {\n      if (this.selectedItemType === SpatialFilterItemType.Address) {\n        if (this.queryType !== undefined && this.zone !== undefined) {\n          return this.loading;\n        }\n      }\n      if (this.selectedItemType === SpatialFilterItemType.Thematics) {\n        if (\n          this.queryType !== undefined &&\n          this.zone !== undefined &&\n          this.selectedThematics.selected.length > 0\n        ) {\n          return this.loading;\n        }\n      }\n    }\n    if (\n      this.type === SpatialFilterType.Polygon ||\n      this.type === SpatialFilterType.Point\n    ) {\n      if (\n        this.selectedItemType === SpatialFilterItemType.Address &&\n        this.formControl.value !== null\n      ) {\n        return this.loading;\n      }\n      if (this.selectedItemType === SpatialFilterItemType.Thematics) {\n        if (\n          this.selectedThematics.selected.length > 0 &&\n          this.formControl.value !== null\n        ) {\n          return this.loading;\n        }\n      }\n    }\n    return true;\n  }\n\n  disabledClearSearch() {\n    let disable = true;\n    this.selectedItemType === SpatialFilterItemType.Address\n      ? (disable = this.queryType === undefined)\n      : (disable =\n          this.queryType === undefined &&\n          this.selectedThematics.selected.length === 0);\n\n    return disable;\n  }\n\n  /**\n   * Manage radius value at user change\n   */\n  getRadius() {\n    let formValue;\n    if (this.formControl.value !== null) {\n      this.measureUnit === MeasureLengthUnit.Meters\n        ? (formValue = this.formControl.value.radius)\n        : (formValue = this.formControl.value.radius / 1000);\n    } else {\n      formValue = undefined;\n    }\n\n    if (this.type === SpatialFilterType.Point) {\n      if (!this.freehandDrawIsActive) {\n        if (\n          this.radiusFormControl.value < 0 ||\n          (this.measureUnit === MeasureLengthUnit.Meters &&\n            this.radiusFormControl.value >= 100000) ||\n          (this.measureUnit === MeasureLengthUnit.Kilometers &&\n            this.radiusFormControl.value >= 100)\n        ) {\n          this.messageService.alert(\n            'igo.geo.spatialFilter.radiusAlert',\n            'igo.geo.spatialFilter.warning'\n          );\n          this.radius = 1000;\n          this.measureUnit === MeasureLengthUnit.Meters\n            ? this.radiusFormControl.setValue(this.radius)\n            : this.radiusFormControl.setValue(this.radius / 1000);\n          this.drawGuide$.next(this.radius);\n          return;\n        }\n      } else {\n        if (formValue) {\n          if (formValue >= 100000) {\n            this.messageService.alert(\n              'igo.geo.spatialFilter.radiusAlert',\n              'igo.geo.spatialFilter.warning'\n            );\n            this.formControl.reset();\n            return;\n          }\n          if (formValue !== this.radiusFormControl.value) {\n            this.radiusFormControl.setValue(formValue);\n            return;\n          }\n        }\n      }\n      if (this.measureUnit === MeasureLengthUnit.Meters) {\n        this.radius = this.radiusFormControl.value;\n        this.drawGuide$.next(this.radius);\n      } else {\n        this.radius = this.radiusFormControl.value * 1000;\n        this.drawGuide$.next(this.radius * 1000);\n      }\n      this.overlayStyle$.next(this.PointStyle);\n      this.drawStyle$.next(this.PointStyle);\n    }\n  }\n\n  toggleVisibleList() {\n    this.listIsVisible = !this.listIsVisible;\n  }\n\n  private createTableTemplate() {\n    const typeColumn = {\n      name: 'meta.title',\n      title: this.languageService.translate.instant(\n        'igo.geo.spatialFilter.type'\n      ),\n      renderer: EntityTableColumnRenderer.UnsanitizedHTML\n    };\n    const nameColumn = {\n      name: 'properties.nom',\n      title: this.languageService.translate.instant(\n        'igo.geo.spatialFilter.searchResults'\n      ),\n      renderer: EntityTableColumnRenderer.UnsanitizedHTML\n    };\n    const columns = [typeColumn, nameColumn];\n\n    this.tableTemplate = {\n      selection: true,\n      sort: true,\n      columns\n    };\n  }\n}\n","<igo-geometry-form-field-input\n  [formControl]=\"formControl\"\n  [map]=\"map\"\n  [geometryType]=\"geometryType\"\n  [drawGuide]=\"drawGuide$ | async\"\n  [measure]=\"measure\"\n  [drawControlIsActive]=\"drawControlIsActive\"\n  [freehandDrawIsActive]=\"freehandDrawIsActive\"\n  [drawStyle]=\"drawStyle$ | async\"\n  [overlayStyle]=\"overlayStyle$ | async\"\n  [radius]=\"radius\"\n  [predefinedRadius]=\"$any(predefinedRadius)\"\n>\n</igo-geometry-form-field-input>\n\n<div class=\"header\">\n  <mat-slide-toggle\n    *ngIf=\"!isPredefined()\"\n    [checked]=\"drawControlIsActive\"\n    [labelPosition]=\"'before'\"\n    (change)=\"onDrawControlChange()\"\n  >\n    {{ 'igo.geo.spatialFilter.drawControl' | translate }}\n  </mat-slide-toggle>\n  <mat-slide-toggle\n    *ngIf=\"!isPredefined()\"\n    [checked]=\"freehandDrawIsActive\"\n    [labelPosition]=\"'before'\"\n    (change)=\"onfreehandControlChange()\"\n  >\n    {{ 'igo.geo.spatialFilter.freehandControl' | translate }}\n  </mat-slide-toggle>\n</div>\n\n<div class=\"buffer-unit\" *ngIf=\"isPolygon()\">\n  <mat-form-field class=\"buffer\">\n    <input\n      type=\"number\"\n      matInput\n      placeholder=\"{{ 'igo.geo.spatialFilter.buffer' | translate }}\"\n      [formControl]=\"bufferFormControl\"\n      [value]=\"0\"\n      [readonly]=\"this.formControl.value === null\"\n    />\n  </mat-form-field>\n\n  <mat-form-field class=\"unit-field\">\n    <mat-select\n      [value]=\"measureUnit\"\n      (selectionChange)=\"onMeasureUnitChange($event.value)\"\n    >\n      <mat-option\n        *ngFor=\"let measureUnit of measureUnits\"\n        [value]=\"measureUnit\"\n      >\n        {{ 'igo.geo.measure.' + measureUnit | translate }}\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n</div>\n\n<div class=\"radius-unit\" *ngIf=\"isPoint()\">\n  <mat-form-field class=\"radius\">\n    <input\n      type=\"number\"\n      matInput\n      placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\n      [formControl]=\"radiusFormControl\"\n      [value]=\"1000\"\n      (input)=\"getRadius()\"\n      [readonly]=\"this.freehandDrawIsActive && this.formControl.value === null\"\n    />\n  </mat-form-field>\n\n  <mat-form-field class=\"unit-field\">\n    <mat-select\n      [value]=\"measureUnit\"\n      (selectionChange)=\"onMeasureUnitChange($event.value)\"\n    >\n      <mat-option\n        *ngFor=\"let measureUnit of measureUnits\"\n        [value]=\"measureUnit\"\n      >\n        {{ 'igo.geo.measure.' + measureUnit | translate }}\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n</div>\n\n<mat-label class=\"title mat-typography\"\n  >{{ 'igo.geo.spatialFilter.search' | translate }} :\n</mat-label>\n<mat-radio-group [value]=\"selectedItemType\">\n  <mat-radio-button\n    *ngFor=\"let item of itemType\"\n    [value]=\"item\"\n    (change)=\"onItemTypeChange($event)\"\n  >\n    {{ 'igo.geo.spatialFilter.' + item | translate }}\n  </mat-radio-button>\n</mat-radio-group>\n\n<div\n  class=\"thematics\"\n  *ngIf=\"\n    (selectedItemType === 'Thematics' && !tableTemplate) ||\n    (selectedItemType === 'Thematics' && tableTemplate && !listIsVisible)\n  \"\n>\n  <mat-table>\n    <!-- Name Column -->\n    <ng-container matColumnDef=\"name\">\n      <mat-header-cell *matHeaderCellDef class=\"thematics-header\">{{\n        'igo.geo.spatialFilter.Thematics' | translate\n      }}</mat-header-cell>\n    </ng-container>\n\n    <!-- Select Column -->\n    <ng-container matColumnDef=\"select\">\n      <mat-header-cell *matHeaderCellDef class=\"checks-header\">\n        <mat-checkbox\n          (change)=\"$event ? masterToggle() : null\"\n          [checked]=\"isAllSelected()\"\n          [indeterminate]=\"selectedThematics.hasValue() && !isAllSelected()\"\n        >\n        </mat-checkbox>\n      </mat-header-cell>\n    </ng-container>\n\n    <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n    <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n  </mat-table>\n\n  <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n    <!-- This is the tree node template for leaf nodes -->\n    <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\n      <li class=\"mat-tree-node\">\n        <!-- use a disabled button to provide padding for tree leaf -->\n        <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n        <button mat-icon-button disabled></button>\n        {{ node.name }}\n        <mat-checkbox\n          class=\"tree-check\"\n          (click)=\"$event.stopPropagation()\"\n          (change)=\"$event ? onToggleChange(node) : null\"\n          [checked]=\"selectedThematics.isSelected(node)\"\n        >\n        </mat-checkbox>\n      </li>\n    </mat-tree-node>\n\n    <!-- This is the tree node template for expandable nodes -->\n    <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n      <div class=\"mat-tree-node\">\n        <button mat-icon-button (click)=\"onToggleClick(node)\">\n          <mat-icon>{{\n            treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\n          }}</mat-icon>\n        </button>\n        {{ node.name }}\n        <mat-checkbox\n          class=\"tree-check-2\"\n          (change)=\"$event ? childrensToggle(node) : null\"\n          [checked]=\"isAllSelected(node)\"\n          [indeterminate]=\"hasChildrenSelected(node) && !isAllSelected(node)\"\n        >\n        </mat-checkbox>\n      </div>\n      <ul\n        class=\"tree-ul\"\n        [class.example-tree-invisible]=\"!treeControl.isExpanded(node)\"\n      >\n        <ng-container matTreeNodeOutlet></ng-container>\n      </ul>\n    </mat-nested-tree-node>\n  </mat-tree>\n</div>\n\n<div class=\"buttons\">\n  <button\n    *ngIf=\"isPredefined()\"\n    mat-raised-button\n    class=\"clear-search-button\"\n    [disabled]=\"disabledClearSearch()\"\n    (click)=\"clearSearch()\"\n  >\n    {{ 'igo.geo.spatialFilter.clearSearch' | translate }}\n  </button>\n\n  <button\n    *ngIf=\"isPolygon() || isPoint()\"\n    mat-raised-button\n    class=\"clear-form-button\"\n    [disabled]=\"this.formControl.value === null\"\n    (click)=\"clearDrawZone()\"\n  >\n    {{ 'igo.geo.spatialFilter.clearForm' | translate }}\n  </button>\n\n  <button\n    mat-raised-button\n    class=\"search-button\"\n    [disabled]=\"disableSearchButton()\"\n    color=\"primary\"\n    (click)=\"toggleSearchButton()\"\n  >\n    {{ 'igo.geo.spatialFilter.goSearch' | translate }}\n  </button>\n\n  <button\n    mat-raised-button\n    class=\"remove-button\"\n    [disabled]=\"allLayers.length === 0\"\n    (click)=\"clearButton()\"\n  >\n    {{ 'igo.geo.spatialFilter.removeLayer' | translate }}\n  </button>\n\n  <button\n    mat-raised-button\n    class=\"export-button\"\n    [disabled]=\"!store.entities$.getValue().length\"\n    (click)=\"export.emit()\"\n  >\n    {{ 'igo.geo.spatialFilter.exportLayer' | translate }}\n  </button>\n</div>\n\n<button\n  class=\"expand-more\"\n  *ngIf=\"store.all().length && tableTemplate && !listIsVisible\"\n  mat-icon-button\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"'igo.geo.spatialFilter.showSearchResults' | translate\"\n  (click)=\"toggleVisibleList()\"\n>\n  <mat-icon>expand_more</mat-icon>\n</button>\n\n<div\n  class=\"results\"\n  *ngIf=\"store.all().length && tableTemplate && listIsVisible\"\n>\n  <button\n    *ngIf=\"listIsVisible\"\n    mat-icon-button\n    matTooltipShowDelay=\"500\"\n    [matTooltip]=\"'igo.geo.spatialFilter.hideSearchResults' | translate\"\n    (click)=\"toggleVisibleList()\"\n  >\n    <mat-icon>expand_less</mat-icon>\n  </button>\n  <igo-entity-table\n    class=\"results-list\"\n    [template]=\"tableTemplate\"\n    [store]=\"store\"\n    (entitySelectChange)=\"entityChange.emit($event)\"\n  >\n  </igo-entity-table>\n</div>\n","import { AsyncPipe, NgFor } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormControl\n} from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { EntityStore } from '@igo2/common/entity';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\n\nimport { Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\nimport { Feature } from '../../../feature';\nimport { AnyLayer } from '../../../layer';\nimport { MeasureLengthUnit } from '../../../measure/shared';\nimport {\n  SpatialFilterQueryType,\n  SpatialFilterType\n} from './../../shared/spatial-filter.enum';\nimport { SpatialFilterService } from './../../shared/spatial-filter.service';\n\n@Component({\n  selector: 'igo-spatial-filter-list',\n  templateUrl: './spatial-filter-list.component.html',\n  styleUrls: ['./spatial-filter-list.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule,\n    MatAutocompleteModule,\n    ReactiveFormsModule,\n    NgFor,\n    MatOptionModule,\n    MatSelectModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SpatialFilterListComponent implements OnInit, OnDestroy {\n  @Input() store: EntityStore<Feature>;\n\n  @Input()\n  get queryType(): SpatialFilterQueryType {\n    return this._queryType;\n  }\n  set queryType(queryType: SpatialFilterQueryType) {\n    this.formControl.setValue('');\n    this._queryType = queryType;\n  }\n  private _queryType: SpatialFilterQueryType;\n\n  @Input()\n  get zone() {\n    return this._zone;\n  }\n  set zone(value) {\n    this._zone = value;\n    if (!value) {\n      this.zoneWithBuffer = undefined;\n      this.bufferFormControl.setValue(0);\n    }\n  }\n  private _zone;\n\n  @Input() layers: AnyLayer[] = [];\n\n  public zoneWithBuffer;\n  public selectedZone: any;\n\n  public measureUnit: MeasureLengthUnit = MeasureLengthUnit.Meters;\n\n  public formControl = new UntypedFormControl();\n\n  public bufferFormControl = new UntypedFormControl();\n\n  /**\n   * Available measure units for the measure type given\n   * @internal\n   */\n  get measureUnits(): string[] {\n    return [MeasureLengthUnit.Meters, MeasureLengthUnit.Kilometers];\n  }\n\n  @Output() zoneChange = new EventEmitter<Feature>();\n  @Output() zoneWithBufferChange = new EventEmitter<Feature>();\n  @Output() bufferChange = new EventEmitter<number>();\n  @Output() measureUnitChange = new EventEmitter<MeasureLengthUnit>();\n\n  formValueChanges$$: Subscription;\n  bufferValueChanges$$: Subscription;\n\n  constructor(\n    private spatialFilterService: SpatialFilterService,\n    private messageService: MessageService\n  ) {}\n\n  ngOnInit() {\n    this.formValueChanges$$ = this.formControl.valueChanges.subscribe(\n      (value) => {\n        if (value.length) {\n          this.store.view.filter((feature) => {\n            const filterNormalized = value\n              .toLowerCase()\n              .normalize('NFD')\n              .replace(/[\\u0300-\\u036f]/g, '');\n            const featureNameNormalized = feature.properties.nom\n              .toLowerCase()\n              .normalize('NFD')\n              .replace(/[\\u0300-\\u036f]/g, '');\n            return featureNameNormalized.includes(filterNormalized);\n          });\n        }\n      }\n    );\n\n    this.bufferValueChanges$$ = this.bufferFormControl.valueChanges\n      .pipe(debounceTime(500), distinctUntilChanged())\n      .subscribe((value) => {\n        if (\n          this.measureUnit === MeasureLengthUnit.Meters &&\n          value > 0 &&\n          value <= 100000\n        ) {\n          this.bufferChange.emit(value);\n          this.spatialFilterService\n            .loadBufferGeometry(\n              this.selectedZone,\n              SpatialFilterType.Predefined,\n              value,\n              this.queryType\n            )\n            .subscribe((featureGeom: Feature) => {\n              this.zoneWithBuffer = featureGeom;\n              this.zoneWithBufferChange.emit(this.zoneWithBuffer);\n            });\n        } else if (\n          this.measureUnit === MeasureLengthUnit.Kilometers &&\n          value > 0 &&\n          value <= 100\n        ) {\n          this.bufferChange.emit(value);\n          this.spatialFilterService\n            .loadBufferGeometry(\n              this.selectedZone,\n              SpatialFilterType.Predefined,\n              value * 1000,\n              this.queryType\n            )\n            .subscribe((featureGeom: Feature) => {\n              this.zoneWithBuffer = featureGeom;\n              this.zoneWithBufferChange.emit(this.zoneWithBuffer);\n            });\n        } else if (value === 0 && this.layers.length > 0) {\n          this.bufferChange.emit(value);\n          this.zoneWithBufferChange.emit(this.selectedZone);\n        } else if (\n          value < 0 ||\n          (this.measureUnit === MeasureLengthUnit.Meters && value > 100000) ||\n          (this.measureUnit === MeasureLengthUnit.Kilometers && value > 100)\n        ) {\n          this.bufferFormControl.setValue(0);\n          this.messageService.alert(\n            'igo.geo.spatialFilter.bufferAlert',\n            'igo.geo.spatialFilter.warning'\n          );\n        }\n      });\n  }\n\n  ngOnDestroy() {\n    this.formValueChanges$$.unsubscribe();\n  }\n\n  displayFn(feature?: Feature): string | undefined {\n    return feature ? feature.properties.nom : undefined;\n  }\n\n  onZoneChange(feature) {\n    if (feature && this.queryType) {\n      this.spatialFilterService\n        .loadItemById(feature, this.queryType)\n        .subscribe((featureGeom: Feature) => {\n          this.selectedZone = featureGeom;\n          this.zoneChange.emit(featureGeom);\n        });\n    }\n  }\n\n  /**\n   * Set the measure unit\n   * @internal\n   */\n  onMeasureUnitChange(unit: MeasureLengthUnit) {\n    if (unit === this.measureUnit) {\n      return;\n    } else {\n      this.measureUnit = unit;\n      this.measureUnitChange.emit(this.measureUnit);\n      this.measureUnit === MeasureLengthUnit.Meters\n        ? this.bufferFormControl.setValue(this.bufferFormControl.value * 1000)\n        : this.bufferFormControl.setValue(this.bufferFormControl.value / 1000);\n    }\n  }\n}\n","<div class=\"form-list\">\n  <mat-form-field class=\"zone-list\">\n    <mat-label>{{ 'igo.geo.spatialFilter.listLabel' | translate }}</mat-label>\n    <input\n      #input\n      type=\"text\"\n      placeholder=\"{{ 'igo.geo.spatialFilter.listLabel' | translate }}\"\n      matInput\n      [formControl]=\"formControl\"\n      [matAutocomplete]=\"auto\"\n    />\n    <mat-autocomplete\n      #auto=\"matAutocomplete\"\n      (optionSelected)=\"onZoneChange($event.option.value)\"\n      [displayWith]=\"displayFn\"\n    >\n      <mat-option\n        *ngFor=\"let entities of this.store.view.all$() | async\"\n        [value]=\"entities\"\n      >\n        {{ entities.properties.nom }}\n      </mat-option>\n    </mat-autocomplete>\n  </mat-form-field>\n  <div>\n    <div class=\"buffer-div\">\n      <mat-form-field class=\"buffer\">\n        <mat-label>{{ 'igo.geo.spatialFilter.buffer' | translate }}</mat-label>\n        <input\n          type=\"number\"\n          matInput\n          placeholder=\"{{ 'igo.geo.spatialFilter.buffer' | translate }}\"\n          [formControl]=\"bufferFormControl\"\n          [value]=\"0\"\n          [readonly]=\"!zone\"\n        />\n      </mat-form-field>\n\n      <mat-form-field class=\"unit-field\">\n        <mat-select\n          [value]=\"measureUnit\"\n          (selectionChange)=\"onMeasureUnitChange($event.value)\"\n        >\n          <mat-option\n            *ngFor=\"let measureUnit of measureUnits\"\n            [value]=\"measureUnit\"\n          >\n            {{ 'igo.geo.measure.' + measureUnit | translate }}\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n    </div>\n  </div>\n</div>\n","import { NgFor } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { EntityStore } from '@igo2/common/entity';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { Feature } from '../../../feature';\nimport { AnyLayer } from '../../../layer';\nimport { MeasureLengthUnit } from '../../../measure';\nimport {\n  SpatialFilterQueryType,\n  SpatialFilterType\n} from '../../shared/spatial-filter.enum';\nimport { SpatialFilterListComponent } from '../spatial-filter-list/spatial-filter-list.component';\n\n/**\n * Spatial Filter Type\n */\n@Component({\n  selector: 'igo-spatial-filter-type',\n  templateUrl: './spatial-filter-type.component.html',\n  styleUrls: ['./spatial-filter-type.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatTabsModule,\n    MatFormFieldModule,\n    MatSelectModule,\n    NgFor,\n    MatOptionModule,\n    SpatialFilterListComponent,\n    MatButtonToggleModule,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class SpatialFilterTypeComponent implements OnInit {\n  @Input() store: EntityStore<Feature>;\n\n  public queryType: string[] = [\n    'Arrond',\n    'CircFed',\n    'CircProv',\n    'DirReg',\n    'Mun',\n    'MRC',\n    'AdmRegion',\n    'RegTour'\n  ];\n  public selectedTypeIndex = new UntypedFormControl(0);\n\n  /**\n   * Reference to the SpatialFIlterType enum\n   * @internal\n   */\n  public spatialType = SpatialFilterType;\n\n  public activeDrawType: SpatialFilterType = this.spatialType.Polygon;\n\n  @Input() selectedQueryType: SpatialFilterQueryType;\n\n  @Input() zone: Feature;\n\n  @Input() layers: AnyLayer[] = [];\n\n  public type: SpatialFilterType;\n\n  @Output() eventType = new EventEmitter<SpatialFilterType>();\n\n  @Output() eventQueryType = new EventEmitter<SpatialFilterQueryType>();\n\n  @Output() zoneChange = new EventEmitter<Feature>();\n  @Output() zoneWithBufferChange = new EventEmitter<Feature>();\n\n  @Output() bufferChange = new EventEmitter<number>();\n  @Output() measureUnitChange = new EventEmitter<MeasureLengthUnit>();\n\n  ngOnInit() {\n    if (this.selectedTypeIndex.value === 0) {\n      this.type = this.spatialType.Predefined;\n    }\n    if (this.selectedTypeIndex.value === 1) {\n      this.type = this.activeDrawType;\n    }\n    this.eventType.emit(this.type);\n  }\n\n  onTypeChange() {\n    if (this.selectedTypeIndex.value === 0) {\n      this.type = SpatialFilterType.Predefined;\n    }\n    if (this.selectedTypeIndex.value === 1) {\n      this.type = this.activeDrawType;\n    }\n    this.eventType.emit(this.type);\n  }\n\n  onDrawTypeChange(spatialType: SpatialFilterType) {\n    this.activeDrawType = spatialType;\n    this.eventType.emit(this.activeDrawType);\n  }\n\n  onSelectionChange() {\n    this.eventQueryType.emit(this.selectedQueryType);\n    this.zoneChange.emit(undefined);\n  }\n}\n","<mat-tab-group\n  [selectedIndex]=\"selectedTypeIndex.value\"\n  (selectedIndexChange)=\"selectedTypeIndex.setValue($event)\"\n  (selectedTabChange)=\"onTypeChange()\"\n>\n  <mat-tab [label]=\"'igo.geo.spatialFilter.predefined' | translate\">\n    <mat-form-field>\n      <mat-label>{{\n        'igo.geo.spatialFilter.searchLabel' | translate\n      }}</mat-label>\n      <mat-select\n        (selectionChange)=\"onSelectionChange()\"\n        [(value)]=\"selectedQueryType\"\n      >\n        <mat-option *ngFor=\"let queryType of queryType\" [value]=\"queryType\">\n          {{ 'igo.geo.terrapi.' + queryType | translate }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n    <igo-spatial-filter-list\n      [store]=\"store\"\n      [queryType]=\"selectedQueryType\"\n      [zone]=\"zone\"\n      [layers]=\"layers\"\n      (zoneChange)=\"zoneChange.emit($event)\"\n      (zoneWithBufferChange)=\"zoneWithBufferChange.emit($event)\"\n      (bufferChange)=\"bufferChange.emit($event)\"\n      (measureUnitChange)=\"measureUnitChange.emit($event)\"\n    >\n    </igo-spatial-filter-list>\n  </mat-tab>\n\n  <mat-tab [label]=\"'igo.geo.spatialFilter.draw' | translate\">\n    <div class=\"spatial-type-toggle\">\n      <mat-button-toggle-group\n        [value]=\"activeDrawType\"\n        (change)=\"onDrawTypeChange($event.value)\"\n      >\n        <mat-button-toggle\n          [value]=\"spatialType.Polygon\"\n          [matTooltip]=\"'igo.geo.spatialFilter.drawPolygon' | translate\"\n        >\n          <mat-icon>pentagon</mat-icon>\n        </mat-button-toggle>\n        <mat-button-toggle\n          [value]=\"spatialType.Point\"\n          [matTooltip]=\"'igo.geo.spatialFilter.drawCircle' | translate\"\n        >\n          <mat-icon>circle</mat-icon>\n        </mat-button-toggle>\n      </mat-button-toggle-group>\n    </div>\n  </mat-tab>\n</mat-tab-group>\n","import { NgFor, NgIf } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  DateAdapter,\n  MatNativeDateModule,\n  MatOptionModule,\n  ThemePalette\n} from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSlider, MatSliderModule } from '@angular/material/slider';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport olSourceImageWMS from 'ol/source/ImageWMS';\n\nimport {\n  MatDatetimepickerModule,\n  MatNativeDatetimeModule\n} from '@mat-datetimepicker/core';\nimport { default as moment } from 'moment';\n\nimport { Layer } from '../../layer';\nimport { TimeFilterStyle, TimeFilterType } from '../shared/time-filter.enum';\nimport { TimeFilterOptions } from '../shared/time-filter.interface';\n\n@Component({\n  selector: 'igo-time-filter-form',\n  templateUrl: './time-filter-form.component.html',\n  styleUrls: ['./time-filter-form.component.scss'],\n  standalone: true,\n  imports: [\n    NgIf,\n    MatFormFieldModule,\n    MatDatetimepickerModule,\n    MatMomentDateModule,\n    MatNativeDatetimeModule,\n    MatNativeDateModule, // For the DateAdapter provider\n    MatInputModule,\n    FormsModule,\n    MatSelectModule,\n    NgFor,\n    MatOptionModule,\n    MatSliderModule,\n    MatSlideToggleModule,\n    MatTooltipModule,\n    MatButtonModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class TimeFilterFormComponent implements OnInit {\n  public color: ThemePalette = 'primary';\n  public date: Date;\n  public startDate: Date;\n  public endDate: Date;\n  public year: any;\n  public startYear: any;\n  public endYear: any;\n  public initStartYear: any;\n  public initEndYear: any;\n  public listYears: string[] = [];\n  public startListYears: string[] = [];\n  public endListYears: string[] = [];\n\n  public interval: number;\n  public playIcon = 'play-circle';\n  public resetIcon = 'replay';\n\n  @Input() layer: Layer;\n\n  @Input() options: TimeFilterOptions;\n\n  @Input()\n  set currentValue(value: string) {\n    if (value) {\n      if (this.type !== TimeFilterType.YEAR) {\n        const valueArray = value.split('/');\n        if (valueArray.length > 0) {\n          const startDate = new Date(valueArray[0]);\n          const endDate = new Date(valueArray[1]);\n          if (!isNaN(startDate.valueOf())) {\n            this.startDate = startDate;\n          }\n          if (!isNaN(endDate.valueOf())) {\n            this.endDate = endDate;\n          }\n        }\n      }\n    }\n  }\n\n  @Output() change = new EventEmitter<Date | [Date, Date]>();\n  @Output()\n  yearChange = new EventEmitter<string | [string, string]>();\n  @ViewChild(MatSlider) mySlider;\n\n  get type(): TimeFilterType {\n    return this.options.type === undefined\n      ? TimeFilterType.DATE\n      : this.options.type;\n  }\n\n  get isRange(): boolean {\n    return this.options.range === undefined ||\n      this.options.style === TimeFilterStyle.SLIDER\n      ? false\n      : this.options.range;\n  }\n\n  get style(): TimeFilterStyle {\n    return this.options.style === undefined\n      ? TimeFilterStyle.SLIDER\n      : this.options.style;\n  }\n\n  get step(): number {\n    let step = 10800000;\n    if (this.options.step === undefined) {\n      switch (this.type) {\n        case TimeFilterType.DATE:\n        case TimeFilterType.DATETIME:\n          step = 10800000;\n          break;\n        case TimeFilterType.TIME:\n          step = 3600000;\n          break;\n        case TimeFilterType.YEAR:\n          step = 31536000000;\n          break;\n        default:\n          step = 10800000;\n      }\n    } else {\n      step = this.getStepDefinition(this.options.step);\n    }\n\n    return step;\n  }\n\n  get timeInterval(): number {\n    return this.options.timeInterval === undefined\n      ? 2000\n      : this.options.timeInterval;\n  }\n\n  get min(): Date {\n    if (this.options.min) {\n      const min = new Date(this.options.min);\n      return new Date(min.getTime() + min.getTimezoneOffset() * 60000);\n    } else {\n      return undefined;\n    }\n  }\n\n  get max(): Date {\n    if (this.options.max) {\n      const max = new Date(this.options.max);\n      return new Date(max.getTime() + max.getTimezoneOffset() * 60000);\n    } else {\n      return undefined;\n    }\n  }\n\n  get is(): boolean {\n    return this.options.range === undefined ? false : this.options.range;\n  }\n\n  constructor(private dateAdapter: DateAdapter<Date>) {\n    this.dateAdapter.setLocale('fr');\n  }\n\n  ngOnInit() {\n    if (this.startDate === undefined) {\n      this.startDate = new Date(this.min);\n    }\n    if (this.endDate === undefined) {\n      this.endDate = new Date(this.max);\n    }\n    if (this.startYear === undefined) {\n      this.startYear = new Date(this.startDate).getFullYear();\n      this.initStartYear = this.startYear;\n    }\n    if (this.endYear === undefined) {\n      this.endYear = new Date(this.endDate).getFullYear();\n      this.initEndYear = this.endYear;\n    }\n\n    if (!this.isRange) {\n      for (let i = this.startYear; i <= this.endYear + 1; i++) {\n        this.listYears.push(i);\n      }\n    } else {\n      for (let i = this.startYear; i < this.endYear; i++) {\n        this.startListYears.push(i);\n      }\n      for (let i = this.startYear + 1; i <= this.endYear; i++) {\n        this.endListYears.push(i);\n      }\n    }\n    this.options.enabled =\n      this.options.enabled === undefined ? true : this.options.enabled;\n    this.checkFilterValue();\n    if (this.options.enabled) {\n      if (!this.isRange && this.style === 'slider' && this.type === 'year') {\n        this.yearChange.emit(this.year);\n      }\n    } else {\n      this.storeCurrentFilterValue();\n      this.yearChange.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.\n    }\n  }\n\n  storeCurrentFilterValue() {\n    // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.\n    if (\n      !this.isRange &&\n      this.style === TimeFilterStyle.SLIDER &&\n      this.type === TimeFilterType.YEAR\n    ) {\n      this.options.value = this.year.toString();\n    }\n  }\n\n  checkFilterValue() {\n    const olSource = this.layer.dataSource.ol as olSourceImageWMS;\n    const timeFromWms = olSource.getParams().TIME;\n    if (\n      !this.isRange &&\n      this.style === TimeFilterStyle.SLIDER &&\n      this.type === TimeFilterType.YEAR\n    ) {\n      if (timeFromWms) {\n        this.year = new Date(timeFromWms.toString()).getFullYear() + 1;\n      } else if (this.options.value) {\n        this.year = new Date(this.options.value.toString()).getFullYear() + 1;\n      } else {\n        this.year = new Date(this.min).getFullYear() + 1;\n      }\n    } else if (\n      this.isRange &&\n      this.style === TimeFilterStyle.CALENDAR &&\n      this.type === TimeFilterType.YEAR\n    ) {\n      if (timeFromWms) {\n        this.startYear = parseInt(timeFromWms.substr(0, 4), 10);\n        this.endYear = parseInt(timeFromWms.substr(5, 4), 10);\n        const newStartListYears: any[] = [];\n        const newEndListYears: any[] = [];\n        for (let i = this.initStartYear; i < this.endYear; i++) {\n          newStartListYears.push(i);\n        }\n        for (let i = this.startYear + 1; i <= this.initEndYear; i++) {\n          newEndListYears.push(i);\n        }\n        this.startListYears = newStartListYears;\n        this.endListYears = newEndListYears;\n      }\n    }\n    // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.\n  }\n\n  handleDateChange() {\n    this.setupDateOutput();\n    this.applyTypeChange();\n\n    // Only if is range, use 2 dates to make the range\n    if (this.isRange) {\n      this.change.emit([this.startDate, this.endDate]);\n    } else {\n      this.change.emit(this.startDate);\n    }\n  }\n\n  handleYearChange() {\n    if (this.isRange) {\n      this.endListYears = [];\n      for (let i = this.startYear + 1; i <= this.initEndYear; i++) {\n        this.endListYears.push(i);\n      }\n      this.startListYears = [];\n      for (let i = this.initStartYear + 1; i < this.endYear; i++) {\n        this.startListYears.push(i);\n      }\n      this.yearChange.emit([this.startYear, this.endYear]);\n    } else {\n      this.yearChange.emit(this.year);\n    }\n  }\n\n  handleListYearChange() {\n    this.handleYearChange();\n  }\n\n  handleListYearStartChange() {\n    this.change.emit([this.startDate, this.endDate]);\n  }\n\n  dateToNumber(date: Date): number {\n    let newDate;\n    if (date) {\n      newDate = new Date(date);\n    } else {\n      newDate = new Date(this.min);\n    }\n\n    return newDate.getTime();\n  }\n\n  setSliderThumbLabel(label: string) {\n    const thumbLabel = this.findThumbLabel(\n      this.mySlider._elementRef.nativeElement.childNodes\n    );\n    if (thumbLabel) {\n      thumbLabel.textContent = label;\n    }\n  }\n\n  findThumbLabel(test: any[]): any {\n    let thumbLabel;\n\n    test.forEach((value) => {\n      if (value.className === 'mat-slider-thumb-label-text') {\n        thumbLabel = value;\n      }\n\n      if (value.children.length > 0 && !thumbLabel) {\n        thumbLabel = this.findThumbLabel(value.childNodes);\n      }\n    }, this);\n    return thumbLabel;\n  }\n\n  toggleFilterState() {\n    this.options.enabled = !this.options.enabled;\n\n    if (this.options.enabled) {\n      if (\n        !this.isRange &&\n        TimeFilterStyle.SLIDER &&\n        this.type === TimeFilterType.YEAR\n      ) {\n        this.yearChange.emit(this.year);\n      }\n    } else {\n      this.stopFilter();\n      this.storeCurrentFilterValue();\n      this.change.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.\n    }\n  }\n\n  resetFilter() {\n    this.date = new Date(this.min);\n    this.year = this.date.getFullYear();\n    if (\n      !this.isRange &&\n      TimeFilterStyle.SLIDER &&\n      this.type === TimeFilterType.YEAR\n    ) {\n      this.yearChange.emit(this.year);\n    } else {\n      this.setupDateOutput();\n      this.change.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.\n    }\n  }\n\n  playFilter() {\n    if (this.interval) {\n      this.stopFilter();\n    } else {\n      this.playIcon = 'pause_circle';\n      this.interval = window.setInterval(\n        (that) => {\n          let newMinDateNumber;\n          const maxDateNumber = new Date(that.max);\n\n          newMinDateNumber =\n            that.date === undefined ? that.min.getTime() : that.date.getTime();\n          newMinDateNumber += that.mySlider.step;\n          that.date = new Date(newMinDateNumber);\n\n          if (newMinDateNumber > maxDateNumber.getTime()) {\n            that.stopFilter();\n          }\n\n          that.handleDateChange();\n        },\n        this.timeInterval,\n        this\n      );\n    }\n  }\n\n  playYear() {\n    if (\n      this.year + this.mySlider.step >\n      this.max.getFullYear() + this.mySlider.step\n    ) {\n      this.stopFilter();\n      this.resetFilter();\n    }\n    if (this.interval) {\n      this.stopFilter();\n    } else {\n      this.playIcon = 'pause_circle';\n      this.interval = setInterval(\n        () => {\n          if (this.year + this.mySlider.step > this.max.getFullYear()) {\n            this.stopFilter();\n          } else {\n            this.year = this.year + this.mySlider.step;\n          }\n          this.yearChange.emit(this.year);\n        },\n        this.timeInterval,\n        this\n      );\n    }\n  }\n\n  stopFilter() {\n    if (this.interval) {\n      clearInterval(this.interval);\n    }\n    this.interval = undefined;\n    this.playIcon = 'play_circle';\n  }\n\n  handleSliderDateChange(event: any) {\n    this.date = new Date(event.value);\n    this.setSliderThumbLabel(this.handleSliderTooltip());\n    this.handleDateChange();\n  }\n\n  handleSliderYearChange(event: any) {\n    this.year = event.value;\n    this.yearChange.emit(this.year);\n  }\n\n  handleSliderValue(): number {\n    if (this.options.current === true || !this.min) {\n      const currentDate = new Date();\n      this.date = this.getRoundedDate(currentDate);\n    }\n    if (this.type === TimeFilterType.YEAR) {\n      return this.year;\n    } else {\n      return this.date === undefined ? this.min.getTime() : this.date.getTime();\n    }\n  }\n\n  handleSliderTooltip() {\n    let label: string;\n\n    switch (this.type) {\n      case TimeFilterType.DATE:\n        label =\n          this.date === undefined\n            ? this.min.toDateString()\n            : this.date.toDateString();\n        break;\n      case TimeFilterType.TIME:\n        label =\n          this.date === undefined\n            ? this.min.toTimeString()\n            : this.date.toTimeString();\n        break;\n      // datetime\n      default:\n        label =\n          this.date === undefined\n            ? this.min.toUTCString()\n            : this.date.toUTCString();\n        break;\n    }\n\n    return label;\n  }\n\n  setupDateOutput() {\n    if (this.style === TimeFilterStyle.SLIDER) {\n      this.startDate = new Date(this.date);\n      this.startDate.setSeconds(-(this.step / 1000));\n      this.endDate = new Date(this.startDate);\n      this.endDate.setSeconds(this.step / 1000);\n    } else if (!this.isRange && !!this.date) {\n      this.endDate = new Date(this.date);\n      this.startDate = new Date(this.date);\n    } else if (this.isRange && (!!this.date || !this.date)) {\n      this.startDate =\n        this.startDate === undefined ? new Date(this.min) : this.startDate;\n      this.endDate =\n        this.endDate === undefined ? new Date(this.max) : this.endDate;\n    } else if (!this.date) {\n      this.startDate =\n        this.startDate === undefined ? new Date(this.min) : this.startDate;\n      this.endDate =\n        this.endDate === undefined ? new Date(this.max) : this.endDate;\n    }\n  }\n\n  applyTypeChange() {\n    switch (this.type) {\n      case TimeFilterType.DATE:\n        if (this.startDate !== undefined || this.endDate !== undefined) {\n          this.startDate.setHours(0);\n          this.startDate.setMinutes(0);\n          this.startDate.setSeconds(0);\n          this.endDate.setHours(23);\n          this.endDate.setMinutes(59);\n          this.endDate.setSeconds(59);\n        }\n        break;\n      case TimeFilterType.TIME:\n        if (this.style === TimeFilterStyle.CALENDAR) {\n          if (this.startDate.getDay() !== this.min.getDay()) {\n            const selectedHour = this.startDate.getHours();\n            const selectedMinute = this.startDate.getMinutes();\n            this.startDate = this.min;\n            this.startDate.setHours(selectedHour);\n            this.startDate.setMinutes(selectedMinute);\n          }\n\n          if (this.endDate.getDay() !== this.min.getDay()) {\n            const selectedHour = this.endDate.getHours();\n            const selectedMinute = this.endDate.getMinutes();\n            this.endDate = this.min;\n            this.endDate.setHours(selectedHour);\n            this.endDate.setMinutes(selectedMinute);\n          }\n        }\n\n        if (!this.isRange && this.step > 60 * 60 * 1000) {\n          this.startDate.setMinutes(0);\n          this.startDate.setSeconds(0);\n          this.endDate.setMinutes(59);\n          this.endDate.setSeconds(59);\n        }\n        break;\n      // datetime\n      default:\n      // do nothing\n    }\n  }\n\n  getRangeMinDate(): Date {\n    return this.startDate === undefined ? this.min : this.startDate;\n  }\n\n  getRangeMaxDate(): Date {\n    return this.endDate === undefined ? this.max : this.endDate;\n  }\n\n  /**\n   * Round date at a certain time, 10 minutes by Default\n   * @param date - Date to Round\n   * @param atMinute - round to closest 'atMinute' minute, rounded 10 by default\n   * @return the rounded date\n   */\n  getRoundedDate(date, atMinute = 10) {\n    const coeff = 1000 * 60 * atMinute;\n    return new Date(Math.round(date.getTime() / coeff) * coeff);\n  }\n\n  /**\n   * Get the step (period) definition from the layer dimension tag\n   * @param step The step as ISO 8601 example: PT10M for 10 Minutes\n   * @return the duration in milliseconds\n   */\n  getStepDefinition(step) {\n    return moment.duration(step).asMilliseconds();\n  }\n}\n","<div *ngIf=\"style === 'calendar' && type !== 'year'\">\n  <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n    <mat-form-field>\n      <mat-datetimepicker-toggle\n        class=\"time-filter-mat-datetimepicker-toggle\"\n        [for]=\"datetimePicker\"\n        matSuffix\n      ></mat-datetimepicker-toggle>\n      <mat-datetimepicker\n        #datetimePicker\n        [type]=\"type\"\n        [openOnFocus]=\"true\"\n        [timeInterval]=\"5\"\n      ></mat-datetimepicker>\n      <input\n        matInput\n        autocomplete=\"false\"\n        placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\n        [matDatetimepicker]=\"datetimePicker\"\n        [(ngModel)]=\"date\"\n        [min]=\"min\"\n        [max]=\"max\"\n        readonly=\"readonly\"\n        (dateChange)=\"handleDateChange()\"\n      />\n    </mat-form-field>\n  </div>\n\n  <div *ngIf=\"isRange\">\n    <div class=\"igo-col igo-col-100\">\n      <mat-form-field>\n        <mat-datetimepicker-toggle\n          class=\"time-filter-mat-datetimepicker-toggle\"\n          [for]=\"minDatetimePicker\"\n          matSuffix\n        ></mat-datetimepicker-toggle>\n        <mat-datetimepicker\n          #minDatetimePicker\n          [type]=\"type\"\n          [openOnFocus]=\"true\"\n          [timeInterval]=\"5\"\n        ></mat-datetimepicker>\n        <input\n          matInput\n          autocomplete=\"false\"\n          placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\n          [matDatetimepicker]=\"minDatetimePicker\"\n          [(ngModel)]=\"startDate\"\n          [min]=\"min\"\n          [max]=\"getRangeMaxDate()\"\n          readonly=\"readonly\"\n          (input)=\"(startDate)\"\n          (dateChange)=\"handleDateChange()\"\n        />\n      </mat-form-field>\n    </div>\n\n    <div class=\"igo-col igo-col-100\">\n      <mat-form-field>\n        <mat-datetimepicker-toggle\n          class=\"time-filter-mat-datetimepicker-toggle\"\n          [for]=\"maxDatetimePicker\"\n          matSuffix\n        ></mat-datetimepicker-toggle>\n        <mat-datetimepicker\n          #maxDatetimePicker\n          [type]=\"type\"\n          [openOnFocus]=\"true\"\n          [timeInterval]=\"5\"\n        ></mat-datetimepicker>\n        <input\n          matInput\n          autocomplete=\"false\"\n          placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\n          [matDatetimepicker]=\"maxDatetimePicker\"\n          [(ngModel)]=\"endDate\"\n          [min]=\"getRangeMinDate()\"\n          [max]=\"max\"\n          readonly=\"readonly\"\n          (dateChange)=\"handleDateChange()\"\n        />\n      </mat-form-field>\n    </div>\n  </div>\n</div>\n\n<div *ngIf=\"style === 'calendar' && type === 'year'\">\n  <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n    <mat-form-field>\n      <mat-select\n        placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\n        [(ngModel)]=\"year\"\n        (selectionChange)=\"handleYearChange()\"\n      >\n        <mat-option [value]=\"year\" *ngFor=\"let year of listYears\">{{\n          year\n        }}</mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div *ngIf=\"isRange\">\n    <div class=\"igo-col igo-col-100\">\n      <mat-form-field>\n        <mat-select\n          placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\n          [(ngModel)]=\"startYear\"\n          (selectionChange)=\"handleYearChange()\"\n        >\n          <mat-option\n            [value]=\"startYear\"\n            *ngFor=\"let startYear of startListYears\"\n            >{{ startYear }}</mat-option\n          >\n        </mat-select>\n      </mat-form-field>\n    </div>\n\n    <div class=\"igo-col igo-col-100\">\n      <mat-form-field>\n        <mat-select\n          placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\n          [(ngModel)]=\"endYear\"\n          (selectionChange)=\"handleYearChange()\"\n        >\n          <mat-option [value]=\"endYear\" *ngFor=\"let endYear of endListYears\">{{\n            endYear\n          }}</mat-option>\n        </mat-select>\n      </mat-form-field>\n    </div>\n  </div>\n</div>\n\n<br />\n<div\n  *ngIf=\"!isRange && style === 'slider' && type === 'year'\"\n  class=\"igo-col igo-col-100 igo-col-100-m mat-typography\"\n>\n  <span>{{ startYear }}</span>\n  <!-- TODO: The 'tickInterval' property no longer exists -->\n  <mat-slider\n    id=\"time-slider\"\n    step=\"{{ step }}\"\n    [min]=\"startYear\"\n    [max]=\"endYear\"\n    [color]=\"color\"\n    thumbLabel\n    [disabled]=\"!options.enabled || !layer.visible\"\n    #ngSlider\n    ><input\n      matSliderThumb\n      [value]=\"handleSliderValue()\"\n      (input)=\"\n        handleSliderYearChange({\n          source: ngSliderThumb,\n          parent: ngSlider,\n          value: ngSliderThumb.value\n        })\n      \"\n      #ngSliderThumb=\"matSliderThumb\"\n      (change)=\"\n        handleSliderYearChange({\n          source: ngSliderThumb,\n          parent: ngSlider,\n          value: ngSliderThumb.value\n        })\n      \"\n    />\n  </mat-slider>\n  <span>{{ endYear }}</span>\n  <p *ngIf=\"options.enabled\" class=\"date-below\">{{ year }}</p>\n  <div #actions class=\"igo-layer-actions-container\">\n    <mat-slide-toggle\n      (change)=\"toggleFilterState()\"\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n      [color]=\"color\"\n      [checked]=\"options.enabled\"\n      [disabled]=\"!layer.visible\"\n    >\n    </mat-slide-toggle>\n    <button\n      [disabled]=\"!options.enabled || !layer.visible\"\n      mat-icon-button\n      color=\"primary\"\n      (click)=\"playYear()\"\n    >\n      <mat-icon>{{ playIcon }}</mat-icon>\n    </button>\n    <button\n      [disabled]=\"!options.enabled || !layer.visible\"\n      mat-icon-button\n      color=\"primary\"\n      (click)=\"resetFilter()\"\n    >\n      <mat-icon>{{ resetIcon }}</mat-icon>\n    </button>\n  </div>\n</div>\n\n<div\n  *ngIf=\"style === 'slider' && type !== 'year'\"\n  class=\"igo-col igo-col-100 igo-col-100-m\"\n>\n  <!-- TODO: The 'tickInterval' property no longer exists -->\n  <mat-slider\n    id=\"time-slider\"\n    step=\"{{ step }}\"\n    [min]=\"dateToNumber(min)\"\n    [max]=\"dateToNumber(max)\"\n    thumbLabel\n    (selectionChange)=\"handleSliderDateChange($event)\"\n    #ngSlider\n    ><input\n      matSliderThumb\n      [value]=\"handleSliderValue()\"\n      (input)=\"\n        handleSliderDateChange({\n          source: ngSliderThumb,\n          parent: ngSlider,\n          value: ngSliderThumb.value\n        })\n      \"\n      #ngSliderThumb=\"matSliderThumb\"\n    />\n  </mat-slider>\n  <p class=\"date-below\">{{ handleSliderTooltip() }}</p>\n  <button mat-icon-button color=\"primary\" (click)=\"playFilter()\">\n    <mat-icon>{{ playIcon }}</mat-icon>\n  </button>\n</div>\n","import { AsyncPipe, NgClass, NgIf, NgStyle } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { CollapseDirective } from '@igo2/common/collapsible';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { TimeFilterableDataSource } from '../../datasource/shared/datasources/wms-datasource';\nimport { Layer } from '../../layer';\nimport { LayerLegendComponent } from '../../layer/layer-legend/layer-legend.component';\nimport { TimeFilterService } from '../shared/time-filter.service';\nimport { TimeFilterFormComponent } from '../time-filter-form/time-filter-form.component';\n\n@Component({\n  selector: 'igo-time-filter-item',\n  templateUrl: './time-filter-item.component.html',\n  styleUrls: ['./time-filter-item.component.scss'],\n  standalone: true,\n  imports: [\n    NgIf,\n    MatListModule,\n    MatIconModule,\n    CollapseDirective,\n    NgStyle,\n    MatButtonModule,\n    MatTooltipModule,\n    NgClass,\n    LayerLegendComponent,\n    TimeFilterFormComponent,\n    AsyncPipe,\n    IgoLanguageModule\n  ],\n  providers: [TimeFilterService]\n})\nexport class TimeFilterItemComponent implements OnInit, OnDestroy {\n  public color = 'primary';\n  showLegend$ = new BehaviorSubject<boolean>(false);\n  inResolutionRange$ = new BehaviorSubject<boolean>(true);\n  private resolution$$: Subscription;\n\n  filtersCollapsed = false;\n\n  @Input() header = true;\n\n  @Input() layer: Layer;\n\n  get datasource(): TimeFilterableDataSource {\n    return this.layer.dataSource as TimeFilterableDataSource;\n  }\n  constructor(private timeFilterService: TimeFilterService) {}\n\n  ngOnInit(): void {\n    const resolution$ = this.layer.map.viewController.resolution$;\n    this.resolution$$ = resolution$.subscribe(() => {\n      this.inResolutionRange$.next(this.layer.isInResolutionsRange);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.resolution$$.unsubscribe();\n  }\n\n  handleYearChange(year: string | [string, string]) {\n    this.timeFilterService.filterByYear(this.datasource, year);\n  }\n\n  handleDateChange(date: Date | [Date, Date]) {\n    this.timeFilterService.filterByDate(this.datasource, date);\n  }\n\n  private toggleLegend(collapsed: boolean) {\n    this.layer.legendCollapsed = collapsed;\n    this.showLegend$.next(!collapsed);\n  }\n\n  toggleLegendOnClick() {\n    if (!this.filtersCollapsed) {\n      this.toggleLegend(this.showLegend$.value);\n    }\n  }\n\n  public setVisible() {\n    this.layer.visible = true;\n  }\n\n  toggleFiltersCollapsed() {\n    this.filtersCollapsed = !this.filtersCollapsed;\n  }\n}\n","<mat-list-item *ngIf=\"header\">\n  <mat-icon\n    class=\"igo-chevron\"\n    matListItemIcon\n    igoCollapse\n    [target]=\"filters\"\n    [collapsed]=\"filtersCollapsed\"\n    (click)=\"toggleFiltersCollapsed()\"\n  >\n    expand_less\n  </mat-icon>\n\n  <span\n    matListItemTitle\n    (click)=\"toggleLegendOnClick()\"\n    [ngStyle]=\"{ cursor: filtersCollapsed ? 'default' : 'pointer' }\"\n    >{{ layer.title }}</span\n  >\n\n  <button\n    *ngIf=\"header\"\n    mat-icon-button\n    matListItemMeta\n    [color]=\"layer.visible ? 'primary' : 'default'\"\n    collapsibleButton\n    tooltip-position=\"below\"\n    matTooltipShowDelay=\"500\"\n    [matTooltip]=\"\n      layer.visible\n        ? ('igo.geo.layer.hideLayer' | translate)\n        : ('igo.geo.layer.showLayer' | translate)\n    \"\n    (click)=\"layer.visible = !layer.visible\"\n  >\n    <mat-icon [ngClass]=\"{ disabled: (inResolutionRange$ | async) === false }\"\n      >{{ layer.visible ? 'visibility' : 'visibility_off' }}\n    </mat-icon>\n  </button>\n</mat-list-item>\n\n<div #filters class=\"igo-datasource-filters-container\">\n  <div #legend class=\"igo-layer-legend-container\">\n    <igo-layer-legend *ngIf=\"showLegend$ | async\" [layer]=\"layer\">\n    </igo-layer-legend>\n  </div>\n  <igo-time-filter-form\n    [layer]=\"layer\"\n    [options]=\"datasource.options.timeFilter\"\n    [currentValue]=\"datasource.options.params.TIME\"\n    (change)=\"handleDateChange($event)\"\n    (yearChange)=\"handleYearChange($event)\"\n  >\n  </igo-time-filter-form>\n</div>\n","import { NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnInit\n} from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ListItemDirective } from '@igo2/common/list';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { TimeFilterableDataSourceOptions } from '../../datasource/shared/datasources/wms-datasource.interface';\nimport { WMSDataSourceOptions } from '../../datasource/shared/datasources/wms-datasource.interface';\nimport { Layer } from '../../layer';\nimport { IgoMap } from '../../map/shared/map';\nimport { TimeFilterItemComponent } from '../time-filter-item/time-filter-item.component';\n\n@Component({\n  selector: 'igo-time-filter-button',\n  templateUrl: './time-filter-button.component.html',\n  styleUrls: ['./time-filter-button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    MatBadgeModule,\n    TimeFilterItemComponent,\n    ListItemDirective,\n    IgoLanguageModule\n  ]\n})\nexport class TimeFilterButtonComponent implements OnInit {\n  public options: TimeFilterableDataSourceOptions;\n\n  get badge() {\n    const filter = this.options.timeFilter as any;\n    if (filter && filter.enabled) {\n      return 1;\n    } else {\n      return;\n    }\n  }\n\n  @Input()\n  get layer(): Layer {\n    return this._layer;\n  }\n  set layer(value: Layer) {\n    this._layer = value;\n    if (value) {\n      this.options = this.layer.dataSource.options as WMSDataSourceOptions;\n    }\n  }\n  private _layer: Layer;\n\n  @Input() map: IgoMap;\n\n  @Input() color = 'primary';\n\n  @Input() header = true;\n\n  public timeFilterCollapse = false;\n\n  ngOnInit() {\n    this.options = this.layer.dataSource.options as WMSDataSourceOptions;\n  }\n}\n","<button\n  *ngIf=\"header && options.timeFilterable && options.timeFilter\"\n  mat-icon-button\n  collapsibleButton\n  tooltip-position=\"below\"\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"'igo.geo.filter.filterBy' | translate\"\n  [color]=\"color\"\n>\n  <mat-icon\n    aria-hidden=\"false\"\n    [matBadge]=\"badge\"\n    matBadgeColor=\"warn\"\n    matBadgeSize=\"medium\"\n    >history</mat-icon\n  >\n</button>\n\n<div\n  #ogcFilter\n  class=\"igo-layer-actions-container\"\n  *ngIf=\"header && options.timeFilterable && options.timeFilter\"\n>\n  <igo-time-filter-item\n    *ngIf=\"timeFilterCollapse && options.timeFilter\"\n    igoListItem\n    [header]=\"false\"\n    [layer]=\"layer\"\n  >\n  </igo-time-filter-item>\n</div>\n","import { NgFor } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ListComponent, ListItemDirective } from '@igo2/common/list';\n\nimport { AnyLayer } from '../../layer';\nimport { FilterableDataSourcePipe } from '../shared/filterable-datasource.pipe';\nimport { TimeFilterItemComponent } from '../time-filter-item/time-filter-item.component';\n\n@Component({\n  selector: 'igo-time-filter-list',\n  templateUrl: './time-filter-list.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    ListComponent,\n    NgFor,\n    TimeFilterItemComponent,\n    ListItemDirective,\n    FilterableDataSourcePipe\n  ]\n})\nexport class TimeFilterListComponent {\n  @Input() layers: AnyLayer[] = [];\n}\n","<igo-list [navigation]=\"false\" [selection]=\"false\">\n  <ng-template\n    ngFor\n    let-layer\n    [ngForOf]=\"layers | filterableDataSource: 'time'\"\n  >\n    <igo-time-filter-item\n      [header]=\"true\"\n      igoListItem\n      [layer]=\"layer\"\n    ></igo-time-filter-item>\n  </ng-template>\n</igo-list>\n","import { Directive, OnDestroy, OnInit, Self } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { MapService } from '../../map/shared/map.service';\nimport { TimeFilterListComponent } from './time-filter-list.component';\n\n@Directive({\n  selector: '[igoTimeFilterListBinding]',\n  standalone: true\n})\nexport class TimeFilterListBindingDirective implements OnInit, OnDestroy {\n  private component: TimeFilterListComponent;\n  private layers$$: Subscription;\n\n  constructor(\n    @Self() component: TimeFilterListComponent,\n    private mapService: MapService\n  ) {\n    this.component = component;\n  }\n\n  ngOnInit() {\n    // Override input layers\n    this.component.layers = [];\n\n    this.layers$$ = this.mapService\n      .getMap()\n      .layerController.all$.subscribe((layers) => {\n        this.component.layers = layers;\n      });\n  }\n\n  ngOnDestroy() {\n    this.layers$$.unsubscribe();\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\n\nimport { OgcFilterButtonComponent } from './ogc-filter-button/ogc-filter-button.component';\nimport { OgcFilterFormComponent } from './ogc-filter-form/ogc-filter-form.component';\nimport { OgcFilterSelectionComponent } from './ogc-filter-selection/ogc-filter-selection.component';\nimport { OgcFilterTimeSliderComponent } from './ogc-filter-time/ogc-filter-time-slider.component';\nimport { OgcFilterTimeComponent } from './ogc-filter-time/ogc-filter-time.component';\nimport { OgcFilterableFormComponent } from './ogc-filterable-form/ogc-filterable-form.component';\nimport { OgcFilterableItemComponent } from './ogc-filterable-item/ogc-filterable-item.component';\nimport { OgcFilterableListBindingDirective } from './ogc-filterable-list/ogc-filterable-list-binding.directive';\nimport { OgcFilterableListComponent } from './ogc-filterable-list/ogc-filterable-list.component';\nimport { FilterableDataSourcePipe } from './shared/filterable-datasource.pipe';\nimport { OGCFilterTimeService } from './shared/ogc-filter-time.service';\nimport { OGCFilterService } from './shared/ogc-filter.service';\nimport { SpatialFilterService } from './shared/spatial-filter.service';\nimport { TimeFilterService } from './shared/time-filter.service';\nimport { SpatialFilterItemComponent } from './spatial-filter/spatial-filter-item/spatial-filter-item.component';\nimport { SpatialFilterListComponent } from './spatial-filter/spatial-filter-list/spatial-filter-list.component';\nimport { SpatialFilterTypeComponent } from './spatial-filter/spatial-filter-type/spatial-filter-type.component';\nimport { TimeFilterButtonComponent } from './time-filter-button/time-filter-button.component';\nimport { TimeFilterFormComponent } from './time-filter-form/time-filter-form.component';\nimport { TimeFilterItemComponent } from './time-filter-item/time-filter-item.component';\nimport { TimeFilterListBindingDirective } from './time-filter-list/time-filter-list-binding.directive';\nimport { TimeFilterListComponent } from './time-filter-list/time-filter-list.component';\n\nexport const FILTER_DIRECTIVES = [\n  FilterableDataSourcePipe,\n  TimeFilterButtonComponent,\n  TimeFilterFormComponent,\n  TimeFilterItemComponent,\n  TimeFilterListComponent,\n  TimeFilterListBindingDirective,\n  OgcFilterFormComponent,\n  OgcFilterButtonComponent,\n  OgcFilterSelectionComponent,\n  OgcFilterableFormComponent,\n  OgcFilterableItemComponent,\n  OgcFilterableListComponent,\n  OgcFilterableListBindingDirective,\n  SpatialFilterTypeComponent,\n  SpatialFilterListComponent,\n  SpatialFilterItemComponent,\n  OgcFilterTimeComponent,\n  OgcFilterTimeSliderComponent\n] as const;\n\n/**\n * @deprecated import the components directly or the FILTER_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [...FILTER_DIRECTIVES],\n  exports: [...FILTER_DIRECTIVES],\n  providers: [\n    TimeFilterService,\n    OGCFilterService,\n    OGCFilterTimeService,\n    SpatialFilterService\n  ]\n})\nexport class IgoFilterModule {\n  static forRoot(): ModuleWithProviders<IgoFilterModule> {\n    return {\n      ngModule: IgoFilterModule,\n      providers: [\n        {\n          provide: MAT_DATE_LOCALE,\n          useValue: 'fr-FR'\n        }\n      ]\n    };\n  }\n}\n","import { NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { DataSourceOptions } from '../../datasource/shared/datasources';\nimport { Layer, VectorLayer } from '../../layer/shared';\n\n@Component({\n  selector: 'igo-export-button',\n  templateUrl: './export-button.component.html',\n  styleUrls: ['./export-button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class ExportButtonComponent {\n  @Input() layer: Layer;\n\n  @Input() color = 'primary';\n\n  get options(): DataSourceOptions {\n    if (!this.layer) {\n      return;\n    }\n    return this.layer.dataSource.options;\n  }\n\n  layerIsExportable(): boolean {\n    if (\n      (this.layer instanceof VectorLayer && this.layer.exportable === true) ||\n      (this.layer.dataSource.options.download &&\n        this.layer.dataSource.options.download.url) ||\n      (this.layer.options.workspace?.enabled &&\n        this.layer.options.workspace?.workspaceId !== this.layer.id)\n    ) {\n      return true;\n    }\n    return false;\n  }\n}\n","<button\n  *ngIf=\"layerIsExportable()\"\n  mat-icon-button\n  tooltip-position=\"below\"\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"'igo.geo.download.action' | translate\"\n  [color]=\"color\"\n>\n  <mat-icon>file_save</mat-icon>\n</button>\n","import { HttpBackend, HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { StyleListOptions } from './style-list.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class StyleListService {\n  private styleList: object = {};\n  private httpClient: HttpClient;\n\n  constructor(handler: HttpBackend) {\n    this.httpClient = new HttpClient(handler);\n  }\n\n  /**\n   * Use to get the data found in styleList file\n   */\n  public getStyleList(key: string): any {\n    return ObjectUtils.resolve(this.styleList, key);\n  }\n\n  /**\n   * This method loads \"[path]\" to get all styleList's variables\n   */\n  public load(options: StyleListOptions) {\n    const baseStyleList = options.default || {};\n    if (!options.path) {\n      this.styleList = baseStyleList;\n      return true;\n    }\n\n    return new Promise((resolve) => {\n      this.httpClient\n        .get(options.path)\n        .pipe(\n          catchError((error: any): any => {\n            console.log(`StyleList file ${options.path} could not be read`);\n            resolve(true);\n            return throwError(error.error || 'Server error');\n          })\n        )\n        .subscribe((styleListResponse: object) => {\n          this.styleList = ObjectUtils.mergeDeep(\n            baseStyleList,\n            styleListResponse\n          );\n          resolve(true);\n        });\n    });\n  }\n}\n","export class ExportError extends Error {}\n\nexport class ExportInvalidFileError extends ExportError {\n  constructor() {\n    super('Invalid file');\n    Object.setPrototypeOf(this, ExportInvalidFileError.prototype);\n  }\n}\n\nexport class ExportNothingToExportError extends ExportError {\n  constructor() {\n    super('Nothing to export');\n    Object.setPrototypeOf(this, ExportNothingToExportError.prototype);\n  }\n}\n","import {\n  EntityTableColumn,\n  EntityTableColumnRenderer,\n  getEntityProperty\n} from '@igo2/common/entity';\nimport { MessageService } from '@igo2/core/message';\nimport { downloadContent } from '@igo2/utils';\n\nimport { ExportNothingToExportError } from './export.errors';\nimport { AnyExportFormat, ExportFormatLegacy } from './export.type';\n\nexport function handleFileExportError(\n  error: Error,\n  messageService: MessageService\n) {\n  if (error instanceof ExportNothingToExportError) {\n    handleNothingToExportError(messageService);\n    return;\n  }\n  messageService.error(\n    'igo.geo.export.failed.text',\n    'igo.geo.export.failed.title'\n  );\n}\n\nexport function handleFileExportSuccess(messageService: MessageService) {\n  messageService.success(\n    'igo.geo.export.success.text',\n    'igo.geo.export.success.title'\n  );\n}\n\nexport function handleNothingToExportError(messageService: MessageService) {\n  messageService.error(\n    'igo.geo.export.nothing.text',\n    'igo.geo.export.nothing.title'\n  );\n}\n\n/**\n * Export array to CSV\n *\n * @param rows Array of arrays to export as CSV\n * @param separator Cell separator\n */\nexport function exportToCSV(rows: any[][], fileName: string, separator = ';') {\n  const lines = rows.map((row: any[][]) => row.join(separator));\n  const csvContent = lines.join('\\n');\n  downloadContent(csvContent, 'text/csv;charset=utf-8', fileName);\n}\n\n/**\n * Return an array of values from an array of entities.\n *\n * @param entities Array of entities\n * @param scolumns Columns definition of the output data\n */\nexport function entitiesToRowData(\n  entities: object[],\n  columns: EntityTableColumn[]\n) {\n  return entities.map((entity: object) => {\n    return columns.map((column: EntityTableColumn) => {\n      let valueAccessor;\n      if (\n        column.renderer === undefined ||\n        column.renderer === EntityTableColumnRenderer.Default\n      ) {\n        valueAccessor = column.valueAccessor;\n      }\n      valueAccessor = valueAccessor ? valueAccessor : getEntityProperty;\n      return valueAccessor(entity, column.name);\n    });\n  });\n}\n\nexport function isCsvExport(format: AnyExportFormat): boolean {\n  const legacyCsv: Partial<ExportFormatLegacy>[] = ['CSVsemicolon', 'CSVcomma'];\n  return format === 'CSV' || legacyCsv.includes(format as ExportFormatLegacy);\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { EntityRecord } from '@igo2/common/entity';\nimport { Workspace, WorkspaceStore } from '@igo2/common/workspace';\nimport { ConfigService } from '@igo2/core/config';\nimport {\n  addExcelSheetToWorkBook,\n  createExcelWorkBook,\n  downloadBlob,\n  downloadContent,\n  isIsoDate,\n  writeExcelFile\n} from '@igo2/utils';\n\nimport OlFeature from 'ol/Feature';\nimport * as olformat from 'ol/format';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport { circular } from 'ol/geom/Polygon';\n\nimport { FeatureCollection } from 'geojson';\nimport { Observable, Observer, catchError, lastValueFrom, of, tap } from 'rxjs';\n\nimport { ClusterDataSource, WFSDataSource } from '../../datasource';\nimport { Feature } from '../../feature';\nimport { Layer, VectorLayer, isLayerGroup } from '../../layer';\nimport { IgoMap } from '../../map';\nimport {\n  EditionWorkspace,\n  FeatureWorkspace,\n  WfsWorkspace\n} from '../../workspace';\nimport {\n  ExportInvalidFileError,\n  ExportNothingToExportError\n} from './export.errors';\nimport { ExportOptions, GeometryCollection } from './export.interface';\nimport { AnyExportFormat, ExportOgreFormat } from './export.type';\nimport { isCsvExport } from './export.utils';\n\nconst SHAPEFILE_FIELD_MAX_LENGHT = 255;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ExportService {\n  static ogreFormats: Record<ExportOgreFormat, string> = {\n    GML: 'gml',\n    GPX: 'gpx',\n    KML: 'kml',\n    Shapefile: 'ESRI Shapefile',\n    CSV: 'CSV',\n    /** @deprecated use CSV */\n    CSVcomma: 'CSVcomma',\n    /** @deprecated use CSV */\n    CSVsemicolon: 'CSVsemicolon'\n  };\n\n  static noOgreFallbacks: Partial<AnyExportFormat[]> = ['GML', 'GPX', 'KML'];\n\n  private ogreUrl: string;\n  private aggregateInComment = true;\n\n  constructor(\n    private config: ConfigService,\n    private httpClient: HttpClient\n  ) {\n    this.ogreUrl = this.config.getConfig('importExport.url');\n    const gpxAggregateInComment = this.config.getConfig(\n      'importExport.gpxAggregateInComment'\n    );\n    if (gpxAggregateInComment !== undefined) {\n      this.aggregateInComment = gpxAggregateInComment;\n    }\n  }\n\n  export(\n    olFeatures: OlFeature<OlGeometry>[],\n    options: ExportOptions,\n    title: string,\n    projectionIn = 'EPSG:4326',\n    projectionOut = 'EPSG:4326'\n  ): Observable<void> {\n    const exportOlFeatures = this.cleanFeatures(\n      olFeatures,\n      options.format,\n      '_featureStore'\n    );\n\n    return this.exportAsync(\n      exportOlFeatures,\n      options,\n      title,\n      projectionIn,\n      projectionOut\n    );\n  }\n\n  public cleanFeatures(\n    olFeatures: OlFeature<OlGeometry>[],\n    format: AnyExportFormat,\n    excludePrefix = '_'\n  ): OlFeature<OlGeometry>[] {\n    if (format === 'GPX' && this.aggregateInComment) {\n      return this.generateAggregatedFeature(olFeatures);\n    }\n\n    return olFeatures.map((olFeature: OlFeature<OlGeometry>) => {\n      let keys = olFeature\n        .getKeys()\n        .filter((key: string) => !key.startsWith(excludePrefix));\n\n      if (format === 'Shapefile' && olFeature.get('_style')) {\n        const style = JSON.stringify(olFeature.get('_style'));\n        if (style.length > SHAPEFILE_FIELD_MAX_LENGHT)\n          keys = keys.filter((key) => key !== '_style');\n      }\n\n      const properties = keys.reduce(\n        (acc: object, key: string) => {\n          acc[key] = olFeature.get(key);\n          return acc;\n        },\n        { geometry: olFeature.getGeometry() }\n      );\n      return new OlFeature(properties);\n    });\n  }\n\n  private generateAggregatedFeature(\n    olFeatures: OlFeature<OlGeometry>[]\n  ): OlFeature<OlGeometry>[] {\n    return olFeatures.map((olFeature: OlFeature<OlGeometry>) => {\n      const keys = olFeature\n        .getKeys()\n        .filter((key: string) => !key.startsWith('_'));\n      let comment = '';\n      const properties = keys.reduce(\n        (acc: object, key: string) => {\n          if (key && key !== 'geometry') {\n            key === 'id' && olFeature.get('draw')\n              ? (comment += key + ':' + olFeature.get('draw') + '   \\r\\n')\n              : (comment += key + ':' + olFeature.get(key) + '   \\r\\n');\n          }\n          acc[key] = olFeature.get(key);\n          return acc;\n        },\n        {\n          geometry: olFeature.getGeometry()\n        }\n      );\n      const newFeature = new OlFeature(properties);\n      newFeature.set('name', olFeature.getId());\n      newFeature.set('cmt', comment);\n\n      return newFeature;\n    });\n  }\n\n  private exportAsync(\n    olFeatures: OlFeature<OlGeometry>[],\n    options: ExportOptions,\n    title: string,\n    projectionIn: string,\n    projectionOut: string\n  ): Observable<void> {\n    const { format } = options;\n    return new Observable((observer: Observer<void>) => {\n      const nothingToExport = this.nothingToExport(olFeatures, format);\n      if (nothingToExport) {\n        observer.error(new ExportNothingToExportError());\n        return;\n      }\n\n      const ogreFormats = Object.keys(ExportService.ogreFormats);\n      if (ogreFormats.indexOf(format) >= 0) {\n        if (!this.ogreUrl) {\n          if (ExportService.noOgreFallbacks.indexOf(format) >= 0) {\n            this.exportToFile(\n              olFeatures,\n              format,\n              title,\n              projectionIn,\n              projectionOut\n            );\n            observer.complete();\n          } else {\n            observer.error(new ExportInvalidFileError());\n          }\n          return;\n        }\n        this.exportWithOgre(\n          olFeatures,\n          options,\n          title,\n          projectionIn,\n          projectionOut\n        ).subscribe({\n          complete: () => observer.complete(),\n          error: (error) => observer.error(error)\n        });\n      } else {\n        this.exportToFile(\n          olFeatures,\n          format,\n          title,\n          projectionIn,\n          projectionOut\n        );\n        observer.complete();\n      }\n    });\n  }\n\n  protected async exportToFile(\n    olFeatures: OlFeature<OlGeometry>[],\n    format: AnyExportFormat,\n    title: string,\n    projectionIn: string,\n    projectionOut: string\n  ) {\n    const features = this.formatFeatures(\n      olFeatures,\n      format,\n      projectionIn,\n      projectionOut\n    );\n\n    const fileName = `${title}.${format.toLowerCase()}`;\n    downloadContent(features, 'attachment/plain;charset=utf-8', fileName);\n  }\n\n  private formatFeatures(\n    features: OlFeature<OlGeometry>[],\n    format: AnyExportFormat,\n    projectionIn = 'EPSG:4326',\n    projectionOut = 'EPSG:4326'\n  ) {\n    const formatter = this.getFormatter(format);\n    const cleanFeatures = this.cleanFeatures(features, format, '_featureStore');\n    return formatter.writeFeatures(cleanFeatures, {\n      dataProjection: projectionOut,\n      featureProjection: projectionIn\n    });\n  }\n\n  getFormatter(format: AnyExportFormat) {\n    switch (format) {\n      case 'GPX':\n        return new olformat.GPX();\n      case 'GML':\n        return new olformat.GML();\n      case 'KML':\n        return new olformat.KML();\n      default:\n        return new olformat.GeoJSON();\n    }\n  }\n\n  async exportExcel(map: IgoMap, store: WorkspaceStore, data: ExportOptions) {\n    const workBook = await createExcelWorkBook();\n\n    for (const layerName of data.layers) {\n      const layer = map.layerController.getById(layerName);\n      if (isLayerGroup(layer)) {\n        continue;\n      }\n      const features = await lastValueFrom(\n        this.getFeatures(map, layer, data, store)\n      );\n\n      const formattedFeatures = features?.length\n        ? this.formatFeatures(features, 'GeoJSON')\n        : null;\n\n      const collection: FeatureCollection = features\n        ? JSON.parse(formattedFeatures)\n        : {\n            features: []\n          };\n      const rows = collection.features.map((feature) =>\n        this.formatRecord(feature.properties)\n      );\n\n      await addExcelSheetToWorkBook(layer.title, rows, workBook);\n    }\n\n    const title = this.getTitleFromLayers(data.layers, map);\n    writeExcelFile(workBook, title, { compression: true });\n  }\n\n  private getTitleFromLayers(layers: string[], map: IgoMap): string {\n    return layers.length === 1\n      ? this.getLayerTitleFromId(layers[0], map)\n      : 'igo';\n  }\n\n  private getLayerTitleFromId(id: string, map: IgoMap): string {\n    const layer = map.layerController.getById(id);\n    return layer.title;\n  }\n\n  private formatRecord(\n    record: Record<string, unknown>\n  ): Record<string, unknown> {\n    return Object.entries(record).reduce((formatted, [key, value]) => {\n      formatted[key] = this.formatDataType(value);\n      return formatted;\n    }, {});\n  }\n\n  private formatDataType(value: unknown): unknown {\n    switch (true) {\n      case typeof value === 'string': {\n        if (isIsoDate(value as string)) {\n          return new Date(value as string).toLocaleString();\n        }\n\n        return value;\n      }\n      case typeof value === 'object':\n      case value instanceof Array: {\n        return JSON.stringify(value);\n      }\n      default:\n        return value;\n    }\n  }\n\n  private exportWithOgre(\n    olFeatures: OlFeature<OlGeometry>[],\n    { format, csvSeparator = null }: ExportOptions,\n    title: string,\n    projectionIn: string,\n    projectionOut: string\n  ) {\n    const featuresText = new olformat.GeoJSON().writeFeatures(olFeatures, {\n      dataProjection: projectionOut,\n      featureProjection: projectionIn\n    });\n    const url = `${this.ogreUrl}/convertJson`;\n\n    const formData = new FormData();\n\n    formData.append('json', featuresText);\n\n    let outputName =\n      format === 'Shapefile'\n        ? `${title}.zip`\n        : `${title}.${format.toLowerCase()}`;\n    let ogreFormat = ExportService.ogreFormats[format];\n\n    if (isCsvExport(format)) {\n      outputName = `${title}.csv`;\n\n      if (format === 'CSVcomma' || format === 'CSVsemicolon') {\n        ogreFormat = 'CSV';\n      }\n\n      formData.append('lco', `SEPARATOR=${csvSeparator}`);\n\n      if (format === 'CSVsemicolon') {\n        formData.append('lco', `SEPARATOR=${csvSeparator}`);\n      }\n    }\n\n    formData.append('outputName', this.formatFilename(outputName));\n    formData.append('format', ogreFormat);\n\n    return this.httpClient\n      .post(url, formData, {\n        responseType: 'blob'\n      })\n      .pipe(\n        tap((value) => {\n          downloadBlob(value, outputName);\n        })\n      );\n  }\n\n  private formatFilename(name: string): string {\n    return name\n      .replaceAll(' ', '_')\n      .normalize('NFD')\n      .replace(/[\\u0300-\\u036f]/g, '')\n      .replace(/’/g, \"'\");\n  }\n\n  private nothingToExport(\n    olFeatures: OlFeature<OlGeometry>[],\n    format: string\n  ): boolean {\n    if (olFeatures.length === 0) {\n      return true;\n    }\n    if (format === 'GPX') {\n      const pointOrLine = olFeatures.find((olFeature) => {\n        return (\n          ['Point', 'LineString', 'MultiLineString'].indexOf(\n            olFeature.getGeometry().getType()\n          ) >= 0\n        );\n      });\n      return pointOrLine === undefined;\n    }\n    return false;\n  }\n\n  private getFeaturesFromMap(\n    layer: VectorLayer,\n    options: ExportOptions\n  ): OlFeature[] {\n    const dataSource = layer.dataSource.ol;\n    const extent = layer.map.viewController.getExtent();\n\n    let features: OlFeature[] = options.featureInMapExtent\n      ? dataSource.getFeaturesInExtent(extent)\n      : dataSource.getFeatures();\n\n    if (layer.dataSource instanceof ClusterDataSource) {\n      features = features.flatMap((cluster) => cluster.get('features'));\n    }\n    return features;\n  }\n\n  private getFeaturesFromWorkspace(\n    wks: Workspace,\n    layerName: string,\n    data: ExportOptions\n  ): OlFeature[] {\n    const hasSelection = data.layersWithSelection.indexOf(layerName) !== -1;\n    const isInMapExtent = data.featureInMapExtent;\n    if (hasSelection && isInMapExtent) {\n      // Only export selected feature && into map extent\n      return wks.entityStore.stateView\n        .all()\n        .filter(\n          (e: EntityRecord<object>) => e.state.inMapExtent && e.state.selected\n        )\n        .map((e) => (e.entity as Feature).ol as OlFeature);\n    } else if (hasSelection && !isInMapExtent) {\n      // Only export selected feature &&  (into map extent OR not)\n      return wks.entityStore.stateView\n        .all()\n        .filter((e: EntityRecord<object>) => e.state.selected)\n        .map((e) => (e.entity as Feature).ol as OlFeature);\n    } else if (isInMapExtent) {\n      // Only into map extent\n      return wks.entityStore.stateView\n        .all()\n        .filter((e: EntityRecord<object>) => e.state.inMapExtent)\n        .map((e) => (e.entity as Feature).ol as OlFeature);\n    } else {\n      // All features\n      return wks.entityStore.stateView\n        .all()\n        .map((e) => (e.entity as Feature).ol as OlFeature);\n    }\n  }\n\n  getFeatures(\n    map: IgoMap,\n    layer: Layer,\n    data: ExportOptions,\n    store: WorkspaceStore\n  ): Observable<OlFeature[]> {\n    const projection = map.viewController.getOlProjection();\n    const extent = data.featureInMapExtent\n      ? map.viewController.getExtent()\n      : undefined;\n\n    if (layer.dataSource instanceof WFSDataSource) {\n      return layer.dataSource\n        .fetchFeatures({\n          extent,\n          projection,\n          httpClient: this.httpClient\n        })\n        .pipe(\n          catchError((e) => {\n            throw e;\n          })\n        );\n    }\n    // Filter spatial use external API to make query and use Workspace to store data\n    else if (layer.options.workspace?.enabled) {\n      const wks = this.getWorkspaceByLayerId(layer.id, store);\n      if (wks?.entityStore?.stateView.all().length) {\n        const features = this.getFeaturesFromWorkspace(wks, layer.id, data);\n        return of(features).pipe(\n          catchError((e) => {\n            throw e;\n          })\n        );\n      }\n    } else if (layer instanceof VectorLayer) {\n      return of(this.getFeaturesFromMap(layer, data));\n    }\n\n    return of([]);\n  }\n\n  getWorkspaceByLayerId(id: string, store: WorkspaceStore): Workspace {\n    const wksFromLayerId = store\n      .all()\n      .find(\n        (workspace) =>\n          (workspace as WfsWorkspace | FeatureWorkspace | EditionWorkspace)\n            .layer.id === id\n      );\n    if (wksFromLayerId) {\n      return wksFromLayerId;\n    }\n    return;\n  }\n\n  getGeomTypes(\n    features: OlFeature[],\n    format?: AnyExportFormat\n  ): GeometryCollection[] {\n    let geomTypes: GeometryCollection[] = [];\n    if (format === 'Shapefile' || format === 'GPX') {\n      features.forEach((olFeature) => {\n        const featureGeomType = olFeature.getGeometry().getType();\n        const currentGeomType = geomTypes.find(\n          (geomType) => geomType.type === featureGeomType\n        );\n        if (currentGeomType) {\n          currentGeomType.features.push(olFeature);\n        } else {\n          geomTypes.push({\n            type: featureGeomType,\n            features: [olFeature]\n          });\n        }\n      });\n    } else {\n      geomTypes = [{ type: null, features: features }];\n    }\n\n    geomTypes.forEach((geomType) => {\n      geomType.features.forEach((feature) => {\n        const radius: number = feature.get('rad');\n        if (radius) {\n          const center4326: number[] = [\n            feature.get('longitude'),\n            feature.get('latitude')\n          ];\n          const circle = circular(center4326, radius, 500);\n          circle.transform('EPSG:4326', feature.get('_projection'));\n          feature.setGeometry(circle);\n        }\n      });\n    });\n\n    return geomTypes;\n  }\n}\n","export type AnyExportFormat = ExportFormat | ExportFormatLegacy;\n\nexport const ExportFormat = [\n  'GeoJSON',\n  'Excel',\n  'Shapefile',\n  'GML',\n  'GPX',\n  'KML',\n  'CSV',\n  'URL'\n] as const;\nexport type ExportFormat = (typeof ExportFormat)[number];\n\nexport const ExportFormatLegacy = ['CSVcomma', 'CSVsemicolon'] as const;\nexport type ExportFormatLegacy = (typeof ExportFormatLegacy)[number];\n\nexport const CsvSeparator = ['auto', 'comma', 'semicolon'] as const;\nexport type CsvSeparator = (typeof CsvSeparator)[number];\n\nexport type ExportOgreFormat = Extract<\n  AnyExportFormat,\n  'GML' | 'GPX' | 'KML' | 'Shapefile' | 'CSVcomma' | 'CSVsemicolon' | 'CSV'\n>;\n","export class ImportError extends Error {}\n\nexport class ImportInvalidFileError extends ImportError {\n  constructor() {\n    super('Invalid file');\n    Object.setPrototypeOf(this, ImportInvalidFileError.prototype);\n  }\n}\n\nexport class ImportUnreadableFileError extends ImportError {\n  constructor() {\n    super('Failed to read file');\n    Object.setPrototypeOf(this, ImportUnreadableFileError.prototype);\n  }\n}\n\nexport class ImportNothingToImportError extends ImportError {\n  constructor() {\n    super('Nothing to import');\n    Object.setPrototypeOf(this, ImportNothingToImportError.prototype);\n  }\n}\n\nexport class ImportSizeError extends ImportError {\n  constructor() {\n    super('File is too large');\n    Object.setPrototypeOf(this, ImportNothingToImportError.prototype);\n  }\n}\n\nexport class ImportSRSError extends ImportError {\n  constructor() {\n    super('Invalid SRS definition');\n    Object.setPrototypeOf(this, ImportNothingToImportError.prototype);\n  }\n}\n\nexport class ImportOgreServerError extends ImportError {\n  constructor() {\n    super('Error 500 with OGRE');\n    Object.setPrototypeOf(this, ImportOgreServerError.prototype);\n  }\n}\n","import { ConfirmDialogService } from '@igo2/common/confirm-dialog';\nimport { MessageService } from '@igo2/core/message';\nimport { uuid } from '@igo2/utils';\n\nimport { first, of } from 'rxjs';\n\nimport { ClusterDataSource } from '../../datasource/shared/datasources/cluster-datasource';\nimport { ClusterDataSourceOptions } from '../../datasource/shared/datasources/cluster-datasource.interface';\nimport { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';\nimport { FeatureDataSourceOptions } from '../../datasource/shared/datasources/feature-datasource.interface';\nimport { Feature } from '../../feature/shared/feature.interfaces';\nimport {\n  computeOlFeaturesExtent,\n  featureToOl,\n  moveToOlFeatures\n} from '../../feature/shared/feature.utils';\nimport { ClusterParam } from '../../layer/shared/clusterParam';\nimport { LayerService } from '../../layer/shared/layer.service';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport { IgoMap } from '../../map/shared/map';\nimport { QueryableDataSourceOptions } from '../../query/shared/query.interfaces';\nimport {\n  featureRandomStyle,\n  featureRandomStyleFunction\n} from '../../style/shared/feature/feature-style';\nimport { StyleByAttribute } from '../../style/shared/vector/vector-style.interface';\nimport { StyleListService } from '../../style/style-list/style-list.service';\nimport { StyleService } from '../../style/style-service/style.service';\n\nexport function addLayerAndFeaturesToMap(\n  features: Feature[],\n  map: IgoMap,\n  contextUri: string,\n  layerTitle: string,\n  layerService: LayerService,\n  storeToIdb = false\n): VectorLayer {\n  const olFeatures = features.map((feature: Feature) =>\n    featureToOl(feature, map.projection)\n  );\n\n  const id = uuid();\n  const sourceOptions: FeatureDataSourceOptions & QueryableDataSourceOptions = {\n    id,\n    type: 'vector',\n    queryable: true\n  };\n  const source = new FeatureDataSource(sourceOptions);\n  source.ol.addFeatures(olFeatures);\n  let randomStyle;\n  let editable = false;\n  if (\n    olFeatures[0].getKeys().includes('_style') ||\n    olFeatures[0].getKeys().includes('_mapTitle')\n  ) {\n    randomStyle = featureRandomStyleFunction();\n  } else {\n    randomStyle = featureRandomStyle();\n    editable = true;\n  }\n  const layer = layerService.createLayer({\n    id,\n    title: layerTitle,\n    workspace: { enabled: true, searchIndexEnabled: true },\n    isIgoInternalLayer: true,\n    source,\n    igoStyle: { editable },\n    idbInfo: { firstLoad: true, storeToIdb, contextUri: contextUri || '*' },\n    style: randomStyle\n  }) as VectorLayer;\n  layer.setExtent(computeOlFeaturesExtent(olFeatures, map.viewProjection));\n  map.layerController.add(layer);\n  moveToOlFeatures(map.viewController, olFeatures);\n\n  return layer;\n}\n\nexport function addLayerAndFeaturesStyledToMap(\n  features: Feature[],\n  map: IgoMap,\n  layerTitle: string,\n  styleListService: StyleListService,\n  styleService: StyleService,\n  layerId?: string,\n  imposedSourceOptions?,\n  imposedLayerOptions?,\n  zoomTo = true\n): VectorLayer {\n  const olFeatures = features.map((feature: Feature) =>\n    featureToOl(feature, map.projection)\n  );\n  let style;\n  let distance: number;\n\n  if (\n    styleListService.getStyleList(layerTitle.toString() + '.styleByAttribute')\n  ) {\n    const styleByAttribute: StyleByAttribute = styleListService.getStyleList(\n      layerTitle.toString() + '.styleByAttribute'\n    );\n\n    style = (feature, resolution) => {\n      return styleService.createStyleByAttribute(\n        feature,\n        styleByAttribute,\n        resolution\n      );\n    };\n  } else if (\n    styleListService.getStyleList(layerTitle.toString() + '.clusterStyle')\n  ) {\n    const clusterParam: ClusterParam = styleListService.getStyleList(\n      layerTitle.toString() + '.clusterParam'\n    );\n    distance = styleListService.getStyleList(\n      layerTitle.toString() + '.distance'\n    );\n\n    style = (feature, resolution) => {\n      const baseStyle = styleService.createStyle(\n        styleListService.getStyleList(layerTitle.toString() + '.clusterStyle'),\n        feature,\n        resolution\n      );\n      return styleService.createClusterStyle(\n        feature,\n        resolution,\n        clusterParam,\n        baseStyle\n      );\n    };\n  } else if (styleListService.getStyleList(layerTitle.toString() + '.style')) {\n    style = (feature, resolution) =>\n      styleService.createStyle(\n        styleListService.getStyleList(layerTitle.toString() + '.style'),\n        feature,\n        resolution\n      );\n  } else if (\n    styleListService.getStyleList('default.clusterStyle') &&\n    features[0].geometry.type === 'Point'\n  ) {\n    const clusterParam: ClusterParam = styleListService.getStyleList(\n      'default.clusterParam'\n    );\n    distance = styleListService.getStyleList('default.distance');\n\n    style = (feature, resolution) => {\n      const baseStyle = styleService.createStyle(\n        styleListService.getStyleList('default.clusterStyle'),\n        feature,\n        resolution\n      );\n      return styleService.createClusterStyle(\n        feature,\n        resolution,\n        clusterParam,\n        baseStyle\n      );\n    };\n  } else {\n    style = (feature, resolution) =>\n      styleService.createStyle(\n        styleListService.getStyleList('default.style'),\n        feature,\n        resolution\n      );\n  }\n\n  let source;\n  if (styleListService.getStyleList(layerTitle.toString() + '.clusterStyle')) {\n    const sourceOptions: ClusterDataSourceOptions & QueryableDataSourceOptions =\n      {\n        distance,\n        type: 'cluster',\n        queryable: true\n      };\n    source = new ClusterDataSource(\n      Object.assign(sourceOptions, imposedSourceOptions)\n    );\n    source.ol.source.addFeatures(olFeatures);\n  } else if (styleListService.getStyleList(layerTitle.toString())) {\n    const sourceOptions: FeatureDataSourceOptions & QueryableDataSourceOptions =\n      {\n        type: 'vector',\n        queryable: true\n      };\n    source = new FeatureDataSource(\n      Object.assign(sourceOptions, imposedSourceOptions)\n    );\n    source.ol.addFeatures(olFeatures);\n  } else if (\n    styleListService.getStyleList('default.clusterStyle') &&\n    features[0].geometry.type === 'Point'\n  ) {\n    const sourceOptions: ClusterDataSourceOptions & QueryableDataSourceOptions =\n      {\n        distance,\n        type: 'cluster',\n        queryable: true\n      };\n    source = new ClusterDataSource(\n      Object.assign(sourceOptions, imposedSourceOptions)\n    );\n    source.ol.source.addFeatures(olFeatures);\n  } else {\n    const sourceOptions: FeatureDataSourceOptions & QueryableDataSourceOptions =\n      {\n        type: 'vector',\n        queryable: true\n      };\n    source = new FeatureDataSource(\n      Object.assign(sourceOptions, imposedSourceOptions)\n    );\n    source.ol.addFeatures(olFeatures);\n  }\n\n  const layer = new VectorLayer(\n    Object.assign(\n      {\n        title: layerTitle,\n        id: layerId || uuid(),\n        isIgoInternalLayer: true,\n        source,\n        style\n      },\n      imposedLayerOptions\n    )\n  );\n  map.layerController.add(layer);\n  if (zoomTo) {\n    moveToOlFeatures(map.viewController, olFeatures);\n  }\n  return layer;\n}\n\nfunction padTo2Digits(num) {\n  return num.toString().padStart(2, '0');\n}\n\nexport function handleFileImportSuccess(\n  file: File,\n  features: Feature[],\n  map: IgoMap,\n  contextUri: string,\n  messageService: MessageService,\n  layerService: LayerService,\n  confirmDialogService?: ConfirmDialogService,\n  styleListService?: StyleListService,\n  styleService?: StyleService\n) {\n  if (features.length === 0) {\n    handleNothingToImportError(file, messageService);\n    return;\n  }\n\n  let layerTitle = computeLayerTitleFromFile(file);\n\n  const obs$ = confirmDialogService\n    ? confirmDialogService.open('igo.geo.import.promptStoreToIdb')\n    : of(false);\n\n  obs$.pipe(first()).subscribe((confirm) => {\n    const d = new Date();\n    const dformat =\n      [\n        d.getFullYear(),\n        padTo2Digits(d.getMonth() + 1),\n        padTo2Digits(d.getDate())\n      ].join('/') +\n      ' ' +\n      [padTo2Digits(d.getHours()), padTo2Digits(d.getMinutes())].join(':');\n\n    layerTitle = confirm ? `${layerTitle} (${dformat})` : layerTitle;\n    if (!styleListService) {\n      addLayerAndFeaturesToMap(\n        features,\n        map,\n        contextUri,\n        layerTitle,\n        layerService,\n        confirm\n      );\n    } else {\n      addLayerAndFeaturesStyledToMap(\n        features,\n        map,\n        layerTitle,\n        styleListService,\n        styleService\n      );\n    }\n\n    messageService.success(\n      'igo.geo.dropGeoFile.success.text',\n      'igo.geo.dropGeoFile.success.title',\n      undefined,\n      { value: layerTitle }\n    );\n  });\n}\n\nexport function handleFileImportError(\n  file: File,\n  error: Error,\n  messageService: MessageService,\n  sizeMb?: number\n) {\n  sizeMb = sizeMb ? sizeMb : 30;\n  const errMapping = {\n    'Invalid file': handleInvalidFileImportError,\n    'File is too large': handleSizeFileImportError,\n    'Failed to read file': handleUnreadbleFileImportError,\n    'Invalid SRS definition': handleSRSImportError,\n    'Error 500 with OGRE': handleOgreServerImportError\n  };\n  errMapping[error.message](file, error, messageService, sizeMb);\n}\n\nexport function handleInvalidFileImportError(\n  file: File,\n  error: Error,\n  messageService: MessageService\n) {\n  messageService.error(\n    'igo.geo.dropGeoFile.invalid.text',\n    'igo.geo.dropGeoFile.invalid.title',\n    undefined,\n    {\n      value: file.name,\n      mimeType: file.type\n    }\n  );\n}\n\nexport function handleUnreadbleFileImportError(\n  file: File,\n  error: Error,\n  messageService: MessageService\n) {\n  messageService.error(\n    'igo.geo.dropGeoFile.unreadable.text',\n    'igo.geo.dropGeoFile.unreadable.title',\n    undefined,\n    { value: file.name }\n  );\n}\n\nexport function handleSizeFileImportError(\n  file: File,\n  error: Error,\n  messageService: MessageService,\n  sizeMb: number\n) {\n  messageService.error(\n    'igo.geo.dropGeoFile.tooLarge.text',\n    'igo.geo.dropGeoFile.tooLarge.title',\n    undefined,\n    {\n      value: file.name,\n      size: sizeMb\n    }\n  );\n}\n\nexport function handleNothingToImportError(\n  file: File,\n  messageService: MessageService\n) {\n  messageService.error(\n    'igo.geo.dropGeoFile.empty.text',\n    'igo.geo.dropGeoFile.empty.title',\n    undefined,\n    {\n      value: file.name,\n      mimeType: file.type\n    }\n  );\n}\n\nexport function handleSRSImportError(\n  file: File,\n  messageService: MessageService\n) {\n  messageService.error(\n    'igo.geo.dropGeoFile.invalidSRS.text',\n    'igo.geo.dropGeoFile.invalidSRS.title',\n    undefined,\n    {\n      value: file.name,\n      mimeType: file.type\n    }\n  );\n}\n\nexport function handleOgreServerImportError(\n  file: File,\n  error: Error,\n  messageService: MessageService\n) {\n  messageService.error(\n    'igo.geo.dropGeoFile.ogreServer.text',\n    'igo.geo.dropGeoFile.ogreServer.title'\n  );\n}\n\nexport function getFileExtension(file: File): string {\n  return file.name.split('.').pop().toLowerCase();\n}\n\nexport function computeLayerTitleFromFile(file: File): string {\n  return file.name.substr(0, file.name.lastIndexOf('.'));\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { uuid } from '@igo2/utils';\n\nimport OlFeature from 'ol/Feature';\nimport * as olformat from 'ol/format';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\n\nimport { Observable, Observer } from 'rxjs';\n\nimport { Feature } from '../../feature/shared/feature.interfaces';\nimport {\n  ImportInvalidFileError,\n  ImportOgreServerError,\n  ImportSRSError,\n  ImportSizeError,\n  ImportUnreadableFileError\n} from './import.errors';\nimport { ImportExportServiceOptions } from './import.interface';\nimport { computeLayerTitleFromFile, getFileExtension } from './import.utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ImportService {\n  static formatExtensionAssociation = {\n    GeoJSON: 'geojson',\n    GML: 'gml',\n    GPX: 'gpx',\n    KML: 'kml',\n    Shapefile: 'zip'\n  };\n\n  static allowedMimeTypes = [\n    'application/gml+xml',\n    'application/vnd.google-earth.kml+xml',\n    'application/gpx+xml',\n    'application/json'\n  ];\n\n  static allowedZipMimeTypes = [\n    'application/zip',\n    'application/x-zip-compressed',\n    'application/x-zip'\n  ];\n\n  static allowedExtensions = ['geojson', 'kml', 'gpx', 'json', 'gml', 'zip'];\n\n  private ogreUrl: string;\n  private clientSideFileSizeMax: number;\n\n  constructor(\n    private http: HttpClient,\n    private config: ConfigService\n  ) {\n    const importConfig = this.config.getConfig(\n      'importExport'\n    ) as ImportExportServiceOptions;\n    this.ogreUrl = importConfig.url;\n    const configFileSizeMb = importConfig.clientSideFileSizeMaxMb;\n    this.clientSideFileSizeMax =\n      (configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);\n    if (importConfig.formats) {\n      ImportService.allowedExtensions = importConfig.formats\n        .map((format) => ImportService.formatExtensionAssociation[format])\n        .filter((e) => e);\n      if (ImportService.allowedExtensions.includes('geojson')) {\n        ImportService.allowedExtensions.push('json');\n      }\n    }\n  }\n\n  import(\n    file: File,\n    projectionIn = 'EPSG:4326',\n    projectionOut = 'EPSG:4326'\n  ): Observable<Feature[]> {\n    return this.importAsync(file, projectionIn, projectionOut);\n  }\n\n  private getFileImporter(\n    file: File\n  ): (\n    file: File,\n    observer: Observer<Feature[]>,\n    projectionIn: string,\n    projectionOut: string\n  ) => void {\n    const extension = getFileExtension(file);\n    const allowedExtensions = ImportService.allowedExtensions;\n    let zipMimeTypes = [];\n    if (allowedExtensions.includes('zip')) {\n      zipMimeTypes = ImportService.allowedZipMimeTypes;\n    }\n    const mimeType = file.type;\n    const allowedMimeTypes = [\n      ...ImportService.allowedMimeTypes,\n      ...zipMimeTypes\n    ];\n\n    if (\n      allowedMimeTypes.indexOf(mimeType) < 0 &&\n      allowedExtensions.indexOf(extension) < 0\n    ) {\n      return undefined;\n    } else if (\n      mimeType === 'application/json' ||\n      ['json', 'geojson', 'kml', 'gpx'].indexOf(extension) >= 0\n    ) {\n      return this.importFile;\n    } else if (this.ogreUrl !== undefined) {\n      return this.importFileWithOgre;\n    }\n\n    return undefined;\n  }\n\n  private importAsync(\n    file: File,\n    projectionIn: string,\n    projectionOut: string\n  ): Observable<Feature[]> {\n    const doImport = (observer: Observer<Feature[]>) => {\n      if (file.size >= this.clientSideFileSizeMax) {\n        observer.error(new ImportSizeError());\n        return;\n      }\n      const importer = this.getFileImporter(file);\n      if (importer === undefined) {\n        observer.error(new ImportInvalidFileError());\n        return;\n      }\n\n      importer.call(this, file, observer, projectionIn, projectionOut);\n    };\n\n    return new Observable(doImport);\n  }\n\n  private importFile(\n    file: File,\n    observer: Observer<Feature[]>,\n    projectionIn: string,\n    projectionOut: string\n  ) {\n    const reader = new FileReader();\n\n    reader.onload = (event: any) => {\n      try {\n        const features = this.parseFeaturesFromFile(\n          file,\n          event.target.result,\n          projectionIn,\n          projectionOut\n        );\n        observer.next(features);\n      } catch {\n        observer.error(new ImportUnreadableFileError());\n      }\n\n      observer.complete();\n    };\n\n    reader.onerror = () => {\n      observer.error(new ImportUnreadableFileError());\n    };\n\n    reader.readAsText(file, 'UTF-8');\n  }\n\n  private importFileWithOgre(\n    file: File,\n    observer: Observer<Feature[]>,\n    projectionIn: string,\n    projectionOut: string\n  ) {\n    const url = `${this.ogreUrl}/convert`;\n    const formData = new FormData();\n    formData.append('upload', file);\n    formData.append('sourceSrs', projectionIn);\n    formData.append('targetSrs', projectionOut);\n    formData.append('formatOutput', 'GEOJSON');\n    formData.append('skipFailures', '');\n\n    this.http.post(url, formData, { headers: new HttpHeaders() }).subscribe(\n      (response: { errors?: string[] } | object | null) => {\n        if (response === null) {\n          observer.error(new ImportUnreadableFileError());\n          return;\n        }\n\n        const errors = (response as any).errors || [];\n        if (errors.length > 0) {\n          observer.error(new ImportUnreadableFileError());\n        } else {\n          const features = this.parseFeaturesFromGeoJSON(\n            file,\n            response,\n            projectionOut\n          );\n          observer.next(features);\n          observer.complete();\n        }\n      },\n      (error: any) => {\n        error.error.caught = true;\n        const errMsg = error.error.msg || '';\n        if (errMsg === 'No valid files found') {\n          observer.error(new ImportInvalidFileError());\n        } else if (\n          errMsg &&\n          errMsg.startWith('ERROR 1: Failed to process SRS definition')\n        ) {\n          observer.error(new ImportSRSError());\n        } else if (error.status === 500) {\n          observer.error(new ImportOgreServerError());\n        } else {\n          observer.error(new ImportUnreadableFileError());\n        }\n      }\n    );\n  }\n\n  private parseFeaturesFromFile(\n    file: File,\n    data: string,\n    projectionIn: string,\n    projectionOut: string\n  ): Feature[] {\n    const extension = getFileExtension(file);\n    const mimeType = file.type;\n\n    const GeoJSON = new olformat.GeoJSON();\n\n    let format;\n    if (mimeType === 'application/vnd.google-earth.kml+xml') {\n      format = new olformat.KML();\n    } else if (mimeType === 'application/gml+xml') {\n      format = new olformat.GML();\n    } else if (mimeType === 'application/gpx+xml') {\n      format = new olformat.GPX();\n    } else {\n      switch (extension) {\n        case 'kml':\n          format = new olformat.KML();\n          break;\n        case 'gpx':\n          format = new olformat.GPX();\n          break;\n        case 'gml':\n          format = new olformat.GML();\n          break;\n        default:\n          format = GeoJSON;\n          break;\n      }\n    }\n\n    const olFeatures = format.readFeatures(data, {\n      dataProjection: projectionIn,\n      featureProjection: projectionOut\n    });\n    const features = olFeatures.map((olFeature: OlFeature<OlGeometry>) => {\n      return Object.assign(GeoJSON.writeFeatureObject(olFeature), {\n        projection: projectionOut,\n        meta: {\n          id: uuid(),\n          title: computeLayerTitleFromFile(file)\n        }\n      });\n    });\n\n    return features;\n  }\n\n  private parseFeaturesFromGeoJSON(\n    file: File,\n    data: object,\n    projectionOut: string\n  ): Feature[] {\n    const olFormat = new olformat.GeoJSON();\n    const olFeatures = olFormat.readFeatures(data);\n    const features = olFeatures.map((olFeature: OlFeature<OlGeometry>) => {\n      return Object.assign(olFormat.writeFeatureObject(olFeature), {\n        projection: projectionOut,\n        meta: {\n          id: uuid(),\n          title: computeLayerTitleFromFile(file)\n        }\n      });\n    });\n\n    return features as Feature[];\n  }\n}\n","import { AsyncPipe, KeyValuePipe, NgClass, NgFor, NgIf } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport {\n  FormControl,\n  FormGroup,\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder,\n  UntypedFormGroup,\n  Validators\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n  MatSlideToggleChange,\n  MatSlideToggleModule\n} from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ConfirmDialogService } from '@igo2/common/confirm-dialog';\nimport { CustomHtmlComponent } from '@igo2/common/custom-html';\nimport { EntityRecord } from '@igo2/common/entity';\nimport { SpinnerComponent } from '@igo2/common/spinner';\nimport type { WorkspaceStore } from '@igo2/common/workspace';\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { StorageService } from '@igo2/core/storage';\n\nimport type { default as OlFeature } from 'ol/Feature';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport olPoint from 'ol/geom/Point';\n\nimport { BehaviorSubject, Subscription, lastValueFrom } from 'rxjs';\nimport { skipWhile } from 'rxjs/operators';\n\nimport { DataSourceOptions } from '../../datasource/shared/datasources/datasource.interface';\nimport { DownloadService } from '../../download/shared/download.service';\nimport { Feature } from '../../feature/shared/feature.interfaces';\nimport { isLayerGroup, isLayerItem } from '../../layer';\nimport { LayerService } from '../../layer/shared/layer.service';\nimport { AnyLayer } from '../../layer/shared/layers/any-layer';\nimport { Layer } from '../../layer/shared/layers/layer';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport { InputProjections, ProjectionsLimitationsOptions } from '../../map/';\nimport { computeProjectionsConstraints } from '../../map/shared';\nimport { IgoMap } from '../../map/shared/map';\nimport { StyleListService } from '../../style/style-list/style-list.service';\nimport { StyleService } from '../../style/style-service/style.service';\nimport { ExportOptions, GeometryCollection } from '../shared/export.interface';\nimport { ExportService } from '../shared/export.service';\nimport {\n  AnyExportFormat,\n  CsvSeparator,\n  ExportFormat,\n  ExportFormatLegacy\n} from '../shared/export.type';\nimport {\n  handleFileExportError,\n  handleFileExportSuccess,\n  isCsvExport\n} from '../shared/export.utils';\nimport { ImportExportServiceOptions } from '../shared/import.interface';\nimport { ImportService } from '../shared/import.service';\nimport {\n  handleFileImportError,\n  handleFileImportSuccess\n} from '../shared/import.utils';\n\ntype SelectMode = 'import' | 'export';\n@Component({\n  selector: 'igo-import-export',\n  templateUrl: './import-export.component.html',\n  styleUrls: ['./import-export.component.scss'],\n  standalone: true,\n  imports: [\n    MatButtonToggleModule,\n    NgIf,\n    FormsModule,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatSelectModule,\n    NgFor,\n    MatOptionModule,\n    MatTooltipModule,\n    MatButtonModule,\n    SpinnerComponent,\n    CustomHtmlComponent,\n    NgClass,\n    MatSlideToggleModule,\n    MatInputModule,\n    AsyncPipe,\n    KeyValuePipe,\n    IgoLanguageModule\n  ],\n  providers: [ConfirmDialogService]\n})\nexport class ImportExportComponent implements OnDestroy, OnInit {\n  public form: UntypedFormGroup;\n  public importForm: UntypedFormGroup;\n  public formats$ = new BehaviorSubject<ExportFormat[]>(undefined);\n  public exportableLayers$ = new BehaviorSubject<Layer[]>([]);\n  public loading$ = new BehaviorSubject(false);\n  public forceNaming = false;\n  public controlFormat = 'format';\n\n  csvSeparators = CsvSeparator;\n  isCsvExport = isCsvExport;\n\n  private layers$$: Subscription;\n  private exportableLayers$$: Subscription;\n  private formats$$: Subscription;\n  private formLayer$$: Subscription;\n  private exportOptions$$: Subscription;\n\n  public importHtmlClarifications: string;\n  public exportHtmlClarifications: string;\n\n  private espgCodeRegex = new RegExp('^\\\\d{4,6}');\n  private clientSideFileSizeMax: number;\n  public fileSizeMb: number;\n\n  public projections$ = new BehaviorSubject<InputProjections[]>([]);\n  private projectionsConstraints: ProjectionsLimitationsOptions;\n\n  public popupChecked = false;\n  private configFormats: AnyExportFormat[];\n\n  private previousLayerSpecs$ = new BehaviorSubject<\n    {\n      id: string;\n      visible: boolean;\n      opacity: number;\n      queryable: boolean;\n    }[]\n  >(undefined);\n\n  @Input() selectFirstProj = false;\n\n  @Input() map: IgoMap;\n\n  @Input() contextUri: string;\n\n  private _projectionsLimitations: ProjectionsLimitationsOptions = {};\n  @Input()\n  set projectionsLimitations(value: ProjectionsLimitationsOptions) {\n    this._projectionsLimitations = value;\n    this.computeProjections();\n  }\n  get projectionsLimitations(): ProjectionsLimitationsOptions {\n    return this._projectionsLimitations || {};\n  }\n\n  /**\n   * Store that holds the available workspaces.\n   */\n  @Input() store: WorkspaceStore;\n\n  @Input() selectedMode: SelectMode = 'import';\n\n  @Output() selectMode = new EventEmitter<SelectMode>();\n\n  @Input() exportOptions$ = new BehaviorSubject<ExportOptions>(undefined);\n\n  @Output() exportOptionsChange = new EventEmitter<ExportOptions>();\n\n  get layers() {\n    return this.form.get('layers').value;\n  }\n  set layers(value) {\n    this.form.patchValue({ layers: value });\n  }\n\n  get inputProj() {\n    return this.importForm.get('inputProj').value;\n  }\n  set inputProj(value) {\n    this.importForm.patchValue({ inputProj: value });\n  }\n\n  get popupAllowed(): boolean {\n    return (\n      (this.storageService.get('importExportPopupAllowed') as boolean) || false\n    );\n  }\n\n  set popupAllowed(value: boolean) {\n    this.storageService.set('importExportPopupAllowed', value);\n  }\n\n  constructor(\n    private importService: ImportService,\n    private exportService: ExportService,\n    private languageService: LanguageService,\n    private messageService: MessageService,\n    private styleListService: StyleListService,\n    private styleService: StyleService,\n    private formBuilder: UntypedFormBuilder,\n    private config: ConfigService,\n    private storageService: StorageService,\n    private downloadService: DownloadService,\n    private layerService: LayerService,\n    private confirmDialogService: ConfirmDialogService\n  ) {\n    this.loadConfig();\n    this.buildForm();\n    this.computeProjections();\n    this.importHtmlClarifications = this.languageService.translate.instant(\n      'igo.geo.importExportForm.importHtmlClarifications'\n    );\n    this.exportHtmlClarifications = this.languageService.translate.instant(\n      'igo.geo.importExportForm.exportHtmlClarifications'\n    );\n  }\n\n  ngOnInit() {\n    this.layers$$ = this.map.layerController.all$.subscribe((layers) => {\n      const exportableLayers = layers.filter((layer) => {\n        if (isLayerGroup(layer)) {\n          return false;\n        }\n        return (\n          (layer instanceof VectorLayer && layer.exportable === true) ||\n          (layer.dataSource.options.download &&\n            layer.dataSource.options.download.url)\n        );\n      });\n      this.exportableLayers$.next(exportableLayers as Layer[]);\n    });\n    const configFileSizeMb = this.config.getConfig(\n      'importExport.clientSideFileSizeMaxMb'\n    );\n    this.clientSideFileSizeMax =\n      (configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);\n    this.fileSizeMb = this.clientSideFileSizeMax / Math.pow(1024, 2);\n\n    this.exportOptions$$ = this.exportOptions$\n      .pipe(skipWhile((exportOptions) => !exportOptions))\n      .subscribe((exportOptions) => {\n        this.form.patchValue(exportOptions, { emitEvent: true });\n        if (exportOptions.layers) {\n          this.computeFormats(\n            exportOptions.layers.map((l) => this.map.layerController.getById(l))\n          );\n        }\n      });\n    this.formLayer$$ = this.form\n      .get('format')\n      .valueChanges.subscribe((format) => {\n        if (\n          !this.popupChecked &&\n          this.form.get('layers').value?.length > 1 &&\n          this.isOgreOrLink(format)\n        ) {\n          if (!this.handlePopup(true)) {\n            this.form.patchValue({ format: undefined }, { emitEvent: false });\n          }\n        }\n      });\n\n    this.formLayer$$ = this.form\n      .get('layers')\n      .valueChanges.subscribe((layersId) => {\n        this.handlePreviousLayerSpecs();\n        const selectedLayers =\n          layersId instanceof Array ? layersId : [layersId];\n        this.form.patchValue({ layers: selectedLayers }, { emitEvent: false });\n        const layers = selectedLayers.map((l) =>\n          this.map.layerController.getById(l)\n        );\n        this.computeFormats(layers);\n\n        if (this.formats$.value.indexOf(this.form.value.format) === -1) {\n          this.form.patchValue({ format: undefined });\n        }\n\n        this.loading$.next(true);\n        const previousSpecs: {\n          id: string;\n          visible: boolean;\n          opacity: number;\n          queryable: boolean;\n        }[] = [];\n        layers.forEach((layer) => {\n          if (\n            layer instanceof VectorLayer &&\n            layer.dataSource.ol.getFeatures().length === 0\n          ) {\n            previousSpecs.push({\n              id: layer.id,\n              visible: layer.visible,\n              opacity: layer.opacity,\n              queryable: (layer as any).queryable\n            });\n            layer.opacity = 0;\n            layer.visible = true;\n          }\n        });\n\n        this.previousLayerSpecs$.next(previousSpecs);\n        setTimeout(() => {\n          this.loading$.next(false);\n        }, 500);\n      });\n\n    this.formats$$ = this.formats$\n      .pipe(skipWhile((formats) => !formats))\n      .subscribe((formats) => {\n        if (formats.length === 1) {\n          this.form.patchValue({ format: formats[0] });\n        }\n      });\n\n    this.exportableLayers$$ = this.exportableLayers$\n      .pipe(skipWhile((layers) => !layers))\n      .subscribe((layers) => {\n        if (layers.length === 1) {\n          this.form.patchValue({ layers: layers[0].id });\n        }\n      });\n\n    if (this.selectFirstProj) {\n      if (this.projections$.value.length === 0) {\n        this.importForm.patchValue({\n          inputProj: {\n            translateKey: 'nad83',\n            alias: 'NAD83',\n            code: 'EPSG:4326',\n            zone: ''\n          }\n        });\n      } else {\n        this.importForm.patchValue({ inputProj: this.projections$.value[0] });\n      }\n    } else {\n      this.importForm.patchValue({ inputProj: undefined });\n    }\n  }\n\n  private computeProjections() {\n    this.projectionsConstraints = computeProjectionsConstraints(\n      this.projectionsLimitations\n    );\n    const projections: InputProjections[] = [];\n\n    if (this.projectionsConstraints.nad83) {\n      projections.push({\n        translateKey: 'nad83',\n        alias: 'NAD83',\n        code: 'EPSG:4269',\n        zone: '',\n        extent: undefined,\n        def: undefined\n      });\n    }\n    if (this.projectionsConstraints.wgs84) {\n      projections.push({\n        translateKey: 'wgs84',\n        alias: 'WGS84',\n        code: 'EPSG:4326',\n        zone: '',\n        extent: undefined,\n        def: undefined\n      });\n    }\n    if (this.projectionsConstraints.webMercator) {\n      projections.push({\n        translateKey: 'webMercator',\n        alias: 'Web Mercator',\n        code: 'EPSG:3857',\n        zone: '',\n        extent: undefined,\n        def: undefined\n      });\n    }\n\n    if (this.projectionsConstraints.mtm) {\n      // all mtm zones\n      const minZone = this.projectionsConstraints.mtmZone.minZone;\n      const maxZone = this.projectionsConstraints.mtmZone.maxZone;\n\n      for (let mtmZone = minZone; mtmZone <= maxZone; mtmZone++) {\n        const code =\n          mtmZone < 10 ? `EPSG:3218${mtmZone}` : `EPSG:321${80 + mtmZone}`;\n        projections.push({\n          translateKey: 'mtm',\n          alias: `MTM ${mtmZone}`,\n          code,\n          zone: `${mtmZone}`,\n          extent: undefined,\n          def: undefined\n        });\n      }\n    }\n\n    if (this.projectionsConstraints.utm) {\n      // all utm zones\n      const minZone = this.projectionsConstraints.utmZone.minZone;\n      const maxZone = this.projectionsConstraints.utmZone.maxZone;\n\n      for (let utmZone = minZone; utmZone <= maxZone; utmZone++) {\n        const code =\n          utmZone < 10 ? `EPSG:3260${utmZone}` : `EPSG:326${utmZone}`;\n        projections.push({\n          translateKey: 'utm',\n          alias: `UTM ${utmZone}`,\n          code,\n          zone: `${utmZone}`,\n          extent: undefined,\n          def: undefined\n        });\n      }\n    }\n\n    let configProjection: InputProjections[] = [];\n    if (this.projectionsConstraints.projFromConfig) {\n      configProjection = (this.config.getConfig('projections') ||\n        []) as InputProjections[];\n    }\n\n    this.projections$.next(configProjection.concat(projections));\n  }\n\n  public getLayerTitleById(id): string {\n    return this.map.layerController.getById(id)?.title;\n  }\n\n  layerHasSelectedFeatures(layer: Layer): boolean {\n    const wksFromLayer = this.exportService.getWorkspaceByLayerId(\n      layer.id,\n      this.store\n    );\n    if (wksFromLayer) {\n      const recs = wksFromLayer.entityStore.stateView.firstBy(\n        (record: EntityRecord<Feature>) => {\n          return record.state.selected === true;\n        }\n      );\n      return recs ? true : false;\n    }\n  }\n\n  public onlySelected(event: MatSlideToggleChange, id: string) {\n    let layersWithSelection = this.form.value.layersWithSelection;\n    if (event.checked) {\n      layersWithSelection.push(id);\n    } else {\n      layersWithSelection = layersWithSelection.filter(\n        (layerId) => layerId !== id\n      );\n    }\n    this.form.patchValue({ layersWithSelection });\n  }\n\n  public onlySelectedClick(event, id: string) {\n    if (this.form.value.layers.find((layerId) => layerId === id)) {\n      event.stopPropagation();\n    }\n  }\n\n  public inLayersIdToExportSelectionOnly(layer: Layer): boolean {\n    return this.form.value.layersWithSelection.find(\n      (layerId) => layerId === layer.id\n    )\n      ? true\n      : false;\n  }\n\n  ngOnDestroy() {\n    this.layers$$.unsubscribe();\n    this.exportableLayers$$.unsubscribe();\n    this.formats$$.unsubscribe();\n    this.formLayer$$.unsubscribe();\n    if (this.exportOptions$$) {\n      this.exportOptions$$.unsubscribe();\n    }\n    this.exportOptionsChange.emit(this.form.value);\n    this.handlePreviousLayerSpecs();\n  }\n\n  private handlePreviousLayerSpecs() {\n    const previousSpecs = this.previousLayerSpecs$.value;\n    if (previousSpecs && previousSpecs.length) {\n      previousSpecs.forEach((specs) => {\n        const previousLayer = this.map.layerController.getById(specs.id);\n        previousLayer.visible = specs.visible;\n        previousLayer.opacity = specs.opacity;\n        (previousLayer as any).queryable = specs.queryable;\n      });\n    }\n    this.previousLayerSpecs$.next(undefined);\n  }\n\n  importFiles(files: File[]) {\n    let inputProj = this.inputProj.code;\n    if (this.espgCodeRegex.test(inputProj)) {\n      inputProj = `EPSG:${inputProj}`;\n    }\n\n    this.loading$.next(true);\n    for (const file of files) {\n      this.importService.import(file, inputProj).subscribe(\n        (features: Feature[]) => this.onFileImportSuccess(file, features),\n        (error: Error) => this.onFileImportError(file, error),\n        () => {\n          this.loading$.next(false);\n        }\n      );\n    }\n  }\n\n  handlePopup(preCheck = true): boolean {\n    const p1 = window.open('', 'popup', 'width=1, height=1');\n    p1.close();\n    const p2 = window.open('', 'popup', 'width=1, height=1');\n    if (!p2 || p2.closed || typeof p2.closed === 'undefined' || p2 === null) {\n      this.onPopupBlockedError(preCheck);\n      this.popupAllowed = false;\n    } else {\n      p2.close();\n      this.popupAllowed = true;\n      this.popupChecked = true;\n    }\n    return this.popupAllowed;\n  }\n\n  private isOgreOrLink(format: AnyExportFormat | null): boolean {\n    const ogreFormats = Object.keys(ExportService.ogreFormats);\n    return ogreFormats.indexOf(format) >= 0 || format === 'URL';\n  }\n\n  async handleExportFormSubmit(data: ExportOptions) {\n    this.loading$.next(true);\n\n    if (\n      !this.popupChecked &&\n      data.layers.length > 1 &&\n      this.isOgreOrLink(data.format) &&\n      !this.popupAllowed\n    ) {\n      this.handlePopup();\n    }\n\n    const isCSV = isCsvExport(data.format);\n\n    if (data.format === 'Excel') {\n      try {\n        await this.exportService.exportExcel(this.map, this.store, data);\n        this.loading$.next(false);\n        return this.onFileExportSuccess();\n      } catch (error) {\n        this.onFileExportError(error);\n        throw error;\n      }\n    }\n\n    let fileName = '';\n\n    for (const layerId of data.layers) {\n      this.loading$.next(true);\n      const layer = this.map.layerController.getById(layerId);\n      if (isLayerGroup(layer)) {\n        continue;\n      }\n      const features = await lastValueFrom(\n        this.exportService.getFeatures(this.map, layer, data, this.store)\n      ).catch((error) => {\n        this.onFileExportError(error);\n        throw error;\n      });\n      const geomTypes = this.exportService.getGeomTypes(features, data.format);\n      if (!isCSV || !data.combineLayers || data.layers.length === 1) {\n        fileName = layer.title;\n        if (data.name) {\n          fileName = data.name;\n        }\n      } else {\n        fileName = this.languageService.translate.instant(\n          'igo.geo.export.combinedLayers'\n        );\n      }\n\n      if (data.format === 'URL' && isLayerItem(layer)) {\n        this.handleUrlExport(layer);\n      }\n\n      if (data.format === 'GPX') {\n        this.validateGpxExport(geomTypes);\n      }\n\n      if (geomTypes.length === 0) {\n        this.loading$.next(false);\n        this.messageService.error(\n          'igo.geo.export.nothing.text',\n          'igo.geo.export.nothing.title',\n          { timeOut: 20000 }\n        );\n      }\n\n      if (!isCSV || !data.combineLayers) {\n        geomTypes.forEach((geomType) => {\n          if (geomType.type) {\n            fileName += geomType.type;\n          }\n          this.handleExport(geomType.features, data, fileName);\n        });\n      }\n      this.loading$.next(false);\n    }\n\n    if (isCSV) {\n      this.handleCsvExport(data, fileName);\n    }\n  }\n\n  private handleUrlExport(layer: Layer): void {\n    const { download = null }: DataSourceOptions = layer.dataSource.options;\n    if (download?.url || download?.dynamicUrl) {\n      setTimeout(() => {\n        const url = download.url ?? download.dynamicUrl;\n        url.match(/service=wfs/gi)\n          ? this.downloadService.open(layer)\n          : window.open(url, '_blank');\n        this.loading$.next(false);\n      }, 500);\n      return;\n    }\n  }\n\n  private validateGpxExport(geomTypes: GeometryCollection[]): void {\n    const gpxFeatureCnt = geomTypes.length;\n    geomTypes = geomTypes.filter((geomType) =>\n      ['LineString', 'Point'].includes(geomType.type)\n    );\n    const gpxFeatureCntPointOrPoly = geomTypes.length;\n    if (gpxFeatureCnt > gpxFeatureCntPointOrPoly) {\n      this.messageService.error(\n        'igo.geo.export.gpx.error.poly.text',\n        'igo.geo.export.gpx.error.poly.title',\n        { timeOut: 20000 }\n      );\n    }\n  }\n\n  private async handleCsvExport(data: ExportOptions, fileName: string) {\n    const featuresCSV = [];\n\n    if (data.combineLayers) {\n      let previousFeature = undefined;\n      const geomTypes = await this.getAllLayerGeomTypes(data);\n      geomTypes.forEach((geomType) => {\n        geomType.features.forEach((currentFeature) => {\n          if (data.separator) {\n            if (previousFeature) {\n              if (\n                currentFeature.get('_featureStore').layer.options.title !==\n                previousFeature.get('_featureStore').layer.options.title\n              ) {\n                const titleEmptyRows = this.createTitleEmptyRows(\n                  previousFeature,\n                  currentFeature\n                );\n                featuresCSV.push(titleEmptyRows[2]);\n                featuresCSV.push(titleEmptyRows[0]);\n                featuresCSV.push(titleEmptyRows[1]);\n              }\n            } else {\n              const titleEmptyRows = this.createTitleEmptyRows(\n                currentFeature,\n                currentFeature\n              );\n              featuresCSV.push(titleEmptyRows[0]);\n            }\n          }\n          featuresCSV.push(currentFeature);\n          previousFeature = currentFeature;\n        });\n      });\n    }\n\n    this.handleExport(featuresCSV, data, fileName);\n  }\n\n  private handleExport(\n    features: OlFeature<OlGeometry>[],\n    options: ExportOptions,\n    fileName: string\n  ) {\n    this.exportService\n      .export(features, options, fileName, this.map.projectionCode)\n      .subscribe({\n        error: (error: Error) => this.onFileExportError(error),\n        complete: () => {\n          this.onFileExportSuccess();\n\n          features.forEach((feature) => {\n            this.circleToPoint(feature);\n          });\n\n          this.loading$.next(false);\n        }\n      });\n  }\n\n  private async getAllLayerGeomTypes(\n    data: ExportOptions\n  ): Promise<GeometryCollection[]> {\n    return data.layers.reduce(async (typesPromise, layerId) => {\n      const types = await typesPromise;\n      const layer = this.map.layerController.getById(layerId);\n      if (isLayerGroup(layer)) {\n        return typesPromise;\n      }\n      const features = await lastValueFrom(\n        this.exportService.getFeatures(this.map, layer, data, this.store)\n      ).catch((error) => {\n        this.onFileExportError(error);\n        throw error;\n      });\n      const geomTypes = this.exportService.getGeomTypes(features, data.format);\n      return types.concat(geomTypes);\n    }, Promise.resolve([]));\n  }\n\n  private createTitleEmptyRows(previousFeature, currentFeature) {\n    const titleRow = currentFeature.clone();\n    const headerRow = currentFeature.clone();\n    const emptyRow = currentFeature.clone();\n    const previousFeatureKeys: string[] = previousFeature.getKeys();\n    let firstKeyPrevious = '';\n    for (const key in previousFeatureKeys) {\n      if (previousFeatureKeys[key] !== 'geometry') {\n        firstKeyPrevious = previousFeatureKeys[key];\n        break;\n      }\n    }\n\n    const currentFeatureKeys: string[] = currentFeature.getKeys();\n    let firstKeyCurrent = '';\n    for (const key in currentFeatureKeys) {\n      if (currentFeatureKeys[key] !== 'geometry') {\n        firstKeyCurrent = currentFeatureKeys[key];\n        break;\n      }\n    }\n    const allKeys: string[] = currentFeature.getKeys();\n    previousFeatureKeys.forEach((previousKey) => {\n      if (allKeys.includes(previousKey) && previousKey !== firstKeyPrevious) {\n        allKeys.push(previousKey);\n      }\n    });\n    allKeys.unshift(firstKeyPrevious);\n\n    let firstKeyAll = '';\n    for (const key in allKeys) {\n      if (allKeys[key] !== 'geometry') {\n        firstKeyAll = allKeys[key];\n        break;\n      }\n    }\n    allKeys.forEach((key) => {\n      const sameKeys: boolean =\n        previousFeatureKeys.length === currentFeatureKeys.length &&\n        previousFeatureKeys.every(\n          (value, index) => value === currentFeatureKeys[index]\n        );\n      if (key === firstKeyAll && !sameKeys) {\n        titleRow.set(\n          key,\n          currentFeature.get('_featureStore').layer.options.title +\n            ' ===============>',\n          true\n        );\n        headerRow.set(key, key, true);\n        emptyRow.unset(key, true);\n      } else if (key === firstKeyAll && sameKeys) {\n        titleRow.set(\n          key,\n          currentFeature.get('_featureStore').layer.options.title,\n          true\n        );\n        headerRow.set(key, key, true);\n        emptyRow.unset(key, true);\n      } else if (key === firstKeyCurrent) {\n        titleRow.set(\n          key,\n          currentFeature.get('_featureStore').layer.options.title,\n          true\n        );\n        headerRow.set(key, key, true);\n        emptyRow.unset(key, true);\n      } else if (key !== 'geometry') {\n        titleRow.unset(key, true);\n        headerRow.set(key, key, true);\n        emptyRow.unset(key, true);\n      } else {\n        titleRow.unset(key, true);\n        emptyRow.unset(key, true);\n      }\n\n      if (!currentFeatureKeys.includes(key)) {\n        headerRow.unset(key, true);\n      }\n    });\n    const titleEmptyRows = [titleRow, headerRow, emptyRow];\n    return titleEmptyRows;\n  }\n\n  private circleToPoint(feature: OlFeature) {\n    const radius: number = feature.get('rad');\n\n    if (radius) {\n      const point = new olPoint([\n        feature.get('longitude'),\n        feature.get('latitude')\n      ]);\n      point.transform('EPSG:4326', feature.get('_projection'));\n      feature.setGeometry(point);\n    }\n  }\n\n  private buildForm() {\n    this.importForm = this.formBuilder.group({\n      inputProj: ['', [Validators.required]]\n    });\n\n    const form = this.formBuilder.group({\n      format: ['', [Validators.required]],\n      layers: [[], [Validators.required]],\n      layersWithSelection: [[]],\n      combineLayers: [true, [Validators.required]],\n      separator: [false, [Validators.required]],\n      featureInMapExtent: [false, [Validators.required]]\n    });\n\n    if (this.forceNaming) {\n      form.addControl('name', new FormControl('', [Validators.required]));\n    }\n\n    form\n      .get('format')\n      .valueChanges.subscribe((format: ExportFormat) =>\n        this.handleCsvForm(form, format)\n      );\n\n    this.form = form;\n  }\n\n  private handleCsvForm(form: FormGroup, format: ExportFormat): void {\n    format === 'CSV'\n      ? form.addControl(\n          'csvSeparator',\n          new FormControl('auto', [Validators.required])\n        )\n      : form.removeControl('csvSeparator');\n  }\n\n  private onFileImportSuccess(file: File, features: Feature[]) {\n    const importExportOptions = this.config.getConfig(\n      'importExport'\n    ) as ImportExportServiceOptions;\n    const confirmDialogService = importExportOptions?.allowToStoreLayer\n      ? this.confirmDialogService\n      : undefined;\n    if (!importExportOptions?.importWithStyle) {\n      handleFileImportSuccess(\n        file,\n        features,\n        this.map,\n        this.contextUri,\n        this.messageService,\n        this.layerService,\n        confirmDialogService\n      );\n    } else {\n      handleFileImportSuccess(\n        file,\n        features,\n        this.map,\n        this.contextUri,\n        this.messageService,\n        this.layerService,\n        confirmDialogService,\n        this.styleListService,\n        this.styleService\n      );\n    }\n  }\n\n  private onFileImportError(file: File, error: Error) {\n    this.loading$.next(false);\n    handleFileImportError(file, error, this.messageService, this.fileSizeMb);\n  }\n\n  private onPopupBlockedError(preCheck = true) {\n    this.loading$.next(false);\n    const extraMessage = preCheck\n      ? 'igo.geo.export.popupBlocked.selectAgain'\n      : 'igo.geo.export.popupBlocked.retry';\n    this.messageService.error(\n      'igo.geo.export.popupBlocked.text',\n      'igo.geo.export.popupBlocked.title',\n      { timeOut: 20000 },\n      { extraMessage }\n    );\n  }\n\n  private onFileExportError(error: Error) {\n    this.loading$.next(false);\n    handleFileExportError(error, this.messageService);\n  }\n\n  private loadConfig() {\n    const forceNamingConfig = this.config.getConfig('importExport.forceNaming');\n    this.forceNaming =\n      forceNamingConfig !== undefined ? forceNamingConfig : false;\n\n    this.configFormats = this.config.getConfig('importExport.formats');\n    this.computeFormats();\n  }\n\n  private computeFormats(layers?: AnyLayer[]) {\n    let appliedformats: ExportFormat[] = [...ExportFormat];\n    const formatsType = {\n      onlyUrl: false,\n      onlyVector: false,\n      vectorAndUrl: false,\n      customList: false\n    };\n    const customList = [];\n    if (layers?.length) {\n      layers.forEach((layer) => {\n        if (!layer || isLayerGroup(layer)) {\n          return;\n        }\n        if (layer.dataSource.options.download?.allowedFormats) {\n          formatsType.customList = true;\n          customList.push({\n            layer: layer.title,\n            formats: this.validateListFormat(\n              layer.dataSource.options.download.allowedFormats\n            )\n          });\n        } else if (\n          !(layer instanceof VectorLayer) &&\n          layer.dataSource.options.download &&\n          layer.dataSource.options.download.url\n        ) {\n          formatsType.onlyUrl = true;\n        } else if (\n          layer.dataSource.options.download &&\n          (layer.dataSource.options.download.url ||\n            layer.dataSource.options.download.dynamicUrl)\n        ) {\n          formatsType.vectorAndUrl = true;\n        } else if (layer instanceof VectorLayer) {\n          formatsType.onlyVector = true;\n        }\n      });\n      const hasUrl = this.formats$.value.includes('URL');\n\n      if (formatsType.onlyUrl === true && formatsType.onlyVector === false) {\n        appliedformats = ['URL'];\n      } else if (\n        formatsType.onlyVector === true &&\n        formatsType.onlyUrl === false\n      ) {\n        this.computeFormats(); // reset\n        if (hasUrl) {\n          appliedformats = [...this.formats$.value].filter(\n            (key) => key !== 'URL'\n          );\n        }\n      } else if (\n        formatsType.vectorAndUrl === true &&\n        formatsType.onlyUrl === false &&\n        formatsType.onlyVector === false\n      ) {\n        this.computeFormats(); // reset\n        if (!hasUrl) {\n          const keys = [...this.formats$.value];\n          keys.push('URL');\n          appliedformats = keys;\n        }\n      }\n    }\n\n    appliedformats = this.getAvailableFormats(appliedformats);\n\n    if (formatsType.customList) {\n      let commonFormats;\n      const layersWithCustomFormats = [];\n      let previousCustomListFormats = customList[0].formats;\n      customList.map((list) => {\n        layersWithCustomFormats.push(list.layer);\n        commonFormats = list.formats.filter((value) =>\n          previousCustomListFormats.includes(value)\n        );\n        previousCustomListFormats = list.formats;\n      });\n      const finalFormats = commonFormats.filter((value) =>\n        appliedformats.includes(value)\n      );\n      if (finalFormats.length > 0) {\n        this.formats$.next(finalFormats);\n\n        if (layers && layers.length) {\n          if (layers.length > 1) {\n            this.messageService.alert(\n              'igo.geo.export.customList.text',\n              'igo.geo.export.customList.title',\n              undefined,\n              { value: layersWithCustomFormats.join() }\n            );\n          }\n        }\n      } else {\n        this.formats$.next([]);\n        this.messageService.alert(\n          'igo.geo.export.noFormat.text',\n          'igo.geo.export.noFormat.title'\n        );\n      }\n      return;\n    } else {\n      this.formats$.next(appliedformats);\n    }\n  }\n\n  private getAvailableFormats(layerFormats: ExportFormat[]): ExportFormat[] {\n    if (!this.configFormats) {\n      return layerFormats;\n    }\n    const availableFormats = this.validateListFormat(this.configFormats);\n    return layerFormats.filter((layerFormat) =>\n      availableFormats.includes(layerFormat)\n    );\n  }\n\n  private validateListFormat(formats: AnyExportFormat[]): ExportFormat[] {\n    const allUppercaseFormats = [...ExportFormat, ...ExportFormatLegacy].map(\n      (f) => f.toUpperCase()\n    );\n\n    return formats\n      .filter((format) => {\n        if (allUppercaseFormats.includes(format.toUpperCase())) {\n          return format;\n        }\n      })\n      .map((format) => {\n        const csvFormats: string[] = (\n          ['CSV', 'CSVcomma', 'CSVsemicolon'] satisfies AnyExportFormat[]\n        ).map((f) => f.toUpperCase());\n        if (csvFormats.includes(format.toUpperCase())) {\n          return 'CSV';\n        } else if (this.compareString<ExportFormat>('Excel', format)) {\n          return 'Excel';\n        } else if (this.compareString<ExportFormat>('GML', format)) {\n          return 'GML';\n        } else if (this.compareString<ExportFormat>('GPX', format)) {\n          return 'GPX';\n        } else if (this.compareString<ExportFormat>('GeoJSON', format)) {\n          return 'GeoJSON';\n        } else if (this.compareString<ExportFormat>('KML', format)) {\n          return 'KML';\n        } else if (this.compareString<ExportFormat>('Shapefile', format)) {\n          return 'Shapefile';\n        } else if (this.compareString<ExportFormat>('URL', format)) {\n          return 'URL';\n        }\n      });\n  }\n\n  private compareString<T extends string>(value1: T, value2: string): boolean {\n    return value1.toUpperCase() === value2.toUpperCase();\n  }\n\n  public modeChanged(mode: SelectMode) {\n    this.selectMode.emit(mode);\n  }\n\n  private onFileExportSuccess() {\n    handleFileExportSuccess(this.messageService);\n  }\n\n  onImportExportChange(event) {\n    this.selectedMode = event.value;\n  }\n}\n","<div class=\"import-export-toggle\">\n  <mat-button-toggle-group\n    [value]=\"selectedMode\"\n    (change)=\"onImportExportChange($event)\"\n  >\n    <mat-button-toggle [value]=\"'import'\">\n      {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\n    </mat-button-toggle>\n    <mat-button-toggle [value]=\"'export'\">\n      {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\n    </mat-button-toggle>\n  </mat-button-toggle-group>\n</div>\n\n<form\n  class=\"igo-form\"\n  [formGroup]=\"importForm\"\n  *ngIf=\"selectedMode === 'import'\"\n>\n  <div class=\"igo-input-container\">\n    <mat-form-field>\n      <mat-label>{{\n        'igo.geo.importExportForm.importProjPlaceholder' | translate\n      }}</mat-label>\n      <mat-select [(value)]=\"inputProj\">\n        <mat-option\n          *ngFor=\"let projection of projections$ | async\"\n          [value]=\"projection\"\n          (click)=\"$event.stopPropagation()\"\n        >\n          <span matListItemTitle *ngIf=\"projection.translateKey\">\n            {{\n              'igo.geo.importExportForm.projections.' + projection.translateKey\n                | translate: projection\n            }}\n          </span>\n          <span matListItemTitle *ngIf=\"!projection.translateKey\">\n            {{ projection.alias }}\n          </span>\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div\n    tooltip-position=\"below\"\n    matTooltipShowDelay=\"500\"\n    [matTooltip]=\"\n      importForm.invalid\n        ? ('igo.geo.importExportForm.projections.choose' | translate)\n        : ('igo.geo.importExportForm.importButton' | translate)\n    \"\n    class=\"igo-form-button-group\"\n  >\n    <button\n      [disabled]=\"importForm.invalid || (loading$ | async)\"\n      mat-raised-button\n      type=\"button\"\n      (click)=\"fileInput.click()\"\n    >\n      {{ 'igo.geo.importExportForm.importButton' | translate }}\n    </button>\n    <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n    <input\n      hidden\n      #fileInput\n      type=\"file\"\n      [style.display]=\"'none'\"\n      (click)=\"fileInput.value = null\"\n      (change)=\"importFiles($any($event.target).files)\"\n    />\n  </div>\n</form>\n<section *ngIf=\"selectedMode === 'import'\">\n  <div *ngIf=\"importHtmlClarifications === ''\">\n    <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\n    <ul>\n      <li>\n        {{\n          'igo.geo.importExportForm.importSizeMax'\n            | translate: { size: fileSizeMb }\n        }}\n      </li>\n      <li>\n        {{ 'igo.geo.importExportForm.importFormatAuthorized' | translate }}\n      </li>\n      <li>{{ 'igo.geo.importExportForm.importShpZip' | translate }}</li>\n    </ul>\n  </div>\n  <igo-custom-html\n    *ngIf=\"importHtmlClarifications !== ''\"\n    [html]=\"importHtmlClarifications\"\n  >\n  </igo-custom-html>\n</section>\n\n<section\n  *ngIf=\"(exportableLayers$ | async).length === 0 && selectedMode === 'export'\"\n>\n  <h4>{{ 'igo.geo.importExportForm.exportNoLayersExportable' | translate }}</h4>\n</section>\n\n<form\n  class=\"igo-form\"\n  [formGroup]=\"form\"\n  *ngIf=\"(exportableLayers$ | async).length > 0 && selectedMode === 'export'\"\n>\n  <div class=\"igo-input-container\">\n    <mat-form-field>\n      <mat-label>{{\n        'igo.geo.importExportForm.exportLayerPlaceholder' | translate\n      }}</mat-label>\n      <mat-select [(value)]=\"layers\" multiple>\n        <mat-select-trigger>\n          {{ layers.length ? getLayerTitleById(layers[0]) : '' }}\n          <span *ngIf=\"layers.length > 1\" class=\"export-select-trigger\">\n            (+{{ layers.length - 1 }}\n            {{\n              (layers?.length === 2\n                ? 'igo.geo.importExportForm.other'\n                : 'igo.geo.importExportForm.others'\n              ) | translate\n            }})\n          </span>\n        </mat-select-trigger>\n        <mat-option\n          *ngFor=\"let layer of exportableLayers$ | async\"\n          [ngClass]=\"{\n            'igo-export-layer-mat-option': layerHasSelectedFeatures(layer)\n          }\"\n          [value]=\"layer.id\"\n          (click)=\"$event.stopPropagation()\"\n        >\n          <span matListItemTitle>{{ layer.title }}</span>\n          <span matListItemTitle>\n            <mat-slide-toggle\n              *ngIf=\"layerHasSelectedFeatures(layer)\"\n              (click)=\"onlySelectedClick($event, layer.id)\"\n              (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\n              (change)=\"onlySelected($event, layer.id)\"\n            >\n              <small>{{\n                'igo.geo.importExportForm.exportSelectedFeature' | translate\n              }}</small>\n            </mat-slide-toggle>\n          </span>\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div class=\"igo-input-container\">\n    <mat-form-field>\n      <mat-label>{{\n        'igo.geo.importExportForm.exportFormatPlaceholder' | translate\n      }}</mat-label>\n      <mat-select formControlName=\"format\">\n        <ng-container *ngIf=\"(formats$ | async).length !== 0\">\n          <mat-option *ngFor=\"let format of formats$ | async\" [value]=\"format\">\n            {{ 'igo.geo.export.format.' + format | translate }}\n          </mat-option>\n        </ng-container>\n        <mat-option *ngIf=\"(formats$ | async).length === 0\" disabled=\"true\">\n          {{ 'igo.geo.export.noFormat.title' | translate }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div\n    class=\"igo-input-container\"\n    *ngIf=\"forceNaming && form.value.format !== 'URL'\"\n  >\n    <mat-form-field>\n      <input\n        matInput\n        formControlName=\"name\"\n        placeholder=\"{{\n          'igo.geo.importExportForm.exportFileNamePlaceholder' | translate\n        }}\"\n      />\n    </mat-form-field>\n  </div>\n\n  <ng-container *ngIf=\"this.isCsvExport(form.value.format)\">\n    <div class=\"igo-input-container\">\n      <mat-form-field>\n        <mat-label>{{ 'igo.geo.export.separator' | translate }}</mat-label>\n        <mat-select formControlName=\"csvSeparator\">\n          <mat-option\n            *ngFor=\"let separator of csvSeparators\"\n            [value]=\"separator\"\n          >\n            {{ 'igo.geo.export.csv.separator.' + separator | translate }}\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n    </div>\n    <div *ngIf=\"layers.length > 1\" class=\"export-combine-layers\">\n      <mat-slide-toggle\n        formControlName=\"combineLayers\"\n        [labelPosition]=\"'before'\"\n      >\n        {{ 'igo.geo.importExportForm.exportCombineResults' | translate }}\n      </mat-slide-toggle>\n    </div>\n\n    <div\n      *ngIf=\"layers.length > 1 && form.value.combineLayers\"\n      class=\"export-separator\"\n    >\n      <mat-slide-toggle formControlName=\"separator\" [labelPosition]=\"'before'\">\n        {{ 'igo.geo.importExportForm.exportSeparator' | translate }}\n      </mat-slide-toggle>\n    </div>\n  </ng-container>\n\n  <div class=\"export-options\" *ngIf=\"form.value.format !== 'URL'\">\n    <mat-slide-toggle\n      formControlName=\"featureInMapExtent\"\n      [labelPosition]=\"'before'\"\n    >\n      {{ 'igo.geo.importExportForm.exportFeatureInExtent' | translate }}\n    </mat-slide-toggle>\n  </div>\n\n  <div class=\"igo-form-button-group\">\n    <button\n      mat-raised-button\n      type=\"button\"\n      [disabled]=\"!form.valid || (loading$ | async)\"\n      (click)=\"handleExportFormSubmit(form.value)\"\n    >\n      {{\n        form.value.format !== 'URL'\n          ? ('igo.geo.importExportForm.exportButton' | translate)\n          : form.value.layers.length > 1\n            ? ('igo.geo.importExportForm.exportButtonLinks' | translate)\n            : ('igo.geo.importExportForm.exportButtonLink' | translate)\n      }}\n    </button>\n    <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n  </div>\n\n  <igo-custom-html\n    *ngIf=\"exportHtmlClarifications !== ''\"\n    [html]=\"exportHtmlClarifications\"\n  >\n  </igo-custom-html>\n</form>\n","import {\n  Directive,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit\n} from '@angular/core';\n\nimport { ConfirmDialogService } from '@igo2/common/confirm-dialog';\nimport { DragAndDropDirective } from '@igo2/common/drag-drop';\nimport { ConfigService } from '@igo2/core/config';\nimport { MessageService } from '@igo2/core/message';\n\nimport { Subscription } from 'rxjs';\nimport { concatMap, first, skipWhile } from 'rxjs/operators';\n\nimport { Feature } from '../../feature/shared/feature.interfaces';\nimport { LayerService } from '../../layer/shared/layer.service';\nimport { MapBrowserComponent } from '../../map/map-browser/map-browser.component';\nimport { IgoMap } from '../../map/shared/map';\nimport { detectFileEPSG } from '../../map/shared/projection.utils';\nimport { StyleListService } from '../../style/style-list/style-list.service';\nimport { StyleService } from '../../style/style-service/style.service';\nimport {\n  handleFileImportError,\n  handleFileImportSuccess\n} from '../shared/import.utils';\nimport { ImportExportServiceOptions } from './import.interface';\nimport { ImportService } from './import.service';\n\n@Directive({\n  selector: '[igoDropGeoFile]',\n  standalone: true\n})\nexport class DropGeoFileDirective\n  extends DragAndDropDirective\n  implements OnInit, OnDestroy\n{\n  protected filesDropped = new EventEmitter<File[]>();\n  protected filesInvalid = new EventEmitter<File[]>();\n  private epsgCode$$: Subscription[] = [];\n  private filesDropped$$: Subscription;\n\n  get map(): IgoMap {\n    return this.component.map;\n  }\n\n  @Input() contextUri: string;\n\n  constructor(\n    private component: MapBrowserComponent,\n    private importService: ImportService,\n    private styleListService: StyleListService,\n    private styleService: StyleService,\n    private config: ConfigService,\n    private messageService: MessageService,\n    private layerService: LayerService,\n    private confirmDialogService: ConfirmDialogService\n  ) {\n    super();\n  }\n\n  ngOnInit() {\n    this.filesDropped$$ = this.filesDropped.subscribe((files: File[]) => {\n      this.onFilesDropped(files);\n    });\n  }\n\n  ngOnDestroy() {\n    this.filesDropped$$.unsubscribe();\n    this.epsgCode$$.map((e) => e.unsubscribe());\n  }\n\n  @HostListener('dragover', ['$event'])\n  public onDragOver(evt) {\n    super.onDragOver(evt);\n  }\n\n  @HostListener('dragleave', ['$event'])\n  public onDragLeave(evt) {\n    super.onDragLeave(evt);\n  }\n\n  @HostListener('drop', ['$event'])\n  public onDrop(evt) {\n    super.onDrop(evt);\n  }\n\n  private onFilesDropped(files: File[]) {\n    for (const file of files) {\n      this.epsgCode$$.push(\n        detectFileEPSG({ file })\n          .pipe(\n            skipWhile((code) => !code),\n            first(),\n            concatMap((epsgCode) => {\n              return this.importService.import(\n                file,\n                epsgCode === 'epsgNotDefined' ? undefined : epsgCode\n              );\n            })\n          )\n          .subscribe(\n            (features: Feature[]) => this.onFileImportSuccess(file, features),\n            (error: Error) => this.onFileImportError(file, error)\n          )\n      );\n    }\n  }\n\n  private onFileImportSuccess(file: File, features: Feature[]) {\n    const importExportOptions = this.config.getConfig(\n      'importExport'\n    ) as ImportExportServiceOptions;\n    const confirmDialogService = importExportOptions?.allowToStoreLayer\n      ? this.confirmDialogService\n      : undefined;\n    if (!importExportOptions?.importWithStyle) {\n      handleFileImportSuccess(\n        file,\n        features,\n        this.map,\n        this.contextUri,\n        this.messageService,\n        this.layerService,\n        confirmDialogService\n      );\n    } else {\n      handleFileImportSuccess(\n        file,\n        features,\n        this.map,\n        this.contextUri,\n        this.messageService,\n        this.layerService,\n        confirmDialogService,\n        this.styleListService,\n        this.styleService\n      );\n    }\n  }\n\n  private onFileImportError(file: File, error: Error) {\n    handleFileImportError(\n      file,\n      error,\n      this.messageService,\n      this.config.getConfig('importExport.clientSideFileSizeMaxMb')\n    );\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { ExportButtonComponent } from './export-button/export-button.component';\nimport { ImportExportComponent } from './import-export/import-export.component';\nimport { DropGeoFileDirective } from './shared/drop-geo-file.directive';\n\nexport const IMPORT_EXPORT_DIRECTIVES = [\n  ImportExportComponent,\n  DropGeoFileDirective,\n  ExportButtonComponent\n] as const;\n\n/**\n * @deprecated import the components directly or IMPORT_EXPORT_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [ImportExportComponent, DropGeoFileDirective, ExportButtonComponent],\n  exports: [ImportExportComponent, DropGeoFileDirective, ExportButtonComponent]\n})\nexport class IgoImportExportModule {\n  static forRoot(): ModuleWithProviders<IgoImportExportModule> {\n    return {\n      ngModule: IgoImportExportModule\n    };\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { FormDialogService } from '@igo2/common/form';\n\nimport { StyleService } from '../style/style-service/style.service';\nimport { LayerGroupComponent } from './layer-group/layer-group.component';\nimport { LayerItemComponent } from './layer-item/layer-item.component';\nimport { LayerLegendItemComponent } from './layer-legend-item/layer-legend-item.component';\nimport { LayerLegendListBindingDirective } from './layer-legend-list/layer-legend-list-binding.directive';\nimport { LayerLegendListComponent } from './layer-legend-list/layer-legend-list.component';\nimport { LayerLegendComponent } from './layer-legend/layer-legend.component';\nimport { LayerListToolComponent } from './layer-list-tool/layer-list-tool.component';\nimport { LayerListToolService } from './layer-list-tool/layer-list-tool.service';\nimport { LayerListComponent } from './layer-list/layer-list.component';\nimport { LayerSearchComponent } from './layer-search/layer-search.component';\nimport { LayerUnavailableListComponent } from './layer-unavailable/layer-unavailable-list/layer-unavailable-list.component';\nimport { LayerUnavailableComponent } from './layer-unavailable/layer-unavailable.component';\nimport { LayerViewerBottomActionsComponent } from './layer-viewer-bottom-actions/layer-viewer-bottom-actions.component';\nimport { LayerViewerComponent } from './layer-viewer/layer-viewer.component';\nimport { LayerVisibilityButtonComponent } from './layer-visibility-button/layer-visibility-button.component';\nimport { LayerService } from './shared/layer.service';\nimport { TrackFeatureButtonComponent } from './track-feature-button/track-feature-button.component';\n\nexport const LAYER_DIRECTIVES = [\n  LayerItemComponent,\n  LayerLegendItemComponent,\n  LayerLegendComponent,\n  LayerListComponent,\n  LayerListToolComponent,\n  LayerLegendListComponent,\n  LayerLegendListBindingDirective,\n  TrackFeatureButtonComponent,\n  LayerGroupComponent,\n  LayerViewerComponent,\n  LayerUnavailableComponent,\n  LayerVisibilityButtonComponent,\n  LayerSearchComponent,\n  LayerViewerBottomActionsComponent,\n  LayerUnavailableListComponent\n] as const;\n\n/**\n * @deprecated import the components/directives directly or LAYER_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [...LAYER_DIRECTIVES],\n  exports: [...LAYER_DIRECTIVES],\n  providers: [FormDialogService]\n})\nexport class IgoLayerModule {\n  static forRoot(): ModuleWithProviders<IgoLayerModule> {\n    return {\n      ngModule: IgoLayerModule,\n      providers: [\n        LayerService,\n        StyleService,\n        FormDialogService,\n        LayerListToolService\n      ]\n    };\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { MetadataOptions } from './metadata.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MetadataService {\n  open(metadata: MetadataOptions) {\n    if (metadata.extern) {\n      window.open(metadata.url, '_blank');\n    }\n  }\n}\n","import { NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Inject,\n  Input,\n  ViewEncapsulation\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MAT_DIALOG_DATA,\n  MatDialog,\n  MatDialogClose,\n  MatDialogContent,\n  MatDialogModule,\n  MatDialogTitle\n} from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { Layer } from '../../layer';\nimport {\n  MetadataLayerOptions,\n  MetadataOptions\n} from '../shared/metadata.interface';\nimport { MetadataService } from '../shared/metadata.service';\n\n@Component({\n  selector: 'igo-metadata-button',\n  templateUrl: './metadata-button.component.html',\n  styleUrls: ['./metadata-button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule,\n    MatDialogModule\n  ]\n})\nexport class MetadataButtonComponent {\n  @Input() layer: Layer;\n\n  @Input() color = 'primary';\n\n  constructor(\n    private metadataService: MetadataService,\n    private dialog: MatDialog\n  ) {}\n\n  openMetadata(metadata: MetadataOptions) {\n    if (metadata.extern) {\n      if (!metadata.url && metadata.abstract) {\n        this.dialog.open(MetadataAbstractComponent, {\n          data: {\n            layerTitle: this.layer.title,\n            abstract: metadata.abstract,\n            type: metadata.type\n          }\n        });\n      } else if (metadata.url) {\n        this.metadataService.open(metadata);\n      }\n    } else if (!metadata.extern && metadata.abstract) {\n      this.dialog.open(MetadataAbstractComponent, {\n        data: {\n          layerTitle: this.layer.title,\n          abstract: metadata.abstract,\n          type: metadata.type\n        }\n      });\n    }\n  }\n\n  get options(): MetadataLayerOptions {\n    if (!this.layer) {\n      return;\n    }\n    return this.layer.options;\n  }\n}\n\n@Component({\n  selector: 'igo-metadata-abstract',\n  templateUrl: './metadata-abstract.component.html',\n  styleUrls: ['./metadata-abstract.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  standalone: true,\n  imports: [\n    MatDialogTitle,\n    MatButtonModule,\n    MatDialogClose,\n    NgIf,\n    MatDialogContent\n  ]\n})\nexport class MetadataAbstractComponent {\n  constructor(@Inject(MAT_DIALOG_DATA) public data: MetadataOptions) {}\n}\n","<button\n  *ngIf=\"\n    (options && options.metadata && options.metadata.url) ||\n    (options && options.metadata && options.metadata.abstract)\n  \"\n  mat-icon-button\n  tooltip-position=\"below\"\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"'igo.geo.metadata.show' | translate\"\n  [color]=\"color\"\n  (click)=\"openMetadata(options.metadata)\"\n>\n  <mat-icon>info</mat-icon>\n</button>\n","<h2 mat-dialog-title>{{ data.layerTitle }}</h2>\n<button class=\"close-button\" mat-button mat-dialog-close>X</button>\n<mat-dialog-content *ngIf=\"data.type !== 'arcgisrest'\" class=\"mat-typography\">\n  <h3>{{ data.abstract }}</h3>\n</mat-dialog-content>\n<mat-dialog-content *ngIf=\"data.type === 'arcgisrest'\" class=\"mat-typography\">\n  <h3 [innerHTML]=\"data.abstract\"></h3>\n</mat-dialog-content>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport {\n  MetadataAbstractComponent,\n  MetadataButtonComponent\n} from './metadata-button/metadata-button.component';\n\nexport const METADATA_DIRECTIVES = [\n  MetadataButtonComponent,\n  MetadataAbstractComponent\n] as const;\n\n/**\n * @deprecated import the components/directives directly or METADATA_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [MetadataButtonComponent, MetadataAbstractComponent],\n  exports: [MetadataButtonComponent, MetadataAbstractComponent]\n})\nexport class IgoMetadataModule {\n  static forRoot(): ModuleWithProviders<IgoMetadataModule> {\n    return {\n      ngModule: IgoMetadataModule,\n      providers: []\n    };\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\n\nimport { FEATURE } from '../../feature/shared/feature.enums';\nimport { SearchSource } from '../../search/shared/sources/source';\nimport { SearchSourceOptions } from '../../search/shared/sources/source.interfaces';\n\n/**\n * Map search source. For now it has no search capability. All it does\n * is act as a placeholder for the map query results' \"search source\".\n */\n@Injectable()\nexport class QuerySearchSource extends SearchSource {\n  static id = 'map';\n  static type = FEATURE;\n\n  constructor(@Inject('options') options: SearchSourceOptions) {\n    super(options);\n  }\n\n  getId(): string {\n    return QuerySearchSource.id;\n  }\n\n  getType(): string {\n    return QuerySearchSource.type;\n  }\n\n  protected getDefaultOptions(): SearchSourceOptions {\n    return {\n      title: 'Carte'\n    };\n  }\n}\n","import { ConfigService } from '@igo2/core/config';\n\nimport { SearchSource } from '../../search/shared/sources/source';\nimport { QuerySearchSource } from './query-search-source';\n\n/**\n * Map search source factory\n * @ignore\n */\nexport function querySearchSourceFactory(config: ConfigService) {\n  return new QuerySearchSource(\n    config.getConfig(`searchSources.${QuerySearchSource.id}`) || {}\n  );\n}\n\n/**\n * Function that returns a provider for the map search source\n */\nexport function provideQuerySearchSource() {\n  return {\n    provide: SearchSource,\n    useFactory: querySearchSourceFactory,\n    multi: true,\n    deps: [ConfigService]\n  };\n}\n","import {\n  AfterViewInit,\n  Directive,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  Self\n} from '@angular/core';\n\nimport OlFeature from 'ol/Feature';\nimport MapBrowserPointerEvent from 'ol/MapBrowserEvent';\nimport { unByKey } from 'ol/Observable';\nimport { EventsKey } from 'ol/events';\nimport OlLayer from 'ol/layer/Layer';\nimport OlRenderFeature from 'ol/render/Feature';\nimport OlSource from 'ol/source/Source';\nimport olVectorSource from 'ol/source/Vector';\n\nimport { Observable, Subscription, of, zip } from 'rxjs';\n\nimport { Feature } from '../../feature/shared/feature.interfaces';\nimport { renderFeatureFromOl } from '../../feature/shared/feature.utils';\nimport { featureFromOl } from '../../feature/shared/feature.utils';\nimport { OlDragSelectInteraction } from '../../feature/shared/strategies/selection';\nimport { Layer, isLayerGroup, isLayerItem } from '../../layer';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport { MapBrowserComponent } from '../../map/map-browser/map-browser.component';\nimport { IgoMap } from '../../map/shared/map';\nimport { ctrlKeyDown } from '../../map/shared/map.utils';\nimport { QueryableDataSourceOptions } from './query.interfaces';\nimport { QueryService } from './query.service';\nimport { layerIsQueryable, olLayerFeatureIsQueryable } from './query.utils';\n\n/**\n * This directive makes a map queryable with a click of with a drag box.\n * By default, all layers are queryable but this can ben controlled at\n * the layer level.\n */\n@Directive({\n  selector: '[igoQuery]',\n  standalone: true\n})\nexport class QueryDirective implements AfterViewInit, OnDestroy {\n  /**\n   * Subscriptions to ongoing queries\n   */\n  private queries$$: Subscription[] = [];\n\n  /**\n   * Listener to the map click event\n   */\n  private mapClickListener;\n\n  /**\n   * OL drag box interaction\n   */\n  private olDragSelectInteraction: OlDragSelectInteraction;\n\n  /**\n   * Ol drag box \"end\" event key\n   */\n  private olDragSelectInteractionEndKey: EventsKey | EventsKey[];\n\n  /**\n   * Whter to query features or not\n   */\n  @Input() queryFeatures = false;\n\n  /**\n   * Feature query hit tolerance\n   */\n  @Input() queryFeaturesHitTolerance = 0;\n\n  /**\n   * Feature query hit tolerance\n   */\n  @Input() queryFeaturesCondition: (olLayer: OlLayer<OlSource>) => boolean;\n\n  /**\n   * Whether all query should complete before emitting an event\n   */\n  @Input() waitForAllQueries = true;\n\n  /**\n   * Event emitted when a query (or all queries) complete\n   */\n  @Output() query = new EventEmitter<{\n    features: Feature[] | Feature[][];\n    event: MapBrowserPointerEvent<any>;\n  }>();\n\n  /**\n   * IGO map\n   * @internal\n   */\n  get map(): IgoMap {\n    return this.component.map as any as IgoMap;\n  }\n\n  constructor(\n    @Self() private component: MapBrowserComponent,\n    private queryService: QueryService\n  ) {}\n\n  /**\n   * Start listening to click and drag box events\n   * @internal\n   */\n  ngAfterViewInit() {\n    this.listenToMapClick();\n    this.addDragBoxInteraction();\n  }\n\n  /**\n   * Stop listening to click and drag box events and cancel ongoind requests\n   * @internal\n   */\n  ngOnDestroy() {\n    this.cancelOngoingQueries();\n    this.unlistenToMapClick();\n    this.removeDragBoxInteraction();\n  }\n\n  /**\n   * On map click, issue queries\n   */\n  private listenToMapClick() {\n    this.mapClickListener = this.map.ol.on(\n      'singleclick',\n      (event: MapBrowserPointerEvent<any>) => this.onMapEvent(event)\n    );\n  }\n\n  /**\n   * Stop listening for map clicks\n   */\n  private unlistenToMapClick() {\n    unByKey(this.mapClickListener);\n    this.mapClickListener = undefined;\n  }\n\n  /**\n   * Issue queries from a map event and emit events with the results\n   * @param event OL map browser pointer event\n   */\n  private onMapEvent(event: MapBrowserPointerEvent<any>) {\n    this.cancelOngoingQueries();\n    if (!this.queryService.queryEnabled) {\n      return;\n    }\n\n    const queries$ = [];\n    if (this.queryFeatures) {\n      queries$.push(this.doQueryFeatures(event));\n    }\n\n    const resolution = this.map.ol.getView().getResolution();\n    const queryLayers = this.map.layerController.all.filter(\n      layerIsQueryable\n    ) as Layer[];\n    queries$.push(\n      ...this.queryService.query(queryLayers, {\n        coordinates: event.coordinate as [number, number],\n        projection: this.map.projection,\n        resolution\n      })\n    );\n\n    if (queries$.length === 0) {\n      return;\n    }\n\n    if (this.waitForAllQueries) {\n      this.queries$$.push(\n        zip(...queries$).subscribe((results: Feature[][]) => {\n          const features = [].concat(...results);\n          this.query.emit({ features, event });\n        })\n      );\n    } else {\n      this.queries$$ = queries$.map((query$: Observable<Feature[]>) => {\n        return query$.subscribe((features: Feature[]) => {\n          this.query.emit({ features, event });\n        });\n      });\n    }\n  }\n\n  /**\n   * Query features already present on the map\n   * @param event OL map browser pointer event\n   */\n  private doQueryFeatures(\n    event: MapBrowserPointerEvent<any>\n  ): Observable<Feature[]> {\n    const clickedFeatures = [];\n\n    if (event.type === 'singleclick') {\n      this.map.ol.forEachFeatureAtPixel(\n        event.pixel,\n        (featureOL: OlFeature, layerOL: any) => {\n          const layer = this.map.layerController.getById(\n            layerOL.values_._layer.id\n          );\n          if (isLayerGroup(layer) || !layer.displayed) {\n            return;\n          }\n          if (\n            (layer.dataSource.options as QueryableDataSourceOptions)\n              .queryFormatAsWms\n          ) {\n            return;\n          }\n          if (featureOL) {\n            if (featureOL.get('features')) {\n              for (const feature of featureOL.get('features')) {\n                const newFeature = featureFromOl(feature, this.map.projection);\n                newFeature.meta = {\n                  title: feature.values_.nom,\n                  id: layerOL.values_._layer.id + '.' + feature.id_,\n                  icon: feature.values_._icon,\n                  sourceTitle: layerOL.values_.title,\n                  alias: this.queryService.getAllowedFieldsAndAlias(layer)\n                  // title: this.queryService.getQueryTitle(newFeature, layer) || newFeature.meta.title\n                };\n                clickedFeatures.push(newFeature);\n              }\n            } else if (featureOL instanceof OlRenderFeature) {\n              const newFeature = renderFeatureFromOl(\n                featureOL,\n                this.map.projection,\n                layerOL\n              );\n              newFeature.meta = {\n                id: layerOL.values_._layer.id + '.' + newFeature.meta.id,\n                sourceTitle: layerOL.values_.title,\n                alias: this.queryService.getAllowedFieldsAndAlias(layer),\n                title:\n                  this.queryService.getQueryTitle(newFeature, layer) ||\n                  newFeature.meta.title\n              };\n              clickedFeatures.push(newFeature);\n            } else {\n              const newFeature = featureFromOl(\n                featureOL,\n                this.map.projection,\n                layerOL\n              );\n              newFeature.meta = {\n                id: layerOL.values_._layer.id + '.' + newFeature.meta.id,\n                sourceTitle: layerOL.values_.title,\n                alias: this.queryService.getAllowedFieldsAndAlias(layer),\n                title:\n                  this.queryService.getQueryTitle(newFeature, layer) ||\n                  newFeature.meta.title\n              };\n              clickedFeatures.push(newFeature);\n            }\n          }\n        },\n        {\n          hitTolerance: this.queryFeaturesHitTolerance || 0,\n          layerFilter: this.queryFeaturesCondition\n            ? this.queryFeaturesCondition\n            : olLayerFeatureIsQueryable\n        }\n      );\n    } else if (event.type === 'boxend') {\n      const target = event.target as any;\n      const dragExtent = target.getGeometry().getExtent();\n      this.map.layerController.all\n        .filter(layerIsQueryable)\n        .filter(\n          (layer) =>\n            isLayerItem(layer) && layer instanceof VectorLayer && layer.visible\n        )\n        .map((layer: Layer) => {\n          const featuresOL = layer.dataSource.ol as olVectorSource;\n          featuresOL.forEachFeatureIntersectingExtent(\n            dragExtent,\n            (olFeature: any) => {\n              const newFeature: Feature = featureFromOl(\n                olFeature,\n                this.map.projection,\n                layer.ol\n              );\n              newFeature.meta = {\n                id: layer.id + '.' + olFeature.getId(),\n                icon: olFeature.values_._icon,\n                sourceTitle: layer.title,\n                alias: this.queryService.getAllowedFieldsAndAlias(layer),\n                title:\n                  this.queryService.getQueryTitle(newFeature, layer) ||\n                  newFeature.meta.title\n              };\n              clickedFeatures.push(newFeature);\n            }\n          );\n        });\n    }\n\n    return of(clickedFeatures);\n  }\n\n  /**\n   * Cancel ongoing requests, if any\n   */\n  private cancelOngoingQueries() {\n    this.queries$$.forEach((sub: Subscription) => sub.unsubscribe());\n    this.queries$$ = [];\n  }\n\n  /**\n   * Add a drag box interaction and, on drag box end, select features\n   */\n  private addDragBoxInteraction() {\n    let olDragSelectInteractionOnQuery;\n    const olInteractions = this.map.ol.getInteractions().getArray();\n\n    // There can only be one dragbox interaction, so find the current one, if any\n    // Don't keep a reference to the current dragbox because we don't want\n    // to remove it when this startegy is deactivated\n    for (const olInteraction of olInteractions) {\n      if (olInteraction instanceof OlDragSelectInteraction) {\n        olDragSelectInteractionOnQuery = olInteraction;\n        break;\n      }\n    }\n    // If no drag box interaction is found, create a new one and add it to the map\n    if (olDragSelectInteractionOnQuery === undefined) {\n      olDragSelectInteractionOnQuery = new OlDragSelectInteraction({\n        condition: ctrlKeyDown\n      });\n      this.map.ol.addInteraction(olDragSelectInteractionOnQuery);\n      this.olDragSelectInteraction = olDragSelectInteractionOnQuery;\n    }\n\n    this.olDragSelectInteractionEndKey = olDragSelectInteractionOnQuery.on(\n      'boxend',\n      (event: MapBrowserPointerEvent<any>) => this.onMapEvent(event)\n    );\n  }\n\n  /**\n   * Remove drag box interaction\n   */\n  private removeDragBoxInteraction() {\n    if (this.olDragSelectInteractionEndKey !== undefined) {\n      unByKey(this.olDragSelectInteractionEndKey);\n    }\n    if (this.olDragSelectInteraction !== undefined) {\n      this.map.ol.removeInteraction(this.olDragSelectInteraction);\n    }\n    this.olDragSelectInteraction = undefined;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { IgoMessageModule } from '@igo2/core/message';\n\nimport { provideQuerySearchSource } from './shared/query-search-source.providers';\nimport { QueryDirective } from './shared/query.directive';\nimport { QueryService } from './shared/query.service';\n\n@NgModule({\n  imports: [CommonModule, IgoMessageModule, QueryDirective],\n  exports: [QueryDirective],\n  providers: [QueryService]\n})\nexport class IgoQueryModule {\n  static forRoot(): ModuleWithProviders<IgoQueryModule> {\n    return {\n      ngModule: IgoQueryModule,\n      providers: [provideQuerySearchSource()]\n    };\n  }\n}\n","import { FEATURE } from '../../feature/shared/feature.enums';\nimport { LAYER } from '../../layer/shared/layer.enums';\n\nexport const SEARCH_TYPES = [FEATURE, LAYER];\n","import { AsyncPipe, NgFor } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport { SearchSourceService } from '../shared/search-source.service';\nimport { SEARCH_TYPES } from '../shared/search.enums';\n\n/**\n * This component allows a user to select a search type yo enable. In it's\n * current version, only one search type can be selected at once (radio). If\n * this component were to support more than one search source enabled (checkbox),\n * the searchbar component would require a small change to it's\n * placeholder getter. The search source service already supports having\n * more than one search source enabled.\n */\n@Component({\n  selector: 'igo-search-selector',\n  templateUrl: './search-selector.component.html',\n  styleUrls: ['./search-selector.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatButtonModule,\n    MatTooltipModule,\n    MatMenuModule,\n    MatIconModule,\n    MatRadioModule,\n    NgFor,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SearchSelectorComponent implements OnInit, OnDestroy {\n  readonly searchType$ = new BehaviorSubject<string>(undefined);\n\n  /**\n   * Subscription to the search type\n   */\n  private searchType$$: Subscription;\n\n  /**\n   * List of available search types\n   */\n  @Input() searchTypes: string[] = SEARCH_TYPES;\n\n  /**\n   * The search type enabled\n   */\n  @Input()\n  set searchType(value: string) {\n    this.setSearchType(value);\n  }\n  get searchType(): string {\n    return this.searchType$.value;\n  }\n\n  /**\n   * Event emitted when the enabled search type changes\n   */\n  @Output() searchTypeChange = new EventEmitter<string>();\n\n  constructor(private searchSourceService: SearchSourceService) {}\n\n  ngOnInit() {\n    this.searchType$$ = this.searchType$\n      .pipe(distinctUntilChanged())\n      .subscribe((searchType: string) => this.onSetSearchType(searchType));\n  }\n\n  ngOnDestroy() {\n    this.searchType$$.unsubscribe();\n  }\n\n  /**\n   * Enable the selected search type\n   * @param searchType Search type\n   * @internal\n   */\n  onSearchTypeChange(searchType: string) {\n    this.setSearchType(searchType);\n  }\n\n  /**\n   * Get a search type's title. The title\n   * for all availables search typers needs to be defined in the locale\n   * files or an error will be thrown.\n   * @param searchType Search type\n   * @internal\n   */\n  getSearchTypeTitle(searchType: string) {\n    return `igo.geo.search.${searchType.toLowerCase()}.title`;\n  }\n\n  /**\n   * Emit an event and enable the search sources of the given type.\n   * @param searchType Search type\n   */\n  private setSearchType(searchType: string | undefined) {\n    this.searchType$.next(searchType);\n  }\n\n  private onSetSearchType(searchType: string) {\n    if (searchType === undefined || searchType === null) {\n      return;\n    }\n\n    this.searchSourceService.enableSourcesByType(searchType);\n    this.searchTypeChange.emit(searchType);\n  }\n}\n","<div class=\"igo-search-selector\">\n  <button\n    mat-icon-button\n    class=\"igo-search-selector-button\"\n    color=\"primary\"\n    tooltip-position=\"below\"\n    matTooltipShowDelay=\"500\"\n    [matTooltip]=\"'igo.geo.search.menu.tooltip' | translate\"\n    [matMenuTriggerFor]=\"searchSelectorMenu\"\n  >\n    <mat-icon>arrow_drop_down</mat-icon>\n  </button>\n\n  <mat-menu\n    #searchSelectorMenu=\"matMenu\"\n    class=\"no-border-radius\"\n    xPosition=\"before\"\n    yPosition=\"above\"\n  >\n    <mat-radio-group\n      class=\"igo-search-selector-radio-group\"\n      [value]=\"searchType$ | async\"\n      (change)=\"onSearchTypeChange($event.value)\"\n    >\n      <mat-radio-button\n        *ngFor=\"let searchType of searchTypes\"\n        [value]=\"searchType\"\n      >\n        {{ getSearchTypeTitle(searchType) | translate }}\n      </mat-radio-button>\n    </mat-radio-group>\n  </mat-menu>\n</div>\n","import { NgFor, NgIf, NgSwitch, NgSwitchCase } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MatCheckboxChange,\n  MatCheckboxModule\n} from '@angular/material/checkbox';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatRadioChange, MatRadioModule } from '@angular/material/radio';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MediaService } from '@igo2/core/media';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { SearchSourceService } from '../shared/search-source.service';\nimport {\n  sourceCanReverseSearch,\n  sourceCanReverseSearchAsSummary,\n  sourceCanSearch\n} from '../shared/search.utils';\nimport { SearchSource } from '../shared/sources/source';\nimport {\n  SearchSourceSettings,\n  SettingOptions\n} from '../shared/sources/source.interfaces';\n\n/**\n * This component allows a user to select a search type yo enable. In it's\n * current version, only one search type can be selected at once (radio). If\n * this component were to support more than one search source enabled (checkbox),\n * the searchbar component would require a small change to it's\n * placeholder getter. The search source service already supports having\n * more than one search source enabled.\n */\n@Component({\n  selector: 'igo-search-settings',\n  templateUrl: './search-settings.component.html',\n  styleUrls: ['./search-settings.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatButtonModule,\n    MatTooltipModule,\n    MatMenuModule,\n    MatIconModule,\n    NgIf,\n    NgFor,\n    MatCheckboxModule,\n    NgSwitch,\n    NgSwitchCase,\n    MatRadioModule,\n    MatDividerModule,\n    MatSlideToggleModule,\n    IgoLanguageModule\n  ]\n})\nexport class SearchSettingsComponent implements OnInit {\n  public hasPointerReverseSearchSource = false;\n  public searchSourcesAllEnabled = false;\n\n  public buffer = [];\n  public lastKeyTime = Date.now();\n\n  public displayBlock = 'block';\n\n  get isTouchScreen(): boolean {\n    return this.mediaService.isTouchScreen();\n  }\n\n  @Input() pointerSummaryEnabled = false;\n  @Input() searchResultsGeometryEnabled = false;\n  @Input() reverseSearchCoordsFormatEnabled = false;\n\n  /**\n   * Event emitted when the enabled search source changes\n   */\n  @Output() searchSourceChange = new EventEmitter<SearchSource>();\n\n  /**\n   * Event emitted when the pointer summary is activated\n   */\n  @Output() pointerSummaryStatus = new EventEmitter<boolean>();\n\n  /**\n   * Event emitted when the show geometry summary is changed\n   */\n  @Output() searchResultsGeometryStatus = new EventEmitter<boolean>();\n\n  /**\n   * Event emitted when the coords format is changed\n   */\n  @Output() reverseSearchCoordsFormatStatus = new EventEmitter<boolean>();\n\n  @HostListener('document:keydown', ['$event'])\n  handleKeyboardEvent(event: KeyboardEvent) {\n    if (event.key === 'F2') {\n      this.pointerSummaryEnabled = !this.pointerSummaryEnabled;\n      this.pointerSummaryStatus.emit(this.pointerSummaryEnabled);\n    }\n  }\n\n  constructor(\n    private searchSourceService: SearchSourceService,\n    private mediaService: MediaService,\n    private storageService: StorageService\n  ) {}\n\n  ngOnInit(): void {\n    this.hasPointerReverseSearchSource =\n      this.hasReverseSearchSourcesForPointerSummary();\n  }\n\n  /**\n   * Get all search sources\n   * @internal\n   */\n  getSearchSources(): SearchSource[] {\n    const textSearchSources = this.searchSourceService\n      .getSources()\n      .filter(sourceCanSearch)\n      .filter((s) => s.available && s.getId() !== 'map' && s.showInSettings);\n\n    const reverseSearchSources = this.searchSourceService\n      .getSources()\n      .filter(sourceCanReverseSearch)\n      .filter((s) => s.available && s.getId() !== 'map' && s.showInSettings);\n    const sources = textSearchSources.concat(reverseSearchSources);\n    this.computeSourcesCheckAllBehavior(sources);\n    return sources;\n  }\n\n  /**\n   * Get all search sources usable for pointer summary\n   * @internal\n   */\n  hasReverseSearchSourcesForPointerSummary(): boolean {\n    if (\n      this.searchSourceService\n        .getEnabledSources()\n        .filter(sourceCanReverseSearchAsSummary).length\n    ) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Triggered when a setting is checked (checkbox style)\n   * @internal\n   */\n  settingsValueCheckedCheckbox(\n    event: MatCheckboxChange,\n    source: SearchSource,\n    setting: SearchSourceSettings,\n    settingValue: SettingOptions\n  ) {\n    settingValue.enabled = event.checked;\n    source.setParamFromSetting(setting);\n    this.searchSourceChange.emit(source);\n  }\n\n  /**\n   * Defining the action to do for check/uncheck checkboxes (settings)\n   * return true if all checkbox must be checked\n   * return false if all checkbox must be unchecked\n   * @internal\n   */\n  computeSettingCheckAllBehavior(setting: SearchSourceSettings) {\n    if (setting.allEnabled === undefined) {\n      if (setting.values.find((settingValue) => settingValue.enabled)) {\n        setting.allEnabled = false;\n      } else {\n        setting.allEnabled = true;\n      }\n    } else {\n      setting.allEnabled = !setting.allEnabled;\n    }\n  }\n\n  /**\n   * Defining the action to do for check/uncheck checkboxes (sources)\n   * return true if all checkbox must be checked\n   * return false if all checkbox must be unchecked\n   * @internal\n   */\n  computeSourcesCheckAllBehavior(sources: SearchSource[]) {\n    const enabledSourcesCnt = sources.filter((source) => source.enabled).length;\n    const disabledSourcesCnt = sources.filter(\n      (source) => !source.enabled\n    ).length;\n    this.searchSourcesAllEnabled =\n      enabledSourcesCnt >= disabledSourcesCnt ? false : true;\n  }\n\n  /**\n   * Triggered when the check all / uncheck all type is clicked,\n   * @internal\n   */\n  checkUncheckAll(event, source: SearchSource, setting: SearchSourceSettings) {\n    event.stopPropagation();\n    this.computeSettingCheckAllBehavior(setting);\n    setting.values.forEach((settingValue) => {\n      settingValue.enabled = setting.allEnabled;\n    });\n    source.setParamFromSetting(setting);\n    this.searchSourceChange.emit(source);\n  }\n\n  /**\n   * Triggered when the check all / uncheck all type is clicked,\n   * @internal\n   */\n  checkUncheckAllSources(event) {\n    event.stopPropagation();\n    this.getSearchSources().map((source) => {\n      source.enabled = this.searchSourcesAllEnabled;\n      this.searchSourceChange.emit(source);\n    });\n  }\n\n  /**\n   * Triggered when a setting is checked (radiobutton style)\n   * @internal\n   */\n  settingsValueCheckedRadioButton(\n    event: MatRadioChange,\n    source: SearchSource,\n    setting: SearchSourceSettings,\n    settingValue: SettingOptions\n  ) {\n    setting.values.forEach((conf) => {\n      if (conf.value !== settingValue.value) {\n        conf.enabled = !event.source.checked;\n      } else {\n        conf.enabled = event.source.checked;\n      }\n    });\n    source.setParamFromSetting(setting);\n    this.searchSourceChange.emit(source);\n  }\n\n  onCheckSearchSource(event: MatCheckboxChange, source: SearchSource) {\n    source.enabled = event.checked;\n    const storage = (this.storageService.get(source.getId() + '.options') ||\n      {}) as SettingOptions;\n    storage.enabled = source.enabled;\n    this.storageService.set(source.getId() + '.options', storage);\n    this.searchSourceChange.emit(source);\n  }\n\n  getAvailableValues(setting: SearchSourceSettings) {\n    return setting.values.filter((s) => s.available !== false);\n  }\n\n  getAvailableHashtagsValues(setting: SettingOptions) {\n    if (setting.hashtags) {\n      return setting.hashtags.map((h) => '#' + h).join(', ');\n    }\n    return;\n  }\n\n  stopPropagation(event) {\n    event.stopPropagation();\n  }\n\n  changePointerReverseSearch(event) {\n    this.pointerSummaryEnabled = event.checked;\n    this.pointerSummaryStatus.emit(this.pointerSummaryEnabled);\n  }\n\n  changeSearchResultsGeometry(event) {\n    this.searchResultsGeometryEnabled = event.checked;\n    this.searchResultsGeometryStatus.emit(this.searchResultsGeometryEnabled);\n  }\n\n  reverseSearchCoordsFormat(event) {\n    this.reverseSearchCoordsFormatEnabled = event.checked;\n    this.reverseSearchCoordsFormatStatus.emit(\n      this.reverseSearchCoordsFormatEnabled\n    );\n  }\n}\n","<div class=\"igo-search-settings\">\n  <button\n    mat-icon-button\n    class=\"igo-search-settings-button\"\n    color=\"primary\"\n    tooltip-position=\"below\"\n    matTooltipShowDelay=\"500\"\n    [matTooltip]=\"'igo.geo.search.menu.tooltip' | translate\"\n    [matMenuTriggerFor]=\"searchSettingsMenu\"\n  >\n    <mat-icon>expand_more</mat-icon>\n  </button>\n  <mat-menu #searchSettingsMenu=\"matMenu\" class=\"no-border-radius\">\n    <div class=\"checkAllButton\" *ngIf=\"getSearchSources().length > 4\">\n      <button mat-raised-button (click)=\"checkUncheckAllSources($event)\">\n        {{\n          !searchSourcesAllEnabled\n            ? ('igo.geo.search.searchSources.unselectAll' | translate)\n            : ('igo.geo.search.searchSources.selectAll' | translate)\n        }}\n      </button>\n    </div>\n    <ng-container *ngFor=\"let source of getSearchSources()\">\n      <span class=\"igo-search-settings-search-source\">\n        <mat-checkbox\n          class=\"igo-search-settings-checkbox\"\n          [checked]=\"source.enabled\"\n          [value]=\"$any(source)\"\n          (click)=\"$event.stopPropagation()\"\n          (change)=\"onCheckSearchSource($event, source)\"\n        >\n        </mat-checkbox>\n        <button\n          *ngIf=\"source.settings.length > 0\"\n          [matMenuTriggerFor]=\"sub_menu\"\n          mat-menu-item\n        >\n          {{ source.title }}\n        </button>\n        <button mat-menu-item *ngIf=\"source.settings.length === 0\">\n          {{ source.title }}\n        </button>\n      </span>\n      <mat-menu #sub_menu=\"matMenu\">\n        <ng-container *ngFor=\"let setting of source.settings\">\n          <button mat-menu-item [matMenuTriggerFor]=\"test_sub_menu\">\n            {{\n              'igo.geo.search.searchSources.settings.' + setting.title\n                | translate\n            }}\n          </button>\n          <mat-menu\n            #test_sub_menu=\"matMenu\"\n            [ngSwitch]=\"setting.type\"\n            yPosition=\"above\"\n          >\n            <span *ngSwitchCase=\"'radiobutton'\">\n              <mat-radio-group\n                class=\"igo-search-settings-radio-group\"\n                [value]=\"setting\"\n              >\n                <mat-radio-button\n                  *ngFor=\"let settingValue of setting.values\"\n                  class=\"mat-typography\"\n                  [value]=\"settingValue\"\n                  [matTooltip]=\"getAvailableHashtagsValues(settingValue)\"\n                  [checked]=\"settingValue.enabled\"\n                  (click)=\"$event.stopPropagation()\"\n                  (change)=\"\n                    settingsValueCheckedRadioButton(\n                      $event,\n                      source,\n                      setting,\n                      settingValue\n                    )\n                  \"\n                >\n                  {{ settingValue.title | translate }}\n                </mat-radio-button>\n              </mat-radio-group>\n            </span>\n            <span *ngSwitchCase=\"'checkbox'\">\n              <div class=\"checkAllButton\" *ngIf=\"setting.values.length > 3\">\n                <button\n                  mat-raised-button\n                  (click)=\"checkUncheckAll($event, source, setting)\"\n                >\n                  {{\n                    setting.allEnabled || setting.allEnabled === undefined\n                      ? ('igo.geo.search.searchSources.settings.unselectAll'\n                        | translate)\n                      : ('igo.geo.search.searchSources.settings.selectAll'\n                        | translate)\n                  }}\n                </button>\n              </div>\n              <div\n                class=\"igo-search-settings-sub-menu\"\n                mat-menu-item\n                *ngFor=\"let settingValue of getAvailableValues(setting)\"\n              >\n                <mat-checkbox\n                  [style.display]=\"displayBlock\"\n                  [checked]=\"settingValue.enabled\"\n                  [value]=\"$any(setting)\"\n                  [matTooltip]=\"getAvailableHashtagsValues(settingValue)\"\n                  (click)=\"$event.stopPropagation()\"\n                  (change)=\"\n                    settingsValueCheckedCheckbox(\n                      $event,\n                      source,\n                      setting,\n                      settingValue\n                    )\n                  \"\n                >\n                  {{ settingValue.title | translate }}\n                </mat-checkbox>\n              </div>\n            </span>\n          </mat-menu>\n        </ng-container>\n      </mat-menu>\n    </ng-container>\n    <mat-divider></mat-divider>\n    <span class=\"pointer-summary-slide-toggle-container\">\n      <div mat-menu-item>\n        <mat-slide-toggle\n          class=\"search-option\"\n          (change)=\"changePointerReverseSearch($event)\"\n          tooltip-position=\"below\"\n          *ngIf=\"hasPointerReverseSearchSource && !isTouchScreen\"\n          matTooltipShowDelay=\"500\"\n          [matTooltip]=\"\n            'igo.geo.search.pointerSearchSummary.tooltip' | translate\n          \"\n          (click)=\"$event.stopPropagation()\"\n          [checked]=\"pointerSummaryEnabled\"\n        >\n          {{ 'igo.geo.search.pointerSearchSummary.title' | translate }}\n        </mat-slide-toggle>\n      </div>\n      <div mat-menu-item>\n        <mat-slide-toggle\n          class=\"search-option\"\n          (change)=\"changeSearchResultsGeometry($event)\"\n          tooltip-position=\"below\"\n          matTooltipShowDelay=\"500\"\n          [matTooltip]=\"\n            'igo.geo.search.searchResultsGeometry.tooltip' | translate\n          \"\n          (click)=\"$event.stopPropagation()\"\n          [checked]=\"searchResultsGeometryEnabled\"\n        >\n          {{ 'igo.geo.search.searchResultsGeometry.title' | translate }}\n        </mat-slide-toggle>\n      </div>\n      <div mat-menu-item>\n        <mat-slide-toggle\n          class=\"search-option\"\n          (change)=\"reverseSearchCoordsFormat($event)\"\n          tooltip-position=\"below\"\n          matTooltipShowDelay=\"500\"\n          [matTooltip]=\"\n            reverseSearchCoordsFormatEnabled\n              ? ('igo.geo.search.reverseCoordFormat.tooltipLatLon' | translate)\n              : ('igo.geo.search.reverseCoordFormat.tooltipLonLat' | translate)\n          \"\n          (click)=\"$event.stopPropagation()\"\n          [checked]=\"reverseSearchCoordsFormatEnabled\"\n        >\n          {{ 'igo.geo.search.reverseCoordFormat.title' | translate }}\n        </mat-slide-toggle>\n      </div>\n    </span>\n  </mat-menu>\n</div>\n","import { AsyncPipe, NgClass, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport {\n  FloatLabelType,\n  MatFormFieldAppearance,\n  MatFormFieldModule\n} from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { EntityStore } from '@igo2/common/entity';\nimport { ConfigService } from '@igo2/core/config';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Subscription, timer } from 'rxjs';\nimport { debounce, distinctUntilChanged } from 'rxjs/operators';\n\nimport { SearchSelectorComponent } from '../search-selector/search-selector.component';\nimport { SearchSettingsComponent } from '../search-settings/search-settings.component';\nimport { SearchSourceService } from '../shared/search-source.service';\nimport { SEARCH_TYPES } from '../shared/search.enums';\nimport { Research, SearchResult } from '../shared/search.interfaces';\nimport { SearchService } from '../shared/search.service';\n\n/**\n * Searchbar that triggers a research in all search sources enabled.\n * If the store input is defined, the search results will be loaded\n * into that store. An event is always emitted when a research is completed.\n */\n@Component({\n  selector: 'igo-search-bar',\n  templateUrl: './search-bar.component.html',\n  styleUrls: ['./search-bar.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgClass,\n    MatFormFieldModule,\n    NgIf,\n    MatInputModule,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    MatDividerModule,\n    SearchSelectorComponent,\n    SearchSettingsComponent,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SearchBarComponent implements OnInit, OnDestroy {\n  /**\n   * Invalid keys\n   */\n  static invalidKeys = [\n    'Control',\n    'Shift',\n    'Alt',\n    'ArrowDown',\n    'ArrowUp',\n    'ArrowRight',\n    'ArrowLeft'\n  ];\n\n  readonly placeholder$ = new BehaviorSubject<string>(\n    'igo.geo.search.placeholder'\n  );\n\n  readonly empty$ = new BehaviorSubject<boolean>(true);\n\n  /**\n   * Subscription to the ssearch bar term\n   */\n  private term$$: Subscription;\n\n  /**\n   * Search term stream\n   */\n  private stream$ = new BehaviorSubject<string>('');\n\n  /**\n   * Subscription to the search term stream\n   */\n  private stream$$: Subscription;\n\n  /**\n   * Subscription to the search type\n   */\n  private searchType$$: Subscription;\n\n  private researches$$: Subscription[];\n\n  /**\n   * whether to show search button or not\n   */\n\n  public showSearchButton = false;\n\n  /**\n   * List of available search types\n   */\n  @Input() searchTypes: string[] = SEARCH_TYPES;\n\n  @Input() withDivider: boolean;\n\n  /**\n   * Search term\n   */\n  @Input()\n  set searchType(value: string) {\n    this.setSearchType(value);\n  }\n  get searchType(): string {\n    return this.searchType$.value;\n  }\n  readonly searchType$ = new BehaviorSubject<string>(undefined);\n\n  /**\n   * Event emitted when the pointer summary is activated by the searchbar setting\n   */\n  @Output() pointerSummaryStatus = new EventEmitter<boolean>();\n\n  /**\n   * Event emitted when the show geometry setting is changed\n   */\n  @Output() searchResultsGeometryStatus = new EventEmitter<boolean>();\n\n  /**\n   * Event emitted when the coords format setting is changed\n   */\n  @Output() reverseSearchCoordsFormatStatus = new EventEmitter<boolean>();\n\n  /**\n   * Search term\n   */\n  @Input()\n  set term(value: string) {\n    this.setTerm(value);\n  }\n  get term(): string {\n    return this.term$.value;\n  }\n  readonly term$ = new BehaviorSubject<string>('');\n\n  /**\n   * Whether this component is disabled\n   */\n  @Input()\n  set disabled(value: boolean) {\n    this.disabled$.next(value);\n  }\n  get disabled(): boolean {\n    return this.disabled$.value;\n  }\n  readonly disabled$ = new BehaviorSubject<boolean>(false);\n\n  @Input() pointerSummaryEnabled = false;\n  @Input() searchResultsGeometryEnabled = false;\n\n  /**\n   * When reverse coordinates status change\n   */\n  @Input()\n  get reverseSearchCoordsFormatEnabled(): boolean {\n    return this._reverseSearchCoordsFormatEnabled;\n  }\n  set reverseSearchCoordsFormatEnabled(value: boolean) {\n    this._reverseSearchCoordsFormatEnabled = value;\n    this.setTerm(this.term, true);\n  }\n  private _reverseSearchCoordsFormatEnabled = false;\n\n  /**\n   * Whether a float label should be displayed\n   */\n  @Input() floatLabel: FloatLabelType = 'auto';\n\n  @Input() appearance: MatFormFieldAppearance = 'fill';\n\n  @Input() placeholder: string;\n\n  @Input() label: string;\n\n  /**\n   * Icons color (search and clear)\n   */\n  @Input() color = 'primary';\n\n  @Input() termSplitter = '|';\n\n  /**\n   * Debounce time between each keystroke\n   */\n  @Input() debounce = 200;\n\n  /**\n   * Minimum term length required to trigger a research\n   */\n  @Input() minLength = 2;\n\n  /**\n   * Search Selector\n   */\n  @Input() searchSelector = false;\n\n  /**\n   * Search Settings\n   */\n  @Input() searchSettings = false;\n\n  /**\n   * Force coordinates in north america\n   */\n  @Input() forceNA = false;\n\n  /**\n   * Search results store\n   */\n  @Input() store: EntityStore<SearchResult>;\n\n  /**\n   * Event emitted when the search term changes\n   */\n  @Output() searchTermChange = new EventEmitter<string>();\n\n  /**\n   * Event emitted when a research is completed\n   */\n  @Output() search = new EventEmitter<{\n    research: Research;\n    results: SearchResult[];\n  }>();\n\n  /**\n   * Event emitted when the search type changes\n   */\n  @Output() searchTypeChange = new EventEmitter<string>();\n\n  /**\n   * Event emitted when the search type changes\n   */\n  @Output() clearFeature = new EventEmitter();\n\n  /**\n   * Event emitted when the search settings changes\n   */\n  @Output() searchSettingsChange = new EventEmitter();\n\n  /**\n   * Input element\n   * @internal\n   */\n  @ViewChild('input', { static: true }) input: ElementRef;\n\n  /**\n   * Whether the search bar is empty\n   * @internal\n   */\n  get empty(): boolean {\n    return this.term.length === 0;\n  }\n\n  constructor(\n    private configService: ConfigService,\n    private searchService: SearchService,\n    private searchSourceService: SearchSourceService\n  ) {}\n\n  /**\n   * Subscribe to the search term stream and trigger researches\n   * @internal\n   */\n  ngOnInit(): void {\n    this.term$$ = this.term$.subscribe((term: string) => {\n      this.empty$.next(term === undefined || term.length === 0);\n    });\n\n    this.stream$$ = this.stream$\n      .pipe(debounce(() => timer(this.debounce)))\n      .subscribe((term: string) => this.onSetTerm(term));\n\n    this.handlePlaceholder();\n\n    this.searchType$$ = this.searchType$\n      .pipe(distinctUntilChanged())\n      .subscribe((searchType: string) => this.onSetSearchType(searchType));\n\n    const configValue = this.configService.getConfig(\n      'searchBar.showSearchButton'\n    );\n    this.showSearchButton = configValue !== undefined ? configValue : false;\n  }\n\n  /**\n   * Unsubscribe to the search term stream\n   * @internal\n   */\n  ngOnDestroy() {\n    this.term$$.unsubscribe();\n    this.stream$$.unsubscribe();\n    this.searchType$$.unsubscribe();\n  }\n\n  /**\n   * When a user types, validates the key and send it into the\n   * stream if it's valid\n   * @param event Keyboard event\n   * @internal\n   */\n  onKeyup(event: KeyboardEvent) {\n    const key = event.key;\n    if (!this.keyIsValid(key)) {\n      return;\n    }\n    const term = (event.target as HTMLInputElement).value;\n    this.setTerm(term);\n  }\n\n  /**\n   * Clear the stream and the input\n   * @internal\n   */\n  onClearButtonClick() {\n    this.clear();\n    this.clearFeature.emit();\n  }\n\n  /**\n   * Update search type\n   * @param searchType Enabled search type\n   * @internal\n   */\n  onSearchTypeChange(searchType: string) {\n    this.setSearchType(searchType);\n  }\n\n  /**\n   * Update the placeholder with the enabled search type. The placeholder\n   * for all availables search typers needs to be defined in the locale\n   * files or an error will be thrown.\n   * @param searchType Enabled search type\n   * @internal\n   */\n  setSearchType(searchType: string) {\n    this.searchType$.next(searchType);\n  }\n\n  onSearchSettingsChange() {\n    this.doSearch(this.term);\n    this.searchSettingsChange.emit();\n    this.handlePlaceholder();\n  }\n\n  /**\n   * Send the term into the stream only if this component is not disabled\n   * @param term Search term\n   */\n  setTerm(term: string, reverseCoordEvent?: boolean) {\n    if (this.disabled) {\n      return;\n    }\n\n    term = term || '';\n\n    if (term !== this.term && !reverseCoordEvent) {\n      this.term$.next(term);\n    }\n\n    const slug = term.replace(/(#[^\\s]*)/g, '').trim();\n    if (slug.length >= this.minLength || slug.length === 0) {\n      this.stream$.next(term);\n    }\n  }\n\n  handleSearch(): void {\n    this.doSearch(this.term);\n  }\n\n  /**\n   * Clear the stream and the input\n   */\n  private clear() {\n    this.term$.next('');\n    this.stream$.next('');\n    this.input.nativeElement.focus();\n  }\n\n  /**\n   * Validate if a given key stroke is a valid input\n   */\n  private keyIsValid(key: string) {\n    return SearchBarComponent.invalidKeys.indexOf(key) === -1;\n  }\n\n  /**\n   * When the search term changes, emit an event and trigger a\n   * research in every enabled search sources.\n   * @param term Search term\n   */\n  private onSetTerm(term: string | undefined) {\n    this.searchTermChange.emit(term);\n    this.doSearch(term);\n  }\n\n  private handlePlaceholder() {\n    const searchTypes = [\n      ...new Set(\n        this.searchSourceService\n          .getEnabledSources()\n          .filter((ss) => !['map', 'coordinatesreverse'].includes(ss.getId()))\n          .map((ss) => ss.getType())\n      )\n    ];\n\n    let placeholder = `igo.geo.search.placeholder`;\n    if (searchTypes.length === 1) {\n      placeholder = `igo.geo.search.${searchTypes[0].toLowerCase()}.placeholder`;\n    } else if (searchTypes.length === 0) {\n      placeholder = `igo.geo.search.emptyType.placeholder`;\n    }\n    this.placeholder$.next(placeholder);\n  }\n\n  private onSetSearchType(searchType: string) {\n    if (searchType === undefined || searchType === null) {\n      return;\n    }\n\n    this.searchTypeChange.emit(searchType);\n\n    const placeholder = `igo.geo.search.${searchType.toLowerCase()}.placeholder`;\n    this.placeholder$.next(placeholder);\n\n    this.setTerm(this.term);\n  }\n\n  /**\n   * Execute the search\n   * @param term Search term\n   */\n  private doSearch(rawTerm: string | undefined) {\n    if (this.researches$$) {\n      this.researches$$.map((research) => research.unsubscribe());\n      this.researches$$ = undefined;\n    }\n\n    let terms;\n    if (\n      this.termSplitter &&\n      rawTerm.match(new RegExp(this.termSplitter, 'g'))\n    ) {\n      terms = rawTerm\n        .split(this.termSplitter)\n        .filter((t) => t.length >= this.minLength);\n      if (this.store) {\n        this.store.clear();\n      }\n    } else {\n      terms = [rawTerm];\n    }\n\n    let researches: Research[] = [];\n    terms.map((term: string) => {\n      const slug = term ? term.replace(/(#[^\\s]*)/g, '').trim() : '';\n      if (slug === '') {\n        if (this.store !== undefined) {\n          this.store.clear();\n        }\n        return;\n      }\n\n      researches = researches.concat(\n        this.searchService.search(term, {\n          forceNA: this.forceNA\n        })\n      );\n    });\n    this.researches$$ = researches.map((research) => {\n      return research.request.subscribe((results: SearchResult[]) => {\n        this.onResearchCompleted(research, results);\n      });\n    });\n  }\n\n  /**\n   * When a research  is completed, emit an event and update\n   * the store's items.\n   * @param research Research\n   * @param results Research results\n   */\n  private onResearchCompleted(research: Research, results: SearchResult[]) {\n    this.search.emit({ research, results });\n\n    if (this.store !== undefined) {\n      const newResults = this.store\n        .all()\n        .filter((result) => result.source !== research.source)\n        .concat(results);\n      this.store.updateMany(newResults);\n    }\n  }\n}\n","<div class=\"igo-search-bar-container\" [ngClass]=\"{ empty: empty$ | async }\">\n  <mat-form-field [floatLabel]=\"floatLabel\" [appearance]=\"appearance\">\n    <mat-label *ngIf=\"label\">{{ label }}</mat-label>\n    <input\n      #input\n      matInput\n      autocomplete=\"off\"\n      [ngClass]=\"{ hasSearchIcon: showSearchButton }\"\n      [disabled]=\"disabled$ | async\"\n      [placeholder]=\"\n        placeholder\n          ? placeholder\n          : (placeholder$ | async)\n            ? (placeholder$.value | translate)\n            : undefined\n      \"\n      [value]=\"term$ | async\"\n      (keyup)=\"onKeyup($event)\"\n    />\n    <button\n      *ngIf=\"(empty$ | async) === false\"\n      mat-icon-button\n      matSuffix\n      [color]=\"color\"\n      (click)=\"onClearButtonClick()\"\n      [matTooltip]=\"'igo.geo.search.clearSearch' | translate\"\n    >\n      <mat-icon>close</mat-icon>\n    </button>\n  </mat-form-field>\n\n  <mat-divider *ngIf=\"withDivider\" [vertical]=\"true\"></mat-divider>\n\n  <div class=\"search-bar-buttons\">\n    <button\n      *ngIf=\"showSearchButton\"\n      mat-icon-button\n      [color]=\"color\"\n      (click)=\"handleSearch()\"\n    >\n      <mat-icon>search</mat-icon>\n    </button>\n\n    <igo-search-selector\n      *ngIf=\"searchSelector\"\n      [searchTypes]=\"searchTypes\"\n      [searchType]=\"searchType$ | async\"\n      (searchTypeChange)=\"onSearchTypeChange($event)\"\n    >\n    </igo-search-selector>\n\n    <igo-search-settings\n      *ngIf=\"searchSettings\"\n      [pointerSummaryEnabled]=\"pointerSummaryEnabled\"\n      (pointerSummaryStatus)=\"pointerSummaryStatus.emit($event)\"\n      [searchResultsGeometryEnabled]=\"searchResultsGeometryEnabled\"\n      (searchResultsGeometryStatus)=\"searchResultsGeometryStatus.emit($event)\"\n      [reverseSearchCoordsFormatEnabled]=\"reverseSearchCoordsFormatEnabled\"\n      (reverseSearchCoordsFormatStatus)=\"\n        reverseSearchCoordsFormatStatus.emit($event)\n      \"\n      (searchSourceChange)=\"onSearchSettingsChange()\"\n    >\n    </igo-search-settings>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { SearchBarComponent } from './search-bar.component';\n\n/**\n * @deprecated import the SearchBarComponent directly\n */\n@NgModule({\n  imports: [SearchBarComponent],\n  exports: [SearchBarComponent]\n})\nexport class IgoSearchBarModule {}\n","import { NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport {\n  getEntityIcon,\n  getEntityTitle,\n  getEntityTitleHtml\n} from '@igo2/common/entity';\nimport { StopPropagationDirective } from '@igo2/common/stop-propagation';\n\nimport olFormatGeoJSON from 'ol/format/GeoJSON';\n\nimport { FeatureMotion, moveToOlFeatures } from '../../feature';\nimport { IgoMap } from '../../map/shared/map';\nimport { SearchResult } from '../shared/search.interfaces';\n\n/**\n * Search results list item\n */\n@Component({\n  selector: 'igo-search-results-item',\n  templateUrl: './search-results-item.component.html',\n  styleUrls: ['./search-results-item.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatListModule,\n    NgIf,\n    MatIconModule,\n    MatTooltipModule,\n    MatButtonModule,\n    StopPropagationDirective\n  ]\n})\nexport class SearchResultsItemComponent {\n  /**\n   * Search result item\n   */\n  @Input() result: SearchResult;\n\n  @Input() map: IgoMap;\n\n  /**\n   * Search result title\n   * @internal\n   */\n\n  /**\n   * to show hide results icons\n   */\n  @Input() showIcons: boolean;\n\n  /**\n   * Whether there should be a zoom button\n   */\n  @Input() withZoomButton = false;\n\n  @Output() zoomEvent = new EventEmitter<boolean>();\n\n  private format = new olFormatGeoJSON();\n\n  get title(): string {\n    return getEntityTitle(this.result);\n  }\n\n  /**\n   * Search result HTML title\n   * @internal\n   */\n  get titleHtml(): string {\n    return getEntityTitleHtml(this.result);\n  }\n\n  /**\n   * Search result tooltip\n   * @internal\n   */\n  get tooltipHtml(): string {\n    return this.titleHtml\n      .replace(/<small?[^>]+(>|$)/g, '\\n')\n      .replace(/<\\/?[^>]+(>|$)/g, '');\n  }\n\n  /**\n   * Search result icon\n   * @internal\n   */\n  get icon(): string {\n    return getEntityIcon(this.result);\n  }\n\n  onZoomHandler() {\n    const olFeature = this.format.readFeature(this.result.data, {\n      dataProjection: this.result.data.projection,\n      featureProjection: this.map.projection\n    });\n    moveToOlFeatures(\n      this.map.viewController,\n      [olFeature],\n      FeatureMotion.Default\n    );\n  }\n\n  /**\n   * On mouse event, mouseenter /mouseleave\n   * @internal\n   */\n  onMouseEvent(event) {\n    const element = event.target;\n    const type = event.type;\n    switch (type) {\n      case 'mouseenter': {\n        const hideBtn = element.querySelector('#hide-save-search-result-btn');\n        hideBtn?.setAttribute('id', 'show-save-search-result-btn');\n        break;\n      }\n      case 'mouseleave': {\n        const showBtn = element.querySelector('#show-save-search-result-btn');\n        showBtn?.setAttribute('id', 'hide-save-search-result-btn');\n        break;\n      }\n      default:\n        break;\n    }\n  }\n}\n","<mat-list-item\n  (mouseenter)=\"onMouseEvent($event)\"\n  (mouseleave)=\"onMouseEvent($event)\"\n>\n  <mat-icon *ngIf=\"icon\" matListItemIcon>{{\n    showIcons ? icon : 'blank'\n  }}</mat-icon>\n\n  <div\n    matListItemTitle\n    *ngIf=\"titleHtml; else normalTitle\"\n    [innerHtml]=\"titleHtml\"\n    matTooltipShowDelay=\"500\"\n    [matTooltip]=\"tooltipHtml\"\n    matTooltipClass=\"search-result-tooltip\"\n  ></div>\n  <ng-template #normalTitle>\n    <span\n      matListItemTitle\n      *ngIf=\"!titleHtml\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"title\"\n      >{{ title }}</span\n    >\n  </ng-template>\n\n  <div matListItemMeta>\n    <button\n      *ngIf=\"withZoomButton\"\n      igoStopPropagation\n      mat-icon-button\n      (click)=\"onZoomHandler()\"\n    >\n      <mat-icon>search</mat-icon>\n    </button>\n\n    <ng-content select=\"[igoSearchItemToolbar]\"> </ng-content>\n  </div>\n</mat-list-item>\n","import { AsyncPipe, NgFor } from '@angular/common';\nimport { Component, Inject, OnInit, Optional } from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder,\n  UntypedFormGroup,\n  Validators\n} from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport {\n  MAT_DIALOG_DATA,\n  MatDialogActions,\n  MatDialogContent,\n  MatDialogRef,\n  MatDialogTitle\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\n\nimport { ListComponent, ListItemDirective } from '@igo2/common/list';\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { Observable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\nimport { Layer } from '../../layer/shared';\nimport { SearchResult } from '../shared';\nimport { SearchResultsItemComponent } from './search-results-item.component';\n\n@Component({\n  selector: 'igo-save-feature-dialog',\n  templateUrl: './save-feature-dialog.component.html',\n  styleUrls: ['./save-feature-dialog.component.scss'],\n  standalone: true,\n  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    FormsModule,\n    ReactiveFormsModule,\n    ListComponent,\n    SearchResultsItemComponent,\n    ListItemDirective,\n    MatFormFieldModule,\n    MatInputModule,\n    MatAutocompleteModule,\n    NgFor,\n    MatOptionModule,\n    MatListModule,\n    MatDialogActions,\n    MatButtonModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SaveFeatureDialogComponent implements OnInit {\n  public form: UntypedFormGroup;\n  feature: SearchResult;\n  layers: Layer[] = [];\n  filteredLayers$: Observable<Layer[]>;\n\n  constructor(\n    private formBuilder: UntypedFormBuilder,\n    public languageService: LanguageService,\n    public dialogRef: MatDialogRef<SaveFeatureDialogComponent>,\n    @Optional()\n    @Inject(MAT_DIALOG_DATA)\n    public data: { feature: SearchResult; layers: Layer[] }\n  ) {\n    this.form = this.formBuilder.group({\n      layerName: ['', [Validators.required]]\n    });\n  }\n\n  ngOnInit() {\n    this.feature = this.data.feature;\n    this.layers = this.data.layers;\n    this.filteredLayers$ = this.form.controls['layerName'].valueChanges.pipe(\n      startWith(''),\n      map((val) => this.filter(val))\n    );\n  }\n\n  private filter(val): Layer[] {\n    if (typeof val !== 'string') {\n      return;\n    }\n    return this.layers\n      .map((l) => l)\n      .filter((layer) =>\n        layer?.title?.toLowerCase().includes(val.toLowerCase())\n      );\n  }\n\n  displayFn(layer: Layer): string {\n    return layer && layer.title ? layer.title : '';\n  }\n\n  save() {\n    const data: { layer: string | Layer; feature: SearchResult } = {\n      layer: this.form.value.layerName,\n      feature: this.feature\n    };\n    this.dialogRef.close(data);\n  }\n\n  cancel() {\n    this.dialogRef.close();\n  }\n}\n","<h1 mat-dialog-title class=\"mat-typography\">\n  {{ 'igo.geo.layer.saveFeatureInLayer' | translate }}\n</h1>\n\n<div mat-dialog-content class=\"mat-typography\">\n  <form class=\"igo-form\" [formGroup]=\"form\">\n    <igo-list [navigation]=\"false\" [selection]=\"false\">\n      <igo-search-results-item\n        igoListItem\n        color=\"accent\"\n        [result]=\"feature\"\n        [showIcons]=\"true\"\n      >\n      </igo-search-results-item>\n    </igo-list>\n\n    <div class=\"igo-input-container\">\n      <mat-form-field>\n        <input\n          type=\"text\"\n          placeholder=\"{{ 'igo.geo.layer.chooseOrSet' | translate }}\"\n          matInput\n          [matAutocomplete]=\"auto\"\n          formControlName=\"layerName\"\n        />\n        <mat-autocomplete [displayWith]=\"displayFn\" #auto=\"matAutocomplete\">\n          <mat-option\n            *ngFor=\"let layer of filteredLayers$ | async\"\n            [value]=\"layer\"\n          >\n            <p matListItemTitle>{{ layer.title }}</p>\n          </mat-option>\n        </mat-autocomplete>\n      </mat-form-field>\n    </div>\n  </form>\n</div>\n\n<div mat-dialog-actions style=\"justify-content: center\">\n  <div class=\"igo-form-button-group create-layer-button-top-padding\">\n    <button mat-raised-button type=\"button\" (click)=\"cancel()\">\n      {{ 'igo.geo.layer.cancelBtn' | translate }}\n    </button>\n    <button\n      id=\"createLayerBtnDialog\"\n      mat-raised-button\n      type=\"button\"\n      color=\"primary\"\n      (click)=\"save()\"\n    >\n      {{ 'igo.geo.layer.saveBtn' | translate }}\n    </button>\n  </div>\n</div>\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit\n} from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoBadgeIconDirective } from '@igo2/common/badge';\nimport { EntityStore } from '@igo2/common/entity';\nimport { StopPropagationDirective } from '@igo2/common/stop-propagation';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { Media, MediaService } from '@igo2/core/media';\n\nimport OlOverlay from 'ol/Overlay';\nimport { VectorSourceEvent as OlVectorSourceEvent } from 'ol/source/Vector';\nimport Circle from 'ol/style/Circle';\nimport Fill from 'ol/style/Fill';\nimport Stroke from 'ol/style/Stroke';\nimport Style from 'ol/style/Style';\n\nimport { BehaviorSubject, Subscription, take } from 'rxjs';\n\nimport { DataSourceService } from '../../datasource/shared/datasource.service';\nimport { FeatureDataSource } from '../../datasource/shared/datasources';\nimport {\n  Feature,\n  FeatureMotion,\n  FeatureStore,\n  FeatureStoreLoadingStrategy,\n  FeatureStoreSelectionStrategy,\n  tryAddLoadingStrategy,\n  tryAddSelectionStrategy,\n  tryBindStoreLayer\n} from '../../feature';\nimport { LAYER } from '../../layer/shared/layer.enums';\nimport { LayerService } from '../../layer/shared/layer.service';\nimport { LayerOptions } from '../../layer/shared/layers/layer.interface';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport { IgoMap } from '../../map/shared/map';\nimport { getTooltipsOfOlGeometry } from '../../measure';\nimport { QueryableDataSourceOptions } from '../../query/shared';\nimport { SearchResult } from '../shared/search.interfaces';\nimport { SaveFeatureDialogComponent } from './save-feature-dialog.component';\n\n@Component({\n  selector: 'igo-search-add-button',\n  templateUrl: './search-results-add-button.component.html',\n  styleUrls: ['./search-results-add-button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    MatButtonModule,\n    StopPropagationDirective,\n    MatTooltipModule,\n    MatIconModule,\n    MatBadgeModule,\n    IgoBadgeIconDirective,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SearchResultAddButtonComponent implements OnInit, OnDestroy {\n  public tooltip$ = new BehaviorSubject<string>(\n    'igo.geo.catalog.layer.addToMap'\n  );\n\n  public addFeatureToLayerTooltip$ = new BehaviorSubject<string>(\n    'igo.geo.search.addToLayer'\n  );\n\n  private resolution$$: Subscription;\n  private layers$$: Subscription;\n\n  public inRange$ = new BehaviorSubject<boolean>(true);\n\n  public isVisible$ = new BehaviorSubject<boolean>(false);\n\n  public isPreview$ = new BehaviorSubject<boolean>(false);\n\n  private layersSubcriptions = [];\n\n  private lastTimeoutRequest;\n\n  private mouseInsideAdd = false;\n\n  @Input() layer: SearchResult;\n\n  @Input() store: EntityStore<SearchResult>;\n\n  /**\n   * Whether the layer is already added to the map\n   */\n  @Input() added: boolean;\n\n  /**\n   * The map to add the search result layer to\n   */\n  @Input() map: IgoMap;\n\n  /**\n   * show hide save search result in layer button\n   */\n  @Input() saveSearchResultInLayer = false;\n\n  @Input()\n  get color() {\n    return this._color;\n  }\n  set color(value: string) {\n    this._color = value;\n  }\n  private _color = 'primary';\n\n  @Input() stores: FeatureStore<Feature>[] = [];\n\n  get allLayers() {\n    return this.map.layerController.all.filter((layer) =>\n      String(layer.id).includes('igo-search-layer')\n    );\n  }\n  private mediaService$$: Subscription;\n  public isMobile = false;\n  constructor(\n    private layerService: LayerService,\n    private dialog: MatDialog,\n    private dataSourceService: DataSourceService,\n    private mediaService: MediaService\n  ) {}\n\n  /**\n   * @internal\n   */\n  ngOnInit(): void {\n    // check the view if is mobile or not\n    this.mediaService$$ = this.mediaService.media$.subscribe((media: Media) => {\n      if (media === Media.Mobile) {\n        this.isMobile = true;\n      }\n    });\n    if (this.layer.meta.dataType === 'Layer') {\n      this.added = !!this.map.layerController.getBySourceId(\n        this.layer.data.sourceOptions.id\n      );\n    }\n    this.layers$$ = this.map.layerController.all$.subscribe(() => {\n      this.isVisible();\n    });\n    this.resolution$$ = this.map.viewController.resolution$.subscribe(\n      (value) => {\n        this.isInResolutionsRange(value);\n        this.isVisible();\n      }\n    );\n  }\n\n  ngOnDestroy() {\n    this.resolution$$.unsubscribe();\n    this.layers$$.unsubscribe();\n    if (this.mediaService$$) {\n      this.mediaService$$.unsubscribe();\n    }\n  }\n\n  /**\n   * On mouse event, mouseenter /mouseleave\n   * @internal\n   */\n  onMouseEvent(event) {\n    this.onToggleClick(event);\n  }\n\n  /**\n   * On toggle button click, emit the added change event\n   * @internal\n   */\n  onToggleClick(currEvent: Event) {\n    if (typeof this.lastTimeoutRequest !== 'undefined') {\n      clearTimeout(this.lastTimeoutRequest);\n    }\n    const event = currEvent ? currEvent : ({} as Event);\n\n    if (event.type === 'mouseenter' && this.mouseInsideAdd) {\n      return;\n    }\n    switch (event.type) {\n      case 'click':\n        if (!this.isPreview$.value) {\n          if (this.added) {\n            this.remove();\n          } else {\n            this.add(event);\n          }\n        }\n        this.isPreview$.next(false);\n        break;\n      case 'mouseenter':\n        if (!this.isPreview$.value && !this.added) {\n          this.lastTimeoutRequest = setTimeout(() => {\n            this.add(event);\n            this.isPreview$.next(true);\n          }, 500);\n        }\n        this.mouseInsideAdd = true;\n        break;\n      case 'mouseleave':\n        clearTimeout(this.lastTimeoutRequest);\n        if (this.isPreview$.value) {\n          this.remove();\n          this.isPreview$.next(false);\n        }\n        this.mouseInsideAdd = false;\n        break;\n      default:\n        break;\n    }\n  }\n\n  private add(event: Event) {\n    if (!this.added) {\n      this.added = true;\n      this.addLayerToMap(event);\n    }\n  }\n\n  private remove() {\n    if (this.added) {\n      this.added = false;\n      this.removeLayerFromMap();\n      this.layersSubcriptions.map((s) => s.unsubscribe());\n      this.layersSubcriptions = [];\n    }\n  }\n\n  /**\n   * Emit added change event with added = true\n   */\n  private addLayerToMap(event?: Event) {\n    if (this.map === undefined) {\n      return;\n    }\n\n    if (this.layer.meta.dataType !== LAYER) {\n      return undefined;\n    }\n\n    const layerOptions = (this.layer as SearchResult<LayerOptions>).data;\n    if (layerOptions.sourceOptions.optionsFromApi === undefined) {\n      layerOptions.sourceOptions.optionsFromApi = true;\n    }\n    this.layersSubcriptions.push(\n      this.layerService.createAsyncLayer(layerOptions).subscribe((layer) => {\n        if (!layer) {\n          return;\n        }\n        if (event.type === 'click') {\n          this.map.layersAddedByClick$.next([layer]);\n        }\n        this.map.layerController.add(layer);\n      })\n    );\n  }\n\n  /**\n   * Emit added change event with added = false\n   */\n  private removeLayerFromMap() {\n    if (this.map === undefined) {\n      return;\n    }\n\n    if (this.layer.meta.dataType !== LAYER) {\n      return undefined;\n    }\n\n    const layer = this.map.layerController.getBySourceId(\n      this.layer.data.sourceOptions.id\n    );\n    if (!layer) {\n      return;\n    }\n    this.map.layerController.remove(layer);\n  }\n\n  isInResolutionsRange(resolution: number) {\n    const minResolution = this.layer.data.minResolution || 0;\n    const maxResolution = this.layer.data.maxResolution || Infinity;\n    this.inRange$.next(\n      resolution >= minResolution && resolution <= maxResolution\n    );\n  }\n\n  isVisible() {\n    if (this.layer?.data?.sourceOptions?.id) {\n      const oLayer = this.map.layerController.getBySourceId(\n        this.layer.data.sourceOptions.id\n      );\n\n      this.isVisible$.next(oLayer?.visible ?? false);\n    }\n  }\n\n  getBadgeIcon() {\n    if (this.inRange$.value) {\n      return this.isVisible$.value ? '' : 'visibility_off';\n    } else {\n      return 'visibility_off';\n    }\n  }\n\n  computeTooltip(): string {\n    if (this.added) {\n      if (this.isPreview$.value) {\n        return 'igo.geo.catalog.layer.addToMap';\n      } else if (this.inRange$.value) {\n        return this.isVisible$.value\n          ? 'igo.geo.catalog.layer.removeFromMap'\n          : 'igo.geo.catalog.layer.removeFromMapNotVisible';\n      } else {\n        return 'igo.geo.catalog.layer.removeFromMapOutRange';\n      }\n    } else {\n      return this.inRange$.value\n        ? 'igo.geo.catalog.layer.addToMap'\n        : 'igo.geo.catalog.layer.addToMapOutRange';\n    }\n  }\n\n  addFeatureToLayer() {\n    if (this.layer.meta.dataType !== 'Feature') {\n      return;\n    }\n\n    const selectedFeature = this.layer;\n    const dialogRef = this.dialog.open(SaveFeatureDialogComponent, {\n      width: '700px',\n      data: {\n        feature: selectedFeature,\n        layers: this.allLayers\n      }\n    });\n\n    dialogRef\n      .afterClosed()\n      .subscribe((data: { layer: string | any; feature: SearchResult }) => {\n        if (data) {\n          if (this.stores.length > 0) {\n            this.stores.map((store) => {\n              store.state.updateAll({ selected: false });\n              if (store?.layer) {\n                store.layer.visible = false;\n              }\n              return store;\n            });\n          }\n          // check if is new layer\n          if (typeof data.layer === 'string') {\n            this.createLayer(data.layer, data.feature);\n          } else {\n            const activeStore = this.stores.find(\n              (store) => store.layer.id === data.layer.id\n            );\n            activeStore.layer.visible = true;\n            activeStore.layer.opacity = 1;\n            this.addFeature(data.feature, activeStore);\n          }\n        }\n      });\n  }\n\n  createLayer(layerTitle: string, selectedFeature: SearchResult) {\n    const activeStore: FeatureStore<Feature> = new FeatureStore<Feature>([], {\n      map: this.map\n    });\n\n    const styles = [\n      new Style({\n        image: new Circle({\n          radius: 5,\n          stroke: new Stroke({\n            width: 1,\n            color: 'rgba(143,7,7,1)'\n          }),\n          fill: new Fill({\n            color: 'rgba(143,7,7,1)'\n          })\n        })\n      }),\n      new Style({\n        stroke: new Stroke({\n          width: 1,\n          color: 'rgba(143,7,7,1)'\n        }),\n        fill: new Fill({\n          color: 'rgba(0, 0, 255, 0.1)'\n        })\n      })\n    ];\n\n    // set layer id\n    let layerCounterID = 0;\n    for (const layer of this.allLayers) {\n      const numberId = Number(layer.id.replace('igo-search-layer', ''));\n      layerCounterID = Math.max(numberId, layerCounterID);\n    }\n\n    this.dataSourceService\n      .createAsyncDataSource({\n        type: 'vector',\n        queryable: true\n      } as QueryableDataSourceOptions)\n      .pipe(take(1))\n      .subscribe((dataSource: FeatureDataSource) => {\n        const searchLayer: VectorLayer = new VectorLayer({\n          isIgoInternalLayer: true,\n          id: 'igo-search-layer' + ++layerCounterID,\n          title: layerTitle,\n          source: dataSource,\n          igoStyle: {\n            editable: false,\n            igoStyleObject: {\n              fill: { color: 'rgba(255,255,255,0.4)' },\n              stroke: { color: 'rgba(143,7,7,1)', width: 1 },\n              circle: {\n                fill: { color: 'rgba(255,255,255,0.4)' },\n                stroke: { color: 'rgba(143,7,7,1)', width: 1 },\n                radius: 5\n              }\n            }\n          },\n          style: styles,\n          showInLayerList: true,\n          exportable: true,\n          workspace: {\n            enabled: true\n          }\n        });\n\n        tryBindStoreLayer(activeStore, searchLayer);\n        tryAddLoadingStrategy(\n          activeStore,\n          new FeatureStoreLoadingStrategy({\n            motion: FeatureMotion.None\n          })\n        );\n\n        tryAddSelectionStrategy(\n          activeStore,\n          new FeatureStoreSelectionStrategy({\n            map: this.map,\n            motion: FeatureMotion.None,\n            many: true\n          })\n        );\n\n        activeStore.layer.visible = true;\n        activeStore.source.ol.on(\n          'removefeature',\n          (event: OlVectorSourceEvent) => {\n            const olGeometry = event.feature.getGeometry();\n            this.clearLabelsOfOlGeometry(olGeometry);\n          }\n        );\n\n        this.addFeature(selectedFeature, activeStore);\n        this.stores.push(activeStore);\n      });\n  }\n\n  addFeature(feature: SearchResult, activeStore: FeatureStore<Feature>) {\n    const newFeature = {\n      type: feature.data.type,\n      geometry: {\n        coordinates: feature.data.geometry.coordinates,\n        type: feature.data.geometry.type\n      },\n      projection: feature.data.projection,\n      properties: feature.data.properties,\n      meta: {\n        id: feature.meta.id\n      }\n    };\n    delete newFeature.properties.Route;\n    activeStore.update(newFeature);\n    activeStore.setLayerExtent();\n    activeStore.layer.ol.getSource().refresh();\n  }\n\n  private clearLabelsOfOlGeometry(olGeometry) {\n    getTooltipsOfOlGeometry(olGeometry).forEach(\n      (olTooltip: OlOverlay | undefined) => {\n        if (olTooltip && olTooltip.getMap()) {\n          this.map.ol.removeOverlay(olTooltip);\n        }\n      }\n    );\n  }\n}\n","<button\n  igoStopPropagation\n  (mouseenter)=\"onMouseEvent($event)\"\n  (mouseleave)=\"onMouseEvent($event)\"\n  *ngIf=\"layer.meta.dataType === 'Layer'\"\n  mat-icon-button\n  tooltip-position=\"below\"\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"computeTooltip() | translate\"\n  [color]=\"(isPreview$ | async) ? '' : added ? 'warn' : ''\"\n  (click)=\"onToggleClick($event)\"\n>\n  <mat-icon\n    aria-hidden=\"false\"\n    matBadge=\"icon\"\n    [igoMatBadgeIcon]=\"getBadgeIcon()\"\n    igoMatBadgeColor=\"rgba(0,0,0,0.87)\"\n    igoMatBadgeBackgroundColor=\"none\"\n    [igoMatBadgeInverseColor]=\"true\"\n    [matBadgeHidden]=\"\n      ((inRange$ | async) && (isVisible$ | async) === true) ||\n      ((inRange$ | async) && !added) ||\n      ((inRange$ | async) && (isPreview$ | async))\n    \"\n    [matBadgeDisabled]=\"(inRange$ | async) === false\"\n    matBadgeSize=\"small\"\n    matBadgePosition=\"after\"\n    >{{ (isPreview$ | async) ? 'add' : added ? 'delete' : 'add' }}\n  </mat-icon>\n</button>\n\n<button\n  [id]=\"!isMobile ? 'hide-save-search-result-btn' : ''\"\n  igoStopPropagation\n  *ngIf=\"layer.meta.dataType === 'Feature' && saveSearchResultInLayer\"\n  mat-icon-button\n  tooltip-position=\"below\"\n  matTooltipShowDelay=\"500\"\n  [matTooltip]=\"addFeatureToLayerTooltip$ | async | translate\"\n  (click)=\"addFeatureToLayer()\"\n>\n  <mat-icon\n    aria-hidden=\"false\"\n    matBadge=\"icon\"\n    igoMatBadgeIcon=\"visibility_off\"\n    [igoMatBadgeInverseColor]=\"true\"\n    [matBadgeHidden]=\"inRange$ | async\"\n    [matBadgeDisabled]=\"true\"\n    matBadgeSize=\"small\"\n    matBadgePosition=\"after\"\n    >add_to_photos\n  </mat-icon>\n</button>\n","import { AsyncPipe, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport type { TemplateRef } from '@angular/core';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { CollapsibleComponent } from '@igo2/common/collapsible';\nimport {\n  EntityState,\n  EntityStore,\n  EntityStoreFilterCustomFuncStrategy,\n  EntityStoreWatcher\n} from '@igo2/common/entity';\nimport { ListComponent, ListItemDirective } from '@igo2/common/list';\nimport { ConfigService } from '@igo2/core/config';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, EMPTY, Observable, Subscription, timer } from 'rxjs';\nimport { debounce, map } from 'rxjs/operators';\n\nimport { IgoMap } from '../../map/shared/map';\nimport { Research, SearchResult } from '../shared/search.interfaces';\nimport { SearchService } from '../shared/search.service';\nimport { SearchSource } from '../shared/sources/source';\nimport { TextSearchOptions } from '../shared/sources/source.interfaces';\nimport { SearchResultsItemComponent } from './search-results-item.component';\n\nexport enum SearchResultMode {\n  Grouped = 'grouped',\n  Flat = 'flat'\n}\n\n/**\n * List of search results with focus and selection capabilities.\n * This component is dumb and only emits events.\n */\n@Component({\n  selector: 'igo-search-results',\n  templateUrl: './search-results.component.html',\n  styleUrls: ['./search-results.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    ListComponent,\n    NgFor,\n    CollapsibleComponent,\n    NgTemplateOutlet,\n    SearchResultsItemComponent,\n    ListItemDirective,\n    MatTabsModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SearchResultsComponent implements OnInit, OnDestroy {\n  private showResultsCount = true;\n\n  /**\n   * Reference to the SearchResultMode enum\n   * @internal\n   */\n  public searchResultMode = SearchResultMode;\n\n  /**\n   * Search results store watcher\n   */\n  private watcher: EntityStoreWatcher<SearchResult>;\n\n  private settingsChange$$: Subscription;\n\n  public pageIterator: { sourceId: string }[] = [];\n\n  public collapsed: { sourceId: string }[] = [];\n\n  @Input() map: IgoMap;\n\n  /**\n   * Search results store\n   */\n  @Input() store: EntityStore<SearchResult>;\n\n  /**\n   * to show hide results icons\n   */\n  @Input() showIcons: boolean;\n\n  /**\n   * Search results display mode\n   */\n  @Input() mode: SearchResultMode = SearchResultMode.Grouped;\n\n  /**\n   * Whether there should be a zoom button\n   */\n  @Input() withZoomButton = false;\n\n  /**\n   * To check if the view for tabsMode for search-result-tools\n   */\n  @Input() tabsMode = false;\n\n  /**\n   * Search term\n   */\n  @Input()\n  get term(): string {\n    return this._term;\n  }\n  set term(value: string) {\n    this._term = value;\n    this.pageIterator = [];\n  }\n  public _term: string;\n\n  @Input() settingsChange$ = new BehaviorSubject<boolean>(undefined);\n\n  @Input() termSplitter = '|';\n\n  /**\n   * Event emitted when a result is focused\n   */\n  @Output() resultFocus = new EventEmitter<SearchResult>();\n\n  /**\n   * Event emitted when a result is unfocused\n   */\n  @Output() resultUnfocus = new EventEmitter<SearchResult>();\n\n  /**\n   * Event emitted when a result is selected\n   */\n  @Output() resultSelect = new EventEmitter<SearchResult>();\n\n  /**\n   * Event emitted when a research is completed after displaying more results is clicked\n   */\n  @Output() moreResults = new EventEmitter<{\n    research: Research;\n    results: SearchResult[];\n  }>();\n\n  /**\n   * Events emitted when a result is focus or unfocus by mouse event\n   */\n  @Output() resultMouseenter = new EventEmitter<SearchResult>();\n  @Output() resultMouseleave = new EventEmitter<SearchResult>();\n\n  @ContentChild('igoSearchItemToolbar', /* TODO: add static flag */ {})\n  templateSearchToolbar: TemplateRef<any>;\n\n  get results$(): Observable<\n    { source: SearchSource; results: SearchResult[] }[]\n  > {\n    if (this._results$ === undefined) {\n      this._results$ = this.liftResults();\n    }\n    return this._results$;\n  }\n  private _results$: Observable<\n    { source: SearchSource; results: SearchResult[] }[]\n  >;\n\n  constructor(\n    private cdRef: ChangeDetectorRef,\n    private searchService: SearchService,\n    private configService: ConfigService\n  ) {}\n\n  /**\n   * Bind the search results store to the watcher\n   * @internal\n   */\n  ngOnInit() {\n    this.watcher = new EntityStoreWatcher(this.store, this.cdRef);\n\n    this.settingsChange$$ = this.settingsChange$.subscribe(() => {\n      this.pageIterator = [];\n    });\n\n    if (\n      this.configService.getConfig('searchSources.showResultsCount') === false\n    ) {\n      this.showResultsCount = false;\n    }\n  }\n\n  /**\n   * Unbind the search results store from the watcher\n   * @internal\n   */\n  ngOnDestroy() {\n    this.watcher.destroy();\n    this.settingsChange$$.unsubscribe();\n  }\n\n  /**\n   * Compute a group title\n   * @param group Search results group\n   * @returns Group title\n   * @internal\n   */\n  computeGroupTitle(group: {\n    source: SearchSource;\n    results: SearchResult[];\n  }): string {\n    const parts = [group.source.title];\n    const count = group.results.length;\n    if (count > 1 && this.showResultsCount) {\n      parts.push(`(${count})`);\n    }\n    return parts.join(' ');\n  }\n\n  /**\n   * When a result is selected, update it's state in the store and emit\n   * an event. A selected result is also considered focused\n   * @param result Search result\n   * @internal\n   */\n  onResultSelect(result: SearchResult) {\n    if (this.store.state.get(result)) {\n      if (this.store.state.get(result).selected === true) {\n        return;\n      }\n    }\n    this.store.state.update(result, { focused: true, selected: true }, true);\n    this.resultSelect.emit(result);\n  }\n\n  /**\n   * Return an observable of the search results, grouped by search source\n   * @returns Observable of grouped search results\n   * @internal\n   */\n  private liftResults(): Observable<\n    { source: SearchSource; results: SearchResult[] }[]\n  > {\n    return this.store.stateView.all$().pipe(\n      debounce((results: { entity: SearchResult; state: EntityState }[]) => {\n        return results.length === 0 ? EMPTY : timer(200);\n      }),\n      map((results: { entity: SearchResult; state: EntityState }[]) => {\n        return this.groupResults(\n          results.map((r) => r.entity).sort(this.sortByOrder)\n        );\n      })\n    );\n  }\n\n  /**\n   * Sort the results by display order.\n   * @param r1 First result\n   * @param r2 Second result\n   */\n  private sortByOrder(r1: SearchResult, r2: SearchResult) {\n    return r1.source.displayOrder - r2.source.displayOrder;\n  }\n\n  /**\n   * Group results by search source\n   * @param results Search results from all sources\n   * @returns Search results grouped by source\n   */\n  private groupResults(\n    results: SearchResult[]\n  ): { source: SearchSource; results: SearchResult[] }[] {\n    const grouped = new Map<SearchSource, SearchResult[]>();\n    results.forEach((result: SearchResult) => {\n      const source = result.source;\n      let sourceResults = grouped.get(source);\n      if (sourceResults === undefined) {\n        sourceResults = [];\n        grouped.set(source, sourceResults);\n      }\n      sourceResults.push(result);\n    });\n\n    return Array.from(grouped.keys()).map((source: SearchSource) => {\n      if (this.pageIterator[source.getId()] === undefined) {\n        this.pageIterator[source.getId()] = 1;\n      }\n      return { source, results: grouped.get(source) };\n    });\n  }\n\n  isMoreResults(group: { source: SearchSource; results: SearchResult[] }) {\n    const stategy = this.store.getStrategyOfType(\n      EntityStoreFilterCustomFuncStrategy\n    );\n    const active = stategy?.active || false;\n    if (!active) {\n      return (\n        group.results &&\n        group.results[group.results.length - 1].meta.nextPage === true\n      );\n    } else {\n      return (\n        group.results?.length % +group.source.params.limit === 0 &&\n        +group.source.params.page < 30\n      );\n    }\n  }\n\n  displayMoreResults(group: { source: SearchSource; results: SearchResult[] }) {\n    const options: TextSearchOptions = {\n      sourceId: group.source.getId(),\n      page: ++this.pageIterator[group.source.getId()]\n    };\n\n    let terms;\n    if (\n      this.termSplitter &&\n      this.term.match(new RegExp(this.termSplitter, 'g'))\n    ) {\n      terms = this.term.split(this.termSplitter);\n    } else {\n      terms = [this.term];\n    }\n\n    let researches: Research[] = [];\n    terms.map((term: string) => {\n      researches = researches.concat(this.searchService.search(term, options));\n    });\n\n    researches.map((research) => {\n      research.request.subscribe((results: SearchResult[]) => {\n        const newResults = group.results.concat(results);\n        if (!results.length) {\n          newResults[newResults.length - 1].meta.nextPage = false;\n        }\n        this.moreResults.emit({ research, results: newResults });\n      });\n    });\n    return;\n  }\n}\n","<igo-list [navigation]=\"true\" *ngIf=\"tabsMode === false\">\n  <ng-template #groupTemplate ngFor let-group [ngForOf]=\"results$ | async\">\n    <igo-collapsible\n      [class]=\"group.source.getId()\"\n      *ngIf=\"mode === searchResultMode.Grouped; else flatTemplate\"\n      [title]=\"computeGroupTitle(group)\"\n      [collapsed]=\"collapsed[group.source.title]\"\n      (toggle)=\"collapsed[group.source.title] = $event\"\n    >\n      <ng-container\n        *ngTemplateOutlet=\"\n          storeItemTemplate;\n          context: { results: group.results }\n        \"\n      ></ng-container>\n    </igo-collapsible>\n\n    <ng-template #flatTemplate>\n      <ng-container\n        *ngTemplateOutlet=\"\n          storeItemTemplate;\n          context: { results: group.results }\n        \"\n      ></ng-container>\n    </ng-template>\n\n    <ng-template #storeItemTemplate let-results=\"results\">\n      <ng-template ngFor let-result [ngForOf]=\"results\">\n        <igo-search-results-item\n          igoListItem\n          color=\"accent\"\n          [map]=\"map\"\n          [result]=\"result\"\n          [showIcons]=\"showIcons\"\n          [withZoomButton]=\"withZoomButton\"\n          [focused]=\"store.state.get(result).focused\"\n          [selected]=\"store.state.get(result).selected\"\n          (focus)=\"resultFocus.emit(result)\"\n          (unfocus)=\"resultUnfocus.emit(result)\"\n          (select)=\"onResultSelect(result)\"\n          (mouseenter)=\"resultFocus.emit(result)\"\n          (mouseleave)=\"resultUnfocus.emit(result)\"\n        >\n          <ng-container\n            igoSearchItemToolbar\n            [ngTemplateOutlet]=\"templateSearchToolbar\"\n            [ngTemplateOutletContext]=\"{ result: result }\"\n          >\n          </ng-container>\n        </igo-search-results-item>\n      </ng-template>\n      <span\n        class=\"moreResults mat-typography\"\n        *ngIf=\"isMoreResults(group)\"\n        (click)=\"displayMoreResults(group)\"\n      >\n        <u>{{ 'igo.geo.search.displayMoreResults' | translate }}</u>\n      </span>\n    </ng-template>\n  </ng-template>\n</igo-list>\n\n<igo-list [navigation]=\"true\" *ngIf=\"tabsMode\">\n  <ng-container\n    *ngIf=\"\n      mode === searchResultMode.Grouped;\n      then tabsTemplate;\n      else flatTemplate\n    \"\n  ></ng-container>\n\n  <ng-template #tabsTemplate>\n    <mat-tab-group class=\"custom-tabs-view\" dynamicHeight>\n      <mat-tab\n        *ngFor=\"let group of results$ | async\"\n        [label]=\"computeGroupTitle(group)\"\n      >\n        <ng-container\n          *ngTemplateOutlet=\"storeItemTemplate; context: { group: group }\"\n        ></ng-container>\n      </mat-tab>\n    </mat-tab-group>\n  </ng-template>\n\n  <ng-template #flatTemplate>\n    <ng-template ngFor let-group [ngForOf]=\"results$ | async\">\n      <ng-container\n        *ngTemplateOutlet=\"storeItemTemplate; context: { group: group }\"\n      ></ng-container>\n    </ng-template>\n  </ng-template>\n\n  <ng-template #storeItemTemplate let-group=\"group\">\n    <ng-template ngFor let-result [ngForOf]=\"group.results\">\n      <igo-search-results-item\n        igoListItem\n        color=\"accent\"\n        [map]=\"map\"\n        [result]=\"result\"\n        [showIcons]=\"showIcons\"\n        [withZoomButton]=\"withZoomButton\"\n        [focused]=\"store.state.get(result).focused\"\n        [selected]=\"store.state.get(result).selected\"\n        (focus)=\"resultFocus.emit(result)\"\n        (unfocus)=\"resultUnfocus.emit(result)\"\n        (select)=\"onResultSelect(result)\"\n        (mouseenter)=\"resultFocus.emit(result)\"\n        (mouseleave)=\"resultUnfocus.emit(result)\"\n      >\n        <ng-container\n          igoSearchItemToolbar\n          [ngTemplateOutlet]=\"templateSearchToolbar\"\n          [ngTemplateOutletContext]=\"{ result: result }\"\n        >\n        </ng-container>\n      </igo-search-results-item>\n    </ng-template>\n    <span\n      class=\"moreResults mat-typography\"\n      *ngIf=\"isMoreResults(group)\"\n      (click)=\"displayMoreResults(group)\"\n    >\n      <u>{{ 'igo.geo.search.displayMoreResults' | translate }}</u>\n    </span>\n  </ng-template>\n</igo-list>\n","import { NgModule } from '@angular/core';\n\nimport { SearchResultAddButtonComponent } from './search-results-add-button.component';\nimport { SearchResultsComponent } from './search-results.component';\n\n/**\n * @deprecated import the components directly or the SEARCH_RESULTS_DIRECTIVES\n */\n@NgModule({\n  imports: [SearchResultsComponent, SearchResultAddButtonComponent],\n  exports: [SearchResultsComponent, SearchResultAddButtonComponent]\n})\nexport class IgoSearchResultsModule {}\n","import { SearchResultAddButtonComponent } from './search-results-add-button.component';\nimport { SearchResultsComponent } from './search-results.component';\n\nexport const SEARCH_RESULTS_DIRECTIVES = [\n  SearchResultsComponent,\n  SearchResultAddButtonComponent\n] as const;\n","import { NgModule } from '@angular/core';\n\nimport { SearchSelectorComponent } from './search-selector.component';\n\n/**\n * @deprecated import the SearchSelectorComponent directly\n */\n@NgModule({\n  imports: [SearchSelectorComponent],\n  exports: [SearchSelectorComponent]\n})\nexport class IgoSearchSelectorModule {}\n","import { NgModule } from '@angular/core';\n\nimport { SearchSettingsComponent } from './search-settings.component';\n\n/**\n * @deprecated import the SearchSettingsComponent directly\n */\n@NgModule({\n  imports: [SearchSettingsComponent],\n  exports: [SearchSettingsComponent]\n})\nexport class IgoSearchSettingsModule {}\n","import {\n  AfterContentChecked,\n  Directive,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  Self\n} from '@angular/core';\n\nimport { EntityStore } from '@igo2/common/entity';\nimport { MediaService } from '@igo2/core/media';\nimport { SubjectStatus } from '@igo2/utils';\n\nimport olFeature from 'ol/Feature';\nimport MapBrowserPointerEvent from 'ol/MapBrowserEvent';\nimport { unByKey } from 'ol/Observable';\nimport OlGeoJSON from 'ol/format/GeoJSON';\nimport * as olgeom from 'ol/geom';\nimport { transform } from 'ol/proj';\n\nimport { Subscription, first } from 'rxjs';\n\nimport { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';\nimport { tryBindStoreLayer } from '../../feature/shared/feature-store.utils';\nimport { FEATURE, FeatureMotion } from '../../feature/shared/feature.enums';\nimport { Feature } from '../../feature/shared/feature.interfaces';\nimport { FeatureStore } from '../../feature/shared/store';\nimport { VectorLayer } from '../../layer/shared/layers/vector-layer';\nimport { MapBrowserComponent } from '../../map/map-browser/map-browser.component';\nimport { IgoMap } from '../../map/shared/map';\nimport { pointerPositionSummaryMarkerStyle } from '../../style/shared/feature/feature-style';\nimport { FeatureGeometry } from './../../feature/shared/feature.interfaces';\nimport { SearchSourceService } from './search-source.service';\nimport { Research, SearchResult } from './search.interfaces';\nimport { SearchService } from './search.service';\nimport { sourceCanReverseSearchAsSummary } from './search.utils';\n\n/**\n * This directive makes the mouse coordinate trigger a reverse search on available search sources.\n * The search results are placed into a label, on a cross icon, representing the mouse coordinate.\n * By default, no search sources. Config in config file must be defined.\n * the layer level.\n */\n@Directive({\n  selector: '[igoSearchPointerSummary]',\n  standalone: true\n})\nexport class SearchPointerSummaryDirective\n  implements OnInit, OnDestroy, AfterContentChecked\n{\n  public store: FeatureStore<Feature>;\n  private lonLat: [number, number];\n  private pointerSearchStore: EntityStore<SearchResult> =\n    new EntityStore<SearchResult>([]);\n  private lastTimeoutRequest;\n  private store$$: Subscription;\n  private reverseSearch$$: Subscription[] = [];\n  private hasPointerReverseSearchSource = false;\n\n  /**\n   * Listener to the pointer move event\n   */\n  private pointerMoveListener;\n\n  private searchPointerSummaryFeatureId = 'searchPointerSummaryFeatureId';\n  /**\n   * The delay where the mouse must be motionless before trigger the reverse search\n   */\n  @Input() igoSearchPointerSummaryDelay = 1000;\n\n  /**\n   * If the user has enabled or not the directive\n   */\n  @Input() igoSearchPointerSummaryEnabled = false;\n\n  @HostListener('mouseleave')\n  mouseleave() {\n    clearTimeout(this.lastTimeoutRequest);\n    this.clearLayer();\n  }\n\n  /**\n   * IGO map\n   * @internal\n   */\n  get map(): IgoMap {\n    return this.component.map;\n  }\n\n  get mapProjection(): string {\n    return (this.component.map as IgoMap).projection;\n  }\n\n  constructor(\n    @Self() private component: MapBrowserComponent,\n    private searchService: SearchService,\n    private searchSourceService: SearchSourceService,\n    private mediaService: MediaService\n  ) {}\n\n  /**\n   * Start listening to pointermove and reverse search results.\n   * @internal\n   */\n  ngOnInit() {\n    this.listenToMapPointerMove();\n\n    this.map.status$\n      .pipe(first((status) => status === SubjectStatus.Done))\n      .subscribe(() => {\n        this.store = new FeatureStore<Feature>([], { map: this.map });\n        this.initStore();\n        this.subscribeToPointerStore();\n      });\n  }\n\n  /**\n   * Initialize the pointer position store\n   * @internal\n   */\n  private initStore() {\n    const store = this.store;\n\n    const layer = new VectorLayer({\n      isIgoInternalLayer: true,\n      id: 'searchPointerSummaryId',\n      title: 'searchPointerSummary',\n      zIndex: 900,\n      source: new FeatureDataSource(),\n      showInLayerList: false,\n      exportable: false,\n      browsable: false,\n      style: pointerPositionSummaryMarkerStyle\n    });\n    tryBindStoreLayer(store, layer);\n  }\n\n  ngAfterContentChecked(): void {\n    if (\n      !this.searchSourceService\n        .getEnabledSources()\n        .filter(sourceCanReverseSearchAsSummary).length\n    ) {\n      this.hasPointerReverseSearchSource = false;\n    } else {\n      this.hasPointerReverseSearchSource = true;\n    }\n  }\n\n  /**\n   * Stop listening to pointermove and reverse search results.\n   * @internal\n   */\n  ngOnDestroy() {\n    this.unlistenToMapPointerMove();\n    this.unsubscribeToPointerStore();\n    this.unsubscribeReverseSearch();\n  }\n\n  /**\n   * Subscribe to pointermove result store\n   * @internal\n   */\n  subscribeToPointerStore() {\n    this.store$$ = this.pointerSearchStore.entities$.subscribe(\n      (resultsUnderPointerPosition) => {\n        this.entitiesToPointerOverlay(resultsUnderPointerPosition);\n      }\n    );\n  }\n\n  /**\n   * Build an object based on the closest feature by type (base on type and distance properties )\n   * @param results SearchResult[]\n   * @returns OL style function\n   */\n  private computeSummaryClosestFeature(results: SearchResult[]) {\n    const closestResultByType = {};\n\n    results.map((result) => {\n      if (result.data.properties.type && result.data.properties.distance >= 0) {\n        // eslint-disable-next-line no-prototype-builtins\n        if (closestResultByType.hasOwnProperty(result.data.properties.type)) {\n          const prevDistance =\n            closestResultByType[result.data.properties.type].distance;\n          if (result.data.properties.distance < prevDistance) {\n            const title = result.meta.pointerSummaryTitle || result.meta.title;\n            closestResultByType[result.data.properties.type] = {\n              distance: result.data.properties.distance,\n              title\n            };\n          }\n        } else {\n          const title = result.meta.pointerSummaryTitle || result.meta.title;\n          closestResultByType[result.data.properties.type] = {\n            distance: result.data.properties.distance,\n            title\n          };\n        }\n      }\n    });\n\n    return closestResultByType;\n  }\n\n  /**\n   * convert store entities to a pointer position overlay with label summary on.\n   * @param event OL map browser pointer event\n   */\n  private entitiesToPointerOverlay(\n    resultsUnderPointerPosition: SearchResult[]\n  ) {\n    const closestResultByType = this.computeSummaryClosestFeature(\n      resultsUnderPointerPosition\n    );\n    const summarizedClosestType = Object.keys(closestResultByType);\n    const processedSummarizedClosestType = [];\n    const summary = [];\n    resultsUnderPointerPosition.map((result) => {\n      const typeIndex = summarizedClosestType.indexOf(\n        result.data.properties.type\n      );\n      if (typeIndex !== -1) {\n        summary.push(closestResultByType[result.data.properties.type].title);\n        summarizedClosestType.splice(typeIndex, 1);\n        processedSummarizedClosestType.push(result.data.properties.type);\n      } else {\n        if (\n          processedSummarizedClosestType.indexOf(\n            result.data.properties.type\n          ) === -1\n        ) {\n          summary.push(result.meta.pointerSummaryTitle || result.meta.title);\n        }\n      }\n    });\n    if (summary.length) {\n      this.addPointerOverlay(summary.join('\\n'));\n    }\n  }\n\n  /**\n   * On map pointermove\n   */\n  private listenToMapPointerMove() {\n    this.pointerMoveListener = this.map.ol.on(\n      'pointermove',\n      (event: MapBrowserPointerEvent<any>) => this.onMapEvent(event)\n    );\n  }\n\n  /**\n   * Unsubscribe to pointer store.\n   * @internal\n   */\n  unsubscribeToPointerStore() {\n    this.store$$?.unsubscribe();\n  }\n  /**\n   * Unsubscribe to reverse seatch store.\n   * @internal\n   */\n  unsubscribeReverseSearch() {\n    this.reverseSearch$$.map((s) => s.unsubscribe());\n    this.reverseSearch$$ = [];\n  }\n\n  /**\n   * Stop listening for map pointermove\n   * @internal\n   */\n  private unlistenToMapPointerMove() {\n    unByKey(this.pointerMoveListener);\n    this.pointerMoveListener = undefined;\n  }\n\n  /**\n   * Trigger reverse search when the mouse is motionless during the defined delay (pointerMoveDelay).\n   * @param event OL map browser pointer event\n   */\n  private onMapEvent(event: MapBrowserPointerEvent<any>) {\n    if (\n      event.dragging ||\n      !this.igoSearchPointerSummaryEnabled ||\n      !this.hasPointerReverseSearchSource ||\n      this.mediaService.isTouchScreen()\n    ) {\n      this.clearLayer();\n      return;\n    }\n    if (typeof this.lastTimeoutRequest !== 'undefined') {\n      // cancel timeout when the mouse moves\n      clearTimeout(this.lastTimeoutRequest);\n      this.clearLayer();\n      this.unsubscribeReverseSearch();\n    }\n\n    this.lonLat = transform(\n      event.coordinate,\n      this.mapProjection,\n      'EPSG:4326'\n    ) as [number, number];\n\n    this.lastTimeoutRequest = setTimeout(() => {\n      this.onSearchCoordinate();\n    }, this.igoSearchPointerSummaryDelay);\n  }\n\n  /**\n   * Sort the results by display order.\n   * @param r1 First result\n   * @param r2 Second result\n   */\n  private sortByOrder(r1: SearchResult, r2: SearchResult) {\n    return r1.source.displayOrder - r2.source.displayOrder;\n  }\n\n  private onSearchCoordinate() {\n    this.pointerSearchStore.clear();\n    const results = this.searchService.reverseSearch(\n      this.lonLat,\n      { params: { geometry: 'false', icon: 'false' } },\n      true\n    );\n\n    for (const i in results) {\n      if (results.length > 0) {\n        this.reverseSearch$$.push(\n          results[i].request.subscribe((_results: SearchResult<Feature>[]) => {\n            this.onSearch({ research: results[i], results: _results });\n          })\n        );\n      }\n    }\n  }\n\n  private onSearch(event: { research: Research; results: SearchResult[] }) {\n    const results = event.results;\n    const newResults = this.pointerSearchStore\n      .all()\n      .filter((result: SearchResult) => result.source !== event.research.source)\n      .concat(results);\n    this.pointerSearchStore.load(newResults.sort(this.sortByOrder));\n  }\n\n  /**\n   * Add a feature to the pointer store\n   * @param text string\n   */\n  private addPointerOverlay(text: string) {\n    this.clearLayer();\n\n    const geometry = new olgeom.Point(\n      transform(this.lonLat, 'EPSG:4326', this.mapProjection)\n    );\n    const feature = new olFeature({ geometry });\n    const geojsonGeom = new OlGeoJSON().writeGeometryObject(geometry, {\n      featureProjection: this.mapProjection,\n      dataProjection: this.mapProjection\n    }) as FeatureGeometry;\n\n    const f: Feature = {\n      type: FEATURE,\n      geometry: geojsonGeom,\n      projection: this.mapProjection,\n      properties: {\n        id: this.searchPointerSummaryFeatureId,\n        pointerSummary: text\n      },\n      meta: {\n        id: this.searchPointerSummaryFeatureId\n      },\n      ol: feature\n    };\n    this.store.setLayerFeatures([f], FeatureMotion.None);\n  }\n\n  /**\n   * Clear the pointer store features\n   */\n  private clearLayer() {\n    if (this.store) {\n      this.store.clearLayer();\n    }\n  }\n}\n","import { SearchSourceService } from './search-source.service';\nimport { SearchSource } from './sources/source';\n\n/**\n * Search source factory\n * @ignore\n */\nexport function searchSourceServiceFactory(sources: SearchSource[]) {\n  return new SearchSourceService(sources);\n}\n\n/**\n * Function that returns a provider for the SearchSource service\n */\nexport function provideSearchSourceService() {\n  return {\n    provide: SearchSourceService,\n    useFactory: searchSourceServiceFactory,\n    deps: [SearchSource]\n  };\n}\n","export class GoogleLinks {\n  static getGoogleMapsCoordLink(lon, lat) {\n    return `https://www.google.com/maps/search/?api=1&query=${lat}%2C${lon}`;\n  }\n\n  static getGoogleStreetViewLink(lon, lat) {\n    return `https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=${lat}%2C${lon}`;\n  }\n\n  static getGoogleMapsNameLink(name) {\n    const encodedName = encodeURI(name);\n    return `https://www.google.com/maps/search/?api=1&query=${encodedName}`;\n  }\n}\n","export class OsmLinks {\n  static getOpenStreetMapLink(lon, lat, zoom = 17) {\n    return `https://www.openstreetmap.org/?mlat=${lat}&mlon=${lon}#map=${zoom}/${lat}/${lon}`;\n  }\n\n  static getOpenStreetCamLink(lon, lat, zoom = 17) {\n    return `https://openstreetcam.org/map/@${lat},${lon},${zoom}z`;\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\n\nimport * as olformat from 'ol/format';\nimport OlCircle from 'ol/geom/Circle';\nimport { fromCircle } from 'ol/geom/Polygon';\nimport * as olproj from 'ol/proj';\n\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { Cacheable } from 'ts-cacheable';\n\nimport { FEATURE } from '../../../feature/shared/feature.enums';\nimport {\n  Feature,\n  FeatureGeometry\n} from '../../../feature/shared/feature.interfaces';\nimport {\n  convertDDToDMS,\n  lonLatConversion,\n  roundCoordTo\n} from '../../../map/shared/map.utils';\nimport { Projection } from '../../../map/shared/projection.interfaces';\nimport { GoogleLinks } from '../../../utils/googleLinks';\nimport { OsmLinks } from '../../../utils/osmLinks';\nimport { ReverseSearch, SearchResult } from '../search.interfaces';\nimport { SearchSource } from './source';\nimport { ReverseSearchOptions, SearchSourceOptions } from './source.interfaces';\n\n@Injectable()\nexport class CoordinatesSearchResultFormatter {\n  constructor(private languageService: LanguageService) {}\n\n  formatResult(result: SearchResult<Feature>): SearchResult<Feature> {\n    return result;\n  }\n}\n/**\n * CoordinatesReverse search source\n */\n@Injectable()\nexport class CoordinatesReverseSearchSource\n  extends SearchSource\n  implements ReverseSearch\n{\n  static id = 'coordinatesreverse';\n  static type = FEATURE;\n\n  private projections;\n\n  title$: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n  get title(): string {\n    return this.title$.getValue();\n  }\n\n  constructor(\n    @Inject('options') options: SearchSourceOptions,\n    private languageService: LanguageService,\n    storageService: StorageService,\n    @Inject('projections') projections: Projection[]\n  ) {\n    super(options, storageService);\n    this.projections = projections;\n    this.languageService.language$.subscribe(() => {\n      this.title$.next(\n        this.languageService.translate.instant(this.options.title)\n      );\n    });\n  }\n\n  getId(): string {\n    return CoordinatesReverseSearchSource.id;\n  }\n\n  getType(): string {\n    return CoordinatesReverseSearchSource.type;\n  }\n\n  protected getDefaultOptions(): SearchSourceOptions {\n    return {\n      title: 'igo.geo.search.coordinates.name',\n      order: 1,\n      showInSettings: false\n    };\n  }\n\n  /**\n   * Search a location by coordinates\n   * @param lonLat Location coordinates\n   * @param options options of ReverseSearchOptions (distance, conf, zoom, params)\n   * @returns Observable of <SearchResult<Feature>[]\n   */\n  @Cacheable({\n    maxCacheCount: 20\n  })\n  reverseSearch(\n    lonLat: [number, number],\n    options?: ReverseSearchOptions,\n    reverseSearchCoordsFormatEnabled?: boolean\n  ): Observable<SearchResult<Feature>[]> {\n    return of([\n      this.dataToResult(lonLat, options, reverseSearchCoordsFormatEnabled)\n    ]);\n  }\n\n  private dataToResult(\n    data: [number, number],\n    options: ReverseSearchOptions,\n    reverseSearchCoordsFormatEnabled: boolean\n  ): SearchResult<Feature> {\n    const dataDMS = convertDDToDMS(data);\n    const convertedCoord = lonLatConversion(data, this.projections);\n    const coords = convertedCoord.reduce(\n      (obj, item) => ((obj[item.alias] = item.igo2CoordFormat), obj),\n      {}\n    );\n\n    const roundedCoordString = !reverseSearchCoordsFormatEnabled\n      ? roundCoordTo(data, 6).join(', ')\n      : roundCoordTo(data, 6).reverse().join(', ');\n\n    const roundedCoordStringDMS = !reverseSearchCoordsFormatEnabled\n      ? dataDMS.join(', ')\n      : dataDMS.reverse().join(', ');\n\n    let geometry: FeatureGeometry = {\n      type: 'Point',\n      coordinates: [data[0], data[1]]\n    };\n\n    const properties = {};\n    let subtitleHtml = '';\n    if (options.distance) {\n      const radiusKey = this.languageService.translate.instant(\n        'igo.geo.search.coordinates.radius'\n      );\n      properties[radiusKey] = options.distance;\n      subtitleHtml = '<br><small>Rayon: ' + options.distance + ' m</small>';\n\n      // Create polygon\n      const center = olproj.transform(\n        [data[0], data[1]],\n        'EPSG:4326',\n        'EPSG:3857'\n      );\n      const circleGeometry = new OlCircle(center, options.distance);\n      const polygonGeometry = fromCircle(circleGeometry);\n      const writer = new olformat.GeoJSON();\n      geometry = JSON.parse(\n        writer.writeGeometry(\n          polygonGeometry.transform('EPSG:3857', 'EPSG:4326')\n        )\n      );\n    }\n\n    if (options.conf) {\n      const confKey = this.languageService.translate.instant(\n        'igo.geo.search.coordinates.conf'\n      );\n      properties[confKey] = options.conf;\n      subtitleHtml += subtitleHtml === '' ? '<br>' : '<small> - </small>';\n      subtitleHtml += '<small>Confiance: ' + options.conf + '%</small>';\n    }\n\n    const coordKey = !reverseSearchCoordsFormatEnabled\n      ? this.languageService.translate.instant(\n          'igo.geo.search.coordinates.coord'\n        )\n      : this.languageService.translate.instant(\n          'igo.geo.search.coordinates.reversedCoord'\n        );\n    properties[coordKey] = roundedCoordString;\n\n    const coordKeyDMS = !reverseSearchCoordsFormatEnabled\n      ? this.languageService.translate.instant(\n          'igo.geo.search.coordinates.coordDMS'\n        )\n      : this.languageService.translate.instant(\n          'igo.geo.search.coordinates.reversedCoordDMS'\n        );\n    properties[coordKeyDMS] = roundedCoordStringDMS;\n\n    return {\n      source: this,\n      data: {\n        type: FEATURE,\n        projection: 'EPSG:4326',\n        geometry,\n        extent: undefined,\n        properties: Object.assign(properties, coords, {\n          GoogleMaps: GoogleLinks.getGoogleMapsCoordLink(data[0], data[1]),\n          GoogleStreetView: GoogleLinks.getGoogleStreetViewLink(\n            data[0],\n            data[1]\n          ),\n          OpenStreetMap: OsmLinks.getOpenStreetMapLink(data[0], data[1], 14),\n          Route:\n            '<span class=\"routing\"> <u>' +\n            this.languageService.translate.instant('igo.geo.seeRouting') +\n            '</u> </span>'\n        }),\n        meta: {\n          id: data[0].toString() + ',' + data[1].toString(),\n          title: roundedCoordString\n        }\n      },\n      meta: {\n        dataType: FEATURE,\n        id: data[0].toString() + ',' + data[1].toString(),\n        title: roundedCoordString,\n        titleHtml: roundedCoordString + subtitleHtml,\n        icon: 'location_on',\n        score: 100 // every coord exists\n      }\n    };\n  }\n}\n","import { Provider } from '@angular/core';\n\nexport interface SearchSourceOptions {\n  title?: string;\n  searchUrl?: string;\n  available?: boolean;\n  enabled?: boolean;\n  order?: number;\n  distance?: number;\n  params?: ISearchSourceParams;\n  settings?: SearchSourceSettings[];\n  showInPointerSummary?: boolean;\n  showInSettings?: boolean;\n  showAdvancedSettings?: boolean;\n}\n\nexport interface SearchSourceSettings {\n  type: 'radiobutton' | 'checkbox';\n  values: SettingOptions[];\n  title: string;\n  name: string;\n  allEnabled?: boolean;\n}\n\nexport interface ISearchSourceParams {\n  limit?: string;\n  datasets?: string;\n  ecmax?: string;\n  page?: string;\n  type?: string;\n}\n\nexport interface SettingOptions {\n  value: string | number;\n  enabled: boolean;\n  title: string;\n  hashtags?: string[];\n  available?: boolean;\n}\n\nexport interface TextSearchOptions {\n  params?: Record<string, string>;\n  searchType?: 'Feature' | 'Layer'; // refer to search.enum.ts SEARCH_TYPES = [FEATURE, LAYER];\n  getEnabledOnly?: boolean;\n  extent?: [number, number, number, number];\n  page?: number;\n  sourceId?: string;\n  forceNA?: boolean;\n}\n\nexport interface ReverseSearchOptions {\n  distance?: number;\n  conf?: number;\n  zoom?: number;\n  params?: Record<string, string>;\n}\n\nexport interface SearchSourceFeature<KindT extends SearchSourceKind> {\n  kind: KindT;\n  providers: Provider[];\n}\n\nexport enum SearchSourceKind {\n  ICherche = 0,\n  IChercheReverse = 1,\n  Cadastre = 2,\n  CoordinatesReverse = 3,\n  ILayer = 4,\n  Nominatim = 5,\n  StoredQueries = 6,\n  StoredQueriesReverse = 7,\n  Workspace = 8\n}\n","import { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { Projection } from '../../../map/shared/projection.interfaces';\nimport { ProjectionService } from '../../../map/shared/projection.service';\nimport {\n  CoordinatesReverseSearchSource,\n  CoordinatesSearchResultFormatter\n} from './coordinates';\nimport { SearchSource } from './source';\nimport { SearchSourceFeature, SearchSourceKind } from './source.interfaces';\n\n/**\n * Coordinate search result formatter factory\n * @ignore\n */\nexport function defaultCoordinatesSearchResultFormatterFactory(\n  languageService: LanguageService\n) {\n  return new CoordinatesSearchResultFormatter(languageService);\n}\n\n/**\n * Function that returns a provider for the Coordinates search result formatter\n */\nexport function provideDefaultCoordinatesSearchResultFormatter() {\n  return {\n    provide: CoordinatesSearchResultFormatter,\n    useFactory: defaultCoordinatesSearchResultFormatterFactory,\n    deps: [LanguageService]\n  };\n}\n\n/**\n * CoordinatesReverse search source factory\n * @ignore\n */\nexport function CoordinatesReverseSearchSourceFactory(\n  config: ConfigService,\n  languageService: LanguageService,\n  storageService: StorageService\n) {\n  return new CoordinatesReverseSearchSource(\n    config.getConfig(`searchSources.${CoordinatesReverseSearchSource.id}`),\n    languageService,\n    storageService,\n    (config.getConfig('projections') as Projection[]) || []\n  );\n}\n\n/**\n * Function that returns a provider for the Coordinate search source\n */\nexport function provideCoordinatesReverseSearchSource() {\n  return {\n    provide: SearchSource,\n    useFactory: CoordinatesReverseSearchSourceFactory,\n    multi: true,\n    deps: [ConfigService, LanguageService, StorageService, ProjectionService]\n  };\n}\n\nexport function withCoordinatesReverseSource(): SearchSourceFeature<SearchSourceKind.CoordinatesReverse> {\n  return {\n    kind: SearchSourceKind.CoordinatesReverse,\n    providers: [\n      provideCoordinatesReverseSearchSource(),\n      provideDefaultCoordinatesSearchResultFormatter()\n    ]\n  };\n}\n","import { ENGINE_ICON, IconSvg } from '@igo2/common/icon';\n\n/**\n * Icons mappings to be retrocompatible with iCherche\n */\nexport const ICHERCHE_ICONS: Record<string, string | IconSvg> = {\n  'map-marker': 'location_on',\n  city: 'location_city',\n  'flag-triangle': 'flag',\n  'map-marker-alert': 'fmd_bad',\n  'map-marker-radius': 'pin_drop',\n  'map-marker-multiple': 'local_post_office',\n  'map-legend': 'map',\n  bank: 'account_balance',\n  'map-search': 'search_insights',\n  'book-open-variant': 'menu_book',\n  'office-building': 'apartment',\n  'table-picnic': 'table_restaurant',\n  flash: 'flash_on',\n  engine: ENGINE_ICON,\n  'road-variant': 'add_road',\n  'baby-face-outline': 'child_care',\n  'home-account': 'location_home',\n  hospital: 'local_hospital',\n  pharmacy: 'local_pharmacy',\n  'police-badge-outline': 'local_police',\n  parking: 'local_parking',\n  tree: 'nature',\n  'home-city': 'home_work',\n  terrain: 'landscape',\n  'panorama-horizontal': 'panorama_horizontal'\n};\n","import {\n  HttpClient,\n  HttpParameterCodec,\n  HttpParams\n} from '@angular/common/http';\nimport { Inject, Injectable, Injector } from '@angular/core';\n\nimport { AuthService } from '@igo2/auth';\nimport { IconSvg } from '@igo2/common/icon';\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\nimport { ObjectUtils, customCacheHasher } from '@igo2/utils';\n\nimport pointOnFeature from '@turf/point-on-feature';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { Cacheable } from 'ts-cacheable';\n\nimport { FEATURE } from '../../../feature/shared/feature.enums';\nimport { Feature } from '../../../feature/shared/feature.interfaces';\nimport { ReverseSearch, SearchResult, TextSearch } from '../search.interfaces';\nimport { computeTermSimilarity } from '../search.utils';\nimport { GoogleLinks } from './../../../utils/googleLinks';\nimport { ICHERCHE_ICONS } from './icherche-icons';\nimport {\n  IChercheData,\n  IChercheResponse,\n  IChercheReverseData,\n  IChercheReverseResponse\n} from './icherche.interfaces';\nimport { SearchSource } from './source';\nimport {\n  ReverseSearchOptions,\n  SearchSourceOptions,\n  SearchSourceSettings,\n  TextSearchOptions\n} from './source.interfaces';\n\n@Injectable()\nexport class IChercheSearchResultFormatter {\n  constructor(private languageService: LanguageService) {}\n\n  formatResult(result: SearchResult<Feature>): SearchResult<Feature> {\n    return result;\n  }\n}\n\n// Fix the \"+\" is replaced with space \" \" in a query string\n// https://github.com/angular/angular/issues/11058\nexport class IgoHttpParameterCodec implements HttpParameterCodec {\n  encodeKey(key: string): string {\n    return encodeURIComponent(key);\n  }\n\n  encodeValue(value: string): string {\n    return encodeURIComponent(value);\n  }\n\n  decodeKey(key: string): string {\n    return decodeURIComponent(key);\n  }\n\n  decodeValue(value: string): string {\n    return decodeURIComponent(value);\n  }\n}\n\n/**\n * ICherche search source\n */\n@Injectable()\nexport class IChercheSearchSource extends SearchSource implements TextSearch {\n  static id = 'icherche';\n  static type = FEATURE;\n  static propertiesBlacklist: string[] = [];\n  title$: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n  private hashtagsLieuxToKeep = [];\n\n  get title(): string {\n    return this.title$.getValue();\n  }\n\n  constructor(\n    private http: HttpClient,\n    private languageService: LanguageService,\n    storageService: StorageService,\n    @Inject('options') options: SearchSourceOptions,\n    @Inject(IChercheSearchResultFormatter)\n    private formatter: IChercheSearchResultFormatter,\n    injector: Injector\n  ) {\n    super(options, storageService);\n\n    const authService = injector.get(AuthService);\n    if (this.settings.length) {\n      if (!authService) {\n        this.getAllowedTypes();\n      } else {\n        authService.authenticate$.subscribe(() => {\n          this.getAllowedTypes();\n        });\n      }\n    }\n\n    this.languageService.language$.subscribe(() => {\n      this.title$.next(\n        this.languageService.translate.instant(this.options.title)\n      );\n    });\n  }\n\n  getId(): string {\n    return IChercheSearchSource.id;\n  }\n\n  getType(): string {\n    return IChercheSearchSource.type;\n  }\n\n  protected getDefaultOptions(): SearchSourceOptions {\n    const limit =\n      this.options.params && this.options.params.limit\n        ? Number(this.options.params.limit)\n        : undefined;\n    const ecmax =\n      this.options.params && this.options.params.ecmax\n        ? Number(this.options.params.ecmax)\n        : undefined;\n\n    const types = this.options.params?.type\n      ? this.options.params.type.replace(/\\s/g, '').toLowerCase().split(',')\n      : [\n          'adresses',\n          'codes-postaux',\n          'routes',\n          'intersections',\n          'municipalites',\n          'mrc',\n          'regadmin',\n          'lieux'\n        ];\n\n    const showAdvancedParams = this.options.showAdvancedSettings;\n\n    return {\n      title: 'igo.geo.search.icherche.name',\n      searchUrl: 'https://geoegl.msp.gouv.qc.ca/apis/icherche',\n      settings: [\n        {\n          type: 'checkbox',\n          title: 'results type',\n          name: 'type',\n          values: [\n            {\n              title: 'igo.geo.search.icherche.type.address',\n              value: 'adresses',\n              enabled: types.indexOf('adresses') !== -1,\n              hashtags: ['adresse']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.oldAddress',\n              value: 'anciennes-adresses',\n              enabled: types.indexOf('anciennes-adresses') !== -1,\n              hashtags: ['anciennes-adresses']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.oldCity',\n              value: 'anciennes-municipalites',\n              enabled: types.indexOf('anciennes-municipalites') !== -1,\n              hashtags: ['anciennes-municipalites']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.cn',\n              value: 'bornes-cn',\n              enabled: types.indexOf('bornes-cn') !== -1,\n              hashtags: ['borne', 'bornes', 'cn']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.sumi',\n              value: 'bornes-sumi',\n              enabled: types.indexOf('bornes-sumi') !== -1,\n              hashtags: ['borne', 'bornes', 'sumi']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.cadastre',\n              value: 'cadastre',\n              enabled: types.indexOf('cadastre') !== -1,\n              hashtags: ['cadastre']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.postalCode',\n              value: 'codes-postaux',\n              enabled: types.indexOf('codes-postaux') !== -1,\n              hashtags: ['code-postal']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.entreprise',\n              value: 'entreprises',\n              enabled: types.indexOf('entreprises') !== -1,\n              available: false,\n              hashtags: ['entreprise']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.cycleStop',\n              value: 'haltes_cyclables',\n              enabled: types.indexOf('haltes_cyclables') !== -1,\n              hashtags: ['haltevelo', 'haltes_cyclables']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.restArea',\n              value: 'haltes_routieres',\n              enabled: types.indexOf('haltes_routieres') !== -1,\n              hashtags: ['halteroute', 'haltes_routieres']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.hq',\n              value: 'hq',\n              enabled: types.indexOf('hq') !== -1,\n              hashtags: ['hq']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.intersection',\n              value: 'intersections',\n              enabled: types.indexOf('intersections') !== -1,\n              hashtags: ['intersection', '+']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.place',\n              value: 'lieux',\n              enabled: types.indexOf('lieux') !== -1,\n              hashtags: ['lieu']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.mrc',\n              value: 'mrc',\n              enabled: types.indexOf('mrc') !== -1,\n              hashtags: ['mrc']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.city',\n              value: 'municipalites',\n              enabled: types.indexOf('municipalites') !== -1,\n              hashtags: ['municipalité', 'mun']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.regadmin',\n              value: 'regadmin',\n              enabled: types.indexOf('regadmin') !== -1,\n              hashtags: ['région-administrative', 'regadmin']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.gcc',\n              value: 'bornes-gcc',\n              enabled: types.indexOf('bornes-gcc') !== -1,\n              hashtags: ['borne', 'bornes', 'repère', 'gcc', 'ccg']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.km',\n              value: 'bornes-km',\n              enabled: types.indexOf('bornes-km') !== -1,\n              hashtags: ['borne', 'bornes', 'repère', 'km']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.road',\n              value: 'routes',\n              enabled: types.indexOf('routes') !== -1,\n              hashtags: ['route']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.exit',\n              value: 'sorties-autoroute',\n              enabled: types.indexOf('sorties-autoroute') !== -1,\n              hashtags: ['sortie', 'sorties', 'exit']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.cultpatri',\n              value: 'culture',\n              enabled: types.indexOf('culture') !== -1,\n              hashtags: ['grille', 'culture']\n            },\n            {\n              title: 'igo.geo.search.icherche.type.unites',\n              value: 'unites',\n              enabled: types.indexOf('unites') !== -1,\n              hashtags: ['unites', 'adresse']\n            }\n          ]\n        } satisfies SearchSourceSettings,\n        {\n          type: 'radiobutton',\n          title: 'results limit',\n          name: 'limit',\n          values: [\n            {\n              title: '1',\n              value: 1,\n              enabled: limit === 1\n            },\n            {\n              title: '5',\n              value: 5,\n              enabled: limit === 5 || !limit\n            },\n            {\n              title: '10',\n              value: 10,\n              enabled: limit === 10\n            },\n            {\n              title: '25',\n              value: 25,\n              enabled: limit === 25\n            },\n            {\n              title: '50',\n              value: 50,\n              enabled: limit === 50\n            }\n          ]\n        } satisfies SearchSourceSettings,\n        showAdvancedParams &&\n          ({\n            type: 'radiobutton',\n            title: 'ecmax',\n            name: 'ecmax',\n            values: [\n              {\n                title: '10 %',\n                value: 10,\n                enabled: ecmax === 10\n              },\n              {\n                title: '30 %',\n                value: 30,\n                enabled: ecmax === 30 || !ecmax\n              },\n              {\n                title: '50 %',\n                value: 50,\n                enabled: ecmax === 50\n              },\n              {\n                title: '75 %',\n                value: 75,\n                enabled: ecmax === 75\n              },\n              {\n                title: '100 %',\n                value: 100,\n                enabled: ecmax === 100\n              }\n            ]\n          } satisfies SearchSourceSettings),\n        {\n          type: 'radiobutton',\n          title: 'restrictExtent',\n          name: 'loc',\n          values: [\n            {\n              title: 'igo.geo.search.icherche.restrictExtent.map',\n              value: 'true',\n              enabled: false\n            },\n            {\n              title: 'igo.geo.search.icherche.restrictExtent.quebec',\n              value: 'false',\n              enabled: true\n            }\n          ]\n        } satisfies SearchSourceSettings\n      ].filter(Boolean)\n    };\n  }\n\n  /**\n   * Search a location by name or keyword\n   * @param term Location name or keyword\n   * @returns Observable of <SearchResult<Feature>[]\n   */\n  search(\n    term: string,\n    options?: TextSearchOptions\n  ): Observable<SearchResult<Feature>[]> {\n    const params = this.computeRequestParams(term, options || {});\n    if (!params.get('type').length) {\n      return of([]);\n    }\n    this.options.params.page = params.get('page') || '1';\n\n    return this.getSearch(term, params);\n  }\n\n  @Cacheable({\n    maxCacheCount: 20,\n    cacheHasher: customCacheHasher\n  })\n  private getSearch(\n    term: string,\n    params: HttpParams\n  ): Observable<SearchResult<Feature>[]> {\n    return this.http.get(`${this.searchUrl}/geocode`, { params }).pipe(\n      map((response: IChercheResponse) => this.extractResults(response, term)),\n      catchError((err) => {\n        err.error.toDisplay = true;\n        err.error.title = this.languageService.translate.instant(\n          this.getDefaultOptions().title\n        );\n        throw err;\n      })\n    );\n  }\n  private getAllowedTypes() {\n    return this.http\n      .get(`${this.searchUrl}/types`)\n      .subscribe((types: string[]) => {\n        const typeSetting = this.settings.find((s) => s.name === 'type');\n        typeSetting.values.forEach((v) => {\n          const regex = new RegExp(`^${v.value}(\\\\.|$)`);\n          const typesMatched = types.filter((value) => regex.test(value));\n          v.available = typesMatched.length > 0;\n          if (v.value === 'lieux') {\n            this.hashtagsLieuxToKeep = [\n              ...(new Set(\n                typesMatched\n                  .map((t) => t.split('.'))\n                  .reduce((a, b) => a.concat(b))\n                  .filter((t) => t !== 'lieux')\n              ) as any)\n            ];\n          }\n        });\n        this.setParamFromSetting(typeSetting, false);\n      });\n  }\n\n  private computeRequestParams(\n    term: string,\n    options: TextSearchOptions\n  ): HttpParams {\n    const queryParams: any = Object.assign(\n      {\n        geometry: true,\n        bbox: true,\n        icon: true,\n        type: 'adresses,codes-postaux,municipalites,mrc,regadmin,lieux,entreprises,bornes-sumi'\n      },\n      this.params,\n      this.computeOptionsParam(term, options || {}).params,\n      {\n        q: this.computeTerm(term),\n        page: options.page\n      }\n    );\n\n    if (queryParams.loc === 'true') {\n      const [xMin, yMin, xMax, yMax] = options.extent;\n      queryParams.loc = `${xMin},${yMin};${xMax},${yMin};${xMax},${yMax};${xMin},${yMax};${xMin},${yMin}`;\n    } else if (queryParams.loc === 'false') {\n      delete queryParams.loc;\n    }\n\n    if (/#[A-Za-z]+/.test(queryParams.q)) {\n      queryParams.type = 'lieux';\n    }\n\n    return new HttpParams({\n      fromObject: ObjectUtils.removeUndefined(queryParams),\n      encoder: new IgoHttpParameterCodec()\n    });\n  }\n\n  private extractResults(\n    response: IChercheResponse,\n    term: string\n  ): SearchResult<Feature>[] {\n    return response.features.map((data: IChercheData) => {\n      return this.formatter.formatResult(\n        this.dataToResult(data, term, response)\n      );\n    });\n  }\n\n  private dataToResult(\n    data: IChercheData,\n    term: string,\n    response?: IChercheResponse\n  ): SearchResult<Feature> {\n    const properties = this.computeProperties(data);\n    const id = [this.getId(), properties.type, properties.code].join('.');\n\n    const titleHtml = data.highlight.title || data.properties.nom;\n    const subtitleHtml = data.highlight.title2\n      ? ' <small> ' + data.highlight.title2 + '</small>'\n      : '';\n    const subtitleHtml2 = data.highlight.title3\n      ? '<br><small> ' + data.highlight.title3 + '</small>'\n      : '';\n\n    let icon: string | IconSvg = data.icon;\n    if (typeof icon == 'string' && Object.keys(ICHERCHE_ICONS).includes(icon)) {\n      icon = ICHERCHE_ICONS[icon];\n    }\n\n    return {\n      source: this,\n      data: {\n        type: FEATURE,\n        projection: 'EPSG:4326',\n        geometry: data.geometry,\n        extent: data.bbox,\n        properties,\n        meta: {\n          id,\n          title: data.properties.nom\n        }\n      },\n      meta: {\n        dataType: FEATURE,\n        id,\n        title: data.properties.nom,\n        titleHtml: titleHtml + subtitleHtml + subtitleHtml2,\n        icon: icon || 'location_on',\n        score:\n          data.score || computeTermSimilarity(term.trim(), data.properties.nom),\n        nextPage:\n          response.features.length % +this.options.params.limit === 0 &&\n          +this.options.params.page < 10\n      }\n    };\n  }\n\n  private computeProperties(data: IChercheData): Record<string, any> {\n    const properties = ObjectUtils.removeKeys(\n      data.properties,\n      IChercheSearchSource.propertiesBlacklist\n    );\n\n    if (!data.geometry) {\n      return Object.assign({ type: data.index }, properties);\n    }\n\n    const googleLinksProperties: {\n      GoogleMaps: string;\n      GoogleStreetView?: string;\n    } = {\n      GoogleMaps: ''\n    };\n\n    let googleMaps;\n    if (data.geometry.type === 'Point') {\n      googleMaps = GoogleLinks.getGoogleMapsCoordLink(\n        data.geometry.coordinates[0],\n        data.geometry.coordinates[1]\n      );\n    } else {\n      const point = pointOnFeature(data.geometry);\n      googleMaps = GoogleLinks.getGoogleMapsCoordLink(\n        point.geometry.coordinates[0],\n        point.geometry.coordinates[1]\n      );\n    }\n\n    let googleMapsNom;\n    if (data.index === 'routes') {\n      googleMapsNom = GoogleLinks.getGoogleMapsNameLink(\n        data.properties.nom + ', ' + data.properties.municipalite\n      );\n    } else if (data.index === 'municipalites') {\n      googleMapsNom = GoogleLinks.getGoogleMapsNameLink(\n        data.properties.nom + ', ' + 'ville'\n      );\n    } else if (data.index === 'mrc') {\n      googleMapsNom = GoogleLinks.getGoogleMapsNameLink(\n        'mrc+' + data.properties.nom\n      );\n    } else if (data.index === 'regadmin') {\n      googleMapsNom = GoogleLinks.getGoogleMapsNameLink(\n        data.properties.nom + ',+QC'\n      );\n    } else {\n      googleMapsNom = GoogleLinks.getGoogleMapsNameLink(\n        data.properties.nom || data.highlight.title\n      );\n    }\n\n    googleLinksProperties.GoogleMaps =\n      '<a href=' +\n      googleMaps +\n      ' target=\"_blank\">' +\n      this.languageService.translate.instant('igo.geo.searchByCoord') +\n      '</a> <br /> <a href=' +\n      googleMapsNom +\n      ' target=\"_blank\">' +\n      this.languageService.translate.instant('igo.geo.searchByName') +\n      '</a>';\n\n    if (data.geometry.type === 'Point') {\n      googleLinksProperties.GoogleStreetView =\n        GoogleLinks.getGoogleStreetViewLink(\n          data.geometry.coordinates[0],\n          data.geometry.coordinates[1]\n        );\n    }\n\n    const routing: {\n      Route: string;\n    } = {\n      Route:\n        '<span class=\"routing\"> <u>' +\n        this.languageService.translate.instant('igo.geo.seeRouting') +\n        '</u> </span>'\n    };\n\n    return Object.assign(\n      { type: data.index },\n      properties,\n      googleLinksProperties,\n      routing\n    );\n  }\n\n  /**\n   * Remove hashtag from query\n   * @param term Query with hashtag\n   */\n  private computeTerm(term: string): string {\n    // Keep hashtags for \"lieux\"\n    const hashtags = term.match(/(#[A-Za-z]+)/g) || [];\n    let keep = false;\n    keep = hashtags.some((hashtag) => {\n      const hashtagKey = String(hashtag).substring(1);\n      return this.hashtagsLieuxToKeep.some(\n        (h) =>\n          h\n            .toLowerCase()\n            .normalize('NFD')\n            .replace(/[\\u0300-\\u036f]/g, '') ===\n          hashtagKey\n            .toLowerCase()\n            .normalize('NFD')\n            .replace(/[\\u0300-\\u036f]/g, '')\n      );\n    });\n\n    if (!keep) {\n      term = term.replace(/(#[A-Za-z]+)/g, '');\n    }\n\n    return term.replace(/[^\\wÀ-ÿ !\\-\\+\\(\\)\\.\\/½¼¾,'#]+/g, '');\n  }\n\n  /**\n   * Add hashtag to param if valid\n   * @param term Query with hashtag\n   * @param options TextSearchOptions\n   */\n  private computeOptionsParam(\n    term: string,\n    options: TextSearchOptions\n  ): TextSearchOptions {\n    const hashtags = super.getHashtagsValid(term, 'type');\n    if (hashtags) {\n      options.params = Object.assign(options.params || {}, {\n        type: hashtags.join(',')\n      });\n    }\n\n    return options;\n  }\n}\n\n/**\n * IChercheReverse search source\n */\n@Injectable()\nexport class IChercheReverseSearchSource\n  extends SearchSource\n  implements ReverseSearch\n{\n  static id = 'icherchereverse';\n  static type = FEATURE;\n  static propertiesBlacklist: string[] = [];\n\n  title$: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n  get title(): string {\n    return this.title$.getValue();\n  }\n\n  constructor(\n    private http: HttpClient,\n    private languageService: LanguageService,\n    storageService: StorageService,\n    @Inject('options') options: SearchSourceOptions,\n    injector: Injector\n  ) {\n    super(options, storageService);\n\n    this.languageService.language$.subscribe(() => {\n      this.title$.next(\n        this.languageService.translate.instant(this.options.title)\n      );\n    });\n\n    const authService = injector.get(AuthService);\n    if (this.settings.length) {\n      if (!authService) {\n        this.getAllowedTypes();\n      } else {\n        authService.authenticate$.subscribe(() => {\n          this.getAllowedTypes();\n        });\n      }\n    }\n  }\n\n  getId(): string {\n    return IChercheReverseSearchSource.id;\n  }\n\n  getType(): string {\n    return IChercheReverseSearchSource.type;\n  }\n\n  protected getDefaultOptions(): SearchSourceOptions {\n    const types =\n      this.options.params && this.options.params.type\n        ? this.options.params.type.replace(/\\s/g, '').toLowerCase().split(',')\n        : ['adresses', 'municipalites', 'mrc', 'regadmin'];\n\n    return {\n      title: 'igo.geo.search.ichercheReverse.name',\n      searchUrl: 'https://geoegl.msp.gouv.qc.ca/apis/terrapi',\n      settings: [\n        {\n          type: 'checkbox',\n          title: 'results type',\n          name: 'type',\n          values: [\n            {\n              title: 'igo.geo.search.icherche.type.address',\n              value: 'adresses',\n              enabled: types.indexOf('adresses') !== -1\n            },\n            {\n              title: 'igo.geo.search.icherche.type.road',\n              value: 'routes',\n              enabled: types.indexOf('routes') !== -1,\n              available: false\n            },\n            {\n              title: 'igo.geo.search.icherche.type.district',\n              value: 'arrondissements',\n              enabled: types.indexOf('arrondissements') !== -1\n            },\n            {\n              title: 'igo.geo.search.icherche.type.city',\n              value: 'municipalites',\n              enabled: types.indexOf('municipalites') !== -1\n            },\n            {\n              title: 'igo.geo.search.icherche.type.mrc',\n              value: 'mrc',\n              enabled: types.indexOf('mrc') !== -1\n            },\n            {\n              title: 'igo.geo.search.icherche.type.regadmin',\n              value: 'regadmin',\n              enabled: types.indexOf('regadmin') !== -1\n            },\n            {\n              title: 'igo.geo.search.icherche.type.unites',\n              value: 'unites',\n              enabled: types.indexOf('unites') !== -1\n            }\n          ]\n        },\n        {\n          type: 'radiobutton',\n          title: 'radius',\n          name: 'bufferInput',\n          values: [\n            {\n              title: '100 m',\n              value: 100,\n              enabled: !this.options.distance || this.options.distance === 100\n            },\n            {\n              title: '500 m',\n              value: 500,\n              enabled: this.options.distance === 500\n            },\n            {\n              title: '1 km',\n              value: 1000,\n              enabled: this.options.distance === 1000\n            },\n            {\n              title: '2 km',\n              value: 2000,\n              enabled: this.options.distance === 2000\n            },\n            {\n              title: '5 km',\n              value: 5000,\n              enabled: this.options.distance === 5000\n            }\n          ]\n        }\n      ]\n    };\n  }\n\n  /**\n   * Search a location by coordinates\n   * @param lonLat Location coordinates\n   * @param distance Search raidus around lonLat\n   * @returns Observable of <SearchResult<Feature>[]\n   */\n  reverseSearch(\n    lonLat: [number, number],\n    options?: ReverseSearchOptions\n  ): Observable<SearchResult<Feature>[]> {\n    const params = this.computeRequestParams(lonLat, options || {});\n    if (!params.get('type').length) {\n      return of([]);\n    }\n    return this.getReverseSearch(params);\n  }\n\n  @Cacheable({\n    maxCacheCount: 20,\n    cacheHasher: customCacheHasher\n  })\n  private getReverseSearch(\n    params: HttpParams\n  ): Observable<SearchResult<Feature>[]> {\n    return this.http.get(`${this.searchUrl}/locate`, { params }).pipe(\n      map((response: IChercheReverseResponse) => {\n        return this.extractResults(response);\n      })\n    );\n  }\n\n  private getAllowedTypes() {\n    return this.http\n      .get(`${this.searchUrl}/types`)\n      .subscribe((types: string[]) => {\n        const typeSetting = this.settings.find((s) => s.name === 'type');\n        typeSetting.values.forEach((v) => {\n          v.available = types.indexOf(v.value as string) > -1;\n        });\n        this.setParamFromSetting(typeSetting, false);\n      });\n  }\n\n  private computeRequestParams(\n    lonLat: [number, number],\n    options?: ReverseSearchOptions\n  ): HttpParams {\n    if (options.distance || this.options.distance) {\n      options.params = Object.assign(options.params || {}, {\n        bufferInput: options.distance || this.options.distance\n      });\n    }\n\n    return new HttpParams({\n      fromObject: Object.assign(\n        {\n          loc: lonLat.join(','),\n          sort: 'distance',\n          geometry: true,\n          icon: true\n        },\n        options.params || {},\n        this.params\n      )\n    });\n  }\n\n  private extractResults(\n    response: IChercheReverseResponse\n  ): SearchResult<Feature>[] {\n    return response.features.map((data: IChercheReverseData) => {\n      return this.dataToResult(data);\n    });\n  }\n\n  private getSubtitle(data: IChercheReverseData) {\n    if (!this.settings.length) {\n      return '';\n    }\n    let subtitle = '';\n    switch (data.properties.type) {\n      case 'arrondissements':\n        subtitle = data.properties.municipalite + ' (Arrondissement)';\n        break;\n      default: {\n        const typeSetting = this.settings.find((s) => s.name === 'type');\n        const type = typeSetting.values.find(\n          (t) => t.value === data.properties.type\n        );\n        if (type) {\n          subtitle = this.languageService.translate.instant(type.title);\n        }\n      }\n    }\n    return subtitle;\n  }\n\n  private dataToResult(data: IChercheReverseData): SearchResult<Feature> {\n    const properties = this.computeProperties(data);\n    const extent = this.computeExtent(data);\n    const id = [this.getId(), properties.type, properties.code].join('.');\n\n    const titleHtml = data.properties.nom;\n    const subtitleHtml = ' <small> ' + this.getSubtitle(data) + '</small>';\n\n    return {\n      source: this,\n      data: {\n        type: FEATURE,\n        projection: 'EPSG:4326',\n        geometry: data.geometry,\n        extent,\n        properties,\n        meta: {\n          id,\n          title: data.properties.nom\n        }\n      },\n      meta: {\n        dataType: FEATURE,\n        id,\n        title: data.properties.nom,\n        titleHtml: titleHtml + subtitleHtml,\n        icon: data.icon || 'location_on',\n        pointerSummaryTitle: this.getSubtitle(data) + ': ' + data.properties.nom\n      }\n    };\n  }\n\n  private computeProperties(data: IChercheReverseData): Record<string, any> {\n    const properties = ObjectUtils.removeKeys(\n      data.properties,\n      IChercheReverseSearchSource.propertiesBlacklist\n    );\n\n    const routing: {\n      Route: string;\n    } = {\n      Route:\n        '<span class=\"routing\"> <u>' +\n        this.languageService.translate.instant('igo.geo.seeRouting') +\n        '</u> </span>'\n    };\n\n    return Object.assign(properties, routing);\n  }\n\n  private computeExtent(\n    data: IChercheReverseData\n  ): [number, number, number, number] | undefined {\n    return data.bbox\n      ? [data.bbox[0], data.bbox[2], data.bbox[1], data.bbox[3]]\n      : undefined;\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injector, Provider } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\n\nimport {\n  IChercheReverseSearchSource,\n  IChercheSearchResultFormatter,\n  IChercheSearchSource\n} from './icherche';\nimport { SearchSource } from './source';\nimport { SearchSourceFeature, SearchSourceKind } from './source.interfaces';\n\n/**\n * ICherche search result formatter factory\n * @ignore\n */\nexport function defaultIChercheSearchResultFormatterFactory(\n  languageService: LanguageService\n) {\n  return new IChercheSearchResultFormatter(languageService);\n}\n\n/**\n * Function that returns a provider for the ICherche search result formatter\n */\nexport function provideDefaultIChercheSearchResultFormatter(): Provider {\n  return {\n    provide: IChercheSearchResultFormatter,\n    useFactory: defaultIChercheSearchResultFormatterFactory,\n    deps: [LanguageService]\n  };\n}\n\n/**\n * ICherche search source factory\n * @ignore\n */\nexport function ichercheSearchSourceFactory(\n  http: HttpClient,\n  languageService: LanguageService,\n  storageService: StorageService,\n  config: ConfigService,\n  formatter: IChercheSearchResultFormatter,\n  injector: Injector\n) {\n  return new IChercheSearchSource(\n    http,\n    languageService,\n    storageService,\n    config.getConfig(`searchSources.${IChercheSearchSource.id}`),\n    formatter,\n    injector\n  );\n}\n\n/**\n * Function that returns a provider for the ICherche search source\n */\nexport function provideIChercheSearchSource(): Provider {\n  return {\n    provide: SearchSource,\n    useFactory: ichercheSearchSourceFactory,\n    multi: true,\n    deps: [\n      HttpClient,\n      LanguageService,\n      StorageService,\n      ConfigService,\n      IChercheSearchResultFormatter,\n      Injector\n    ]\n  };\n}\n\nexport function withIChercheSource(): SearchSourceFeature<SearchSourceKind.ICherche> {\n  return {\n    kind: SearchSourceKind.ICherche,\n    providers: [\n      provideIChercheSearchSource(),\n      provideDefaultIChercheSearchResultFormatter()\n    ]\n  };\n}\n\n/**\n * IChercheReverse search source factory\n * @ignore\n */\nexport function ichercheReverseSearchSourceFactory(\n  http: HttpClient,\n  languageService: LanguageService,\n  storageService: StorageService,\n  config: ConfigService,\n  injector: Injector\n) {\n  return new IChercheReverseSearchSource(\n    http,\n    languageService,\n    storageService,\n    config.getConfig(`searchSources.${IChercheReverseSearchSource.id}`),\n    injector\n  );\n}\n\n/**\n * Function that returns a provider for the IChercheReverse search source\n */\nexport function provideIChercheReverseSearchSource() {\n  return {\n    provide: SearchSource,\n    useFactory: ichercheReverseSearchSourceFactory,\n    multi: true,\n    deps: [HttpClient, LanguageService, StorageService, ConfigService, Injector]\n  };\n}\n\nexport function withIChercheReverseSource(): SearchSourceFeature<SearchSourceKind.IChercheReverse> {\n  return {\n    kind: SearchSourceKind.IChercheReverse,\n    providers: [\n      provideIChercheReverseSearchSource(),\n      provideDefaultIChercheSearchResultFormatter()\n    ]\n  };\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\nimport { ObjectUtils, customCacheHasher } from '@igo2/utils';\n\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Cacheable } from 'ts-cacheable';\n\nimport { LAYER } from '../../../layer/shared/layer.enums';\nimport { getResolutionFromScale } from '../../../map/shared/map.utils';\nimport { QueryableDataSourceOptions } from '../../../query/shared/query.interfaces';\nimport { SearchResult, TextSearch } from '../search.interfaces';\nimport { computeTermSimilarity } from '../search.utils';\nimport {\n  QueryFormat,\n  QueryHtmlTarget\n} from './../../../query/shared/query.enums';\nimport {\n  ILayerData,\n  ILayerDataSource,\n  ILayerItemResponse,\n  ILayerSearchSourceOptions,\n  ILayerServiceResponse\n} from './ilayer.interfaces';\nimport { SearchSource } from './source';\nimport { SearchSourceSettings, TextSearchOptions } from './source.interfaces';\n\n@Injectable()\nexport class ILayerSearchResultFormatter {\n  constructor(private languageService: LanguageService) {}\n\n  formatResult(data: ILayerData): ILayerData {\n    const allowedKey = [\n      'title',\n      'abstract',\n      'groupTitle',\n      'metadataUrl',\n      'downloadUrl',\n      'urlInfo',\n      'name'\n    ];\n\n    const property = Object.entries(data.properties)\n      .filter(([key]) => allowedKey.indexOf(key) !== -1)\n      .reduce((out: Record<string, any>, entries: [string, any]) => {\n        const [key, value] = entries;\n        let newKey;\n        try {\n          newKey = this.languageService.translate.instant(\n            'igo.geo.search.ilayer.properties.' + key\n          );\n        } catch {\n          newKey = key;\n        }\n        out[newKey] = value ? value : '';\n        return out;\n      }, {});\n\n    const dataR = Object.assign({}, data);\n    dataR.properties = property as ILayerDataSource;\n\n    return dataR;\n  }\n}\n\n/**\n * ILayer search source\n */\n@Injectable()\nexport class ILayerSearchSource extends SearchSource implements TextSearch {\n  static id = 'ilayer';\n  static type = LAYER;\n\n  title$: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n  get title(): string {\n    return this.title$.getValue();\n  }\n\n  constructor(\n    private http: HttpClient,\n    private languageService: LanguageService,\n    storageService: StorageService,\n    @Inject('options') options: ILayerSearchSourceOptions,\n    @Inject(ILayerSearchResultFormatter)\n    private formatter: ILayerSearchResultFormatter\n  ) {\n    super(options, storageService);\n    this.languageService.language$.subscribe(() => {\n      this.title$.next(\n        this.languageService.translate.instant(this.options.title)\n      );\n    });\n  }\n\n  getId(): string {\n    return ILayerSearchSource.id;\n  }\n\n  getType(): string {\n    return ILayerSearchSource.type;\n  }\n\n  protected getDefaultOptions(): ILayerSearchSourceOptions {\n    const limit =\n      this.options.params && this.options.params.limit\n        ? Number(this.options.params.limit)\n        : undefined;\n    const ecmax =\n      this.options.params && this.options.params.ecmax\n        ? Number(this.options.params.ecmax)\n        : undefined;\n\n    const showAdvancedParams = this.options.showAdvancedSettings;\n\n    return {\n      title: 'igo.geo.search.ilayer.name',\n      searchUrl: 'https://geoegl.msp.gouv.qc.ca/apis/layers/search',\n      settings: [\n        {\n          type: 'checkbox',\n          title: 'results type',\n          name: 'type',\n          values: [\n            {\n              title: 'igo.geo.search.ilayer.type.layer',\n              value: 'layer',\n              enabled: true,\n              hashtags: ['layer', 'layers', 'couche', 'couches']\n            },\n            {\n              title: 'igo.geo.search.ilayer.type.groupLayer',\n              value: 'group',\n              enabled: false,\n              hashtags: ['gr-layer', 'gr-layers', 'gr-couche', 'gr-couches']\n            }\n          ]\n        } satisfies SearchSourceSettings,\n        {\n          type: 'radiobutton',\n          title: 'results limit',\n          name: 'limit',\n          values: [\n            {\n              title: '1',\n              value: 1,\n              enabled: limit === 1\n            },\n            {\n              title: '5',\n              value: 5,\n              enabled: limit === 5 || !limit\n            },\n            {\n              title: '10',\n              value: 10,\n              enabled: limit === 10\n            },\n            {\n              title: '25',\n              value: 25,\n              enabled: limit === 25\n            },\n            {\n              title: '50',\n              value: 50,\n              enabled: limit === 50\n            }\n          ]\n        } satisfies SearchSourceSettings,\n        showAdvancedParams &&\n          ({\n            type: 'radiobutton',\n            title: 'ecmax',\n            name: 'ecmax',\n            values: [\n              {\n                title: '10 %',\n                value: 10,\n                enabled: ecmax === 10\n              },\n              {\n                title: '30 %',\n                value: 30,\n                enabled: ecmax === 30\n              },\n              {\n                title: '50 %',\n                value: 50,\n                enabled: ecmax === 50 || !ecmax\n              },\n              {\n                title: '75 %',\n                value: 75,\n                enabled: ecmax === 75\n              },\n              {\n                title: '100 %',\n                value: 100,\n                enabled: ecmax === 100\n              }\n            ]\n          } satisfies SearchSourceSettings)\n      ].filter(Boolean)\n    };\n  }\n\n  /**\n   * Search a layer by name or keyword\n   * @param term Layer name or keyword\n   * @returns Observable of <SearchResult<LayerOptions>[]\n   */\n  search(\n    term: string | undefined,\n    options?: TextSearchOptions\n  ): Observable<SearchResult<ILayerItemResponse>[]> {\n    const params = this.computeSearchRequestParams(term, options || {});\n    if (!params.get('q') || !params.get('type')) {\n      return of([]);\n    }\n    this.options.params.page = params.get('page') || '1';\n    return this.getSearch(term, params);\n  }\n\n  @Cacheable({\n    maxCacheCount: 20,\n    cacheHasher: customCacheHasher\n  })\n  private getSearch(\n    term: string,\n    params: HttpParams\n  ): Observable<SearchResult<ILayerItemResponse>[]> {\n    return this.http\n      .get(this.searchUrl, { params })\n      .pipe(\n        map((response: ILayerServiceResponse) =>\n          this.extractResults(response, term)\n        )\n      );\n  }\n\n  private computeSearchRequestParams(\n    term: string,\n    options: TextSearchOptions\n  ): HttpParams {\n    return new HttpParams({\n      fromObject: ObjectUtils.removeUndefined(\n        Object.assign(\n          {\n            q: this.computeTerm(term)\n          },\n          this.params,\n          this.computeOptionsParam(term, options || {}).params,\n          {\n            page: options.page\n          }\n        )\n      )\n    });\n  }\n\n  /**\n   * Remove hashtag from query\n   * @param term Query with hashtag\n   */\n  private computeTerm(term: string): string {\n    return term.replace(/(#[^\\s]*)/g, '').replace(/[^\\wÀ-ÿ !\\-\\(\\),'#]+/g, '');\n  }\n\n  /**\n   * Add hashtag to param if valid\n   * @param term Query with hashtag\n   * @param options TextSearchOptions\n   */\n  private computeOptionsParam(\n    term: string,\n    options: TextSearchOptions\n  ): TextSearchOptions {\n    const hashtags = super.getHashtagsValid(term, 'type');\n    if (hashtags) {\n      options.params = Object.assign(options.params || {}, {\n        type: hashtags.join(',')\n      });\n    }\n\n    return options;\n  }\n\n  private extractResults(\n    response: ILayerServiceResponse,\n    term: string\n  ): SearchResult<ILayerItemResponse>[] {\n    return response.items.map((data: ILayerData) =>\n      this.dataToResult(data, term, response)\n    );\n  }\n\n  private dataToResult(\n    data: ILayerData,\n    term: string,\n    response?: ILayerServiceResponse\n  ): SearchResult<ILayerItemResponse> {\n    const layerOptions = this.computeLayerOptions(data);\n\n    const titleHtml = data.highlight.title || data.properties.title;\n    const groupTitle = data.highlight.groupTitle || data.properties.groupTitle;\n    const subtitleHtml = groupTitle\n      ? ' <small style=\"color: #6f6969\"> ' + groupTitle + '</small>'\n      : '';\n\n    return {\n      source: this,\n      meta: {\n        dataType: LAYER,\n        id: [this.getId(), data.properties.id].join('.'),\n        title: data.properties.title,\n        titleHtml: titleHtml + subtitleHtml,\n        icon: data.properties.type === 'Layer' ? 'layers' : 'map',\n        score:\n          data.score ||\n          computeTermSimilarity(term.trim(), data.properties.name),\n        nextPage:\n          response.items.length % +this.options.params.limit === 0 &&\n          +this.options.params.page < 10\n      },\n      data: layerOptions\n    };\n  }\n\n  private computeLayerOptions(data: ILayerData): ILayerItemResponse {\n    const url = data.properties.url;\n    const queryParams: QueryableDataSourceOptions =\n      this.extractQueryParamsFromSourceUrl(url);\n    return ObjectUtils.removeUndefined({\n      sourceOptions: {\n        id: data.properties.id,\n        type: data.properties.format,\n        url,\n        queryFormat: queryParams.queryFormat,\n        queryHtmlTarget: queryParams.queryHtmlTarget,\n        params:\n          data.properties.format === 'wms'\n            ? { LAYERS: data.properties.name }\n            : undefined,\n        layer:\n          data.properties.format === 'wms' ? undefined : data.properties.name,\n        optionsFromCapabilities: true,\n        crossOrigin: 'anonymous'\n      },\n      title: data.properties.title,\n      maxResolution: getResolutionFromScale(\n        Number(data.properties.maxScaleDenom)\n      ),\n      minResolution: getResolutionFromScale(\n        Number(data.properties.minScaleDenom)\n      ),\n      metadata: {\n        url: data.properties.metadataUrl,\n        extern: data.properties.metadataUrl ? true : undefined,\n        abstract: data.properties.abstract || undefined\n      },\n      properties: this.formatter.formatResult(data).properties\n    });\n  }\n\n  private extractQueryParamsFromSourceUrl(url: string): {\n    queryFormat: QueryFormat;\n    queryHtmlTarget: QueryHtmlTarget;\n  } {\n    let queryFormat;\n    let queryHtmlTarget;\n    const formatOpt = (this.options as ILayerSearchSourceOptions).queryFormat;\n    if (formatOpt) {\n      for (const key of Object.keys(formatOpt)) {\n        const value = formatOpt[key];\n        if (value === '*') {\n          queryFormat = QueryFormat[key.toUpperCase()];\n          break;\n        }\n\n        const urls = (value as any as { urls: string[] }).urls;\n        if (Array.isArray(urls)) {\n          urls.forEach((urlOpt) => {\n            if (url.indexOf(urlOpt) !== -1) {\n              queryFormat = QueryFormat[key.toUpperCase()];\n            }\n          });\n          break;\n        }\n      }\n\n      if (\n        queryFormat === QueryFormat.HTML ||\n        queryFormat === QueryFormat.HTMLGML2\n      ) {\n        queryHtmlTarget = 'iframe';\n      }\n    }\n\n    return {\n      queryFormat,\n      queryHtmlTarget\n    };\n  }\n}\n","import { HttpClient } from '@angular/common/http';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { ILayerSearchResultFormatter, ILayerSearchSource } from './ilayer';\nimport { SearchSource } from './source';\nimport { SearchSourceFeature, SearchSourceKind } from './source.interfaces';\n\n/**\n * ILayer search result formatter factory\n * @ignore\n */\nexport function ilayerSearchResultFormatterFactory(\n  languageService: LanguageService\n) {\n  return new ILayerSearchResultFormatter(languageService);\n}\n\n/**\n * Function that returns a provider for the ILayer search result formatter\n */\nexport function provideILayerSearchResultFormatter() {\n  return {\n    provide: ILayerSearchResultFormatter,\n    useFactory: ilayerSearchResultFormatterFactory,\n    deps: [LanguageService]\n  };\n}\n\n/**\n * ILayer search source factory\n * @ignore\n */\nexport function ilayerSearchSourceFactory(\n  http: HttpClient,\n  languageService: LanguageService,\n  storageService: StorageService,\n  config: ConfigService,\n  formatter: ILayerSearchResultFormatter\n) {\n  return new ILayerSearchSource(\n    http,\n    languageService,\n    storageService,\n    config.getConfig(`searchSources.${ILayerSearchSource.id}`),\n    formatter\n  );\n}\n\n/**\n * Function that returns a provider for the ILayer search source\n */\nexport function provideILayerSearchSource() {\n  return {\n    provide: SearchSource,\n    useFactory: ilayerSearchSourceFactory,\n    multi: true,\n    deps: [\n      HttpClient,\n      LanguageService,\n      StorageService,\n      ConfigService,\n      ILayerSearchResultFormatter\n    ]\n  };\n}\n\nexport function withILayerSource(): SearchSourceFeature<SearchSourceKind.ILayer> {\n  return {\n    kind: SearchSourceKind.ILayer,\n    providers: [\n      provideILayerSearchSource(),\n      provideILayerSearchResultFormatter()\n    ]\n  };\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { SearchBarComponent } from './search-bar/search-bar.component';\nimport { IgoSearchBarModule } from './search-bar/search-bar.module';\nimport { SEARCH_RESULTS_DIRECTIVES } from './search-results';\nimport { IgoSearchResultsModule } from './search-results/search-results.module';\nimport { SearchSelectorComponent } from './search-selector/search-selector.component';\nimport { IgoSearchSelectorModule } from './search-selector/search-selector.module';\nimport { SearchSettingsComponent } from './search-settings/search-settings.component';\nimport { IgoSearchSettingsModule } from './search-settings/search-settings.module';\nimport { SearchPointerSummaryDirective } from './shared/search-pointer-summary.directive';\nimport { provideSearchSourceService } from './shared/search-source-service.providers';\nimport { SearchService } from './shared/search.service';\nimport { provideDefaultCoordinatesSearchResultFormatter } from './shared/sources/coordinates.providers';\nimport { provideDefaultIChercheSearchResultFormatter } from './shared/sources/icherche.providers';\nimport { provideILayerSearchResultFormatter } from './shared/sources/ilayer.providers';\n\nexport const SEARCH_DIRECTIVES = [\n  SearchBarComponent,\n  SearchSelectorComponent,\n  ...SEARCH_RESULTS_DIRECTIVES,\n  SearchSettingsComponent,\n  SearchPointerSummaryDirective\n] as const;\n\n@NgModule({\n  imports: [\n    IgoSearchBarModule,\n    IgoSearchSelectorModule,\n    IgoSearchResultsModule,\n    IgoSearchSettingsModule,\n    SearchPointerSummaryDirective\n  ],\n  exports: [\n    IgoSearchBarModule,\n    IgoSearchSelectorModule,\n    IgoSearchResultsModule,\n    IgoSearchSettingsModule,\n    SearchPointerSummaryDirective\n  ]\n})\nexport class IgoSearchModule {\n  /**\n   * @deprecated import the provideSearch() directly and add the source in the provider property\n   */\n  static forRoot(): ModuleWithProviders<IgoSearchModule> {\n    return {\n      ngModule: IgoSearchModule,\n      providers: [\n        SearchService,\n        provideSearchSourceService(),\n        provideDefaultIChercheSearchResultFormatter(),\n        provideDefaultCoordinatesSearchResultFormatter(),\n        provideILayerSearchResultFormatter()\n      ]\n    };\n  }\n}\n","import { APP_INITIALIZER, InjectionToken } from '@angular/core';\n\nimport { StyleListOptions } from './style-list.interface';\nimport { StyleListService } from './style-list.service';\n\nexport const STYLELIST_OPTIONS = new InjectionToken<StyleListOptions>(\n  'styleListOptions'\n);\n\nexport function provideStyleListOptions(options: StyleListOptions) {\n  return {\n    provide: STYLELIST_OPTIONS,\n    useValue: options\n  };\n}\n\nexport function styleListFactory(\n  styleListService: StyleListService,\n  options: StyleListOptions\n) {\n  return () => styleListService.load(options);\n}\n\nexport function provideStyleListLoader() {\n  return {\n    provide: APP_INITIALIZER,\n    useFactory: styleListFactory,\n    multi: true,\n    deps: [StyleListService, STYLELIST_OPTIONS]\n  };\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport {\n  provideStyleListLoader,\n  provideStyleListOptions\n} from './style-list.provider';\n\n@NgModule({\n  imports: [],\n  declarations: [],\n  exports: []\n})\nexport class IgoStyleListModule {\n  static forRoot(): ModuleWithProviders<IgoStyleListModule> {\n    return {\n      ngModule: IgoStyleListModule,\n      providers: [provideStyleListOptions({}), provideStyleListLoader()]\n    };\n  }\n}\n","import { NgIf } from '@angular/common';\nimport { Component, Inject, Input, OnInit } from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder,\n  UntypedFormGroup\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MAT_DIALOG_DATA,\n  MatDialogActions,\n  MatDialogContent,\n  MatDialogRef,\n  MatDialogTitle\n} from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ColorPickerFormFieldComponent } from '@igo2/common/color';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { asArray as ColorAsArray } from 'ol/color';\nimport olStyle from 'ol/style/Style';\n\nimport {\n  LayerMatDialogData,\n  StyleModalData\n} from '../shared/style-modal.interface';\n\n@Component({\n  selector: 'igo-style-modal-layer',\n  templateUrl: './style-modal-layer.component.html',\n  styleUrls: ['./style-modal-layer.component.scss'],\n  standalone: true,\n  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    FormsModule,\n    ReactiveFormsModule,\n    NgIf,\n    MatIconModule,\n    ColorPickerFormFieldComponent,\n    MatDialogActions,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class StyleModalLayerComponent implements OnInit {\n  @Input() confirmFlag = false;\n\n  public form: UntypedFormGroup;\n\n  public styleModalData: StyleModalData;\n  public linestringOnly: boolean;\n\n  private initialValues: StyleModalData;\n\n  private defaultValues: StyleModalData = {\n    fillColor: 'rgba(255,255,255,0.4)',\n    strokeColor: 'rgba(143,7,7,1)'\n  };\n\n  get layerOlStyle(): olStyle {\n    const style = this.data.layer.ol.getStyle();\n    return style instanceof Function ? undefined : (style as olStyle).clone();\n  }\n\n  constructor(\n    public dialogRef: MatDialogRef<StyleModalLayerComponent>,\n    private formBuilder: UntypedFormBuilder,\n    @Inject(MAT_DIALOG_DATA) public data: LayerMatDialogData\n  ) {}\n\n  ngOnInit() {\n    this.linestringOnly = true;\n    for (const feature of this.data.layer.ol.getSource().getFeatures()) {\n      if (feature.getGeometry()?.getType() !== 'LineString') {\n        this.linestringOnly = false;\n      }\n    }\n    this.buildStyleData();\n    this.buildForm();\n  }\n\n  private buildForm() {\n    this.form = this.formBuilder.group({\n      fill: [this.getLayerFillColor()],\n      stroke: [this.getLayerStrokeColor()]\n    });\n  }\n\n  private buildStyleData() {\n    this.styleModalData = {\n      fillColor: this.getLayerFillColor(),\n      strokeColor: this.getLayerStrokeColor()\n    };\n    this.initialValues = {\n      fillColor: this.getLayerFillColor(),\n      strokeColor: this.getLayerStrokeColor()\n    };\n  }\n\n  private getLayerFillColor() {\n    let fillColor = this.defaultValues.fillColor;\n    const style = this.layerOlStyle;\n    if (style?.getFill()?.getColor()) {\n      const arrayColor = style.getFill().getColor();\n      fillColor = `rgba(${arrayColor[0]},${arrayColor[1]},${arrayColor[2]},${\n        arrayColor[3] || 0.4\n      })`;\n    }\n    return fillColor;\n  }\n\n  private getLayerStrokeColor() {\n    let strokeColor = this.defaultValues.strokeColor;\n    const style = this.layerOlStyle;\n    if (style?.getStroke()?.getColor()) {\n      const arrayColor = style.getStroke().getColor();\n      strokeColor = `rgba(${arrayColor[0]},${arrayColor[1]},${arrayColor[2]},${\n        arrayColor[3] || 1\n      })`;\n    }\n    return strokeColor;\n  }\n\n  setLayerFillColor(event) {\n    const cAA = ColorAsArray(event);\n    const s = this.layerOlStyle.clone();\n    (s.getImage() as any).getFill().setColor(cAA);\n    s.getFill().setColor(cAA);\n    this.data.layer.ol.setStyle(s);\n    this.styleModalData.fillColor = event;\n  }\n\n  setLayerStrokeColor(event) {\n    const cAA = ColorAsArray(event);\n    const s = this.layerOlStyle.clone();\n    (s.getImage() as any).getStroke().setColor(cAA);\n    s.getStroke().setColor(cAA);\n    this.data.layer.ol.setStyle(s);\n    this.styleModalData.strokeColor = event;\n  }\n\n  cancel() {\n    this.dialogRef.close();\n    this.setLayerFillColor(this.initialValues.fillColor);\n    this.setLayerStrokeColor(this.initialValues.strokeColor);\n  }\n\n  confirm() {\n    this.confirmFlag = true;\n    if (this.form.get('fill').value) {\n      this.styleModalData.fillColor = this.form.get('fill').value;\n    }\n\n    if (this.form.get('stroke').value) {\n      this.styleModalData.strokeColor = this.form.get('stroke').value;\n    }\n    this.dialogRef.close(this.styleModalData);\n  }\n\n  openPicker() {\n    this.dialogRef.disableClose = true;\n  }\n\n  closePicker() {\n    this.dialogRef.disableClose = false;\n  }\n}\n","<h2 mat-dialog-title>\n  {{ 'igo.geo.style.styleModal' | translate }}\n</h2>\n<div mat-dialog-content>\n  <div class=\"edit-colorpicker\">\n    <form class=\"igo-form\" [formGroup]=\"form\">\n      <div class=\"color-picker\">\n        <ng-container *ngIf=\"linestringOnly !== true\">\n          <span>\n            <mat-icon class=\"stroke-palette-icon\">format_color_fill</mat-icon>\n            {{ 'igo.geo.style.fill' | translate }}\n          </span>\n\n          <igo-color-picker-form-field\n            formControlName=\"fill\"\n            (colorChange)=\"setLayerFillColor($event)\"\n          ></igo-color-picker-form-field>\n        </ng-container>\n\n        <span>\n          <mat-icon class=\"stroke-palette-icon\">border_color</mat-icon>\n          {{ 'igo.geo.style.stroke' | translate }}\n        </span>\n        <igo-color-picker-form-field\n          formControlName=\"stroke\"\n          (colorChange)=\"setLayerStrokeColor($event)\"\n        ></igo-color-picker-form-field>\n      </div>\n    </form>\n  </div>\n</div>\n<div mat-dialog-actions>\n  <button mat-raised-button (click)=\"cancel()\">\n    {{ 'igo.geo.style.cancel' | translate }}\n  </button>\n  <button mat-raised-button color=\"primary\" (click)=\"confirm()\">OK</button>\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { VectorLayer } from '../../../layer/shared/layers/vector-layer';\nimport { StyleModalLayerComponent } from '../layer/style-modal-layer.component';\nimport { LayerMatDialogData } from '../shared/style-modal.interface';\n\n@Component({\n  selector: 'igo-style-modal-layer-button',\n  templateUrl: './style-modal-layer-button.component.html',\n  styleUrls: ['./style-modal-layer-button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule]\n})\nexport class StyleModalLayerButtonComponent {\n  @Input() layer: VectorLayer;\n  constructor(private dialog: MatDialog) {}\n\n  /**\n   * Open the style modal dialog box\n   */\n  openStyleModalDialog() {\n    setTimeout(() => {\n      // open the dialog box used to style features\n      const data: LayerMatDialogData = { layer: this.layer };\n      this.dialog.open(StyleModalLayerComponent, {\n        disableClose: false,\n        data,\n        autoFocus: false\n      });\n    }, 250);\n  }\n}\n","<button\n  mat-icon-button\n  color=\"primary\"\n  (click)=\"openStyleModalDialog()\"\n  [matTooltip]=\"'igo.geo.style.styleModalTooltipLayer' | translate\"\n>\n  <mat-icon class=\"style-icon\">palette </mat-icon>\n</button>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { IgoStyleListModule } from './style-list/style-list.module';\nimport { StyleModalDrawingComponent } from './style-modal/drawing/style-modal-drawing.component';\nimport { StyleModalLayerButtonComponent } from './style-modal/layer-button/style-modal-layer-button.component';\nimport { StyleModalLayerComponent } from './style-modal/layer/style-modal-layer.component';\nimport { DrawStyleService } from './style-service/draw-style.service';\nimport { StyleService } from './style-service/style.service';\n\n@NgModule({\n  imports: [\n    IgoStyleListModule.forRoot(),\n    StyleModalDrawingComponent,\n    StyleModalLayerComponent,\n    StyleModalLayerButtonComponent\n  ],\n  exports: [\n    IgoStyleListModule,\n    StyleModalDrawingComponent,\n    StyleModalLayerComponent,\n    StyleModalLayerButtonComponent\n  ]\n})\nexport class IgoStyleModule {\n  static forRoot(): ModuleWithProviders<IgoStyleModule> {\n    return {\n      ngModule: IgoStyleModule,\n      providers: [StyleService, DrawStyleService]\n    };\n  }\n}\n","import { NgIf } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { getEntityTitle } from '@igo2/common/entity';\nimport { FlexibleComponent, FlexibleState } from '@igo2/common/flexible';\nimport { PanelComponent } from '@igo2/common/panel';\n\nimport olFormatGeoJSON from 'ol/format/GeoJSON';\n\nimport { FeatureDetailsComponent } from '../feature/feature-details/feature-details.component';\nimport { FeatureMotion } from '../feature/shared/feature.enums';\nimport { Feature } from '../feature/shared/feature.interfaces';\nimport { moveToOlFeatures } from '../feature/shared/feature.utils';\nimport { IgoMap } from '../map/shared/map';\n\n@Component({\n  selector: 'igo-toast',\n  templateUrl: './toast.component.html',\n  styleUrls: ['./toast.component.scss'],\n  standalone: true,\n  imports: [\n    FlexibleComponent,\n    PanelComponent,\n    MatButtonModule,\n    MatIconModule,\n    NgIf,\n    FeatureDetailsComponent\n  ]\n})\nexport class ToastComponent {\n  static SWIPE_ACTION = {\n    UP: 'swipeup',\n    DOWN: 'swipedown'\n  };\n  private format = new olFormatGeoJSON();\n\n  @Input()\n  get expanded(): boolean {\n    return this._expanded;\n  }\n  set expanded(value: boolean) {\n    this.state = value ? 'expanded' : 'collapsed';\n    this._expanded = value;\n  }\n  private _expanded: boolean;\n\n  @Input()\n  get map(): IgoMap {\n    return this._map;\n  }\n  set map(value: IgoMap) {\n    this._map = value;\n  }\n  private _map: IgoMap;\n\n  @Input()\n  get feature(): Feature {\n    return this._feature;\n  }\n  set feature(value: Feature) {\n    this._feature = value;\n  }\n  private _feature: Feature;\n\n  @Output() opened = new EventEmitter<boolean>();\n\n  public state: FlexibleState;\n\n  /**\n   * @internal\n   */\n  get title(): string {\n    return getEntityTitle(this.feature);\n  }\n\n  toggle() {\n    this.expanded = !this.expanded;\n    this.opened.emit(this.expanded);\n  }\n\n  zoomToFeatureExtent() {\n    if (this.feature.geometry) {\n      const olFeature = this.format.readFeature(this.feature, {\n        dataProjection: this.feature.projection,\n        featureProjection: this.map.projection\n      });\n      moveToOlFeatures(\n        this.map.viewController,\n        [olFeature],\n        FeatureMotion.Zoom\n      );\n    }\n  }\n\n  swipe(action: string) {\n    if (action === ToastComponent.SWIPE_ACTION.UP) {\n      if (!this.expanded) {\n        this.toggle();\n      }\n    } else if (action === ToastComponent.SWIPE_ACTION.DOWN) {\n      if (this.expanded) {\n        this.toggle();\n      }\n    }\n  }\n}\n","<igo-flexible\n  #flex\n  collapsedMobile=\"51px\"\n  expandedMobile=\"300px\"\n  [state]=\"state\"\n  (swipeup)=\"swipe($event.type)\"\n  (swipedown)=\"swipe($event.type)\"\n>\n  <igo-panel [title]=\"title\">\n    <button mat-icon-button panelLeftButton (click)=\"toggle()\">\n      <mat-icon>{{\n        ['collapsed', 'initial'].indexOf(flex.state) >= 0\n          ? 'arrow_upward'\n          : 'arrow_downward'\n      }}</mat-icon>\n    </button>\n\n    <button\n      mat-icon-button\n      panelRightButton\n      class=\"igo-icon-button\"\n      (click)=\"zoomToFeatureExtent()\"\n      *ngIf=\"feature.geometry\"\n    >\n      <mat-icon>zoom_in</mat-icon>\n    </button>\n\n    <igo-feature-details [feature]=\"feature\"></igo-feature-details>\n  </igo-panel>\n</igo-flexible>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { ToastComponent } from './toast.component';\n\n/**\n * @deprecated import the ToastComponent directly\n */\n@NgModule({\n  imports: [ToastComponent],\n  exports: [ToastComponent]\n})\nexport class IgoToastModule {\n  static forRoot(): ModuleWithProviders<IgoToastModule> {\n    return {\n      ngModule: IgoToastModule\n    };\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\n/**\n * @deprecated UNUSED\n */\n@NgModule({\n  imports: [],\n  exports: [],\n  declarations: []\n})\nexport class IgoWktModule {\n  static forRoot(): ModuleWithProviders<IgoWktModule> {\n    return {\n      ngModule: IgoWktModule,\n      providers: []\n    };\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  Output\n} from '@angular/core';\n\nimport { OnUpdateInputs } from '@igo2/common/dynamic-component';\nimport { WidgetComponent } from '@igo2/common/widget';\n\nimport { OgcFilterableItemComponent } from '../../../filter/ogc-filterable-item/ogc-filterable-item.component';\nimport { Layer } from '../../../layer';\nimport { IgoMap } from '../../../map/shared/map';\n\n@Component({\n  selector: 'igo-ogc-filter',\n  templateUrl: './ogc-filter.component.html',\n  styleUrls: ['./ogc-filter.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [OgcFilterableItemComponent]\n})\nexport class OgcFilterComponent implements OnUpdateInputs, WidgetComponent {\n  @Input() layer: Layer;\n\n  @Input() map: IgoMap;\n\n  /**\n   * Event emitted on complete\n   */\n  @Output() complete = new EventEmitter<void>();\n\n  /**\n   * Event emitted on cancel\n   */\n  @Output() cancel = new EventEmitter<void>();\n\n  constructor(private cdRef: ChangeDetectorRef) {}\n\n  /**\n   * Implemented as part of OnUpdateInputs\n   */\n  onUpdateInputs() {\n    this.cdRef.detectChanges();\n  }\n\n  /**\n   * On close, emit the cancel event\n   */\n  onClose() {\n    this.cancel.emit();\n  }\n}\n","<igo-ogc-filterable-item\n  igoListItem\n  [layer]=\"layer\"\n  [header]=\"false\"\n  [map]=\"map\"\n>\n</igo-ogc-filterable-item>\n","import { NgModule } from '@angular/core';\n\nimport { OgcFilterComponent } from './ogc-filter.component';\n\n/**\n * @deprecated import the OgcFilterComponent directly\n */\n@NgModule({\n  imports: [OgcFilterComponent],\n  exports: [OgcFilterComponent]\n})\nexport class IgoOgcFilterModule {}\n","import { InjectionToken } from '@angular/core';\n\nimport { Widget, WidgetService } from '@igo2/common/widget';\n\nimport { OgcFilterComponent } from './ogc-filter/ogc-filter.component';\n\nexport const OgcFilterWidget = new InjectionToken<Widget>('OgcFilterWidget');\n\nexport function ogcFilterWidgetFactory(widgetService: WidgetService): Widget {\n  return widgetService.create(OgcFilterComponent);\n}\n\nexport function provideOgcFilterWidget() {\n  return {\n    provide: OgcFilterWidget,\n    useFactory: ogcFilterWidgetFactory,\n    deps: [WidgetService]\n  };\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  MAT_DIALOG_DATA,\n  MatDialogActions,\n  MatDialogContent,\n  MatDialogRef\n} from '@angular/material/dialog';\n\nimport { LanguageService } from '@igo2/core/language';\n\nexport interface DialogData {\n  type: string;\n  cancel: boolean;\n}\n\n@Component({\n  selector: 'igo-confirmation-popup-component',\n  templateUrl: './confirmation-popup.component.html',\n  styleUrls: ['./confirmation-popup.component.scss'],\n  standalone: true,\n  imports: [MatDialogContent, MatDialogActions, MatButtonModule]\n})\nexport class ConfirmationPopupComponent {\n  constructor(\n    public dialogRef: MatDialogRef<ConfirmationPopupComponent>,\n    public languageService: LanguageService,\n    @Inject(MAT_DIALOG_DATA) public data: { type: string; cancel: boolean }\n  ) {}\n\n  cancelAction() {\n    this.data.cancel = true;\n    this.dialogRef.close(this.data.cancel);\n  }\n\n  confirmedAction() {\n    this.data.cancel = false;\n    this.dialogRef.close(this.data.cancel);\n  }\n}\n","<div mat-dialog-content>\n  <p class=\"mat-typography\">\n    {{\n      data.type === 'add'\n        ? languageService.translate.instant('igo.geo.workspace.addConfirmation')\n        : languageService.translate.instant(\n            'igo.geo.workspace.deleteConfirmation'\n          )\n    }}\n  </p>\n</div>\n<div mat-dialog-actions>\n  <button mat-raised-button color=\"primary\" (click)=\"confirmedAction()\">\n    Ok\n  </button>\n  <button mat-raised-button (click)=\"cancelAction()\">\n    {{ languageService.translate.instant('igo.geo.workspace.cancel') }}\n  </button>\n</div>\n","import { MatDialog } from '@angular/material/dialog';\n\nimport { EntityRecord } from '@igo2/common/entity';\nimport { Workspace, WorkspaceOptions } from '@igo2/common/workspace';\nimport { ConfigService } from '@igo2/core/config';\n\nimport Collection from 'ol/Collection';\nimport OlFeature from 'ol/Feature';\nimport OlGeoJSON from 'ol/format/GeoJSON';\nimport type { Type } from 'ol/geom/Geometry';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport OlModify from 'ol/interaction/Modify';\nimport OlVectorSource from 'ol/source/Vector';\nimport * as OlStyle from 'ol/style';\n\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\n\nimport { FeatureDataSource, RelationOptions } from '../../datasource/shared';\nimport { GeometryType, createInteractionStyle } from '../../draw/shared';\nimport { featureToOl } from '../../feature/shared';\nimport { DrawControl } from '../../geometry/shared';\nimport { ImageLayer, VectorLayer } from '../../layer/shared';\nimport { IgoMap } from '../../map/shared/map';\nimport { ConfirmationPopupComponent } from '../confirmation-popup/confirmation-popup.component';\n\nexport interface EditionWorkspaceOptions extends WorkspaceOptions {\n  layer: ImageLayer | VectorLayer;\n  map: IgoMap;\n}\n\nexport class EditionWorkspace extends Workspace {\n  readonly inResolutionRange$ = new BehaviorSubject<boolean>(true);\n\n  get layer(): ImageLayer | VectorLayer {\n    return this.options.layer;\n  }\n\n  get map(): IgoMap {\n    return this.options.map;\n  }\n\n  private drawControl: DrawControl;\n  private drawEnd$$: Subscription;\n  private olDrawingLayerSource = new OlVectorSource();\n  private olDrawingLayer: VectorLayer;\n  public geometryType = GeometryType; // Reference to the GeometryType enum\n  public modify; // Reference to the ol interaction\n\n  public modifyStyle = new OlStyle.Style({\n    stroke: new OlStyle.Stroke({\n      color: 'rgba(255,255,255,1)',\n      width: 1\n    }),\n    fill: new OlStyle.Fill({\n      color: 'rgba(0,161,222,1)'\n    }),\n    image: new OlStyle.Circle({\n      radius: 7,\n      stroke: new OlStyle.Stroke({\n        color: 'rgba(255,255,255,1)',\n        width: 1\n      }),\n      fill: new OlStyle.Fill({\n        color: 'rgba(0,161,222,1)'\n      })\n    })\n  });\n\n  private newFeaturefilterClauseFunc = (record: EntityRecord<object>) => {\n    return record.state.newFeature === true;\n  };\n\n  private editFeaturefilterClauseFunc = (record: EntityRecord<object>) => {\n    return record.state.edit === true;\n  };\n\n  public fillColor: string;\n  public strokeColor: string;\n  public strokeWidth: number;\n\n  constructor(\n    private dialog: MatDialog,\n    private configService: ConfigService,\n    private adding$: BehaviorSubject<boolean>,\n    private getDomainValues: (relation: RelationOptions) => Observable<any>,\n    protected options: EditionWorkspaceOptions\n  ) {\n    super(options);\n    this.map.viewController.resolution$.subscribe((mapResolution) => {\n      if (\n        mapResolution > this.layer.minResolution &&\n        mapResolution < this.layer.maxResolution\n      ) {\n        this.inResolutionRange$.next(true);\n      } else {\n        this.inResolutionRange$.next(false);\n      }\n    });\n\n    this.drawControl = this.createDrawControl();\n    this.drawControl.setGeometryType(this.geometryType.Point as any);\n\n    if (this.olDrawingLayer) {\n      this.map.layerController.remove(this.olDrawingLayer);\n    }\n\n    this.olDrawingLayer = new VectorLayer({\n      id: 'igo-draw-layer',\n      title: 'edition',\n      zIndex: 300,\n      source: new FeatureDataSource(),\n      showInLayerList: false,\n      exportable: false,\n      browsable: false,\n      workspace: {\n        enabled: false\n      }\n    });\n  }\n\n  deleteFeature(feature, workspace) {\n    setTimeout(() => {\n      const dialogRef = this.dialog.open(ConfirmationPopupComponent, {\n        disableClose: false,\n        data: { type: 'delete' }\n      });\n\n      dialogRef.afterClosed().subscribe((result) => {\n        if (result === false) {\n          let id, url;\n          const baseUrl = workspace.layer.dataSource.options.edition.baseUrl;\n          const deleteUrl =\n            workspace.layer.dataSource.options.edition.deleteUrl;\n          if (baseUrl.length) {\n            url = this.configService.getConfig('edition.url')\n              ? this.configService.getConfig('edition.url') +\n                baseUrl +\n                '?' +\n                deleteUrl\n              : baseUrl + '?' + deleteUrl;\n          } else {\n            url = this.configService.getConfig('edition.url')\n              ? this.configService.getConfig('edition.url') + deleteUrl\n              : deleteUrl;\n          }\n\n          for (const column of workspace.meta.tableTemplate.columns) {\n            for (const property in feature.properties) {\n              let columnName = column.name;\n              if (columnName.includes('properties.')) {\n                columnName = columnName.split('.')[1];\n              }\n              if (columnName === property && column.primary === true) {\n                id = feature.properties[property];\n              }\n            }\n          }\n          if (url) {\n            url += id;\n            this.deleteFeature(workspace, url);\n          }\n        }\n      });\n    }, 250);\n  }\n\n  editFeature(feature, workspace: EditionWorkspace) {\n    feature.edition = true;\n    let id;\n    let find = false;\n    const editionOpt = workspace.layer.dataSource.options.edition;\n    for (const column of workspace.meta.tableTemplate.columns) {\n      // Update domain list\n      if (column.type === 'list' || column.type === 'autocomplete') {\n        this.getDomainValues(column.relation).subscribe((result) => {\n          column.domainValues = result;\n        });\n      }\n      if (find === false) {\n        for (const property in feature.properties) {\n          let columnName = column.name;\n          if (columnName.includes('properties.')) {\n            columnName = columnName.split('.')[1];\n          }\n          if (columnName === property && column.primary === true) {\n            id = feature.properties[property];\n            find = true;\n            break;\n          }\n        }\n      }\n    }\n    if (id) {\n      feature.original_properties = JSON.parse(\n        JSON.stringify(feature.properties)\n      );\n      feature.original_geometry = feature.geometry;\n      feature.idkey = id;\n      workspace.entityStore.state.updateAll({ edit: false });\n      workspace.entityStore.stateView.filter(this.editFeaturefilterClauseFunc);\n      this.addFeatureToStore(feature, workspace);\n    } else {\n      // Only for edition with it's own geometry\n      if (!feature.newFeature && editionOpt.geomType) {\n        feature.newFeature = true;\n        this.adding$.next(true);\n        workspace.entityStore.state.updateAll({ newFeature: false });\n        workspace.entityStore.stateView.filter(this.newFeaturefilterClauseFunc);\n        if (editionOpt.addWithDraw) {\n          const geometryType = editionOpt.geomType;\n          this.onGeometryTypeChange(geometryType, feature, workspace);\n        } else {\n          workspace.entityStore.insert(feature);\n          workspace.entityStore.state.update(\n            feature,\n            { newFeature: true },\n            true\n          );\n        }\n      }\n    }\n  }\n\n  /**\n   * Create a Draw Control\n   * @param fillColor the fill color\n   * @param strokeColor the stroke color\n   * @param strokeWidth the stroke width\n   * @returns a Draw Control\n   */\n  createDrawControl(\n    fillColor?: string,\n    strokeColor?: string,\n    strokeWidth?: number\n  ) {\n    const drawControl = new DrawControl({\n      geometryType: undefined,\n      drawingLayerSource: this.olDrawingLayerSource,\n      drawingLayerStyle: new OlStyle.Style({}),\n      interactionStyle: createInteractionStyle(\n        fillColor,\n        strokeColor,\n        strokeWidth\n      )\n    });\n\n    return drawControl;\n  }\n\n  /**\n   * Called when the user selects a new geometry type\n   * @param geometryType the geometry type selected by the user\n   */\n  onGeometryTypeChange(\n    geometryType: Type,\n    feature,\n    workspace: EditionWorkspace\n  ) {\n    this.drawControl.setGeometryType(geometryType);\n    this.toggleDrawControl(feature, workspace);\n  }\n\n  /**\n   * Activate the correct control\n   */\n  private toggleDrawControl(feature, workspace: EditionWorkspace) {\n    this.deactivateDrawControl();\n    this.activateDrawControl(feature, workspace);\n  }\n\n  /**\n   * Deactivate the active draw control\n   */\n  public deactivateDrawControl() {\n    if (!this.drawControl) {\n      return;\n    }\n\n    if (this.drawEnd$$) {\n      this.drawEnd$$.unsubscribe();\n    }\n\n    this.drawControl.setOlMap(undefined);\n  }\n\n  /**\n   * Activate a given control\n   */\n  private activateDrawControl(feature, workspace: EditionWorkspace) {\n    this.drawEnd$$ = this.drawControl.end$.subscribe(\n      (olGeometry: OlGeometry) => {\n        this.addFeatureToStore(feature, workspace, olGeometry);\n      }\n    );\n\n    this.drawControl.setOlMap(this.map.ol, true);\n  }\n\n  /**\n   * Add a feature to layer. The loading strategy of the layer\n   * will trigger and add the feature to the workspace store.\n   * @internal\n   */\n  private addFeatureToStore(\n    feature,\n    workspace: EditionWorkspace,\n    olGeometry?: OlGeometry\n  ) {\n    const projection = this.map.ol.getView().getProjection();\n    let geometry = feature.geometry;\n\n    // If an olGeometry is passed, it means that it is a new feature\n    if (olGeometry) {\n      workspace.entityStore.insert(feature);\n      workspace.entityStore.state.update(feature, { newFeature: true }, true);\n      geometry = new OlGeoJSON().writeGeometryObject(olGeometry, {\n        featureProjection: projection,\n        dataProjection: 'EPSG:4326'\n      }) as any;\n\n      feature.geometry = geometry;\n    } else {\n      workspace.entityStore.state.update(feature, { edit: true }, true);\n    }\n\n    feature.projection = 'EPSG:4326';\n\n    const featureOl = featureToOl(feature, projection.getCode());\n\n    this.olDrawingLayer.dataSource.ol.clear();\n    this.olDrawingLayer.dataSource.ol.addFeature(featureOl);\n    this.map.layerController.add(this.olDrawingLayer);\n\n    this.deactivateDrawControl();\n    this.createModifyInteraction(featureOl, feature, workspace);\n  }\n\n  /**\n   * Delete drawings layer and source from the map AND feature from the entity store.\n   * Layer refresh will automatically add the new feature into the store.\n   */\n  deleteDrawings() {\n    this.map.layerController.remove(this.olDrawingLayer);\n    this.olDrawingLayerSource.clear();\n    this.map.ol.removeInteraction(this.modify);\n  }\n\n  /**\n   * Create a modify interaction to allow a geometry change one feature at the time (drag and drop)\n   */\n  createModifyInteraction(\n    olFeature: OlFeature<OlGeometry>,\n    feature,\n    workspace: EditionWorkspace\n  ) {\n    this.map.ol.removeInteraction(this.modify);\n    const olCollection = new Collection([olFeature], { unique: true });\n    this.modify = new OlModify({\n      features: olCollection\n    });\n\n    this.map.ol.addInteraction(this.modify);\n    olCollection.forEach((feature) => {\n      feature.setStyle(this.modifyStyle);\n    });\n\n    this.modify.on('modifyend', (event) => {\n      const olGeometry = event.features.getArray()[0]?.getGeometry();\n      if (olGeometry) {\n        this.addFeatureToStore(feature, workspace, olGeometry);\n      }\n    });\n  }\n}\n","import {\n  EntityRecord,\n  EntityStoreFilterCustomFuncStrategy,\n  EntityStoreStrategyFuncOptions,\n  EntityTableButton,\n  EntityTableColumn,\n  EntityTableColumnRenderer,\n  EntityTableTemplate\n} from '@igo2/common/entity';\nimport { Workspace } from '@igo2/common/workspace';\nimport { StorageScope } from '@igo2/core/storage';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport olFeature from 'ol/Feature';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\n\nimport { Observable } from 'rxjs';\nimport { map, skipWhile, take } from 'rxjs/operators';\n\nimport {\n  RelationOptions,\n  SourceFieldsOptionsParams\n} from '../../datasource/shared/datasources/datasource.interface';\nimport { Feature } from '../../feature/shared/feature.interfaces';\nimport { LayerService, VectorLayer } from '../../layer/shared';\nimport { IgoMap } from '../../map/shared/map';\nimport { generateIdFromSourceOptions } from '../../utils/id-generator';\nimport { FeatureWorkspace } from './feature-workspace';\nimport { WfsWorkspace } from './wfs-workspace';\n\nexport function getRowsInMapExtent(layerId, storageService): boolean {\n  return (\n    (storageService.get(`workspace.rowsInMapExtent.${layerId}`) as boolean) ||\n    true\n  );\n}\n\nexport function setRowsInMapExtent(value, layerId, storageService) {\n  storageService.set(\n    `workspace.rowsInMapExtent.${layerId}`,\n    value,\n    StorageScope.SESSION\n  );\n}\n\nexport function getSelectedOnly(layerId, storageService): boolean {\n  return (\n    (storageService.get(`workspace.selectedOnly.${layerId}`) as boolean) ||\n    false\n  );\n}\n\nexport function setSelectedOnly(value, layerId, storageService) {\n  storageService.set(\n    `workspace.selectedOnly.${layerId}`,\n    value,\n    StorageScope.SESSION\n  );\n}\n\nexport function mapExtentStrategyActiveToolTip(\n  ws: Workspace\n): Observable<string> {\n  return ws.entityStore\n    .getStrategyOfType(EntityStoreFilterCustomFuncStrategy)\n    .active$.pipe(\n      map((active: boolean) =>\n        active\n          ? 'igo.geo.workspace.inMapExtent.active.tooltip'\n          : 'igo.geo.workspace.inMapExtent.inactive.tooltip'\n      )\n    );\n}\n\nexport function noElementSelected(ws: Workspace): Observable<boolean> {\n  return ws.entityStore.stateView\n    .manyBy$((record: EntityRecord<Feature>) => {\n      return record.state.selected === true;\n    })\n    .pipe(map((entities: EntityRecord<Feature>[]) => entities.length >= 1));\n}\n\nexport function addOrRemoveLayer(\n  action: 'add' | 'remove',\n  map: IgoMap,\n  url: string,\n  type: string,\n  layerName: string,\n  layerService: LayerService\n) {\n  const so = ObjectUtils.removeUndefined({\n    sourceOptions: {\n      type: type,\n      url,\n      optionsFromCapabilities: true,\n      optionsFromApi: true,\n      params: {\n        LAYERS: type === 'wms' ? layerName : undefined,\n        LAYER: type === 'wms' ? undefined : layerName\n      }\n    }\n  });\n  if (action === 'add') {\n    layerService.createAsyncLayer(so).subscribe((layer) => {\n      if (!layer) {\n        return;\n      }\n      map.layersAddedByClick$.next([layer]);\n      map.layerController.add(layer);\n    });\n  } else if (action === 'remove') {\n    const addedLayerId = generateIdFromSourceOptions(so.sourceOptions);\n    map.layerController.remove(\n      map.layerController.all.find((l) => l.id === addedLayerId)\n    );\n  }\n}\n\nexport function getGeoServiceAction(\n  workspace: FeatureWorkspace | WfsWorkspace,\n  layerService: LayerService\n) {\n  const geoServiceAction = [\n    {\n      name: 'geoServiceAction',\n      title: undefined,\n      tooltip: '',\n      renderer: EntityTableColumnRenderer.ButtonGroup,\n      valueAccessor: (entity: Feature, record: EntityRecord<Feature>) => {\n        const geoServiceProperties = record.state.geoService;\n        if (\n          geoServiceProperties &&\n          geoServiceProperties.haveGeoServiceProperties &&\n          geoServiceProperties.url &&\n          geoServiceProperties.layerName\n        ) {\n          if (geoServiceProperties.added) {\n            return [\n              {\n                icon: 'delete',\n                color: 'warn',\n                click: (row, record) => {\n                  addOrRemoveLayer(\n                    'remove',\n                    workspace.map,\n                    record.state.geoService.url,\n                    record.state.geoService.type,\n                    record.state.geoService.layerName,\n                    layerService\n                  );\n                  geoServiceProperties.added = false;\n                }\n              }\n            ] as EntityTableButton[];\n          } else {\n            return [\n              {\n                icon: 'add',\n                color: 'primary',\n                click: (row, record) => {\n                  addOrRemoveLayer(\n                    'add',\n                    workspace.map,\n                    record.state.geoService.url,\n                    record.state.geoService.type,\n                    record.state.geoService.layerName,\n                    layerService\n                  );\n                  geoServiceProperties.added = true;\n                }\n              }\n            ] as EntityTableButton[];\n          }\n        } else {\n          return [];\n        }\n      }\n    }\n  ];\n  return geoServiceAction;\n}\n\nexport function createTableTemplate(\n  workspace: FeatureWorkspace | WfsWorkspace,\n  layer: VectorLayer,\n  layerService: LayerService,\n  ws$\n) {\n  const geoServiceAction = getGeoServiceAction(workspace, layerService);\n  const fields = layer.dataSource.options.sourceFields || [];\n\n  const relations = layer.dataSource.options.relations || [];\n\n  if (fields.length === 0) {\n    workspace.entityStore.entities$\n      .pipe(\n        skipWhile((val) => val.length === 0),\n        take(1)\n      )\n      .subscribe((entities) => {\n        const ol = (entities[0] as Feature).ol as olFeature<OlGeometry>;\n        const columnsFromFeatures = ol\n          .getKeys()\n          .filter(\n            (col) =>\n              !col.startsWith('_') &&\n              col !== 'geometry' &&\n              col !== ol.getGeometryName() &&\n              !col.match(/boundedby/gi)\n          )\n          .map((key) => {\n            return {\n              name: `properties.${key}`,\n              title: key,\n              renderer: EntityTableColumnRenderer.UnsanitizedHTML\n            };\n          });\n        columnsFromFeatures.unshift(...geoServiceAction);\n        workspace.meta.tableTemplate = {\n          selection: true,\n          sort: true,\n          columns: columnsFromFeatures,\n          tableHeight: '100%'\n        } as EntityTableTemplate;\n      });\n    return;\n  }\n  const columns = fields.map((field: SourceFieldsOptionsParams) => {\n    return {\n      name: `properties.${field.name}`,\n      title: field.alias ? field.alias : field.name,\n      renderer: EntityTableColumnRenderer.UnsanitizedHTML,\n      tooltip: field.tooltip,\n      cellClassFunc: () => {\n        const cellClass = {};\n        if (field.type) {\n          cellClass[`class_${field.type}`] = true;\n          return cellClass;\n        }\n      }\n    } as EntityTableColumn;\n  });\n\n  const relationsColumn = relations.map((relation: RelationOptions) => {\n    return {\n      name: `properties.${relation.name}`,\n      title: relation.alias ? relation.alias : relation.name,\n      renderer: EntityTableColumnRenderer.Icon,\n      icon: relation.icon,\n      parent: relation.parent,\n      type: 'relation',\n      tooltip: relation.tooltip,\n      onClick: () => {\n        ws$.next(relation.title);\n      },\n      cellClassFunc: () => {\n        return { class_icon: true };\n      }\n    };\n  });\n\n  columns.push(...relationsColumn);\n  columns.unshift(...geoServiceAction);\n  workspace.meta.tableTemplate = {\n    selection: true,\n    sort: true,\n    columns,\n    tableHeight: '100%'\n  };\n}\n\nexport function createFilterInMapExtentOrResolutionStrategy(): EntityStoreFilterCustomFuncStrategy {\n  const filterClauseFunc = (record: EntityRecord<object>) => {\n    return (\n      record.state.inMapExtent === true && record.state.inMapResolution === true\n    );\n  };\n  return new EntityStoreFilterCustomFuncStrategy({\n    filterClauseFunc\n  } as EntityStoreStrategyFuncOptions);\n}\n","/* eslint-disable no-prototype-builtins */\nimport {\n  HttpClient,\n  HttpErrorResponse,\n  HttpHeaders\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { AuthInterceptor } from '@igo2/auth';\nimport { ActionStore } from '@igo2/common/action';\nimport {\n  EntityStoreFilterSelectionStrategy,\n  EntityTableButton,\n  EntityTableColumnRenderer,\n  EntityTableTemplate\n} from '@igo2/common/entity';\nimport { ConfigService } from '@igo2/core/config';\nimport { MessageService } from '@igo2/core/message';\nimport { StorageService } from '@igo2/core/storage';\n\nimport olFeature from 'ol/Feature';\nimport { FeatureLoader } from 'ol/featureloader';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport WKT from 'ol/format/WKT';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport olSourceImageWMS from 'ol/source/ImageWMS';\n\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\nimport { catchError, map, skipWhile, take } from 'rxjs/operators';\n\nimport {\n  RelationOptions,\n  SourceFieldsOptionsParams,\n  WMSDataSource\n} from '../../datasource/shared/datasources';\nimport { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';\nimport { WFSDataSourceOptions } from '../../datasource/shared/datasources/wfs-datasource.interface';\nimport {\n  Feature,\n  FeatureMotion,\n  FeatureStore,\n  FeatureStoreInMapExtentStrategy,\n  FeatureStoreInMapResolutionStrategy,\n  FeatureStoreLoadingLayerStrategy,\n  FeatureStoreSelectionStrategy\n} from '../../feature/shared';\nimport { OgcFilterableDataSourceOptions } from '../../filter/shared/ogc-filter.interface';\nimport { isLayerItem } from '../../layer';\nimport {\n  GeoWorkspaceOptions,\n  ImageLayer,\n  Layer,\n  LayerService,\n  LayersLinkProperties,\n  LinkedProperties,\n  VectorLayer\n} from '../../layer/shared';\nimport { IgoMap, MapBase } from '../../map/shared';\nimport { QueryableDataSourceOptions } from '../../query/shared/query.interfaces';\nimport { StyleService } from '../../style/style-service/style.service';\nimport { EditionWorkspace } from './edition-workspace';\nimport { createFilterInMapExtentOrResolutionStrategy } from './workspace.utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class EditionWorkspaceService {\n  public ws$ = new BehaviorSubject<string>(undefined);\n  public adding$ = new BehaviorSubject<boolean>(false);\n  public relationLayers$ = new BehaviorSubject<ImageLayer[] | VectorLayer[]>(\n    undefined\n  );\n  public rowsInMapExtentCheckCondition$ = new BehaviorSubject<boolean>(true);\n  public loading = false;\n  public wktFormat = new WKT();\n  public geoJsonFormat = new GeoJSON();\n\n  get zoomAuto(): boolean {\n    return this.storageService.get('zoomAuto') as boolean;\n  }\n\n  constructor(\n    private layerService: LayerService,\n    private storageService: StorageService,\n    private configService: ConfigService,\n    private messageService: MessageService,\n    private http: HttpClient,\n    private dialog: MatDialog,\n    private styleService: StyleService,\n    public authInterceptor?: AuthInterceptor\n  ) {}\n\n  createWorkspace(layer: ImageLayer, map: IgoMap): EditionWorkspace {\n    if (\n      layer.options.workspace?.enabled !== true ||\n      layer.dataSource.options.edition.enabled !== true\n    ) {\n      return;\n    }\n    let wksConfig;\n    if (layer.options.workspace) {\n      wksConfig = layer.options.workspace;\n    } else {\n      wksConfig = {};\n    }\n    wksConfig.srcId = layer.id;\n    wksConfig.workspaceId = layer.id;\n    wksConfig.enabled = true;\n    wksConfig.pageSize = layer.options.workspace?.pageSize;\n    wksConfig.pageSizeOptions = layer.options.workspace?.pageSizeOptions;\n\n    const dataSource: WMSDataSource = layer.dataSource as WMSDataSource;\n    const wmsLinkId = layer.id + '.WmsWorkspaceTableSrc';\n    const wfsLinkId = layer.id + '.WfsWorkspaceTableDest';\n    if (!layer.options.linkedLayers) {\n      layer.options.linkedLayers = { linkId: wmsLinkId, links: [] };\n    }\n    const linkProperties = {\n      syncedDelete: true,\n      linkedIds: [wfsLinkId],\n      properties: [LinkedProperties.ZINDEX, LinkedProperties.VISIBLE]\n    } as LayersLinkProperties;\n\n    if (!layer.options.workspace?.minResolution) {\n      linkProperties.properties.push(LinkedProperties.MINRESOLUTION);\n    }\n    let hasOgcFilters = false;\n    if (\n      (dataSource.options as OgcFilterableDataSourceOptions).ogcFilters?.enabled\n    ) {\n      linkProperties.properties.push(LinkedProperties.OGCFILTERS);\n      hasOgcFilters = true;\n    }\n    if (!layer.options.workspace?.maxResolution) {\n      linkProperties.properties.push(LinkedProperties.MAXRESOLUTION);\n    }\n\n    let clonedLinks: LayersLinkProperties[] = [];\n    if (layer.options.linkedLayers.links) {\n      clonedLinks = JSON.parse(\n        JSON.stringify(layer.options.linkedLayers.links)\n      );\n    }\n    clonedLinks.push(linkProperties);\n\n    // TODO: Démystifier ce bout de code\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    (layer.options.linkedLayers.linkId = layer.options.linkedLayers.linkId\n      ? layer.options.linkedLayers.linkId\n      : wmsLinkId),\n      (layer.options.linkedLayers.links = clonedLinks);\n    interface WFSoptions\n      extends WFSDataSourceOptions,\n        OgcFilterableDataSourceOptions {}\n\n    layer.createLink();\n\n    let wks;\n    this.layerService\n      .createAsyncLayer({\n        title: layer.title,\n        parentId: layer.options.parentId,\n        visible: layer.visible,\n        id: wfsLinkId,\n        linkedLayers: {\n          linkId: wfsLinkId\n        },\n        workspace: {\n          srcId: layer.id,\n          workspaceId: undefined,\n          enabled: false,\n          queryOptions: {\n            mapQueryOnOpenTab:\n              layer.options.workspace?.queryOptions?.mapQueryOnOpenTab,\n            tabQuery: false\n          },\n          pageSize: layer.options.workspace?.pageSize,\n          pageSizeOptions: layer.options.workspace?.pageSizeOptions\n        },\n        showInLayerList: false,\n        isIgoInternalLayer: true,\n        opacity: 0,\n        minResolution:\n          layer.options.workspace?.minResolution || layer.minResolution || 0,\n        maxResolution:\n          layer.options.workspace?.maxResolution ||\n          layer.maxResolution ||\n          Infinity,\n        style: this.styleService.createStyle({\n          fill: {\n            color: 'rgba(255, 255, 255, 0.01)'\n          },\n          stroke: {\n            color: 'rgba(255, 255, 255, 0.01)'\n          },\n          circle: {\n            fill: {\n              color: 'rgba(255, 255, 255, 0.01)'\n            },\n            stroke: {\n              color: 'rgba(255, 255, 255, 0.01)'\n            },\n            radius: 5\n          }\n        }),\n        sourceOptions: {\n          download: dataSource.options.download,\n          type: 'wfs',\n          url: dataSource.options.urlWfs || dataSource.options.url,\n          queryable: true,\n          relations: dataSource.options.relations,\n          queryTitle: (dataSource.options as QueryableDataSourceOptions)\n            .queryTitle,\n          params: dataSource.options.paramsWFS,\n          ogcFilters: Object.assign({}, dataSource.ogcFilters, {\n            enabled: hasOgcFilters\n          }),\n          sourceFields: dataSource.options.sourceFields || undefined,\n          edition: dataSource.options.edition\n        } as WFSoptions\n      })\n      .subscribe((workspaceLayer: VectorLayer) => {\n        map.layerController.add(workspaceLayer);\n        layer.ol.setProperties(\n          {\n            linkedLayers: {\n              linkId: layer.options.linkedLayers.linkId,\n              links: clonedLinks\n            }\n          },\n          false\n        );\n        workspaceLayer.dataSource.ol.refresh();\n\n        wks = new EditionWorkspace(\n          this.dialog,\n          this.configService,\n          this.adding$,\n          (relation: RelationOptions) => this.getDomainValues(relation),\n          {\n            id: layer.id,\n            title: layer.title,\n            layer: workspaceLayer,\n            map,\n            entityStore: this.createFeatureStore(workspaceLayer, map),\n            actionStore: new ActionStore([]),\n            meta: {\n              tableTemplate: undefined\n            }\n          }\n        );\n        this.createTableTemplate(wks, workspaceLayer);\n\n        workspaceLayer.options.workspace.workspaceId = workspaceLayer.id;\n        layer.options.workspace = Object.assign({}, layer.options.workspace, {\n          wksConfig\n        } as GeoWorkspaceOptions);\n\n        delete dataSource.options.download;\n        return wks;\n      });\n    return wks;\n  }\n\n  private createFeatureStore(layer: VectorLayer, map: IgoMap): FeatureStore {\n    const store = new FeatureStore([], { map });\n    store.bindLayer(layer);\n\n    const loadingStrategy = new FeatureStoreLoadingLayerStrategy({});\n    const inMapExtentStrategy = new FeatureStoreInMapExtentStrategy({});\n    const inMapResolutionStrategy = new FeatureStoreInMapResolutionStrategy({});\n    const selectedRecordStrategy = new EntityStoreFilterSelectionStrategy({});\n    const selectionStrategy = new FeatureStoreSelectionStrategy({\n      layer: new VectorLayer({\n        zIndex: 300,\n        source: new FeatureDataSource(),\n        style: undefined,\n        showInLayerList: false,\n        exportable: false,\n        browsable: false\n      }),\n      map,\n      hitTolerance: 15,\n      motion: this.zoomAuto ? FeatureMotion.Default : FeatureMotion.None,\n      many: true,\n      dragBox: true\n    });\n    store.addStrategy(loadingStrategy, true);\n    store.addStrategy(inMapExtentStrategy, true);\n    store.addStrategy(inMapResolutionStrategy, true);\n    store.addStrategy(selectionStrategy, true);\n    store.addStrategy(selectedRecordStrategy, false);\n    store.addStrategy(createFilterInMapExtentOrResolutionStrategy(), true);\n    return store;\n  }\n\n  private createTableTemplate(\n    workspace: EditionWorkspace,\n    layer: VectorLayer\n  ): EntityTableTemplate {\n    const fields = layer.dataSource.options.sourceFields || [];\n\n    const relations = layer.dataSource.options.relations || [];\n\n    const rendererType = EntityTableColumnRenderer.UnsanitizedHTML;\n    let buttons = [];\n    let columns = [];\n    let relationsColumn = [];\n\n    buttons = [\n      {\n        name: 'edition',\n        title: undefined,\n        renderer: EntityTableColumnRenderer.ButtonGroup,\n        primary: false,\n        valueAccessor: () => {\n          return [\n            {\n              editMode: false,\n              icon: 'edit',\n              color: 'primary',\n              disabled:\n                layer.dataSource.options.edition.modifyButton === false\n                  ? true\n                  : false,\n              click: (feature) => {\n                workspace.editFeature(feature, workspace);\n              }\n            },\n            {\n              editMode: false,\n              icon: 'delete',\n              color: 'warn',\n              disabled:\n                layer.dataSource.options.edition.deleteButton === false\n                  ? true\n                  : false,\n              click: (feature) => {\n                workspace.deleteFeature(feature, workspace);\n              }\n            },\n            {\n              editMode: true,\n              icon: 'check',\n              color: 'primary',\n              disabled: this.loading,\n              click: (feature) => {\n                this.saveFeature(feature, workspace);\n              }\n            },\n            {\n              editMode: true,\n              icon: 'close',\n              color: 'primary',\n              disabled: this.loading,\n              click: (feature) => {\n                this.cancelEdit(workspace, feature);\n              }\n            }\n          ] as EntityTableButton[];\n        }\n      }\n    ];\n\n    if (fields.length === 0) {\n      workspace.entityStore.entities$\n        .pipe(\n          skipWhile((val) => val.length === 0),\n          take(1)\n        )\n        .subscribe((entities) => {\n          const ol = (entities[0] as Feature).ol as olFeature<OlGeometry>;\n          const columnsFromFeatures = ol\n            .getKeys()\n            .filter(\n              (col) =>\n                !col.startsWith('_') &&\n                col !== 'geometry' &&\n                col !== ol.getGeometryName() &&\n                !col.match(/boundedby/gi)\n            )\n            .map((key) => {\n              return {\n                name: `properties.${key}`,\n                title: key,\n                renderer: rendererType\n              };\n            });\n          workspace.meta.tableTemplate = {\n            selection: false,\n            sort: true,\n            columns: columnsFromFeatures\n          };\n        });\n      return;\n    }\n\n    columns = fields.map((field: SourceFieldsOptionsParams) => {\n      const column = {\n        name: `properties.${field.name}`,\n        title: field.alias ? field.alias : field.name,\n        renderer: rendererType,\n        valueAccessor: undefined,\n        cellClassFunc: () => {\n          const cellClass = {};\n          if (field.type) {\n            cellClass[`class_${field.type}`] = true;\n            return cellClass;\n          }\n        },\n        primary: field.primary === true ? true : false,\n        visible: field.visible,\n        validation: field.validation,\n        linkColumnForce: field.linkColumnForce,\n        type: field.type,\n        domainValues: undefined,\n        relation: undefined,\n        multiple: field.multiple,\n        step: field.step,\n        tooltip: field.tooltip\n      };\n\n      if (field.type === 'list' || field.type === 'autocomplete') {\n        this.getDomainValues(field.relation).subscribe((result) => {\n          column.domainValues = result;\n          column.relation = field.relation;\n        });\n      }\n      return column;\n    });\n\n    relationsColumn = relations.map((relation: RelationOptions) => {\n      return {\n        name: `properties.${relation.name}`,\n        title: relation.alias ? relation.alias : relation.name,\n        renderer: EntityTableColumnRenderer.Icon,\n        icon: relation.icon,\n        parent: relation.parent,\n        type: 'relation',\n        tooltip: relation.tooltip,\n        onClick: () => {\n          if (this.adding$.getValue() === false) {\n            this.ws$.next(relation.title);\n          }\n        },\n        cellClassFunc: () => {\n          return { class_icon: true };\n        }\n      };\n    });\n\n    columns.push(...relationsColumn);\n    columns.push(...buttons);\n\n    workspace.meta.tableTemplate = {\n      selection: false,\n      sort: true,\n      columns\n    };\n  }\n\n  public saveFeature(feature, workspace: EditionWorkspace) {\n    if (!this.validateFeature(feature, workspace)) {\n      return false;\n    }\n\n    this.sanitizeParameter(feature, workspace);\n\n    const baseUrl = workspace.layer.dataSource.options.edition.baseUrl;\n    let url = this.configService.getConfig('edition.url');\n\n    if (!url) {\n      url = baseUrl;\n    } else {\n      url += baseUrl ? baseUrl : '';\n    }\n\n    if (feature.newFeature) {\n      url += workspace.layer.dataSource.options.edition.addUrl;\n\n      const addHeaders = workspace.layer.dataSource.options.edition.addHeaders;\n      const headers = new HttpHeaders(addHeaders);\n\n      this.addFeature(feature, workspace, url, headers);\n    } else {\n      if (\n        workspace.layer.dataSource.options.edition.modifyProtocol !== 'post'\n      ) {\n        url +=\n          '?' +\n          workspace.layer.dataSource.options.edition.modifyUrl +\n          feature.idkey;\n      } else {\n        url += workspace.layer.dataSource.options.edition.modifyUrl;\n      }\n\n      const protocole =\n        workspace.layer.dataSource.options.edition.modifyProtocol;\n      const modifyHeaders =\n        workspace.layer.dataSource.options.edition.modifyHeaders;\n      const headers = new HttpHeaders(modifyHeaders);\n\n      this.modifyFeature(feature, workspace, url, headers, protocole);\n    }\n  }\n\n  public addFeature(\n    feature,\n    workspace: EditionWorkspace,\n    url: string,\n    headers: Record<string, any>\n  ) {\n    if (workspace.layer.dataSource.options.edition.hasGeometry) {\n      const projDest =\n        workspace.layer.options.sourceOptions.edition.geomDatabaseProj;\n      feature.properties[\n        workspace.layer.dataSource.options.params.fieldNameGeometry\n      ] =\n        'SRID=' +\n        projDest.replace('EPSG:', '') +\n        ';' +\n        this.wktFormat.writeGeometry(\n          this.geoJsonFormat\n            .readFeature(feature.geometry)\n            .getGeometry()\n            .transform('EPSG:4326', projDest),\n          { dataProjection: projDest }\n        );\n    }\n\n    for (const property in feature.properties) {\n      for (const sf of workspace.layer.dataSource.options.sourceFields) {\n        if (\n          (sf.name === property && sf.validation?.readonly) ||\n          (sf.name === property && sf.validation?.send === false)\n        ) {\n          delete feature.properties[property];\n        }\n      }\n    }\n\n    this.loading = true;\n    this.http\n      .post(`${url}`, feature.properties, { headers: headers })\n      .subscribe(\n        () => {\n          this.loading = false;\n          workspace.entityStore.stateView.clear();\n          workspace.deleteDrawings();\n          workspace.entityStore.delete(feature);\n\n          this.messageService.success('igo.geo.workspace.addSuccess');\n\n          this.refreshMap(workspace.layer as VectorLayer, workspace.layer.map);\n          this.adding$.next(false);\n          this.rowsInMapExtentCheckCondition$.next(true);\n        },\n        (error) => {\n          this.loading = false;\n          error.error.caught = true;\n          const messages = workspace.layer.dataSource.options.edition.messages;\n          if (messages) {\n            let text;\n            messages.forEach((message) => {\n              const key = Object.keys(message)[0];\n              if (error.error.message.includes(key)) {\n                text = message[key];\n                this.messageService.error(text);\n              }\n            });\n            if (!text) {\n              this.messageService.error('igo.geo.workspace.addError');\n            }\n          } else {\n            this.messageService.error('igo.geo.workspace.addError');\n          }\n        }\n      );\n  }\n\n  public deleteFeature(workspace: EditionWorkspace, url: string) {\n    this.loading = true;\n    this.http.delete(`${url}`, {}).subscribe(\n      () => {\n        this.loading = false;\n        this.messageService.success('igo.geo.workspace.deleteSuccess');\n\n        this.refreshMap(workspace.layer as VectorLayer, workspace.layer.map);\n        const relations =\n          workspace.layer.options.sourceOptions?.relations ?? [];\n        for (const relation of relations) {\n          const layer = workspace.map.layerController.all.find(\n            (layer) => isLayerItem(layer) && layer.title === relation.title\n          ) as Layer;\n          layer?.dataSource.ol.refresh();\n        }\n      },\n      (error) => {\n        this.loading = false;\n        error.error.caught = true;\n        const messages = workspace.layer.dataSource.options.edition.messages;\n        if (messages) {\n          let text;\n          messages.forEach((message) => {\n            const key = Object.keys(message)[0];\n            if (error.error.message.includes(key)) {\n              text = message[key];\n              this.messageService.error(text);\n            }\n          });\n          if (!text) {\n            this.messageService.error('igo.geo.workspace.addError');\n          }\n        } else {\n          this.messageService.error('igo.geo.workspace.addError');\n        }\n      }\n    );\n  }\n\n  public modifyFeature(\n    feature,\n    workspace: EditionWorkspace,\n    url: string,\n    headers: Record<string, any>,\n    protocole = 'patch'\n  ) {\n    if (workspace.layer.dataSource.options.edition.hasGeometry) {\n      const projDest =\n        workspace.layer.options.sourceOptions.edition.geomDatabaseProj;\n      // Remove 3e dimension\n      feature.geometry.coordinates = removeZ(feature.geometry.coordinates);\n      feature.properties[\n        workspace.layer.dataSource.options.params.fieldNameGeometry\n      ] =\n        'SRID=' +\n        projDest.replace('EPSG:', '') +\n        ';' +\n        this.wktFormat.writeGeometry(\n          this.geoJsonFormat\n            .readFeature(feature.geometry)\n            .getGeometry()\n            .transform('EPSG:4326', projDest),\n          { dataProjection: projDest }\n        );\n    }\n\n    for (const property in feature.properties) {\n      for (const sf of workspace.layer.dataSource.options.sourceFields) {\n        if (\n          (sf.name === property && sf.validation?.readonly) ||\n          (sf.name === property && sf.validation?.send === false) ||\n          property === 'boundedBy'\n        ) {\n          delete feature.properties[property];\n        }\n      }\n    }\n\n    this.loading = true;\n    this.http[protocole](`${url}`, feature.properties, {\n      headers: headers\n    }).subscribe(\n      () => {\n        this.loading = false;\n        this.cancelEdit(workspace, feature, true);\n\n        this.messageService.success('igo.geo.workspace.modifySuccess');\n\n        this.refreshMap(workspace.layer as VectorLayer, workspace.layer.map);\n\n        const relationLayers = [];\n        workspace.layer.options.sourceOptions.relations?.forEach((relation) => {\n          workspace.map.layerController.all.forEach((layer) => {\n            if (isLayerItem(layer) && layer.title === relation.title) {\n              relationLayers.push(layer);\n              layer.dataSource.ol.refresh();\n            }\n          });\n        });\n        this.relationLayers$.next(relationLayers);\n      },\n      (error) => {\n        this.loading = false;\n        error.error.caught = true;\n        const messages = workspace.layer.dataSource.options.edition.messages;\n        if (messages) {\n          let text;\n          messages.forEach((message) => {\n            const key = Object.keys(message)[0];\n            if (error.error.message.includes(key)) {\n              text = message[key];\n              this.messageService.error(text);\n            }\n          });\n          if (!text) {\n            this.messageService.error('igo.geo.workspace.addError');\n          }\n        } else {\n          this.messageService.error('igo.geo.workspace.addError');\n        }\n      }\n    );\n  }\n\n  cancelEdit(workspace: EditionWorkspace, feature, fromSave = false) {\n    feature.edition = false;\n    this.adding$.next(false);\n    workspace.deleteDrawings();\n    workspace.entityStore.stateView.clear();\n\n    if (feature.newFeature) {\n      workspace.entityStore.delete(feature);\n      workspace.deactivateDrawControl();\n\n      this.rowsInMapExtentCheckCondition$.next(true);\n    } else {\n      if (!fromSave) {\n        feature.properties = feature.original_properties;\n        feature.geometry = feature.original_geometry;\n      }\n      delete feature.original_properties;\n      delete feature.original_geometry;\n    }\n  }\n\n  getDomainValues(relation: RelationOptions): Observable<any> {\n    let url = relation.url;\n    if (!url) {\n      url = this.configService.getConfig('edition.url')\n        ? this.configService.getConfig('edition.url') + relation.table\n        : relation.table;\n    }\n\n    return this.http.get<any>(url).pipe(\n      map((result) => {\n        return result;\n      }),\n      catchError((err: HttpErrorResponse) => {\n        err.error.caught = true;\n        return throwError(err);\n      })\n    );\n  }\n\n  /*\n   * Refresh both wms and wfs layer\n   * A new wfs loader is used to ensure cache is not retrieving old data\n   * WMS params are updated to ensure layer is correctly refreshed\n   */\n  refreshMap(layer: VectorLayer, map: MapBase) {\n    const wfsOlLayer = layer.dataSource.ol;\n    const loader: FeatureLoader = (\n      extent,\n      resolution,\n      proj,\n      success,\n      failure\n    ) => {\n      layer.customWFSLoader(\n        layer.ol.getSource(),\n        layer.options.sourceOptions as WFSDataSourceOptions,\n        this.authInterceptor,\n        extent,\n        resolution,\n        proj,\n        success,\n        failure,\n        true\n      );\n    };\n    wfsOlLayer.setLoader(loader);\n    wfsOlLayer.refresh();\n\n    for (const lay of map.layerController.all) {\n      if (\n        isLayerItem(lay) &&\n        lay.id !== layer.id &&\n        lay.options.linkedLayers?.linkId.includes(\n          layer.id.substr(0, layer.id.indexOf('.') - 1)\n        ) &&\n        lay.options.linkedLayers?.linkId.includes('WmsWorkspaceTableSrc')\n      ) {\n        const wmsOlLayer = lay.dataSource.ol as olSourceImageWMS;\n        const params = wmsOlLayer.getParams();\n        params._t = new Date().getTime();\n        wmsOlLayer.updateParams(params);\n      }\n    }\n  }\n\n  validateFeature(feature, workspace: EditionWorkspace) {\n    let key;\n    let valid = true;\n    workspace.meta.tableTemplate.columns.forEach((column) => {\n      if (column.hasOwnProperty('validation') && column.validation) {\n        key = getColumnKeyWithoutPropertiesTag(column.name);\n        Object.keys(column.validation).forEach((type) => {\n          switch (type) {\n            case 'mandatory': {\n              if (\n                column.validation[type] &&\n                (!feature.properties.hasOwnProperty(key) ||\n                  !feature.properties[key])\n              ) {\n                valid = false;\n                this.messageService.error(\n                  'igo.geo.formValidation.mandatory',\n                  undefined,\n                  undefined,\n                  { column: column.title }\n                );\n              }\n              break;\n            }\n            case 'minValue': {\n              if (\n                feature.properties.hasOwnProperty(key) &&\n                feature.properties[key] &&\n                feature.properties[key] < column.validation[type]\n              ) {\n                valid = false;\n                this.messageService.error(\n                  'igo.geo.formValidation.minValue',\n                  undefined,\n                  undefined,\n                  {\n                    column: column.title,\n                    value: column.validation[type]\n                  }\n                );\n              }\n              break;\n            }\n            case 'maxValue': {\n              if (\n                feature.properties.hasOwnProperty(key) &&\n                feature.properties[key] &&\n                feature.properties[key] > column.validation[type]\n              ) {\n                valid = false;\n                this.messageService.error(\n                  'igo.geo.formValidation.maxValue',\n                  undefined,\n                  undefined,\n                  {\n                    column: column.title,\n                    value: column.validation[type]\n                  }\n                );\n              }\n              break;\n            }\n            case 'minLength': {\n              if (\n                feature.properties.hasOwnProperty(key) &&\n                feature.properties[key] &&\n                feature.properties[key].length < column.validation[type]\n              ) {\n                valid = false;\n                this.messageService.error(\n                  'igo.geo.formValidation.minLength',\n                  undefined,\n                  undefined,\n                  {\n                    column: column.title,\n                    value: column.validation[type]\n                  }\n                );\n              }\n              break;\n            }\n            case 'maxLength': {\n              if (\n                feature.properties.hasOwnProperty(key) &&\n                feature.properties[key] &&\n                feature.properties[key].length > column.validation[type]\n              ) {\n                valid = false;\n                this.messageService.error(\n                  'igo.geo.formValidation.maxLength',\n                  undefined,\n                  undefined,\n                  {\n                    column: column.title,\n                    value: column.validation[type]\n                  }\n                );\n              }\n              break;\n            }\n          }\n        });\n      }\n    });\n    return valid;\n  }\n\n  sanitizeParameter(feature, workspace: EditionWorkspace) {\n    workspace.meta.tableTemplate.columns.forEach((column) => {\n      if (\n        column.type === 'list' &&\n        feature.properties[getColumnKeyWithoutPropertiesTag(column.name)]\n      ) {\n        feature.properties[getColumnKeyWithoutPropertiesTag(column.name)] =\n          feature.properties[\n            getColumnKeyWithoutPropertiesTag(column.name)\n          ].toString();\n      }\n    });\n  }\n}\n\nfunction getColumnKeyWithoutPropertiesTag(column: string) {\n  if (column.includes('properties.')) {\n    return column.split('.')[1];\n  }\n  return column;\n}\n\nfunction removeZ(coords: any) {\n  if (coords.length === 0) return coords;\n  if (typeof coords[0] === 'number') return coords.slice(0, 2);\n  return coords.map(removeZ);\n}\n","import olFeature from 'ol/Feature';\nimport { asArray as ColorAsArray } from 'ol/color';\nimport type { default as OlGeometry } from 'ol/geom/Geometry';\nimport * as olStyle from 'ol/style';\n\nimport { Feature } from '../../../feature/shared/feature.interfaces';\nimport { createOverlayMarkerStyle } from '../overlay/overlay-marker-style.utils';\nimport { createOverlayDefaultStyle } from '../overlay/overlay-style.utils';\nimport { FeatureCommonVectorStyleOptions } from './vector-style.interface';\n\n/**\n * Generate a style for selected features\n * @param feature The feature to generate the style\n * @returns A olStyle\n */\nexport function getCommonVectorSelectedStyle({\n  feature,\n  markerColor = [0, 161, 222],\n  markerOpacity = 1,\n  markerOutlineColor = [0, 255, 255],\n  fillColor,\n  fillOpacity = 0.15,\n  strokeColor = [0, 255, 255],\n  strokeOpacity = 0.5,\n  strokeWidth = 4\n}: FeatureCommonVectorStyleOptions): olStyle.Style {\n  return getCommonVectorStyle({\n    feature,\n    markerColor,\n    markerOpacity,\n    markerOutlineColor,\n    fillColor,\n    fillOpacity,\n    strokeColor,\n    strokeOpacity,\n    strokeWidth\n  });\n}\n\n/**\n * Generate a basic style for features\n * @param feature The feature to generate the style\n * @returns A olStyle\n */\nexport function getCommonVectorStyle({\n  feature,\n  markerColor = [0, 161, 222],\n  markerOpacity = 0.5,\n  markerOutlineColor,\n  fillColor = [0, 161, 222],\n  fillOpacity = 0.15,\n  strokeColor = [0, 161, 222],\n  strokeOpacity = 0.5,\n  strokeWidth = 2\n}: FeatureCommonVectorStyleOptions): olStyle.Style {\n  const isOlFeature = feature instanceof olFeature;\n  let geometry;\n  let text;\n  if (isOlFeature) {\n    feature = feature as olFeature<OlGeometry>;\n    geometry = feature.getGeometry();\n  } else {\n    feature = feature as Feature;\n    geometry = feature.geometry;\n    text = feature.meta.mapTitle;\n  }\n  const geometryType = isOlFeature ? geometry.getType() : geometry.type;\n\n  if (!geometry || geometryType === 'Point') {\n    const markerColorAsArray = ColorAsArray(markerColor).slice(0);\n    const markerColorRGB = markerColorAsArray.slice(0, 3);\n\n    if (\n      markerColorAsArray.length === 4 &&\n      (typeof markerColor !== 'string' ||\n        /^#[0-9A-F]{8}$/i.test(markerColor as string))\n    ) {\n      markerOpacity = markerColorAsArray[3];\n    }\n\n    return createOverlayMarkerStyle({\n      text,\n      opacity: markerOpacity,\n      markerOutlineColor,\n      markerColor: markerColorRGB\n    });\n  } else {\n    const fillWithOpacity = ColorAsArray(fillColor).slice(0);\n    const strokeWithOpacity = ColorAsArray(strokeColor).slice(0);\n\n    if (\n      !(\n        fillWithOpacity.length === 4 &&\n        (typeof fillColor !== 'string' ||\n          /^#[0-9A-F]{8}$/i.test(fillColor as string))\n      )\n    ) {\n      fillWithOpacity[3] = fillOpacity;\n    }\n\n    if (\n      !(\n        strokeWithOpacity.length === 4 &&\n        (typeof strokeColor !== 'string' ||\n          /^#[0-9A-F]{8}$/i.test(strokeColor as string))\n      )\n    ) {\n      strokeWithOpacity[3] = strokeOpacity;\n    }\n\n    return createOverlayDefaultStyle({\n      text,\n      strokeWidth,\n      strokeColor: strokeWithOpacity,\n      fillColor: fillWithOpacity\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { RegexService } from '@igo2/core/regex';\n\nimport { GeoServiceDefinition } from './propertyTypeDetector.interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PropertyTypeDetectorService {\n  public geoServiceRegexes: GeoServiceDefinition[] = [];\n\n  constructor(private regexService: RegexService) {\n    this.geoServiceRegexes = this.getGeoServiceRegexes();\n  }\n\n  getPropertyType(value) {\n    return typeof value;\n  }\n\n  private isUrl(value): boolean {\n    const regex = /^https?:\\/\\//;\n    return regex.test(value.toString());\n  }\n\n  isGeoService(value): boolean {\n    let isGeoService = false;\n    if (!this.isUrl) {\n      return;\n    }\n    for (const geoServiceRegex of this.geoServiceRegexes) {\n      const domainRegex = new RegExp(geoServiceRegex.url);\n      if (domainRegex.test(value)) {\n        isGeoService = true;\n        break;\n      }\n    }\n    return isGeoService;\n  }\n\n  getGeoService(\n    url: string,\n    availableProperties: string[]\n  ): GeoServiceDefinition {\n    if (!this.isGeoService(url)) {\n      return;\n    }\n    let matchingGeoservice: GeoServiceDefinition;\n    for (const geoServiceRegex of this.geoServiceRegexes) {\n      const domainRegex = new RegExp(geoServiceRegex.url);\n      if (domainRegex.test(url)) {\n        // providing the the first matching regex;\n        const matchingProperties = availableProperties.filter((p) =>\n          geoServiceRegex.propertiesForLayerName.includes(p)\n        );\n        matchingGeoservice = matchingProperties ? geoServiceRegex : undefined;\n        if (matchingGeoservice) {\n          break;\n        }\n      }\n    }\n    return matchingGeoservice;\n  }\n\n  private getGeoServiceRegexes(): GeoServiceDefinition[] {\n    return (this.regexService.get('geoservice') ||\n      []) as GeoServiceDefinition[];\n  }\n}\n","import { Workspace, WorkspaceOptions } from '@igo2/common/workspace';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { VectorLayer } from '../../layer/shared';\nimport { IgoMap } from '../../map/shared/map';\n\nexport interface FeatureWorkspaceOptions extends WorkspaceOptions {\n  layer: VectorLayer;\n  map: IgoMap;\n}\n\nexport class FeatureWorkspace extends Workspace {\n  readonly inResolutionRange$ = new BehaviorSubject<boolean>(true);\n\n  get layer(): VectorLayer {\n    return this.options.layer;\n  }\n\n  get map(): IgoMap {\n    return this.options.map;\n  }\n\n  constructor(protected options: FeatureWorkspaceOptions) {\n    super(options);\n    this.map.viewController.resolution$.subscribe((mapResolution) => {\n      if (\n        mapResolution > this.layer.minResolution &&\n        mapResolution < this.layer.maxResolution\n      ) {\n        this.inResolutionRange$.next(true);\n      } else {\n        this.inResolutionRange$.next(false);\n      }\n    });\n  }\n\n  public getLayerWksOptionTabQuery(): boolean {\n    if (this.layer.options.workspace.queryOptions?.tabQuery !== undefined) {\n      return this.layer.options.workspace.queryOptions.tabQuery;\n    }\n    return true;\n  }\n\n  public getLayerWksOptionMapQuery(): boolean {\n    if (\n      this.layer.options.workspace.queryOptions?.mapQueryOnOpenTab !== undefined\n    ) {\n      return this.layer.options.workspace.queryOptions.mapQueryOnOpenTab;\n    }\n    return true;\n  }\n\n  private getInResolutionRange(): boolean {\n    return this.inResolutionRange$.value;\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ActionStore } from '@igo2/common/action';\nimport { EntityStoreFilterSelectionStrategy } from '@igo2/common/entity';\nimport { ConfigService } from '@igo2/core/config';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { CapabilitiesService } from '../../datasource/shared/capabilities.service';\nimport { FeatureDataSource } from '../../datasource/shared/datasources';\nimport {\n  FeatureMotion,\n  FeatureStore,\n  FeatureStoreInMapExtentStrategy,\n  FeatureStoreInMapResolutionStrategy,\n  FeatureStoreLoadingLayerStrategy,\n  FeatureStoreSearchIndexStrategy,\n  FeatureStoreSelectionStrategy,\n  GeoPropertiesStrategy\n} from '../../feature/shared';\nimport { LayerService, VectorLayer } from '../../layer/shared';\nimport { GeoWorkspaceOptions } from '../../layer/shared/layers/layer.interface';\nimport { IgoMap } from '../../map/shared/map';\nimport {\n  FeatureCommonVectorStyleOptions,\n  OverlayStyleOptions,\n  getCommonVectorSelectedStyle\n} from '../../style/shared';\nimport { PropertyTypeDetectorService } from '../../utils/propertyTypeDetector/propertyTypeDetector.service';\nimport { FeatureWorkspace } from './feature-workspace';\nimport {\n  createFilterInMapExtentOrResolutionStrategy,\n  createTableTemplate\n} from './workspace.utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FeatureWorkspaceService {\n  get zoomAuto(): boolean {\n    return this.storageService.get('zoomAuto') as boolean;\n  }\n\n  public ws$ = new BehaviorSubject<string>(undefined);\n\n  constructor(\n    private storageService: StorageService,\n    private configService: ConfigService,\n    private layerService: LayerService,\n    private propertyTypeDetectorService: PropertyTypeDetectorService,\n    private capabilitiesService: CapabilitiesService\n  ) {}\n\n  createWorkspace(layer: VectorLayer, map: IgoMap): FeatureWorkspace {\n    if (\n      layer.options.workspace?.enabled === false ||\n      layer.dataSource.options.edition\n    ) {\n      return;\n    }\n\n    layer.options.workspace = Object.assign({}, layer.options.workspace, {\n      srcId: layer.id,\n      workspaceId: layer.id,\n      enabled: true\n    } as GeoWorkspaceOptions);\n\n    const wks = new FeatureWorkspace({\n      id: layer.id,\n      title: layer.title,\n      layer,\n      map,\n      entityStore: this.createFeatureStore(layer, map),\n      actionStore: new ActionStore([]),\n      meta: {\n        tableTemplate: undefined\n      }\n    });\n    createTableTemplate(wks, layer, this.layerService, this.ws$);\n    return wks;\n  }\n\n  private createFeatureStore(layer: VectorLayer, map: IgoMap): FeatureStore {\n    const store = new FeatureStore([], { map });\n    store.bindLayer(layer);\n\n    const loadingStrategy = new FeatureStoreLoadingLayerStrategy({});\n    const searchStrategy = new FeatureStoreSearchIndexStrategy({\n      percentDistinctValueRatio: 2,\n      sourceFields: layer.dataSource.options.sourceFields\n    });\n    const inMapExtentStrategy = new FeatureStoreInMapExtentStrategy({});\n    const geoPropertiesStrategy = new GeoPropertiesStrategy(\n      { map },\n      this.propertyTypeDetectorService,\n      this.capabilitiesService\n    );\n    const inMapResolutionStrategy = new FeatureStoreInMapResolutionStrategy({});\n    const selectedRecordStrategy = new EntityStoreFilterSelectionStrategy({});\n    const confQueryOverlayStyle: OverlayStyleOptions =\n      this.configService.getConfig('queryOverlayStyle');\n\n    const selectionStrategy = new FeatureStoreSelectionStrategy({\n      layer: new VectorLayer({\n        zIndex: 300,\n        source: new FeatureDataSource(),\n        style: (feature) => {\n          return getCommonVectorSelectedStyle(\n            Object.assign(\n              {},\n              { feature },\n              confQueryOverlayStyle?.selection || {}\n            ) as FeatureCommonVectorStyleOptions\n          );\n        },\n        showInLayerList: false,\n        exportable: false,\n        browsable: false\n      }),\n      map,\n      hitTolerance: 15,\n      motion: this.zoomAuto ? FeatureMotion.Default : FeatureMotion.None,\n      many: true,\n      dragBox: true\n    });\n    if (layer.options.workspace?.searchIndexEnabled) {\n      store.addStrategy(searchStrategy, true);\n    }\n    store.addStrategy(loadingStrategy, true);\n    store.addStrategy(inMapExtentStrategy, true);\n    store.addStrategy(geoPropertiesStrategy, true);\n    store.addStrategy(inMapResolutionStrategy, true);\n    store.addStrategy(selectionStrategy, true);\n    store.addStrategy(selectedRecordStrategy, false);\n    store.addStrategy(createFilterInMapExtentOrResolutionStrategy(), true);\n    return store;\n  }\n}\n","import { Workspace, WorkspaceOptions } from '@igo2/common/workspace';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { VectorLayer } from '../../layer/shared';\nimport { IgoMap } from '../../map/shared/map';\n\nexport interface WfsWorkspaceOptions extends WorkspaceOptions {\n  layer: VectorLayer;\n  map: IgoMap;\n}\n\nexport class WfsWorkspace extends Workspace {\n  readonly inResolutionRange$ = new BehaviorSubject<boolean>(true);\n\n  get layer(): VectorLayer {\n    return this.options.layer;\n  }\n\n  get map(): IgoMap {\n    return this.options.map;\n  }\n\n  constructor(protected options: WfsWorkspaceOptions) {\n    super(options);\n    this.map.viewController.resolution$.subscribe((mapResolution) => {\n      if (\n        mapResolution > this.layer.minResolution &&\n        mapResolution < this.layer.maxResolution\n      ) {\n        this.inResolutionRange$.next(true);\n      } else {\n        this.inResolutionRange$.next(false);\n      }\n    });\n  }\n\n  public getLayerWksOptionTabQuery(): boolean {\n    if (this.layer.options.workspace.queryOptions?.tabQuery !== undefined) {\n      return this.layer.options.workspace.queryOptions.tabQuery;\n    }\n    return true;\n  }\n\n  public getLayerWksOptionMapQuery(): boolean {\n    if (\n      this.layer.options.workspace.queryOptions?.mapQueryOnOpenTab !== undefined\n    ) {\n      return this.layer.options.workspace.queryOptions.mapQueryOnOpenTab;\n    }\n    return true;\n  }\n\n  private getInResolutionRange(): boolean {\n    return this.inResolutionRange$.value;\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ActionStore } from '@igo2/common/action';\nimport { EntityStoreFilterSelectionStrategy } from '@igo2/common/entity';\nimport { ConfigService } from '@igo2/core/config';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { CapabilitiesService } from '../../datasource/shared/capabilities.service';\nimport { FeatureDataSource } from '../../datasource/shared/datasources';\nimport {\n  FeatureMotion,\n  FeatureStore,\n  FeatureStoreInMapExtentStrategy,\n  FeatureStoreInMapResolutionStrategy,\n  FeatureStoreLoadingLayerStrategy,\n  FeatureStoreSelectionStrategy,\n  GeoPropertiesStrategy\n} from '../../feature/shared';\nimport {\n  GeoWorkspaceOptions,\n  LayerService,\n  LinkedProperties,\n  VectorLayer\n} from '../../layer/shared';\nimport { IgoMap } from '../../map/shared/map';\nimport {\n  FeatureCommonVectorStyleOptions,\n  OverlayStyleOptions,\n  getCommonVectorSelectedStyle\n} from '../../style/shared';\nimport { PropertyTypeDetectorService } from '../../utils/propertyTypeDetector';\nimport { WfsWorkspace } from './wfs-workspace';\nimport {\n  createFilterInMapExtentOrResolutionStrategy,\n  createTableTemplate\n} from './workspace.utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WfsWorkspaceService {\n  get zoomAuto(): boolean {\n    return this.storageService.get('zoomAuto') as boolean;\n  }\n\n  public ws$ = new BehaviorSubject<string>(undefined);\n\n  constructor(\n    private storageService: StorageService,\n    private configService: ConfigService,\n    private layerService: LayerService,\n    private propertyTypeDetectorService: PropertyTypeDetectorService,\n    private capabilitiesService: CapabilitiesService\n  ) {}\n\n  createWorkspace(layer: VectorLayer, map: IgoMap): WfsWorkspace {\n    if (\n      layer.options.workspace?.enabled === false ||\n      layer.dataSource.options.edition\n    ) {\n      return;\n    }\n\n    layer.options.workspace = Object.assign({}, layer.options.workspace, {\n      srcId: layer.id,\n      workspaceId: layer.id,\n      enabled: true\n    } as GeoWorkspaceOptions);\n\n    const wks = new WfsWorkspace({\n      id: layer.id,\n      title: layer.title,\n      layer,\n      map,\n      entityStore: this.createFeatureStore(layer, map),\n      actionStore: new ActionStore([]),\n      meta: {\n        tableTemplate: undefined\n      }\n    });\n    createTableTemplate(wks, layer, this.layerService, this.ws$);\n    return wks;\n  }\n\n  private createFeatureStore(layer: VectorLayer, map: IgoMap): FeatureStore {\n    const store = new FeatureStore([], { map });\n    store.bindLayer(layer);\n\n    const loadingStrategy = new FeatureStoreLoadingLayerStrategy({});\n    const inMapExtentStrategy = new FeatureStoreInMapExtentStrategy({});\n    const geoPropertiesStrategy = new GeoPropertiesStrategy(\n      { map },\n      this.propertyTypeDetectorService,\n      this.capabilitiesService\n    );\n    const inMapResolutionStrategy = new FeatureStoreInMapResolutionStrategy({});\n    const selectedRecordStrategy = new EntityStoreFilterSelectionStrategy({});\n    const confQueryOverlayStyle: OverlayStyleOptions =\n      this.configService.getConfig('queryOverlayStyle');\n\n    const id = layer.id + '.FeatureStore';\n\n    if (!layer.link) {\n      layer.options.linkedLayers.links = [\n        {\n          syncedDelete: true,\n          linkedIds: [id],\n          properties: [LinkedProperties.VISIBLE]\n        }\n      ];\n      layer.createLink();\n    }\n\n    const selectionStrategy = new FeatureStoreSelectionStrategy({\n      layer: new VectorLayer({\n        id,\n        linkedLayers: {\n          linkId: id\n        },\n        zIndex: 300,\n        source: new FeatureDataSource(),\n        style: (feature) => {\n          return getCommonVectorSelectedStyle(\n            Object.assign(\n              {},\n              { feature },\n              confQueryOverlayStyle?.selection || {}\n            ) as FeatureCommonVectorStyleOptions\n          );\n        },\n        showInLayerList: false,\n        exportable: false,\n        browsable: false\n      }),\n      map,\n      hitTolerance: 15,\n      motion: this.zoomAuto ? FeatureMotion.Default : FeatureMotion.None,\n      many: true,\n      dragBox: true\n    });\n    store.addStrategy(loadingStrategy, true);\n    store.addStrategy(inMapExtentStrategy, true);\n    store.addStrategy(geoPropertiesStrategy, true);\n    store.addStrategy(inMapResolutionStrategy, true);\n    store.addStrategy(selectionStrategy, true);\n    store.addStrategy(selectedRecordStrategy, false);\n    store.addStrategy(createFilterInMapExtentOrResolutionStrategy(), true);\n    return store;\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ActionStore } from '@igo2/common/action';\nimport { EntityStoreFilterSelectionStrategy } from '@igo2/common/entity';\nimport { ConfigService } from '@igo2/core/config';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\n\nimport { CapabilitiesService } from '../../datasource/shared/capabilities.service';\nimport { WMSDataSource } from '../../datasource/shared/datasources';\nimport { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';\nimport { WFSDataSourceOptions } from '../../datasource/shared/datasources/wfs-datasource.interface';\nimport {\n  FeatureMotion,\n  FeatureStore,\n  FeatureStoreInMapExtentStrategy,\n  FeatureStoreInMapResolutionStrategy,\n  FeatureStoreLoadingLayerStrategy,\n  FeatureStoreSelectionStrategy,\n  GeoPropertiesStrategy\n} from '../../feature/shared';\nimport { OgcFilterableDataSourceOptions } from '../../filter/shared/ogc-filter.interface';\nimport {\n  GeoWorkspaceOptions,\n  ImageLayer,\n  LayerService,\n  LayersLinkProperties,\n  LinkedProperties,\n  VectorLayer\n} from '../../layer/shared';\nimport { IgoMap } from '../../map/shared/map';\nimport { QueryableDataSourceOptions } from '../../query/shared/query.interfaces';\nimport { getCommonVectorSelectedStyle } from '../../style/shared/vector/commonVectorStyle';\nimport {\n  FeatureCommonVectorStyleOptions,\n  OverlayStyleOptions\n} from '../../style/shared/vector/vector-style.interface';\nimport { StyleService } from '../../style/style-service/style.service';\nimport { PropertyTypeDetectorService } from '../../utils/propertyTypeDetector/propertyTypeDetector.service';\nimport { WfsWorkspace } from './wfs-workspace';\nimport {\n  createFilterInMapExtentOrResolutionStrategy,\n  createTableTemplate\n} from './workspace.utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WmsWorkspaceService {\n  get zoomAuto(): boolean {\n    return this.storageService.get('zoomAuto') as boolean;\n  }\n\n  public ws$ = new BehaviorSubject<string>(undefined);\n\n  constructor(\n    private layerService: LayerService,\n    private storageService: StorageService,\n    private capabilitiesService: CapabilitiesService,\n    private styleService: StyleService,\n    private configService: ConfigService,\n    private propertyTypeDetectorService: PropertyTypeDetectorService\n  ) {}\n\n  createWorkspace(layer: ImageLayer, map: IgoMap): WfsWorkspace {\n    if (\n      !layer.options.workspace ||\n      map.layerController.all.find(\n        (lay) => lay.id === layer.id + '.WfsWorkspaceTableDest'\n      ) ||\n      layer.dataSource.options.edition\n    ) {\n      return;\n    }\n    const dataSource: WMSDataSource = layer.dataSource as WMSDataSource;\n    const wmsLinkId = layer.id + '.WmsWorkspaceTableSrc';\n    const wfsLinkId = layer.id + '.WfsWorkspaceTableDest';\n    if (!layer.options.linkedLayers) {\n      layer.options.linkedLayers = { linkId: wmsLinkId, links: [] };\n    }\n    const linkProperties = {\n      syncedDelete: true,\n      linkedIds: [wfsLinkId],\n      properties: [LinkedProperties.ZINDEX, LinkedProperties.VISIBLE]\n    } as LayersLinkProperties;\n\n    if (!layer.options.workspace?.minResolution) {\n      linkProperties.properties.push(LinkedProperties.MINRESOLUTION);\n    }\n    let hasOgcFilters = false;\n    if (\n      (dataSource.options as OgcFilterableDataSourceOptions).ogcFilters?.enabled\n    ) {\n      linkProperties.properties.push(LinkedProperties.OGCFILTERS);\n      hasOgcFilters = true;\n    }\n    if (!layer.options.workspace?.maxResolution) {\n      linkProperties.properties.push(LinkedProperties.MAXRESOLUTION);\n    }\n\n    let clonedLinks: LayersLinkProperties[] = [];\n    if (layer.options.linkedLayers.links) {\n      clonedLinks = JSON.parse(\n        JSON.stringify(layer.options.linkedLayers.links)\n      );\n    }\n    clonedLinks.push(linkProperties);\n\n    // TODO: Démystifier ce bout de code\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    (layer.options.linkedLayers.linkId = layer.options.linkedLayers.linkId\n      ? layer.options.linkedLayers.linkId\n      : wmsLinkId),\n      (layer.options.linkedLayers.links = clonedLinks);\n\n    layer.createLink();\n\n    interface WFSoptions\n      extends WFSDataSourceOptions,\n        OgcFilterableDataSourceOptions {}\n\n    let wks;\n    const wksLayerOption: GeoWorkspaceOptions = {\n      printable: layer.options.workspace?.printable,\n      srcId: layer.id,\n      workspaceId: undefined,\n      enabled: false,\n      queryOptions: {\n        mapQueryOnOpenTab:\n          layer.options.workspace?.queryOptions?.mapQueryOnOpenTab,\n        tabQuery: layer.options.workspace?.queryOptions?.tabQuery\n      },\n      pageSize: layer.options.workspace?.pageSize,\n      pageSizeOptions: layer.options.workspace?.pageSizeOptions\n    };\n\n    this.layerService\n      .createAsyncLayer({\n        title: layer.title,\n        parentId: layer.options.parentId,\n        isIgoInternalLayer: true,\n        visible: layer.visible,\n        id: wfsLinkId,\n        linkedLayers: {\n          linkId: wfsLinkId\n        },\n        workspace: wksLayerOption,\n        showInLayerList: false,\n        opacity: 0,\n        minResolution:\n          layer.options.workspace?.minResolution || layer.minResolution || 0,\n        maxResolution:\n          layer.options.workspace?.maxResolution ||\n          layer.maxResolution ||\n          Infinity,\n        style: this.styleService.createStyle({\n          fill: {\n            color: 'rgba(255, 255, 255, 0.01)'\n          },\n          stroke: {\n            color: 'rgba(255, 255, 255, 0.01)'\n          },\n          circle: {\n            fill: {\n              color: 'rgba(255, 255, 255, 0.01)'\n            },\n            stroke: {\n              color: 'rgba(255, 255, 255, 0.01)'\n            },\n            radius: 5\n          }\n        }),\n        sourceOptions: {\n          download: dataSource.options.download,\n          type: 'wfs',\n          url: dataSource.options.urlWfs || dataSource.options.url,\n          queryable: true,\n          relations: dataSource.options.relations,\n          queryTitle: (dataSource.options as QueryableDataSourceOptions)\n            .queryTitle,\n          queryFormatAsWms: layer.options.workspace?.enabled\n            ? (dataSource.options as QueryableDataSourceOptions)\n                .queryFormatAsWms\n            : true,\n          params: dataSource.options.paramsWFS,\n          ogcFilters: Object.assign({}, dataSource.ogcFilters, {\n            enabled: hasOgcFilters\n          }),\n          sourceFields: dataSource.options.sourceFields || undefined\n        } as WFSoptions\n      })\n      .subscribe((workspaceLayer: VectorLayer) => {\n        map.layerController.add(workspaceLayer);\n        layer.ol.setProperties(\n          {\n            linkedLayers: {\n              linkId: layer.options.linkedLayers.linkId,\n              links: clonedLinks\n            }\n          },\n          false\n        );\n        workspaceLayer.dataSource.ol.refresh();\n\n        if (!layer.options.workspace?.enabled) {\n          return;\n        }\n        wks = new WfsWorkspace({\n          id: layer.id,\n          title: layer.title,\n          layer: workspaceLayer,\n          map,\n          entityStore: this.createFeatureStore(workspaceLayer, map),\n          actionStore: new ActionStore([]),\n          meta: {\n            tableTemplate: undefined\n          }\n        });\n        createTableTemplate(wks, workspaceLayer, this.layerService, this.ws$);\n\n        workspaceLayer.options.workspace.workspaceId = workspaceLayer.id;\n        layer.options.workspace = Object.assign({}, layer.options.workspace, {\n          enabled: true,\n          srcId: layer.id,\n          workspaceId: workspaceLayer.id,\n          queryOptions: {\n            mapQueryOnOpenTab:\n              layer.options.workspace?.queryOptions?.mapQueryOnOpenTab,\n            tabQuery: layer.options.workspace?.queryOptions?.tabQuery\n          },\n          pageSize: layer.options.workspace?.pageSize,\n          pageSizeOptions: layer.options.workspace?.pageSizeOptions\n        } as GeoWorkspaceOptions);\n\n        delete dataSource.options.download;\n        return wks;\n      });\n\n    return wks;\n  }\n\n  private createFeatureStore(layer: VectorLayer, map: IgoMap): FeatureStore {\n    const store = new FeatureStore([], { map });\n    store.bindLayer(layer);\n\n    const loadingStrategy = new FeatureStoreLoadingLayerStrategy({});\n    const inMapExtentStrategy = new FeatureStoreInMapExtentStrategy({});\n    const geoPropertiesStrategy = new GeoPropertiesStrategy(\n      { map },\n      this.propertyTypeDetectorService,\n      this.capabilitiesService\n    );\n    const inMapResolutionStrategy = new FeatureStoreInMapResolutionStrategy({});\n    const selectedRecordStrategy = new EntityStoreFilterSelectionStrategy({});\n    const confQueryOverlayStyle: OverlayStyleOptions =\n      this.configService.getConfig('queryOverlayStyle');\n\n    const id = layer.id + '.FeatureStore';\n\n    if (!layer.link) {\n      layer.options.linkedLayers.links = [\n        {\n          syncedDelete: true,\n          linkedIds: [id],\n          properties: [LinkedProperties.VISIBLE]\n        }\n      ];\n      layer.createLink();\n    }\n\n    const selectionStrategy = new FeatureStoreSelectionStrategy({\n      layer: new VectorLayer({\n        id,\n        linkedLayers: {\n          linkId: id\n        },\n        zIndex: 300,\n        source: new FeatureDataSource(),\n        style: (feature) => {\n          return getCommonVectorSelectedStyle(\n            Object.assign(\n              {},\n              { feature },\n              confQueryOverlayStyle?.selection || {}\n            ) as FeatureCommonVectorStyleOptions\n          );\n        },\n        showInLayerList: false,\n        exportable: false,\n        browsable: false\n      }),\n      map,\n      hitTolerance: 15,\n      motion: this.zoomAuto ? FeatureMotion.Default : FeatureMotion.None,\n      many: true,\n      dragBox: true\n    });\n    store.addStrategy(loadingStrategy, true);\n    store.addStrategy(inMapExtentStrategy, true);\n    store.addStrategy(geoPropertiesStrategy, true);\n    store.addStrategy(inMapResolutionStrategy, true);\n    store.addStrategy(selectionStrategy, true);\n    store.addStrategy(selectedRecordStrategy, false);\n    store.addStrategy(createFilterInMapExtentOrResolutionStrategy(), true);\n    return store;\n  }\n}\n","import {\n  Directive,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\n\nimport {\n  Workspace,\n  WorkspaceSelectorComponent,\n  WorkspaceStore\n} from '@igo2/common/workspace';\n\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n  FeatureDataSource,\n  WFSDataSource,\n  WMSDataSource\n} from '../../datasource/shared/datasources';\nimport { FeatureStoreInMapExtentStrategy } from '../../feature/shared/strategies/in-map-extent';\nimport { OgcFilterableDataSourceOptions } from '../../filter/shared';\nimport { isLayerGroup } from '../../layer';\nimport { AnyLayer, ImageLayer, VectorLayer } from '../../layer/shared';\nimport { IgoMap } from '../../map/shared/map';\nimport { QueryableDataSourceOptions } from '../../query/shared/query.interfaces';\nimport { EditionWorkspaceService } from '../shared/edition-workspace.service';\nimport { FeatureWorkspaceService } from '../shared/feature-workspace.service';\nimport { WfsWorkspaceService } from '../shared/wfs-workspace.service';\nimport { WmsWorkspaceService } from '../shared/wms-workspace.service';\n\n@Directive({\n  selector: '[igoWorkspaceSelector]',\n  standalone: true\n})\nexport class WorkspaceSelectorDirective implements OnInit, OnDestroy {\n  private layers$$: Subscription;\n  private entities$$: Subscription[] = [];\n\n  @Input() map: IgoMap;\n\n  @Output() changeWorkspace = new EventEmitter<string>();\n  @Output() disableSwitch = new EventEmitter<boolean>();\n  @Output() relationLayers = new EventEmitter<ImageLayer[] | VectorLayer[]>();\n  @Output() rowsInMapExtentCheckCondition = new EventEmitter<boolean>();\n\n  get workspaceStore(): WorkspaceStore {\n    return this.component.store;\n  }\n\n  constructor(\n    private component: WorkspaceSelectorComponent,\n    private wfsWorkspaceService: WfsWorkspaceService,\n    private wmsWorkspaceService: WmsWorkspaceService,\n    private editionWorkspaceService: EditionWorkspaceService,\n    private featureWorkspaceService: FeatureWorkspaceService\n  ) {}\n\n  ngOnInit() {\n    this.layers$$ = this.map.layerController.all$\n      .pipe(debounceTime(50))\n      .subscribe((layers) => this.onLayersChange(layers));\n\n    this.featureWorkspaceService.ws$.subscribe((ws) => {\n      this.changeWorkspace.emit(ws);\n    });\n    this.wmsWorkspaceService.ws$.subscribe((ws) => {\n      this.changeWorkspace.emit(ws);\n    });\n    this.wfsWorkspaceService.ws$.subscribe((ws) => {\n      this.changeWorkspace.emit(ws);\n    });\n    this.editionWorkspaceService.ws$.subscribe((ws) => {\n      this.changeWorkspace.emit(ws);\n    });\n    this.editionWorkspaceService.adding$.subscribe((adding) => {\n      this.disableSwitch.emit(adding);\n    });\n    this.editionWorkspaceService.relationLayers$.subscribe((layers) => {\n      this.relationLayers.emit(layers);\n    });\n    this.editionWorkspaceService.rowsInMapExtentCheckCondition$.subscribe(\n      (condition) => {\n        this.rowsInMapExtentCheckCondition.emit(condition);\n      }\n    );\n  }\n\n  ngOnDestroy() {\n    this.layers$$.unsubscribe();\n    this.entities$$.map((entities) => entities.unsubscribe());\n  }\n\n  private onLayersChange(layers: AnyLayer[]) {\n    const editableLayers = layers.filter((layer) =>\n      this.layerIsEditable(layer)\n    );\n    const editableLayersIds = editableLayers.map((layer) => layer.id);\n\n    const workspacesToAdd = editableLayers\n      .map((layer: VectorLayer) => this.getOrCreateWorkspace(layer))\n      .filter((workspace: Workspace | undefined) => workspace !== undefined);\n\n    const workspacesToRemove = this.workspaceStore\n      .all()\n      .filter((workspace: Workspace) => {\n        return editableLayersIds.indexOf(workspace.id) < 0;\n      });\n\n    if (workspacesToRemove.length > 0) {\n      workspacesToRemove.forEach((workspace: Workspace) => {\n        workspace.entityStore.deactivateStrategyOfType(\n          FeatureStoreInMapExtentStrategy\n        );\n        workspace.deactivate();\n      });\n      this.workspaceStore.state.updateMany(workspacesToRemove, {\n        active: false,\n        selected: false\n      });\n      this.workspaceStore.deleteMany(workspacesToRemove);\n    }\n\n    if (workspacesToAdd.length > 0) {\n      this.workspaceStore.insertMany(workspacesToAdd);\n    }\n  }\n\n  private getOrCreateWorkspace(\n    layer: VectorLayer | ImageLayer\n  ): Workspace | undefined {\n    const workspace = this.workspaceStore.get(layer.id);\n    if (workspace !== undefined) {\n      return;\n    }\n    if (\n      layer.dataSource instanceof WFSDataSource &&\n      layer.dataSource.options.edition?.enabled !== true\n    ) {\n      const wfsWks = this.wfsWorkspaceService.createWorkspace(\n        layer as VectorLayer,\n        this.map\n      );\n      return wfsWks;\n    } else if (\n      layer.dataSource instanceof WMSDataSource &&\n      layer.dataSource.options.edition?.enabled !== true\n    ) {\n      if (!layer.dataSource.options.paramsWFS) {\n        return;\n      }\n      const wmsWks = this.wmsWorkspaceService.createWorkspace(\n        layer as ImageLayer,\n        this.map\n      );\n      wmsWks?.inResolutionRange$.subscribe((inResolutionRange) => {\n        (layer.dataSource.options as QueryableDataSourceOptions).queryable =\n          !inResolutionRange;\n        (\n          wmsWks.layer.dataSource.options as QueryableDataSourceOptions\n        ).queryable = inResolutionRange;\n      });\n      return wmsWks;\n    } else if (\n      layer.dataSource instanceof FeatureDataSource &&\n      (layer as VectorLayer).exportable === true &&\n      layer.dataSource.options.edition?.enabled !== true\n    ) {\n      const featureWks = this.featureWorkspaceService.createWorkspace(\n        layer as VectorLayer,\n        this.map\n      );\n      return featureWks;\n    } else if (\n      layer.dataSource instanceof WMSDataSource &&\n      layer.dataSource.options.edition?.enabled === true\n    ) {\n      const editionWks = this.editionWorkspaceService.createWorkspace(\n        layer as ImageLayer,\n        this.map\n      );\n      return editionWks;\n    }\n\n    return;\n  }\n\n  private layerIsEditable(layer: AnyLayer): boolean {\n    if (isLayerGroup(layer)) {\n      return false;\n    }\n    const dataSource = layer.dataSource;\n    if (dataSource instanceof WFSDataSource) {\n      return true;\n    }\n    if (dataSource instanceof FeatureDataSource) {\n      return true;\n    }\n    if (dataSource instanceof WMSDataSource) {\n      const dataSourceOptions = (dataSource.options ||\n        {}) as OgcFilterableDataSourceOptions;\n      return (\n        dataSourceOptions.ogcFilters?.enabled ||\n        dataSource.options.paramsWFS?.featureTypes !== undefined\n      );\n    }\n\n    return false;\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { WorkspaceSelectorDirective } from './workspace-selector.directive';\n\n/**\n * @deprecated import the WorkspaceSelectorDirective directly\n */\n@NgModule({\n  imports: [WorkspaceSelectorDirective],\n  exports: [WorkspaceSelectorDirective]\n})\nexport class IgoWorkspaceSelectorModule {}\n","import { NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { IgoWidgetModule } from '@igo2/common/widget';\n\nimport { IgoOgcFilterModule } from './widgets/ogc-filter/ogc-filter.module';\nimport { provideOgcFilterWidget } from './widgets/widgets';\nimport { IgoWorkspaceSelectorModule } from './workspace-selector/workspace-selector.module';\n\n@NgModule({\n  imports: [\n    IgoWidgetModule,\n    IgoOgcFilterModule,\n    IgoWorkspaceSelectorModule,\n    MatDialogModule\n  ],\n  exports: [IgoOgcFilterModule],\n  providers: [provideOgcFilterWidget()]\n})\nexport class IgoGeoWorkspaceModule {}\n","import { NgModule } from '@angular/core';\n\nimport { IgoDirectionsModule } from './directions/directions.module';\nimport { IgoDownloadModule } from './download/download.module';\nimport { IgoFilterModule } from './filter/filter.module';\nimport { IgoImportExportModule } from './import-export/import-export.module';\nimport { IgoLayerModule } from './layer/layer.module';\nimport { IgoMetadataModule } from './metadata/metadata.module';\nimport { IgoQueryModule } from './query/query.module';\nimport { IgoSearchModule } from './search/search.module';\nimport { IgoStyleModule } from './style/style.module';\nimport { IgoToastModule } from './toast/toast.module';\nimport { IgoWktModule } from './wkt/wkt.module';\nimport { IgoGeoWorkspaceModule } from './workspace/workspace.module';\n\n@NgModule({\n  imports: [],\n  declarations: [],\n  exports: [\n    IgoDownloadModule,\n    IgoFilterModule,\n    IgoImportExportModule,\n    IgoLayerModule,\n    IgoMetadataModule,\n    IgoQueryModule,\n    IgoDirectionsModule,\n    IgoSearchModule,\n    IgoToastModule,\n    IgoGeoWorkspaceModule,\n    IgoStyleModule,\n    IgoWktModule\n  ]\n})\nexport class IgoGeoModule {}\n","import { QueryFormat } from '../../query/shared/query.enums';\n\nexport type CatalogQueryFormatTypes = Record<QueryFormat, string | string[]>;\n\nexport enum CatalogItemType {\n  Layer = 'layer',\n  Group = 'group'\n}\n\nexport enum TypeCatalog {\n  wms,\n  wmts,\n  baselayers,\n  arcgisrest,\n  tilearcgisrest,\n  imagearcgisrest,\n  composite\n}\n\nexport type TypeCatalogStrings = keyof typeof TypeCatalog;\n","import { Observable } from 'rxjs';\n\nimport { TimeFilterOptions } from '../../filter/shared/time-filter.interface';\nimport { TooltipType } from '../../layer/shared/layers/layer.interface';\nimport { QueryFormat, QueryHtmlTarget } from '../../query/shared/query.enums';\nimport { TypeCatalogStrings } from './catalog.enum';\nimport { CatalogItem, CatalogItemGroup, ICatalog } from './catalog.interface';\n\nexport abstract class Catalog implements ICatalog {\n  id: string;\n  title: string;\n  url: string;\n  removable?: boolean;\n  externalProvider?: boolean;\n  abstract?: string;\n  forcedProperties?: any[];\n  items?: CatalogItem[];\n  type?: TypeCatalogStrings;\n  version?: string;\n  matrixSet?: string;\n  requestEncoding?: string;\n  regFilters?: string[];\n  groupImpose?: CatalogItemGroup;\n  groupSeparator?: string;\n  timeFilter?: TimeFilterOptions;\n  queryFormat?: QueryFormat;\n  queryHtmlTarget?: QueryHtmlTarget;\n  queryParams?: Record<string, string>;\n  sourceOptions?: Record<string, any>;\n  count?: number;\n  tooltipType?: TooltipType.ABSTRACT | TooltipType.TITLE;\n  sortDirection?: 'asc' | 'desc';\n  setCrossOriginAnonymous?: boolean;\n  showLegend?: boolean;\n  profils?: string[];\n\n  constructor(options: Catalog) {\n    Object.assign(this, options);\n  }\n\n  public abstract collectCatalogItems(): Observable<CatalogItem[]>;\n}\n\nexport type CollectCatalogItemsFn = (\n  _this: Catalog\n) => Observable<CatalogItem[]>;\n","import { Observable } from 'rxjs';\n\nimport { Catalog, CollectCatalogItemsFn } from './catalog.abstract';\nimport { TypeCatalog } from './catalog.enum';\nimport {\n  CatalogItem,\n  CatalogItemGroup,\n  ICatalog,\n  ICompositeCatalog\n} from './catalog.interface';\n\nexport class WMSCatalog extends Catalog {\n  constructor(\n    options: Catalog,\n    private _collectCatlogItems: CollectCatalogItemsFn\n  ) {\n    super(options);\n    const sType: string = TypeCatalog[TypeCatalog.wms];\n    this.type = TypeCatalog[sType];\n  }\n\n  public collectCatalogItems(): Observable<CatalogItem[]> {\n    return this._collectCatlogItems(this);\n  }\n}\n\nexport class WMTSCatalog extends Catalog {\n  constructor(\n    options: Catalog,\n    private _collectCatlogItems: CollectCatalogItemsFn\n  ) {\n    super(options);\n    const sType: string = TypeCatalog[TypeCatalog.wmts];\n    this.type = TypeCatalog[sType];\n  }\n\n  public collectCatalogItems(): Observable<CatalogItem[]> {\n    return this._collectCatlogItems(this);\n  }\n}\n\nexport class BaselayersCatalog extends Catalog {\n  constructor(\n    options: Catalog,\n    private _collectCatlogItems: CollectCatalogItemsFn\n  ) {\n    super(options);\n    const sType: string = TypeCatalog[TypeCatalog.baselayers];\n    this.type = TypeCatalog[sType];\n  }\n\n  public collectCatalogItems(): Observable<CatalogItemGroup[]> {\n    return this._collectCatlogItems(this);\n  }\n}\n\nexport class ArcGISRestCatalog extends Catalog {\n  constructor(\n    options: Catalog,\n    private _collectCatlogItems: CollectCatalogItemsFn\n  ) {\n    super(options);\n    const sType: string = TypeCatalog[TypeCatalog.arcgisrest];\n    this.type = TypeCatalog[sType];\n  }\n\n  public collectCatalogItems() {\n    return this._collectCatlogItems(this);\n  }\n}\n\nexport class TileOrImageArcGISRestCatalog extends Catalog {\n  constructor(\n    options: Catalog,\n    public _collectCatlogItems: CollectCatalogItemsFn,\n    typeCatalog: TypeCatalog\n  ) {\n    super(options);\n    this.type = TypeCatalog[TypeCatalog[typeCatalog]];\n  }\n\n  public collectCatalogItems() {\n    return this._collectCatlogItems(this);\n  }\n}\n\nexport class CompositeCatalog extends Catalog implements ICompositeCatalog {\n  declare composite: ICatalog[];\n\n  constructor(\n    options: Catalog,\n    private _collectCatlogItems: CollectCatalogItemsFn\n  ) {\n    super(options);\n    const sType: string = TypeCatalog[TypeCatalog.composite];\n    this.type = TypeCatalog[sType];\n    this.url = null;\n  }\n\n  public collectCatalogItems(): Observable<CatalogItem[]> {\n    return this._collectCatlogItems(this);\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { ObjectUtils, uuid } from '@igo2/utils';\n\nimport { EMPTY, Observable, of, zip } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport {\n  ArcGISRestCapabilitiesLayer,\n  ArcGISRestCapabilitiesLayerTypes\n} from '../../datasource/shared/capabilities.interface';\nimport { CapabilitiesService } from '../../datasource/shared/capabilities.service';\nimport {\n  ArcGISRestDataSourceOptions,\n  WMSDataSourceOptions,\n  WMSDataSourceOptionsParams,\n  WMTSDataSourceOptions\n} from '../../datasource/shared/datasources';\nimport { ImageLayerOptions, LayerOptions } from '../../layer/shared';\nimport { getResolutionFromScale } from '../../map/shared/map.utils';\nimport { QueryFormat } from '../../query/shared/query.enums';\nimport { QueryableDataSourceOptions } from '../../query/shared/query.interfaces';\nimport { generateIdFromSourceOptions } from '../../utils/id-generator';\nimport { Catalog } from './catalog.abstract';\nimport { CatalogItemType, TypeCatalog } from './catalog.enum';\nimport {\n  CatalogItem,\n  CatalogItemGroup,\n  CatalogItemLayer,\n  CatalogServiceOptions,\n  ForcedProperty\n} from './catalog.interface';\nimport {\n  ArcGISRestCatalog,\n  BaselayersCatalog,\n  CompositeCatalog,\n  TileOrImageArcGISRestCatalog,\n  WMSCatalog,\n  WMTSCatalog\n} from './catalogs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CatalogService {\n  constructor(\n    private http: HttpClient,\n    private config: ConfigService,\n    private languageService: LanguageService,\n    private messageService: MessageService,\n    private capabilitiesService: CapabilitiesService\n  ) {}\n\n  loadCatalogs(): Observable<Catalog[]> {\n    const contextConfig = this.config.getConfig('context') || {};\n\n    const catalogConfig: CatalogServiceOptions =\n      this.config.getConfig('catalog') || {};\n    const apiUrl = catalogConfig.url || contextConfig.url;\n    const catalogsFromConfig = catalogConfig.sources || [];\n\n    const observables$ = [];\n\n    if (apiUrl) {\n      if (catalogConfig.baselayers) {\n        const translate = this.languageService.translate;\n        const title = translate.instant('igo.geo.catalog.baseLayers');\n        const baseLayersCatalog = [\n          {\n            id: 'catalog.baselayers',\n            title,\n            url: `${apiUrl}/baselayers`,\n            type: 'baselayers'\n          }\n        ];\n        observables$.push(of(baseLayersCatalog));\n      }\n\n      // Catalogs from API\n      const catalogsFromApi$ = this.http\n        .get<Catalog[]>(`${apiUrl}/catalogs`)\n        .pipe(\n          map((catalogs) =>\n            catalogs.map((c: any) => Object.assign(c, c.options))\n          ),\n          catchError(() => EMPTY)\n        );\n      observables$.push(catalogsFromApi$);\n    }\n\n    // Catalogs from config\n    if (catalogsFromConfig.length > 0) {\n      observables$.push(\n        of(catalogsFromConfig).pipe(\n          map((catalogs: Catalog[]) =>\n            catalogs.map((c) => {\n              if (!c.id) {\n                c.id = uuid();\n              }\n              return c;\n            })\n          )\n        )\n      );\n    }\n\n    return zip(...observables$).pipe(\n      // eslint-disable-next-line prefer-spread\n      map((catalogs: Catalog[][]) => [].concat.apply([], catalogs))\n    ) as Observable<Catalog[]>;\n  }\n\n  loadCatalogItems(catalog: Catalog): Observable<CatalogItem[]> {\n    const newCatalog = CatalogFactory.createInstanceCatalog(catalog, this);\n    return newCatalog.collectCatalogItems();\n  }\n\n  loadCatalogBaseLayerItems(catalog: Catalog): Observable<CatalogItemGroup[]> {\n    return this.getCatalogBaseLayersOptions(catalog).pipe(\n      map((layersOptions: LayerOptions[]) => {\n        const items = layersOptions.map((layerOptions: LayerOptions) => {\n          return {\n            id: generateIdFromSourceOptions(layerOptions.sourceOptions),\n            title: layerOptions.title,\n            type: CatalogItemType.Layer,\n            externalProvider: catalog.externalProvider,\n            options: layerOptions\n          } as CatalogItemLayer;\n        });\n        return [\n          {\n            id: 'catalog.group.baselayers',\n            type: CatalogItemType.Group,\n            externalProvider: catalog.externalProvider,\n            title: catalog.title,\n            items\n          }\n        ];\n      })\n    );\n  }\n\n  private getCatalogBaseLayersOptions(\n    catalog: Catalog\n  ): Observable<LayerOptions[]> {\n    return this.http.get<LayerOptions[]>(catalog.url);\n  }\n\n  loadCatalogWMSLayerItems(catalog: Catalog): Observable<CatalogItem[]> {\n    return this.getCatalogCapabilities(catalog).pipe(\n      map((capabilities: any) => {\n        const items: CatalogItem[] = [];\n        if (!capabilities) {\n          return items;\n        }\n        if (\n          capabilities.Service &&\n          capabilities.Service.Abstract &&\n          capabilities.Service.Abstract.length\n        ) {\n          catalog.abstract = capabilities.Service.Abstract;\n        }\n        const finalLayers = [];\n        this.flattenWmsCapabilities(\n          capabilities.Capability.Layer,\n          0,\n          finalLayers,\n          catalog.groupSeparator\n        );\n        const capabilitiesCapabilityLayer = Object.assign(\n          {},\n          capabilities.Capability.Layer\n        );\n        capabilitiesCapabilityLayer.Layer = finalLayers.filter(\n          (f) => f.Layer.length !== 0\n        );\n        this.includeRecursiveItems(catalog, capabilitiesCapabilityLayer, items);\n        return items;\n      }),\n      catchError(() => {\n        this.messageService.error(\n          'igo.geo.catalog.unavailable',\n          'igo.geo.catalog.unavailableTitle',\n          undefined,\n          { value: catalog.title }\n        );\n        return EMPTY;\n      })\n    );\n  }\n\n  flattenWmsCapabilities(parent, level = 0, finalLayers, separator = ' / ') {\n    if (!finalLayers.includes(parent.Title)) {\n      const modifiedParent = Object.assign({}, parent);\n      modifiedParent.Layer = [];\n      finalLayers.push(modifiedParent);\n    }\n    for (const layer of parent.Layer) {\n      const modifiedLayer = Object.assign({}, layer);\n      if (level > 0) {\n        modifiedLayer.Title = parent.Title + separator + layer.Title;\n      }\n      if (layer.Layer) {\n        this.flattenWmsCapabilities(\n          modifiedLayer,\n          level + 1,\n          finalLayers,\n          separator\n        );\n      } else {\n        finalLayers.find((ff) => ff.Title === parent.Title).Layer.push(layer);\n      }\n    }\n  }\n\n  loadCatalogWMTSLayerItems(catalog: Catalog): Observable<CatalogItem[]> {\n    return this.getCatalogCapabilities(catalog).pipe(\n      map((capabilities: any) => this.getWMTSItems(catalog, capabilities))\n    );\n  }\n\n  loadCatalogArcGISRestItems(catalog: Catalog): Observable<CatalogItem[]> {\n    return this.getCatalogCapabilities(catalog).pipe(\n      map((capabilities: any) => {\n        return this.getArcGISRESTItems(catalog, capabilities);\n      })\n    );\n  }\n\n  loadCatalogCompositeLayerItems(catalog: Catalog): Observable<CatalogItem[]> {\n    const compositeCatalog = (catalog as CompositeCatalog).composite;\n\n    const catalogsFromInstance = [] as Catalog[];\n    compositeCatalog.map((component: Catalog) => {\n      component.sortDirection = catalog.sortDirection; // propagate sortDirection with parent value\n      catalogsFromInstance.push(\n        CatalogFactory.createInstanceCatalog(component, this)\n      );\n    });\n\n    // get CatalogItems for each original Catalog-----------------------------------------------------\n    const request1$ = [];\n    catalogsFromInstance.map((component: Catalog) =>\n      request1$.push(component.collectCatalogItems())\n    );\n\n    // integrate imposed group -----------------------------------------------------\n    let request2$ = [];\n\n    function flatDeepLayer(arr) {\n      return arr.reduce(\n        (acc, val) =>\n          acc.concat(\n            val.type === CatalogItemType.Group ? flatDeepLayer(val.items) : val\n          ),\n        []\n      );\n    }\n\n    if (\n      Object.keys(compositeCatalog).find((k) => compositeCatalog[k].groupImpose)\n    ) {\n      const pushImposeGroup = (item, index) => {\n        const c = catalogsFromInstance[index];\n        const outGroupImpose = Object.assign({}, c.groupImpose);\n        outGroupImpose.address = c.id;\n        outGroupImpose.type = CatalogItemType.Group;\n        outGroupImpose.externalProvider = c.externalProvider;\n        if (outGroupImpose.sortDirection === undefined) {\n          outGroupImpose.sortDirection = c.sortDirection;\n        }\n        outGroupImpose.items = [];\n\n        const flatLayer = flatDeepLayer(item);\n        flatLayer.map(\n          (v) => (v.address = `${outGroupImpose.address}.${outGroupImpose.id}`)\n        );\n        outGroupImpose.items = flatLayer;\n\n        return outGroupImpose;\n      };\n\n      request2$ = request1$.map((obs, idx) =>\n        obs.pipe(\n          map((items) =>\n            compositeCatalog[idx].groupImpose\n              ? pushImposeGroup(items, idx)\n              : items\n          )\n        )\n      );\n    } else {\n      request2$ = request1$;\n    }\n\n    // concat Group -----------------------------------------------------\n    const request3$ = zip(...request2$).pipe(\n      map(\n        (output: CatalogItem[]) => [].concat(...output) // [].concat.apply([], result1\n      )\n    );\n\n    // merge Group (first level only) -----------------------------------------------------\n    const groupByGroupId = (data, keyFn) =>\n      data.reduce((acc, group) => {\n        const groupId = keyFn(group);\n        const ind = acc.find((x) => x.id === groupId);\n\n        if (!ind) {\n          acc[acc.length] = group;\n        } else {\n          const ix = acc.indexOf(ind);\n          if (acc[ix].address.split('|').indexOf(group.address) === -1) {\n            acc[ix].address = `${acc[ix].address}|${group.address}`;\n          }\n          acc[ix].items.push(...group.items);\n        }\n        return acc;\n      }, []);\n\n    // merge Layer for each Level (catalog, group(recursive))\n    const recursiveGroupByLayerAddress = (items, keyFn) =>\n      items.reduce((acc, item, idx, arr) => {\n        const layerTitle = keyFn(item);\n        const outItem = Object.assign({}, item);\n\n        if (item.type === CatalogItemType.Layer) {\n          // same title, same address => result: only one item is kept\n\n          // same title, address diff\n          const indicesMatchTitle = [];\n          const indicesMatchNewMetadataUrl = []; // metadata\n          const diffAddress = arr.filter((x, i) => {\n            let bInd = false;\n            if (x.title === layerTitle && x.type === CatalogItemType.Layer) {\n              if (i !== idx && x.address !== item.address) {\n                bInd = true;\n              }\n              indicesMatchTitle.push(i);\n            }\n            return bInd;\n          }); // $& i !== idx\n\n          if (diffAddress.length > 0) {\n            let nPosition = indicesMatchTitle.findIndex((x) => x === idx) + 1;\n            outItem.title = `${item.title} (${nPosition})`; // source: ${item.address.split('.')[0]}\n            nPosition =\n              indicesMatchNewMetadataUrl.findIndex((x) => x === idx) + 1;\n            outItem.newMetadataUrl = `${item.newMetadataUrl} (${nPosition})`; // source: ${item.address.split('.')[0]}\n          }\n\n          const exist = acc.find(\n            (x) => x.title === outItem.title && x.type === CatalogItemType.Layer\n          );\n          if (!exist) {\n            acc[acc.length] = outItem;\n          }\n        } else if (item.type === CatalogItemType.Group) {\n          outItem.items = recursiveGroupByLayerAddress(\n            item.items,\n            (layer) => layer.title\n          );\n          acc[acc.length] = outItem;\n        }\n\n        return acc;\n      }, []);\n\n    const request4$ = request3$.pipe(\n      map((output) => groupByGroupId(output, (group) => group.id)),\n      map((output) => [].concat(...output)),\n      map((data) => recursiveGroupByLayerAddress(data, (layer) => layer.title))\n    );\n\n    return request4$;\n  }\n\n  private getCatalogCapabilities(catalog: Catalog): Observable<any> {\n    const sType: string = TypeCatalog[catalog.type as string];\n    return this.capabilitiesService\n      .getCapabilities(sType as any, catalog.url, catalog.version)\n      .pipe(\n        catchError((e) => {\n          this.messageService.error(\n            catalog.title\n              ? 'igo.geo.catalog.unavailable'\n              : 'igo.geo.catalog.someUnavailable',\n            'igo.geo.catalog.unavailableTitle',\n            undefined,\n            catalog.title ? { value: catalog.title } : undefined\n          );\n          console.error(e);\n          return of(undefined);\n        })\n      );\n  }\n\n  private computeForcedProperties(\n    layerNameFromCatalog: string,\n    forcedProperties: ForcedProperty[]\n  ): ForcedProperty {\n    if (!forcedProperties || forcedProperties.length === 0) {\n      return;\n    }\n    const returnProperty: ForcedProperty = {\n      layerName: layerNameFromCatalog,\n      title: undefined,\n      metadataUrl: undefined,\n      metadataAbstract: undefined,\n      metadataAbstractAll: undefined,\n      metadataUrlAll: undefined\n    };\n    //process wildcard before\n    // if there is a * wildcard\n    const forcedPropertiesForAllLayers = forcedProperties.find(\n      (f) => f.layerName === '*'\n    );\n    if (forcedPropertiesForAllLayers) {\n      // metadataAbstractAll\n      if (forcedPropertiesForAllLayers.metadataAbstractAll) {\n        returnProperty.metadataAbstractAll =\n          forcedPropertiesForAllLayers.metadataAbstractAll;\n      }\n      // metadataUrlAll\n      if (forcedPropertiesForAllLayers.metadataUrlAll) {\n        returnProperty.metadataUrlAll =\n          forcedPropertiesForAllLayers.metadataUrlAll;\n      }\n    }\n    forcedProperties.map((forcedProperty) => {\n      // if match found\n      if (layerNameFromCatalog === forcedProperty.layerName) {\n        // title\n        if (forcedProperty.title) {\n          returnProperty.title = forcedProperty.title;\n        }\n        // metadataUrl\n        if (forcedProperty.metadataUrl) {\n          returnProperty.metadataUrl = forcedProperty.metadataUrl;\n        }\n        // metadataAbstract\n        if (forcedProperty.metadataAbstract) {\n          returnProperty.metadataAbstract = forcedProperty.metadataAbstract;\n        }\n      }\n    });\n    return returnProperty;\n  }\n\n  /// WMS\n\n  private prepareCatalogItemLayer(layer, idParent, layersQueryFormat, catalog) {\n    const configuredQueryFormat = this.retrieveLayerInfoFormat(\n      layer.Name,\n      layersQueryFormat\n    );\n\n    const legendOptions =\n      catalog.showLegend && layer.Style\n        ? this.capabilitiesService.getStyle(layer.Style)\n        : undefined;\n\n    const params = Object.assign({}, catalog.queryParams, {\n      LAYERS: layer.Name,\n      VERSION: catalog.version\n    } as WMSDataSourceOptionsParams);\n\n    const baseSourceOptions = {\n      type: 'wms',\n      url: catalog.url,\n      crossOrigin: catalog.setCrossOriginAnonymous ? 'anonymous' : undefined,\n      queryFormat: configuredQueryFormat,\n      queryHtmlTarget:\n        configuredQueryFormat === QueryFormat.HTML ||\n        configuredQueryFormat === QueryFormat.HTMLGML2\n          ? 'iframe'\n          : undefined,\n      optionsFromCapabilities: true\n    };\n\n    const sourceOptions = Object.assign(\n      {},\n      baseSourceOptions,\n      catalog.sourceOptions,\n      { params }\n    ) as WMSDataSourceOptions;\n\n    const propertiesToForce = this.computeForcedProperties(\n      layer.Name,\n      catalog.forcedProperties\n    );\n    let baseAbstract;\n    let extern = true;\n    if (layer.Abstract) {\n      baseAbstract = layer.Abstract;\n    } else if (!layer.Abstract && catalog.abstract) {\n      baseAbstract = catalog.abstract;\n    }\n    const layerOnlineResource =\n      layer?.DataURL && layer?.DataURL.length > 0\n        ? layer?.DataURL[0].OnlineResource\n        : undefined;\n\n    const metadataUrl =\n      propertiesToForce?.metadataUrl ||\n      propertiesToForce?.metadataUrlAll ||\n      layerOnlineResource;\n    const metadataAbstract =\n      propertiesToForce?.metadataAbstract ||\n      propertiesToForce?.metadataAbstractAll ||\n      baseAbstract;\n\n    if (\n      !propertiesToForce?.metadataUrl &&\n      !propertiesToForce?.metadataUrlAll &&\n      (propertiesToForce?.metadataAbstract ||\n        propertiesToForce?.metadataAbstractAll)\n    ) {\n      extern = false;\n    }\n    if (\n      propertiesToForce?.metadataAbstract &&\n      propertiesToForce?.metadataUrlAll\n    ) {\n      extern = false;\n    }\n\n    const layerPrepare = {\n      id: generateIdFromSourceOptions(sourceOptions),\n      type: CatalogItemType.Layer,\n      title: propertiesToForce?.title ? propertiesToForce.title : layer.Title,\n      address: idParent,\n      externalProvider: catalog.externalProvider || false,\n      options: {\n        maxResolution: getResolutionFromScale(layer.MaxScaleDenominator),\n        minResolution: getResolutionFromScale(layer.MinScaleDenominator),\n        metadata: {\n          url: metadataUrl,\n          extern,\n          abstract: metadataAbstract,\n          type: baseSourceOptions.type\n        },\n        legendOptions,\n        tooltip: { type: catalog.tooltipType },\n        sourceOptions\n      }\n    } as CatalogItem;\n\n    return ObjectUtils.removeUndefined(layerPrepare);\n  }\n\n  private prepareCatalogItemGroup(\n    itemListIn,\n    regexes,\n    idGroup,\n    layersQueryFormat,\n    catalog\n  ) {\n    const groupPrepare = {\n      id: idGroup,\n      type: CatalogItemType.Group,\n      title: itemListIn.Title,\n      address: catalog.id,\n      externalProvider: catalog.externalProvider || false,\n      sortDirection: catalog.sortDirection, // propagate sortDirection\n      items: itemListIn.Layer.reduce((items: CatalogItem[], layer: any) => {\n        if (layer.Layer !== undefined) {\n          // recursive, check next level\n          const idGroupItemNextLevel =\n            idGroup + `.group.${layer.Name || layer.Layer[0].Name}`;\n          const groupItem: CatalogItemGroup = this.prepareCatalogItemGroup(\n            layer,\n            regexes,\n            idGroupItemNextLevel,\n            layersQueryFormat,\n            catalog\n          );\n\n          items.push(groupItem);\n        } else {\n          if (this.testLayerRegexes(layer.Name, regexes) === false) {\n            return items;\n          }\n\n          const layerItem: CatalogItemLayer<ImageLayerOptions> =\n            this.prepareCatalogItemLayer(\n              layer,\n              idGroup,\n              layersQueryFormat,\n              catalog\n            );\n\n          items.push(layerItem);\n        }\n        return items;\n      }, [])\n    };\n    return groupPrepare;\n  }\n\n  private includeRecursiveItems(\n    catalog: Catalog,\n    itemListIn: any,\n    itemsPrepare: CatalogItem[],\n    loopLevel = 0\n  ) {\n    // Dig all levels until last level (layer object are not defined on last level)\n    const regexes = (catalog.regFilters || []).map(\n      (pattern: string) => new RegExp(pattern)\n    );\n    if (!itemListIn.Layer) {\n      return;\n    }\n\n    for (const item of itemListIn.Layer) {\n      if (item.Layer !== undefined) {\n        // recursive, check next level\n        this.includeRecursiveItems(catalog, item, itemsPrepare, loopLevel + 1);\n        continue;\n      }\n\n      const layersQueryFormat = this.findCatalogInfoFormat(catalog);\n\n      // group(with layers) and layer(without group) level 1\n      if (loopLevel !== 0) {\n        // TODO: Slice that into multiple methods\n        // Define object of group layer\n        const idGroupItem = `catalog.group.${itemListIn.Name || item.Name}`;\n        const groupItem = this.prepareCatalogItemGroup(\n          itemListIn,\n          regexes,\n          idGroupItem,\n          layersQueryFormat,\n          catalog\n        );\n\n        if (groupItem.items.length !== 0) {\n          itemsPrepare.push(groupItem);\n        }\n\n        // Break the group (don't add a group of layer for each of their layer!)\n        break;\n      } else {\n        // layer without group\n        if (this.testLayerRegexes(item.Name, regexes) !== false) {\n          const layerItem = this.prepareCatalogItemLayer(\n            item,\n            catalog.id,\n            layersQueryFormat,\n            catalog\n          );\n          itemsPrepare.push(layerItem);\n        }\n      }\n    }\n  }\n\n  /// WMTS\n\n  private getWMTSItems(\n    catalog,\n    capabilities: Record<string, any>\n  ): CatalogItemLayer[] {\n    if (!capabilities) {\n      return [];\n    }\n    const layers = capabilities.Contents.Layer;\n    const regexes = (catalog.regFilters || []).map(\n      (pattern: string) => new RegExp(pattern)\n    );\n\n    if (\n      capabilities.ServiceIdentification &&\n      capabilities.ServiceIdentification.Abstract &&\n      capabilities.ServiceIdentification.Abstract.length\n    ) {\n      catalog.abstract = capabilities.ServiceIdentification.Abstract;\n    }\n\n    return layers\n      .map((layer: any) => {\n        const propertiesToForce = this.computeForcedProperties(\n          layer.Title,\n          catalog.forcedProperties\n        );\n        let extern = true;\n\n        const metadataUrl =\n          propertiesToForce?.metadataUrl || propertiesToForce?.metadataUrlAll;\n        const metadataAbstract =\n          propertiesToForce?.metadataAbstract ||\n          propertiesToForce?.metadataAbstractAll ||\n          catalog.abstract;\n\n        if (\n          !propertiesToForce?.metadataUrl &&\n          !propertiesToForce?.metadataUrlAll &&\n          (propertiesToForce?.metadataAbstract ||\n            propertiesToForce?.metadataAbstractAll)\n        ) {\n          extern = false;\n        }\n        if (\n          propertiesToForce?.metadataAbstract &&\n          propertiesToForce?.metadataUrlAll\n        ) {\n          extern = false;\n        }\n\n        if (this.testLayerRegexes(layer.Identifier, regexes) === false) {\n          return undefined;\n        }\n        const params = Object.assign({}, catalog.queryParams, {\n          version: '1.0.0'\n        });\n        const baseSourceOptions = {\n          type: 'wmts',\n          url: catalog.url,\n          crossOrigin: catalog.setCrossOriginAnonymous\n            ? 'anonymous'\n            : undefined,\n          layer: layer.Identifier,\n          matrixSet: catalog.matrixSet,\n          optionsFromCapabilities: true,\n          requestEncoding: catalog.requestEncoding || 'KVP',\n          style: 'default'\n        } as WMTSDataSourceOptions;\n        const sourceOptions = Object.assign(\n          {},\n          baseSourceOptions,\n          catalog.sourceOptions,\n          { params }\n        ) as WMTSDataSourceOptions;\n\n        return ObjectUtils.removeUndefined({\n          id: generateIdFromSourceOptions(sourceOptions),\n          type: CatalogItemType.Layer,\n          title: propertiesToForce?.title\n            ? propertiesToForce.title\n            : layer.Title,\n          address: catalog.id,\n          externalProvider: catalog.externalProvider,\n          options: {\n            sourceOptions,\n            metadata: {\n              url: metadataUrl,\n              extern,\n              abstract: metadataAbstract,\n              type: baseSourceOptions.type\n            }\n          }\n        } as CatalogItem);\n      })\n      .filter((item: CatalogItemLayer | undefined) => item !== undefined);\n  }\n\n  private getArcGISRESTItems(\n    catalog: Catalog,\n    capabilities\n  ): CatalogItemLayer[] {\n    if (!capabilities || !capabilities.layers) {\n      this.messageService.error(\n        'igo.geo.catalog.someUnavailable',\n        'igo.geo.catalog.unavailableTitle'\n      );\n      return [];\n    }\n    const groups: ArcGISRestCapabilitiesLayer[] = !capabilities.layers\n      ? []\n      : capabilities.layers.filter((layer) => layer.subLayerIds);\n    const layers: ArcGISRestCapabilitiesLayer[] = !capabilities.layers\n      ? []\n      : capabilities.layers.filter(\n          (layer) =>\n            !layer.type ||\n            layer.type === ArcGISRestCapabilitiesLayerTypes.FeatureLayer ||\n            layer.type === ArcGISRestCapabilitiesLayerTypes.RasterLayer\n        );\n\n    const regexes = (catalog.regFilters || []).map(\n      (pattern: string) => new RegExp(pattern)\n    );\n\n    const items: CatalogItemLayer[] = layers\n      .map((layer: ArcGISRestCapabilitiesLayer) => {\n        const propertiesToForce = this.computeForcedProperties(\n          layer.name,\n          catalog.forcedProperties\n        );\n        const baseAbstract = catalog.abstract;\n        let extern = true;\n\n        const metadataUrl =\n          propertiesToForce?.metadataUrl || propertiesToForce?.metadataUrlAll;\n        const metadataAbstract =\n          propertiesToForce?.metadataAbstract ||\n          propertiesToForce?.metadataAbstractAll ||\n          baseAbstract;\n\n        if (\n          !propertiesToForce?.metadataUrl &&\n          !propertiesToForce?.metadataUrlAll &&\n          (propertiesToForce?.metadataAbstract ||\n            propertiesToForce?.metadataAbstractAll)\n        ) {\n          extern = false;\n        }\n        if (\n          propertiesToForce?.metadataAbstract &&\n          propertiesToForce?.metadataUrlAll\n        ) {\n          extern = false;\n        }\n\n        if (this.testLayerRegexes(layer.id.toString(), regexes) === false) {\n          return undefined;\n        }\n        const baseSourceOptions: ArcGISRestDataSourceOptions &\n          QueryableDataSourceOptions = {\n          type: TypeCatalog[catalog.type] as any,\n          url: catalog.url,\n          layer: layer.id.toString(),\n          queryable: true,\n          queryFormat: QueryFormat.ESRIJSON,\n          optionsFromCapabilities: true\n        };\n        const sourceOptions: ArcGISRestDataSourceOptions = Object.assign(\n          {},\n          baseSourceOptions,\n          catalog.sourceOptions\n        );\n        return ObjectUtils.removeUndefined({\n          id: generateIdFromSourceOptions(sourceOptions),\n          type: CatalogItemType.Layer,\n          title: propertiesToForce?.title\n            ? propertiesToForce.title\n            : layer.name,\n          externalProvider: catalog.externalProvider,\n          options: {\n            sourceOptions,\n            minResolution: getResolutionFromScale(layer.maxScale),\n            maxResolution: getResolutionFromScale(layer.minScale),\n            metadata: {\n              url: metadataUrl,\n              extern,\n              abstract: metadataAbstract,\n              type: catalog.type\n            }\n          }\n        } as CatalogItem);\n      })\n      .filter((item: CatalogItemLayer | undefined) => item !== undefined);\n    const groupHandledLayersIds: string[] = [];\n    const groupedItems: CatalogItemLayer[] = groups\n      .map((group) => {\n        return {\n          options: undefined,\n          address: `catalog.group.${group.name}`,\n          id: `catalog.group.${group.name}`,\n          type: CatalogItemType.Group,\n          externalProvider: catalog.externalProvider,\n          sortDirection: catalog.sortDirection,\n          title: group.name,\n          items: items\n            .filter((i) => {\n              const subLayerIdsStr = group.subLayerIds.map((r) => r.toString());\n              return subLayerIdsStr.includes(\n                (i.options.sourceOptions as ArcGISRestDataSourceOptions).layer\n              );\n            })\n            .map((i) => {\n              groupHandledLayersIds.push(i.id);\n              return Object.assign({}, i, {\n                address: `catalog.group.${group.name}`\n              });\n            })\n        };\n      })\n      .filter((g) => g.items.length);\n\n    if (groups) {\n      const TitleOrId = catalog.title || catalog.id;\n      const nonHandledLayers = items\n        .filter((i) => !groupHandledLayersIds.includes(i.id))\n        .map((i) =>\n          Object.assign({}, i, {\n            address: `catalog.group.${TitleOrId}`\n          })\n        );\n      if (nonHandledLayers.length) {\n        const nonHandledGroup = {\n          options: undefined,\n          address: `catalog.group.${TitleOrId}`,\n          id: `catalog.group.${TitleOrId}`,\n          type: CatalogItemType.Group,\n          externalProvider: catalog.externalProvider,\n          sortDirection: catalog.sortDirection,\n          title: TitleOrId,\n          items: nonHandledLayers\n        };\n        groupedItems.push(nonHandledGroup);\n      }\n    }\n\n    return groups ? groupedItems : items;\n  }\n\n  private testLayerRegexes(layerName: string, regexes: RegExp[]): boolean {\n    if (regexes.length === 0) {\n      return true;\n    }\n    return regexes.find((regex: RegExp) => regex.test(layerName)) !== undefined;\n  }\n\n  private retrieveLayerInfoFormat(\n    layerNameFromCatalog: string,\n    layersQueryFormat: { layer: string; queryFormat: QueryFormat }[]\n  ): QueryFormat {\n    const currentLayerInfoFormat = layersQueryFormat.find(\n      (f) => f.layer === layerNameFromCatalog\n    );\n    const baseInfoFormat = layersQueryFormat.find((f) => f.layer === '*');\n    let queryFormat: QueryFormat;\n    if (currentLayerInfoFormat) {\n      queryFormat = currentLayerInfoFormat.queryFormat;\n    } else if (baseInfoFormat) {\n      queryFormat = baseInfoFormat.queryFormat;\n    }\n    return queryFormat;\n  }\n\n  private findCatalogInfoFormat(\n    catalog: Catalog\n  ): { layer: string; queryFormat: QueryFormat }[] {\n    const layersQueryFormat: { layer: string; queryFormat: QueryFormat }[] = [];\n    if (!catalog.queryFormat) {\n      return layersQueryFormat;\n    }\n    Object.keys(catalog.queryFormat).forEach((configuredInfoFormat) => {\n      if (catalog.queryFormat[configuredInfoFormat] instanceof Array) {\n        catalog.queryFormat[configuredInfoFormat].forEach((layerName) => {\n          if (\n            !layersQueryFormat.find((specific) => specific.layer === layerName)\n          ) {\n            layersQueryFormat.push({\n              layer: layerName,\n              queryFormat: configuredInfoFormat as QueryFormat\n            });\n          }\n        });\n      } else {\n        if (\n          !layersQueryFormat.find(\n            (specific) =>\n              specific.layer === catalog.queryFormat[configuredInfoFormat]\n          )\n        ) {\n          layersQueryFormat.push({\n            layer: catalog.queryFormat[configuredInfoFormat],\n            queryFormat: configuredInfoFormat as QueryFormat\n          });\n        }\n      }\n    });\n    return layersQueryFormat;\n  }\n}\n\nclass CatalogFactory {\n  public static createInstanceCatalog(\n    options: Catalog,\n    catalogService: CatalogService\n  ): Catalog {\n    let catalog: Catalog;\n    // eslint-disable-next-line no-prototype-builtins\n    if (options.hasOwnProperty('composite')) {\n      catalog = new CompositeCatalog(options, (catalog: Catalog) =>\n        catalogService.loadCatalogCompositeLayerItems(catalog)\n      );\n    } else if (options.type === TypeCatalog[TypeCatalog.baselayers]) {\n      catalog = new BaselayersCatalog(options, (catalog: Catalog) =>\n        catalogService.loadCatalogBaseLayerItems(catalog)\n      );\n    } else if (options.type === TypeCatalog[TypeCatalog.arcgisrest]) {\n      catalog = new ArcGISRestCatalog(options, (catalog: Catalog) =>\n        catalogService.loadCatalogArcGISRestItems(catalog)\n      );\n    } else if (options.type === TypeCatalog[TypeCatalog.tilearcgisrest]) {\n      catalog = new TileOrImageArcGISRestCatalog(\n        options,\n        (catalog: Catalog) =>\n          catalogService.loadCatalogArcGISRestItems(catalog),\n        TypeCatalog.tilearcgisrest\n      );\n    } else if (options.type === TypeCatalog[TypeCatalog.imagearcgisrest]) {\n      catalog = new TileOrImageArcGISRestCatalog(\n        options,\n        (catalog: Catalog) =>\n          catalogService.loadCatalogArcGISRestItems(catalog),\n        TypeCatalog.imagearcgisrest\n      );\n    } else if (options.type === TypeCatalog[TypeCatalog.wmts]) {\n      catalog = new WMTSCatalog(options, (catalog: Catalog) =>\n        catalogService.loadCatalogWMTSLayerItems(catalog)\n      );\n    } else {\n      catalog = new WMSCatalog(options, (catalog: Catalog) =>\n        catalogService.loadCatalogWMSLayerItems(catalog)\n      );\n    }\n\n    return catalog;\n  }\n}\n","import { AsyncPipe, NgClass, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IgoBadgeIconDirective } from '@igo2/common/badge';\nimport { getEntityIcon, getEntityTitle } from '@igo2/common/entity';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nimport { LayerLegendComponent } from '../../layer/layer-legend/layer-legend.component';\nimport { LayerService } from '../../layer/shared/layer.service';\nimport { Layer, TooltipType } from '../../layer/shared/layers';\nimport { IgoMap } from '../../map/shared/map';\nimport { MetadataButtonComponent } from '../../metadata/metadata-button/metadata-button.component';\nimport { MetadataLayerOptions } from '../../metadata/shared/metadata.interface';\nimport { AddedChangeEmitter, CatalogItemLayer } from '../shared';\n\n/**\n * Catalog browser layer item\n */\n@Component({\n  selector: 'igo-catalog-browser-layer',\n  templateUrl: './catalog-browser-layer.component.html',\n  styleUrls: ['./catalog-browser-layer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatListModule,\n    NgIf,\n    MatIconModule,\n    NgClass,\n    MatTooltipModule,\n    MatButtonModule,\n    MetadataButtonComponent,\n    MatBadgeModule,\n    IgoBadgeIconDirective,\n    LayerLegendComponent,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class CatalogBrowserLayerComponent implements OnInit, OnDestroy {\n  public inRange$ = new BehaviorSubject<boolean>(true);\n  public isPreview$ = new BehaviorSubject<boolean>(false);\n  public isVisible$ = new BehaviorSubject<boolean>(false);\n  private isPreview$$: Subscription;\n  private resolution$$: Subscription;\n  private layers$$: Subscription;\n  private lastTimeoutRequest;\n\n  public layerLegendShown$ = new BehaviorSubject(false);\n  public igoLayer$ = new BehaviorSubject<Layer>(undefined);\n\n  private mouseInsideAdd = false;\n\n  @Input() resolution: number;\n\n  @Input() catalogAllowLegend = false;\n\n  /**\n   * Catalog layer\n   */\n  @Input() layer: CatalogItemLayer;\n\n  @Input() map: IgoMap;\n\n  /**\n   * Whether the layer is already added to the map\n   */\n  @Input() added = false;\n\n  /**\n   * Event emitted when the add/remove button is clicked\n   */\n  @Output() addedChange = new EventEmitter<AddedChangeEmitter>();\n\n  @Output() addedLayerIsPreview = new EventEmitter<boolean>();\n\n  /**\n   * @internal\n   */\n  get title(): string {\n    return getEntityTitle(this.layer);\n  }\n\n  /**\n   * @internal\n   */\n  get icon(): string {\n    return getEntityIcon(this.layer) || 'layers';\n  }\n\n  constructor(private layerService: LayerService) {}\n\n  ngOnInit(): void {\n    this.isPreview$$ = this.isPreview$.subscribe((value) =>\n      this.addedLayerIsPreview.emit(value)\n    );\n\n    this.layers$$ = this.map.layerController.all$.subscribe(() => {\n      this.isVisible();\n    });\n\n    this.resolution$$ = this.map.viewController.resolution$.subscribe(\n      (resolution) => {\n        this.isInResolutionsRange(resolution);\n        this.isVisible();\n      }\n    );\n  }\n\n  ngOnDestroy() {\n    this.isPreview$$.unsubscribe();\n    this.resolution$$.unsubscribe();\n    this.layers$$.unsubscribe();\n  }\n\n  computeTitleTooltip(): string {\n    const layerOptions = this.layer.options;\n    if (!layerOptions.tooltip) {\n      return getEntityTitle(this.layer);\n    }\n    const layerTooltip = layerOptions.tooltip;\n    const layerMetadata = (layerOptions as MetadataLayerOptions).metadata;\n    switch (layerOptions.tooltip.type) {\n      case TooltipType.TITLE:\n        return this.layer.title;\n      case TooltipType.ABSTRACT:\n        if (layerMetadata && layerMetadata.abstract) {\n          return layerMetadata.abstract;\n        } else {\n          return this.layer.title;\n        }\n      case TooltipType.CUSTOM:\n        if (layerTooltip && layerTooltip.text) {\n          return layerTooltip.text;\n        } else {\n          return this.layer.title;\n        }\n      default:\n        return this.layer.title;\n    }\n  }\n\n  /**\n   * On mouse event, mouseenter /mouseleave\n   * @internal\n   */\n  onMouseEvent(event) {\n    this.onToggleClick(event);\n  }\n\n  askForLegend() {\n    this.layerLegendShown$.next(!this.layerLegendShown$.value);\n    this.layerService\n      .createAsyncLayer(this.layer.options)\n      .pipe(first())\n      .subscribe((layer) => this.igoLayer$.next(layer));\n  }\n\n  /**\n   * On toggle button click, emit the added change event\n   * @internal\n   */\n  onToggleClick(event) {\n    if (typeof this.lastTimeoutRequest !== 'undefined') {\n      clearTimeout(this.lastTimeoutRequest);\n    }\n    if (event.type === 'mouseenter' && this.mouseInsideAdd) {\n      return;\n    }\n    switch (event.type) {\n      case 'click':\n        if (!this.isPreview$.value) {\n          if (this.added) {\n            this.remove(event);\n          } else {\n            this.add(event);\n          }\n        }\n        this.isPreview$.next(false);\n        break;\n      case 'mouseenter':\n        if (!this.isPreview$.value && !this.added) {\n          this.lastTimeoutRequest = setTimeout(() => {\n            this.add(event);\n            this.isPreview$.next(true);\n          }, 500);\n        }\n        this.mouseInsideAdd = true;\n        break;\n      case 'mouseleave':\n        if (this.isPreview$.value) {\n          this.remove(event);\n          this.isPreview$.next(false);\n        }\n        this.mouseInsideAdd = false;\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Emit added change event with added = true\n   */\n  private add(event: Event) {\n    if (!this.added) {\n      this.added = true;\n      this.addedChange.emit({ added: true, layer: this.layer, event });\n    }\n  }\n\n  /**\n   * Emit added change event with added = false\n   */\n  private remove(event: Event) {\n    if (this.added) {\n      this.added = false;\n      this.addedChange.emit({ added: false, layer: this.layer, event });\n    }\n  }\n\n  haveGroup(): boolean {\n    return !(!this.layer.address || this.layer.address.split('.').length === 1);\n  }\n\n  isInResolutionsRange(resolution: number) {\n    const minResolution =\n      !this.layer.options.minResolution ||\n      Number.isNaN(this.layer.options.minResolution)\n        ? 0\n        : this.layer.options.minResolution;\n    const maxResolution =\n      !this.layer.options.maxResolution ||\n      Number.isNaN(this.layer.options.maxResolution)\n        ? Infinity\n        : this.layer.options.maxResolution;\n    this.inRange$.next(\n      resolution >= minResolution && resolution <= maxResolution\n    );\n  }\n\n  isVisible() {\n    if (this.layer?.id) {\n      const layer = this.map.layerController.getById(this.layer?.id);\n      this.isVisible$.next(layer?.displayed);\n    }\n  }\n\n  getBadgeIcon() {\n    if (this.inRange$.getValue()) {\n      return this.isVisible$.getValue() ? '' : 'visibility_off';\n    } else {\n      return 'visibility_off';\n    }\n  }\n\n  computeTooltip(): string {\n    if (this.added) {\n      if (this.isPreview$.value) {\n        return 'igo.geo.catalog.layer.addToMap';\n      } else if (this.inRange$.value) {\n        return this.isVisible$.value\n          ? 'igo.geo.catalog.layer.removeFromMap'\n          : 'igo.geo.catalog.layer.removeFromMapNotVisible';\n      } else {\n        return 'igo.geo.catalog.layer.removeFromMapOutRange';\n      }\n    } else {\n      return this.inRange$.value\n        ? 'igo.geo.catalog.layer.addToMap'\n        : 'igo.geo.catalog.layer.addToMapOutRange';\n    }\n  }\n}\n","<mat-list-item>\n  <mat-icon\n    *ngIf=\"haveGroup()\"\n    class=\"catalog-browser-layer-carret\"\n    matListItemIcon\n  ></mat-icon>\n  <span\n    matListItemTitle\n    matTooltipShowDelay=\"500\"\n    [ngClass]=\"catalogAllowLegend ? 'igo-cataloglayer-title' : ''\"\n    (click)=\"askForLegend()\"\n    [matTooltip]=\"computeTitleTooltip()\"\n  >\n    {{ title }}\n  </span>\n\n  <div matListItemMeta>\n    <button *ngIf=\"layer.externalProvider\" disabled=\"true\" mat-icon-button>\n      <mat-icon\n        class=\"igo-cataloglayer-external-icon\"\n        tooltip-position=\"below\"\n        matTooltipShowDelay=\"500\"\n        [matTooltip]=\"'igo.geo.catalog.externalProvider.layer' | translate\"\n        color=\"primary\"\n        (click)=\"$event.stopPropagation()\"\n      >\n        public\n      </mat-icon>\n    </button>\n    <igo-metadata-button [layer]=\"$any(layer)\"></igo-metadata-button>\n\n    <button\n      (mouseenter)=\"onMouseEvent($event)\"\n      (mouseleave)=\"onMouseEvent($event)\"\n      mat-icon-button\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"computeTooltip() | translate\"\n      [color]=\"(isPreview$ | async) ? '' : added ? 'warn' : ''\"\n      (click)=\"onToggleClick($event)\"\n    >\n      <mat-icon\n        aria-hidden=\"false\"\n        matBadge=\"icon\"\n        [igoMatBadgeIcon]=\"getBadgeIcon()\"\n        igoMatBadgeColor=\"rgba(0,0,0,0.87)\"\n        igoMatBadgeBackgroundColor=\"none\"\n        [igoMatBadgeInverseColor]=\"true\"\n        [matBadgeHidden]=\"\n          ((inRange$ | async) && (isVisible$ | async) === true) ||\n          ((inRange$ | async) && !added) ||\n          ((inRange$ | async) && (isPreview$ | async))\n        \"\n        [matBadgeDisabled]=\"(inRange$ | async) === false\"\n        matBadgeSize=\"small\"\n        matBadgePosition=\"after\"\n      >\n        {{ (isPreview$ | async) ? 'plus' : added ? 'delete' : 'add' }}\n      </mat-icon>\n    </button>\n  </div>\n</mat-list-item>\n\n<div #legend class=\"igo-cataloglayer-legend-container\">\n  <igo-layer-legend\n    *ngIf=\"\n      (layerLegendShown$ | async) && (igoLayer$ | async) && catalogAllowLegend\n    \"\n    [layer]=\"igoLayer$ | async\"\n  >\n  </igo-layer-legend>\n</div>\n","import { AsyncPipe, NgFor, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { CollapseDirective } from '@igo2/common/collapsible';\nimport type { EntityStateManager } from '@igo2/common/entity';\nimport { EntityStore } from '@igo2/common/entity';\nimport { ListItemDirective } from '@igo2/common/list';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { IgoMap } from '../../map/shared/map';\nimport {\n  AddedChangeEmitter,\n  AddedChangeGroupEmitter,\n  Catalog,\n  CatalogItem,\n  CatalogItemGroup,\n  CatalogItemState,\n  CatalogItemType\n} from '../shared';\nimport { CatalogBrowserLayerComponent } from './catalog-browser-layer.component';\n\n/**\n * Catalog browser group item\n */\n@Component({\n  selector: 'igo-catalog-browser-group',\n  templateUrl: './catalog-browser-group.component.html',\n  styleUrls: ['./catalog-browser-group.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatListModule,\n    MatIconModule,\n    CollapseDirective,\n    MatTooltipModule,\n    NgIf,\n    MatButtonModule,\n    NgFor,\n    CatalogBrowserLayerComponent,\n    ListItemDirective,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class CatalogBrowserGroupComponent implements OnInit, OnDestroy {\n  /**\n   * Group's items store\n   * @internal\n   */\n  store = new EntityStore<CatalogItem, CatalogItemState>([]);\n\n  /**\n   * Whether all the layers of the group are added\n   * @internal\n   */\n  added$ = new BehaviorSubject<boolean>(false);\n  preview$ = new BehaviorSubject<boolean>(false);\n  /**\n   * Whether the toggle button is disabled\n   * @internal\n   */\n  disabled$ = new BehaviorSubject<boolean>(false);\n\n  /**\n   * Catalog\n   */\n  @Input() catalog: Catalog;\n\n  /**\n   * Catalog group\n   */\n  @Input() group: CatalogItemGroup;\n\n  @Input() map: IgoMap;\n\n  /**\n   * Whether the group is collapsed\n   */\n  @Input() collapsed = true;\n\n  @Input() resolution: number;\n\n  @Input() catalogAllowLegend = false;\n\n  /**\n   * Whether the group can be toggled when it's collapsed\n   */\n  @Input() toggleCollapsed = true;\n\n  /**\n   * Parent catalog's items store state. Groups share a unique\n   * EntityState that tracks the group and it's layers state (whether they are added or not).\n   * Sharing a unique state would also allow us to expand this component to allow\n   * the selection of a layer while unselecting any layer already selected in another group.\n   * This could be useful to display some layer info before adding it, for example.\n   */\n  @Input() state: EntityStateManager<CatalogItem, CatalogItemState>;\n\n  /**\n   * Event emitted when the add/remove button of the group is clicked\n   */\n  @Output() addedChange = new EventEmitter<AddedChangeGroupEmitter>();\n\n  /**\n   * Event emitted when the add/remove button of a layer is clicked\n   */\n  @Output() layerAddedChange = new EventEmitter<AddedChangeEmitter>();\n\n  /**\n   * @internal\n   */\n  get title(): string {\n    return this.group.title;\n  }\n\n  /**\n   * @internal\n   */\n  ngOnInit() {\n    this.store.load(this.group.items);\n    this.evaluateAdded();\n    this.evaluateDisabled(this.collapsed);\n    if (this.group.sortDirection !== undefined) {\n      this.store.view.sort({\n        direction: this.group.sortDirection,\n        valueAccessor: (item: CatalogItem) => item.title\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    this.store.destroy();\n  }\n\n  /**\n   * @internal\n   */\n  isGroup(item: CatalogItem): boolean {\n    return item.type === CatalogItemType.Group;\n  }\n\n  /**\n   * @internal\n   */\n  isLayer(item: CatalogItem): boolean {\n    return item.type === CatalogItemType.Layer;\n  }\n\n  /**\n   * On toggle button click, emit the added change event\n   * @internal\n   */\n  onToggleClick(event: Event) {\n    this.added$.value ? this.remove(event) : this.add(event);\n  }\n\n  /**\n   * On toggle button click, emit the added change event\n   * @internal\n   */\n  onToggleCollapsed(collapsed: boolean) {\n    this.evaluateDisabled(collapsed);\n  }\n\n  /**\n   * When a layer is added or removed, evaluate if all the layers of the group\n   * are now added or removed. If so, consider that the group itself is added\n   * or removed.\n   * @internal\n   * @param event Layer added change event\n   */\n  onLayerAddedChange(event: AddedChangeEmitter) {\n    this.layerAddedChange.emit(event);\n    this.tryToggleGroup(event);\n  }\n\n  /**\n   * Emit added change event with added = true\n   */\n  private add(event: Event) {\n    this.added$.next(true);\n    this.addedChange.emit({\n      added: true,\n      group: this.group,\n      event\n    });\n  }\n\n  /**\n   * Emit added change event with added = true\n   */\n  private remove(event: Event) {\n    this.added$.next(false);\n    this.addedChange.emit({\n      added: false,\n      group: this.group,\n      event\n    });\n  }\n\n  onLayerPreview(event) {\n    this.preview$.next(event);\n  }\n\n  /**\n   * If all the layers of the group added or removed, add or remove the group itself.\n   * @param event The last layer added change event to occur\n   */\n  private tryToggleGroup(event: AddedChangeEmitter) {\n    const added = event.added;\n    const layer = event.layer;\n\n    const layersAdded = this.store.view\n      .all()\n      .filter((item: CatalogItem) => item.id !== layer.id)\n      .map((item: CatalogItem) => this.state.get(item).added || false);\n\n    if (layersAdded.every((value) => value === added)) {\n      added ? this.add(event.event) : this.remove(event.event);\n    } else if (this.added$.value === true) {\n      this.added$.next(false);\n    }\n  }\n\n  private evaluateAdded() {\n    const added = this.store.all().every((item: CatalogItem) => {\n      return (this.state.get(item).added || false) === true;\n    });\n    this.added$.next(added);\n  }\n\n  private evaluateDisabled(collapsed: boolean) {\n    let disabled = false;\n    if (this.toggleCollapsed === false) {\n      disabled = collapsed;\n    }\n    this.disabled$.next(disabled);\n  }\n\n  onTitleClick() {\n    this.collapsed = !this.collapsed;\n  }\n}\n","<mat-list-item>\n  <mat-icon\n    matListItemIcon\n    igoCollapse\n    class=\"igo-chevron catalog-browser-group-carret\"\n    [target]=\"items\"\n    [collapsed]=\"collapsed\"\n    (toggle)=\"onToggleCollapsed($event)\"\n  >\n    expand_less\n  </mat-icon>\n\n  <span\n    class=\"igo-catalog-group-title\"\n    matListItemTitle\n    matTooltipShowDelay=\"500\"\n    [matTooltip]=\"title\"\n    (click)=\"onTitleClick()\"\n    >{{ title }}</span\n  >\n\n  <div matListItemMeta>\n    <button *ngIf=\"group.externalProvider\" disabled=\"true\" mat-icon-button>\n      <mat-icon\n        class=\"igo-cataloggroup-external-icon\"\n        *ngIf=\"group.externalProvider\"\n        tooltip-position=\"below\"\n        matTooltipShowDelay=\"500\"\n        [matTooltip]=\"'igo.geo.catalog.externalProvider.group' | translate\"\n        color=\"primary\"\n        (click)=\"$event.stopPropagation()\"\n      >\n        public\n      </mat-icon>\n    </button>\n\n    <ng-container\n      *ngIf=\"(added$ | async) && (preview$ | async) === false; else notadded\"\n    >\n      <button\n        mat-icon-button\n        tooltip-position=\"below\"\n        matTooltipShowDelay=\"500\"\n        [matTooltip]=\"'igo.geo.catalog.group.removeFromMap' | translate\"\n        color=\"warn\"\n        [disabled]=\"disabled$ | async\"\n        (click)=\"onToggleClick($event)\"\n      >\n        <mat-icon>delete</mat-icon>\n      </button>\n    </ng-container>\n\n    <ng-template #notadded>\n      <button\n        mat-icon-button\n        tooltip-position=\"below\"\n        matTooltipShowDelay=\"500\"\n        [matTooltip]=\"'igo.geo.catalog.group.addToMap' | translate\"\n        [disabled]=\"disabled$ | async\"\n        (click)=\"onToggleClick($event)\"\n      >\n        <mat-icon>add</mat-icon>\n      </button>\n    </ng-template>\n  </div>\n</mat-list-item>\n\n<div #items>\n  <ng-template ngFor let-item [ngForOf]=\"store.view.all$() | async\">\n    <ng-container *ngIf=\"isGroup(item)\">\n      <!-- todo: add display ans manage CatalogItemGroup -->\n    </ng-container>\n    <ng-container *ngIf=\"isLayer(item)\">\n      <igo-catalog-browser-layer\n        igoListItem\n        [layer]=\"$any(item)\"\n        [resolution]=\"resolution\"\n        [map]=\"map\"\n        [catalogAllowLegend]=\"catalogAllowLegend\"\n        [added]=\"state.get(item).added\"\n        (addedLayerIsPreview)=\"onLayerPreview($event)\"\n        (addedChange)=\"onLayerAddedChange($event)\"\n      >\n      </igo-catalog-browser-layer>\n    </ng-container>\n  </ng-template>\n</div>\n","import { AsyncPipe, NgFor, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit\n} from '@angular/core';\n\nimport { EntityStore, EntityStoreWatcher } from '@igo2/common/entity';\nimport { ListComponent, ListItemDirective } from '@igo2/common/list';\n\nimport { BehaviorSubject, zip } from 'rxjs';\n\nimport { Layer, isLayerItem } from '../../layer';\nimport { LayerService } from '../../layer/shared/layer.service';\nimport { IgoMap } from '../../map/shared/map';\nimport {\n  AddedChangeEmitter,\n  AddedChangeGroupEmitter,\n  Catalog,\n  CatalogItem,\n  CatalogItemGroup,\n  CatalogItemLayer,\n  CatalogItemState,\n  CatalogItemType\n} from '../shared';\nimport { CatalogBrowserGroupComponent } from './catalog-browser-group.component';\nimport { CatalogBrowserLayerComponent } from './catalog-browser-layer.component';\n\n/**\n * Component to browse a catalog's groups and layers and display them on a map.\n */\n@Component({\n  selector: 'igo-catalog-browser',\n  templateUrl: './catalog-browser.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    ListComponent,\n    NgFor,\n    NgIf,\n    CatalogBrowserGroupComponent,\n    CatalogBrowserLayerComponent,\n    ListItemDirective,\n    AsyncPipe\n  ]\n})\nexport class CatalogBrowserComponent implements OnInit, OnDestroy {\n  /**\n   * Catalog items store watcher\n   */\n  private watcher: EntityStoreWatcher<CatalogItem>;\n\n  // private resolution$$: Subscription;\n\n  get resolution$(): BehaviorSubject<number> {\n    return this.map.viewController.resolution$;\n  }\n\n  @Input() catalogAllowLegend = false;\n\n  /**\n   * Catalog\n   */\n  @Input() catalog: Catalog;\n\n  /**\n   * Store holding the catalog's items\n   */\n  @Input() store: EntityStore<CatalogItem, CatalogItemState>;\n\n  /**\n   * Map to add the catalog items to\n   */\n  @Input() map: IgoMap;\n\n  /**\n   * Whether a group can be toggled when it's collapsed\n   */\n  @Input() toggleCollapsedGroup = true;\n\n  constructor(\n    private layerService: LayerService,\n    private cdRef: ChangeDetectorRef\n  ) {}\n\n  /**\n   * @internal\n   */\n  ngOnInit() {\n    const currentItems = this.map.layerController.all\n      .filter((layer) => isLayerItem(layer))\n      .map((layer: Layer) => {\n        return {\n          id: layer.options.source.id,\n          title: layer.title,\n          type: CatalogItemType.Layer\n        };\n      });\n    this.store.state.updateMany(currentItems, { added: true }, true);\n    if (this.catalog && this.catalog.sortDirection !== undefined) {\n      this.store.view.sort({\n        direction: this.catalog.sortDirection,\n        valueAccessor: (item: CatalogItem) => item.title\n      });\n    }\n\n    const catalogShowLegend = this.catalog ? this.catalog.showLegend : false;\n    this.catalogAllowLegend = catalogShowLegend\n      ? catalogShowLegend\n      : this.catalogAllowLegend;\n\n    this.watcher = new EntityStoreWatcher(this.store, this.cdRef);\n  }\n\n  ngOnDestroy() {\n    this.watcher.destroy();\n  }\n\n  /**\n   * @internal\n   */\n  isGroup(item: CatalogItem): boolean {\n    return item.type === CatalogItemType.Group;\n  }\n\n  /**\n   * @internal\n   */\n  isLayer(item: CatalogItem): boolean {\n    return item.type === CatalogItemType.Layer;\n  }\n\n  /**\n   * When a layer is added or removed, add or remove it from the map\n   * @internal\n   * @param event Layer added event\n   */\n  onLayerAddedChange(event: AddedChangeEmitter) {\n    const layer = event.layer;\n    this.store.state.update(layer, { added: event.added }, false);\n    event.added\n      ? this.addLayerToMap(layer, event)\n      : this.removeLayerFromMap(layer);\n  }\n\n  /**\n   * When a froup is added or removed, add or remove it from the map\n   * @internal\n   * @param event Group added event\n   */\n  onGroupAddedChange(event: AddedChangeGroupEmitter) {\n    const group = event.group;\n    this.store.state.update(group, { added: event.added }, false);\n    event.added\n      ? this.addGroupToMap(group, event)\n      : this.removeGroupFromMap(group);\n  }\n\n  /**\n   * Add layer to map\n   * @param layer Catalog layer\n   */\n  private addLayerToMap(layer: CatalogItemLayer, event?: AddedChangeEmitter) {\n    this.addLayersToMap([layer], event);\n  }\n\n  /**\n   * Remove layer from map\n   * @param layer Catalog layer\n   */\n  private removeLayerFromMap(layer: CatalogItemLayer) {\n    this.removeLayersFromMap([layer]);\n  }\n\n  /**\n   * Add multiple layers to map\n   * @param layers Catalog layers\n   */\n  private addLayersToMap(\n    catalogLayers: CatalogItemLayer[],\n    event: AddedChangeEmitter | AddedChangeGroupEmitter\n  ) {\n    const layers$ = catalogLayers.map((layer) => {\n      if (!layer.options.sourceOptions.optionsFromApi) {\n        layer.options.sourceOptions.optionsFromApi = true;\n      }\n      if (this.catalog.profils?.length) {\n        layer.options.security = { profils: this.catalog.profils };\n      }\n      return this.layerService.createAsyncLayer(layer.options);\n    });\n    zip(...layers$).subscribe((layers) => {\n      if (event.event.type === 'click' && event.added) {\n        this.map.layersAddedByClick$.next(layers);\n      }\n      this.store.state.updateMany(catalogLayers, { added: true });\n      this.map.layerController.add(...layers.filter(Boolean));\n    });\n  }\n\n  /**\n   * Remove multiple layers from map\n   * @param layers Catalog layers\n   */\n  private removeLayersFromMap(layers: CatalogItemLayer[]) {\n    layers.forEach((layer: CatalogItemLayer) => {\n      this.store.state.update(layer, { added: false });\n      if (layer.options.baseLayer === true) {\n        const currLayer = this.map.layerController.getById(\n          String(layer.options.id)\n        );\n        if (currLayer !== undefined) {\n          this.map.layerController.remove(currLayer);\n        }\n      } else {\n        const currLayer = this.map.layerController.getById(layer.id);\n        if (currLayer !== undefined) {\n          this.map.layerController.remove(currLayer);\n        }\n      }\n    });\n  }\n\n  /**\n   * Sort the layers by title. asc or desc.\n   * @internal\n   */\n  private sortCatalogItemsByTitle(items: CatalogItem[], direction) {\n    const returnItem = items.sort((a, b) => {\n      const titleA = a.title.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n      const titleB = b.title.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n\n      if (titleA < titleB) {\n        return -1;\n      }\n      if (titleA > titleB) {\n        return 1;\n      }\n      return 0;\n    });\n    switch (direction) {\n      case 'asc':\n        return returnItem;\n      case 'desc':\n        return returnItem.reverse();\n      default:\n        return items;\n    }\n  }\n\n  /**\n   * Add all the layers of a group to map\n   * @param group Catalog group\n   */\n  private addGroupToMap(\n    group: CatalogItemGroup,\n    event: AddedChangeGroupEmitter\n  ) {\n    let layers = group.items.filter((item: CatalogItem) => {\n      const added = this.store.state.get(item).added || false;\n      return this.isLayer(item) && added === false;\n    });\n    if (group.sortDirection !== undefined) {\n      layers = this.sortCatalogItemsByTitle(layers, group.sortDirection);\n    }\n    this.addLayersToMap(layers.reverse() as CatalogItemLayer[], event);\n  }\n\n  /**\n   * Remove all the layers of a group from map\n   * @param group Catalog group\n   */\n  private removeGroupFromMap(group: CatalogItemGroup) {\n    const layers = group.items.filter((item: CatalogItem) => {\n      const added = this.store.state.get(item).added || false;\n      return this.isLayer(item) && added === true;\n    });\n    this.removeLayersFromMap(layers as CatalogItemLayer[]);\n  }\n}\n","<igo-list [navigation]=\"false\" [selection]=\"false\">\n  <ng-template ngFor let-item [ngForOf]=\"store.view.all$() | async\">\n    <ng-container *ngIf=\"isGroup(item)\">\n      <igo-catalog-browser-group\n        [catalog]=\"catalog\"\n        [group]=\"item\"\n        [map]=\"map\"\n        [state]=\"store.state\"\n        [resolution]=\"resolution$ | async\"\n        [catalogAllowLegend]=\"catalogAllowLegend\"\n        [collapsed]=\"store.count === 1 ? false : true\"\n        [toggleCollapsed]=\"toggleCollapsedGroup\"\n        (addedChange)=\"onGroupAddedChange($event)\"\n        (layerAddedChange)=\"onLayerAddedChange($event)\"\n      >\n      </igo-catalog-browser-group>\n    </ng-container>\n\n    <ng-container *ngIf=\"isLayer(item)\">\n      <igo-catalog-browser-layer\n        igoListItem\n        [layer]=\"$any(item)\"\n        [map]=\"map\"\n        [resolution]=\"resolution$ | async\"\n        [catalogAllowLegend]=\"catalogAllowLegend\"\n        [added]=\"store.state.get(item).added\"\n        (addedChange)=\"onLayerAddedChange($event)\"\n      >\n      </igo-catalog-browser-layer>\n    </ng-container>\n  </ng-template>\n</igo-list>\n","import { NgModule } from '@angular/core';\n\nimport { CatalogBrowserComponent } from './catalog-browser.component';\n\n/**\n * @deprecated import the CatalogBrowserComponent directly\n */\n@NgModule({\n  imports: [CatalogBrowserComponent],\n  exports: [CatalogBrowserComponent]\n})\nexport class IgoCatalogBrowserModule {}\n","import { AsyncPipe, NgFor, NgIf } from '@angular/common';\nimport { Component, Inject, OnDestroy, OnInit, Optional } from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder,\n  UntypedFormGroup,\n  Validators\n} from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport {\n  MAT_DIALOG_DATA,\n  MatDialogActions,\n  MatDialogContent,\n  MatDialogRef,\n  MatDialogTitle\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { EntityStore } from '@igo2/common/entity';\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { TypeCapabilities } from '../../datasource/shared/capabilities.interface';\nimport { Catalog } from '../shared/catalog.abstract';\n\n@Component({\n  selector: 'igo-add-catalog-dialog',\n  templateUrl: './add-catalog-dialog.component.html',\n  styleUrls: ['./add-catalog-dialog.component.scss'],\n  standalone: true,\n  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatAutocompleteModule,\n    NgFor,\n    MatOptionModule,\n    MatTooltipModule,\n    MatSelectModule,\n    MatListModule,\n    NgIf,\n    MatDialogActions,\n    MatButtonModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class AddCatalogDialogComponent implements OnInit, OnDestroy {\n  public form: UntypedFormGroup;\n  private defaultAddedCatalogType = 'wms';\n  private addedCatalogType$$: Subscription;\n  public predefinedCatalogsList$ = new BehaviorSubject<Catalog[]>([]);\n  typeCapabilities: string[];\n  predefinedCatalogs: Catalog[] = [];\n  store: EntityStore<Catalog>;\n  error = false;\n  addedCatalog: Catalog;\n  emailAddress: string;\n  private storeViewAll$$: Subscription;\n\n  constructor(\n    private formBuilder: UntypedFormBuilder,\n    public languageService: LanguageService,\n    private configService: ConfigService,\n    public dialogRef: MatDialogRef<AddCatalogDialogComponent>,\n    @Optional()\n    @Inject(MAT_DIALOG_DATA)\n    public data: {\n      predefinedCatalogs: Catalog[];\n      store: EntityStore<Catalog>;\n      error: boolean;\n      addedCatalog: Catalog;\n    }\n  ) {\n    this.store = data.store;\n    this.predefinedCatalogs = data.predefinedCatalogs;\n    this.error = data.error;\n    this.addedCatalog = data.addedCatalog;\n    this.form = this.formBuilder.group({\n      id: ['', []],\n      title: ['', []],\n      url: ['', [Validators.required]],\n      type: [this.defaultAddedCatalogType, [Validators.required]]\n    });\n  }\n\n  ngOnInit() {\n    this.store.state.clear();\n    this.typeCapabilities = Object.keys(TypeCapabilities);\n\n    this.addedCatalogType$$ = this.form\n      .get('type')\n      .valueChanges.subscribe((value) => {\n        if (value === 'wmts') {\n          this.form.get('title').setValidators(Validators.required);\n        } else {\n          this.form.get('title').setValidators([]);\n        }\n        this.form.get('title').updateValueAndValidity();\n      });\n\n    this.computePredefinedCatalogList();\n    this.storeViewAll$$ = this.store.view\n      .all$()\n      .subscribe(() => this.computePredefinedCatalogList());\n\n    this.emailAddress = this.configService.getConfig('emailAddress');\n  }\n\n  ngOnDestroy() {\n    this.addedCatalogType$$.unsubscribe();\n    this.storeViewAll$$.unsubscribe();\n  }\n\n  changeUrlOrTitle(catalog: Catalog) {\n    this.form.patchValue(catalog);\n    this.error = false;\n    this.computePredefinedCatalogList();\n  }\n\n  computePredefinedCatalogList() {\n    this.predefinedCatalogsList$.next(\n      this.predefinedCatalogs.filter((c) => !this.store.get(c.id))\n    );\n  }\n\n  addCatalog(addedCatalog: Catalog) {\n    this.error = false;\n    this.dialogRef.close(addedCatalog);\n  }\n\n  cancel() {\n    this.error = false;\n    this.dialogRef.close();\n  }\n}\n","<h1 mat-dialog-title class=\"mat-typography\">\n  {{ 'igo.geo.catalog.library.addTitle' | translate }}\n</h1>\n<div mat-dialog-content class=\"mat-typography\">\n  <form class=\"igo-form\" [formGroup]=\"form\">\n    <div class=\"igo-input-container\">\n      <mat-form-field>\n        <input\n          type=\"text\"\n          formControlName=\"title\"\n          placeholder=\"{{ 'igo.geo.printForm.title' | translate }}\"\n          matInput\n          [matAutocomplete]=\"auto2\"\n        />\n        <mat-autocomplete\n          #auto2=\"matAutocomplete\"\n          (optionSelected)=\"changeUrlOrTitle($event.option.value)\"\n        >\n          <mat-option\n            *ngFor=\"let predefinedCatalog of predefinedCatalogsList$ | async\"\n            matTooltipShowDelay=\"500\"\n            [matTooltip]=\"predefinedCatalog.title\"\n            [value]=\"predefinedCatalog\"\n          >\n            {{ predefinedCatalog.title }}\n          </mat-option>\n        </mat-autocomplete>\n      </mat-form-field>\n    </div>\n    <div class=\"igo-input-container\">\n      <mat-form-field>\n        <input\n          type=\"text\"\n          formControlName=\"url\"\n          placeholder=\"URL\"\n          matInput\n          [matAutocomplete]=\"auto\"\n        />\n        <mat-autocomplete\n          #auto=\"matAutocomplete\"\n          (optionSelected)=\"changeUrlOrTitle($event.option.value)\"\n        >\n          <mat-option\n            *ngFor=\"let predefinedCatalog of predefinedCatalogsList$ | async\"\n            matTooltipShowDelay=\"500\"\n            [matTooltip]=\"predefinedCatalog.url\"\n            [value]=\"predefinedCatalog\"\n          >\n            {{ predefinedCatalog.url }}\n          </mat-option>\n        </mat-autocomplete>\n      </mat-form-field>\n    </div>\n    <div class=\"igo-input-container\">\n      <mat-form-field>\n        <mat-select formControlName=\"type\" placeholder=\"Type\">\n          <mat-option\n            *ngFor=\"let type of typeCapabilities\"\n            [value]=\"type\"\n            (click)=\"$event.stopPropagation()\"\n          >\n            <p matListItemTitle>{{ type }}</p>\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n    </div>\n  </form>\n  <span *ngIf=\"error && addedCatalog && emailAddress\">\n    <p class=\"error\">\n      {{\n        languageService.translate.instant(\n          'igo.geo.catalog.externalProvider.unavailableWithEmail',\n          { value: addedCatalog.url, email: emailAddress }\n        )\n      }}\n    </p>\n  </span>\n  <span *ngIf=\"error && addedCatalog && !emailAddress\">\n    <p class=\"error\">\n      {{\n        languageService.translate.instant('igo.geo.catalog.unavailable', {\n          value: addedCatalog.url\n        })\n      }}\n    </p>\n  </span>\n</div>\n<div mat-dialog-actions style=\"justify-content: center\">\n  <div class=\"igo-form-button-group add-catalog-button-top-padding\">\n    <button mat-raised-button type=\"button\" (click)=\"cancel()\">\n      {{ 'igo.geo.catalog.library.cancel' | translate }}\n    </button>\n    <button\n      id=\"addCatalogBtnDialog\"\n      mat-raised-button\n      type=\"button\"\n      color=\"primary\"\n      [disabled]=\"!form.valid\"\n      (click)=\"addCatalog(form.value)\"\n    >\n      {{ 'igo.geo.catalog.library.add' | translate }}\n    </button>\n  </div>\n</div>\n","import { NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { getEntityTitle } from '@igo2/common/entity';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport { IgoMap } from '../../map/shared/map';\nimport { Catalog } from '../shared/catalog.abstract';\n\n/**\n * Catalog library item\n */\n@Component({\n  selector: 'igo-catalog-library-item',\n  templateUrl: './catalog-library-item.component.html',\n  styleUrls: ['./catalog-library-item.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    MatListModule,\n    NgIf,\n    MatIconModule,\n    MatTooltipModule,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class CatalogLibaryItemComponent {\n  /**\n   * Catalog\n   */\n  @Input() catalog: Catalog;\n\n  /**\n   * Map to add the catalog items to\n   */\n  @Input() map: IgoMap;\n\n  @Output() catalogRemove = new EventEmitter();\n\n  /**\n   * @internal\n   */\n  get title(): string {\n    return getEntityTitle(this.catalog);\n  }\n\n  removeCatalogFromLibrary(event) {\n    event.stopPropagation();\n    this.catalogRemove.emit();\n  }\n}\n","<mat-list-item>\n  <span matListItemTitle>\n    {{ title }}\n  </span>\n  <div matListItemMeta>\n    <mat-icon\n      *ngIf=\"catalog.externalProvider\"\n      matListItemIcon\n      class=\"igo-external-provider\"\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"'igo.geo.catalog.externalProvider.catalog' | translate\"\n      color=\"primary\"\n      (click)=\"$event.stopPropagation()\"\n    >\n      public\n    </mat-icon>\n    <button\n      *ngIf=\"catalog.removable\"\n      mat-icon-button\n      tooltip-position=\"below\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"'igo.geo.catalog.library.remove' | translate\"\n      color=\"warn\"\n      (click)=\"removeCatalogFromLibrary($event)\"\n    >\n      <mat-icon>delete</mat-icon>\n    </button>\n\n    <button\n      class=\"igo-blank\"\n      *ngIf=\"!catalog.removable\"\n      disabled=\"true\"\n      mat-icon-button\n    >\n      <mat-icon></mat-icon>\n    </button>\n  </div>\n</mat-list-item>\n","import { AsyncPipe, NgFor, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { EntityStore } from '@igo2/common/entity';\nimport { ListComponent, ListItemDirective } from '@igo2/common/list';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\nimport { StorageScope, StorageService } from '@igo2/core/storage';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { Observable, Subscription } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Md5 } from 'ts-md5';\n\nimport { CapabilitiesService } from '../../datasource/shared/capabilities.service';\nimport { IgoMap } from '../../map/shared/map';\nimport { standardizeUrl } from '../../utils/id-generator';\nimport { Catalog } from '../shared/catalog.abstract';\nimport { AddCatalogDialogComponent } from './add-catalog-dialog.component';\nimport { CatalogLibaryItemComponent } from './catalog-library-item.component';\n\n/**\n * Component to browse a list of available catalogs\n */\n@Component({\n  selector: 'igo-catalog-library',\n  templateUrl: './catalog-library.component.html',\n  styleUrls: ['./catalog-library.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    ListComponent,\n    NgFor,\n    CatalogLibaryItemComponent,\n    ListItemDirective,\n    NgIf,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class CatalogLibaryComponent implements OnInit, OnDestroy {\n  /**\n   * Store holding the catalogs\n   */\n  @Input() store: EntityStore<Catalog>;\n\n  /**\n   * Map to add the catalog items to\n   */\n  @Input() map: IgoMap;\n\n  /**\n   * Determine if the form to add a catalog is allowed\n   */\n  @Input() addCatalogAllowed = false;\n\n  /**\n   * Determine if the form to add a catalog is allowed\n   */\n  @Input() predefinedCatalogs: Catalog[] = [];\n\n  /**\n   * Event emitted a catalog is selected or unselected\n   */\n  @Output() catalogSelectChange = new EventEmitter<{\n    selected: boolean;\n    catalog: Catalog;\n  }>();\n\n  submitDisabled = true;\n\n  private addingCatalog$$: Subscription;\n\n  get addedCatalogs(): Catalog[] {\n    return (this.storageService.get('addedCatalogs') || []) as Catalog[];\n  }\n  set addedCatalogs(catalogs: Catalog[]) {\n    this.storageService.set('addedCatalogs', catalogs);\n  }\n\n  get selectedCatalogId() {\n    return this.storageService.get('selectedCatalogId', StorageScope.SESSION);\n  }\n  set selectedCatalogId(id) {\n    this.storageService.set('selectedCatalogId', id, StorageScope.SESSION);\n  }\n\n  constructor(\n    private capabilitiesService: CapabilitiesService,\n    private messageService: MessageService,\n    private storageService: StorageService,\n    private dialog: MatDialog\n  ) {}\n\n  /**\n   * @internal\n   */\n  ngOnInit() {\n    this.store.state.clear();\n\n    if (this.selectedCatalogId) {\n      const selectedCatalog = this.store\n        .all()\n        .find((item) => item.id === this.selectedCatalogId);\n      if (selectedCatalog) {\n        this.onCatalogSelect(selectedCatalog);\n      }\n    }\n    this.predefinedCatalogs = this.predefinedCatalogs.map((c) => {\n      c.id = Md5.hashStr((c.type || 'wms') + standardizeUrl(c.url)) as string;\n      c.title = c.title === '' || !c.title ? c.url : c.title;\n      return c;\n    });\n  }\n\n  getCatalogs(): Observable<Catalog[]> {\n    return this.store.view.all$();\n  }\n\n  /**\n   * When a catalog is selected, update it's state in the store\n   * and emit the catalog select change event\n   * @internal\n   */\n  onCatalogSelect(catalog: Catalog) {\n    this.store.state.update(\n      catalog,\n      {\n        selected: true,\n        focused: true\n      },\n      true\n    );\n    this.selectedCatalogId = catalog.id;\n    this.catalogSelectChange.emit({ selected: true, catalog });\n  }\n\n  private unsubscribeAddingCatalog() {\n    if (this.addingCatalog$$) {\n      this.addingCatalog$$.unsubscribe();\n    }\n  }\n\n  addCatalog(addedCatalog: Catalog) {\n    if (!addedCatalog) {\n      return;\n    }\n    let id = Md5.hashStr(\n      addedCatalog.type + standardizeUrl(addedCatalog.url)\n    ) as string;\n    const predefinedCatalog = this.predefinedCatalogs.find(\n      (c) => c.id === addedCatalog.id\n    );\n\n    if (predefinedCatalog) {\n      addedCatalog.version = predefinedCatalog.version;\n      addedCatalog.externalProvider = predefinedCatalog.externalProvider;\n      id = predefinedCatalog.id;\n    }\n\n    if (this.store.get(id)) {\n      this.messageService.alert(\n        'igo.geo.catalog.library.inlist.message',\n        'igo.geo.catalog.library.inlist.title'\n      );\n      return;\n    }\n    this.unsubscribeAddingCatalog();\n\n    this.addingCatalog$$ = this.capabilitiesService\n      .getCapabilities(\n        addedCatalog.type as any,\n        addedCatalog.url,\n        addedCatalog.version\n      )\n      .pipe(\n        catchError((e) => {\n          if (e.error) {\n            this.addCatalogDialog(true, addedCatalog);\n            e.error.caught = true;\n            return e;\n          }\n          this.messageService.error(\n            'igo.geo.catalog.unavailable',\n            'igo.geo.catalog.unavailableTitle',\n            undefined,\n            { value: addedCatalog.url }\n          );\n          throw e;\n        })\n      )\n      .subscribe((capabilities) => {\n        let title;\n        let version;\n        switch (addedCatalog.type) {\n          case 'wms':\n            title = addedCatalog.title || capabilities.Service.Title;\n            version = addedCatalog.version || capabilities.version;\n            break;\n          case 'arcgisrest':\n          case 'imagearcgisrest':\n          case 'tilearcgisrest':\n            title = addedCatalog.title || capabilities.mapName;\n            break;\n          case 'wmts':\n            title =\n              addedCatalog.title ||\n              capabilities.ServiceIdentification.ServiceType;\n            break;\n          default:\n            title = addedCatalog.title;\n        }\n\n        const catalogToAdd = ObjectUtils.removeUndefined(\n          Object.assign(\n            {},\n            predefinedCatalog,\n            ObjectUtils.removeUndefined({\n              id,\n              title,\n              url: addedCatalog.url,\n              type: addedCatalog.type || 'wms',\n              externalProvider: addedCatalog.externalProvider || false,\n              removable: true,\n              version\n            })\n          ) as Catalog\n        );\n        this.store.insert(catalogToAdd);\n        const newCatalogs = this.addedCatalogs.slice(0);\n        newCatalogs.push(catalogToAdd);\n        this.addedCatalogs = newCatalogs;\n        this.unsubscribeAddingCatalog();\n      });\n  }\n\n  ngOnDestroy() {\n    this.unsubscribeAddingCatalog();\n  }\n\n  onCatalogRemove(catalog) {\n    this.store.delete(catalog);\n    this.addedCatalogs = this.addedCatalogs\n      .slice(0)\n      .filter((c) => c.id !== catalog.id);\n  }\n\n  addCatalogDialog(error?, addedCatalog?: Catalog) {\n    const dialogRef = this.dialog.open(AddCatalogDialogComponent, {\n      width: '700px',\n      data: {\n        predefinedCatalogs: this.predefinedCatalogs,\n        store: this.store,\n        error,\n        addedCatalog\n      }\n    });\n\n    dialogRef.afterClosed().subscribe((catalog) => {\n      this.addCatalog(catalog);\n    });\n  }\n}\n","<igo-list [navigation]=\"false\">\n  <ng-template ngFor let-catalog [ngForOf]=\"getCatalogs() | async\">\n    <igo-catalog-library-item\n      igoListItem\n      color=\"accent\"\n      [map]=\"map\"\n      [catalog]=\"catalog\"\n      (catalogRemove)=\"onCatalogRemove(catalog)\"\n      (select)=\"onCatalogSelect(catalog)\"\n    >\n    </igo-catalog-library-item>\n  </ng-template>\n</igo-list>\n\n<div *ngIf=\"addCatalogAllowed\" class=\"btnAddCatalog\">\n  <button\n    mat-raised-button\n    [matTooltip]=\"'igo.geo.catalog.library.addBtn' | translate\"\n    matTooltipPosition=\"above\"\n    color=\"primary\"\n    (click)=\"addCatalogDialog()\"\n  >\n    {{ 'igo.geo.catalog.library.addBtn' | translate }}\n    <mat-icon>library_add</mat-icon>\n  </button>\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { AddCatalogDialogComponent } from './add-catalog-dialog.component';\nimport { CatalogLibaryComponent } from './catalog-library.component';\n\nexport const CATALOG_LIBRARY_DIRECTIVES = [\n  CatalogLibaryComponent,\n  AddCatalogDialogComponent\n] as const;\n\n/**\n * @deprecated import the CatalogLibaryComponent, AddCatalogDialogComponent directly\n */\n@NgModule({\n  imports: [CatalogLibaryComponent, AddCatalogDialogComponent],\n  exports: [CatalogLibaryComponent, AddCatalogDialogComponent]\n})\nexport class IgoCatalogLibraryModule {}\n","import { NgModule } from '@angular/core';\n\nimport { CatalogBrowserComponent } from './catalog-browser/catalog-browser.component';\nimport { CATALOG_LIBRARY_DIRECTIVES } from './catalog-library';\n\nexport const CATALOG_DIRECTIVES = [\n  CatalogBrowserComponent,\n  ...CATALOG_LIBRARY_DIRECTIVES\n] as const;\n\n/**\n * @deprecated import the components directly or the CATALOG_DIRECTIVES\n */\n@NgModule({\n  imports: [...CATALOG_DIRECTIVES],\n  exports: [...CATALOG_DIRECTIVES]\n})\nexport class IgoCatalogModule {}\n","import { NgModule } from '@angular/core';\n\nimport { DrawComponent } from './draw.component';\n\n/**\n * @deprecated import the DrawComponent directly\n */\n@NgModule({\n  imports: [DrawComponent],\n  exports: [DrawComponent]\n})\nexport class IgoDrawModule {}\n","import { NgModule } from '@angular/core';\n\nimport { IgoDrawModule } from './draw/draw.module';\n\n/**\n * @deprecated import the DrawComponent directly\n */\n@NgModule({\n  exports: [IgoDrawModule]\n})\nexport class IgoDrawingToolModule {}\n","import { NgModule } from '@angular/core';\n\nimport { FeatureFormComponent } from './feature-form.component';\n\n/**\n * @deprecated import the FeatureFormComponent directly\n */\n@NgModule({\n  imports: [FeatureFormComponent],\n  exports: [FeatureFormComponent]\n})\nexport class IgoFeatureFormModule {}\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit\n} from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormControl\n} from '@angular/forms';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { IgoFormFieldComponent } from '@igo2/common/form';\nimport { IgoLanguageModule } from '@igo2/core/language';\n\nimport type { Type } from 'ol/geom/Geometry';\nimport { StyleLike as OlStyleLike } from 'ol/style/Style';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { IgoMap } from '../../map/shared/map';\nimport { GeoJSONGeometry } from '../shared/geometry.interfaces';\nimport { GeometryFormFieldInputComponent } from './geometry-form-field-input.component';\n\n/**\n * This input allows a user to draw a new geometry or to edit\n * an existing one on a map.\n */\n@IgoFormFieldComponent('geometry')\n@Component({\n  selector: 'igo-geometry-form-field',\n  templateUrl: './geometry-form-field.component.html',\n  styleUrls: ['./geometry-form-field.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    GeometryFormFieldInputComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    NgIf,\n    MatButtonToggleModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatIconModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class GeometryFormFieldComponent implements OnInit, OnDestroy {\n  readonly value$ = new BehaviorSubject<GeoJSONGeometry>(undefined);\n\n  private value$$: Subscription;\n\n  set drawControlIsActive(value: boolean) {\n    this._drawControlIsActive = value;\n    this.cdRef.detectChanges();\n  }\n\n  get drawControlIsActive(): boolean {\n    return this._drawControlIsActive;\n  }\n  private _drawControlIsActive = true;\n\n  set freehandDrawIsActive(value: boolean) {\n    this._freehandDrawIsActive = value;\n    this.cdRef.detectChanges();\n  }\n\n  get freehandDrawIsActive(): boolean {\n    return this._freehandDrawIsActive;\n  }\n  private _freehandDrawIsActive = false;\n\n  /**\n   * The field's form control\n   */\n  @Input() formControl: UntypedFormControl;\n\n  /**\n   * The map to draw the geometry on\n   */\n  @Input() map: IgoMap;\n\n  @Input()\n  set geometryType(value: Type) {\n    this.geometryType$.next(value);\n  }\n  get geometryType(): Type {\n    return this.geometryType$.value;\n  }\n  readonly geometryType$ = new BehaviorSubject<Type>(undefined);\n\n  /**\n   * Whether a geometry type toggle should be displayed\n   */\n  @Input() geometryTypeField = false;\n\n  /**\n   * Available geometry types\n   */\n  @Input() geometryTypes: string[] = ['Point', 'LineString', 'Polygon'];\n\n  /**\n   * Whether a draw guide field should be displayed\n   */\n  @Input() drawGuideField = false;\n\n  /**\n   * The drawGuide around the mouse pointer to help drawing\n   */\n  @Input()\n  set drawGuide(value: number) {\n    this.drawGuide$.next(value);\n  }\n  get drawGuide(): number {\n    return this.drawGuide$.value;\n  }\n  readonly drawGuide$ = new BehaviorSubject<number>(0);\n\n  /**\n   * Draw guide placeholder\n   */\n  @Input() drawGuidePlaceholder = '';\n\n  /**\n   * Whether a measure tooltip should be displayed\n   */\n  @Input() measure = false;\n\n  /**\n   * Control options\n   */\n  @Input() controlOptions: Record<string, any> = {};\n\n  /**\n   * Style for the draw control (applies while the geometry is being drawn)\n   */\n  @Input() drawStyle: OlStyleLike;\n\n  /**\n   * Style for the overlay layer (applies once the geometry is added to the map)\n   * If not specified, drawStyle applies\n   */\n  @Input() overlayStyle: OlStyleLike;\n\n  constructor(private cdRef: ChangeDetectorRef) {}\n\n  /**\n   * Set up a value stream\n   * @internal\n   */\n  ngOnInit() {\n    this.value$.next(\n      this.formControl.value ? this.formControl.value : undefined\n    );\n    this.value$$ = this.formControl.valueChanges.subscribe(\n      (value: GeoJSONGeometry) => {\n        this.value$.next(value ? value : undefined);\n      }\n    );\n  }\n\n  /**\n   * Unsubscribe to the value stream\n   * @internal\n   */\n  ngOnDestroy() {\n    this.value$$.unsubscribe();\n  }\n}\n","<igo-geometry-form-field-input\n  [formControl]=\"formControl\"\n  [map]=\"map\"\n  [geometryType]=\"geometryType$ | async\"\n  [drawGuide]=\"drawGuide$ | async\"\n  [measure]=\"measure\"\n  [drawControlIsActive]=\"drawControlIsActive\"\n  [freehandDrawIsActive]=\"freehandDrawIsActive\"\n  [controlOptions]=\"controlOptions\"\n  [drawStyle]=\"drawStyle\"\n  [overlayStyle]=\"overlayStyle\"\n>\n</igo-geometry-form-field-input>\n\n<div *ngIf=\"geometryTypeField\" class=\"geometry-type-toggle\">\n  <mat-button-toggle-group\n    [disabled]=\"(value$ | async) !== undefined\"\n    [(ngModel)]=\"geometryType\"\n  >\n    <mat-button-toggle\n      value=\"Point\"\n      [disabled]=\"geometryTypes.indexOf('Point') < 0\"\n    >\n      {{ 'igo.geo.geometry.point' | translate }}\n    </mat-button-toggle>\n    <mat-button-toggle\n      value=\"LineString\"\n      [disabled]=\"geometryTypes.indexOf('LineString') < 0\"\n    >\n      {{ 'igo.geo.geometry.line' | translate }}\n    </mat-button-toggle>\n    <mat-button-toggle\n      value=\"Polygon\"\n      [disabled]=\"geometryTypes.indexOf('Polygon') < 0\"\n    >\n      {{ 'igo.geo.geometry.polygon' | translate }}\n    </mat-button-toggle>\n  </mat-button-toggle-group>\n</div>\n\n<mat-form-field *ngIf=\"drawGuideField\" class=\"draw-guide-field\">\n  <input\n    matInput\n    type=\"number\"\n    [placeholder]=\"drawGuidePlaceholder\"\n    [(ngModel)]=\"drawGuide\"\n  />\n  <mat-icon matPrefix [color]=\"'primary'\">adjust </mat-icon>\n  <span matSuffix class=\"draw-guide-units\">{{\n    'igo.geo.measure.meters' | translate\n  }}</span>\n</mat-form-field>\n","import { NgModule } from '@angular/core';\n\nimport { GeometryFormFieldInputComponent } from './geometry-form-field-input.component';\nimport { GeometryFormFieldComponent } from './geometry-form-field.component';\n\nexport const GEOMETRY_FORM_FIELD_DIRECTIVES = [\n  GeometryFormFieldComponent,\n  GeometryFormFieldInputComponent\n] as const;\n\n/**\n * @deprecated import the components directly or the GEOMETRY_FORM_FIELD_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [GeometryFormFieldComponent, GeometryFormFieldInputComponent],\n  exports: [GeometryFormFieldComponent, GeometryFormFieldInputComponent]\n})\nexport class IgoGeometryFormFieldModule {}\n","import { NgModule } from '@angular/core';\n\nimport { IgoGeometryFormFieldModule } from './geometry-form-field/geometry-form-field.module';\n\n/**\n * @deprecated import the components directly or the GEOMETRY_FORM_FIELD_DIRECTIVES for the set\n */\n@NgModule({\n  exports: [IgoGeometryFormFieldModule]\n})\nexport class IgoGeometryModule {}\n","import { NgModule } from '@angular/core';\n\nimport { BaseLayersSwitcherComponent } from './baselayers-switcher/baselayers-switcher.component';\nimport { MiniBaseMapComponent } from './baselayers-switcher/mini-basemap.component';\nimport { GeolocateButtonComponent } from './geolocate-button/geolocate-button.component';\nimport { HomeExtentButtonComponent } from './home-extent-button/home-extent-button.component';\nimport { InfoSectionComponent } from './info-section/info-section.component';\nimport { MapBrowserComponent } from './map-browser/map-browser.component';\nimport { MapCenterComponent } from './map-center/map-center.component';\nimport { MenuButtonComponent } from './menu-button/menu-button.component';\nimport { OfflineButtonComponent } from './offline-button/offline-button.component';\nimport { RotationButtonComponent } from './rotation-button/rotation-button.component';\nimport { HoverFeatureDirective } from './shared/hover-feature.directive';\nimport { PointerPositionDirective } from './shared/map-pointer-position.directive';\nimport { MapOfflineDirective } from './shared/mapOffline.directive';\nimport { SwipeControlComponent } from './swipe-control/swipe-control.component';\nimport { WakeLockButtonComponent } from './wake-lock-button/wake-lock-button.component';\nimport { ZoomButtonComponent } from './zoom-button/zoom-button.component';\n\nexport const MAP_DIRECTIVES = [\n  BaseLayersSwitcherComponent,\n  GeolocateButtonComponent,\n  HomeExtentButtonComponent,\n  HoverFeatureDirective,\n  InfoSectionComponent,\n  MapBrowserComponent,\n  MapCenterComponent,\n  MapOfflineDirective,\n  MenuButtonComponent,\n  MiniBaseMapComponent,\n  OfflineButtonComponent,\n  PointerPositionDirective,\n  RotationButtonComponent,\n  SwipeControlComponent,\n  WakeLockButtonComponent,\n  ZoomButtonComponent\n] as const;\n\n/**\n * @deprecated import the components directly or the MAP_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [...MAP_DIRECTIVES],\n  exports: [...MAP_DIRECTIVES]\n})\nexport class IgoMapModule {}\n","import { NgModule } from '@angular/core';\n\nimport { MeasureFormatPipe } from './measure-format.pipe';\nimport { MeasurerComponent } from './measurer.component';\n\n/**\n * @deprecated import the components directly or the MEASURER_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [MeasureFormatPipe, MeasurerComponent],\n  exports: [MeasureFormatPipe, MeasurerComponent]\n})\nexport class IgoMeasurerModule {}\n","import { NgModule } from '@angular/core';\n\nimport { IgoMeasurerModule } from './measurer/measurer.module';\n\n/**\n * @deprecated import the components directly or the MEASURER_DIRECTIVES for the set\n */\n@NgModule({\n  imports: [],\n  declarations: [],\n  exports: [IgoMeasurerModule]\n})\nexport class IgoMeasureModule {}\n","import { AsyncPipe, KeyValuePipe, NgFor, NgIf } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  UntypedFormBuilder,\n  UntypedFormControl,\n  UntypedFormGroup,\n  Validators\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MediaService } from '@igo2/core/media';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { PrintOptions } from '../shared/print.interface';\nimport {\n  PrintLegendPosition,\n  PrintOrientation,\n  PrintOutputFormat,\n  PrintPaperFormat,\n  PrintResolution,\n  PrintSaveImageFormat\n} from '../shared/print.type';\n\n@Component({\n  selector: 'igo-print-form',\n  templateUrl: './print-form.component.html',\n  styleUrls: ['./print-form.component.scss'],\n  standalone: true,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    NgIf,\n    MatSlideToggleModule,\n    MatSelectModule,\n    NgFor,\n    MatOptionModule,\n    MatButtonModule,\n    AsyncPipe,\n    KeyValuePipe,\n    IgoLanguageModule\n  ]\n})\nexport class PrintFormComponent implements OnInit {\n  public form: UntypedFormGroup;\n  public outputFormats = PrintOutputFormat;\n  public paperFormats = PrintPaperFormat;\n  public orientations = PrintOrientation;\n  public resolutions = [...PrintResolution];\n  public imageFormats = PrintSaveImageFormat;\n  public legendPositions = PrintLegendPosition;\n  public isPrintService = true;\n\n  @Input() disabled$: BehaviorSubject<boolean>;\n\n  @Input()\n  get imageFormat(): PrintSaveImageFormat {\n    return this.imageFormatField.value;\n  }\n  set imageFormat(value: PrintSaveImageFormat) {\n    this.imageFormatField.setValue(value || PrintSaveImageFormat.Jpeg, {\n      onlySelf: true\n    });\n  }\n\n  @Input()\n  get outputFormat(): PrintOutputFormat {\n    return this.outputFormatField.value;\n  }\n  set outputFormat(value: PrintOutputFormat) {\n    this.outputFormatField.setValue(value || PrintOutputFormat.Pdf, {\n      onlySelf: true\n    });\n  }\n\n  @Input()\n  get paperFormat(): PrintPaperFormat {\n    return this.paperFormatField.value;\n  }\n  set paperFormat(value: PrintPaperFormat) {\n    this.paperFormatField.setValue(value || PrintPaperFormat.Letter, {\n      onlySelf: true\n    });\n  }\n\n  @Input()\n  get orientation(): PrintOrientation {\n    return this.orientationField.value;\n  }\n  set orientation(value: PrintOrientation) {\n    this.orientationField.setValue(value || PrintOrientation.landscape, {\n      onlySelf: true\n    });\n  }\n\n  @Input()\n  get resolution(): PrintResolution {\n    return this.resolutionField.value;\n  }\n  set resolution(value: PrintResolution) {\n    this.resolutionField.setValue(value || ('96' satisfies PrintResolution), {\n      onlySelf: true\n    });\n  }\n\n  @Input()\n  get legendPosition(): PrintLegendPosition {\n    return this.legendPositionField.value;\n  }\n  set legendPosition(value: PrintLegendPosition) {\n    this.legendPositionField.setValue(value || PrintLegendPosition.none, {\n      onlySelf: true\n    });\n  }\n\n  @Input()\n  get title(): string {\n    return this.titleField.value;\n  }\n  set title(value: string) {\n    this.titleField.setValue(value, { onlySelf: true });\n  }\n  @Input()\n  get subtitle(): string {\n    return this.subtitleField.value;\n  }\n  set subtitle(value: string) {\n    this.subtitleField.setValue(value, { onlySelf: true });\n  }\n  @Input()\n  get comment(): string {\n    return this.commentField.value;\n  }\n  set comment(value: string) {\n    this.commentField.setValue(value, { onlySelf: true });\n  }\n  @Input()\n  get showProjection(): boolean {\n    return this.showProjectionField.value;\n  }\n  set showProjection(value: boolean) {\n    this.showProjectionField.setValue(value, { onlySelf: true });\n  }\n  @Input()\n  get showScale(): boolean {\n    return this.showScaleField.value;\n  }\n  set showScale(value: boolean) {\n    this.showScaleField.setValue(value, { onlySelf: true });\n  }\n  @Input()\n  get showLegend(): boolean {\n    return this.showLegendField.value;\n  }\n  set showLegend(value: boolean) {\n    this.showLegendField.setValue(value, { onlySelf: true });\n  }\n\n  @Input()\n  get doZipFile(): boolean {\n    return this.doZipFileField.value;\n  }\n  set doZipFile(value: boolean) {\n    this.doZipFileField.setValue(value, { onlySelf: true });\n  }\n\n  @Input()\n  get showNorth(): boolean {\n    return this.showNorthArrowField.value;\n  }\n  set showNorth(value: boolean) {\n    this.showNorthArrowField.setValue(value, { onlySelf: true });\n  }\n\n  get outputFormatField() {\n    return (this.form.controls as any).outputFormat as UntypedFormControl;\n  }\n\n  get paperFormatField() {\n    return (this.form.controls as any).paperFormat as UntypedFormControl;\n  }\n\n  get imageFormatField() {\n    return (this.form.controls as any).imageFormat as UntypedFormControl;\n  }\n\n  get orientationField() {\n    return (this.form.controls as any).orientation as UntypedFormControl;\n  }\n\n  get resolutionField() {\n    return (this.form.controls as any).resolution as UntypedFormControl;\n  }\n\n  get commentField() {\n    return (this.form.controls as any).comment as UntypedFormControl;\n  }\n\n  get showProjectionField() {\n    return (this.form.controls as any).showProjection as UntypedFormControl;\n  }\n\n  get showScaleField() {\n    return (this.form.controls as any).showScale as UntypedFormControl;\n  }\n\n  get showLegendField() {\n    return (this.form.controls as any).showLegend as UntypedFormControl;\n  }\n\n  get doZipFileField() {\n    return (this.form.controls as any).doZipFile as UntypedFormControl;\n  }\n\n  get showNorthArrowField() {\n    return (this.form.controls as any).showNorth as UntypedFormControl;\n  }\n\n  get titleField() {\n    return (this.form.controls as any).title as UntypedFormControl;\n  }\n\n  get subtitleField() {\n    return (this.form.controls as any).subtitle as UntypedFormControl;\n  }\n\n  get legendPositionField() {\n    return (this.form.controls as any).legendPosition as UntypedFormControl;\n  }\n\n  @Output() submit = new EventEmitter<PrintOptions>();\n\n  maxLength = 180;\n\n  constructor(\n    private formBuilder: UntypedFormBuilder,\n    private mediaService: MediaService\n  ) {\n    this.form = this.formBuilder.group({\n      title: ['', [Validators.minLength(0), Validators.maxLength(130)]],\n      subtitle: ['', [Validators.minLength(0), Validators.maxLength(120)]],\n      comment: [\n        '',\n        [Validators.minLength(0), Validators.maxLength(this.maxLength)]\n      ],\n      outputFormat: ['', [Validators.required]],\n      paperFormat: ['', [Validators.required]],\n      imageFormat: ['', [Validators.required]],\n      resolution: ['', [Validators.required]],\n      orientation: ['', [Validators.required]],\n      legendPosition: ['', [Validators.required]],\n      showProjection: false,\n      showScale: false,\n      showLegend: false,\n      doZipFile: [{ hidden: this.isPrintService }],\n      showNorthArrow: false\n    });\n  }\n\n  ngOnInit() {\n    this.doZipFileField.setValue(false);\n    if (this.mediaService.isMobile()) {\n      this.resolutions = this.resolutions.filter(\n        (resolution) => resolution !== '300'\n      );\n    }\n  }\n\n  handleFormSubmit(data: PrintOptions, isValid: boolean) {\n    data.isPrintService = this.isPrintService;\n    if (isValid) {\n      this.submit.emit(data);\n    }\n  }\n\n  toggleImageSaveProp() {\n    if (this.outputFormatField.value === 'Image') {\n      this.isPrintService = false;\n      this.commentField.clearValidators();\n      this.commentField.updateValueAndValidity();\n    } else {\n      this.isPrintService = true;\n    }\n  }\n\n  changeCommentLength() {\n    switch (this.paperFormat) {\n      case PrintPaperFormat.A0:\n        // A0, landscape, length 900 | A0, portrait, comment length:  600\n        this.maxLength =\n          this.orientation === PrintOrientation.landscape ? 900 : 600;\n        break;\n      case PrintPaperFormat.A1:\n        // A1, landscape, length 600 | A1, portrait, length 400;\n        this.maxLength =\n          this.orientation === PrintOrientation.landscape ? 600 : 400;\n        break;\n      case PrintPaperFormat.A2:\n        // A2, landscape, length 400 | A2, portrait, length 300;\n        this.maxLength =\n          this.orientation === PrintOrientation.landscape ? 400 : 300;\n        break;\n      case PrintPaperFormat.A3:\n        // A3, landscape, length 300 | A3, portrait, length 200;\n        this.maxLength =\n          this.orientation === PrintOrientation.landscape ? 300 : 200;\n        break;\n      case PrintPaperFormat.A4:\n        // A4, landscape length 200 | A4, portrait length 120;\n        this.maxLength =\n          this.orientation === PrintOrientation.landscape ? 200 : 100;\n        break;\n      case PrintPaperFormat.A5:\n        // A5, landscape length 120 | A5, portrait length 80;\n        this.maxLength =\n          this.orientation === PrintOrientation.landscape ? 120 : 80;\n        break;\n      case PrintPaperFormat.Letter:\n        // lettre, landscape, 180 | lettre, portrait, 140\n        this.maxLength =\n          this.orientation === PrintOrientation.landscape ? 180 : 140;\n        break;\n      default:\n        // legal, landscape, 200 | legal, portrait, 140\n        this.maxLength =\n          this.orientation === PrintOrientation.landscape ? 200 : 140;\n        break;\n    }\n\n    this.commentField.setValidators([Validators.maxLength(this.maxLength)]);\n    this.commentField.updateValueAndValidity();\n  }\n}\n","<form class=\"igo-form\" [formGroup]=\"form\">\n  <div class=\"igo-input-container\">\n    <mat-form-field>\n      <mat-label>{{ 'igo.geo.printForm.title' | translate }}</mat-label>\n      <input\n        matInput\n        formControlName=\"title\"\n        placeholder=\"{{ 'igo.geo.printForm.title' | translate }}\"\n      />\n      <mat-error *ngIf=\"titleField.errors?.maxlength\">{{\n        'igo.geo.formValidation.maxLength'\n          | translate\n            : {\n                column: 'igo.geo.printForm.title' | translate,\n                value: 130\n              }\n      }}</mat-error>\n    </mat-form-field>\n  </div>\n  <div class=\"igo-input-container\">\n    <mat-form-field>\n      <mat-label>{{ 'igo.geo.printForm.subtitle' | translate }}</mat-label>\n      <input\n        matInput\n        formControlName=\"subtitle\"\n        placeholder=\"{{ 'igo.geo.printForm.subtitle' | translate }}\"\n      />\n      <mat-error *ngIf=\"subtitleField.errors?.maxlength\">{{\n        'igo.geo.formValidation.maxLength'\n          | translate\n            : {\n                column: 'igo.geo.printForm.subtitle' | translate,\n                value: 120\n              }\n      }}</mat-error>\n    </mat-form-field>\n  </div>\n  <div class=\"igo-input-container\">\n    <mat-form-field>\n      <mat-label>{{ 'igo.geo.printForm.comment' | translate }}</mat-label>\n      <input\n        matInput\n        formControlName=\"comment\"\n        placeholder=\"{{ 'igo.geo.printForm.comment' | translate }}\"\n      />\n      <mat-error *ngIf=\"commentField.errors?.maxlength\">{{\n        'igo.geo.formValidation.maxLength'\n          | translate\n            : {\n                column: 'igo.geo.printForm.comment' | translate,\n                value: maxLength\n              }\n      }}</mat-error>\n    </mat-form-field>\n  </div>\n\n  <div class=\"igo-input-container slide-toggle-container\">\n    <div class=\"print-slide-toggle-container\">\n      <mat-slide-toggle\n        class=\"print-option\"\n        formControlName=\"showProjection\"\n        [labelPosition]=\"'before'\"\n      >\n        {{ 'igo.geo.printForm.showProjection' | translate }}\n      </mat-slide-toggle>\n      <mat-slide-toggle\n        class=\"print-option\"\n        formControlName=\"showScale\"\n        [labelPosition]=\"'before'\"\n      >\n        {{ 'igo.geo.printForm.showScale' | translate }}\n      </mat-slide-toggle>\n      <mat-slide-toggle\n        class=\"print-option\"\n        formControlName=\"doZipFile\"\n        [labelPosition]=\"'before'\"\n        [style.display]=\"isPrintService ? 'none' : ''\"\n      >\n        {{ 'igo.geo.printForm.doZipFile' | translate }}\n      </mat-slide-toggle>\n      <mat-slide-toggle\n        class=\"print-option\"\n        formControlName=\"showNorthArrow\"\n        [labelPosition]=\"'before'\"\n      >\n        {{ 'igo.geo.printForm.showNorthArrow' | translate }}\n      </mat-slide-toggle>\n    </div>\n  </div>\n\n  <div class=\"igo-input-container\">\n    <mat-form-field>\n      <mat-label>{{\n        'igo.geo.printForm.legendPosition' | translate\n      }}</mat-label>\n      <mat-select\n        formControlName=\"legendPosition\"\n        placeholder=\"{{ 'igo.geo.printForm.legendPosition' | translate }}\"\n      >\n        <mat-option\n          *ngFor=\"let legendPosition of legendPositions | keyvalue\"\n          [value]=\"legendPosition.key\"\n        >\n          <ng-container\n            *ngIf=\"!['newpage', 'newimage'].includes(legendPosition.value)\"\n          >\n            {{\n              'igo.geo.printForm.legendPositions.' + legendPosition.value\n                | translate\n            }}\n          </ng-container>\n\n          <ng-container\n            *ngIf=\"['newpage', 'newimage'].includes(legendPosition.value)\"\n          >\n            {{\n              (outputFormat === 'Pdf'\n                ? 'igo.geo.printForm.legendPositions.newpage'\n                : 'igo.geo.printForm.legendPositions.newimage'\n              ) | translate\n            }}\n          </ng-container>\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div class=\"igo-input-container\">\n    <mat-form-field>\n      <mat-label>{{ 'igo.geo.printForm.outputFormat' | translate }}</mat-label>\n      <mat-select\n        (selectionChange)=\"toggleImageSaveProp()\"\n        formControlName=\"outputFormat\"\n        placeholder=\"{{ 'igo.geo.printForm.outputFormat' | translate }}\"\n      >\n        <mat-option\n          *ngFor=\"let outputFormat of outputFormats | keyvalue\"\n          [value]=\"outputFormat.key\"\n        >\n          {{ outputFormat.value }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div\n    class=\"igo-input-container\"\n    [style.display]=\"isPrintService ? 'block' : 'none'\"\n  >\n    <mat-form-field>\n      <mat-label>{{ 'igo.geo.printForm.paperFormat' | translate }}</mat-label>\n      <mat-select\n        (selectionChange)=\"changeCommentLength()\"\n        formControlName=\"paperFormat\"\n        placeholder=\"{{ 'igo.geo.printForm.paperFormat' | translate }}\"\n      >\n        <mat-option\n          *ngFor=\"let paperFormat of paperFormats | keyvalue\"\n          [value]=\"paperFormat.key\"\n        >\n          {{\n            'igo.geo.printForm.paperFormats.' + paperFormat.value | translate\n          }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div\n    class=\"igo-input-container\"\n    [style.display]=\"isPrintService ? 'none' : 'block'\"\n  >\n    <mat-form-field>\n      <mat-label>{{ 'igo.geo.printForm.imageFormat' | translate }}</mat-label>\n      <mat-select\n        formControlName=\"imageFormat\"\n        placeholder=\"{{ 'igo.geo.printForm.imageFormat' | translate }}\"\n      >\n        <mat-option\n          *ngFor=\"let imageFormat of imageFormats | keyvalue\"\n          [value]=\"imageFormat.key\"\n        >\n          {{ imageFormat.value }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div class=\"igo-input-container\">\n    <mat-form-field>\n      <mat-label\n        >{{ 'igo.geo.printForm.resolution' | translate }} ({{\n          'igo.geo.printForm.resolutionUnit' | translate\n        }})</mat-label\n      >\n      <mat-select\n        formControlName=\"resolution\"\n        placeholder=\"{{ 'igo.geo.printForm.resolution' | translate }}\"\n      >\n        <mat-option *ngFor=\"let resolution of resolutions\" [value]=\"resolution\">\n          {{ resolution }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div\n    class=\"igo-input-container\"\n    [style.display]=\"isPrintService ? 'block' : 'none'\"\n  >\n    <mat-form-field>\n      <mat-label>{{ 'igo.geo.printForm.orientation' | translate }}</mat-label>\n      <mat-select\n        (selectionChange)=\"changeCommentLength()\"\n        formControlName=\"orientation\"\n        placeholder=\"{{ 'igo.geo.printForm.orientation' | translate }}\"\n      >\n        <mat-option\n          *ngFor=\"let orientation of orientations | keyvalue\"\n          [value]=\"orientation.key\"\n        >\n          {{ 'igo.geo.printForm.' + orientation.value | translate }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div class=\"igo-form-button-group print-button-top-padding\">\n    <button\n      mat-raised-button\n      type=\"button\"\n      [disabled]=\"!form.valid || (disabled$ | async)\"\n      (click)=\"handleFormSubmit(form.value, form.valid)\"\n    >\n      {{ 'igo.geo.printForm.saveBtn' | translate }}\n    </button>\n  </div>\n</form>\n","import { Component, Input } from '@angular/core';\n\nimport { BehaviorSubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { IgoMap } from '../../map/shared/map';\nimport { PrintFormComponent } from '../print-form/print-form.component';\nimport { PrintOptions } from '../shared/print.interface';\nimport { PrintService } from '../shared/print.service';\nimport {\n  PrintLegendPosition,\n  PrintOrientation,\n  PrintOutputFormat,\n  PrintPaperFormat,\n  PrintResolution,\n  PrintSaveImageFormat\n} from '../shared/print.type';\n\n@Component({\n  selector: 'igo-print',\n  templateUrl: './print.component.html',\n  standalone: true,\n  imports: [PrintFormComponent]\n})\nexport class PrintComponent {\n  public disabled$ = new BehaviorSubject(false);\n\n  @Input()\n  get map(): IgoMap {\n    return this._map;\n  }\n  set map(value: IgoMap) {\n    this._map = value;\n  }\n  private _map: IgoMap;\n\n  @Input()\n  get outputFormat(): PrintOutputFormat {\n    return this._outputFormat;\n  }\n  set outputFormat(value: PrintOutputFormat) {\n    this._outputFormat = value;\n  }\n  private _outputFormat: PrintOutputFormat;\n\n  @Input()\n  get paperFormat(): PrintPaperFormat {\n    return this._paperFormat;\n  }\n  set paperFormat(value: PrintPaperFormat) {\n    this._paperFormat = value;\n  }\n  private _paperFormat: PrintPaperFormat;\n\n  @Input()\n  get orientation(): PrintOrientation {\n    return this._orientation;\n  }\n  set orientation(value: PrintOrientation) {\n    this._orientation = value;\n  }\n  private _orientation: PrintOrientation;\n\n  @Input()\n  get imageFormat(): PrintSaveImageFormat {\n    return this._imageFormat;\n  }\n  set imageFormat(value: PrintSaveImageFormat) {\n    this._imageFormat = value;\n  }\n  private _imageFormat: PrintSaveImageFormat;\n\n  @Input()\n  get legendPosition(): PrintLegendPosition {\n    return this._legendPosition;\n  }\n  set legendPosition(value: PrintLegendPosition) {\n    this._legendPosition = value;\n  }\n  private _legendPosition: PrintLegendPosition;\n\n  @Input()\n  get resolution(): PrintResolution {\n    return this._resolution;\n  }\n  set resolution(value: PrintResolution) {\n    this._resolution = value;\n  }\n  private _resolution: PrintResolution;\n\n  constructor(private printService: PrintService) {}\n\n  handleFormSubmit(data: PrintOptions) {\n    this.disabled$.next(true);\n\n    if (data.isPrintService === true) {\n      this.printService\n        .print(this.map, data)\n        .pipe(take(1))\n        .subscribe(() => {\n          this.disabled$.next(false);\n        });\n    } else {\n      let nbFileToProcess = 1;\n\n      if (data.showLegend) {\n        nbFileToProcess++;\n      }\n      if (data.imageFormat.toLowerCase() === 'tiff') {\n        nbFileToProcess++;\n      }\n\n      if (data.legendPosition === 'newpage') {\n        nbFileToProcess++;\n      }\n\n      this.printService.defineNbFileToProcess(nbFileToProcess);\n\n      this.printService\n        .downloadMapImage(\n          this.map,\n          data.resolution,\n          data.imageFormat,\n          data.showProjection,\n          data.showScale,\n          data.title,\n          data.subtitle,\n          data.comment,\n          data.doZipFile,\n          data.legendPosition,\n          data.showNorthArrow\n        )\n        .pipe(take(1))\n        .subscribe(() => {\n          this.disabled$.next(false);\n        });\n    }\n  }\n}\n","<igo-print-form\n  [outputFormat]=\"outputFormat\"\n  [paperFormat]=\"paperFormat\"\n  [orientation]=\"orientation\"\n  [imageFormat]=\"imageFormat\"\n  [resolution]=\"resolution\"\n  [legendPosition]=\"legendPosition\"\n  [disabled$]=\"disabled$\"\n  (submit)=\"handleFormSubmit($event)\"\n>\n</igo-print-form>\n","import { NgModule } from '@angular/core';\n\nimport { PrintFormComponent } from './print-form/print-form.component';\nimport { PrintComponent } from './print/print.component';\n\n/**\n * @deprecated import the PrintComponent, PrintFormComponent directly\n */\n@NgModule({\n  imports: [PrintComponent, PrintFormComponent],\n  exports: [PrintComponent, PrintFormComponent]\n})\nexport class IgoPrintModule {}\n","import { Provider } from '@angular/core';\n\nimport {\n  DirectionSourceFeature,\n  DirectionSourceKind\n} from './directions-sources';\nimport { DirectionsService } from './shared';\nimport { provideDirectionsSourceService } from './shared/directions-source.service';\n\nexport function provideDirection(\n  ...sources: DirectionSourceFeature<DirectionSourceKind>[]\n): Provider[] {\n  const providers: Provider[] = [\n    {\n      provide: DirectionsService,\n      useClass: DirectionsService\n    },\n    provideDirectionsSourceService()\n  ];\n\n  for (const source of sources) {\n    providers.push(...source.providers);\n  }\n\n  return providers;\n}\n","import { Provider } from '@angular/core';\n\nexport interface DirectionsSourceOptions extends BaseDirectionsSourceOptions {\n  osrm?: OsrmDirectionsSourceOptions;\n  logo?: string;\n}\n\nexport type OsrmDirectionsSourceOptions = BaseDirectionsSourceOptions;\n\ninterface BaseDirectionsSourceOptions {\n  name?: string;\n  baseUrl?: string;\n  profiles?: BaseDirectionsSourceOptionsProfile[];\n}\n\nexport interface BaseDirectionsSourceOptionsProfile {\n  enabled?: boolean;\n  name: string;\n  authorization?: BaseDirectionsSourceOptionsProfileAuthorization;\n}\n\nexport interface BaseDirectionsSourceOptionsProfileAuthorization {\n  url: string;\n  property: string;\n}\n\nexport interface DirectionSourceFeature<KindT extends DirectionSourceKind> {\n  kind: KindT;\n  providers: Provider[];\n}\n\nexport enum DirectionSourceKind {\n  OSRM = 0\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { uuid } from '@igo2/utils';\n\nimport { Position } from 'geojson';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n  DirectionsFormat,\n  SourceDirectionsType\n} from '../shared/directions.enum';\nimport { DirectionOptions, Directions } from '../shared/directions.interface';\nimport { DirectionsSource } from './directions-source';\nimport {\n  BaseDirectionsSourceOptionsProfile,\n  OsrmDirectionsSourceOptions\n} from './directions-source.interface';\n\n@Injectable()\nexport class OsrmDirectionsSource extends DirectionsSource {\n  get options(): OsrmDirectionsSourceOptions {\n    return this._options;\n  }\n\n  set options(value: OsrmDirectionsSourceOptions) {\n    this._options = value;\n  }\n\n  get sourceName(): string {\n    return this._options.name;\n  }\n\n  set sourceName(value: string) {\n    this._options.name = value;\n  }\n\n  get baseUrl(): string {\n    return this._options.baseUrl;\n  }\n\n  set baseUrl(value: string) {\n    this._options.baseUrl = value;\n  }\n\n  get url(): string {\n    return `${this.baseUrl}${this.getEnabledProfile().name}/`;\n  }\n\n  get profiles(): BaseDirectionsSourceOptionsProfile[] {\n    return this._options.profiles;\n  }\n\n  set profiles(value: BaseDirectionsSourceOptionsProfile[]) {\n    this._options.profiles = value;\n  }\n\n  private _options: OsrmDirectionsSourceOptions;\n\n  constructor(\n    private _http: HttpClient,\n    private _config: ConfigService\n  ) {\n    super();\n    this._options = this._config.getConfig('directionsSources.osrm');\n    if (!this.baseUrl) {\n      this.baseUrl = '/apis/itineraire/route/v1/';\n    }\n\n    if (!this.sourceName) {\n      this.sourceName = 'OSRM Québec';\n    }\n\n    if (!this.profiles) {\n      const profile: BaseDirectionsSourceOptionsProfile = {\n        enabled: true,\n        name: 'driving'\n      };\n      this.profiles = [profile];\n    } else {\n      if (!this.profiles.find((profile) => profile.enabled)) {\n        this.profiles[0].enabled = true;\n      }\n    }\n  }\n\n  getSourceName(): string {\n    return this.sourceName;\n  }\n\n  getEnabledProfile(): BaseDirectionsSourceOptionsProfile {\n    return this.profiles.find((profile) => profile.enabled);\n  }\n\n  getProfileWithAuthorization(): BaseDirectionsSourceOptionsProfile {\n    return this.profiles.find((profile) => profile.authorization);\n  }\n\n  route(\n    coordinates: Position[],\n    directionsOptions: DirectionOptions = {}\n  ): Observable<Directions[]> {\n    const directionsParams = this.getRouteParams(directionsOptions);\n    return this.getRoute(coordinates, directionsParams);\n  }\n\n  private getRoute(\n    coordinates: Position[],\n    params: HttpParams\n  ): Observable<Directions[]> {\n    const url: string = this.url;\n    return this._http\n      .get<JSON[]>(url + coordinates.join(';'), {\n        params\n      })\n      .pipe(map((res) => this.extractRoutesData(res)));\n  }\n\n  private extractRoutesData(response): Directions[] {\n    const routeResponse = [];\n    response.routes.forEach((route) => {\n      routeResponse.push(this.formatRoute(route, response.waypoints));\n    });\n    return routeResponse;\n  }\n\n  private getRouteParams(directionsOptions: DirectionOptions = {}): HttpParams {\n    directionsOptions.alternatives =\n      directionsOptions.alternatives !== undefined\n        ? directionsOptions.alternatives\n        : true;\n    directionsOptions.steps =\n      directionsOptions.steps !== undefined ? directionsOptions.steps : true;\n    directionsOptions.geometries =\n      directionsOptions.geometries !== undefined\n        ? directionsOptions.geometries\n        : 'geojson';\n    directionsOptions.overview =\n      directionsOptions.overview !== undefined\n        ? directionsOptions.overview\n        : false;\n    directionsOptions.continue_straight =\n      directionsOptions.continue_straight !== undefined\n        ? directionsOptions.continue_straight\n        : false;\n\n    return new HttpParams({\n      fromObject: {\n        alternatives: directionsOptions.alternatives ? 'true' : 'false',\n        overview: directionsOptions.overview ? 'simplified' : 'full',\n        steps: directionsOptions.steps ? 'true' : 'false',\n        geometries: directionsOptions.geometries\n          ? directionsOptions.geometries\n          : 'geojson',\n        continue_straight: directionsOptions.continue_straight\n          ? 'true'\n          : 'false'\n      }\n    });\n  }\n\n  private formatRoute(roadNetworkRoute: any, waypoints: any): Directions {\n    const stepsUI = [];\n    roadNetworkRoute.legs.forEach((leg) => {\n      leg.steps.forEach((step) => {\n        stepsUI.push(step);\n      });\n    });\n    return {\n      id: uuid(),\n      title: roadNetworkRoute.legs[0].summary,\n      source: this.url,\n      sourceType: SourceDirectionsType.Route,\n      order: 1,\n      format: DirectionsFormat.GeoJSON,\n      icon: 'directions',\n      projection: 'EPSG:4326',\n      waypoints,\n      distance: roadNetworkRoute.distance,\n      duration: roadNetworkRoute.duration,\n      geometry: roadNetworkRoute.geometry,\n      legs: roadNetworkRoute.legs,\n      steps: stepsUI,\n      weight: roadNetworkRoute.weight,\n      weight_name: roadNetworkRoute.weight_name\n    };\n  }\n}\n","import { HttpClient } from '@angular/common/http';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport { DirectionsSource } from './directions-source';\nimport {\n  DirectionSourceFeature,\n  DirectionSourceKind\n} from './directions-source.interface';\nimport { OsrmDirectionsSource } from './osrm-directions-source';\n\nexport function osrmDirectionsSourcesFactory(\n  http: HttpClient,\n  config: ConfigService\n) {\n  return new OsrmDirectionsSource(http, config);\n}\n\nexport function provideOsrmDirectionsSource() {\n  return {\n    provide: DirectionsSource,\n    useFactory: osrmDirectionsSourcesFactory,\n    multi: true,\n    deps: [HttpClient, ConfigService]\n  };\n}\n\nexport function withOsrmSource(): DirectionSourceFeature<DirectionSourceKind.OSRM> {\n  return {\n    kind: DirectionSourceKind.OSRM,\n    providers: [provideOsrmDirectionsSource()]\n  };\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { MessageService } from '@igo2/core/message';\n\nimport { default as JSZip } from 'jszip';\nimport { ActiveToast } from 'ngx-toastr';\nimport { of, zip } from 'rxjs';\nimport { catchError, concatMap } from 'rxjs/operators';\n\nimport { InsertSourceInsertDBEnum } from './geoDB.enums';\nimport { DatasToIDB, GeoDBData } from './geoDB.interface';\nimport { GeoDBService } from './geoDB.service';\n\n@Injectable()\nexport class ConfigFileToGeoDBService {\n  constructor(\n    private http: HttpClient,\n    private geoDBService: GeoDBService,\n    private messageService: MessageService\n  ) {}\n\n  load(url: string) {\n    let downloadMessage: ActiveToast<any>;\n    this.http\n      .get(url)\n      .pipe(\n        catchError((error: HttpErrorResponse) => {\n          this.messageService.error(`GeoData file ${url} could not be read`);\n          error.error.caught = true;\n          throw error;\n        }),\n        concatMap((datasToIDB: DatasToIDB) => {\n          const datas$ = [];\n          let firstDownload = true;\n          if (datasToIDB?.geoDatas) {\n            const currentDate = new Date();\n            datasToIDB?.geoDatas.map((geoData) => {\n              if (typeof geoData.triggerDate === 'string') {\n                geoData.triggerDate = new Date(Date.parse(geoData.triggerDate));\n              }\n              if (currentDate >= geoData.triggerDate) {\n                if (geoData.action === 'update') {\n                  const insertEvent = `${\n                    geoData.source || InsertSourceInsertDBEnum.System\n                  } (${geoData.triggerDate})`;\n                  geoData.urls.map((url) => {\n                    datas$.push(\n                      this.geoDBService.getByID(url).pipe(\n                        concatMap((res: GeoDBData) => {\n                          if (res?.insertEvent !== insertEvent) {\n                            if (firstDownload) {\n                              downloadMessage = this.messageService.info(\n                                'igo.geo.indexedDb.data-download-start',\n                                undefined,\n                                {\n                                  disableTimeOut: true,\n                                  progressBar: false,\n                                  closeButton: true,\n                                  tapToDismiss: false\n                                }\n                              );\n                              firstDownload = false;\n                            }\n                            let responseType: any = 'json';\n                            const isZip = this.isZip(url);\n                            if (isZip) {\n                              responseType = 'arraybuffer';\n                            }\n                            return this.http.get(url, { responseType }).pipe(\n                              catchError((error: HttpErrorResponse) => {\n                                this.messageService.remove(\n                                  downloadMessage.toastId\n                                );\n                                this.messageService.error(\n                                  'igo.geo.indexedDb.data-download-failed',\n                                  undefined,\n                                  { timeOut: 40000 }\n                                );\n\n                                error.error.caught = true;\n                                throw error;\n                              }),\n                              concatMap((r) => {\n                                if (isZip) {\n                                  const observables$ = [\n                                    this.geoDBService.update(\n                                      url,\n                                      url,\n                                      {},\n                                      InsertSourceInsertDBEnum.System,\n                                      insertEvent\n                                    )\n                                  ];\n                                  JSZip.loadAsync(r).then((zipped) => {\n                                    zipped.forEach((relativePath) => {\n                                      if (\n                                        relativePath\n                                          .toLocaleLowerCase()\n                                          .endsWith('.geojson')\n                                      ) {\n                                        zipped\n                                          .file(relativePath)\n                                          .async('text')\n                                          .then((r) => {\n                                            const geojson = JSON.parse(r);\n                                            const subUrl =\n                                              geoData.zippedBaseUrl || '';\n                                            const zippedUrl =\n                                              subUrl +\n                                              (subUrl.endsWith('/')\n                                                ? ''\n                                                : '/') +\n                                              relativePath;\n                                            observables$.push(\n                                              this.geoDBService.update(\n                                                zippedUrl,\n                                                url,\n                                                geojson,\n                                                InsertSourceInsertDBEnum.System,\n                                                insertEvent\n                                              )\n                                            );\n                                          });\n                                      }\n                                    });\n                                  });\n                                  return zip(observables$);\n                                }\n                                return this.geoDBService.update(\n                                  url,\n                                  url,\n                                  r,\n                                  InsertSourceInsertDBEnum.System,\n                                  insertEvent\n                                );\n                              })\n                            );\n                          } else {\n                            return of(false);\n                          }\n                        })\n                      )\n                    );\n                  });\n                } else if (geoData.action === 'delete') {\n                  geoData.urls.map((url) => {\n                    datas$.push(this.geoDBService.deleteByKey(url));\n                  });\n                }\n              }\n            });\n          }\n          return zip(...datas$);\n        })\n      )\n      .subscribe(() => {\n        if (downloadMessage) {\n          setTimeout(() => {\n            this.messageService.remove(downloadMessage.toastId);\n            this.messageService.success(\n              'igo.geo.indexedDb.data-download-completed',\n              undefined,\n              { timeOut: 40000 }\n            );\n          }, 2500);\n        }\n      });\n  }\n\n  private isZip(value) {\n    const regex = /(zip)$/;\n    return typeof value === 'string' && regex.test(value.toLowerCase());\n  }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { DBConfig, provideIndexedDb } from 'ngx-indexed-db';\n\nimport { ConfigFileToGeoDBService, GeoDBService } from './geoDB';\nimport { LayerDBService } from './layerDB';\nimport { IOfflineOptions } from './offline.interface';\nimport { GeoNetworkService } from './shared';\n\nconst dbConfig: DBConfig = {\n  name: 'igo2DB',\n  version: 2,\n  objectStoresMeta: [\n    {\n      store: 'geoData',\n      storeConfig: { keyPath: 'url', autoIncrement: false },\n      storeSchema: [\n        { name: 'regionID', keypath: 'regionID', options: { unique: false } }\n      ]\n    },\n    {\n      store: 'layerData',\n      storeConfig: { keyPath: 'layerId', autoIncrement: false },\n      storeSchema: [\n        {\n          name: 'layerOptions',\n          keypath: 'layerOptions',\n          options: { unique: false }\n        },\n        {\n          name: 'sourceOptions',\n          keypath: 'sourceOptions',\n          options: { unique: false }\n        }\n      ]\n    }\n  ]\n};\n\nexport function provideOffline(options: IOfflineOptions): EnvironmentProviders {\n  const dbConfigFormatted = {};\n  for (const config of [dbConfig]) {\n    Object.assign(dbConfigFormatted, { [config.name]: dbConfig });\n  }\n\n  return makeEnvironmentProviders(\n    options?.enable\n      ? [\n          provideIndexedDb(dbConfig),\n          LayerDBService,\n          GeoDBService,\n          GeoNetworkService,\n          ConfigFileToGeoDBService\n        ]\n      : []\n  );\n}\n","export enum OverlayAction {\n  None,\n  Move,\n  Zoom,\n  ZoomIfOutMapExtent\n}\n","import { Provider } from '@angular/core';\n\nimport { provideSearchSourceService } from './search-source-service.providers';\nimport { SearchService } from './search.service';\nimport {\n  SearchSourceFeature,\n  SearchSourceKind\n} from './sources/source.interfaces';\n\ninterface ISearchProviderOptions {\n  /** Share the search term with analytics tracking */\n  analytics?: boolean;\n}\n\nexport function provideSearch(\n  sources: SearchSourceFeature<SearchSourceKind>[],\n  options?: ISearchProviderOptions\n): Provider[] {\n  const providers: Provider[] = [\n    options?.analytics && {\n      provide: 'searchAnalytics',\n      useValue: options.analytics\n    },\n    {\n      provide: SearchService,\n      useClass: SearchService\n    },\n    provideSearchSourceService()\n  ].filter(Boolean);\n\n  for (const source of sources) {\n    providers.push(...source.providers);\n  }\n\n  return providers;\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\nimport { customCacheHasher } from '@igo2/utils';\n\nimport olWKT from 'ol/format/WKT';\n\nimport { GeoJsonGeometryTypes } from 'geojson';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Cacheable } from 'ts-cacheable';\n\nimport { FEATURE } from '../../../feature/shared/feature.enums';\nimport {\n  Feature,\n  FeatureGeometry\n} from '../../../feature/shared/feature.interfaces';\nimport { SearchResult, TextSearch } from '../search.interfaces';\nimport { computeTermSimilarity } from '../search.utils';\nimport { SearchSource } from './source';\nimport { SearchSourceOptions, TextSearchOptions } from './source.interfaces';\n\n/**\n * Cadastre search source\n */\n@Injectable()\nexport class CadastreSearchSource extends SearchSource implements TextSearch {\n  static id = 'cadastre';\n  static type = FEATURE;\n\n  constructor(\n    private http: HttpClient,\n    private languageService: LanguageService,\n    storageService: StorageService,\n    @Inject('options') options: SearchSourceOptions\n  ) {\n    super(options, storageService);\n  }\n\n  getId(): string {\n    return CadastreSearchSource.id;\n  }\n\n  getType(): string {\n    return CadastreSearchSource.type;\n  }\n\n  /*\n   * Source : https://wiki.openstreetmap.org/wiki/Key:amenity\n   */\n  protected getDefaultOptions(): SearchSourceOptions {\n    return {\n      title: 'Cadastre (Québec)',\n      searchUrl: 'https://carto.cptaq.gouv.qc.ca/php/find_lot_v1.php?'\n    };\n  }\n\n  /**\n   * Search a place by name\n   * @param term Place name\n   * @returns Observable of <SearchResult<Feature>[]\n   */\n  search(\n    term: string | undefined,\n    options?: TextSearchOptions\n  ): Observable<SearchResult<Feature>[]> {\n    term = term.replace(/ /g, '');\n    term = term.replace(/,+/g, ',');\n    term = term.endsWith(',') ? term.slice(0, -1) : term;\n    term = term.startsWith(',') ? term.substr(1) : term;\n\n    const params = this.computeSearchRequestParams(term, options || {});\n    if (!params.get('numero') || !params.get('numero').match(/^[0-9,]+$/g)) {\n      return of([]);\n    }\n    return this.getCadastre(term, params);\n  }\n\n  @Cacheable({\n    maxCacheCount: 20,\n    cacheHasher: customCacheHasher\n  })\n  private getCadastre(\n    term: string,\n    params: HttpParams\n  ): Observable<SearchResult<Feature>[]> {\n    return this.http\n      .get(this.searchUrl, { params, responseType: 'text' })\n      .pipe(map((response: string) => this.extractResults(response, term)));\n  }\n\n  private computeSearchRequestParams(\n    term: string,\n    options: TextSearchOptions\n  ): HttpParams {\n    return new HttpParams({\n      fromObject: Object.assign(\n        {\n          numero: term,\n          epsg: '4326'\n        },\n        this.params,\n        options.params || {}\n      )\n    });\n  }\n\n  private extractResults(\n    response: string,\n    term: string\n  ): SearchResult<Feature>[] {\n    return response\n      .split('<br />')\n      .filter((lot: string) => lot.length > 0)\n      .map((lot: string) => this.dataToResult(lot, term));\n  }\n\n  private dataToResult(data: string, term: string): SearchResult<Feature> {\n    const lot = data.split(';');\n    const numero = lot[0];\n    const wkt = lot[7];\n    const geometry = this.computeGeometry(wkt);\n\n    const properties = {\n      NoLot: numero,\n      Route:\n        '<span class=\"routing\"> <u>' +\n        this.languageService.translate.instant('igo.geo.seeRouting') +\n        '</u> </span>'\n    };\n    const id = [this.getId(), 'cadastre', numero].join('.');\n\n    return {\n      source: this,\n      meta: {\n        dataType: FEATURE,\n        id,\n        title: numero,\n        score: computeTermSimilarity(term.trim(), numero),\n        icon: 'location_on'\n      },\n      data: {\n        type: FEATURE,\n        projection: 'EPSG:4326',\n        geometry,\n        properties,\n        meta: {\n          id,\n          title: numero\n        }\n      }\n    };\n  }\n\n  private computeGeometry(wkt: string): FeatureGeometry {\n    const feature = new olWKT().readFeature(wkt, {\n      dataProjection: 'EPSG:4326',\n      featureProjection: 'EPSG:4326'\n    });\n    return {\n      type: feature.getGeometry().getType() as GeoJsonGeometryTypes,\n      coordinates: (feature.getGeometry() as any).getCoordinates()\n    };\n  }\n}\n","import { HttpClient } from '@angular/common/http';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { CadastreSearchSource } from './cadastre';\nimport { SearchSource } from './source';\nimport { SearchSourceFeature, SearchSourceKind } from './source.interfaces';\n\n/**\n * Cadastre search source factory\n * @ignore\n */\nexport function cadastreSearchSourceFactory(\n  http: HttpClient,\n  languageService: LanguageService,\n  storageService: StorageService,\n  config: ConfigService\n) {\n  return new CadastreSearchSource(\n    http,\n    languageService,\n    storageService,\n    config.getConfig(`searchSources.${CadastreSearchSource.id}`)\n  );\n}\n\n/**\n * Function that returns a provider for the Cadastre search source\n */\nexport function provideCadastreSearchSource() {\n  return {\n    provide: SearchSource,\n    useFactory: cadastreSearchSourceFactory,\n    multi: true,\n    deps: [HttpClient, LanguageService, StorageService, ConfigService]\n  };\n}\n\nexport function withCadastreSource(): SearchSourceFeature<SearchSourceKind.Cadastre> {\n  return {\n    kind: SearchSourceKind.Cadastre,\n    providers: [provideCadastreSearchSource()]\n  };\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { StorageService } from '@igo2/core/storage';\nimport { customCacheHasher } from '@igo2/utils';\n\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Cacheable } from 'ts-cacheable';\n\nimport { FEATURE } from '../../../feature/shared/feature.enums';\nimport {\n  Feature,\n  FeatureGeometry\n} from '../../../feature/shared/feature.interfaces';\nimport { SearchResult, TextSearch } from '../search.interfaces';\nimport { computeTermSimilarity } from '../search.utils';\nimport { NominatimData } from './nominatim.interfaces';\nimport { SearchSource } from './source';\nimport { SearchSourceOptions, TextSearchOptions } from './source.interfaces';\n\n/**\n * Nominatim search source\n */\n@Injectable()\nexport class NominatimSearchSource extends SearchSource implements TextSearch {\n  static id = 'nominatim';\n  static type = FEATURE;\n\n  constructor(\n    private http: HttpClient,\n    @Inject('options') options: SearchSourceOptions,\n    storageService: StorageService\n  ) {\n    super(options, storageService);\n  }\n\n  getId(): string {\n    return NominatimSearchSource.id;\n  }\n\n  getType(): string {\n    return NominatimSearchSource.type;\n  }\n\n  /*\n   * Source : https://wiki.openstreetmap.org/wiki/Key:amenity\n   */\n  protected getDefaultOptions(): SearchSourceOptions {\n    return {\n      title: 'Nominatim (OSM)',\n      searchUrl: 'https://nominatim.openstreetmap.org/search',\n      settings: [\n        {\n          type: 'checkbox',\n          title: 'results type',\n          name: 'amenity',\n          values: [\n            {\n              title: 'igo.geo.search.nominatim.type.food',\n              value:\n                'bar,bbq,biergaten,cafe,drinking_water,fast_food,food_court,ice_cream,pub,restaurant',\n              enabled: false\n            },\n            {\n              title: 'igo.geo.search.nominatim.type.health',\n              value:\n                'baby_hatch,clinic,dentist,doctors,hospital,nursing_home,pharmacy,social_facility,veterinary',\n              enabled: false\n            },\n            {\n              title: 'igo.geo.search.nominatim.type.entertainment',\n              value:\n                'arts_centre,brothel,casino,cinema,community_center_fountain,gambling,nightclub,planetarium \\\n                          ,public_bookcase,social_centre,stripclub,studio,swingerclub,theatre,internet_cafe',\n              enabled: false\n            },\n            {\n              title: 'igo.geo.search.nominatim.type.finance',\n              value: 'atm,bank,bureau_de_change',\n              enabled: false\n            }\n          ]\n        },\n        {\n          type: 'radiobutton',\n          title: 'results limit',\n          name: 'limit',\n          values: [\n            {\n              title: '10',\n              value: 10,\n              enabled: true\n            },\n            {\n              title: '20',\n              value: 20,\n              enabled: false\n            },\n            {\n              title: '50',\n              value: 50,\n              enabled: false\n            }\n          ]\n        },\n        {\n          type: 'radiobutton',\n          title: 'restrictExtent',\n          name: 'countrycodes',\n          values: [\n            {\n              title: 'igo.geo.search.nominatim.country.canada',\n              value: 'CA',\n              enabled: true\n            },\n            {\n              title: 'igo.geo.search.nominatim.country.all',\n              value: null,\n              enabled: false\n            }\n          ]\n        },\n        {\n          type: 'radiobutton',\n          title: 'multiple object',\n          name: 'dedupe',\n          values: [\n            {\n              title: 'igo.geo.search.searchSources.settings.true',\n              value: 0,\n              enabled: false\n            },\n            {\n              title: 'igo.geo.search.searchSources.settings.false',\n              value: 1,\n              enabled: true\n            }\n          ]\n        }\n      ]\n    };\n  }\n\n  /**\n   * Search a place by name\n   * @param term Place name\n   * @returns Observable of <SearchResult<Feature>[]\n   */\n  search(\n    term: string | undefined,\n    options?: TextSearchOptions\n  ): Observable<SearchResult<Feature>[]> {\n    const params = this.computeSearchRequestParams(term, options || {});\n    if (!params.get('q')) {\n      return of([]);\n    }\n    return this.getSearch(term, params);\n  }\n\n  @Cacheable({\n    maxCacheCount: 20,\n    cacheHasher: customCacheHasher\n  })\n  private getSearch(\n    term: string,\n    params: HttpParams\n  ): Observable<SearchResult<Feature>[]> {\n    return this.http\n      .get(this.searchUrl, { params })\n      .pipe(\n        map((response: NominatimData[]) => this.extractResults(response, term))\n      );\n  }\n\n  private computeSearchRequestParams(\n    term: string,\n    options: TextSearchOptions\n  ): HttpParams {\n    return new HttpParams({\n      fromObject: Object.assign(\n        {\n          q: this.computeTerm(term),\n          format: 'json'\n        },\n        this.params,\n        options.params || {}\n      )\n    });\n  }\n\n  private extractResults(\n    response: NominatimData[],\n    term: string\n  ): SearchResult<Feature>[] {\n    return response.map((data: NominatimData) => this.dataToResult(data, term));\n  }\n\n  private dataToResult(\n    data: NominatimData,\n    term: string\n  ): SearchResult<Feature> {\n    const properties = this.computeProperties(data);\n    const geometry = this.computeGeometry(data);\n    const extent = this.computeExtent(data);\n    const id = [this.getId(), 'place', data.place_id].join('.');\n\n    return {\n      source: this,\n      meta: {\n        dataType: FEATURE,\n        id,\n        title: data.display_name,\n        icon: 'location_on',\n        score: computeTermSimilarity(term.trim(), data.display_name)\n      },\n      data: {\n        type: FEATURE,\n        projection: 'EPSG:4326',\n        geometry,\n        extent,\n        properties,\n        meta: {\n          id,\n          title: data.display_name\n        }\n      }\n    };\n  }\n\n  private computeProperties(data: NominatimData): Record<string, any> {\n    return {\n      display_name: data.display_name,\n      place_id: data.place_id,\n      osm_type: data.osm_type,\n      class: data.class,\n      type: data.type\n    };\n  }\n\n  private computeGeometry(data: NominatimData): FeatureGeometry {\n    return {\n      type: 'Point',\n      coordinates: [parseFloat(data.lon), parseFloat(data.lat)]\n    };\n  }\n\n  private computeExtent(data: NominatimData): [number, number, number, number] {\n    return [\n      parseFloat(data.boundingbox[2]),\n      parseFloat(data.boundingbox[0]),\n      parseFloat(data.boundingbox[3]),\n      parseFloat(data.boundingbox[1])\n    ];\n  }\n\n  private computeTerm(term: string): string {\n    return this.computeTermTags(term);\n  }\n\n  /**\n   * Add hashtag from query in Nominatim's format (+[])\n   * @param term Query with hashtag\n   */\n  private computeTermTags(term: string): string {\n    const hashtags = super.getHashtagsValid(term, 'amenity');\n    if (!hashtags) {\n      return this.computeTermSettings(term);\n    }\n\n    if (!hashtags.length) {\n      return null;\n    }\n\n    term = term.replace(/(#[^\\s]*)/g, '');\n    hashtags.forEach((tag) => {\n      term += '+[' + tag + ']';\n    });\n\n    return term;\n  }\n\n  /**\n   * Add hashtag from settings in Nominatim's format (+[])\n   * @param term Query\n   */\n  private computeTermSettings(term: string): string {\n    this.options.settings.forEach((settings) => {\n      if (settings.name === 'amenity') {\n        settings.values.forEach((conf) => {\n          if (conf.enabled && typeof conf.value === 'string') {\n            const splitted = conf.value.split(',');\n            splitted.forEach((value) => {\n              term += '+[' + value + ']';\n            });\n          }\n        });\n      }\n    });\n    return term;\n  }\n}\n","import { HttpClient } from '@angular/common/http';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { NominatimSearchSource } from './nominatim';\nimport { SearchSource } from './source';\nimport { SearchSourceFeature, SearchSourceKind } from './source.interfaces';\n\n/**\n * Nominatim search source factory\n * @ignore\n */\nexport function nominatimSearchSourceFactory(\n  http: HttpClient,\n  config: ConfigService,\n  storageService: StorageService\n) {\n  return new NominatimSearchSource(\n    http,\n    config.getConfig(`searchSources.${NominatimSearchSource.id}`),\n    storageService\n  );\n}\n\n/**\n * Function that returns a provider for the Nominatim search source\n */\nexport function provideNominatimSearchSource() {\n  return {\n    provide: SearchSource,\n    useFactory: nominatimSearchSourceFactory,\n    multi: true,\n    deps: [HttpClient, ConfigService, StorageService]\n  };\n}\n\nexport function withNominatimSource(): SearchSourceFeature<SearchSourceKind.Nominatim> {\n  return {\n    kind: SearchSourceKind.Nominatim,\n    providers: [provideNominatimSearchSource()]\n  };\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\nimport { ObjectUtils, customCacheHasher } from '@igo2/utils';\n\nimport * as olformat from 'ol/format';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Cacheable } from 'ts-cacheable';\n\nimport { FEATURE } from '../../../feature/shared/feature.enums';\nimport { Feature } from '../../../feature/shared/feature.interfaces';\nimport { ReverseSearch, SearchResult, TextSearch } from '../search.interfaces';\nimport { computeTermSimilarity } from '../search.utils';\nimport { SearchSource } from './source';\nimport {\n  ReverseSearchOptions,\n  SearchSourceOptions,\n  TextSearchOptions\n} from './source.interfaces';\nimport {\n  StoredQueriesData,\n  StoredQueriesFields,\n  StoredQueriesResponse,\n  StoredQueriesReverseData,\n  StoredQueriesReverseResponse,\n  StoredQueriesReverseSearchSourceOptions,\n  StoredQueriesSearchSourceOptions\n} from './storedqueries.interfaces';\n\n/**\n * StoredQueries search source\n */\n@Injectable()\nexport class StoredQueriesSearchSource\n  extends SearchSource\n  implements TextSearch\n{\n  static id = 'storedqueries';\n  static type = FEATURE;\n  static propertiesBlacklist: string[] = [\n    'boundedBy',\n    'id',\n    'coord_x',\n    'coord_y'\n  ];\n  public resultTitle: 'title';\n  public storedQueriesOptions: StoredQueriesSearchSourceOptions;\n  public multipleFieldsQuery: boolean;\n\n  constructor(\n    private http: HttpClient,\n    private languageService: LanguageService,\n    storageService: StorageService,\n    @Inject('options') options: SearchSourceOptions\n  ) {\n    super(options, storageService);\n    this.storedQueriesOptions = options as StoredQueriesSearchSourceOptions;\n    if (this.storedQueriesOptions && !this.storedQueriesOptions.available) {\n      return;\n    }\n\n    const defaultStoredqueryId = 'rtss';\n    const defaultFieldSplitter: StoredQueriesFields[] = [\n      { name: 'rtss', defaultValue: '-99' },\n      { name: 'chainage', defaultValue: '0', splitPrefix: '\\\\+' }\n    ];\n    const defaultOutputformat = 'text/xml; subtype=gml/3.1.1';\n    const defaultSrsname = 'EPSG:4326';\n    const defaultResultTitle = 'title';\n\n    if (!this.storedQueriesOptions) {\n      console.log(\n        ' No configuration for this search source (storedqueries). You will use the default values'\n      );\n      this.storedQueriesOptions = {\n        storedquery_id: defaultStoredqueryId,\n        fields: defaultFieldSplitter,\n        outputformat: defaultOutputformat,\n        srsname: defaultSrsname,\n        resultTitle: defaultResultTitle\n      };\n      this.resultTitle = defaultResultTitle;\n      console.log('Default values', this.storedQueriesOptions);\n    }\n\n    if (!this.storedQueriesOptions.storedquery_id) {\n      const err =\n        'Stored Queries :You have to set \"storedquery_id\" into StoredQueries options. ex: storedquery_id: \"nameofstoredquerie\"';\n      throw new Error(err);\n    }\n    if (!this.storedQueriesOptions.fields) {\n      throw new Error(\n        'Stored Queries :You have to set \"fields\" into options. ex: fields: {\"name\": \"rtss\", \"defaultValue\": \"-99\"}'\n      );\n    }\n\n    this.storedQueriesOptions.outputformat =\n      this.storedQueriesOptions.outputformat || 'text/xml; subtype=gml/3.1.1';\n    this.storedQueriesOptions.srsname =\n      this.storedQueriesOptions.srsname || 'EPSG:4326';\n\n    const storedQueryId =\n      this.storedQueriesOptions.storedquery_id.toLowerCase();\n    if (\n      storedQueryId.includes('getfeaturebyid') &&\n      this.storedQueriesOptions.outputformat\n        .toLowerCase()\n        .includes('getfeaturebyid')\n    ) {\n      let err =\n        'You must set a geojson format for your stored query. This is due to an openlayers issue)';\n      err += ' (wfs 1.1.0 & gml 3.1.1 limitation)';\n      throw new Error(err);\n    }\n\n    if (!(this.storedQueriesOptions.fields instanceof Array)) {\n      this.storedQueriesOptions.fields = [this.storedQueriesOptions.fields];\n    }\n\n    this.multipleFieldsQuery =\n      this.storedQueriesOptions.fields.length > 1 ? true : false;\n\n    this.storedQueriesOptions.fields.forEach((field, index) => {\n      if (this.multipleFieldsQuery && !field.splitPrefix && index !== 0) {\n        throw new Error(\n          'Stored Queries :You must set a field spliter into your field definition (optional for the first one!)'\n        );\n      }\n      if (!field.defaultValue) {\n        throw new Error(\n          'Stored Queries :You must set a field default value into your field definition'\n        );\n      }\n    });\n\n    this.storedQueriesOptions.resultTitle =\n      this.storedQueriesOptions.resultTitle || this.resultTitle;\n  }\n\n  getId(): string {\n    return StoredQueriesSearchSource.id;\n  }\n\n  getType(): string {\n    return StoredQueriesSearchSource.type;\n  }\n\n  protected getDefaultOptions(): SearchSourceOptions {\n    return {\n      title: 'Stored Queries',\n      searchUrl: 'https://ws.mapserver.transports.gouv.qc.ca/swtq'\n    };\n  }\n\n  // URL CALL EXAMPLES:\n  //  GetFeatureById (mandatory storedquery for wfs server) (outputformat must be in geojson)\n\n  //  https://ws.mapserver.transports.gouv.qc.ca/swtq?service=wfs&version=2.0.0&request=GetFeature&storedquery_id=urn:ogc:def:query:OGC-WFS::GetFeatureById&srsname=epsg:4326&outputformat=geojson&ID=a_num_route.132\n  //  Custom StoredQuery\n\n  //  https://ws.mapserver.transports.gouv.qc.ca/swtq?service=wfs&version=1.1.0&request=GetFeature&storedquery_id=rtss&srsname=epsg:4326&outputformat=text/xml;%20subtype=gml/3.1.1&rtss=0013801110000c&chainage=12\n\n  /**\n   * Search a location by name or keyword\n   * @param term Location name or keyword\n   * @returns Observable of <SearchResult<Feature>[]\n   */\n  search(\n    term: string,\n    options?: TextSearchOptions\n  ): Observable<SearchResult<Feature>[]> {\n    const storedqueriesParams = this.termSplitter(\n      term,\n      this.storedQueriesOptions.fields\n    );\n    const params = this.computeRequestParams(\n      options || {},\n      storedqueriesParams\n    );\n    this.options.params = this.options.params ? this.options.params : {};\n    this.options.params.page = options.page ? String(options.page) : '1';\n\n    return this.getSearch(term, params);\n  }\n\n  @Cacheable({\n    maxCacheCount: 20,\n    cacheHasher: customCacheHasher\n  })\n  private getSearch(\n    term: string,\n    params: HttpParams\n  ): Observable<SearchResult<Feature>[]> {\n    return new RegExp('.*?gml.*?', 'i').test(\n      this.storedQueriesOptions.outputformat\n    )\n      ? this.http.get(this.searchUrl, { params, responseType: 'text' }).pipe(\n          map((response) => {\n            let resultArray = this.extractResults(\n              this.extractWFSData(response),\n              term\n            );\n            resultArray.sort((a, b) =>\n              a.meta.score > b.meta.score\n                ? 1\n                : a.meta.score === b.meta.score\n                  ? a.meta.titleHtml < b.meta.titleHtml\n                    ? 1\n                    : -1\n                  : -1\n            );\n            resultArray.reverse();\n            if (resultArray.length > Number(this.options.params.limit)) {\n              const idxEnd =\n                Number(this.options.params.limit) *\n                Number(this.options.params.page);\n              const resultTotLenght = resultArray.length;\n              resultArray = resultArray.slice(0, idxEnd);\n              if (idxEnd < resultTotLenght) {\n                resultArray[resultArray.length - 1].meta.nextPage = true;\n              } else {\n                resultArray[resultArray.length - 1].meta.nextPage = false;\n              }\n            }\n            return resultArray;\n          })\n        )\n      : this.http.get(this.searchUrl, { params }).pipe(\n          map((response) => {\n            return this.extractResults(this.extractWFSData(response), term);\n          })\n        );\n  }\n\n  private getFormatFromOptions() {\n    let olFormatCls;\n\n    const outputFormat = this.storedQueriesOptions.outputformat;\n    const patternGml3 = new RegExp('.*?gml.*?', 'i');\n    const patternGeojson = new RegExp('.*?json.*?', 'i');\n\n    if (patternGeojson.test(outputFormat)) {\n      olFormatCls = olformat.GeoJSON;\n    }\n    if (patternGml3.test(outputFormat)) {\n      olFormatCls = olformat.WFS;\n    }\n\n    return new olFormatCls();\n  }\n\n  private extractWFSData(res) {\n    const olFormat = this.getFormatFromOptions();\n    const geojson = olformat.GeoJSON;\n    const wfsfeatures = olFormat.readFeatures(res);\n    const features = JSON.parse(new geojson().writeFeatures(wfsfeatures));\n    return features;\n  }\n\n  private termSplitter(term: string, fields: StoredQueriesFields[]) {\n    const splittedTerm = {};\n    let remainingTerm = term;\n    let cnt = 0;\n\n    // Used to build the default values\n    fields.forEach((field) => {\n      splittedTerm[field.name] = field.defaultValue;\n      const splitterRegex = new RegExp(field.splitPrefix + '(.+)', 'i');\n      if (splitterRegex.test(remainingTerm)) {\n        cnt = field.splitPrefix ? (cnt += 1) : cnt;\n        remainingTerm = remainingTerm.split(splitterRegex)[1];\n      }\n    });\n    if (cnt === 0) {\n      splittedTerm[fields[0].name] = term;\n      return splittedTerm;\n    }\n    remainingTerm = term;\n    const localFields = [...fields].reverse();\n    localFields.forEach((field) => {\n      const splitterRegex = new RegExp(field.splitPrefix || '' + '(.+)', 'i');\n      if (remainingTerm || remainingTerm !== '') {\n        const values = remainingTerm.split(splitterRegex);\n        remainingTerm = values[0];\n        if (values[1]) {\n          splittedTerm[field.name] = values[1].trim();\n        }\n      }\n    });\n    return splittedTerm;\n  }\n\n  private computeRequestParams(\n    options: TextSearchOptions,\n    queryParams\n  ): HttpParams {\n    const wfsversion = this.storedQueriesOptions.storedquery_id\n      .toLowerCase()\n      .includes('getfeaturebyid')\n      ? '2.0.0'\n      : '1.1.0';\n    return new HttpParams({\n      fromObject: Object.assign(\n        {\n          service: 'wfs',\n          version: wfsversion,\n          request: 'GetFeature',\n          storedquery_id: this.storedQueriesOptions.storedquery_id,\n          srsname: this.storedQueriesOptions.srsname,\n          outputformat: this.storedQueriesOptions.outputformat\n        },\n        queryParams,\n        this.params,\n        options.params || {}\n      )\n    });\n  }\n\n  private extractResults(\n    response: StoredQueriesResponse,\n    term: string\n  ): SearchResult<Feature>[] {\n    return response.features.map((data: StoredQueriesData) => {\n      return this.dataToResult(data, term);\n    });\n  }\n\n  private dataToResult(\n    data: StoredQueriesData,\n    term: string\n  ): SearchResult<Feature> {\n    const properties = this.computeProperties(data);\n    const id = [this.getId(), properties.type, data.id].join('.');\n    const title = data.properties[this.storedQueriesOptions.resultTitle]\n      ? this.storedQueriesOptions.resultTitle\n      : this.resultTitle;\n    return {\n      source: this,\n      data: {\n        type: FEATURE,\n        projection: 'EPSG:4326',\n        geometry: data.geometry,\n        // extent: data.bbox,\n        properties,\n        meta: {\n          id,\n          title: data.properties[title]\n        }\n      },\n      meta: {\n        dataType: FEATURE,\n        id,\n        title: data.properties.title,\n        titleHtml: data.properties[title],\n        icon: 'location_on',\n        score: data.properties.title\n          ? computeTermSimilarity(term.trim(), data.properties.title)\n          : computeTermSimilarity(term.trim(), data.properties[title])\n      }\n    };\n  }\n\n  private computeProperties(data: StoredQueriesData): Record<string, any> {\n    const properties = Object.assign(\n      {},\n      ObjectUtils.removeKeys(\n        data.properties,\n        StoredQueriesSearchSource.propertiesBlacklist\n      ),\n      {\n        Route:\n          '<span class=\"routing\"> <u>' +\n          this.languageService.translate.instant('igo.geo.seeRouting') +\n          '</u> </span>'\n      }\n    );\n    return properties;\n  }\n}\n\n/**\n * StoredQueriesReverse search source\n */\n\n// EXAMPLE CALLS\n\n// https://ws.mapserver.transports.gouv.qc.ca/swtq?service=wfs&version=1.1.0&request=GetFeature&storedquery_id=lim_adm&srsname=epsg:4326&outputformat=text/xml;%20subtype=gml/3.1.1&long=-71.292469&lat=46.748107\n//\n\n@Injectable()\nexport class StoredQueriesReverseSearchSource\n  extends SearchSource\n  implements ReverseSearch\n{\n  static id = 'storedqueriesreverse';\n  static type = FEATURE;\n  static propertiesBlacklist: string[] = [];\n  public resultTitle: 'title';\n  public storedQueriesOptions: StoredQueriesReverseSearchSourceOptions;\n  public multipleFieldsQuery: boolean;\n\n  constructor(\n    private http: HttpClient,\n    private languageService: LanguageService,\n    storageService: StorageService,\n    @Inject('options') options: SearchSourceOptions\n  ) {\n    super(options, storageService);\n    this.storedQueriesOptions =\n      options as StoredQueriesReverseSearchSourceOptions;\n\n    if (\n      !this.storedQueriesOptions ||\n      (this.storedQueriesOptions && !this.storedQueriesOptions.available)\n    ) {\n      return;\n    }\n\n    if (!this.storedQueriesOptions.storedquery_id) {\n      const err =\n        'Stored Queries :You have to set \"storedquery_id\" into StoredQueries options. ex: storedquery_id: \"nameofstoredquerie\"';\n      throw new Error(err);\n    }\n    if (!this.storedQueriesOptions.longField) {\n      throw new Error(\n        'Stored Queries :You have to set \"longField\" to map the longitude coordinate to the query params.'\n      );\n    }\n    if (!this.storedQueriesOptions.latField) {\n      throw new Error(\n        'Stored Queries :You have to set \"latField\" to map the latitude coordinate to the query params.'\n      );\n    }\n\n    this.storedQueriesOptions.outputformat =\n      this.storedQueriesOptions.outputformat || 'text/xml; subtype=gml/3.1.1';\n    this.storedQueriesOptions.srsname =\n      this.storedQueriesOptions.srsname || 'EPSG:4326';\n    this.storedQueriesOptions.resultTitle =\n      this.storedQueriesOptions.resultTitle || this.resultTitle;\n  }\n\n  getId(): string {\n    return StoredQueriesReverseSearchSource.id;\n  }\n\n  getType(): string {\n    return StoredQueriesReverseSearchSource.type;\n  }\n\n  protected getDefaultOptions(): SearchSourceOptions {\n    return {\n      title: 'Stored Queries (reverse)',\n      searchUrl: 'https://ws.mapserver.transports.gouv.qc.ca/swtq'\n    };\n  }\n\n  /**\n   * Search a location by coordinates\n   * @param lonLat Location coordinates\n   * @param distance Search raidus around lonLat\n   * @returns Observable of <SearchResult<Feature>[]\n   */\n  reverseSearch(\n    lonLat: [number, number],\n    options?: ReverseSearchOptions\n  ): Observable<SearchResult<Feature>[]> {\n    const params = this.computeRequestParams(lonLat, options || {});\n    return this.getReverseSearch(params);\n  }\n\n  @Cacheable({\n    maxCacheCount: 20,\n    cacheHasher: customCacheHasher\n  })\n  private getReverseSearch(\n    params: HttpParams\n  ): Observable<SearchResult<Feature>[]> {\n    const isGml = new RegExp('.*?gml.*?', 'i').test(\n      this.storedQueriesOptions.outputformat\n    );\n    const request$ = isGml\n      ? this.http.get(this.searchUrl, { params, responseType: 'text' })\n      : this.http.get(this.searchUrl, { params });\n    return request$.pipe(\n      map((response) => {\n        return this.extractResults(this.extractWFSData(response));\n      })\n    );\n  }\n\n  private getFormatFromOptions() {\n    let olFormatCls;\n\n    const outputFormat = this.storedQueriesOptions.outputformat;\n    const patternGml3 = new RegExp('.*?gml.*?', 'i');\n    const patternGeojson = new RegExp('.*?json.*?', 'i');\n\n    if (patternGeojson.test(outputFormat)) {\n      olFormatCls = olformat.GeoJSON;\n    }\n    if (patternGml3.test(outputFormat)) {\n      olFormatCls = olformat.WFS;\n    }\n\n    return new olFormatCls();\n  }\n\n  private extractWFSData(res) {\n    const olFormat = this.getFormatFromOptions();\n    const geojson = olformat.GeoJSON;\n    const wfsfeatures = olFormat.readFeatures(res);\n    const features = JSON.parse(new geojson().writeFeatures(wfsfeatures));\n    return features;\n  }\n\n  private computeRequestParams(\n    lonLat: [number, number],\n    options?: ReverseSearchOptions\n  ): HttpParams {\n    const longLatParams = {};\n    longLatParams[this.storedQueriesOptions.longField] = lonLat[0];\n    longLatParams[this.storedQueriesOptions.latField] = lonLat[1];\n\n    return new HttpParams({\n      fromObject: Object.assign(\n        {\n          service: 'WFS',\n          version: '1.1.0',\n          request: 'GetFeature',\n          storedquery_id: this.storedQueriesOptions.storedquery_id,\n          srsname: this.storedQueriesOptions.srsname,\n          outputformat: this.storedQueriesOptions.outputformat\n        },\n        longLatParams,\n        this.params,\n        options.params || {}\n      )\n    });\n  }\n\n  private extractResults(\n    response: StoredQueriesReverseResponse\n  ): SearchResult<Feature>[] {\n    return response.features.map((data: StoredQueriesReverseData) => {\n      return this.dataToResult(data);\n    });\n  }\n\n  private dataToResult(data: StoredQueriesReverseData): SearchResult<Feature> {\n    const properties = this.computeProperties(data);\n    const id = [this.getId(), properties.type, data.id].join('.');\n    const title = data.properties[this.storedQueriesOptions.resultTitle]\n      ? this.storedQueriesOptions.resultTitle\n      : this.resultTitle;\n\n    return {\n      source: this,\n      data: {\n        type: FEATURE,\n        projection: 'EPSG:4326',\n        geometry: data.geometry,\n        properties,\n        meta: {\n          id,\n          title: data.properties[title]\n        }\n      },\n      meta: {\n        dataType: FEATURE,\n        id,\n        title: data.properties[title],\n        icon: 'location_on'\n      }\n    };\n  }\n\n  private computeProperties(\n    data: StoredQueriesReverseData\n  ): Record<string, any> {\n    const properties = ObjectUtils.removeKeys(\n      data.properties,\n      StoredQueriesReverseSearchSource.propertiesBlacklist\n    );\n    const routing = {\n      Route:\n        '<span class=\"routing\"> <u>' +\n        this.languageService.translate.instant('igo.geo.seeRouting') +\n        '</u> </span>'\n    };\n    return Object.assign(\n      properties,\n      { type: data.properties.doc_type },\n      routing\n    );\n  }\n}\n","import { HttpClient } from '@angular/common/http';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { SearchSource } from './source';\nimport { SearchSourceFeature, SearchSourceKind } from './source.interfaces';\nimport {\n  StoredQueriesReverseSearchSource,\n  StoredQueriesSearchSource\n} from './storedqueries';\n\n/**\n * StoredQueries search source factory\n * @ignore\n */\nexport function storedqueriesSearchSourceFactory(\n  http: HttpClient,\n  languageService: LanguageService,\n  storageService: StorageService,\n  config: ConfigService\n) {\n  return new StoredQueriesSearchSource(\n    http,\n    languageService,\n    storageService,\n    config.getConfig(`searchSources.${StoredQueriesSearchSource.id}`)\n  );\n}\n\n/**\n * Function that returns a provider for the StoredQueries search source\n */\nexport function provideStoredQueriesSearchSource() {\n  return {\n    provide: SearchSource,\n    useFactory: storedqueriesSearchSourceFactory,\n    multi: true,\n    deps: [HttpClient, LanguageService, StorageService, ConfigService]\n  };\n}\n\nexport function withStoredQueriesSource(): SearchSourceFeature<SearchSourceKind.StoredQueries> {\n  return {\n    kind: SearchSourceKind.StoredQueries,\n    providers: [provideStoredQueriesSearchSource()]\n  };\n}\n\n/**\n * StoredQueriesReverse search source factory\n * @ignore\n */\n\nexport function storedqueriesReverseSearchSourceFactory(\n  http: HttpClient,\n  languageService: LanguageService,\n  storageService: StorageService,\n  config: ConfigService\n) {\n  return new StoredQueriesReverseSearchSource(\n    http,\n    languageService,\n    storageService,\n    config.getConfig(`searchSources.${StoredQueriesReverseSearchSource.id}`)\n  );\n}\n\n/**\n * Function that returns a provider for the StoredQueriesReverse search source\n */\nexport function provideStoredQueriesReverseSearchSource() {\n  return {\n    provide: SearchSource,\n    useFactory: storedqueriesReverseSearchSourceFactory,\n    multi: true,\n    deps: [HttpClient, LanguageService, StorageService, ConfigService]\n  };\n}\n\nexport function withStoredQueriesReverseSource(): SearchSourceFeature<SearchSourceKind.StoredQueriesReverse> {\n  return {\n    kind: SearchSourceKind.StoredQueriesReverse,\n    providers: [provideStoredQueriesReverseSearchSource()]\n  };\n}\n","import { Inject, Injectable } from '@angular/core';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\n\nimport pointOnFeature from '@turf/point-on-feature';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\n\nimport { FEATURE } from '../../../feature/shared/feature.enums';\nimport { Feature } from '../../../feature/shared/feature.interfaces';\nimport { Layer } from '../../../layer';\nimport { GoogleLinks } from '../../../utils/googleLinks';\nimport { SearchResult, TextSearch } from '../search.interfaces';\nimport { computeTermSimilarity } from '../search.utils';\nimport { SearchSource } from './source';\nimport { SearchSourceOptions, TextSearchOptions } from './source.interfaces';\nimport { WorkspaceData } from './workspace.interfaces';\n\n/**\n * Workspace search source\n */\n@Injectable()\nexport class WorkspaceSearchSource extends SearchSource implements TextSearch {\n  static id = 'workspace';\n  static type = FEATURE;\n  title$: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n  get title(): string {\n    return this.title$.getValue();\n  }\n\n  constructor(\n    private languageService: LanguageService,\n    storageService: StorageService,\n    @Inject('options') options: SearchSourceOptions\n  ) {\n    super(options, storageService);\n\n    this.languageService.translate\n      .get(this.options.title)\n      .subscribe((title) => this.title$.next(title));\n  }\n\n  getId(): string {\n    return WorkspaceSearchSource.id;\n  }\n\n  getType(): string {\n    return WorkspaceSearchSource.type;\n  }\n\n  protected getDefaultOptions(): SearchSourceOptions {\n    const limit = 5;\n\n    return {\n      title: 'igo.geo.search.workspace.name',\n      searchUrl: undefined,\n      settings: [\n        {\n          type: 'checkbox',\n          title: 'datasets',\n          name: 'datasets',\n          values: []\n        },\n        {\n          type: 'radiobutton',\n          title: 'results limit',\n          name: 'limit',\n          values: [\n            { title: '1', value: 1, enabled: false },\n            { title: '5', value: 5, enabled: limit === 5 || !limit },\n            { title: '10', value: 10, enabled: false },\n            { title: '25', value: 25, enabled: false },\n            { title: '50', value: 50, enabled: false }\n          ]\n        }\n      ]\n    };\n  }\n\n  /**\n   * Search a location by name or keyword\n   * @param term Location name or keyword\n   * @returns Observable of <SearchResult<Feature>[]\n   */\n  search(\n    term: string,\n    options?: TextSearchOptions\n  ): Observable<SearchResult<Feature>[]> {\n    const limitSetting = this.settings.find((s) => s.name === 'limit');\n    const limitValue =\n      (limitSetting.values.find((v) => v.enabled).value as number) || 5;\n    this.options.params.limit = limitValue.toLocaleString();\n    const results: WorkspaceData[] = [];\n    this.options.params.page = (options.page || 1).toLocaleString();\n    const page = options.page || 1;\n    const datasets = this.options.params.datasets.split(',');\n    this.featureStoresWithIndex\n      .filter(\n        (fswi) => fswi.searchDocument && datasets.includes(fswi.layer.title)\n      )\n      .map((fswi) => {\n        const termToUse = term;\n        fswi.searchDocument\n          .search(termToUse, { limit: page * limitValue })\n          .map((foundIn) => {\n            const field = foundIn.field;\n            foundIn.result.map((index) => {\n              const feature = fswi.index.get(index);\n              const score = computeTermSimilarity(\n                termToUse.trim(),\n                feature.properties[field]\n              );\n              results.push({ index, feature, layer: fswi.layer, field, score });\n            });\n          });\n      });\n\n    results.sort((a, b) => (a.score > b.score ? -1 : 1));\n    const gettedIndex = [];\n    const sortedResultToProcess: WorkspaceData[] = [];\n    results.map((r) => {\n      if (!gettedIndex.includes(r.index)) {\n        gettedIndex.push(r.index);\n        sortedResultToProcess.push(r);\n      }\n    });\n\n    return of(\n      this.extractResults(\n        sortedResultToProcess\n          .sort((a, b) => (a.score > b.score ? -1 : 1))\n          .slice(0, page * limitValue)\n      )\n    );\n  }\n\n  private extractResults(results: WorkspaceData[]): SearchResult<Feature>[] {\n    return results.map((result) => this.dataToResult(result, results.length));\n  }\n\n  private dataToResult(\n    data: WorkspaceData,\n    resultsCnt: number\n  ): SearchResult<Feature> {\n    const properties = this.computeProperties(data);\n    const id = [this.getId(), properties.type, data.index].join('.');\n    const titleHtml = data.feature.properties[data.field];\n    const subtitleHtml2 = '<br><small> ' + data.layer.title + '</small>';\n\n    return {\n      source: this,\n      data: {\n        type: FEATURE,\n        projection: 'EPSG:4326',\n        geometry: data.feature.geometry,\n        extent: data.feature.extent,\n        properties,\n        meta: {\n          id,\n          title: data.feature.properties[data.field],\n          alias: this.getAllowedFieldsAndAlias(data.layer)\n        }\n      },\n      meta: {\n        dataType: FEATURE,\n        id,\n        title: data.feature.meta.title,\n        titleHtml: titleHtml + subtitleHtml2,\n        icon: 'location_on',\n        score: data.score,\n        nextPage:\n          resultsCnt % +this.options.params.limit === 0 &&\n          +this.options.params.page < 10\n      }\n    } as SearchResult<Feature>;\n  }\n\n  private getAllowedFieldsAndAlias(layer: Layer) {\n    let allowedFieldsAndAlias;\n    if (\n      layer.options?.source?.options?.sourceFields &&\n      layer.options.source.options.sourceFields.length >= 1\n    ) {\n      allowedFieldsAndAlias = {};\n      layer.options.source.options.sourceFields.forEach((sourceField) => {\n        const alias = sourceField.alias ? sourceField.alias : sourceField.name;\n        allowedFieldsAndAlias[sourceField.name] = alias;\n      });\n    }\n    return allowedFieldsAndAlias;\n  }\n\n  private computeProperties(data: WorkspaceData): Record<string, any> {\n    if (!data.feature.geometry) {\n      return Object.assign(\n        { type: data.layer.title + '.' + data.field },\n        data.feature.properties\n      );\n    }\n    const googleLinksProperties: {\n      GoogleMaps: string;\n      GoogleStreetView?: string;\n    } = {\n      GoogleMaps: ''\n    };\n    let googleMaps;\n    if (data.feature.geometry.type === 'Point') {\n      googleMaps = GoogleLinks.getGoogleMapsCoordLink(\n        data.feature.geometry.coordinates[0],\n        data.feature.geometry.coordinates[1]\n      );\n    } else {\n      const point = pointOnFeature(data.feature.geometry);\n      googleMaps = GoogleLinks.getGoogleMapsCoordLink(\n        point.geometry.coordinates[0],\n        point.geometry.coordinates[1]\n      );\n    }\n    googleLinksProperties.GoogleMaps =\n      '<a href=' +\n      googleMaps +\n      ' target=\"_blank\">' +\n      this.languageService.translate.instant('igo.geo.searchByCoord') +\n      '</a>';\n    if (data.feature.geometry.type === 'Point') {\n      googleLinksProperties.GoogleStreetView =\n        GoogleLinks.getGoogleStreetViewLink(\n          data.feature.geometry.coordinates[0],\n          data.feature.geometry.coordinates[1]\n        );\n    }\n    const routing: {\n      Route: string;\n    } = {\n      Route:\n        '<span class=\"routing\"> <u>' +\n        this.languageService.translate.instant('igo.geo.seeRouting') +\n        '</u> </span>'\n    };\n    return Object.assign(\n      { type: data.feature.sourceId },\n      data.feature.properties,\n      googleLinksProperties,\n      routing\n    );\n  }\n}\n","import { ConfigService } from '@igo2/core/config';\nimport { LanguageService } from '@igo2/core/language';\nimport { StorageService } from '@igo2/core/storage';\n\nimport { SearchSource } from './source';\nimport { SearchSourceFeature, SearchSourceKind } from './source.interfaces';\nimport { WorkspaceSearchSource } from './workspace';\n\n/**\n * Workspace search source factory\n * @ignore\n */\nexport function workspaceSearchSourceFactory(\n  languageService: LanguageService,\n  storageService: StorageService,\n  config: ConfigService\n) {\n  return new WorkspaceSearchSource(\n    languageService,\n    storageService,\n    config.getConfig(`searchSources.${WorkspaceSearchSource.id}`)\n  );\n}\n\n/**\n * Function that returns a provider for the Workspace search source\n */\nexport function provideWorkspaceSearchSource() {\n  return {\n    provide: SearchSource,\n    useFactory: workspaceSearchSourceFactory,\n    multi: true,\n    deps: [LanguageService, StorageService, ConfigService]\n  };\n}\n\nexport function withWorkspaceSource(): SearchSourceFeature<SearchSourceKind.Workspace> {\n  return {\n    kind: SearchSourceKind.Workspace,\n    providers: [provideWorkspaceSearchSource()]\n  };\n}\n","import { NgModule } from '@angular/core';\n\nimport { ConfirmationPopupComponent } from './confirmation-popup.component';\n\n/**\n * @deprecated import the ConfirmationPopupComponent directly\n */\n@NgModule({\n  imports: [ConfirmationPopupComponent],\n  exports: [ConfirmationPopupComponent]\n})\nexport class IgoConfirmationPopupModule {}\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { Workspace } from '@igo2/common/workspace';\nimport type { WorkspaceStore } from '@igo2/common/workspace';\n\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n  FeatureDataSource,\n  WFSDataSource,\n  WMSDataSource\n} from '../../datasource/shared/datasources';\nimport { FeatureStoreInMapExtentStrategy } from '../../feature/shared/strategies/in-map-extent';\nimport { OgcFilterableDataSourceOptions } from '../../filter/shared';\nimport { isLayerItem } from '../../layer';\nimport { AnyLayer, ImageLayer, Layer, VectorLayer } from '../../layer/shared';\nimport { IgoMap } from '../../map/shared/map';\nimport { QueryableDataSourceOptions } from '../../query/shared/query.interfaces';\nimport { EditionWorkspaceService } from '../shared/edition-workspace.service';\nimport { FeatureWorkspaceService } from '../shared/feature-workspace.service';\nimport { WfsWorkspaceService } from '../shared/wfs-workspace.service';\nimport { WmsWorkspaceService } from '../shared/wms-workspace.service';\n\n@Directive({\n  selector: '[igoWorkspaceUpdator]',\n  standalone: true\n})\nexport class WorkspaceUpdatorDirective implements OnInit, OnDestroy {\n  private layers$$: Subscription;\n  private entities$$: Subscription[] = [];\n\n  @Input() map: IgoMap;\n\n  @Input() workspaceStore: WorkspaceStore;\n\n  constructor(\n    private wfsWorkspaceService: WfsWorkspaceService,\n    private wmsWorkspaceService: WmsWorkspaceService,\n    private editionWorkspaceService: EditionWorkspaceService,\n    private featureWorkspaceService: FeatureWorkspaceService\n  ) {}\n\n  ngOnInit() {\n    this.layers$$ = this.map.layerController.all$\n      .pipe(debounceTime(50))\n      .subscribe((layers) => this.onLayersChange(layers));\n  }\n\n  ngOnDestroy() {\n    this.layers$$.unsubscribe();\n    this.entities$$.map((entities) => entities.unsubscribe());\n  }\n\n  private onLayersChange(layers: AnyLayer[]) {\n    const editableLayers = layers.filter(\n      (layer) => isLayerItem(layer) && this.layerIsEditable(layer)\n    ) as Layer[];\n    const editableLayersIds = editableLayers.map((layer) => layer.id);\n\n    const workspacesToAdd = editableLayers\n      .map((layer: VectorLayer) => this.getOrCreateWorkspace(layer))\n      .filter((workspace: Workspace | undefined) => workspace !== undefined);\n\n    const workspacesToRemove = this.workspaceStore\n      .all()\n      .filter((workspace: Workspace) => {\n        return editableLayersIds.indexOf(workspace.id) < 0;\n      });\n\n    if (workspacesToRemove.length > 0) {\n      workspacesToRemove.forEach((workspace: Workspace) => {\n        workspace.entityStore.deactivateStrategyOfType(\n          FeatureStoreInMapExtentStrategy\n        );\n        workspace.deactivate();\n      });\n      this.workspaceStore.state.updateMany(workspacesToRemove, {\n        active: false,\n        selected: false\n      });\n      this.workspaceStore.deleteMany(workspacesToRemove);\n    }\n\n    if (workspacesToAdd.length > 0) {\n      this.workspaceStore.insertMany(workspacesToAdd);\n    }\n  }\n\n  private getOrCreateWorkspace(\n    layer: VectorLayer | ImageLayer\n  ): Workspace | undefined {\n    const workspace = this.workspaceStore.get(layer.id);\n    if (workspace !== undefined) {\n      return;\n    }\n    if (\n      layer.dataSource instanceof WFSDataSource &&\n      layer.dataSource.options.edition?.enabled !== true\n    ) {\n      const wfsWks = this.wfsWorkspaceService.createWorkspace(\n        layer as VectorLayer,\n        this.map\n      );\n      return wfsWks;\n    } else if (\n      layer.dataSource instanceof WMSDataSource &&\n      layer.dataSource.options.edition?.enabled !== true\n    ) {\n      if (!layer.dataSource.options.paramsWFS) {\n        return;\n      }\n      const wmsWks = this.wmsWorkspaceService.createWorkspace(\n        layer as ImageLayer,\n        this.map\n      );\n      wmsWks?.inResolutionRange$.subscribe((inResolutionRange) => {\n        if (\n          (layer.dataSource.options as QueryableDataSourceOptions)\n            ?.queryFormatAsWms\n        ) {\n          (\n            wmsWks.layer.dataSource.options as QueryableDataSourceOptions\n          ).queryable = true;\n          return wmsWks;\n        }\n        (layer.dataSource.options as QueryableDataSourceOptions).queryable =\n          !inResolutionRange;\n        (\n          wmsWks.layer.dataSource.options as QueryableDataSourceOptions\n        ).queryable = inResolutionRange;\n      });\n      return wmsWks;\n    } else if (\n      layer.dataSource instanceof FeatureDataSource &&\n      (layer as VectorLayer).exportable === true &&\n      layer.dataSource.options.edition?.enabled !== true\n    ) {\n      const featureWks = this.featureWorkspaceService.createWorkspace(\n        layer as VectorLayer,\n        this.map\n      );\n      return featureWks;\n    } else if (\n      layer.dataSource instanceof WMSDataSource &&\n      layer.dataSource.options.edition?.enabled === true\n    ) {\n      const editionWks = this.editionWorkspaceService.createWorkspace(\n        layer as ImageLayer,\n        this.map\n      );\n      return editionWks;\n    }\n\n    return;\n  }\n\n  private layerIsEditable(layer: Layer): boolean {\n    const dataSource = layer.dataSource;\n    if (dataSource instanceof WFSDataSource) {\n      return true;\n    }\n    if (dataSource instanceof FeatureDataSource) {\n      return true;\n    }\n    if (dataSource instanceof WMSDataSource) {\n      const dataSourceOptions = (dataSource.options ||\n        {}) as OgcFilterableDataSourceOptions;\n      return (\n        dataSourceOptions.ogcFilters?.enabled ||\n        dataSource.options.paramsWFS?.featureTypes !== undefined\n      );\n    }\n\n    return false;\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { WorkspaceUpdatorDirective } from './workspace-updator.directive';\n\n/**\n * @deprecated import the WorkspaceUpdatorDirective directly\n */\n@NgModule({\n  imports: [WorkspaceUpdatorDirective],\n  exports: [WorkspaceUpdatorDirective]\n})\nexport class IgoWorkspaceUpdatorModule {}\n","/*\n * Public API Surface of geo\n */\n\nexport * from './lib/geo.module';\n\nexport * from './lib/catalog/catalog-browser/catalog-browser.module';\nexport * from './lib/catalog/catalog-library/catalog-library.module';\nexport * from './lib/catalog/catalog.module';\nexport * from './lib/directions/directions.module';\nexport * from './lib/download/download.module';\nexport * from './lib/draw/draw/draw.module';\nexport * from './lib/draw/drawingTool.module';\nexport * from './lib/feature/feature-details/feature-details.directive';\nexport * from './lib/feature/feature-details/feature-details.module';\nexport * from './lib/feature/feature-form/feature-form.module';\nexport * from './lib/feature/feature.module';\nexport * from './lib/filter/filter.module';\nexport * from './lib/geometry/geometry-form-field/geometry-form-field.module';\nexport * from './lib/geometry/geometry.module';\nexport * from './lib/import-export/import-export.module';\nexport * from './lib/layer/layer.module';\nexport * from './lib/map/map.module';\nexport * from './lib/measure/measure.module';\nexport * from './lib/measure/measurer/measurer.module';\nexport * from './lib/metadata/metadata.module';\nexport * from './lib/print/print.module';\nexport * from './lib/query/query.module';\nexport * from './lib/search/search.module';\nexport * from './lib/style/style.module';\nexport * from './lib/toast/toast.module';\nexport * from './lib/wkt/wkt.module';\nexport * from './lib/workspace/workspace.module';\n\nexport * from './lib/catalog';\nexport * from './lib/datasource';\nexport * from './lib/directions';\nexport * from './lib/download';\nexport * from './lib/draw';\nexport * from './lib/environment';\nexport * from './lib/feature';\nexport * from './lib/filter';\nexport * from './lib/geometry';\nexport * from './lib/import-export';\nexport * from './lib/layer';\nexport * from './lib/map';\nexport * from './lib/measure';\nexport * from './lib/metadata';\nexport * from './lib/offline';\nexport * from './lib/overlay';\nexport * from './lib/print';\nexport * from './lib/query';\nexport * from './lib/search';\nexport * from './lib/style';\nexport * from './lib/toast';\nexport * from './lib/utils';\nexport * from './lib/wkt';\nexport * from './lib/workspace';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["GeoPdfPlugin","map","rxMap","olSourceVector","olFormatWKT","OlFormat","OlProj","extentGetWidth","extentGetTopLeft","olloadingstrategy","feature","LayerGroup","olLayerVector","ColorAsArray","catchError","OlFormatGeoJSON","olstyle","olGeom","olProj","olFeature","i5","i1","i3","i4.DirectionsService","i6","i7","i8","i2","i4","i9","i10","i2.MapService","i1.CapabilitiesService","i1.LayerLegendListComponent","debounceTime","i2.OptionsService","i3.WFSService","i3.GeoDBService","i2.StyleService","i3.DataSourceService","i5.GeoNetworkService","i6.LayerDBService","i1.LayerService","i1.LayerListToolService","switchMap","olControlAttribution","olinteraction","i1.MapBrowserComponent","olVectorTileSource","OlGeom","i3.StyleService","i3.DirectionsService","i4.DirectionsSourceService","i5.SearchService","i6.QueryService","i1.DownloadService","i1.OGCFilterTimeService","i12","i1.WktService","i11","i1.OGCFilterService","i13","i14","i15","i16","i1.OgcFilterableListComponent","olGetLength","olGetArea","olGetCenter","Olstyle","FlexSearchDocument","i1.FeatureDetailsComponent","i2.FeatureDetailsDirective","OlStyle","Circle","Polygon","i3.DrawStyleService","i5.DrawIconService","i17","Point","i1.SpatialFilterService","i1.TimeFilterService","i1.TimeFilterListComponent","first","olPoint","i1.ImportService","i2.ExportService","i5.StyleListService","i6.StyleService","i10.DownloadService","i11.LayerService","i18","i19","i20","i21","i2.ImportService","i3.StyleListService","i4.StyleService","i7.LayerService","i1.MetadataService","OlRenderFeature","i2.QueryService","i1.SearchSourceService","i2.SearchService","i3.SearchSourceService","olFormatGeoJSON","Style","take","i1.SearchService","WKT","GeoJSON","i7.StyleService","i3.LayerService","i4.PropertyTypeDetectorService","i5.CapabilitiesService","BehaviorSubject","i3.CapabilitiesService","i6.PropertyTypeDetectorService","i2.WfsWorkspaceService","i3.WmsWorkspaceService","i4.EditionWorkspaceService","i5.FeatureWorkspaceService","i1.CatalogLibaryComponent","i2.AddCatalogDialogComponent","i1.PrintService","i2.GeoDBService","i1.WfsWorkspaceService","i2.WmsWorkspaceService","i3.EditionWorkspaceService","i4.FeatureWorkspaceService"],"mappings":"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"}