diff --git a/apps/web/components/share-modal.tsx b/apps/web/components/share-modal.tsx index 091a9446..74f5ee6c 100644 --- a/apps/web/components/share-modal.tsx +++ b/apps/web/components/share-modal.tsx @@ -1,6 +1,6 @@ "use client" -import { useState, useRef, useCallback } from "react" +import { useState, useRef, useEffect, useCallback } from "react" import { dmSansClassName, dmSans125ClassName } from "@/lib/fonts" import { Dialog, @@ -285,6 +285,22 @@ export function ShareModal({ const [copied, setCopied] = useState(false) const previewRef = useRef(null) + // Snapshot the live graph canvas once when the modal opens. Reading + // `canvas.toDataURL()` inline in render re-serialized the whole (animated) + // canvas to a PNG on every re-render — including on each theme-button click. + const [graphImage, setGraphImage] = useState(null) + useEffect(() => { + if (!isOpen) { + setGraphImage(null) + return + } + const id = requestAnimationFrame(() => { + const canvas = graphCanvasRef?.current + if (canvas) setGraphImage(canvas.toDataURL("image/png")) + }) + return () => cancelAnimationFrame(id) + }, [isOpen, graphCanvasRef]) + const localStorageUsername = useLocalStorageUsername() const displayName = user?.displayUsername || @@ -460,9 +476,9 @@ export function ShareModal({ {/* Graph canvas placeholder - will show the actual graph */}
- {graphCanvasRef?.current ? ( + {graphImage ? ( Memory graph