import InkLink from 'ink-link'
import { Text } from 'ink'
import React from 'react'
import { env } from '../utils/env'
type LinkProps = {
url: string
children?: React.ReactNode
}
// Terminals that support hyperlinks
const LINK_SUPPORTING_TERMINALS = ['iTerm.app', 'WezTerm', 'Hyper', 'VSCode']
export default function Link({ url, children }: LinkProps): React.ReactNode {
const supportsLinks = LINK_SUPPORTING_TERMINALS.includes(env.terminal ?? '')
// Determine what text to display - use children or fall back to the URL itself
const displayContent = children || url
// Use InkLink to get clickable links when we can, or to get a nice fallback when we can't
if (supportsLinks || displayContent !== url) {
return (
{displayContent}
)
} else {
// But if we don't have a title and just have a url *and* are not a terminal that supports links
// that doesn't support clickable links anyway, just show the URL
return {displayContent}
}
}