import type { ColorKeyframe, CurveKeyframe, ParticleCurve } from '@flighthq/types/contract'; /** Bake an RGB function f:[0,1]→[r,g,b] into an interleaved curve LUT (length N×3). */ export declare function buildParticleColorCurve(f: (t: number) => readonly [number, number, number], samples?: number): number[]; /** Bake a scalar function f:[0,1]→value into an `samples`-entry curve LUT. */ export declare function buildParticleCurve(f: (t: number) => number, samples?: number): number[]; /** Linearly interpolate two sRGB colors through HSV space, writing into `out[offset..+3]`. * Used by the `colorInterpolation: 'hsv'` path in updateParticleEmitter2D. */ export declare function lerpHsvDirect(out: Float32Array | number[], offset: number, r0: number, g0: number, b0: number, r1: number, g1: number, b1: number, t: number): void; /** Interpolate through HSV space using per-particle birth/death color arrays. */ export declare function lerpHsvInPlace(colorsOut: Float32Array | number[], offset: number, birth: Float32Array, death: Float32Array, t: number): void; /** Bake a piecewise-linear RGB timeline (e.g. an imported color gradient) into a * uniform interleaved LUT (length N×3). */ export declare function particleColorCurveFromKeyframes(keys: ReadonlyArray, samples?: number): number[]; /** Convert a baked interleaved RGB curve LUT (length N×3) back into color * keyframes (one per sample, at uniform times). */ export declare function particleColorCurveToKeyframes(lut: ParticleCurve): ColorKeyframe[]; /** Bake a piecewise-linear scalar timeline (e.g. an imported alpha-over-lifetime * curve) into a uniform LUT. Keyframes need not be sorted; times are clamped to * the [first, last] range. */ export declare function particleCurveFromKeyframes(keys: ReadonlyArray, samples?: number): number[]; /** Convert a baked scalar curve LUT back into keyframes (one per sample, at * uniform times). The inverse of {@link particleCurveFromKeyframes} for the common case * of a 33-sample LUT — used by format serializers to round-trip authored curves. */ export declare function particleCurveToKeyframes(lut: ParticleCurve): CurveKeyframe[]; /** Sample an interleaved RGB curve (length N×3) at t∈[0,1], writing the three * channels into `out` starting at `offset`. */ export declare function sampleParticleColorCurve(out: { [index: number]: number; }, offset: number, lut: ParticleCurve, t: number): void; /** Sample a uniformly-spaced scalar curve at t∈[0,1] with linear interpolation. * Out-of-range t is clamped. An empty curve samples to 0; a single value is * returned as-is. */ export declare function sampleParticleCurve(lut: ParticleCurve, t: number): number; //# sourceMappingURL=curve.d.ts.map