diff --git a/packages/svelte/src/compiler/phases/2-analyze/css/Selector.js b/packages/svelte/src/compiler/phases/2-analyze/css/Selector.js index 017f7edba7..c945965a8e 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/css/Selector.js +++ b/packages/svelte/src/compiler/phases/2-analyze/css/Selector.js @@ -1,6 +1,7 @@ import { get_possible_values } from './gather_possible_values.js'; import { regex_starts_with_whitespace, regex_ends_with_whitespace } from '../../patterns.js'; import { error } from '../../../errors.js'; +import { relative } from 'node:path'; const NO_MATCH = 'NO_MATCH'; const POSSIBLE_MATCH = 'POSSIBLE_MATCH'; @@ -182,8 +183,12 @@ export default class Selector { } } - let first = true; + for (const complex_selector of this.selector_list) { + // We must wrap modifier with :where if the first selector is invisible (part of a nested rule) + let is_first_invisible_selector = complex_selector[0].contains_invisible_selectors + let contains_any_invisible_selectors = complex_selector.some(relative_selector => relative_selector.contains_invisible_selectors) + let first = contains_any_invisible_selectors ? is_first_invisible_selector : true for (const relative_selector of complex_selector) { if (relative_selector.global) { // Remove the global pseudo class from the selector @@ -1021,7 +1026,7 @@ function selector_to_blocks(children, parent_complex_selector) { error(child, 'nesting-selector-not-allowed'); } else { // We shoudld've already handled these above (except for multiple nesting selectors, which is supposed to work?) - throw new Error('unexpected nesting selector'); + throw new Error('Unexpected nesting selector, multiple nesting selectors (&) are not supported yet'); } } else { // shared reference bween all children