{"version":3,"file":"ProgressBar.mjs","sources":["../src/ProgressBar.ts"],"sourcesContent":["import {\n    Container,\n    Graphics,\n    NineSliceSprite as PixiNineSliceSprite,\n    Optional,\n    Size,\n    Sprite,\n    Texture,\n} from 'pixi.js';\nimport { getView, type GetViewSettings } from './utils/helpers/view';\n\ntype FillPaddings = {\n    top?: number;\n    right?: number;\n    bottom?: number;\n    left?: number;\n};\n\nexport type ProgressBarViewType = GetViewSettings;\nexport type NineSliceSprite = {\n    bg: [number, number, number, number];\n    fill: [number, number, number, number];\n};\n\nexport type ProgressBarOptions = {\n    bg: ProgressBarViewType;\n    fill: ProgressBarViewType;\n    fillPaddings?: FillPaddings;\n    nineSliceSprite?: NineSliceSprite;\n    progress?: number;\n};\n\n/**\n * Creates a ProgressBar.\n * @example\n * new ProgressBar({\n *     bg: 'slider_bg.png',\n *     fill: 'slider.png',\n *     progress: 50,\n * });\n */\nexport class ProgressBar extends Container\n{\n    protected bg!: Sprite | PixiNineSliceSprite | Graphics;\n    protected fill!: Sprite | PixiNineSliceSprite | Graphics;\n    protected fillMask!: PixiNineSliceSprite | Graphics;\n    protected progressStart = 0;\n    protected _progress = 0;\n\n    protected options: ProgressBarOptions;\n\n    /** Container, that holds all inner views. */\n    innerView: Container;\n\n    /**\n     * Creates a ProgressBar.\n     * @param options - Options.\n     * @param { Sprite | Graphics | Texture | string } options.bg - Background of the ProgressBar.\n     * <br> If you pass a string, it will be used as a texture name.\n     * <br> If you want to use NineSliceSprite, you have to pass a text\n     * (name of texture) or an instance of Texture as a parameter here.\n     * @param { Sprite | Graphics | Texture | string } options.fill - Fill of the ProgressBar.\n     * <br> If you pass a string, it will be used as a texture name.\n     * <br> If you want to use NineSliceSprite, you have to pass a text\n     * (name of texture) or an instance of Texture as a parameter here.\n     * @param { FillPaddings } options.fillPaddings - Fill offsets.\n     * @param { number } options.fillPaddings.top - Fill top offset.\n     * @param { number } options.fillPaddings.right - Fill right offset.\n     * @param { number } options.fillPaddings.bottom - Fill bottom offset.\n     * @param { number } options.fillPaddings.left - Fill left offset.\n     * @param { NineSliceSprite } options.nineSliceSprite - NineSliceSprite values for bg and fill.\n     * @param { Array } options.nineSliceSprite.bg - NineSliceSprite config for bg ([number, number, number, number]).\n     * <br> <b>!!! IMPORTANT:</b> To make it work, you have to pass a bg parameter as texture name or texture instance.\n     * @param { Array } options.nineSliceSprite.fill - NineSliceSprite config fill ([number, number, number, number]).\n     * <br> <b>!!! IMPORTANT:</b> To make it work, you have to pass a fill parameter as texture name or texture instance.\n     * @param { number } options.progress - Initial progress value.\n     */\n    constructor(options?: ProgressBarOptions)\n    {\n        super();\n\n        const defaultOptions: ProgressBarOptions = {\n            bg: Texture.WHITE,\n            fill: Texture.WHITE,\n            fillPaddings: {\n                top: 0,\n                right: 0,\n                bottom: 0,\n                left: 0,\n            },\n            progress: 0,\n        };\n\n        this.options = { ...defaultOptions, ...options };\n\n        this.innerView = new Container();\n        this.addChild(this.innerView);\n\n        this.init(this.options);\n    }\n\n    /**\n     * Initialize ProgressBar.\n     * @param root0\n     * @param root0.bg - Background texture.\n     * @param root0.fill - Fill texture.\n     * @param root0.fillPaddings - Fill offset.\n     * @param root0.progress - Initial progress value.\n     */\n    init({ bg, fill, fillPaddings, progress }: ProgressBarOptions)\n    {\n        this.setBackground(bg);\n\n        this.setFill(fill, fillPaddings);\n\n        this.progress = progress ?? 0;\n    }\n\n    /**\n     * Set bg.\n     * @param bg\n     */\n    setBackground(bg: ProgressBarViewType)\n    {\n        if (this.bg)\n        {\n            this.bg.destroy();\n        }\n\n        if (this.options?.nineSliceSprite)\n        {\n            if (typeof bg === 'string')\n            {\n                this.bg = new PixiNineSliceSprite({\n                    texture: Texture.from(bg),\n                    leftWidth: this.options.nineSliceSprite.bg[0],\n                    topHeight: this.options.nineSliceSprite.bg[1],\n                    rightWidth: this.options.nineSliceSprite.bg[2],\n                    bottomHeight: this.options.nineSliceSprite.bg[3],\n                });\n            }\n            else if (bg instanceof Texture)\n            {\n                this.bg = new PixiNineSliceSprite({\n                    texture: bg,\n                    leftWidth: this.options.nineSliceSprite.bg[0],\n                    topHeight: this.options.nineSliceSprite.bg[1],\n                    rightWidth: this.options.nineSliceSprite.bg[2],\n                    bottomHeight: this.options.nineSliceSprite.bg[3],\n                });\n            }\n            else\n            {\n                console.warn(`NineSliceSprite can not be used with views set as Container.\n                    Pass the texture or texture name as instead of the Container extended instance.`);\n            }\n        }\n\n        if (!this.bg)\n        {\n            this.bg = getView(bg) as Sprite | Graphics;\n        }\n\n        this.innerView.addChildAt(this.bg, 0);\n    }\n\n    /**\n     * Set fill.\n     * @param fill\n     * @param fillPadding\n     */\n    setFill(fill: ProgressBarViewType, fillPadding?: FillPaddings)\n    {\n        if (this.fill)\n        {\n            this.fill.destroy();\n        }\n\n        // in case if user is trying to use same instance for bg and fill\n        if (this.bg instanceof Sprite && fill === this.bg)\n        {\n            console.warn('Can not use same Sprite instance for bg and fill.');\n\n            return;\n        }\n\n        if (this.options?.nineSliceSprite)\n        {\n            if (typeof fill === 'string' || fill instanceof Texture)\n            {\n                this.fill = new PixiNineSliceSprite({\n                    texture: typeof fill === 'string' ? Texture.from(fill) : fill,\n                    leftWidth: this.options.nineSliceSprite.fill[0],\n                    topHeight: this.options.nineSliceSprite.fill[1],\n                    rightWidth: this.options.nineSliceSprite.fill[2],\n                    bottomHeight: this.options.nineSliceSprite.fill[3],\n                });\n            }\n            else\n            {\n                console.warn(`NineSliceSprite can not be used with views set as Container.\n                    Pass the texture or texture name as instead of the Container extended instance.`);\n                this.fill = getView(fill) as Sprite | Graphics;\n            }\n        }\n        else\n        {\n            this.fill = getView(fill) as Sprite | Graphics;\n        }\n\n        this.innerView.addChildAt(this.fill, 1);\n\n        const offsetX = fillPadding?.left ?? 0;\n        const offsetY = fillPadding?.top ?? 0;\n\n        this.fill.x = offsetX;\n        this.fill.y = offsetY;\n\n        if (this.fillMask)\n        {\n            this.fill.mask = null;\n            this.fillMask.destroy();\n        }\n\n        const leftWidth = this.fill.width / 2;\n        const rightWidth = this.fill.width / 2;\n        const topHeight = this.fill.height / 2;\n        const bottomHeight = this.fill.height / 2;\n\n        let texture: Texture = Texture.WHITE;\n\n        if (this.fill instanceof Sprite && this.fill.texture)\n        {\n            texture = this.fill.texture;\n        }\n\n        this.fillMask = new PixiNineSliceSprite({\n            texture,\n            leftWidth,\n            topHeight,\n            rightWidth,\n            bottomHeight,\n        });\n        this.fillMask.position.copyFrom(this.fill);\n\n        this.addChild(this.fillMask);\n        this.fill.mask = this.fillMask;\n    }\n\n    protected validate(progress: number): number\n    {\n        progress = Math.round(progress);\n\n        if (progress < 0)\n        {\n            return 0;\n        }\n\n        if (progress > 100)\n        {\n            return 100;\n        }\n\n        return progress;\n    }\n\n    /** Set current progress percentage value. */\n    set progress(progress: number)\n    {\n        this._progress = this.validate(progress);\n\n        if (!this.fill) return;\n\n        if (this.fillMask)\n        {\n            this.fill.mask = null;\n            this.fillMask.width = (this.fill.width / 100) * (this._progress - this.progressStart);\n            this.fillMask.x = ((this.progressStart / 100) * this.fill.width) + this.fill.x;\n            this.fillMask.height = this.fill.height;\n            this.fill.mask = this.fillMask;\n        }\n    }\n\n    /** Return current progress percentage value. */\n    get progress(): number\n    {\n        return this._progress;\n    }\n\n    /**\n     * Sets width of a ProgressBars background and fill.\n     * If nineSliceSprite is set, then width will be set to nineSliceSprite.\n     * If nineSliceSprite is not set, then width will control components width as Container.\n     * @param width - Width value.\n     */\n    override set width(width: number)\n    {\n        if (this.options?.nineSliceSprite)\n        {\n            if (this.bg)\n            {\n                this.bg.width = width;\n            }\n\n            if (this.fill)\n            {\n                const leftPadding = this.options.fillPaddings?.left ?? 0;\n                const rightPadding = this.options.fillPaddings?.right ?? 0;\n\n                this.fill.width = width - leftPadding - rightPadding;\n                this.fillMask.width = width - leftPadding - rightPadding;\n            }\n\n            this.progress = this._progress;\n        }\n        else\n        {\n            super.width = width;\n        }\n    }\n\n    /** Gets width of a ProgressBar. */\n    override get width(): number\n    {\n        return super.width;\n    }\n\n    /**\n     * Sets height of a ProgressBars background and fill.\n     * If nineSliceSprite is set, then height will be set to nineSliceSprite.\n     * If nineSliceSprite is not set, then height will control components height as Container.\n     * @param height - Height value.\n     */\n    override set height(height: number)\n    {\n        if (this.options?.nineSliceSprite)\n        {\n            if (this.bg)\n            {\n                this.bg.height = height;\n            }\n\n            if (this.fill)\n            {\n                const topPadding = this.options.fillPaddings?.top ?? 0;\n                const bottomPadding = this.options.fillPaddings?.bottom ?? 0;\n\n                this.fill.height = height - topPadding - bottomPadding;\n                this.fillMask.height = height - topPadding - bottomPadding;\n            }\n\n            this.progress = this._progress;\n        }\n        else\n        {\n            super.height = height;\n        }\n    }\n\n    /** Gets height of a ProgressBar. */\n    override get height(): number\n    {\n        return super.height;\n    }\n\n    override setSize(value: number | Optional<Size, 'height'>, height?: number): void\n    {\n        if (this.options?.nineSliceSprite)\n        {\n            if (this.bg)\n            {\n                this.bg.setSize(value, height);\n            }\n\n            if (this.fill)\n            {\n                if (typeof value === 'object')\n                {\n                    height = value.height ?? value.width;\n                    value = value.width;\n                }\n                else\n                {\n                    height = height ?? value;\n                }\n\n                const topPadding = this.options.fillPaddings?.top ?? 0;\n                const bottomPadding = this.options.fillPaddings?.bottom ?? 0;\n                const leftPadding = this.options.fillPaddings?.left ?? 0;\n                const rightPadding = this.options.fillPaddings?.right ?? 0;\n\n                this.fill.setSize(\n                    value - leftPadding - rightPadding,\n                    height - topPadding - bottomPadding,\n                );\n                this.fillMask.setSize(\n                    value - leftPadding - rightPadding,\n                    height - topPadding - bottomPadding,\n                );\n            }\n\n            this.progress = this._progress;\n        }\n        else\n        {\n            super.setSize(value, height);\n        }\n    }\n}\n"],"names":["PixiNineSliceSprite"],"mappings":"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"}