ngx-avatar-2
Version:
A universal avatar component for Angular applications that fetches / generates avatar based on the information you have about the user.
1 lines • 47.3 kB
Source Map (JSON)
{"version":3,"file":"ngx-avatar-2.mjs","sources":["../../../projects/ngx-avatar-2/src/lib/sources/async-source.ts","../../../projects/ngx-avatar-2/src/lib/sources/avatar-source.enum.ts","../../../projects/ngx-avatar-2/src/lib/sources/facebook.ts","../../../projects/ngx-avatar-2/src/lib/sources/twitter.ts","../../../projects/ngx-avatar-2/src/lib/sources/google.ts","../../../projects/ngx-avatar-2/src/lib/sources/instagram.ts","../../../projects/ngx-avatar-2/src/lib/sources/custom.ts","../../../projects/ngx-avatar-2/src/lib/sources/initials.ts","../../../projects/ngx-avatar-2/src/lib/sources/gravatar.ts","../../../projects/ngx-avatar-2/src/lib/sources/skype.ts","../../../projects/ngx-avatar-2/src/lib/sources/value.ts","../../../projects/ngx-avatar-2/src/lib/sources/vkontakte.ts","../../../projects/ngx-avatar-2/src/lib/sources/github.ts","../../../projects/ngx-avatar-2/src/lib/sources/source.factory.ts","../../../projects/ngx-avatar-2/src/lib/avatar-config.token.ts","../../../projects/ngx-avatar-2/src/lib/avatar-config.service.ts","../../../projects/ngx-avatar-2/src/lib/avatar.service.ts","../../../projects/ngx-avatar-2/src/lib/avatar.component.ts","../../../projects/ngx-avatar-2/src/lib/avatar.module.ts","../../../projects/ngx-avatar-2/src/public_api.ts","../../../projects/ngx-avatar-2/src/ngx-avatar-2.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', /** @debug API version changed */\n GOOGLE = 'google', /** @debug API version changed */\n TWITTER = 'twitter', /** @debug API version changed */\n INSTAGRAM = 'instagram', /** @debug API version changed */\n VKONTAKTE = 'vkontakte', /** @debug API version changed */\n SKYPE = 'skype', /** @debug API version changed */\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 impelementation.\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 { Md5 } from 'ts-md5';\nimport { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\nfunction isRetina(): boolean {\n if (typeof window !== 'undefined' && window !== null) {\n if (window.devicePixelRatio > 1.25) {\n return true;\n }\n\n const mediaQuery = '(-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 if (window.matchMedia && window.matchMedia(mediaQuery).matches) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Gravatar source implementation.\n * Fetch avatar source based on gravatar email\n */\nexport class Gravatar implements Source {\n readonly sourceType: AvatarSource = AvatarSource.GRAVATAR;\n public sourceId: string;\n\n constructor(public value: string) {\n this.sourceId = value.match('^[a-f0-9]{32}$')\n ? value\n : Md5.hashStr(value).toString();\n }\n\n public getAvatar(size: number): string {\n const avatarSize = isRetina() ? size * 2 : size;\n return `https://secure.gravatar.com/avatar/${\n this.sourceId\n }?s=${avatarSize}&d=404`;\n }\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.154;\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 { 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';\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()\nexport class SourceFactory {\n private sources: { [key: string]: SourceCreator } = {};\n\n constructor() {\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] = 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 { 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()\nexport class AvatarConfigService {\n constructor(\n @Optional()\n @Inject(AVATAR_CONFIG)\n public userConfig: AvatarConfig\n ) {}\n\n public getAvatarSources(defaultSources: AvatarSource[]): AvatarSource[] {\n if (\n this.userConfig &&\n this.userConfig.sourcePriorityOrder &&\n this.userConfig.sourcePriorityOrder.length\n ) {\n const uniqueSources = [...new Set(this.userConfig.sourcePriorityOrder)];\n const validSources = uniqueSources.filter(source =>\n defaultSources.includes(source)\n );\n return [\n ...validSources,\n ...defaultSources.filter(source => !validSources.includes(source))\n ];\n }\n return defaultSources;\n }\n\n public getAvatarColors(defaultColors: string[]): string[] {\n return (\n (this.userConfig &&\n this.userConfig.colors &&\n this.userConfig.colors.length &&\n this.userConfig.colors) ||\n defaultColors\n );\n }\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 * Provides utilities methods related to Avatar component\n */\n@Injectable()\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 /** @fixme */\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, current) => previous + current);\n }\n\n private getSourcePriority(sourceType: AvatarSource) {\n return this.avatarSources.indexOf(sourceType);\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n OnDestroy\n} from '@angular/core';\n\nimport { Source } from './sources/source';\nimport { AsyncSource } from './sources/async-source';\nimport { SourceFactory } from './sources/source.factory';\nimport { AvatarService } from './avatar.service';\nimport { AvatarSource } from './sources/avatar-source.enum';\nimport { takeWhile, map } from 'rxjs/operators';\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 // tslint:disable-next-line:component-selector\n selector: 'ngx-avatar',\n styles: [\n `\n :host {\n border-radius: 50%;\n }\n `\n ],\n template: `\n <div\n (click)=\"onAvatarClicked()\"\n class=\"avatar-container\"\n [ngStyle]=\"hostStyle\"\n >\n <img\n *ngIf=\"avatarSrc; else textAvatar\"\n [src]=\"avatarSrc\"\n [width]=\"size\"\n [height]=\"size\"\n [ngStyle]=\"avatarStyle\"\n (error)=\"fetchAvatarSource()\"\n class=\"avatar-content\"\n loading=\"lazy\"\n />\n <ng-template #textAvatar>\n <div *ngIf=\"avatarText\" class=\"avatar-content\" [ngStyle]=\"avatarStyle\">\n {{ avatarText }}\n </div>\n </ng-template>\n </div>\n `\n})\nexport class AvatarComponent implements OnChanges, OnDestroy {\n @Input()\n public round = true;\n @Input()\n public size: string | number = 50;\n @Input()\n public textSizeRatio = 3;\n @Input()\n public bgColor: string | undefined;\n @Input()\n public fgColor = '#FFF';\n @Input()\n public borderColor: string | undefined;\n @Input()\n public style: Style = {};\n @Input()\n public cornerRadius: string | number = 0;\n @Input('facebookId')\n public facebook?: string | null;\n @Input('twitterId')\n public twitter?: string | null;\n @Input('googleId')\n public google?: string | null;\n @Input('instagramId')\n public instagram?: string | null;\n @Input('vkontakteId')\n public vkontakte?: string | null;\n @Input('skypeId')\n public skype?: string | null;\n @Input('gravatarId')\n public gravatar?: string | null;\n @Input('githubId')\n public github?: string | null;\n @Input('src')\n public custom?: string | null;\n @Input('name')\n public initials?: string | null;\n @Input()\n public value?: string | null;\n @Input()\n public placeholder?: string;\n @Input()\n public initialsSize: string | number = 0;\n\n @Output()\n public clickOnAvatar: EventEmitter<Source> = new EventEmitter<Source>();\n\n public isAlive = true;\n public avatarSrc: string | null = null;\n public avatarText: string | null = null;\n public avatarStyle: Style = {};\n public hostStyle: Style = {};\n\n private currentIndex = -1;\n private sources: Source[] = [];\n\n constructor(\n public sourceFactory: SourceFactory,\n private avatarService: AvatarService\n ) {}\n\n public onAvatarClicked(): void {\n this.clickOnAvatar.emit(this.sources[this.currentIndex]);\n }\n\n /**\n * Detect inputs change\n *\n * param {{ [propKey: string]: SimpleChange }} changes\n *\n * memberof AvatarComponent\n */\n public ngOnChanges(changes: SimpleChanges): void {\n for (const propName in changes) {\n if (this.avatarService.isSource(propName)) {\n const sourceType: AvatarSource = AvatarSource[propName.toUpperCase() as keyof typeof AvatarSource] ;\n const currentValue = changes[propName].currentValue;\n if (currentValue && typeof currentValue === 'string') {\n this.addSource(sourceType, currentValue);\n } else {\n this.removeSource(sourceType);\n }\n }\n }\n // reinitialize the avatar component when a source property value has changed\n // the fallback system must be re-invoked with the new values.\n this.initializeAvatar();\n }\n\n /**\n * Fetch avatar source\n *\n * memberOf AvatarComponent\n */\n public fetchAvatarSource(): void {\n const previousSource = this.sources[this.currentIndex];\n if (previousSource) {\n this.avatarService.markSourceAsFailed(previousSource);\n }\n\n const source = this.findNextSource();\n if (!source) {\n return;\n }\n\n if (this.avatarService.isTextAvatar(source.sourceType)) {\n this.buildTextAvatar(source);\n this.avatarSrc = null;\n } else {\n this.buildImageAvatar(source);\n }\n }\n\n private findNextSource(): Source | null {\n while (++this.currentIndex < this.sources.length) {\n const source = this.sources[this.currentIndex];\n if (source && !this.avatarService.sourceHasFailedBefore(source)) {\n return source;\n }\n }\n\n return null;\n }\n\n public ngOnDestroy(): void {\n this.isAlive = false;\n }\n\n /**\n * Initialize the avatar component and its fallback system\n */\n private initializeAvatar(): void {\n this.currentIndex = -1;\n if (this.sources.length > 0) {\n this.sortAvatarSources();\n this.fetchAvatarSource();\n this.hostStyle = {\n width: this.size + 'px',\n height: this.size + 'px'\n };\n }\n }\n\n private sortAvatarSources(): void {\n this.sources.sort((source1, source2) =>\n this.avatarService.compareSources(source1.sourceType, source2.sourceType)\n );\n }\n\n private buildTextAvatar(avatarSource: Source): void {\n this.avatarText = avatarSource.getAvatar(+this.initialsSize);\n this.avatarStyle = this.getInitialsStyle(avatarSource.sourceId);\n }\n\n private buildImageAvatar(avatarSource: Source): void {\n this.avatarStyle = this.getImageStyle();\n if (avatarSource instanceof AsyncSource) {\n this.fetchAndProcessAsyncAvatar(avatarSource);\n } else {\n this.avatarSrc = avatarSource.getAvatar(+this.size);\n }\n }\n\n /**\n *\n * returns initials style\n *\n * memberOf AvatarComponent\n */\n private getInitialsStyle(avatarValue: string): Style {\n return {\n textAlign: 'center',\n borderRadius: this.round ? '100%' : this.cornerRadius + 'px',\n border: this.borderColor ? '1px solid ' + this.borderColor : '',\n textTransform: 'uppercase',\n color: this.fgColor,\n backgroundColor: this.bgColor\n ? this.bgColor\n : this.avatarService.getRandomColor(avatarValue),\n font:\n Math.floor(+this.size / this.textSizeRatio) +\n 'px Helvetica, Arial, sans-serif',\n lineHeight: this.size + 'px',\n ...this.style\n };\n }\n\n /**\n *\n * returns image style\n *\n * memberOf AvatarComponent\n */\n private getImageStyle(): Style {\n return {\n maxWidth: '100%',\n borderRadius: this.round ? '50%' : this.cornerRadius + 'px',\n border: this.borderColor ? '1px solid ' + this.borderColor : '',\n width: this.size + 'px',\n height: this.size + 'px',\n ...this.style,\n };\n }\n /**\n * Fetch avatar image asynchronously.\n *\n * param {Source} source represents avatar source\n * memberof AvatarComponent\n */\n private fetchAndProcessAsyncAvatar(source: AsyncSource): void {\n if (this.avatarService.sourceHasFailedBefore(source)) {\n return;\n }\n\n this.avatarService\n .fetchAvatar(source.getAvatar(+this.size))\n .pipe(\n takeWhile(() => this.isAlive),\n map(response => source.processResponse(response, +this.size)),\n )\n .subscribe({\n next: avatarSrc => (this.avatarSrc = avatarSrc),\n error: err => {\n this.fetchAvatarSource();\n },\n }\n );\n }\n\n /**\n * Add avatar source\n *\n * param sourceType avatar source type e.g facebook,twitter, etc.\n * param sourceValue source value e.g facebookId value, etc.\n */\n private addSource(sourceType: AvatarSource, sourceValue: string): void {\n const source = this.sources.find(s => s.sourceType === sourceType);\n if (source) {\n source.sourceId = sourceValue;\n } else {\n this.sources.push(\n this.sourceFactory.newInstance(sourceType, sourceValue),\n );\n }\n }\n\n /**\n * Remove avatar source\n *\n * param sourceType avatar source type e.g facebook,twitter, etc.\n */\n private removeSource(sourceType: AvatarSource): void {\n this.sources = this.sources.filter(source => source.sourceType !== sourceType);\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\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 imports: [CommonModule],\n declarations: [AvatarComponent],\n providers: [SourceFactory, AvatarService, AvatarConfigService],\n exports: [AvatarComponent]\n})\nexport class AvatarModule {\n static forRoot(avatarConfig?: AvatarConfig): ModuleWithProviders<AvatarModule> {\n return {\n ngModule: AvatarModule,\n providers: [\n { provide: AVATAR_CONFIG, useValue: avatarConfig ? avatarConfig : {} }\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-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.SourceFactory","i2.AvatarService"],"mappings":"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"}