{"version":3,"file":"hslayers-ng-components-query.mjs","sources":["../../../projects/hslayers/components/query/attribute-row/attribute-row.component.ts","../../../projects/hslayers/components/query/attribute-row/attribute-row.component.html","../../../projects/hslayers/components/query/feature-common.service.ts","../../../projects/hslayers/components/query/feature/feature.component.ts","../../../projects/hslayers/components/query/feature/feature.component.html","../../../projects/hslayers/components/query/feature-list/feature-list.component.ts","../../../projects/hslayers/components/query/feature-list/feature-list.component.html","../../../projects/hslayers/components/query/default-info-panel-body/default-info-panel-body.component.ts","../../../projects/hslayers/components/query/default-info-panel-body/default-info-panel-body.component.html","../../../projects/hslayers/components/query/query-wmts.service.ts","../../../projects/hslayers/components/query/query-wms.service.ts","../../../projects/hslayers/components/query/query.tokens.ts","../../../projects/hslayers/components/query/query.component.ts","../../../projects/hslayers/components/query/query.component.html","../../../projects/hslayers/components/query/hslayers-ng-components-query.ts"],"sourcesContent":["import {Component, Input, OnInit} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\n\n@Component({\n  selector: 'hs-query-attribute-row',\n  templateUrl: './attribute-row.component.html',\n  imports: [FormsModule],\n})\nexport class HsQueryAttributeRowComponent implements OnInit {\n  isObject = false;\n  @Input() attribute;\n  @Input() feature;\n  @Input() readonly: boolean;\n  @Input() template;\n  tmpObjectValue: any;\n\n  ngOnInit(): void {\n    this.checkAttributeValue();\n  }\n\n  /**\n   * Act on feature attribute changes\n   */\n  change(): void {\n    if (this.feature?.feature) {\n      const feature = this.feature.feature;\n      if (this.isObject) {\n        feature.set(this.attribute.name, JSON.parse(this.tmpObjectValue));\n      } else {\n        feature.set(this.attribute.name, this.attribute.value);\n      }\n    }\n  }\n\n  /**\n   * Check if attribute value is object and stringify it if needed\n   */\n  checkAttributeValue(): void {\n    if (\n      typeof this.attribute.value == 'object' &&\n      !Array.isArray(this.attribute.value)\n    ) {\n      this.isObject = true;\n      this.tmpObjectValue = JSON.stringify(this.attribute.value);\n    }\n  }\n}\n","<div class=\"row\">\n  <div class=\"input-group m-1\">\n    <span class=\"input-group-text\">{{attribute.name}}</span>\n    @if (!isObject) {\n      <input class=\"form-control\" [(ngModel)]=\"attribute.value\" (change)=\"change()\"\n        [readonly]=\"readonly\" name=\"hs-query-attribute-row-input\">\n    }\n    @if (isObject) {\n      <textarea class=\"form-control\" name=\"attributeValue\" [(ngModel)]=\"tmpObjectValue\"\n        [readonly]=\"readonly\" (change)=\"change()\" name=\"hs-query-attribute-row-textarea\">\n      </textarea>\n    }\n  </div>\n</div>","import {BehaviorSubject, Observable} from 'rxjs';\nimport {Injectable, inject} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\nimport {Layer} from 'ol/layer';\nimport {Source, Vector as VectorSource} from 'ol/source';\n\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsQueryVectorService} from 'hslayers-ng/services/query';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {getTitle} from 'hslayers-ng/common/extensions';\nimport {isLayerDrawable} from 'hslayers-ng/services/utils';\n\nexport interface exportFormats {\n  name: 'WKT' | 'GeoJSON';\n  ext: string; //File extension\n  serializedData?: string; //Features as string according to WKT or GeoJSON\n  mimeType: string;\n  downloadData?: any; //Serialized/sanitized data suitable for href\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsFeatureCommonService {\n  private hsQueryVectorService = inject(HsQueryVectorService);\n  private hsToastService = inject(HsToastService);\n  private hsLanguageService = inject(HsLanguageService);\n  private hsMapService = inject(HsMapService);\n\n  listSubject = new BehaviorSubject<Layer<Source>[]>([] as Layer<Source>[]);\n\n  availableLayer$: Observable<Layer<Source>[]> =\n    this.listSubject.asObservable();\n\n  constructor() {\n    this.hsMapService.loaded().then((map) => {\n      map.getLayers().on('change:length', () => {\n        this.updateLayerList();\n      });\n      this.updateLayerList();\n    });\n  }\n\n  /**\n   * Translate string value to the selected UI language\n   * @param module - Locales json key\n   * @param text - Locales json key value\n   * @returns Translated text\n   */\n  translateString(module: string, text: string): string {\n    return this.hsLanguageService.getTranslationIgnoreNonExisting(\n      module,\n      text,\n      undefined,\n    );\n  }\n\n  /**\n   * Update layer list from the current app map\n   */\n  updateLayerList(): void {\n    const layers = this.hsMapService\n      .getLayersArray()\n      .filter((layer: Layer<Source>) => {\n        return isLayerDrawable(layer);\n      });\n    this.listSubject.next(layers);\n  }\n\n  /**\n   * Prepare features for export\n   * @param exportFormats - Export formats selected\n   * @param features - Features to export\n   */\n  toggleExportMenu(\n    exportFormats: exportFormats[],\n    features: Feature<Geometry>[] | Feature<Geometry>,\n  ): void {\n    for (const format of exportFormats) {\n      format.serializedData = this.hsQueryVectorService.exportData(\n        format.name,\n        features,\n      );\n    }\n  }\n\n  /**\n   * Move or copy feature/s\n   * @param type - Action type ('move' or 'copy')\n   * @param features - Features to interact with\n   * @param toLayer - Target layer\n   */\n  moveOrCopyFeature(\n    type: 'move' | 'copy',\n    features: Feature<Geometry>[],\n    toLayer: Layer<VectorSource>,\n  ): void {\n    features.forEach((feature) => {\n      feature.setStyle(null); //To prevent feature from getting individual style\n      toLayer.getSource().addFeature(feature.clone());\n      if (type == 'move') {\n        this.hsQueryVectorService.removeFeature(feature);\n      }\n    });\n    this.hsToastService.createToastPopupMessage(\n      this.hsLanguageService.getTranslation('QUERY.feature.featureEdited'),\n      this.hsLanguageService.getTranslation(\n        `QUERY.feature.feature${type}Succ`,\n        undefined,\n      ) + getTitle(toLayer),\n      {\n        type: 'success',\n        serviceCalledFrom: 'HsFeatureCommonService',\n      },\n    );\n  }\n}\n","import {AsyncPipe, NgClass} from '@angular/common';\nimport {\n  Component,\n  DestroyRef,\n  OnInit,\n  computed,\n  input,\n  inject,\n} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {NgbDropdownModule} from '@ng-bootstrap/ng-bootstrap';\nimport {Observable, map} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {Layer} from 'ol/layer';\n\nimport {HsDownloadDirective} from 'hslayers-ng/common/download';\nimport {HsFeatureCommonService, exportFormats} from '../feature-common.service';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsQueryAttributeRowComponent} from '../attribute-row/attribute-row.component';\nimport {HsQueryVectorService} from 'hslayers-ng/services/query';\nimport {getTitle} from 'hslayers-ng/common/extensions';\nimport {HsFeatureDescriptor} from 'hslayers-ng/types';\nimport {isLayerEditable} from 'hslayers-ng/services/utils';\n@Component({\n  selector: 'hs-query-feature',\n  templateUrl: './feature.component.html',\n  imports: [\n    TranslatePipe,\n    AsyncPipe,\n    FormsModule,\n    NgbDropdownModule,\n    HsDownloadDirective,\n    NgClass,\n    HsQueryAttributeRowComponent,\n  ],\n})\nexport class HsQueryFeatureComponent implements OnInit {\n  private hsMapService = inject(HsMapService);\n  private hsQueryVectorService = inject(HsQueryVectorService);\n  private hsFeatureCommonService = inject(HsFeatureCommonService);\n  private destroyRef = inject(DestroyRef);\n\n  feature = input<HsFeatureDescriptor>();\n\n  olFeature = computed(() => {\n    return this.feature().feature;\n  });\n\n  layer = computed(() => {\n    return this.hsMapService.getLayerForFeature(this.olFeature());\n  });\n\n  isFeatureRemovable = computed(() => {\n    const layer = this.layer();\n    if (layer) {\n      return isLayerEditable(layer);\n    }\n    return false;\n  });\n\n  attributeName = '';\n  attributeValue = '';\n  newAttribVisible = false;\n  exportFormats: exportFormats[] = [\n    {name: 'WKT', ext: 'wkt', mimeType: 'text/plain', downloadData: ''},\n    {\n      name: 'GeoJSON',\n      ext: 'geojson',\n      mimeType: 'application/json',\n      downloadData: '',\n    },\n  ];\n  exportMenuVisible = false;\n  editMenuVisible = false;\n  selectedLayer = null;\n  editType: 'move' | 'copy';\n  getTitle = getTitle;\n  availableLayers: Observable<Layer[]>;\n\n  ngOnInit(): void {\n    this.availableLayers = this.hsFeatureCommonService.availableLayer$.pipe(\n      takeUntilDestroyed(this.destroyRef),\n      map((layers) => {\n        if (!this.olFeature()) {\n          //Feature from WMS getFeatureInfo\n          return [];\n        }\n        const featureLayer = this.layer();\n        return layers.filter((layer) => layer != featureLayer);\n      }),\n    );\n  }\n\n  /**\n   * Set new feature attribute\n   * @param attributeName - New attribute name\n   * @param attributeValue - New attribute value\n   */\n  saveNewAttribute(attributeName: string, attributeValue): void {\n    const feature = this.olFeature();\n    if (feature) {\n      const getDuplicates = this.feature().attributes.filter(\n        (duplicate) => duplicate.name == attributeName,\n      );\n      if (getDuplicates.length == 0) {\n        const obj = {name: attributeName, value: attributeValue};\n        this.feature().attributes.push(obj);\n        feature.set(attributeName, attributeValue);\n      }\n    }\n    this.newAttribVisible = !this.newAttribVisible;\n    this.attributeName = '';\n    this.attributeValue = '';\n  }\n\n  /**\n   * Remove this feature\n   */\n  removeFeature(): void {\n    this.hsQueryVectorService.removeFeature(this.olFeature());\n  }\n\n  /**\n   * Zoom to this feature\n   */\n  zoomToFeature(): void {\n    const extent = this.olFeature().getGeometry().getExtent();\n    this.hsMapService.fitExtent(extent);\n  }\n\n  /**\n   * Toggle dropdown menus\n   * @param beingToggled - Menu name that is being toggled\n   * @param other - Other menu name to be closed if opened\n   */\n  toggleMenus(beingToggled: string, other: string): void {\n    this[other] = this[other] ? !this[other] : this[other];\n    this[beingToggled] = !this[beingToggled];\n  }\n\n  /**\n   * Toggle export menus\n   */\n  toggleExportMenu(): void {\n    this.hsFeatureCommonService.toggleExportMenu(\n      this.exportFormats,\n      this.olFeature(),\n    );\n    this.toggleMenus('exportMenuVisible', 'editMenuVisible');\n  }\n\n  /**\n   * Set edit type (move or copy)\n   * @param type - Type selected\n   */\n  editTypeSelected(type: 'move' | 'copy'): void {\n    this.editType = type;\n    this.editMenuVisible = !this.editMenuVisible;\n  }\n\n  /**\n   * Show or hide edit menu\n   */\n  toggleEditMenu(): void {\n    if (this.editType) {\n      this.editType = null;\n      return;\n    }\n    this.toggleMenus('editMenuVisible', 'exportMenuVisible');\n  }\n\n  /**\n   * Move or copy feature\n   */\n  moveOrCopyFeature(): void {\n    this.hsFeatureCommonService.moveOrCopyFeature(\n      this.editType,\n      [this.olFeature()],\n      this.selectedLayer,\n    );\n  }\n\n  /**\n   * Translate string value to the selected UI language\n   * @param module - Locales json key\n   * @param text - Locales json key value\n   * @returns Translated text\n   */\n  translateString(module: string, text: string): string {\n    return this.hsFeatureCommonService.translateString(module, text);\n  }\n}\n","@let f = feature();\n<div class=\"container-fluid\">\n  <div class=\"row\">\n    <div class=\"col-12 m-2\"><strong>{{f.name}} @if (f.layer) {\n      <span>{{'QUERY.feature.inLayer' |\n      translate }}</span>\n    }\n  {{f.layer}}</strong></div>\n</div>\n@for (attribute of f.attributes; track attribute) {\n  <hs-query-attribute-row [template]=\"f.hstemplate\"\n    [feature]=\"feature\" [attribute]=\"attribute\" [readonly]=\"isFeatureRemovable()\">\n  </hs-query-attribute-row>\n}\n@for (stat of f.stats; track stat) {\n  <hs-query-attribute-row [feature]=\"feature\" [attribute]=\"stat\" [readonly]=\"true\">\n  </hs-query-attribute-row>\n}\n\n@if (newAttribVisible) {\n  <div class=\"bg-light p-2 my-3\">\n    <div class=\"form-floating mb-3\">\n      <input class=\"form-control\" [placeholder]=\"attributeName\" [(ngModel)]=\"attributeName\"\n        name=\"hs-add-feature-attribute-name\">\n      <label for=\"hs-add-feature-attribute-name\">{{'QUERY.feature.attributeName' | translate }}</label>\n    </div>\n    <div class=\"form-floating mb-3\" [hidden]=\"!(attributeName && newAttribVisible)\">\n      <input class=\"form-control\" [placeholder]=\"attributeValue\" [(ngModel)]=\"attributeValue\"\n        name=\"hs-add-feature-attribute-value\">\n      <label for=\"hs-add-feature-attribute-value\">{{'QUERY.feature.attributeValue' | translate }}</label>\n    </div>\n    <div class=\"row justify-content-end\" [hidden]=\"!(attributeName && attributeValue && newAttribVisible)\">\n      <button class=\"btn btn-primary btn-sm w-auto d-flex gap-2 mx-2\"\n        (click)=\"saveNewAttribute(attributeName,attributeValue)\">{{'COMMON.save'\n        | translate}}<i class=\"fa-solid fa-floppy-disk\"></i></button>\n      </div>\n    </div>\n  }\n\n\n\n  <div [hidden]=\"!editType\" class=\"row p-2 \">\n    <div class=\"d-flex w-100 input-group input-group-sm align-items-baseline\">\n      <label for=\"selectedLayer\" class=\"px-2\">{{translateString('QUERY.feature',editType+'Feature')}}\n      {{'COMMON.into' | translate }}:</label>\n      <select class=\"form-control text-truncate\" [title]=\"'ADDLAYERS.Vector.chooseLayer' | translate  \"\n        [(ngModel)]=\"selectedLayer\" name=\"selectedLayer\">\n        <option [ngValue]=\"null\" [disabled]=\"true\" selected hidden> {{'ADDLAYERS.Vector.chooseLayer' |\n        translate }}</option>\n        @for (layer of availableLayers | async; track layer) {\n          <option [ngValue]=\"layer\">\n          {{'LAYERS.' + getTitle(layer) | translate : {fallbackValue: getTitle(layer)} }}</option>\n        }\n      </select>\n      <button class=\"btn btn-primary btn-sm\" (click)=\"moveOrCopyFeature()\" [disabled]=\"!selectedLayer\"><i\n      class=\"fa-solid fa-floppy-disk\"></i></button>\n    </div>\n  </div>\n</div>\n@if (olFeature() !== undefined) {\n  <div class=\"justify-content-end\" style=\"padding-left: 10px\">\n    <div class=\"mx-1 mb-2 text-end\">\n      <div class=\"btn-group\">\n        <button [disabled]=\"isFeatureRemovable()\" class=\"btn btn-secondary btn-sm\"\n          (click)=\"newAttribVisible = !newAttribVisible\"><i class=\"fa-solid fa-square-plus\"></i></button>\n          <button class=\"btn btn-secondary btn-sm\" (click)=\"zoomToFeature()\"><i class=\"fa-solid fa-magnifying-glass\"></i></button>\n          <div class=\"btn-group\" ngbDropdown placement=\"bottom\" display=\"dynamic\">\n            <button ngbDropdownToggle class=\"btn btn-secondary btn-sm\" type=\"button\" (click)=\"toggleEditMenu()\"><i\n            class=\"fa-solid fa-gears\"></i></button>\n            <div ngbDropdownMenu [ngClass]=\"{'show': editMenuVisible}\">\n              <a class=\"dropdown-item\" (click)=\"editTypeSelected('copy')\">{{'QUERY.feature.copyFeature' |\n              translate }}</a>\n              <a class=\"dropdown-item\" (click)=\"editTypeSelected('move')\">{{'QUERY.feature.moveFeature' |\n              translate }}</a>\n            </div>\n          </div>\n          <div class=\"btn-group\" ngbDropdown placement=\"bottom\" display=\"dynamic\">\n            <button ngbDropdownToggle class=\"btn btn-secondary btn-sm rounded-0\" type=\"button\"\n              (click)=\"toggleExportMenu()\" [title]=\"'QUERY.downloadAs' | translate  \"><i\n            class=\"fa-solid fa-download\"></i></button>\n            <div ngbDropdownMenu [ngClass]=\"{'show': exportMenuVisible}\">\n              @for (format of exportFormats; track format) {\n                <a class=\"dropdown-item\" [download]=\"format.name + '_file.' + format.ext\"\n                  [hsDownload]=\"format.serializedData\" [mimeType]=\"format.mimeType\" [href]=\"format.downloadData\"\n                  (downloadPrepared)=\"format.downloadData = $event\"\n                >{{format.name}}</a>\n              }\n            </div>\n          </div>\n          @if (isFeatureRemovable()) {\n            <button class=\"btn btn-danger btn-sm\" (click)=\"removeFeature()\"><i\n            class=\"fa-solid fa-trash\"></i></button>\n          }\n        </div>\n      </div>\n    </div>\n  }\n","import {AsyncPipe, NgClass, NgStyle, SlicePipe} from '@angular/common';\nimport {Component, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {NgbDropdownModule} from '@ng-bootstrap/ng-bootstrap';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {Feature, getUid} from 'ol';\nimport {Geometry} from 'ol/geom';\n\nimport {HsConfirmDialogComponent} from 'hslayers-ng/common/confirm';\nimport {HsDialogContainerService} from 'hslayers-ng/common/dialogs';\nimport {HsDownloadDirective} from 'hslayers-ng/common/download';\nimport {HsFeatureCommonService, exportFormats} from '../feature-common.service';\nimport {\n  HsQueryBaseService,\n  HsQueryVectorService,\n} from 'hslayers-ng/services/query';\nimport {HsQueryFeatureComponent} from '../feature/feature.component';\nimport {getTitle} from 'hslayers-ng/common/extensions';\n\n@Component({\n  selector: 'hs-query-feature-list',\n  templateUrl: './feature-list.component.html',\n  imports: [\n    TranslatePipe,\n    AsyncPipe,\n    FormsModule,\n    NgbDropdownModule,\n    HsDownloadDirective,\n    NgClass,\n    NgStyle,\n    HsQueryFeatureComponent,\n    SlicePipe,\n  ],\n})\nexport class HsQueryFeatureListComponent {\n  private hsQueryVectorService = inject(HsQueryVectorService);\n  private hsDialogContainerService = inject(HsDialogContainerService);\n  hsFeatureCommonService = inject(HsFeatureCommonService);\n  hsQueryBaseService = inject(HsQueryBaseService);\n\n  exportMenuVisible;\n  selectedFeaturesVisible = true;\n  exportFormats: exportFormats[] = [\n    {name: 'WKT', ext: 'wkt', mimeType: 'text/plain', downloadData: ''},\n    {\n      name: 'GeoJSON',\n      ext: 'geojson',\n      mimeType: 'application/json',\n      downloadData: '',\n    },\n  ];\n  editType = null;\n  editMenuVisible = false;\n  selectedLayer = null;\n  getTitle = getTitle;\n\n  /**\n   * Track item by OpenLayers feature, ol_uid value\n   * @param index - Index\n   * @param item - Item provided\n   */\n  trackById(index, item) {\n    if (item.feature) {\n      return getUid(item.feature);\n    }\n    return JSON.stringify(item);\n  }\n\n  /**\n   * Get OL feature array\n   * @returns Feature array\n   */\n  olFeatureArray(): Feature<Geometry>[] {\n    return this.hsQueryBaseService.features\n      .map((feature) => feature.feature)\n      .filter((f) => f);\n  }\n\n  /**\n   * Toggle dropdown menus\n   * @param beingToggled - Menu name that is being toggled\n   * @param other - Other menu name to be closed if opened\n   */\n  toggleMenus(beingToggled: string, other: string): void {\n    this[other] = this[other] ? !this[other] : this[other];\n    this[beingToggled] = !this[beingToggled];\n  }\n\n  /**\n   * Toggle export menu\n   */\n  toggleExportMenu(): void {\n    this.hsFeatureCommonService.toggleExportMenu(\n      this.exportFormats,\n      this.olFeatureArray(),\n    );\n    this.toggleMenus('exportMenuVisible', 'editMenuVisible');\n  }\n\n  /**\n   * Toggle edit menu\n   */\n  toggleEditMenu(): void {\n    if (this.editType) {\n      this.editType = null;\n      return;\n    }\n    this.toggleMenus('editMenuVisible', 'exportMenuVisible');\n  }\n\n  /**\n   * Set edit type\n   * @param type - Type selected\n   */\n  editTypeSelected(type: string): void {\n    this.editType = type;\n    this.editMenuVisible = !this.editMenuVisible;\n  }\n\n  /**\n   * Move or copy feature\n   */\n  moveOrCopyFeature(): void {\n    this.hsFeatureCommonService.moveOrCopyFeature(\n      this.editType,\n      this.olFeatureArray(),\n      this.selectedLayer,\n    );\n  }\n\n  /**\n   * Remove all selected features\n   */\n  async removeAllSelectedFeatures(): Promise<void> {\n    const dialog = this.hsDialogContainerService.create(\n      HsConfirmDialogComponent,\n      {\n        message: 'QUERY.reallyDeleteAllSelectedLayers',\n        title: 'COMMON.confirmDelete',\n      },\n    );\n    const confirmed = await dialog.waitResult();\n    if (confirmed == 'yes') {\n      for (const feature of this.hsQueryBaseService.features.filter((f) =>\n        this.hsQueryVectorService.isFeatureRemovable(f.feature),\n      )) {\n        //Give HsQueryVectorService.featureRemovals time to splice QueryBase.data.features\n        setTimeout(() => {\n          this.hsQueryVectorService.removeFeature(feature.feature);\n        }, 250);\n      }\n    }\n  }\n\n  /**\n   * Translate string value to the selected UI language\n   * @param module - Locales json key\n   * @param text - Locales json key value\n   * @returns Translated text\n   */\n  translateString(module: string, text: string): string {\n    return this.hsFeatureCommonService.translateString(module, text);\n  }\n}\n","<ng-container>\n  @if (hsQueryBaseService.features.length > 0) {\n    <div class=\"navbar navbar-light bg-light px-1\">\n      <div class=\"d-flex align-items-baseline w-100\">\n        <div class=\"d-flex align-items-baseline\" style=\"flex: 1;\">\n          <p class=\"m-0\" [ngStyle]=\"{'flex' : hsQueryBaseService.features.length > 1 ? '' : '1'}\">\n            {{'QUERY.featuresSelected' | translate }}{{hsQueryBaseService.features.length}}\n          </p>\n          <button type=\"button\" class=\"btn dropdown-toggle border-0 ms-2\"\n            [title]=\"'HISTORY.toggleDropdown' | translate  \"\n            (click)=\"selectedFeaturesVisible = !selectedFeaturesVisible\">\n          </button>\n        </div>\n        @if (olFeatureArray().length > 0) {\n          <div class=\"btn-group\">\n            <div class=\"btn-group\" ngbDropdown placement=\"bottom\" display=\"dynamic\">\n              <button ngbDropdownToggle class=\"btn btn-secondary btn-sm\" type=\"button\"\n                (click)=\"toggleEditMenu()\"><i class=\"fa-solid fa-gears\"></i></button>\n              <div ngbDropdownMenu [ngClass]=\"{'show': editMenuVisible}\">\n                <a class=\"dropdown-item\" (click)=\"editTypeSelected('copy')\">{{'QUERY.feature.copyFeatures' |\n                  translate }}</a>\n                <a class=\"dropdown-item\" (click)=\"editTypeSelected('move')\">{{'QUERY.feature.moveFeatures' |\n                  translate }}</a>\n              </div>\n            </div>\n            <div class=\"btn-group\" ngbDropdown placement=\"bottom\" display=\"dynamic\">\n              <button ngbDropdownToggle class=\"btn btn-secondary btn-sm rounded-0\" type=\"button\"\n                [title]=\"'QUERY.downloadAs' | translate  \" (click)=\"toggleExportMenu()\"><i\n                class=\"fa-solid fa-download\"></i></button>\n              <div ngbDropdownMenu [ngClass]=\"{'show': exportMenuVisible}\">\n                @for (format of exportFormats; track format) {\n                  <a class=\"dropdown-item\"\n                    [download]=\"format.name + '_file.' + format.ext\" [hsDownload]=\"format.serializedData\"\n                    [mimeType]=\"format.mimeType\" [href]=\"format.downloadData\"\n                    (downloadPrepared)=\"format.downloadData = $event\">\n                  {{format.name}}</a>\n                }\n              </div>\n            </div>\n            <button type=\"button\" class=\"btn-danger btn btn-sm border-0\"\n              [title]=\"'QUERY.deleteAllSelected' | translate  \" (click)=\"removeAllSelectedFeatures()\">\n              <i class=\"fa-solid fa-trash\"></i>\n            </button>\n          </div>\n        }\n      </div>\n      @if (editType) {\n        <div class=\"d-flex p-2 w-100\">\n          <div class=\"d-flex w-100 input-group input-group-sm align-items-baseline\">\n            <label for=\"selectedLayer\" class=\"px-2\">{{translateString('QUERY.feature',editType+'Features')}}\n            {{'COMMON.into' | translate }}:</label>\n            <select class=\"form-control text-truncate\" [(ngModel)]=\"selectedLayer\" name=\"selectedLayer\"\n              [title]=\"'ADDLAYERS.Vector.chooseLayer' | translate  \">\n              <option [ngValue]=\"null\" [disabled]=\"true\" selected hidden> {{'ADDLAYERS.Vector.chooseLayer' |\n              translate }}</option>\n              @for (layer of hsFeatureCommonService.availableLayer$ | async; track layer) {\n                <option [ngValue]=\"layer\">\n                {{'LAYERS.' + getTitle(layer) | translate : {fallbackValue: getTitle(layer)} }}</option>\n              }\n            </select>\n            <button class=\"btn btn-primary btn-sm\" (click)=\"moveOrCopyFeature()\" [disabled]=\"!selectedLayer\"><i\n            class=\"fa-solid fa-floppy-disk\"></i></button>\n          </div>\n        </div>\n      }\n    </div>\n  }\n  @if (selectedFeaturesVisible) {\n    <div>\n      @for (item of hsQueryBaseService.features | slice:0:50; track trackById($index, item)) {\n        <hs-query-feature\n          [feature]=\"item\">\n        </hs-query-feature>\n      }\n    </div>\n  }\n</ng-container>\n","import {Component, OnInit, inject} from '@angular/core';\nimport {NgbDropdownModule} from '@ng-bootstrap/ng-bootstrap';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsQueryBaseService} from 'hslayers-ng/services/query';\nimport {HsQueryFeatureListComponent} from '../feature-list/feature-list.component';\n\n@Component({\n  selector: 'hs-query-default-info-panel-body',\n  templateUrl: './default-info-panel-body.component.html',\n  imports: [HsQueryFeatureListComponent, NgbDropdownModule, TranslatePipe],\n})\nexport class HsQueryDefaultInfoPanelBodyComponent implements OnInit {\n  hsQueryBaseService = inject(HsQueryBaseService);\n\n  featureInfoExpanded: boolean;\n  ngOnInit(): void {\n    this.featureInfoExpanded = true;\n  }\n}\n","@if ((hsQueryBaseService.features.length > 0) || (hsQueryBaseService.coordinates.length > 0)) {\n<div class=\"card hs-main-panel\">\n  <div class=\"card-body\">\n    @if(hsQueryBaseService.featureInfoHtmls.length > 0) {\n    <div ngbDropdown>\n      <button ngbDropdownToggle class=\"btn btn-light w-100 rounded-0\">\n        {{'QUERY.featureInfo' | translate }}\n      </button>\n      @for (html of hsQueryBaseService.featureInfoHtmls; track html) {\n      <div ngbDropdownMenu class=\"position-relative w-100 px-1 mt-1\" [innerHtml]=\"html\"></div>\n      }\n    </div>\n    }\n    @else if(hsQueryBaseService.wmsFeatureInfoLoading) {\n    <div class=\"d-flex justify-content-center p-2\" style=\"min-height: 38px;\"><span\n        class=\"hs-loader hs-loader-dark ml-auto\"></span></div>\n    }\n    <hs-query-feature-list />\n    <table class=\"table table-striped\" style=\"table-layout:fixed\"\n      [hidden]=\"!(hsQueryBaseService.attributes.length > 0)\">\n      <tbody>\n        @for (attribute of hsQueryBaseService.attributes; track attribute) {\n        <tr>\n          <td class=\"first-col\">{{attribute.name}}</td>\n          <td class=\"second-col\" [innerHtml]=\"attribute.value\"></td>\n        </tr>\n        }\n      </tbody>\n    </table>\n  </div>\n  <iframe id=\"invisible_popup\" style=\"display:block; z-index:12122;left:-10000px; position:absolute\"></iframe>\n</div>\n}","import {inject, Injectable} from '@angular/core';\n\nimport WMTSTileGrid from 'ol/tilegrid/WMTS';\nimport {Layer} from 'ol/layer';\nimport {WMTS} from 'ol/source';\nimport {get as getProjection, transform} from 'ol/proj';\n\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {getInfoFormat} from 'hslayers-ng/common/extensions';\nimport {paramsToURLWoEncode} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsQueryWmtsService {\n  hsMapService = inject(HsMapService);\n\n  /**\n   * Parse request URL\n   * @param layer - Layer to Query\n   * @param coordinate - Clicked coordinates\n   * @returns Request URL and format\n   */\n  async parseRequestURL(\n    layer: Layer<WMTS>,\n    coordinate: number[],\n  ): Promise<{url: string; format: string}> {\n    const source = layer.getSource();\n\n    if (getProjection(source.getProjection())) {\n      coordinate = transform(\n        coordinate,\n        this.hsMapService.getCurrentProj(),\n        source.getProjection(),\n      );\n    }\n\n    const tileGrid = source.getTileGrid() as WMTSTileGrid;\n    const tileCoord = tileGrid.getTileCoordForCoordAndResolution(\n      coordinate,\n      this.hsMapService.getMap().getView().getResolution(),\n    );\n\n    const tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n\n    const tileResolution = tileGrid.getResolution(tileCoord[0]);\n    const tileMatrix = tileGrid.getMatrixIds()[tileCoord[0]];\n\n    // I.J params (clicked pixel position relative to tile)\n    const x = Math.floor(\n      (coordinate[0] - tileExtent[0]) / (tileResolution / 1),\n    ); //pixelRatio\n    const y = Math.floor(\n      (tileExtent[3] - coordinate[1]) / (tileResolution / 1),\n    ); //pixelRatio\n\n    const urls = source.getUrls()[0];\n\n    const params = {\n      LAYER: source.getLayer(),\n      service: 'WMTS',\n      INFOFORMAT: getInfoFormat(layer),\n      REQUEST: 'GetFeatureInfo',\n      TileCol: tileCoord[1],\n      TileRow: tileCoord[2],\n      I: x,\n      J: y,\n      TILEMATRIXSET: source.getMatrixSet(),\n      TileMatrix: tileMatrix,\n      feature_count: source.getLayer().length,\n    };\n\n    const url = [urls, paramsToURLWoEncode(params)].join('');\n    return {\n      url: url,\n      format: params.INFOFORMAT,\n    };\n  }\n}\n","import {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\nimport {Image as ImageLayer, Layer, Tile} from 'ol/layer';\nimport {ImageWMS, Source, TileWMS, WMTS} from 'ol/source';\nimport {GeoJSON, WMSGetFeatureInfo} from 'ol/format';\nimport {lastValueFrom} from 'rxjs';\n\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {getLayerName, HsProxyService, instOf} from 'hslayers-ng/services/utils';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsQueryBaseService} from 'hslayers-ng/services/query';\nimport {HsQueryWmtsService} from './query-wmts.service';\nimport {\n  getBase,\n  getFeatureInfoLang,\n  getFeatureInfoTarget,\n  getInfoFormat,\n  getPopupClass,\n  getQueryFilter,\n} from 'hslayers-ng/common/extensions';\nimport {jsonGetFeatureInfo} from 'hslayers-ng/common/get-feature-info';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsQueryWmsService {\n  private hsMapService = inject(HsMapService);\n  private hsLanguageService = inject(HsLanguageService);\n  private httpClient = inject(HttpClient);\n  private hsLogService = inject(HsLogService);\n  private hsQueryWmtsService = inject(HsQueryWmtsService);\n  private hsQueryBaseService = inject(HsQueryBaseService);\n  private hsProxyService = inject(HsProxyService);\n\n  infoCounter = 0;\n\n  constructor() {\n    this.hsQueryBaseService.getFeatureInfoStarted.subscribe((evt) => {\n      this.infoCounter = 0;\n      this.hsMapService.getLayersArray().forEach((layer: Layer<Source>) => {\n        if (getBase(layer) == true || layer.get('queryable') == false) {\n          return;\n        }\n        if (getQueryFilter(layer) != undefined) {\n          const filter = getQueryFilter(layer);\n          if (!filter(this.hsMapService.getMap(), layer, evt.pixel)) {\n            return;\n          }\n        }\n        this.queryWmsLayer(\n          instOf(layer, Tile)\n            ? (layer as Layer<TileWMS>)\n            : (layer as Layer<ImageWMS>),\n          evt.coordinate,\n        );\n      });\n    });\n  }\n\n  /**\n   * Request information about clicked WMS layer coordinates\n   * @param url - Request URL\n   * @param infoFormat - Request information format\n   * @param coordinate - Clicked coordinates\n   * @param layer - Target layer\n   */\n  async request(\n    url: string,\n    infoFormat: string,\n    coordinate: number[],\n    layer: Layer<Source>,\n  ): Promise<void> {\n    this.infoCounter++;\n    if (this.infoCounter > 1) {\n      this.hsQueryBaseService.multiWmsQuery = true;\n    }\n\n    const req_url = this.hsProxyService.proxify(url);\n    const reqHash = this.hsQueryBaseService.currentQuery;\n    try {\n      const headers = new Headers({'Content-Type': 'text'});\n      headers.set('Accept', 'text');\n      const response = await lastValueFrom(\n        this.httpClient.get(req_url, {\n          headers: new HttpHeaders().set('Content-Type', 'text'),\n          responseType: 'text',\n        }),\n      );\n\n      if (reqHash != this.hsQueryBaseService.currentQuery) {\n        return;\n      }\n      this.featureInfoReceived(response, infoFormat, coordinate, layer);\n    } catch (exception) {\n      if (reqHash != this.hsQueryBaseService.currentQuery) {\n        return;\n      }\n      this.featureInfoError(coordinate, exception);\n    }\n  }\n\n  /**\n   * Error callback to decrease infoCounter\n   * @param coordinate - Clicked coordinates\n   * @param exception - Error caught\n   */\n  featureInfoError(coordinate: number[], exception): void {\n    this.infoCounter--;\n    this.hsLogService.warn(exception);\n    if (this.infoCounter === 0) {\n      this.queriesCollected(coordinate);\n    }\n  }\n\n  /**\n   * Parse Information from GetFeatureInfo request. If result came in XML format, Infopanel data are updated. If response is in HTML, popup window is updated and shown.\n   * @param response - Response of GetFeatureInfoRequest\n   * @param infoFormat - Format of GetFeatureInfoResponse\n   * @param coordinate - Coordinate of request\n   * @param layer - Target layer\n   */\n  featureInfoReceived(\n    response: string,\n    infoFormat: string,\n    coordinate: number[],\n    layer: Layer<Source>,\n  ): void {\n    if (infoFormat.includes('xml') || infoFormat.includes('gml')) {\n      const parser = new WMSGetFeatureInfo();\n      const features = parser.readFeatures(response);\n      this.parseXmlResponse(features, layer);\n    }\n    if (infoFormat.includes('html')) {\n      if (response.length <= 1) {\n        this.infoCounter--;\n        if (this.infoCounter === 0) {\n          this.queriesCollected(coordinate);\n        }\n        return;\n      }\n      if (getFeatureInfoTarget(layer) === 'info-panel') {\n        this.hsQueryBaseService.pushFeatureInfoHtml(response);\n      } else {\n        this.hsQueryBaseService.fillIframeAndResize(\n          response,\n          this.hsQueryBaseService.multiWmsQuery,\n        );\n        if (getPopupClass(layer) != undefined) {\n          this.hsQueryBaseService.popupClassname =\n            'ol-popup ' + getPopupClass(layer);\n        }\n      }\n    }\n    if (infoFormat.includes('json')) {\n      const parsed = JSON.parse(response) as jsonGetFeatureInfo;\n      this.parseJSONResponse(parsed, layer);\n    }\n    this.infoCounter--;\n    if (this.infoCounter === 0) {\n      this.queriesCollected(coordinate);\n    }\n  }\n\n  /**\n   * Parse information from a GetFeatureInfo response with INFO_FORMAT containing\n   * 'json' (e.g. application/json). The response is a GeoJSON-like object;\n   * features are converted to OpenLayers Feature instances for the query panel.\n   * @param response - Parsed GetFeatureInfo JSON body (GeoJSON FeatureCollection-like)\n   * @param layer - Target WMS layer\n   */\n  parseJSONResponse(response: jsonGetFeatureInfo, layer: Layer<Source>): void {\n    const geojsonFormat = new GeoJSON();\n    for (const geojsonFeature of response.features ?? []) {\n      const properties = geojsonFeature.properties ?? {};\n      const olFeature = geojsonFormat.readFeature(\n        geojsonFeature,\n      ) as Feature<Geometry>;\n      const group = {\n        name: 'Feature',\n        layer: getLayerName(layer),\n        attributes: Object.entries(properties).map(([key, value]) => ({\n          name: key,\n          value,\n        })),\n        feature: olFeature,\n        stats: [],\n      };\n      this.hsQueryBaseService.setFeatures(group);\n    }\n  }\n\n  /**\n   * Parse Information from XML based GetFeatureInfo response.\n   * @param features - Parsed features\n   * @param layer - Target layer\n   */\n  parseXmlResponse(features: Feature<Geometry>[], layer: Layer<Source>): void {\n    let updated = false;\n    features.forEach((feature) => {\n      /**\n       * TODO: Layered response need to be refactored as well but I haven't found an example yet\n       * so I don't really know how to handle those. Multiple layers in one request are handled by loop\n       */\n      //const layerName = getTitle(layer) || getName(layer);\n      // const layers = feature.getElementsByTagName('Layer');\n      // for (const fioLayer of Array.from(layers)) {\n      //   const featureName = fioLayer.attributes[0].nodeValue;\n      //   const attrs = fioLayer.getElementsByTagName('Attribute');\n      //   const attributes = [];\n      //   for (const attr of Array.from(attrs)) {\n      //     attributes.push({\n      //       'name': attr.attributes[0].nodeValue,\n      //       'value': attr.innerHTML,\n      //     });\n      //   }\n      //   const group = {\n      //     layer: layerName,\n      //     name: featureName,\n      //     attributes,\n      //     customInfoTemplate,\n      //   };\n      //   this.updateFeatureList(updated, group);\n      // }\n      const geometryName = feature.getGeometryName();\n      const group = {\n        name: 'Feature',\n        layer: getLayerName(layer),\n        attributes: Object.entries(feature.getProperties())\n          .filter((attr) => attr[0] !== geometryName)\n          .map(([key, value]) => {\n            updated = true;\n            return {\n              'name': key,\n              'value': value,\n            };\n          }),\n        feature: feature,\n        stats: [],\n      };\n      if (updated) {\n        this.hsQueryBaseService.setFeatures(group);\n      }\n    });\n  }\n\n  /**\n   * Acknowledge that queries for clicked coordinates have been collected\n   * @param coordinate - Clicked coordinates\n   */\n  queriesCollected(coordinate: number[]): void {\n    this.hsQueryBaseService.multiWmsQuery = false;\n    this.hsQueryBaseService.wmsFeatureInfoLoading = false;\n\n    const invisiblePopup: any = this.hsQueryBaseService.getInvisiblePopup();\n    if (\n      this.hsQueryBaseService.features.length > 0 ||\n      invisiblePopup.contentDocument.body.innerHTML.length > 30\n    ) {\n      this.hsQueryBaseService.getFeatureInfoCollected.next(coordinate);\n    }\n  }\n\n  /**\n   * Get FeatureInfo from WMS queryable layer (only if format of response is XML/GML/HTML). Use hs.query.service_getwmsfeatureinfo service for request and parsing response.\n   * @param layer - Layer to Query\n   * @param coordinate - Clicked coordinates\n   */\n  queryWmsLayer(\n    layer: Layer<TileWMS | ImageWMS | WMTS>,\n    coordinate: number[],\n  ): void {\n    if (this.isLayerWmsQueryable(layer)) {\n      /*\n       * Reset info panel before new request/set of requests.\n       * To prevent appending to previous query results\n       */\n      if (this.infoCounter === 0) {\n        const invisiblePopup = this.hsQueryBaseService.getInvisiblePopup();\n        if (invisiblePopup) {\n          invisiblePopup.contentDocument.body.innerHTML = '';\n        }\n        if (getFeatureInfoTarget(layer) === 'info-panel') {\n          this.hsQueryBaseService.wmsFeatureInfoLoading = true;\n        }\n        this.hsQueryBaseService.featureInfoHtmls = [];\n      }\n      if (instOf(layer.getSource(), WMTS)) {\n        this.hsQueryWmtsService\n          .parseRequestURL(layer as Layer<WMTS>, coordinate)\n          .then((res) => {\n            this.request(res.url, res.format, coordinate, layer);\n          });\n        return;\n      }\n\n      let source: ImageWMS | TileWMS;\n      if (instOf(layer.getSource(), ImageWMS)) {\n        source = layer.getSource() as ImageWMS;\n      } else if (instOf(layer.getSource(), TileWMS)) {\n        source = layer.getSource() as TileWMS;\n      }\n\n      const info_format = source.getParams().INFO_FORMAT;\n      const map = this.hsMapService.getMap();\n      const viewResolution = map.getView().getResolution();\n      let url = source.getFeatureInfoUrl(\n        coordinate,\n        viewResolution,\n        source.getProjection()\n          ? source.getProjection()\n          : this.hsMapService.getCurrentProj(),\n        {\n          INFO_FORMAT: info_format,\n          /**\n           * FIXME: Might return multiple results for the same layer not always 1 of each\n           */\n          feature_count: source.getParams().LAYERS.split(',').length || 1,\n        },\n      );\n      if (\n        getFeatureInfoLang(layer) &&\n        getFeatureInfoLang(layer)[this.hsLanguageService.language]\n      ) {\n        if (instOf(source, TileWMS)) {\n          url = url.replace(\n            (source as TileWMS).getUrls()[0],\n            getFeatureInfoLang(layer)[this.hsLanguageService.language],\n          );\n        } else {\n          url = url.replace(\n            (source as ImageWMS).getUrl(),\n            getFeatureInfoLang(layer)[this.hsLanguageService.language],\n          );\n        }\n      }\n      if (url) {\n        //this.hsLogService.log(url);\n        if (\n          ['xml', 'html', 'json', 'gml'].some((o) => info_format.includes(o))\n        ) {\n          this.request(url, info_format, coordinate, layer);\n        }\n      }\n    }\n  }\n\n  /**\n   * Check if the selected layer is queryable\n   * @param layer - Layer selected\n   * @returns True if the layer is queryable, false otherwise\n   */\n  isLayerWmsQueryable(layer: Layer<ImageWMS | TileWMS | WMTS>): boolean {\n    if (!layer.getVisible()) {\n      return false;\n    }\n    if (instOf(layer, Tile)) {\n      if (\n        instOf(layer.getSource(), TileWMS) &&\n        (layer.getSource() as TileWMS).getParams().INFO_FORMAT\n      ) {\n        return true;\n      }\n      if (instOf(layer.getSource(), WMTS) && getInfoFormat(layer)) {\n        return true;\n      }\n    }\n    if (\n      instOf(layer, ImageLayer) &&\n      instOf(layer.getSource(), ImageWMS) &&\n      (layer.getSource() as ImageWMS).getParams().INFO_FORMAT\n    ) {\n      return true;\n    }\n    return false;\n  }\n}\n","import {InjectionToken, Type} from '@angular/core';\n\nexport const QUERY_INFO_PANEL = new InjectionToken<Type<any>>(\n  'QUERY_INFO_PANEL',\n);\n","//TODO: Check if this import is still needed. Breaks production though\n//import 'ol-popup/src/ol-popup.css';\nimport {AsyncPipe, NgClass, NgComponentOutlet} from '@angular/common';\nimport {Component, Injector, OnInit, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {debounceTime, takeUntil} from 'rxjs/operators';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport Popup from 'ol-popup';\n\nimport {HsDrawService} from 'hslayers-ng/services/draw';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  HsPanelBaseComponent,\n  HsPanelHeaderComponent,\n} from 'hslayers-ng/common/panels';\nimport {\n  HsQueryBaseService,\n  HsQueryVectorService,\n} from 'hslayers-ng/services/query';\nimport {HsQueryDefaultInfoPanelBodyComponent} from './default-info-panel-body/default-info-panel-body.component';\nimport {HsQueryWmsService} from './query-wms.service';\nimport {QUERY_INFO_PANEL} from './query.tokens';\n\n@Component({\n  selector: 'hs-query',\n  templateUrl: './query.component.html',\n  imports: [\n    TranslatePipe,\n    HsPanelHeaderComponent,\n    AsyncPipe,\n    NgClass,\n    FormsModule,\n    NgComponentOutlet,\n  ],\n})\nexport class HsQueryComponent extends HsPanelBaseComponent implements OnInit {\n  hsQueryBaseService = inject(HsQueryBaseService);\n  private hsMapService = inject(HsMapService);\n  private hsLog = inject(HsLogService);\n  private hsQueryVectorService = inject(HsQueryVectorService);\n  private hsDrawService = inject(HsDrawService);\n  private hsQueryWmsService = inject(HsQueryWmsService);\n  // Inject QUERY_INFO_PANEL if available, otherwise fallback to HsQueryDefaultInfoPanelBodyComponent\n  infoPanelComponent =\n    inject(QUERY_INFO_PANEL, {optional: true}) ||\n    HsQueryDefaultInfoPanelBodyComponent;\n  injector = inject(Injector);\n\n  popup = new Popup();\n  popupOpens: Subject<any> = new Subject();\n  name = 'query';\n  //To deactivate queries (unsubscribe subscribers) per app\n  queryDeactivator = new Subject<void>();\n\n  async ngOnInit() {\n    super.ngOnInit();\n    this.popupOpens\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((source) => {\n        if (source && source != 'hs.query' && this.popup !== undefined) {\n          this.popup.hide();\n        }\n      });\n\n    this.hsQueryVectorService.featureRemovals\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((feature) => {\n        const featureIdxInQuery = this.hsQueryBaseService.features\n          .map((fDescription) => fDescription.feature)\n          .filter((f) => f)\n          .indexOf(feature);\n        if (featureIdxInQuery < 0) {\n          // should not happen as the hsQueryBaseService.features array can't be manipulated from other place in the GUI,\n          // but it could be done programmatically\n          return;\n        }\n        this.hsQueryBaseService.features.splice(featureIdxInQuery, 1);\n      });\n    this.hsMapService.loaded().then((map) => {\n      map.addOverlay(this.popup);\n    });\n    //add current panel queryable - activate/deactivate\n    this.hsLayoutService.mainpanel$\n      .pipe(debounceTime(250), takeUntilDestroyed(this.destroyRef))\n      .subscribe((which) => {\n        if (this.hsQueryBaseService.currentPanelQueryable()) {\n          if (\n            !this.hsQueryBaseService.queryActive &&\n            !this.hsDrawService.drawActive\n          ) {\n            this.hsQueryBaseService.activateQueries();\n          }\n          const panelSpace = this.hsLayoutService.contentWrapper.querySelector(\n            '.hs-panelspace',\n          ) as HTMLElement;\n          if (panelSpace) {\n            panelSpace.classList.remove('panel-collapsed');\n          }\n        } else {\n          if (this.hsQueryBaseService.queryActive) {\n            this.hsQueryBaseService.deactivateQueries();\n          }\n        }\n      });\n    this.hsQueryBaseService.queryStatusChanges\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((status) => {\n        this.queryStatusChanged(status);\n      });\n    const active = this.hsQueryBaseService.queryActive;\n    if (active) {\n      this.queryStatusChanged(active);\n    }\n  }\n\n  /**\n   * Act on query status changes\n   * @param active - Query status state\n   */\n  queryStatusChanged(active: boolean): void {\n    if (!active) {\n      this.queryDeactivator.next();\n      return;\n    }\n    this.hsQueryBaseService.getFeatureInfoStarted\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .pipe(takeUntil(this.queryDeactivator))\n      .subscribe((evt) => {\n        this.popup.hide();\n        if (\n          this.hsQueryBaseService.currentPanelQueryable() &&\n          this.hsLayoutService.mainpanel != 'draw'\n        ) {\n          this.hsLayoutService.setMainPanel('query');\n        }\n      });\n\n    this.hsQueryBaseService.getFeatureInfoCollected\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .pipe(takeUntil(this.queryDeactivator))\n      .subscribe((coordinate) => {\n        const invisiblePopup: HTMLIFrameElement =\n          this.hsQueryBaseService.getInvisiblePopup();\n        if (!invisiblePopup) {\n          return;\n        }\n        const bodyElementsFound = this.checkForBodyElements(\n          invisiblePopup.contentDocument.body.children,\n        );\n        if (!bodyElementsFound) {\n          return;\n        }\n        //TODO: don't count style, title, meta towards length\n        if (this.hsQueryBaseService.popupClassname.length > 0) {\n          this.popup.getElement().className =\n            this.hsQueryBaseService.popupClassname;\n        } else {\n          this.popup.getElement().className = 'ol-popup';\n        }\n        if (!coordinate) {\n          //FIXME: why setting empty coordinates for pop-up?\n          this.hsLog.log('empty coordinates for', this.popup);\n        } else {\n          this.popup.show(\n            coordinate,\n            invisiblePopup.contentDocument.body.innerHTML,\n          );\n          this.popupOpens.next('hs.query');\n        }\n      });\n  }\n\n  /**\n   * Check if popup HTML body contains valid elements\n   * @param docChildren - Popup HTML collection\n   * @returns True or false\n   */\n  checkForBodyElements(docChildren: HTMLCollection): boolean {\n    return Array.from(docChildren).some((ch: any) => {\n      if (ch.tagName == 'TITLE' && ch.title == '') {\n        return false;\n      }\n      return (\n        ch.tagName != 'SERVICEEXCEPTIONREPORT' &&\n        ch.tagName != 'META' &&\n        ch.tagName != 'STYLE'\n      );\n    });\n  }\n\n  /**\n   * Check if any feature is selected\n   * @returns True or false\n   */\n  noFeatureSelected(): boolean {\n    return (\n      this.hsQueryBaseService == undefined ||\n      (this.hsQueryBaseService.features.length == 0 &&\n        (this.hsQueryBaseService.coordinates === undefined ||\n          this.hsQueryBaseService.coordinates.length == 0))\n    );\n  }\n}\n","@if (isVisible$ | async) {\n<div class=\"card hs-main-panel\" [ngClass]=\"panelWidthClass\">\n  <hs-panel-header name=\"query\" [panelTabs]=\"'INFO'\"></hs-panel-header>\n  @if (noFeatureSelected()) {\n  <div class=\"card hs-main-panel\">\n    <div class=\"d-flex flex-column align-items-center p-4\">\n      <i class=\"fa-solid fa-arrow-pointer bg-primary p-3 text-white rounded \"\n        style=\"font-size: 1.5rem; color:hsl(208, 100%, 97%)\"></i>\n      <p class=\"h4\">{{'QUERY.infoPanel.noFeaturesSelected' | translate }}</p>\n      <p class=\"small\">{{'QUERY.infoPanel.clickOnMap' | translate }}</p>\n    </div>\n  </div>\n  }\n  @if (hsLayoutService.mainpanel === 'query') {\n  <ng-container *ngComponentOutlet=\"infoPanelComponent; injector: injector\">\n  </ng-container>\n  }\n  @if (hsQueryBaseService?.coordinates !== undefined && hsQueryBaseService?.coordinates.length > 0) {\n  <div class=\"container-fluid\">\n    <div class=\"row\">\n      <div class=\"col-12 m-2\"><strong>{{hsQueryBaseService?.coordinates[0].name}}</strong></div>\n    </div>\n    <div class=\"row\">\n      <div class=\"input-group m-1\">\n        @if (hsQueryBaseService?.coordinates.length>0) {\n        <select class=\"form-control form-select w-auto\" [(ngModel)]=\"hsQueryBaseService.selectedProj\"\n          [ngModelOptions]=\"{standalone: true}\">\n          @for (projection of hsQueryBaseService.coordinates[0].projections; track projection.value) {\n          <option [ngValue]=\"projection\">{{projection.name}}</option>\n          }\n        </select>\n        }\n        <input class=\"form-control\" style=\"width: min-content;\" [value]=\"hsQueryBaseService.selectedProj.value\"\n          readonly=\"\">\n      </div>\n    </div>\n  </div>\n  }\n</div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getProjection","ImageLayer"],"mappings":"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"}