Skip to content

Commit e8b9b11

Browse files
committed
tweaks
1 parent 2461f0f commit e8b9b11

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

packages/svelte/src/compiler/phases/2-analyze/css/Selector.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ export default class Selector {
7070

7171
/**
7272
* @param {import('magic-string').default} code
73-
* @param {string} attr
73+
* @param {string} modifier
7474
*/
75-
transform(code, attr) {
75+
transform(code, modifier) {
7676
/** @param {import('#compiler').Css.SimpleSelector} selector */
7777
function remove_global_pseudo_class(selector) {
7878
code
@@ -90,20 +90,24 @@ export default class Selector {
9090
remove_global_pseudo_class(selector);
9191
}
9292
}
93+
9394
let i = block.selectors.length;
9495
while (i--) {
9596
const selector = block.selectors[i];
97+
9698
if (selector.type === 'PseudoElementSelector' || selector.type === 'PseudoClassSelector') {
9799
if (selector.name !== 'root' && selector.name !== 'host') {
98100
if (i === 0) code.prependRight(selector.start, modifier);
99101
}
100102
continue;
101103
}
104+
102105
if (selector.type === 'TypeSelector' && selector.name === '*') {
103106
code.update(selector.start, selector.end, modifier);
104107
} else {
105108
code.appendLeft(selector.end, modifier);
106109
}
110+
107111
break;
108112
}
109113
}
@@ -115,9 +119,10 @@ export default class Selector {
115119
}
116120

117121
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})`);
121126
first = false;
122127
}
123128
}

packages/svelte/src/compiler/phases/2-analyze/css/Stylesheet.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ class Rule {
103103
return;
104104
}
105105

106-
const attr = `.${id}`;
107-
this.selectors.forEach((selector) => selector.transform(code, attr));
106+
const modifier = `.${id}`;
107+
this.selectors.forEach((selector) => selector.transform(code, modifier));
108108
this.declarations.forEach((declaration) => declaration.transform(code, keyframes));
109109
}
110110

0 commit comments

Comments
 (0)