angular-svg-round-progressbar
Version:
Angular module that uses SVG to create a circular progressbar
1 lines • 39.8 kB
Source Map (JSON)
{"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, DOCUMENT} from '@angular/core';\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 innerCircleFill: 'transparent',\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 innerCircleFill?: string;\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 /** Fill color of the circle inside the progress bar */\n @Input() innerCircleFill: string = this.defaults.innerCircleFill!;\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 [attr.fill]=\"innerCircleFill\"\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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"}