diff --git a/src/components/blog/TextEditor.tsx b/src/components/blog/TextEditor.tsx index e6b6da1..1655603 100644 --- a/src/components/blog/TextEditor.tsx +++ b/src/components/blog/TextEditor.tsx @@ -192,6 +192,7 @@ export interface TextEditorProps { export default function TextEditor(props: TextEditorProps) { let editorRef!: HTMLDivElement; let bubbleMenuRef!: HTMLDivElement; + let containerRef!: HTMLDivElement; const [showBubbleMenu, setShowBubbleMenu] = createSignal(false); const [bubbleMenuPosition, setBubbleMenuPosition] = createSignal({ @@ -211,6 +212,8 @@ export default function TextEditor(props: TextEditorProps) { left: 0 }); + const [isFullscreen, setIsFullscreen] = createSignal(false); + const editor = createTiptapEditor(() => ({ element: editorRef, extensions: [ @@ -596,6 +599,26 @@ export default function TextEditor(props: TextEditorProps) { } }); + // Toggle fullscreen mode + const toggleFullscreen = () => { + setIsFullscreen(!isFullscreen()); + }; + + // ESC key to exit fullscreen + createEffect(() => { + if (isFullscreen()) { + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === "Escape") { + setIsFullscreen(false); + } + }; + + document.addEventListener("keydown", handleKeyDown); + + return () => document.removeEventListener("keydown", handleKeyDown); + } + }); + // Table Grid Selector Component const TableGridSelector = () => { const [hoverCell, setHoverCell] = createSignal({ row: 0, col: 0 }); @@ -648,7 +671,15 @@ export default function TextEditor(props: TextEditorProps) { }; return ( -