1- import React , { PureComponent } from 'react'
2-
1+ import { PureComponent , createElement } from 'react'
32import { create as createJss , getDynamicStyles } from 'jss'
43import preset from 'jss-preset-default'
5-
64import filterProps from './utils/filter-props'
75
8-
96const jssDefault = createJss ( preset ( ) )
107
11- type StyledElementAttrsT = { tag : string , styles : Object }
12- type StyledElementT = Function & StyledElementAttrsT
13- type tagOrStyledElementT = string | StyledElementT
14- type StyledElementPropsT = {
8+ type StyledElementAttrsType = { tag : string , styles : Object }
9+ type StyledElementType = Function & StyledElementAttrsType
10+ type tagOrStyledElementTypeype = string | StyledElementType
11+ type StyledElementPropsType = {
1512 classes : Object ,
1613 children : ?any ,
1714 className : ?string ,
1815}
1916
20-
2117export const createStyled = ( jss ? : Function = jssDefault ) => ( baseStyles : Object = { } ) = > {
2218 let sheet
2319 let dynamicSheet
24-
2520 let counter = 0
2621
27- return ( tagOrStyledElement : tagOrStyledElementT , ownStyles : Object ) : StyledElementT => {
28- const { tag, styles} : StyledElementAttrsT = typeof tagOrStyledElement === 'string'
22+ return ( tagOrStyledElement : tagOrStyledElementTypeype , ownStyles : Object ) : StyledElementType => {
23+ const { tag, styles} : StyledElementAttrsType = typeof tagOrStyledElement === 'string'
2924 ? { tag : tagOrStyledElement , styles : { } }
3025 : tagOrStyledElement
3126
3227 const elementStyles = { ...styles , ...ownStyles }
3328 const dynamicStyles = getDynamicStyles ( elementStyles )
34-
35- const StaticTag = `${ tag } -${ ++ counter } `
29+ const staticTag = `${ tag } -${ ++ counter } `
3630
3731 return class StyledElement extends PureComponent {
38- props : StyledElementPropsT
39-
4032 static tag = tag
33+
4134 static styles = elementStyles
4235
36+ props : StyledElementPropsType
37+
4338 tagScoped = ''
4439
4540 constructor ( props ) {
4641 super ( props )
47-
4842 this . tagScoped = `${ tag } -${ ++ counter } `
4943 }
5044
@@ -61,8 +55,8 @@ export const createStyled = (jss?: Function = jssDefault) => (baseStyles: Object
6155 } ) . attach ( )
6256 }
6357
64- if ( ! sheet . getRule ( StaticTag ) ) {
65- sheet . addRule ( StaticTag , elementStyles )
58+ if ( ! sheet . getRule ( staticTag ) ) {
59+ sheet . addRule ( staticTag , elementStyles )
6660 }
6761
6862 if ( dynamicStyles && ! dynamicSheet . getRule ( this . tagScoped ) ) {
@@ -73,7 +67,7 @@ export const createStyled = (jss?: Function = jssDefault) => (baseStyles: Object
7367 }
7468 }
7569
76- componentWillReceiveProps ( nextProps : StyledElementPropsT ) {
70+ componentWillReceiveProps ( nextProps : StyledElementPropsType ) {
7771 if ( dynamicStyles ) dynamicSheet . update ( this . tagScoped , nextProps )
7872 }
7973
@@ -88,25 +82,30 @@ export const createStyled = (jss?: Function = jssDefault) => (baseStyles: Object
8882
8983 const props = filterProps ( attrs )
9084 const tagClass = [
91- sheet . classes [ StaticTag ] ,
85+ sheet . classes [ staticTag ] ,
9286 dynamicSheet . classes [ this . tagScoped ] ,
9387 className ,
9488 ]
9589 . filter ( Boolean )
9690 . join ( ' ' )
9791
98- return React . createElement ( tag , { ...props , className : tagClass } , children )
92+ return createElement ( tag , { ...props , className : tagClass } , children )
9993 }
10094 }
10195 }
10296}
10397
104- const defaultStyledBased = createStyled ( )
105- const defaultStyled = defaultStyledBased ( )
98+ const defaultStyledCreator = createStyled ( )
10699
107- export { defaultStyled as styled }
100+ const defaultStyled = defaultStyledCreator ( )
108101
109- export const createStyledCreator = ( styled : Function = defaultStyledBased ) =>
102+ const createStyledCreator = ( styled : Function = defaultStyledCreator ) => (
110103 ( baseStyles : Object ) => Object . assign ( styled ( baseStyles ) , { styles : baseStyles } )
104+ )
105+
106+ export {
107+ defaultStyled as styled ,
108+ createStyledCreator
109+ }
111110
112111export default createStyledCreator ( )
0 commit comments