import type { ParamDefinition, ParamValues } from "@/params"; export interface Effect { id: string; type: string; params: ParamValues; enabled: boolean; } export type EffectUniformValue = number | number[]; export interface EffectPass { shader: string; uniforms: Record; } export interface EffectPassTemplate { shader: string; uniforms(params: { effectParams: ParamValues; width: number; height: number; }): Record; } export interface MotionOffset { scale: number; translateX: number; translateY: number; rotate?: number; } export interface EffectMotionConfig { evaluate(params: { effectParams: ParamValues; progress: number; }): MotionOffset; } export interface EffectRendererConfig { passes: EffectPassTemplate[]; buildPasses?: (params: { effectParams: ParamValues; width: number; height: number; }) => EffectPass[]; } export type EffectCategory = "lens" | "effect"; export interface EffectDefinition { type: string; name: string; keywords: string[]; category: EffectCategory; params: ParamDefinition[]; renderer: EffectRendererConfig; motion?: EffectMotionConfig; }