{"version":3,"file":"nga-svg.mjs","sources":["../../src/svg/svg.error.ts","../../src/svg/svg.service.ts","../../src/svg/svg.directive.ts","../../src/svg/svg.module.ts","../../src/nga-svg.ts"],"sourcesContent":["export const AVANNG_SVG_ANGULAR_CONSOLE_PREFIX = '[avanng/svg]:';\n\nexport function SVGTagNotFoundError(): Error {\n  return new Error(`${AVANNG_SVG_ANGULAR_CONSOLE_PREFIX}<svg> tag not found.`);\n}\n","import {Inject, Injectable, Optional} from '@angular/core';\nimport {CachedSvgDefinition} from './types';\nimport {DOCUMENT} from '@angular/common';\nimport {SVGTagNotFoundError} from './svg.error';\n\n@Injectable({providedIn: 'root'})\nexport class SvgService {\n  protected readonly _svgRenderedDefinitions = new Map<string, CachedSvgDefinition>();\n\n  constructor(@Optional() @Inject(DOCUMENT) protected _document: any) {\n  }\n\n  public addSVG(key: string, svgContent: string): void {\n    const cached = this._svgRenderedDefinitions.get(key);\n\n    if (cached) {\n      cached.svg = this.createSVGElementFromString(svgContent);\n    } else {\n      this.createAndCatch(key, svgContent);\n    }\n  }\n\n  private createAndCatch(key: string, svgContent?: string): SVGElement {\n    const svg = this.createSVGElementFromString(svgContent);\n    // Cache it.\n    this._svgRenderedDefinitions.set(key, {\n      key,\n      svg,\n    } as CachedSvgDefinition);\n    return svg;\n  }\n\n  loadSVGFromCacheOrCreateNew(key: string, svgContent?: string): SVGElement {\n    let svg: SVGElement;\n    const cached = this._svgRenderedDefinitions.get(key);\n    svg = cached ? cached.svg : this.createAndCatch(key, svgContent);\n    return this.cloneSVG(svg);\n  }\n\n  cloneSVG(svg: SVGElement): SVGElement {\n    return svg.cloneNode(true) as SVGElement;\n  }\n\n  createSVGElementFromString(str?: string): SVGElement {\n    const parser = new DOMParser();\n    const doc = parser.parseFromString(str ?? '', 'image/svg+xml');\n    const svg: SVGSVGElement | null = doc.querySelector('svg');\n    if (!svg) {\n      throw SVGTagNotFoundError;\n    }\n\n    const allowedTags = this.getAllowedTags();\n    const elementsToRemove = [];\n    const elementsByTagName = svg.getElementsByTagName('*');\n    for (let i = 0; i < elementsByTagName.length; i++) {\n      const element = elementsByTagName.item(i);\n      if (element) {\n        if (!allowedTags.includes(element.tagName)) {\n          elementsToRemove.push(element);\n        }\n      }\n    }\n\n    for (const elementToRemove of elementsToRemove) {\n      elementToRemove.parentNode?.removeChild(elementToRemove);\n    }\n\n    return svg;\n  }\n\n  getAllowedTags(): string[] {\n    return [\n      'svg',\n      'a',\n      'animate',\n      'animateMotion',\n      'animateTransform',\n      'circle',\n      'clipPath',\n      'defs',\n      'desc',\n      'ellipse',\n      'feBlend',\n      'feColorMatrix',\n      'feComponentTransfer',\n      'feComposite',\n      'feConvolveMatrix',\n      'feDiffuseLighting',\n      'feDisplacementMap',\n      'feDistantLight',\n      'feDropShadow',\n      'feFlood',\n      'feFuncA',\n      'feFuncB',\n      'feFuncG',\n      'feFuncR',\n      'feGaussianBlur',\n      'feImage',\n      'feMerge',\n      'feMergeNode',\n      'feMorphology',\n      'feOffset',\n      'fePointLight',\n      'feSpecularLighting',\n      'feSpotLight',\n      'feTile',\n      'feTurbulence',\n      'filter',\n      'foreignObject',\n      'g',\n      'image',\n      'line',\n      'linearGradient',\n      'marker',\n      'mask',\n      'metadata',\n      'mpath',\n      'path',\n      'pattern',\n      'polygon',\n      'polyline',\n      'radialGradient',\n      'rect',\n      'script',\n      'set',\n      'stop',\n      'style',\n      'svg',\n      'switch',\n      'symbol',\n      'text',\n      'textPath',\n      'title',\n      'tspan',\n      'use',\n      'view',\n    ];\n  }\n}\n","import { Directive, ElementRef, Input, OnChanges, Renderer2 } from '@angular/core';\nimport { SvgService } from './svg.service';\n\n@Directive({\n  selector: '[ngaSvg]',\n})\nexport class SvgDirective implements OnChanges {\n  @Input() ngaSvg?: string;\n  @Input() svgName?: string;\n\n  constructor(\n    protected svgService: SvgService,\n    protected _elementRef: ElementRef,\n    protected _renderer: Renderer2,\n  ) {}\n\n  ngOnChanges(): void {\n    this.changeSvg();\n  }\n\n  /**\n   * Render a new svg in the current element. Remove the svg when `type` is falsy.\n   */\n  protected changeSvg(): void {\n    if (!this.ngaSvg && !this.svgName) {\n      this._clearSVGElement();\n    } else if (this.svgName) {\n      this._setSVGElement(this.svgService.loadSVGFromCacheOrCreateNew(this.svgName, this.ngaSvg));\n    } else {\n      this._setSVGElement(this.svgService.createSVGElementFromString(this.ngaSvg));\n    }\n  }\n\n  protected _setSVGElement(svg: SVGElement): void {\n    this._clearSVGElement();\n    this._elementRef.nativeElement.innerHTML = svg.outerHTML;\n  }\n\n  protected _clearSVGElement(): void {\n    const el: HTMLElement = this._elementRef.nativeElement;\n    const children = el.childNodes;\n    const length = children.length;\n    for (let i = length - 1; i >= 0; i--) {\n      const child = children[i] as any;\n      if (child.tagName?.toLowerCase() === 'svg') {\n        this._renderer.removeChild(el, child);\n      }\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SvgDirective } from './svg.directive';\n\n@NgModule({\n  declarations: [SvgDirective],\n  exports: [SvgDirective],\n})\nexport class SvgModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SvgService"],"mappings":"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"}