import { cn } from '@crux-kit/utils'; import { toPublicHref } from '#i18n/content-href'; import { buttonVariants } from '#shared/ui/Button'; import type { NavigationLink } from '../types'; export function safeHref(link: NavigationLink): string | null { const href = link.href || link.externalUrl; if (!href) { return null; } if (href.startsWith('/')) { return toPublicHref(href); } if (href.startsWith('#')) { return href; } try { const url = new URL(href); return ['http:', 'https:', 'mailto:', 'tel:'].includes(url.protocol) ? href : null; } catch { return null; } } export function PageLink({ link, className = '' }: { link: NavigationLink; className?: string }) { const href = safeHref(link); const classes = cn(buttonVariants({ variant: link.variant }), className); if (!href) { return {link.label}; } return ( {link.label} ); } export function LinkList({ links, className = '' }: { links: NavigationLink[]; className?: string; }) { if (links.length === 0) { return null; } return (
{links.map((link, index) => ( ))}
); }