Skip to content

Commit 1b0f2de

Browse files
committed
fix: allow for nesting selector in pseudoclasses
1 parent 91299b3 commit 1b0f2de

File tree

6 files changed

+43
-3
lines changed

6 files changed

+43
-3
lines changed

.changeset/tough-snails-chew.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: allow for nesting selector in pseudoclasses

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,23 @@ const visitors = {
7373
const inner = selectors[selectors.length - 1];
7474

7575
if (node.metadata.rule?.metadata.parent_rule && selectors.length > 0) {
76-
const has_explicit_nesting_selector = selectors.some((selector) =>
77-
selector.selectors.some((s) => s.type === 'NestingSelector')
78-
);
76+
let has_explicit_nesting_selector = false;
77+
78+
// nesting could be inside pseudo classes like :is, :has or :where
79+
for (let selector of selectors) {
80+
walk(
81+
selector,
82+
{},
83+
{
84+
// @ts-ignore
85+
NestingSelector() {
86+
has_explicit_nesting_selector = true;
87+
}
88+
}
89+
);
90+
// if we found one we can break from the others
91+
if (has_explicit_nesting_selector) break;
92+
}
7993

8094
if (!has_explicit_nesting_selector) {
8195
selectors[0] = {
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
warnings: []
5+
});
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
/* (empty) nav{
3+
header:has(&){
4+
}
5+
}*/
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<header class="svelte-xyz"><nav class="svelte-xyz"></nav></header>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<header>
2+
<nav></nav>
3+
</header>
4+
5+
<style>
6+
nav{
7+
header:has(&){
8+
}
9+
}
10+
</style>

0 commit comments

Comments
 (0)