From 9812d652666a2eb5543d0e06ba265d9b561d980a Mon Sep 17 00:00:00 2001 From: devendra-w Date: Wed, 27 May 2026 12:32:16 +0530 Subject: [PATCH] feat: add font size control to increase/decrease editor font size --- app/components/monaco-editor.tsx | 12 +- app/page.tsx | 205 +++++++------------------------ 2 files changed, 56 insertions(+), 161 deletions(-) diff --git a/app/components/monaco-editor.tsx b/app/components/monaco-editor.tsx index d5537ce..1c4c02d 100644 --- a/app/components/monaco-editor.tsx +++ b/app/components/monaco-editor.tsx @@ -38,7 +38,7 @@ interface MonacoEditorProps { value: string onChange: (value: string) => void theme?: "light" | "dark" - /** Receives the editor instance on mount, and `null` on unmount. */ + fontSize?: number onEditorReady?: (editor: monaco.editor.IStandaloneCodeEditor | null) => void } @@ -47,6 +47,7 @@ export default function MonacoEditor({ value, onChange, theme, + fontSize = 14, onEditorReady, }: MonacoEditorProps) { const editorRef = useRef(null) @@ -68,6 +69,7 @@ export default function MonacoEditor({ }, }) + monaco.editor.defineTheme("custom-light", { base: "vs", inherit: true, @@ -85,7 +87,7 @@ export default function MonacoEditor({ theme: theme === "dark" ? "custom-dark" : "custom-light", automaticLayout: true, minimap: { enabled: false }, - fontSize: 14, + fontSize: fontSize, lineNumbers: "on", roundedSelection: false, scrollBeyondLastLine: false, @@ -193,6 +195,12 @@ export default function MonacoEditor({ } }, [theme]) + useEffect(() => { + if (monacoRef.current) { + monacoRef.current.updateOptions({ fontSize }) + } + }, [fontSize]) + // Helper: compute and render status text const updateStatusBar = (text: string) => { try { diff --git a/app/page.tsx b/app/page.tsx index ce134ad..c2ee7f3 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1543,8 +1543,18 @@ export default function CodeEditor() { const [splitRatio, setSplitRatio] = useState(50) const isDragging = useRef(false) const [isResizing, setIsResizing] = useState(false) + const [isMobile, setIsMobile] = useState(false) + + const [fontSize, setFontSize] = useState(14) // use effect for handling full screen mode + useEffect(() => { + const checkMobile = () => setIsMobile(window.innerWidth < 768) + checkMobile() + window.addEventListener('resize', checkMobile) + return () => window.removeEventListener('resize', checkMobile) + }, []) + useEffect(() => { const handleFullscreenChange = () => { setIsFullscreen(!!document.fullscreenElement); @@ -1573,7 +1583,6 @@ export default function CodeEditor() { const containerRef = useRef(null) const previewRef = useRef(null) -const activeEditorRef = useRef(null) const handleDragStart = () => { isDragging.current = true; setIsResizing(true); @@ -2115,6 +2124,11 @@ ${code.html} return () => window.removeEventListener("keydown", onKeyDown, true) }, []) + useEffect(() => { + const saved = localStorage.getItem("webify-font-size") + if (saved) setFontSize(Number(saved)) + }, []) + return ( <> @@ -2214,6 +2228,33 @@ ${code.html} + + {/* Font Size Control */} +
+ + {fontSize} + +
- - {!autoRun && ( - - )} - - - -
-