{"version":3,"file":"ng-hub-ui-avatar.mjs","sources":["../../../projects/avatar/src/lib/sources/async-source.ts","../../../projects/avatar/src/lib/sources/avatar-source.enum.ts","../../../projects/avatar/src/lib/sources/facebook.ts","../../../projects/avatar/src/lib/sources/twitter.ts","../../../projects/avatar/src/lib/sources/google.ts","../../../projects/avatar/src/lib/sources/instagram.ts","../../../projects/avatar/src/lib/sources/custom.ts","../../../projects/avatar/src/lib/sources/initials.ts","../../../projects/avatar/src/lib/sources/gravatar.ts","../../../projects/avatar/src/lib/sources/skype.ts","../../../projects/avatar/src/lib/sources/value.ts","../../../projects/avatar/src/lib/sources/vkontakte.ts","../../../projects/avatar/src/lib/sources/github.ts","../../../projects/avatar/src/lib/avatar-config.token.ts","../../../projects/avatar/src/lib/avatar-config.service.ts","../../../projects/avatar/src/lib/avatar.service.ts","../../../projects/avatar/src/lib/sources/custom-no-cache.ts","../../../projects/avatar/src/lib/sources/source.factory.ts","../../../projects/avatar/src/lib/avatar.component.ts","../../../projects/avatar/src/lib/avatar.module.ts","../../../projects/avatar/src/public_api.ts","../../../projects/avatar/src/ng-hub-ui-avatar.ts"],"sourcesContent":["import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * Contract of all async sources.\n * Every async source must implement the processResponse method that extracts the avatar url from the data\n */\nexport abstract class AsyncSource implements Source {\n  readonly abstract sourceType: AvatarSource;\n\n  constructor(public sourceId: string) {}\n\n  abstract getAvatar(size: number): string;\n  abstract processResponse(data: unknown, size?: number): string | null;\n}\n","export enum AvatarSource {\n  FACEBOOK = 'facebook',\n  GOOGLE = 'google',\n  TWITTER = 'twitter',\n  INSTAGRAM = 'instagram',\n  VKONTAKTE = 'vkontakte',\n  SKYPE = 'skype',\n  GRAVATAR = 'gravatar',\n  GITHUB = 'github',\n  CUSTOM = 'custom',\n  INITIALS = 'initials',\n  VALUE = 'value'\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n/**\n *  Facebook source implementation.\n *  Fetch avatar source based on facebook identifier\n *  and image size\n */\nexport class Facebook implements Source {\n  readonly sourceType: AvatarSource = AvatarSource.FACEBOOK;\n\n  constructor(public sourceId: string) {}\n\n  public getAvatar(size: number): string {\n    return (\n      'https://graph.facebook.com/' +\n      `${this.sourceId}/picture?width=${size}&height=${size}`\n    );\n  }\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n *  Twitter source implementation.\n *  Fetch avatar source based on google identifier\n *  and image size\n */\nexport class Twitter implements Source {\n  readonly sourceType: AvatarSource = AvatarSource.TWITTER;\n\n  constructor(public sourceId: string) {}\n\n  public getAvatar(size: number): string {\n    const twitterImgSize = this.getImageSize(size);\n    return `https://twitter.com/${\n      this.sourceId\n    }/profile_image?size=${twitterImgSize}`;\n  }\n\n  private getImageSize(size: number) {\n    if (size <= 24) {\n      return 'mini';\n    }\n\n    if (size <= 48) {\n      return 'normal';\n    }\n\n    if (size <= 73) {\n      return 'bigger';\n    }\n\n    return 'original';\n  }\n}\n","import { AsyncSource } from './async-source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n *  Google source implementation.\n *  Fetch avatar source based on google identifier\n *  and image size\n */\nexport class Google extends AsyncSource {\n  readonly sourceType: AvatarSource = AvatarSource.GOOGLE;\n\n  constructor(sourceId: string) {\n    super(sourceId);\n  }\n\n  public getAvatar(): string {\n    return `https://picasaweb.google.com/data/entry/api/user/${\n      this.sourceId\n    }?alt=json`;\n  }\n\n  /**\n   * Extract google avatar from json data\n   */\n  public processResponse(data: { entry: { gphoto$thumbnail: { $t: string } } }, size?: number): string | null {\n    const avatarSrc = data.entry.gphoto$thumbnail.$t;\n    if (avatarSrc) {\n      return avatarSrc.replace('s64', 's' + size);\n    }\n\n    return null;\n  }\n}\n","import { AsyncSource } from './async-source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n *  Instagram source implementation.\n *  Fetch avatar source based on instagram identifier\n */\nexport class Instagram extends AsyncSource {\n  readonly sourceType: AvatarSource = AvatarSource.INSTAGRAM;\n\n  constructor(sourceId: string) {\n    super(sourceId);\n  }\n\n  public getAvatar(): string {\n    return `https://www.instagram.com/${this.sourceId}/?__a=1`;\n  }\n\n  /**\n   * extract instagram avatar from json data\n   */\n  public processResponse(data: { graphql: { user: { profile_pic_url_hd: string } } }, size?: number): string {\n    return `${data.graphql.user.profile_pic_url_hd}&s=${size}`;\n  }\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n/**\n *  Custom source implementation.\n *  return custom image as an avatar\n *\n */\nexport class Custom implements Source {\n  readonly sourceType: AvatarSource = AvatarSource.CUSTOM;\n\n  constructor(public sourceId: string) {}\n\n  public getAvatar(): string {\n    return this.sourceId;\n  }\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * Initials source implementation.\n * return the initials of the given value\n */\nexport class Initials implements Source {\n  readonly sourceType: AvatarSource = AvatarSource.INITIALS;\n\n  constructor(public sourceId: string) {}\n\n  public getAvatar(size: number): string {\n    return this.getInitials(this.sourceId, size);\n  }\n\n  /**\n   * Returns the initial letters of a name in a string.\n   */\n  private getInitials(name: string, size: number): string {\n    name = name.trim();\n\n    if (!name) {\n      return '';\n    }\n\n    const initials = name.split(' ');\n\n    if (size && size < initials.length) {\n      return this.constructInitials(initials.slice(0, size));\n    } else {\n      return this.constructInitials(initials);\n    }\n  }\n\n  /**\n   * Iterates a person's name string to get the initials of each word in uppercase.\n   */\n  private constructInitials(elements: string[]): string {\n    if (!elements || !elements.length) {\n      return '';\n    }\n\n    return elements\n      .filter(element => element && element.length > 0)\n      .map(element => element[0].toUpperCase())\n      .join('');\n  }\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\nfunction isRetina(): boolean {\n\tif (typeof window !== 'undefined' && window !== null) {\n\t\tif (window.devicePixelRatio > 1.25) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst mediaQuery =\n\t\t\t'(-webkit-min-device-pixel-ratio: 1.25), (min--moz-device-pixel-ratio: 1.25), (-o-min-device-pixel-ratio: 5/4), (min-resolution: 1.25dppx)';\n\t\tif (window.matchMedia && window.matchMedia(mediaQuery).matches) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n *  Helper function to calculate MD5 hash using the Crypto API.\n */\nfunction hashMD5(value: string): Promise<string> {\n\t// Convert string to Uint8Array\n\tconst encoder = new TextEncoder();\n\tconst data = encoder.encode(value);\n\n\t// Use SubtleCrypto for hashing\n\treturn crypto.subtle.digest('MD5', data).then((hash) => {\n\t\t// Convert ArrayBuffer to hexadecimal string\n\t\treturn Array.from(new Uint8Array(hash))\n\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t.join('');\n\t});\n}\n\n/**\n *  Gravatar source implementation.\n *  Fetch avatar source based on gravatar email\n */\nexport class Gravatar implements Source {\n\treadonly sourceType: AvatarSource = AvatarSource.GRAVATAR;\n\tsourceId: string;\n\n\tconstructor(public value: string) {\n\t\t// Use regex to check if the value is already an MD5 hash, otherwise calculate it\n\t\tif (value.match('^[a-f0-9]{32}$')) {\n\t\t\tthis.sourceId = value;\n\t\t} else {\n\t\t\thashMD5(value).then((hash) => {\n\t\t\t\tthis.sourceId = hash;\n\t\t\t});\n\t\t}\n\t}\n\n\tgetAvatar(size: number): string {\n\t\tconst avatarSize = isRetina() ? size * 2 : size;\n\t\treturn `https://secure.gravatar.com/avatar/${this.sourceId}?s=${avatarSize}&d=404`;\n\t}\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n/**\n *  Skype source implementation.\n *  Fetch avatar source based on skype identifier\n */\nexport class Skype implements Source {\n  readonly sourceType: AvatarSource = AvatarSource.SKYPE;\n\n  constructor(public sourceId: string) {}\n\n  public getAvatar(): string {\n    return `https://api.skype.com/users/${this.sourceId}/profile/avatar`;\n  }\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n *  Value source implementation.\n *  return the value as avatar\n */\nexport class Value implements Source {\n  readonly sourceType: AvatarSource = AvatarSource.VALUE;\n\n  constructor(public sourceId: string) {}\n\n  public getAvatar(): string {\n    return this.sourceId;\n  }\n}\n","import { AsyncSource } from './async-source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n *  Vkontakte source implementation.\n *  Fetch avatar source based on vkontakte identifier\n *  and image size\n */\nconst apiVersion = 5.8;\n\nexport class Vkontakte extends AsyncSource {\n  readonly sourceType: AvatarSource = AvatarSource.VKONTAKTE;\n\n  constructor(sourceId: string) {\n    super(sourceId);\n  }\n\n  public getAvatar(size: number): string {\n    const imgSize = this.getImageSize(size);\n    return `https://api.vk.com/method/users.get?user_id=${\n      this.sourceId\n    }&v=${apiVersion}&fields=${imgSize}`;\n  }\n\n  /**\n   * extract vkontakte avatar from json data\n   */\n  public processResponse(data: {\n    response: {\n      [key: string]: string;\n    }[]\n  }): string | null {\n    // avatar key property is the size used to generate avatar url\n    // size property is always the last key in the response object\n    const sizeProperty = Object.keys(data['response'][0]).pop();\n    if (!sizeProperty) {\n      return null;\n    }\n    // return avatar src\n    return data['response'][0][sizeProperty] || null;\n  }\n\n  /**\n   * Returns image size related to vkontakte API\n   */\n  private getImageSize(size: number): string {\n    if (size <= 50) {\n      return 'photo_50';\n    }\n\n    if (size <= 100) {\n      return 'photo_100';\n    }\n\n    if (size <= 200) {\n      return 'photo_200';\n    }\n\n    return 'photo_max';\n  }\n}\n","import { AsyncSource } from './async-source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n *  GitHub source implementation.\n *  Fetch avatar source based on github identifier\n */\nexport class Github extends AsyncSource {\n  readonly sourceType: AvatarSource = AvatarSource.GITHUB;\n\n  constructor(sourceId: string) {\n    super(sourceId);\n  }\n\n  public getAvatar(): string {\n    return `https://api.github.com/users/${this.sourceId}`;\n  }\n\n  /**\n   * extract github avatar from json data\n   */\n  public processResponse(data: { avatar_url: string }, size?: number): string {\n    if (size) {\n      return `${data.avatar_url}&s=${size}`;\n    }\n    return data.avatar_url;\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { AvatarConfig } from './avatar-config';\n/**\n * Token used to inject the AvatarConfig object\n */\nexport const AVATAR_CONFIG = new InjectionToken<AvatarConfig>('avatar.config');\n","import { Injectable, Inject, Optional } from '@angular/core';\n\nimport { AvatarSource } from './sources/avatar-source.enum';\nimport { AVATAR_CONFIG } from './avatar-config.token';\nimport { AvatarConfig } from './avatar-config';\n\n@Injectable({ providedIn: 'root' })\nexport class AvatarConfigService {\n\tconstructor(\n\t\t@Optional()\n\t\t@Inject(AVATAR_CONFIG)\n\t\tpublic userConfig: AvatarConfig\n\t) {}\n\n\tpublic getAvatarSources(defaultSources: AvatarSource[]): AvatarSource[] {\n\t\tif (\n\t\t\tthis.userConfig &&\n\t\t\tthis.userConfig.sourcePriorityOrder &&\n\t\t\tthis.userConfig.sourcePriorityOrder.length\n\t\t) {\n\t\t\tconst uniqueSources = [\n\t\t\t\t...new Set(this.userConfig.sourcePriorityOrder)\n\t\t\t];\n\t\t\tconst validSources = uniqueSources.filter((source) =>\n\t\t\t\tdefaultSources.includes(source)\n\t\t\t);\n\t\t\treturn [\n\t\t\t\t...validSources,\n\t\t\t\t...defaultSources.filter(\n\t\t\t\t\t(source) => !validSources.includes(source)\n\t\t\t\t)\n\t\t\t];\n\t\t}\n\t\treturn defaultSources;\n\t}\n\n\tpublic getAvatarColors(defaultColors: string[]): string[] {\n\t\treturn (\n\t\t\t(this.userConfig &&\n\t\t\t\tthis.userConfig.colors &&\n\t\t\t\tthis.userConfig.colors.length &&\n\t\t\t\tthis.userConfig.colors) ||\n\t\t\tdefaultColors\n\t\t);\n\t}\n\n\tpublic getDisableSrcCache(defaultDisableSrcCache: boolean): boolean {\n\t\tif (\n\t\t\tthis.userConfig == null ||\n\t\t\tthis.userConfig.disableSrcCache == null\n\t\t) {\n\t\t\treturn defaultDisableSrcCache;\n\t\t} else {\n\t\t\treturn this.userConfig.disableSrcCache;\n\t\t}\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\nimport { AvatarConfigService } from './avatar-config.service';\nimport { AvatarSource } from './sources/avatar-source.enum';\nimport { Source } from './sources/source';\n\n/**\n * list of Supported avatar sources\n */\nexport const defaultSources = [\n  AvatarSource.FACEBOOK,\n  AvatarSource.GOOGLE,\n  AvatarSource.TWITTER,\n  AvatarSource.INSTAGRAM,\n  AvatarSource.VKONTAKTE,\n  AvatarSource.SKYPE,\n  AvatarSource.GRAVATAR,\n  AvatarSource.GITHUB,\n  AvatarSource.CUSTOM,\n  AvatarSource.INITIALS,\n  AvatarSource.VALUE\n];\n\n/**\n * list of default colors\n */\nexport const defaultColors = [\n  '#1abc9c',\n  '#3498db',\n  '#f1c40f',\n  '#8e44ad',\n  '#e74c3c',\n  '#d35400',\n  '#2c3e50',\n  '#7f8c8d'\n];\n\n/**\n * Default disable custom source cache settings\n */\nexport const defaultDisableSrcCache = false;\n\n/**\n * Provides utilities methods related to Avatar component\n */\n@Injectable({providedIn: 'root'})\nexport class AvatarService {\n  public avatarSources: AvatarSource[] = defaultSources;\n  public avatarColors: string[] = defaultColors;\n\n  private readonly failedSources = new Map<string, Source>();\n\n  constructor(\n    private http: HttpClient,\n    private avatarConfigService: AvatarConfigService\n  ) {\n    this.overrideAvatarSources();\n    this.overrideAvatarColors();\n  }\n\n  public fetchAvatar(avatarUrl: string): Observable<unknown> {\n    return this.http.get(avatarUrl);\n  }\n\n  public getRandomColor(avatarText: string): string {\n    if (!avatarText) {\n      return 'transparent';\n    }\n    const asciiCodeSum = this.calculateAsciiCode(avatarText);\n    return this.avatarColors[asciiCodeSum % this.avatarColors.length];\n  }\n\n  public compareSources(\n    sourceType1: AvatarSource,\n    sourceType2: AvatarSource\n  ): number {\n    return (\n      this.getSourcePriority(sourceType1) - this.getSourcePriority(sourceType2)\n    );\n  }\n\n  public isSource(source: string): boolean {\n    return this.avatarSources.includes(source as AvatarSource);\n  }\n\n  public isTextAvatar(sourceType: AvatarSource): boolean {\n    return [AvatarSource.INITIALS, AvatarSource.VALUE].includes(sourceType);\n  }\n\n  private buildSourceKey(source: Source): string {\n    return source.sourceType + '-' + source.sourceId;\n  }\n\n  public sourceHasFailedBefore(source: Source): boolean {\n    return this.failedSources.has(this.buildSourceKey(source));\n  }\n\n  public markSourceAsFailed(source: Source): void {\n    this.failedSources.set(this.buildSourceKey(source), source);\n  }\n\n  private overrideAvatarSources(): void {\n    this.avatarSources = this.avatarConfigService.getAvatarSources(\n      defaultSources\n    );\n  }\n\n  private overrideAvatarColors(): void {\n    this.avatarColors = this.avatarConfigService.getAvatarColors(defaultColors);\n  }\n\n  private calculateAsciiCode(value: string): number {\n    return value\n      .split('')\n      .map(letter => letter.charCodeAt(0))\n      .reduce((previous: number, current: number) => previous + current);\n  }\n\n  private getSourcePriority(sourceType: AvatarSource) {\n    return this.avatarSources.indexOf(sourceType);\n  }\n}\n","import {Source} from './source';\nimport {AvatarSource} from './avatar-source.enum';\n\n/**\n *  Custom source implementation (with no cache).\n *  return custom image as an avatar\n *\n */\nexport class CustomNoCache implements Source {\n  readonly sourceType: AvatarSource = AvatarSource.CUSTOM;\n\n  constructor(public sourceId: string) {}\n\n  public getAvatar(): string {\n    const urlSuffix = Math.random();\n    return `${this.sourceId}${this.sourceId.indexOf('?') > -1 ? '&' : '?'}_=${urlSuffix}`;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Source } from './source';\nimport { Facebook } from './facebook';\nimport { Twitter } from './twitter';\nimport { Google } from './google';\nimport { Instagram } from './instagram';\nimport { Custom } from './custom';\nimport { Initials } from './initials';\nimport { Gravatar } from './gravatar';\nimport { Skype } from './skype';\nimport { Value } from './value';\nimport { Vkontakte } from './vkontakte';\nimport { Github } from './github';\nimport { SourceCreator } from './source.creator';\nimport { AvatarSource } from './avatar-source.enum';\nimport { AvatarConfigService } from '../avatar-config.service';\nimport { defaultDisableSrcCache } from '../avatar.service';\nimport { CustomNoCache } from './custom-no-cache';\n\n/**\n * Factory class that implements factory method pattern.\n * Used to create Source implementation class based\n * on the source Type\n */\n@Injectable({providedIn: 'root'})\nexport class SourceFactory {\n  private sources: { [key: string]: SourceCreator } = {};\n\n  constructor(avatarConfigService: AvatarConfigService) {\n    const disableSrcCache = avatarConfigService.getDisableSrcCache(defaultDisableSrcCache);\n    this.sources[AvatarSource.FACEBOOK] = Facebook;\n    this.sources[AvatarSource.TWITTER] = Twitter;\n    this.sources[AvatarSource.GOOGLE] = Google;\n    this.sources[AvatarSource.INSTAGRAM] = Instagram;\n    this.sources[AvatarSource.SKYPE] = Skype;\n    this.sources[AvatarSource.GRAVATAR] = Gravatar;\n    this.sources[AvatarSource.CUSTOM] = disableSrcCache ? CustomNoCache : Custom;\n    this.sources[AvatarSource.INITIALS] = Initials;\n    this.sources[AvatarSource.VALUE] = Value;\n    this.sources[AvatarSource.VKONTAKTE] = Vkontakte;\n    this.sources[AvatarSource.GITHUB] = Github;\n  }\n\n  public newInstance(sourceType: AvatarSource, sourceValue: string): Source {\n    return new this.sources[sourceType](sourceValue);\n  }\n}\n","import {\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOnChanges,\n\tOnDestroy,\n\tOutput,\n\tSecurityContext,\n\tSimpleChanges\n} from '@angular/core';\n\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { map, takeWhile } from 'rxjs/operators';\nimport { AvatarService } from './avatar.service';\nimport { AsyncSource } from './sources/async-source';\nimport { AvatarSource } from './sources/avatar-source.enum';\nimport { Source } from './sources/source';\nimport { SourceFactory } from './sources/source.factory';\nimport { NgIf, NgStyle } from '@angular/common';\n\ntype Style = Partial<CSSStyleDeclaration>;\n\n/**\n * Universal avatar component that\n * generates avatar from different sources\n *\n * export\n * class AvatarComponent\n * implements {OnChanges}\n */\n\n@Component({\n\t// tslint:disable-next-line:component-selector\n\tselector: 'ng-hub-ui-avatar, hub-avatar',\n\tstyles: [\n\t\t`\n\t\t\t:host {\n\t\t\t\tborder-radius: 50%;\n\t\t\t}\n\t\t`\n\t],\n\tstandalone: true,\n\timports: [NgStyle, NgIf],\n\ttemplate: `\n\t\t<div\n\t\t\t(click)=\"onAvatarClicked()\"\n\t\t\tclass=\"avatar-container\"\n\t\t\t[ngStyle]=\"hostStyle\"\n\t\t>\n\t\t\t<img\n\t\t\t\t*ngIf=\"avatarSrc; else textAvatar\"\n\t\t\t\t[src]=\"avatarSrc\"\n\t\t\t\t[alt]=\"customAlt ? customAlt : avatarAlt\"\n\t\t\t\t[width]=\"size\"\n\t\t\t\t[height]=\"size\"\n\t\t\t\t[ngStyle]=\"avatarStyle\"\n\t\t\t\t[referrerPolicy]=\"referrerpolicy\"\n\t\t\t\t(error)=\"fetchAvatarSource()\"\n\t\t\t\tclass=\"avatar-content\"\n\t\t\t\tloading=\"lazy\"\n\t\t\t/>\n\t\t\t<ng-template #textAvatar>\n\t\t\t\t<div\n\t\t\t\t\t*ngIf=\"avatarText\"\n\t\t\t\t\tclass=\"avatar-content\"\n\t\t\t\t\t[ngStyle]=\"avatarStyle\"\n\t\t\t\t>\n\t\t\t\t\t{{ avatarText }}\n\t\t\t\t</div>\n\t\t\t</ng-template>\n\t\t</div>\n\t`\n})\nexport class AvatarComponent implements OnChanges, OnDestroy {\n\t@Input()\n\tpublic round = true;\n\t@Input()\n\tpublic size: string | number = 50;\n\t@Input()\n\tpublic textSizeRatio = 3;\n\t@Input()\n\tpublic bgColor: string | undefined;\n\t@Input()\n\tpublic fgColor = '#FFF';\n\t@Input()\n\tpublic borderColor: string | undefined;\n\t@Input()\n\tpublic style: Style = {};\n\t@Input()\n\tpublic cornerRadius: string | number = 0;\n\t@Input('facebookId')\n\tpublic facebook?: string | null;\n\t@Input('twitterId')\n\tpublic twitter?: string | null;\n\t@Input('googleId')\n\tpublic google?: string | null;\n\t@Input('instagramId')\n\tpublic instagram?: string | null;\n\t@Input('vkontakteId')\n\tpublic vkontakte?: string | null;\n\t@Input('skypeId')\n\tpublic skype?: string | null;\n\t@Input('gravatarId')\n\tpublic gravatar?: string | null;\n\t@Input('githubId')\n\tpublic github?: string | null;\n\t@Input('src')\n\tpublic custom?: string | SafeUrl | null;\n\t@Input('alt')\n\tpublic customAlt?: string | null;\n\t@Input('name')\n\tpublic initials?: string | null;\n\t@Input()\n\tpublic value?: string | null;\n\t@Input()\n\tpublic referrerpolicy?: string | null;\n\t@Input()\n\tpublic placeholder?: string;\n\t@Input()\n\tpublic initialsSize: string | number = 0;\n\n\t@Output()\n\tpublic clickOnAvatar: EventEmitter<Source> = new EventEmitter<Source>();\n\n\tpublic isAlive = true;\n\tpublic avatarSrc: SafeUrl | null = null;\n\tpublic avatarAlt: SafeUrl | null = null;\n\tpublic avatarText: string | null = null;\n\tpublic avatarStyle: Style = {};\n\tpublic hostStyle: Style = {};\n\n\tprivate currentIndex = -1;\n\tprivate sources: Source[] = [];\n\n\tconstructor(\n\t\tpublic sourceFactory: SourceFactory,\n\t\tprivate avatarService: AvatarService,\n\t\tprivate sanitizer: DomSanitizer\n\t) {}\n\n\tpublic onAvatarClicked(): void {\n\t\tthis.clickOnAvatar.emit(this.sources[this.currentIndex]);\n\t}\n\n\t/**\n\t * Detect inputs change\n\t *\n\t * param {{ [propKey: string]: SimpleChange }} changes\n\t *\n\t * memberof AvatarComponent\n\t */\n\tpublic ngOnChanges(changes: SimpleChanges): void {\n\t\tfor (const propName in changes) {\n\t\t\tif (this.avatarService.isSource(propName)) {\n\t\t\t\tconst sourceType: AvatarSource =\n\t\t\t\t\tAvatarSource[\n\t\t\t\t\t\tpropName.toUpperCase() as keyof typeof AvatarSource\n\t\t\t\t\t];\n\t\t\t\tconst currentValue = changes[propName].currentValue;\n\t\t\t\tif (currentValue && typeof currentValue === 'string') {\n\t\t\t\t\tthis.addSource(sourceType, currentValue);\n\t\t\t\t} else {\n\t\t\t\t\tconst sanitized = this.sanitizer.sanitize(\n\t\t\t\t\t\tSecurityContext.URL,\n\t\t\t\t\t\tcurrentValue\n\t\t\t\t\t);\n\t\t\t\t\tif (sanitized) {\n\t\t\t\t\t\tthis.addSource(sourceType, sanitized);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.removeSource(sourceType);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// reinitialize the avatar component when a source property value has changed\n\t\t// the fallback system must be re-invoked with the new values.\n\t\tthis.initializeAvatar();\n\t}\n\n\t/**\n\t * Fetch avatar source\n\t *\n\t * memberOf AvatarComponent\n\t */\n\tpublic fetchAvatarSource(): void {\n\t\tconst previousSource = this.sources[this.currentIndex];\n\t\tif (previousSource) {\n\t\t\tthis.avatarService.markSourceAsFailed(previousSource);\n\t\t}\n\n\t\tconst source = this.findNextSource();\n\t\tif (!source) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.avatarService.isTextAvatar(source.sourceType)) {\n\t\t\tthis.buildTextAvatar(source);\n\t\t\tthis.avatarSrc = null;\n\t\t} else {\n\t\t\tthis.buildImageAvatar(source);\n\t\t}\n\t}\n\n\tprivate findNextSource(): Source | null {\n\t\twhile (++this.currentIndex < this.sources.length) {\n\t\t\tconst source = this.sources[this.currentIndex];\n\t\t\tif (source && !this.avatarService.sourceHasFailedBefore(source)) {\n\t\t\t\treturn source;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.isAlive = false;\n\t}\n\n\t/**\n\t * Initialize the avatar component and its fallback system\n\t */\n\tprivate initializeAvatar(): void {\n\t\tthis.currentIndex = -1;\n\t\tif (this.sources.length > 0) {\n\t\t\tthis.sortAvatarSources();\n\t\t\tthis.fetchAvatarSource();\n\t\t\tthis.hostStyle = {\n\t\t\t\twidth: this.size + 'px',\n\t\t\t\theight: this.size + 'px'\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate sortAvatarSources(): void {\n\t\tthis.sources.sort((source1: Source, source2: Source) =>\n\t\t\tthis.avatarService.compareSources(\n\t\t\t\tsource1.sourceType,\n\t\t\t\tsource2.sourceType\n\t\t\t)\n\t\t);\n\t}\n\n\tprivate buildTextAvatar(avatarSource: Source): void {\n\t\tthis.avatarText = avatarSource.getAvatar(+this.initialsSize);\n\t\tthis.avatarStyle = this.getInitialsStyle(avatarSource.sourceId);\n\t}\n\n\tprivate buildImageAvatar(avatarSource: Source): void {\n\t\tthis.avatarStyle = this.getImageStyle();\n\t\tif (avatarSource instanceof AsyncSource) {\n\t\t\tthis.fetchAndProcessAsyncAvatar(avatarSource);\n\t\t} else {\n\t\t\tthis.avatarSrc = this.sanitizer.bypassSecurityTrustUrl(\n\t\t\t\tavatarSource.getAvatar(+this.size)\n\t\t\t);\n\t\t\tthis.avatarAlt = avatarSource.getAvatar(+this.size);\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * returns initials style\n\t *\n\t * memberOf AvatarComponent\n\t */\n\tprivate getInitialsStyle(avatarValue: string): Style {\n\t\treturn {\n\t\t\ttextAlign: 'center',\n\t\t\tborderRadius: this.round ? '100%' : this.cornerRadius + 'px',\n\t\t\tborder: this.borderColor ? '1px solid ' + this.borderColor : '',\n\t\t\ttextTransform: 'uppercase',\n\t\t\tcolor: this.fgColor,\n\t\t\tbackgroundColor: this.bgColor\n\t\t\t\t? this.bgColor\n\t\t\t\t: this.avatarService.getRandomColor(avatarValue),\n\t\t\tfont:\n\t\t\t\tMath.floor(+this.size / this.textSizeRatio) +\n\t\t\t\t'px Helvetica, Arial, sans-serif',\n\t\t\tlineHeight: this.size + 'px',\n\t\t\t...this.style\n\t\t};\n\t}\n\n\t/**\n\t *\n\t * returns image style\n\t *\n\t * memberOf AvatarComponent\n\t */\n\tprivate getImageStyle(): Style {\n\t\treturn {\n\t\t\tmaxWidth: '100%',\n\t\t\tborderRadius: this.round ? '50%' : this.cornerRadius + 'px',\n\t\t\tborder: this.borderColor ? '1px solid ' + this.borderColor : '',\n\t\t\twidth: this.size + 'px',\n\t\t\theight: this.size + 'px',\n\t\t\t...this.style\n\t\t};\n\t}\n\n\t/**\n\t * Fetch avatar image asynchronously.\n\t *\n\t * param {Source} source represents avatar source\n\t * memberof AvatarComponent\n\t */\n\tprivate fetchAndProcessAsyncAvatar(source: AsyncSource): void {\n\t\tif (this.avatarService.sourceHasFailedBefore(source)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.avatarService\n\t\t\t.fetchAvatar(source.getAvatar(+this.size))\n\t\t\t.pipe(\n\t\t\t\ttakeWhile(() => this.isAlive),\n\t\t\t\tmap((response) => source.processResponse(response, +this.size))\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (avatarSrc) => (this.avatarSrc = avatarSrc),\n\t\t\t\terror: () => {\n\t\t\t\t\tthis.fetchAvatarSource();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t/**\n\t * Add avatar source\n\t *\n\t * param sourceType avatar source type e.g facebook,twitter, etc.\n\t * param sourceValue  source value e.g facebookId value, etc.\n\t */\n\tprivate addSource(sourceType: AvatarSource, sourceValue: string): void {\n\t\tconst source = this.sources.find((s) => s.sourceType === sourceType);\n\t\tif (source) {\n\t\t\tsource.sourceId = sourceValue;\n\t\t} else {\n\t\t\tthis.sources.push(\n\t\t\t\tthis.sourceFactory.newInstance(sourceType, sourceValue)\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Remove avatar source\n\t *\n\t * param sourceType avatar source type e.g facebook,twitter, etc.\n\t */\n\tprivate removeSource(sourceType: AvatarSource): void {\n\t\tthis.sources = this.sources.filter(\n\t\t\t(source) => source.sourceType !== sourceType\n\t\t);\n\t}\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AvatarComponent } from './avatar.component';\nimport { SourceFactory } from './sources/source.factory';\nimport { AvatarService } from './avatar.service';\nimport { AvatarConfig } from './avatar-config';\nimport { AVATAR_CONFIG } from './avatar-config.token';\nimport { AvatarConfigService } from './avatar-config.service';\n\n@NgModule({\n\timports: [CommonModule, AvatarComponent],\n\tdeclarations: [],\n\tproviders: [SourceFactory, AvatarService, AvatarConfigService],\n\texports: []\n})\nexport class AvatarModule {\n\tstatic forRoot(\n\t\tavatarConfig?: AvatarConfig\n\t): ModuleWithProviders<AvatarModule> {\n\t\treturn {\n\t\t\tngModule: AvatarModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: AVATAR_CONFIG,\n\t\t\t\t\tuseValue: avatarConfig ? avatarConfig : {}\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n}\n","/*\n * Public API Surface of ng-hub-ui-avatar\n */\nexport * from './lib/avatar.module';\nexport * from './lib/avatar.component';\nexport * from './lib/avatar-config';\nexport * from './lib/avatar.service';\nexport * from './lib/sources/avatar-source.enum';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2.AvatarConfigService","i1.AvatarConfigService","i1.SourceFactory","i2.AvatarService"],"mappings":"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"}