pull/18793/merge
svelte-triage-bot[bot] 17 hours ago committed by GitHub
commit 657f6c1aee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: preserve global CSS in components without scopable elements

@ -145,6 +145,19 @@ export function prune(stylesheet, elements) {
},
ComplexSelector(node) {
const selectors = get_relative_selectors(node);
const rule = /** @type {Compiler.AST.CSS.Rule} */ (node.metadata.rule);
const first = selectors[0]?.selectors[0];
const is_icss_export =
selectors.length === 1 &&
selectors[0].selectors.length === 1 &&
first?.type === 'PseudoClassSelector' &&
first.name === 'export' &&
first.args === null;
// Global and ICSS export rules do not depend on an element in this component
if (every_is_global(selectors, 0, selectors.length, rule) || is_icss_export) {
node.metadata.used = true;
}
for (const element of elements) {
seen.clear();
@ -153,12 +166,7 @@ export function prune(stylesheet, elements) {
// Elements rendered through <svelte:head> are not style-scopable.
// Prevent css hash injection (class="s-...") on tags like <meta>, <link>, <script>.
!is_inside_svelte_head(element) &&
apply_selector(
selectors,
/** @type {Compiler.AST.CSS.Rule} */ (node.metadata.rule),
element,
BACKWARD
)
apply_selector(selectors, rule, element, BACKWARD)
) {
node.metadata.used = true;
}

@ -0,0 +1,5 @@
import { test } from '../../test';
export default test({
warnings: []
});

@ -0,0 +1,2 @@
:export { foo: red; }
:is(td, th) { color: red; }

@ -0,0 +1,6 @@
<svelte:head><meta name="x" content="y" /></svelte:head>
<style>
:export { foo: red; }
:is(:global(td), :global(th)) { color: red; }
</style>
Loading…
Cancel
Save