{"version":3,"file":"hslayers-ng-common-query-popup.mjs","sources":["../../../projects/hslayers/common/query-popup/query-popup-widget-base.component.ts","../../../projects/hslayers/common/query-popup/widgets/clear-layer.component.ts","../../../projects/hslayers/common/query-popup/widgets/clear-layer.component.html","../../../projects/hslayers/common/query-popup/widgets/dynamic-text.component.ts","../../../projects/hslayers/common/query-popup/widgets/dynamic-text.component.html","../../../projects/hslayers/common/query-popup/widgets/feature-info.component.ts","../../../projects/hslayers/common/query-popup/widgets/feature-info.component.html","../../../projects/hslayers/common/query-popup/widgets/layer-name.component.ts","../../../projects/hslayers/common/query-popup/widgets/layer-name.component.html","../../../projects/hslayers/common/query-popup/query-popup-widget-container.service.ts","../../../projects/hslayers/common/query-popup/query-popup.component.ts","../../../projects/hslayers/common/query-popup/query-popup.component.html","../../../projects/hslayers/common/query-popup/popup-data.ts","../../../projects/hslayers/common/query-popup/query-popup-base.service.ts","../../../projects/hslayers/common/query-popup/query-popup.service.ts","../../../projects/hslayers/common/query-popup/query-popup.module.ts","../../../projects/hslayers/common/query-popup/hslayers-ng-common-query-popup.ts"],"sourcesContent":["import {BehaviorSubject} from 'rxjs';\nimport {Component, ViewRef} from '@angular/core';\n\nimport {HsPanelComponent} from 'hslayers-ng/common/panels';\n@Component({\n  template: '<div></div>',\n  standalone: false,\n})\nexport class HsQueryPopupWidgetBaseComponent implements HsPanelComponent {\n  name: string; //This could be used to enable/disable widgets by name on HsConfig level\n  viewRef: ViewRef;\n  data: any;\n  isVisible$ = new BehaviorSubject<boolean>(false);\n\n  constructor() {}\n\n  /**\n   * Check if widget is visible\n   * @returns True if the widget is visible, false otherwise\n   */\n  isVisible(): boolean {\n    return true;\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnInit,\n  inject,\n} from '@angular/core';\n\nimport {Layer} from 'ol/layer';\nimport {Source} from 'ol/source';\n\nimport {HsConfirmDialogComponent} from 'hslayers-ng/common/confirm';\nimport {HsDialogContainerService} from 'hslayers-ng/common/dialogs';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsQueryPopupServiceModel} from '..//query-popup.service.model';\nimport {HsQueryPopupWidgetBaseComponent} from '..//query-popup-widget-base.component';\nimport {getTitle} from 'hslayers-ng/common/extensions';\nimport {isLayerEditable} from 'hslayers-ng/services/utils';\n\n@Component({\n  selector: 'hs-clear-layer',\n  templateUrl: './clear-layer.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class HsClearLayerComponent\n  extends HsQueryPopupWidgetBaseComponent\n  implements OnInit\n{\n  private hsDialogContainerService = inject(HsDialogContainerService);\n  private hsLanguageService = inject(HsLanguageService);\n\n  @Input() data: {\n    layerDescriptor: any;\n    service: HsQueryPopupServiceModel;\n  };\n  name = 'clear-layer';\n  layerDescriptor: any;\n  ngOnInit(): void {\n    this.layerDescriptor = this.data.layerDescriptor;\n  }\n\n  /**\n   * Clear all layer source\n   * @param layer - Layer selected\n   */\n  async clearLayer(layer): Promise<void> {\n    const dialog = this.hsDialogContainerService.create(\n      HsConfirmDialogComponent,\n      {\n        message: this.hsLanguageService\n          .getTranslation('QUERY.reallyDeleteAllFeaturesFrom', undefined)\n          .replace('{0}', getTitle(layer)),\n        title: 'QUERY.confirmClear',\n      },\n    );\n    const confirmed = await dialog.waitResult();\n    if (confirmed == 'yes') {\n      if (layer.getSource().getSource) {\n        //Clear clustered?\n        layer.getSource().getSource().clear();\n      }\n      layer.getSource().clear();\n      this.data.service.featuresUnderMouse = [];\n      this.data.service.featureLayersUnderMouse = [];\n    }\n  }\n\n  /**\n   * Check if layer is editable\n   * @param layer - Layer selected\n   * @returns True if the layer is editable, false otherwise\n   */\n  isLayerEditable(layer: Layer<Source>): boolean {\n    return isLayerEditable(layer);\n  }\n}\n","<div class=\"d-flex justify-content-center\">\n  @if (isLayerEditable(layerDescriptor.layer)) {\n  <a class=\"text-danger\" (click)=\"clearLayer(layerDescriptor.layer)\" data-toggle=\"tooltip\"\n    [title]=\"'QUERY.featurePopup.clearLayer'| translate\"><!-- TODO: Remove function call from template -->\n    {{'QUERY.featurePopup.clearLayer' | translate }}\n  </a>\n  }\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnInit,\n  inject,\n} from '@angular/core';\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\n\nimport {HsLayerDescriptor} from 'hslayers-ng/types';\nimport {HsQueryPopupWidgetBaseComponent} from '../query-popup-widget-base.component';\nimport {getPopUp} from 'hslayers-ng/common/extensions';\n\n@Component({\n  selector: 'hs-dynamic-text',\n  templateUrl: './dynamic-text.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class HsDynamicTextComponent\n  extends HsQueryPopupWidgetBaseComponent\n  implements OnInit\n{\n  private sanitizer = inject(DomSanitizer);\n\n  layerDescriptor: any;\n  name = 'dynamic-text';\n\n  @Input() data: {\n    layerDescriptor: HsLayerDescriptor;\n  };\n\n  ngOnInit(): void {\n    this.layerDescriptor = this.data.layerDescriptor;\n  }\n\n  /**\n   * Generate dynamic text content using display function\n   * @param feature - Feature selected\n   * @returns Safe HTML\n   */\n  generateContent(feature: Feature<Geometry>): SafeHtml {\n    const displayFunction = getPopUp(\n      this.layerDescriptor.layer,\n    ).displayFunction;\n    const content = displayFunction(feature);\n    return this.sanitizer.bypassSecurityTrustHtml(content);\n  }\n}\n","@for (feature of layerDescriptor.features; track feature) {\n<div [innerHtml]=\"generateContent(feature)\"></div><!-- TODO: Remove function call from template -->\n}","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnInit,\n  inject,\n} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\n\nimport {HsConfirmDialogComponent} from 'hslayers-ng/common/confirm';\nimport {HsDialogContainerService} from 'hslayers-ng/common/dialogs';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLayerDescriptor} from 'hslayers-ng/types';\nimport {HsQueryPopupServiceModel} from '../query-popup.service.model';\nimport {HsQueryPopupWidgetBaseComponent} from '../query-popup-widget-base.component';\nimport {HsQueryVectorService} from 'hslayers-ng/services/query';\nimport {\n  getFeatureLabel,\n  getFeatureName,\n  getFeatureTitle,\n  getFeatures,\n} from 'hslayers-ng/common/extensions';\n\n@Component({\n  selector: 'hs-feature-info',\n  templateUrl: './feature-info.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class HsFeatureInfoComponent\n  extends HsQueryPopupWidgetBaseComponent\n  implements OnInit\n{\n  private hsLanguageService = inject(HsLanguageService);\n  private hsQueryVectorService = inject(HsQueryVectorService);\n  private hsDialogContainerService = inject(HsDialogContainerService);\n\n  layerDescriptor: any;\n  attributesForHover: any[] = [];\n  name = 'feature-info';\n  @Input() data: {\n    layerDescriptor: HsLayerDescriptor;\n    attributesForHover: any[];\n    service: HsQueryPopupServiceModel;\n  };\n  ngOnInit(): void {\n    this.layerDescriptor = this.data.layerDescriptor;\n    this.attributesForHover = this.data.attributesForHover;\n  }\n\n  /**\n   * Serialize feature name. Searches for 'title', 'name' and 'label' properties. If the feature is a cluster, a description of the cluster is returned instead.\n   * @param feature - Feature selected\n   * @returns Serialized feature name\n   */\n  serializeFeatureName(feature: Feature<Geometry>): string {\n    if (!feature) {\n      return;\n    }\n    if (getFeatureName(feature)) {\n      return getFeatureName(feature);\n    }\n    if (getFeatureTitle(feature)) {\n      return getFeatureTitle(feature);\n    }\n    if (getFeatureLabel(feature)) {\n      return getFeatureLabel(feature);\n    }\n    if (getFeatures(feature)) {\n      return this.hsLanguageService.getTranslation('QUERY.clusterContaining', {\n        count: getFeatures(feature).length,\n      });\n    }\n    return this.hsLanguageService.getTranslation(\n      'QUERY.untitledFeature',\n      undefined,\n    );\n  }\n\n  /**\n   * Remove feature\n   * @param feature - Feature selected\n   */\n  async removeFeature(feature: Feature<Geometry>): Promise<void> {\n    const dialog = this.hsDialogContainerService.create(\n      HsConfirmDialogComponent,\n      {\n        message: 'QUERY.reallyDelete',\n        title: 'QUERY.confirmDelete',\n      },\n    );\n    const confirmed = await dialog.waitResult();\n    if (confirmed == 'yes') {\n      this.hsQueryVectorService.removeFeature(feature);\n      this.data.service.featuresUnderMouse = [];\n      this.data.service.featureLayersUnderMouse = [];\n    }\n  }\n\n  /**\n   * Check if feature is a cluster\n   * @param feature - Feature selected\n   * @returns True if the feature is a cluster, false otherwise\n   */\n  isClustered(feature: Feature<Geometry>): boolean {\n    return getFeatures(feature) && getFeatures(feature).length > 0;\n  }\n\n  /**\n   * Check if feature has sub-features\n   * @param feature - Feature selected\n   * @returns True if this cluster has more than 1 sub-feature, false otherwise\n   */\n  hasMultipleSubFeatures(feature: Feature<Geometry>): boolean {\n    return getFeatures(feature).length > 1;\n  }\n\n  /**\n   * Check if feature is removable\n   * @param feature - Feature selected\n   * @returns True if the feature is removable, false otherwise\n   */\n  isFeatureRemovable(feature: Feature<Geometry>): boolean {\n    return this.hsQueryVectorService.isFeatureRemovable(feature);\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","<!-- Feature header template -->\n<ng-template #featureHeader let-feature=\"feature\" let-type=\"type\">\n  <div class=\"d-flex flex-row\">\n    <div class=\"p-1 flex-grow-1\"><em>{{serializeFeatureName(feature)}}</em></div>\n    <!-- TODO: Remove function call from template -->\n    @if (isFeatureRemovable(feature) && type) {\n    <a class=\"p-1\" (click)=\"removeFeature(feature)\" data-toggle=\"tooltip\"\n      [title]=\"'QUERY.featurePopup.' + type | translate\">\n      <i class=\"fa-solid fa-trash\" style=\"color: rgb(228, 99, 99)\"></i>\n    </a>\n    }\n  </div>\n</ng-template>\n\n<!-- Feature attribute row template -->\n<ng-template #featureAttribute let-attributes=\"attributes\">\n  @for (attribute of attributes; track attribute) {\n  <div class=\"d-flex flex-row\">\n    @if (attribute.key) {\n    <div class=\"p-1 flex-grow-1\">\n      {{translateString(\n      'FEATURE_TABLE',\n      attribute.key\n      )}}\n    </div>\n    }\n    @if (attribute.displayFunction) {\n    <div class=\"p-1\" [innerHtml]=\"attribute.displayFunction(attribute.value)\"></div>\n    <!-- TODO: Remove function call from template -->\n    }\n  </div>\n  }\n</ng-template>\n\n<!-- Layout for clustered layers -->\n@for (feature of layerDescriptor.features; track feature) {\n@if (isClustered(feature)) {\n<div style=\"font-size: small; line-height: 1; margin-bottom: 2px; border-bottom: 2px solid rgb(199, 199, 199)\">\n  <!-- TODO: Remove function call from template -->\n  <div class=\"d-flex flex-column\">\n    <ng-container *ngTemplateOutlet=\"featureHeader;context:{feature: feature}\"></ng-container>\n    <div [hidden]=\"!(attributesForHover.length > 0)\" class=\"ms-1 mt-1\">\n      @for (attribute of attributesForHover; track attribute) {\n      @if (attribute.feature) {\n      <div [ngClass]=\"{'d-flex flex-column hs-hover-popup-feature' : hasMultipleSubFeatures(feature)}\">\n        <!-- TODO: Remove function call from template -->\n        <ng-container *ngTemplateOutlet=\"featureHeader;context:{feature: attribute.feature, type: 'removeClusterPart'}\">\n        </ng-container>\n        <ng-container *ngTemplateOutlet=\"featureAttribute;context:{attributes: attribute.attributes}\">\n        </ng-container>\n      </div>\n      }\n      }\n    </div>\n  </div>\n</div>\n} @else {\n<div class=\"hs-hover-popup-feature\">\n  <ng-container *ngTemplateOutlet=\"featureHeader;context:{feature: feature, type: 'removeFeature'}\">\n  </ng-container>\n  <ng-container\n    *ngTemplateOutlet=\"featureAttribute;context:{attributes: data.service.serializeFeatureAttributes(feature)}\"><!-- TODO: Remove function call from template -->\n  </ng-container>\n</div>\n}\n<!-- Layout for non-clustered layers -->\n}\n","import {ChangeDetectionStrategy, Component, Input, OnInit} from '@angular/core';\n\nimport {HsLayerDescriptor} from 'hslayers-ng/types';\nimport {HsQueryPopupWidgetBaseComponent} from '../query-popup-widget-base.component';\n\n@Component({\n  selector: 'hs-layer-name',\n  templateUrl: './layer-name.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class HsLayerNameComponent\n  extends HsQueryPopupWidgetBaseComponent\n  implements OnInit\n{\n  layerDescriptor: any;\n  name = 'layer-name';\n\n  @Input() data: {\n    layerDescriptor: HsLayerDescriptor;\n  };\n\n  constructor() {\n    super();\n  }\n\n  ngOnInit(): void {\n    this.layerDescriptor = this.data.layerDescriptor;\n  }\n}\n","<strong style=\"font-size: small;\">{{'LAYERS.' + layerDescriptor.title | translate : {fallbackValue: layerDescriptor.title} }}</strong>\n","import {Injectable, inject} from '@angular/core';\nimport {ReplaySubject} from 'rxjs';\n\nimport {HsClearLayerComponent} from './widgets/clear-layer.component';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsDynamicTextComponent} from './widgets/dynamic-text.component';\nimport {HsFeatureInfoComponent} from './widgets/feature-info.component';\nimport {HsLayerNameComponent} from './widgets/layer-name.component';\nimport {HsPanelContainerService} from 'hslayers-ng/services/panels';\nimport {HsPanelItem} from 'hslayers-ng/common/panels';\nimport {WidgetItem} from 'hslayers-ng/types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsQueryPopupWidgetContainerService extends HsPanelContainerService {\n  private hsConfig = inject(HsConfig);\n\n  queryPopupWidgets: WidgetItem[] = [\n    {name: 'layer-name', component: HsLayerNameComponent},\n    {name: 'feature-info', component: HsFeatureInfoComponent},\n    {name: 'clear-layer', component: HsClearLayerComponent},\n    {name: 'dynamic-text', component: HsDynamicTextComponent},\n  ];\n\n  cleanup() {\n    console.warn('TODO: HsQueryPopupWidgetContainerService cleanup');\n  }\n\n  /**\n   * Initialize query popup widgets\n   * @param widgetNames - Array of widget names\n   * @param panelObserver - (Optional)\n   */\n  initWidgets(\n    widgetNames: string[],\n    panelObserver?: ReplaySubject<HsPanelItem>,\n  ): void {\n    if (widgetNames?.length > 0) {\n      for (const widgetName of widgetNames) {\n        let widgetFound = this.queryPopupWidgets.find(\n          (widget) => widget.name == widgetName,\n        );\n\n        if (!widgetFound && this.hsConfig.customQueryPopupWidgets?.length > 0) {\n          widgetFound = this.hsConfig.customQueryPopupWidgets.find(\n            (widget) => widget.name == widgetName,\n          );\n        }\n        this.create(widgetFound.component, undefined, panelObserver);\n      }\n    }\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  OnDestroy,\n  OnInit,\n  ViewRef,\n  inject,\n} from '@angular/core';\n\nimport {BehaviorSubject} from 'rxjs';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsDialogComponent, HsDialogItem} from 'hslayers-ng/common/dialogs';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsQueryPopupServiceModel} from './query-popup.service.model';\nimport {HsQueryPopupWidgetContainerService} from './query-popup-widget-container.service';\nimport {getFeatures} from 'hslayers-ng/common/extensions';\n\n@Component({\n  selector: 'hs-query-popup',\n  templateUrl: './query-popup.component.html',\n  standalone: false,\n  styles: `\n    .hs-hover-popup .fa-xmark {\n      color: rgb(73, 80, 87);\n      float: right;\n    }\n\n    .hs-hover-popup .card {\n      padding: 5px;\n      overflow-y: auto;\n    }\n\n    .hs-hover-popup {\n      max-height: 20em;\n      min-width: 10em;\n      max-width: 40em;\n      overflow-y: auto;\n      visibility: visible;\n      background: white;\n    }\n  `,\n})\nexport class HsQueryPopupComponent\n  implements OnDestroy, HsDialogComponent, AfterViewInit, OnInit\n{\n  private hsEventBusService = inject(HsEventBusService);\n  private hsMapService = inject(HsMapService);\n  private elementRef = inject(ElementRef);\n  hsQueryPopupWidgetContainerService = inject(\n    HsQueryPopupWidgetContainerService,\n  );\n  private hsConfig = inject(HsConfig);\n\n  getFeatures = getFeatures;\n  attributesForHover = [];\n  dialogItem?: HsDialogItem;\n  viewRef: ViewRef;\n  data: {\n    service: HsQueryPopupServiceModel;\n  };\n  isVisible$ = new BehaviorSubject(true);\n\n  ngAfterViewInit(): void {\n    this.data.service.registerPopup(this.elementRef.nativeElement);\n  }\n\n  ngOnInit() {\n    this.hsMapService.loaded().then((map) => {\n      map.addOverlay(this.data.service.hoverPopup);\n    });\n    this.hsQueryPopupWidgetContainerService.initWidgets(\n      this.hsConfig.queryPopupWidgets,\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.hsMapService.getMap().removeOverlay(this.data.service.hoverPopup);\n    this.hsQueryPopupWidgetContainerService.cleanup();\n  }\n\n  /**\n   * Return popup visibility state\n   */\n  popupVisible(): any {\n    const DISPLAY_NONE = {\n      'display': 'none',\n    };\n    if (this.data.service == undefined) {\n      return DISPLAY_NONE;\n    }\n    const featureCount = this.data.service.featureLayersUnderMouse.reduce(\n      (acc, featureLayer) => acc + featureLayer.features.length,\n      0,\n    );\n    if (featureCount > 0) {\n      let tmpForHover: any[] = [];\n      this.data.service.featuresUnderMouse.forEach((feature) => {\n        tmpForHover = tmpForHover.concat(\n          this.data.service.serializeFeatureAttributes(feature),\n        );\n        if (getFeatures(feature)) {\n          getFeatures(feature).forEach((subfeature) => {\n            const subFeatureObj: any = {};\n            subFeatureObj.feature = subfeature;\n            subFeatureObj.attributes =\n              this.data.service.serializeFeatureAttributes(subfeature);\n            tmpForHover.push(subFeatureObj);\n          });\n        }\n      });\n      this.attributesForHover = tmpForHover.filter((f) => f);\n    }\n\n    return {\n      'display': featureCount > 0 ? 'block' : 'none',\n    };\n  }\n}\n","<div [ngStyle]=\"popupVisible()\" class=\"hs-hover-popup\">\n  <div class=\"card\">\n    <a class=\"p-1\" (click)=\"data.service.closePopup()\" data-toggle=\"tooltip\"\n      [title]=\"'QUERY.featurePopup.closePopup' | translate\">\n      <i class=\"fa-solid fa-xmark\"></i>\n    </a>\n    @for (layerDesc of data.service.featureLayersUnderMouse; track $index) {\n    <div class=\"hs-popup-layer\">\n      <hs-panel-container [service]=\"hsQueryPopupWidgetContainerService\" [reusePanelObserver]=\"true\"\n        [panelObserver]=\"layerDesc.panelObserver\"\n        [data]=\"{layerDescriptor: layerDesc, attributesForHover: attributesForHover, service: data.service}\">\n      </hs-panel-container>\n    </div>\n    }\n  </div>\n</div>\n","import {Feature, Map} from 'ol';\nimport {Geometry} from 'ol/geom';\n\nimport {HsFeatureLayer} from './query-popup.service.model';\n\nexport class HsQueryPopupData {\n  map: Map;\n  hoverPopup: any;\n  featuresUnderMouse: Feature<Geometry>[] = [];\n  featureLayersUnderMouse: HsFeatureLayer[] = [];\n}\n","import {Injectable, NgZone, inject} from '@angular/core';\nimport {ReplaySubject} from 'rxjs';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\n\nimport {HsFeatureLayer} from './query-popup.service.model';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsPanelItem} from 'hslayers-ng/common/panels';\nimport {HsQueryPopupData} from './popup-data';\nimport {HsQueryPopupWidgetContainerService} from './query-popup-widget-container.service';\nimport {getName, getPopUp, getTitle} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsQueryPopupBaseService extends HsQueryPopupData {\n  hsMapService = inject(HsMapService);\n  zone = inject(NgZone);\n  hsQueryPopupWidgetContainerService = inject(\n    HsQueryPopupWidgetContainerService,\n  );\n\n  /**\n   * Fill features for the popup\n   * @param features - Features found on the map under the mouse\n   */\n  fillFeatures(features: Feature<Geometry>[]): void {\n    //Zone is needed for performance reasons. Otherwise the popups don't get hidden soon enough\n    this.zone.run(() => {\n      this.featuresUnderMouse = features;\n      if (this.featuresUnderMouse.length) {\n        const featuresByLayer = features.reduce(\n          (acc, feature) => {\n            const layer = this.hsMapService.getLayerForFeature(feature);\n            if (layer === undefined) {\n              return acc;\n            }\n            const popUp = getPopUp(layer);\n            if (popUp) {\n              const layerName = getName(layer);\n              if (!acc[layerName]) {\n                const needSpecialWidgets =\n                  popUp.widgets || popUp.displayFunction;\n                acc[layerName] = {\n                  layer: layer,\n                  title: getTitle(layer),\n                  features: [],\n                  panelObserver: needSpecialWidgets\n                    ? new ReplaySubject<HsPanelItem>()\n                    : undefined,\n                };\n              }\n              acc[layerName].features.push(feature);\n            }\n            return acc;\n          },\n          {} as {[key: string]: HsFeatureLayer},\n        );\n\n        this.featureLayersUnderMouse = Object.values(featuresByLayer);\n\n        for (const layer of this.featureLayersUnderMouse) {\n          if (layer.panelObserver) {\n            const popupDef = getPopUp(layer.layer);\n            let widgets = popupDef?.widgets;\n            if (popupDef?.displayFunction) {\n              widgets = ['dynamic-text'];\n            }\n            this.hsQueryPopupWidgetContainerService.initWidgets(\n              widgets,\n              layer.panelObserver,\n            );\n          }\n        }\n      } else {\n        this.featuresUnderMouse = [];\n        this.featureLayersUnderMouse = [];\n      }\n    });\n  }\n\n  /**\n   * Close the popup\n   */\n  closePopup(): void {\n    this.featuresUnderMouse = [];\n    this.featureLayersUnderMouse = [];\n  }\n\n  /**\n   * Get feature attributes in an array, where each attribute is represented as \\{key, value, displayFunction\\}.\n   * @param feature - Feature selected\n   * @returns Serialized attributes\n   */\n  serializeFeatureAttributes(feature: Feature<Geometry>): any[] {\n    const attributesForHover = [];\n    const layer = this.hsMapService.getLayerForFeature(feature);\n    if (layer === undefined) {\n      return;\n    }\n    let attrsConfig = [];\n    if (getPopUp(layer)?.attributes) {\n      //must be an array\n      attrsConfig = getPopUp(layer).attributes;\n    } else {\n      // Layer is not configured to show pop-ups\n      return;\n    }\n    if (attrsConfig.length == 1 && attrsConfig[0] == '*') {\n      attrsConfig = Object.keys(feature.getProperties()).filter(\n        (attr) => attr != 'geometry',\n      );\n      attrsConfig.sort((a, b) => (a < b ? -1 : 1));\n    }\n    for (const attr of attrsConfig) {\n      let attrName, attrLabel;\n      let attrFunction = (x) => x;\n      if (typeof attr === 'string' || attr instanceof String) {\n        //simple case when only attribute name is provided in the layer config\n        attrName = attr;\n        attrLabel = attr;\n      } else {\n        if (attr.attribute == undefined) {\n          //implies malformed layer config - 'attribute' is obligatory in this case\n          continue;\n        }\n        attrName = attr.attribute;\n        attrLabel = attr.label != undefined ? attr.label : attr.attribute;\n        if (attr.displayFunction) {\n          attrFunction = attr.displayFunction;\n        }\n      }\n      if (feature.get(attrName)) {\n        attributesForHover.push({\n          key: attrLabel,\n          value: feature.get(attrName),\n          displayFunction: attrFunction,\n        });\n      }\n    }\n    return attributesForHover;\n  }\n}\n","import {Injectable, NgZone, inject} from '@angular/core';\n\nimport {Feature, Map, Overlay} from 'ol';\nimport {Geometry} from 'ol/geom';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  HsQueryBaseService,\n  HsQueryVectorService,\n} from 'hslayers-ng/services/query';\nimport {HsQueryPopupBaseService} from './query-popup-base.service';\nimport {HsQueryPopupServiceModel} from './query-popup.service.model';\nimport {HsQueryPopupWidgetContainerService} from './query-popup-widget-container.service';\nimport {debounce} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsQueryPopupService\n  extends HsQueryPopupBaseService\n  implements HsQueryPopupServiceModel\n{\n  hsMapService: HsMapService;\n  private hsConfig = inject(HsConfig);\n  zone: NgZone;\n  private hsQueryBaseService = inject(HsQueryBaseService);\n  hsQueryPopupWidgetContainerService: HsQueryPopupWidgetContainerService;\n  private hsQueryVectorService = inject(HsQueryVectorService);\n\n  constructor() {\n    super();\n    this.hsMapService.loaded().then((map) => {\n      if (\n        this.hsConfig.popUpDisplay &&\n        this.hsConfig.popUpDisplay === 'hover'\n      ) {\n        map.on(\n          'pointermove',\n          debounce((e) => this.preparePopup(e), 200, false, this),\n        );\n      } else if (\n        this.hsConfig.popUpDisplay &&\n        this.hsConfig.popUpDisplay === 'click'\n      ) {\n        map.on(\n          'singleclick',\n          debounce((e) => this.preparePopup(e), 200, false, this),\n        );\n      }\n    });\n  }\n\n  /**\n   * Register and set hover popup overlay\n   * @param nativeElement - Popup HTML content\n   */\n  registerPopup(nativeElement: HTMLElement): void {\n    this.hoverPopup = new Overlay({\n      element: nativeElement,\n    });\n  }\n\n  /**\n   * Prepare popup before the display\n   * Get features dependent on mouse position.\n   * For cesium the features will be filled differently.\n   * @param e - Mouse event over the OL map\n   */\n  preparePopup(e: {\n    map: Map;\n    pixel: number[];\n    dragging?: any;\n    originalEvent?: any;\n  }): void {\n    // The latter case happens when hovering over the pop-up itself\n    if (e.dragging || e.originalEvent?.target?.tagName != 'CANVAS') {\n      return;\n    }\n    if (\n      !this.hsQueryBaseService.queryActive &&\n      this.hsConfig.popUpDisplay === 'click'\n    ) {\n      return;\n    }\n    let tmpFeatures = this.hsQueryBaseService.getFeaturesUnderMouse(\n      e.map,\n      e.pixel,\n    );\n    if (this.hsConfig.popUpDisplay === 'click') {\n      /* Theres a separate process for selecting features \n    by select interaction not by pixel which is better for point features. \n    Merge those results */\n      tmpFeatures = [\n        ...this.hsQueryVectorService.selector\n          .getFeatures()\n          .getArray()\n          .filter((f) => !tmpFeatures.includes(f)),\n        ...tmpFeatures,\n      ];\n    }\n\n    if (\n      tmpFeatures.some(\n        (f) => !this.featuresUnderMouse.includes(f as Feature<Geometry>),\n      ) ||\n      this.featuresUnderMouse.some((f) => !tmpFeatures.includes(f))\n    ) {\n      this.fillFeatures(tmpFeatures as Feature<Geometry>[]);\n    }\n    this.showPopup(e);\n  }\n\n  /**\n   * Set popups position according to pixel where mouse is\n   * @param e - Event, which triggered this function\n   */\n  showPopup(e: any): void {\n    const map = e.map;\n\n    const pixel = e.pixel;\n    pixel[0] += 2;\n    pixel[1] += 4;\n    if (this.hoverPopup) {\n      this.hoverPopup.setPosition(map.getCoordinateFromPixel(e.pixel));\n    }\n  }\n}\n","import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsClearLayerComponent} from './widgets/clear-layer.component';\nimport {HsDownloadDirective} from 'hslayers-ng/common/download';\nimport {HsDynamicTextComponent} from './widgets/dynamic-text.component';\nimport {HsFeatureInfoComponent} from './widgets/feature-info.component';\nimport {HsLayerNameComponent} from './widgets/layer-name.component';\nimport {\n  HsPanelHeaderComponent,\n  HsPanelHelpersModule,\n} from 'hslayers-ng/common/panels';\nimport {HsQueryPopupComponent} from './query-popup.component';\nimport {HsQueryPopupWidgetBaseComponent} from './query-popup-widget-base.component';\n\n@NgModule({\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  declarations: [\n    HsQueryPopupComponent,\n    HsClearLayerComponent,\n    HsQueryPopupWidgetBaseComponent,\n    HsFeatureInfoComponent,\n    HsLayerNameComponent,\n    HsDynamicTextComponent,\n  ],\n  imports: [\n    CommonModule,\n    HsPanelHelpersModule,\n    FormsModule,\n    TranslatePipe,\n    HsDownloadDirective,\n    HsPanelHeaderComponent,\n  ],\n  exports: [\n    HsQueryPopupComponent,\n    HsClearLayerComponent,\n    HsQueryPopupWidgetBaseComponent,\n    HsFeatureInfoComponent,\n    HsLayerNameComponent,\n    HsDynamicTextComponent,\n  ],\n})\nexport class HsQueryPopupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3"],"mappings":"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"}