{"version":3,"file":"ng-count-up-js.mjs","sources":["../../../projects/ng-count-up-js/src/lib/count-up.ts","../../../projects/ng-count-up-js/src/lib/ng-count-up-js.directive.ts","../../../projects/ng-count-up-js/src/lib/ng-count-up-js.module.ts","../../../projects/ng-count-up-js/src/public-api.ts","../../../projects/ng-count-up-js/src/ng-count-up-js.ts"],"sourcesContent":["// https://github.com/inorganik/countUp.js/blob/master/src/countUp.ts\r\nexport interface CountUpOptions { // (default)\r\n  startVal: number; // number to start at (0)\r\n  decimalPlaces: number; // number of decimal places (0)\r\n  duration: number; // animation duration in seconds (2)\r\n  useGrouping: boolean; // example: 1,000 vs 1000 (true)\r\n  useEasing: boolean; // ease animation (true)\r\n  smartEasingThreshold: number; // smooth easing for large numbers above this if useEasing (999)\r\n  smartEasingAmount: number; // amount to be eased for numbers above threshold (333)\r\n  separator: string; // grouping separator (,)\r\n  decimal: string; // decimal (.)\r\n  // easingFn: easing function for animation (easeOutExpo)\r\n  easingFn?: (t: number, b: number, c: number, d: number) => number;\r\n  formattingFn?: (n: number) => string; // this function formats result\r\n  prefix?: string; // text prepended to result\r\n  suffix?: string; // text appended to result\r\n  numerals: string[]; // numeral glyph substitution\r\n}\r\n\r\n// playground: stackblitz.com/edit/countup-typescript\r\nexport class CountUp {\r\n\t// public version = '2.0.0';\r\n\tprivate defaults: CountUpOptions = {\r\n\t\tstartVal: 0,\r\n\t\tdecimalPlaces: 0,\r\n\t\tduration: 2,\r\n\t\tuseEasing: true,\r\n\t\tuseGrouping: true,\r\n\t\tsmartEasingThreshold: 999,\r\n\t\tsmartEasingAmount: 333,\r\n\t\tseparator: ',',\r\n\t\tdecimal: '.',\r\n\t\tprefix: '',\r\n\t\tsuffix: '',\r\n\t\tnumerals: []\r\n\t};\r\n\r\n\tprivate el: HTMLElement | HTMLInputElement | null;\r\n\tprivate rAF: any;\r\n\tprivate startTime!: number | null;\r\n\tprivate decimalMult: number;\r\n\tprivate remaining!: number;\r\n\tprivate finalEndVal: number | null = null; // for smart easing\r\n\tprivate useEasing: boolean = true;\r\n\tprivate countDown = false;\r\n\tpublic formattingFn: (num: number) => string;\r\n\tpublic easingFn: (t: number, b: number, c: number, d: number) => number;\r\n\tpublic callback?: (args?: any) => any;\r\n\tpublic error = '';\r\n\tpublic startVal: number | null = 0;\r\n\tpublic duration!: number;\r\n\tpublic paused = true;\r\n\tpublic frameVal: number | null;\r\n\r\n\tconstructor(\r\n\t\tprivate target: string | HTMLElement | HTMLInputElement,\r\n\t\tprivate endVal: number | null,\r\n\t\tprivate options: CountUpOptions\r\n\t) {\r\n\t\tthis.options = {\r\n\t\t\t...this.defaults,\r\n\t\t\t...options\r\n\t\t};\r\n\r\n\r\n\t\tthis.formattingFn = (this.options.formattingFn) ? this.options.formattingFn : this.formatNumber;\r\n\t\tthis.easingFn = (this.options.easingFn) ? this.options.easingFn : this.easeOutExpo;\r\n\r\n\t\tthis.startVal = this.validateValue(this.options.startVal);\r\n\t\t// this.startVal = this.options.startVal ? this.validateValue(this.options.startVal) : this.endVal;\r\n\t\tthis.frameVal = this.startVal;\r\n\t\tthis.endVal = this.validateValue(endVal);\r\n\t\tthis.options.decimalPlaces = Math.max(0 || this.options.decimalPlaces);\r\n\t\tthis.decimalMult = Math.pow(10, this.options.decimalPlaces);\r\n\t\tthis.resetDuration();\r\n\t\tthis.options.separator = String(this.options.separator);\r\n\t\tthis.useEasing = this.options.useEasing;\r\n\t\tif (this.options.separator === '') {\r\n\t\t\tthis.options.useGrouping = false;\r\n\t\t}\r\n\t\tthis.el = (typeof this.target === 'string') ? document.getElementById(this.target) : this.target;\r\n\t\tif (this.el) {\r\n\t\t\tthis.printValue(this.startVal);\r\n\t\t} else {\r\n\t\t\tthis.error = '[CountUp] target is null or undefined';\r\n\t\t}\r\n\t}\r\n\r\n\t// determines where easing starts and whether to count down or up\r\n\tprivate determineDirectionAndSmartEasing(): void {\r\n\t\t\r\n\t\tconst end = (this.finalEndVal !== null) ? this.finalEndVal : this.endVal;\r\n\t\tif (this.startVal !== null && end !== null) {\r\n\t\t\tthis.countDown = (this.startVal > end);\r\n\t\t\tconst animateAmount = end - this.startVal;\r\n\t\t\tif (Math.abs(animateAmount) > this.options.smartEasingThreshold) {\r\n\t\t\t\tthis.finalEndVal = end;\r\n\t\t\t\tconst up = (this.countDown) ? 1 : -1;\r\n\t\t\t\tthis.endVal = end + (up * this.options.smartEasingAmount);\r\n\t\t\t\tthis.duration = this.duration / 2;\r\n\t\t\t} else {\r\n\t\t\t\tthis.endVal = end;\r\n\t\t\t\tthis.finalEndVal = null;\r\n\t\t\t}\r\n\t\t\tif (this.finalEndVal !== null) {\r\n\t\t\t\tthis.useEasing = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.useEasing = this.options?.useEasing;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t\t// start animation\r\n\tpublic start(callback?: (args?: any) => any): void {\r\n\r\n\t\tif (this.error) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.callback = callback;\r\n\t\tif (this.duration > 0) {\r\n\t\t\tthis.determineDirectionAndSmartEasing();\r\n\t\t\tthis.paused = false;\r\n\t\t\tthis.rAF = requestAnimationFrame(this.count);\r\n\t\t} else {\r\n\t\t\tthis.printValue(this.endVal);\r\n\t\t}\r\n\t}\r\n\r\n\t\t// pause/resume animation\r\n\tpublic pauseResume(): void {\r\n\t\tif (!this.paused) {\r\n\t\t\tcancelAnimationFrame(this.rAF);\r\n\t\t} else {\r\n\t\t\tthis.startTime = null;\r\n\t\t\tthis.duration = this.remaining;\r\n\t\t\tthis.startVal = this.frameVal;\r\n\t\t\tthis.determineDirectionAndSmartEasing();\r\n\t\t\tthis.rAF = requestAnimationFrame(this.count);\r\n\t\t}\r\n\t\tthis.paused = !this.paused;\r\n\t}\r\n\r\n\t\t// reset to startVal so animation can be run again\r\n\tpublic reset(): void {\r\n\t\tcancelAnimationFrame(this.rAF);\r\n\t\tthis.paused = true;\r\n\t\tthis.resetDuration();\r\n\t\tthis.startVal = this.validateValue(this.options.startVal);\r\n\t\tthis.frameVal = this.startVal;\r\n\t\tthis.printValue(this.startVal);\r\n\t}\r\n\r\n\t\t// pass a new endVal and start animation\r\n\tpublic update(newEndVal: number): void {\r\n\t\tcancelAnimationFrame(this.rAF);\r\n\t\tthis.startTime = null;\r\n\t\tthis.endVal = this.validateValue(newEndVal);\r\n\r\n\t\tif (this.endVal === this.frameVal) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\r\n\t\tthis.startVal = this.frameVal;\r\n\t\tif (this.finalEndVal === null) {\r\n\t\t\tthis.resetDuration();\r\n\t\t}\r\n\r\n\t\tthis.determineDirectionAndSmartEasing();\r\n\t\tthis.rAF = requestAnimationFrame(this.count);\r\n\t}\r\n\r\n\tpublic count = (timestamp: number) => {\r\n\t\tif (this.startTime === null) { this.startTime = timestamp; }\r\n\t\tconst progress = timestamp - this.startTime;\r\n\t\tthis.remaining = this.duration - progress;\r\n\r\n\t\t// to ease or not to ease\r\n\t\tif (this.startVal !== null && this.endVal !== null) {\r\n\r\n\t\t\r\n\t\t\tif (this.useEasing) {\r\n\t\t\t\tif (this.countDown) {\r\n\t\t\t\t\tthis.frameVal = this.startVal - this.easingFn(progress, 0, this.startVal - this.endVal, this.duration);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.frameVal = this.easingFn(progress, this.startVal, this.endVal - this.startVal, this.duration);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (this.countDown) {\r\n\t\t\t\t\tthis.frameVal = this.startVal - ((this.startVal - this.endVal) * (progress / this.duration));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.frameVal = this.startVal + (this.endVal - this.startVal) * (progress / this.duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// don't go past endVal since progress can exceed duration in the last frame\r\n\t\t\tif (this.countDown) {\r\n\t\t\t\t\tthis.frameVal = (this.frameVal < this.endVal) ? this.endVal : this.frameVal;\r\n\t\t\t} else {\r\n\t\t\t\t\tthis.frameVal = (this.frameVal > this.endVal) ? this.endVal : this.frameVal;\r\n\t\t\t}\r\n\t\t\t// decimal\r\n\t\t\tthis.frameVal = Math.round(this.frameVal * this.decimalMult) / this.decimalMult;\r\n\t\t\t// format and print value\r\n\t\t\tthis.printValue(this.frameVal);\r\n\t\t}\r\n\r\n\r\n\t\t// whether to continue\r\n\t\tif (progress < this.duration) {\r\n\t\t\t\tthis.rAF = requestAnimationFrame(this.count);\r\n\t\t} else if (this.finalEndVal !== null) {\r\n\t\t\t// smart easing\r\n\t\t\t\tthis.update(this.finalEndVal);\r\n\t\t} else {\r\n\t\t\tif (this.callback) {\r\n\t\t\t\tthis.callback();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic printValue(val: number | null): void {\r\n\t\tif (typeof val === 'number') {\r\n\t\t\tconst result = this.formattingFn(val);\r\n\t\t\tif (this.el) {\r\n\t\t\t\tif (this.el.tagName === 'INPUT') {\r\n\t\t\t\t\tconst input = this.el as HTMLInputElement;\r\n\t\t\t\t\tinput.value = result;\r\n\t\t\t\t} else if (this.el.tagName === 'text' || this.el.tagName === 'tspan') {\r\n\t\t\t\t\tthis.el.textContent = result;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.el.innerHTML = result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ensureNumber(n: any): boolean {\r\n\t\treturn (typeof n === 'number' && !isNaN(n));\r\n\t}\r\n\r\n\tpublic validateValue(value?: number | null): number | null {\r\n\t\tconst newValue = Number(value);\r\n\t\tif (!this.ensureNumber(newValue)) {\r\n\t\t\tthis.error = `[CountUp] invalid start or end value: ${value}`;\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\treturn newValue;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate resetDuration(): void {\r\n\t\tthis.startTime = null;\r\n\t\tthis.duration = Number(this.options?.duration) * 1000;\r\n\t\tthis.remaining = this.duration;\r\n\t}\r\n\r\n\t// default format and easing functions\r\n\r\n\tpublic formatNumber = (num: number): string => {\r\n\t\tconst neg = (num < 0) ? '-' : '';\r\n\t\tlet result: string;\r\n\t\tlet x: string[];\r\n\t\tlet x1: string;\r\n\t\tlet x2: string;\r\n\t\tlet x3: string;\r\n\t\tresult = Math.abs(num).toFixed(this.options?.decimalPlaces);\r\n\t\tresult += '';\r\n\t\tx = result.split('.');\r\n\t\tx1 = x[0];\r\n\t\tx2 = x.length > 1 ? this.options?.decimal + x[1] : '';\r\n\t\tif (this.options?.useGrouping) {\r\n\t\t\t\tx3 = '';\r\n\t\t\t\tfor (let i = 0, len = x1.length; i < len; ++i) {\r\n\t\t\t\t\t\tif (i !== 0 && (i % 3) === 0) {\r\n\t\t\t\t\t\t\t\tx3 = this.options.separator + x3;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tx3 = x1[len - i - 1] + x3;\r\n\t\t\t\t}\r\n\t\t\t\tx1 = x3;\r\n\t\t}\r\n\t\t// optional numeral substitution\r\n\t\tif (typeof this.options.numerals !== 'undefined' && this.options.numerals.length) {\r\n\t\t\t\tx1 = x1.replace(/[0-9]/g, (w) => this.options.numerals[+w]);\r\n\t\t\t\tx2 = x2.replace(/[0-9]/g, (w) => this.options.numerals[+w]);\r\n\t\t}\r\n\t\treturn neg + this.options.prefix + x1 + x2 + this.options.suffix;\r\n\t}\r\n\r\n\tpublic easeOutExpo = (t: number, b: number, c: number, d: number): number =>\r\n\t\tc * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b\r\n\r\n}\r\n","import {\r\n    Directive,\r\n    ElementRef,\r\n    Input,\r\n    Output,\r\n    HostListener,\r\n    EventEmitter,\r\n    OnChanges,\r\n    SimpleChanges\r\n} from '@angular/core';\r\nimport { CountUp } from './count-up';\r\n\r\n@Directive({\r\n  selector: '[appCountUp]'\r\n})\r\nexport class CountUpDirective implements OnChanges {\r\n\r\n  private countUp: any;\r\n  private options: any;\r\n  // Optional extra configuration, such as easing.\r\n  // @Input('countUp') options: any;\r\n\r\n  // Optional start value for the count. Defaults to zero.\r\n  @Input() public startVal!: number;\r\n\r\n  // the number to count to\r\n  @Input() public endVal!: number;\r\n\r\n  // Optional duration of the animation in seconds. Default is 2.\r\n  @Input() public duration!: number;\r\n\r\n  // Optional number of decimal places. Default is 2.\r\n  @Input() public decimals!: number;\r\n\r\n  @Input() public useGrouping!: boolean;\r\n\r\n  // Optional flag for specifying whether the element should re-animate when clicked.\r\n  // Default is true.\r\n  // @Input() private reanimateOnClick: boolean;\r\n\r\n  // on-complete event emitter\r\n  @Output() private complete = new EventEmitter<void>();\r\n\r\n  constructor(private el: ElementRef) {}\r\n\r\n  public ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['endVal'] && typeof changes['endVal'].currentValue !== 'undefined') {\r\n\r\n      this.countUp = this.createCountUp();\r\n      this.animate();\r\n    }\r\n  }\r\n\r\n  private createCountUp(): any {\r\n    const startVal = this.startVal || 0;\r\n    const duration = this.duration || 2;\r\n    const decimals = this.decimals || 0;\r\n    const useGrouping = typeof this.useGrouping === 'undefined' ? true : this.useGrouping; // 3,000 (true) vs 3000 (false)\r\n\r\n    if (!this.duration) {\r\n      this.duration = duration;\r\n    }\r\n\r\n    this.options = {\r\n      startVal,\r\n      duration,\r\n      decimals,\r\n      useGrouping\r\n    };\r\n\r\n\r\n    let countUp = new CountUp(this.el.nativeElement, this.endVal, this.options);\r\n    return countUp;\r\n  }\r\n\r\n  private animate(): void {\r\n    this.countUp.reset();\r\n    this.countUp.start(() => this.countUp.update(this.endVal));\r\n    setTimeout(() => {\r\n        this.complete.emit();\r\n    }, this.duration * 1000);\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CountUpDirective } from './ng-count-up-js.directive';\r\n\r\n@NgModule({\r\n  imports: [],\r\n  declarations: [CountUpDirective],\r\n  exports: [CountUpDirective]\r\n})\r\nexport class CountUpModule { }\r\n","/*\n * Public API Surface of ng-count-up-js\n */\n\nexport * from './lib/ng-count-up-js.directive';\nexport * from './lib/ng-count-up-js.module';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}