import type { Surface } from '../types.js';
export declare function totalMass(profile: Float32Array): number;
/** Interpolate bin centres so the collision edge matches the rendered silhouette. */
export declare function depthAt(surface: Pick<Surface, 'profile' | 'binSize' | 'width'> & {
    radius?: number;
}, x: number): number;
/** Return accepted mass; callers must keep or shed any surplus instead of losing it. */
export declare function deposit(profile: Float32Array, binSize: number, x: number, mass: number, maxDepth?: number, packing?: Float32Array): number;
/** Remove mass within an edge-local brush radius, nearest bins first. */
export declare function remove(profile: Float32Array, binSize: number, x: number, radius: number, mass?: number): number;
/** Pairwise diffusion conserves area and cannot overshoot even for isolated peaks. */
export declare function smooth(profile: Float32Array, strength: number, iterations?: number): void;
/** Remap bins on responsive width changes without changing the deposit's mass. */
export declare function resizeProfile(profile: Float32Array, length: number): Float32Array;
/** Explicit melting is an intentional mass sink, reported by its return value. */
export declare function melt(profile: Float32Array, binSize: number, rate: number, dt: number): number;
/** Actual rounded card shoulder below the horizontal top-edge datum. */
export declare function supportYAt(surface: Pick<Surface, 'width' | 'radius'>, x: number): number;
export declare function snowYAt(surface: Pick<Surface, 'width' | 'radius' | 'profile' | 'binSize'>, x: number): number;
//# sourceMappingURL=profiles.d.ts.map