{"version":3,"file":"uofx-app-components-icon.mjs","sources":["../../../projects/uofx-app-pack/icon/src/icon.component.ts","../../../projects/uofx-app-pack/icon/src/icon.component.html","../../../projects/uofx-app-pack/icon/src/pipe/mi-icon.pipe.ts","../../../projects/uofx-app-pack/icon/src/icon.module.ts","../../../projects/uofx-app-pack/icon/uofx-app-components-icon.ts"],"sourcesContent":["import { Component, HostBinding, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'uofx-icon',\r\n  templateUrl: './icon.component.html',\r\n  styleUrls: ['./icon.component.scss'],\r\n})\r\nexport class UofxIconComponent implements OnInit, OnChanges {\r\n  /** icon host 高度 */\r\n  @HostBinding('style.height.px') hostHeight;\r\n\r\n  /** icon host 寬度 */\r\n  @HostBinding('style.width.px') hostWidth;\r\n\r\n  /** 要設定的尺寸 */\r\n  @Input() set size(size: number) {\r\n    this.hostHeight = size;\r\n    this.hostWidth = size;\r\n    this.iconSize = size;\r\n  }\r\n\r\n  /** icon 名稱 */\r\n  @Input() name: string;\r\n\r\n  /** 指定 icon 顏色，預設皆繼承 color，可以設定 #fff、pink 或是 bl-500，這三種形式的數值 */\r\n  @Input() color: string;\r\n\r\n  /** icon 的尺寸 */\r\n  iconSize: number;\r\n\r\n  /**\r\n   * 用來設定Ionic icon的顏色\r\n   * ede icon元件本身已經有做顏色設定了，不用再另外處理\r\n   */\r\n  iconColorClass = '';\r\n  /** icon 類型: UOFX SVG、Ionic、material */\r\n  iconSource: IconSource = IconSource.Sys;\r\n  /** html使用 */\r\n  IconSource = IconSource;\r\n\r\n  ngOnInit() {\r\n    this.setIcon();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.name?.firstChange === false || changes.color?.firstChange === false) {\r\n      this.setIcon();\r\n    }\r\n  }\r\n\r\n  /** 設定icon來源 */\r\n  setIcon() {\r\n    this.setIconColor();\r\n    if (!this.name) return;\r\n\r\n    if (this.name.startsWith('u-')) {\r\n      // u- 開頭為 UOFX icon\r\n      this.iconSource = IconSource.Sys;\r\n    } else if (this.name.startsWith('mi-o-')) {\r\n      // mi-o- 開頭為 Material Outline 的 icon\r\n      this.iconSource = IconSource.MaterialOutline;\r\n    } else if (this.name.startsWith('mi-')) {\r\n      // mi- 開頭為 Material 的 icon\r\n      this.iconSource = IconSource.Material;\r\n    } else {\r\n      // 其他的是 Ionic icon.\r\n      this.iconSource = IconSource.Ionic;\r\n    }\r\n  }\r\n\r\n  /** 設定icon 顏色 */\r\n  setIconColor() {\r\n    // 如果是自訂顏色，其自訂顏色必然包含減號\r\n    // 加上前輟詞 text-，就會變如 text-bl-500 或 text-bk-500\r\n    if (this.color) {\r\n      const isCustomColor = this.color && this.color.includes('-');\r\n      if (isCustomColor) this.iconColorClass = 'text-' + this.color;\r\n      else this.iconColorClass = '';\r\n    } else {\r\n      this.color = 'inherit';\r\n    }\r\n  }\r\n\r\n  /** 設定host 尺寸 */\r\n  setHostSize() {\r\n    this.hostHeight = this.size;\r\n    this.hostWidth = this.size;\r\n  }\r\n}\r\n\r\n/** icon 類型 */\r\nexport enum IconSource {\r\n  /** UOFX SVG */\r\n  Sys,\r\n  /** Ionic */\r\n  Ionic,\r\n  /** material */\r\n  Material,\r\n  /** material outline */\r\n  MaterialOutline,\r\n}\r\n","<ng-container [ngSwitch]=\"iconSource\">\r\n  <!-- material Icon -->\r\n  <ng-container *ngSwitchCase=\"IconSource.Material\">\r\n    <span [class]=\"'mi-round ' + name + ' ' + iconColorClass\" [ngStyle]=\"{ 'font-size': iconSize + 'px', color: color }\"> </span>\r\n  </ng-container>\r\n  <!-- Material outline Icon -->\r\n  <ng-container *ngSwitchCase=\"IconSource.MaterialOutline\">\r\n    <span\r\n      [class]=\"'mi-outlined ' + name.replace('mi-o-', 'mi-') + ' ' + iconColorClass\"\r\n      [ngStyle]=\"{ 'font-size': iconSize && iconSize + 'px', color: color }\">\r\n    </span>\r\n  </ng-container>\r\n  <!-- Svg Icon -->\r\n  <ng-container *ngSwitchCase=\"IconSource.Sys\">\r\n    <uofx-icon-base\r\n      [uofName]=\"name\"\r\n      [uofSize]=\"iconSize\"\r\n      [uofColor]=\"color\"\r\n      [ngStyle]=\"{ 'font-size': iconSize + 'px' }\">\r\n    </uofx-icon-base>\r\n  </ng-container>\r\n  <!-- Ion Icon -->\r\n  <ng-container *ngSwitchCase=\"IconSource.Ionic\">\r\n    <ion-icon [name]=\"name\" [class]=\"iconColorClass\" [ngStyle]=\"{ 'font-size': iconSize + 'px', color: color }\">\r\n    </ion-icon>\r\n  </ng-container>\r\n</ng-container>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * 傳入 iconCode，轉換成 Material Icon 的 class 名稱\r\n * @class UofxMiIconPipe\r\n * @implements {PipeTransform}\r\n * @example 'home' -> 'mi-home'\r\n * @example 'calendar_today' -> 'mi-calendar-today'\r\n */\r\n@Pipe({ name: 'miIcon' })\r\nexport class UofxMiIconPipe implements PipeTransform {\r\n  transform(iconCode: string): string {\r\n    if (typeof iconCode !== 'string') return;\r\n    return `mi-${iconCode.replaceAll('_', '-')}`;\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { IonicModule } from '@ionic/angular';\r\nimport { UofxIconBaseModule } from '@uofx/icon';\r\nimport { InlineSVGModule } from 'ng-inline-svg-2';\r\nimport { UofxIconComponent } from './icon.component';\r\nimport { UofxMiIconPipe } from './pipe/mi-icon.pipe';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, IonicModule, InlineSVGModule.forRoot(), UofxIconBaseModule.forChild()],\r\n  exports: [UofxIconComponent, UofxMiIconPipe],\r\n  declarations: [UofxIconComponent, UofxMiIconPipe],\r\n  providers: [UofxMiIconPipe],\r\n})\r\nexport class UofxIconModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}