{"version":3,"file":"ng2-fittext.mjs","sources":["../../../projects/lib/src/ng2-fittext.directive.ts","../../../projects/lib/src/ng2-fittext.module.ts","../../../projects/lib/src/public-api.ts","../../../projects/lib/src/ng2-fittext.ts"],"sourcesContent":["import {\n  AfterViewChecked,\n  AfterViewInit,\n  Directive,\n  ElementRef,\n  HostListener,\n  Input,\n  Output,\n  EventEmitter,\n  OnChanges,\n  OnInit,\n} from '@angular/core';\n\n@Directive({\n  selector: '[fittext]',\n})\nexport class Ng2FittextDirective\n  implements AfterViewInit, OnInit, OnChanges, AfterViewChecked {\n  @Input('fittext') fittext: any;\n  @Input('activateOnResize') activateOnResize: boolean = true;\n  @Input('container') container: HTMLElement | null = null;\n  @Input('activateOnInputEvents') activateOnInputEvents: boolean = false;\n  @Input('minFontSize') minFontSize = 7;\n  @Input('maxFontSize') maxFontSize = 1000;\n\n  /* Deprecated */\n  @Input('useMaxFontSize') useMaxFontSize = true;\n\n  @Input('modelToWatch') modelToWatch: any;\n\n  @Output() fontSizeChanged: EventEmitter<number> = new EventEmitter();\n\n  private fontSize = 1000;\n  private speed = 1.05;\n  private done = false;\n\n  constructor(public el: ElementRef<HTMLElement>) {}\n\n  setFontSize(fontSize: number): void {\n    if (this.isVisible() && !this.isDone()) {\n      if (fontSize < this.minFontSize) {\n        fontSize = this.minFontSize;\n      }\n      if (fontSize > this.maxFontSize) {\n        fontSize = this.maxFontSize;\n      }\n      this.fontSize = fontSize;\n      this.fontSizeChanged.emit(fontSize);\n      this.el.nativeElement.style.setProperty(\n        'font-size',\n        fontSize.toString() + 'px'\n      );\n    }\n  }\n\n  getFontSize(): number {\n    return this.fontSize;\n  }\n\n  calculateFontSize(fontSize: number, speed: number): number {\n    return Math.floor(fontSize / speed);\n  }\n\n  checkOverflow(parent: HTMLElement, children: HTMLElement): boolean {\n    return (\n      this.hasXAxisOverflow(parent, children) ||\n      this.hasYAxisOverflow(parent, children)\n    );\n  }\n\n  hasXAxisOverflow(parent: HTMLElement, children: HTMLElement): boolean {\n    return children.scrollWidth - parent.clientWidth > 0;\n  }\n\n  hasYAxisOverflow(parent: HTMLElement, children: HTMLElement): boolean {\n    return children.clientHeight - parent.clientHeight > 0;\n  }\n\n  @HostListener('window:resize', ['$event'])\n  onResize(event: Event) {\n    this.done = false;\n    if (this.activateOnResize && this.fittext) {\n      if (this.activateOnInputEvents && this.fittext) {\n        this.setFontSize(this.getStartFontSizeFromHeight());\n      } else {\n        this.setFontSize(this.getStartFontSizeFromWeight());\n      }\n\n      this.ngAfterViewInit();\n    }\n  }\n\n  @HostListener('input', ['$event'])\n  onInputEvents(event: Event) {\n    this.done = false;\n    if (this.activateOnInputEvents && this.fittext) {\n      this.setFontSize(this.getStartFontSizeFromHeight());\n      this.ngAfterViewInit();\n    }\n  }\n\n  ngOnInit() {\n    this.done = false;\n    this.el.nativeElement.style.setProperty('will-change', 'content');\n    this.ngAfterViewInit();\n  }\n\n  ngAfterViewInit() {\n    if (this.isVisible() && !this.isDone()) {\n      if (this.fittext) {\n        if (this.hasOverflow()) {\n          if (this.fontSize > this.minFontSize) {\n            // iterate only until font size is bigger than minimal value\n            this.setFontSize(this.calculateFontSize(this.fontSize, this.speed));\n            this.ngAfterViewInit();\n          }\n        } else {\n          this.done = true;\n        }\n      }\n    }\n  }\n\n  ngOnChanges(changes: any): void {\n    if (changes.modelToWatch) {\n      // change of model to watch - call ngAfterViewInit where is implemented logic to change size\n      setTimeout(() => {\n        this.done = false;\n        this.setFontSize(this.maxFontSize);\n        this.ngAfterViewInit();\n      });\n    }\n  }\n\n  ngAfterViewChecked() {\n    if (this.fontSize > this.minFontSize) {\n      this.setFontSize(this.getStartFontSizeFromHeight());\n      this.ngAfterViewInit();\n    }\n  }\n\n  getStartFontSizeFromHeight(): number {\n    return this.container\n      ? this.container.clientHeight\n      : this.el.nativeElement.parentElement!.clientHeight;\n  }\n\n  private getStartFontSizeFromWeight(): number {\n    return this.container\n      ? this.container.clientWidth\n      : this.el.nativeElement.parentElement!.clientWidth;\n  }\n\n  isDone(): boolean {\n    return this.done;\n  }\n\n  isVisible(): boolean {\n    return this.getStartFontSizeFromHeight() > 0;\n  }\n\n  hasOverflow(): boolean {\n    return this.container\n      ? this.checkOverflow(this.container, this.el.nativeElement)\n      : this.checkOverflow(\n          this.el.nativeElement.parentElement!,\n          this.el.nativeElement\n        );\n  }\n}\n","import { Ng2FittextDirective } from './ng2-fittext.directive';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nexport { Ng2FittextDirective } from './ng2-fittext.directive';\n\n@NgModule({\n  declarations: [Ng2FittextDirective],\n  exports: [Ng2FittextDirective],\n  imports: [CommonModule],\n})\nexport class Ng2FittextModule {\n  static forRoot() {\n    return {\n      ngModule: Ng2FittextModule,\n      providers: [],\n    };\n  }\n}","/*\n * Public API Surface of lib\n */\n\nexport * from './ng2-fittext.directive';\nexport * from './ng2-fittext.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}