import * as React from 'react';
export declare type ExtendableProps<ExtendedProps = {}, OverrideProps = {}> = OverrideProps & Omit<ExtendedProps, keyof OverrideProps>;
export declare type As<Props = any> = React.ElementType<Props>;
/**
 * Extract the props of a React element or component
 */
export declare type PropsOf<T extends As> = React.ComponentPropsWithoutRef<T> & {
    as?: As;
};
export declare type OmitCommonProps<Target, OmitAdditionalProps extends keyof any = never> = Omit<Target, 'transition' | 'as' | 'color' | OmitAdditionalProps>;
export declare type RightJoinProps<SourceProps extends object = {}, OverrideProps extends object = {}> = OmitCommonProps<SourceProps, keyof OverrideProps> & OverrideProps;
export declare type MergeWithAs<ComponentProps extends object, AsProps extends object, AdditionalProps extends object = {}, AsComponent extends As = As> = RightJoinProps<ComponentProps, AdditionalProps> & RightJoinProps<AsProps, AdditionalProps> & {
    as?: AsComponent;
};
export declare type ComponentWithAs<Component extends As, Props extends object = {}> = {
    <AsComponent extends As>(props: MergeWithAs<React.ComponentProps<Component>, React.ComponentProps<AsComponent>, Props, AsComponent>): JSX.Element;
};
export interface DSComponent<T extends As, P = {}> extends ComponentWithAs<T, {} & P> {
}
export declare type HTMLDSProps<T extends As> = Omit<PropsOf<T>, T extends 'svg' ? 'ref' | 'children' : 'ref'> & {} & {
    as?: As;
};
