node.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import type {
  2. EditorConfig,
  3. LexicalNode,
  4. NodeKey,
  5. SerializedTextNode,
  6. } from 'lexical'
  7. import {
  8. $applyNodeReplacement,
  9. TextNode,
  10. } from 'lexical'
  11. export class VariableValueBlockNode extends TextNode {
  12. static getType(): string {
  13. return 'variable-value-block'
  14. }
  15. static clone(node: VariableValueBlockNode): VariableValueBlockNode {
  16. return new VariableValueBlockNode(node.__text, node.__key)
  17. }
  18. constructor(text: string, key?: NodeKey) {
  19. super(text, key)
  20. }
  21. createDOM(config: EditorConfig): HTMLElement {
  22. const element = super.createDOM(config)
  23. element.classList.add('inline-flex', 'items-center', 'px-0.5', 'h-[22px]', 'text-[#155EEF]', 'rounded-[5px]', 'align-middle')
  24. return element
  25. }
  26. static importJSON(serializedNode: SerializedTextNode): TextNode {
  27. const node = $createVariableValueBlockNode(serializedNode.text)
  28. node.setFormat(serializedNode.format)
  29. node.setDetail(serializedNode.detail)
  30. node.setMode(serializedNode.mode)
  31. node.setStyle(serializedNode.style)
  32. return node
  33. }
  34. exportJSON(): SerializedTextNode {
  35. return {
  36. detail: this.getDetail(),
  37. format: this.getFormat(),
  38. mode: this.getMode(),
  39. style: this.getStyle(),
  40. text: this.getTextContent(),
  41. type: 'variable-value-block',
  42. version: 1,
  43. }
  44. }
  45. canInsertTextBefore(): boolean {
  46. return false
  47. }
  48. }
  49. export function $createVariableValueBlockNode(text = ''): VariableValueBlockNode {
  50. return $applyNodeReplacement(new VariableValueBlockNode(text))
  51. }
  52. export function $isVariableValueNodeBlock(
  53. node: LexicalNode | null | undefined,
  54. ): node is VariableValueBlockNode {
  55. return node instanceof VariableValueBlockNode
  56. }