@@ -91,56 +91,73 @@ export default function resolveDefaultsAtRules({ tailwindConfig }) {
9191 rule . remove ( )
9292 } )
9393
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+ }
97116
98- let rules = variableNodeMap . get ( universal . params ) ?? [ ]
117+ if ( flagEnabled ( tailwindConfig , 'optimizeUniversalDefaults' ) ) {
118+ if ( selectorGroups . size === 0 ) {
119+ universal . remove ( )
120+ continue
121+ }
99122
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+ } )
108127
109- let selectors = selectorGroups . get ( selectorGroupName ) ?? new Set ( )
110- selectorGroups . set ( selectorGroupName , selectors )
128+ universalRule . selectors = [ ...selectors ]
111129
112- selectors . add ( selector )
130+ universalRule . append ( universal . nodes . map ( ( node ) => node . clone ( ) ) )
131+ universal . before ( universalRule )
132+ }
113133 }
114- }
115134
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+ } )
126141
127- universalRule . selectors = [ ...selectors ]
142+ for ( let universal of universals ) {
143+ universalRule . append ( universal . nodes )
128144
129- universalRule . append ( universal . nodes . map ( ( node ) => node . clone ( ) ) )
145+ if ( ! universalRule . parent ) {
130146 universal . before ( universalRule )
131147 }
132- } else {
133- let universalRule = postcss . rule ( {
134- source : universal . source ,
135- } )
136148
137- universalRule . selectors = [ '*' , '::before' , '::after' , '::backdrop' ]
149+ if ( ! universalRule . source ) {
150+ universalRule . source = universal . source
151+ }
138152
139- universalRule . append ( universal . nodes )
140- universal . before ( universalRule )
153+ universal . remove ( )
141154 }
142155
143- universal . remove ( )
156+ let backdropRule = universalRule . clone ( {
157+ selectors : [ '::backdrop' ] ,
158+ } )
159+
160+ universalRule . after ( backdropRule )
144161 }
145162 }
146163}
0 commit comments