forked from withastro/astro
-
Notifications
You must be signed in to change notification settings - Fork 0
/
types.d.ts
32 lines (26 loc) Β· 1.33 KB
/
types.d.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
import './astro-jsx';
import type { AstroBuiltinAttributes } from './dist/@types/astro.js';
import type { OmitIndexSignature, Simplify } from './dist/type-utils.js';
/** Any supported HTML or SVG element name, as defined by the HTML specification */
export type HTMLTag = keyof astroHTML.JSX.DefinedIntrinsicElements;
/** The built-in attributes for any known HTML or SVG element name */
export type HTMLAttributes<Tag extends HTMLTag> = Omit<
astroHTML.JSX.DefinedIntrinsicElements[Tag],
keyof Omit<AstroBuiltinAttributes, 'class:list'>
>;
/**
* All the CSS properties available, as defined by the CSS specification
*/
export type CSSProperty = keyof astroHTML.JSX.KebabCSSDOMProperties;
type PolymorphicAttributes<P extends { as: HTMLTag }> = Omit<P, 'as'> & {
as?: P['as'];
} & Omit<
// This is the same as HTMLAttributes<P['as']>, except we're using OmitIndexSignature to remove the index signature,
// used for data attribute, because it seems like it get too complex for TypeScript with it, not sure why.
OmitIndexSignature<astroHTML.JSX.DefinedIntrinsicElements[P['as']]>,
keyof Omit<AstroBuiltinAttributes, 'class:list'>
>;
export type Polymorphic<P extends { as: HTMLTag }> = PolymorphicAttributes<
Omit<P, 'as'> & { as: NonNullable<P['as']> }
>;
export type ComponentProps<T extends (args: any) => any> = Simplify<Parameters<T>[0]>;