{"version":3,"file":"CircularProgressBar.mjs","sources":["../src/CircularProgressBar.ts"],"sourcesContent":["import { ColorSource, Container, DEG_TO_RAD, Graphics, LineCap } from 'pixi.js';\n\nexport type MaskedProgressBarOptions = {\n    backgroundColor?: ColorSource;\n    fillColor?: ColorSource;\n    lineWidth?: number;\n    radius?: number;\n    value?: number;\n    backgroundAlpha?: number;\n    fillAlpha?: number;\n    cap?: LineCap;\n};\n\n/**\n * Creates a Circular ProgressBar.\n * @example\n * const progressBar = new CircularProgressBar({\n *    backgroundColor: 0x000000,\n *    backgroundAlpha: 0.5,\n *    lineWidth: 10,\n *    fillColor: 0xFFFFFF,\n *    radius: 50,\n *    value: 50,\n *    cap: 'round'\n * });\n *\n * progressBar.progress = 100;\n */\nexport class CircularProgressBar extends Container\n{\n    private _progress = 0;\n    private options: MaskedProgressBarOptions = {};\n\n    private bgCircle = new Graphics();\n    private fillCircle = new Graphics();\n\n    /** Container, that holds all inner views. */\n    innerView = new Container();\n\n    /**\n     * Creates a Circular ProgressBar.\n     * @param { MaskedProgressBarOptions } options - Options object to use.\n     * @param { ColorSource } options.backgroundColor - Background color.\n     * @param { ColorSource } options.fillColor - Fill color.\n     * @param { number } options.lineWidth - Line width.\n     * @param { number } options.radius - Radius.\n     * @param { number } options.value - Progress value.\n     * @param { number } options.backgroundAlpha - Background alpha.\n     * @param { number } options.fillAlpha - Fill alpha.\n     * @param { 'butt' | 'round' | 'square' } options.cap - Line cap.\n     */\n    constructor(options?: MaskedProgressBarOptions)\n    {\n        super();\n\n        this.options = options ?? {};\n\n        this.addChild(this.innerView);\n\n        this.innerView.addChild(this.bgCircle, this.fillCircle);\n\n        this.addBackground();\n\n        if (options?.value)\n        {\n            this.progress = options.value;\n        }\n    }\n\n    private addBackground()\n    {\n        const { backgroundColor, lineWidth = 5, radius = 50, backgroundAlpha } = this.options;\n\n        // Set alpha based on background configuration\n        let alpha = 1;\n\n        if (backgroundColor === undefined)\n        {\n            alpha = 0.000001;\n        }\n        else if (backgroundAlpha !== undefined && backgroundAlpha > 0)\n        {\n            alpha = backgroundAlpha;\n        }\n\n        this.bgCircle.circle(0, 0, radius).stroke({\n            width: lineWidth,\n            color: backgroundColor,\n            alpha,\n        });\n    }\n\n    /**\n     * Set progress value.\n     * @param { number } value - Progress value.\n     */\n    set progress(value: number)\n    {\n        if (value > 100)\n        {\n            value = 100;\n        }\n\n        if (value < 0)\n        {\n            value = 0;\n        }\n\n        this._progress = value;\n\n        const { lineWidth = 5, radius = 50, fillColor = 0xffffff, fillAlpha, cap } = this.options;\n\n        if (value === 0 && fillAlpha === 0)\n        {\n            this.fillCircle.clear();\n\n            return;\n        }\n\n        const startAngle = 0;\n        const endAngle = (360 / 100) * value;\n\n        this.fillCircle\n            .clear()\n            .arc(\n                0,\n                0,\n                radius,\n                (0 - 90 + startAngle) * DEG_TO_RAD,\n                (0 - 90 + startAngle + endAngle) * DEG_TO_RAD,\n            )\n            .stroke({\n                width: lineWidth,\n                color: fillColor,\n                cap,\n                alpha: fillAlpha,\n            });\n    }\n\n    /**\n     * Current progress value.\n     * @returns { number } - Progress value.\n     */\n    get progress(): number\n    {\n        return this._progress;\n    }\n}\n"],"names":[],"mappings":"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"}