import { BaseNode } from "./base-node"; import type { Effect, EffectPass } from "@/lib/effects/types"; import type { Mask } from "@/lib/masks/types"; import type { BlendMode, Transform } from "@/lib/rendering"; import type { RetimeConfig, VisualElement } from "@/lib/timeline"; export interface VisualNodeParams { duration: number; timeOffset: number; trimStart: number; trimEnd: number; retime?: RetimeConfig; transform: Transform; animations?: VisualElement["animations"]; opacity: number; blendMode?: BlendMode; effects?: Effect[]; masks?: Mask[]; } export interface ResolvedVisualNodeState { localTime: number; transform: Transform; opacity: number; effectPasses: EffectPass[][]; } export interface ResolvedVisualSourceNodeState extends ResolvedVisualNodeState { source: CanvasImageSource; sourceWidth: number; sourceHeight: number; } export abstract class VisualNode< Params extends VisualNodeParams = VisualNodeParams, Resolved extends ResolvedVisualNodeState = ResolvedVisualNodeState, > extends BaseNode {}