import React, { FC, ComponentType, ReactElement } from 'react';
export declare type RenderOverride<T = any, U = T> = (props: T, component: React.ComponentType<U>) => ReactElement | null;
/**
 * Реакт-хук для создания компонента с возможностью переопределения.
 *
 * @example
 * const ElementOriginal = ({ children }) => <div>{children}</div>
 *
 * const MyComponent = ({ renderElement }) => {
 *   const Element = useRenderOverride(ElementOriginal, renderElement)
 *   return <Element />
 * }
 */
export declare function useRenderOverride<T>(component: ComponentType<T>, render?: RenderOverride<T>): ComponentType<T>;
export declare type RenderOverrideProviderProps = {
    children: (component: ComponentType<any>) => ReactElement;
    component: ComponentType<any>;
    render?: RenderOverride;
};
/**
 * Реакт-провайдер для создания компонента с возможностью переопределения.
 *
 * @example
 * const ElementOriginal = ({ children }) => <div>{children}</div>
 *
 * const MyComponent = ({ renderElement }) => {
 *   <RenderOverrideProvider component={ElementOriginal} render={renderElement}>
 *     {(Element) => <Element />}
 *   </RenderOverrideProvider>
 * }
 */
export declare const RenderOverrideProvider: FC<RenderOverrideProviderProps>;
export declare type MultiRenderOverrideProviderProps = {
    components: [ComponentType<any>, RenderOverride<any> | undefined][];
    children: (...components: ComponentType<any>[]) => ReactElement;
};
/**
 * Реакт-провайдер для создания нескольких компонентов с возможностью переопределения.
 *
 * @example
 * const ElementOriginal1 = ({ children }) => <div>{children}</div>
 * const ElementOriginal2 = ({ children }) => <div>{children}</div>
 *
 * const MyComponent = ({ renderElement1, renderElement2 }) => {
 *   <MultiRenderOverrideProvider
 *     components={[
 *       [ElementOriginal2, renderElement1],
 *       [ElementOriginal2, renderElement2],
 *     ]}
 *   >
 *     {(Element1, Element2) => (
 *       <>
 *         <Element1 />
 *         <Element2 />
 *       </>
 *     )}
 *   </MultiRenderOverrideProvider>
 * }
 */
export declare const MultiRenderOverrideProvider: FC<MultiRenderOverrideProviderProps>;
