diff --git a/.changeset/brown-tires-melt.md b/.changeset/brown-tires-melt.md
new file mode 100644
index 00000000..741b573c
--- /dev/null
+++ b/.changeset/brown-tires-melt.md
@@ -0,0 +1,5 @@
+---
+"@astrojs/compiler": patch
+---
+
+Fixes an issue where `server:defer` was treated like a transition directive, causing ViewTransitions CSS to be included even when no `transition:*` directives were used.
diff --git a/internal/transform/transform.go b/internal/transform/transform.go
index af66dd5f..cd2d01db 100644
--- a/internal/transform/transform.go
+++ b/internal/transform/transform.go
@@ -51,11 +51,14 @@ func Transform(doc *astro.Node, opts TransformOptions, h *handler.Handler) *astr
if shouldScope {
ScopeElement(n, opts)
}
- if HasAttr(n, TRANSITION_ANIMATE) || HasAttr(n, TRANSITION_NAME) || HasAttr(n, TRANSITION_PERSIST) || HasAttr(n, SERVER_DEFER) {
+ if HasAttr(n, TRANSITION_ANIMATE) || HasAttr(n, TRANSITION_NAME) || HasAttr(n, TRANSITION_PERSIST) {
doc.Transition = true
doc.HeadPropagation = true
getOrCreateTransitionScope(n, &opts, i)
}
+ if HasAttr(n, SERVER_DEFER) {
+ doc.HeadPropagation = true
+ }
if len(definedVars) > 0 {
didAdd := AddDefineVars(n, definedVars)
if !didAddDefinedVars {
diff --git a/internal/transform/transform_test.go b/internal/transform/transform_test.go
index 91885ec0..d4df3536 100644
--- a/internal/transform/transform_test.go
+++ b/internal/transform/transform_test.go
@@ -314,6 +314,54 @@ func TestFullTransform(t *testing.T) {
}
}
+func TestTransformTransitionAndHeadPropagationFlags(t *testing.T) {
+ tests := []struct {
+ name string
+ source string
+ wantTransition bool
+ wantHeadPropagation bool
+ }{
+ {
+ name: "server:defer only",
+ source: `