{"version":3,"file":"obliczeniowo-elementary-icons.mjs","sources":["../../../../projects/components/icons/services/icon-resource.service.ts","../../../../projects/components/icons/components/icon/icon.component.ts","../../../../projects/components/icons/components/icon/icon.component.html","../../../../projects/components/icons/icons.module.ts","../../../../projects/components/icons/obliczeniowo-elementary-icons.ts"],"sourcesContent":["\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable, SecurityContext, OnDestroy, DOCUMENT } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Observable, from, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nexport interface Icon {\n  svgString?: string;\n  url: SafeHtml;\n  name: string;\n}\n\n/**\n * Registering icons service for icon.component\n *\n * Registering own:\n * @example\n *\n * constructor(private iconResource: IconResourceService) {\n *  iconResource.registerIcon(\n *    this.sanitizer.bypassSecurityTrustHtml('/assets/icons/your-icon.svg'),\n *    'icon-name'\n *  );\n * }\n *\n * @\n * Use in html with icon component:\n *\n * @example\n *\n * <obl-icon [width]=\"20\" name=\"icon-name\"></obl-icon>\n *\n * @ To correctly work in library component you need to copy assets folder adding script to npm:\n *\n * @example\n *\n * \"copy-assets\": \"node ./node_modules/@obliczeniowo/elementary/assets/scripts/copy.js ./src/assets/\",\n *\n * @ and run in console:\n *\n * @example\n * npm run copy-assets\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class IconResourceService implements OnDestroy {\n  protected icons = new Map<string, Icon>();\n  protected urls = new Map<string, Partial<Partial<Icon>>>();\n  protected loading = new Map<string, Promise<string | undefined>>();\n\n  protected base = '/';\n\n  constructor(\n    private readonly http: HttpClient,\n    private readonly sanitizer: DomSanitizer,\n    @Inject(DOCUMENT) private readonly document: Document\n  ) {\n    const base = document.head.querySelector('base');\n    this.base = base?.href || '/';\n\n    if (!this.icons.size) {\n      const icons = [\n        'search',\n        'expand',\n        'add',\n        'add-box',\n        'subtract-box',\n        'subtract',\n        'cancel',\n        'ok',\n        'down-more',\n        'up-more',\n        'up',\n        'down',\n        'left-more',\n        'right-more',\n        'left',\n        'right',\n        'csv-file',\n        'json-file',\n        'xlsx-file',\n        'logout',\n        'edit',\n        'pause',\n        'play',\n        'move',\n        'mute',\n        'voice',\n        'loop',\n        'stop',\n        'pointing',\n        'asc',\n        'filter',\n        'save',\n        'gear',\n        'checked',\n        'unchecked',\n        'checklist-mixed',\n        'list',\n        'file',\n        'sync-up',\n        'sync-down',\n        'link'\n      ];\n\n      icons.forEach((icon) =>\n        this.registerIcon(\n          this.sanitizer.bypassSecurityTrustHtml(\n            `/assets/obl-icons/${icon}.svg`\n          ),\n          icon\n        )\n      );\n    }\n  }\n\n  /**\n   * Registering own:\n   * @param url SafeHTML object with path to icon in your asset folder\n   * @param name your icon name\n   *\n   * @example\n   *\n   * constructor(private iconResource: IconResourceService) {\n   *  iconResource.registerIcon(\n   *    this.sanitizer.bypassSecurityTrustHtml('/assets/icons/your-icon.svg'),\n   *    'icon-name'\n   *  );\n   * }\n   *\n   * @\n   * Use in html with icon component:\n   *\n   * @example\n   *\n   * <obl-icon [width]=\"20\" name=\"icon-name\"></obl-icon>\n   */\n  registerIcon(url: SafeHtml, name: string): void {\n    (url as any).changingThisBreaksApplicationSecurity =\n      this.base +\n      (url as any).changingThisBreaksApplicationSecurity.replace(/^\\//, '');\n    const icon: Icon = {\n      url,\n      name,\n    };\n\n    this.icons.set(name, icon);\n  }\n\n  /**\n   * Download once icon from server and keep it in buffer\n   * @param name name of icon\n   * @returns observable with SVGSVGElement or undefined\n   */\n  getIcon(name: string): Observable<SVGSVGElement | undefined> {\n    const icon = this.icons.get(name);\n\n    if (!icon) {\n      throw new Error(\n        `Can't find icon \"${name}\" in registered resources. Pleas register it.`\n      );\n    }\n\n    if (icon.svgString) {\n      return of(this.createSvgFromString(icon.svgString));\n    }\n\n    const loading = this.loading.get(name);\n    if (loading) {\n      return from(loading).pipe(\n        map((svg) => (svg ? this.createSvgFromString(svg) : undefined))\n      );\n    }\n\n    const url = this.sanitizer.sanitize(SecurityContext.HTML, icon.url);\n\n    if (url) {\n      let resolve: (res: any) => any;\n      let reject: (rej: any) => any;\n\n      const exec = (res: any, rej: any) => {\n        resolve = res;\n        reject = rej;\n      };\n\n      const promise = new Promise<string | undefined>(exec);\n\n      this.loading.set(name, promise);\n\n      return this._fromUrl(\n        url,\n        (svg: string) => {\n          icon.svgString = svg;\n          this.icons.set(name, icon);\n\n          resolve(svg);\n          this.loading.delete(name);\n        },\n        () => {\n          reject(name);\n          this.loading.delete(url);\n          return this.err(name, url);\n        }\n      );\n    }\n\n    throw new Error('Icon url was not set');\n  }\n\n  /**\n   * Register url to SVG file\n   * @param url url string\n   * @returns SVGSVGElement/undefined or throwing error\n   */\n  fromUrl(url: string): Observable<SVGSVGElement | undefined> {\n    let icon = this.urls.get(url) || {};\n\n    if (!icon) {\n      icon = {\n        url: this.sanitizer.bypassSecurityTrustHtml(url),\n      };\n    }\n\n    if (icon.svgString) {\n      return of(this.createSvgFromString(icon.svgString));\n    }\n\n    return this._fromUrl(\n      url,\n      (svg: string) => {\n        icon.svgString = svg;\n        this.urls.set(url, icon);\n      },\n      () => this.err(undefined, url)\n    );\n  }\n\n  protected _fromUrl(\n    url: string,\n    cb?: (svg: string) => void,\n    cbError?: () => Error\n  ): Observable<SVGSVGElement | undefined> {\n    return this.http.get(url, { responseType: 'text' }).pipe(\n      map((svg) => {\n        if (cb) {\n          cb(svg);\n        }\n        return this.createSvgFromString(svg);\n      }),\n      catchError((_) => {\n        // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n        throw (cbError && cbError()) || this.err(undefined, url);\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.icons.clear();\n  }\n\n  protected err(name?: string, url?: string): Error {\n    return new Error(`Can't download icon \"${name}\" with url \"${url}\". Please make sure that asset folder in node_modules\n    of library @obliczeniowo/elementary was copied by adding script:\n          \n    \"copy-assets\": \"node ./node_modules/@obliczeniowo/elementary/assets/scripts/copy.js ./src/assets/\",\n          \n     and run it with npm or registered by you icon have proper path to file in your assets folder`);\n  }\n\n  protected createSvgFromString(svgString: string): SVGSVGElement | undefined {\n    const div = this.document.createElement('DIV');\n    div.innerHTML = svgString;\n    // eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style\n    return div.querySelector('svg') as SVGSVGElement;\n  }\n}\n","import { IconResourceService } from './../../services/icon-resource.service';\nimport { Component, ElementRef, HostBinding, input, effect } from '@angular/core';\n\n/**\n * Icon component that let you display registered icon with IconResourceService\n *\n * @example\n *\n * <obl-icon name=\"search\" [size]=\"20\"></obl-icon>\n */\n@Component({\n    selector: 'obl-icon',\n    templateUrl: './icon.component.html',\n    styleUrls: ['./icon.component.scss'],\n    standalone: false\n})\nexport class IconComponent {\n  /**\n   * registered icon name\n   */\n  name = input.required<string>();\n\n  /**\n   * Width in px or css like things\n   */\n  width = input<string | number>('var(--obl-icon-width, 20px)');\n\n  @HostBinding('style.width') get widthStyle() {\n    return typeof this.width() === 'string' && this.width() || this.width() + 'px';\n  }\n\n  constructor(\n    protected iconResource: IconResourceService,\n    protected elementRef: ElementRef<HTMLElement>\n  ) {\n    effect(() => {\n      this.iconResource.getIcon(this.name()).subscribe(\n        (svg) => {\n          if (svg) {\n            while (this.elementRef.nativeElement.firstChild) {\n              this.elementRef.nativeElement.removeChild(this.elementRef.nativeElement.firstChild);\n            }\n            svg.style.fill = 'var(--obl-default-icon-color)';\n            this.elementRef.nativeElement.appendChild(svg);\n          }\n        }\n      );\n    })\n  }\n}\n","\n","import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IconComponent } from './components/icon/icon.component';\n\n@NgModule({ declarations: [\n        IconComponent\n    ],\n    exports: [\n        IconComponent\n    ], imports: [CommonModule], providers: [provideHttpClient(withInterceptorsFromDi())] })\nexport class IconsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IconResourceService"],"mappings":"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"}