import type { StringBuffer, HtmlEscaped, HtmlEscapedString } from '../../utils/html';
declare global {
    namespace jsx.JSX {
        interface IntrinsicElements {
            [tagName: string]: Record<string, any>;
        }
    }
}
declare type Child = string | number | JSXNode | Child[];
export declare class JSXNode implements HtmlEscaped {
    tag: string | Function;
    props: Record<string, any>;
    children: Child[];
    isEscaped: true;
    constructor(tag: string | Function, props: Record<string, any>, children: Child[]);
    toString(): string;
    toStringToBuffer(buffer: StringBuffer): void;
}
export { jsxFn as jsx };
declare const jsxFn: (tag: string | Function, props: Record<string, any>, ...children: (string | HtmlEscapedString)[]) => JSXNode;
declare type FC<T = Record<string, any>> = (props: T) => HtmlEscapedString;
export declare const memo: <T>(component: FC<T>, propsAreEqual?: (prevProps: Readonly<T>, nextProps: Readonly<T>) => boolean) => FC<T>;
export declare const Fragment: (props: {
    key?: string;
    children?: any;
}) => JSXNode;