{"version":3,"file":"component.mjs","sources":["../src/helpers/generateHref.ts","../src/helpers/getLinkText.ts","../src/components/Link.tsx"],"sourcesContent":["import {type UrlObject} from 'url'\n\nimport {InternalLink, LinkValue} from '../types'\nimport {isCustomLink, isEmailLink, isExternalLink, isPhoneLink} from './typeGuards'\n\nexport const generateHref = {\n  internal: (link: LinkValue, hrefResolver?: (link: InternalLink) => string | UrlObject) => {\n    const internalLink = link as InternalLink\n    const resolvedHref =\n      internalLink.internalLink && hrefResolver ? hrefResolver(internalLink) : undefined\n\n    // Support UrlObjects, e.g. from Next.js\n    if (typeof resolvedHref === 'object' && 'pathname' in resolvedHref) {\n      resolvedHref.hash = internalLink.anchor?.replace(/^#/, '')\n\n      if (internalLink.parameters) {\n        const params = new URLSearchParams(internalLink.parameters)\n        const resolvedParams = new URLSearchParams(resolvedHref.query?.toString())\n\n        for (const [key, value] of params.entries()) {\n          resolvedParams.set(key, value)\n        }\n\n        resolvedHref.query = resolvedParams.toString()\n      }\n\n      return resolvedHref\n    }\n\n    let href =\n      resolvedHref ||\n      (internalLink.internalLink?.slug?.current\n        ? `/${internalLink.internalLink.slug.current.replace(/^\\//, '')}`\n        : undefined)\n\n    if (href && typeof href === 'string') {\n      href += (internalLink.parameters?.trim() || '') + (internalLink.anchor?.trim() || '')\n    }\n\n    return href || '#'\n  },\n  external: (link: LinkValue) =>\n    isExternalLink(link) && link.url\n      ? link.url.trim() + (link.parameters?.trim() || '') + (link.anchor?.trim() || '')\n      : '#',\n  email: (link: LinkValue) =>\n    isEmailLink(link) && link.email ? `mailto:${link.email.trim()}` : '#',\n  phone: (link: LinkValue) =>\n    isPhoneLink(link) && link.phone\n      ? // Tel links cannot contain spaces\n        `tel:${link.phone?.replace(/\\s+/g, '').trim()}`\n      : '#',\n  custom: (link: LinkValue) =>\n    isCustomLink(link) && link.value\n      ? link.value.trim() + (link.parameters?.trim() || '') + (link.anchor?.trim() || '')\n      : '#',\n}\n","import {LinkValue} from '../types'\nimport {isCustomLink, isEmailLink, isExternalLink, isInternalLink, isPhoneLink} from './typeGuards'\n\n/**\n * Get the text to display for the given link.\n */\nexport const getLinkText = (link: LinkValue): string =>\n  link.text ||\n  (isInternalLink(link)\n    ? // Naively try to get the title or slug of the internal link\n      link.internalLink?.title || link.internalLink?.slug?.current\n    : isExternalLink(link)\n      ? link.url\n      : isPhoneLink(link)\n        ? link.phone\n        : isEmailLink(link)\n          ? link.email\n          : isCustomLink(link)\n            ? link.value\n            : undefined) ||\n  '#'\n","import React, {type ElementType, type ForwardedRef, forwardRef} from 'react'\n\nimport {generateHref} from '../helpers/generateHref'\nimport {getLinkText} from '../helpers/getLinkText'\nimport {isCustomLink, isEmailLink, isPhoneLink} from '../helpers/typeGuards'\nimport {InternalLink, LinkValue} from '../types'\n\ntype LinkProps = {\n  link?: LinkValue\n  as?: ElementType\n  hrefResolver?: (link: InternalLink) => string\n} & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'target'>\n\nconst Link = forwardRef(\n  (\n    {link, as: Component = 'a', hrefResolver, children, ...props}: LinkProps,\n    ref: ForwardedRef<HTMLAnchorElement>,\n  ) => {\n    if (!link) {\n      return null\n    }\n\n    // If no link text is provided, try and find a fallback\n    if (!children) {\n      // eslint-disable-next-line no-param-reassign\n      children = getLinkText(link)\n    }\n\n    return (\n      <Component\n        href={\n          link.type === 'internal'\n            ? generateHref[link.type]?.(link, hrefResolver)\n            : generateHref[isCustomLink(link) ? 'custom' : link.type]?.(link)\n        }\n        target={!isPhoneLink(link) && !isEmailLink(link) && link.blank ? '_blank' : undefined}\n        ref={ref}\n        {...props}\n      >\n        {children}\n      </Component>\n    )\n  },\n)\n\nLink.displayName = 'Link'\n\nexport {Link, type LinkProps}\n"],"names":[],"mappings":"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"}