// @ts-ignore - Tiptap type declarations issue import { useEditor, EditorContent } from "@tiptap/react"; // @ts-ignore - Tiptap type declarations issue import StarterKit from "@tiptap/starter-kit"; // @ts-ignore - Tiptap type declarations issue import Underline from "@tiptap/extension-underline"; // @ts-ignore - Tiptap type declarations issue import Link from "@tiptap/extension-link"; // @ts-ignore - Tiptap type declarations issue import TextAlign from "@tiptap/extension-text-align"; // @ts-ignore - Tiptap type declarations issue import Image from "@tiptap/extension-image"; // @ts-ignore - Tiptap type declarations issue import { Color } from "@tiptap/extension-color"; // @ts-ignore - Tiptap type declarations issue import { TextStyle } from "@tiptap/extension-text-style"; // @ts-ignore - Tiptap type declarations issue import Highlight from "@tiptap/extension-highlight"; import { useEffect } from "react"; import { cn } from "@/shared/lib/utils"; interface RichTextViewerProps { content: string; minHeight?: number; className?: string; variant?: "default" | "minimal" | "bordered"; } const RichTextViewer = ({ content, minHeight = 200, className, variant = "default", }: RichTextViewerProps) => { // @ts-ignore - Tiptap type declarations issue const extensions = [ // @ts-ignore StarterKit.configure({ heading: { levels: [1, 2, 3], }, }), // @ts-ignore Underline.configure(), // @ts-ignore TextStyle.configure(), // @ts-ignore Highlight.configure({ multicolor: true }), // @ts-ignore Color.configure(), // @ts-ignore Link.configure({ openOnClick: false, HTMLAttributes: { rel: "noopener noreferrer", target: "_blank", class: "text-blue-600 hover:text-blue-800 underline", }, }), // @ts-ignore TextAlign.configure({ types: ["heading", "paragraph"], alignments: ["left", "center", "right", "justify"], }), // @ts-ignore Image.configure({ inline: true, allowBase64: true, HTMLAttributes: { class: "rounded-md max-w-full h-auto", }, }), ]; const editor = useEditor({ extensions, content, editable: false, }); useEffect(() => { if (editor && content !== editor.getHTML()) { editor.commands.setContent(content); } }, [content, editor]); if (!editor) { return (
); } const variantStyles = { default: "border border-gray-200 rounded-md bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900", minimal: "bg-transparent", bordered: "border border-gray-200 rounded-md dark:border-gray-700", }; return (
); }; export default RichTextViewer;