{"version":3,"file":"hslayers-ng-components-draw.mjs","sources":["../../../projects/hslayers/components/draw/draw-layer-metadata/draw-layer-metadata.component.ts","../../../projects/hslayers/components/draw/draw-layer-metadata/draw-layer-metadata.component.html","../../../projects/hslayers/components/draw/draw-toolbar/draw-toolbar.component.ts","../../../projects/hslayers/components/draw/draw-toolbar/draw-toolbar.component.html","../../../projects/hslayers/components/draw/draw.component.ts","../../../projects/hslayers/components/draw/draw.component.html","../../../projects/hslayers/components/draw/draw-panel/draw-panel.component.ts","../../../projects/hslayers/components/draw/draw-panel/draw-panel.component.html","../../../projects/hslayers/components/draw/hslayers-ng-components-draw.ts"],"sourcesContent":["import {Component, Input, OnInit, ViewRef, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {NgClass} from '@angular/common';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {FeatureLike} from 'ol/Feature';\nimport {VectorSourceEvent} from 'ol/source/Vector';\n\nimport {AccessRightsModel} from 'hslayers-ng/types';\nimport {\n  HsDialogComponent,\n  HsDialogContainerService,\n} from 'hslayers-ng/common/dialogs';\nimport {HsDrawService} from 'hslayers-ng/services/draw';\nimport {\n  HsCommonLaymanAccessRightsComponent,\n  HsCommonLaymanService,\n  HsLaymanCurrentUserComponent,\n  awaitLayerSync,\n  getLaymanFriendlyLayerName,\n} from 'hslayers-ng/common/layman';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  getEditor,\n  getPath,\n  getTitle,\n  setAccessRights,\n  setEditor,\n  setName,\n  setPath,\n  setTitle,\n} from 'hslayers-ng/common/extensions';\n\n@Component({\n  selector: 'hs-draw-layer-metadata',\n  templateUrl: './draw-layer-metadata.component.html',\n  imports: [\n    NgClass,\n    FormsModule,\n    TranslatePipe,\n    HsLaymanCurrentUserComponent,\n    HsCommonLaymanAccessRightsComponent,\n  ],\n})\nexport class HsDrawLayerMetadataDialogComponent\n  implements HsDialogComponent, OnInit\n{\n  hsMapService = inject(HsMapService);\n  hsDialogContainerService = inject(HsDialogContainerService);\n  hsCommonLaymanService = inject(HsCommonLaymanService);\n  hsDrawService = inject(HsDrawService);\n\n  @Input() data: object;\n\n  newLayerPath: string;\n  attributes: Array<{id: number; name: string; value: string}> = [];\n  layer = this.hsDrawService.selectedLayer;\n\n  title: string;\n  path: string;\n  folderVisible = false;\n  type: 'draw' | 'layman' = 'draw';\n\n  access_rights: AccessRightsModel = {\n    'access_rights.write': 'private',\n    'access_rights.read': 'EVERYONE',\n  };\n  onlyMineFilterVisible = false;\n  tmpFeatures: FeatureLike[] = [];\n  viewRef: ViewRef;\n\n  ngOnInit(): void {\n    this.title = getTitle(this.layer) || '';\n    this.path = getPath(this.layer) || '';\n    this.tmpFeatures = this.layer.getSource().getFeatures();\n  }\n\n  titleChanged(): void {\n    if (this.title) {\n      setTitle(this.layer, this.title);\n    }\n  }\n\n  confirm(): void {\n    try {\n      const dic = {};\n\n      setName(this.layer, getLaymanFriendlyLayerName(getTitle(this.layer)));\n      const tmpLayer =\n        this.hsMapService.findLayerByTitle('tmpDrawLayer') || null;\n      if (tmpLayer) {\n        this.hsMapService.getMap().removeLayer(tmpLayer);\n      }\n\n      this.attributes.forEach((a) => {\n        if (a.name && a.name.trim() !== '') {\n          dic[a.name] = a.value;\n        }\n      });\n\n      let editorConfig = getEditor(this.layer);\n      if (!editorConfig) {\n        editorConfig = {};\n        setEditor(this.layer, editorConfig);\n      }\n      editorConfig.defaultAttributes = dic;\n\n      this.layer.getSource().forEachFeature((f) => {\n        f.setProperties(dic);\n      });\n\n      setAccessRights(this.layer, this.access_rights);\n      this.hsDrawService.changeDrawSource();\n\n      this.hsDrawService.addDrawLayer(this.layer);\n      this.hsDrawService.fillDrawableLayers();\n      this.tmpFeatures = this.layer.getSource().getFeatures();\n\n      //Dispatch add feature event in order to trigger sync\n      awaitLayerSync(this.layer).then(() => {\n        const event = this.getFeatureEvent();\n        this.layer.getSource().dispatchEvent(event);\n        this.hsDrawService.tmpDrawLayer = false;\n        this.hsDialogContainerService.destroy(this);\n      });\n    } catch (error) {\n      console.error('Error in confirm method:', error);\n      this.hsDrawService.tmpDrawLayer = false;\n      this.hsDialogContainerService.destroy(this);\n    }\n  }\n\n  /**\n   * Creates an event for the feature event.\n   * If the layer is new, the event is 'addfeature'.\n   * If the layer is existing, the event is a VectorSourceEvent with the features.\n   */\n  getFeatureEvent() {\n    return this.tmpFeatures &&\n      this.layer.getSource().getFeatures().length > this.tmpFeatures.length\n      ? new VectorSourceEvent('addfeatures', undefined, this.tmpFeatures)\n      : 'addfeature';\n  }\n\n  cancel(): void {\n    this.hsDrawService.selectedLayer = this.hsDrawService.previouslySelected;\n    this.hsDialogContainerService.destroy(this);\n  }\n\n  pathChanged(): void {\n    setPath(this.layer, this.path);\n  }\n\n  addAttr(): void {\n    this.attributes.push({id: Math.random(), name: '', value: ''});\n  }\n\n  selectLayer(layer): void {\n    this.hsDrawService.selectLayer(layer);\n    this.hsDialogContainerService.destroy(this);\n  }\n}\n","<div class=\"modal in hs-draw-layer-metadata\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n  <div class=\"modal-dialog\">\n    <div class=\"modal-content\">\n      <div class=\"modal-header d-flex flex-column\" style=\"height: auto\">\n        <div class=\"d-flex w-100 align-items-center\">\n          <h4 class=\"modal-title\">\n            {{'COMMON.newDrawingLayer' | translate }}\n          </h4>\n          <button type=\"button\" (click)=\"cancel()\" class=\"btn-close\" data-dismiss=\"modal\"\n            [attr.aria-label]=\"'COMMON.close' | translate \">\n          </button>\n        </div>\n        <p class=\"m-0 p-0\" style=\"font-size: 0.75rem; color: red;\">\n        {{'DRAW.drawLayerMetadata.layerWillBeAdded' | translate }}</p>\n      </div>\n      @if (!hsCommonLaymanService.isAuthenticated() && hsDrawService.laymanEndpoint !== undefined) {\n        <div\n          class=\"alert alert-danger\" role=\"alert\">\n          <p class=\"text-center\">\n            {{'DRAW.notAuthorized' | translate }}\n          </p>\n          <hs-layman-current-user/>\n        </div>\n      }\n      @if (hsDrawService.drawableLaymanLayers.length > 0 && hsCommonLaymanService.isAuthenticated()) {\n        <div class=\"d-flex w-75 m-auto p-4 justify-content-around\" style=\"white-space: nowrap;\"\n          >\n          <button type=\"button\" class=\"btn btn-sm rounded  hs-toolbar-button\" (click)=\"type = 'draw'\"\n            [ngClass]=\"type === 'draw' ? 'btn-primary' : 'btn-secondary'\">\n            {{'DRAW.drawToolbar.addDrawLayer' | translate }}\n          </button>\n          <button type=\"button\" class=\"btn ms-1 btn-sm rounded hs-toolbar-button\" (click)=\"type = 'layman'\"\n            [ngClass]=\"type === 'layman' ? 'btn-primary' : 'btn-secondary'\">\n            {{'DRAW.drawLayerMetadata.loadServerLayers' | translate }}\n          </button>\n        </div>\n      }\n      <div class=\"modal-body\" style=\"max-height:400px; overflow-y:auto\">\n        @if (type === 'draw') {\n          <form>\n            <div class=\"form-floating mb-3\">\n              <input class=\"form-control\" [(ngModel)]=\"title\" (ngModelChange)=\"titleChanged()\" name=\"title\"\n                [placeholder]=\"'DRAW.drawLayerMetadata.layerTitle' | translate \" />\n              <label for=\"title\" class=\"control-label\">{{'DRAW.drawLayerMetadata.layerTitle' |\n              translate }}</label>\n            </div>\n            @if (hsCommonLaymanService.isAuthenticated()) {\n              <hs-layman-access-rights [(access_rights)]=\"access_rights\"/>\n            }\n            <div class=\"flex-row w-75 align-items-center\" style=\"display: flex;\">\n              <a class=\"p-1 mb-1\" (click)=\"folderVisible = !folderVisible\">{{'COMMON.advancedOptions' |\n              translate }}</a>\n            </div>\n            <div [hidden]=\"!folderVisible\">\n              <div class=\"form-floating mb-3\" [title]=\"'DRAW.drawLayerMetadata.nameOfFolder' | translate \">\n                <input class=\"form-control\" [(ngModel)]=\"path\" (ngModelChange)=\"pathChanged()\" name=\"path\"\n                  [placeholder]=\"'COMMON.folder' | translate \" />\n                <label for=\"path\" class=\"control-label\">{{'COMMON.folder' | translate\n                }}</label>\n              </div>\n              <div class=\"card\">\n                <h5 class=\"card-header\">{{'DRAW.drawLayerMetadata.defaultAttributes' | translate}}</h5>\n                <div class=\"card-body\">\n                  <table class=\"table table-condensed\">\n                    <tr>\n                      <th>{{'COMMON.attribute' | translate }}</th>\n                      <th>{{'DRAW.drawLayerMetadata.defaultValue' | translate }}\n                      </th>\n                    </tr>\n                    @for (attr of attributes; track attr) {\n                      <tr>\n                        <td><input class=\"form-control\" [(ngModel)]=\"attr.name\"\n                        [ngModelOptions]=\"{standalone: true}\" /></td>\n                        <td><input class=\"form-control\" [(ngModel)]=\"attr.value\"\n                        [ngModelOptions]=\"{standalone: true}\" /></td>\n                      </tr>\n                    }\n                  </table>\n                  <button class=\"btn btn-primary\" (click)=\"addAttr()\"><i class=\"fa-solid fa-plus\"></i></button>\n                </div>\n              </div>\n            </div>\n          </form>\n        }\n        @if (type === 'layman') {\n          <form>\n            @if (hsDrawService.drawableLaymanLayers.length > 0) {\n              <div class=\"d-flex align-items-center w-100 flex-column\"\n                >\n                <div class=\" bg-primary w-100 text-light m-0 p-1\">\n                  <div class=\"d-flex justify-content-between m-1\">\n                    {{'DRAW.serverLayers' | translate }}\n                    <span (click)=\"onlyMineFilterVisible = !onlyMineFilterVisible\" style=\"cursor: pointer;\">\n                      <i class=\"fa-solid fa-gears\"></i>\n                    </span>\n                  </div>\n                  @if (onlyMineFilterVisible) {\n                    <div class=\"input-group-text border-0 justify-content-center bg-white\"\n                      >\n                      <label class=\"m-0\">\n                        <input type=\"checkbox\" name=\"onlyMine\" [(ngModel)]=\"hsDrawService.onlyMine\"\n                          (ngModelChange)=\"hsDrawService.fillDrawableLayers(); onlyMineFilterVisible = !onlyMineFilterVisible\">\n                        {{'COMPOSITIONS.onlyMine' | translate }}\n                      </label>\n                    </div>\n                  }\n                </div>\n                <ul class=\"list-group w-100\">\n                  @for (layer of hsDrawService.drawableLaymanLayers; track layer) {\n                    <li\n                      class=\"justify-content-between d-flex align-items-center\"\n                      [ngClass]=\"'list-group-item'+(layer.highlighted ? ' active' : '')\">\n                      <b><a data-toggle=\"tooltip\" [title]=\"layer.description\">{{layer.title}}</a></b>\n                      <span class=\"float-right\">\n                        <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"selectLayer(layer)\"\n                          data-toggle=\"tooltip\" [title]=\"'COMMON.addToMap' | translate \"><i\n                        class=\"fa-solid fa-plus\"></i></button>\n                      </span>\n                    </li>\n                  }\n                </ul>\n              </div>\n            }\n          </form>\n        }\n      </div>\n      <div class=\"modal-footer\">\n        @if (type === 'draw') {\n          <button type=\"button\" class=\"btn btn-primary\" data-dismiss=\"modal\"\n            (click)=\"confirm()\" data-test=\"Confirm add layer\">{{'DRAW.drawToolbar.addLayer' |\n          translate}}</button>\n        }\n        <button type=\"button\" class=\"btn btn-primary\" data-dismiss=\"modal\" (click)=\"cancel()\"\n          data-test=\"Cancel add layer\">{{'COMMON.cancel'\n        | translate }}</button>\n      </div>\n    </div>\n  </div>\n</div>\n","import {CommonModule} 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 {Layer} from 'ol/layer';\nimport {Source} from 'ol/source';\n\nimport {HsDrawPanelComponent} from '../draw-panel/draw-panel.component';\nimport {HsDrawService} from 'hslayers-ng/services/draw';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsGuiOverlayBaseComponent} from 'hslayers-ng/common/panels';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {getTitle} from 'hslayers-ng/common/extensions';\nimport {isLayerDrawable} from 'hslayers-ng/services/utils';\n\n@Component({\n  selector: 'hs-draw-toolbar',\n  templateUrl: './draw-toolbar.component.html',\n  styles: `\n    :host {\n      position: relative;\n      display: block;\n    }\n\n    .draw-panel-popup {\n      position: absolute;\n      top: calc(100% + 14px);\n      box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\n      z-index: 1000;\n    }\n\n    .draw-panel-popup::before {\n      content: '';\n      position: absolute;\n      top: -12px;\n      left: 10px;\n      border-width: 0 10px 10px 10px;\n      border-style: solid;\n      border-color: transparent transparent white transparent;\n    }\n  `,\n  imports: [\n    CommonModule,\n    FormsModule,\n    NgbDropdownModule,\n    TranslatePipe,\n    HsDrawPanelComponent,\n  ],\n})\nexport class HsDrawToolbarComponent extends HsGuiOverlayBaseComponent {\n  hsDrawService = inject(HsDrawService);\n  private hsMapService = inject(HsMapService);\n  private hsEventBusService = inject(HsEventBusService);\n\n  drawToolbarExpanded = false;\n  onlyMineFilterVisible = false;\n  name = 'drawToolbar';\n  getTitle = getTitle;\n\n  constructor() {\n    super();\n    /**\n     * Add listener for initial layers\n     */\n    this.hsMapService.getLayersArray().forEach((l) => {\n      if (isLayerDrawable(l, {checkVisible: false})) {\n        this.addVisibilityChangeListener(l);\n      }\n    });\n\n    /**\n     * Add listener for layers added to map later on\n     */\n    this.hsEventBusService.mapEventHandlersSet.subscribe(() => {\n      this.hsMapService.map.getLayers().on('add', (e) => {\n        if (isLayerDrawable(e.element as Layer<Source>)) {\n          this.addVisibilityChangeListener(e.element as Layer<Source>);\n        }\n      });\n    });\n  }\n\n  /**\n   * Add listener for layer visibility change\n   * @param layer - Layer to listen to\n   */\n  addVisibilityChangeListener(layer: Layer<Source>) {\n    layer.on('change:visible', (e) => {\n      if (this.drawToolbarExpanded) {\n        this.hsDrawService.fillDrawableLayers();\n      }\n    });\n  }\n\n  selectionMenuToggled(): void {\n    this.setType(this.hsDrawService.type);\n  }\n\n  toggleDrawToolbar(): void {\n    this.hsDrawService.highlightDrawButton = false;\n    if (\n      this.hsLayoutService.layoutElement.clientWidth > 767 &&\n      this.hsLayoutService.layoutElement.clientWidth < 870 &&\n      !this.drawToolbarExpanded\n    ) {\n      this.hsLayoutService.sidebarExpanded = false;\n    }\n    this.drawToolbarExpanded = !this.drawToolbarExpanded;\n    if (!this.drawToolbarExpanded) {\n      this.hsDrawService.stopDrawing();\n    } else {\n      this.hsDrawService.fillDrawableLayers();\n    }\n  }\n\n  selectLayer(layer): void {\n    this.hsDrawService.selectLayer(layer);\n  }\n\n  controlLayerListAction() {\n    if (\n      !this.hsDrawService.hasSomeDrawables &&\n      this.hsDrawService.tmpDrawLayer\n    ) {\n      this.hsDrawService.saveDrawingLayer();\n    }\n  }\n\n  setType(what): void {\n    const type = this.hsDrawService.setType(what);\n    if (type) {\n      this.hsDrawService.activateDrawing({});\n    }\n  }\n\n  finishDrawing(): void {\n    this.hsDrawService.stopDrawing();\n  }\n}\n","@if ({ position: hsLayoutService.sidebarPosition | async }; as sidebar) {\n<button class=\"btn btn-light hs-toolbar-button text-secondary\" [ngClass]=\"{\n      'btn-outline-danger': hsDrawService.highlightDrawButton,\n      'btn-light text-secondary': !drawToolbarExpanded,\n      'btn-secondary': drawToolbarExpanded,\n    }\" (click)=\"toggleDrawToolbar()\">\n  <i class=\"fa-solid\" [ngClass]=\"{\n        'fa-pencil': !drawToolbarExpanded,\n        'fa-xmark': drawToolbarExpanded,\n      }\" data-toggle=\"tooltip\" [title]=\"'PANEL_HEADER.draw' | translate\"></i>\n</button>\n\n@if (drawToolbarExpanded) {\n@defer (when drawToolbarExpanded) {\n<hs-draw-panel [inToolbar]=\"true\"\n  class=\"draw-panel-popup d-block w-100 rounded-3 d-flex flex-column w-auto bg-white p-3\"></hs-draw-panel>\n}\n}\n\n@if (hsDrawService.drawActive) {\n<div style=\"top: 35vh\" role=\"group\" class=\"btn-group-vertical position-fixed d-flex flex-column\" [ngStyle]=\"\n      sidebar.position === 'right' || sidebar.position === 'bottom'\n        ? { left: 0 }\n        : { right: 0 }\n    \">\n  <button class=\"btn btn-secondary\" (click)=\"hsDrawService.removeLastPoint()\" data-toggle=\"tooltip\"\n    [title]=\"'DRAW.drawToolbar.removeLastPoint' | translate\">\n    <i class=\"fa-solid fa-eraser\"></i>\n  </button>\n\n  <button class=\"btn btn-secondary\" (click)=\"finishDrawing()\" data-toggle=\"tooltip\"\n    [title]=\"'DRAW.drawToolbar.finishFeature' | translate\">\n    <i class=\"fa-solid fa-square-check\"></i>\n  </button>\n</div>\n}\n}\n","import {AsyncPipe, NgClass} from '@angular/common';\nimport {BehaviorSubject} from 'rxjs';\nimport {Component, OnInit, inject} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsDialogContainerService} from 'hslayers-ng/common/dialogs';\nimport {HsDrawService} from 'hslayers-ng/services/draw';\nimport {\n  HsPanelBaseComponent,\n  HsPanelHeaderComponent,\n  HsPanelHelpersModule,\n} from 'hslayers-ng/common/panels';\nimport {HsQueryFeatureListComponent} from 'hslayers-ng/components/query';\nimport {HsDrawEditComponent} from './draw-edit/draw-edit.component';\nimport {HsDrawPanelComponent} from './draw-panel/draw-panel.component';\n\n@Component({\n  selector: 'hs-draw',\n  templateUrl: './draw.component.html',\n  imports: [\n    NgClass,\n    AsyncPipe,\n    TranslatePipe,\n    HsDrawEditComponent,\n    HsDrawPanelComponent,\n    HsQueryFeatureListComponent,\n    HsPanelHeaderComponent,\n    HsPanelHelpersModule,\n  ],\n})\nexport class HsDrawComponent extends HsPanelBaseComponent implements OnInit {\n  hsDrawService = inject(HsDrawService);\n  hsDialogContainerService = inject(HsDialogContainerService);\n\n  name = 'draw';\n  selectedOption = new BehaviorSubject('draw');\n\n  ngOnInit(): void {\n    this.hsDrawService.layerMetadataDialog\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(async () => {\n        const {HsDrawLayerMetadataDialogComponent} = await import(\n          './draw-layer-metadata/draw-layer-metadata.component'\n        );\n        this.hsDialogContainerService.create(\n          HsDrawLayerMetadataDialogComponent,\n          {},\n        );\n      });\n    super.ngOnInit();\n    this.selectedOption\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((option) => {\n        if (option == 'edit') {\n          this.hsDrawService.setType(this.hsDrawService.type);\n        }\n      });\n  }\n}\n","@if (isVisible$ | async) {\n<div class=\"card hs-main-panel\" [ngClass]=\"panelWidthClass\">\n  <hs-panel-header name=\"draw\" [selectedTab$]=\"selectedOption\" [panelTabs]=\"'draw,edit'\">\n    <button mainButton class=\"btn btn-sm\" style=\"cursor: help\" data-toggle=\"tooltip\"\n      [title]=\"'DRAW.drawInfo' | translate \">\n      <i class=\"fa-solid fa-circle-question\"></i>\n    </button>\n  </hs-panel-header>\n  <!-- draw panel -->\n  @if ({option: selectedOption | async}; as selected) {\n  @if (selected.option === 'draw') {\n  @defer (when selected.option === 'draw') {\n  <hs-draw-panel class=\"pt-1\"></hs-draw-panel>\n  }\n  }\n  @if (selected.option === 'edit') {\n  @defer (when selected.option === 'edit') {\n  <hs-draw-edit class=\"my-4 d-flex flex-column align-items-center\">\n  </hs-draw-edit>\n  }\n  }\n  }\n  @if (hsDrawService.pendingLayers.length > 0) {\n  <div class=\"m-auto w-100 p-3\">\n    <div class=\"alert alert-warning text-justify\">\n      <ol>\n        @for (layer of hsDrawService.pendingLayers(); track layer) {\n        <li>\n          {{'DRAW.loadingLayer' | translate }} <strong>{{layer}}</strong>\n        </li>\n        }\n      </ol>\n      {{'DRAW.longerLoading' | translate }}\n      <div class=\"d-flex justify-content-center pt-3\">\n        <span class=\"hs-loader hs-loader-dark\"></span>\n      </div>\n    </div>\n  </div>\n  }\n  <div class=\"mh-75 pt-2\">\n    <hs-query-feature-list />\n  </div>\n</div>\n}","import {AsyncPipe, NgClass} from '@angular/common';\nimport {Component, input, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {NgbDropdownModule} from '@ng-bootstrap/ng-bootstrap';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {Circle, Fill, Stroke, Style} from 'ol/style';\n\nimport {HsDrawService} from 'hslayers-ng/services/draw';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {getTitle} from 'hslayers-ng/common/extensions';\n\ninterface DrawToolDefinition {\n  type: string;\n  icon: string;\n  title: string;\n}\n\n@Component({\n  selector: 'hs-draw-panel',\n  templateUrl: './draw-panel.component.html',\n  imports: [AsyncPipe, TranslatePipe, NgClass, FormsModule, NgbDropdownModule],\n})\nexport class HsDrawPanelComponent {\n  hsDrawService = inject(HsDrawService);\n  hsLayoutService = inject(HsLayoutService);\n  hsLanguageService = inject(HsLanguageService);\n\n  inToolbar = input<boolean>(false);\n\n  onFeatureSelected: any;\n  onFeatureDeselected: any;\n  drawToolbarExpanded: any;\n  opacity = 0.2;\n  linewidth = 1;\n  fillcolor: any = {'background-color': 'rgba(0, 153, 255, 1)'};\n  onlyMineFilterVisible = false;\n  getTitle = getTitle;\n  sidebarPosition: string;\n\n  drawTools: DrawToolDefinition[] = [\n    {type: 'Point', icon: 'fa-solid fa-thumbtack', title: 'COMMON.point'},\n    {\n      type: 'Polygon',\n      icon: 'fa-solid fa-draw-polygon',\n      title: 'COMMON.polygon',\n    },\n    {type: 'LineString', icon: 'fa-solid fa-slash', title: 'COMMON.line'},\n    {\n      type: 'Circle',\n      icon: 'fa-regular fa-circle',\n      title: 'COMMON.circle',\n    },\n  ];\n\n  translateString(module: string, text: string): string {\n    return this.hsLanguageService.getTranslationIgnoreNonExisting(module, text);\n  }\n\n  changeSnapSource(layer): void {\n    this.hsDrawService.changeSnapSource(layer);\n  }\n\n  setType(what): void {\n    const type = this.hsDrawService.setType(what);\n    if (type) {\n      this.activateDrawing(this.hsLayoutService.mainpanel === 'draw');\n    }\n  }\n\n  activateDrawing(withStyle?): void {\n    this.hsDrawService.activateDrawing({\n      changeStyle: withStyle ? () => this.changeStyle() : undefined,\n    });\n  }\n\n  selectLayer(layer): void {\n    this.hsDrawService.selectLayer(layer);\n  }\n\n  updateStyle(): void {\n    this.hsDrawService.updateStyle(() => this.changeStyle());\n  }\n\n  /**\n   * Dynamically create draw feature style according to parameters selected in\n   * hs.styler.colorDirective\n   * @param {Event} e - optional parameter passed when changeStyle is called\n   * for 'ondrawend' event features\n   * @returns Style definition\n   */\n  changeStyle(e = null): Style {\n    const newStyle = new Style({\n      stroke: new Stroke({\n        color: this.fillcolor['background-color'],\n        width: this.linewidth,\n      }),\n      fill: new Fill({\n        color:\n          this.fillcolor['background-color'].slice(0, -2) + this.opacity + ')',\n      }),\n      image: new Circle({\n        radius: 5,\n        fill: new Fill({\n          color:\n            this.fillcolor['background-color'].slice(0, -2) +\n            this.opacity +\n            ')',\n        }),\n        stroke: new Stroke({\n          color: this.fillcolor['background-color'],\n          width: this.linewidth,\n        }),\n      }),\n    });\n    return newStyle;\n  }\n\n  drawStyle() {\n    return {\n      'background-color':\n        this.fillcolor['background-color'].slice(0, -2) + this.opacity + ')',\n      border: this.linewidth + 'px solid ' + this.fillcolor['background-color'],\n    };\n  }\n}\n","@let sidebarPosition = hsLayoutService.sidebarPosition | async;\n\n<div class=\"d-flex flex-column\">\n  <div class=\"d-flex m-auto py-2 justify-content-around\" style=\"white-space: nowrap;\">\n    <button type=\"button\" class=\"btn rounded btn-primary hs-toolbar-button\" (click)=\"hsDrawService.saveDrawingLayer()\"\n      [ngClass]=\"{'btn-sm' : sidebarPosition !== 'bottom'}\">\n      {{'COMMON.newDrawingLayer' | translate }}\n    </button>\n    <button type=\"button\" (click)=\"hsDrawService.setType(hsDrawService.type)\"\n      [ngClass]=\"{'btn-sm' : sidebarPosition !== 'bottom'}\" class=\"btn ms-1 rounded btn-primary hs-toolbar-button\"\n      [disabled]=\"!hsDrawService.type\">\n      {{'DRAW.disableDrawing' | translate }}\n    </button>\n  </div>\n  <div class=\"btn-group w-100  m-auto justify-content-center\"\n    [ngClass]=\"sidebarPosition === 'bottom' ? 'btn-group-lg' : 'btn-group-sm'\">\n    @if (hsDrawService.drawableLayersAvailable || hsDrawService.tmpDrawLayer) {\n    <div class=\"flex-row w-100 m-auto justify-content-center align-items-center text-primary py-3 py-md-0\"\n      style=\"display: flex;\">\n      <p class=\"m-0 p-0\">{{'DRAW.drawingTo' | translate }}</p>\n      <div ngbDropdown style=\"max-width: 50%;\" placement=\"bottom\">\n        <button type=\"button\" class=\"btn btn-sm rounded-0 hs-toolbar-button d-flex align-items-center mw-100\"\n          ngbDropdownToggle (click)=\"hsDrawService.fillDrawableLayers()\"\n          [ngClass]=\"{'btn-light btn-outline-danger border-0' : hsDrawService.tmpDrawLayer,'dropdown-toggle' : hsDrawService.drawableLayersAvailable }\"\n          [disabled]=\"!hsDrawService.drawableLayersAvailable\">\n          <div class=\"text-truncate\">{{hsDrawService.selectedLayerString()}}</div>\n        </button>\n        <div ngbDropdownMenu style=\"max-width: 15em;\">\n          @if (hsDrawService.drawableLayers.length > 0) {\n          <div class=\"d-flex align-items-center w-100 flex-column\">\n            <label class=\" bg-primary w-100 text-light m-0 p-1\">{{'DRAW.activeLayers' |\n              translate }}</label>\n            @for (layer of hsDrawService.drawableLayers; track layer) {\n            <a class=\"dropdown-item text-truncate\" data-toggle=\"tooltip\"\n              [title]=\"'LAYERS.' + getTitle(layer) | translate : {fallbackValue: getTitle(layer)} \" (click)=\"selectLayer(layer)\">{{getTitle(layer) |\n              translate }}</a>\n            }<!-- TODO: Remove function call from template -->\n          </div>\n          }\n          @if (hsDrawService.drawableLaymanLayers.length > 0) {\n          <div class=\"d-flex align-items-center w-100 flex-column\">\n            <div class=\" bg-primary w-100 text-light m-0 p-1\">\n              <div class=\"d-flex justify-content-between\">\n                {{'DRAW.serverLayers' | translate }}\n                <span (click)=\"onlyMineFilterVisible = !onlyMineFilterVisible\" style=\"cursor: pointer;\">\n                  <i class=\"fa-solid fa-gears\"></i>\n                </span>\n              </div>\n              @if (onlyMineFilterVisible) {\n              <div class=\"p-0 input-group-text border-0 justify-content-center bg-white\">\n                <label class=\"m-0\">\n                  <input type=\"checkbox\" name=\"onlyMine\" [(ngModel)]=\"hsDrawService.onlyMine\"\n                    (ngModelChange)=\"hsDrawService.fillDrawableLayers(); onlyMineFilterVisible = !onlyMineFilterVisible\">\n                  {{'COMPOSITIONS.onlyMine' | translate }}\n                </label>\n              </div>\n              }\n            </div>\n            @for (layer of hsDrawService.drawableLaymanLayers; track layer) {\n            <a class=\"dropdown-item text-truncate\" data-toggle=\"tooltip\" [title]=\"'LAYERS.' + layer.title | translate : {fallbackValue: layer.title} \"\n              (click)=\"selectLayer(layer)\">{{'LAYERS.' + layer.title | translate : {fallbackValue: layer.title} }}</a>\n            }\n          </div>\n          }\n        </div>\n      </div>\n      @if (hsDrawService.tmpDrawLayer) {\n      <button type=\"button\" class=\"btn btn-light btn-outline-primary border-0 btn-sm\"\n        (click)=\"hsDrawService.saveDrawingLayer()\" [title]=\"'DRAW.saveDrawingToLayer' | translate \">\n        <i class=\"fa-solid fa-save\"></i>\n      </button>\n      }\n      @if (hsDrawService.hasSomeDrawables) {\n      @if (hsDrawService.moreThanOneDrawable === true) {\n      <div ngbDropdown placement=\"bottom-right\" display=\"dynamic\" style=\"white-space: nowrap;\"\n        #removeLayersDropdown=\"ngbDropdown\">\n        <button type=\"button\" ngbDropdownToggle class=\"btn btn-light  btn-outline-danger btn-sm\"\n          [disabled]=\"!hsDrawService.drawableLayersAvailable\" style=\"border: none !important;\">\n          <i class=\"fa-solid fa-trash\"></i>\n        </button>\n        <div ngbDropdownMenu class=\"flex-column px-1 py-2\">\n          <div class=\"d-flex align-items-center w-100 flex-column\">\n            @if (hsDrawService.selectedLayer) {\n            <a class=\"dropdown-item\"\n              (click)=\"hsDrawService.removeLayer(); removeLayersDropdown.close()\">{{'COMMON.removeLayer'\n              |\n              translate }}</a>\n            }\n            <a class=\"dropdown-item\"\n              (click)=\"hsDrawService.removeMultipleLayers(); removeLayersDropdown.close()\">{{'DRAW.removeMultipleLayers'\n              | translate }}</a>\n          </div>\n        </div>\n      </div>\n      } @else {\n      <button type=\"button\" class=\"btn btn-light  btn-outline-danger btn-sm\" (click)=\"hsDrawService.removeLayer()\"\n        [title]=\"'COMMON.removeLayer' | translate \" style=\"border: none !important;\">\n        <i class=\"fa-solid fa-trash\"></i>\n      </button>\n      }\n      }\n    </div>\n    } @else {\n    <p class=\"m-0 text-danger\">{{'DRAW.noSuitableLayer' | translate }}</p>\n    }\n  </div>\n</div>\n\n\n<div class=\"rounded-0 my-1 draw-buttons d-flex justify-content-center\"\n  [ngClass]=\"sidebarPosition === 'bottom' ? 'btn-group-lg' : 'btn-group-sm'\">\n  @for (tool of drawTools; track tool.type) {\n  <button class=\"btn btn-light btn-outline-primary\" [ngClass]=\"{active: hsDrawService.type === tool.type}\"\n    (click)=\"setType(tool.type)\" data-toggle=\"tooltip\" [title]=\"tool.title | translate\">\n    <i [class]=\"tool.icon\"></i>\n  </button>\n  }\n  <div ngbDropdown placement=\"bottom-right\" class=\"btn-group btn-group-sm\" role=\"group\"\n    #selectionTypeDropdown=\"ngbDropdown\">\n    <button ngbDropdownToggle type=\"button\" [ngClass]=\"{active: !hsDrawService.type }\"\n      [title]=\"'STYLER.selection' | translate \" class=\"btn btn-light btn-outline-primary\">\n      <i class=\"fa-solid fa-cursor\"></i>\n    </button>\n    <div ngbDropdownMenu style=\"white-space: nowrap;\">\n      <div class=\"d-flex gap-2 flex-column px-1 py-2\">\n        <div class=\"d-flex flex-row justify-content-around align-items-baseline\">\n          <label class=\"ms-1 cursor-pointer\" for=\"draw-boxSelection\">{{'DRAW.boxSelection' |\n            translate }}</label>\n          <input type=\"checkbox\" [(ngModel)]=\"hsDrawService.boxSelectionActive\"\n            (change)=\"hsDrawService.toggleBoxSelection();selectionTypeDropdown.close()\" id=\"draw-boxSelection\"\n            name=\"filterByExtent\" class=\"cursor-pointer\">\n        </div>\n        <button class=\"btn btn-primary btn-sm hs-draw-selectAll\" [disabled]=\"!hsDrawService.selectedLayer\"\n          (click)=\"hsDrawService.selectAllFeatures();selectionTypeDropdown.close()\" data-toggle=\"tooltip\"\n          [title]=\"'DRAW.deselectAllFeatures' | translate \">\n          {{translateString('DRAW',hsDrawService.toggleSelectionString)}}\n          <!-- TODO: Remove function call from template -->\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n<div class=\"pt-2\">\n  <div style=\"font-size: 0.9rem;\">\n    <div class=\"pb-2\">\n      <div class=\"form-check\">\n        <input class=\"d-none\" type=\"checkbox\" id=\"hs-draw-snap\" [(ngModel)]=\"hsDrawService.snapActive\"\n          (change)=\"hsDrawService.toggleSnapping()\" />\n        <label for=\"hs-draw-snap\"\n          [ngClass]=\"{'hs-checkmark':hsDrawService.snapActive,'hs-uncheckmark':!hsDrawService.snapActive}\">{{'DRAW.allowSnapping'\n          | translate }}</label>\n      </div>\n      @if (hsDrawService.snapActive && hsDrawService.drawableLayers.length > 1 && !inToolbar()) {\n      <div class=\"d-flex align-items-center card flex-row justify-content-around mx-3 text-primary\">\n        <p class=\"m-0 p-0\">{{'DRAW.snapTo' | translate }}:</p>\n        <div ngbDropdown placement=\"bottom\" class=\"w-50 d-flex justify-content-center\">\n          <button ngbDropdownToggle type=\"button\"\n            class=\"btn btn-sm rounded-0 hs-toolbar-button d-flex align-items-center mw-100\"\n            (click)=\" hsDrawService.fillDrawableLayers() \" style=\" font-size: small;\">\n            <div class=\"mw-100 text-truncate\">{{hsDrawService.snapLayerString()}}</div>\n          </button>\n          <div ngbDropdownMenu style=\"max-width: 150%;\">\n            <div class=\"d-flex align-items-center w-100 flex-column\">\n              @for (layer of hsDrawService.drawableLayers; track layer) {\n              <a class=\"dropdown-item text-truncate\" data-toggle=\"tooltip\"\n                [title]=\"'LAYERS.' + getTitle(layer) | translate : {fallbackValue: getTitle(layer)} \" (click)=\"changeSnapSource(layer)\">{{'LAYERS.' + getTitle(layer)\n                | translate : {fallbackValue: getTitle(layer)} }}</a>\n              }<!-- TODO: Remove function call from template -->\n            </div>\n          </div>\n        </div>\n      </div>\n      }\n    </div>\n  </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}