-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
types.ts
81 lines (69 loc) 路 2.32 KB
/
types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**
* Part of this code is taken from @chakra-ui/system 鉂わ笍
*/
export type As<Props = any> = React.ElementType<Props>;
export type DOMElements = keyof JSX.IntrinsicElements;
export type CapitalizedDOMElements = Capitalize<DOMElements>;
export interface DOMElement extends Element, HTMLOrSVGElement {}
type DataAttributes = {
[dataAttr: string]: any;
};
export type DOMAttributes<T = DOMElement> = React.AriaAttributes &
React.DOMAttributes<T> &
DataAttributes & {
id?: string;
role?: React.AriaRole;
tabIndex?: number;
style?: React.CSSProperties;
};
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 InternalForwardRefRenderFunction<
Component extends As,
Props extends object = {},
OmitKeys extends keyof any = never,
> = {
<AsComponent extends As = Component>(
props: MergeWithAs<
React.ComponentPropsWithoutRef<Component>,
Omit<React.ComponentPropsWithoutRef<AsComponent>, OmitKeys>,
Props,
AsComponent
>,
): React.ReactElement | null;
readonly $$typeof: symbol;
defaultProps?: Partial<Props> | undefined;
propTypes?: React.WeakValidationMap<Props> | undefined;
displayName?: string | undefined;
};
/**
* Extract the props of a React element or component
*/
export type PropsOf<T extends As> = React.ComponentPropsWithoutRef<T> & {
as?: As;
};
export type Merge<M, N> = N extends Record<string, unknown> ? M : Omit<M, keyof N> & N;
export type HTMLNextUIProps<T extends As = "div", OmitKeys extends keyof any = never> = Omit<
PropsOf<T>,
"ref" | "color" | "slot" | "size" | "defaultChecked" | "defaultValue" | OmitKeys
> & {
as?: As;
};
export type PropGetter<P = Record<string, unknown>, R = DOMAttributes> = (
props?: Merge<DOMAttributes, P>,
ref?: React.Ref<any>,
) => R & React.RefAttributes<any>;