"use client"; import { useEffect, useState } from "react"; import { useTheme } from "next-themes"; import { StyleData } from "@/lib/types"; import { generatePreviewStyle, generateBackgroundGradient, } from "@/lib/cssGenerator"; import { PhoneMockup } from "./PhoneMockup"; import { UIControlsShowcase } from "./UIControlsShowcase"; import { ColorPalette } from "./ColorPalette"; import { MetadataBadges } from "./MetadataBadges"; import { ExpandableSection } from "./ExpandableSection"; import { CodeSnippet } from "./CodeSnippet"; import { InteractiveChecklist } from "./InteractiveChecklist"; interface StyleDetailModalProps { style: StyleData; onClose: () => void; } export function StyleDetailModal({ style, onClose }: StyleDetailModalProps) { const { theme } = useTheme(); const [mounted, setMounted] = useState(false); useEffect(() => setMounted(true), []); // ESC to close useEffect(() => { function handleKeyDown(e: KeyboardEvent) { if (e.key === "Escape") onClose(); } document.addEventListener("keydown", handleKeyDown); return () => document.removeEventListener("keydown", handleKeyDown); }, [onClose]); // Lock body scroll useEffect(() => { document.body.style.overflow = "hidden"; return () => { document.body.style.overflow = ""; }; }, []); const isDark = mounted ? theme === "dark" : false; const cardStyle = generatePreviewStyle(style, isDark); const bgGradient = generateBackgroundGradient(style.extractedColors, isDark); const accentColor = style.extractedColors[0] || (isDark ? "#6366f1" : "#3b82f6"); const secondaryColor = style.extractedColors[1] || style.extractedColors[0] || (isDark ? "#8b5cf6" : "#6366f1"); return (