import type { PartialDeep, Promisable } from "type-fest";
import type { BaseType as D3BaseType } from "d3";
type WindowLike = {
    document: Document & {
        body: HTMLElement;
    };
} & Record<string, unknown>;
type DomWithBody = {
    window: WindowLike;
};
type DomProvider<T extends DomWithBody> = new (html: string) => T;
type PrepareSvgServerSideRendererParams<T extends DomWithBody> = {
    domProvider: DomProvider<T>;
    d3Instance: typeof import("d3");
};
type D3Selection<T extends D3BaseType> = import("d3").Selection<T, unknown, null, undefined>;
type PrepareSvgServerSideRender<T extends DomWithBody> = ({ currentDom, d3Selection, svgNode, }: {
    currentDom: T;
    d3Selection: D3Selection<SVGSVGElement>;
    svgNode: SVGSVGElement;
}) => Promisable<void> | Promisable<string>;
type NumericString = `${number}` | `${number}e${number}` | `${number}E${number}`;
type SvgViewbox = `${NumericString},${NumericString},${NumericString},${NumericString}` | `${NumericString} ${NumericString} ${NumericString} ${NumericString}`;
type PrepareSvgServerSideRenderOptions = PartialDeep<{
    svg: {
        width: number;
        height: number;
        viewBox: SvgViewbox;
    };
    safe: boolean;
    asBase64: boolean;
}>;
export declare function prepareSvgServerSideRenderer<T extends DomWithBody>({ d3Instance, domProvider, }: PrepareSvgServerSideRendererParams<T>): {
    render: (fn: PrepareSvgServerSideRender<T>, options?: PrepareSvgServerSideRenderOptions) => Promise<string>;
};
export {};
