"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' 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 ], content: content, onUpdate({ editor }) { if (onChange) { onChange(editor.getHTML()) } console.log(editor.getHTML()) }, }) return ( ); }; export default MailField;