interface ParticleConfig { x: number; y: number; vx?: number; vy?: number; size?: number; color?: string; maxLife?: number; gravity?: number; rotation?: number; rotationSpeed?: number; shape?: 'star' | 'rectangle' | 'circle' | 'snowflake' | 'bubble' | 'cross' | 'oval'; wobbleAmplitude?: number; wobbleSpeed?: number; windDrift?: number; image?: HTMLImageElement; initialScale?: number; scaleUpDuration?: number; } interface EffectOptions { colors?: string[]; particleCount?: number; particleSize?: number; gravity?: number; maxLife?: number; velocity?: number; throttle?: number; minMoveDistance?: number; } interface EngineOptions { canvas?: HTMLCanvasElement; container?: HTMLElement; } interface Effect { onMouseMove: (x: number, y: number) => Particle[]; throttle?: number; minMoveDistance?: number; } type EffectFunction = (x: number, y: number, options?: EffectOptions) => void; declare class Particle { x: number; y: number; vx: number; vy: number; size: number; color: string; life: number; maxLife: number; gravity: number; opacity: number; rotation: number; rotationSpeed: number; shape: 'star' | 'rectangle' | 'circle' | 'snowflake' | 'bubble' | 'cross' | 'oval'; wobbleAmplitude: number; wobbleSpeed: number; wobblePhase: number; windDrift: number; image?: HTMLImageElement; scale: number; initialScale: number; scaleUpDuration: number; constructor(config: ParticleConfig); update(): void; isDead(): boolean; draw(ctx: CanvasRenderingContext2D): void; } declare class ImageLoader { private static images; private static loading; static loadImage(src: string): Promise; static loadBubbles(basePath?: string): Promise; static loadSnowflakes(basePath?: string): Promise; static getRandomBubble(): HTMLImageElement | null; static getRandomSnowflake(): HTMLImageElement | null; static isLoaded(): boolean; static clear(): void; } export { type EffectOptions as E, ImageLoader as I, Particle as P, type Effect as a, type ParticleConfig as b, type EngineOptions as c, type EffectFunction as d };