@@ -70,9 +70,9 @@ export default class Selector {
70
70
71
71
/**
72
72
* @param {import('magic-string').default } code
73
- * @param {string } attr
73
+ * @param {string } modifier
74
74
*/
75
- transform ( code , attr ) {
75
+ transform ( code , modifier ) {
76
76
/** @param {import('#compiler').Css.SimpleSelector } selector */
77
77
function remove_global_pseudo_class ( selector ) {
78
78
code
@@ -90,20 +90,24 @@ export default class Selector {
90
90
remove_global_pseudo_class ( selector ) ;
91
91
}
92
92
}
93
+
93
94
let i = block . selectors . length ;
94
95
while ( i -- ) {
95
96
const selector = block . selectors [ i ] ;
97
+
96
98
if ( selector . type === 'PseudoElementSelector' || selector . type === 'PseudoClassSelector' ) {
97
99
if ( selector . name !== 'root' && selector . name !== 'host' ) {
98
100
if ( i === 0 ) code . prependRight ( selector . start , modifier ) ;
99
101
}
100
102
continue ;
101
103
}
104
+
102
105
if ( selector . type === 'TypeSelector' && selector . name === '*' ) {
103
106
code . update ( selector . start , selector . end , modifier ) ;
104
107
} else {
105
108
code . appendLeft ( selector . end , modifier ) ;
106
109
}
110
+
107
111
break ;
108
112
}
109
113
}
@@ -115,9 +119,10 @@ export default class Selector {
115
119
}
116
120
117
121
if ( block . should_encapsulate ) {
118
- const modifier = first ? attr : `:where(${ attr } )` ;
119
- encapsulate_block ( block , modifier ) ;
120
-
122
+ // for the first occurrence, we use a classname selector, so that every
123
+ // encapsulated selector gets a +0-1-0 specificity bump. thereafter,
124
+ // we use a `:where` selector, which does not affect specificity
125
+ encapsulate_block ( block , first ? modifier : `:where(${ modifier } )` ) ;
121
126
first = false ;
122
127
}
123
128
}
0 commit comments