| 
					
				 | 
			
			
				@@ -9,63 +9,62 @@ import "../css/styles.scss"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { ExcalidrawProps } from "../types"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { IsMobileProvider } from "../is-mobile"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const Excalidraw = React.memo( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (props: ExcalidrawProps) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      width, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      height, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      onChange, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      initialData, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      user, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      onUsernameChange, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } = props; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const Excalidraw = (props: ExcalidrawProps) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    width, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    height, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onChange, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    initialData, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    user, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onUsernameChange, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } = props; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    useEffect(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // Block pinch-zooming on iOS outside of the content area 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const handleTouchMove = (event: TouchEvent) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // @ts-ignore 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (typeof event.scale === "number" && event.scale !== 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          event.preventDefault(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  useEffect(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Block pinch-zooming on iOS outside of the content area 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const handleTouchMove = (event: TouchEvent) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // @ts-ignore 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (typeof event.scale === "number" && event.scale !== 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        event.preventDefault(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      document.addEventListener("touchmove", handleTouchMove, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        passive: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    document.addEventListener("touchmove", handleTouchMove, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      passive: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        document.removeEventListener("touchmove", handleTouchMove); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, []); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      document.removeEventListener("touchmove", handleTouchMove); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, []); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <InitializeApp> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        <IsMobileProvider> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          <App 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            width={width} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            height={height} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            onChange={onChange} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            initialData={initialData} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            user={user} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            onUsernameChange={onUsernameChange} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        </IsMobileProvider> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      </InitializeApp> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (prevProps: ExcalidrawProps, nextProps: ExcalidrawProps) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const { initialData: prevInitialData, user: prevUser, ...prev } = prevProps; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const { initialData: nextInitialData, user: nextUser, ...next } = nextProps; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <InitializeApp> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <IsMobileProvider> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <App 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          width={width} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          height={height} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onChange={onChange} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          initialData={initialData} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          user={user} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          onUsernameChange={onUsernameChange} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </IsMobileProvider> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </InitializeApp> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const prevKeys = Object.keys(prevProps) as (keyof typeof prev)[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const nextKeys = Object.keys(nextProps) as (keyof typeof next)[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const areEqual = (prevProps: ExcalidrawProps, nextProps: ExcalidrawProps) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const { initialData: prevInitialData, user: prevUser, ...prev } = prevProps; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const { initialData: nextInitialData, user: nextUser, ...next } = nextProps; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      prevUser?.name === nextUser?.name && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      prevKeys.length === nextKeys.length && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      prevKeys.every((key) => prev[key] === next[key]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const prevKeys = Object.keys(prevProps) as (keyof typeof prev)[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const nextKeys = Object.keys(nextProps) as (keyof typeof next)[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-export default Excalidraw; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    prevUser?.name === nextUser?.name && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    prevKeys.length === nextKeys.length && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    prevKeys.every((key) => prev[key] === next[key]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default React.memo(Excalidraw, areEqual); 
			 |