{"version":3,"file":"mention-node.cjs","sources":["../../src/mentions/mention-node.tsx"],"sourcesContent":["import { createInboxNotificationId, MENTION_CHARACTER } from \"@liveblocks/core\";\nimport { User } from \"@liveblocks/react-ui/_private\";\nimport type {\n  DOMConversionMap,\n  DOMExportOutput,\n  LexicalNode,\n  NodeKey,\n  SerializedLexicalNode,\n  Spread,\n} from \"lexical\";\nimport { $applyNodeReplacement, DecoratorNode } from \"lexical\";\nimport type { JSX } from \"react\";\n\nimport { Mention } from \"./mention-component\";\n\nexport type SerializedMentionNode = Spread<\n  {\n    userId: string;\n  },\n  SerializedLexicalNode\n>;\nexport class MentionNode extends DecoratorNode<JSX.Element> {\n  __id: string;\n  __userId: string;\n\n  constructor(id: string, userId: string, key?: NodeKey) {\n    super(key);\n    this.__id = id;\n    this.__userId = userId;\n  }\n\n  static getType(): string {\n    return \"lb-mention\";\n  }\n\n  static clone(node: MentionNode): MentionNode {\n    return new MentionNode(node.__id, node.__userId, node.__key);\n  }\n\n  createDOM(): HTMLElement {\n    const element = document.createElement(\"span\");\n    element.style.display = \"inline-block\";\n    element.style.userSelect = \"none\";\n    return element;\n  }\n\n  updateDOM(): boolean {\n    return false;\n  }\n\n  static importDOM(): DOMConversionMap<HTMLElement> | null {\n    return {\n      span: () => ({\n        conversion: (element) => {\n          const userId = element.getAttribute(\"data-lexical-lb-mention\");\n\n          if (!userId) {\n            return null;\n          }\n\n          const node = $createMentionNode(userId);\n          return { node };\n        },\n        priority: 1,\n      }),\n    };\n  }\n\n  exportDOM(): DOMExportOutput {\n    const element = document.createElement(\"span\");\n    element.setAttribute(\"data-lexical-lb-mention\", this.getUserId());\n    element.textContent = this.getUserId();\n    return { element };\n  }\n\n  static importJSON(serializedNode: SerializedMentionNode): MentionNode {\n    const node = $createMentionNode(serializedNode.userId);\n    return node;\n  }\n\n  exportJSON(): SerializedMentionNode {\n    return {\n      userId: this.__userId,\n      type: \"lb-mention\",\n      version: 1,\n    };\n  }\n\n  getUserId(): string {\n    const self = this.getLatest();\n    return self.__userId;\n  }\n\n  getId(): string {\n    const self = this.getLatest();\n    return self.__id;\n  }\n\n  decorate(): JSX.Element {\n    return (\n      <Mention nodeKey={this.getKey()}>\n        <span className=\"lb-mention-symbol\">{MENTION_CHARACTER}</span>\n        <User userId={this.getUserId()} />\n      </Mention>\n    );\n  }\n\n  getTextContent(): string {\n    return MENTION_CHARACTER + this.getUserId();\n  }\n}\n\nexport function $isMentionNode(\n  node: LexicalNode | null | undefined\n): node is MentionNode {\n  return node instanceof MentionNode;\n}\n\nexport function $createMentionNode(userId: string): MentionNode {\n  const node = new MentionNode(createInboxNotificationId(), userId);\n  return $applyNodeReplacement(node);\n}\n"],"names":["DecoratorNode","jsxs","Mention","jsx","MENTION_CHARACTER","User","createInboxNotificationId","$applyNodeReplacement"],"mappings":"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"}