{"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/datasource.interface.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/filter.utils.ts","../../../packages/geo/src/lib/filter/shared/ogc-filter.enum.ts","../../../packages/geo/src/lib/filter/shared/ogc-filter.ts","../../../packages/geo/src/lib/filter/shared/ogc-filter.interface.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/filter/shared/date.utils.ts","../../../packages/geo/src/lib/filter/shared/ogc-filter.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/shared/indexed-db.utils.ts","../../../packages/geo/src/lib/offline/geoDB/geoDB.ts","../../../packages/geo/src/lib/offline/geoDB/geoDB.enums.ts","../../../packages/geo/src/lib/offline/layerDB/layerDB.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/datasource/shared/options/options.service.ts","../../../packages/geo/src/lib/datasource/shared/datasource.service.ts","../../../packages/geo/src/lib/offline/geoDB/configFileToGeoDB.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/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/utils/layer-options.utils.ts","../../../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/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/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/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/interactive-selection/interactive-selection.component.ts","../../../packages/geo/src/lib/workspace/widgets/interactive-selection/interactive-selection.component.html","../../../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/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 { HttpClient } from '@angular/common/http';\nimport { DOCUMENT, Injectable, inject } from '@angular/core';\n\nimport { fetchImageFromDepotUrl } 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  private http = inject(HttpClient);\n  private config = inject(ConfigService);\n  private messageService = inject(MessageService);\n  private activityService = inject(ActivityService);\n  private languageService = inject(LanguageService);\n  private document = inject<Document>(DOCUMENT);\n\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  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 depotUrl = this.config?.getConfig('depot.url');\n    return fetchImageFromDepotUrl(url, depotUrl, this.http);\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    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 { 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\n    osm: () => 'OSM',\n\n    tiledebug: () => '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 { Observable, Subscription } from 'rxjs';\n\nimport {\n  LegendMapViewOptions,\n  LegendOptions\n} from '../../../layer/shared/layers/legend.interface';\nimport { generateIdFromSourceOptions } from '../../../utils/id-generator';\nimport { DataService } from './data.service';\nimport {\n  AnyEventName,\n  DataSourceOptions,\n  DatasourceEvent,\n  Legend\n} 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  protected events = new Map<AnyEventName, Subscription>();\n\n  properties = new DatasourceProperties();\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(_style?: string, _view?: LegendMapViewOptions): 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  refresh(): void {\n    this.ol.refresh();\n  }\n\n  addEvents(events: DatasourceEvent[] = []): void {\n    events.forEach(([name, observable]) => {\n      this.addEvent(name, observable);\n    });\n  }\n\n  removeEvents(): void {\n    Array.from(this.events.entries()).forEach(([name, event]) => {\n      event.unsubscribe();\n      this.events.delete(name);\n    });\n  }\n\n  private addEvent(name: AnyEventName, obs: Observable<unknown>): void {\n    const subscription = this.events.get(name);\n    if (subscription) {\n      subscription.unsubscribe();\n    }\n    this.events.set(name, obs.subscribe());\n  }\n\n  public destroy(): void {\n    this.events.forEach((listener) => {\n      listener.unsubscribe();\n    });\n  }\n\n  protected abstract onUnwatch();\n}\n\nclass DatasourceProperties {\n  /** General object to store general properties */\n  private properties = new Map<string, unknown>();\n\n  get(key: string): unknown {\n    return this.properties.get(key);\n  }\n\n  getAll(): Record<string, unknown> {\n    return { ...Object.fromEntries(this.properties.entries()) };\n  }\n\n  set(key: string, value: unknown): void {\n    this.properties.set(key, value);\n  }\n\n  setMany(object: Record<string, unknown>): void {\n    Object.entries(object).forEach(([key, value]) =>\n      this.properties.set(key, value)\n    );\n  }\n\n  delete(key: string): void {\n    this.properties.delete(key);\n  }\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 type { Type } from 'ol/geom/Geometry';\n\nimport { Encoders, Preset, Tokenizer } from 'flexsearch';\nimport type { Observable } from 'rxjs';\n\nimport { DownloadOptions } from '../../../download/shared/download.interface';\nimport { OgcFilterOperatorType } from '../../../filter/shared/ogc-filter.enum';\n\nexport interface DataSourceOptions {\n  type?:\n    | 'wms'\n    | 'wfs'\n    | 'vector'\n    | 'wmts'\n    | 'xyz'\n    | 'osm'\n    | 'tiledebug'\n    | 'carto'\n    | 'arcgisrest'\n    | 'imagearcgisrest'\n    | 'tilearcgisrest'\n    | 'websocket'\n    | 'mvt'\n    | 'cluster';\n  optionsFromCapabilities?: boolean;\n  optionsFromApi?: boolean;\n  _layerOptionsFromSource?: Record<string, string>;\n  url?: string;\n  id?: string;\n  minZoom?: number;\n  maxZoom?: number;\n  minDate?: string;\n  maxDate?: string;\n  stepDate?: string;\n  // TODO: Should those options really belong here?\n  sourceFields?: SourceFieldsOptionsParams[];\n  download?: DownloadOptions;\n  edition?: EditionOptions;\n  relations?: RelationOptions[];\n}\n\nexport interface SourceFieldsOptionsParams {\n  name: any;\n  alias?: any;\n  values?: any;\n  excludeFromOgcFilters?: boolean;\n  allowedOperatorsType?: OgcFilterOperatorType;\n  step?: number;\n  relation?: RelationOptions;\n  type?: number | number[] | string | string[] | boolean | Date;\n  primary?: boolean;\n  visible?: boolean;\n  validation?: SourceFieldsValidationParams;\n  linkColumnForce?: string;\n  multiple?: boolean;\n  tooltip?: string;\n  searchIndex?: searchIndexOptions;\n}\n\nexport interface searchIndexOptions {\n  enabled?: boolean;\n  preset?: Preset;\n  tokenize?: Tokenizer;\n  cache?: boolean | number;\n  resolution?: number;\n  context?: boolean;\n  optimize?: boolean;\n  language?: string;\n  encode?: Encoders;\n}\n\nexport interface EditionOptions {\n  enabled: boolean;\n  baseUrl: string;\n  addUrl: string;\n  deleteUrl: string;\n  modifyUrl: string;\n  geomType: Type;\n  geomDatabaseProj?: string;\n  hasGeometry: boolean;\n  addWithDraw?: boolean;\n  messages?: any[];\n  addHeaders?: Record<string, any>;\n  modifyHeaders?: Record<string, any>;\n  modifyProtocol?: string;\n  addButton?: boolean;\n  modifyButton?: boolean;\n  deleteButton?: boolean;\n}\n\nexport interface RelationOptions {\n  title: string;\n  name: string;\n  table?: string;\n  url?: string;\n  alias?: string;\n  icon?: string;\n  parent?: string;\n  tooltip?: string;\n}\n\nexport interface SourceFieldsValidationParams {\n  mandatory?: boolean;\n  maxLength?: number;\n  minLength?: number;\n  readonly?: boolean;\n  send?: boolean;\n}\n\nexport interface Legend {\n  collapsed?: boolean;\n  display?: boolean;\n  url?: string;\n  html?: string;\n  style?: Record<string, string | number>;\n  title?: string;\n  currentStyle?: string;\n  imgGraphValue?: string;\n}\n\n// refer to https://openlayers.org/en/latest/apidoc/module-ol_tilegrid_TileGrid-TileGrid.html\nexport interface TileGridOptions {\n  extent: [number, number, number, number];\n  minZoom?: number;\n  origin?: [number, number];\n  origins?: [number, number][];\n  resolutions: number[];\n  sizes?: [number, number][];\n  tileSize?: [number, number];\n  tileSizes?: [number, number][];\n}\n\nexport type AnyEventName = EventRefresh;\nexport const EventRefresh = 'refresh' as const;\nexport type EventRefresh = typeof EventRefresh;\n\nexport type DatasourceEvent = [AnyEventName, Observable<unknown>];\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","import moment from 'moment';\n\nimport {\n  AnyBaseOgcFilterOptions,\n  IgoLogicalArrayOptions,\n  OgcFilterConditionsArrayOptions,\n  OgcFilterSpatialOptions\n} from './ogc-filter.interface';\n\nexport const TimeFrame = ['now', 'today'] as const;\nexport type TimeFrame = (typeof TimeFrame)[number];\n\nexport const TimeUnit = [\n  'years',\n  'months',\n  'weeks',\n  'days',\n  'hours',\n  'seconds'\n] as const;\nexport type TimeUnit = (typeof TimeUnit)[number];\n\nexport const ArithmeticSymbol = ['+', '-'] as const;\nexport type ArithmeticSymbol = (typeof ArithmeticSymbol)[number];\n\n/**\n * this function to parse date with specific format\n * exemple 'today' or 'today + 1 days' or 'now + 1 years'\n * @param value string date\n * @returns date\n */\nexport function parseDateOperation(dateOperation: string): string {\n  const normalizedOp = dateOperation.replace(/\\s+/g, '');\n\n  if (normalizedOp === TimeFrame[0]) {\n    return moment().format();\n  } else if (normalizedOp === TimeFrame[1]) {\n    return moment().endOf('day').format();\n  }\n\n  const regex = new RegExp(\n    `(${TimeFrame.join('|')})([${ArithmeticSymbol.join('|')}]\\\\d+)(${TimeUnit.join('|')})?`,\n    'i'\n  );\n\n  const match = normalizedOp.match(regex);\n\n  if (!match) {\n    console.warn('Invalid format. example: today or today + 1 year...');\n    return moment().toString();\n  }\n\n  let date = match[1] === TimeFrame[0] ? moment() : moment().endOf('day');\n\n  if (!match[2]) {\n    console.warn(\n      `Invalid arithmetic symbol or value. Expected one of: ${ArithmeticSymbol.join(', ')}`\n    );\n    return date.format();\n  }\n\n  const operator = match[2][0] as ArithmeticSymbol;\n  const value = parseInt(match[2].slice(1), 10);\n  const unit = match[3]?.toLowerCase() as TimeUnit;\n\n  if (!match[3] && !TimeUnit.includes(unit)) {\n    console.warn(`Invalid time unit. Expected one of: ${TimeUnit.join(', ')}`);\n    return date.format();\n  }\n\n  if (operator === ArithmeticSymbol['0']) {\n    date = date.add(value, unit);\n  } else {\n    date = date.subtract(value, unit);\n  }\n\n  return date.format();\n}\n\nexport function isIgoLogicalArray(\n  filters: IgoLogicalArrayOptions | AnyBaseOgcFilterOptions\n): filters is IgoLogicalArrayOptions {\n  return 'filters' in filters && 'logical' in filters;\n}\n\nexport function isFilterAttributeOptions(\n  filters: AnyBaseOgcFilterOptions\n): filters is Exclude<\n  AnyBaseOgcFilterOptions & {\n    filterid?: string;\n  },\n  OgcFilterConditionsArrayOptions | OgcFilterSpatialOptions\n> {\n  return 'propertyName' in filters;\n}\n\n/**\n * Recursive\n * Search inside filters of OgcFiltersOptions\n */\nexport function searchFilter(\n  filters: IgoLogicalArrayOptions | AnyBaseOgcFilterOptions,\n  key: 'propertyName' | 'filterid',\n  value: string\n):\n  | ((IgoLogicalArrayOptions | AnyBaseOgcFilterOptions) & {\n      filterid?: string;\n    })\n  | undefined {\n  if (isIgoLogicalArray(filters)) {\n    if (Array.isArray(filters.filters)) {\n      return filters.filters.find((filter) => searchFilter(filter, key, value));\n    } else {\n      searchFilter(filters, key, value);\n    }\n  } else if (isFilterAttributeOptions(filters)) {\n    if (filters[key] === value) {\n      return filters;\n    }\n  }\n  return undefined;\n}\n\nexport function isTimeFrame(value: string): boolean {\n  return TimeFrame.some((timeFrame) =>\n    value.toLocaleLowerCase().includes(timeFrame)\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 { parseDateOperation } from './filter.utils';\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 parseDateOperation(value);\n    } else if (moment(value).isValid()) {\n      return value;\n    } else {\n      return undefined;\n    }\n  }\n}\n","import { DOMValue } from '@igo2/common/dom';\n\nimport olFormatFilter from 'ol/format/filter/Filter';\nimport olGeometry from 'ol/geom/Geometry';\nimport olSource from 'ol/source/Source';\nimport olSourceVector from 'ol/source/Vector';\n\nimport { DataSource } from '../../datasource/shared/datasources/datasource';\nimport { DataSourceOptions } from '../../datasource/shared/datasources/datasource.interface';\nimport { OgcFilterOperatorType } from './ogc-filter.enum';\n\nexport type OgcFilter = olFormatFilter;\n\nexport interface WFSWriteGetFeatureOptions {\n  featureNS?: string;\n  featurePrefix?: string;\n  featureTypes: string[];\n  srsName?: string;\n  handle?: string;\n  outputFormat?: string;\n  maxFeatures?: number;\n  geometryName?: string;\n  propertyNames?: string[];\n  startIndex?: number;\n  count?: number;\n  bbox?: [number, number, number, number];\n  filter?: olFormatFilter;\n  resultType?: string;\n}\n\nexport type AnyBaseOgcFilterOptions =\n  | OgcFilterConditionsArrayOptions\n  | OgcFilterSpatialOptions\n  | OgcFilterDuringOptions\n  | OgcFilterIsBetweenOptions\n  | OgcFilterEqualToOptions\n  | OgcFilterGreaterLessOptions\n  | OgcFilterIsLikeOptions\n  | OgcFilterIsNullOptions;\n\nexport type IgoOgcFilterObject =\n  | IgoLogicalArrayOptions\n  | AnyBaseOgcFilterOptions;\n\nexport interface OgcFiltersOptions {\n  enabled?: boolean;\n  editable?: boolean;\n  filters?: (IgoLogicalArrayOptions | AnyBaseOgcFilterOptions) & {\n    filterid?: string;\n  };\n  pushButtons?: IgoOgcSelector;\n  checkboxes?: IgoOgcSelector;\n  radioButtons?: IgoOgcSelector;\n  select?: IgoOgcSelector;\n  autocomplete?: IgoOgcSelector;\n  interfaceOgcFilters?: OgcInterfaceFilterOptions[];\n  filtered?: boolean;\n  advancedOgcFilters?: boolean;\n  geometryName?: string;\n  allowedOperatorsType?: OgcFilterOperatorType;\n}\n\nexport interface IgoOgcSelector {\n  groups: SelectorGroup[];\n  bundles: OgcSelectorBundle[];\n  selectorType:\n    | 'pushButton'\n    | 'checkbox'\n    | 'radioButton'\n    | 'select'\n    | 'autocomplete';\n  order?: number;\n}\n\nexport const OgcSelectorFields = [\n  'pushButtons',\n  'checkboxes',\n  'radioButtons',\n  'select',\n  'autocomplete'\n] as const;\n\nexport interface SelectorGroup {\n  enabled?: boolean;\n  title?: string;\n  name: string;\n  ids?;\n  computedSelectors?: OgcSelectorBundle[];\n}\n\nexport interface OgcSelectorBundle {\n  id: string;\n  title?: string;\n  logical?: string;\n  vertical?: boolean;\n  multiple?: boolean;\n  unfiltered?: boolean;\n  showChips?: boolean; // true by default for autocomplete\n  selectors?:\n    | OgcPushButton[]\n    | OgcCheckbox[]\n    | OgcRadioButton[]\n    | OgcSelect[]\n    | OgcAutocomplete[];\n  domSelectors?: IgoDomSelector[];\n  width?: string;\n}\n\nexport interface OgcPushButton {\n  title: string;\n  tooltip?: string;\n  enabled?: boolean;\n  filters: IgoOgcFilterObject;\n  color?: string;\n}\n\nexport interface OgcCheckbox {\n  title: string;\n  tooltip?: string;\n  enabled?: boolean;\n  filters: IgoOgcFilterObject;\n}\n\nexport interface OgcRadioButton {\n  title: string;\n  tooltip?: string;\n  enabled?: boolean;\n  filters: IgoOgcFilterObject;\n}\n\nexport interface OgcSelect {\n  title: string;\n  tooltip?: string;\n  enabled?: boolean;\n  filters: IgoOgcFilterObject;\n}\nexport interface OgcAutocomplete {\n  title: string;\n  tooltip?: string;\n  enabled?: boolean;\n  filters: IgoOgcFilterObject;\n}\n\nexport interface OgcFilterableDataSourceOptions extends DataSourceOptions {\n  ogcFilters?: OgcFiltersOptions;\n  ol?: olSourceVector | olSource;\n}\nexport interface OgcFilterableDataSource extends DataSource {\n  options: OgcFilterableDataSourceOptions;\n  setOgcFilters(ogcFilters: OgcFiltersOptions, triggerEvent?: boolean);\n}\n\nexport interface IgoLogicalArrayOptions {\n  logical: string;\n  filters: IgoLogicalArrayOptions | AnyBaseOgcFilterOptions[];\n}\n\nexport interface IgoDomSelector {\n  id: number;\n  name: string;\n  operator: string;\n  propertyName: string;\n  domValue: DOMValue[];\n}\n\nexport interface OgcFilterConditionsArrayOptions {\n  conditions: OgcFilter[];\n}\n\nexport interface OgcFilterSpatialOptions {\n  geometryName: string;\n  geometry?: olGeometry;\n  wkt_geometry?: string;\n  extent?: [number, number, number, number];\n  srsName?: string;\n  active: boolean;\n  id: string;\n}\nexport interface OgcFilterAttributeOptions {\n  propertyName: string;\n  operator: string;\n  active?: boolean;\n  id?: string;\n}\n\nexport interface OgcFilterDuringOptions extends OgcFilterAttributeOptions {\n  begin: string;\n  end?: string;\n  step: string;\n  restrictToStep?: boolean;\n  sliderOptions?: SliderOptionsInterface;\n  displayFormat?: string;\n  calendarModeYear?: boolean;\n  title?: string;\n}\nexport interface OgcFilterIsBetweenOptions extends OgcFilterAttributeOptions {\n  lowerBoundary: number;\n  upperBoundary: number;\n}\nexport interface OgcFilterEqualToOptions extends OgcFilterAttributeOptions {\n  expression: string | number;\n  matchCase?: boolean;\n}\nexport interface OgcFilterGreaterLessOptions extends OgcFilterAttributeOptions {\n  expression: number;\n}\nexport interface OgcFilterIsLikeOptions extends OgcFilterAttributeOptions {\n  pattern: string;\n  wildCard?: string;\n  singleChar?: string;\n  escapeChar?: string;\n  matchCase: boolean;\n}\nexport type OgcFilterIsNullOptions = OgcFilterAttributeOptions;\n\nexport interface OgcInterfaceFilterOptions {\n  active?: boolean;\n  begin?: string;\n  end?: string;\n  step?: string;\n  restrictToStep?: boolean;\n  sliderOptions?: SliderOptionsInterface;\n  displayFormat?: string;\n  escapeChar?: string;\n  expression?: string | number;\n  extent?: [number, number, number, number];\n  filterid?: any;\n  geometry?: olGeometry;\n  geometryName?: string;\n  igoSpatialSelector?: string;\n  igoSNRC?: string;\n  level?: number;\n  lowerBoundary?: number;\n  matchCase?: boolean;\n  operator?: string;\n  parentLogical?: string;\n  pattern?: string;\n  propertyName?: string;\n  singleChar?: string;\n  srsName?: string;\n  upperBoundary?: number;\n  wildCard?: string;\n  wkt_geometry?: string;\n  // id?: string;\n  // abbrev?: string;\n}\n\nexport interface SliderOptionsInterface extends OgcFilterDuringOptions {\n  interval?: number;\n  displayFormat?: string;\n  enabled?: boolean;\n}\n\nexport interface IOgcFiltersOptionSaveable\n  extends Omit<OgcFiltersOptions, 'interfaceOgcFilters'> {\n  interfaceOgcFilters: IOgcInterfaceFilterOptions[];\n}\n\nexport type IOgcInterfaceFilterOptions = Pick<\n  OgcInterfaceFilterOptions,\n  'propertyName' | 'begin' | 'end' | 'active' | 'operator' | 'expression'\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 {\n  TimeFrame,\n  parseDateOperation,\n  searchFilter\n} from '../../../filter/shared/filter.utils';\nimport { OgcFilterWriter } from '../../../filter/shared/ogc-filter';\nimport {\n  AnyBaseOgcFilterOptions,\n  IOgcFiltersOptionSaveable,\n  IOgcInterfaceFilterOptions,\n  IgoLogicalArrayOptions,\n  OgcFiltersOptions,\n  OgcInterfaceFilterOptions,\n  OgcSelectorFields\n} from '../../../filter/shared/ogc-filter.interface';\nimport { EventRefresh } from './datasource.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  randomParam?: boolean\n): string {\n  const ogcFilters = options.ogcFilters;\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  if (dataSourceOptions[EventRefresh]) {\n    getFeature += `&${EventRefresh}=${dataSourceOptions[EventRefresh]}`;\n  }\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\nexport function getSaveableOgcParams(\n  options: OgcFiltersOptions\n): IOgcFiltersOptionSaveable {\n  const selectors = OgcSelectorFields.reduce((selector, selectorName) => {\n    if (options[selectorName]) {\n      selector[selectorName] = {\n        groups: options[selectorName].groups\n      };\n    }\n    return selector;\n  }, {});\n\n  return {\n    ...selectors,\n    ...(options?.interfaceOgcFilters && {\n      interfaceOgcFilters: options.interfaceOgcFilters.map((interfaceOgc) => {\n        const filters = searchFilter(\n          options.filters,\n          'filterid',\n          interfaceOgc.filterid\n        );\n        return interfaceOgcFilters(filters, interfaceOgc);\n      })\n    })\n  };\n}\n\nfunction interfaceOgcFilters(\n  filters: IgoLogicalArrayOptions | AnyBaseOgcFilterOptions,\n  interfaceOgc: OgcInterfaceFilterOptions\n): IOgcInterfaceFilterOptions {\n  const saveableInterface: IOgcInterfaceFilterOptions = {\n    propertyName: interfaceOgc?.propertyName,\n    operator: interfaceOgc?.operator,\n    active: interfaceOgc?.active,\n    expression: interfaceOgc?.expression\n  };\n\n  Object.keys(saveableInterface).forEach((key) => {\n    if (isEmpty(saveableInterface[key])) {\n      delete saveableInterface[key];\n    }\n  });\n\n  handleFilterDate(filters, interfaceOgc, saveableInterface);\n\n  return saveableInterface;\n}\n\nfunction isEmpty(value: unknown): boolean {\n  return value === null || value === undefined || value === '';\n}\n\nfunction handleFilterDate(\n  filter: IgoLogicalArrayOptions | AnyBaseOgcFilterOptions,\n  interfaceOgc: OgcInterfaceFilterOptions,\n  saveableInterface: IOgcInterfaceFilterOptions\n) {\n  const keys: (keyof OgcInterfaceFilterOptions)[] = ['begin', 'end'];\n  const formatDate = (date: string) =>\n    TimeFrame.some((timeFrame) => date.toLocaleLowerCase().includes(timeFrame))\n      ? new Date(parseDateOperation(date)).toISOString().split('.')[0] + 'Z'\n      : new Date(date).toISOString().split('.')[0] + 'Z';\n\n  keys.forEach((key) => {\n    if (filter && !isEmpty(filter[key])) {\n      if (formatDate(filter[key]) !== formatDate(interfaceOgc[key])) {\n        saveableInterface[key] = interfaceOgc[key];\n      }\n    }\n  });\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 { OGCFilterService } from '../../../filter/shared/ogc-filter.service';\nimport { DataSource } from './datasource';\nimport { EventRefresh } from './datasource.interface';\nimport { WFSDataSourceOptions } from './wfs-datasource.interface';\nimport { WFSService } from './wfs.service';\nimport {\n  buildUrl,\n  checkWfsParams,\n  defaultFieldNameGeometry,\n  defaultMaxFeatures,\n  getFormatFromOptions,\n  getSaveableOgcParams\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      ...(this.ogcFilters && {\n        ogcFilters: getSaveableOgcParams(this.ogcFilters) as OgcFiltersOptions // Workaround we force IOgcFiltersOptionSaveable to be detectd as OgcFiltersOptions\n      })\n    };\n  }\n\n  constructor(\n    public options: WFSDataSourceOptions,\n    protected wfsService: WFSService,\n    private ogcFilterService: OGCFilterService,\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    if (options?.ogcFilters?.enabled && options?.ogcFilters?.filters) {\n      this.ogcFilterService.setOgcWFSFiltersOptions(this.options);\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  refresh(): void {\n    this.properties.set(EventRefresh, Math.random());\n    super.refresh();\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\n    paramsWFS.srsName = paramsWFS.srsName || projection.getCode();\n    let url = buildUrl(this.options, currentExtent, wfsProj);\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, inject } 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  private http = inject(HttpClient);\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","import { default as moment } from 'moment';\n\n/**\n * @param date: string\n * @example date = <[2014-08-25, 2018-08-25]>\n * @example date = 2014-08-25, 2018-08-25\n * @example date = 2014-08-25/ 2018-08-25\n * @example date = 2014-08-25\n */\nexport function parseDateString(\n  date: string | [min: string, max: string]\n): Date | [min: Date, max: Date] | undefined {\n  let dateStrings: string[];\n\n  if (Array.isArray(date)) {\n    dateStrings = date;\n  } else {\n    if (date.startsWith('[') && date.endsWith(']')) {\n      dateStrings = date.replace(/[\\[\\]]/g, '').split(',');\n    } else if (date.includes('/')) {\n      dateStrings = date.split('/');\n    } else {\n      dateStrings = date.split(',');\n    }\n  }\n\n  const dates = dateStrings.map((date) => moment(date));\n\n  if (dates.length === 1) {\n    return dates[0].isValid() ? dates[0].toDate() : undefined;\n  }\n\n  const startDate = dates[0];\n  const endDate = dates[1];\n\n  if (endDate.isBefore(startDate)) {\n    console.error('Please check the order min and max dates');\n    return undefined;\n  }\n\n  if (startDate.isValid() && endDate.isValid()) {\n    return [startDate.toDate(), endDate.toDate()];\n  }\n\n  return undefined;\n}\n\nfunction isValidAndWithinRange(date: Date, [min, max]: [min: Date, max: Date]) {\n  const value = moment(date);\n  return (\n    value.isValid() &&\n    value.isBetween(moment(min), moment(max), undefined, '[]')\n  );\n}\n\nexport function isDateOrRangeInRange(\n  dateOrRange: Date | [min: Date, max: Date],\n  [min, max]: [min: Date, max: Date]\n): boolean {\n  if (Array.isArray(dateOrRange)) {\n    const [start, end] = dateOrRange;\n    return (\n      isValidAndWithinRange(start, [min, max]) &&\n      isValidAndWithinRange(end, [min, max])\n    );\n  }\n  return isValidAndWithinRange(dateOrRange, [min, max]);\n}\n","import { Injectable } from '@angular/core';\n\nimport olProjection from 'ol/proj/Projection';\n\nimport type { WFSDataSourceOptions } from '../../datasource/shared/datasources/wfs-datasource.interface';\nimport type { WMSDataSource } from '../../datasource/shared/datasources/wms-datasource';\nimport { searchFilter } from './filter.utils';\nimport { OgcFilterWriter } from './ogc-filter';\nimport {\n  AnyBaseOgcFilterOptions,\n  IgoLogicalArrayOptions,\n  OgcFilterableDataSource,\n  OgcInterfaceFilterOptions\n} from './ogc-filter.interface';\n\n@Injectable({\n  providedIn: 'platform'\n})\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(options: WFSDataSourceOptions) {\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      } else {\n        const mergedInterfaceOgcFilters = this.mergeInterfaceFilters(\n          options.ogcFilters.filters,\n          options.ogcFilters.interfaceOgcFilters\n        );\n\n        options.ogcFilters.interfaceOgcFilters =\n          ogcFilterWriter.defineInterfaceFilterSequence(\n            mergedInterfaceOgcFilters,\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      } else {\n        const mergedInterfaceOgcFilters = this.mergeInterfaceFilters(\n          options.ogcFilters.filters,\n          options.ogcFilters.interfaceOgcFilters\n        );\n\n        options.ogcFilters.interfaceOgcFilters =\n          ogcFilterWriter.defineInterfaceFilterSequence(\n            mergedInterfaceOgcFilters,\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  private mergeInterfaceFilters(\n    filters: IgoLogicalArrayOptions | AnyBaseOgcFilterOptions,\n    interfaceOgcFilters: OgcInterfaceFilterOptions[]\n  ) {\n    return interfaceOgcFilters.map((interfaceOgc) => {\n      const filter = searchFilter(\n        filters,\n        'propertyName',\n        interfaceOgc.propertyName\n      );\n\n      if (filter) {\n        return { ...interfaceOgc, filterid: filter.filterid };\n      }\n      return interfaceOgc;\n    });\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 { Optional } from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport olSourceImageWMS from 'ol/source/ImageWMS';\n\nimport { BehaviorSubject, Observable, interval, tap } from 'rxjs';\n\nimport {\n  isDateOrRangeInRange,\n  parseDateString\n} from '../../../filter/shared/date.utils';\nimport { OgcFilterWriter } from '../../../filter/shared/ogc-filter';\nimport {\n  OgcFilterDuringOptions,\n  OgcFilterableDataSourceOptions,\n  OgcFiltersOptions\n} from '../../../filter/shared/ogc-filter.interface';\nimport { OGCFilterService } from '../../../filter/shared/ogc-filter.service';\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 { DatasourceEvent, EventRefresh, 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  getSaveableOgcParams\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;\n  }\n\n  set stylesParams(value: string) {\n    this.options.params.STYLES = value;\n    this.ol.updateParams({ STYLES: value });\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 as WMSDataSourceOptions;\n\n    if (\n      this.timeFilter?.value &&\n      this.timeFilter?.value.toString() !== this.timeFilter?.default.toString()\n    ) {\n      baseOptions.timeFilter = {\n        value: this.timeFilter.value\n      };\n    }\n\n    return {\n      ...baseOptions,\n      params: this.params,\n      ...(this.ogcFilters && {\n        ogcFilters: getSaveableOgcParams(this.ogcFilters)\n      })\n    };\n  }\n\n  /**\n   * @workaround\n   * We need a external way to desactive the refresh of a linked layer for the workspace\n   * The workspace services create all workspace layer on init and the refresh\n   * is enable by default even if the workspace is not use the layer will still be refreshed.\n   */\n  enableRefresh = false;\n\n  constructor(\n    public options: WMSDataSourceOptions,\n    @Optional() protected wfsService?: WFSService,\n    @Optional() private ogcFilterService?: OGCFilterService\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    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    if (options.ogcFilters?.enabled && options.ogcFilters?.filters) {\n      this.ogcFilterService?.setOgcWMSFiltersOptions(this);\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      if (timeFilterableDataSourceOptions.timeFilter.value) {\n        const date = this.dateFormat(\n          timeFilterableDataSourceOptions.timeFilter\n        );\n\n        this.ol.updateParams({\n          TIME: date\n        });\n      }\n      this.setTimeFilter(timeFilterableDataSourceOptions.timeFilter, true);\n    }\n  }\n\n  private dateFormat(timeFilterOptions: TimeFilterOptions): string {\n    const date = parseDateString(timeFilterOptions.value);\n    const minMax = parseDateString([\n      timeFilterOptions.min,\n      timeFilterOptions.max\n    ]) as [min: Date, max: Date];\n    const valueInRange = isDateOrRangeInRange(date, minMax);\n\n    if (date instanceof Date) {\n      return valueInRange\n        ? `${date.toISOString().split('.')[0]}Z`\n        : `${minMax[0].toISOString().split('.')[0]}Z`;\n    } else {\n      return valueInRange\n        ? `${date[0].toISOString().split('.')[0]}Z/${date[1].toISOString().split('.')[0]}Z`\n        : `${minMax[0].toISOString().split('.')[0]}Z/${minMax[1].toISOString().split('.')[0]}Z`;\n    }\n  }\n\n  addEvents(): void {\n    const events: DatasourceEvent[] = [];\n\n    const refreshInterval = this.options.refreshIntervalSec;\n    if (refreshInterval && refreshInterval > 0) {\n      events.push([EventRefresh, this.addRefreshInterval(refreshInterval)]);\n    }\n\n    super.addEvents(events);\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.timeFilter);\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  private addRefreshInterval(refreshInterval: number): Observable<number> {\n    const intervalMs = refreshInterval * 1000; // secondes to MS\n    return interval(intervalMs).pipe(\n      tap(() => {\n        this.ol.updateParams({ [EventRefresh]: Math.random() });\n        if (this.enableRefresh) {\n          this.ol.notify(EventRefresh, this.enableRefresh);\n        }\n      })\n    );\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\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 >` +\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 >` +\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'>` + svg + `</td><td >` + label + '</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 >` +\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'>` + svg + `</td><td >` + label + '</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 >` +\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 >` +\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 } as any);\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","import { IDBPDatabase, openDB } from 'idb';\nimport { Observable, from } from 'rxjs';\n\nimport { IgoDBSchema } from './indexed-db.interface';\n\nexport function createIndexedDb(): Observable<IDBPDatabase<IgoDBSchema>> {\n  return from(\n    openDB<IgoDBSchema>('igo2DB', 3, {\n      upgrade(db) {\n        const geoDataStore = db.createObjectStore('geoData', {\n          keyPath: 'url',\n          autoIncrement: false\n        });\n        geoDataStore.createIndex('regionID-idx', 'regionID', {\n          unique: false\n        });\n        db.createObjectStore('layerData', {\n          keyPath: 'layerId',\n          autoIncrement: false\n        });\n      }\n    })\n  );\n}\n","import { CompressedData, Compression } from '@igo2/utils';\n\nimport { IDBPDatabase } from 'idb';\nimport {\n  Observable,\n  Subscription,\n  concatMap,\n  first,\n  from,\n  map,\n  mergeMap,\n  of,\n  switchMap,\n  zip\n} from 'rxjs';\n\nimport { IgoDBSchema } from '../shared/indexed-db.interface';\nimport { createIndexedDb } from '../shared/indexed-db.utils';\nimport { InsertSourceInsertDBEnum } from './geoDB.enums';\nimport { GeoDBData } from './geoDB.interface';\n\nexport class GeoDB {\n  private db$: Observable<IDBPDatabase<IgoDBSchema>>;\n  private compression = new Compression();\n  public collisionsMap = new Map<number | string, string[]>();\n  public _newData = 0;\n  private revertObservablesSubscription: Subscription;\n\n  constructor() {\n    this.db$ = createIndexedDb();\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: number | string,\n    object: object | Blob,\n    insertSource: InsertSourceInsertDBEnum,\n    insertEvent: string\n  ): Observable<GeoDBData> {\n    const object$ =\n      object instanceof Blob\n        ? this.compression.compressBlob(object)\n        : of(object);\n    const compress = object instanceof Blob ? true : false;\n\n    let geoDBData: GeoDBData;\n    const a = this.db$.pipe(\n      switchMap((db) => {\n        return object$.pipe(\n          first(),\n          switchMap((object) => {\n            geoDBData = {\n              url,\n              regionID,\n              object: object,\n              compressed: compress,\n              insertSource,\n              insertEvent\n            } satisfies GeoDBData;\n            return this.getGeoDBData(url);\n          }),\n          concatMap((dbObject: GeoDBData) => {\n            if (!dbObject) {\n              this._newData++;\n              return from(db.add('geoData', geoDBData)).pipe(\n                map(() => geoDBData)\n              );\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      })\n    );\n    return a;\n  }\n\n  private customUpdate(geoDBData: GeoDBData): Observable<GeoDBData> {\n    const b = this.delete(geoDBData.url).pipe(\n      mergeMap(() => this.add(geoDBData))\n    );\n    return b;\n  }\n\n  add(geoDBData: GeoDBData): Observable<GeoDBData> {\n    return this.db$.pipe(\n      switchMap((db) =>\n        from(db?.add('geoData', geoDBData)).pipe(map(() => geoDBData))\n      )\n    );\n  }\n\n  put(geoDBData: GeoDBData): Observable<GeoDBData> {\n    return this.db$.pipe(\n      switchMap((db) =>\n        from(db?.put('geoData', geoDBData)).pipe(map(() => geoDBData))\n      )\n    );\n  }\n\n  getGeoDBData(url: string): Observable<GeoDBData> {\n    return this.db$.pipe(switchMap((db) => from(db?.get('geoData', url))));\n  }\n\n  get(url: string): Observable<object | Blob> {\n    return this.getGeoDBData(url).pipe(\n      mergeMap((data) => {\n        const rObj = !data?.compressed\n          ? data?.object\n          : this.compression.decompressBlob(data?.object as CompressedData);\n        return of(rObj as object | Blob);\n      })\n    );\n  }\n\n  delete(key: string): Observable<object> {\n    return this.db$.pipe(\n      switchMap((db) => from(db?.delete('geoData', key))),\n      map(() => {\n        {\n          return { key };\n        }\n      })\n    );\n  }\n\n  /** @deprecated Use delete method instead*/\n  deleteByKey(key: string): Observable<object> {\n    return this.delete(key);\n  }\n\n  getRegionCountByID(id: number): Observable<number> {\n    return this.getRegionByID(id).pipe(\n      switchMap((datas) => {\n        return of(datas.length);\n      })\n    );\n  }\n\n  getRegionByID(id: number): Observable<GeoDBData[]> {\n    if (!id) {\n      return;\n    }\n    const IDBKey: IDBKeyRange = IDBKeyRange.only(id);\n    return this.db$.pipe(\n      switchMap((db) =>\n        from(db?.getAllFromIndex('geoData', 'regionID-idx', IDBKey))\n      )\n    );\n  }\n\n  deleteByRegionID(id: number): Observable<void[]> {\n    if (!id) {\n      return;\n    }\n    return this.db$.pipe(\n      switchMap((db) => {\n        const tx = db.transaction('geoData', 'readwrite');\n        return of(tx);\n      }),\n      mergeMap((tx) =>\n        this.getRegionByID(id).pipe(\n          concatMap((datas) => {\n            const promises = datas.map((data) => tx.store.delete(data.url));\n            promises.push(tx.done);\n            return from(Promise.all(promises));\n          })\n        )\n      )\n    );\n  }\n\n  resetCounters() {\n    this.resetCollisionsMap();\n    this._newData = 0;\n  }\n\n  resetCollisionsMap() {\n    this.collisionsMap = new Map();\n  }\n\n  revertCollisions(): void {\n    if (this.revertObservablesSubscription) {\n      this.revertObservablesSubscription.unsubscribe();\n    }\n    const revertObservables: Observable<GeoDBData>[] = [];\n    for (const [regionID, collisions] of this.collisionsMap) {\n      for (const url of collisions) {\n        revertObservables.push(\n          this.getGeoDBData(url).pipe(\n            first(),\n            concatMap((dbObject: GeoDBData) => {\n              const updatedObject = dbObject;\n              updatedObject.regionID = regionID;\n              return this.customUpdate(updatedObject);\n            })\n          )\n        );\n      }\n    }\n    this.revertObservablesSubscription = zip(...revertObservables).subscribe();\n  }\n\n  get newData(): number {\n    return this._newData;\n  }\n}\n","export enum InsertSourceInsertDBEnum {\n  System = 'system',\n  User = 'user'\n}\n","import { IDBPDatabase } from 'idb';\nimport { Observable, from } from 'rxjs';\nimport { concatMap, first, map, mergeMap, switchMap } from 'rxjs/operators';\n\nimport { IgoDBSchema } from '../shared/indexed-db.interface';\nimport { createIndexedDb } from '../shared/indexed-db.utils';\nimport { LayerDBData } from './layerDB.interface';\n\nexport class LayerDB {\n  private db$: Observable<IDBPDatabase<IgoDBSchema>>;\n\n  constructor() {\n    this.db$ = createIndexedDb();\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<LayerDBData> {\n    return this.db$.pipe(\n      switchMap((db) =>\n        this.getByID(layerDBData.layerId).pipe(\n          first(),\n          concatMap((dbObject: LayerDBData) => {\n            if (!dbObject) {\n              return from(db.add('layerData', layerDBData)).pipe(\n                map(() => layerDBData)\n              );\n            } else {\n              return this.customUpdate(layerDBData);\n            }\n          })\n        )\n      )\n    );\n  }\n\n  private customUpdate(layerDBData: LayerDBData): Observable<LayerDBData> {\n    const b = this.delete(layerDBData.layerId).pipe(\n      mergeMap(() => this.add(layerDBData))\n    );\n    return b;\n  }\n\n  add(layerDBData: LayerDBData): Observable<LayerDBData> {\n    return this.db$.pipe(\n      switchMap((db) =>\n        from(db?.add('layerData', layerDBData)).pipe(map(() => layerDBData))\n      )\n    );\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.db$.pipe(\n      switchMap((db) => from(db?.get('layerData', layerId)))\n    );\n  }\n\n  /**\n   * This method delete an idb layer definition\n   * @param key\n   * @returns\n   */\n  delete(key: string): Observable<object> {\n    return this.db$.pipe(\n      switchMap((db) => from(db?.delete('layerData', key))),\n      map(() => {\n        {\n          return { key };\n        }\n      })\n    );\n  }\n\n  /** @deprecated Use delete method instead*/\n  deleteByKey(key: string): Observable<object> {\n    return this.delete(key);\n  }\n\n  /**\n   * This method retrive all idb layer definition\n   * @param layerId\n   * @returns\n   */\n  getAll(): Observable<LayerDBData[]> {\n    return this.db$.pipe(switchMap((db) => from(db?.getAll('layerData'))));\n  }\n}\n","import olLayerVector from 'ol/layer/Vector';\nimport olSourceVector from 'ol/source/Vector';\nimport { Style } from 'ol/style';\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  if (layerOlStyle instanceof Style) {\n    return {\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  }\n\n  return;\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.parent?.id ?? 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    this.dataSource?.destroy();\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  REFRESH = 'refresh'\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        LinkedProperties.REFRESH\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    if (property === LinkedProperties.REFRESH) {\n      this.handleRefreshChanges(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  private handleRefreshChanges(children: Layer[]) {\n    children.forEach((child) => {\n      child.dataSource.refresh();\n    });\n  }\n}\n","import { Optional } from '@angular/core';\n\nimport { 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    value ? this.dataSource.addEvents() : this.dataSource.removeEvents();\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    @Optional() protected messageService?: MessageService,\n    @Optional() 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    if (this.visible) {\n      this.dataSource.addEvents();\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    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 { ObjectEvent } from 'ol/Object';\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 { ReadOptions } from 'ol/format/Feature';\nimport Geometry from 'ol/geom/Geometry';\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, { VectorSourceEvent } from 'ol/source/Vector';\n\nimport { fromEvent, merge, of } from 'rxjs';\nimport {\n  catchError,\n  concatMap,\n  debounceTime,\n  delay,\n  first,\n  switchMap,\n  tap\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 { WebSocketDataSource } from '../../../datasource/shared/datasources/websocket-datasource';\nimport { WFSDataSource } from '../../../datasource/shared/datasources/wfs-datasource';\nimport {\n  WFSDataSourceOptions,\n  WFSDataSourceOptionsParams\n} from '../../../datasource/shared/datasources/wfs-datasource.interface';\nimport {\n  buildUrl,\n  defaultMaxFeatures\n} from '../../../datasource/shared/datasources/wms-wfs.utils';\nimport type { MapBase, MapExtent } from '../../../map/shared';\nimport { getResolutionFromScale } from '../../../map/shared/map.utils';\nimport { GeoDB } from '../../../offline/geoDB/geoDB';\nimport { InsertSourceInsertDBEnum } from '../../../offline/geoDB/geoDB.enums';\nimport { LayerDB } from '../../../offline/layerDB/layerDB';\nimport { LayerDBData } from '../../../offline/layerDB/layerDB.interface';\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\ninterface VectorRequest {\n  xhr: XMLHttpRequest | undefined;\n  extent: Extent;\n  resolution: number;\n}\n\nexport class VectorLayer extends Layer {\n  type: LayerType = 'vector';\n\n  private lastRequest: VectorRequest;\n  private ongoingRequests: VectorRequest[] = [];\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  ) {\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 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 (\n      this.options.sourceOptions?.preload?.bypassResolution ||\n      this.options.sourceOptions?.preload?.bypassVisible\n    ) {\n      this.handlePreload();\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\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            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    }\n\n    if (this.options.idbInfo?.storeToIdb) {\n      this.handleIdbStorage(vector);\n    }\n\n    return vector;\n  }\n\n  private handleIdbStorage(\n    vector: olLayerVector<\n      (\n        | FeatureDataSource\n        | WFSDataSource\n        | ArcGISRestDataSource\n        | WebSocketDataSource\n        | ClusterDataSource\n      ) &\n        olSourceVector<OlFeature<Geometry>>\n    >\n  ): void {\n    fromEvent<BaseEvent>(vector, 'sourceready')\n      .pipe(\n        tap(() => {\n          if (this.options.idbInfo.firstLoad !== false) {\n            this.maintainFeaturesInIdb();\n            this.maintainOptionsInIdb();\n          }\n        }),\n        switchMap(() =>\n          merge(\n            fromEvent<VectorSourceEvent>(vector.getSource(), 'featuresloadend'),\n            fromEvent<VectorSourceEvent>(vector.getSource(), 'addfeature'),\n            fromEvent<VectorSourceEvent>(vector.getSource(), 'changefeature'),\n            fromEvent<VectorSourceEvent>(vector.getSource(), 'clear'),\n            fromEvent<VectorSourceEvent>(vector.getSource(), 'removefeature')\n          )\n        )\n      )\n      .pipe(debounceTime(750))\n      .subscribe(() => this.maintainFeaturesInIdb());\n\n    fromEvent<BaseEvent>(vector, 'sourceready')\n      .pipe(\n        switchMap(() =>\n          merge(\n            fromEvent<BaseEvent>(vector, 'change'),\n            fromEvent<ObjectEvent>(vector, 'change:zIndex')\n          )\n        )\n      )\n      .pipe(debounceTime(750))\n      .subscribe(() => this.maintainOptionsInIdb());\n  }\n\n  private handlePreload(): void {\n    const preloadOptions = this.options.sourceOptions.preload;\n    if (this.dataSource instanceof FeatureDataSource) {\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\n      this.options.opacity = 0;\n      if (\n        preloadOptions.bypassResolution &&\n        (this.options.minResolution || this.options.maxResolution)\n      ) {\n        this.options.minResolution = 0;\n        this.options.maxResolution = Infinity;\n      }\n      if (preloadOptions.bypassVisible && !initialVisibleValue) {\n        this.options.visible = true;\n      }\n      this.dataSource.ol.once('featuresloadend', () => {\n        if (initialOpacityValue) {\n          this.opacity = initialOpacityValue;\n        }\n        if (preloadOptions.bypassResolution) {\n          this.minResolution = initialMinResValue;\n          this.maxResolution = initialMaxResValue;\n        }\n        if (preloadOptions.bypassVisible) {\n          this.visible = initialVisibleValue;\n        }\n      });\n    }\n  }\n\n  remove(): void {\n    this.watcher.unsubscribe();\n    if (this.options.idbInfo?.storeToIdb) {\n      this.removeLayerFromIDB();\n    }\n    super.remove();\n  }\n\n  private removeLayerFromIDB(): void {\n    const geoDB = new GeoDB();\n    const layerDB = new LayerDB();\n    merge(geoDB.delete(this.id), layerDB.delete(this.id)).subscribe();\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        url: this.options.sourceOptions?.url\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({ contextUri: '*' }, this.options.idbInfo, {\n          firstLoad: false\n        })\n      },\n      insertEvent: `${this.title}-${this.id}-${new Date()}`\n    });\n    const layerDB = new LayerDB();\n    layerDB.update(layerData).pipe(first()).subscribe();\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\n    const geoDB = new GeoDB();\n    geoDB\n      .update(\n        this.options.sourceOptions.url || this.id,\n        this.id,\n        geojsonObject,\n        InsertSourceInsertDBEnum.User,\n        `${this.title}-${this.id}-${new Date()}`\n      )\n      .pipe(first())\n      .subscribe();\n  }\n\n  protected flash(feature: OlFeature) {\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 0);\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): void {\n    this.trackFeatureListenerId = this.dataSource.ol.on(\n      'addfeature',\n      this.trackFeature.bind(this, id)\n    );\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: string | number, feat: { feature: OlFeature }) {\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 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    extent: Extent,\n    resolution: number,\n    proj: olProjection,\n    success: (features: OlFeature[]) => void,\n    failure: () => void,\n    randomParam?: boolean\n  ) {\n    const paramsWFS = options.paramsWFS;\n    const wfsProj = this.getProjection(proj, paramsWFS);\n    const currentExtent = olproj.transformExtent(extent, proj, wfsProj);\n\n    if (\n      this.lastRequest &&\n      (this.lastRequest.extent !== currentExtent ||\n        this.lastRequest.resolution !== resolution)\n    ) {\n      this.abortRequests(vectorSource);\n    }\n\n    const properties = this.dataSource.properties.getAll();\n    const url = buildUrl(\n      { ...options, ...properties },\n      currentExtent,\n      wfsProj,\n      randomParam\n    );\n\n    const request: VectorRequest = {\n      xhr: undefined,\n      extent,\n      resolution\n    };\n\n    const readOptions: ReadOptions = {\n      dataProjection: wfsProj,\n      featureProjection: proj\n    };\n\n    if (\n      paramsWFS.version === '2.0.0' &&\n      paramsWFS.maxFeatures > defaultMaxFeatures\n    ) {\n      this.batchGetFeatures(\n        url,\n        request,\n        vectorSource,\n        paramsWFS,\n        readOptions,\n        success,\n        failure\n      );\n    } else {\n      this.getFeatures(\n        url,\n        request,\n        vectorSource,\n        readOptions,\n        success,\n        failure\n      );\n    }\n  }\n\n  private abortRequests(vectorSource: olSourceVector): void {\n    vectorSource.removeLoadedExtent(this.lastRequest.extent);\n    for (const request of this.ongoingRequests) {\n      request.xhr?.abort();\n      this.removeRequest(request);\n    }\n  }\n\n  private getProjection(\n    proj: olProjection,\n    params: WFSDataSourceOptionsParams\n  ) {\n    const newProj = params.srsName\n      ? new olProjection({ code: params.srsName })\n      : proj;\n\n    params.srsName = newProj.getCode();\n\n    return newProj;\n  }\n\n  private batchGetFeatures(\n    url: string,\n    request: VectorRequest,\n    vectorSource: olSourceVector,\n    paramsWFS: WFSDataSourceOptionsParams,\n    readOptions: ReadOptions,\n    success: (features: OlFeature[]) => void,\n    failure: () => void\n  ) {\n    const nbOfFeature = 1000;\n    let startIndex = 0;\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      this.getFeatures(\n        alteredUrl,\n        request,\n        vectorSource,\n        readOptions,\n        success,\n        failure\n      );\n      startIndex += nbOfFeature;\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    url: string,\n    request: VectorRequest,\n    vectorSource: olSourceVector,\n    readOptions: ReadOptions,\n    success: (features: OlFeature[]) => void,\n    failure: () => void\n  ): void {\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\n    const onError = () => {\n      vectorSource.removeLoadedExtent(request.extent);\n      this.removeRequest(request);\n      failure();\n    };\n    xhr.onerror = onError;\n\n    xhr.onload = () => {\n      if (xhr.status === 200 && xhr.responseText.length > 0) {\n        this.handleOnLoad(\n          vectorSource,\n          xhr.responseText,\n          request,\n          readOptions,\n          success,\n          onError\n        );\n      } else {\n        onError();\n      }\n    };\n\n    request.xhr = xhr;\n    this.lastRequest = request;\n    this.ongoingRequests.push(request);\n\n    xhr.send();\n  }\n\n  private removeRequest(request: VectorRequest): void {\n    if (request === this.lastRequest) {\n      this.lastRequest = undefined;\n    }\n    const index = this.ongoingRequests.indexOf(request);\n    if (index > -1) {\n      this.ongoingRequests.splice(index, 1);\n    }\n  }\n\n  private handleOnLoad(\n    vectorSource: olSourceVector,\n    content: string | object | Document | Element | ArrayBuffer,\n    request: VectorRequest,\n    readOptions: ReadOptions,\n    success: (features: OlFeature[]) => void,\n    onError: () => void\n  ) {\n    const format = vectorSource.getFormat();\n    const type = format.getType();\n    if (content) {\n      let source: string | object | Document | Element | ArrayBuffer;\n\n      switch (type) {\n        case 'xml':\n          source = new DOMParser().parseFromString(\n            content.toString(),\n            'application/xml'\n          );\n          break;\n        case 'json':\n        case 'text':\n        case 'arraybuffer':\n        default:\n          source = content;\n          break;\n      }\n      if (source) {\n        const features = format.readFeatures(\n          source,\n          readOptions\n        ) as OlFeature[];\n\n        if (features) {\n          vectorSource.addFeatures(features);\n          success(features);\n        } else {\n          success([]);\n        }\n        this.removeRequest(request);\n      } else {\n        onError();\n      }\n    }\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 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 onError = () => {\n      vectorSource.removeLoadedExtent(extent);\n      failure();\n    };\n    const xhr = new XMLHttpRequest();\n\n    const request: VectorRequest = {\n      xhr,\n      extent,\n      resolution\n    };\n\n    const readOptions: ReadOptions = {\n      extent,\n      featureProjection: projection\n    };\n\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    const format = vectorSource.getFormat();\n    const type = format.getType();\n    if (this.geoNetworkService && typeof url !== 'function') {\n      const options: SimpleGetOptions = { responseType: type };\n      const getVectorObs$ = this.geoNetworkService\n        .get(modifiedUrl as string, options)\n        .pipe(\n          first(),\n          catchError((res) => {\n            onError();\n            throw res;\n          })\n        );\n      const geoDB = new GeoDB();\n      const idbGetVectorObsObs$ = geoDB.get(url).pipe(\n        delay(750),\n        concatMap((r) => (r ? of(r) : getVectorObs$))\n      );\n\n      (this.options.idbInfo?.storeToIdb\n        ? idbGetVectorObsObs$\n        : getVectorObs$\n      ).subscribe((content) => {\n        this.handleOnLoad(\n          vectorSource,\n          content,\n          request,\n          readOptions,\n          success,\n          onError\n        );\n      });\n    } else {\n      xhr.open('GET', modifiedUrl as string);\n      if (type === 'arraybuffer') {\n        xhr.responseType = 'arraybuffer';\n      }\n      if (this.authInterceptor) {\n        this.authInterceptor.interceptXhr(xhr, modifiedUrl as string);\n      }\n      xhr.onerror = onError;\n      xhr.onload = () => {\n        if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {\n          this.handleOnLoad(\n            vectorSource,\n            xhr.responseText,\n            request,\n            readOptions,\n            success,\n            onError\n          );\n        } else {\n          onError();\n        }\n      };\n      xhr.send();\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  }) as OlFeature<OlGeometry>;\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 | OlFeature[],\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(\n    Array.isArray(olFeatures) ? olFeatures : [olFeatures],\n    projection\n  );\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, Injectable, inject } 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 { UserOptions, autoTable } 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  private directionsSourceService = inject(DirectionsSourceService);\n  private configService = inject(ConfigService);\n  private languageService = inject(LanguageService);\n  private printService = inject(PrintService);\n  private document = inject<Document>(DOCUMENT);\n  private activityService = inject(ActivityService);\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    autoTable(doc, {\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 { Clipboard } from '@angular/cdk/clipboard';\nimport { Component, Input, inject } 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';\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  imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule]\n})\nexport class DirectionsButtonsComponent {\n  private clipboard = inject(Clipboard);\n  private languageService = inject(LanguageService);\n  private messageService = inject(MessageService);\n  private routeService = inject(RouteService, { optional: true });\n  private directionsService = inject(DirectionsService);\n\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  /**\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 = this.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 = this.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 } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  inject\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  imports: [\n    CdkDropList,\n    CdkDrag,\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule,\n    MatAutocompleteModule,\n    MatTooltipModule,\n    MatButtonModule,\n    MatIconModule,\n    MatOptionModule,\n    CdkDragHandle,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class DirectionsInputsComponent implements OnDestroy {\n  private languageService = inject(LanguageService);\n\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  /**\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  @for (\n    stop of stopsStore.view.all$() | async;\n    track stop;\n    let stopIndex = $index\n  ) {\n    <div class=\"stop\">\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        <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            @if (currentPosition) {\n              <button\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            }\n            @if (stop.text || stop.coordinates) {\n              <button\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              @for (source of stop.searchProposals; track source) {\n                <mat-optgroup\n                  [label]=\"source.source.title\"\n                  [disabled]=\"!source.source.enabled\"\n                >\n                  @for (result of source.results; track result) {\n                    <mat-option [value]=\"result\">\n                      {{ result.meta ? result.meta.title : '' }}\n                    </mat-option>\n                  }\n                </mat-optgroup>\n              }\n            </mat-autocomplete>\n          </mat-form-field>\n        </div>\n        @if ((stopsStore.count$ | async) > 2) {\n          <button\n            class=\"delete-button\"\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        }\n      </div>\n    </div>\n  }\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 {\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject\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  imports: [\n    MatFormFieldModule,\n    MatSelectModule,\n    FormsModule,\n    MatOptionModule,\n    MatDividerModule,\n    MatTooltipModule,\n    MatListModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class DirectionsResultsComponent implements OnInit, OnDestroy {\n  private languageService = inject(LanguageService);\n  private cdRef = inject(ChangeDetectorRef);\n\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  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","@if (routes && activeRoute) {\n  <div class=\"igo-input-container\">\n    @if (routes.length > 1) {\n      <mat-form-field [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          @for (route of routes; track route; let routeIndex = $index) {\n            <mat-option [value]=\"route\">\n              Option {{ routeIndex + 1 }}: {{ route.title }} ({{\n                formatDistance(route.distance)\n              }}\n              - {{ formatDuration(route.duration) }})\n            </mat-option>\n          }\n        </mat-select>\n      </mat-form-field>\n    }\n    <h4 mat-header class=\"igo-route-title\">\n      {{ activeRoute.title }}\n      {{ getTitleDurationAndDistance() }}\n    </h4>\n    <mat-list (mouseleave)=\"onLeaveList()\">\n      @for (step of activeRoute.steps; track step; let stepIndex = $index) {\n        @if (\n          (formatDistance(step.distance) && formatDuration(step.duration)) ||\n          stepIndex === activeRoute.steps.length - 1\n        ) {\n          <mat-list-item\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            <span\n              matListItemTitle\n              class=\"step-title\"\n              [matTooltip]=\"getFormattedStep(step, stepIndex).instruction\"\n            >\n              {{ getFormattedStep(step, stepIndex).instruction }}\n            </span>\n            @if (stepIndex !== activeRoute.steps.length - 1) {\n              <span matListItemLine>\n                {{ formatDistance(step.distance) }} -\n                {{ formatDuration(step.duration) }}\n              </span>\n            }\n          </mat-list-item>\n        }\n      }\n    </mat-list>\n  </div>\n}\n","import { NgClass } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  inject\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  imports: [\n    NgClass,\n    MatBadgeModule,\n    MatButtonModule,\n    MatIconModule,\n    MatTooltipModule,\n    IgoLanguageModule,\n    IgoIconComponent\n  ]\n})\nexport class LayerVisibilityButtonComponent implements OnInit {\n  private cdr = inject(ChangeDetectorRef);\n\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  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 } 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  imports: [\n    AsyncPipe,\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  @if (viewerOptions.mode === 'selection') {\n    <mat-checkbox\n      [checked]=\"selected\"\n      [disabled]=\"selectionDisabled\"\n      (change)=\"handleSelect($event)\"\n    >\n    </mat-checkbox>\n  }\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, inject } 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 { TimeFilterOptions } from '../../filter/shared/time-filter.interface';\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 http = inject(HttpClient);\n  private mapService = inject(MapService);\n\n  private parsers = {\n    wms: new WMSCapabilities(),\n    wmts: new WMTSCapabilities(),\n    esriJSON: new EsriJSON()\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    if (baseOptions.params.STYLES) {\n      const style = legendOptions?.stylesAvailable?.find(\n        (style) => style.name === baseOptions.params.STYLES\n      );\n      if (!style) {\n        delete baseOptions.params.STYLES;\n      }\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): TimeFilterOptions {\n    let dimension;\n\n    if (layer.Dimension) {\n      const timeFilter: TimeFilterOptions = {};\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 = timeFilter.default = 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 { Optional } from '@angular/core';\n\nimport { 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  constructor(\n    layer: ImageLayer,\n    @Optional() private messageService?: MessageService\n  ) {\n    super();\n    this.source = layer.options.source.ol;\n    this.id = uuid();\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 { Optional } from '@angular/core';\n\nimport { 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    @Optional() public messageService?: MessageService,\n    @Optional() 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    if ('setTileLoadFunction' in tileSource) {\n      tileSource.setTileLoadFunction((tile: Tile, url: string) => {\n        this.customLoader(tile, url, this.authInterceptor);\n      });\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 { Feature } from 'ol';\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(\n      (tile: VectorTile<Feature>, 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\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\nexport const ID_GROUP_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_GROUP_PREFIX)\n        ? null\n        : 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_GROUP_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, 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  inject\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 {\n  ImageErrorDirective,\n  fetchImageFromDepotUrl\n} 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  imports: [\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  private capabilitiesService = inject(CapabilitiesService);\n  private languageService = inject(LanguageService);\n  private cdRef = inject(ChangeDetectorRef);\n  private config = inject(ConfigService);\n  private http = inject(HttpClient);\n\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 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   * 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        this.currentStyle,\n        this.view\n      );\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 depotUrl = this.config?.getConfig('depot.url');\n      fetchImageFromDepotUrl(item.url, depotUrl, this.http)\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      this.currentStyle,\n      this.view\n    );\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.stylesParams = 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","@if (legendItems$ | async; as items) {\n  @if (items.length) {\n    @for (item of items.slice().reverse(); track item) {\n      <ng-container #renderedLegends>\n        @if (getLegend) {\n          <div>\n            @if (item.title) {\n              <mat-list-item>\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\n                  >{{ computeItemTitle(item) | async }}\n                </span>\n              </mat-list-item>\n            }\n            <div\n              #legend\n              class=\"igo-layer-legend\"\n              [ngClass]=\"{ 'with-title': item.title }\"\n            >\n              @if (currentStyle !== undefined) {\n                <mat-form-field subscriptSizing=\"dynamic\">\n                  <mat-select\n                    tooltip-position=\"below\"\n                    matTooltipShowDelay=\"500\"\n                    [matTooltip]=\"\n                      'igo.geo.layer.legend.selectStyle' | translate\n                    \"\n                    [(ngModel)]=\"currentStyle\"\n                    (selectionChange)=\"onChangeStyle()\"\n                  >\n                    @for (style of styles; track style) {\n                      <mat-option [value]=\"style.name\">{{\n                        style.title\n                      }}</mat-option>\n                    }\n                  </mat-select>\n                </mat-form-field>\n              }\n              @if (!item.collapsed) {\n                <div>\n                  @if (item.url) {\n                    <div>\n                      @if (item.imgGraphValue) {\n                        <img\n                          igoImageError\n                          [hideError]=\"true\"\n                          #renderedLegend\n                          id=\"{{ item.title }}\"\n                          (load)=\"onLoadImage(item.title)\"\n                          [src]=\"item.imgGraphValue\"\n                          alt=\"{{\n                            'igo.geo.layer.legend.loadingLegendText' | translate\n                          }}\"\n                        />\n                      }\n                      @if (imagesHeight[item.title] < 16) {\n                        <small>\n                          {{ 'igo.geo.layer.legend.noLegendScale' | translate }}\n                        </small>\n                      }\n                    </div>\n                  }\n                  @if (item.html) {\n                    <div\n                      [ngStyle]=\"item.style\"\n                      [innerHTML]=\"item.html | sanitizeHtml\"\n                    ></div>\n                  }\n                </div>\n              }\n            </div>\n          </div>\n        } @else {\n          <small>\n            {{ 'igo.geo.layer.legend.noLegendText' | translate }}\n          </small>\n        }\n      </ng-container>\n    }\n  } @else {\n    <small>\n      {{ 'igo.geo.layer.legend.noLegendText' | translate }}\n    </small>\n  }\n}\n","import { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  inject\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  imports: [\n    MatListModule,\n    MatCheckboxModule,\n    MatTooltipModule,\n    MatButtonModule,\n    MatIconModule,\n    MatBadgeModule,\n    LayerLegendComponent,\n    AsyncPipe,\n    IgoLanguageModule,\n    LayerVisibilityButtonComponent\n  ]\n})\nexport class LayerItemComponent implements OnInit, OnDestroy {\n  private networkService = inject(NetworkService);\n\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()\n    ) {\n      return this.layer.visible\n        ? this.isDisabled\n          ? 'igo.geo.layer.notInResolution'\n          : 'igo.geo.layer.group.hideChildren'\n        : 'igo.geo.layer.showLayer';\n    }\n    return this.layer.visible\n      ? this.isDisabled\n        ? 'igo.geo.layer.group.hideChildren'\n        : 'igo.geo.layer.hideLayer'\n      : 'igo.geo.layer.showLayer';\n  }\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    @if (viewerOptions.mode === 'selection') {\n      <mat-checkbox\n        [checked]=\"selected\"\n        [disabled]=\"selectionDisabled\"\n        (change)=\"handleSelect($event)\"\n      >\n      </mat-checkbox>\n    }\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      @if (viewerOptions.mode !== 'selection') {\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)=\"toggleLayerTool()\"\n        >\n          <mat-icon>more_horiz</mat-icon>\n        </button>\n      }\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@if (showLegend$ | async) {\n  <div 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}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject\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  imports: [MatListModule, MatTooltipModule, LayerLegendComponent]\n})\nexport class LayerLegendItemComponent implements OnInit, OnDestroy {\n  private networkService = inject(NetworkService);\n\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  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 { 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, inject } 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 { OGCFilterService } from '../../filter/shared/ogc-filter.service';\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  WMSDataSourceOptionsParams,\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  private capabilitiesService = inject(CapabilitiesService);\n  private optionsService = inject(OptionsService, { optional: true });\n  private wfsDataSourceService = inject(WFSService);\n  private ogcFilterService = inject(OGCFilterService);\n  private languageService = inject(LanguageService);\n  private messageService = inject(MessageService);\n  private authInterceptor = inject(AuthInterceptor);\n\n  public datasources$ = new BehaviorSubject<DataSource[]>([]);\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.ogcFilterService,\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\n        if (optionsMerged?.params) {\n          optionsMerged.params = this.normalizeParams(optionsMerged.params);\n        }\n\n        return new WMSDataSource(\n          optionsMerged,\n          this.wfsDataSourceService,\n          this.ogcFilterService\n        );\n      }),\n      catchError(() => {\n        return of(undefined);\n      })\n    );\n  }\n\n  private normalizeParams(\n    params: WMSDataSourceOptionsParams\n  ): WMSDataSourceOptionsParams {\n    const uppercasedParams: Partial<WMSDataSourceOptionsParams> = {};\n    for (const key in params) {\n      if (Object.prototype.hasOwnProperty.call(params, key)) {\n        uppercasedParams[key.toUpperCase()] = params[key];\n      }\n    }\n\n    return uppercasedParams as WMSDataSourceOptionsParams;\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 { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } 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 { GeoDB } from './geoDB';\nimport { InsertSourceInsertDBEnum } from './geoDB.enums';\nimport { DatasToIDB, GeoDBData } from './geoDB.interface';\n\n@Injectable()\nexport class ConfigFileToGeoDBService {\n  private http = inject(HttpClient);\n  private messageService = inject(MessageService);\n\n  load(urlFile: string) {\n    const geoDB = new GeoDB();\n    let downloadMessage: ActiveToast<any>;\n    this.http\n      .get(urlFile)\n      .pipe(\n        catchError((error: HttpErrorResponse) => {\n          this.messageService.error(\n            `GeoData file ${urlFile} could not be read`\n          );\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.forEach((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.forEach((url) => {\n                    datas$.push(\n                      geoDB.getGeoDBData(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                                    geoDB.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                                              geoDB.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 geoDB.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.forEach((url) => {\n                    datas$.push(geoDB.delete(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 { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } 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 { GeoDB } from '../geoDB';\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 http = inject(HttpClient);\n  private networkService = inject(NetworkService);\n\n  private networkOnline = true;\n  constructor() {\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<object | Blob> {\n    const geoDB = new GeoDB();\n    return geoDB?.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, inject } 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 { LayerDB } from '../../offline/layerDB/layerDB';\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  private http = inject(HttpClient);\n  private styleService = inject(StyleService);\n  private dataSourceService = inject(DataSourceService);\n  private messageService = inject(MessageService);\n  private geoNetworkService = inject(GeoNetworkService, { optional: true });\n  private authInterceptor = inject(AuthInterceptor, { optional: true });\n\n  public unavailableLayers: AnyLayerItemOptions[] = [];\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      );\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      );\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      );\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    const layerDB = new LayerDB();\n    return layerDB.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","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 { ObjectUtils } from '@igo2/utils';\n\nimport {\n  ArcGISRestDataSourceOptions,\n  ArcGISRestImageDataSourceOptions,\n  TileArcGISRestDataSourceOptions,\n  WMSDataSourceOptions,\n  WMTSDataSourceOptions\n} from '../../datasource';\nimport {\n  AnyLayerItemOptions,\n  AnyLayerOptions,\n  ID_GROUP_PREFIX,\n  LayerGroupOptions,\n  LayerOptions\n} from '../shared';\nimport { isLayerGroupOptions, isLayerItemOptions } from './layer.utils';\n\nexport function mergeLayersOptions(\n  layersOptionsTree: AnyLayerOptions[],\n  layersOptions: AnyLayerOptions[]\n): AnyLayerOptions[] {\n  const tree = [...layersOptionsTree];\n\n  layersOptions.forEach((options) => {\n    const identifier = getLayerOptionIdentifier(options);\n    if (!identifier) return;\n\n    const currentNode =\n      _getNodeById(identifier, tree) ?? _getNodeByTitle(options.title, tree);\n    if (currentNode) {\n      // if we get layer options by title, we update the id of current layer.\n      if (\n        isLayerGroupOptions(currentNode) &&\n        currentNode.id.toString().includes(ID_GROUP_PREFIX)\n      ) {\n        currentNode.id = identifier;\n      }\n      const currentNodeParentID =\n        currentNode.parentId ?? findParentId(tree, currentNode);\n      const mergedOptions = ObjectUtils.mergeDeep(currentNode, options);\n\n      if (currentNodeParentID === options.parentId) {\n        moveOptions(tree, identifier, mergedOptions);\n      } else {\n        // if we have no parent id it means that we are in the root of the tree.\n        if (!options.parentId) mergedOptions.parentId = undefined;\n        const initialIdentifier = getLayerOptionIdentifier(currentNode);\n        moveOptions(tree, initialIdentifier, mergedOptions);\n      }\n    } else {\n      // Some layers in local context doesn't have an id, if this is the case we\n      // check if the layer is already in the tree by its title\n      // and if it is we don't add it again. The changes is ignored\n      if (isLayerGroupOptions(options)) {\n        const currentNode = _getNodeByTitle(options.title, tree);\n        if (currentNode) {\n          return;\n        }\n      }\n\n      // handel external Data source options\n      if (isLayerItemOptions(options)) {\n        handleExternalDataSource(options);\n      }\n      insertOptions(tree, options);\n    }\n  });\n\n  return tree;\n}\n\nfunction handleExternalDataSource(options: AnyLayerItemOptions): void {\n  options.sourceOptions = {\n    ...options.sourceOptions,\n    optionsFromCapabilities: true,\n    optionsFromApi: true,\n    crossOrigin: 'anonymous'\n  };\n}\n\nexport function getLayerOptionIdentifier(\n  layerOptions: AnyLayerOptions\n): string | undefined {\n  return isLayerGroupOptions(layerOptions)\n    ? String(layerOptions.id)\n    : (getLayerParam(layerOptions) ??\n        (layerOptions.id !== undefined\n          ? layerOptions.id.toString()\n          : undefined));\n}\n\nfunction moveOptions(\n  tree: AnyLayerOptions[],\n  initialIdentifier: string,\n  options: AnyLayerOptions\n): void {\n  removeNode(tree, initialIdentifier);\n  insertOptions(tree, options);\n}\n\nfunction insertOptions(\n  tree: AnyLayerOptions[],\n  options: AnyLayerOptions\n): void {\n  const parentId = options.parentId;\n  if (!parentId) {\n    tree.push(options);\n  } else {\n    const parent = _getNodeById(parentId, tree) as LayerGroupOptions;\n    if (parent) {\n      (parent.children ??= []).push(options);\n      sortLayersOptionsByZIndex(parent.children);\n    }\n  }\n}\n\n/** Recursive */\nfunction _getNodeById(id: string, data: AnyLayerOptions[]): AnyLayerOptions {\n  let node: AnyLayerOptions;\n  data.some((item) => {\n    const identifier = getLayerOptionIdentifier(item);\n\n    if (identifier === id) {\n      node = item;\n      return true;\n    }\n\n    const children = isLayerGroupOptions(item) ? item.children : undefined;\n    if (children) {\n      node = _getNodeById(id, children);\n      if (node) return true;\n    }\n\n    return false;\n  });\n  return node;\n}\n\n/** Recursive */\nfunction _getNodeByTitle(\n  title: string | undefined,\n  data: AnyLayerOptions[]\n): AnyLayerOptions {\n  if (!title) return;\n  let node: AnyLayerOptions;\n  data.some((item) => {\n    const itemTitle = item.title;\n\n    if (itemTitle === title) {\n      node = item;\n      return true;\n    }\n\n    const children = isLayerGroupOptions(item) ? item.children : undefined;\n    if (children) {\n      node = _getNodeByTitle(title, children);\n      if (node) return true;\n    }\n\n    return false;\n  });\n  return node;\n}\n\nfunction removeNode(tree: AnyLayerOptions[], nodeId: string): boolean {\n  for (let i = 0; i < tree.length; i++) {\n    const node = tree[i];\n    const currentId = getLayerOptionIdentifier(node);\n\n    if (currentId === nodeId) {\n      tree.splice(i, 1);\n      return true;\n    }\n\n    if (isLayerGroupOptions(node) && node.children?.length) {\n      const removed = removeNode(node.children, nodeId);\n\n      if (removed && node.children.length === 0) {\n        delete node.children;\n      }\n      if (removed) return true;\n    }\n  }\n  return false;\n}\n\nfunction sortLayersOptionsByZIndex(layers: AnyLayerOptions[]): void {\n  layers.sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0));\n}\n\nfunction getLayerParam(layerOptions: LayerOptions): string | undefined {\n  const { sourceOptions } = layerOptions;\n  if (!sourceOptions) return;\n  const { type } = sourceOptions;\n\n  switch (type) {\n    case 'wms':\n      return (\n        (sourceOptions as WMSDataSourceOptions).params.LAYERS ??\n        (sourceOptions as WMSDataSourceOptions).params['layers']\n      );\n\n    case 'wmts':\n    case 'arcgisrest':\n      return (\n        sourceOptions as WMTSDataSourceOptions | ArcGISRestDataSourceOptions\n      ).layer;\n\n    case 'imagearcgisrest':\n    case 'tilearcgisrest': {\n      const { layer, params } = sourceOptions as\n        | ArcGISRestImageDataSourceOptions\n        | TileArcGISRestDataSourceOptions;\n      return layer ?? params?.layer;\n    }\n\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Recursively finds the parent ID of a target layer option within a tree structure.\n *\n * @param tree - The array of layer options representing the tree structure.\n * @param target - The target layer option whose parent ID is to be found.\n * @param path - The current path of IDs traversed during the search (used internally).\n * @returns The parent ID as a dot-separated string, or undefined if no parent is found.\n */\nexport function findParentId(\n  tree: AnyLayerOptions[],\n  target: AnyLayerOptions,\n  path: string[] = []\n): string | undefined {\n  const targetId = getLayerOptionIdentifier(target);\n  for (const node of tree) {\n    const currentPath = node.id ? [...path, node.id.toString()] : [...path];\n\n    if (isLayerGroupOptions(node) && node.children) {\n      for (const child of node.children) {\n        // Check if the current child node matches the target node by comparing their IDs\n        if (getLayerOptionIdentifier(child) === targetId) {\n          const targetPath = currentPath?.join('.');\n          return targetPath === undefined || targetPath === ''\n            ? undefined\n            : targetPath;\n        }\n      }\n\n      const result = findParentId(node.children, target, currentPath);\n      if (result) {\n        return result;\n      }\n    }\n  }\n\n  return undefined;\n}\n","import { AsyncPipe } 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  imports: [\n    MatSlideToggleModule,\n    MatTooltipModule,\n    MatDividerModule,\n    ListComponent,\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  @if ((layersInUi$ | async).length && allowShowAllLegends) {\n    <mat-slide-toggle\n      tooltip-position=\"above\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"'igo.geo.layer.legend.showAll' | translate\"\n      [checked]=\"showAllLegendsValue\"\n      [labelPosition]=\"'before'\"\n      (change)=\"toggleShowAllLegends($event.checked)\"\n    >\n      {{ 'igo.geo.layer.legend.showAll' | translate }}\n    </mat-slide-toggle>\n  }\n  @if ((layersInUi$ | async).length && allowShowAllLegends) {\n    <mat-divider></mat-divider>\n  }\n  <igo-list [navigation]=\"false\" [selection]=\"false\">\n    @for (layer of layers$ | async; track layer; let i = $index) {\n      @if (!(excludeBaseLayers && isLayerItem(layer) && layer.baseLayer)) {\n        <igo-layer-legend-item\n          igoListItem\n          [layer]=\"$any(layer)\"\n          [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\n        >\n        </igo-layer-legend-item>\n      }\n    }\n  </igo-list>\n  @if (\n    !showAllLegendsValue &&\n    (layersInUi$ | async).length &&\n    (hasVisibleOrInRangeLayers$ | async) === false &&\n    (hasVisibleAndNotInRangeLayers$ | async) === false &&\n    allowShowAllLegends\n  ) {\n    <p class=\"layers-empty\">\n      {{ 'igo.geo.layer.legend.noLayersVisibleWithShowAllButton' | translate }}\n    </p>\n  }\n  @if (\n    !showAllLegendsValue &&\n    (layersInUi$ | async).length &&\n    (hasVisibleOrInRangeLayers$ | async) === false &&\n    (hasVisibleAndNotInRangeLayers$ | async) &&\n    allowShowAllLegends\n  ) {\n    <p class=\"layers-empty\">\n      {{\n        'igo.geo.layer.legend.noLayersVisibleWithShowAllButtonButZoom'\n          | translate\n      }}\n    </p>\n  }\n  @if (\n    (layersInUi$ | async).length &&\n    (hasVisibleOrInRangeLayers$ | async) === false &&\n    (hasVisibleAndNotInRangeLayers$ | async) === false &&\n    !allowShowAllLegends\n  ) {\n    <p class=\"layers-empty\">\n      {{ 'igo.geo.layer.legend.noLayersVisible' | translate }}\n    </p>\n  }\n  @if (\n    (layersInUi$ | async).length &&\n    (hasVisibleOrInRangeLayers$ | async) === false &&\n    (hasVisibleAndNotInRangeLayers$ | async) &&\n    !allowShowAllLegends\n  ) {\n    <p class=\"layers-empty\">\n      {{ 'igo.geo.layer.legend.noLayersVisibleButZoom' | translate }}\n    </p>\n  }\n</div>\n","import { Directive, OnDestroy, OnInit, inject } 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 mapService = inject(MapService);\n\n  private component: LayerLegendListComponent;\n  private layersOrResolutionChange$$: Subscription;\n  layersVisibility$$: Subscription;\n\n  constructor() {\n    const component = inject(LayerLegendListComponent, { self: true });\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 { 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  imports: [\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  @if (control.value) {\n    <button\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  }\n</mat-form-field>\n","import { Injectable, inject } 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  private layerService = inject(LayerService);\n  private formDialogService = inject(FormDialogService);\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 {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  inject\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 { 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  imports: [\n    FormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatTooltipModule,\n    MatButtonModule,\n    MatMenuModule,\n    MatIconModule,\n    MatBadgeModule,\n    IgoLanguageModule,\n    LayerSearchComponent\n  ],\n  providers: [LayerListToolService, FormDialogService]\n})\nexport class LayerListToolComponent {\n  private layerListToolService = inject(LayerListToolService);\n\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  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  @if (viewerOptions?.group?.canCreate) {\n    <button\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  }\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 {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  inject\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 { IconSvg, VECTOR_SQUARE_ICON } from '@igo2/common/icon';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MessageService } from '@igo2/core/message';\n\nimport { LayerGroupComponent } from '../layer-group';\nimport { LayerItemComponent } from '../layer-item';\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  imports: [\n    FormsModule,\n    MatBadgeModule,\n    MatButtonModule,\n    MatCheckboxModule,\n    MatDividerModule,\n    MatIconModule,\n    MatMenuModule,\n    MatSliderModule,\n    MatTreeModule,\n    MatTooltipModule,\n    TreeDragDropDirective,\n    LayerGroupComponent,\n    LayerItemComponent,\n    IgoLanguageModule\n  ]\n})\nexport class LayerListComponent {\n  private messageService = inject(MessageService);\n\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() {\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 { 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 { 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  imports: [\n    MatButtonModule,\n    MatListModule,\n    MatIconModule,\n    MatTooltipModule,\n    IgoLanguageModule\n  ]\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  <mat-icon\n    matListItemIcon\n    class=\"layer-indicator mat-warn\"\n    aria-hidden=\"false\"\n    color=\"warn\"\n    >warning\n  </mat-icon>\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","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  inject\n} 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  private layerService = inject(LayerService);\n\n  @Input() layersOptions: AnyLayerOptions[];\n\n  deleteUnavailableLayer(options: AnyLayerOptions): void {\n    this.layerService.deleteUnavailableLayers(options);\n  }\n}\n","<igo-list [navigation]=\"false\" [selection]=\"false\">\n  @for (layer of layersOptions; track layer) {\n    <igo-layer-unavailable\n      igoListItem\n      [layerOptions]=\"layer\"\n      (remove)=\"deleteUnavailableLayer($event)\"\n    >\n    </igo-layer-unavailable>\n  }\n</igo-list>\n","import { Component, EventEmitter, Input, Output, inject } 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  imports: [\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  private layerListToolService = inject(LayerListToolService);\n\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  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    @if (isLayersRemovable(selected)) {\n      <button\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]=\"\n            !hasMultipleSelection || isLayersRemovable(selected)\n          \"\n          >delete</mat-icon\n        >\n      </button>\n    }\n\n    @if (hasMultipleSelection) {\n      <button\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\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      >\n        arrow_upward\n      </mat-icon>\n    </button>\n\n    @if (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      <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    }\n\n    @if (isExtentsValid()) {\n      <button\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\n    @if (canRename) {\n      <button\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\n    <ng-content></ng-content>\n  </div>\n</igo-panel>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef,\n  inject\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    NgTemplateOutlet,\n    MatButtonModule,\n    MatCheckboxModule,\n    MatDividerModule,\n    MatIconModule,\n    LayerListComponent,\n    LayerUnavailableListComponent,\n    LayerViewerBottomActionsComponent,\n    IgoLanguageModule,\n    LayerListToolComponent\n  ]\n})\nexport class LayerViewerComponent implements OnInit {\n  private cdr = inject(ChangeDetectorRef);\n  private layerService = inject(LayerService);\n\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  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@if (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    <button mat-icon-button color=\"warn\" (click)=\"toggleSelectionMode(false)\">\n      <mat-icon>close</mat-icon>\n    </button>\n  </div>\n}\n<mat-divider></mat-divider>\n\n<div class=\"layer-view\">\n  @if (\n    layers?.length > 0 ||\n    unavailableLayers?.length > 0 ||\n    baselayers?.length > 0\n  ) {\n    <div class=\"layer-list-container\">\n      @if (unavailableLayers?.length) {\n        <igo-layer-unavailable-list\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      @if (!excludeBaseLayers && baselayers?.length) {\n        <div>\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      }\n    </div>\n  } @else {\n    <ng-content select=\"[emptyList]\"></ng-content>\n  }\n</div>\n\n@if (layerController.hasSelection) {\n  <igo-layer-viewer-bottom-actions\n    [map]=\"map\"\n    [viewerOptions]=\"layerViewerOptions\"\n    [controller]=\"layerController\"\n    [searchTerm]=\"keyword$.value\"\n    (layerChange)=\"onLayerChange()\"\n  >\n    @if (\n      layerController.selected.length === 1 &&\n      isLayerItem(layerController.selected[0])\n    ) {\n      <ng-container\n        [ngTemplateOutlet]=\"customBottomActions\"\n        [ngTemplateOutletContext]=\"{ layer: layerController.selected[0] }\"\n      ></ng-container>\n    }\n  </igo-layer-viewer-bottom-actions>\n}\n\n<ng-content></ng-content>\n","import {\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  imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule]\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","@if (options.trackFeature) {\n  <button\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}\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  inject\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 activityService = inject(ActivityService);\n\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  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, inject } 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 networkService = inject(NetworkService);\n  private messageService = inject(MessageService);\n\n  private component: MapBrowserComponent;\n\n  get map(): IgoMap {\n    return this.component.map;\n  }\n\n  private previousMessageId;\n\n  constructor() {\n    const component = inject(MapBrowserComponent);\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  inject\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 component = inject(MapBrowserComponent, { self: true });\n  private mediaService = inject(MediaService);\n\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  /**\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  inject\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  private component = inject(MapBrowserComponent, { self: true });\n  private mediaService = inject(MediaService);\n  private styleService = inject(StyleService);\n\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  /**\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, inject } 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  private config = inject(ConfigService);\n\n  constructor() {\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  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, inject } 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  imports: [\n    MatButtonModule,\n    NgClass,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class MenuButtonComponent {\n  configService = inject(ConfigService);\n\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() {\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 } from '@angular/common';\nimport {\n  AfterContentInit,\n  Component,\n  Input,\n  OnDestroy,\n  inject\n} 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  imports: [\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class GeolocateButtonComponent implements AfterContentInit, OnDestroy {\n  private configService = inject(ConfigService);\n\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  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","@if (map.geolocationController) {\n  <div class=\"igo-geolocate-button-container\">\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}\n","import { Component, Input, inject } 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  imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule]\n})\nexport class HomeExtentButtonComponent {\n  configService = inject(ConfigService);\n\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() {\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  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, inject } 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';\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  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  private storageService = inject(StorageService);\n\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() {\n    this.noSleep = new NoSleep();\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 {\n  AfterViewInit,\n  ApplicationRef,\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  inject\n} from '@angular/core';\n\nimport {\n  AnyLayerOptions,\n  Layer,\n  LayerOptions,\n  LayersLink,\n  LayersLinkProperties\n} from '../../layer/shared';\nimport { LayerService } from '../../layer/shared/layer.service';\nimport { isLayerItem } from '../../layer/utils';\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  imports: [MapBrowserComponent]\n})\nexport class MiniBaseMapComponent implements AfterViewInit {\n  private layerService = inject(LayerService);\n  private appRef = inject(ApplicationRef);\n\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  ngAfterViewInit() {\n    this.basemap.ol.setView(this.map.ol.getView());\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 handleBaseLayerChanged(baselayer: Layer) {\n    this.basemap.layerController.reset();\n\n    const options: AnyLayerOptions = 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  @if (display) {\n    <div (click)=\"changeBaseLayer(baseLayer)\">\n      <igo-map-browser [map]=\"basemap\"></igo-map-browser>\n      @if (title) {\n        <div class=\"igo-mini-basemap-title\">{{ title }}</div>\n      }\n    </div>\n  }\n</div>\n","import { NgClass } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  Input,\n  OnDestroy,\n  inject\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';\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  imports: [\n    NgClass,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    MiniBaseMapComponent,\n    IgoLanguageModule\n  ]\n})\nexport class BaseLayersSwitcherComponent implements AfterViewInit, OnDestroy {\n  private mediaService = inject(MediaService);\n\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() {\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","@if (baseLayers.length > 0) {\n  <div\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    @if (useStaticIcon && !expand && showButton) {\n      <div class=\"igo-baselayers-switcher-button-container\">\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      @for (baseLayer of baseLayers; track baseLayer; let i = $index) {\n        <igo-mini-basemap\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      }\n    </div>\n    @if (hasMoreThanTwo) {\n      <div class=\"more-baselayers\">\n        <mat-icon class=\"material-icons mat-icon\" color=\"primary\"\n          >arrow_drop_down</mat-icon\n        >\n      </div>\n    }\n  </div>\n}\n","import { AsyncPipe, 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  imports: [\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","@if (((rotated$ | async) && !showIfNoRotation) || showIfNoRotation) {\n  <div\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}\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 { 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  imports: []\n})\nexport class InfoSectionComponent {\n  @Input() infoContent = '';\n}\n","@if (infoContent && infoContent.length) {\n  <div class=\"infoSection\">\n    <pre>{{ infoContent }}</pre>\n  </div>\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } 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  private http = inject(HttpClient);\n  private messageService = inject(MessageService);\n\n  public queryEnabled = true;\n  public defaultFeatureCount = 20;\n  public featureCount = 20;\n\n  private previousMessageIds = [];\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\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  Injectable,\n  WritableSignal,\n  effect,\n  inject,\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  private searchSourceService = inject(SearchSourceService);\n  private mapService = inject(MapService);\n  private storageService = inject(StorageService);\n  private analyticsService = inject(AnalyticsService);\n\n  searchTerm: WritableSignal<string> = signal(null);\n\n  constructor() {\n    const analytics = inject<boolean>('searchAnalytics' as any, {\n      optional: true\n    });\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 { HttpClient } from '@angular/common/http';\nimport {\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject\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  imports: [\n    MatSlideToggleModule,\n    DirectionsButtonsComponent,\n    DirectionsInputsComponent,\n    DirectionsResultsComponent,\n    IgoLanguageModule\n  ]\n})\nexport class DirectionsComponent implements OnInit, OnDestroy {\n  private cdRef = inject(ChangeDetectorRef);\n  private http = inject(HttpClient);\n  private languageService = inject(LanguageService);\n  private directionsService = inject(DirectionsService);\n  private directionsSourceService = inject(DirectionsSourceService);\n  private searchService = inject(SearchService);\n  private queryService = inject(QueryService);\n  private messageService = inject(MessageService);\n\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  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  @if (hasOsrmPrivateAccess && twoSourcesAvailable) {\n    <mat-slide-toggle\n      [checked]=\"enabledProfileHasAuthorization\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onTogglePrivateModeControl($event.checked)\"\n    >\n      {{ 'igo.geo.directions.toggle.type' | translate }}\n    </mat-slide-toggle>\n  }\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@if (routesFeatureStore.all().length > 0) {\n  <igo-directions-buttons\n    [stepsFeatureStore]=\"stepsFeatureStore\"\n    [contextUri]=\"contextUri\"\n    [zoomOnActiveRoute$]=\"zoomOnActiveRoute$\"\n    [routesFeatureStore]=\"routesFeatureStore\"\n    [stopsStore]=\"stopsStore\"\n  ></igo-directions-buttons>\n}\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: Date) {\n    const year = value.getFullYear();\n    const month = (value.getMonth() + 1).toString().padStart(2, '0');\n    const day = value.getUTCDate().toString().padStart(2, '0');\n    const hour = value.getUTCHours().toString().padStart(2, '0');\n    const minute = value.getUTCMinutes().toString().padStart(2, '0');\n    return `${year}-${month}-${day}T${hour}:${minute}:00Z`;\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, inject } 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  private http = inject(HttpClient);\n  private languageService = inject(LanguageService);\n  private configService = inject(ConfigService);\n\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    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, inject } 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  private messageService = inject(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 {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  inject\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 { 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  imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule]\n})\nexport class DownloadButtonComponent {\n  private downloadService = inject(DownloadService);\n\n  @Input() layer: Layer;\n\n  @Input() color = 'primary';\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","@if (\n  options &&\n  options.download &&\n  (options.download['dynamicUrl'] || options.download['url'])\n) {\n  <button\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}\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  inject\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  imports: [MatSliderModule, FormsModule, MatButtonModule, MatIconModule],\n  providers: [OGCFilterTimeService]\n})\nexport class OgcFilterTimeSliderComponent implements OnInit {\n  ogcFilterTimeService = inject(OGCFilterTimeService);\n\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() {\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 {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n  inject\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  imports: [\n    MatSlideToggleModule,\n    FormsModule,\n    OgcFilterTimeSliderComponent,\n    MatFormFieldModule,\n    MatInputModule,\n    MatDatepickerModule,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    MatSelectModule,\n    ReactiveFormsModule,\n    MatOptionModule,\n    IgoLanguageModule\n  ],\n  providers: [OGCFilterTimeService, provideMomentDateAdapter()]\n})\nexport class OgcFilterTimeComponent implements OnInit {\n  ogcFilterTimeService = inject(OGCFilterTimeService);\n\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  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      if (!this.isValidDate(value)) {\n        return;\n      }\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  private isValidDate(value: string): boolean {\n    if (/^\\d+$/.test(value)) {\n      return false;\n    }\n    const date = new Date(value);\n    return date instanceof Date && !isNaN(date.getTime());\n  }\n}\n","<div class=\"datetime-container\">\n  @if (this.currentFilter.sliderOptions?.enabled) {\n    <mat-slide-toggle [(ngModel)]=\"sliderMode\" (change)=\"modeChange($event)\">\n      {{ 'igo.geo.filter.sliderModeTitle' | translate }}\n    </mat-slide-toggle>\n  }\n\n  @if (sliderMode) {\n    <div class=\"slider-container\">\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\n  @if (!sliderMode) {\n    <div>\n      @if (calendarTypeYear) {\n        <div class=\"year-input-container\">\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>{{\n              'igo.geo.timeFilter.startYear' | translate\n            }}</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            <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            <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          <mat-form-field class=\"year-input\" subscriptSizing=\"dynamic\">\n            <mat-label>{{\n              'igo.geo.timeFilter.endYear' | translate\n            }}</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            <input\n              #endYear\n              class=\"year-input-hide\"\n              matInput\n              [matDatepicker]=\"endDatepicker\"\n              enabled=\"false\"\n              readonly=\"true\"\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            />\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      @if (calendarType() !== 'year') {\n        <div class=\"datetime-input-container\">\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\n                    ? beginValue\n                    : 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)=\"\n                  monthSelected($event, beginDatepicker, 'begin')\n                \"\n              >\n              </mat-datepicker>\n            </mat-form-field>\n            @if (calendarType() === 'datetime') {\n              <div class=\"time-input\">\n                <mat-form-field class=\"hour-input\" subscriptSizing=\"dynamic\">\n                  <mat-label>{{\n                    'igo.geo.timeFilter.hour' | translate\n                  }}</mat-label>\n                  <mat-select\n                    [formControl]=\"beginHourFormControl\"\n                    [attr.disabled]=\"!currentFilter.active\"\n                    (selectionChange)=\"changeTemporalProperty(begin.value, 1)\"\n                  >\n                    @for (hour of beginHours; track hour) {\n                      <mat-option [value]=\"hour\">{{ hour }}</mat-option>\n                    }\n                  </mat-select>\n                </mat-form-field>\n                <mat-form-field class=\"minute-input\" subscriptSizing=\"dynamic\">\n                  <mat-label>{{\n                    'igo.geo.timeFilter.minute' | translate\n                  }}</mat-label>\n                  <mat-select\n                    [formControl]=\"beginMinuteFormControl\"\n                    [attr.disabled]=\"!currentFilter.active\"\n                    (selectionChange)=\"changeTemporalProperty(begin.value, 1)\"\n                  >\n                    @for (minute of beginMinutes; track minute) {\n                      <mat-option [value]=\"minute\">{{ minute }}</mat-option>\n                    }\n                  </mat-select>\n                </mat-form-field>\n              </div>\n            }\n          </div>\n          @if (!restrictedToStep()) {\n            <div 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\n                      ? beginValue\n                      : 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              @if (calendarType() === 'datetime') {\n                <div class=\"time-input\">\n                  <mat-form-field class=\"hour-input\" subscriptSizing=\"dynamic\">\n                    <mat-label>{{\n                      'igo.geo.timeFilter.hour' | translate\n                    }}</mat-label>\n                    <mat-select\n                      [formControl]=\"endHourFormControl\"\n                      [attr.disabled]=\"!currentFilter.active\"\n                      (selectionChange)=\"changeTemporalProperty(end.value, 2)\"\n                    >\n                      @for (hour of endHours; track hour) {\n                        <mat-option [value]=\"hour\">{{ hour }}</mat-option>\n                      }\n                    </mat-select>\n                  </mat-form-field>\n                  <mat-form-field\n                    class=\"minute-input\"\n                    subscriptSizing=\"dynamic\"\n                  >\n                    <mat-label>{{\n                      'igo.geo.timeFilter.minute' | translate\n                    }}</mat-label>\n                    <mat-select\n                      [formControl]=\"endMinuteFormControl\"\n                      [attr.disabled]=\"!currentFilter.active\"\n                      (selectionChange)=\"changeTemporalProperty(end.value, 2)\"\n                    >\n                      @for (minute of endMinutes; track minute) {\n                        <mat-option [value]=\"minute\">{{ minute }}</mat-option>\n                      }\n                    </mat-select>\n                  </mat-form-field>\n                </div>\n              }\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      }\n    </div>\n  }\n</div>\n","import { AsyncPipe, KeyValuePipe, NgClass } from '@angular/common';\nimport { Component, Input, OnInit, inject } 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  imports: [\n    MatCheckboxModule,\n    MatTooltipModule,\n    MatFormFieldModule,\n    NgClass,\n    MatSelectModule,\n    MatOptionModule,\n    MatInputModule,\n    MatAutocompleteModule,\n    MatButtonModule,\n    MatIconModule,\n    OgcFilterTimeComponent,\n    AsyncPipe,\n    KeyValuePipe,\n    IgoLanguageModule\n  ]\n})\nexport class OgcFilterFormComponent implements OnInit {\n  private wktService = inject(WktService);\n\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() {\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  @if (\n    (currentFilterIsSpatial$ | async) === false &&\n    (fields$ | async) &&\n    (fields$ | async).length > 0 &&\n    (fields$ | async)[0].name !== ''\n  ) {\n    <mat-form-field\n      class=\"field\"\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        @for (field of filteredFields$ | async; track field) {\n          <mat-option\n            matTooltipShowDelay=\"500\"\n            [value]=\"field.alias\"\n            [id]=\"field.name\"\n            [matTooltip]=\"field.alias\"\n          >\n            {{ field.alias }}\n          </mat-option>\n        }\n      </mat-autocomplete>\n      @if (\n        currentFilter.propertyName &&\n        inputClearable === 'selectField' &&\n        currentFilter.active\n      ) {\n        <button\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      }\n    </mat-form-field>\n  }\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      @for (\n        operator of ogcFilterOperators$ | async | keyvalue;\n        track operator\n      ) {\n        <mat-option\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      }\n    </mat-select>\n  </mat-form-field>\n\n  @if (currentFilterIsSpatial$ | async) {\n    <mat-form-field class=\"spatialSelector\">\n      <mat-select\n        [disabled]=\"!currentFilter.active\"\n        [value]=\"currentFilter.igoSpatialSelector\"\n        (selectionChange)=\"changeSpatialSelector($event.value)\"\n      >\n        @for (\n          igoSpatialSelector of igoSpatialSelectors;\n          track igoSpatialSelector\n        ) {\n          <mat-option [value]=\"igoSpatialSelector.type\">\n            {{\n              'igo.geo.spatialSelector.' + igoSpatialSelector.type | translate\n            }}\n          </mat-option>\n        }\n      </mat-select>\n    </mat-form-field>\n  }\n\n  @if (['expression', 'pattern'].indexOf(detectProperty()) !== -1) {\n    <mat-form-field\n      class=\"singleInput\"\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        @for (value of filteredValues$ | async; track value) {\n          <mat-option\n            matTooltipShowDelay=\"500\"\n            [value]=\"value\"\n            [matTooltip]=\"value\"\n          >\n            {{ value }}\n          </mat-option>\n        }\n      </mat-autocomplete>\n      @if (\n        isClearable() &&\n        inputClearable === 'selectProperty' &&\n        currentFilter.active\n      ) {\n        <button\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      }\n    </mat-form-field>\n  }\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  @if (\n    (currentFilterIsSpatial$ | async) &&\n    currentFilter.igoSpatialSelector === 'snrc'\n  ) {\n    <mat-form-field\n      class=\"snrc\"\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      @if (currentFilter.igoSNRC) {\n        <button\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      }\n    </mat-form-field>\n  }\n\n  @if (\n    (currentFilterIsSpatial$ | async) &&\n    currentFilter.igoSpatialSelector === 'fixedExtent'\n  ) {\n    @if (currentFilter.igoSpatialSelector === 'fixedExtent') {\n      <button\n        [disabled]=\"!currentFilter.active\"\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    }\n  }\n</div>\n\n<div class=\"ogc-filter-form-container\">\n  @if (\n    !isTemporalOperator() &&\n    ['lowerBoundary', 'begin'].indexOf(detectProperty(1)) !== -1\n  ) {\n    <mat-form-field\n      class=\"dualInput\"\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        @for (value of filteredValues$ | async; track value) {\n          <mat-option\n            matTooltipShowDelay=\"500\"\n            [value]=\"value\"\n            [matTooltip]=\"value\"\n          >\n            {{ value }}\n          </mat-option>\n        }\n      </mat-autocomplete>\n      @if (\n        isClearable(1) &&\n        inputClearable === 'selectProperty1' &&\n        currentFilter.active\n      ) {\n        <button\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      }\n    </mat-form-field>\n  }\n\n  @if (\n    !isTemporalOperator() &&\n    ['upperBoundary', 'end'].indexOf(detectProperty(2)) !== -1\n  ) {\n    <mat-form-field\n      class=\"dualInput\"\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        @for (value of filteredValues$ | async; track value) {\n          <mat-option\n            matTooltipShowDelay=\"500\"\n            [value]=\"value\"\n            [matTooltip]=\"value\"\n          >\n            {{ value }}\n          </mat-option>\n        }\n      </mat-autocomplete>\n      @if (\n        isClearable(2) &&\n        inputClearable === 'selectProperty2' &&\n        currentFilter.active\n      ) {\n        <button\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      }\n    </mat-form-field>\n  }\n</div>\n\n@if (isTemporalOperator()) {\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}\n","import { AsyncPipe, NgStyle } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnInit,\n  ViewChild,\n  inject\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  imports: [\n    FormsModule,\n    ReactiveFormsModule,\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  private ogcFilterService = inject(OGCFilterService);\n  private formBuilder = inject(UntypedFormBuilder);\n  private domService = inject(DOMService);\n  private configService = inject(ConfigService);\n  private cdRef = inject(ChangeDetectorRef);\n\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    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  @for (selector of ogcFiltersSelectors; track selector) {\n    <div>\n      @if (selector.selectorType === 'pushButton') {\n        <div class=\"pushButtonGroups\">\n          <mat-divider></mat-divider>\n          @if (getPushButtonsGroups().length > 1) {\n            <div class=\"groupsSelector\">\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                  @for (\n                    selectorGroup of getPushButtonsGroups();\n                    track selectorGroup\n                  ) {\n                    <mat-option [value]=\"selectorGroup\"\n                      >{{ selectorGroup.title }}\n                    </mat-option>\n                  }\n                </mat-select>\n              </mat-form-field>\n            </div>\n          }\n          @for (\n            bundle of currentPushButtonsGroup.computedSelectors;\n            track bundle\n          ) {\n            <h4>{{ bundle.title }}</h4>\n            <mat-button-toggle-group\n              formControlName=\"pushButtons\"\n              appearance=\"legacy\"\n              vertical=\"{{ bundleIsVertical(bundle) }}\"\n              multiple=\"true\"\n            >\n              @for (ogcPushButton of bundle.selectors; track ogcPushButton) {\n                <mat-button-toggle\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)=\"\n                    onSelectionChange(ogcPushButton, selector.selectorType)\n                  \"\n                  [value]=\"ogcPushButton\"\n                  >{{ ogcPushButton.title }}\n                </mat-button-toggle>\n              }\n            </mat-button-toggle-group>\n          }\n        </div>\n      }\n      @if (selector.selectorType === 'checkbox') {\n        <div class=\"checkboxGroups\">\n          <mat-divider></mat-divider>\n          @if (getCheckboxesGroups().length > 1) {\n            <div class=\"groupsSelector\">\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                  @for (\n                    selectorGroup of getCheckboxesGroups();\n                    track selectorGroup\n                  ) {\n                    <mat-option [value]=\"selectorGroup\"\n                      >{{ selectorGroup.title }}\n                    </mat-option>\n                  }\n                </mat-select>\n              </mat-form-field>\n            </div>\n          }\n          @for (\n            bundle of currentCheckboxesGroup.computedSelectors;\n            track bundle\n          ) {\n            <h4>{{ bundle.title }}</h4>\n            <div class=\"checkboxes\">\n              @for (ogcCheckbox of bundle.selectors; track ogcCheckbox) {\n                <mat-checkbox\n                  [matTooltip]=\"getToolTip(ogcCheckbox)\"\n                  tooltip-position=\"below\"\n                  matTooltipShowDelay=\"500\"\n                  matTooltipClass=\"material-tooltip\"\n                  [checked]=\"ogcCheckbox.enabled\"\n                  (change)=\"\n                    onSelectionChange(ogcCheckbox, selector.selectorType)\n                  \"\n                  [value]=\"ogcCheckbox\"\n                  >{{ ogcCheckbox.title }}\n                </mat-checkbox>\n              }\n            </div>\n            @if (\n              isLessResults(bundle, 'checkbox') ||\n              isMoreResults(bundle, 'checkbox')\n            ) {\n              <p>\n                @if (isLessResults(bundle, 'checkbox')) {\n                  <u\n                    class=\"lessResults\"\n                    (click)=\"displayLessResults('checkbox')\"\n                    >{{ 'igo.geo.filter.displayLessResults' | translate }}\n                  </u>\n                }\n                @if (isMoreResults(bundle, 'checkbox')) {\n                  <u\n                    class=\"moreResults\"\n                    (click)=\"displayMoreResults('checkbox')\"\n                    >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n                  </u>\n                }\n              </p>\n            }\n          }\n        </div>\n      }\n      @if (selector.selectorType === 'radioButton') {\n        <div class=\"radioButtonGroups\">\n          <mat-divider></mat-divider>\n          @if (getRadioButtonsGroups().length > 1) {\n            <div class=\"groupsSelector\">\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                  @for (\n                    selectorGroup of getRadioButtonsGroups();\n                    track selectorGroup\n                  ) {\n                    <mat-option [value]=\"selectorGroup\"\n                      >{{ selectorGroup.title }}\n                    </mat-option>\n                  }\n                </mat-select>\n              </mat-form-field>\n            </div>\n          }\n          @for (\n            bundle of currentRadioButtonsGroup.computedSelectors;\n            track bundle\n          ) {\n            <h4>{{ bundle.title }}</h4>\n            <mat-radio-group formControlName=\"radioButtons\">\n              @if (bundle.unfiltered) {\n                <mat-radio-button\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              }\n              @for (ogcRadioButton of bundle.selectors; track ogcRadioButton) {\n                <mat-radio-button\n                  [matTooltip]=\"getToolTip(ogcRadioButton)\"\n                  tooltip-position=\"below\"\n                  matTooltipShowDelay=\"500\"\n                  matTooltipClass=\"material-tooltip\"\n                  [checked]=\"ogcRadioButton.enabled\"\n                  (change)=\"\n                    onSelectionChange(ogcRadioButton, selector.selectorType)\n                  \"\n                  [value]=\"ogcRadioButton\"\n                  >{{ ogcRadioButton.title }}\n                </mat-radio-button>\n              }\n              @if (\n                isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\n              ) {\n                <p>\n                  @if (isLessResults(bundle, 'radio')) {\n                    <u class=\"lessResults\" (click)=\"displayLessResults('radio')\"\n                      >{{ 'igo.geo.filter.displayLessResults' | translate }}\n                    </u>\n                  }\n                  @if (isMoreResults(bundle, 'radio')) {\n                    <u class=\"moreResults\" (click)=\"displayMoreResults('radio')\"\n                      >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n                    </u>\n                  }\n                </p>\n              }\n            </mat-radio-group>\n          }\n        </div>\n      }\n      @if (selector.selectorType === 'select') {\n        <div class=\"selectGroups\">\n          <mat-divider></mat-divider>\n          @if (getSelectGroups().length > 1) {\n            <div class=\"groupsSelector\">\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                  @for (\n                    selectorGroup of getSelectGroups();\n                    track selectorGroup\n                  ) {\n                    <mat-option [value]=\"selectorGroup\"\n                      >{{ selectorGroup.title }}\n                    </mat-option>\n                  }\n                </mat-select>\n              </mat-form-field>\n            </div>\n          }\n          @for (bundle of currentSelectGroup.computedSelectors; track bundle) {\n            <h4>{{ bundle.title }}</h4>\n            <div class=\"groupsSelector\">\n              @if (bundle.unfiltered && !bundle.multiple) {\n                <mat-button\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              }\n              <mat-form-field\n                [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n              >\n                @if (bundle.multiple) {\n                  <div>\n                    <mat-select\n                      #selection\n                      [multiple]=\"bundle.multiple\"\n                      [placeholder]=\"bundle.title\"\n                      formControlName=\"selectMulti\"\n                    >\n                      <div class=\"checkboxes\">\n                        @if (bundle.multiple) {\n                          <mat-checkbox\n                            [(ngModel)]=\"selectAllSelected\"\n                            [ngModelOptions]=\"{ standalone: true }\"\n                            (change)=\"toggleAllSelection()\"\n                            >Tous\n                          </mat-checkbox>\n                        }\n                      </div>\n                      @for (ogcSelect of bundle.selectors; track ogcSelect) {\n                        <mat-option\n                          [matTooltip]=\"getToolTip(ogcSelect)\"\n                          tooltip-position=\"below\"\n                          matTooltipDelay=\"500\"\n                          matTooltipClass=\"material-tooltip\"\n                          (onSelectionChange)=\"\n                            selectOptionClick(\n                              $event.source.value,\n                              bundle,\n                              $event\n                            )\n                          \"\n                          [value]=\"ogcSelect\"\n                          >{{ ogcSelect.title }}\n                        </mat-option>\n                      }\n                    </mat-select>\n                  </div>\n                } @else {\n                  <mat-select\n                    [placeholder]=\"bundle.title\"\n                    formControlName=\"select\"\n                  >\n                    @for (ogcSelect of bundle.selectors; track ogcSelect) {\n                      <mat-option\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                    }\n                  </mat-select>\n                }\n              </mat-form-field>\n            </div>\n          }\n        </div>\n      }\n      @if (selector.selectorType === 'autocomplete') {\n        <div class=\"autocompleteGroups\">\n          <mat-divider></mat-divider>\n          @if (getAutocompleteGroups().length > 1) {\n            <div class=\"groupsSelector\">\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                  @for (\n                    autocompleteGroup of getAutocompleteGroups();\n                    track autocompleteGroup\n                  ) {\n                    <mat-option [value]=\"autocompleteGroup\"\n                      >{{ autocompleteGroup.title }}\n                    </mat-option>\n                  }\n                </mat-select>\n              </mat-form-field>\n            </div>\n          }\n          @for (\n            bundle of currentAutocompleteGroup.computedSelectors;\n            track bundle\n          ) {\n            <h4>{{ bundle.title }}</h4>\n            <div class=\"groupsSelector\">\n              @if (bundle.unfiltered) {\n                <mat-button\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              }\n              @if (filteredOgcAutocomplete[bundle.id]) {\n                <mat-form-field\n                  floatLabel=\"always\"\n                  [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n                >\n                  <mat-label>{{ bundle.title }}</mat-label>\n                  @if (\n                    filteredOgcAutocomplete[bundle.id] &&\n                    (bundle.showChips ?? true)\n                  ) {\n                    <mat-chip-set>\n                      @for (\n                        autocompleteEnabled of autocompleteEnableds;\n                        track autocompleteEnabled\n                      ) {\n                        <mat-chip\n                          (removed)=\"toggleSelection(autocompleteEnabled)\"\n                        >\n                          {{ autocompleteEnabled }}\n                          <button\n                            matChipRemove\n                            [matTooltip]=\"\n                              'igo.geo.filter.removeFilter' | translate\n                            \"\n                          >\n                            <mat-icon>cancel</mat-icon>\n                          </button>\n                        </mat-chip>\n                      }\n                    </mat-chip-set>\n                  }\n                  <input\n                    matInput\n                    type=\"text\"\n                    formControlName=\"autocomplete\"\n                    #input\n                    [matAutocomplete]=\"auto\"\n                    (input)=\"onInputChange()\"\n                  />\n                  <mat-autocomplete\n                    #auto=\"matAutocomplete\"\n                    [displayWith]=\"displayFn\"\n                  >\n                    @for (\n                      ogcAutocomplete of filteredOgcAutocomplete[bundle.id]\n                        | async;\n                      track ogcAutocomplete\n                    ) {\n                      <mat-option\n                        id=\"mat-option\"\n                        [matTooltip]=\"getToolTip(ogcAutocomplete)\"\n                      >\n                        <div\n                          (click)=\"\n                            toggleAutocompleteOption(\n                              $event,\n                              ogcAutocomplete.value\n                            )\n                          \"\n                        >\n                          <mat-checkbox\n                            id=\"mat-checkbox\"\n                            color=\"primary\"\n                            [checked]=\"checkedStatus(ogcAutocomplete.value)\"\n                            (click)=\"\n                              toggleAutocompleteOption(\n                                $event,\n                                ogcAutocomplete.value\n                              )\n                            \"\n                          >\n                          </mat-checkbox>\n                          {{ ogcAutocomplete.value }}\n                        </div>\n                      </mat-option>\n                    }\n                  </mat-autocomplete>\n                </mat-form-field>\n              }\n            </div>\n          }\n        </div>\n      }\n    </div>\n  }\n</form>\n\n@if (isTemporalOperator()) {\n  <div>\n    <mat-divider></mat-divider>\n    @if (!currentFilter.title) {\n      <h4>\n        {{ 'igo.geo.filter.reportingDate' | translate }}\n      </h4>\n    }\n    @if (currentFilter.title) {\n      <h4>{{ currentFilter.title }}</h4>\n    }\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}\n","import { 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  imports: [\n    OgcFilterSelectionComponent,\n    ListItemDirective,\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","@if (!advancedOgcFilters) {\n  <igo-ogc-filter-selection\n    igoListItem\n    [refreshFilters]=\"refreshFunc\"\n    [datasource]=\"datasource\"\n    [map]=\"map\"\n    [currentFilter]=\"currentFilter\"\n  >\n  </igo-ogc-filter-selection>\n}\n\n@if (\n  advancedOgcFilters && datasource.options.ogcFilters.editable;\n  as currentFilter\n) {\n  @for (\n    currentFilter of datasource.options.ogcFilters.interfaceOgcFilters;\n    track currentFilter\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  }\n}\n","import { AsyncPipe, NgClass, NgStyle } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit, inject } 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 {\n  WFSDataSourceOptions,\n  WFSDataSourceOptionsParams\n} 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  imports: [\n    NgClass,\n    MatListModule,\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  private ogcFilterService = inject(OGCFilterService);\n\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() {\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(\n          this.datasource.options as WFSDataSourceOptions\n        );\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    @if (header) {\n      <mat-icon\n        class=\"igo-chevron\"\n        matListItemIcon\n        igoCollapse\n        [target]=\"ogcFilters\"\n        [collapsed]=\"filtersCollapsed\"\n        (click)=\"toggleFiltersCollapsed()\"\n        >expand_less\n      </mat-icon>\n    }\n    @if (header) {\n      <span\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    }\n    <div matListItemMeta>\n      @if (isAdvancedOgcFilters() && filtersAreEditable) {\n        <button\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      }\n      @if (header) {\n        <button\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      }\n    </div>\n  </mat-list-item>\n\n  <div #ogcFilters>\n    @if (header) {\n      <div #legend class=\"igo-layer-legend-container\">\n        @if (showLegend$ | async) {\n          <igo-layer-legend [layer]=\"layer\"> </igo-layer-legend>\n        }\n      </div>\n    }\n    <igo-ogc-filterable-form\n      [datasource]=\"datasource\"\n      [map]=\"map\"\n      [refreshFilters]=\"refreshFunc\"\n    >\n    </igo-ogc-filterable-form>\n\n    @if (hasSelector && filtersAreEditable) {\n      <section class=\"advancedOgcFilters\">\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    }\n  </div>\n</div>\n","import {\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  imports: [\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","@if (\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  <button\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\n@if (\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  <div #ogcFilter class=\"igo-layer-actions-container\">\n    @if (ogcFilterCollapse && options.ogcFilters.enabled) {\n      <igo-ogc-filterable-item\n        igoListItem\n        [header]=\"false\"\n        [map]=\"layer.map\"\n        [layer]=\"layer\"\n      >\n      </igo-ogc-filterable-item>\n    }\n  </div>\n}\n","import { 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  imports: [\n    ListComponent,\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  @if ((layers | filterableDataSource: 'ogc').length === 0) {\n    <div id=\"no-layer-message\">\n      {{ 'igo.geo.filter.noFilterableLayer' | translate }}\n    </div>\n  }\n  @for (layer of layers | filterableDataSource: 'ogc'; track layer) {\n    <igo-ogc-filterable-item\n      igoListItem\n      [header]=\"true\"\n      [layer]=\"layer\"\n      [map]=\"layer.map\"\n    ></igo-ogc-filterable-item>\n  }\n</igo-list>\n","import { Directive, OnDestroy, OnInit, inject } 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 mapService = inject(MapService);\n\n  private component: OgcFilterableListComponent;\n  private layers$$: Subscription;\n\n  constructor() {\n    const component = inject(OgcFilterableListComponent, { self: true });\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 { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n  AnyDataSourceOptions,\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 http = inject(HttpClient);\n\n  private urlApi: string;\n  private provideContextUri: boolean;\n\n  constructor() {\n    const config = inject(ConfigService);\n    const options = config.getConfig<OptionsApiOptions>('optionsApi');\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: { [keys: string]: string };\n        }) => this.handleSourceOptions(res)\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: { [keys: string]: string };\n        }) => this.handleSourceOptions(res)\n      )\n    );\n  }\n\n  private handleSourceOptions<T extends AnyDataSourceOptions>(res: {\n    sourceOptions: T;\n    layerOptions: { [keys: string]: string };\n  }): T {\n    if (!res || !res.sourceOptions) {\n      return {} as T;\n    }\n    if (res.layerOptions) {\n      res.sourceOptions._layerOptionsFromSource = res.layerOptions;\n    } else {\n      const { sourceOptions: _1, layerOptions: _2, ...restOptions } = res;\n      res.sourceOptions._layerOptionsFromSource = restOptions;\n    }\n    return res.sourceOptions;\n  }\n}\n","import { OptionsApiService } from './options-api.service';\nimport { OptionsService } from './options.service';\n\nexport function optionsApiFactory() {\n  return new OptionsApiService();\n}\n\nexport function provideOptionsApi() {\n  return {\n    provide: OptionsService,\n    useFactory: optionsApiFactory\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, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DrawIconService {\n  protected config = inject(ConfigService);\n\n  protected icons: string[];\n\n  constructor() {\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): string {\n  let decimal = options.decimal;\n  if (decimal === undefined || decimal < 0) {\n    decimal = 1;\n  }\n\n  const parts: string[] = [];\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  protected defaultOptions: SearchSourceOptions = {};\n\n  constructor(\n    options: SearchSourceOptions,\n    private storageService?: StorageService\n  ) {\n    this.options = options;\n    this.defaultOptions = ObjectUtils.mergeDeep(\n      this.getEffectiveOptions(),\n      this.options\n    );\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.getEffectiveOptions(),\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   * 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  /**\n   * Search results display order\n   */\n  get displayOrder(): number {\n    return this.options.order === undefined ? 99 : this.options.order;\n  }\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 getEffectiveOptions(): SearchSourceOptions {\n    throw new Error('You have to implement the method \"getEffectiveOptions\".');\n  }\n\n  resetSourceOptions() {\n    this.options = ObjectUtils.copyDeep(this.defaultOptions);\n  }\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   * 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.getEffectiveOptions().settings.find(\n      (value: SearchSourceSettings) => {\n        return value.name === search;\n      }\n    );\n  }\n}\n","import { Clipboard } from '@angular/cdk/clipboard';\nimport { AsyncPipe, JsonPipe, KeyValuePipe, NgStyle } 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  inject\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';\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  imports: [\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 clipboard = inject(Clipboard);\n  private http = inject(HttpClient);\n  private cdRef = inject(ChangeDetectorRef);\n  private sanitizer = inject(DomSanitizer);\n  private networkService = inject(NetworkService);\n  private messageService = inject(MessageService);\n  private configService = inject(ConfigService);\n\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    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 = this.clipboard.copy(value);\n    if (successful) {\n      this.messageService.success('igo.geo.query.link.message');\n    }\n  }\n}\n","@if (\n  ready &&\n  feature &&\n  isObject(feature.properties) &&\n  feature.properties.target !== 'iframe'\n) {\n  <table class=\"igo-striped\">\n    <tbody>\n      @for (\n        property of filterFeatureProperties(feature) | keyvalue;\n        track property\n      ) {\n        <tr>\n          @if (\n            feature.properties.target === '_blank' && property.key === 'url'\n          ) {\n            <td>\n              <mat-icon matListItemIcon>{{ icon }}</mat-icon>\n            </td>\n          }\n          @if (\n            feature.properties.target === '_blank' && property.key === 'url'\n          ) {\n            <td>\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          @if (feature.properties.target === undefined) {\n            <td id=\"keyValue\">\n              {{ property.key }}\n            </td>\n          }\n          @if (\n            feature.properties.target === undefined &&\n            !isObject(property.value) &&\n            !isUrl(property.value) &&\n            !isEmbeddedLink(property.value)\n          ) {\n            <td [innerHTML]=\"property.value\"></td>\n          }\n          @if (\n            feature.properties.target === undefined &&\n            isEmbeddedLink(property.value)\n          ) {\n            <td>\n              <u\n                [ngStyle]=\"{ cursor: 'pointer', color: 'blue' }\"\n                (click)=\"openSecureUrl(property.value)\"\n                >{{ getEmbeddedLinkText(property.value) }}</u\n              >\n            </td>\n          }\n          @if (\n            feature.properties.target === undefined &&\n            !isObject(property.value) &&\n            (isDoc(property.value) || isUrl(property.value)) &&\n            !isImg(property.value)\n          ) {\n            <td>\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          @if (\n            feature.properties.target === undefined &&\n            !isObject(property.value) &&\n            isUrl(property.value) &&\n            isImg(property.value)\n          ) {\n            <td>\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          @if (\n            feature.properties.target === undefined && isObject(property.value)\n          ) {\n            <td [innerHTML]=\"property.value | json\"></td>\n          }\n        </tr>\n      }\n    </tbody>\n  </table>\n}\n\n@if (isHtmlDisplay()) {\n  <iframe\n    [srcdoc]=\"htmlSanitizer(feature.properties)\"\n    [src]=\"urlSanitizer(feature.properties.url)\"\n  ></iframe>\n}\n","import {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  OnInit,\n  Output,\n  inject\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 el = inject(ElementRef);\n\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    const component = inject(FeatureDetailsComponent, { self: true });\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  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 booleanIntersects from '@turf/boolean-intersects';\nimport buffer from '@turf/buffer';\nimport { Units, lineString } from '@turf/helpers';\nimport { feature as turfFeature } from '@turf/helpers';\nimport lineIntersect from '@turf/line-intersect';\n\nimport { FeatureGeometry } from '../../feature';\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\nexport function doesOlGeometryIntersects(\n  olGeometry1: OlGeometry,\n  olGeometry2: OlGeometry\n): boolean {\n  const olGeoJSON = new OlGeoJSON();\n  const firstGeom = olGeoJSON.writeGeometryObject(olGeometry1);\n  const secondGeom = olGeoJSON.writeGeometryObject(olGeometry2);\n  return booleanIntersects(\n    firstGeom as FeatureGeometry,\n    secondGeom as FeatureGeometry\n  );\n}\n\nexport function bufferOlGeometry(\n  olGeometry: OlGeometry,\n  dist: number,\n  units: Units = 'meters'\n): FeatureGeometry {\n  const olGeoJSON = new OlGeoJSON();\n  const bufferedGeom = olGeoJSON.writeGeometryObject(olGeometry);\n  const buffered = buffer(turfFeature(bufferedGeom), dist, { units });\n  return buffered.geometry;\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 { Component, Input, OnInit, inject } 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  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatIconModule,\n    ColorPickerFormFieldComponent,\n    MatFormFieldModule,\n    MatInputModule,\n    MatSelectModule,\n    MatOptionModule,\n    MatDialogActions,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class StyleModalDrawingComponent implements OnInit {\n  dialogRef = inject<MatDialogRef<StyleModalDrawingComponent>>(MatDialogRef);\n  private formBuilder = inject(UntypedFormBuilder);\n  private drawStyleService = inject(DrawStyleService);\n  data = inject<DrawingMatDialogData>(MAT_DIALOG_DATA);\n\n  @Input() confirmFlag = false;\n\n  public form: UntypedFormGroup;\n\n  public styleModalData: StyleModalData;\n  public linestringOnly: boolean;\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      @if (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        <igo-color-picker-form-field\n          formControlName=\"fill\"\n        ></igo-color-picker-form-field>\n      }\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          @for (fontSelect of allFontStyles; track fontSelect) {\n            <mat-option [value]=\"fontSelect\">\n              {{ fontSelect }}\n            </mat-option>\n          }\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 matButton=\"elevated\" (click)=\"cancelDrawing()\">\n    {{ 'igo.geo.style.cancel' | translate }}\n  </button>\n  <button matButton=\"elevated\" color=\"primary\" (click)=\"confirm()\">OK</button>\n</div>\n","import { Component, Input, inject } 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  imports: [\n    MatDialogContent,\n    MatFormFieldModule,\n    MatInputModule,\n    MatDialogActions,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class DrawLayerPopupComponent {\n  dialogRef = inject<MatDialogRef<DrawLayerPopupComponent>>(MatDialogRef);\n\n  @Input() confirmFlag = false;\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>\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 matButton=\"elevated\" (click)=\"cancelDrawing()\">\n    {{ 'igo.geo.draw.cancel' | translate }}\n  </button>\n  <button matButton=\"elevated\" color=\"primary\" (click)=\"confirm(input.value)\">\n    OK\n  </button>\n</div>\n","import { Component, Input, inject } 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  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    MatButtonToggleModule,\n    MatRadioModule,\n    MatCheckboxModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatSelectModule,\n    MatOptionModule,\n    MatDialogActions,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class DrawPopupComponent {\n  private languageService = inject(LanguageService);\n  dialogRef = inject<MatDialogRef<DrawPopupComponent>>(MatDialogRef);\n  data = inject<{\n    olGeometry: any;\n    map: IgoMap;\n  }>(MAT_DIALOG_DATA);\n\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    const data = this.data;\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@if (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      @if (olGeometryType !== 'Polygon') {\n        <mat-radio-group>\n          @for (option of arrayBuiltInType; track option) {\n            <mat-radio-button\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          }\n        </mat-radio-group>\n      }\n      @if (olGeometryType === 'Polygon') {\n        @for (option of arrayBuiltInType; track option) {\n          <mat-checkbox\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        }\n      }\n      @if (labelFlag === labelType.Coordinates) {\n        <div 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              @for (unit of allCoordinatesUnits; track unit) {\n                <mat-option [value]=\"unit\">\n                  {{ unit }}\n                </mat-option>\n              }\n            </mat-select>\n          </mat-form-field>\n        </div>\n      }\n      @if (labelFlag === labelType.Length || polygonCheck === 2) {\n        <div class=\"fields-container\">\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              @for (unit of allLengthUnits; track unit) {\n                <mat-option [value]=\"unit\">\n                  {{ getLengthUnitEnum(unit) }}\n                </mat-option>\n              }\n            </mat-select>\n          </mat-form-field>\n        </div>\n      }\n      @if (labelFlag === labelType.Area || polygonCheck === 2) {\n        <div class=\"fields-container\">\n          <mat-form-field class=\"readOnly-Input\">\n            <mat-label>{{\n              'igo.geo.draw.labelType.Area' | translate\n            }}</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              @for (unit of allAreaUnits; track unit) {\n                <mat-option [value]=\"unit\">\n                  {{ getAreaUnitEnum(unit) }}\n                </mat-option>\n              }\n            </mat-select>\n          </mat-form-field>\n        </div>\n      }\n    </div>\n  </div>\n  <div mat-dialog-actions>\n    <button matButton=\"elevated\" (click)=\"cancelDrawing()\">\n      {{ 'igo.geo.draw.cancel' | translate }}\n    </button>\n    <button matButton=\"elevated\" color=\"primary\" (click)=\"confirm()\">\n      {{ noLabelButton() }}\n    </button>\n  </div>\n}\n\n@if (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  <div mat-dialog-actions>\n    <button matButton=\"elevated\" (click)=\"cancelDrawing()\">\n      {{ 'igo.geo.draw.cancel' | translate }}\n    </button>\n    <button matButton=\"elevated\" color=\"primary\" (click)=\"confirm(input.value)\">\n      {{ noLabelButton() }}\n    </button>\n  </div>\n}\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  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\">\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\">\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\">\n      <igo-icon [icon]=\"svgIcon\" />\n      {{ 'igo.geo.draw.abort' | translate }}\n    </span>\n  </div>\n  <div>\n    <span class=\"shortcut\">\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 matButton=\"elevated\" 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 } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild,\n  inject\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  imports: [\n    MatButtonToggleModule,\n    MatSlideToggleModule,\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatSelectModule,\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  private languageService = inject(LanguageService);\n  private formBuilder = inject(UntypedFormBuilder);\n  private drawStyleService = inject(DrawStyleService);\n  private dialog = inject(MatDialog);\n  private drawIconService = inject(DrawIconService);\n\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    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\">\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\">\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    @if (!isPoint()) {\n      <mat-slide-toggle\n        [checked]=\"freehandMode\"\n        [labelPosition]=\"'before'\"\n        (change)=\"onToggleFreehandMode($event)\"\n      >\n        {{ 'igo.geo.draw.freehandMode' | translate }}\n      </mat-slide-toggle>\n    }\n\n    @if (isCircle()) {\n      <div class=\"radius-unit\">\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        <mat-form-field class=\"unit-field\">\n          <mat-select\n            [value]=\"measureUnit\"\n            (selectionChange)=\"onMeasureUnitChange($event.value)\"\n          >\n            @for (measureUnit of measureUnits; track measureUnit) {\n              <mat-option [value]=\"measureUnit\">\n                {{ 'igo.geo.measure.' + measureUnit | translate }}\n              </mat-option>\n            }\n          </mat-select>\n        </mat-form-field>\n      </div>\n    }\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        @for (layer of allLayers; track layer) {\n          <mat-option [value]=\"layer\">\n            {{ layer.title }}\n          </mat-option>\n        }\n        <mat-option id=\"createNewLayer\">\n          {{ 'igo.geo.draw.layer.createNewLayer' | translate }}\n        </mat-option>\n      </mat-select>\n    </mat-form-field>\n    @if (activeDrawingLayer) {\n      <button\n        mat-icon-button\n        [color]=\"activeDrawingLayer.visible ? 'primary' : 'accent'\"\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    }\n  </div>\n  <mat-divider></mat-divider>\n  <div>\n    @if (activeStore.count$.getValue() > 0) {\n      <button\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\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    @if (icons.length >= 1) {\n      <mat-form-field>\n        <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n        <mat-select>\n          <mat-select-trigger>\n            @if (icon) {\n              <div class=\"box\">\n                <img src=\"{{ icon }}\" />\n              </div>\n            }\n          </mat-select-trigger>\n          <mat-option value=\"\" (click)=\"onIconChange()\">{{\n            'igo.geo.draw.noIcon' | translate\n          }}</mat-option>\n          @for (icon_html of icons; track icon_html) {\n            <mat-option [value]=\"icon_html\" (click)=\"onIconChange(icon_html)\">\n              <div class=\"box\">\n                <img src=\"{{ icon_html }}\" />\n              </div>\n            </mat-option>\n          }\n        </mat-select>\n      </mat-form-field>\n    }\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    @if (selectedFeatures$.value.length) {\n      <button\n        matButton=\"elevated\"\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    }\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 | string {\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 { 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  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    IgoLanguageModule,\n    MeasureFormatPipe\n  ]\n})\nexport class MeasurerDialogComponent {\n  dialogRef = inject<MatDialogRef<MeasurerDialogComponent>>(MatDialogRef);\n  data = inject<MeasurerDialogData>(MAT_DIALOG_DATA);\n\n  measureAreaUnit = MeasureAreaUnit;\n\n  measureLengthUnit = MeasureLengthUnit;\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  @if (data.length > 0) {\n    <table>\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\n  @if (data.area > 0) {\n    <table>\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>\n            {{ data.perimeter | measureFormat: measureLengthUnit.Meters }}\n          </td>\n        </tr>\n      </tbody>\n    </table>\n  }\n</div>\n","import { AsyncPipe } 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  imports: [\n    MatFormFieldModule,\n    MatInputModule,\n    MatSelectModule,\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    @for (measureUnit of measureUnits; track measureUnit) {\n      <mat-option [value]=\"measureUnit\">\n        {{ 'igo.geo.measure.' + measureUnit | translate }}\n      </mat-option>\n    }\n  </mat-select>\n</mat-form-field>\n","import { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  DOCUMENT,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n  inject\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  imports: [\n    MatButtonToggleModule,\n    MatSlideToggleModule,\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  private languageService = inject(LanguageService);\n  private dialog = inject(MatDialog);\n  private storageService = inject(StorageService);\n  private document = inject<Document>(DOCUMENT);\n\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    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\">\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\">\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    @if (hasLine$ | async) {\n      <mat-divider></mat-divider>\n    }\n\n    @if (hasLine$ | async) {\n      <mat-slide-toggle\n        [checked]=\"displayLines\"\n        [labelPosition]=\"'before'\"\n        (change)=\"onToggleDisplayLines($event.checked)\"\n      >\n        {{ 'igo.geo.measure.toggleDisplayLines' | translate }}\n      </mat-slide-toggle>\n    }\n\n    @if ((hasLine$ | async) || (hasArea$ | async)) {\n      <mat-divider></mat-divider>\n    }\n\n    @if (hasArea$ | async) {\n      <mat-slide-toggle\n        [checked]=\"displayDistance\"\n        [labelPosition]=\"'before'\"\n        (change)=\"onToggleDisplayDistance($event.checked)\"\n      >\n        {{ 'igo.geo.measure.toggleDisplayDistance' | translate }}\n      </mat-slide-toggle>\n    }\n\n    @if (hasArea$ | async) {\n      <mat-slide-toggle\n        [checked]=\"displayAreas\"\n        [labelPosition]=\"'before'\"\n        (change)=\"onToggleDisplayAreas($event.checked)\"\n      >\n        {{ 'igo.geo.measure.toggleDisplayAreas' | translate }}\n      </mat-slide-toggle>\n    }\n\n    @if (hasArea$ | async) {\n      <mat-divider></mat-divider>\n    }\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  @if (measure$ | async; as measure) {\n    @if (\n      activeMeasureType === measureType.Length ||\n      activeMeasureType === measureType.Area\n    ) {\n      <igo-measurer-item\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    @if (activeMeasureType === measureType.Area) {\n      <igo-measurer-item\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    }\n  }\n\n  @if ((hasLine$ | async) || (hasArea$ | async)) {\n    <mat-divider></mat-divider>\n  }\n\n  <div class=\"measure-store-buttons\">\n    @if ((hasLine$ | async) || (hasArea$ | async)) {\n      <button\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\n    @if ((hasLine$ | async) || (hasArea$ | async)) {\n      <button\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    }\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  inject\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 cdRef = inject(ChangeDetectorRef);\n  ngControl = inject(NgControl, { optional: true, self: true });\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    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 } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  inject\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  imports: [\n    GeometryFormFieldInputComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatSlideToggleModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatSelectModule,\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  private cdRef = inject(ChangeDetectorRef);\n  private spatialFilterService = inject(SpatialFilterService);\n  private messageService = inject(MessageService);\n  private languageService = inject(LanguageService);\n\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  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  @if (!isPredefined()) {\n    <mat-slide-toggle\n      [checked]=\"drawControlIsActive\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onDrawControlChange()\"\n    >\n      {{ 'igo.geo.spatialFilter.drawControl' | translate }}\n    </mat-slide-toggle>\n  }\n  @if (!isPredefined()) {\n    <mat-slide-toggle\n      [checked]=\"freehandDrawIsActive\"\n      [labelPosition]=\"'before'\"\n      (change)=\"onfreehandControlChange()\"\n    >\n      {{ 'igo.geo.spatialFilter.freehandControl' | translate }}\n    </mat-slide-toggle>\n  }\n</div>\n\n@if (isPolygon()) {\n  <div class=\"buffer-unit\">\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    <mat-form-field class=\"unit-field\">\n      <mat-select\n        [value]=\"measureUnit\"\n        (selectionChange)=\"onMeasureUnitChange($event.value)\"\n      >\n        @for (measureUnit of measureUnits; track measureUnit) {\n          <mat-option [value]=\"measureUnit\">\n            {{ 'igo.geo.measure.' + measureUnit | translate }}\n          </mat-option>\n        }\n      </mat-select>\n    </mat-form-field>\n  </div>\n}\n\n@if (isPoint()) {\n  <div class=\"radius-unit\">\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]=\"\n          this.freehandDrawIsActive && this.formControl.value === null\n        \"\n      />\n    </mat-form-field>\n    <mat-form-field class=\"unit-field\">\n      <mat-select\n        [value]=\"measureUnit\"\n        (selectionChange)=\"onMeasureUnitChange($event.value)\"\n      >\n        @for (measureUnit of measureUnits; track measureUnit) {\n          <mat-option [value]=\"measureUnit\">\n            {{ 'igo.geo.measure.' + measureUnit | translate }}\n          </mat-option>\n        }\n      </mat-select>\n    </mat-form-field>\n  </div>\n}\n\n<mat-label class=\"title\"\n  >{{ 'igo.geo.spatialFilter.search' | translate }} :\n</mat-label>\n<mat-radio-group [value]=\"selectedItemType\" id=\"spatial-filter-field-item-type\">\n  @for (item of itemType; track item) {\n    <mat-radio-button [value]=\"item\" (change)=\"onItemTypeChange($event)\">\n      {{ 'igo.geo.spatialFilter.' + item | translate }}\n    </mat-radio-button>\n  }\n</mat-radio-group>\n\n@if (\n  (selectedItemType === 'Thematics' && !tableTemplate) ||\n  (selectedItemType === 'Thematics' && tableTemplate && !listIsVisible)\n) {\n  <div class=\"thematics\">\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      <!-- 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      <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n      <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n    </mat-table>\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      <!-- 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\n<div class=\"buttons\">\n  @if (isPredefined()) {\n    <button\n      matButton=\"elevated\"\n      class=\"clear-search-button\"\n      [disabled]=\"disabledClearSearch()\"\n      (click)=\"clearSearch()\"\n    >\n      {{ 'igo.geo.spatialFilter.clearSearch' | translate }}\n    </button>\n  }\n\n  @if (isPolygon() || isPoint()) {\n    <button\n      matButton=\"elevated\"\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\n  <button\n    matButton=\"elevated\"\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    matButton=\"elevated\"\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    matButton=\"elevated\"\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@if (store.all().length && tableTemplate && !listIsVisible) {\n  <button\n    class=\"expand-more\"\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\n@if (store.all().length && tableTemplate && listIsVisible) {\n  <div class=\"results\">\n    @if (listIsVisible) {\n      <button\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    }\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}\n","import { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  inject\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  imports: [\n    MatFormFieldModule,\n    MatInputModule,\n    FormsModule,\n    MatAutocompleteModule,\n    ReactiveFormsModule,\n    MatOptionModule,\n    MatSelectModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SpatialFilterListComponent implements OnInit, OnDestroy {\n  private spatialFilterService = inject(SpatialFilterService);\n  private messageService = inject(MessageService);\n\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  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 id=\"spatial-filter-field-zone\" 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      @for (entities of this.store.view.all$() | async; track entities) {\n        <mat-option [value]=\"entities\">\n          {{ entities.properties.nom }}\n        </mat-option>\n      }\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          @for (measureUnit of measureUnits; track measureUnit) {\n            <mat-option [value]=\"measureUnit\">\n              {{ 'igo.geo.measure.' + measureUnit | translate }}\n            </mat-option>\n          }\n        </mat-select>\n      </mat-form-field>\n    </div>\n  </div>\n</div>\n","import {\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  imports: [\n    MatTabsModule,\n    MatFormFieldModule,\n    MatSelectModule,\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\n    [label]=\"'igo.geo.spatialFilter.predefined' | translate\"\n    id=\"spatial-filter-predefined-tab\"\n  >\n    <mat-form-field id=\"spatial-filter-field-type\">\n      <mat-label>{{\n        'igo.geo.spatialFilter.searchLabel' | translate\n      }}</mat-label>\n      <mat-select\n        (selectionChange)=\"onSelectionChange()\"\n        [(value)]=\"selectedQueryType\"\n      >\n        @for (queryType of queryType; track queryType) {\n          <mat-option [value]=\"queryType\">\n            {{ 'igo.geo.terrapi.' + queryType | translate }}\n          </mat-option>\n        }\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\n    [label]=\"'igo.geo.spatialFilter.draw' | translate\"\n    id=\"spatial-filter-draw-tab\"\n  >\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 {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n  inject\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 { isDateOrRangeInRange, parseDateString } from '../shared/date.utils';\nimport { isTimeFrame, parseDateOperation } from '../shared/filter.utils';\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  imports: [\n    MatFormFieldModule,\n    MatDatetimepickerModule,\n    MatMomentDateModule,\n    MatNativeDatetimeModule,\n    MatNativeDateModule,\n    MatInputModule,\n    FormsModule,\n    MatSelectModule,\n    MatOptionModule,\n    MatSliderModule,\n    MatSlideToggleModule,\n    MatTooltipModule,\n    MatButtonModule,\n    MatIconModule,\n    IgoLanguageModule\n  ]\n})\nexport class TimeFilterFormComponent implements OnInit {\n  private dateAdapter = inject<DateAdapter<Date>>(DateAdapter);\n\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() dateChange = new EventEmitter<Date | [Date, Date]>();\n\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 = isTimeFrame(this.options.min)\n        ? new Date(parseDateOperation(this.options.min))\n        : 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 = isTimeFrame(this.options.max)\n        ? new Date(parseDateOperation(this.options.max))\n        : new Date(this.options.max);\n\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  get allYearsInterval(): string[] {\n    const options = [];\n    for (let i = this.initStartYear; i <= this.initEndYear; i++) {\n      options.push(i);\n    }\n    return options;\n  }\n\n  constructor() {\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    this.checkFilterValue();\n\n    if (!this.isRange) {\n      this.listYears = this.allYearsInterval;\n    } else {\n      this.setUpYearsInterval();\n    }\n\n    this.options.enabled =\n      this.options.enabled === undefined ? true : this.options.enabled;\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  private processSliderValue() {\n    // if style is Slider the range always false\n    const dateValue = this.getDateValue();\n    const inRange = dateValue\n      ? isDateOrRangeInRange(dateValue, [this.min, this.max])\n      : undefined;\n\n    if (inRange && dateValue instanceof Date) {\n      if (this.type === TimeFilterType.YEAR) {\n        this.year = dateValue.getFullYear();\n      } else {\n        this.date = dateValue;\n      }\n    } else {\n      if (this.type === TimeFilterType.YEAR) {\n        this.year = this.min.getFullYear();\n      } else {\n        this.date = this.min;\n      }\n    }\n  }\n\n  private processCalendarYearType() {\n    const dateValue = this.getDateValue();\n\n    const inRange = dateValue\n      ? isDateOrRangeInRange(dateValue, [this.min, this.max])\n      : undefined;\n\n    if (!this.isRange) {\n      if (inRange && dateValue instanceof Date) {\n        this.year = dateValue.getFullYear();\n      } else {\n        this.year = this.min.getFullYear();\n      }\n    } else {\n      if (\n        inRange &&\n        Array.isArray(dateValue) &&\n        dateValue[0].getFullYear() !== dateValue[1].getFullYear()\n      ) {\n        this.startYear = dateValue[0].getFullYear();\n        this.endYear = dateValue[1].getFullYear();\n      }\n    }\n  }\n\n  private processCalendarDateType() {\n    const dateValue = this.getDateValue();\n\n    const inRange = dateValue\n      ? isDateOrRangeInRange(dateValue, [this.min, this.max])\n      : undefined;\n\n    if (!this.isRange) {\n      if (inRange && dateValue instanceof Date) {\n        this.date = dateValue;\n      } else {\n        this.date = this.min;\n      }\n    } else {\n      if (\n        inRange &&\n        Array.isArray(dateValue) &&\n        dateValue[0] !== dateValue[1]\n      ) {\n        this.startDate = dateValue[0];\n        this.endDate = dateValue[1];\n      }\n    }\n  }\n\n  private getDateValue(): Date | [min: Date, max: Date] | undefined {\n    const olSource = this.layer.dataSource.ol as olSourceImageWMS;\n    const timeFromWms = olSource.getParams().TIME\n      ? parseDateString(String(olSource.getParams().TIME))\n      : undefined;\n\n    const dateValue =\n      this.options.value && !timeFromWms\n        ? parseDateString(this.options.value)\n        : undefined;\n\n    return timeFromWms ?? dateValue;\n  }\n\n  private checkCalendarValue() {\n    if (this.type === TimeFilterType.YEAR) {\n      this.processCalendarYearType();\n    } else {\n      this.processCalendarDateType();\n    }\n  }\n\n  private checkFilterValue() {\n    if (this.style === TimeFilterStyle.SLIDER) {\n      this.processSliderValue();\n    } else if (this.style === TimeFilterStyle.CALENDAR) {\n      this.checkCalendarValue();\n    }\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.dateChange.emit([this.startDate, this.endDate]);\n    } else {\n      this.dateChange.emit(this.startDate);\n    }\n  }\n\n  handleYearChange() {\n    if (this.isRange) {\n      this.endListYears = [];\n      this.startListYears = [];\n      this.setUpYearsInterval();\n\n      this.yearChange.emit([this.startYear, this.endYear]);\n    } else {\n      this.yearChange.emit(this.year);\n    }\n  }\n\n  private setUpYearsInterval() {\n    this.endListYears = this.allYearsInterval.slice(\n      this.startYear + 1 - this.initStartYear\n    );\n    this.startListYears = this.allYearsInterval.slice(\n      0,\n      this.endYear - this.initStartYear\n    );\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.dateChange.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.dateChange.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    const date = new Date(event.value);\n    this.date = new Date(date.getTime() - date.getTimezoneOffset() * 60000);\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(): string {\n    // 24h = 86400000 ms\n    const oneDayMs = 86400000;\n    const date = this.date === undefined ? this.min : this.date;\n    switch (this.type) {\n      case TimeFilterType.DATE:\n        return this.step >= oneDayMs ? date.toDateString() : date.toUTCString();\n      case TimeFilterType.TIME:\n        return date.toTimeString();\n      default:\n        return this.date.toUTCString();\n    }\n  }\n\n  setupDateOutput() {\n    if (this.style === TimeFilterStyle.SLIDER) {\n      this.startDate = new Date(this.date);\n      this.endDate = new Date(this.startDate);\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.style === TimeFilterStyle.CALENDAR) {\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        }\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","@if (style === 'calendar' && type !== 'year') {\n  <div>\n    @if (!isRange) {\n      <div 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    @if (isRange) {\n      <div>\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        <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    }\n  </div>\n}\n\n@if (style === 'calendar' && type === 'year') {\n  <div>\n    @if (!isRange) {\n      <div 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            @for (year of listYears; track year) {\n              <mat-option [value]=\"year\">{{ year }}</mat-option>\n            }\n          </mat-select>\n        </mat-form-field>\n      </div>\n    }\n    @if (isRange) {\n      <div>\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              @for (startYear of startListYears; track startYear) {\n                <mat-option [value]=\"startYear\">{{ startYear }}</mat-option>\n              }\n            </mat-select>\n          </mat-form-field>\n        </div>\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              @for (endYear of endListYears; track endYear) {\n                <mat-option [value]=\"endYear\">{{ endYear }}</mat-option>\n              }\n            </mat-select>\n          </mat-form-field>\n        </div>\n      </div>\n    }\n  </div>\n}\n\n<br />\n@if (!isRange && style === 'slider' && type === 'year') {\n  <div class=\"igo-col igo-col-100 igo-col-100-m\">\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    @if (options.enabled) {\n      <p class=\"date-below\">{{ year }}</p>\n    }\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\n@if (style === 'slider' && type !== 'year') {\n  <div class=\"igo-col igo-col-100 igo-col-100-m\">\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}\n","import { AsyncPipe, NgClass, NgStyle } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit, inject } 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  imports: [\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  private timeFilterService = inject(TimeFilterService);\n\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\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    this.datasource.options.timeFilter.value = year.toString();\n  }\n\n  handleDateChange(date: Date | [Date, Date]) {\n    this.timeFilterService.filterByDate(this.datasource, date);\n    this.datasource.options.timeFilter.value =\n      date instanceof Date\n        ? this.reformDate(date)\n        : [this.reformDate(date[0]), this.reformDate(date[1])];\n  }\n\n  private reformDate(date: Date): string {\n    return date.toISOString().split('.')[0] + 'Z';\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","@if (header) {\n  <mat-list-item>\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    <span\n      matListItemTitle\n      (click)=\"toggleLegendOnClick()\"\n      [ngStyle]=\"{ cursor: filtersCollapsed ? 'default' : 'pointer' }\"\n      >{{ layer.title }}</span\n    >\n    @if (header) {\n      <button\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\n          [ngClass]=\"{ disabled: (inResolutionRange$ | async) === false }\"\n          >{{ layer.visible ? 'visibility' : 'visibility_off' }}\n        </mat-icon>\n      </button>\n    }\n  </mat-list-item>\n}\n\n<div #filters class=\"igo-datasource-filters-container\">\n  <div #legend class=\"igo-layer-legend-container\">\n    @if (showLegend$ | async) {\n      <igo-layer-legend [layer]=\"layer\"> </igo-layer-legend>\n    }\n  </div>\n  <igo-time-filter-form\n    [layer]=\"layer\"\n    [options]=\"datasource.options.timeFilter\"\n    [currentValue]=\"datasource.options.params.TIME\"\n    (dateChange)=\"handleDateChange($event)\"\n    (yearChange)=\"handleYearChange($event)\"\n  >\n  </igo-time-filter-form>\n</div>\n","import {\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  imports: [\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","@if (header && options.timeFilterable && options.timeFilter) {\n  <button\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\n@if (header && options.timeFilterable && options.timeFilter) {\n  <div #ogcFilter class=\"igo-layer-actions-container\">\n    @if (timeFilterCollapse && options.timeFilter) {\n      <igo-time-filter-item igoListItem [header]=\"false\" [layer]=\"layer\">\n      </igo-time-filter-item>\n    }\n  </div>\n}\n","import { 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  imports: [\n    ListComponent,\n    TimeFilterItemComponent,\n    ListItemDirective,\n    FilterableDataSourcePipe\n  ]\n})\nexport class TimeFilterListComponent {\n  @Input() layers: AnyLayer[] = [];\n}\n","<igo-list [navigation]=\"false\" [selection]=\"false\">\n  @for (layer of layers | filterableDataSource: 'time'; track layer) {\n    <igo-time-filter-item\n      [header]=\"true\"\n      igoListItem\n      [layer]=\"layer\"\n    ></igo-time-filter-item>\n  }\n</igo-list>\n","import { Directive, OnDestroy, OnInit, inject } 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 mapService = inject(MapService);\n\n  private component: TimeFilterListComponent;\n  private layers$$: Subscription;\n\n  constructor() {\n    const component = inject(TimeFilterListComponent, { self: true });\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 { 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  imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule]\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","@if (layerIsExportable()) {\n  <button\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}\n","import { HttpBackend, HttpClient } from '@angular/common/http';\nimport { Injectable, inject } 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() {\n    const handler = inject(HttpBackend);\n\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): void | Promise<unknown> {\n    const baseStyleList = options.default || {};\n    if (!options.path) {\n      this.styleList = baseStyleList;\n      return;\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, inject } 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  private config = inject(ConfigService);\n  private httpClient = inject(HttpClient);\n\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    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: { 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, inject } 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  private http = inject(HttpClient);\n  private config = inject(ConfigService);\n\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    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, NgClass } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  inject\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  imports: [\n    MatButtonToggleModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatSelectModule,\n    MatOptionModule,\n    MatTooltipModule,\n    MatButtonModule,\n    SpinnerComponent,\n    CustomHtmlComponent,\n    NgClass,\n    MatSlideToggleModule,\n    MatInputModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ],\n  providers: [ConfirmDialogService]\n})\nexport class ImportExportComponent implements OnDestroy, OnInit {\n  private importService = inject(ImportService);\n  private exportService = inject(ExportService);\n  private languageService = inject(LanguageService);\n  private messageService = inject(MessageService);\n  private styleListService = inject(StyleListService);\n  private styleService = inject(StyleService);\n  private formBuilder = inject(UntypedFormBuilder);\n  private config = inject(ConfigService);\n  private storageService = inject(StorageService);\n  private downloadService = inject(DownloadService);\n  private layerService = inject(LayerService);\n  private confirmDialogService = inject(ConfirmDialogService);\n\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    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@if (selectedMode === 'import') {\n  <form class=\"igo-form\" [formGroup]=\"importForm\">\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          @for (projection of projections$ | async; track projection) {\n            <mat-option [value]=\"projection\" (click)=\"$event.stopPropagation()\">\n              @if (projection.translateKey) {\n                <span matListItemTitle>\n                  {{\n                    'igo.geo.importExportForm.projections.' +\n                      projection.translateKey | translate: projection\n                  }}\n                </span>\n              }\n              @if (!projection.translateKey) {\n                <span matListItemTitle>\n                  {{ projection.alias }}\n                </span>\n              }\n            </mat-option>\n          }\n        </mat-select>\n      </mat-form-field>\n    </div>\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        matButton=\"elevated\"\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}\n@if (selectedMode === 'import') {\n  <section>\n    @if (importHtmlClarifications === '') {\n      <div>\n        <h4>\n          {{ 'igo.geo.importExportForm.importClarifications' | translate }}\n        </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    }\n    @if (importHtmlClarifications !== '') {\n      <igo-custom-html [html]=\"importHtmlClarifications\"> </igo-custom-html>\n    }\n  </section>\n}\n\n@if ((exportableLayers$ | async).length === 0 && selectedMode === 'export') {\n  <section>\n    <h4>\n      {{ 'igo.geo.importExportForm.exportNoLayersExportable' | translate }}\n    </h4>\n  </section>\n}\n\n@if ((exportableLayers$ | async).length > 0 && selectedMode === 'export') {\n  <form class=\"igo-form\" [formGroup]=\"form\">\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            @if (layers.length > 1) {\n              <span 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            }\n          </mat-select-trigger>\n          @for (layer of exportableLayers$ | async; track layer) {\n            <mat-option\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                @if (layerHasSelectedFeatures(layer)) {\n                  <mat-slide-toggle\n                    (click)=\"onlySelectedClick($event, layer.id)\"\n                    (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\n                    (change)=\"onlySelected($event, layer.id)\"\n                  >\n                    <small>{{\n                      'igo.geo.importExportForm.exportSelectedFeature'\n                        | translate\n                    }}</small>\n                  </mat-slide-toggle>\n                }\n              </span>\n            </mat-option>\n          }\n        </mat-select>\n      </mat-form-field>\n    </div>\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          @if ((formats$ | async).length !== 0) {\n            @for (format of formats$ | async; track format) {\n              <mat-option [value]=\"format\">\n                {{ 'igo.geo.export.format.' + format | translate }}\n              </mat-option>\n            }\n          }\n          @if ((formats$ | async).length === 0) {\n            <mat-option disabled=\"true\">\n              {{ 'igo.geo.export.noFormat.title' | translate }}\n            </mat-option>\n          }\n        </mat-select>\n      </mat-form-field>\n    </div>\n    @if (forceNaming && form.value.format !== 'URL') {\n      <div class=\"igo-input-container\">\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    @if (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            @for (separator of csvSeparators; track separator) {\n              <mat-option [value]=\"separator\">\n                {{ 'igo.geo.export.csv.separator.' + separator | translate }}\n              </mat-option>\n            }\n          </mat-select>\n        </mat-form-field>\n      </div>\n      @if (layers.length > 1) {\n        <div 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      @if (layers.length > 1 && form.value.combineLayers) {\n        <div class=\"export-separator\">\n          <mat-slide-toggle\n            formControlName=\"separator\"\n            [labelPosition]=\"'before'\"\n          >\n            {{ 'igo.geo.importExportForm.exportSeparator' | translate }}\n          </mat-slide-toggle>\n        </div>\n      }\n    }\n    @if (form.value.format !== 'URL') {\n      <div class=\"export-options\">\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        matButton=\"elevated\"\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    @if (exportHtmlClarifications !== '') {\n      <igo-custom-html [html]=\"exportHtmlClarifications\"> </igo-custom-html>\n    }\n  </form>\n}\n","import {\n  Directive,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject\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  private component = inject(MapBrowserComponent);\n  private importService = inject(ImportService);\n  private styleListService = inject(StyleListService);\n  private styleService = inject(StyleService);\n  private config = inject(ConfigService);\n  private messageService = inject(MessageService);\n  private layerService = inject(LayerService);\n  private confirmDialogService = inject(ConfirmDialogService);\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  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 {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  ViewEncapsulation,\n  inject\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  imports: [\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    IgoLanguageModule,\n    MatDialogModule\n  ]\n})\nexport class MetadataButtonComponent {\n  private metadataService = inject(MetadataService);\n  private dialog = inject(MatDialog);\n\n  @Input() layer: Layer;\n\n  @Input() color = 'primary';\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  imports: [MatDialogTitle, MatButtonModule, MatDialogClose, MatDialogContent]\n})\nexport class MetadataAbstractComponent {\n  data = inject<MetadataOptions>(MAT_DIALOG_DATA);\n}\n","@if (\n  (options && options.metadata && options.metadata.url) ||\n  (options && options.metadata && options.metadata.abstract)\n) {\n  <button\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}\n","<h2 mat-dialog-title>{{ data.layerTitle }}</h2>\n<button class=\"close-button\" matButton mat-dialog-close>X</button>\n<mat-dialog-content>\n  @if (data.type === 'arcgisrest') {\n    <div [innerHTML]=\"data.abstract\"></div>\n  } @else {\n    {{ data.abstract }}\n  }\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  // eslint-disable-next-line @angular-eslint/prefer-inject\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 getEffectiveOptions(): 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  inject\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  private component = inject(MapBrowserComponent, { self: true });\n  private queryService = inject(QueryService);\n\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  /**\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 } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  inject\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  imports: [\n    MatButtonModule,\n    MatTooltipModule,\n    MatMenuModule,\n    MatIconModule,\n    MatRadioModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SearchSelectorComponent implements OnInit, OnDestroy {\n  private searchSourceService = inject(SearchSourceService);\n\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  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      @for (searchType of searchTypes; track searchType) {\n        <mat-radio-button [value]=\"searchType\">\n          {{ getSearchTypeTitle(searchType) | translate }}\n        </mat-radio-button>\n      }\n    </mat-radio-group>\n  </mat-menu>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnInit,\n  Output,\n  inject\n} from '@angular/core';\nimport { Validators } from '@angular/forms';\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 {\n  FormDialogService,\n  FormFieldConfig,\n  IgoFormDialogModule\n} from '@igo2/common/form';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { MediaService } from '@igo2/core/media';\nimport { MessageService } from '@igo2/core/message';\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  imports: [\n    MatButtonModule,\n    MatTooltipModule,\n    MatMenuModule,\n    MatIconModule,\n    MatCheckboxModule,\n    MatRadioModule,\n    MatDividerModule,\n    MatSlideToggleModule,\n    IgoFormDialogModule,\n    IgoLanguageModule\n  ]\n})\nexport class SearchSettingsComponent implements OnInit {\n  private formDialogService = inject(FormDialogService);\n  private messageService = inject(MessageService);\n  private searchSourceService = inject(SearchSourceService);\n  private mediaService = inject(MediaService);\n  private storageService = inject(StorageService);\n\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  @Input() allowResetSearchSourcesOptions = true;\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  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  resetSourceOptions(event) {\n    event.stopPropagation();\n    const formFieldConfigs: FormFieldConfig[] = [\n      {\n        name: 'sources',\n        title:\n          'igo.geo.search.searchSources.settings.reset.dialog.form.field.title',\n        type: 'select',\n        options: {\n          cols: 2,\n          validator: Validators.required\n        },\n        inputs: {\n          multiple: true,\n          choices: this.getSearchSources()\n            .filter((s) => s.settings.length)\n            .map((source) => {\n              return {\n                value: source,\n                title: source.title\n              };\n            })\n        }\n      }\n    ];\n\n    this.formDialogService\n      .open(\n        { formFieldConfigs },\n        {\n          minWidth: '50vw',\n          minHeight: '15vh',\n          title: 'igo.geo.search.searchSources.settings.reset.dialog.title'\n        }\n      )\n      .subscribe((data) => {\n        if (data) {\n          data.sources.forEach((source) => {\n            source.resetSourceOptions();\n            this.searchSourceChange.emit(source);\n          });\n          const message =\n            data.sources.length > 1\n              ? 'igo.geo.search.searchSources.settings.reset.notice.multiple'\n              : 'igo.geo.search.searchSources.settings.reset.notice.single';\n          this.messageService.success(message);\n        }\n      });\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    @if (getSearchSources().length > 4) {\n      <div class=\"checkAllButton\">\n        <button matButton=\"elevated\" (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    }\n    @for (source of getSearchSources(); track source) {\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        @if (source.settings.length > 0) {\n          <button [matMenuTriggerFor]=\"sub_menu\" mat-menu-item>\n            {{ source.title }}\n          </button>\n        }\n        @if (source.settings.length === 0) {\n          <button mat-menu-item>\n            {{ source.title }}\n          </button>\n        }\n      </span>\n      <mat-menu #sub_menu=\"matMenu\">\n        @for (setting of source.settings; track setting) {\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 #test_sub_menu=\"matMenu\" yPosition=\"above\">\n            @switch (setting.type) {\n              @case ('radiobutton') {\n                <span>\n                  <mat-radio-group\n                    class=\"igo-search-settings-radio-group\"\n                    [value]=\"setting\"\n                  >\n                    @for (settingValue of setting.values; track settingValue) {\n                      <mat-radio-button\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                    }\n                  </mat-radio-group>\n                </span>\n              }\n              @case ('checkbox') {\n                <span>\n                  @if (setting.values.length > 3) {\n                    <div class=\"checkAllButton\">\n                      <button\n                        matButton=\"elevated\"\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                  }\n                  @for (\n                    settingValue of getAvailableValues(setting);\n                    track settingValue\n                  ) {\n                    <div class=\"igo-search-settings-sub-menu\" mat-menu-item>\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                  }\n                </span>\n              }\n            }\n          </mat-menu>\n        }\n      </mat-menu>\n    }\n    <mat-divider></mat-divider>\n    <span class=\"pointer-summary-slide-toggle-container\">\n      <div mat-menu-item>\n        @if (hasPointerReverseSearchSource && !isTouchScreen) {\n          <mat-slide-toggle\n            class=\"search-option\"\n            (change)=\"changePointerReverseSearch($event)\"\n            tooltip-position=\"below\"\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        }\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      @if (allowResetSearchSourcesOptions) {\n        <div mat-menu-item>\n          <button\n            matButton=\"elevated\"\n            class=\"check-default-button\"\n            (click)=\"resetSourceOptions($event)\"\n          >\n            {{\n              'igo.geo.search.searchSources.settings.reset.button' | translate\n            }}\n          </button>\n        </div>\n      }\n    </span>\n  </mat-menu>\n</div>\n","import { AsyncPipe, NgClass } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild,\n  inject\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  imports: [\n    NgClass,\n    MatFormFieldModule,\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  private configService = inject(ConfigService);\n  private searchService = inject(SearchService);\n  private searchSourceService = inject(SearchSourceService);\n\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() allowResetSearchSourcesOptions = true;\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  /**\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    @if (label) {\n      <mat-label>{{ label }}</mat-label>\n    }\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    @if ((empty$ | async) === false) {\n      <button\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    }\n  </mat-form-field>\n\n  @if (withDivider) {\n    <mat-divider [vertical]=\"true\"></mat-divider>\n  }\n\n  <div class=\"search-bar-buttons\">\n    @if (showSearchButton) {\n      <button mat-icon-button [color]=\"color\" (click)=\"handleSearch()\">\n        <mat-icon>search</mat-icon>\n      </button>\n    }\n\n    @if (searchSelector) {\n      <igo-search-selector\n        [searchTypes]=\"searchTypes\"\n        [searchType]=\"searchType$ | async\"\n        (searchTypeChange)=\"onSearchTypeChange($event)\"\n      >\n      </igo-search-selector>\n    }\n\n    @if (searchSettings) {\n      <igo-search-settings\n        [pointerSummaryEnabled]=\"pointerSummaryEnabled\"\n        [allowResetSearchSourcesOptions]=\"allowResetSearchSourcesOptions\"\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    }\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 {\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  imports: [\n    MatListModule,\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(this.map.viewController, olFeature, FeatureMotion.Default);\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  @if (icon) {\n    <mat-icon matListItemIcon>{{ showIcons ? icon : 'blank' }}</mat-icon>\n  }\n\n  @if (titleHtml) {\n    <span\n      matListItemTitle\n      [innerHtml]=\"titleHtml\"\n      matTooltipShowDelay=\"500\"\n      [matTooltip]=\"tooltipHtml\"\n      matTooltipClass=\"search-result-tooltip\"\n    ></span>\n  } @else {\n    @if (!titleHtml) {\n      <span matTooltipShowDelay=\"500\" [matTooltip]=\"title\">{{ title }}</span>\n    }\n  }\n\n  <div matListItemMeta>\n    @if (withZoomButton) {\n      <button igoStopPropagation mat-icon-button (click)=\"onZoomHandler()\">\n        <mat-icon>search</mat-icon>\n      </button>\n    }\n\n    <ng-content select=\"[igoSearchItemToolbar]\"> </ng-content>\n  </div>\n</mat-list-item>\n","import { AsyncPipe } from '@angular/common';\nimport { Component, OnInit, inject } 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  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    FormsModule,\n    ReactiveFormsModule,\n    ListComponent,\n    SearchResultsItemComponent,\n    ListItemDirective,\n    MatFormFieldModule,\n    MatInputModule,\n    MatAutocompleteModule,\n    MatOptionModule,\n    MatListModule,\n    MatDialogActions,\n    MatButtonModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SaveFeatureDialogComponent implements OnInit {\n  private formBuilder = inject(UntypedFormBuilder);\n  languageService = inject(LanguageService);\n  dialogRef = inject<MatDialogRef<SaveFeatureDialogComponent>>(MatDialogRef);\n  data = inject<{\n    feature: SearchResult;\n    layers: Layer[];\n  }>(MAT_DIALOG_DATA, { optional: true });\n\n  public form: UntypedFormGroup;\n  feature: SearchResult;\n  layers: Layer[] = [];\n  filteredLayers$: Observable<Layer[]>;\n\n  constructor() {\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>\n  {{ 'igo.geo.layer.saveFeatureInLayer' | translate }}\n</h1>\n\n<div mat-dialog-content>\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          @for (layer of filteredLayers$ | async; track layer) {\n            <mat-option [value]=\"layer\">\n              <p matListItemTitle>{{ layer.title }}</p>\n            </mat-option>\n          }\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 matButton=\"elevated\" type=\"button\" (click)=\"cancel()\">\n      {{ 'igo.geo.layer.cancelBtn' | translate }}\n    </button>\n    <button\n      id=\"createLayerBtnDialog\"\n      matButton=\"elevated\"\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 } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject\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  imports: [\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  private layerService = inject(LayerService);\n  private dialog = inject(MatDialog);\n  private dataSourceService = inject(DataSourceService);\n  private mediaService = inject(MediaService);\n\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\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","@if (layer.meta.dataType === 'Layer') {\n  <button\n    igoStopPropagation\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      >{{ (isPreview$ | async) ? 'add' : added ? 'delete' : 'add' }}\n    </mat-icon>\n  </button>\n}\n\n@if (layer.meta.dataType === 'Feature' && saveSearchResultInLayer) {\n  <button\n    [id]=\"!isMobile ? 'hide-save-search-result-btn' : ''\"\n    igoStopPropagation\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}\n","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  inject\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  imports: [\n    ListComponent,\n    CollapsibleComponent,\n    NgTemplateOutlet,\n    SearchResultsItemComponent,\n    ListItemDirective,\n    MatTabsModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class SearchResultsComponent implements OnInit, OnDestroy {\n  private cdRef = inject(ChangeDetectorRef);\n  private searchService = inject(SearchService);\n  private configService = inject(ConfigService);\n\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  /**\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","@if (tabsMode === false) {\n  <igo-list [navigation]=\"true\">\n    @for (group of results$ | async; track group) {\n      @if (mode === searchResultMode.Grouped) {\n        <igo-collapsible\n          [class]=\"group.source.getId()\"\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      } @else {\n        <ng-container\n          *ngTemplateOutlet=\"\n            storeItemTemplate;\n            context: { results: group.results }\n          \"\n        ></ng-container>\n      }\n\n      <ng-template #storeItemTemplate let-results=\"results\">\n        @for (result of results; track result) {\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        }\n        @if (isMoreResults(group)) {\n          <span class=\"moreResults\" (click)=\"displayMoreResults(group)\">\n            <u>{{ 'igo.geo.search.displayMoreResults' | translate }}</u>\n          </span>\n        }\n      </ng-template>\n    }\n  </igo-list>\n}\n\n@if (tabsMode) {\n  <igo-list [navigation]=\"true\">\n    @if (mode === searchResultMode.Grouped) {\n      <mat-tab-group class=\"custom-tabs-view\" dynamicHeight>\n        @for (group of results$ | async; track group) {\n          <mat-tab [label]=\"computeGroupTitle(group)\">\n            <ng-container\n              *ngTemplateOutlet=\"storeItemTemplate; context: { group: group }\"\n            ></ng-container>\n          </mat-tab>\n        }\n      </mat-tab-group>\n    } @else {\n      @for (group of results$ | async; track group) {\n        <ng-container\n          *ngTemplateOutlet=\"storeItemTemplate; context: { group: group }\"\n        ></ng-container>\n      }\n    }\n\n    <ng-template #storeItemTemplate let-group=\"group\">\n      @for (result of group.results; track result) {\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      }\n\n      @if (isMoreResults(group)) {\n        <span class=\"moreResults\" (click)=\"displayMoreResults(group)\">\n          <u>{{ 'igo.geo.search.displayMoreResults' | translate }}</u>\n        </span>\n      }\n    </ng-template>\n  </igo-list>\n}\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  inject\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  private component = inject(MapBrowserComponent, { self: true });\n  private searchService = inject(SearchService);\n  private searchSourceService = inject(SearchSourceService);\n  private mediaService = inject(MediaService);\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  /**\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 { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\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  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  private languageService = inject(LanguageService);\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    const config = inject(ConfigService);\n    const storageService = inject(StorageService);\n    const options = config.getConfig(\n      `searchSources.${CoordinatesReverseSearchSource.id}`\n    );\n    const projections = config.getConfig<Projection[]>('projections') ?? [];\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 getEffectiveOptions(): 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 {\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  return new CoordinatesSearchResultFormatter();\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  };\n}\n\n/**\n * CoordinatesReverse search source factory\n * @ignore\n */\nexport function CoordinatesReverseSearchSourceFactory() {\n  return new CoordinatesReverseSearchSource();\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  };\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 { Injectable, Injector, inject } from '@angular/core';\n\nimport { AuthService } from '@igo2/auth';\nimport { IconSvg } from '@igo2/common/icon';\nimport { ConfigService } from '@igo2/core/config';\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  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  private http = inject(HttpClient);\n  private languageService = inject(LanguageService);\n  private formatter = inject<IChercheSearchResultFormatter>(\n    IChercheSearchResultFormatter\n  );\n\n  static id = 'icherche';\n  static type = FEATURE;\n  static propertiesBlacklist: string[] = [];\n  title$: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n  static defaultIchercheTypes = [\n    'adresses',\n    'codes-postaux',\n    'routes',\n    'intersections',\n    'municipalites',\n    'mrc',\n    'regadmin',\n    'lieux'\n  ];\n\n  private hashtagsLieuxToKeep = [];\n\n  get title(): string {\n    return this.title$.getValue();\n  }\n\n  constructor() {\n    const storageService = inject(StorageService);\n    const config = inject(ConfigService);\n    const options = config.getConfig(\n      `searchSources.${IChercheSearchSource.id}`\n    );\n\n    super(options, storageService);\n\n    const authService = inject(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 getEffectiveOptions(): 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      : IChercheSearchSource.defaultIchercheTypes;\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.defaultOptions.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  private http = inject(HttpClient);\n  private languageService = inject(LanguageService);\n\n  static id = 'icherchereverse';\n  static type = FEATURE;\n  static propertiesBlacklist: string[] = [];\n\n  static defaultIchercheTypes = [\n    'adresses',\n    'municipalites',\n    'mrc',\n    'regadmin'\n  ];\n\n  title$: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n  get title(): string {\n    return this.title$.getValue();\n  }\n\n  constructor() {\n    const config = inject(ConfigService);\n    const storageService = inject(StorageService);\n    const options = config.getConfig(\n      `searchSources.${IChercheReverseSearchSource.id}`\n    );\n    const injector = inject(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 getEffectiveOptions(): SearchSourceOptions {\n    const types =\n      this.options.params && this.options.params.type\n        ? this.options.params.type.replace(/\\s/g, '').toLowerCase().split(',')\n        : IChercheReverseSearchSource.defaultIchercheTypes;\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              title: 'igo.geo.search.icherche.type.tours',\n              value: 'tours',\n              enabled: types.indexOf('tours') !== -1\n            },\n            {\n              title: 'igo.geo.search.icherche.type.rss',\n              value: 'rss',\n              enabled: types.indexOf('rss') !== -1\n            },\n            {\n              title: 'igo.geo.search.icherche.type.rls',\n              value: 'rls',\n              enabled: types.indexOf('rls') !== -1\n            },\n            {\n              title: 'igo.geo.search.icherche.type.clsc',\n              value: 'clsc',\n              enabled: types.indexOf('clsc') !== -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    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,\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: 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 { Provider } from '@angular/core';\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  return new IChercheSearchResultFormatter();\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  };\n}\n\n/**\n * ICherche search source factory\n * @ignore\n */\nexport function ichercheSearchSourceFactory() {\n  return new IChercheSearchSource();\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  };\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  return new IChercheReverseSearchSource();\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  };\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 { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\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 {\n  SearchSourceOptions,\n  SearchSourceSettings,\n  TextSearchOptions\n} from './source.interfaces';\n\n@Injectable()\nexport class ILayerSearchResultFormatter {\n  private languageService = inject(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  private http = inject(HttpClient);\n  private languageService = inject(LanguageService);\n  private formatter = inject<ILayerSearchResultFormatter>(\n    ILayerSearchResultFormatter\n  );\n\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    const storageService = inject(StorageService);\n    const config = inject(ConfigService);\n    const options = config.getConfig<SearchSourceOptions>(\n      `searchSources.${ILayerSearchSource.id}`\n    );\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 getEffectiveOptions(): 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 { 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  return new ILayerSearchResultFormatter();\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  };\n}\n\n/**\n * ILayer search source factory\n * @ignore\n */\nexport function ilayerSearchSourceFactory() {\n  return new ILayerSearchSource();\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  };\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 { InjectionToken, inject, provideAppInitializer } 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 provideStyleListLoader() {\n  return provideAppInitializer(() => {\n    const styleListService = inject(StyleListService);\n    const options = inject(STYLELIST_OPTIONS);\n    return styleListService.load(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 { Component, Input, OnInit, inject } 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  imports: [\n    MatDialogTitle,\n    MatDialogContent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatIconModule,\n    ColorPickerFormFieldComponent,\n    MatDialogActions,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class StyleModalLayerComponent implements OnInit {\n  dialogRef = inject<MatDialogRef<StyleModalLayerComponent>>(MatDialogRef);\n  private formBuilder = inject(UntypedFormBuilder);\n  data = inject<LayerMatDialogData>(MAT_DIALOG_DATA);\n\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  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        @if (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          <igo-color-picker-form-field\n            formControlName=\"fill\"\n            (colorChange)=\"setLayerFillColor($event)\"\n          ></igo-color-picker-form-field>\n        }\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 matButton=\"elevated\" (click)=\"cancel()\">\n    {{ 'igo.geo.style.cancel' | translate }}\n  </button>\n  <button matButton=\"elevated\" color=\"primary\" (click)=\"confirm()\">OK</button>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  inject\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 { 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  imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule]\n})\nexport class StyleModalLayerButtonComponent {\n  private dialog = inject(MatDialog);\n\n  @Input() layer: VectorLayer;\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 { 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  imports: [\n    FlexibleComponent,\n    PanelComponent,\n    MatButtonModule,\n    MatIconModule,\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(this.map.viewController, olFeature, FeatureMotion.Zoom);\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    @if (feature.geometry) {\n      <button\n        mat-icon-button\n        panelRightButton\n        class=\"igo-icon-button\"\n        (click)=\"zoomToFeatureExtent()\"\n      >\n        <mat-icon>zoom_in</mat-icon>\n      </button>\n    }\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  inject\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  imports: [OgcFilterableItemComponent]\n})\nexport class OgcFilterComponent implements OnUpdateInputs, WidgetComponent {\n  private cdRef = inject(ChangeDetectorRef);\n\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  /**\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 { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  inject\n} from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { OnUpdateInputs } from '@igo2/common/dynamic-component';\nimport {\n  Form,\n  FormComponent,\n  FormFieldComponent,\n  FormService\n} from '@igo2/common/form';\nimport { WidgetComponent } from '@igo2/common/widget';\nimport { IgoLanguageModule, LanguageService } from '@igo2/core/language';\n\nimport * as olstyle from 'ol/style';\n\nimport { BehaviorSubject, Observable, Subscription, pairwise } from 'rxjs';\n\nimport { FeatureStore, featureToOl } from '../../../feature';\nimport { FEATURE } from '../../../feature/shared/feature.enums';\nimport {\n  Feature,\n  FeatureGeometry\n} from '../../../feature/shared/feature.interfaces';\nimport {\n  bufferOlGeometry,\n  doesOlGeometryIntersects\n} from '../../../geometry/shared/geometry.utils';\nimport { IgoMap } from '../../../map/shared/map';\nimport { FeatureWorkspace } from '../../shared/feature-workspace';\nimport { WfsWorkspace } from '../../shared/wfs-workspace';\n\ninterface DataSelectionData {\n  geometry?: FeatureGeometry;\n  action?: SelectionAction;\n  buffer?: string;\n}\n\nenum SelectionAction {\n  New = 'new',\n  Add = 'add',\n  Remove = 'remove'\n}\n\n@Component({\n  selector: 'igo-interactive-selection',\n  templateUrl: './interactive-selection.component.html',\n  styleUrls: ['./interactive-selection.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    CommonModule,\n    MatButtonModule,\n    IgoLanguageModule,\n    FormComponent,\n    FormFieldComponent\n  ]\n})\nexport class InteractiveSelectionFormComponent\n  implements OnInit, OnDestroy, OnUpdateInputs, WidgetComponent\n{\n  private cdRef = inject(ChangeDetectorRef);\n  private formService = inject(FormService);\n  private languageService = inject(LanguageService);\n\n  public form$ = new BehaviorSubject<Form>(undefined);\n  public submitButtonText$ = new BehaviorSubject<string>(undefined);\n  public submitDisabled = true;\n  private valueChanges$$: Subscription;\n  public data$ = new BehaviorSubject<DataSelectionData>({\n    geometry: undefined,\n    buffer: undefined,\n    action: SelectionAction.Add\n  });\n  @Input() map: IgoMap;\n  @Input() workspace: FeatureWorkspace | WfsWorkspace;\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  ngOnInit(): void {\n    const fieldConfigs = [\n      {\n        name: 'geometry',\n        title: '',\n        type: 'geometry',\n        options: {\n          validator: Validators.required\n        },\n        inputs: {\n          map: this.map,\n          geometryTypeField: true,\n          geometryType: 'Polygon',\n          drawGuideField: false,\n          drawGuide: 0,\n          drawGuidePlaceholder: '',\n          drawStyle: new olstyle.Style({\n            stroke: new olstyle.Stroke({\n              color: [255, 0, 0, 1],\n              width: 2\n            }),\n            fill: new olstyle.Fill({\n              color: [255, 0, 0, 0.2]\n            }),\n            image: new olstyle.Circle({\n              radius: 8,\n              stroke: new olstyle.Stroke({\n                color: [255, 0, 0, 1]\n              }),\n              fill: new olstyle.Fill({\n                color: [255, 0, 0, 0.2]\n              })\n            })\n          }),\n          overlayStyle: new olstyle.Style({\n            stroke: new olstyle.Stroke({\n              color: [0, 255, 0, 1],\n              width: 2\n            }),\n            fill: new olstyle.Fill({\n              color: [0, 255, 0, 0.2]\n            }),\n            image: new olstyle.Circle({\n              radius: 8,\n              stroke: new olstyle.Stroke({\n                color: [0, 255, 0, 1]\n              }),\n              fill: new olstyle.Fill({\n                color: [0, 255, 0, 0.2]\n              })\n            })\n          })\n        }\n      },\n      {\n        name: 'action',\n        title: this.languageService.translate.instant(\n          'igo.geo.workspace.widget.interactiveSelection.action.title'\n        ),\n        type: 'select',\n        options: {\n          cols: 1,\n          validator: Validators.required\n        },\n        inputs: {\n          choices: [\n            {\n              value: SelectionAction.New,\n              title: this.languageService.translate.instant(\n                'igo.geo.workspace.widget.interactiveSelection.selection.new'\n              )\n            },\n            {\n              value: SelectionAction.Add,\n              title: this.languageService.translate.instant(\n                'igo.geo.workspace.widget.interactiveSelection.selection.add'\n              )\n            },\n            {\n              value: SelectionAction.Remove,\n              title: this.languageService.translate.instant(\n                'igo.geo.workspace.widget.interactiveSelection.selection.remove'\n              )\n            }\n          ]\n        }\n      },\n      {\n        name: 'buffer',\n        title: this.languageService.translate.instant(\n          'igo.geo.workspace.widget.interactiveSelection.buffer.title'\n        ),\n        type: 'text',\n        options: {\n          cols: 1,\n          validator: Validators.pattern(/^\\d+$/)\n        }\n      }\n    ];\n    this.setAction(SelectionAction.Add);\n\n    const fields = fieldConfigs.map((config) => this.formService.field(config));\n    const form = this.formService.form(fields, []);\n\n    this.valueChanges$$ = (\n      form.control.valueChanges satisfies Observable<DataSelectionData>\n    )\n      .pipe(pairwise())\n      .subscribe(([previous, current]) => {\n        const currentValues = current;\n        if (previous?.action !== current.action) {\n          currentValues.buffer = undefined;\n        }\n        this.data$.next(currentValues);\n        this.submitDisabled = !form.control.valid;\n        if (\n          !currentValues ||\n          !currentValues.action ||\n          currentValues.action === SelectionAction.Add\n        ) {\n          this.setAction(SelectionAction.Add);\n        } else if (currentValues.action === SelectionAction.New) {\n          this.setAction(SelectionAction.New);\n        } else if (currentValues.action === SelectionAction.Remove) {\n          this.setAction(SelectionAction.Remove);\n        }\n      });\n\n    this.form$.next(form);\n  }\n\n  private setAction(action: SelectionAction) {\n    this.submitButtonText$.next(\n      `igo.geo.workspace.widget.interactiveSelection.selection.${action}`\n    );\n  }\n\n  ngOnDestroy() {\n    this.valueChanges$$.unsubscribe();\n  }\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  onSubmit(data: DataSelectionData) {\n    const featureStore = this.workspace.entityStore as FeatureStore;\n    const storeFeatures = featureStore.all();\n\n    const buffer = data.buffer ? +data.buffer : undefined;\n\n    const formFeature: Feature = {\n      type: FEATURE,\n      geometry: data.geometry,\n      projection: 'EPSG:4326',\n      properties: {}\n    };\n    let olFormFeature = featureToOl(formFeature, 'EPSG:4326');\n    if (buffer) {\n      const bufferedGeom = bufferOlGeometry(\n        olFormFeature.getGeometry(),\n        buffer,\n        'meters'\n      );\n      const bufferedFeature: Feature = {\n        type: FEATURE,\n        geometry: bufferedGeom,\n        projection: 'EPSG:4326',\n        properties: {}\n      };\n      olFormFeature = featureToOl(bufferedFeature, 'EPSG:4326');\n    }\n\n    const intersectingFeatures = storeFeatures\n      .map((storeFeature) => {\n        const doesIntersects = doesOlGeometryIntersects(\n          featureToOl(storeFeature, 'EPSG:4326').getGeometry(),\n          olFormFeature.getGeometry()\n        );\n        return doesIntersects ? storeFeature : undefined;\n      })\n      .filter((f) => f);\n\n    let selectedStateToApply = false;\n    let exclusive = false;\n    if (intersectingFeatures.length) {\n      if ([SelectionAction.New, SelectionAction.Add].includes(data.action)) {\n        selectedStateToApply = true;\n        exclusive = data.action === SelectionAction.New ? true : false;\n      } else if (SelectionAction.Remove) {\n        selectedStateToApply = false;\n        exclusive = false;\n      }\n      featureStore.state.updateMany(\n        intersectingFeatures,\n        { selected: selectedStateToApply },\n        exclusive\n      );\n    }\n    this.data$.next(\n      Object.assign({}, this.data$.getValue(), { geometry: undefined })\n    );\n  }\n\n  clear() {\n    const featureStore = this.workspace.entityStore as FeatureStore;\n    featureStore.state.updateAll({ selected: false });\n    this.form$.value.control.reset();\n    this.setAction(SelectionAction.Add);\n    this.data$.next(\n      Object.assign({}, this.data$.getValue(), {\n        geometry: undefined,\n        action: SelectionAction.Add\n      })\n    );\n  }\n}\n","@if (form$ | async; as form) {\n  <igo-form\n    [form]=\"form\"\n    [formData]=\"data$ | async\"\n    (submitForm)=\"onSubmit($event)\"\n  >\n    @if (form.fields.length) {\n      <div class=\"form-container\">\n        @for (field of form.fields; track field) {\n          <igo-form-field [field]=\"field\"></igo-form-field>\n        }\n      </div>\n    }\n    <div formButtons class=\"actions-container\">\n      <button\n        mat-stroked-button\n        type=\"button\"\n        color=\"primary\"\n        (click)=\"clear()\"\n      >\n        {{\n          'igo.geo.workspace.widget.interactiveSelection.reset.button'\n            | translate\n        }}\n      </button>\n      <button\n        matButton=\"filled\"\n        type=\"submit\"\n        color=\"primary\"\n        [disabled]=\"submitDisabled\"\n      >\n        {{ submitButtonText$ | async | translate }}\n      </button>\n    </div>\n  </igo-form>\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { Widget, WidgetService } from '@igo2/common/widget';\n\nimport { InteractiveSelectionFormComponent } from './interactive-selection/interactive-selection.component';\nimport { OgcFilterComponent } from './ogc-filter/ogc-filter.component';\n\nexport const OgcFilterWidget = new InjectionToken<Widget>('OgcFilterWidget');\nexport const InteractiveSelectionFormWidget = new InjectionToken<Widget>(\n  'InteractiveSelectionFormWidget'\n);\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\nexport function interactiveSelectionFormWidgetFactory(\n  widgetService: WidgetService\n): Widget {\n  return widgetService.create(InteractiveSelectionFormComponent);\n}\n\nexport function provideInteractiveSelectionFormWidget() {\n  return {\n    provide: InteractiveSelectionFormWidget,\n    useFactory: interactiveSelectionFormWidgetFactory,\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  imports: [MatDialogContent, MatDialogActions, MatButtonModule]\n})\nexport class ConfirmationPopupComponent {\n  dialogRef = inject<MatDialogRef<ConfirmationPopupComponent>>(MatDialogRef);\n  languageService = inject(LanguageService);\n  data = inject<{\n    type: string;\n    cancel: boolean;\n  }>(MAT_DIALOG_DATA);\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>\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 matButton=\"elevated\" color=\"primary\" (click)=\"confirmedAction()\">\n    Ok\n  </button>\n  <button matButton=\"elevated\" (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      visible: field.visible,\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, inject } 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  private layerService = inject(LayerService);\n  private storageService = inject(StorageService);\n  private configService = inject(ConfigService);\n  private messageService = inject(MessageService);\n  private http = inject(HttpClient);\n  private dialog = inject(MatDialog);\n  private styleService = inject(StyleService);\n  authInterceptor? = inject(AuthInterceptor);\n\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  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          (\n            this.geoJsonFormat.readFeature(\n              feature.geometry\n            ) as olFeature<OlGeometry>\n          )\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          (\n            this.geoJsonFormat.readFeature(\n              feature.geometry\n            ) as olFeature<OlGeometry>\n          )\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        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, inject } 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  private regexService = inject(RegexService);\n\n  public geoServiceRegexes: GeoServiceDefinition[] = [];\n\n  constructor() {\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, inject } 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  private storageService = inject(StorageService);\n  private configService = inject(ConfigService);\n  private layerService = inject(LayerService);\n  private propertyTypeDetectorService = inject(PropertyTypeDetectorService);\n  private capabilitiesService = inject(CapabilitiesService);\n\n  get zoomAuto(): boolean {\n    return this.storageService.get('zoomAuto') as boolean;\n  }\n\n  public ws$ = new BehaviorSubject<string>(undefined);\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    if (!layer.options.linkedLayers) {\n      layer.options.linkedLayers = { linkId: layer.id, links: [] };\n    }\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, inject } 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  private storageService = inject(StorageService);\n  private configService = inject(ConfigService);\n  private layerService = inject(LayerService);\n  private propertyTypeDetectorService = inject(PropertyTypeDetectorService);\n  private capabilitiesService = inject(CapabilitiesService);\n\n  get zoomAuto(): boolean {\n    return this.storageService.get('zoomAuto') as boolean;\n  }\n\n  public ws$ = new BehaviorSubject<string>(undefined);\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    if (!layer.options.linkedLayers) {\n      layer.options.linkedLayers = { linkId: layer.id, links: [] };\n    }\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, inject } 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  private layerService = inject(LayerService);\n  private storageService = inject(StorageService);\n  private capabilitiesService = inject(CapabilitiesService);\n  private styleService = inject(StyleService);\n  private configService = inject(ConfigService);\n  private propertyTypeDetectorService = inject(PropertyTypeDetectorService);\n\n  get zoomAuto(): boolean {\n    return this.storageService.get('zoomAuto') as boolean;\n  }\n\n  public ws$ = new BehaviorSubject<string>(undefined);\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    if (dataSource.options.refreshIntervalSec) {\n      linkProperties.properties.push(LinkedProperties.REFRESH);\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  inject\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';\nimport { AnyWorkspace } from '../shared/workspace.interface';\n\n@Directive({\n  selector: '[igoWorkspaceSelector]',\n  standalone: true\n})\nexport class WorkspaceSelectorDirective implements OnInit, OnDestroy {\n  private component = inject(WorkspaceSelectorComponent);\n  private wfsWorkspaceService = inject(WfsWorkspaceService);\n  private wmsWorkspaceService = inject(WmsWorkspaceService);\n  private editionWorkspaceService = inject(EditionWorkspaceService);\n  private featureWorkspaceService = inject(FeatureWorkspaceService);\n\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  ngOnInit() {\n    this.layers$$ = this.map.layerController.all$\n      .pipe(debounceTime(50))\n      .subscribe((layers) => this.onLayersChange(layers));\n\n    this.workspaceStore?.activeWorkspace$.subscribe((ws: AnyWorkspace) => {\n      this.updateActiveWorkspaceRefreshState(ws);\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    this.disableAllLayerRefresh();\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  private updateActiveWorkspaceRefreshState(\n    workspace: AnyWorkspace | undefined\n  ) {\n    if (!workspace) return;\n\n    this.disableAllLayerRefresh();\n    this.enableLayerRefreshForWorkspace(workspace);\n  }\n\n  private enableLayerRefreshForWorkspace(workspace: AnyWorkspace) {\n    const dataSource = workspace.layer.linkMaster?.layer?.dataSource;\n    if (!dataSource || !(dataSource instanceof WMSDataSource)) {\n      return;\n    }\n    if (dataSource.options?.refreshIntervalSec && !dataSource.enableRefresh) {\n      dataSource.enableRefresh = true;\n    }\n  }\n\n  private disableAllLayerRefresh() {\n    this.workspaceStore.all().forEach((wks: AnyWorkspace) => {\n      const datasourceMaster = wks.layer.linkMaster?.layer?.dataSource;\n      if (!datasourceMaster || !(datasourceMaster instanceof WMSDataSource)) {\n        return;\n      }\n\n      if (\n        datasourceMaster.options.refreshIntervalSec &&\n        datasourceMaster.enableRefresh\n      ) {\n        datasourceMaster.enableRefresh = false;\n      }\n    });\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 {\n  provideInteractiveSelectionFormWidget,\n  provideOgcFilterWidget\n} 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(), provideInteractiveSelectionFormWidget()]\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, inject } 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  private http = inject(HttpClient);\n  private config = inject(ConfigService);\n  private languageService = inject(LanguageService);\n  private messageService = inject(MessageService);\n  private capabilitiesService = inject(CapabilitiesService);\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 } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  inject\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  imports: [\n    MatListModule,\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  private layerService = inject(LayerService);\n\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  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  @if (haveGroup()) {\n    <mat-icon class=\"catalog-browser-layer-carret\" matListItemIcon></mat-icon>\n  }\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    @if (layer.externalProvider) {\n      <button 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    }\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) ? 'preview' : added ? 'delete' : 'add' }}\n      </mat-icon>\n    </button>\n  </div>\n</mat-list-item>\n\n<div #legend class=\"igo-cataloglayer-legend-container\">\n  @if (\n    (layerLegendShown$ | async) && (igoLayer$ | async) && catalogAllowLegend\n  ) {\n    <igo-layer-legend [layer]=\"igoLayer$ | async\"> </igo-layer-legend>\n  }\n</div>\n","import { AsyncPipe } 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  imports: [\n    MatListModule,\n    MatIconModule,\n    CollapseDirective,\n    MatTooltipModule,\n    MatButtonModule,\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    @if (group.externalProvider) {\n      <button disabled=\"true\" mat-icon-button>\n        @if (group.externalProvider) {\n          <mat-icon\n            class=\"igo-cataloggroup-external-icon\"\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        }\n      </button>\n    }\n\n    @if ((added$ | async) && (preview$ | async) === false) {\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    } @else {\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    }\n  </div>\n</mat-list-item>\n\n<div #items>\n  @for (item of store.view.all$() | async; track item) {\n    @if (isGroup(item)) {\n      <!-- todo: add display ans manage CatalogItemGroup -->\n    }\n    @if (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    }\n  }\n</div>\n","import { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject\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  imports: [\n    ListComponent,\n    CatalogBrowserGroupComponent,\n    CatalogBrowserLayerComponent,\n    ListItemDirective,\n    AsyncPipe\n  ]\n})\nexport class CatalogBrowserComponent implements OnInit, OnDestroy {\n  private layerService = inject(LayerService);\n  private cdRef = inject(ChangeDetectorRef);\n\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  /**\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  @for (item of store.view.all$() | async; track item) {\n    @if (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    }\n    @if (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    }\n  }\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 } from '@angular/common';\nimport { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } 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 { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { EntityStore } from '@igo2/common/entity';\nimport {\n  Form,\n  FormComponent,\n  FormFieldComponent,\n  FormService\n} from '@igo2/common/form';\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  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatAutocompleteModule,\n    MatTabsModule,\n    MatOptionModule,\n    MatTooltipModule,\n    MatSelectModule,\n    MatListModule,\n    MatButtonModule,\n    AsyncPipe,\n    IgoLanguageModule,\n    FormComponent,\n    FormFieldComponent\n  ]\n})\nexport class AddCatalogDialogComponent implements OnInit, OnDestroy {\n  languageService = inject(LanguageService);\n  private configService = inject(ConfigService);\n  private formService = inject(FormService);\n  dialogRef = inject<MatDialogRef<AddCatalogDialogComponent>>(MatDialogRef);\n  data = inject<{\n    predefinedCatalogs: Catalog[];\n    store: EntityStore<Catalog>;\n    error: boolean;\n    addedCatalog: Catalog;\n  }>(MAT_DIALOG_DATA, { optional: true });\n\n  predefinedForm$ = new BehaviorSubject<Form>(undefined);\n  customForm$ = new BehaviorSubject<Form>(undefined);\n  data$ = new BehaviorSubject<Catalog>(undefined);\n  customData$ = new BehaviorSubject<Catalog>(undefined);\n  emailAddress: string;\n  private storeViewAll$$: Subscription;\n\n  ngOnInit() {\n    if (this.data.addedCatalog) {\n      this.customData$.next(this.data.addedCatalog);\n    }\n    const types = Object.keys(TypeCapabilities).map((t) => {\n      return { value: t, title: t };\n    });\n    this.storeViewAll$$ = this.data.store.view.all$().subscribe(() => {\n      const predefinedChoices = this.data.predefinedCatalogs\n        .filter((c) => !this.data.store.get(c.id))\n        .map((predefinedCatalog) => {\n          return {\n            value: predefinedCatalog.id,\n            title: predefinedCatalog.title\n          };\n        });\n\n      const predefinedFieldConfigs = [\n        {\n          name: 'id',\n          title: this.languageService.translate.instant(\n            'igo.geo.catalog.library.predefined.select'\n          ),\n          type: 'select',\n          options: {\n            cols: 1,\n            validator: Validators.required\n          },\n          inputs: {\n            choices: predefinedChoices\n          }\n        }\n      ];\n      const predefinedFormFields = predefinedFieldConfigs.map((config) =>\n        this.formService.field(config)\n      );\n      this.predefinedForm$.next(\n        this.formService.form(predefinedFormFields, [])\n      );\n    });\n    const customFieldConfigs = [\n      {\n        name: 'title',\n        title: this.languageService.translate.instant(\n          'igo.geo.catalog.library.custom.title'\n        ),\n        type: 'text',\n        options: {\n          validator: Validators.required\n        }\n      },\n      {\n        name: 'url',\n        title: 'URL',\n        type: 'text',\n        options: {\n          validator: Validators.required\n        }\n      },\n      {\n        name: 'type',\n        title: 'Type',\n        type: 'select',\n        options: {\n          cols: 1,\n          validator: Validators.required\n        },\n        inputs: {\n          choices: types\n        }\n      }\n    ];\n    const customFieldFormFields = customFieldConfigs.map((config) =>\n      this.formService.field(config)\n    );\n    this.customForm$.next(this.formService.form(customFieldFormFields, []));\n    this.emailAddress = this.configService.getConfig('emailAddress');\n  }\n\n  onPredefinedSubmit(data: Catalog) {\n    const catalog = this.data.predefinedCatalogs.find((c) => c.id === data.id);\n    if (this.checkFieldsValidity(this.predefinedForm$)) {\n      this.dialogRef.close(catalog);\n    }\n  }\n  onCustomSubmit(catalog: Catalog) {\n    if (this.checkFieldsValidity(this.customForm$)) {\n      this.dialogRef.close(catalog);\n    }\n  }\n  ngOnDestroy() {\n    this.storeViewAll$$?.unsubscribe();\n  }\n\n  checkFieldsValidity(form$: BehaviorSubject<Form>): boolean {\n    const fields = form$.getValue().fields;\n    return fields\n      .map((field) => {\n        if (field.control.invalid) {\n          field.control.markAsTouched();\n          field.control.updateValueAndValidity();\n        }\n        return field.control.valid;\n      })\n      .every((e) => e);\n  }\n}\n","<mat-tab-group\n  [selectedIndex]=\"!data.addedCatalog && data.predefinedCatalogs.length ? 0 : 1\"\n>\n  <mat-tab\n    [label]=\"'igo.geo.catalog.library.predefined' | translate\"\n    [disabled]=\"!data.predefinedCatalogs.length\"\n  >\n    @if (predefinedForm$ | async; as form) {\n      <igo-form\n        [form]=\"form\"\n        [formData]=\"data$ | async\"\n        (submitForm)=\"onPredefinedSubmit($any($event))\"\n      >\n        @if (form.fields.length) {\n          <div class=\"form-container\">\n            @for (field of form.fields; track field) {\n              <igo-form-field [field]=\"field\"></igo-form-field>\n            }\n          </div>\n        }\n        <div formButtons class=\"actions-container\">\n          <button matButton=\"filled\" type=\"submit\" color=\"primary\">\n            {{ 'igo.geo.catalog.library.add' | translate }}\n          </button>\n        </div>\n      </igo-form>\n    }\n  </mat-tab>\n\n  <mat-tab class=\"tabs\" [label]=\"'igo.geo.catalog.library.custom' | translate\">\n    @if (customForm$ | async; as form) {\n      <igo-form\n        [form]=\"form\"\n        [formData]=\"customData$ | async\"\n        (submitForm)=\"onCustomSubmit($any($event))\"\n      >\n        @if (form.fields.length) {\n          <div class=\"form-container\">\n            @for (field of form.fields; track field) {\n              <igo-form-field [field]=\"field\"></igo-form-field>\n            }\n          </div>\n        }\n        <div formButtons class=\"actions-container\">\n          <button matButton=\"filled\" type=\"submit\" color=\"primary\">\n            {{ 'igo.geo.catalog.library.add' | translate }}\n          </button>\n        </div>\n      </igo-form>\n    }\n    @if (data.error && data.addedCatalog && emailAddress) {\n      <span>\n        <p class=\"error\">\n          {{\n            languageService.translate.instant(\n              'igo.geo.catalog.externalProvider.unavailableWithEmail',\n              { value: data.addedCatalog.url, email: emailAddress }\n            )\n          }}\n        </p>\n      </span>\n    }\n    @if (data.error && data.addedCatalog && !emailAddress) {\n      <span>\n        <p class=\"error\">\n          {{\n            languageService.translate.instant('igo.geo.catalog.unavailable', {\n              value: data.addedCatalog.url\n            })\n          }}\n        </p>\n      </span>\n    }\n  </mat-tab>\n</mat-tab-group>\n","import {\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  imports: [\n    MatListModule,\n    MatIconModule,\n    MatTooltipModule,\n    MatButtonModule,\n    IgoLanguageModule\n  ]\n})\nexport class CatalogLibraryItemComponent {\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    @if (catalog.externalProvider) {\n      <mat-icon\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    }\n    @if (catalog.removable) {\n      <button\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\n    @if (!catalog.removable) {\n      <button class=\"igo-blank\" disabled=\"true\" mat-icon-button>\n        <mat-icon></mat-icon>\n      </button>\n    }\n  </div>\n</mat-list-item>\n","import { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  inject\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, catchError } from 'rxjs';\nimport { Md5 } from 'ts-md5';\n\nimport { TypeCapabilitiesStrings } from '../../datasource/shared/capabilities.interface';\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 { CatalogLibraryItemComponent } 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  imports: [\n    ListComponent,\n    CatalogLibraryItemComponent,\n    ListItemDirective,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class CatalogLibraryComponent implements OnInit, OnDestroy {\n  private capabilitiesService = inject(CapabilitiesService);\n  private messageService = inject(MessageService);\n  private storageService = inject(StorageService);\n  private dialog = inject(MatDialog);\n\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  /**\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 = c.id ?? Md5.hashStr((c.type || 'wms') + standardizeUrl(c.url));\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(catalog, { selected: true, focused: true }, true);\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    const id =\n      addedCatalog.id ??\n      Md5.hashStr(addedCatalog.type + standardizeUrl(addedCatalog.url));\n\n    const predefinedCatalog = this.predefinedCatalogs.find(\n      (c) => c.id === addedCatalog.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    if (predefinedCatalog) {\n      predefinedCatalog.removable ??= true;\n      this.handleAddCatalogToStore(predefinedCatalog);\n    } else {\n      this.addingCatalog$$ = this.capabilitiesService\n        .getCapabilities(\n          addedCatalog.type as TypeCapabilitiesStrings,\n          addedCatalog.url\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          const catalogToAdd: Catalog = ObjectUtils.removeUndefined(\n            Object.assign(\n              {},\n              {\n                id,\n                title: addedCatalog.title,\n                url: addedCatalog.url,\n                type: addedCatalog.type || 'wms',\n                externalProvider: true,\n                removable: true,\n                version:\n                  addedCatalog.type === 'wms' ? capabilities.version : '1.3.0'\n              }\n            )\n          );\n          this.handleAddCatalogToStore(catalogToAdd);\n        });\n    }\n  }\n\n  ngOnDestroy() {\n    this.unsubscribeAddingCatalog();\n  }\n\n  private handleAddCatalogToStore(catalogToAdd: Catalog) {\n    this.store.insert(catalogToAdd);\n    this.addedCatalogs = [...this.addedCatalogs, catalogToAdd];\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  @for (catalog of getCatalogs() | async; track catalog) {\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  }\n</igo-list>\n\n@if (addCatalogAllowed) {\n  <div class=\"btnAddCatalog\">\n    <button\n      matButton=\"elevated\"\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}\n","import { NgModule } from '@angular/core';\n\nimport { AddCatalogDialogComponent } from './add-catalog-dialog.component';\nimport { CatalogLibraryComponent } from './catalog-library.component';\n\nexport const CATALOG_LIBRARY_DIRECTIVES = [\n  CatalogLibraryComponent,\n  AddCatalogDialogComponent\n] as const;\n\n/**\n * @deprecated import the CatalogLibraryComponent, AddCatalogDialogComponent directly\n */\n@NgModule({\n  imports: [CatalogLibraryComponent, AddCatalogDialogComponent],\n  exports: [CatalogLibraryComponent, 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 } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject\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  imports: [\n    GeometryFormFieldInputComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatButtonToggleModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatIconModule,\n    AsyncPipe,\n    IgoLanguageModule\n  ]\n})\nexport class GeometryFormFieldComponent implements OnInit, OnDestroy {\n  private cdRef = inject(ChangeDetectorRef);\n\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  /**\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@if (geometryTypeField) {\n  <div 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\n@if (drawGuideField) {\n  <mat-form-field 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}\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 } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  inject\n} 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 { SecureImagePipe } from '@igo2/common/image';\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  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatSlideToggleModule,\n    MatSelectModule,\n    MatOptionModule,\n    MatButtonModule,\n    AsyncPipe,\n    KeyValuePipe,\n    IgoLanguageModule\n  ],\n  providers: [SecureImagePipe]\n})\nexport class PrintFormComponent implements OnInit {\n  private formBuilder = inject(UntypedFormBuilder);\n  private mediaService = inject(MediaService);\n\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    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      @if (titleField.errors?.maxlength) {\n        <mat-error>{{\n          'igo.geo.formValidation.maxLength'\n            | translate\n              : {\n                  column: 'igo.geo.printForm.title' | translate,\n                  value: 130\n                }\n        }}</mat-error>\n      }\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      @if (subtitleField.errors?.maxlength) {\n        <mat-error>{{\n          'igo.geo.formValidation.maxLength'\n            | translate\n              : {\n                  column: 'igo.geo.printForm.subtitle' | translate,\n                  value: 120\n                }\n        }}</mat-error>\n      }\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      @if (commentField.errors?.maxlength) {\n        <mat-error>{{\n          'igo.geo.formValidation.maxLength'\n            | translate\n              : {\n                  column: 'igo.geo.printForm.comment' | translate,\n                  value: maxLength\n                }\n        }}</mat-error>\n      }\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        @for (\n          legendPosition of legendPositions | keyvalue;\n          track legendPosition\n        ) {\n          <mat-option [value]=\"legendPosition.key\">\n            @if (!['newpage', 'newimage'].includes(legendPosition.value)) {\n              {{\n                'igo.geo.printForm.legendPositions.' + legendPosition.value\n                  | translate\n              }}\n            }\n            @if (['newpage', 'newimage'].includes(legendPosition.value)) {\n              {{\n                (outputFormat === 'Pdf'\n                  ? 'igo.geo.printForm.legendPositions.newpage'\n                  : 'igo.geo.printForm.legendPositions.newimage'\n                ) | translate\n              }}\n            }\n          </mat-option>\n        }\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        @for (outputFormat of outputFormats | keyvalue; track outputFormat) {\n          <mat-option [value]=\"outputFormat.key\">\n            {{ outputFormat.value }}\n          </mat-option>\n        }\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        @for (paperFormat of paperFormats | keyvalue; track paperFormat) {\n          <mat-option [value]=\"paperFormat.key\">\n            {{\n              'igo.geo.printForm.paperFormats.' + paperFormat.value | translate\n            }}\n          </mat-option>\n        }\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        @for (imageFormat of imageFormats | keyvalue; track imageFormat) {\n          <mat-option [value]=\"imageFormat.key\">\n            {{ imageFormat.value }}\n          </mat-option>\n        }\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        @for (resolution of resolutions; track resolution) {\n          <mat-option [value]=\"resolution\">\n            {{ resolution }}\n          </mat-option>\n        }\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        @for (orientation of orientations | keyvalue; track orientation) {\n          <mat-option [value]=\"orientation.key\">\n            {{ 'igo.geo.printForm.' + orientation.value | translate }}\n          </mat-option>\n        }\n      </mat-select>\n    </mat-form-field>\n  </div>\n\n  <div class=\"igo-form-button-group print-button-top-padding\">\n    <button\n      matButton=\"elevated\"\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, inject } from '@angular/core';\n\nimport { SecureImagePipe } from '@igo2/common/image';\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  imports: [PrintFormComponent],\n  providers: [SecureImagePipe]\n})\nexport class PrintComponent {\n  private printService = inject(PrintService);\n\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  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 { SecureImagePipe } from '@igo2/common/image';\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  providers: [SecureImagePipe]\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, inject } 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  private _http = inject(HttpClient);\n  private _config = inject(ConfigService);\n\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    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 { 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  return new OsrmDirectionsSource();\n}\n\nexport function provideOsrmDirectionsSource() {\n  return {\n    provide: DirectionsSource,\n    useFactory: osrmDirectionsSourcesFactory,\n    multi: true\n  };\n}\n\nexport function withOsrmSource(): DirectionSourceFeature<DirectionSourceKind.OSRM> {\n  return {\n    kind: DirectionSourceKind.OSRM,\n    providers: [provideOsrmDirectionsSource()]\n  };\n}\n","import {\n  APP_INITIALIZER,\n  EnvironmentProviders,\n  makeEnvironmentProviders\n} from '@angular/core';\n\nimport { ConfigFileToGeoDBService, GeoDB } from './geoDB';\nimport { LayerDB } from './layerDB';\nimport { IOfflineOptions } from './offline.interface';\nimport { GeoNetworkService } from './shared';\nimport { createIndexedDb } from './shared/indexed-db.utils';\n\n/** Ensure to create the indexDB on app initialisation and provide\n * GeoNetworkService, ConfigFileToGeoDBService */\nexport function provideOffline(options: IOfflineOptions): EnvironmentProviders {\n  return makeEnvironmentProviders(\n    options?.enable\n      ? [\n          {\n            provide: APP_INITIALIZER,\n            useFactory: idbFactory,\n            multi: true,\n            deps: [GeoDB, LayerDB]\n          },\n          GeoDB,\n          LayerDB,\n          GeoNetworkService,\n          ConfigFileToGeoDBService\n        ]\n      : []\n  );\n}\n\nfunction idbFactory() {\n  return () => createIndexedDb();\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 { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\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  private http = inject(HttpClient);\n  private languageService = inject(LanguageService);\n\n  static id = 'cadastre';\n  static type = FEATURE;\n\n  constructor() {\n    const storageService = inject(StorageService);\n    const config = inject(ConfigService);\n    const options = config.getConfig(\n      `searchSources.${CadastreSearchSource.id}`\n    );\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 getEffectiveOptions(): 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 Exclude<\n        GeoJsonGeometryTypes,\n        'GeometryCollection'\n      >,\n      coordinates: (feature.getGeometry() as any).getCoordinates()\n    };\n  }\n}\n","import { 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  return new CadastreSearchSource();\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  };\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 { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\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  private http = inject(HttpClient);\n\n  static id = 'nominatim';\n  static type = FEATURE;\n\n  constructor() {\n    const config = inject(ConfigService);\n    const storageService = inject(StorageService);\n    const options = config.getConfig<SearchSourceOptions>(\n      `searchSources.${NominatimSearchSource.id}`\n    );\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 getEffectiveOptions(): 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 { 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  return new NominatimSearchSource();\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  };\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 { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\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  private http = inject(HttpClient);\n  private languageService = inject(LanguageService);\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    const config = inject(ConfigService);\n    const storageService = inject(StorageService);\n    const options = config.getConfig<SearchSourceOptions>(\n      `searchSources.${StoredQueriesSearchSource.id}`\n    );\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 getEffectiveOptions(): 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  private http = inject(HttpClient);\n  private languageService = inject(LanguageService);\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    const config = inject(ConfigService);\n    const storageService = inject(StorageService);\n    const options = config.getConfig<SearchSourceOptions>(\n      `searchSources.${StoredQueriesReverseSearchSource.id}`\n    );\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 getEffectiveOptions(): 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 { 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  return new StoredQueriesSearchSource();\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  };\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  return new StoredQueriesReverseSearchSource();\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  };\n}\n\nexport function withStoredQueriesReverseSource(): SearchSourceFeature<SearchSourceKind.StoredQueriesReverse> {\n  return {\n    kind: SearchSourceKind.StoredQueriesReverse,\n    providers: [provideStoredQueriesReverseSearchSource()]\n  };\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\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  private languageService = inject(LanguageService);\n\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    const storageService = inject(StorageService);\n    const config = inject(ConfigService);\n    const options = config.getConfig<SearchSourceOptions>(\n      `searchSources.${WorkspaceSearchSource.id}`\n    );\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 getEffectiveOptions(): 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 { 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  return new WorkspaceSearchSource();\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  };\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, inject } 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 wfsWorkspaceService = inject(WfsWorkspaceService);\n  private wmsWorkspaceService = inject(WmsWorkspaceService);\n  private editionWorkspaceService = inject(EditionWorkspaceService);\n  private featureWorkspaceService = inject(FeatureWorkspaceService);\n\n  private layers$$: Subscription;\n  private entities$$: Subscription[] = [];\n\n  @Input() map: IgoMap;\n\n  @Input() workspaceStore: WorkspaceStore;\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","concatMap","switchMap","first","mergeMap","LayerGroup","olLayerVector","tap","ColorAsArray","catchError","OlFormatGeoJSON","olstyle","olGeom","olProj","olFeature","jsPDF","i1","i2","i3","i4","i6","i7","i8","i9","i5","debounceTime","olControlAttribution","olinteraction","olVectorTileSource","OlGeom","i10","i11","i13","olGetLength","olGetArea","olGetCenter","Olstyle","FlexSearchDocument","i1.FeatureDetailsComponent","i2.FeatureDetailsDirective","turfFeature","OlStyle","Circle","Polygon","i12","Point","olPoint","OlRenderFeature","olFormatGeoJSON","Style","take","WKT","GeoJSON","BehaviorSubject","i1.CatalogLibraryComponent","i2.AddCatalogDialogComponent"],"mappings":"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"}