{"version":3,"file":"hslayers-ng-services-share.mjs","sources":["../../../projects/hslayers/services/share/share-thumbnail.service.ts","../../../projects/hslayers/services/share/get-params.ts","../../../projects/hslayers/services/share/share-url.service.ts","../../../projects/hslayers/services/share/hslayers-ng-services-share.ts"],"sourcesContent":["import {Injectable, Renderer2, RendererFactory2, inject} from '@angular/core';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsShareThumbnailService {\n  hsMapService = inject(HsMapService);\n  hsLogService = inject(HsLogService);\n  private hsConfig = inject(HsConfig);\n\n  private readonly THUMBNAIL_SIZE = 200;\n  private readonly SCALE_FACTOR = 2.5;\n\n  private renderer: Renderer2;\n\n  constructor() {\n    const rendererFactory = inject(RendererFactory2);\n\n    this.renderer = rendererFactory.createRenderer(null, null);\n  }\n\n  setCanvasSize(canvas, width: number, height: number): void {\n    canvas.width = width;\n    canvas.height = height;\n    canvas.style.width = width + 'px';\n    canvas.style.height = height + 'px';\n  }\n\n  setupContext(ctx): void {\n    ctx.mozImageSmoothingEnabled = false;\n    ctx.webkitImageSmoothingEnabled = false;\n    ctx.msImageSmoothingEnabled = false;\n    ctx.imageSmoothingEnabled = false;\n  }\n\n  rendered($element, newRender?): string {\n    if (!$element) {\n      return;\n    }\n\n    const canvasLayers =\n      this.hsMapService.mapElement.querySelectorAll('.ol-layer canvas');\n    if (canvasLayers.length === 0) {\n      this.hsLogService.warn('No canvas layers found to generate thumbnail.');\n      // Optionally set a default image or return early\n      $element.setAttribute(\n        'src',\n        this.hsConfig.assetsPath + 'img/notAvailable.png',\n      );\n      return;\n    }\n\n    let thumbnail: string | undefined;\n    const collectorCanvas = this.renderer.createElement('canvas');\n    const targetCanvas = this.renderer.createElement('canvas');\n    const width = this.THUMBNAIL_SIZE,\n      height = this.THUMBNAIL_SIZE;\n    const scaleFactor = this.SCALE_FACTOR; // Capture a 3x larger area\n    const captureWidth = width * scaleFactor;\n    const captureHeight = height * scaleFactor;\n\n    const firstCanvas = canvasLayers[0]; // Use the first found canvas for dimensions\n\n    this.setCanvasSize(targetCanvas, width, height);\n    // Use dimensions from the actual first canvas found\n    this.setCanvasSize(\n      collectorCanvas,\n      firstCanvas.width, // Use actual width\n      firstCanvas.height, // Use actual height\n    );\n\n    const ctxCollector = collectorCanvas.getContext('2d');\n    const ctxTarget = targetCanvas.getContext('2d');\n    this.setupContext(ctxTarget);\n    this.setupContext(ctxCollector);\n\n    // Iterate over the found canvas layers using for...of\n    for (const canvas of Array.from<HTMLCanvasElement>(canvasLayers)) {\n      if (canvas.width > 0) {\n        const opacity = (canvas.parentNode as HTMLElement).style.opacity;\n        ctxCollector.globalAlpha = opacity === '' ? 1 : Number(opacity);\n        const transform = canvas.style.transform;\n\n        if (transform && transform.startsWith('matrix(')) {\n          // Get the transform parameters from the style's transform matrix\n          const matrix = transform\n            .slice(7, -1) // Faster than regex for simple 'matrix(...)'\n            .split(',')\n            .map(Number);\n          // Apply the transform to the collector context directly\n          ctxCollector.setTransform(...matrix);\n        } else {\n          // Reset transform if none is applied to the current canvas\n          ctxCollector.setTransform(1, 0, 0, 1, 0, 0);\n        }\n        ctxCollector.drawImage(canvas, 0, 0);\n      }\n    }\n    // Reset transform for the final draw operation\n    ctxCollector.setTransform(1, 0, 0, 1, 0, 0);\n\n    /* Final render pass: Capture a larger area and scale it down */\n    // Calculate source coordinates and dimensions, ensuring they are within bounds\n    const sx = Math.max(\n      0,\n      Math.floor(collectorCanvas.width / 2 - captureWidth / 2),\n    );\n    const sy = Math.max(\n      0,\n      Math.floor(collectorCanvas.height / 2 - captureHeight / 2),\n    );\n    const sWidth = Math.min(captureWidth, collectorCanvas.width - sx);\n    const sHeight = Math.min(captureHeight, collectorCanvas.height - sy);\n\n    ctxTarget.drawImage(\n      collectorCanvas,\n      sx, // source x\n      sy, // source y\n      sWidth, // source width\n      sHeight, // source height\n      0, // destination x\n      0, // destination y\n      width, // destination width (final thumbnail size)\n      height, // destination height (final thumbnail size)\n    );\n    /**\n     * from now on, the targetCanvas is also tainted because another tainted canvas was used\n     * to draw inside it\n     */\n\n    try {\n      /**\n       * targetCanvas.toDataURL() fires a SecurityError here\n       * see https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image#security_and_tainted_canvases\n       */\n      $element.setAttribute('src', targetCanvas.toDataURL('image/png'));\n      //this.data.thumbnail\n      thumbnail = targetCanvas.toDataURL('image/jpeg', 0.85);\n    } catch (e) {\n      this.hsLogService.log(\n        'catch, is tainted?',\n        this.isCanvasTainted(targetCanvas),\n      );\n      //console.log(targetCanvas);\n      this.hsLogService.warn(e);\n      $element.setAttribute(\n        'src',\n        this.hsConfig.assetsPath + 'img/notAvailable.png',\n      );\n    }\n    $element.style.width = width + 'px';\n    $element.style.height = height + 'px';\n    return thumbnail;\n  }\n\n  private isCanvasTainted(canvas: HTMLCanvasElement): boolean {\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      const pixel = canvas.getContext('2d').getImageData(0, 0, 1, 1);\n      return false;\n    } catch (err) {\n      return err.code === 18;\n    }\n  }\n}\n","/**\n * List of GET parameters set and read by Hslayers\n */\nexport const HS_PRMS = {\n  x: 'hs-x',\n  y: 'hs-y',\n  zoom: 'hs-z',\n  visibleLayers: 'hs-visible-layers',\n  panel: 'hs-panel',\n  lang: 'hs-lang',\n  pureMap: 'hs-puremap',\n  view: 'hs-view',\n  permalink: 'hs-permalink',\n  composition: 'hs-composition',\n  search: 'hs-search',\n  layerSelected: 'hs-layer-selected',\n  hsWmsToConnect: 'hs-wms-to-connect',\n  hsWfsToConnect: 'hs-wfs-to-connect',\n  hsWmtsToConnect: 'hs-wmts-to-connect',\n  hsKmlToConnect: 'hs-kml-to-connect',\n  hsGeojsonToConnect: 'hs-geojson-to-connect',\n  hsArcgisToConnect: 'hs-arcgis-to-connect',\n  hsWmsLayers: 'hs-wms-layers',\n  hsWfsLayers: 'hs-wfs-layers',\n  hsWmtsLayers: 'hs-wmts-layers',\n  hsKmlLayers: 'hs-kml-layers',\n  hsGeojsonLayers: 'hs-geojson-layers',\n  hsArcgisLayers: 'hs-arcgis-layers',\n};\n\n/**\n * If we cant find GET param from HS_PRMS, search in old parameters list before renaming.\n * NOTE: It's important that values in HS_PRMS_BACKWARDS don't exist in\n * HS_PRMS values otherwise recursion will occur.\n */\nexport const HS_PRMS_BACKWARDS = {\n  permalink: 'permalink',\n  view: 'view',\n  panel: 'hs_panel',\n  lang: 'lang',\n  x: 'hs_x',\n  y: 'hs_y',\n  zoom: 'hs_z',\n  pureMap: 'puremap',\n  visibleLayers: 'visible_layers',\n  composition: 'composition',\n  search: 'search',\n  layerSelected: 'layerSelected',\n  hsWmsToConnect: 'wms_to_connect',\n  hsWfsToConnect: 'wfs_to_connect',\n  hsWmtsToConnect: 'wmts_to_connect',\n  hsWmsLayers: 'wms_layers',\n  hsWfsLayers: 'wfs_layers',\n  hsWmtsLayers: 'wmts_layers',\n};\n\n/**\n * Some params are set on map interaction or UI and we don't\n * want to reset their values with the original ones when generating the browser URL.\n * GET params not in HS_PRMS_REGENERATED will be remembered and set in the URL.\n */\nexport const HS_PRMS_REGENERATED = [\n  HS_PRMS.x,\n  HS_PRMS.y,\n  HS_PRMS.zoom,\n  HS_PRMS.lang,\n  HS_PRMS.panel,\n  HS_PRMS.visibleLayers,\n  HS_PRMS_BACKWARDS.x,\n  HS_PRMS_BACKWARDS.y,\n  HS_PRMS_BACKWARDS.zoom,\n  HS_PRMS_BACKWARDS.lang,\n  HS_PRMS_BACKWARDS.panel,\n  HS_PRMS_BACKWARDS.visibleLayers,\n];\n","import {DestroyRef, Injectable, NgZone, inject} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {Location, PlatformLocation} from '@angular/common';\nimport {Subject, debounceTime, fromEvent, lastValueFrom} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\nimport {transformExtent} from 'ol/proj';\n\nimport {HS_PRMS, HS_PRMS_BACKWARDS, HS_PRMS_REGENERATED} from './get-params';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  debounce,\n  HsProxyService,\n  paramsToURLWoEncode,\n  getBboxFromObject,\n} from 'hslayers-ng/services/utils';\nimport {MapComposition} from 'hslayers-ng/types';\nimport {getShowInLayerManager, getTitle} from 'hslayers-ng/common/extensions';\n\n@Injectable({providedIn: 'root'})\nexport class HsShareUrlService {\n  hsMapService = inject(HsMapService);\n  hsConfig = inject(HsConfig);\n  hsLanguageService = inject(HsLanguageService);\n  hsLayoutService = inject(HsLayoutService);\n  hsEventBusService = inject(HsEventBusService);\n  private location = inject(Location);\n  private zone = inject(NgZone);\n  private platformLocation = inject(PlatformLocation);\n  private httpClient = inject(HttpClient);\n  private hsProxyService = inject(HsProxyService);\n  private destroyRef = inject(DestroyRef);\n\n  current_url = '';\n  params = {};\n  customParams = {};\n  updateDebouncer = {};\n  url_generation = true; //FIXME: - but needs to be configurable or smth\n  //some of the code is taken from http://stackoverflow.com/questions/22258793/set-url-parameters-without-causing-page-refresh\n  paramTimer = null;\n  shareId = null;\n  permalinkRequestUrl = '';\n  id: any;\n  urlUntilParams: string;\n  param_string: string;\n  statusSaving = false;\n  data: MapComposition;\n\n  public browserUrlUpdated: Subject<string> = new Subject();\n\n  constructor() {\n    this.keepTrackOfGetParams();\n    this.hsMapService.loaded().then((map) => {\n      if (this.url_generation) {\n        //FIXME : always true\n        this.hsEventBusService.mapExtentChanges\n          .pipe(debounceTime(200), takeUntilDestroyed(this.destroyRef))\n          .subscribe({\n            next: () => {\n              this.zone.run(() => {\n                if (this.hsLayoutService.mainpanel == 'share') {\n                  this.updatePermalinkComposition();\n                } else {\n                  this.updateViewParamsInUrl(true);\n                }\n              });\n            },\n          });\n\n        map.getLayers().on('add', (e) => {\n          const layer = e.element;\n          const external = getShowInLayerManager(layer);\n          if (external !== null && external == false) {\n            return;\n          }\n          fromEvent(layer, 'change:visible')\n            .pipe(debounceTime(1000))\n            .subscribe({\n              next: () => {\n                this.update();\n              },\n            });\n        });\n\n        const lang = this.getParamValue(HS_PRMS.lang);\n        if (lang && !this.hsLanguageService.langFromCMS) {\n          this.hsLanguageService.setLanguage(lang);\n        }\n        const view = this.getParamValue(HS_PRMS.view);\n        // this.hsMapService.visible = !(view == '3d');\n      }\n\n      this.panToUrlCoords();\n    });\n  }\n\n  /**\n   * Update map view with values from URL\n   */\n  private panToUrlCoords() {\n    const pos = this.getParamValues([HS_PRMS.x, HS_PRMS.y, HS_PRMS.zoom]);\n    if (!Object.keys(pos).some((k) => pos[k] == undefined || pos[k] == 'NaN')) {\n      this.hsMapService.moveToAndZoom(\n        parseFloat(pos[HS_PRMS.x]),\n        parseFloat(pos[HS_PRMS.y]),\n        parseInt(pos[HS_PRMS.zoom]),\n      );\n    }\n  }\n\n  private keepTrackOfGetParams() {\n    const params = this.parse(location.search);\n    /* We keep track of most hsl params separately so don't process \n    them here. Only third party params are interesting */\n    for (const key of Object.keys(HS_PRMS_REGENERATED)) {\n      delete params[HS_PRMS_REGENERATED[key]];\n    }\n    Object.assign(this.customParams, params);\n  }\n\n  /**\n   * Get HSL server share service endpoint's url\n   */\n  endpointUrl(): string {\n    let hostName = location.protocol + '//' + location.host;\n\n    if (this.hsConfig.hostname?.shareService?.url) {\n      return this.hsConfig.hostname.shareService.url;\n    }\n    if (this.hsConfig.hostname?.user?.url) {\n      hostName = this.hsConfig.hostname.user.url;\n    } else if (this.hsConfig.hostname?.default?.url) {\n      hostName = this.hsConfig.hostname.default.url;\n    }\n\n    if (this.hsConfig.shareServiceUrl?.includes('://')) {\n      //Full url specified\n      return this.hsConfig.shareServiceUrl;\n    }\n    return hostName + (this.hsConfig.shareServiceUrl || '/share/');\n  }\n\n  /**\n   * Updates permalink composition. Used without data prop to update extent of the composition\n   * @param data - Map composition data\n   */\n  async updatePermalinkComposition(data?: MapComposition): Promise<any> {\n    const status_url = this.endpointUrl();\n    const bbox = getBboxFromObject(this.hsMapService.describeExtent());\n    this.data = data ?? {\n      ...this.data,\n      nativeExtent: transformExtent(\n        bbox,\n        'EPSG:4326',\n        this.hsMapService.getCurrentProj(),\n      ),\n      extent: bbox,\n    };\n    await lastValueFrom(\n      this.httpClient.post(\n        status_url,\n        JSON.stringify({\n          data: this.data,\n          permalink: true,\n          id: this.id,\n          project: this.hsConfig.project_name,\n          request: 'save',\n        }),\n      ),\n    );\n    this.statusSaving = false;\n    this.permalinkRequestUrl = status_url + '?request=load&id=' + this.id;\n    this.update();\n  }\n\n  /**\n   * Get actual map state information (visible layers, added layers*, active panel, map center and zoom level), create full Url link and push it in Url bar. (*Added layers are omitted from permalink url).\n   */\n  update(): void {\n    this.id = crypto.randomUUID();\n\n    const externalLayers = this.hsMapService\n      .getLayersArray()\n      .filter((lyr) => !(getShowInLayerManager(lyr) === false));\n    const visibleLayers = externalLayers\n      .filter((lyr) => lyr.getVisible())\n      .map((lyr) => getTitle(lyr));\n\n    this.updateViewParamsInUrl();\n    //This might become useful, but url size is limited, so we are not using it\n    // const addedLayers = externalLayers.filter(\n    //   (lyr) => !this.hsConfig.default_layers?.includes(lyr),\n    // );\n    // const addedLayersJson = this.HsSaveMapService.layers2json(addedLayers);\n\n    const pnlMain = this.hsLayoutService.mainpanel;\n    this.push(HS_PRMS.panel, pnlMain == 'share' ? 'layerManager' : pnlMain);\n\n    if (this.hsLanguageService.language) {\n      this.push(HS_PRMS.lang, this.hsLanguageService.language);\n    }\n    this.push(HS_PRMS.visibleLayers, visibleLayers.join(';'));\n    if (this.hsLayoutService.puremapApp) {\n      this.push(HS_PRMS.pureMap, 'true');\n    }\n    for (const [key, value] of Object.entries(this.customParams)) {\n      if (key !== 'hs-permalink') {\n        this.push(key, value);\n      }\n    }\n    if (this.hsConfig.id) {\n      this.push('app', this.hsConfig.id); //Needs to be after customParams got from URL to overwrite app value\n    }\n    if (this.statusSaving) {\n      return;\n    }\n    this.updateURL();\n  }\n\n  /**\n   * Update URL params when single HSL app is bootstrapped\n   */\n  private updateURL() {\n    debounce(\n      () => {\n        //No updates for multi-apps\n        if (document.querySelectorAll('hslayers-app').length == 1) {\n          let locationPath = this.pathName();\n          const paramsSerialized = Object.keys(this.params)\n            .map((key) => {\n              return {key, value: this.params[key]};\n            })\n            .map((dic) => `${dic.key}=${encodeURIComponent(dic.value)}`)\n            .join('&');\n          const baseHref = this.platformLocation.getBaseHrefFromDOM();\n          if (locationPath.startsWith(baseHref)) {\n            locationPath = locationPath.substring(baseHref.length);\n          }\n          this.location.replaceState(locationPath, paramsSerialized);\n          this.browserUrlUpdated.next(this.getPermalinkUrl());\n        }\n      },\n      300,\n      false,\n      this.updateDebouncer,\n    )();\n  }\n\n  /**\n   * Updates URL params related to map view\n   * @param standalone - True if called outside of 'update'\n   */\n  private updateViewParamsInUrl(standalone = false): void {\n    const view = this.hsMapService.getMap().getView();\n    this.push(HS_PRMS.x, view.getCenter()[0]);\n    this.push(HS_PRMS.y, view.getCenter()[1]);\n    this.push(HS_PRMS.zoom, view.getZoom());\n    if (standalone) {\n      this.updateURL();\n    }\n  }\n\n  /**\n   * Create permalink URL to map\n   * @returns Permalink URL\n   */\n  getPermalinkUrl(): string {\n    if (this.hsConfig.permalinkLocation) {\n      return (\n        this.hsConfig.permalinkLocation.origin +\n        this.current_url.replace(\n          this.pathName(),\n          this.hsConfig.permalinkLocation.pathname,\n        ) +\n        `&${HS_PRMS.permalink}=${encodeURIComponent(this.permalinkRequestUrl)}`\n      ).replace(this.pathName(), this.hsConfig.permalinkLocation.pathname);\n    }\n    return `${this.current_url}&${HS_PRMS.permalink}=${encodeURIComponent(\n      this.permalinkRequestUrl,\n    )}`;\n  }\n\n  private pathName(): string {\n    let tmp = window.location.pathname.split('?')[0];\n    if (!tmp.endsWith('/') && !tmp.split('/').pop().includes('.')) {\n      tmp = tmp + '/';\n    }\n    return tmp;\n  }\n\n  /**\n   * @param url - URL to shorten\n   * @returns Shortened URL\n   * Promise which shortens URL by using some URL shortener.\n   * By default tinyurl is used, but user provided function in config.shortenUrl can be used.\n   * @example\n   * ```typescript\n   * function(url) {\n            return new Promise(function(resolve, reject){\n                $http.get(\"http://tinyurl.com/api-create.php?url=\" + url, {\n                    longUrl: url\n                }).then(function(response) {\n                    resolve(response.data);\n                }).catch(function(err) {\n                    reject()\n                })\n            })\n        }\n   * ```\n   */\n  async shortUrl(url: string): Promise<any> {\n    if (this.hsConfig.shortenUrl != undefined) {\n      return this.hsConfig.shortenUrl(url);\n    }\n    return await lastValueFrom(\n      this.httpClient.get(\n        this.hsProxyService.proxify(\n          'http://tinyurl.com/api-create.php?url=' + url,\n        ),\n        {\n          responseType: 'text',\n        },\n      ),\n    );\n  }\n\n  /**\n   * Create URL for PureMap version of map\n   * @returns Embedded URL\n   */\n  getPureMapUrl(): string {\n    const params = {};\n    params[HS_PRMS.pureMap] = true;\n    return this.getPermalinkUrl() + '&' + paramsToURLWoEncode(params);\n  }\n\n  /**\n   * Parse parameter string from URL into key-value(s) pairs\n   * @param str - Parameter string to parse\n   * @returns Parsed parameter object\n   */\n  parse(str: string) {\n    if (typeof str != 'string') {\n      return {};\n    }\n\n    str = str.trim().replace(/^\\?/, '');\n\n    if (!str) {\n      return {};\n    }\n\n    return str\n      .trim()\n      .split('&')\n      .reduce((paramDict, param) => {\n        const parts = param.replace(/\\+/g, ' ').split('=');\n        let key = parts[0];\n        let val = parts[1];\n\n        key = decodeURIComponent(key);\n        // missing `=` should be `null`:\n        // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n        val = val == undefined ? null : decodeURIComponent(val);\n\n        if (!paramDict.hasOwnProperty(key)) {\n          paramDict[key] = val;\n        } else if (Array.isArray(paramDict[key])) {\n          paramDict[key].push(val);\n        } else {\n          paramDict[key] = [paramDict[key], val];\n        }\n\n        return paramDict;\n      }, {});\n  }\n\n  /**\n   * Create encoded parameter string from parameter object\n   * @param obj - Parameter object to stringify\n   * @returns Encoded parameter string or \"\" if no parameter object is given\n   */\n  stringify(obj): string {\n    if (!obj) {\n      return '';\n    }\n    return Object.keys(obj)\n      .map((key) => {\n        const val = obj[key];\n\n        if (Array.isArray(val)) {\n          return val\n            .map((val2) => {\n              return encodeURIComponent(key) + '=' + encodeURIComponent(val2);\n            })\n            .join('&');\n        }\n\n        return encodeURIComponent(key) + '=' + encodeURIComponent(val);\n      })\n      .join('&');\n  }\n\n  /**\n   * Push new key-value pair into parameter object and update Url string with new params\n   * @param key - Key name for pushed parameter\n   * @param new_value - Value for pushed parameter\n   */\n  push(key, new_value): void {\n    if (new_value === undefined) {\n      delete this.params[key];\n    } else {\n      this.params[key] = new_value;\n    }\n    const new_params_string = this.stringify(this.params);\n    this.param_string = new_params_string;\n    this.urlUntilParams = location.origin + location.pathname;\n    this.current_url = this.urlUntilParams + '?' + new_params_string;\n  }\n\n  /**\n   * Returns param value and removes custom param when it is called\n   * @param param - Param to get current value and remove\n   */\n  getParamValAndRemove(param: string): string {\n    const value = this.getParamValue(param);\n    if (this.customParams[param]) {\n      delete this.customParams[param];\n    }\n    return value;\n  }\n\n  /**\n   * Find current param value from URL\n   * @param param - Param to get current value\n   * @returns Current value for requested param or null if param doesn't exist\n   */\n  getParamValue(param: string): string {\n    const tmp = this.parse(location.search);\n    const key = Object.keys(HS_PRMS).find((k) => HS_PRMS[k] == param);\n    if (tmp[param]) {\n      return tmp[param];\n    }\n    if (tmp[param] == undefined && HS_PRMS_BACKWARDS[key] != undefined) {\n      return this.getParamValue(HS_PRMS_BACKWARDS[key]);\n    }\n    return;\n  }\n\n  getParamValues(keys: string[]): any {\n    const tmp = {};\n    for (const key of keys) {\n      tmp[key] = this.getParamValue(key);\n    }\n    return tmp;\n  }\n\n  /**\n   * Update values for custom parameters which get added to the url and usually are application specific\n   * @param params - A dictionary of custom parameters which get added to the generated URL\n   */\n  updateCustomParams(params): void {\n    for (const param in params) {\n      this.customParams[param] = params[param];\n    }\n    if (this.paramTimer !== null) {\n      clearTimeout(this.paramTimer);\n    }\n    this.paramTimer = setTimeout(() => {\n      this.update();\n    }, 1000);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}