@@ -91,56 +91,73 @@ export default function resolveDefaultsAtRules({ tailwindConfig }) {
91
91
rule . remove ( )
92
92
} )
93
93
94
- for ( let universal of universals ) {
95
- /** @type {Map<string, Set<string>> } */
96
- let selectorGroups = new Map ( )
94
+ if ( flagEnabled ( tailwindConfig , 'optimizeUniversalDefaults' ) ) {
95
+ for ( let universal of universals ) {
96
+ /** @type {Map<string, Set<string>> } */
97
+ let selectorGroups = new Map ( )
98
+
99
+ let rules = variableNodeMap . get ( universal . params ) ?? [ ]
100
+
101
+ for ( let rule of rules ) {
102
+ for ( let selector of extractElementSelector ( rule . selector ) ) {
103
+ // If selector contains a vendor prefix after a pseudo element or class,
104
+ // we consider them separately because merging the declarations into
105
+ // a single rule will cause browsers that do not understand the
106
+ // vendor prefix to throw out the whole rule
107
+ let selectorGroupName =
108
+ selector . includes ( ':-' ) || selector . includes ( '::-' ) ? selector : '__DEFAULT__'
109
+
110
+ let selectors = selectorGroups . get ( selectorGroupName ) ?? new Set ( )
111
+ selectorGroups . set ( selectorGroupName , selectors )
112
+
113
+ selectors . add ( selector )
114
+ }
115
+ }
97
116
98
- let rules = variableNodeMap . get ( universal . params ) ?? [ ]
117
+ if ( flagEnabled ( tailwindConfig , 'optimizeUniversalDefaults' ) ) {
118
+ if ( selectorGroups . size === 0 ) {
119
+ universal . remove ( )
120
+ continue
121
+ }
99
122
100
- for ( let rule of rules ) {
101
- for ( let selector of extractElementSelector ( rule . selector ) ) {
102
- // If selector contains a vendor prefix after a pseudo element or class,
103
- // we consider them separately because merging the declarations into
104
- // a single rule will cause browsers that do not understand the
105
- // vendor prefix to throw out the whole rule
106
- let selectorGroupName =
107
- selector . includes ( ':-' ) || selector . includes ( '::-' ) ? selector : '__DEFAULT__'
123
+ for ( let [ , selectors ] of selectorGroups ) {
124
+ let universalRule = postcss . rule ( {
125
+ source : universal . source ,
126
+ } )
108
127
109
- let selectors = selectorGroups . get ( selectorGroupName ) ?? new Set ( )
110
- selectorGroups . set ( selectorGroupName , selectors )
128
+ universalRule . selectors = [ ...selectors ]
111
129
112
- selectors . add ( selector )
130
+ universalRule . append ( universal . nodes . map ( ( node ) => node . clone ( ) ) )
131
+ universal . before ( universalRule )
132
+ }
113
133
}
114
- }
115
134
116
- if ( flagEnabled ( tailwindConfig , 'optimizeUniversalDefaults' ) ) {
117
- if ( selectorGroups . size === 0 ) {
118
- universal . remove ( )
119
- continue
120
- }
121
-
122
- for ( let [ , selectors ] of selectorGroups ) {
123
- let universalRule = postcss . rule ( {
124
- source : universal . source ,
125
- } )
135
+ universal . remove ( )
136
+ }
137
+ } else if ( universals . size ) {
138
+ let universalRule = postcss . rule ( {
139
+ selectors : [ '*' , '::before' , '::after' ] ,
140
+ } )
126
141
127
- universalRule . selectors = [ ...selectors ]
142
+ for ( let universal of universals ) {
143
+ universalRule . append ( universal . nodes )
128
144
129
- universalRule . append ( universal . nodes . map ( ( node ) => node . clone ( ) ) )
145
+ if ( ! universalRule . parent ) {
130
146
universal . before ( universalRule )
131
147
}
132
- } else {
133
- let universalRule = postcss . rule ( {
134
- source : universal . source ,
135
- } )
136
148
137
- universalRule . selectors = [ '*' , '::before' , '::after' , '::backdrop' ]
149
+ if ( ! universalRule . source ) {
150
+ universalRule . source = universal . source
151
+ }
138
152
139
- universalRule . append ( universal . nodes )
140
- universal . before ( universalRule )
153
+ universal . remove ( )
141
154
}
142
155
143
- universal . remove ( )
156
+ let backdropRule = universalRule . clone ( {
157
+ selectors : [ '::backdrop' ] ,
158
+ } )
159
+
160
+ universalRule . after ( backdropRule )
144
161
}
145
162
}
146
163
}
0 commit comments