{"version":3,"file":"angular-svg-icon.mjs","sources":["../../../projects/angular-svg-icon/src/lib/svg-loader.ts","../../../projects/angular-svg-icon/src/lib/svg-icon-registry.service.ts","../../../projects/angular-svg-icon/src/lib/svg-icon.component.ts","../../../projects/angular-svg-icon/src/lib/angular-svg-icon.module.ts","../../../projects/angular-svg-icon/src/angular-svg-icon.ts"],"sourcesContent":["import { Observable } from 'rxjs';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nexport abstract class SvgLoader {\r\n\tabstract getSvg(url: string): Observable<string>;\r\n}\r\n\r\n@Injectable()\r\nexport class SvgHttpLoader extends SvgLoader {\r\n\r\n\tconstructor(private http: HttpClient) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tgetSvg(url: string): Observable<string> {\r\n\t\treturn this.http.get(url, { responseType: 'text' });\r\n\t}\r\n}\r\n","import { Injectable, InjectionToken, Optional, SkipSelf, inject } from '@angular/core';\n\nimport { Observable, of as observableOf, throwError as observableThrowError } from 'rxjs';\nimport { catchError, finalize, map, share, tap } from 'rxjs/operators';\nimport { DOCUMENT } from '@angular/common';\nimport { SvgLoader } from './svg-loader';\n\nexport const SERVER_URL = new InjectionToken<string>('SERVER_URL');\n\n@Injectable()\nexport class SvgIconRegistryService {\n\tprivate loader = inject(SvgLoader);\n\tprotected serverUrl = inject< string | undefined>(SERVER_URL, {optional: true});\n\tprivate document = inject(DOCUMENT);\n\n\tprivate iconsByUrl = new Map<string, SVGElement>();\n\tprivate iconsLoadingByUrl = new Map<string, Observable<SVGElement>>();\n\n\t/** Add a SVG to the registry by passing a name and the SVG. */\n\taddSvg(name: string, data: string) {\n\t\tif (!this.iconsByUrl.has(name)) {\n\t\t\tconst div = this.document.createElement('DIV');\n\t\t\tdiv.innerHTML = data;\n\t\t\tconst svg = div.querySelector('svg') as SVGElement;\n\t\t\tthis.iconsByUrl.set(name, svg);\n\t\t}\n\t}\n\n\t/** Load a SVG to the registry from a URL. */\n\tloadSvg(url: string, name: string = url): Observable<SVGElement|undefined> | undefined {\n\n\t\t// not sure if there should be a possibility to use name for server usage\n\t\t// so overriding it for now if provided\n\t\t// maybe should separate functionality for url and name use-cases\n\t\tif (this.serverUrl && url.match(/^(http(s)?):/) === null) {\n\t\t\turl = this.serverUrl + url;\n\t\t\tname = url;\n\t\t}\n\n\t\tif (this.iconsByUrl.has(name)) {\n\t\t\treturn observableOf(this.iconsByUrl.get(name));\n\t\t} else if (this.iconsLoadingByUrl.has(name)) {\n\t\t\treturn this.iconsLoadingByUrl.get(name);\n\t\t}\n\t\tconst o = this.loader.getSvg(url).pipe(\n\t\t\tmap(svg => {\n\t\t\t\tconst div = this.document.createElement('DIV');\n\t\t\t\tdiv.innerHTML = svg;\n\t\t\t\treturn div.querySelector('svg') as SVGElement;\n\t\t\t}),\n\t\t\ttap(svg => {\n\t\t\t\tthis.iconsByUrl.set(name, svg);\n\t\t\t\tthis.iconsLoadingByUrl.delete(name);\n\t\t\t}),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(err);\n\t\t\t\treturn observableThrowError(err);\n\t\t\t}),\n\t\t\tshare()\n\t\t) as Observable<SVGElement>;\n\n\t\tthis.iconsLoadingByUrl.set(name, o);\n\t\treturn o;\n\t}\n\n\t/** Get loaded SVG from registry by name. (also works by url because of blended map) */\n\tgetSvgByName(name: string): Observable<SVGElement|undefined> | undefined {\n\t\tif (this.iconsByUrl.has(name)) {\n\t\t\treturn observableOf(this.iconsByUrl.get(name));\n\t\t} else if (this.iconsLoadingByUrl.has(name)) {\n\t\t\treturn this.iconsLoadingByUrl.get(name);\n\t\t}\n\t\treturn observableThrowError(`No svg with name '${name}' has been loaded`);\n\t}\n\n\t/** Remove a SVG from the registry by URL (or name). */\n\tunloadSvg(url: string) {\n\t\tif (this.iconsByUrl.has(url)) {\n\t\t\tthis.iconsByUrl.delete(url);\n\t\t}\n\t}\n}\n\nexport function SVG_ICON_REGISTRY_PROVIDER_FACTORY(\n\t\tparentRegistry: SvgIconRegistryService) {\n\treturn parentRegistry || new SvgIconRegistryService();\n}\n\nexport const SVG_ICON_REGISTRY_PROVIDER = {\n\tprovide: SvgIconRegistryService,\n\tdeps: [ [new Optional(), new SkipSelf(), SvgIconRegistryService] ],\n\tuseFactory: SVG_ICON_REGISTRY_PROVIDER_FACTORY\n};\n","import { Component, inject, ElementRef, KeyValueChanges, KeyValueDiffer, KeyValueDiffers,\n\tOnDestroy, Renderer2, ChangeDetectionStrategy,\n\tinput, effect, signal} from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { SvgIconRegistryService } from './svg-icon-registry.service';\n\n\nclass SvgIconHelper {\n\tsvg!: SVGElement;\n\ticnSub!: Subscription;\n\tdiffer?: KeyValueDiffer<string, string|number>;\n\tloaded = false;\n}\n\n@Component({\n\tstandalone: true,\n\tselector: 'svg-icon',\n\ttemplate: '<ng-content></ng-content>',\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SvgIconComponent implements OnDestroy {\n\tprivate element = inject(ElementRef);\n\tprivate differs = inject(KeyValueDiffers);\n\tprivate renderer = inject(Renderer2);\n\tprivate iconReg = inject(SvgIconRegistryService);\n\n\tsrc = input<string>();\n\tname = input<string>();\n\tstretch = input(false);\n\tapplyClass = input(false);\n\tsvgClass = input<any>();\n\tklass = input<any>(undefined, {alias: 'class'});\n\tviewBox = input<string>();\n\tsvgAriaLabel = input<string>();\n\tonSVGLoaded = input<(svg: SVGElement, parent: HTMLElement) => SVGElement>();\n\tsvg = signal(0);\n\n\t// Adapted from ngStyle (see:  angular/packages/common/src/directives/ng_style.ts)\n\tsvgStyle = input<{[klass: string]: any }|null>();\n\n\tprivate helper = new SvgIconHelper();\n\n\tconstructor() {\n\t\t// Watch for src or name changes\n\t\teffect(() => {\n\t\t\tif (this.src() || this.name()) {\n\t\t\t\tthis.destroy();\n\t\t\t\tthis.init(this.src(), this.name());\n\t\t\t}\n\t\t});\n\n\t\t// Watch for viewBox changes\n\t\teffect(() => {\n\t\t\tconst viewBox = this.viewBox();\n\t\t\tif (!this.svg()) return;\n\t\t\tthis.updateViewBox(viewBox);\n\t\t});\n\n\t\t// Watch for style changes\n\t\teffect(() => {\n\t\t\tconst values = this.svgStyle() || {};\n\t\t\tif (!this.svg()) return;\n\t\t\tthis.applyChanges(this.helper.differ!.diff(values)!);\n\t\t});\n\n\t\t// Watch for applyClass changes\n\t\teffect(() => {\n\t\t\tconst _ = this.svg();\n\t\t\tif (this.applyClass()) {\n\t\t\t\tthis.setClass(this.elemSvg, null, this.klass());\n\t\t\t} else {\n\t\t\t\tthis.setClass(this.elemSvg, this.klass(), null);\n\t\t\t}\n\t\t});\n\n\t\t// Watch for svgClass changes\n\t\tlet previousSvgClass: string|string[]|null;\n\t\teffect(() => {\n\t\t\tconst _ = this.svg();\n\t\t\tthis.setClass(this.elemSvg, previousSvgClass, this.svgClass());\n\t\t\tpreviousSvgClass = this.svgClass();\n\t\t});\n\n\t\t// Watch for klass changes\n\t\tlet previousKlass: string|string[]|null;\n\t\teffect(() => {\n\t\t\tconst _ = this.svg();\n\t\t\tconst elem = this.element.nativeElement;\n\t\t\tthis.setClass(elem, previousKlass, this.klass());\n\n\t\t\tthis.setClass(this.elemSvg, previousKlass, this.applyClass() ? this.klass() : null);\n\t\t\tpreviousKlass = this.klass();\n\t\t});\n\n\t\t// Watch for svgAriaLabel changes\n\t\teffect(() => {\n\t\t\tconst _ = this.svg();\n\t\t\tthis.doAria(this.svgAriaLabel()!);\n\t\t});\n\n\t\t// Watch for stretch changes\n\t\teffect(() => {\n\t\t\tconst _ = this.svg();\n\t\t\tthis.stylize(this.stretch());\n\t\t});\n\t}\n\n\tngOnDestroy() {\n\t\tthis.destroy();\n\t}\n\n\tget elemSvg() {\n\t\treturn this.element.nativeElement.firstChild;\n\t}\n\n\tprivate init(src?: string, name?: string) {\n\t\tif (src && name) {\n\t\t\tconst svgObs = this.iconReg.loadSvg(src, name);\n\t\t\tif (svgObs) {\n\t\t\t\tthis.helper.icnSub = svgObs.subscribe(svg => this.initSvg(svg));\n\t\t\t}\n\t\t} else if (name) {\n\t\t\tconst svgObs = this.iconReg.getSvgByName(name);\n\t\t\tif (svgObs) {\n\t\t\t\tthis.helper.icnSub = svgObs.subscribe(svg => this.initSvg(svg));\n\t\t\t}\n\t\t} else if (src) {\n\t\t\tconst svgObs = this.iconReg.loadSvg(src);\n\t\t\tif (svgObs) {\n\t\t\t\tthis.helper.icnSub = svgObs.subscribe(svg => this.initSvg(svg));\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.nativeElement.innerHTML = '';\n\t\t\tthis.svg.set(0);\n\t\t}\n\t}\n\n\tprivate initSvg(svg: SVGElement|undefined): void {\n\t\tif (!this.helper.loaded && svg) {\n\t\t\tthis.setSvg(svg);\n\t\t}\n\t}\n\n\tprivate destroy() {\n\t\tthis.helper.icnSub?.unsubscribe();\n\t\tthis.helper = new SvgIconHelper();\n\t\t// initialize differ with empty object\n\t\tthis.helper.differ = this.differs.find({}).create();\n\t}\n\n\tprivate setSvg(svg: SVGElement) {\n\t\tif (!this.helper.loaded && svg) {\n\t\t\tthis.helper.svg = svg;\n\t\t\tlet icon = svg.cloneNode(true) as SVGElement;\n\t\t\tconst elem = this.element.nativeElement;\n\t\t\tconst onLoadCallback = this?.onSVGLoaded();\n\t\t\tif (onLoadCallback) {\n\t\t\t\ticon = onLoadCallback(icon, elem);\n\t\t\t}\n\n\t\t\telem.innerHTML = '';\n\t\t\tthis.renderer.appendChild(elem, icon);\n\t\t\tthis.helper.loaded = true;\n\t\t\tthis.copyNgContentAttribute(elem, icon);\n\t\t\tthis.svg.update(x => x + 1);\n\t\t}\n\t}\n\n\tprivate updateViewBox(viewBox?: string) {\n\t\tif (viewBox) {\n\t\t\tconst icon = this.elemSvg;\n\t\t\tif (viewBox === 'auto') {\n\t\t\t\t// Attempt to convert height & width to a viewBox.\n\t\t\t\tconst w = icon.getAttribute('width');\n\t\t\t\tconst h = icon.getAttribute('height');\n\t\t\t\tif (h && w) {\n\t\t\t\t\tconst vb = `0 0 ${w} ${h}`;\n\t\t\t\t\tthis.renderer.setAttribute(icon, 'viewBox', vb);\n\t\t\t\t\tthis.renderer.removeAttribute(icon, 'width');\n\t\t\t\t\tthis.renderer.removeAttribute(icon, 'height');\n\t\t\t\t}\n\t\t\t} else if (viewBox !== '') {\n\t\t\t\tthis.renderer.setAttribute(icon, 'viewBox', viewBox!);\n\t\t\t\tthis.renderer.removeAttribute(icon, 'width');\n\t\t\t\tthis.renderer.removeAttribute(icon, 'height');\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate copyNgContentAttribute(hostElem: any, icon: SVGElement) {\n\t\tconst attributes = hostElem.attributes as NamedNodeMap;\n\t\tconst len = attributes.length;\n\t\tfor (let i = 0; i < len; i += 1) {\n\t\t\tconst attribute = attributes.item(i);\n\t\t\tif (attribute && attribute.name.startsWith('_ngcontent')) {\n\t\t\t\tthis.setNgContentAttribute(icon, attribute.name);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate setNgContentAttribute(parent: Node, attributeName: string) {\n\t\tthis.renderer.setAttribute(parent, attributeName, '');\n\t\tconst len = parent.childNodes.length;\n\t\tfor (let i = 0; i < len; i += 1) {\n\t\t\tconst child = parent.childNodes[i];\n\t\t\tif (child instanceof Element) {\n\t\t\t\tthis.setNgContentAttribute(child, attributeName);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate stylize(stretch: boolean) {\n\t\tif (this.helper.svg) {\n\t\t\tconst svg = this.element.nativeElement.firstChild;\n\n\t\t\tif (stretch === true) {\n\t\t\t\tthis.renderer.setAttribute(svg, 'preserveAspectRatio', 'none');\n\t\t\t} else if (stretch === false) {\n\t\t\t\tthis.renderer.removeAttribute(svg, 'preserveAspectRatio');\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate applyChanges(changes: KeyValueChanges<string, string|number>) {\n\t\tif (!changes) return;\n\n\t\tchanges.forEachRemovedItem((record) => this.setStyle(record.key, null));\n\t\tchanges.forEachAddedItem((record) => this.setStyle(record.key, record.currentValue));\n\t\tchanges.forEachChangedItem((record) => this.setStyle(record.key, record.currentValue));\n\t}\n\n\tprivate setStyle(nameAndUnit: string, value: string|number|null|undefined) {\n\t\tconst [name, unit] = nameAndUnit.split('.');\n\t\tvalue = value !== null && unit ? `${value}${unit}` : value;\n\t\tconst svg = this.elemSvg;\n\n\t\tif (value !== null) {\n\t\t\tthis.renderer.setStyle(svg, name, value as string);\n\t\t} else {\n\t\t\tthis.renderer.removeStyle(svg, name);\n\t\t}\n\t}\n\n\tprivate setClass(target: HTMLElement|SVGSVGElement, previous: string|string[]|null, current: string|string[]|null) {\n\t\tif (target) {\n\t\t\tif (previous) {\n\t\t\t\tconst klasses = (Array.isArray(previous) ? previous : previous.split(' ')).filter((klass) => klass);\n\t\t\t\tfor (const k of klasses) {\n\t\t\t\t\tthis.renderer.removeClass(target, k);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (current) {\n\t\t\t\tconst klasses = (Array.isArray(current) ? current : current.split(' ')).filter((klass) => klass);\n\t\t\t\tfor (const k of klasses) {\n\t\t\t\t\tthis.renderer.addClass(target, k);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate doAria(label: string) {\n    if (label !== undefined) {\n  \t\tconst svg = this.element.nativeElement.firstChild;\n\t  \t// If there is not a svgAriaLabel and the SVG has an arial-label, then do not override\n\t\t  // the SVG's aria-label.\n\t\t  if (svg && !svg.hasAttribute('aria-label')) {\n\t\t\t  if (label === '') {\n\t\t\t\t  this.renderer.setAttribute(svg, 'aria-hidden', 'true');\n\t\t\t\t  this.renderer.removeAttribute(svg, 'aria-label');\n\t\t\t  } else {\n\t\t\t  \tthis.renderer.removeAttribute(svg, 'aria-hidden');\n\t\t\t  \tthis.renderer.setAttribute(svg, 'aria-label', label);\n\t\t\t  }\n\t\t  }\n\t  }\n  }\n}\n","import { ModuleWithProviders, NgModule, Provider, makeEnvironmentProviders } from '@angular/core';\n\nimport { SVG_ICON_REGISTRY_PROVIDER } from './svg-icon-registry.service';\nimport { SvgIconComponent } from './svg-icon.component';\nimport { SvgHttpLoader, SvgLoader } from './svg-loader';\n\nexport interface AngularSvgIconConfig {\n\tloader?: Provider;\n}\n\nexport function provideAngularSvgIcon(config: AngularSvgIconConfig = {}) {\n\treturn makeEnvironmentProviders([\n\t  SVG_ICON_REGISTRY_PROVIDER,\n\t  config.loader || { provide: SvgLoader, useClass: SvgHttpLoader },\n\t]);\n}\n\n@NgModule({\n\timports: [\n\t\tSvgIconComponent\n\t],\n\texports: [ SvgIconComponent ]\n})\nexport class AngularSvgIconModule {\n\n\tstatic forRoot(config: AngularSvgIconConfig = {}): ModuleWithProviders<AngularSvgIconModule> {\n\t\treturn {\n\t\t\tngModule: AngularSvgIconModule,\n\t\t\tproviders: [\n\t\t\t\tSVG_ICON_REGISTRY_PROVIDER,\n\t\t\t\tconfig.loader || { provide: SvgLoader, useClass: SvgHttpLoader }\n\t\t\t]\n\t\t};\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["observableOf","observableThrowError"],"mappings":"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"}