diff --git a/.gitignore b/.gitignore index 3c3629e..1380c2e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +.next \ No newline at end of file diff --git a/components/PerformanceOptimizedFontCard.jsx b/components/PerformanceOptimizedFontCard.jsx index a2279f5..b0330c3 100644 --- a/components/PerformanceOptimizedFontCard.jsx +++ b/components/PerformanceOptimizedFontCard.jsx @@ -9,169 +9,169 @@ 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 {} + 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 + 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 [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 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 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 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; + const previewText = sStr(transformedText?.transformed ?? transformedText) || "Hallo Instagram!"; + const fontClass = transformedText?.fontClassName ?? ""; + const displayName = fontTransforms[fontName]?.description; - return ( -
-
+