import type { ValueGenerator, FunctionValueGenerator, ColorGenerator, FunctionColorGenerator, Behavior, EmitterShape, RendererEmitterSettings, RotationGenerator, Vector3Generator } from 'three.quarks'; import type { ParticleSystem as ThreeQuarksParticleSystem, ParticleEmitter, ParticleSystemParameters, BurstParameters, RenderMode, BatchedRenderer } from 'three.quarks'; import type { BufferGeometry, Layers, Material } from 'three'; export type { ParticleSystemParameters, BurstParameters, RenderMode, BatchedRenderer, ParticleEmitter, Behavior, EmitterShape, ValueGenerator, FunctionValueGenerator, ColorGenerator, FunctionColorGenerator, }; export type FlexibleValue = number | [number, number] | ValueGenerator | FunctionValueGenerator; export type FlexibleColor = { r: number; g: number; b: number; a?: number; } | ColorGenerator | FunctionColorGenerator; export interface ParticleSystemProps { autoDestroy?: boolean; looping?: boolean; prewarm?: boolean; duration?: number; shape?: EmitterShape; emissionOverTime?: FlexibleValue; emissionOverDistance?: FlexibleValue; emissionBursts?: BurstParameters[]; startLife?: FlexibleValue; startSpeed?: FlexibleValue; startRotation?: FlexibleValue | RotationGenerator; startSize?: FlexibleValue | Vector3Generator; startColor?: FlexibleColor; startTileIndex?: ValueGenerator; startLength?: FlexibleValue; behaviors?: Behavior[]; instancingGeometry?: BufferGeometry; renderMode?: RenderMode; rendererEmitterSettings?: RendererEmitterSettings; speedFactor?: number; material?: Material; texture?: string; layers?: Layers; uTileCount?: number; vTileCount?: number; blendTiles?: boolean; softParticles?: boolean; softNearFade?: number; softFarFade?: number; renderOrder?: number; worldSpace?: boolean; onlyUsedByOther?: boolean; position?: [number, number, number]; rotation?: [number, number, number]; scale?: [number, number, number]; autoPlay?: boolean; } export interface ParticleSystemRef { system: ThreeQuarksParticleSystem; emitter: ParticleEmitter; pause: () => void; play: () => void; restart: () => void; stop: () => void; } export interface QuarksEffectProps { url: string; position?: [number, number, number]; rotation?: [number, number, number]; scale?: [number, number, number]; autoPlay?: boolean; } export interface QuarksEffectRef { group: import('three').Group; systems: ThreeQuarksParticleSystem[]; pause: () => void; play: () => void; restart: () => void; } export interface QuarksContextValue { batchedRenderer: BatchedRenderer; } export interface UseParticleSystemReturn extends ParticleSystemRef { } export interface UseQuarksEffectReturn extends QuarksEffectRef { }