import type { EditorConfig, LexicalNode, NodeKey, SerializedTextNode, } from 'lexical' import { $applyNodeReplacement, TextNode, } from 'lexical' export class VariableValueBlockNode extends TextNode { static getType(): string { return 'variable-value-block' } static clone(node: VariableValueBlockNode): VariableValueBlockNode { return new VariableValueBlockNode(node.__text, node.__key) } constructor(text: string, key?: NodeKey) { super(text, key) } createDOM(config: EditorConfig): HTMLElement { const element = super.createDOM(config) element.classList.add('inline-flex', 'items-center', 'px-0.5', 'h-[22px]', 'text-[#155EEF]', 'rounded-[5px]', 'align-middle') return element } static importJSON(serializedNode: SerializedTextNode): TextNode { const node = $createVariableValueBlockNode(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: 'variable-value-block', version: 1, } } canInsertTextBefore(): boolean { return false } } export function $createVariableValueBlockNode(text = ''): VariableValueBlockNode { return $applyNodeReplacement(new VariableValueBlockNode(text)) } export function $isVariableValueNodeBlock( node: LexicalNode | null | undefined, ): node is VariableValueBlockNode { return node instanceof VariableValueBlockNode }