1
1
import React from 'react' ;
2
+ import stylis from 'stylis' ;
2
3
3
4
/*
4
5
This get's used as decorator @css
@@ -69,13 +70,16 @@ let fillProps = (rawCSS, props) => {
69
70
}
70
71
71
72
/*
72
- Add stylesheet for component
73
+ Add insert rules in to css-constructor stylesheet
73
74
*/
74
75
75
76
let insertRules = ( realCSS ) => {
76
- let sheet = getStyleSheet ( ) ;
77
+ let style = getStyleElement ( ) ;
78
+ /* Get unique classname */
77
79
let className = getHash ( realCSS ) ;
78
- sheet . insertRule ( `.${ className } {${ realCSS } }` , sheet . cssRules . length ) ;
80
+ /* Convert nested CSS */
81
+ let styles = stylis ( `.${ className } ` , realCSS ) ;
82
+ style . innerHTML += styles ;
79
83
return className ;
80
84
}
81
85
@@ -86,19 +90,14 @@ let getHash = (string) => {
86
90
return 'c' + hash ;
87
91
}
88
92
89
- let getStyleSheet = ( ) => {
90
- let sheets = document . styleSheets ;
91
- let index = - 1 ;
92
- for ( let i = 0 ; i < sheets . length ; i ++ ) {
93
- if ( sheets [ i ] . title === 'css-constructor' ) index = i ;
94
- }
95
- if ( index !== - 1 ) return sheets [ index ] ;
96
- else {
97
- let styleElement = document . createElement ( 'style' ) ;
93
+ let getStyleElement = ( ) => {
94
+ let styleElement = document . querySelector ( '[title=css-constructor]' ) ;
95
+ if ( ! styleElement ) {
96
+ styleElement = document . createElement ( 'style' ) ;
98
97
styleElement . setAttribute ( 'title' , 'css-constructor' ) ;
99
98
document . head . appendChild ( styleElement ) ;
100
- return styleElement . sheet ;
101
99
}
100
+ return styleElement ;
102
101
}
103
102
104
103
let camelCase = ( key ) => key . replace ( / ( \- [ a - z ] ) / g, $1 => $1 . toUpperCase ( ) . replace ( '-' , '' ) ) ;
0 commit comments