// 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 (    
             
         
           
             

{fontName}

              {isPopular && (                                   Top                               )}            
           
                                       
         
          {displayName && (            

                            {displayName}            

          )}          
(e.key === "Enter" || e.key === " ") && handleCopy()}             aria-label="Click to copy text"             style={{ pointerEvents: "auto" }}             className={`text-xl sm-text-2xl md-text-3xl mb-4 p-3 sm:p-4 bg-gray-50 rounded-xl text-center select-all text-gray-800 min-h-[70px] sm:min-h-[80px] flex items-center justify-center cursor-pointer hover:bg-gray-100 transition-colors ${fontClass}`}           >             {previewText}          
                 
     
   
  ); }); PerformanceOptimizedFontCard.displayName = "PerformanceOptimizedFontCard"; export default memo(PerformanceOptimizedFontCard);