// components/PerformanceOptimizedFontCard.jsx 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 previewText = sStr(transformedText?.transformed ?? transformedText) || "Hallo Instagram!"; const fontClass = transformedText?.fontClassName ?? ""; const displayName = fontTransforms[fontName]?.description; return (