diff --git a/src/base.css b/src/base.css
index 064dd6c..21c858c 100644
--- a/src/base.css
+++ b/src/base.css
@@ -26,4 +26,16 @@ a:hover {
}
.scrollbar::-webkit-scrollbar {
width: 5px;
-}
\ No newline at end of file
+}
+
+.resizer {
+ cursor: col-resize;
+ width: 5px;
+ background-color: #ccc;
+}
+
+.editor-pane,
+.preview-pane {
+ flex: 1;
+ overflow: auto;
+}
diff --git a/src/components/islands/word-editor.jsx b/src/components/islands/word-editor.jsx
index baa34a3..17a478c 100644
--- a/src/components/islands/word-editor.jsx
+++ b/src/components/islands/word-editor.jsx
@@ -5,12 +5,14 @@ import useRouter from "../../lib/hooks/use-router.js";
import { capitalizeText } from "../../lib/utils/index.js";
import useWordEditor from "../../lib/hooks/use-word-editor.js";
import { $isWordSubmitLoading, $isWordSubmitted, $togglePreview } from "../../lib/stores/dictionary.js";
+import useResizablePanes from "../../lib/hooks/use-resizable-panes.js";
/**
* Main Word Editor Component - Island
*/
export default function WordEditor({ title = "", content = "", metadata = {}, action }) {
const togglePreview = useStore($togglePreview);
+ const { editorWidth, previewWidth, handleMouseDown } = useResizablePanes();
return (
@@ -20,9 +22,15 @@ export default function WordEditor({ title = "", content = "", metadata = {}, ac
eContent={content}
eMetadata={metadata}
className={` ${ !togglePreview ? "flex" : "hidden" } w-full h-full lg:!flex flex-col p-5 border-r`}
+ style={{ width: `${editorWidth}%` }}
/>
-
-
+
+
+
);
}
@@ -239,4 +247,4 @@ const DummyPreviewNavbar = () => (
-);
\ No newline at end of file
+);
diff --git a/src/lib/hooks/use-resizable-panes.js b/src/lib/hooks/use-resizable-panes.js
new file mode 100644
index 0000000..cea5ee3
--- /dev/null
+++ b/src/lib/hooks/use-resizable-panes.js
@@ -0,0 +1,31 @@
+import { useState, useEffect } from 'react';
+
+export default function useResizablePanes() {
+ const [paneWidths, setPaneWidths] = useState({ editor: 50, preview: 50 });
+
+ useEffect(() => {
+ const handleMouseMove = (e) => {
+ const newEditorWidth = (e.clientX / window.innerWidth) * 100;
+ const newPreviewWidth = 100 - newEditorWidth;
+ setPaneWidths({ editor: newEditorWidth, preview: newPreviewWidth });
+ };
+
+ const handleMouseUp = () => {
+ document.removeEventListener('mousemove', handleMouseMove);
+ document.removeEventListener('mouseup', handleMouseUp);
+ };
+
+ const handleMouseDown = () => {
+ document.addEventListener('mousemove', handleMouseMove);
+ document.addEventListener('mouseup', handleMouseUp);
+ };
+
+ document.addEventListener('mousedown', handleMouseDown);
+
+ return () => {
+ document.removeEventListener('mousedown', handleMouseDown);
+ };
+ }, []);
+
+ return paneWidths;
+}