UNPKG

ngx-avatars

Version:

A universal avatar component for Angular applications that fetches / generates avatar based on the information you have about the user.

1 lines 50.4 kB
{"version":3,"file":"ngx-avatars.mjs","sources":["../../../projects/ngx-avatars/src/lib/sources/async-source.ts","../../../projects/ngx-avatars/src/lib/sources/avatar-source.enum.ts","../../../projects/ngx-avatars/src/lib/sources/facebook.ts","../../../projects/ngx-avatars/src/lib/sources/twitter.ts","../../../projects/ngx-avatars/src/lib/sources/google.ts","../../../projects/ngx-avatars/src/lib/sources/instagram.ts","../../../projects/ngx-avatars/src/lib/sources/custom.ts","../../../projects/ngx-avatars/src/lib/sources/initials.ts","../../../projects/ngx-avatars/src/lib/sources/gravatar.ts","../../../projects/ngx-avatars/src/lib/sources/skype.ts","../../../projects/ngx-avatars/src/lib/sources/value.ts","../../../projects/ngx-avatars/src/lib/sources/vkontakte.ts","../../../projects/ngx-avatars/src/lib/sources/github.ts","../../../projects/ngx-avatars/src/lib/avatar-config.token.ts","../../../projects/ngx-avatars/src/lib/avatar-config.service.ts","../../../projects/ngx-avatars/src/lib/avatar.service.ts","../../../projects/ngx-avatars/src/lib/sources/custom-no-cache.ts","../../../projects/ngx-avatars/src/lib/sources/source.factory.ts","../../../projects/ngx-avatars/src/lib/avatar.component.ts","../../../projects/ngx-avatars/src/lib/avatar.module.ts","../../../projects/ngx-avatars/src/public_api.ts","../../../projects/ngx-avatars/src/ngx-avatars.ts"],"sourcesContent":["import { Source } from './source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n\r\n/**\r\n * Contract of all async sources.\r\n * Every async source must implement the processResponse method that extracts the avatar url from the data\r\n */\r\nexport abstract class AsyncSource implements Source {\r\n readonly abstract sourceType: AvatarSource;\r\n\r\n protected constructor(public sourceId: string) {}\r\n\r\n abstract getAvatar(size: number): string;\r\n abstract processResponse(data: unknown, size?: number): string | null;\r\n}\r\n","export enum AvatarSource {\r\n FACEBOOK = 'facebook',\r\n GOOGLE = 'google',\r\n TWITTER = 'twitter',\r\n INSTAGRAM = 'instagram',\r\n VKONTAKTE = 'vkontakte',\r\n SKYPE = 'skype',\r\n GRAVATAR = 'gravatar',\r\n GITHUB = 'github',\r\n CUSTOM = 'custom',\r\n INITIALS = 'initials',\r\n VALUE = 'value'\r\n}\r\n","import { Source } from './source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n/**\r\n * Facebook source implementation.\r\n * Fetch avatar source based on facebook identifier\r\n * and image size\r\n */\r\nexport class Facebook implements Source {\r\n readonly sourceType: AvatarSource = AvatarSource.FACEBOOK;\r\n\r\n constructor(public sourceId: string) {}\r\n\r\n public getAvatar(size: number): string {\r\n return (\r\n 'https://graph.facebook.com/' +\r\n `${this.sourceId}/picture?width=${size}&height=${size}`\r\n );\r\n }\r\n}\r\n","import { Source } from './source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n\r\n/**\r\n * Twitter source implementation.\r\n * Fetch avatar source based on google identifier\r\n * and image size\r\n */\r\nexport class Twitter implements Source {\r\n readonly sourceType: AvatarSource = AvatarSource.TWITTER;\r\n\r\n constructor(public sourceId: string) {}\r\n\r\n public getAvatar(size: number): string {\r\n const twitterImgSize = this.getImageSize(size);\r\n return `https://twitter.com/${\r\n this.sourceId\r\n }/profile_image?size=${twitterImgSize}`;\r\n }\r\n\r\n private getImageSize(size: number) {\r\n if (size <= 24) {\r\n return 'mini';\r\n }\r\n\r\n if (size <= 48) {\r\n return 'normal';\r\n }\r\n\r\n if (size <= 73) {\r\n return 'bigger';\r\n }\r\n\r\n return 'original';\r\n }\r\n}\r\n","import { AsyncSource } from './async-source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n\r\n/**\r\n * Google source implementation.\r\n * Fetch avatar source based on google identifier\r\n * and image size\r\n */\r\nexport class Google extends AsyncSource {\r\n readonly sourceType: AvatarSource = AvatarSource.GOOGLE;\r\n\r\n constructor(sourceId: string) {\r\n super(sourceId);\r\n }\r\n\r\n public getAvatar(): string {\r\n return `https://picasaweb.google.com/data/entry/api/user/${\r\n this.sourceId\r\n }?alt=json`;\r\n }\r\n\r\n /**\r\n * Extract google avatar from json data\r\n */\r\n public processResponse(data: { entry: { gphoto$thumbnail: { $t: string } } }, size?: number): string | null {\r\n const avatarSrc = data.entry.gphoto$thumbnail.$t;\r\n if (avatarSrc) {\r\n return avatarSrc.replace('s64', 's' + size);\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import { AsyncSource } from './async-source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n\r\n/**\r\n * Instagram source implementation.\r\n * Fetch avatar source based on instagram identifier\r\n */\r\nexport class Instagram extends AsyncSource {\r\n readonly sourceType: AvatarSource = AvatarSource.INSTAGRAM;\r\n\r\n constructor(sourceId: string) {\r\n super(sourceId);\r\n }\r\n\r\n public getAvatar(): string {\r\n return `https://www.instagram.com/${this.sourceId}/?__a=1`;\r\n }\r\n\r\n /**\r\n * extract instagram avatar from json data\r\n */\r\n public processResponse(data: { graphql: { user: { profile_pic_url_hd: string } } }, size?: number): string {\r\n return `${data.graphql.user.profile_pic_url_hd}&s=${size}`;\r\n }\r\n}\r\n","import { Source } from './source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n/**\r\n * Custom source implementation.\r\n * return custom image as an avatar\r\n *\r\n */\r\nexport class Custom implements Source {\r\n readonly sourceType: AvatarSource = AvatarSource.CUSTOM;\r\n\r\n constructor(public sourceId: string) {}\r\n\r\n public getAvatar(): string {\r\n return this.sourceId;\r\n }\r\n}\r\n","import { Source } from './source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n\r\n/**\r\n * Initials source implementation.\r\n * return the initials of the given value\r\n */\r\nexport class Initials implements Source {\r\n readonly sourceType: AvatarSource = AvatarSource.INITIALS;\r\n\r\n constructor(public sourceId: string) {}\r\n\r\n public getAvatar(size: number): string {\r\n return this.getInitials(this.sourceId, size);\r\n }\r\n\r\n /**\r\n * Returns the initial letters of a name in a string.\r\n */\r\n private getInitials(name: string, size: number): string {\r\n name = name.trim();\r\n\r\n if (!name) {\r\n return '';\r\n }\r\n\r\n const initials = name.split(' ');\r\n\r\n if (size && size < initials.length) {\r\n return this.constructInitials(initials.slice(0, size));\r\n } else {\r\n return this.constructInitials(initials);\r\n }\r\n }\r\n\r\n /**\r\n * Iterates a person's name string to get the initials of each word in uppercase.\r\n */\r\n private constructInitials(elements: string[]): string {\r\n if (!elements || !elements.length) {\r\n return '';\r\n }\r\n\r\n return elements\r\n .filter(element => element && element.length > 0)\r\n .map(element => element[0].toUpperCase())\r\n .join('');\r\n }\r\n}\r\n","import { Md5 } from 'ts-md5';\r\nimport { Source } from './source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n\r\nfunction isRetina(): boolean {\r\n if (typeof window !== 'undefined' && window !== null) {\r\n if (window.devicePixelRatio > 1.25) {\r\n return true;\r\n }\r\n\r\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)';\r\n if (window.matchMedia && window.matchMedia(mediaQuery).matches) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Gravatar source implementation.\r\n * Fetch avatar source based on gravatar email\r\n */\r\nexport class Gravatar implements Source {\r\n readonly sourceType: AvatarSource = AvatarSource.GRAVATAR;\r\n public sourceId: string;\r\n\r\n constructor(public value: string) {\r\n this.sourceId = value.match('^[a-f0-9]{32}$')\r\n ? value\r\n : Md5.hashStr(value).toString();\r\n }\r\n\r\n public getAvatar(size: number): string {\r\n const avatarSize = isRetina() ? size * 2 : size;\r\n return `https://secure.gravatar.com/avatar/${\r\n this.sourceId\r\n }?s=${avatarSize}&d=404`;\r\n }\r\n}\r\n","import { Source } from './source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n/**\r\n * Skype source implementation.\r\n * Fetch avatar source based on skype identifier\r\n */\r\nexport class Skype implements Source {\r\n readonly sourceType: AvatarSource = AvatarSource.SKYPE;\r\n\r\n constructor(public sourceId: string) {}\r\n\r\n public getAvatar(): string {\r\n return `https://api.skype.com/users/${this.sourceId}/profile/avatar`;\r\n }\r\n}\r\n","import { Source } from './source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n\r\n/**\r\n * Value source implementation.\r\n * return the value as avatar\r\n */\r\nexport class Value implements Source {\r\n readonly sourceType: AvatarSource = AvatarSource.VALUE;\r\n\r\n constructor(public sourceId: string) {}\r\n\r\n public getAvatar(): string {\r\n return this.sourceId;\r\n }\r\n}\r\n","import { AsyncSource } from './async-source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n\r\n/**\r\n * Vkontakte source implementation.\r\n * Fetch avatar source based on vkontakte identifier\r\n * and image size\r\n */\r\nconst apiVersion = 5.8;\r\n\r\nexport class Vkontakte extends AsyncSource {\r\n readonly sourceType: AvatarSource = AvatarSource.VKONTAKTE;\r\n\r\n constructor(sourceId: string) {\r\n super(sourceId);\r\n }\r\n\r\n public getAvatar(size: number): string {\r\n const imgSize = this.getImageSize(size);\r\n return `https://api.vk.com/method/users.get?user_id=${\r\n this.sourceId\r\n }&v=${apiVersion}&fields=${imgSize}`;\r\n }\r\n\r\n /**\r\n * extract vkontakte avatar from json data\r\n */\r\n public processResponse(data: {\r\n response: {\r\n [key: string]: string;\r\n }[]\r\n }): string | null {\r\n // avatar key property is the size used to generate avatar url\r\n // size property is always the last key in the response object\r\n const sizeProperty = Object.keys(data['response'][0]).pop();\r\n if (!sizeProperty) {\r\n return null;\r\n }\r\n // return avatar src\r\n return data['response'][0][sizeProperty] || null;\r\n }\r\n\r\n /**\r\n * Returns image size related to vkontakte API\r\n */\r\n private getImageSize(size: number): string {\r\n if (size <= 50) {\r\n return 'photo_50';\r\n }\r\n\r\n if (size <= 100) {\r\n return 'photo_100';\r\n }\r\n\r\n if (size <= 200) {\r\n return 'photo_200';\r\n }\r\n\r\n return 'photo_max';\r\n }\r\n}\r\n","import { AsyncSource } from './async-source';\r\nimport { AvatarSource } from './avatar-source.enum';\r\n\r\n/**\r\n * GitHub source implementation.\r\n * Fetch avatar source based on github identifier\r\n */\r\nexport class Github extends AsyncSource {\r\n readonly sourceType: AvatarSource = AvatarSource.GITHUB;\r\n\r\n constructor(sourceId: string) {\r\n super(sourceId);\r\n }\r\n\r\n public getAvatar(): string {\r\n return `https://api.github.com/users/${this.sourceId}`;\r\n }\r\n\r\n /**\r\n * extract github avatar from json data\r\n */\r\n public processResponse(data: { avatar_url: string }, size?: number): string {\r\n if (size) {\r\n return `${data.avatar_url}&s=${size}`;\r\n }\r\n return data.avatar_url;\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nimport { AvatarConfig } from './avatar-config';\r\n/**\r\n * Token used to inject the AvatarConfig object\r\n */\r\nexport const AVATAR_CONFIG = new InjectionToken<AvatarConfig>('avatar.config');\r\n","import { Injectable, inject } from '@angular/core';\r\n\r\nimport { AvatarSource } from './sources/avatar-source.enum';\r\nimport { AVATAR_CONFIG } from './avatar-config.token';\r\nimport { AvatarConfig } from './avatar-config';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class AvatarConfigService {\r\n userConfig = inject<AvatarConfig>(AVATAR_CONFIG, { optional: true })!;\r\n\r\n constructor() {}\r\n\r\n public getAvatarSources(defaultSources: AvatarSource[]): AvatarSource[] {\r\n if (\r\n this.userConfig &&\r\n this.userConfig.sourcePriorityOrder &&\r\n this.userConfig.sourcePriorityOrder.length\r\n ) {\r\n const uniqueSources = [...new Set(this.userConfig.sourcePriorityOrder)];\r\n const validSources = uniqueSources.filter(source =>\r\n defaultSources.includes(source)\r\n );\r\n return [\r\n ...validSources,\r\n ...defaultSources.filter(source => !validSources.includes(source))\r\n ];\r\n }\r\n return defaultSources;\r\n }\r\n\r\n public getAvatarColors(defaultColors: string[]): string[] {\r\n return (\r\n (this.userConfig &&\r\n this.userConfig.colors &&\r\n this.userConfig.colors.length &&\r\n this.userConfig.colors) ||\r\n defaultColors\r\n );\r\n }\r\n\r\n public getDisableSrcCache(defaultDisableSrcCache: boolean): boolean {\r\n if (this.userConfig == null || this.userConfig.disableSrcCache == null) {\r\n return defaultDisableSrcCache;\r\n } else {\r\n return this.userConfig.disableSrcCache;\r\n }\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AvatarConfigService } from './avatar-config.service';\r\nimport { AvatarSource } from './sources/avatar-source.enum';\r\nimport { Source } from './sources/source';\r\n\r\n/**\r\n * list of Supported avatar sources\r\n */\r\nexport const defaultSources = [\r\n AvatarSource.FACEBOOK,\r\n AvatarSource.GOOGLE,\r\n AvatarSource.TWITTER,\r\n AvatarSource.INSTAGRAM,\r\n AvatarSource.VKONTAKTE,\r\n AvatarSource.SKYPE,\r\n AvatarSource.GRAVATAR,\r\n AvatarSource.GITHUB,\r\n AvatarSource.CUSTOM,\r\n AvatarSource.INITIALS,\r\n AvatarSource.VALUE\r\n];\r\n\r\n/**\r\n * list of default colors\r\n */\r\nexport const defaultColors = [\r\n '#1abc9c',\r\n '#3498db',\r\n '#f1c40f',\r\n '#8e44ad',\r\n '#e74c3c',\r\n '#d35400',\r\n '#2c3e50',\r\n '#7f8c8d'\r\n];\r\n\r\n/**\r\n * Default disable custom source cache settings\r\n */\r\nexport const defaultDisableSrcCache = false;\r\n\r\n/**\r\n * Provides utilities methods related to Avatar component\r\n */\r\n@Injectable({providedIn: 'root'})\r\nexport class AvatarService {\r\n private http = inject(HttpClient);\r\n private avatarConfigService = inject(AvatarConfigService);\r\n\r\n public avatarSources: AvatarSource[] = defaultSources;\r\n public avatarColors: string[] = defaultColors;\r\n\r\n private readonly failedSources = new Map<string, Source>();\r\n\r\n constructor() {\r\n this.overrideAvatarSources();\r\n this.overrideAvatarColors();\r\n }\r\n\r\n public fetchAvatar(avatarUrl: string): Observable<unknown> {\r\n return this.http.get(avatarUrl);\r\n }\r\n\r\n public getRandomColor(avatarText: string): string {\r\n if (!avatarText) {\r\n return 'transparent';\r\n }\r\n const asciiCodeSum = this.calculateAsciiCode(avatarText);\r\n return this.avatarColors[asciiCodeSum % this.avatarColors.length];\r\n }\r\n\r\n public compareSources(\r\n sourceType1: AvatarSource,\r\n sourceType2: AvatarSource\r\n ): number {\r\n return (\r\n this.getSourcePriority(sourceType1) - this.getSourcePriority(sourceType2)\r\n );\r\n }\r\n\r\n public isSource(source: string): boolean {\r\n return this.avatarSources.includes(source as AvatarSource);\r\n }\r\n\r\n public isTextAvatar(sourceType: AvatarSource): boolean {\r\n return [AvatarSource.INITIALS, AvatarSource.VALUE].includes(sourceType);\r\n }\r\n\r\n private buildSourceKey(source: Source): string {\r\n return source.sourceType + '-' + source.sourceId;\r\n }\r\n\r\n public sourceHasFailedBefore(source: Source): boolean {\r\n return this.failedSources.has(this.buildSourceKey(source));\r\n }\r\n\r\n public markSourceAsFailed(source: Source): void {\r\n this.failedSources.set(this.buildSourceKey(source), source);\r\n }\r\n\r\n private overrideAvatarSources(): void {\r\n this.avatarSources = this.avatarConfigService.getAvatarSources(\r\n defaultSources\r\n );\r\n }\r\n\r\n private overrideAvatarColors(): void {\r\n this.avatarColors = this.avatarConfigService.getAvatarColors(defaultColors);\r\n }\r\n\r\n private calculateAsciiCode(value: string): number {\r\n return value\r\n .split('')\r\n .map(letter => letter.charCodeAt(0))\r\n .reduce((previous: number, current: number) => previous + current);\r\n }\r\n\r\n private getSourcePriority(sourceType: AvatarSource) {\r\n return this.avatarSources.indexOf(sourceType);\r\n }\r\n}\r\n","import {Source} from './source';\r\nimport {AvatarSource} from './avatar-source.enum';\r\n\r\n/**\r\n * Custom source implementation (with no cache).\r\n * return custom image as an avatar\r\n *\r\n */\r\nexport class CustomNoCache implements Source {\r\n readonly sourceType: AvatarSource = AvatarSource.CUSTOM;\r\n\r\n constructor(public sourceId: string) {}\r\n\r\n public getAvatar(): string {\r\n const urlSuffix = Math.random();\r\n return `${this.sourceId}${this.sourceId.indexOf('?') > -1 ? '&' : '?'}_=${urlSuffix}`;\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { Source } from './source';\r\nimport { Facebook } from './facebook';\r\nimport { Twitter } from './twitter';\r\nimport { Google } from './google';\r\nimport { Instagram } from './instagram';\r\nimport { Custom } from './custom';\r\nimport { Initials } from './initials';\r\nimport { Gravatar } from './gravatar';\r\nimport { Skype } from './skype';\r\nimport { Value } from './value';\r\nimport { Vkontakte } from './vkontakte';\r\nimport { Github } from './github';\r\nimport { SourceCreator } from './source.creator';\r\nimport { AvatarSource } from './avatar-source.enum';\r\nimport { AvatarConfigService } from '../avatar-config.service';\r\nimport { defaultDisableSrcCache } from '../avatar.service';\r\nimport { CustomNoCache } from './custom-no-cache';\r\n\r\n/**\r\n * Factory class that implements factory method pattern.\r\n * Used to create Source implementation class based\r\n * on the source Type\r\n */\r\n@Injectable({providedIn: 'root'})\r\nexport class SourceFactory {\r\n private sources: { [key: string]: SourceCreator } = {};\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\r\n\r\n constructor() {\n const avatarConfigService = inject(AvatarConfigService);\n\r\n const disableSrcCache = avatarConfigService.getDisableSrcCache(defaultDisableSrcCache);\r\n this.sources[AvatarSource.FACEBOOK] = Facebook;\r\n this.sources[AvatarSource.TWITTER] = Twitter;\r\n this.sources[AvatarSource.GOOGLE] = Google;\r\n this.sources[AvatarSource.INSTAGRAM] = Instagram;\r\n this.sources[AvatarSource.SKYPE] = Skype;\r\n this.sources[AvatarSource.GRAVATAR] = Gravatar;\r\n this.sources[AvatarSource.CUSTOM] = disableSrcCache ? CustomNoCache : Custom;\r\n this.sources[AvatarSource.INITIALS] = Initials;\r\n this.sources[AvatarSource.VALUE] = Value;\r\n this.sources[AvatarSource.VKONTAKTE] = Vkontakte;\r\n this.sources[AvatarSource.GITHUB] = Github;\r\n }\r\n\r\n public newInstance(sourceType: AvatarSource, sourceValue: string): Source {\r\n return new this.sources[sourceType](sourceValue);\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, OnDestroy, SecurityContext, inject } from '@angular/core';\r\n\r\nimport { Source } from './sources/source';\r\nimport { AsyncSource } from './sources/async-source';\r\nimport { SourceFactory } from './sources/source.factory';\r\nimport { AvatarService } from './avatar.service';\r\nimport { AvatarSource } from './sources/avatar-source.enum';\r\nimport { takeWhile, map } from 'rxjs/operators';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport {CommonModule, NgOptimizedImage} from \"@angular/common\";\r\n\r\ntype Style = Partial<CSSStyleDeclaration>;\r\n\r\n/**\r\n * Universal avatar component that\r\n * generates avatar from different sources\r\n *\r\n * export\r\n * class AvatarComponent\r\n * implements {OnChanges}\r\n */\r\n\r\n@Component({\r\n selector: 'ngx-avatars',\r\n styles: [\r\n `\r\n :host {\r\n border-radius: 50%;\r\n }\r\n `\r\n ],\r\n template: `\r\n <div\r\n (click)=\"onAvatarClicked()\"\r\n class=\"avatar-container\"\r\n [ngStyle]=\"hostStyle\"\r\n >\r\n @if (avatarSrc; as src) {\r\n <img\r\n [ngSrc]=\"src\"\r\n [alt]=\"customAlt ? customAlt : avatarAlt\"\r\n [width]=\"size\"\r\n [height]=\"size\"\r\n [ngStyle]=\"avatarStyle\"\r\n [attr.referrerPolicy]=\"referrerpolicy\"\r\n (error)=\"fetchAvatarSource()\"\r\n class=\"avatar-content\"\r\n loading=\"lazy\"\r\n />\r\n } @else {\r\n @if (avatarText) {\r\n <div class=\"avatar-content\" [ngStyle]=\"avatarStyle\">\r\n {{ avatarText }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n `,\r\n imports: [\r\n CommonModule,\r\n NgOptimizedImage\r\n ],\r\n standalone: true\r\n})\r\nexport class AvatarComponent implements OnChanges, OnDestroy {\r\n sourceFactory = inject(SourceFactory);\r\n private avatarService = inject(AvatarService);\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n @Input()\r\n public round = true;\r\n @Input()\r\n public size: string | number = 50;\r\n @Input()\r\n public textSizeRatio = 3;\r\n @Input()\r\n public bgColor: string | undefined;\r\n @Input()\r\n public fgColor = '#FFF';\r\n @Input()\r\n public borderColor: string | undefined;\r\n @Input()\r\n public style: Style = {};\r\n @Input()\r\n public cornerRadius: string | number = 0;\r\n @Input('facebookId')\r\n public facebook?: string | null;\r\n @Input('twitterId')\r\n public twitter?: string | null;\r\n @Input('googleId')\r\n public google?: string | null;\r\n @Input('instagramId')\r\n public instagram?: string | null;\r\n @Input('vkontakteId')\r\n public vkontakte?: string | null;\r\n @Input('skypeId')\r\n public skype?: string | null;\r\n @Input('gravatarId')\r\n public gravatar?: string | null;\r\n @Input('githubId')\r\n public github?: string | null;\r\n @Input('src')\r\n public custom?: string | SafeUrl | null;\r\n @Input('alt')\r\n public customAlt?: string | null;\r\n @Input('name')\r\n public initials?: string | null;\r\n @Input()\r\n public value?: string | null;\r\n @Input()\r\n public referrerpolicy?: string | null;\r\n @Input()\r\n public placeholder?: string;\r\n @Input()\r\n public initialsSize: string | number = 0;\r\n\r\n @Output()\r\n public clickOnAvatar: EventEmitter<Source> = new EventEmitter<Source>();\r\n\r\n public isAlive = true;\r\n public avatarSrc: SafeUrl | null = null;\r\n public avatarAlt: SafeUrl | null = null;\r\n public avatarText: string | null = null;\r\n public avatarStyle: Style = {};\r\n public hostStyle: Style = {};\r\n\r\n private currentIndex = -1;\r\n private sources: Source[] = [];\r\n\r\n constructor() {\r\n }\r\n\r\n public onAvatarClicked(): void {\r\n this.clickOnAvatar.emit(this.sources[this.currentIndex]);\r\n }\r\n\r\n /**\r\n * Detect inputs change\r\n *\r\n * param {{ [propKey: string]: SimpleChange }} changes\r\n *\r\n * memberof AvatarComponent\r\n */\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n for (const propName in changes) {\r\n if (this.avatarService.isSource(propName)) {\r\n const sourceType: AvatarSource = AvatarSource[propName.toUpperCase() as keyof typeof AvatarSource];\r\n const currentValue = changes[propName].currentValue;\r\n if (currentValue && typeof currentValue === 'string') {\r\n this.addSource(sourceType, currentValue);\r\n } else {\r\n const sanitized = this.sanitizer.sanitize(SecurityContext.URL, currentValue);\r\n if (sanitized) {\r\n this.addSource(sourceType, sanitized);\r\n } else {\r\n this.removeSource(sourceType);\r\n }\r\n }\r\n }\r\n }\r\n // reinitialize the avatar component when a source property value has changed\r\n // the fallback system must be re-invoked with the new values.\r\n this.initializeAvatar();\r\n }\r\n\r\n /**\r\n * Fetch avatar source\r\n *\r\n * memberOf AvatarComponent\r\n */\r\n public fetchAvatarSource(): void {\r\n const previousSource = this.sources[this.currentIndex];\r\n if (previousSource) {\r\n this.avatarService.markSourceAsFailed(previousSource);\r\n }\r\n\r\n const source = this.findNextSource();\r\n if (!source) {\r\n return;\r\n }\r\n\r\n if (this.avatarService.isTextAvatar(source.sourceType)) {\r\n this.buildTextAvatar(source);\r\n this.avatarSrc = null;\r\n } else {\r\n this.buildImageAvatar(source);\r\n }\r\n }\r\n\r\n private findNextSource(): Source | null {\r\n while (++this.currentIndex < this.sources.length) {\r\n const source = this.sources[this.currentIndex];\r\n if (source && !this.avatarService.sourceHasFailedBefore(source)) {\r\n return source;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.isAlive = false;\r\n }\r\n\r\n /**\r\n * Initialize the avatar component and its fallback system\r\n */\r\n private initializeAvatar(): void {\r\n this.currentIndex = -1;\r\n if (this.sources.length > 0) {\r\n this.sortAvatarSources();\r\n this.fetchAvatarSource();\r\n this.hostStyle = {\r\n width: this.size + 'px',\r\n height: this.size + 'px'\r\n };\r\n }\r\n }\r\n\r\n private sortAvatarSources(): void {\r\n this.sources.sort((source1: Source, source2: Source) =>\r\n this.avatarService.compareSources(source1.sourceType, source2.sourceType)\r\n );\r\n }\r\n\r\n private buildTextAvatar(avatarSource: Source): void {\r\n this.avatarText = avatarSource.getAvatar(+this.initialsSize);\r\n this.avatarStyle = this.getInitialsStyle(avatarSource.sourceId);\r\n }\r\n\r\n private buildImageAvatar(avatarSource: Source): void {\r\n this.avatarStyle = this.getImageStyle();\r\n if (avatarSource instanceof AsyncSource) {\r\n this.fetchAndProcessAsyncAvatar(avatarSource);\r\n } else {\r\n this.avatarSrc = this.sanitizer.bypassSecurityTrustUrl(avatarSource.getAvatar(+this.size));\r\n this.avatarAlt = avatarSource.getAvatar(+this.size);\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * returns initials style\r\n *\r\n * memberOf AvatarComponent\r\n */\r\n private getInitialsStyle(avatarValue: string): Style {\r\n return {\r\n textAlign: 'center',\r\n borderRadius: this.round ? '100%' : this.cornerRadius + 'px',\r\n border: this.borderColor ? '1px solid ' + this.borderColor : '',\r\n textTransform: 'uppercase',\r\n color: this.fgColor,\r\n backgroundColor: this.bgColor\r\n ? this.bgColor\r\n : this.avatarService.getRandomColor(avatarValue),\r\n font:\r\n Math.floor(+this.size / this.textSizeRatio) +\r\n 'px Helvetica, Arial, sans-serif',\r\n lineHeight: this.size + 'px',\r\n ...this.style\r\n };\r\n }\r\n\r\n /**\r\n *\r\n * returns image style\r\n *\r\n * memberOf AvatarComponent\r\n */\r\n private getImageStyle(): Style {\r\n return {\r\n maxWidth: '100%',\r\n borderRadius: this.round ? '50%' : this.cornerRadius + 'px',\r\n border: this.borderColor ? '1px solid ' + this.borderColor : '',\r\n width: this.size + 'px',\r\n height: this.size + 'px',\r\n ...this.style,\r\n };\r\n }\r\n\r\n /**\r\n * Fetch avatar image asynchronously.\r\n *\r\n * param {Source} source represents avatar source\r\n * memberof AvatarComponent\r\n */\r\n private fetchAndProcessAsyncAvatar(source: AsyncSource): void {\r\n if (this.avatarService.sourceHasFailedBefore(source)) {\r\n return;\r\n }\r\n\r\n this.avatarService\r\n .fetchAvatar(source.getAvatar(+this.size))\r\n .pipe(\r\n takeWhile(() => this.isAlive),\r\n map(response => source.processResponse(response, +this.size))\r\n )\r\n .subscribe({\r\n next: avatarSrc => (this.avatarSrc = avatarSrc),\r\n error: () => {\r\n this.fetchAvatarSource();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Add avatar source\r\n *\r\n * param sourceType avatar source type e.g facebook,twitter, etc.\r\n * param sourceValue source value e.g facebookId value, etc.\r\n */\r\n private addSource(sourceType: AvatarSource, sourceValue: string): void {\r\n const source = this.sources.find(s => s.sourceType === sourceType);\r\n if (source) {\r\n source.sourceId = sourceValue;\r\n } else {\r\n this.sources.push(\r\n this.sourceFactory.newInstance(sourceType, sourceValue),\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Remove avatar source\r\n *\r\n * param sourceType avatar source type e.g facebook,twitter, etc.\r\n */\r\n private removeSource(sourceType: AvatarSource): void {\r\n this.sources = this.sources.filter(source => source.sourceType !== sourceType);\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { AvatarComponent } from './avatar.component';\r\nimport { SourceFactory } from './sources/source.factory';\r\nimport { AvatarService } from './avatar.service';\r\nimport { AvatarConfig } from './avatar-config';\r\nimport { AVATAR_CONFIG } from './avatar-config.token';\r\nimport { AvatarConfigService } from './avatar-config.service';\r\n\r\n@NgModule({\r\n imports: [CommonModule, AvatarComponent],\r\n declarations: [],\r\n providers: [SourceFactory, AvatarService, AvatarConfigService],\r\n exports: [AvatarComponent]\r\n})\r\nexport class AvatarModule {\r\n static forRoot(avatarConfig?: AvatarConfig): ModuleWithProviders<AvatarModule> {\r\n return {\r\n ngModule: AvatarModule,\r\n providers: [\r\n { provide: AVATAR_CONFIG, useValue: avatarConfig ? avatarConfig : {} }\r\n ]\r\n };\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngx-avatars\r\n */\r\nexport * from './lib/avatar.module';\r\nexport * from './lib/avatar.component';\r\nexport * from './lib/avatar-config';\r\nexport * from './lib/avatar.service';\r\nexport * from './lib/sources/avatar-source.enum';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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