{"version":3,"file":"utils.mjs","sources":["../../../src/primitives/Composer/utils.ts"],"sourcesContent":["import type { Placement } from \"@floating-ui/react-dom\";\nimport type {\n  CommentBody,\n  CommentBodyLink,\n  CommentBodyMention,\n  CommentBodyText,\n} from \"@liveblocks/core\";\nimport { Text as SlateText } from \"slate\";\n\nimport { isComposerBodyAutoLink } from \"../../slate/plugins/auto-links\";\nimport { isComposerBodyMention } from \"../../slate/plugins/mentions\";\nimport type {\n  ComposerBody,\n  ComposerBodyAutoLink,\n  ComposerBodyMention,\n  ComposerBodyText,\n  Direction,\n} from \"../../types\";\nimport { exists } from \"../../utils/exists\";\nimport {\n  isCommentBodyLink,\n  isCommentBodyMention,\n  isCommentBodyText,\n} from \"../Comment/utils\";\nimport type { SuggestionsPosition } from \"./types\";\n\nexport function composerBodyMentionToCommentBodyMention(\n  mention: ComposerBodyMention\n): CommentBodyMention {\n  return {\n    type: \"mention\",\n    id: mention.id,\n  };\n}\n\nexport function composerBodyAutoLinkToCommentBodyLink(\n  link: ComposerBodyAutoLink\n): CommentBodyLink {\n  return {\n    type: \"link\",\n    url: link.url,\n  };\n}\n\nexport function commentBodyMentionToComposerBodyMention(\n  mention: CommentBodyMention\n): ComposerBodyMention {\n  return {\n    type: \"mention\",\n    id: mention.id,\n    children: [{ text: \"\" }],\n  };\n}\n\nexport function commentBodyLinkToComposerBodyLink(\n  link: CommentBodyLink\n): ComposerBodyAutoLink {\n  return {\n    type: \"auto-link\",\n    url: link.url,\n    children: [\n      {\n        text: link.url,\n      },\n    ],\n  };\n}\n\nexport function composerBodyToCommentBody(body: ComposerBody): CommentBody {\n  return {\n    version: 1,\n    content: body.map((block) => {\n      const children = block.children\n        .map((inline) => {\n          if (isComposerBodyMention(inline)) {\n            return composerBodyMentionToCommentBodyMention(inline);\n          }\n\n          if (isComposerBodyAutoLink(inline)) {\n            return composerBodyAutoLinkToCommentBodyLink(inline);\n          }\n\n          if (SlateText.isText(inline)) {\n            return inline as CommentBodyText;\n          }\n\n          return null;\n        })\n        .filter(exists);\n\n      return {\n        ...block,\n        children,\n      };\n    }),\n  };\n}\n\nconst emptyComposerBody: ComposerBody = [];\n\nexport function commentBodyToComposerBody(body: CommentBody): ComposerBody {\n  if (!body || !body?.content) {\n    return emptyComposerBody;\n  }\n\n  return body.content.map((block) => {\n    const children = block.children\n      .map((inline) => {\n        if (isCommentBodyMention(inline)) {\n          return commentBodyMentionToComposerBodyMention(inline);\n        }\n\n        if (isCommentBodyLink(inline)) {\n          return commentBodyLinkToComposerBodyLink(inline);\n        }\n\n        if (isCommentBodyText(inline)) {\n          return inline as ComposerBodyText;\n        }\n\n        return null;\n      })\n      .filter(exists);\n\n    return {\n      ...block,\n      children,\n    };\n  });\n}\n\nexport function getPlacementFromPosition(\n  position: SuggestionsPosition,\n  direction: Direction = \"ltr\"\n): Placement {\n  return `${position}-${direction === \"rtl\" ? \"end\" : \"start\"}`;\n}\n\nexport function getSideAndAlignFromPlacement(placement: Placement) {\n  const [side, align = \"center\"] = placement.split(\"-\");\n\n  return [side, align] as const;\n}\n"],"names":["SlateText"],"mappings":"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"}