{"version":3,"file":"hslayers-ng-components-print.mjs","sources":["../../../projects/hslayers/components/print/print-legend.service.ts","../../../projects/hslayers/components/print/constants/scale-svg-classes.ts","../../../projects/hslayers/components/print/print-scale.service.ts","../../../projects/hslayers/components/print/print-imprint.service.ts","../../../projects/hslayers/components/print/print-title.service.ts","../../../projects/hslayers/components/print/print.service.ts","../../../projects/hslayers/components/print/constants/position-options.ts","../../../projects/hslayers/components/print/constants/text-styling-options.ts","../../../projects/hslayers/components/print/text-styler/text-styler.component.ts","../../../projects/hslayers/components/print/text-styler/text-styler.component.html","../../../projects/hslayers/components/print/imprint-styler/imprint-styler.component.ts","../../../projects/hslayers/components/print/imprint-styler/imprint-styler.component.html","../../../projects/hslayers/components/print/legend-styler/legend-styler.component.ts","../../../projects/hslayers/components/print/legend-styler/legend-styler.component.html","../../../projects/hslayers/components/print/constants/scale-styling-options.ts","../../../projects/hslayers/components/print/scale-styler/scale-styler.component.ts","../../../projects/hslayers/components/print/scale-styler/scale-styler.component.html","../../../projects/hslayers/components/print/print.component.ts","../../../projects/hslayers/components/print/print.component.html","../../../projects/hslayers/components/print/print.module.ts","../../../projects/hslayers/components/print/hslayers-ng-components-print.ts"],"sourcesContent":["import {Injectable, inject} from '@angular/core';\nimport {Observable, Subject, Subscription} from 'rxjs';\n\nimport {Feature} from 'ol';\nimport {Vector as VectorLayer} from 'ol/layer';\nimport {Vector as VectorSource} from 'ol/source';\n\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {\n  HsLegendDescriptor,\n  HsLegendLayerStaticService,\n  HsLegendService,\n} from 'hslayers-ng/components/legend';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsShareThumbnailService} from 'hslayers-ng/services/share';\nimport {LegendObj} from './types/legend-object.type';\n\nexport class PrintLegendParams {\n  legendWidth: number;\n  loadingExternalImages = false;\n  cancelRequest: Subject<void> = new Subject<void>();\n  subscriptions: Subscription[] = [];\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsPrintLegendService extends PrintLegendParams {\n  private hsMapService = inject(HsMapService);\n  private hsLegendService = inject(HsLegendService);\n  private hsLegendLayerStaticService = inject(HsLegendLayerStaticService);\n  private hsLanguageService = inject(HsLanguageService);\n  private hsShareThumbnailService = inject(HsShareThumbnailService);\n\n  constructor() {\n    super();\n    this.cancelRequest.subscribe(() => {\n      this.loadingExternalImages = false;\n      for (const subs of this.subscriptions) {\n        subs.unsubscribe();\n        this.subscriptions.splice(this.subscriptions.indexOf(subs), 1);\n      }\n    });\n  }\n\n  /**\n   * Convert svg to image\n   * @param svgSource - Svg source\n   */\n  svgToImage(svgSource: string): Promise<HTMLImageElement> {\n    return new Promise(async (resolve, reject) => {\n      const obs = new Observable<HTMLImageElement>((subscriber) => {\n        const img = new Image();\n        img.onload = function () {\n          subscriber.next(img);\n          subscriber.complete();\n        };\n        img.onerror = function (event) {\n          subscriber.next(null);\n          subscriber.complete();\n        };\n        if (\n          svgSource?.indexOf('data') !== 0 &&\n          img.getAttribute('crossOrigin') !== undefined\n        ) {\n          img.setAttribute('crossOrigin', 'anonymous');\n        }\n        img.src = svgSource;\n      });\n      this.subscriptions.push(\n        obs.subscribe((img) => {\n          resolve(img);\n        }),\n      );\n    });\n  }\n\n  /**\n   * Draw legend canvas\n   * @param legendObj - Legend object\n   */\n  async drawLegendCanvas(legendObj: LegendObj): Promise<HTMLCanvasElement> {\n    const canvas = document.createElement('canvas');\n    const ctx = canvas.getContext('2d');\n    this.legendWidth = legendObj.width;\n    const legendImages = await this.getLegendImages();\n    if (legendImages?.length > 0) {\n      const canvasHeight = legendImages\n        .map((img) => img.height)\n        .reduce((height, img) => height + img);\n      this.hsShareThumbnailService.setCanvasSize(\n        canvas,\n        this.legendWidth,\n        canvasHeight,\n      );\n      this.styleLegendCanvas(canvas, legendObj);\n      await this.fillLegendCanvas(ctx, legendImages);\n      return canvas;\n    }\n  }\n\n  /**\n   * Fill legend canvas with images\n   * @param ctx - Legend canvas context\n   * @param legendImages - All available legend images\n   */\n  private async fillLegendCanvas(\n    ctx: CanvasRenderingContext2D,\n    legendImages: HTMLImageElement[],\n  ): Promise<void> {\n    let height = 0;\n    for (const img of legendImages) {\n      ctx.drawImage(img, 0, height);\n      height += img.height;\n    }\n  }\n\n  /**\n   * Style legend canvas background\n   * @param canvas - Legend canvas\n   * @param legendObj - Legend object\n   */\n  private styleLegendCanvas(\n    canvas: HTMLCanvasElement,\n    legendObj: LegendObj,\n  ): void {\n    const ctx = canvas.getContext('2d');\n    ctx.fillStyle = legendObj.bcColor;\n    ctx.rect(0, 0, canvas.width, canvas.height);\n    ctx.fillRect(0, 0, canvas.width, canvas.height);\n  }\n\n  /**\n   * Get legend images from layer legend descriptors\n   */\n  private async getLegendImages(): Promise<HTMLImageElement[]> {\n    const svgSources: string[] = [];\n    const images: HTMLImageElement[] = [];\n    const layers = this.hsMapService\n      .getLayersArray()\n      .filter((l) => l.getVisible());\n    for (const layer of layers) {\n      let svgSource: string;\n      const desc = await this.hsLegendService.getLayerLegendDescriptor(layer);\n      if (desc) {\n        switch (desc.type) {\n          case 'vector':\n            svgSource = await this.getVectorSvgSource(desc);\n            break;\n          case 'wms':\n            for (const sublayer of desc.subLayerLegends) {\n              const wmsSvg = await this.legendImageToSvg(\n                sublayer,\n                this.hsLanguageService.getTranslationIgnoreNonExisting(\n                  'LAYERS',\n                  desc.title,\n                  undefined,\n                ),\n              );\n              if (wmsSvg) {\n                svgSources.push(wmsSvg);\n              }\n            }\n            break;\n          case 'static':\n            svgSource = await this.getStaticSvgSource(desc);\n            break;\n          default:\n            return;\n        }\n        if (svgSource) {\n          svgSources.push(svgSource);\n        }\n      }\n    }\n    this.loadingExternalImages = false;\n    if (svgSources?.length > 0) {\n      {\n        for (const source of svgSources) {\n          const image = await this.svgToImage(source);\n          if (image) {\n            images.push(image);\n          }\n        }\n      }\n    }\n    return images;\n  }\n\n  /**\n   * Get Vector layer legend svg source\n   * @param desc - HsLegendDescriptor\n   */\n  private async getVectorSvgSource(desc: HsLegendDescriptor): Promise<string> {\n    let svgSource = '';\n    if (!desc.svg) {\n      return;\n    }\n    if (desc.autoLegend) {\n      const legendSource = await this.hsLegendService.getVectorLayerLegendSvg(\n        desc.lyr as VectorLayer<VectorSource<Feature>>,\n      );\n      if (!legendSource) {\n        return;\n      }\n      svgSource = this.legendToSvg(\n        legendSource,\n        this.hsLanguageService.getTranslationIgnoreNonExisting(\n          'LAYERS',\n          desc.title,\n          undefined,\n        ),\n      );\n    } else {\n      for (const category of desc.lyr.getSource().get('legendCategories')) {\n        svgSource = this.sparqlJsonToSvg(category, desc.title);\n      }\n    }\n    return svgSource;\n  }\n\n  /**\n   * Get Static layer legend svg source\n   * @param desc - HsLegendDescriptor\n   */\n  private async getStaticSvgSource(desc: HsLegendDescriptor): Promise<string> {\n    let svgSource = '';\n    const layerLegend = this.hsLegendLayerStaticService.fillContent(desc.lyr);\n    switch (layerLegend.legendType) {\n      case 'image':\n        svgSource = await this.legendImageToSvg(\n          layerLegend.lastLegendImage,\n          this.hsLanguageService.getTranslationIgnoreNonExisting(\n            'LAYERS',\n            desc.title,\n            undefined,\n          ),\n        );\n        break;\n      case 'svg':\n        svgSource = this.legendToSvg(\n          layerLegend.lastLegendImage,\n          this.hsLanguageService.getTranslationIgnoreNonExisting(\n            'LAYERS',\n            desc.title,\n            undefined,\n          ),\n        );\n        break;\n      default:\n        return;\n    }\n    return svgSource;\n  }\n\n  /**\n   * Create svg from legend source and layer title\n   * @param source - Legend source\n   * @param layerTitle - Layer title\n   */\n  private legendToSvg(source: string, layerTitle: string): string {\n    const heightRegex = /height=\"([0-9]+)\"/;\n    const match = source.match(heightRegex);\n    const height = match && match[1] ? Number(match[1]) : 70;\n    const svgSource = `<svg xmlns='http://www.w3.org/2000/svg' width='${\n      this.legendWidth\n    }' height='${height + 12}px'>\n            <foreignObject width='100%' height='100%'>\n              <div xmlns='http://www.w3.org/1999/xhtml'>\n                ${layerTitle}\n              </div>\n            ${source.replace(/&nbsp;/g, '')}\n            </foreignObject>\n        </svg>`;\n    const svg = 'data:image/svg+xml,' + encodeURIComponent(svgSource);\n    return svg;\n  }\n\n  /**\n   * Create svg from sparqlJson source and layer title\n   * @param category - Category property for sparqlJson layer\n   * @param layerTitle - Layer title\n   */\n  private sparqlJsonToSvg(category: any, layerTitle: string): string {\n    const svgSource = `<svg xmlns='http://www.w3.org/2000/svg' width='${this.legendWidth}' height='70px'>\n            <foreignObject width='100%' height='100%'>\n            <div xmlns='http://www.w3.org/1999/xhtml'>\n              ${layerTitle}\n              <p>\n                <span style=\"background-color: ${category.color}\" xml:space=\"preserve\"></span>${category.name}\n              </p>\n            </div>\n            </foreignObject>\n        </svg>`;\n    const svg = 'data:image/svg+xml,' + encodeURIComponent(svgSource);\n    return svg;\n  }\n\n  /**\n   * Create svg from image url (external source) and layer title\n   * @param imageUrl - Image url\n   * @param layerTitle - Layer title\n   */\n  private legendImageToSvg(\n    imageUrl: string,\n    layerTitle: string,\n  ): Promise<string> {\n    return new Promise(async (resolve, reject) => {\n      const obs = new Observable<string>((subscriber) => {\n        this.loadingExternalImages = true;\n        const img = new Image();\n        const width = this.legendWidth;\n        if (\n          imageUrl?.indexOf('data') !== 0 &&\n          img.getAttribute('crossOrigin') !== undefined\n        ) {\n          img.setAttribute('crossOrigin', 'anonymous');\n        }\n        img.onload = () => {\n          const canvas = document.createElement('canvas');\n          this.hsShareThumbnailService.setCanvasSize(\n            canvas,\n            this.legendWidth,\n            img.height,\n          );\n          const ctx = canvas.getContext('2d');\n          ctx.drawImage(img, 0, 0);\n          ctx.font = '14px sans-serif';\n          const additionalHeight =\n            Math.ceil(ctx.measureText(layerTitle).width) > width ? 40 : 20;\n          const dataURL = canvas.toDataURL('image/png');\n          const svgSource = `<svg xmlns='http://www.w3.org/2000/svg' width='${width}' height='${\n            canvas.height + additionalHeight\n          }'>\n            <foreignObject width='100%' height='100%'>\n                <div xmlns='http://www.w3.org/1999/xhtml'>\n                    ${layerTitle}\n                </div>\n              <svg width='${width}' height='${\n                canvas.height\n              }'><image href=\"${dataURL}\"></image></svg>\n            </foreignObject>\n        </svg>`;\n          const svg = 'data:image/svg+xml,' + encodeURIComponent(svgSource);\n          subscriber.next(svg);\n          subscriber.complete();\n        };\n        img.onerror = function () {\n          subscriber.next(null);\n          subscriber.complete();\n        };\n        img.src = imageUrl;\n      });\n      this.subscriptions.push(\n        obs.subscribe((svg) => {\n          resolve(svg);\n        }),\n      );\n    });\n  }\n}\n","/**\n * Taken from openlayers styles\n */\nexport const SCALE_LINE_CLASSES = `            \n<style type=\"text/css\" >\n  <![CDATA[\n      .ol-scale-line {\n          border-radius: 4px; \n          background: rgba(0, 60, 136, 0.3); \n          padding: 2px\n      }\n      .ol-scale-line-inner {\n          border: 1px solid #eee; \n          border-top: none; \n          color #eee; \n          font-size: 10px; \n          text-align: center; \n          margin: 1px;\n      }\n  ]]>\n</style>`;\nexport const SCALE_BAR_CLASSES = `            \n<style type=\"text/css\" >\n  <![CDATA[\n      .ol-scale-bar {\n      position: absolute;\n      bottom: 8px;\n      left: 8px;\n      }\n      .ol-scale-step-marker {\n        width: 1px;\n        height: 15px;\n        background-color: #000000;\n        float: right;\n        z-index: 10;\n      }\n      .ol-scale-step-text {\n        position: absolute;\n        bottom: -5px;\n        font-size: 12px;\n        z-index: 11;\n        color: #000000;\n        text-shadow: -2px 0 #FFFFFF, 0 2px #FFFFFF, 2px 0 #FFFFFF, 0 -2px #FFFFFF;\n      }\n      .ol-scale-text {\n        position: absolute;\n        font-size: 14px;\n        text-align: center;\n        bottom: 25px;\n        color: #000000;\n        text-shadow: -2px 0 #FFFFFF, 0 2px #FFFFFF, 2px 0 #FFFFFF, 0 -2px #FFFFFF;\n      }\n      .ol-scale-singlebar {\n        position: relative;\n        height: 10px;\n        z-index: 9;\n        box-sizing: border-box;\n        border: 1px solid black;\n      }\n  ]]>\n</style>`;\n","import {Injectable, inject} from '@angular/core';\n\nimport {Control, ScaleLine} from 'ol/control';\n\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsPrintLegendService} from './print-legend.service';\nimport {\n  SCALE_BAR_CLASSES,\n  SCALE_LINE_CLASSES,\n} from './constants/scale-svg-classes';\nimport {ScaleObj} from './types/scale-object.type';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsPrintScaleService {\n  private hsMapService = inject(HsMapService);\n  private hsPrintLegendService = inject(HsPrintLegendService);\n\n  defaultScaleLine: Control = null;\n  scaleBarCSS = SCALE_BAR_CLASSES;\n  scaleLineCSS = SCALE_LINE_CLASSES;\n\n  constructor() {\n    this.hsMapService.loaded().then(() => {\n      this.defaultScaleLine = this.getMapScale();\n    });\n  }\n\n  /**\n   * Set original map scale if it exists\n   */\n  setToDefaultScale(): void {\n    if (this.defaultScaleLine && this.hsMapService.getMap()) {\n      this.setMapScale(this.defaultScaleLine);\n    }\n  }\n\n  /**\n   * Triggered when the scale type or its values have been changed by the user\n   * @param scaleObj - Scale object\n   */\n  scaleChanged(scaleObj: ScaleObj): void {\n    this.setMapScale(this.createNewScaleControl(scaleObj));\n  }\n\n  /**\n   * Draw canvas with scale DOM element\n   * @param scaleObj - Scale object\n   */\n  async drawScaleCanvas(scaleObj: ScaleObj): Promise<HTMLCanvasElement> {\n    const canvas = document.createElement('canvas');\n\n    let cssClasses: string;\n    const type = scaleObj?.scaleType;\n    const scaleElem = this.hsMapService.getScaleLineElement(type);\n    if (!scaleElem) {\n      return;\n    }\n    switch (type) {\n      case 'scalebar':\n        cssClasses = this.scaleBarCSS;\n        canvas.height = scaleElem.clientHeight + 35; //Need to add some px because scale used absolute items outside the parent div\n        break;\n      case 'scaleline':\n      default:\n        cssClasses = this.scaleLineCSS;\n        canvas.height = scaleElem.clientHeight + 5;\n    }\n    const svgSource = this.createScaleSvgSource(type, scaleElem, cssClasses);\n    await this.drawScaleImage(canvas, svgSource);\n    return canvas;\n  }\n\n  /**\n   * Create svg source from scale DOM element\n   * @param type - Scale type\n   * @param scaleElem - Scale element from OpenLayers map DOM\n   * @param cssClasses - CSS classes taken from OpenLayers css\n   */\n  private createScaleSvgSource(\n    type: 'scaleline' | 'scalebar',\n    scaleElem: Element,\n    cssClasses: string,\n  ): string {\n    let width: number;\n    let height: number;\n    switch (type) {\n      case 'scalebar':\n        width = scaleElem.clientWidth + 35; //Need to add some px because scale used absolute items outside the parent div\n        height = scaleElem.clientHeight + 35;\n        break;\n      case 'scaleline':\n      default:\n        width = scaleElem.clientWidth + 2;\n        height = scaleElem.clientHeight;\n    }\n    const svgSource = `<svg xmlns='http://www.w3.org/2000/svg' width='${width}px' height='${height}px'>\n            ${cssClasses}\n            <foreignObject width='100%' height='100%'>\n                <div style=\"color: #eee\" xmlns='http://www.w3.org/1999/xhtml'>\n                  ${scaleElem.outerHTML.replace(/&nbsp;/g, '.')}\n                </div>\n            </foreignObject>\n        </svg>`;\n    const svg = 'data:image/svg+xml,' + encodeURIComponent(svgSource);\n    return svg;\n  }\n\n  /**\n   * Draw scale image from svg source into a canvas\n   * @param canvas - HTMLCanvasElement\n   * @param svgSource - SVG source string\n   */\n  private drawScaleImage(\n    canvas: HTMLCanvasElement,\n    svgSource: string,\n  ): Promise<void> {\n    return new Promise(async (resolve, reject) => {\n      const ctx = canvas.getContext('2d');\n      const img = await this.hsPrintLegendService.svgToImage(svgSource);\n      if (img) {\n        ctx.drawImage(img, 0, 0);\n      }\n      resolve();\n    });\n  }\n\n  /**\n   * Get current map scale Control\n   */\n  private getMapScale(): Control {\n    for (const control of this.hsMapService.getMap().getControls().getArray()) {\n      if (control instanceof ScaleLine) {\n        return control;\n      }\n    }\n  }\n  /**\n   * Create new scale control for the map\n   * @param scaleObj - Scale object\n   */\n  private createNewScaleControl(scaleObj: ScaleObj): Control {\n    let newScaleCtrl: Control;\n    if (scaleObj?.scaleType === 'scalebar') {\n      newScaleCtrl = new ScaleLine({\n        units: scaleObj?.scaleUnits,\n        bar: true,\n        steps: scaleObj?.scaleBarSteps,\n        text: scaleObj?.scaleBarText,\n        minWidth: 140,\n      });\n    } else {\n      newScaleCtrl = new ScaleLine({\n        units: scaleObj?.scaleUnits,\n      });\n    }\n    return newScaleCtrl;\n  }\n\n  /**\n   * Set map scale to a new scale object\n   * @param newControl - Control\n   */\n  private setMapScale(newControl: Control): void {\n    const currentScaleControl = this.getMapScale();\n    if (currentScaleControl) {\n      this.hsMapService.getMap().removeControl(currentScaleControl);\n    }\n    this.hsMapService.getMap().addControl(newControl);\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {HsPrintLegendService} from './print-legend.service';\nimport {HsShareThumbnailService} from 'hslayers-ng/services/share';\nimport {ImprintObj} from './types/imprint-object.type';\nimport {TextStyle} from './types/text-style.type';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsPrintImprintService {\n  private hsPrintLegendService = inject(HsPrintLegendService);\n  private hsShareThumbnailService = inject(HsShareThumbnailService);\n\n  /**\n   * Draw imprint canvas\n   * @param imprintObj - Imprint object\n   */\n  drawImprintCanvas(imprintObj: ImprintObj): Promise<HTMLCanvasElement> {\n    return new Promise(async (resolve, reject) => {\n      const canvas = document.createElement('canvas');\n      const ctx = canvas.getContext('2d');\n      const img = await this.hsPrintLegendService.svgToImage(\n        this.imprintToSvg(imprintObj),\n      );\n      if (img) {\n        this.hsShareThumbnailService.setCanvasSize(\n          canvas,\n          img.width,\n          img.height,\n        );\n        ctx.drawImage(img, 0, 0);\n      }\n      resolve(canvas);\n    });\n  }\n\n  /**\n   * Convert imprint styles and text to an svg\n   * @param imprintObj - Imprint object\n   */\n  private imprintToSvg(imprintObj: ImprintObj): string {\n    const styles = this.getStyles(imprintObj.textStyle);\n    const height = imprintObj.height;\n    const width = imprintObj.width;\n    const svgSource = `<svg xmlns='http://www.w3.org/2000/svg' width='${width}px' height='${height}px'>\n            <foreignObject width='100%' height='100%'>\n              <div xmlns='http://www.w3.org/1999/xhtml' style=\"${styles}\">\n                <div>${imprintObj.author}</div>\n                ${imprintObj.abstract}\n              </div>\n            </foreignObject>\n        </svg>`;\n    const svg = 'data:image/svg+xml,' + encodeURIComponent(svgSource);\n    return svg;\n  }\n\n  /**\n   * Get styles string from textStyle object for the svg\n   * @param textStyle - TextStyle object\n   */\n  private getStyles(textStyle: TextStyle): string {\n    let tmpStyle = 'padding: 5px;';\n    if (textStyle.posX === 'right') {\n      tmpStyle += 'text-align:end;';\n    } else if (textStyle.posX === 'left') {\n      tmpStyle += 'text-align:start;';\n    } else {\n      tmpStyle += 'text-align:center;';\n    }\n\n    if (textStyle.bcColor) {\n      tmpStyle += `background-color: ${textStyle.bcColor};`;\n    }\n    tmpStyle += `font:${textStyle.fontStyle.concat(\n      ' ',\n      textStyle.textSize,\n      ' ',\n      textStyle.fontFamily,\n    )};`;\n\n    return tmpStyle;\n  }\n}\n","import {Injectable} from '@angular/core';\n\nimport {TextStyle} from './types/text-style.type';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsPrintTitleService {\n  constructor() {}\n\n  /**\n   * Draw canvas with styled text\n   * @param text - Text string\n   * @param textStyle - Text style object\n   */\n  drawTitleCanvas(\n    text: string,\n    textStyle: TextStyle,\n  ): Promise<HTMLCanvasElement> {\n    return new Promise(async (resolve, reject) => {\n      const canvas = document.createElement('canvas');\n      const ctx = canvas.getContext('2d');\n      this.applyTextStyles(ctx, textStyle);\n      const textHeight = Number(textStyle.textSize.replace(/[^0-9]+/, ''));\n      this.drawTitle(ctx, text, textStyle, textHeight);\n      //Necessary in order to measure text width and height, so that the canvas can be adjusted accordingly\n      setTimeout(() => {\n        canvas.width = ctx.measureText(text).width + 10;\n        canvas.height = textHeight + 20;\n        canvas.style.width = canvas.width + 'px';\n        this.applyTextStyles(ctx, textStyle);\n        this.drawTitle(ctx, text, textStyle, textHeight);\n        resolve(canvas);\n      }, 0);\n    });\n  }\n\n  /**\n   * Draw title text inside canvas\n   * @param ctx - Title canvas context\n   * @param text - Text string\n   * @param textStyle - Text style object\n   * @param yPos - Y pixels position\n   */\n  private drawTitle(\n    ctx: CanvasRenderingContext2D,\n    text: string,\n    textStyle: TextStyle,\n    yPos: number,\n  ): void {\n    if (textStyle.textDraw === 'stroke') {\n      ctx.strokeText(text, 0, yPos);\n    } else {\n      ctx.fillText(text, 0, yPos);\n    }\n  }\n\n  /**\n   * Apply styles to title canvas context\n   * @param ctx - Title canvas context\n   * @param textStyle - Text style object\n   */\n  private applyTextStyles(\n    ctx: CanvasRenderingContext2D,\n    textStyle: TextStyle,\n  ): void {\n    ctx.font = textStyle.fontStyle.concat(\n      ' ',\n      textStyle.textSize,\n      ' ',\n      textStyle.fontFamily,\n    );\n    if (textStyle.textColor) {\n      ctx.strokeStyle = textStyle.textColor;\n      ctx.fillStyle = textStyle.textColor;\n    }\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {from, takeUntil} from 'rxjs';\n\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsPrintImprintService} from './print-imprint.service';\nimport {HsPrintLegendService} from './print-legend.service';\nimport {HsPrintScaleService} from './print-scale.service';\nimport {HsPrintTitleService} from './print-title.service';\nimport {HsShareThumbnailService} from 'hslayers-ng/services/share';\nimport {PrintModel} from './types/print-object.type';\nimport {xPos, yPos} from './types/xy-positions.type';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsPrintService {\n  private hsMapService = inject(HsMapService);\n  private hsShareThumbnailService = inject(HsShareThumbnailService);\n  private hsPrintLegendService = inject(HsPrintLegendService);\n  private hsPrintScaleService = inject(HsPrintScaleService);\n  private hsPrintTitleService = inject(HsPrintTitleService);\n  private hsPrintImprintService = inject(HsPrintImprintService);\n\n  /**\n   * Print styled print layout\n   * @param print - Print object\n   * @param complete - If true, generated image will be opened and printing interface will be created\n   */\n  async print(print: PrintModel, complete?: boolean): Promise<void> {\n    const obs = from(\n      new Promise<string>(async (resolve, reject) => {\n        const img = await this.createMapImage(print);\n        resolve(img);\n      }),\n    );\n    obs\n      .pipe(takeUntil(this.hsPrintLegendService.cancelRequest))\n      .subscribe((img) => {\n        const win = window.open();\n        const html = `<html><head></head><style>body{background-color:white !important;}@page { size: landscape; }</style><body><img src='${img}'/></body></html>`;\n        if (!win) {\n          return;\n        }\n        win.document.write(html);\n        setTimeout(() => {\n          if (complete) {\n            win.print();\n          }\n          //win.location.reload();\n        }, 250);\n      });\n  }\n\n  /**\n   * Download map print layout as png image\n   * @param print - Print object\n   */\n  async download(print: PrintModel): Promise<void> {\n    const img = await this.createMapImage(print);\n    if (!document) {\n      return;\n    }\n    const a = document.createElement('a');\n    document.body.appendChild(a);\n    a.setAttribute('style', 'display: none');\n    a.href = img;\n    a.download = 'HSL-map';\n    a.click();\n    window.URL.revokeObjectURL(img);\n    a.remove();\n  }\n\n  /**\n   * Create map image with additional styled text, optional scale, legend or imprint\n   * @param print - Print object\n   */\n  async createMapImage(print: PrintModel): Promise<string> {\n    await this.hsMapService.loaded();\n    const canvases = this.hsMapService.getCanvases();\n    const composition = document.createElement('canvas');\n    const ctx = composition.getContext('2d');\n    const res = [canvases[0].clientWidth, canvases[0].clientHeight];\n    this.hsShareThumbnailService.setCanvasSize(composition, res[0], res[1]);\n    canvases.forEach((canvas) => {\n      if (canvas.clientWidth > 0 && canvas.clientHeight > 0) {\n        ctx.drawImage(canvas, 0, 0);\n      }\n    });\n\n    if (print.titleObj?.text) {\n      const tCanvas = await this.hsPrintTitleService.drawTitleCanvas(\n        print.titleObj.text,\n        print.titleObj.textStyle,\n      );\n      if (tCanvas) {\n        const textPos = this.getChildPosition(\n          composition,\n          tCanvas,\n          print.titleObj.textStyle.posX,\n          print.titleObj.textStyle.posY,\n        );\n        ctx.drawImage(tCanvas, textPos[0], textPos[1]);\n      }\n    }\n    if (print.scaleObj?.include) {\n      const sCanvas = await this.hsPrintScaleService.drawScaleCanvas(\n        print.scaleObj,\n      );\n      if (sCanvas) {\n        ctx.drawImage(sCanvas, 3, composition.height - sCanvas.height);\n      }\n    }\n\n    if (print.legendObj?.include) {\n      const lCanvas = await this.hsPrintLegendService.drawLegendCanvas(\n        print.legendObj,\n      );\n      if (lCanvas) {\n        const legendPos = this.getChildPosition(\n          composition,\n          lCanvas,\n          print.legendObj.posX,\n          print.legendObj.posY,\n        );\n        ctx.drawImage(lCanvas, legendPos[0], legendPos[1]);\n      }\n    }\n    if (\n      (print.imprintObj?.include && print.imprintObj?.author) ||\n      print.imprintObj?.abstract\n    ) {\n      const iCanvas = await this.hsPrintImprintService.drawImprintCanvas(\n        print.imprintObj,\n      );\n      if (iCanvas) {\n        const imprintPos = this.getChildPosition(\n          composition,\n          iCanvas,\n          print.imprintObj.textStyle.posX,\n          print.imprintObj.textStyle.posY,\n        );\n        ctx.drawImage(iCanvas, imprintPos[0], imprintPos[1]);\n      }\n    }\n    return composition.toDataURL('image/png');\n  }\n\n  /**\n   * Get child canvas position relative to parent canvas\n   * @param parentC - Parent HTMLCanvasElement\n   * @param childC - Child HTMLCanvasElement\n   * @param xPos - X pixels\n   * @param yPos - Y pixels\n   */\n  private getChildPosition(\n    parentC: HTMLCanvasElement,\n    childC: HTMLCanvasElement,\n    xPos: xPos,\n    yPos: yPos,\n  ): number[] {\n    const pos = [0, 0];\n    if (!xPos && !yPos) {\n      return pos;\n    }\n    switch (xPos) {\n      case 'right':\n        pos[0] = parentC.width - childC.width;\n        break;\n      case 'left':\n        pos[0] = 0;\n        break;\n      case 'center':\n      default:\n        pos[0] = (parentC.width - childC.width) / 2;\n    }\n\n    switch (yPos) {\n      case 'middle':\n        pos[1] = (parentC.height - childC.height) / 2;\n        break;\n      case 'bottom':\n        pos[1] = parentC.height - childC.height;\n        break;\n      case 'top':\n      default:\n        pos[1] = 0;\n        break;\n    }\n    return pos;\n  }\n}\n","export const POSITION_OPTIONS = {\n  positionsX: ['left', 'center', 'right'],\n  positionsY: ['top', 'middle', 'bottom'],\n};\n\nexport const CANVAS_SIZES = [50, 100, 200, 300, 400, 500, 600, 800, 1000];\n","export const TEXT_STYLING_OPTIONS = {\n  // resolutions: [\n  //   '640:360',\n  //   '800:600',\n  //   '1024:768',\n  //   '1280:720',\n  //   '1280:800',\n  //   '1280:1024',\n  //   '1360:768',\n  //   '1366:768',\n  //   '1440:900',\n  //   '1536:864',\n  //   '1600:900',\n  //   '1680:1050',\n  //   '1920:1080',\n  //   '1920:1200',\n  //   '2048:1536',\n  //   '2560:1080',\n  //   '2560:1440',\n  //   '3440:1440',\n  //   '3840:2160',\n  // ];\n  fonts: [\n    'Arial',\n    'Verdana',\n    'Sans-serif',\n    'Courier New',\n    'Lucida Console',\n    'Monospace',\n    'Times New Roman',\n    'Georgia',\n    'Serif',\n  ],\n  fontStyles: ['normal', 'italic', 'bold'],\n  textDrawTypes: ['fill', 'stroke'],\n  textSizes: [\n    '9px',\n    '10px',\n    '12px',\n    '16px',\n    '18px',\n    '24px',\n    '30px',\n    '32px',\n    '40px',\n    '46px',\n    '48px',\n    '72px',\n    '84px',\n    '96px',\n  ],\n};\n","import {NgStyle} from '@angular/common';\nimport {Component, Input, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {ColorEvent} from 'ngx-color';\n\nimport {ColorSketchModule} from 'ngx-color/sketch';\nimport {HsColorPickerService} from 'hslayers-ng/components/styler';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {POSITION_OPTIONS} from '../constants/position-options';\nimport {TEXT_STYLING_OPTIONS} from '../constants/text-styling-options';\nimport {TextStyle} from '../types/text-style.type';\n\nexport enum ColorPickers {\n  Fill = 'fill',\n  Background = 'background',\n}\n@Component({\n  selector: 'hs-print-text-styler',\n  templateUrl: './text-styler.component.html',\n  imports: [NgStyle, FormsModule, TranslatePipe, ColorSketchModule],\n})\nexport class HsPrintTextStylerComponent {\n  private hsColorPickerService = inject(HsColorPickerService);\n  private hsLanguageService = inject(HsLanguageService);\n\n  @Input() textStyle: TextStyle;\n  @Input() objectName: string;\n  fillPickerVisible = false;\n  bcPickerVisible = false;\n  textColor = 'white';\n  backgroundColor = 'white';\n  stylingOptions = TEXT_STYLING_OPTIONS;\n  positionOptions = POSITION_OPTIONS;\n\n  /**\n   * Triggered when color picker value has been selected\n   * @param $event - ColorEvent\n   * @param type - color picker type selected\n   */\n  onPick($event: ColorEvent, type: 'fill' | 'background'): void {\n    const hex = $event.color.hex;\n    const hsp = this.hsColorPickerService.generateFontColor([\n      $event.color.rgb.r,\n      $event.color.rgb.g,\n      $event.color.rgb.b,\n    ]);\n    switch (type) {\n      case ColorPickers.Fill:\n        this.textStyle.textColor = hex;\n        this.textColor = hsp;\n        break;\n      case ColorPickers.Background:\n        this.textStyle.bcColor = hex;\n        this.backgroundColor = hsp;\n        break;\n      default:\n        return;\n    }\n  }\n\n  /**\n   * Get color picker style values for DOM styling\n   * @param type - color picker type selected\n   */\n  getColorPickerStyle(type: 'fill' | 'background'): any {\n    switch (type) {\n      case ColorPickers.Fill:\n        return this.hsColorPickerService.colorPickerStyle(\n          this.textStyle.textColor,\n          this.textColor,\n        );\n\n      case ColorPickers.Background:\n        return this.hsColorPickerService.colorPickerStyle(\n          this.textStyle.bcColor,\n          this.backgroundColor,\n        );\n      default:\n        return;\n    }\n  }\n\n  /**\n   * Set color picker visibility\n   * @param type - color picker type selected\n   */\n  setColorPickerVisible(type: 'fill' | 'background'): void {\n    switch (type) {\n      case ColorPickers.Fill:\n        this.fillPickerVisible = !this.fillPickerVisible;\n        this.bcPickerVisible = false;\n        break;\n      case ColorPickers.Background:\n        this.bcPickerVisible = !this.bcPickerVisible;\n        this.fillPickerVisible = false;\n        break;\n      default:\n        return;\n    }\n  }\n\n  /**\n   * Get translation for the value string\n   * @param module - Translation module\n   * @param text - Text to translate\n   */\n  getTranslation(module: string, text: string): string {\n    return this.hsLanguageService.getTranslationIgnoreNonExisting(\n      module,\n      text,\n      undefined,\n    );\n  }\n}\n","<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'PRINT.textColor' | translate }}:</div>\n  <div class=\"p-1 w-100\">\n    <input class=\"form-control form-select-sm\" (click)=\"setColorPickerVisible('fill')\"\n      [ngStyle]=\"getColorPickerStyle('fill')\" [ngModelOptions]=\"{standalone: true}\" [(ngModel)]=\"textStyle.textColor\" />\n    @if (fillPickerVisible) {\n      <color-sketch (onChangeComplete)=\"onPick($event, 'fill')\" width=\"320px\">\n    </color-sketch>\n  }\n</div>\n</div>\n@if (objectName === 'imprint') {\n  <div class=\"d-flex flex-row\">\n    <div class=\"p-1 w-50 mt-1\">{{'PRINT.backgroundColor' | translate }}:</div>\n    <div class=\"p-1 w-100\">\n      <input class=\"form-control form-select-sm\" (click)=\"setColorPickerVisible('background')\"\n        [ngStyle]=\"getColorPickerStyle('background')\" [ngModelOptions]=\"{standalone: true}\"\n        [(ngModel)]=\"textStyle.bcColor\" /><!-- TODO: Remove function call from template -->\n        @if (bcPickerVisible) {\n          <color-sketch (onChangeComplete)=\"onPick($event, 'background')\" width=\"320px\">\n        </color-sketch>\n      }\n    </div>\n  </div>\n}\n<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'STYLER.textSize' | translate }}:</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"textStyle.textSize\"\n      [ngModelOptions]=\"{standalone: true}\" style=\"flex-grow: 1;\">\n    @for (size of stylingOptions.textSizes; track size) {\n      <option>{{size}}\n      </option>\n    }\n  </select>\n</div>\n</div>\n<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'STYLER.font' | translate }}:</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"textStyle.fontFamily\"\n      [ngModelOptions]=\"{standalone: true}\">\n      @for (font of stylingOptions.fonts; track font) {\n        <option>{{font}}\n        </option>\n      }\n    </select>\n  </div>\n</div>\n<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'STYLER.fontStyle' | translate }}:</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"textStyle.fontStyle\"\n      [ngModelOptions]=\"{standalone: true}\">\n      @for (fontStyle of stylingOptions.fontStyles; track fontStyle) {\n        <option [ngValue]=\"fontStyle\">\n          {{getTranslation('PRINT',fontStyle)}}<!-- TODO: Remove function call from template -->\n        </option>\n      }\n    </select>\n  </div>\n</div>\n@if (objectName === 'title') {\n  <div class=\"d-flex flex-row\">\n    <div class=\"p-1 w-50 mt-1\">{{'PRINT.textDraw' | translate }}:</div>\n    <div class=\"p-1 w-100\">\n      <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"textStyle.textDraw\"\n        [ngModelOptions]=\"{standalone: true}\">\n        @for (textDraw of stylingOptions.textDrawTypes; track textDraw) {\n          <option [ngValue]=\"textDraw\">\n            {{getTranslation('COMMON',textDraw)}}<!-- TODO: Remove function call from template -->\n          </option>\n        }\n      </select>\n    </div>\n  </div>\n}\n<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'PRINT.textPosition' | translate }} X:</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"textStyle.posX\"\n      [ngModelOptions]=\"{standalone: true}\">\n      @for (positionX of positionOptions.positionsX; track positionX) {\n        <option [ngValue]=\"positionX\">\n          {{getTranslation('PRINT',positionX)}}<!-- TODO: Remove function call from template -->\n        </option>\n      }\n    </select>\n  </div>\n</div>\n\n<div class=\"d-flex flex-row mb-2\">\n  <div class=\"p-1 w-50 mt-1\">{{'PRINT.textPosition' | translate }} Y:</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"textStyle.posY\"\n      [ngModelOptions]=\"{standalone: true}\">\n      @for (positionY of positionOptions.positionsY; track positionY) {\n        <option [ngValue]=\"positionY\">\n          {{getTranslation('PRINT',positionY)}}<!-- TODO: Remove function call from template -->\n        </option>\n      }\n    </select>\n  </div>\n</div>\n","import {Component, Input} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {CANVAS_SIZES} from '../constants/position-options';\nimport {HsPrintTextStylerComponent} from '../text-styler/text-styler.component';\nimport {ImprintObj} from '../types/imprint-object.type';\n\n@Component({\n  selector: 'hs-print-imprint-styler',\n  templateUrl: './imprint-styler.component.html',\n  imports: [FormsModule, HsPrintTextStylerComponent, TranslatePipe],\n})\nexport class HsPrintImprintStylerComponent {\n  @Input() imprintObj: ImprintObj;\n  sizes = CANVAS_SIZES;\n\n  constructor() {}\n}\n","<div class=\"form-floating mb-2\">\n  <input type=\"text\" class=\"form-control\" id=\"imprint-author\" [(ngModel)]=\"imprintObj.author\"\n    [placeholder]=\"'COMMON.author' | translate  \" />\n  <label for=\"imprint-author\" class=\"control-label\">{{'COMMON.author' | translate }}</label>\n</div>\n<div class=\"form-floating mb-2\">\n  <textarea class=\"form-control\" id='imprint-abstract' [placeholder]=\"'COMMON.fillInDescriptive' | translate  \"\n    name=\"imprint-abstract\" [(ngModel)]=\"imprintObj.abstract\">\n  </textarea>\n  <label for=\"imprint-abstract\" class=\"control-label\">{{'COMMON.abstract' | translate }}</label>\n</div>\n<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'COMMON.width' | translate }}</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"imprintObj.width\"\n      [ngModelOptions]=\"{standalone: true}\">\n      @for (width of sizes; track width) {\n        <option [ngValue]=\"width\">\n          {{width}}px\n        </option>\n      }\n    </select>\n  </div>\n</div>\n<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'COMMON.height' | translate }}</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"imprintObj.height\"\n      [ngModelOptions]=\"{standalone: true}\">\n      @for (height of sizes; track height) {\n        <option [ngValue]=\"height\">\n          {{height}}px\n        </option>\n      }\n    </select>\n  </div>\n</div>\n<hs-print-text-styler [textStyle]=\"imprintObj.textStyle\" [objectName]=\"'imprint'\"></hs-print-text-styler>\n","import {CommonModule} from '@angular/common';\nimport {Component, Input, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {ColorEvent} from 'ngx-color';\nimport {ColorSketchModule} from 'ngx-color/sketch';\n\nimport {CANVAS_SIZES, POSITION_OPTIONS} from '../constants/position-options';\nimport {HsColorPickerService} from 'hslayers-ng/components/styler';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {LegendObj} from '../types/legend-object.type';\n\n@Component({\n  selector: 'hs-print-legend-styler',\n  templateUrl: './legend-styler.component.html',\n  imports: [CommonModule, FormsModule, TranslatePipe, ColorSketchModule],\n})\nexport class HsPrintLegendStylerComponent {\n  hsLanguageService = inject(HsLanguageService);\n  private hsColorPickerService = inject(HsColorPickerService);\n\n  bcColor: string;\n  fillPickerVisible = false;\n  positionOptions = POSITION_OPTIONS;\n  legendWidths = CANVAS_SIZES;\n  @Input() legendObj: LegendObj;\n\n  /**\n   * Triggered when color picker value has been selected\n   * @param $event - ColorEvent\n   */\n  onPick($event: ColorEvent): void {\n    const hex = $event.color.hex;\n    const hsp = this.hsColorPickerService.generateFontColor([\n      $event.color.rgb.r,\n      $event.color.rgb.g,\n      $event.color.rgb.b,\n    ]);\n    this.legendObj.bcColor = hex;\n    this.bcColor = hsp;\n  }\n\n  /**\n   * Get color picker style values for DOM styling\n   */\n  getColorPickerStyle(): any {\n    return this.hsColorPickerService.colorPickerStyle(\n      this.legendObj.bcColor,\n      this.bcColor,\n    );\n  }\n\n  /**\n   * Get translation for the value string\n   * @param module - Translation module\n   * @param text - Text to translate\n   */\n  getTranslation(module: string, text: string): string {\n    return this.hsLanguageService.getTranslationIgnoreNonExisting(\n      module,\n      text,\n      undefined,\n    );\n  }\n}\n","<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'PRINT.backgroundColor' | translate }}:</div>\n  <div class=\"p-1 w-100\">\n    <input class=\"form-control form-select-sm\" (click)=\"fillPickerVisible = !fillPickerVisible\"\n      [ngStyle]=\"getColorPickerStyle()\" [ngModelOptions]=\"{standalone: true}\" [(ngModel)]=\"legendObj.bcColor\" />\n    @if (fillPickerVisible) {\n      <color-sketch (onChangeComplete)=\"onPick($event)\" width=\"320px\">\n    </color-sketch>\n  }\n</div>\n</div>\n<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'COMMON.width' | translate }}</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"legendObj.width\"\n      [ngModelOptions]=\"{standalone: true}\">\n      @for (width of legendWidths; track width) {\n        <option [ngValue]=\"width\">\n          {{width}}px\n        </option>\n      }\n    </select>\n  </div>\n</div>\n<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'PRINT.textPosition' | translate }} X:</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"legendObj.posX\"\n      [ngModelOptions]=\"{standalone: true}\">\n      @for (positionX of positionOptions.positionsX; track positionX) {\n        <option [ngValue]=\"positionX\">\n          {{getTranslation('PRINT',positionX)}}<!-- TODO: Remove function call from template -->\n        </option>\n      }\n    </select>\n  </div>\n</div>\n<div class=\"d-flex flex-row mb-2\">\n  <div class=\"p-1 w-50 mt-1\">{{'PRINT.textPosition' | translate }} Y:</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"legendObj.posY\"\n      [ngModelOptions]=\"{standalone: true}\">\n      @for (positionY of positionOptions.positionsY; track positionY) {\n        <option [ngValue]=\"positionY\">\n          {{getTranslation('PRINT',positionY)}}<!-- TODO: Remove function call from template -->\n        </option>\n      }\n    </select>\n  </div>\n</div>\n","export const SCALE_STYLING_OPTIONS = {\n  scaleType: ['scaleline', 'scalebar'],\n  scaleUnits: [\n    {name: 'degrees', value: 'degrees'},\n    {name: 'us inch', value: 'us'},\n    {name: 'nautical mile', value: 'nautical'},\n    {name: 'metric', value: 'metric'},\n  ],\n  scaleBarSteps: [2, 4, 6, 8],\n};\n","import {Component, Input, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsPrintScaleService} from '../print-scale.service';\nimport {SCALE_STYLING_OPTIONS} from '../constants/scale-styling-options';\nimport {ScaleObj} from '../types/scale-object.type';\n\n@Component({\n  selector: 'hs-print-scale-styler',\n  templateUrl: './scale-styler.component.html',\n  imports: [FormsModule, TranslatePipe],\n})\nexport class HsPrintScaleStylerComponent {\n  private hsPrintScaleService = inject(HsPrintScaleService);\n  private hsLanguageService = inject(HsLanguageService);\n\n  @Input() scaleObj: ScaleObj;\n  stylingOptions = SCALE_STYLING_OPTIONS;\n\n  /**\n   * Triggered when scale object values have been changed\n   */\n  scaleObjChanged(): void {\n    this.hsPrintScaleService.scaleChanged(this.scaleObj);\n  }\n\n  /**\n   * Get translation for the value string\n   * @param module - Translation module\n   * @param text - Text to translate\n   */\n  getTranslation(module: string, text: string): string {\n    return this.hsLanguageService.getTranslationIgnoreNonExisting(\n      module,\n      text,\n      undefined,\n    );\n  }\n}\n","<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'PRINT.scaleType' | translate }}:</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"scaleObj.scaleType\"\n      [ngModelOptions]=\"{standalone: true}\" style=\"flex-grow: 1;\" (ngModelChange)=\"scaleObjChanged()\">\n      @for (scaleType of stylingOptions.scaleType; track scaleType) {\n        <option [ngValue]=\"scaleType\">\n          {{getTranslation('PRINT',scaleType)}}<!-- TODO: Remove function call from template -->\n        </option>\n      }\n    </select>\n  </div>\n</div>\n@if (scaleObj.scaleType === 'scalebar') {\n  <div class=\"d-flex flex-row\">\n    <div class=\"p-1 w-50 mt-1\">{{'PRINT.scaleBarText' | translate }}:</div>\n    <div class=\"p-1 w-100\">\n      <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"scaleObj.scaleBarText\"\n        (ngModelChange)=\"scaleObjChanged()\" />\n    </div>\n  </div>\n}\n<div class=\"d-flex flex-row\">\n  <div class=\"p-1 w-50 mt-1\">{{'PRINT.scaleUnits' | translate }}:</div>\n  <div class=\"p-1 w-100\">\n    <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"scaleObj.scaleUnits\"\n      (ngModelChange)=\"scaleObjChanged()\" [ngModelOptions]=\"{standalone: true}\" style=\"flex-grow: 1;\">\n      @for (scaleUnits of stylingOptions.scaleUnits; track scaleUnits) {\n        <option [ngValue]=\"scaleUnits.value\">\n          {{getTranslation('PRINT',scaleUnits.name)}}<!-- TODO: Remove function call from template -->\n        </option>\n      }\n    </select>\n  </div>\n</div>\n@if (scaleObj.scaleType === 'scalebar') {\n  <div class=\"d-flex flex-row\">\n    <div class=\"p-1 w-50 mt-1\">{{'PRINT.scaleSteps' | translate }}:</div>\n    <div class=\"p-1 w-100\">\n      <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"scaleObj.scaleBarSteps\"\n        (ngModelChange)=\"scaleObjChanged()\" [ngModelOptions]=\"{standalone: true}\" style=\"flex-grow: 1;\">\n        @for (scaleBarSteps of stylingOptions.scaleBarSteps; track scaleBarSteps) {\n          <option [ngValue]=\"scaleBarSteps\">{{scaleBarSteps}}\n            {{'COMMON.steps' |\n            translate }}\n          </option>\n        }\n      </select>\n    </div>\n  </div>\n}\n","import {Component, OnInit, inject} from '@angular/core';\n\nimport {HsPanelBaseComponent} from 'hslayers-ng/common/panels';\nimport {HsPrintLegendService} from './print-legend.service';\nimport {HsPrintScaleService} from './print-scale.service';\nimport {HsPrintService} from './print.service';\nimport {PrintModel} from './types/print-object.type';\nimport {Styler} from './types/styler.type';\n\n@Component({\n  selector: 'hs-print',\n  templateUrl: './print.component.html',\n  standalone: false,\n})\nexport class HsPrintComponent extends HsPanelBaseComponent implements OnInit {\n  private hsPrintService = inject(HsPrintService);\n  private hsPrintScaleService = inject(HsPrintScaleService);\n  private hsPrintLegendService = inject(HsPrintLegendService);\n\n  name = 'print';\n  stylers: Styler[] = [\n    {name: 'title', visible: false},\n    {name: 'legend', visible: false},\n    {name: 'imprint', visible: false},\n    {name: 'scale', visible: false},\n  ];\n  print: PrintModel;\n\n  ngOnInit(): void {\n    this.setToDefault();\n    super.ngOnInit();\n  }\n\n  /**\n   * Set print object to default values\n   */\n  setToDefault(): void {\n    this.print = {\n      titleObj: {\n        text: '',\n        textStyle: {\n          textColor: 'black',\n          textSize: '30px',\n          fontFamily: 'Times New Roman',\n          fontStyle: 'normal',\n          textDraw: 'fill',\n          posX: 'center',\n          posY: 'top',\n        },\n      },\n      scaleObj: {\n        include: false,\n        scaleType: 'scaleline',\n        scaleBarText: null,\n        scaleBarSteps: 4,\n        scaleUnits: 'metric',\n      },\n      legendObj: {\n        include: false,\n        width: 200,\n        bcColor: 'white',\n        posX: 'right',\n        posY: 'bottom',\n      },\n      imprintObj: {\n        include: false,\n        author: '',\n        abstract: '',\n        width: 100,\n        height: 50,\n        textStyle: {\n          textColor: 'black',\n          bcColor: 'transparent',\n          textSize: '12px',\n          fontFamily: 'Times New Roman',\n          fontStyle: 'normal',\n          posX: 'center',\n          posY: 'bottom',\n        },\n      },\n    };\n    this.stylers.forEach((s) => {\n      s.visible = false;\n    });\n    this.hsPrintScaleService.setToDefaultScale();\n    this.hsPrintLegendService.loadingExternalImages = false;\n  }\n\n  /**\n   * Cancel loading print layout image\n   */\n  cancelLoading(): void {\n    this.hsPrintLegendService.cancelRequest.next();\n  }\n\n  /**\n   * Print or preview print layout\n   * @param complete - Indicates whether the user wants to print or preview the image\n   */\n  async printLayout(complete: boolean): Promise<void> {\n    await this.hsPrintService.print(this.print, complete);\n  }\n\n  /**\n   * Download print layout as png image\n   */\n  async download(): Promise<void> {\n    await this.hsPrintService.download(this.print);\n  }\n\n  isLoading(): boolean {\n    return this.hsPrintLegendService.loadingExternalImages;\n  }\n\n  /**\n   * Set styler visibility\n   * @param stylerVisible - Selected styler name, that is being toggled\n   */\n  setStylerVisible(stylerVisible: string): void {\n    this.stylers.forEach((s) => {\n      if (s.name === stylerVisible) {\n        s.visible = !s.visible;\n      } else {\n        s.visible = false;\n      }\n    });\n  }\n\n  /**\n   * Get styler visibility\n   * @param stylerVisible - Selected styler name, that is being toggled\n   */\n  getStylerVisible(stylerVisible: string): boolean {\n    return this.stylers.find((s) => s.name === stylerVisible)?.visible ?? false;\n  }\n}\n","@if (isVisible$ | async) {\n  <div class=\"card hs-main-panel\" [ngClass]=\"panelWidthClass\" #hsPrint>\n    <hs-panel-header name=\"print\" [panelTabs]=\"'PRINT'\">\n      <button mainButton class=\"btn btn-sm btn-outline-primary border-0\" (click)=\"setToDefault()\"\n        [title]=\"'COMMON.resetToDefault' | translate \"> {{'COMMON.reset' | translate}}\n        <i class=\"fa-solid fa-redo\"></i>\n      </button>\n    </hs-panel-header>\n    <div class=\"card-body\">\n      <div class=\"card-body\">\n        <div class=\"form-floating mb-2\">\n          <input type=\"text\" class=\"form-control\" id=\"print-title\" [(ngModel)]=\"print.titleObj.text\"\n            [placeholder]=\"'COMMON.title' | translate \" />\n          <label for=\"print-title\" class=\"control-label\">{{'COMMON.title' | translate\n          }}</label>\n        </div>\n        <div class=\"d-flex justify-content-around mb-2\">\n          <div class=\"form-check border-0\">\n            <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"print.legendObj.include\"\n              name=\"includeLegend\" id=\"includeLegend\">\n            <label class=\"form-check-label pt-1\" for=\"includeLegend\" style=\"cursor:pointer\">{{'COMMON.legend' |\n            translate }}</label>\n          </div>\n          <div class=\"form-check border-0\">\n            <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"print.imprintObj.include\"\n              name=\"includeImprint\" id=\"includeImprint\">\n            <label class=\"form-check-label pt-1\" for=\"includeImprint\" style=\"cursor:pointer\">{{'PRINT.imprint' |\n            translate }}</label>\n          </div>\n          <div class=\"form-check border-0\">\n            <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"print.scaleObj.include\"\n              name=\"includeScale\" id=\"includeScale\">\n            <label class=\"form-check-label pt-1\" for=\"includeScale\" style=\"cursor:pointer\">{{'COMMON.scale' |\n            translate }}</label>\n          </div>\n        </div>\n        <button type=\"button\" class=\"btn w-100 mb-2 btn-outline-secondary dropdown-toggle dropdown-toggle-split\"\n          (click)=\"setStylerVisible('title')\" [disabled]=\"!print.titleObj.text\">\n          {{'PRINT.titleStylingOptions' | translate }}\n        </button>\n        @if (getStylerVisible('title')) {\n          <hs-print-text-styler [textStyle]=\"print.titleObj.textStyle\"\n            [objectName]=\"'title'\">\n            <!-- TODO: Remove function call from template -->\n          </hs-print-text-styler>\n        }\n        <button type=\"button\" [disabled]=\"!print.legendObj.include\" (click)=\"setStylerVisible('legend')\"\n          class=\"btn w-100 mb-2 btn-outline-secondary dropdown-toggle dropdown-toggle-split\">\n          {{'PRINT.legendStylingOptions' | translate }}\n        </button>\n        @if (getStylerVisible('legend') && print.legendObj.include) {\n          <hs-print-legend-styler\n            [legendObj]=\"print.legendObj\">\n            <!-- TODO: Remove function call from template -->\n          </hs-print-legend-styler>\n        }\n        <button [disabled]=\"!print.imprintObj.include\" type=\"button\" (click)=\"setStylerVisible('imprint')\"\n          class=\"btn w-100 mb-2 btn-outline-secondary dropdown-toggle dropdown-toggle-split\">\n          {{'PRINT.imprintStylingOptions' | translate }}\n        </button>\n        @if (getStylerVisible('imprint') && print.imprintObj.include) {\n          <hs-print-imprint-styler\n            [imprintObj]=\"print.imprintObj\">\n            <!-- TODO: Remove function call from template -->\n          </hs-print-imprint-styler>\n        }\n        <button [disabled]=\"!print.scaleObj.include\" type=\"button\" (click)=\"setStylerVisible('scale')\"\n          class=\"btn w-100 mb-2 btn-outline-secondary dropdown-toggle dropdown-toggle-split\">\n          {{'PRINT.scaleStylingOptions' | translate }}\n        </button>\n        @if (getStylerVisible('scale') && print.scaleObj.include) {\n          <hs-print-scale-styler\n            [scaleObj]=\"print.scaleObj\">\n            <!-- TODO: Remove function call from template -->\n          </hs-print-scale-styler>\n        }\n        @if (!isLoading()) {\n          <div class=\"mb-2 mt-2 d-flex justify-content-start\">\n            <button type=\"button\" class=\"btn btn-primary me-2 w-50\" (click)=\"printLayout(true)\">{{'COMMON.print' |\n            translate }}</button>\n            <button type=\"button\" class=\"btn btn-secondary w-50\" (click)=\"printLayout(false)\">{{'COMMON.preview' |\n            translate }}</button>\n            <button class=\"btn btn-secondary ms-2\" (click)=\"download()\" data-toggle=\"tooltip\"\n              [title]=\"'COMMON.downloadAsPng' | translate\"><i class=\"fa-solid fa-download\"></i></button>\n            </div>\n          }\n          @if (isLoading()) {\n            <div class=\"d-flex justify-content-center btn-group w-75 m-auto\">\n              <button class=\"btn btn-primary w-75\">{{'ADDDATA.CATALOGUE.loading' | translate\n                }}...<span class=\"hs-loader ms-2\"></span></button>\n                <button class=\"btn btn-secondary\" (click)=\"cancelLoading()\">&#10006;\n                </button>\n              </div>\n            }\n          </div>\n        </div>\n      </div>\n    }\n","import {AsyncPipe, NgClass} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {NgModule} from '@angular/core';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsPanelHeaderComponent} from 'hslayers-ng/common/panels';\nimport {HsPrintComponent} from './print.component';\nimport {HsPrintImprintStylerComponent} from './imprint-styler/imprint-styler.component';\nimport {HsPrintLegendStylerComponent} from './legend-styler/legend-styler.component';\nimport {HsPrintScaleStylerComponent} from './scale-styler/scale-styler.component';\nimport {HsPrintTextStylerComponent} from './text-styler/text-styler.component';\n\n@NgModule({\n  imports: [\n    HsPrintImprintStylerComponent,\n    HsPrintLegendStylerComponent,\n    HsPrintTextStylerComponent,\n    HsPrintScaleStylerComponent,\n    NgClass,\n    AsyncPipe,\n    FormsModule,\n    TranslatePipe,\n    HsPanelHeaderComponent,\n  ],\n  declarations: [HsPrintComponent],\n  exports: [HsPrintComponent],\n})\nexport class PrintModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1.HsPrintImprintStylerComponent","i2.HsPrintLegendStylerComponent","i3.HsPrintTextStylerComponent","i4.HsPrintScaleStylerComponent","i6"],"mappings":"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"}