|
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 |
|
} |
|
|