{"version":3,"file":"TextLink.cjs","sources":["../../../src/components/TextLink/TextLink.tsx"],"sourcesContent":["import {\n  type ComponentPropsWithoutRef,\n  type ElementType,\n  type FC,\n  type MouseEvent,\n  type PropsWithoutRef,\n  type ReactNode,\n  type Ref,\n  forwardRef,\n  memo,\n  useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { OpenInNewTabIcon } from '../Icon'\n\nimport type { ElementRef, ElementRefProps } from '../../types'\n\ntype ElementProps<T extends ElementType> = Omit<\n  ComponentPropsWithoutRef<T>,\n  (keyof Props<T> & ElementRefProps<T>) | 'color'\n>\n\ntype Props<T extends ElementType> = VariantProps<typeof classNameGenerator> & {\n  /** リンクをクリックした時に発火するコールバック関数 */\n  onClick?: (e: MouseEvent) => void\n  /** テキストの前に表示するアイコン */\n  prefix?: ReactNode\n  /** テキストの後ろに表示するアイコン */\n  suffix?: ReactNode\n  /** TextLinkを利用しつつnext/linkなどと併用する場合に指定する */\n  elementAs?: T\n}\n\ntype TextLinkComponent = <T extends ElementType = 'a'>(\n  props: Props<T> & ElementProps<T> & ElementRefProps<T>,\n) => ReturnType<FC>\n\nconst classNameGenerator = tv({\n  slots: {\n    anchor: [\n      'shr-text-link shr-no-underline shr-shadow-underline',\n      'forced-colors:shr-underline',\n      '[&:not([href])]:shr-shadow-none [&:not([href])]:forced-colors:shr-no-underline',\n      '[.smarthr-ui-Th_&]:shr-text-link-darken',\n    ],\n    prefixWrapper: 'shr-me-0.25 shr-align-middle',\n    suffixWrapper: 'shr-ms-0.25 shr-align-middle',\n  },\n  variants: {\n    size: {\n      XS: {\n        anchor: 'shr-text-xs',\n      },\n      S: {\n        anchor: 'shr-text-sm',\n      },\n      M: {\n        anchor: 'shr-text-base',\n      },\n    },\n  },\n})\nconst { anchor, prefixWrapper, suffixWrapper } = classNameGenerator()\nconst prefixWrapperClassName = prefixWrapper()\nconst suffixWrapperClassName = suffixWrapper()\n\nconst ActualTextLink: TextLinkComponent = forwardRef(\n  <T extends ElementType = 'a'>(\n    {\n      elementAs,\n      href,\n      target,\n      rel,\n      onClick,\n      children,\n      prefix,\n      suffix,\n      className,\n      size,\n      ...rest\n    }: PropsWithoutRef<Props<T>> & ElementProps<T>,\n    ref: Ref<ElementRef<T>>,\n  ) => {\n    const Anchor = elementAs || 'a'\n    const actualSuffix = useMemo(() => {\n      // target=\"_blank\" だが OpenInNewTabIcon を表示したくない場合 suffix に null を指定すれば表示しないようにしている\n      if (target === '_blank' && !prefix && suffix === undefined) {\n        return <OpenInNewTabIcon />\n      }\n\n      return suffix\n    }, [prefix, suffix, target])\n    const actualHref = useMemo(() => {\n      if (href) {\n        return href\n      }\n\n      if (onClick) {\n        return ''\n      }\n\n      return undefined\n    }, [href, onClick])\n    const actualRel = useMemo(\n      () => (rel === undefined && target === '_blank' ? 'noopener noreferrer' : rel),\n      [rel, target],\n    )\n    const anchorClassName = useMemo(() => anchor({ size, className }), [size, className])\n\n    const actualOnClick = useMemo(() => {\n      if (!onClick) {\n        return undefined\n      }\n\n      if (href) {\n        return onClick\n      }\n\n      return (e: MouseEvent) => {\n        e.preventDefault()\n        onClick(e)\n      }\n    }, [onClick, href])\n\n    return (\n      <Anchor\n        {...rest}\n        ref={ref}\n        href={actualHref}\n        target={target}\n        rel={actualRel}\n        onClick={actualOnClick}\n        className={anchorClassName}\n      >\n        {prefix && <span className={prefixWrapperClassName}>{prefix}</span>}\n        {children}\n        {actualSuffix && <span className={suffixWrapperClassName}>{actualSuffix}</span>}\n      </Anchor>\n    )\n  },\n)\n\nexport const TextLink = memo(ActualTextLink) as typeof ActualTextLink\n"],"names":["tv","forwardRef","useMemo","_jsx","OpenInNewTabIcon","_jsxs","memo"],"mappings":";;;;;;;;AAsCA,MAAM,kBAAkB,GAAGA,QAAE,CAAC;AAC5B,IAAA,KAAK,EAAE;AACL,QAAA,MAAM,EAAE;YACN,qDAAqD;YACrD,6BAA6B;YAC7B,gFAAgF;YAChF,yCAAyC;AAC1C,SAAA;AACD,QAAA,aAAa,EAAE,8BAA8B;AAC7C,QAAA,aAAa,EAAE,8BAA8B;AAC9C,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,EAAE,EAAE;AACF,gBAAA,MAAM,EAAE,aAAa;AACtB,aAAA;AACD,YAAA,CAAC,EAAE;AACD,gBAAA,MAAM,EAAE,aAAa;AACtB,aAAA;AACD,YAAA,CAAC,EAAE;AACD,gBAAA,MAAM,EAAE,eAAe;AACxB,aAAA;AACF,SAAA;AACF,KAAA;AACF,CAAA,CAAC;AACF,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,kBAAkB,EAAE;AACrE,MAAM,sBAAsB,GAAG,aAAa,EAAE;AAC9C,MAAM,sBAAsB,GAAG,aAAa,EAAE;AAE9C,MAAM,cAAc,GAAsBC,gBAAU,CAClD,CACE,EACE,SAAS,EACT,IAAI,EACJ,MAAM,EACN,GAAG,EACH,OAAO,EACP,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,IAAI,EACJ,GAAG,IAAI,EACqC,EAC9C,GAAuB,KACrB;AACF,IAAA,MAAM,MAAM,GAAG,SAAS,IAAI,GAAG;AAC/B,IAAA,MAAM,YAAY,GAAGC,aAAO,CAAC,MAAK;;QAEhC,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE;YAC1D,OAAOC,cAAA,CAACC,iDAAgB,EAAA,EAAA,CAAG;QAC7B;AAEA,QAAA,OAAO,MAAM;IACf,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC5B,IAAA,MAAM,UAAU,GAAGF,aAAO,CAAC,MAAK;QAC9B,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnB,IAAA,MAAM,SAAS,GAAGA,aAAO,CACvB,OAAO,GAAG,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,GAAG,qBAAqB,GAAG,GAAG,CAAC,EAC9E,CAAC,GAAG,EAAE,MAAM,CAAC,CACd;IACD,MAAM,eAAe,GAAGA,aAAO,CAAC,MAAM,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAErF,IAAA,MAAM,aAAa,GAAGA,aAAO,CAAC,MAAK;QACjC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,SAAS;QAClB;QAEA,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,OAAO;QAChB;QAEA,OAAO,CAAC,CAAa,KAAI;YACvB,CAAC,CAAC,cAAc,EAAE;YAClB,OAAO,CAAC,CAAC,CAAC;AACZ,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEnB,QACEG,eAAA,CAAC,MAAM,EAAA,EAAA,GACD,IAAI,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,eAAe,EAAA,QAAA,EAAA,CAEzB,MAAM,IAAIF,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,sBAAsB,EAAA,QAAA,EAAG,MAAM,EAAA,CAAQ,EAClE,QAAQ,EACR,YAAY,IAAIA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,sBAAsB,EAAA,QAAA,EAAG,YAAY,EAAA,CAAQ,CAAA,EAAA,CACxE;AAEb,CAAC,CACF;MAEY,QAAQ,GAAGG,UAAI,CAAC,cAAc;;;;"}