|  | @@ -38,6 +38,7 @@ export const textWysiwyg = ({
 | 
	
		
			
				|  |  |    onSubmit,
 | 
	
		
			
				|  |  |    getViewportCoords,
 | 
	
		
			
				|  |  |    element,
 | 
	
		
			
				|  |  | +  canvas,
 | 
	
		
			
				|  |  |  }: {
 | 
	
		
			
				|  |  |    id: ExcalidrawElement["id"];
 | 
	
		
			
				|  |  |    appState: AppState;
 | 
	
	
		
			
				|  | @@ -45,6 +46,7 @@ export const textWysiwyg = ({
 | 
	
		
			
				|  |  |    onSubmit: (text: string) => void;
 | 
	
		
			
				|  |  |    getViewportCoords: (x: number, y: number) => [number, number];
 | 
	
		
			
				|  |  |    element: ExcalidrawElement;
 | 
	
		
			
				|  |  | +  canvas: HTMLCanvasElement | null;
 | 
	
		
			
				|  |  |  }) => {
 | 
	
		
			
				|  |  |    const updateWysiwygStyle = () => {
 | 
	
		
			
				|  |  |      const updatedElement = Scene.getScene(element)?.getElement(id);
 | 
	
	
		
			
				|  | @@ -151,6 +153,10 @@ export const textWysiwyg = ({
 | 
	
		
			
				|  |  |      editable.oninput = null;
 | 
	
		
			
				|  |  |      editable.onkeydown = null;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    if (observer) {
 | 
	
		
			
				|  |  | +      observer.disconnect();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      window.removeEventListener("resize", updateWysiwygStyle);
 | 
	
		
			
				|  |  |      window.removeEventListener("wheel", stopEvent, true);
 | 
	
		
			
				|  |  |      window.removeEventListener("pointerdown", onPointerDown);
 | 
	
	
		
			
				|  | @@ -197,9 +203,19 @@ export const textWysiwyg = ({
 | 
	
		
			
				|  |  |    let isDestroyed = false;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    editable.onblur = handleSubmit;
 | 
	
		
			
				|  |  | -  // reposition wysiwyg in case of window resize. Happens on mobile when
 | 
	
		
			
				|  |  | -  // device keyboard is opened.
 | 
	
		
			
				|  |  | -  window.addEventListener("resize", updateWysiwygStyle);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // reposition wysiwyg in case of canvas is resized. Using ResizeObserver
 | 
	
		
			
				|  |  | +  // is preferred so we catch changes from host, where window may not resize.
 | 
	
		
			
				|  |  | +  let observer: ResizeObserver | null = null;
 | 
	
		
			
				|  |  | +  if (canvas && "ResizeObserver" in window) {
 | 
	
		
			
				|  |  | +    observer = new window.ResizeObserver(() => {
 | 
	
		
			
				|  |  | +      updateWysiwygStyle();
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    observer.observe(canvas);
 | 
	
		
			
				|  |  | +  } else {
 | 
	
		
			
				|  |  | +    window.addEventListener("resize", updateWysiwygStyle);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    window.addEventListener("pointerdown", onPointerDown);
 | 
	
		
			
				|  |  |    window.addEventListener("wheel", stopEvent, {
 | 
	
		
			
				|  |  |      passive: false,
 |