Reactive mathematical utility functions and composables for Vue.js applications
npx @tessl/cli install tessl/npm-vueuse--math@13.9.0@vueuse/math provides reactive mathematical utility functions and composables for Vue.js applications. It includes reactive wrappers for basic math operations, aggregation functions, value control utilities, generic math operations, projection utilities, and logical operations - all designed to work seamlessly with Vue's reactivity system.
npm install @vueuse/mathimport { useAbs, useSum, useAverage, useClamp, useMath } from "@vueuse/math";For individual function imports:
import { useSum } from "@vueuse/math";
import { logicAnd, logicOr, logicNot } from "@vueuse/math";
import { createProjection, useProjection } from "@vueuse/math";import { ref } from "vue";
import { useSum, useAverage, useClamp, logicAnd } from "@vueuse/math";
// Reactive mathematical operations
const numbers = ref([1, 2, 3, 4, 5]);
const sum = useSum(numbers); // ComputedRef<number>
const average = useAverage(numbers); // ComputedRef<number>
// Value clamping
const value = ref(15);
const clamped = useClamp(value, 0, 10); // Keeps value between 0-10
// Logical operations
const condition1 = ref(true);
const condition2 = ref(false);
const result = logicAnd(condition1, condition2); // ComputedRef<boolean>
console.log(sum.value); // 15
console.log(average.value); // 3
console.log(clamped.value); // 10
console.log(result.value); // false@vueuse/math is built around Vue's reactivity system using several key patterns:
computed() for automatic reactivityMaybeRefOrGetter<T> types, allowing refs, getters, or plain values// From Vue
type MaybeRefOrGetter<T> = T | Ref<T> | ComputedRef<T> | (() => T);
type ComputedRef<T> = Readonly<Ref<Readonly<T>>>;
// From @vueuse/shared
type ReadonlyRefOrGetter<T> = MaybeRefOrGetter<T> | Readonly<Ref<T>>;
// Package-specific utility types
type MaybeComputedRefArgs<T> = MaybeRefOrGetter<T>[] | [MaybeRefOrGetter<MaybeRefOrGetter<T>[]>];Reactive wrappers for fundamental JavaScript Math methods including absolute value, ceiling, floor, rounding, and truncation.
function useAbs(value: MaybeRefOrGetter<number>): ComputedRef<number>;
function useCeil(value: MaybeRefOrGetter<number>): ComputedRef<number>;
function useFloor(value: MaybeRefOrGetter<number>): ComputedRef<number>;
function useRound(value: MaybeRefOrGetter<number>): ComputedRef<number>;
function useTrunc(value: MaybeRefOrGetter<number>): ComputedRef<number>;Functions for calculating sums, averages, minimums, and maximums from arrays or multiple arguments with full reactivity.
function useSum(array: MaybeRefOrGetter<MaybeRefOrGetter<number>[]>): ComputedRef<number>;
function useSum(...args: MaybeRefOrGetter<number>[]): ComputedRef<number>;
function useAverage(array: MaybeRefOrGetter<MaybeRefOrGetter<number>[]>): ComputedRef<number>;
function useAverage(...args: MaybeRefOrGetter<number>[]): ComputedRef<number>;
function useMax(array: MaybeRefOrGetter<MaybeRefOrGetter<number>[]>): ComputedRef<number>;
function useMax(...args: MaybeRefOrGetter<number>[]): ComputedRef<number>;
function useMin(array: MaybeRefOrGetter<MaybeRefOrGetter<number>[]>): ComputedRef<number>;
function useMin(...args: MaybeRefOrGetter<number>[]): ComputedRef<number>;Utilities for clamping values within bounds and controlling numerical precision with configurable rounding methods.
function useClamp(
value: ReadonlyRefOrGetter<number>,
min: MaybeRefOrGetter<number>,
max: MaybeRefOrGetter<number>
): ComputedRef<number>;
function useClamp(
value: MaybeRefOrGetter<number>,
min: MaybeRefOrGetter<number>,
max: MaybeRefOrGetter<number>
): Ref<number>;
function usePrecision(
value: MaybeRefOrGetter<number>,
digits: MaybeRefOrGetter<number>,
options?: MaybeRefOrGetter<UsePrecisionOptions>
): ComputedRef<number>;
interface UsePrecisionOptions {
math?: 'floor' | 'ceil' | 'round';
}Generic reactive wrapper that provides access to any Math method with full type safety and reactive behavior.
type UseMathKeys = keyof { [K in keyof Math as Math[K] extends (...args: any) => any ? K : never]: unknown };
function useMath<K extends keyof Math>(
key: K,
...args: ArgumentsType<Reactified<Math[K], true>>
): ReturnType<Reactified<Math[K], true>>;Functions for mapping values between different numerical ranges, useful for data visualization, animations, and value transformations.
type ProjectorFunction<F, T> = (input: F, from: readonly [F, F], to: readonly [T, T]) => T;
type UseProjection<F, T> = (input: MaybeRefOrGetter<F>) => ComputedRef<T>;
function createProjection(
fromDomain: MaybeRefOrGetter<readonly [number, number]>,
toDomain: MaybeRefOrGetter<readonly [number, number]>,
projector?: ProjectorFunction<number, number>
): UseProjection<number, number>;
function createGenericProjection<F = number, T = number>(
fromDomain: MaybeRefOrGetter<readonly [F, F]>,
toDomain: MaybeRefOrGetter<readonly [T, T]>,
projector: ProjectorFunction<F, T>
): UseProjection<F, T>;
function useProjection(
input: MaybeRefOrGetter<number>,
fromDomain: MaybeRefOrGetter<readonly [number, number]>,
toDomain: MaybeRefOrGetter<readonly [number, number]>,
projector?: ProjectorFunction<number, number>
): ComputedRef<number>;Reactive logical operations including AND, OR, and NOT with support for multiple arguments and aliased exports.
function logicAnd(...args: MaybeRefOrGetter<any>[]): ComputedRef<boolean>;
function logicOr(...args: MaybeRefOrGetter<any>[]): ComputedRef<boolean>;
function logicNot(v: MaybeRefOrGetter<any>): ComputedRef<boolean>;
// Aliases
const and: typeof logicAnd;
const or: typeof logicOr;
const not: typeof logicNot;