@ozen-ui/kit
Version:
React component library
18 lines (17 loc) • 1.59 kB
TypeScript
import type { ComponentPropsWithRef, ElementType, ComponentPropsWithoutRef, ReactElement } from 'react';
declare const defaultElement = "div";
declare const defaultName = "as";
export type PolymorphicComponentPropsWithRef<Props, As extends ElementType, Name extends string = typeof defaultName> = Props & {
[key in Name]?: As;
} & Omit<ComponentPropsWithRef<As>, keyof Props>;
export type PolymorphicComponentPropsWithoutRef<Props, As extends ElementType, Name extends string = typeof defaultName> = Props & {
[key in Name]?: As;
} & Omit<ComponentPropsWithoutRef<As>, keyof Props>;
export type PolymorphicComponentRef<As extends ElementType> = ComponentPropsWithRef<As>['ref'];
type ComponentWithAs<Props, DefaultTag extends ElementType = typeof defaultElement, Name extends string = typeof defaultName> = <As extends ElementType = DefaultTag>(props: PolymorphicComponentPropsWithRef<Props, As, Name>) => ReactElement | null;
export type PolymorphicComponentWithRef<Props, As extends ElementType, Name extends string = typeof defaultName> = ComponentWithAs<Props, As, Name> & {
displayName?: string | undefined;
};
type ForwardRefWithAs<Props, Name extends string = typeof defaultName> = <As extends ElementType>(props: PolymorphicComponentPropsWithRef<Props, As, Name>, ref: PolymorphicComponentRef<As>) => ReactElement | null;
export declare function polymorphicComponentWithRef<Props, As extends ElementType = typeof defaultElement, Name extends string = typeof defaultName>(baseComponent: ForwardRefWithAs<Props, Name>): PolymorphicComponentWithRef<Props, As, Name>;
export {};