/** * Parse/serialize an SVG path `d` into an editable cubic-Bézier anchor model * used by the node editor. Every segment is normalized to a cubic so each * anchor has at most an incoming + outgoing control handle — the same mental * model as the motion-path editor. * * Supported input commands: M m L l H h V v C c S s Q q T t Z z. * Arcs (A/a) are not supported; `parsePath` returns null so the caller can * keep node-editing disabled for those paths. */ export interface Anchor { x: number; y: number; /** Incoming control point (absolute). Undefined = straight into anchor. */ cin?: { x: number; y: number; }; /** Outgoing control point (absolute). */ cout?: { x: number; y: number; }; } export interface SubPath { anchors: Anchor[]; closed: boolean; } export declare function parsePath(d: string): SubPath[] | null; /** * Reduce anchor count via Ramer–Douglas–Peucker on anchor positions. Used to * make a dense freehand outline node-editable (otherwise it has hundreds of * handles). Kept anchors retain their Bézier handles; dropped ones become * straight. `tolerance` is in the path's own coordinate units. */ export declare function simplifyAnchors(subs: SubPath[], tolerance: number): SubPath[]; export declare function serializePath(subs: SubPath[]): string;