import { PdfBaseElement, PdfDocument, PdfTextNode, PdfComment, PdfFragment } from './elements';

type Props = [any[], [string, any][], any[]];
/**
 * PDF Browser DOM API class
 * Manages PDF element creation, insertion, and property updates
 */
export declare class PdfBrowserDOMApi {
    private _document;
    private _onUpdate;
    toString(): string;
    /**
     * Set the document root
     */
    setDocument(doc: PdfDocument): void;
    /**
     * Get the document root
     */
    getDocument(): PdfDocument | null;
    /**
     * Set callback for document updates
     */
    setOnUpdate(callback: () => void): void;
    /**
     * Notify that the document structure has changed
     */
    private notifyUpdate;
    /**
     * Check if a value is a PDF node
     */
    isNode(node: unknown): node is PdfBaseElement;
    /**
     * Get parent of a node
     */
    parent(node: PdfBaseElement | null): PdfBaseElement | null;
    /**
     * Clear all children from a node
     */
    clearChildren(node: PdfBaseElement | null): void;
    /**
     * Add event listener (no-op for PDF, but required by interface)
     */
    addEventListener(_node: PdfBaseElement, _eventName: string, _fn: EventListener): undefined;
    /**
     * Create a new element by tag name
     */
    element(tag: string, _isSVG?: boolean, _anchor?: boolean, _props?: Props): PdfBaseElement | null;
    /**
     * Insert a child into a parent
     */
    insert(parent: PdfBaseElement | null, child: PdfBaseElement | null, _anchor?: PdfBaseElement | null): void;
    /**
     * Destroy/remove a node from the tree
     */
    destroy(node: PdfBaseElement | null): void;
    /**
     * Set an attribute on a node (delegates to prop)
     */
    attr(node: PdfBaseElement | null, name: string, value: any): void;
    /**
     * Set a property on a node
     */
    prop(node: PdfBaseElement | null, name: string, value: any): void;
    /**
     * Apply style object to a node
     */
    private applyStyle;
    /**
     * Create a comment node
     */
    comment(text?: string): PdfComment;
    /**
     * Create a text node
     */
    text(text: string | number): PdfTextNode;
    /**
     * Update text content of a text node
     */
    textContent(node: PdfTextNode | null, text: string): void;
    /**
     * Create a fragment node
     */
    fragment(): PdfFragment;
    /**
     * Serialize the document to JSON
     */
    toJSON(): Record<string, any> | null;
}
/**
 * Create a new PDF API instance
 */
export declare function createPdfApi(): PdfBrowserDOMApi;
export {};
