diff --git a/packages/core/src/compiler/inlineSubCompositions.test.ts b/packages/core/src/compiler/inlineSubCompositions.test.ts
index da71c2afe..6e2470e65 100644
--- a/packages/core/src/compiler/inlineSubCompositions.test.ts
+++ b/packages/core/src/compiler/inlineSubCompositions.test.ts
@@ -197,6 +197,25 @@ describe("inlineSubCompositions – #ID selector scoping divergence", () => {
);
});
+ it("propagates data-timeline-locked from inner root to host element", () => {
+ const lockedSubComp = `
+
+
+ Hello
+
+`;
+
+ const document = makeHostDocument("captions");
+ const host = document.querySelector('[data-composition-src="intro.html"]')!;
+
+ inlineSubCompositions(document, [host], {
+ resolveHtml: () => lockedSubComp,
+ parseHtml: (html) => parseHTML(html).document,
+ });
+
+ expect(host.hasAttribute("data-timeline-locked")).toBe(true);
+ });
+
it("producer path propagates data-hf-authored-id to host when inner root has id", () => {
const document = makeHostDocument("intro");
const host = document.querySelector('[data-composition-src="intro.html"]')!;
diff --git a/packages/core/src/compiler/inlineSubCompositions.ts b/packages/core/src/compiler/inlineSubCompositions.ts
index 52c278c70..995c7019d 100644
--- a/packages/core/src/compiler/inlineSubCompositions.ts
+++ b/packages/core/src/compiler/inlineSubCompositions.ts
@@ -302,6 +302,10 @@ export function inlineSubCompositions(
);
}
+ if (innerRoot?.hasAttribute("data-timeline-locked")) {
+ hostEl.setAttribute("data-timeline-locked", "");
+ }
+
// Copy dimension attributes from inner root to host if missing
if (innerRoot) {
const innerW = innerRoot.getAttribute("data-width");