{"version":3,"file":"group-mention-node.cjs","sources":["../../src/mentions/group-mention-node.tsx"],"sourcesContent":["import {\n  createInboxNotificationId,\n  type GroupMentionData,\n  MENTION_CHARACTER,\n} from \"@liveblocks/core\";\nimport { Group } 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 SerializedGroupMentionNode = Spread<\n  {\n    groupId: string;\n    userIds?: string[];\n  },\n  SerializedLexicalNode\n>;\n\nfunction GroupMention({\n  mention,\n  nodeKey,\n}: {\n  mention: GroupMentionData;\n  nodeKey: string;\n}) {\n  return (\n    <Mention nodeKey={nodeKey}>\n      {MENTION_CHARACTER}\n      <Group groupId={mention.id} />\n    </Mention>\n  );\n}\n\nexport class GroupMentionNode extends DecoratorNode<JSX.Element> {\n  __id: string;\n  __groupId: string;\n  __userIds: string[] | undefined;\n\n  constructor(\n    id: string,\n    groupId: string,\n    userIds: string[] | undefined,\n    key?: NodeKey\n  ) {\n    super(key);\n    this.__id = id;\n    this.__groupId = groupId;\n    this.__userIds = userIds;\n  }\n\n  static getType(): string {\n    return \"lb-group-mention\";\n  }\n\n  static clone(node: GroupMentionNode): GroupMentionNode {\n    return new GroupMentionNode(\n      node.__id,\n      node.__groupId,\n      node.__userIds,\n      node.__key\n    );\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 groupId = element.getAttribute(\"data-lexical-lb-group-mention\");\n\n          if (!groupId) {\n            return null;\n          }\n\n          const userIdsAttribute = element.getAttribute(\n            \"data-lexical-lb-user-ids\"\n          );\n          let userIds: string[] | undefined;\n\n          if (userIdsAttribute) {\n            try {\n              const parsedUserIds = JSON.parse(userIdsAttribute) as string[];\n\n              if (Array.isArray(parsedUserIds)) {\n                userIds = parsedUserIds;\n              }\n            } catch {\n              // Invalid userIds attribute\n            }\n          }\n\n          const node = $createGroupMentionNode(groupId, userIds);\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-group-mention\", this.getGroupId());\n    element.setAttribute(\n      \"data-lexical-lb-group-mention-users\",\n      JSON.stringify(this.getUserIds())\n    );\n    element.textContent = this.getTextContent();\n    return { element };\n  }\n\n  static importJSON(\n    serializedNode: SerializedGroupMentionNode\n  ): GroupMentionNode {\n    const node = $createGroupMentionNode(\n      serializedNode.groupId,\n      serializedNode.userIds\n    );\n    return node;\n  }\n\n  exportJSON(): SerializedGroupMentionNode {\n    return {\n      groupId: this.__groupId,\n      userIds: this.__userIds,\n      type: \"lb-group-mention\",\n      version: 1,\n    };\n  }\n\n  getGroupId(): string {\n    const self = this.getLatest();\n    return self.__groupId;\n  }\n\n  getId(): string {\n    const self = this.getLatest();\n    return self.__id;\n  }\n\n  getUserIds(): string[] | undefined {\n    const self = this.getLatest();\n    return self.__userIds;\n  }\n\n  decorate(): JSX.Element {\n    const mention: GroupMentionData = {\n      id: this.getGroupId(),\n      kind: \"group\",\n      userIds: this.getUserIds(),\n    };\n\n    return <GroupMention mention={mention} nodeKey={this.getKey()} />;\n  }\n}\n\nexport function $isGroupMentionNode(\n  node: LexicalNode | null | undefined\n): node is GroupMentionNode {\n  return node instanceof GroupMentionNode;\n}\n\nexport function $createGroupMentionNode(\n  groupId: string,\n  userIds: string[] | undefined\n): GroupMentionNode {\n  const node = new GroupMentionNode(\n    createInboxNotificationId(),\n    groupId,\n    userIds\n  );\n  return $applyNodeReplacement(node);\n}\n"],"names":["jsxs","Mention","MENTION_CHARACTER","jsx","Group","DecoratorNode","createInboxNotificationId","$applyNodeReplacement"],"mappings":"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"}