'use client'; import { useState } from 'react'; import { ColorPicker } from '@/components/color/ColorPicker'; import { PaletteGrid } from '@/components/color/PaletteGrid'; import { ExportMenu } from '@/components/tools/ExportMenu'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Select } from '@/components/ui/select'; import { useGenerateGradient } from '@/lib/api/queries'; import { Loader2, Plus, X } from 'lucide-react'; import { toast } from 'sonner'; export default function GradientPage() { const [stops, setStops] = useState(['#ff0099', '#0099ff']); const [count, setCount] = useState(10); const [colorspace, setColorspace] = useState< 'rgb' | 'hsl' | 'hsv' | 'lab' | 'oklab' | 'lch' | 'oklch' >('lch'); const [gradient, setGradient] = useState([]); const generateMutation = useGenerateGradient(); const handleGenerate = async () => { try { const result = await generateMutation.mutateAsync({ stops, count, colorspace, }); setGradient(result.gradient); toast.success(`Generated ${result.gradient.length} colors`); } catch (error) { toast.error('Failed to generate gradient'); } }; const addStop = () => { setStops([...stops, '#000000']); }; const removeStop = (index: number) => { if (stops.length > 2) { setStops(stops.filter((_, i) => i !== index)); } }; const updateStop = (index: number, color: string) => { const newStops = [...stops]; newStops[index] = color; setStops(newStops); }; return (

Gradient Creator

Create smooth color gradients with multiple stops

{/* Controls */}

Color Stops

{stops.map((stop, index) => (
updateStop(index, color)} />
{stops.length > 2 && ( )}
))}

Settings

setCount(parseInt(e.target.value))} />
{/* Preview */}
{gradient && gradient.length > 0 && ( <>

Gradient Preview

Colors ({gradient.length})

)}
); }