{"version":3,"file":"ng-nest-ui-icon.mjs","sources":["../../../../lib/ng-nest/ui/icon/icon.property.ts","../../../../lib/ng-nest/ui/icon/icon.service.ts","../../../../lib/ng-nest/ui/icon/icon.component.ts","../../../../lib/ng-nest/ui/icon/icon.component.html","../../../../lib/ng-nest/ui/icon/icon.module.ts","../../../../lib/ng-nest/ui/icon/ng-nest-ui-icon.ts"],"sourcesContent":["import { XPropertyFunction, XToBoolean } from '@ng-nest/ui/core';\r\nimport { Component, input } from '@angular/core';\r\nimport type { XBoolean } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Icon\r\n * @selector x-icon\r\n * @decorator component\r\n */\r\nexport const XIconPrefix = 'x-icon';\r\nconst X_ICON_CONFIG_NAME = 'icon';\r\n\r\n/**\r\n * Icon Property\r\n */\r\n@Component({ selector: `${XIconPrefix}-property`, template: '' })\r\nexport class XIconProperty extends XPropertyFunction(X_ICON_CONFIG_NAME) {\r\n  /**\r\n   * @zh_CN SVG 图标根路径地址，可以通过全局只配置一次，所有图标资源在 github 上的 ng-nest-icon 中\r\n   * @en_US The root address of the SVG icon can be configured only once globally. All icon resources are in ng-nest-icon on github\r\n   */\r\n  readonly href = input<string>(this.config?.href ?? 'https://ngnest.com/static/icons/');\r\n  /**\r\n   * @zh_CN 图标类型\r\n   * @en_US Icon type\r\n   * @example\r\n   *\r\n   * ```html\r\n   * <x-icon type=\"fto-activity\"></x-icon>\r\n   * <x-icon type=\"fto-airplay\"></x-icon>\r\n   * <x-icon type=\"fto-anchor\"></x-icon>\r\n   * ```\r\n   *\r\n   */\r\n  readonly type = input<string>();\r\n  /**\r\n   * @zh_CN 图标颜色\r\n   * @en_US Icon color\r\n   * @example\r\n   *\r\n   * ```html\r\n   * <x-icon color=\"red\" type=\"fto-activity\"></x-icon>\r\n   * ```\r\n   *\r\n   */\r\n  readonly color = input<string>();\r\n  /**\r\n   * @zh_CN loading效果（图标一直旋转）\r\n   * @en_US Loading effect (icon keeps rotating)\r\n   * @example\r\n   *\r\n   * ```html\r\n   * <x-icon spin=\"true\" type=\"fto-loader\"></x-icon>\r\n   * ```\r\n   *\r\n   */\r\n  readonly spin = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\n/**\r\n * @zh_CN 图标来源\r\n * @en_US Icon source\r\n */\r\nexport type XIconSource = 'ant-design' | 'eva' | 'feather' | 'font-awesome' | 'material-design';\r\n","import { Injectable, SecurityContext, inject } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, Subscriber } from 'rxjs';\r\nimport { XHasIn, XIsEmpty } from '@ng-nest/ui/core';\r\nimport { XIconPrefix } from './icon.property';\r\n\r\ntype Task<T> = {\r\n  name: string;\r\n  observable: Observable<T>;\r\n  callback: Function;\r\n};\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class XIconService {\r\n  caches: { [property: string]: any } = {};\r\n  queue: Task<any>[] = [];\r\n  activeTaskXm: number = 0;\r\n  isRunningTask = false;\r\n  limit: number = 10;\r\n  sanitizer = inject(DomSanitizer);\r\n  http = inject(HttpClient, { optional: true })!;\r\n  customIcon: { [property: string]: string } = {};\r\n\r\n  constructor() {\r\n    if (!this.http) {\r\n      throw new Error(`${XIconPrefix}: Not found 'HttpClient', You can import 'HttpClientModule' in your root module.`);\r\n    }\r\n  }\r\n\r\n  public addTask<T>(task: Task<T>) {\r\n    this.queue.push(task);\r\n    this.runTask();\r\n  }\r\n\r\n  private execute<T>(task: Task<T>) {\r\n    this.isRunningTask = true;\r\n    if (XHasIn(this.caches, task.name)) {\r\n      task.callback(this.caches[task.name]);\r\n      this.activeTaskXm--;\r\n      this.isRunningTask = false;\r\n      this.runTask();\r\n      return;\r\n    }\r\n    return task.observable.subscribe({\r\n      next: (result) => {\r\n        this.caches[task.name] = result;\r\n        task.callback(result);\r\n        return result;\r\n      },\r\n      error: (error) => {\r\n        console.error(error);\r\n        this.activeTaskXm--;\r\n        this.isRunningTask = false;\r\n        this.runTask();\r\n      },\r\n      complete: () => {\r\n        this.activeTaskXm--;\r\n        this.isRunningTask = false;\r\n        this.runTask();\r\n      }\r\n    });\r\n  }\r\n\r\n  private runTask() {\r\n    if (!this.isRunningTask && this.activeTaskXm < this.limit && this.queue.length > 0) {\r\n      const task = this.queue.shift();\r\n      this.activeTaskXm++;\r\n      this.execute(task!);\r\n    }\r\n  }\r\n\r\n  getSvg(root: string, icon: string, isCustom = false): Observable<string> {\r\n    return new Observable((subscriber: Subscriber<string>) => {\r\n      if (XIsEmpty(icon)) {\r\n        subscriber.next('');\r\n        subscriber.complete();\r\n        return;\r\n      }\r\n      this.addTask({\r\n        name: icon,\r\n        observable: this.getSvgElement(root, icon, isCustom),\r\n        callback: (svg: string) => {\r\n          subscriber.next(svg);\r\n          subscriber.complete();\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  getSvgElement(root: string, icon: string, isCustom = false): Observable<string> {\r\n    const url = isCustom ? `${root}${icon}` : `${root}${icon}.svg`;\r\n    const safeUrl = this.sanitizer.sanitize(SecurityContext.URL, url);\r\n    return this.http.get(safeUrl as string, { responseType: 'text' });\r\n  }\r\n\r\n  register(icon: string, url: string) {\r\n    this.customIcon[icon] = url;\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  ViewEncapsulation,\r\n  ChangeDetectionStrategy,\r\n  ElementRef,\r\n  Renderer2,\r\n  HostBinding,\r\n  inject,\r\n  effect,\r\n  computed,\r\n  ChangeDetectorRef,\r\n  signal\r\n} from '@angular/core';\r\nimport { XIconPrefix, XIconProperty } from './icon.property';\r\nimport { XIconService } from './icon.service';\r\nimport { XWarnIconTypeNotFound, XIsEmpty, XHasIn, XWarnSVGTagNotFound } from '@ng-nest/ui/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n// 来源路径对应\r\nexport const XSouceUrl: { [property: string]: string } = {\r\n  adf: `ant-design/fill/`,\r\n  ado: `ant-design/outline/`,\r\n  adt: `ant-design/twotone/`,\r\n  eaf: `eva/fill/`,\r\n  eao: `eva/outline/`,\r\n  fto: `feather/`,\r\n  fab: `font-awesome/brands/`,\r\n  far: `font-awesome/regular/`,\r\n  fas: `font-awesome/solid/`,\r\n  mdf: `material-design/fill/`,\r\n  mdo: `material-design/outline/`\r\n};\r\n\r\nexport const XViewBox = [\r\n  // { souces: [\"adf\", \"ado\", \"adt\"], value: \"0 0 1024 1024\" },\r\n  // { souces: [\"eaf\", \"eao\"], value: \"0 0 24 24\" },\r\n  // { souces: [\"fto\"], value: \"0 0 24 24\" }\r\n];\r\n\r\n@Component({\r\n  selector: `${XIconPrefix}`,\r\n  templateUrl: './icon.component.html',\r\n  styleUrls: ['./style/index.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XIconComponent extends XIconProperty {\r\n  private svgElement!: HTMLElement;\r\n  private document = inject(DOCUMENT);\r\n  private elementRef = inject(ElementRef);\r\n  private renderer = inject(Renderer2);\r\n  private cdr = inject(ChangeDetectorRef);\r\n  private iconService = inject(XIconService);\r\n  private beforeClass = signal('');\r\n\r\n  @HostBinding('class.x-icon') hostClass = true;\r\n\r\n  @HostBinding('class.x-icon-spin') get getSpin() {\r\n    return this.spin();\r\n  }\r\n\r\n  @HostBinding('style.color') get getColor() {\r\n    return this.color();\r\n  }\r\n\r\n  inSource = computed(() => {\r\n    const type = this.type();\r\n    if (typeof type === 'undefined' || type === '' || type === null) return false;\r\n    const split = type.split('-');\r\n    const souce = split.shift();\r\n    if (typeof souce === 'undefined') return false;\r\n    const souceUrl = XSouceUrl[souce];\r\n    return souceUrl ? true : false;\r\n  });\r\n\r\n  sourceUrl = computed(() => {\r\n    if (!this.inSource()) return '';\r\n    const split = this.type()!.split('-');\r\n    const souce = split.shift();\r\n    const souceUrl = XSouceUrl[souce!];\r\n    const fileName = split.join('-');\r\n    if (!souceUrl || !fileName) {\r\n      XWarnIconTypeNotFound();\r\n    }\r\n    return `${souceUrl}${fileName}`;\r\n  });\r\n\r\n  isCustom = computed(() => {\r\n    return !this.inSource() && XHasIn(this.iconService.customIcon, this.type()!);\r\n  });\r\n\r\n  constructor() {\r\n    super();\r\n    effect(() => {\r\n      if (this.isCustom()) {\r\n        this.iconService.getSvg('', this.iconService.customIcon[this.type()!], true).subscribe((x) => this.setSvgs(x));\r\n      } else if (this.inSource()) {\r\n        this.iconService.getSvg(this.href(), this.sourceUrl()).subscribe((x) => this.setSvgs(x));\r\n      }\r\n    });\r\n    effect(() => {\r\n      if (this.elementRef.nativeElement && this.type()) {\r\n        if (this.beforeClass()) {\r\n          this.renderer.removeClass(this.elementRef.nativeElement, this.beforeClass());\r\n        }\r\n        this.renderer.addClass(this.elementRef.nativeElement, this.type()!);\r\n        this.beforeClass.set(this.type()!);\r\n      }\r\n    });\r\n  }\r\n\r\n  setSvgs(svg: string) {\r\n    if (XIsEmpty(svg)) return;\r\n    if (this.svgElement) {\r\n      this.renderer.removeChild(this.elementRef.nativeElement, this.svgElement);\r\n    }\r\n    if (this.isCustom()) {\r\n      const parser = new DOMParser();\r\n      const svgDoc = parser.parseFromString(svg, 'image/svg+xml');\r\n      let firstChild = this.elementRef.nativeElement.firstChild;\r\n      if (firstChild) {\r\n        this.renderer.removeChild(this.elementRef.nativeElement, firstChild);\r\n      }\r\n      this.svgElement = svgDoc.documentElement;\r\n    } else if (this.inSource()) {\r\n      this.svgElement = this.buildSvg(svg)!;\r\n    }\r\n    if (!this.svgElement) return;\r\n    this.setAttributes(this.svgElement);\r\n    this.renderer.appendChild(this.elementRef.nativeElement, this.svgElement);\r\n    // TODO: use zoneless, renderer removeChild will not take effect immediately\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  buildSvg(svgStr: string): HTMLElement | undefined {\r\n    const result = this.document.createElementNS('http://www.w3.org/2000/svg', 'svg') as any;\r\n    const svg = this.createSvg(svgStr);\r\n    if (!svg) return;\r\n    svg.children.forEach((x) => {\r\n      x.removeAttribute('class');\r\n      if (x.tagName === 'rect') {\r\n        x.setAttribute('fill', 'none');\r\n      }\r\n      result.appendChild(x);\r\n    });\r\n    this.setAttribute(result, svg.ele, 'viewBox');\r\n    this.setAttribute(result, svg.ele, 'fill', 'currentColor');\r\n    this.setAttribute(result, svg.ele, 'stroke');\r\n    this.setAttribute(result, svg.ele, 'stroke-width');\r\n    this.setAttribute(result, svg.ele, 'stroke-linecap');\r\n    this.setAttribute(result, svg.ele, 'stroke-linejoin');\r\n    if (!result) {\r\n      XWarnSVGTagNotFound();\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  createSvg(svgStr: string) {\r\n    const div = this.document.createElement('div');\r\n    div.innerHTML = svgStr;\r\n    let svgEle = div.querySelector('svg') as SVGElement;\r\n    if (!svgEle) return null;\r\n    return {\r\n      ele: svgEle,\r\n      children: svgEle.querySelectorAll('path, polyline, polygon, circle, line, rect')\r\n    };\r\n  }\r\n\r\n  setAttributes(svgEle: HTMLElement) {\r\n    if (svgEle) {\r\n      this.renderer.setAttribute(svgEle, 'width', '1em');\r\n      this.renderer.setAttribute(svgEle, 'height', '1em');\r\n    }\r\n  }\r\n\r\n  setAttribute(svg: SVGElement, svgEle: SVGElement, attribute: string, def?: string) {\r\n    let attr = svgEle.getAttribute(attribute);\r\n    if (attr) {\r\n      svg.setAttribute(attribute, attr);\r\n    } else if (def) {\r\n      svg.setAttribute(attribute, def);\r\n    }\r\n  }\r\n}\r\n","\r\n","import { NgModule } from '@angular/core';\r\nimport { XIconComponent } from './icon.component';\r\n\r\n@NgModule({\r\n  exports: [XIconComponent],\r\n  imports: [XIconComponent]\r\n})\r\nexport class XIconModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}