import type { SceneData, ParticleSystemConfig } from 'hz-particles'; import type { RefObject } from 'react'; import type { Vector3 } from 'three'; export interface HZFaithfulFXProps { /** Preset SceneData (loaded from JSON or inline). */ preset: SceneData; /** Moving emitter (e.g. a ball trail): the overlay reads this ref each frame. */ positionRef?: RefObject; /** Static emitter world position (used when `positionRef` is omitted). */ position?: [number, number, number]; /** Uniform scale applied to the preset (sizes, speeds, emission, trail). */ scale?: number; /** When false, a moving emitter pauses (no new trail). Default true. */ active?: boolean; /** `useFrame` priority. This component DRIVES rendering, so keep it > 0. Default 1. */ renderPriority?: number; /** Skip scene-depth occlusion (particles never hidden behind geometry). */ noOcclusion?: boolean; /** Respect the user's `prefers-reduced-motion` setting by freezing the FX. Default true. */ respectReducedMotion?: boolean; } /** * Engine-FAITHFUL R3F component: runs the real hz-particles overlay inline on three's * WebGPURenderer (shader shapes, noise, per-system blending, multi-pass bloom, faithful * trails) — what you design in the editor is exactly what renders. It DRIVES rendering * (its `useFrame` calls `gl.render` itself). If your host owns its own render loop, use * `initHzFxOverlay()` + `makeThreeSceneDepth()` directly instead. */ export declare function HZFaithfulFX(props: HZFaithfulFXProps): JSX.Element; export declare function scalePreset(preset: SceneData, scale: number): SceneData; export declare function computeParticleSize( config: ParticleSystemConfig, age: number, lifetime: number, index: number, ): number; export declare function computeParticleOpacity( config: ParticleSystemConfig, age: number, lifetime: number, index: number, ): number; export declare function particleHash(index: number): number; export interface HZTrailRibbonProps { positionRef: import('react').RefObject; duration?: number; width?: number; color?: [number, number, number]; maxPoints?: number; minDistance?: number; opacity?: number; blending?: import('three').Blending; visible?: boolean; } export declare function HZTrailRibbon(props: HZTrailRibbonProps): JSX.Element; export { fetchPreset } from 'hz-particles';