{"version":3,"file":"index.mjs","sources":["../../../src/primitives/Comment/index.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport type { ReactNode } from \"react\";\nimport React, { forwardRef, useMemo } from \"react\";\n\nimport { MENTION_CHARACTER } from \"../../slate/plugins/mentions\";\nimport type {\n  CommentBodyComponents,\n  CommentBodyProps,\n  CommentLinkProps,\n  CommentMentionProps,\n} from \"./types\";\nimport {\n  isCommentBodyLink,\n  isCommentBodyMention,\n  toAbsoluteUrl,\n} from \"./utils\";\n\nconst COMMENT_MENTION_NAME = \"CommentMention\";\nconst COMMENT_BODY_NAME = \"CommentBody\";\nconst COMMENT_LINK_NAME = \"CommentLink\";\n\n/**\n * Displays mentions within `Comment.Body`.\n *\n * @example\n * <Comment.Mention>@{userId}</Comment.Mention>\n */\nconst CommentMention = forwardRef<HTMLSpanElement, CommentMentionProps>(\n  ({ children, asChild, ...props }, forwardedRef) => {\n    const Component = asChild ? Slot : \"span\";\n\n    return (\n      <Component {...props} ref={forwardedRef}>\n        {children}\n      </Component>\n    );\n  }\n);\n\n/**\n * Displays links within `Comment.Body`.\n *\n * @example\n * <Comment.Link href={href}>{children}</Comment.Link>\n */\nconst CommentLink = forwardRef<HTMLAnchorElement, CommentLinkProps>(\n  ({ children, asChild, ...props }, forwardedRef) => {\n    const Component = asChild ? Slot : \"a\";\n\n    return (\n      <Component\n        target=\"_blank\"\n        rel=\"noopener noreferrer nofollow\"\n        {...props}\n        ref={forwardedRef}\n      >\n        {children}\n      </Component>\n    );\n  }\n);\n\nconst defaultBodyComponents: CommentBodyComponents = {\n  Mention: ({ userId }) => {\n    return (\n      <CommentMention>\n        {MENTION_CHARACTER}\n        {userId}\n      </CommentMention>\n    );\n  },\n  Link: ({ href, children }) => {\n    return <CommentLink href={href}>{children}</CommentLink>;\n  },\n};\n\n/**\n * Displays a comment body.\n *\n * @example\n * <Comment.Body body={comment.body} />\n */\nconst CommentBody = forwardRef<HTMLDivElement, CommentBodyProps>(\n  ({ body, components, asChild, ...props }, forwardedRef) => {\n    const Component = asChild ? Slot : \"div\";\n    const { Mention, Link } = useMemo(\n      () => ({ ...defaultBodyComponents, ...components }),\n      [components]\n    );\n\n    if (!body || !body?.content) {\n      return null;\n    }\n\n    return (\n      <Component {...props} ref={forwardedRef}>\n        {body.content.map((block, index) => {\n          switch (block.type) {\n            case \"paragraph\":\n              return (\n                <p key={index}>\n                  {block.children.map((inline, index) => {\n                    if (isCommentBodyMention(inline)) {\n                      return inline.id ? (\n                        <Mention userId={inline.id} key={index} />\n                      ) : null;\n                    }\n\n                    if (isCommentBodyLink(inline)) {\n                      const href = toAbsoluteUrl(inline.url) ?? inline.url;\n\n                      return (\n                        <Link href={href} key={index}>\n                          {inline.url}\n                        </Link>\n                      );\n                    }\n\n                    // <code><s><em><strong>text</strong></s></em></code>\n                    let children: ReactNode = inline.text;\n\n                    if (inline.bold) {\n                      children = <strong key={index}>{children}</strong>;\n                    }\n\n                    if (inline.italic) {\n                      children = <em key={index}>{children}</em>;\n                    }\n\n                    if (inline.strikethrough) {\n                      children = <s key={index}>{children}</s>;\n                    }\n\n                    if (inline.code) {\n                      children = <code key={index}>{children}</code>;\n                    }\n\n                    return <span key={index}>{children}</span>;\n                  })}\n                </p>\n              );\n            default:\n              return null;\n          }\n        })}\n      </Component>\n    );\n  }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n  CommentBody.displayName = COMMENT_BODY_NAME;\n  CommentMention.displayName = COMMENT_MENTION_NAME;\n  CommentLink.displayName = COMMENT_LINK_NAME;\n}\n\n// NOTE: Every export from this file will be available publicly as Comment.*\nexport { CommentBody as Body, CommentLink as Link, CommentMention as Mention };\n"],"names":["React","index"],"mappings":"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"}