mirror of
https://github.com/massbug/judge4c.git
synced 2025-05-18 07:16:34 +00:00
feat(core-editor): Add CoreEditor component with Monaco Editor integration
This commit is contained in:
parent
8ab8892388
commit
24b5d96913
64
src/components/core-editor.tsx
Normal file
64
src/components/core-editor.tsx
Normal file
@ -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: () => <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 (
|
||||||
|
<Editor
|
||||||
|
language={language}
|
||||||
|
theme={theme}
|
||||||
|
path={path}
|
||||||
|
value={value}
|
||||||
|
beforeMount={beforeMount}
|
||||||
|
onMount={onMount}
|
||||||
|
onChange={onChange}
|
||||||
|
options={options}
|
||||||
|
loading={loading}
|
||||||
|
className={cn("h-full w-full py-2", className)}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user