Vize

math

Number kept inside [min, max].

Package @vizejs/composable/math
Own the source vize lib pull composable:math
Runtime exports useClamp, useRound, useProjection
Gzip budget 1536 B

Usage

import { useClamp, useRound, useProjection } from "@vizejs/composable/math";

Runtime contract

Utility Category Stability SSR Hydration Cleanup Targets Host globals Uses
useClamp state experimental safe stable none web, server, worker, native, desktop, terminal — —
useRound state experimental safe stable none web, server, worker, native, desktop, terminal — —
useProjection state experimental safe stable none web, server, worker, native, desktop, terminal — —

API

useClamp

Number kept inside [min, max]. A writable source (a number or a writable ref) yields a writable ref whose reads and writes are clamped; writes go through to the source ref. A getter or computed source yields a readonly computed. Bounds are reactive. Pure derived state: SSR-safe and nothing to dispose.

function useClamp( value: (() => number) | ComputedRef<number>, min: MaybeRefOrGetter<number>, max: MaybeRefOrGetter<number>, ): ComputedRef<number>
const volume = useClamp(50, 0, 100);
volume.value = 150; // 100
const progress = useClamp(() => loaded.value / total.value, 0, 1);

useClamp

function useClamp( value: number | Ref<number>, min: MaybeRefOrGetter<number>, max: MaybeRefOrGetter<number>, ): WritableComputedRef<number>

useClamp

function useClamp( value: MaybeRefOrGetter<number>, min: MaybeRefOrGetter<number>, max: MaybeRefOrGetter<number>, ): ComputedRef<number> | WritableComputedRef<number>

useRound

Reactive rounding with decimal precision. Uses exponent shifting instead of multiplying by powers of ten, so values such as 1.005 round to 1.01 at two decimals. Pure derived state.

function useRound( value: MaybeRefOrGetter<number>, options: UseRoundOptions = {}, ): ComputedRef<number>
const price = useRound(rawPrice, { precision: 2 });

useProjection

Linearly map a value from one domain to another. Domains are reactive tuples and may be reversed ([100, 0]). A degenerate source domain maps everything to the target start. Pure derived state.

function useProjection( value: MaybeRefOrGetter<number>, from: MaybeRefOrGetter<ProjectionDomain>, to: MaybeRefOrGetter<ProjectionDomain>, options: UseProjectionOptions = {}, ): ComputedRef<number>
const percent = useProjection(scrollY, () => [0, maxScroll.value], [0, 100], { clamp: true });

Types

UseRoundOptions

Options for useRound.

Member Type Description
precision? MaybeRefOrGetter<number> Decimal places to keep; negative values round to tens, hundreds, … Reactive.
method? RoundingMethod Rounding strategy.

UseProjectionOptions

Options for useProjection.

Member Type Description
clamp? boolean Clamp the result into the target domain.