// components/ui/FontCard.jsx import React, { useState } from "react"; import { Card } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Copy, Check, Heart, Share2, Info } from "lucide-react"; import { fontTransforms } from "../fontTransforms"; import { getFontData } from "@/lib/fonts"; export default function FontCard({ fontName, transformedText, category, isPopular, index = 0, }) { const [copied, setCopied] = useState(false); const [liked, setLiked] = useState(false); const fontInfo = fontTransforms[fontName]; const fontData = getFontData(fontName); const displayText = transformedText || "Hallo Instagram!"; const handleCopy = () => { if (navigator.clipboard && window.isSecureContext) { navigator.clipboard .writeText(displayText) .then(() => flashCopied()) .catch(() => fallbackCopy()); } else { fallbackCopy(); } }; const flashCopied = () => { setCopied(true); setTimeout(() => setCopied(false), 2000); }; const fallbackCopy = () => { const textarea = document.createElement("textarea"); textarea.value = displayText; textarea.setAttribute("readonly", ""); textarea.style.position = "fixed"; textarea.style.top = "0"; textarea.style.left = "0"; textarea.style.width = "1px"; textarea.style.height = "1px"; textarea.style.padding = "0"; textarea.style.border = "none"; textarea.style.outline = "none"; textarea.style.boxShadow = "none"; textarea.style.background = "transparent"; document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { document.execCommand("copy"); flashCopied(); } catch (err) { console.error("Fallback Copy fehlgeschlagen:", err); } document.body.removeChild(textarea); }; const handleShare = async () => { if (!navigator.share) return; try { await navigator.share({ title: `FancyText – ${fontName}`, text: displayText, url: window.location.href, }); } catch (err) { console.error("Share fehlgeschlagen:", err); } }; return (

{fontName}

{isPopular && ( Beliebt )} {category && ( {category} )}
{fontInfo?.description && (

{fontInfo.description}

)}
); }