Files
archived-linsa/web/shared/editor/editor.tsx
2024-10-20 09:05:02 +07:00

45 lines
1.2 KiB
TypeScript

import * as React from "react"
import { EditorContent } from "@tiptap/react"
import { Content } from "@tiptap/core"
import { BubbleMenu } from "./components/bubble-menu"
import { cn } from "@/lib/utils"
import { useLaEditor, UseLaEditorProps } from "./hooks/use-la-editor"
import { MeasuredContainer } from "./components/measured-container"
export interface LaEditorProps extends UseLaEditorProps {
value?: Content
className?: string
editorContentClassName?: string
}
export const LaEditor = React.memo(
React.forwardRef<HTMLDivElement, LaEditorProps>(
({ className, editorContentClassName, ...props }, ref) => {
const editor = useLaEditor(props)
if (!editor) {
return null
}
return (
<MeasuredContainer
as="div"
name="editor"
className={cn("relative flex h-full w-full grow flex-col", className)}
ref={ref}
>
<EditorContent
editor={editor}
className={cn("la-editor", editorContentClassName)}
/>
<BubbleMenu editor={editor} />
</MeasuredContainer>
)
},
),
)
LaEditor.displayName = "LaEditor"
export default LaEditor