{"version":3,"file":"ng-simple-avatar.mjs","sources":["../../../projects/ng-simple-avatar/src/lib/ng-simple-avatar.tokens.ts","../../../projects/ng-simple-avatar/src/lib/ng-simple-avatar.component.ts","../../../projects/ng-simple-avatar/src/lib/ng-simple-avatar.component.html","../../../projects/ng-simple-avatar/src/lib/ng-simple-avatar.module.ts","../../../projects/ng-simple-avatar/src/public-api.ts","../../../projects/ng-simple-avatar/src/ng-simple-avatar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { NgSimpleAvatarConfig } from './ng-simple-avatar.types';\n\nexport const ngSimpleAvatarConfig = new InjectionToken<NgSimpleAvatarConfig>(\n  'ng-simple-avatar-config'\n);","import { ChangeDetectionStrategy, Component, Inject, Input, OnInit, Optional } from '@angular/core';\nimport { ngSimpleAvatarConfig } from './ng-simple-avatar.tokens';\nimport { NgSimpleAvatarConfig } from './ng-simple-avatar.types';\n\n@Component({\n  selector: 'ng-simple-avatar',\n  templateUrl: './ng-simple-avatar.component.html',\n  styleUrls: ['./ng-simple-avatar.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgSimpleAvatarComponent implements OnInit {\n  @Input() set size(value: number | string) {\n    this.config.size = parseInt(String(value), 10);\n\n    this.fontSize = this.config.size / 2.6;\n  }\n\n  @Input() set img(value: string) {\n    this.config.img = value;\n    this.update();\n  }\n\n  @Input() set fallbackImg(value: string) {\n    this.config.fallbackImg = value;\n    this.update();\n  }\n\n  @Input() set bgColor(value: string) {\n    this.bgColorSet = !!value;\n    this.config.bgColor = value;\n    this.update();\n  }\n\n  @Input() set borderColor(value: string) {\n    this.config.borderColor = value;\n  }\n\n  @Input() set name(value: string) {\n    this.nameSet = !!value;\n\n    this._name = value;\n\n    this.config.text = this.setTextFromName(value);\n\n    this.update();\n  }\n\n  @Input() set email(value: string) {\n    this._email = value;\n\n    if (this.nameSet) {\n      return;\n    }\n\n    this.config.text =  this.setTextFromEmail(value);\n\n    this.update();\n  }\n\n  @Input() set fallbackText(value: string) {\n    this.config.fallbackText = value;\n  }\n\n  config: NgSimpleAvatarConfig = {};\n  fgColor: '#000000' | '#FFFFFF';\n  fontSize = 14;\n\n  private nameSet = false;\n  private bgColorSet = false;\n  private _name: string;\n  private _email: string;\n\n  constructor(@Optional() @Inject(ngSimpleAvatarConfig) ngSimpleAvatarConfig: NgSimpleAvatarConfig) {\n    this.config = {\n      size: 40,\n      fallbackText: '?',\n      ...ngSimpleAvatarConfig\n    };\n  }\n\n  ngOnInit(): void {}\n\n  onError(): void {\n    this.img = '';\n\n    if (!this.config.text) {\n      this.config.text = this.config.fallbackText || '?';\n    }\n  }\n\n  private setTextFromEmail(email: string): string {\n    if (!email) {\n      return '';\n    }\n\n    const name: string = email.split('@')[0];\n\n    return this.setTextFromName(name, /\\./);\n  }\n\n  private setTextFromName(name: string, sep: RegExp = new RegExp(/ +/)): string {\n    if (!name) {\n      return '';\n    }\n\n    let initials: string = name.split(sep).splice(0, 2).filter((part) => !!part).map((part) => part[0].toUpperCase()).join('');\n\n    if (initials.length === 1) {\n      const capitals: string = name.split('').filter((letter) => !!letter.match(/^[A-Z]$/)).slice(0, 2).join('');\n\n      if (capitals.length === 2) {\n        initials = capitals;\n      }\n    }\n\n    return initials;\n  }\n\n  private generateColor(): string {\n    const text = ((this._name || '') + (this._email || '')) || this.config.text || this.config.fallbackText || '?';\n\n    let hash = 0;\n\n    for (let i = 0; i < text.length; i++) {\n      // tslint:disable-next-line:no-bitwise\n      hash = text.charCodeAt(i) + ((hash << 5) - hash);\n    }\n\n    let colour = '#';\n\n    for (let i = 0; i < 3; i++) {\n      // tslint:disable-next-line:no-bitwise\n      const val = (hash >> (i * 8)) & 0xFF;\n\n      colour += ('00' + val.toString(16)).substr(-2);\n    }\n\n    return colour;\n  }\n\n  private getFgColor(bgColor: string): '#000000' | '#FFFFFF' {\n    if (!bgColor) {\n      return '#FFFFFF';\n    }\n\n    if (bgColor.indexOf('#') === 0) {\n      bgColor = bgColor.slice(1);\n    }\n\n    // convert 3-digit hex to 6-digits.\n    if (bgColor.length === 3) {\n      bgColor = bgColor[0] + bgColor[0] + bgColor[1] + bgColor[1] + bgColor[2] + bgColor[2];\n    }\n\n    if (bgColor.length !== 6) {\n      throw new Error('Invalid hex color');\n    }\n\n    const r = parseInt(bgColor.slice(0, 2), 16);\n    const g = parseInt(bgColor.slice(2, 4), 16);\n    const b = parseInt(bgColor.slice(4, 6), 16);\n\n    // https://stackoverflow.com/a/3943023/112731\n    return (r * 0.299 + g * 0.587 + b * 0.114) > 186 ? '#000000' : '#FFFFFF';\n  }\n\n  private update(): void {\n    if (!this.bgColorSet) {\n      this.config.bgColor = this.generateColor();\n      this.fgColor = this.getFgColor(this.config.bgColor);\n    }\n  }\n}\n","<div class=\"circle\"\n  [class.with-border]=\"!!config.borderColor\"\n  [style.backgroundColor]=\"config.img || config.fallbackImg ? null : config.bgColor\"\n  [style.width.px]=\"config.size\"\n  [style.borderColor]=\"config.borderColor\">\n  <ng-container *ngIf=\"config.img || config.fallbackImg; else textTmpl\">\n    <img [attr.src]=\"config.img || config.fallbackImg\" (error)=\"onError()\"/>\n  </ng-container>\n\n  <ng-template #textTmpl>\n    <div *ngIf=\"config.text || config.fallbackText\" class=\"text\" [style.color]=\"fgColor\" [style.fontSize.px]=\"fontSize\">\n      {{ config.text || config.fallbackText }}\n    </div>\n  </ng-template>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { NgSimpleAvatarComponent } from './ng-simple-avatar.component';\nimport { ngSimpleAvatarConfig } from './ng-simple-avatar.tokens';\nimport { NgSimpleAvatarConfig } from './ng-simple-avatar.types';\n\n\n@NgModule({\n  declarations: [\n    NgSimpleAvatarComponent\n  ],\n  imports: [\n    CommonModule\n  ],\n  exports: [\n    NgSimpleAvatarComponent\n  ]\n})\nexport class NgSimpleAvatarModule {\n  static forRoot(config?: NgSimpleAvatarConfig): ModuleWithProviders<NgSimpleAvatarModule> {\n    return {\n      ngModule: NgSimpleAvatarModule,\n      providers: [\n        { provide: ngSimpleAvatarConfig, useValue: config || {} }\n      ]\n    };\n  }\n}\n","/*\n * Public API Surface of ng-simple-avatar\n */\n\nexport * from './lib/ng-simple-avatar.component';\nexport * from './lib/ng-simple-avatar.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}