1- import {
1+ import type {
22 ComplexPropDefinitions ,
33 ConditionalVariants ,
44 PatternOptions ,
@@ -7,9 +7,10 @@ import {
77 VariantGroups ,
88 VariantObjectSelection ,
99 PropDefinitionOutput ,
10- ResolveComplex
10+ ResolveComplex ,
11+ CSSRule
1112} from "@mincho-js/css" ;
12- import {
13+ import type {
1314 ComponentProps ,
1415 ComponentType ,
1516 ElementType ,
@@ -19,12 +20,12 @@ import {
1920 RefAttributes
2021} from "react" ;
2122
22- export { $$styled } from "./runtime .js" ;
23+ import { tags , SupportedElements } from "./tags .js" ;
2324
24- type KeyofIntrinsicElements = keyof JSX . IntrinsicElements ;
25+ export { $$styled } from "./runtime.js" ;
2526
2627// == Main =====================================================================
27- export function styled <
28+ function styledImpl <
2829 Props ,
2930 Component extends ForwardRefExoticComponent < Props > ,
3031 RulesVariants extends VariantGroups | undefined = undefined ,
@@ -41,7 +42,7 @@ export function styled<
4142 RulesProps
4243> ;
4344
44- export function styled <
45+ function styledImpl <
4546 Props ,
4647 Component extends ComponentType < Props > ,
4748 RulesVariants extends VariantGroups | undefined = undefined ,
@@ -58,7 +59,7 @@ export function styled<
5859 RulesProps
5960> ;
6061
61- export function styled <
62+ function styledImpl <
6263 Props extends object ,
6364 Component extends ElementType ,
6465 RulesVariants extends VariantGroups | undefined = undefined ,
@@ -75,8 +76,8 @@ export function styled<
7576 RulesProps
7677> ;
7778
78- export function styled <
79- Component extends KeyofIntrinsicElements ,
79+ function styledImpl <
80+ Component extends SupportedElements ,
8081 RulesVariants extends VariantGroups | undefined = undefined ,
8182 RulesToggleVariants extends VariantDefinitions | undefined = undefined ,
8283 RulesProps extends ComplexPropDefinitions < PropTarget > | undefined = undefined
@@ -91,11 +92,11 @@ export function styled<
9192 RulesProps
9293> ;
9394
94- export function styled <
95+ function styledImpl <
9596 Component extends
9697 | ForwardRefExoticComponent < unknown >
9798 | ComponentType < unknown >
98- | KeyofIntrinsicElements
99+ | SupportedElements
99100 | ComponentWithAs < object , ElementType > ,
100101 RulesVariants extends VariantGroups | undefined = undefined ,
101102 RulesToggleVariants extends VariantDefinitions | undefined = undefined ,
@@ -115,23 +116,50 @@ export function styled<
115116 ) ;
116117}
117118
118- type IntrinsicProps < TComponent > = TComponent extends KeyofIntrinsicElements
119+ type TaggedStyled = {
120+ [ Tag in SupportedElements ] : <
121+ RulesVariants extends VariantGroups | undefined = undefined ,
122+ RulesToggleVariants extends VariantDefinitions | undefined = undefined ,
123+ RulesProps extends
124+ | ComplexPropDefinitions < PropTarget >
125+ | undefined = undefined
126+ > (
127+ options : PatternOptions < RulesVariants , RulesToggleVariants , RulesProps >
128+ ) => StyledComponent <
129+ IntrinsicProps < Tag > ,
130+ Tag ,
131+ RulesVariants ,
132+ RulesToggleVariants ,
133+ RulesProps
134+ > ;
135+ } ;
136+
137+ /** NOTE: Make simple type for avoid too complex error
138+ * error TS2590: Expression produces a union type that is too complex to represent.
139+ */
140+ const taggedStyled : Record < string , unknown > = { } ;
141+ tags . forEach ( ( tag ) => {
142+ taggedStyled [ tag ] = ( options : CSSRule ) => styledImpl ( tag , options ) ;
143+ } ) ;
144+
145+ export const styled = Object . assign ( styledImpl , taggedStyled as TaggedStyled ) ;
146+
147+ type IntrinsicProps < TComponent > = TComponent extends SupportedElements
119148 ? JSX . IntrinsicElements [ TComponent ]
120149 : never ;
121150
122- type InferStyledComponentProps < Component > =
123- Component extends KeyofIntrinsicElements
124- ? IntrinsicProps < Component >
125- : Component extends ComponentType < infer ComponentTypeProps >
126- ? ComponentTypeProps
127- : Component extends ForwardRefExoticComponent < infer ForwardRefProps >
128- ? ForwardRefProps
129- : Component extends ComponentWithAs < infer WithAsProps , ElementType >
130- ? WithAsProps
131- : never ;
151+ type InferStyledComponentProps < Component > = Component extends SupportedElements
152+ ? IntrinsicProps < Component >
153+ : Component extends ComponentType < infer ComponentTypeProps >
154+ ? ComponentTypeProps
155+ : Component extends ForwardRefExoticComponent < infer ForwardRefProps >
156+ ? ForwardRefProps
157+ : Component extends ComponentWithAs < infer WithAsProps , ElementType >
158+ ? WithAsProps
159+ : never ;
132160
133161type InferStyledComponentElement < Component > =
134- Component extends KeyofIntrinsicElements
162+ Component extends SupportedElements
135163 ? Component
136164 : Component extends ElementType
137165 ? Component
0 commit comments