From 89bb4ca0289f5f26c70f47e749816b1cfb731743 Mon Sep 17 00:00:00 2001
From: "heygengenesis[bot]"
<262951085+heygengenesis[bot]@users.noreply.github.com>
Date: Thu, 17 Sep 2026 07:01:26 +0000
Subject: [PATCH] fix(core): scope selector arrays within compositions
Co-authored-by: miguel.sierra <229591595+miguel-heygen@users.noreply.github.com>
---
.../src/compiler/compositionScoping.test.ts | 38 +++++++++++++++++++
.../core/src/compiler/compositionScoping.ts | 11 +++++-
2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/packages/core/src/compiler/compositionScoping.test.ts b/packages/core/src/compiler/compositionScoping.test.ts
index 3a8d3613fb8..bfc96014429 100644
--- a/packages/core/src/compiler/compositionScoping.test.ts
+++ b/packages/core/src/compiler/compositionScoping.test.ts
@@ -384,6 +384,44 @@ window.__timelines.scene = tl;
expect(gsapTargets).toEqual([["Scene"], ["Scene"]]);
});
+ it("scopes each selector in a GSAP target array to the composition root", () => {
+ const { document } = parseHTML(`
+
+
Scene title
+
Scene subtitle
+
+
+
Other title
+
Other subtitle
+
+ `);
+ const targetCompositions: Array = [];
+ const fakeWindow = {
+ document,
+ __timelines: {},
+ gsap: {
+ to(targets: Array) {
+ const resolvedTargets = targets.flatMap((target) =>
+ typeof target === "string" ? Array.from(document.querySelectorAll(target)) : [target],
+ );
+ targetCompositions.push(
+ ...resolvedTargets.map((target) =>
+ target.closest("[data-composition-id]")?.getAttribute("data-composition-id"),
+ ),
+ );
+ },
+ },
+ };
+ const wrapped = wrapScopedCompositionScript(
+ `gsap.to(['.title', '.subtitle'], { opacity: 1 });`,
+ "scene",
+ );
+
+ new Function("window", "gsap", wrapped)(fakeWindow, fakeWindow.gsap);
+
+ expect(targetCompositions).toEqual(["scene", "scene"]);
+ });
+
it("scopes getElementById when duplicate IDs exist across composition roots", () => {
const { document } = parseHTML(`
diff --git a/packages/core/src/compiler/compositionScoping.ts b/packages/core/src/compiler/compositionScoping.ts
index 7b184131b8d..8b2af76bc1a 100644
--- a/packages/core/src/compiler/compositionScoping.ts
+++ b/packages/core/src/compiler/compositionScoping.ts
@@ -524,8 +524,15 @@ export function wrapScopedCompositionScript(
})
: window;
var __hfResolveGsapTarget = function(target) {
- if (typeof target !== "string") return target;
- return __hfQueryAll(target);
+ if (typeof target === "string") return __hfQueryAll(target);
+ if (!Array.isArray(target)) return target;
+ return target.reduce(function(resolved, item) {
+ if (typeof item === "string") {
+ return resolved.concat(Array.prototype.slice.call(__hfQueryAll(item)));
+ }
+ resolved.push(item);
+ return resolved;
+ }, []);
};
var __hfScopeTimeline = function(timeline) {
if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;