mirror of
https://github.com/nextui-org/nextui.git
synced 2025-12-08 19:26:11 +00:00
79 lines
1.9 KiB
TypeScript
79 lines
1.9 KiB
TypeScript
/**
|
|
* Part of this code is taken from @chakra-ui/system
|
|
*/
|
|
|
|
import {forwardRef as baseForwardRef} from "react";
|
|
|
|
import {CSS} from "./stitches.config";
|
|
|
|
export type As<Props = any> = React.ElementType<Props>;
|
|
|
|
export type OmitCommonProps<Target, OmitAdditionalProps extends keyof any = never> = Omit<
|
|
Target,
|
|
"transition" | "as" | "color" | OmitAdditionalProps
|
|
>;
|
|
|
|
export type RightJoinProps<
|
|
SourceProps extends object = {},
|
|
OverrideProps extends object = {},
|
|
> = OmitCommonProps<SourceProps, keyof OverrideProps> & OverrideProps;
|
|
|
|
export type MergeWithAs<
|
|
ComponentProps extends object,
|
|
AsProps extends object,
|
|
AdditionalProps extends object = {},
|
|
AsComponent extends As = As,
|
|
> = RightJoinProps<ComponentProps, AdditionalProps> &
|
|
RightJoinProps<AsProps, AdditionalProps> & {
|
|
as?: AsComponent;
|
|
};
|
|
|
|
export type ComponentWithAs<Component extends As, Props extends object = {}> = {
|
|
<AsComponent extends As = Component>(
|
|
props: MergeWithAs<
|
|
React.ComponentProps<Component>,
|
|
React.ComponentProps<AsComponent>,
|
|
Props,
|
|
AsComponent
|
|
>,
|
|
): JSX.Element;
|
|
|
|
displayName?: string;
|
|
propTypes?: React.WeakValidationMap<any>;
|
|
contextTypes?: React.ValidationMap<any>;
|
|
defaultProps?: Partial<any>;
|
|
id?: string;
|
|
};
|
|
|
|
/**
|
|
* Extract the props of a React element or component
|
|
*/
|
|
export type PropsOf<T extends As> = React.ComponentPropsWithoutRef<T> & {
|
|
as?: As;
|
|
};
|
|
|
|
export type HTMLNextUIProps<T extends As, K extends object = {}> = Omit<
|
|
Omit<PropsOf<T>, "ref"> & {
|
|
as?: As;
|
|
css?: CSS;
|
|
},
|
|
keyof K
|
|
> &
|
|
K;
|
|
|
|
export function forwardRef<
|
|
Props extends object,
|
|
Component extends As,
|
|
CompoundComponents extends object = {},
|
|
>(
|
|
component: React.ForwardRefRenderFunction<
|
|
any,
|
|
RightJoinProps<PropsOf<Component>, Props> & {
|
|
as?: As;
|
|
}
|
|
>,
|
|
) {
|
|
return baseForwardRef(component) as unknown as ComponentWithAs<Component, Props> &
|
|
CompoundComponents;
|
|
}
|