import type { FC, HTMLProps, JSX, Ref } from 'react' import classNames from 'classnames' import React, { forwardRef, useCallback } from 'react' const COLOR = { primary: 'hover:text-black hover:dark:text-white hover:underline focus:text-white active:text-white', blue: 'text-blue', } export type Color = 'primary' | 'blue' export interface ExternalLinkProps extends Omit, 'as' | 'ref' | 'onClick'> { href: string color?: Color startIcon?: JSX.Element endIcon?: JSX.Element } export const External: FC = forwardRef(({ target = '_blank', href, children, rel = 'noopener noreferrer', className = '', color = 'primary', startIcon = undefined, endIcon = undefined, ...rest }, ref: Ref) => { const handleClick = useCallback( (event: React.MouseEvent) => { // don't prevent default, don't redirect if it's a new tab if (target === '_blank' || event.ctrlKey || event.metaKey) event.stopPropagation() else event.preventDefault() }, [target], ) return ( {startIcon && startIcon} {children} {endIcon && endIcon} ) })