import type { EditorConfig, NodeKey, SerializedTextNode } from 'lexical' import { $createTextNode, TextNode } from 'lexical' export class CustomTextNode extends TextNode { static getType() { return 'custom-text' } static clone(node: CustomTextNode) { return new CustomTextNode(node.__text, node.__key) } constructor(text: string, key?: NodeKey) { super(text, key) } createDOM(config: EditorConfig) { const dom = super.createDOM(config) dom.classList.add('align-middle') return dom } static importJSON(serializedNode: SerializedTextNode): TextNode { const node = $createTextNode(serializedNode.text) node.setFormat(serializedNode.format) node.setDetail(serializedNode.detail) node.setMode(serializedNode.mode) node.setStyle(serializedNode.style) return node } exportJSON(): SerializedTextNode { return { detail: this.getDetail(), format: this.getFormat(), mode: this.getMode(), style: this.getStyle(), text: this.getTextContent(), type: 'custom-text', version: 1, } } isSimpleText() { return ( (this.__type === 'text' || this.__type === 'custom-text') && this.__mode === 0) } } export function $createCustomTextNode(text: string): CustomTextNode { return new CustomTextNode(text) }