"use client" import { useState, useEffect } from "react" import { createPortal } from "react-dom" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { exportStyleguide } from "@/utils/export-styleguide" import { Loader2, Check, X } from "lucide-react" import { Badge } from "@/components/ui/badge" import { useColorPalette } from "@/contexts/color-context" import { useTheme } from "next-themes" interface ExportPackagesOverlayProps { open: boolean onOpenChange: (open: boolean) => void } export function ExportPackagesOverlay({ open, onOpenChange }: ExportPackagesOverlayProps) { const [exporting, setExporting] = useState(false) const [exportType, setExportType] = useState<"free" | "pro" | null>(null) const [exportError, setExportError] = useState(null) const [email, setEmail] = useState("") const [mounted, setMounted] = useState(false) const { primaryColor } = useColorPalette() const { theme } = useTheme() useEffect(() => { setMounted(true) }, []) const handleExport = async (packageType: "free" | "pro") => { // For Starter Kit, require email if (packageType === "free" && !email.trim()) { setExportError("Please enter your email address to download the Starter Kit") return } // Basic email validation if (packageType === "free" && email.trim()) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ if (!emailRegex.test(email.trim())) { setExportError("Please enter a valid email address") return } } setExportType(packageType) setExporting(true) setExportError(null) try { // Collect email for starter kit downloads if (packageType === "free") { const emailResponse = await fetch("/api/collect-email", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ email: email.trim(), packageType: "starter-kit", }), }) if (!emailResponse.ok) { throw new Error("Failed to process email") } } await exportStyleguide({ packageType }) setTimeout(() => { setExporting(false) setExportType(null) }, 2000) } catch (error) { console.error("Export failed:", error) setExporting(false) setExportType(null) setExportError(error instanceof Error ? error.message : "An unknown error occurred") } } if (!open || !mounted) return null const overlayContent = (
{/* Frosted Glass Background */}
onOpenChange(false)} /> {/* Content - Just the cards */}
{exportError && exportError !== "Please enter your email address to download the Starter Kit" && exportError !== "Please enter a valid email address" && (
{exportError}
)}
{/* Starter Kit */}

Starter Kit

Free

Perfect for learning and small projects

What's included:

  • Essential UI components (20+)
  • Color system & typography
  • Basic theming support

Not included:

  • Design controls
  • Pre-built page blocks
setEmail(e.target.value)} error={ exportError === "Please enter your email address to download the Starter Kit" || exportError === "Please enter a valid email address" } className="w-full h-9 text-sm" /> {(exportError === "Please enter your email address to download the Starter Kit" || exportError === "Please enter a valid email address") && (

{exportError}

)}
{/* Full Package */}

Full Package

Recommended

Complete solution for professional projects

Everything in Starter Kit, plus:

  • Complete component library (35+)
  • Live design controls interface
  • Pre-built page blocks & templates
  • Material design system
) return createPortal(overlayContent, document.body) }