@@ -95,12 +95,12 @@ class Rule {
95
95
code . remove ( c , this . node . block . end - 1 ) ;
96
96
}
97
97
98
- transform ( code : MagicString , id : string , keyframes : Map < string , string > ) {
98
+ transform ( code : MagicString , id : string , keyframes : Map < string , string > , max_amount_class_specificity_increased : number ) {
99
99
if ( this . parent && this . parent . node . type === 'Atrule' && is_keyframes_node ( this . parent . node ) ) return true ;
100
100
101
101
const attr = `.${ id } ` ;
102
102
103
- this . selectors . forEach ( selector => selector . transform ( code , attr ) ) ;
103
+ this . selectors . forEach ( selector => selector . transform ( code , attr , max_amount_class_specificity_increased ) ) ;
104
104
this . declarations . forEach ( declaration => declaration . transform ( code , keyframes ) ) ;
105
105
}
106
106
@@ -115,6 +115,10 @@ class Rule {
115
115
if ( ! selector . used ) handler ( selector ) ;
116
116
} ) ;
117
117
}
118
+
119
+ get_max_amount_class_specificity_increased ( ) {
120
+ return Math . max ( ...this . selectors . map ( selector => selector . get_amount_class_specificity_increased ( ) ) ) ;
121
+ }
118
122
}
119
123
120
124
class Declaration {
@@ -239,7 +243,7 @@ class Atrule {
239
243
}
240
244
}
241
245
242
- transform ( code : MagicString , id : string , keyframes : Map < string , string > ) {
246
+ transform ( code : MagicString , id : string , keyframes : Map < string , string > , max_amount_class_specificity_increased : number ) {
243
247
if ( is_keyframes_node ( this . node ) ) {
244
248
this . node . expression . children . forEach ( ( { type, name, start, end } : CssNode ) => {
245
249
if ( type === 'Identifier' ) {
@@ -258,7 +262,7 @@ class Atrule {
258
262
}
259
263
260
264
this . children . forEach ( child => {
261
- child . transform ( code , id , keyframes ) ;
265
+ child . transform ( code , id , keyframes , max_amount_class_specificity_increased ) ;
262
266
} ) ;
263
267
}
264
268
@@ -275,6 +279,10 @@ class Atrule {
275
279
child . warn_on_unused_selector ( handler ) ;
276
280
} ) ;
277
281
}
282
+
283
+ get_max_amount_class_specificity_increased ( ) {
284
+ return Math . max ( ...this . children . map ( rule => rule . get_max_amount_class_specificity_increased ( ) ) ) ;
285
+ }
278
286
}
279
287
280
288
export default class Stylesheet {
@@ -397,8 +405,9 @@ export default class Stylesheet {
397
405
} ) ;
398
406
399
407
if ( should_transform_selectors ) {
408
+ const max = Math . max ( ...this . children . map ( rule => rule . get_max_amount_class_specificity_increased ( ) ) ) ;
400
409
this . children . forEach ( ( child : ( Atrule | Rule ) ) => {
401
- child . transform ( code , this . id , this . keyframes ) ;
410
+ child . transform ( code , this . id , this . keyframes , max ) ;
402
411
} ) ;
403
412
}
404
413
0 commit comments