diff --git a/packages/lint/src/rules/composition.test.ts b/packages/lint/src/rules/composition.test.ts index fcf7457d6..5ac2ad48d 100644 --- a/packages/lint/src/rules/composition.test.ts +++ b/packages/lint/src/rules/composition.test.ts @@ -1159,6 +1159,20 @@ describe("composition rules", () => { expect(find(result.findings)).toBeUndefined(); }); + it("does not error when a GSAP timeline is registered with a computed bracket key", async () => { + const html = ` +
+ + `; + const result = await lintHyperframeHtml(html); + expect(find(result.findings)).toBeUndefined(); + }); + it("does not error for a finite CSS animation (runtime auto-infers duration)", async () => { const html = `
diff --git a/packages/lint/src/rules/gsap.test.ts b/packages/lint/src/rules/gsap.test.ts index d60992b2d..51f90ff22 100644 --- a/packages/lint/src/rules/gsap.test.ts +++ b/packages/lint/src/rules/gsap.test.ts @@ -1296,6 +1296,26 @@ describe("GSAP rules", () => { expect(finding).toBeUndefined(); }); + it("does NOT warn when timeline is registered with a computed bracket key", async () => { + const html = ` + +
+
Hello
+
+ + +`; + const result = await lintHyperframeHtml(html); + const finding = result.findings.find((f) => f.code === "gsap_timeline_not_registered"); + expect(finding).toBeUndefined(); + }); + it("does NOT warn for sub-compositions (template-based)", async () => { const html = `