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