11import React from 'react'
22import injectSheetDefault from 'react-jss'
33
4+ import filterProps from './utils/filter-props'
5+
46
57type StyledElementType = Function & { Tag : string , styles : Object }
6- type PrimitiveProps = {
8+ type TagNameOrStyledElementType = string | StyledElementType
9+ type PrimitivePropsType = {
710 classes : Object ,
8- children ?: any ,
9- className ?: string ,
11+ children : ? any ,
12+ className : ? string ,
1013}
1114
1215
13- export const prepareStyled = ( injectSheet ? : Function = injectSheetDefault ) =>
16+ export const createStyled = ( injectSheet ? : Function = injectSheetDefault ) =>
1417 (
15- Element : string | StyledElementType ,
18+ TagNameOrStyledElement : TagNameOrStyledElementType ,
1619 styles : Object ,
1720 baseStyles ? : Object = { } ,
1821 ) : StyledElementType => {
@@ -22,30 +25,39 @@ export const prepareStyled = (injectSheet?: Function = injectSheetDefault) =>
2225 } : {
2326 Tag : string ,
2427 styles ?: Object
25- } = typeof Element === 'string' ? { Tag : Element } : Element
28+ } = typeof TagNameOrStyledElement === 'string'
29+ ? { Tag : TagNameOrStyledElement }
30+ : TagNameOrStyledElement
31+
32+ const elementStyles = { ...inheritStyles , ...styles }
2633
27- const elementStyles = { ...inheritStyles , ...styles }
34+ const Primitive = ( { classes, children, className, ...attrs } : PrimitivePropsType ) => {
35+ const props = filterProps ( attrs )
2836
29- const Primitive = ( { classes, children, className } : PrimitiveProps ) =>
30- < Tag className = { classes [ Tag ] . concat ( className ? ` ${ className } ` : '' ) } >
31- { children }
32- </ Tag >
37+ return (
38+ < Tag className = { className ? `${ classes [ Tag ] } ${ className } ` : classes [ Tag ] } { ...props } >
39+ { children }
40+ </ Tag >
41+ )
42+ }
3343
3444 const StyledPrimitive = injectSheet ( {
3545 [ Tag ] : elementStyles ,
3646 ...baseStyles ,
3747 } ) ( Primitive )
3848
39- return Object . assign ( StyledPrimitive , { Tag, styles : elementStyles } )
49+ return Object . assign ( StyledPrimitive , { Tag, styles : elementStyles } )
4050 }
4151
42- export const styled = prepareStyled ( )
52+ const defaultStyled = createStyled ( )
53+
54+ export { defaultStyled as styled }
4355
44- export const setStyledCreator = ( styledFunction : Function = styled ) =>
56+ export const createStyledCreator = ( styled : Function = defaultStyled ) =>
4557 ( baseStyles : Object ) => Object . assign (
46- ( Element : string | StyledElementType , styles : Object ) =>
47- styledFunction ( Element , styles , baseStyles ) ,
48- { styles : baseStyles } ,
58+ ( TagNameOrStyledElement : TagNameOrStyledElementType , styles : Object ) =>
59+ styled ( TagNameOrStyledElement , styles , baseStyles ) ,
60+ { styles : baseStyles } ,
4961 )
5062
51- export default setStyledCreator ( )
63+ export default createStyledCreator ( )
0 commit comments