export interface Dot { x: number; y: number; z: number; r: number; /** Ink value: 0 = darkest ink on paper. Mirrored on dark themes. */ white: number; a?: number; } export interface Line { x1: number; y1: number; x2: number; y2: number; white: number; a?: number; w: number; } export type InkColor = readonly [number, number, number]; export type Projector = (x: number, y: number, z: number) => [number, number, number]; export declare function lerp(a: number, b: number, amount: number): number; export declare function frac(value: number): number; export declare function vnoise(x: number, y: number): number; /** Deterministic hash in [0, 1). */ export declare function hashD(a: number, b: number): number; /** Stable directions on a unit sphere (Fibonacci lattice). */ export declare function fibDir(i: number, n: number): [number, number, number]; /** Shortest signed angular distance, wrapped to (-pi, pi]. */ export declare function angleDelta(a: number, b: number): number; /** Shared spin + tilt + orthographic projection. */ export declare function makeProj(yaw: number, tilt: number, cx: number, cy: number, scale: number): Projector; /** Paint dots far-to-near with theme-aware grayscale or a custom ink color. */ export declare function paint(ctx: CanvasRenderingContext2D, dots: Dot[], dark: boolean, rMin?: number, ink?: InkColor): void; export declare function paintLines(ctx: CanvasRenderingContext2D, lines: Line[], dark: boolean, ink?: InkColor): void; export declare function radiusScale(size: number, pow: number): number;