interface SourceMutationTarget {
    id?: string | null;
    hfId?: string;
    selector?: string;
    selectorIndex?: number;
}
declare function removeElementFromHtml(source: string, target: SourceMutationTarget): string;
declare function isHTMLElement(el: Node): el is HTMLElement;
interface PatchOperation {
    type: "inline-style" | "attribute" | "html-attribute" | "text-content" | "rich-text";
    property: string;
    value: string | null;
    childSelector?: string;
    childIndex?: number;
}
declare function patchElementInHtml(source: string, target: SourceMutationTarget, operations: PatchOperation[]): {
    html: string;
    matched: boolean;
};
declare function probeElementInSource(source: string, target: SourceMutationTarget): boolean;
interface SplitElementResult {
    html: string;
    matched: boolean;
    newId: string | null;
}
declare function splitElementInHtml(source: string, target: SourceMutationTarget, splitTime: number, newId: string, fallbackTiming?: {
    start: number;
    duration: number;
    playbackStart?: number;
    playbackRate?: number;
    stampPlaybackStart?: boolean;
}): SplitElementResult;
interface WrapElementsResult {
    html: string;
    matched: boolean;
    groupId: string | null;
    error?: string;
}
interface UnwrapElementsResult {
    html: string;
    unwrapped: boolean;
    /** The unwrapped wrapper's id, so callers can strip GSAP that targeted it
     *  (the wrapper is gone; a leftover `gsap.set("#id")` would throw at runtime). */
    unwrappedGroupId?: string;
    /** Members (id'd children) with their absolute layout centres (post un-rebase),
     *  so the caller can BAKE the group's GSAP transform into each member before
     *  stripping it — otherwise the group's moves are lost on ungroup. */
    members?: Array<{
        id: string;
        cx: number;
        cy: number;
    }>;
    /** The wrapper's layout centre — the pivot for baking the group's rotation/scale. */
    groupCenter?: {
        cx: number;
        cy: number;
    };
}
interface ElementRebase {
    target: SourceMutationTarget;
    left: number;
    top: number;
}
declare function wrapElementsInHtml(source: string, targets: SourceMutationTarget[], groupId: string, bbox: {
    left: number;
    top: number;
    width: number;
    height: number;
}, rebases: ElementRebase[]): WrapElementsResult;
declare function unwrapElementsFromHtml(source: string, groupTarget: SourceMutationTarget): UnwrapElementsResult;

export { type ElementRebase, type PatchOperation, type SourceMutationTarget, type SplitElementResult, type UnwrapElementsResult, type WrapElementsResult, isHTMLElement, patchElementInHtml, probeElementInSource, removeElementFromHtml, splitElementInHtml, unwrapElementsFromHtml, wrapElementsInHtml };
