import { LEFT, RIGHT } from '../const';
import { type NodeObj, type TagObj } from '../types/index';
/**
 * Server-side compatible layout data structure
 */
export interface SSRLayoutNode {
    id: string;
    topic: string;
    direction?: typeof LEFT | typeof RIGHT;
    style?: {
        fontSize?: string;
        color?: string;
        background?: string;
        fontWeight?: string;
    };
    children?: SSRLayoutNode[];
    tags?: (string | TagObj)[];
    icons?: string[];
    hyperLink?: string;
    expanded?: boolean;
    image?: {
        url: string;
        width: number;
        height: number;
        fit?: 'fill' | 'contain' | 'cover';
    };
    branchColor?: string;
    dangerouslySetInnerHTML?: string;
    note?: string;
}
/**
 * SSR Layout result structure
 */
export interface SSRLayoutResult {
    root: SSRLayoutNode;
    leftNodes: SSRLayoutNode[];
    rightNodes: SSRLayoutNode[];
    direction: number;
}
/**
 * SSR Layout options
 */
export interface SSRLayoutOptions {
    direction?: number;
    newTopicName?: string;
}
/**
 * Server-side compatible layout function for SSR
 * This function processes the mind map data structure without DOM manipulation
 *
 * @param nodeData - The root node data
 * @param options - Layout options including direction
 * @returns Structured layout data for server-side rendering
 */
export declare const layoutSSR: (nodeData: NodeObj, options?: SSRLayoutOptions) => SSRLayoutResult;
/**
 * Generate HTML string for server-side rendering
 * This function creates the HTML structure that would be generated by the DOM-based layout
 *
 * @param layoutResult - The result from layoutSSR function
 * @param options - Additional rendering options
 * @returns HTML string for server-side rendering
 */
export declare const renderSSRHTML: (layoutResult: SSRLayoutResult, options?: {
    className?: string;
    imageProxy?: (url: string) => string;
}) => string;
/**
 * Generate JSON data structure for client-side hydration
 * This can be used to pass the layout data to the client for hydration
 *
 * @param layoutResult - The result from layoutSSR function
 * @returns JSON-serializable data structure
 */
export declare const getSSRData: (layoutResult: SSRLayoutResult) => string;
/**
 * Hydration data structure for client-side initialization
 */
export interface HydrationData {
    nodeData: NodeObj;
    layoutResult: SSRLayoutResult;
    options: {
        direction: number;
        [key: string]: any;
    };
    timestamp: number;
}
/**
 * Generate complete hydration data including original nodeData
 */
export declare const getHydrationData: (nodeData: NodeObj, layoutResult: SSRLayoutResult, options?: any) => HydrationData;
