{"version":3,"file":"angular-svg-round-progressbar.mjs","sources":["../../../src/lib/round-progress/round-progress.service.ts","../../../src/lib/round-progress/round-progress.config.ts","../../../src/lib/round-progress/round-progress.ease.ts","../../../src/lib/round-progress/round-progress.component.ts","../../../src/lib/round-progress/round-progress.component.html","../../../src/lib/round-progress/round-progress.module.ts","../../../src/lib/angular-svg-round-progressbar.ts"],"sourcesContent":["import {Injectable, Inject, Optional} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nconst DEGREE_IN_RADIANS: number = Math.PI / 180;\n\n@Injectable({providedIn: 'root'})\nexport class RoundProgressService {\n  private base: HTMLBaseElement;\n  private hasPerf: boolean;\n  public supportsSvg: boolean;\n\n  constructor(@Optional() @Inject(DOCUMENT) document?: Document) {\n    this.supportsSvg = !!(\n      document &&\n      document.createElementNS &&\n      document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect\n    );\n\n    this.base = document?.head?.querySelector('base') as HTMLBaseElement;\n    this.hasPerf =\n      typeof window !== 'undefined' &&\n      window.performance &&\n      window.performance.now &&\n      typeof window.performance.now() === 'number';\n  }\n\n  /**\n   * Resolves a SVG color against the page's `base` tag.\n   */\n  resolveColor(color: string): string {\n    if (this.base && this.base.href) {\n      const hashIndex = color.indexOf('#');\n\n      if (hashIndex > -1 && color.indexOf('url') > -1) {\n        return color.slice(0, hashIndex) + location.href + color.slice(hashIndex);\n      }\n    }\n\n    return color;\n  }\n\n  /**\n   * Generates a timestamp.\n   */\n  getTimestamp(): number {\n    return this.hasPerf ? window.performance.now() : Date.now();\n  }\n\n  /**\n   * Generates the value for an SVG arc.\n   *\n   * @param current Current value.\n   * @param total Maximum value.\n   * @param pathRadius Radius of the SVG path.\n   * @param elementRadius Radius of the SVG container.\n   * @param isSemicircle Whether the element should be a semicircle.\n   */\n  getArc(current: number, total: number, pathRadius: number, elementRadius: number,\n         isSemicircle = false): string {\n    const value = Math.max(0, Math.min(current || 0, total));\n    const maxAngle = isSemicircle ? 180 : 359.9999;\n    const percentage = total === 0 ? maxAngle : (value / total) * maxAngle;\n    const start = this._polarToCartesian(elementRadius, pathRadius, percentage);\n    const end = this._polarToCartesian(elementRadius, pathRadius, 0);\n    const arcSweep = percentage <= 180 ? 0 : 1;\n\n    return `M ${start} A ${pathRadius} ${pathRadius} 0 ${arcSweep} 0 ${end}`;\n  }\n\n  /**\n   * Converts polar cooradinates to Cartesian.\n   *\n   * @param elementRadius Radius of the wrapper element.\n   * @param pathRadius Radius of the path being described.\n   * @param angleInDegrees Degree to be converted.\n   */\n  private _polarToCartesian(elementRadius: number, pathRadius: number,\n                            angleInDegrees: number): string {\n    const angleInRadians = (angleInDegrees - 90) * DEGREE_IN_RADIANS;\n    const x = elementRadius + pathRadius * Math.cos(angleInRadians);\n    const y = elementRadius + pathRadius * Math.sin(angleInRadians);\n\n    return x + ' ' + y;\n  }\n}\n","import {InjectionToken, Provider} from '@angular/core';\n\nconst DEFAULTS = {\n  radius: 125,\n  animation: 'easeOutCubic',\n  animationDelay: undefined,\n  duration: 500,\n  stroke: 15,\n  color: '#45CCCE',\n  background: '#EAEAEA',\n  responsive: false,\n  clockwise: true,\n  semicircle: false,\n  rounded: false,\n};\n\nexport const ROUND_PROGRESS_DEFAULTS =\n    new InjectionToken<RoundProgressDefaults>('ROUND_PROGRESS_DEFAULTS', {\n      providedIn: 'root',\n      factory: () => DEFAULTS\n    });\n\nexport const ROUND_PROGRESS_DEFAULTS_PROVIDER: Provider = {\n  provide: ROUND_PROGRESS_DEFAULTS,\n  useValue: DEFAULTS,\n};\n\nexport interface RoundProgressDefaults {\n  radius?: number;\n  animation?: string;\n  animationDelay?: number;\n  duration?: number;\n  stroke?: number;\n  color?: string;\n  background?: string;\n  responsive?: boolean;\n  clockwise?: boolean;\n  semicircle?: boolean;\n  rounded?: boolean;\n}\n","/**\n * TERMS OF USE - EASING EQUATIONS\n * Open source under the BSD License.\n *\n * Copyright © 2001 Robert Penner\n * All rights reserved.\n * Redistribution and use in source and binary forms, with or without modification, are permitted\n * provided that the following conditions are met:\n *\n * Redistributions of source code must retain the above copyright notice, this list of conditions\n * and the following disclaimer.\n *\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions\n * and the following disclaimer in the documentation and/or other materials provided with the\n * distribution.\n *\n * Neither the name of the author nor the names of contributors may be used to endorse or promote\n * products derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport {Injectable} from '@angular/core';\n\n@Injectable({providedIn: 'root'})\nexport class RoundProgressEase {\n  // t: current time (or position) of the neonate. This can be seconds or frames, steps,\n  // seconds, ms, whatever – as long as the unit is the same as is used for the total time.\n  // b: beginning value of the property.\n  // c: change between the beginning and destination value of the property.\n  // d: total time of the neonate.\n\n  linearEase(t: number, b: number, c: number, d: number): number {\n    return (c * t) / d + b;\n  }\n\n  easeInQuad(t: number, b: number, c: number, d: number): number {\n    return c * (t /= d) * t + b;\n  }\n\n  easeOutQuad(t: number, b: number, c: number, d: number): number {\n    return -c * (t /= d) * (t - 2) + b;\n  }\n\n  easeInOutQuad(t: number, b: number, c: number, d: number): number {\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d / 2) < 1) {\n      return (c / 2) * t * t + b;\n    }\n\n    return (-c / 2) * (--t * (t - 2) - 1) + b;\n  }\n\n  easeInCubic(t: number, b: number, c: number, d: number): number {\n    return c * (t /= d) * t * t + b;\n  }\n\n  easeOutCubic(t: number, b: number, c: number, d: number): number {\n    return c * ((t = t / d - 1) * t * t + 1) + b;\n  }\n\n  easeInOutCubic(t: number, b: number, c: number, d: number): number {\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d / 2) < 1) {\n      return (c / 2) * t * t * t + b;\n    }\n\n    return (c / 2) * ((t -= 2) * t * t + 2) + b;\n  }\n\n  easeInQuart(t: number, b: number, c: number, d: number): number {\n    return c * (t /= d) * t * t * t + b;\n  }\n\n  easeOutQuart(t: number, b: number, c: number, d: number): number {\n    return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n  }\n\n  easeInOutQuart(t: number, b: number, c: number, d: number): number {\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d / 2) < 1) {\n      return (c / 2) * t * t * t * t + b;\n    }\n\n    return (-c / 2) * ((t -= 2) * t * t * t - 2) + b;\n  }\n\n  easeInQuint(t: number, b: number, c: number, d: number): number {\n    return c * (t /= d) * t * t * t * t + b;\n  }\n\n  easeOutQuint(t: number, b: number, c: number, d: number): number {\n    return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n  }\n\n  easeInOutQuint(t: number, b: number, c: number, d: number): number {\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d / 2) < 1) {\n      return (c / 2) * t * t * t * t * t + b;\n    }\n\n    return (c / 2) * ((t -= 2) * t * t * t * t + 2) + b;\n  }\n\n  easeInSine(t: number, b: number, c: number, d: number): number {\n    return -c * Math.cos((t / d) * (Math.PI / 2)) + c + b;\n  }\n\n  easeOutSine(t: number, b: number, c: number, d: number): number {\n    return c * Math.sin((t / d) * (Math.PI / 2)) + b;\n  }\n\n  easeInOutSine(t: number, b: number, c: number, d: number): number {\n    return (-c / 2) * (Math.cos((Math.PI * t) / d) - 1) + b;\n  }\n\n  easeInExpo(t: number, b: number, c: number, d: number): number {\n    return t === 0 ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n  }\n\n  easeOutExpo(t: number, b: number, c: number, d: number): number {\n    return t === d ? b + c : c * (-Math.pow(2, (-10 * t) / d) + 1) + b;\n  }\n\n  easeInOutExpo(t: number, b: number, c: number, d: number): number {\n    if (t === 0) {\n      return b;\n    }\n\n    if (t === d) {\n      return b + c;\n    }\n\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d / 2) < 1) {\n      return (c / 2) * Math.pow(2, 10 * (t - 1)) + b;\n    }\n\n    return (c / 2) * (-Math.pow(2, -10 * --t) + 2) + b;\n  }\n\n  easeInCirc(t: number, b: number, c: number, d: number): number {\n    return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n  }\n\n  easeOutCirc(t: number, b: number, c: number, d: number): number {\n    return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n  }\n\n  easeInOutCirc(t: number, b: number, c: number, d: number): number {\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d / 2) < 1) {\n      return (-c / 2) * (Math.sqrt(1 - t * t) - 1) + b;\n    }\n\n    return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n  }\n\n  easeInElastic(t: number, b: number, c: number, d: number): number {\n    const p = d * 0.3;\n    let s = 1.70158;\n    let a = c;\n\n    if (t === 0) {\n      return b;\n    }\n\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d) === 1) {\n      return b + c;\n    }\n\n    if (a < Math.abs(c)) {\n      a = c;\n      s = p / 4;\n    } else {\n      s = (p / (2 * Math.PI)) * Math.asin(c / a);\n    }\n\n    return -(a * Math.pow(2, 10 * t--) * Math.sin(((t * d - s) * (2 * Math.PI)) / p)) + b;\n  }\n\n  easeOutElastic(t: number, b: number, c: number, d: number): number {\n    const p = d * 0.3;\n    let s = 1.70158;\n    let a = c;\n\n    if (t === 0) {\n      return b;\n    }\n\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d) === 1) {\n      return b + c;\n    }\n\n    if (a < Math.abs(c)) {\n      a = c;\n      s = p / 4;\n    } else {\n      s = (p / (2 * Math.PI)) * Math.asin(c / a);\n    }\n\n    return a * Math.pow(2, -10 * t) * Math.sin(((t * d - s) * (2 * Math.PI)) / p) + c + b;\n  }\n\n  easeInOutElastic(t: number, b: number, c: number, d: number): number {\n    const p = d * (0.3 * 1.5);\n    let s = 1.70158;\n    let a = c;\n\n    if (t === 0) {\n      return b;\n    }\n\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d / 2) === 2) {\n      return b + c;\n    }\n\n    if (a < Math.abs(c)) {\n      a = c;\n      s = p / 4;\n    } else {\n      s = (p / (2 * Math.PI)) * Math.asin(c / a);\n    }\n\n    if (t < 1) {\n      return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) *\n        Math.sin(((t * d - s) * (2 * Math.PI)) / p)) + b;\n    }\n\n    return a * Math.pow(2, -10 * (t -= 1)) *\n      Math.sin(((t * d - s) * (2 * Math.PI)) / p) * 0.5 + c + b;\n  }\n\n  easeInBack(t: number, b: number, c: number, d: number, s = 1.70158): number {\n    return c * (t /= d) * t * ((s + 1) * t - s) + b;\n  }\n\n  easeOutBack(t: number, b: number, c: number, d: number, s = 1.70158): number {\n    return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n  }\n\n  easeInOutBack(t: number, b: number, c: number, d: number, s = 1.70158): number {\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d / 2) < 1) {\n      return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n    }\n\n    return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n  }\n\n  easeInBounce(t: number, b: number, c: number, d: number): number {\n    return c - this.easeOutBounce(d - t, 0, c, d) + b;\n  }\n\n  easeOutBounce(t: number, b: number, c: number, d: number): number {\n    // eslint-disable-next-line no-cond-assign\n    if ((t /= d) < 1 / 2.75) {\n      return c * (7.5625 * t * t) + b;\n    } else if (t < 2 / 2.75) {\n      return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n    } else if (t < 2.5 / 2.75) {\n      return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n    }\n\n    return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n  }\n\n  easeInOutBounce(t: number, b: number, c: number, d: number): number {\n    if (t < d / 2) {\n      return this.easeInBounce(t * 2, 0, c, d) * 0.5 + b;\n    }\n\n    return this.easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n  }\n}\n","import {\n  Component,\n  Input,\n  Output,\n  OnChanges,\n  NgZone,\n  EventEmitter,\n  ViewChild,\n  Inject,\n  ElementRef,\n  SimpleChanges,\n  ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport {RoundProgressService} from './round-progress.service';\nimport {ROUND_PROGRESS_DEFAULTS, RoundProgressDefaults} from './round-progress.config';\nimport {RoundProgressEase} from './round-progress.ease';\n\n@Component({\n  selector: 'round-progress',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './round-progress.component.html',\n  styleUrls: ['./round-progress.component.css'],\n  host: {\n    'role': 'progressbar',\n    '[attr.aria-valuemin]': '0',\n    '[attr.aria-valuemax]': 'max',\n    '[attr.aria-valuenow]': 'current',\n    '[style.width]': 'responsive ? \"\" : _getDiameter() + \"px\"',\n    '[style.height]': '_getElementHeight()',\n    '[style.padding-bottom]': '_getPaddingBottom()',\n    '[class.responsive]': 'responsive',\n  }\n})\nexport class RoundProgressComponent implements OnChanges {\n  private currentLinecap: 'round' | '' = '';\n\n  /** Reference to the underlying `path` node. */\n  @ViewChild('path') path!: ElementRef<SVGPathElement>;\n\n  /** Current value of the progress bar. */\n  @Input() current: number = 0;\n\n  /** Maximum value of the progress bar. */\n  @Input() max: number = 0;\n\n  /** Radius of the circle. */\n  @Input() radius: number = this.defaults.radius!;\n\n  /** Name of the easing function to use when animating. */\n  @Input() animation: string = this.defaults.animation!;\n\n  /** Time in millisconds by which to delay the animation. */\n  @Input() animationDelay: number = this.defaults.animationDelay!;\n\n  /** Duration of the animation. */\n  @Input() duration: number = this.defaults.duration!;\n\n  /** Width of the circle's stroke. */\n  @Input() stroke: number = this.defaults.stroke!;\n\n  /** Color of the circle. */\n  @Input() color: string = this.defaults.color!;\n\n  /** Background color of the circle. */\n  @Input() background: string = this.defaults.background!;\n\n  /** Whether the circle should take up the width of its parent. */\n  @Input() responsive: boolean = this.defaults.responsive!;\n\n  /** Whether the circle is filling up clockwise. */\n  @Input() clockwise: boolean = this.defaults.clockwise!;\n\n  /** Whether to render a semicircle. */\n  @Input() semicircle: boolean = this.defaults.semicircle!;\n\n  /** Whether the tip of the progress should be rounded off. */\n  @Input() rounded: boolean = this.defaults.rounded!;\n\n  /** Emits when a new value has been rendered. */\n  @Output() onRender: EventEmitter<number> = new EventEmitter();\n\n  private lastAnimationId = 0;\n\n  constructor(\n    private service: RoundProgressService,\n    private easing: RoundProgressEase,\n    @Inject(ROUND_PROGRESS_DEFAULTS) private defaults: RoundProgressDefaults,\n    private ngZone: NgZone\n  ) {}\n\n  /** Animates a change in the current value. */\n  private _animateChange(from: number, to: number): void {\n    if (typeof from !== 'number') {\n      from = 0;\n    }\n\n    to = this._clamp(to);\n    from = this._clamp(from);\n\n    const changeInValue = to - from;\n    const duration = this.duration;\n\n    // Avoid firing change detection for each of the animation frames.\n    this.ngZone.runOutsideAngular(() => {\n      const start = () => {\n        const startTime = this.service.getTimestamp();\n        const id = ++this.lastAnimationId;\n        const animation = () => {\n          const currentTime = Math.min(this.service.getTimestamp() - startTime, duration);\n          const easingFn = this.easing[this.animation as keyof RoundProgressEase];\n          const value = easingFn(currentTime, from, changeInValue, duration);\n\n          this._updatePath(value);\n\n          if (this.onRender.observers.length > 0) {\n            this.onRender.emit(value);\n          }\n\n          if (id === this.lastAnimationId && currentTime < duration) {\n            requestAnimationFrame(animation);\n          }\n        }\n\n        requestAnimationFrame(animation);\n      };\n\n      if (this.animationDelay > 0) {\n        setTimeout(start, this.animationDelay);\n      } else {\n        start();\n      }\n    });\n  }\n\n  /** Updates the path apperance. */\n  private _updatePath(value: number): void {\n    if (this.path) {\n      const arc = this.service.getArc(value, this.max, this.radius - this.stroke / 2,\n                                      this.radius, this.semicircle);\n      const path = this.path.nativeElement;\n\n      // Remove the rounded line cap when the value is zero,\n      // because SVG won't allow it to disappear completely.\n      const linecap = this.rounded && value > 0 ? 'round' : '';\n\n      // This is called on each animation frame so avoid\n      // updating the line cap unless it has changed.\n      if (linecap !== this.currentLinecap) {\n        this.currentLinecap = linecap;\n        path.style.strokeLinecap = linecap;\n      }\n\n      path.setAttribute('d', arc);\n    }\n  }\n\n  /** Clamps a value between the maximum and 0. */\n  private _clamp(value: number): number {\n    return Math.max(0, Math.min(value || 0, this.max));\n  }\n\n  /** Determines the SVG transforms for the <path> node. */\n  getPathTransform(): string|null {\n    const diameter = this._getDiameter();\n\n    if (this.semicircle) {\n      return this.clockwise\n        ? `translate(0, ${diameter}) rotate(-90)`\n        : `translate(${diameter + ',' + diameter}) rotate(90) scale(-1, 1)`;\n    } else if (!this.clockwise) {\n      return `scale(-1, 1) translate(-${diameter} 0)`;\n    }\n\n    return null;\n  }\n\n  /** Resolves a color through the service. */\n  resolveColor(color: string): string {\n    return this.service.resolveColor(color);\n  }\n\n  /** Change detection callback. */\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.current) {\n      this._animateChange(changes.current.previousValue, changes.current.currentValue);\n    } else {\n      this._updatePath(this.current);\n    }\n  }\n\n  /** Diameter of the circle. */\n  _getDiameter(): number {\n    return this.radius * 2;\n  }\n\n  /** The CSS height of the wrapper element. */\n  _getElementHeight(): string|null {\n    if (!this.responsive) {\n      return (this.semicircle ? this.radius : this._getDiameter()) + 'px';\n    }\n\n    return null;\n  }\n\n  /** Viewbox for the SVG element. */\n  _getViewBox(): string {\n    const diameter = this._getDiameter();\n    return `0 0 ${diameter} ${this.semicircle ? this.radius : diameter}`;\n  }\n\n  /** Bottom padding for the wrapper element. */\n  _getPaddingBottom(): string|null {\n    if (this.responsive) {\n      return this.semicircle ? '50%' : '100%';\n    }\n\n    return null;\n  }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" [attr.viewBox]=\"_getViewBox()\">\n  <circle\n    fill=\"none\"\n    [attr.cx]=\"radius\"\n    [attr.cy]=\"radius\"\n    [attr.r]=\"radius - stroke / 2\"\n    [style.stroke]=\"resolveColor(background)\"\n    [style.stroke-width]=\"stroke\"/>\n\n  <path\n    #path\n    fill=\"none\"\n    [style.stroke-width]=\"stroke\"\n    [style.stroke]=\"resolveColor(color)\"\n    [attr.transform]=\"getPathTransform()\"/>\n</svg>\n","import {NgModule} from '@angular/core';\nimport {RoundProgressComponent} from './round-progress.component';\nimport {ROUND_PROGRESS_DEFAULTS_PROVIDER} from './round-progress.config';\n\n@NgModule({\n  imports: [RoundProgressComponent],\n  exports: [RoundProgressComponent],\n  providers: [ROUND_PROGRESS_DEFAULTS_PROVIDER],\n})\nexport class RoundProgressModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}