import * as React from 'react';
import type { ComponentRenderFn } from '../utils/types.js';
import { GenericHTMLProps } from '../utils/types.js';
/**
 * Returns an object with a `renderElement` function that renders a Base UI element.
 */
export declare function useRender<State extends Record<string, unknown>, RenderedElementType extends Element>(params: useRender.Parameters<State, RenderedElementType>): {
    renderElement: () => React.ReactElement<Record<string, unknown>, string | React.JSXElementConstructor<any>>;
};
export declare namespace useRender {
    type RenderProp<State = Record<string, unknown>> = ComponentRenderFn<React.HTMLAttributes<any>, State> | React.ReactElement<Record<string, unknown>>;
    type ElementProps<ElementType extends React.ElementType> = React.ComponentPropsWithRef<ElementType>;
    type ComponentProps<ElementType extends React.ElementType, State = {}, RenderFunctionProps = GenericHTMLProps> = React.ComponentPropsWithRef<ElementType> & {
        /**
         * Allows you to replace the component’s HTML element
         * with a different tag, or compose it with another component.
         *
         * Accepts a `ReactElement` or a function that returns the element to render.
         */
        render?: ComponentRenderFn<RenderFunctionProps, State> | React.ReactElement<Record<string, unknown>>;
    };
    interface Parameters<State, RenderedElementType extends Element> {
        /**
         * The React element or a function that returns one to override the default element.
         */
        render: RenderProp<State>;
        /**
         * Refs to be merged together to access the rendered DOM element.
         */
        refs?: React.Ref<RenderedElementType>[];
        /**
         * The state of the component, passed as the second argument to the `render` callback.
         */
        state?: State;
        /**
         * Props to be spread on the rendered element.
         * They are merged with the internal props of the component, so that event handlers
         * are merged, `className` strings and `style` properties are joined, while other external props overwrite the
         * internal ones.
         */
        props?: Record<string, unknown> & {
            ref?: React.Ref<RenderedElementType>;
        };
    }
}
