{"version":3,"file":"Spring.mjs","sources":["../../../src/components/trackpad/Spring.ts"],"sourcesContent":["/**\n * Configuration options for the Spring physics simulation\n */\nexport interface SpringOptions {\n    /** Maximum velocity the spring can move. Default: 160 */\n    max?: number;\n    /** Damping factor to control oscillation decay. Default: 0.8 */\n    damp?: number;\n    /** Spring tension/stiffness factor. Default: 0.1 */\n    springiness?: number;\n}\n\n/**\n * Simple physics-based spring implementation for smooth animations.\n * Simulates spring motion with configurable tension, damping, and velocity limits.\n *\n * Features:\n * - Configurable spring physics parameters\n * - Velocity limiting to prevent extreme movements\n * - Simple API for position and target updates\n *\n * @example\n * ```typescript\n * // Create a spring with custom physics parameters\n * const spring = new Spring({\n *     max: 200,         // Maximum velocity\n *     damp: 0.7,        // Higher damping = less bounce\n *     springiness: 0.15 // Higher springiness = faster movement\n * });\n *\n * // Set initial position and target\n * spring.x = startPosition;\n * spring.tx = targetPosition;\n *\n * // Update loop\n * ticker.add(() => {\n *     spring.update();\n *     sprite.x = spring.x;\n * });\n * ```\n */\nexport class Spring {\n    /** Current position of the spring */\n    public x: number;\n    /** Current acceleration */\n    public ax: number;\n    /** Current velocity */\n    public dx: number;\n    /** Target position the spring is moving towards */\n    public tx: number;\n\n    /** Spring configuration options */\n    protected _options: Required<SpringOptions>;\n\n    constructor(options: SpringOptions = {}) {\n        this.x = 0;\n        this.ax = 0;\n        this.dx = 0;\n        this.tx = 0;\n\n        // add opts to object for shared opts.\n        this._options = options as Required<SpringOptions>;\n        this._options.max = options.max ?? 160;\n        this._options.damp = options.damp ?? 0.8;\n        this._options.springiness = options.springiness ?? 0.1;\n    }\n\n    /**\n     * Updates the spring physics simulation for one frame\n     * Calculates new position based on acceleration, velocity, and damping\n     */\n    update(): void {\n        this.ax = (this.tx - this.x) * this._options.springiness;\n\n        this.dx += this.ax;\n        this.dx *= this._options.damp;\n\n        if (this.dx < -this._options.max) this.dx = -this._options.max;\n        else if (this.dx > this._options.max) this.dx = this._options.max;\n\n        this.x += this.dx;\n    }\n}\n"],"names":[],"mappings":";;;AAyCO,MAAM,OAAO;AAAA,EAahB,YAAY,UAAyB,IAAI;AAXlC;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAGG;AAAA;AAGN,SAAK,IAAI;AACT,SAAK,KAAK;AACV,SAAK,KAAK;AACV,SAAK,KAAK;AAGV,SAAK,WAAW;AACX,SAAA,SAAS,MAAM,QAAQ,OAAO;AAC9B,SAAA,SAAS,OAAO,QAAQ,QAAQ;AAChC,SAAA,SAAS,cAAc,QAAQ,eAAe;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvD,SAAe;AACX,SAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,SAAS;AAE7C,SAAK,MAAM,KAAK;AACX,SAAA,MAAM,KAAK,SAAS;AAErB,QAAA,KAAK,KAAK,CAAC,KAAK,SAAS,IAAU,MAAA,KAAK,CAAC,KAAK,SAAS;AAAA,aAClD,KAAK,KAAK,KAAK,SAAS,IAAU,MAAA,KAAK,KAAK,SAAS;AAE9D,SAAK,KAAK,KAAK;AAAA,EAAA;AAEvB;"}