{"version":3,"file":"uofx-app-components-avatar.mjs","sources":["../../../projects/uofx-app-pack/avatar/src/avatar.component.ts","../../../projects/uofx-app-pack/avatar/src/avatar.component.html","../../../projects/uofx-app-pack/avatar/src/avatar-user/avatar-user.component.ts","../../../projects/uofx-app-pack/avatar/src/avatar-user/avatar-user.component.html","../../../projects/uofx-app-pack/avatar/src/avatar.module.ts","../../../projects/uofx-app-pack/avatar/uofx-app-components-avatar.ts"],"sourcesContent":["import { Component, HostBinding, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\n\r\nimport { ISrcType } from './avatar.interface';\r\nimport { InputNumber } from '@uofx/core';\r\nimport { SafeUrl } from '@angular/platform-browser';\r\nimport { UofxFileDownloadHelper } from '@uofx/app-components/file-helper';\r\n\r\n@Component({\r\n  selector: 'uofx-avatar',\r\n  templateUrl: './avatar.component.html',\r\n  styleUrls: ['./avatar.component.scss'],\r\n})\r\nexport class UofxAvatarComponent implements OnInit, OnChanges {\r\n  @Input('uofIcon') icon: string;\r\n  /** https://stackoverflow.com/questions/37432609/how-can-i-avoid-adding-prefix-unsafe-to-a-link-by-angular-2 */\r\n  @Input('uofSrc') src: string | SafeUrl;\r\n  @Input('uofName') name: string;\r\n\r\n  @Input('ion-avatar-slot') slot: '' | 'start' = '';\r\n\r\n  @Input('uofSize') @InputNumber() size = 40;\r\n\r\n  @Input('uofShape') shape: 'circle' | 'square' = 'circle';\r\n\r\n  @HostBinding('class') hostAvatarClass;\r\n  convertUrl: any;\r\n\r\n  // TODO 待 UX\r\n  sizeClassList = {\r\n    // eslint-disable-next-line max-len\r\n    // 60: 'size-60', 55: 'size-55', 50: 'size-50', 45: 'size-45', 40: 'size-40', 35: 'size-35', 30: 'size-30', 25: 'size-25', 20: 'size-20'\r\n  };\r\n\r\n  /** 頭像內字體的大小 */\r\n  fontSize: number;\r\n  /** 頭像本身的大小 */\r\n  avatarSize: number;\r\n  /** 頭像圖片來源類型 */\r\n  avatarSrctype: keyof ISrcType = 'Src';\r\n  /** 文字顯示的比例 */\r\n  private readonly fontMagnification = 0.4;\r\n\r\n  setAvatarUrlType() {\r\n    if (this.icon) {\r\n      this.avatarSrctype = 'Icon';\r\n    } else if (this.src) {\r\n      this.avatarSrctype = 'Src';\r\n      this.convertUrl = this.transSrc(this.src);\r\n    } else if (this.name) {\r\n      this.avatarSrctype = 'FirstChar';\r\n    } else {\r\n      this.onLoadError();\r\n    }\r\n  }\r\n\r\n  get firstChar() {\r\n    return this.name.charAt(0);\r\n  }\r\n\r\n  constructor(public downloadService: UofxFileDownloadHelper) {}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes.size) this.setSize();\r\n    if (changes.src) this.setAvatarUrlType();\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.setAvatarUrlType();\r\n    this.setShape();\r\n    this.setSize();\r\n    this.setBackgroundColor();\r\n  }\r\n\r\n  /** 轉換 src 來源，加上 server url */\r\n  transSrc(src: any) {\r\n    if (typeof src !== 'string') {\r\n      return this.src;\r\n    }\r\n\r\n    const url = src as string;\r\n    if (url.startsWith('assets/')) {\r\n      return this.src;\r\n    } else {\r\n      return this.downloadService.formatUrl(url);\r\n    }\r\n  }\r\n\r\n  /** 無法取得圖片錯誤處理 */\r\n  onLoadError() {\r\n    if (this.name) {\r\n      return (this.src = '');\r\n    } else {\r\n      // 未知的使用者\r\n      return 'assets/img/u-icon-unknown.png';\r\n    }\r\n  }\r\n\r\n  /** 設定頭像的形狀 */\r\n  private setShape() {\r\n    this.hostAvatarClass = this.shape === 'circle' ? 'avatar-circle' : 'avatar-square';\r\n  }\r\n\r\n  /**\r\n   * 設置頭像大小和頭像內的字體大小\r\n   */\r\n  private setSize() {\r\n    const sizeClass = this.sizeClassList[this.size];\r\n    if (sizeClass)\r\n      // UX有給特定尺寸及樣式，所以基本上由css控制樣式\r\n      this.hostAvatarClass = `${this.hostAvatarClass} ${sizeClass}`;\r\n    else {\r\n      // 如果是例外尺寸由style處理。\r\n      this.avatarSize = this.size;\r\n      this.fontSize = this.avatarSize * this.fontMagnification;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 設置背景顏色\r\n   */\r\n  private setBackgroundColor() {\r\n    // 有圖案或icon 就不用改變底色\r\n    if (this.icon || this.src) return;\r\n  }\r\n}\r\n","<ion-avatar [slot]=\"slot\" [style.width]=\"avatarSize + 'px'\" [style.height]=\"avatarSize + 'px'\">\r\n  <img class=\"localUrl\" *ngIf=\"avatarSrctype === 'Icon'\" [src]=\"icon\" />\r\n  <img class=\"webUrl\" *ngIf=\"avatarSrctype === 'Src' && convertUrl\" [src]=\"convertUrl\" (error)=\"onLoadError()\" />\r\n  <span *ngIf=\"avatarSrctype === 'FirstChar'\" class=\"firstChar\" [ngStyle]=\"{ 'font-size': fontSize + 'px' }\">\r\n    {{ firstChar }}\r\n  </span>\r\n</ion-avatar>\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { UofxAvatarComponent } from '../avatar.component';\r\nimport { UofxFileDownloadHelper } from '@uofx/app-components/file-helper';\r\nimport { UofxUserInfoModel } from '../avatar.interface';\r\n\r\n@Component({\r\n  selector: 'uofx-avatar-user',\r\n  templateUrl: './avatar-user.component.html',\r\n  styleUrls: ['./avatar-user.component.scss'],\r\n})\r\nexport class UofxAvatarUserComponent extends UofxAvatarComponent {\r\n  /** 人員資訊 */\r\n  @Input('uofUserInfo') user: UofxUserInfoModel;\r\n  /** 是否顯示部門名稱 */\r\n  @Input('uofDisplayDept') displayDept = true;\r\n  /** 是否顯示人員帳號 */\r\n  @Input('uofDisplayAccount') displayAccount = false;\r\n  /** 是否顯示名稱 */\r\n  @Input('uofDisplayName') displayName = true;\r\n\r\n  constructor(public downloadService: UofxFileDownloadHelper) {\r\n    super(downloadService);\r\n  }\r\n}\r\n","<div class=\"user-avatar\">\r\n  <uofx-avatar [uofName]=\"user?.name\" [uofSrc]=\"user?.imageInfoUrl\" [uofSize]=\"size\"></uofx-avatar>\r\n  <div class=\"user-info\">\r\n    <ng-container *ngIf=\"user\">\r\n      <ng-container *ngIf=\"displayDept\">{{ user.department }}&ensp;</ng-container>\r\n      <ng-container *ngIf=\"displayName\">{{ user.name }}&ensp;</ng-container>\r\n      <ng-container *ngIf=\"displayAccount\">{{ user.account }}&ensp;</ng-container>\r\n      <ng-content select=\"[avater-user-extension]\"></ng-content>\r\n    </ng-container>\r\n  </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { IonicModule } from '@ionic/angular';\r\nimport { NgModule } from '@angular/core';\r\nimport { UofxAvatarComponent } from './avatar.component';\r\nimport { UofxAvatarUserComponent } from './avatar-user/avatar-user.component';\r\nimport { UofxFileDownloadHelper } from '@uofx/app-components/file-helper';\r\n\r\nconst COMPONENTS = [UofxAvatarComponent, UofxAvatarUserComponent];\r\n\r\n@NgModule({\r\n  imports: [CommonModule, IonicModule],\r\n  exports: [...COMPONENTS],\r\n  declarations: [...COMPONENTS],\r\n  providers: [UofxFileDownloadHelper],\r\n})\r\nexport class UofxAvatarModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3.UofxAvatarComponent"],"mappings":"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"}