import Placeholder from '@tiptap/extension-placeholder'; import StarterKit from '@tiptap/starter-kit'; import { CharacterCount, createEmojiExtension, createEnterKeyExtension, createFileExtension, createImageExtension, createMentionExtension, } from './extensions'; import './Editor.scss'; // ============================================================================ // Extension Configuration // ============================================================================ interface ExtensionOptions { placeholder?: string; maxLength?: number; showPlaceholderOnlyWhenEditable?: boolean; onEnter?: () => void; isMentionEnabled?: () => boolean; } function createExtensions(options: ExtensionOptions = {}) { const { placeholder = '', maxLength, showPlaceholderOnlyWhenEditable = true, onEnter, isMentionEnabled = () => true, } = options; return [ StarterKit.configure({ bold: false, italic: false, strike: false, code: false, codeBlock: false, heading: false, blockquote: false, horizontalRule: false, bulletList: false, orderedList: false, listItem: false, }), CharacterCount.configure({ limit: maxLength, }), createEnterKeyExtension(onEnter), createEmojiExtension(), createFileExtension(), createImageExtension(), createMentionExtension(isMentionEnabled), Placeholder.configure({ placeholder, showOnlyWhenEditable: showPlaceholderOnlyWhenEditable, }), ]; } export { createExtensions, };