export type WaterPresetName = 'pool' | 'calm' | 'ocean-swell' | 'storm'; export interface WaterPresetWaveComponent { readonly kx: number; readonly kz: number; readonly amplitude: number; readonly phase: number; } export interface WaterPresetWaves { readonly energy: number; readonly components: readonly WaterPresetWaveComponent[]; readonly nudgeRate: number; readonly seedScale: number; } export interface WaterPresetMaterial { readonly stiffness: number; readonly viscosity: number; } export interface WaterPresetBoundary { readonly mode: 'reflective' | 'absorbing'; readonly floorFriction: number; readonly velocityDamping: number; } export interface WaterPresetSolver { readonly substeps: number; readonly maxVelocity: number; } export interface WaterPresetSeed { readonly profile: boolean; readonly waves: boolean; } export interface WaterPreset { readonly gravity: number; readonly waves: TWaves; readonly material: WaterPresetMaterial; readonly boundary: WaterPresetBoundary; readonly solver: WaterPresetSolver; readonly seed: WaterPresetSeed; } export interface WaterPresetMap { readonly pool: WaterPreset; readonly calm: WaterPreset; readonly 'ocean-swell': WaterPreset; readonly storm: WaterPreset; } /** * Named {@link WaterVolume} tuning presets. Every preset resolves to the same * option groups the constructor accepts; explicit constructor options win * over the preset. The `ocean-swell` values are the shipped gallery * calibration guarded by the `example-ocean-calm` regression gate — treat * them as measured constants, not suggestions. * * @short Calibrated WaterVolume presets: pool, calm, ocean-swell, storm. * @category Simulation * @tags WebGPU, Water, Ocean */ export declare const WATER_PRESETS: Readonly; /** * Resolve a preset by name. * * @param {string} name One of `pool`, `calm`, `ocean-swell`, `storm`. * @returns {Object} The frozen preset option groups. */ export declare function resolveWaterPreset(name: TName): WaterPresetMap[TName];