Math
js
import { clamp, lerp, map } from '@studiometa/js-toolkit/utils';Values in, values out. For anything with a time dimension — damping, springs, inertia — see Motion.
Ranges
js
import { clamp, clamp01 } from '@studiometa/js-toolkit/utils';
clamp(15, 0, 10); // 10
clamp(-5, 0, 10); // 0
clamp01(1.5); // 1clamp
ts
clamp(value: number, min: number, max: number): numberKeep a value inside a range.
clamp01
ts
clamp01(value: number): numberKeep a value inside 0 → 1. It is the case that comes up in every progress calculation, so it has its own name and no arguments to get the wrong way round.
Interpolation
js
import { lerp, map } from '@studiometa/js-toolkit/utils';
lerp(0, 100, 0.5); // 50
map(5, 0, 10, 0, 100); // 50lerp
ts
lerp(min: number, max: number, ratio: number): numberInterpolate between two values by a 0 → 1 ratio.
map
ts
map(value: number, inputMin: number, inputMax: number, outputMin: number, outputMax: number): numberRe-scale one range onto another. It is lerp with the input range worked out for you.
Wrapping and folding
js
import { fold, wrap } from '@studiometa/js-toolkit/utils';
wrap(11, 0, 10); // 1 — it comes back round
fold(11, 0, 10); // 9 — it bounces backTwo behaviours, two names, no flag.
wrap
ts
wrap(value: number, min: number, max: number): numberA carousel that loops: past the end, it comes back round to the start.
fold
ts
fold(value: number, min: number, max: number): numberA value that reverses at the edges rather than looping.
Rounding and averaging
js
import { mean, round } from '@studiometa/js-toolkit/utils';
round(1.2345, 2); // 1.23
mean([1, 2, 3, 4]); // 2.5round
ts
round(value: number, decimals?: number): numberRound to a number of decimals.
mean
ts
mean(numbers: readonly number[]): numberThe arithmetic mean of a list.
Series
createRange
ts
createRange(min: number, max: number, step: number): number[]js
import { createRange } from '@studiometa/js-toolkit/utils';
createRange(0, 1, 0.25); // [0, 0.25, 0.5, 0.75, 1]