{ "version": 3, "sources": ["libs/galaxy/avatar/src/avatar.component.ts", "libs/galaxy/avatar/src/avatar.component.html", "libs/galaxy/avatar/src/avatar.module.ts"], "sourcesContent": ["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n inject,\n} from '@angular/core';\n\nexport const defaultBackgroundColor = '#BDBDBD';\n\n@Component({\n selector: 'glxy-avatar',\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AvatarComponent implements OnInit, OnChanges {\n @HostBinding('class') class = 'glxy-avatar';\n\n @Input() src?: string;\n @Input() svgIcon?: string;\n @Input() name?: string;\n @Input() width = 40;\n @Input() shape?: 'circle' | 'square' = 'circle';\n @Input() icon?: string;\n @Input() abbreviation?: string;\n @Input() backgroundColor?: string;\n @Input() gravatarEmailMD5?: string;\n\n @HostBinding('style.color')\n @Input()\n textColor?: string;\n\n @HostBinding('style.width')\n @HostBinding('style.height')\n get getWidth(): string {\n return this.width + `px`;\n }\n\n @HostBinding('class.shape-circle')\n get isShapeCircle(): boolean {\n return this.shape === 'circle';\n }\n\n @HostBinding('class.shape-square')\n get isShapesquare(): boolean {\n return this.shape === 'square';\n }\n\n changeDetector = inject(ChangeDetectorRef);\n\n imageExists = true;\n computedBackgroundColor?: string;\n computerAbbreviation?: string;\n\n ngOnInit(): void {\n this.getAbbreviationForName();\n this.generateBackgroundColorFromName();\n this.checkIfImageUrlExists();\n }\n\n ngOnChanges(): void {\n // rereun init scripts if inputs changes\n this.ngOnInit();\n }\n\n getGravatarUrl(): void {\n if (this.gravatarEmailMD5) {\n this.src = `https://www.gravatar.com/avatar/${this.gravatarEmailMD5}?d=404`;\n }\n }\n\n getAbbreviationForName(): void {\n if (this.abbreviation) {\n this.computerAbbreviation = this.abbreviation;\n } else if (this.name) {\n const names = this.name.trim().split(/\\s+/);\n this.computerAbbreviation = names.length > 1 ? names[0][0] + names[1][0] : names[0][0];\n } else {\n this.computerAbbreviation = 'UNKNOWN'; // for unknown use mat-icon\n }\n }\n\n checkIfImageUrlExists(): void {\n if (!this.src) {\n this.imageExists = false;\n } else {\n const image = new Image();\n image.src = this.src;\n image.onload = () => {\n this.imageExists = true;\n this.changeDetector.markForCheck();\n };\n image.onerror = () => {\n this.imageExists = false;\n this.changeDetector.markForCheck();\n };\n }\n }\n\n generateBackgroundColorFromName(): void {\n if (this.backgroundColor) {\n this.computedBackgroundColor = this.backgroundColor;\n } else if (!this.name) {\n this.computedBackgroundColor = defaultBackgroundColor;\n } else {\n let nameSum = 0;\n const COLOR_CODES = [\n '#EF5350',\n '#42A5F5',\n '#66BB6A',\n '#FFA726',\n '#AB47BC',\n '#FFCA28',\n '#EC407A',\n '#26C6DA',\n '#FF7B57',\n ];\n for (let i = 0; i < this.name.length; i++) {\n nameSum += this.name[i].charCodeAt(0);\n }\n const index = nameSum % COLOR_CODES.length;\n this.computedBackgroundColor = COLOR_CODES[index];\n }\n }\n}\n", "