"use client"
import {
InitialConfigType,
LexicalComposer,
} from "@lexical/react/LexicalComposer"
import { OnChangePlugin } from "@lexical/react/LexicalOnChangePlugin"
import { EditorState, SerializedEditorState } from "lexical"
import { editorTheme } from "@/registry/new-york-v4/editor/themes/editor-theme"
import { TooltipProvider } from "@/registry/new-york-v4/ui/tooltip"
import { nodes } from "./nodes"
import { Plugins } from "./plugins"
const editorConfig: InitialConfigType = {
namespace: "Editor",
theme: editorTheme,
nodes,
onError: (error: Error) => {
console.error(error)
},
}
export function Editor({
editorState,
editorSerializedState,
onChange,
onSerializedChange,
}: {
editorState?: EditorState
editorSerializedState?: SerializedEditorState
onChange?: (editorState: EditorState) => void
onSerializedChange?: (editorSerializedState: SerializedEditorState) => void
}) {
return (
<div className="bg-background overflow-hidden rounded-lg border shadow">
<LexicalComposer
initialConfig={{
...editorConfig,
...(editorState ? { editorState } : {}),
...(editorSerializedState
? { editorState: JSON.stringify(editorSerializedState) }
: {}),
}}
>
<TooltipProvider>
<Plugins />
<OnChangePlugin
ignoreSelectionChange={true}
onChange={(editorState) => {
onChange?.(editorState)
onSerializedChange?.(editorState.toJSON())
}}
/>
</TooltipProvider>
</LexicalComposer>
</div>
)
}