From a9f58b11b5ece3c725bb7fd4cc212f2d123ef097 Mon Sep 17 00:00:00 2001 From: Mark Tolmacs Date: Sat, 24 May 2025 10:29:51 +0200 Subject: [PATCH] Working fix for stats --- .../excalidraw/components/Stats/Dimension.tsx | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/packages/excalidraw/components/Stats/Dimension.tsx b/packages/excalidraw/components/Stats/Dimension.tsx index a8868721b..69b67c61a 100644 --- a/packages/excalidraw/components/Stats/Dimension.tsx +++ b/packages/excalidraw/components/Stats/Dimension.tsx @@ -7,6 +7,9 @@ import { } from "@excalidraw/element"; import { resizeSingleElement } from "@excalidraw/element"; import { isImageElement } from "@excalidraw/element"; +import { isFrameLikeElement } from "@excalidraw/element"; +import { getElementsInResizingFrame } from "@excalidraw/element"; +import { replaceAllElementsInFrame } from "@excalidraw/element"; import type { ExcalidrawElement } from "@excalidraw/element/types"; @@ -184,6 +187,25 @@ const handleDimensionChange: DragInputCallbackType< }, ); + // Handle frame membership update for resized frames + if (isFrameLikeElement(latestElement)) { + const nextElementsInFrame = getElementsInResizingFrame( + scene.getElementsIncludingDeleted(), + latestElement, + originalAppState, + scene.getNonDeletedElementsMap(), + ); + + const updatedElements = replaceAllElementsInFrame( + scene.getElementsIncludingDeleted(), + nextElementsInFrame, + latestElement, + { state: originalAppState } as any, + ); + + scene.replaceAllElements(updatedElements); + } + return; } const changeInWidth = property === "width" ? accumulatedChange : 0; @@ -230,6 +252,25 @@ const handleDimensionChange: DragInputCallbackType< shouldMaintainAspectRatio: keepAspectRatio, }, ); + + // Handle frame membership update for resized frames + if (isFrameLikeElement(latestElement)) { + const nextElementsInFrame = getElementsInResizingFrame( + scene.getElementsIncludingDeleted(), + latestElement, + originalAppState, + scene.getNonDeletedElementsMap(), + ); + + const updatedElements = replaceAllElementsInFrame( + scene.getElementsIncludingDeleted(), + nextElementsInFrame, + latestElement, + { state: originalAppState } as any, + ); + + scene.replaceAllElements(updatedElements); + } } };