import { ElementType } from 'react';
import type { HasRequiredProps, MergedProps, NodeElement, NodeInstance, NodeProps, PropsOf } from '@meonode/ui';
import { OverridableComponent, OverridableTypeMap, OverrideProps } from '@mui/material/OverridableComponent';
declare global {
    const UNDEFINED_VOID_ONLY: unique symbol;
}
export declare function isProbablyMuiTheme(obj: unknown): boolean;
type WithPolymorphic<TypeMap extends OverridableTypeMap, ComponentType extends ElementType> = Omit<TypeMap, 'props' | 'defaultComponent'> & {
    props: TypeMap['props'] & Partial<{
        component: ComponentType;
    }>;
    defaultComponent: TypeMap['defaultComponent'];
};
/**
 * Factory for Material-UI components.
 * @template InitialProperties Initial/Extra props baked in when creating the factory.
 * @template TypeMap The OverridableTypeMap of the MUI component.
 * @template DefaultComponent The default underlying element of the MUI component.
 */
type MuiNodeFactory<InitialProperties extends Record<string, any> = Record<string, any>, TypeMap extends OverridableTypeMap = OverridableTypeMap, DefaultComponent extends ElementType = TypeMap['defaultComponent']> = (<AdditionalProperties extends Record<string, any> = Record<string, any>, ComponentType extends ElementType = DefaultComponent>(props?: NodeProps<OverridableComponent<WithPolymorphic<TypeMap, ComponentType>>> & Omit<OverrideProps<WithPolymorphic<TypeMap, ComponentType>, ComponentType>, keyof NodeProps<OverridableComponent<WithPolymorphic<TypeMap, ComponentType>>>> & InitialProperties & AdditionalProperties) => NodeInstance<OverridableComponent<WithPolymorphic<TypeMap, ComponentType>>>) & {
    element: Element;
};
/**
 * Factory for generic React elements.
 * @template InitialProperties Initial/Extra props baked in when creating the factory.
 * @template Element The React element type.
 */
type GenericNodeFactory<Element extends NodeElement> = HasRequiredProps<PropsOf<Element>> extends true ? (<AdditionalProps extends Record<string, any> = Record<string, any>>(props: MergedProps<Element, AdditionalProps>) => NodeInstance<Element>) & {
    element: Element;
} : (<AdditionalProps extends Record<string, any> = Record<string, any>>(props?: MergedProps<Element, AdditionalProps>) => NodeInstance<Element>) & {
    element: Element;
};
/**
 * Create node factory for a Material-UI OverridableComponent.
 */
export default function createMuiNode<InitialProperties extends Record<string, any>, TypeMap extends OverridableTypeMap, DefaultComponent extends ElementType = TypeMap['defaultComponent']>(element: OverridableComponent<TypeMap>, initialProps?: Partial<NodeProps<OverridableComponent<WithPolymorphic<TypeMap, DefaultComponent>>> & OverrideProps<WithPolymorphic<TypeMap, DefaultComponent>, DefaultComponent>> & InitialProperties): MuiNodeFactory<InitialProperties, TypeMap, DefaultComponent>;
/**
 * Create node factory for a generic React element.
 */
export default function createMuiNode<InitialProperties extends Record<string, any>, Element extends ElementType>(element: Element, initialProps?: Partial<NodeProps<Element>> & InitialProperties): GenericNodeFactory<Element>;
export { createMuiNode };
//# sourceMappingURL=core.d.ts.map