import type { Data } from "@puckeditor/core"; /** Block identity for stable overrides (Puck `props.id`). */ export type SemanticOp = { op: "setRootProp"; propPath: string; value: unknown; } | { op: "removeRootProp"; propPath: string; } | { op: "setProp"; blockId: string; propPath: string; value: unknown; } | { op: "removeProp"; blockId: string; propPath: string; } | { op: "moveBlock"; blockId: string; /** `"content"` or a zone name */ slot: string; /** Previous sibling id in that slot; `null` = first */ afterId: string | null; } | { op: "addBlock"; block: { type: string; props: Record; }; slot: string; afterId: string | null; } | { op: "removeBlock"; blockId: string; }; /** * Apply semantic ops in order on a deep clone of `base`. */ export declare function applySemanticOps(base: Data, ops: SemanticOp[]): Data; /** * Compute semantic ops to transform `canonical` into `edited`. * Blocks without `props.id` are skipped for structural/prop ops (use template ids in Puck). */ export declare function computeSemanticOps(canonical: Data, edited: Data): SemanticOp[];