"use client"; import "./MailField.css"; import Document from "@tiptap/extension-document"; import Paragraph from "@tiptap/extension-paragraph"; import Text from "@tiptap/extension-text"; import Underline from "@tiptap/extension-underline"; import { useEditor, EditorContent, Extension } from "@tiptap/react"; import StarterKit from "@tiptap/starter-kit"; import MailToolbar from "./MailToolbar"; import { Grid } from "@mui/material"; import Highlight from "@tiptap/extension-highlight"; import { Color } from "@tiptap/extension-color"; import ListItem from "@tiptap/extension-list-item"; import TextStyle from "@tiptap/extension-text-style"; import TextAlign from "@tiptap/extension-text-align"; import Table from "@tiptap/extension-table"; import TableCell from "@tiptap/extension-table-cell"; import TableHeader from "@tiptap/extension-table-header"; import TableRow from "@tiptap/extension-table-row"; import Gapcursor from "@tiptap/extension-gapcursor"; interface Props { content?: string; onChange?: (richText: string) => void; error?: boolean; } const MailField: React.FC = ({ content, onChange, error }) => { const TAB_CHAR = "\u0009"; const TabHandler = Extension.create({ name: "tabHandler", addKeyboardShortcuts() { return { Tab: ({ editor }) => { // Sinks a list item / inserts a tab character editor .chain() .sinkListItem("listItem") .command(({ tr }) => { tr.insertText(TAB_CHAR); return true; }) .run(); // Prevent default behavior (losing focus) return true; }, }; }, }); const editor = useEditor( { extensions: [ StarterKit.configure(), Document, Paragraph, Text, TextStyle, TextAlign.configure({ types: ["heading", "paragraph"], }), Underline, Highlight.configure({ multicolor: true }), Color, ListItem, TabHandler, Gapcursor, Table.configure({ resizable: true, }), TableRow, TableHeader, TableCell, ], content: content, onUpdate({ editor }) { if (onChange) { onChange(editor.getHTML()); } console.log(editor.getHTML()); }, }, [], ); return ( {/* {editor && } */} ); }; export default MailField;