{"version":3,"file":"SliderBase.mjs","sources":["../src/SliderBase.ts"],"sourcesContent":["import { Container, FederatedPointerEvent, Sprite, Text, Texture } from 'pixi.js';\nimport { ProgressBar, ProgressBarOptions, ProgressBarViewType } from './ProgressBar';\nimport { PixiText, PixiTextClass, PixiTextStyle } from './utils/helpers/text';\nimport { getView, type GetViewSettings } from './utils/helpers/view';\n\nimport type { DragObject } from './utils/HelpTypes';\n\nexport type BaseSliderOptions = ProgressBarOptions & {\n    min?: number;\n    max?: number;\n    valueTextStyle?: PixiTextStyle;\n    valueTextClass?: PixiTextClass;\n    showValue?: boolean;\n    valueTextOffset?: {\n        x?: number;\n        y?: number;\n    };\n};\n\nexport type DoubleSliderOptions = BaseSliderOptions & {\n    slider1?: Container | string;\n    slider2?: Container | string;\n\n    value1?: number;\n    value2?: number;\n};\n\n/** Hepper class, used as a base for single or double slider creation. */\nexport class SliderBase extends ProgressBar\n{\n    protected _slider1: Container | undefined;\n    protected _slider2: Container | undefined;\n\n    protected value1Text?: PixiText;\n    protected value2Text?: PixiText;\n\n    protected _value1: number = 0;\n    protected _value2: number = 0;\n\n    protected dragging = 0;\n\n    /** Minimal value. */\n    protected _min = 0;\n\n    /** Maximal value. */\n    protected _max = 100;\n\n    /** Progress value step */\n    protected _step = 1;\n\n    protected startX!: number;\n    protected startUpdateValue1!: number;\n    protected startUpdateValue2!: number;\n\n    protected settings: DoubleSliderOptions;\n\n    constructor(options: DoubleSliderOptions)\n    {\n        super(options);\n\n        this.settings = options;\n\n        if (options.slider1)\n        {\n            this.slider1 = options.slider1;\n        }\n        if (options.slider2)\n        {\n            this.slider2 = options.slider2;\n        }\n\n        this.min = options.min ?? 0;\n        this.max = options.max ?? 100;\n    }\n\n    override init(progressBarOptions: ProgressBarOptions)\n    {\n        super.init(progressBarOptions);\n\n        if (this.fill)\n        {\n            this.fill.eventMode = 'none';\n        }\n    }\n\n    /**\n     * Sets Slider1 instance.\n     * @param value - Container or string with texture name.\n     */\n    set slider1(value: Container | Texture | string)\n    {\n        if (!value) return;\n\n        if (this._slider1)\n        {\n            this._slider1.removeAllListeners();\n            this._slider1.destroy();\n        }\n\n        this._slider1 = this.createSlider(value);\n\n        if (this.settings.showValue && !this.value1Text)\n        {\n            const TextClass = this.settings.valueTextClass ?? Text;\n\n            this.value1Text = new TextClass({\n                text: '',\n                style: this.settings.valueTextStyle || { fill: 0xffffff },\n            });\n            this.value1Text.anchor.set(0.5);\n            this.addChild(this.value1Text);\n        }\n    }\n\n    /** Get Slider1 instance. */\n    get slider1(): Container | undefined\n    {\n        return this._slider1;\n    }\n\n    /**\n     * Sets Slider2 instance.\n     * @param value - Container or string with texture name.\n     */\n    set slider2(value: Container | string)\n    {\n        if (!value) return;\n\n        if (this._slider2)\n        {\n            this._slider2.removeAllListeners();\n            this._slider2.destroy();\n        }\n\n        this._slider2 = this.createSlider(value);\n\n        if (this.settings.showValue && !this.value2Text)\n        {\n            const TextClass = this.settings.valueTextClass ?? Text;\n\n            this.value2Text = new TextClass({\n                text: '',\n                style: this.settings.valueTextStyle || { fill: 0xffffff },\n            });\n            this.value2Text.anchor.set(0.5);\n            this.addChild(this.value2Text);\n        }\n    }\n\n    /** Get Slider2 instance. */\n    get slider2(): Container | undefined\n    {\n        return this._slider2;\n    }\n\n    /**\n     * Set bg.\n     * @param bg\n     */\n    override setBackground(bg: ProgressBarViewType)\n    {\n        if (this.bg)\n        {\n            this.bg.removeAllListeners();\n        }\n\n        super.setBackground(bg);\n\n        this.activateBG();\n    }\n\n    protected activateBG()\n    {\n        this.bg.eventMode = 'static';\n        this.bg\n            .on('pointerdown', this.startUpdate, this)\n            .on('globalpointermove', this.update, this)\n            .on('pointerup', this.endUpdate, this)\n            .on('pointerupoutside', this.endUpdate, this);\n    }\n\n    protected createSlider(sliderData: GetViewSettings): Container\n    {\n        const slider = getView(sliderData);\n        const onPointerDown = (event: FederatedPointerEvent) =>\n        {\n            // This is needed to do proper calculations in update method calls\n            if (this.bg)\n            {\n                event.currentTarget = this.bg;\n            }\n            this.startUpdate(event);\n        };\n\n        slider.eventMode = 'static';\n        slider\n            .on('pointerdown', onPointerDown)\n            .on('pointerup', this.endUpdate, this)\n            .on('pointerupoutside', this.endUpdate, this);\n        slider.x = slider.width / 2;\n\n        const container = new Container();\n\n        container.addChild(slider);\n\n        if (slider instanceof Sprite)\n        {\n            slider.anchor.set(0.5);\n        }\n\n        container.y = this.bg?.height ? this.bg?.height / 2 : 0;\n\n        this.addChild(container);\n\n        return container;\n    }\n\n    protected startUpdate(event: FederatedPointerEvent)\n    {\n        this.dragging = 1;\n\n        const obj = event.currentTarget as DragObject;\n\n        this.startX = obj.parent.worldTransform.applyInverse(event.global).x;\n\n        this.startUpdateValue1 = this._value1;\n        this.startUpdateValue2 = this._value2;\n        this.update(event);\n    }\n\n    protected endUpdate()\n    {\n        if (!this.dragging) return;\n        this.dragging = 0;\n\n        if (\n            !!this.startX\n            || this.startUpdateValue1 !== this._value1\n            || this.startUpdateValue2 !== this._value2\n        )\n        {\n            this.change();\n        }\n\n        this.startUpdateValue1 = 0;\n        this.startUpdateValue2 = 0;\n    }\n\n    protected onClick()\n    {\n        this.change();\n    }\n\n    /* Called when dragging started and on every move. */\n    protected update(_event: FederatedPointerEvent)\n    {\n        const obj = _event.currentTarget as DragObject;\n\n        const { x } = obj.parent.worldTransform.applyInverse(_event.global);\n\n        if (x !== this.startX)\n        {\n            this.startX = 0;\n        }\n    }\n\n    /** Called when dragging stopped. */\n    protected change()\n    {\n        // override me\n    }\n\n    /**\n     * Set max value.\n     * @param value\n     */\n    set max(value: number)\n    {\n        this._max = value;\n    }\n\n    /** Get max value. */\n    get max(): number\n    {\n        return this._max;\n    }\n\n    /**\n     * Set min value.\n     * @param value\n     */\n    set min(value: number)\n    {\n        this._min = value;\n    }\n\n    /** Get min value. */\n    get min(): number\n    {\n        return this._min;\n    }\n\n    /**\n     * Set step value.\n     * @param value\n     */\n    set step(value: number)\n    {\n        this._step = value;\n    }\n\n    /** Get step value. */\n    get step(): number\n    {\n        return this._step;\n    }\n}\n"],"names":[],"mappings":"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"}