{"version":3,"file":"SlidingNumber.mjs","sources":["../../../src/utils/trackpad/SlidingNumber.ts"],"sourcesContent":["import ScrollSpring from './ScrollSpring';\n\nexport interface SlidingNumberOptions\n{\n    constrain?: boolean;\n    maxSpeed?: number;\n    ease?: ConstrainEase;\n}\n\nexport interface ConstrainEase\n{\n    done: boolean;\n    to: number;\n    start(speed: number, pos: number, to: number): void;\n    update(): number;\n}\n\nexport class SlidingNumber\n{\n    position = 0;\n    constrain = true;\n    min = 0; // the window width of the drag\n    max = 0; // the window width of the drag\n    maxSpeed = 400;\n\n    protected _ease: ConstrainEase;\n\n    protected _offset = 0;\n    protected _prev = 0;\n    protected _speed = 0;\n    protected _hasStopped: boolean = false;\n\n    protected _targetSpeed = 0;\n    protected _speedChecker = 0;\n    protected _grab = 0;\n    protected _activeEase: ConstrainEase | undefined;\n\n    constructor(options: SlidingNumberOptions = {})\n    {\n        this.constrain = options.constrain ?? true;\n        this.maxSpeed = options.maxSpeed ?? 400;\n        this._ease = options.ease ?? new ScrollSpring();\n    }\n\n    set value(n: number)\n    {\n        this._speed = 0;\n        this.position = n;\n    }\n\n    get value(): number\n    {\n        return this.position;\n    }\n\n    grab(offset: number): void\n    {\n        this._grab = offset;\n        this._offset = this.position - offset;\n        this._speedChecker = 0;\n        this._targetSpeed = this._speed = 0;\n        this._hasStopped = false;\n    }\n\n    hold(newPosition: number): void\n    {\n        this._speedChecker++;\n\n        this.position = newPosition + this._offset;\n\n        if (this._speedChecker > 1)\n        {\n            this._targetSpeed = this.position - this._prev;\n        }\n\n        this._speed += (this._targetSpeed - this._speed) / 2;\n\n        if (this._speed > this.maxSpeed) this._speed = this.maxSpeed;\n        else if (this._speed < -this.maxSpeed) this._speed = -this.maxSpeed;\n\n        this._prev = this.position;\n\n        if (this.constrain)\n        {\n            this._activeEase = undefined;\n\n            if (this.position > this.min)\n            {\n                this.position -= (this.position - this.min) / 1.5;\n            }\n            else if (this.position < this.max)\n            {\n                this.position += (this.max - this.position) / 1.5;\n            }\n        }\n    }\n\n    slide(instant = false): void\n    {\n        if (this._hasStopped) return;\n\n        if (this.constrain)\n        {\n            this._updateConstrain(instant);\n        }\n        else\n        {\n            this._updateDefault();\n        }\n    }\n\n    get moveAmount(): number\n    {\n        return -(this.position - this._offset - this._grab);\n    }\n\n    protected _updateDefault(): void\n    {\n        this._speed *= 0.9;\n        this.position += this._speed;\n\n        if ((this._speed < 0 ? this._speed * -1 : this._speed) < 0.01)\n        {\n            this._hasStopped = true;\n        }\n    }\n\n    protected _updateConstrain(instant = false): void\n    {\n        const max: number = this.max;\n\n        if (instant)\n        {\n            if (this.value > 0)\n            {\n                this.value = 0;\n            }\n\n            if (this.value > 0)\n            {\n                this.value = 0;\n            }\n\n            if (this.value < this.max)\n            {\n                this.value = this.max;\n            }\n\n            if (this.value < this.max)\n            {\n                this.value = this.max;\n            }\n        }\n        else if (this.position > this.min || this.position < max || this._activeEase)\n        {\n            if (!this._activeEase)\n            {\n                this._activeEase = this._ease;\n\n                if (this.position > this.min)\n                {\n                    this._activeEase.start(this._speed, this.position, this.min);\n                }\n                else\n                {\n                    this._activeEase.start(this._speed, this.position, max);\n                }\n            }\n\n            this.position = this._activeEase.update();\n\n            if (this._activeEase.done)\n            {\n                this.position = this._activeEase.to;\n                this._speed = 0;\n                this._activeEase = undefined;\n            }\n        }\n        else\n        {\n            this._updateDefault();\n        }\n    }\n}\n"],"names":[],"mappings":"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"}