'use client'; import React, { useState } from 'react'; import Link from 'next/link'; import Image from 'next/image'; import { ArrowUpRight, Globe } from 'lucide-react'; import { GlassCard } from './GlassCard'; import styles from './MenuButton.module.css'; interface MenuButtonProps { name: string; url: string; } /** * Extract base domain from URL for favicon fetch. */ function getDomain(url: string): string { try { const { hostname } = new URL(url); return hostname; } catch { return url; } } /** * MenuButton component displaying a favicon and app name. * Favicons are fetched from Google's favicon CDN. */ export const MenuButton: React.FC = ({ name, url }) => { const domain = getDomain(url); const faviconUrl = `https://www.google.com/s2/favicons?domain=${domain}&sz=64`; const [faviconError, setFaviconError] = useState(false); return (
{!faviconError ? ( {`${name} setFaviconError(true)} unoptimized /> ) : (
)}
{name}
); };