diff --git a/packages/studio/src/hooks/timelineEditingHelpers.test.ts b/packages/studio/src/hooks/timelineEditingHelpers.test.ts index 98c263f2ad..5ac3b69204 100644 --- a/packages/studio/src/hooks/timelineEditingHelpers.test.ts +++ b/packages/studio/src/hooks/timelineEditingHelpers.test.ts @@ -142,6 +142,32 @@ describe("applyTimelineStackingReorder", () => { }); describe("patchIframeDomTiming", () => { + it("patches a top-level composition host in its parent source file", () => { + const iframe = makeIframeWith(` +
+
+
+ `); + const host = iframe.contentDocument?.getElementById("scene-host"); + const target = el({ + id: "scene-host", + tag: "div", + kind: "composition", + domId: "scene-host", + sourceFile: "index.html", + compositionSrc: "compositions/scene.html", + }); + + patchIframeDomTiming(iframe, target, [["data-start", "9"]], "index.html"); + + expect(host?.getAttribute("data-start")).toBe("9"); + }); + it("resolves selectorIndex within the element's source file", () => { const iframe = makeIframeWith(`
diff --git a/packages/studio/src/hooks/timelineEditingHelpers.ts b/packages/studio/src/hooks/timelineEditingHelpers.ts index 7d0ecc7cf8..ffa4d2fd60 100644 --- a/packages/studio/src/hooks/timelineEditingHelpers.ts +++ b/packages/studio/src/hooks/timelineEditingHelpers.ts @@ -13,7 +13,10 @@ import { saveProjectFilesWithHistory, type RecordEditInput } from "../utils/stud import type { TimelineZIndexReorderCommit } from "./useTimelineEditingTypes"; import { setCompositionDurationToContent } from "../utils/timelineAssetDrop"; import { readFileContent } from "./timelineTimingSync"; -import { findElementForSelection } from "../components/editor/domEditingElement"; +import { + findElementForSelection, + findElementForTimelineElement, +} from "../components/editor/domEditingElement"; export { deleteSelectedKeyframes } from "./deleteSelectedKeyframes"; export { readFileContent }; function isHTMLElement(element: Element | null): element is HTMLElement { @@ -137,6 +140,12 @@ export function findTimelineElementInIframe( try { const doc = iframe?.contentDocument; if (!doc) return null; + if (element.kind === "composition" && element.compositionSrc) { + return findElementForTimelineElement(doc, element, { + activeCompositionPath, + isMasterView: true, + }); + } return findElementForSelection( doc, {