diff --git a/src/components/core-editor.tsx b/src/components/core-editor.tsx
new file mode 100644
index 0000000..56d3fc0
--- /dev/null
+++ b/src/components/core-editor.tsx
@@ -0,0 +1,64 @@
+"use client";
+
+import { cn } from "@/lib/utils";
+import dynamic from "next/dynamic";
+import type { ReactNode } from "react";
+import type { editor } from "monaco-editor";
+import { Loading } from "@/components/loading";
+import type { BeforeMount, OnChange, OnMount } from "@monaco-editor/react";
+
+// Dynamically import Monaco Editor with SSR disabled
+const Editor = dynamic(
+ async () => {
+ await import("vscode");
+ const monaco = await import("monaco-editor");
+ const { loader } = await import("@monaco-editor/react");
+ loader.config({ monaco });
+ return (await import("@monaco-editor/react")).Editor;
+ },
+ {
+ ssr: false,
+ loading: () => ,
+ }
+);
+
+interface CoreEditorProps {
+ language?: string;
+ theme?: string;
+ path?: string;
+ value?: string;
+ beforeMount?: BeforeMount;
+ onMount?: OnMount;
+ onChange?: OnChange;
+ options?: editor.IStandaloneEditorConstructionOptions;
+ loading?: ReactNode;
+ className?: string;
+}
+
+export function CoreEditor({
+ language,
+ theme,
+ path,
+ value,
+ beforeMount,
+ onMount,
+ onChange,
+ options,
+ loading,
+ className,
+}: CoreEditorProps) {
+ return (
+
+ );
+}