diff --git a/src/element/textWysiwyg.test.tsx b/src/element/textWysiwyg.test.tsx index afb4c2ec..72aeb3fd 100644 --- a/src/element/textWysiwyg.test.tsx +++ b/src/element/textWysiwyg.test.tsx @@ -1196,5 +1196,18 @@ describe("textWysiwyg", () => { ]); expect(text.containerId).toBe(rectangle.id); }); + + it("should not allow bound text with only whitespaces", async () => { + Keyboard.keyPress(KEYS.ENTER); + const editor = document.querySelector( + ".excalidraw-textEditorContainer > textarea", + ) as HTMLTextAreaElement; + await new Promise((r) => setTimeout(r, 0)); + + fireEvent.change(editor, { target: { value: " " } }); + editor.blur(); + expect(rectangle.boundElements).toBeNull(); + expect(h.elements[1].isDeleted).toBe(true); + }); }); }); diff --git a/src/element/textWysiwyg.tsx b/src/element/textWysiwyg.tsx index d015ee00..da43d278 100644 --- a/src/element/textWysiwyg.tsx +++ b/src/element/textWysiwyg.tsx @@ -10,8 +10,8 @@ import { isBoundToContainer, isTextElement } from "./typeChecks"; import { CLASSES, BOUND_TEXT_PADDING, VERTICAL_ALIGN } from "../constants"; import { ExcalidrawElement, - ExcalidrawTextElement, ExcalidrawLinearElement, + ExcalidrawTextElement, } from "./types"; import { AppState } from "../types"; import { mutateElement } from "./mutateElement"; @@ -510,7 +510,7 @@ export const textWysiwyg = ({ if (container) { text = updateElement.text; - if (editable.value) { + if (editable.value.trim()) { const boundTextElementId = getBoundTextElementId(container); if (!boundTextElementId || boundTextElementId !== element.id) { mutateElement(container, {