/**
 * window.__clipTree — hierarchical clip tree for Studio.
 *
 * Maps every timed element to a node so Studio can derive parent/child
 * relationships for inline timeline expansion. Read-only: timing edits go
 * through the host's normal save → reloadPreview path, not a DOM patch here.
 *
 * ponytail: intentionally minimal. Node carries only what consumers read
 * (id/parentId/children) plus the backing element. Add fields (label, kind,
 * absolute start) when a caller needs them.
 */
import type { RuntimeTimelineLike } from "./types";
export interface ClipNode {
    readonly id: string;
    readonly element: Element;
    readonly parentId: string | null;
    readonly children: readonly ClipNode[];
}
export interface ClipTree {
    readonly roots: readonly ClipNode[];
}
/**
 * Stable identity for a timed element, shared by __clipTree and __clipManifest
 * so the two id spaces align. Prefers the author `id`, then the generator's
 * `data-hf-id` (present on every generated element). Without the data-hf-id
 * fallback an id-less child (root index.html children use data-hf-id, not id)
 * gets a synthetic `__clip-N` in the tree but `null` in the manifest, so inline
 * timeline expansion can't join them and never expands.
 */
export declare function stableClipId(el: Element): string | null;
interface StartResolverLike {
    resolveStartForElement: (element: Element, fallback?: number) => number;
}
export declare function createClipTree(params: {
    startResolver: StartResolverLike;
    timelineRegistry: Record<string, RuntimeTimelineLike | undefined>;
    rootDuration: number;
}): ClipTree;
export {};
//# sourceMappingURL=clipTree.d.ts.map