spring 
Get the next spring value using velocity and spring physics.
Usage 
js
import { spring } from '@studiometa/js-toolkit/utils';
let currentValue = 0;
let currentVelocity = 0;
const targetValue = 100;
[currentValue, currentVelocity] = spring(
  targetValue,
  currentValue,
  currentVelocity,
  0.1, // stiffness
  0.6, // damping
  1, // mass
  0.01, // precision
);
console.log(currentValue, currentVelocity);Parameters 
targetValue(number): The final valuecurrentValue(number): The current valuecurrentVelocity(number): The current velocitystiffness(number): The spring stiffness (or tension) factor, defaults to0.1damping(number): The damping factor (or friction) to reduce oscillation, defaults to0.6mass(number): The mass factor affecting acceleration, defaults to1precision(number): The precision used to calculate the latest value, defaults to1/1e4
Return value 
[number, number]: A tuple containing the next value and velocity
The function returns a tuple where:
- First element: The next position value
 - Second element: The next velocity (set to 
0when the target is reached) 
Physics explanation 
The spring function simulates a spring-damper system where:
- Stiffness: Controls how quickly the spring tries to reach the target (higher = faster, more rigid)
 - Damping: Reduces oscillation and controls energy loss (higher = less bouncy)
 - Mass: Affects how the object responds to forces (higher = slower acceleration, more inertia)
 - Precision: Determines when the spring is considered "at rest"
 
Types 
ts
function spring(
  targetValue: number,
  currentValue: number,
  currentVelocity: number,
  stiffness?: number,
  damping?: number,
  mass?: number,
  precision?: number,
): [number, number];Examples 
Animation loop 
js
import { spring } from '@studiometa/js-toolkit/utils';
let position = 0;
let velocity = 0;
const target = 300;
function animate() {
  [position, velocity] = spring(target, position, velocity);
  element.style.transform = `translateX(${position}px)`;
  // Continue animating if not at target
  if (position !== target) {
    requestAnimationFrame(animate);
  }
}
animate();