{"version":3,"file":"Slider.mjs","sources":["../src/Slider.ts"],"sourcesContent":["import { Container, FederatedPointerEvent, Optional, Size } from 'pixi.js';\nimport { Signal } from 'typed-signals';\nimport { BaseSliderOptions, SliderBase } from './SliderBase';\n\nimport type { DragObject } from './utils/HelpTypes';\n\nexport type SliderOptions = BaseSliderOptions & {\n    slider: Container | string;\n    step?: number;\n    value?: number;\n};\n\n/**\n * Creates a slider to select a single value.\n * @example\n * new Slider({\n *     bg: 'slider_bg.png',\n *     fill: 'slider.png',\n *     slider: 'slider.png',\n *     min: 0,\n *     max: 100,\n *     value: 50,\n * });\n *\n * singleSlider.onChange.connect((value) => {\n *     console.log(`Slider changed to ${value}`);\n * });\n */\nexport class Slider extends SliderBase\n{\n    protected sliderOptions: SliderOptions;\n\n    /** Fires when value is changing, on every move of slider. */\n    onUpdate: Signal<(value: number) => void> = new Signal();\n\n    /** Fires when value changed, only when slider is released. */\n    onChange: Signal<(value: number) => void> = new Signal();\n\n    constructor(options: SliderOptions)\n    {\n        super({\n            slider1: options.slider,\n            value1: options.value,\n            ...options,\n        });\n\n        this.sliderOptions = options;\n\n        // Avoid zero value\n        this.step = options.step || 1;\n\n        this.value = options.value ?? this.min;\n        this.updateSlider();\n    }\n\n    /** Return selected value. */\n    get value(): number\n    {\n        return this._value1;\n    }\n\n    /** Set selected value. */\n    set value(value: number)\n    {\n        if (value === this._value1) return;\n\n        if (value < this.min) value = this.min;\n        if (value > this.max) value = this.max;\n\n        this._value1 = value;\n\n        this.updateSlider();\n\n        this.onUpdate?.emit(this.value);\n    }\n\n    override set max(value: number)\n    {\n        super.max = value;\n        this.updateSlider();\n    }\n\n    override get max(): number\n    {\n        return super.max;\n    }\n\n    override set min(value: number)\n    {\n        super.min = value;\n        this.updateSlider();\n    }\n\n    override get min(): number\n    {\n        return super.min;\n    }\n\n    override set step(value: number)\n    {\n        super.step = value;\n        this.updateSlider();\n    }\n\n    override get step(): number\n    {\n        return super.step;\n    }\n\n    /** Set slider instance ot texture. */\n    // eslint-disable-next-line accessor-pairs\n    set slider(value: Container | string)\n    {\n        this.slider1 = value;\n        this.updateSlider();\n    }\n\n    protected override update(event: FederatedPointerEvent)\n    {\n        super.update(event);\n\n        if (!this.dragging) return;\n\n        const obj = event.currentTarget as DragObject;\n        const { x } = obj.parent.worldTransform.applyInverse(event.global);\n        const positionRatio = x / (this.bg?.width || 1);\n        const rawValue = this.min + (positionRatio * (this.max - this.min));\n\n        // Snap the raw value to the nearest step\n        this.value = Math.round(rawValue / this.step) * this.step;\n    }\n\n    protected override change()\n    {\n        this.onChange?.emit(this.value);\n    }\n\n    protected updateSlider()\n    {\n        if (!this._slider1) return;\n\n        this.progress = (((this.value ?? this.min) - this.min) / (this.max - this.min)) * 100;\n\n        this._slider1.x = ((this.bg?.width ?? 0) / 100 * this.progress) - (this._slider1.width / 2);\n        this._slider1.y = (this.bg?.height ?? 0) / 2;\n\n        if (this.sliderOptions?.showValue && this.value1Text)\n        {\n            this.value1Text.text = `${Math.round(this.value)}`;\n\n            const sliderPosX = this._slider1.x + (this._slider1.width / 2);\n            const sliderPosY = this._slider1.y;\n\n            this.value1Text.x = sliderPosX + (this.sliderOptions.valueTextOffset?.x ?? 0);\n            this.value1Text.y = sliderPosY + (this.sliderOptions.valueTextOffset?.y ?? 0);\n        }\n    }\n\n    /**\n     * Sets width of a Sliders 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 value - Width value.\n     */\n    override set width(value: number)\n    {\n        super.width = value;\n\n        this.updateSlider();\n    }\n\n    /** Gets width of a Slider. */\n    override get width(): number\n    {\n        return super.width;\n    }\n\n    /**\n     * Sets height of a Sliders 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 value - Height value.\n     */\n    override set height(value: number)\n    {\n        super.height = value;\n\n        this.updateSlider();\n    }\n\n    /** Gets height of a Slider. */\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        super.setSize(value, height);\n        this.updateSlider();\n    }\n}\n"],"names":[],"mappings":"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"}