/**
 * Editor position edits (SDK `moveElement`) applied at render time.
 *
 * The SDK's `moveElement` writes `data-x` / `data-y` plus a captured baseline
 * (`data-hf-edit-base-x` / `data-hf-edit-base-y` — the values before the first
 * edit). The runtime renders the edit as the DELTA between the two, via the
 * independent CSS `translate` longhand, so it composes additively with any
 * position the composition itself produces (GSAP tweens, `tl.set`, CSS).
 *
 * Why `translate` and why after timeline bind: GSAP folds a `translate` that
 * is present when it FIRST parses an element into its cached transform (and
 * an absolute tween then discards it on the animated axis — the per-axis loss
 * bug). A `translate` set AFTER that parse is never read, cleared, or baked
 * by GSAP 3.x on subsequent seeks, so a single application at bind time holds
 * for the whole timeline. Before the first apply, the element's transform
 * parse is primed (gsap.getProperty) so tweens and positioned set()s that
 * first RENDER later reuse the cache instead of folding the edit. Known
 * limitation: if GSAP itself loads only after the apply ran, a later tween's
 * first parse still folds the edit (the fold guard then skips re-apply and
 * emits position_edit_fold_skipped instead of double-applying).
 */
export declare const EDIT_BASE_X_ATTR = "data-hf-edit-base-x";
export declare const EDIT_BASE_Y_ATTR = "data-hf-edit-base-y";
export declare const EDIT_ORIGINAL_TRANSLATE_ATTR = "data-hf-edit-original-translate";
/**
 * Elements a position edit can apply to: HTML elements AND SVG graphics (authored `<text>` labels,
 * shapes, groups). Both expose `.style` and honor the CSS `translate` longhand in modern Chrome, so
 * the same delta→translate compose logic works for either. (SVG was previously excluded by an
 * `instanceof HTMLElement`-only guard, which silently dropped every move on an SVG element.)
 */
type StylableElement = HTMLElement | SVGElement;
/** Compose the edit delta with the element's pre-edit translate value. */
export declare const composeTranslate: (original: string, x: string, y: string) => string;
/** The element's effective translate: inline if set, computed otherwise ("" = none). */
export declare const readCurrentTranslate: (el: StylableElement) => string;
/**
 * Apply one element's position edit. Idempotent — the pre-edit translate is
 * captured exactly once (into EDIT_ORIGINAL_TRANSLATE_ATTR, empty string
 * meaning "none") on first application, and every application recomputes from
 * that baseline.
 *
 * `force` re-applies even when the previously written translate was clobbered
 * externally — used by editor commits, where the current inline translate is
 * the draft-composed one and must be overwritten.
 */
export declare function applyPositionEditToElement(el: StylableElement, opts?: {
    force?: boolean;
}): void;
/**
 * Apply all pending position edits in the document. Returns the number of
 * elements updated.
 *
 * Runs the RESET path first: an element still carrying the captured pre-edit
 * translate marker (EDIT_ORIGINAL_TRANSLATE_ATTR) but NO base attrs had its
 * edit undone — the attrs were removed, so it no longer matches the apply
 * selector, and the inline translate written by an earlier application would
 * stay orphaned (the element visually displaced after its edit was reverted).
 * Restore the captured translate and clear the marker so a later redo
 * re-captures a clean baseline.
 *
 * `force` forwards to applyPositionEditToElement: re-apply even when the
 * previously written translate was clobbered externally. Hosts replaying
 * undo/redo should force — after a reset the fold-guard's bookkeeping no
 * longer matches and the non-forced path would silently skip the redo.
 */
export declare function applyPositionEdits(doc: Document, opts?: {
    force?: boolean;
}): number;
/** Reapply SDK position edits after every render seek, including late-bound seeks. */
export declare function installPositionEditsSeekReapply(win: Window & typeof globalThis): void;
export {};
//# sourceMappingURL=positionEdits.d.ts.map