import React, { useState, useCallback, forwardRef, memo } 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, Zap } from "lucide-react"; import { fontTransforms } from "@/components/fontTransforms"; const sStr = (v) => (v ?? "").toString(); const updateFontHistory = (fontName) => { if (typeof window === "undefined") return; try { const key = "fancytext_recent_fonts"; const stored = JSON.parse(sessionStorage.getItem(key) || "[]"); const updated = [fontName, ...stored.filter((f) => f !== fontName)].slice(0, 5); sessionStorage.setItem(key, JSON.stringify(updated)); } catch {} }; const PerformanceOptimizedFontCard = forwardRef(({ fontName, transformedText, category, isPopular, animationsEnabled, index, onCopy, onLike, onShare }, ref) => { const [copied, setCopied] = useState(false); const [liked, setLiked] = useState(() => { if (typeof window === "undefined") return false; try { return localStorage.getItem(`liked_${fontName}`) === "true"; } catch { return false; } }); const handleCopy = useCallback(async () => { const textToCopy = sStr(transformedText?.transformed ?? transformedText); try { await navigator.clipboard.writeText(textToCopy); setCopied(true); updateFontHistory(fontName); navigator.vibrate?.(50); onCopy?.(fontName, textToCopy); setTimeout(() => setCopied(false), 2000); } catch { const textarea = document.createElement("textarea"); textarea.value = textToCopy; textarea.setAttribute("readonly", ""); textarea.style.position = "fixed"; textarea.style.opacity = "0"; document.body.appendChild(textarea); textarea.select(); try { document.execCommand("copy"); setCopied(true); updateFontHistory(fontName); setTimeout(() => setCopied(false), 2000); } catch (e) { console.error("Fallback copy failed:", e); } document.body.removeChild(textarea); } }, [transformedText, fontName, onCopy]); const handleLike = useCallback(() => { const newLiked = !liked; setLiked(newLiked); try { localStorage.setItem(`liked_${fontName}`, newLiked.toString()); } catch {} navigator.vibrate?.(newLiked ? 30 : 0); onLike?.(fontName, newLiked); }, [liked, fontName, onLike]); const handleShare = useCallback(async () => { const shareText = `${sStr(transformedText?.transformed ?? transformedText)}\n\nErstellt mit FancyText: ${window.location.href}`; if (navigator.share) { try { await navigator.share({ title: "Schau dir diese coole Schriftart an! 🔥", text: shareText, url: window.location.href }); onShare?.(fontName); } catch {} } else { try { await navigator.clipboard.writeText(shareText); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (e) { console.error("Share fallback failed:", e); } } }, [transformedText, fontName, onShare]); const getFontStyle = useCallback((name) => { const baseStyle = { wordBreak: "break-word", lineHeight: "1.3", willChange: "auto" }; const fontEntry = fontTransforms[name]; if (!fontEntry) return baseStyle; const style = { ...baseStyle }; if (fontEntry.fontFamily) style.fontFamily = fontEntry.fontFamily; if (fontEntry.fontWeight) style.fontWeight = fontEntry.fontWeight; if (fontEntry.textTransform) style.textTransform = fontEntry.textTransform; if (fontEntry.letterSpacing) style.letterSpacing = fontEntry.letterSpacing; if (fontEntry.fontSize) style.fontSize = fontEntry.fontSize; return style; }, []); const previewText = sStr(transformedText?.transformed ?? transformedText) || "Hallo Instagram!"; const fontClass = transformedText?.fontClassName ?? ""; return (