diff --git a/packages/excalidraw/data/restore.ts b/packages/excalidraw/data/restore.ts index 1b531c4840..cb6116a785 100644 --- a/packages/excalidraw/data/restore.ts +++ b/packages/excalidraw/data/restore.ts @@ -509,11 +509,11 @@ export const restoreElement = ( name: element.name ?? null, }); case "frame": - const hasBackgroundEnabled = Object.prototype.hasOwnProperty.call( - element, - "backgroundEnabled", - ); - const backgroundEnabled = (element as any).backgroundEnabled ?? false; + const hasBackgroundEnabled = + typeof (element as any).backgroundEnabled === "boolean"; + const backgroundEnabled = hasBackgroundEnabled + ? (element as any).backgroundEnabled + : false; return restoreElementWithProperties(element, { name: element.name ?? null, backgroundEnabled, diff --git a/packages/excalidraw/tests/data/restore.test.ts b/packages/excalidraw/tests/data/restore.test.ts index 321424f647..707080f8b7 100644 --- a/packages/excalidraw/tests/data/restore.test.ts +++ b/packages/excalidraw/tests/data/restore.test.ts @@ -99,6 +99,25 @@ describe("restoreElements", () => { expect(restoredFrame.backgroundEnabled).toBe(false); }); + it("should disable frame background when legacy backgroundEnabled is non-boolean", () => { + const frame = API.createElement({ + type: "frame", + backgroundColor: "#ffc9c9", + }); + const legacyFrame = { + ...frame, + backgroundEnabled: undefined, + } as any; + + const restoredFrame = restore.restoreElements( + [legacyFrame], + null, + )[0] as ExcalidrawFrameElement; + + expect(restoredFrame.backgroundColor).toBe("transparent"); + expect(restoredFrame.backgroundEnabled).toBe(false); + }); + it("should preserve frame backgroundEnabled when present", () => { const frame = API.createElement({ type: "frame",