ng-circle-countdown
Version:
[](https://travis-ci.org/jlevot/ng-circle-countdown) [](https://badge.fury.io/js/ng-circle-countdown) [![npm
1 lines • 17.7 kB
Source Map (JSON)
{"version":3,"file":"ng-circle-countdown.mjs","sources":["../../../projects/ng-circle-countdown/src/services/countdown.service.ts","../../../projects/ng-circle-countdown/src/utils/svg-utils.ts","../../../projects/ng-circle-countdown/src/pipe/name.pipe.ts","../../../projects/ng-circle-countdown/src/component/ng-circle-countdown.component.ts","../../../projects/ng-circle-countdown/src/component/ng-circle-countdown.component.html","../../../projects/ng-circle-countdown/ng-circle-countdown.ts"],"sourcesContent":["import { computed, effect, Injectable, signal } from '@angular/core';\r\nimport { CountDown } from '../model/countdown';\r\nimport { clearInterval, setInterval } from 'worker-timers';\r\n\r\nconst DEFAULT_COUNTER: CountDown = {\r\n isActive: false,\r\n isCompleted: false,\r\n speed: 1000,\r\n remainingTime: 0\r\n};\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CountdownService {\r\n private counter = signal(DEFAULT_COUNTER);\r\n private isActive = computed(() => this.counter().isActive);\r\n\r\n private interval = 0;\r\n\r\n constructor() {\r\n effect(() => this.tick(this.isActive()));\r\n }\r\n\r\n public start = () => this.counter.update((v) => ({ ...v, isActive: true }))\r\n\r\n public stop = () => this.counter.update((v) => ({ ...v, isActive: false }));\r\n\r\n public setRemainingTime = (remainingTime: number) => this.counter.update((c: CountDown) => ({ ...c, remainingTime }));\r\n\r\n public resetCounter = (remainingTime: number) => this.counter.update((c: CountDown) => ({ ...c, remainingTime, isCompleted: false }));\r\n\r\n getCounter = () => {\r\n return this.counter.asReadonly()\r\n };\r\n\r\n private tick(isActive: boolean) {\r\n clearInterval(this.interval);\r\n if (isActive && this.counter().remainingTime !== 0) {\r\n this.interval = setInterval(\r\n () =>\r\n this.counter.set({\r\n ...this.counter(),\r\n remainingTime: this.counter().remainingTime - this.counter().speed,\r\n isCompleted: (this.counter().remainingTime - this.counter().speed) === 0\r\n }),\r\n this.counter().speed\r\n );\r\n }\r\n }\r\n}\r\n","import { RotationType } from '../model/rotation-type';\nimport { PathOptions } from '../model/path-options.model';\n\nexport class SvgUtils {\n static getRGB(color: string): number[] {\n const formattedColor = color.replace(\n /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, (m, r, g, b) => `#${ r }${ r }${ g }${ g }${ b }${ b }`\n );\n\n const strippedColor = formattedColor.substring(1);\n const colorChunks = strippedColor.match(/.{2}/g);\n\n if (colorChunks) return colorChunks.map(x => parseInt(x, 16));\n\n return [];\n }\n\n static linearEase(time: number, start: number, goal: number, duration: number): number {\n if (duration === 0) return start;\n const currentTime = time / duration;\n return start + goal * currentTime;\n }\n\n static getPathProps(size: number, strokeWidth: number, rotation: RotationType): PathOptions {\n const halfSize = size / 2;\n const halfStrokeWith = strokeWidth / 2;\n const arcRadius = halfSize - halfStrokeWith;\n const arcDiameter = 2 * arcRadius;\n const rotationIndicator = rotation === 'clockwise' ? '1,0' : '0,1';\n\n const length = Math.round(2 * Math.PI * arcRadius);\n const path = `m ${ halfSize },${ halfStrokeWith } a ${ arcRadius },${ arcRadius } 0 ${ rotationIndicator } 0,${ arcDiameter } a ${ arcRadius },${ arcRadius } 0 ${ rotationIndicator } 0,-${ arcDiameter }`;\n\n return { path, length };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'format_time',\r\n standalone: true\r\n})\r\nexport class FormatTimePipe implements PipeTransform {\r\n transform(time: number) {\r\n return Math.round(time / 1000);\r\n }\r\n}\r\n","import {Component, computed, ContentChild, effect, inject, input, InputSignal, output, OutputEmitterRef, Signal, TemplateRef} from '@angular/core';\r\nimport {CountdownService} from '../services/countdown.service';\r\nimport {SvgUtils} from '../utils/svg-utils';\r\nimport {PathOptions} from '../model/path-options.model';\r\nimport {CountDown} from '../model/countdown';\r\nimport {CountDownData} from '../model/countdown-data';\r\nimport {RotationType} from '../model/rotation-type';\r\nimport {FormatTimePipe} from '../pipe/name.pipe';\r\nimport {CommonModule} from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ng-circle-countdown',\r\n templateUrl: 'ng-circle-countdown.component.html',\r\n styleUrls: ['ng-circle-countdown.component.scss'],\r\n imports: [CommonModule, FormatTimePipe]\r\n})\r\n\r\nexport class CircleCountdownComponent {\r\n readonly countdownCompleted: OutputEmitterRef<void> = output<void>()\r\n\r\n @ContentChild('counter')\r\n // @ts-ignore\r\n public counterTemplate: TemplateRef<any> | null;\r\n\r\n // Countdown duration\r\n public duration: InputSignal<number> = input<number>(0);\r\n // Primary color for the countdown displaying\r\n public color: InputSignal<string> = input<string>('#004777');\r\n // Colors for the countdown displaying\r\n public colors: InputSignal<string[]> = input<string[]>([]);\r\n // Time interval to dertermine when the countdown should change color\r\n public colorsTime: InputSignal<number[]> = input<number[]>([]);\r\n // Stroke width\r\n public strokeWidth: InputSignal<number> = input<number>(6);\r\n // Define the component size to match with your UI\r\n public size: InputSignal<number> = input<number>(180);\r\n // Direction of the countdown rotation\r\n public rotation: InputSignal<RotationType> = input<RotationType>('clockwise');\r\n\r\n protected countdownService = inject(CountdownService);\r\n\r\n public pathOptions: Signal<PathOptions> = computed(() => SvgUtils.getPathProps(this.size(), this.strokeWidth(), this.rotation()));\r\n public countDown: Signal<CountDown> = this.countdownService.getCounter();\r\n public countDownData: Signal<CountDownData> = computed(() => this.getCountDownData(this.countDown().remainingTime));\r\n\r\n public isCompleted: Signal<boolean> = computed(() => this.countDown().isCompleted)\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.duration()) this.countdownService.setRemainingTime(this.duration());\r\n if (this.isCompleted()) this.countdownCompleted.emit();\r\n });\r\n }\r\n\r\n public start(): void {\r\n this.countdownService.start();\r\n }\r\n\r\n public pause(): void {\r\n this.countdownService.stop();\r\n }\r\n\r\n public reload(): void {\r\n this.countdownService.resetCounter(this.duration())\r\n this.start();\r\n }\r\n\r\n private getCountDownData(time: number): CountDownData {\r\n return {\r\n currentColor: this.getStrokeColor(time),\r\n offset: SvgUtils.linearEase(this.duration() - time, 0, this.pathOptions().length, this.duration())\r\n }\r\n }\r\n\r\n private getStrokeColor(time: number): string {\r\n if (this.colors().length === 0 && this.color()) return this.color();\r\n\r\n const remainingTime = time / 1000;\r\n\r\n const currentColorIndex = this.colorsTime()?.findIndex((time, i) =>\r\n time >= remainingTime && remainingTime >= this.colorsTime()[i + 1]);\r\n\r\n if (!this.colorsTime() || currentColorIndex === -1) return this.colors()[0];\r\n\r\n const currentTime = this.colorsTime()[currentColorIndex] - remainingTime;\r\n const currentDuration = this.colorsTime()[currentColorIndex] - this.colorsTime()[currentColorIndex + 1];\r\n const startColorRGB = SvgUtils.getRGB(this.colors()[currentColorIndex]);\r\n const endColorRGB = SvgUtils.getRGB(this.colors()[(currentColorIndex + 1 <= this.colors().length - 1) ? currentColorIndex + 1 : this.colors().length - 1]);\r\n return `rgb(${startColorRGB.map((color: any, index: any) =>\r\n SvgUtils.linearEase(currentTime, color, endColorRGB[index] - color, currentDuration)).join(',')})`;\r\n }\r\n}\r\n","<div class=\"base-timer\" [style.width]=\"size() + 'px'\" [style.height]=\"size() + 'px'\">\r\n <svg [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\" [attr.width]=\"size()\" [attr.height]=\"size()\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path [attr.d]=\"pathOptions().path\" fill=\"none\" stroke='#d9d9d9' [attr.stroke-width]=\"strokeWidth()\"></path>\r\n\r\n <path [style.stroke]=\"countDownData().currentColor\"\r\n [attr.stroke-width]=\"strokeWidth()\"\r\n [attr.stroke-dashoffset]=\"countDownData().offset\"\r\n [attr.d]=\"pathOptions().path\"\r\n [attr.stroke-dasharray]=\"pathOptions().length\"\r\n stroke-linecap=\"round\"\r\n fill=\"none\">\r\n </path>\r\n </svg>\r\n <div class=\"time\" [style.color]=\"countDownData().currentColor\">\r\n <ng-container *ngTemplateOutlet=\"counterTemplate;\r\n context:{ $implicit: {value: countDown().remainingTime | format_time, color: countDownData().currentColor } }\">\r\n </ng-container>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}