'use client'; import { useState } from 'react'; import { PaletteGrid } from '@/components/color/PaletteGrid'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Select } from '@/components/ui/select'; import { useGenerateDistinct } from '@/lib/api/queries'; import { Loader2 } from 'lucide-react'; import { toast } from 'sonner'; export default function DistinctPage() { const [count, setCount] = useState(8); const [metric, setMetric] = useState<'cie76' | 'ciede2000'>('ciede2000'); const [colors, setColors] = useState([]); const [stats, setStats] = useState<{ min_distance: number; avg_distance: number; generation_time_ms: number; } | null>(null); const generateMutation = useGenerateDistinct(); const handleGenerate = async () => { try { const result = await generateMutation.mutateAsync({ count, metric, }); setColors(result.colors); setStats(result.stats); toast.success(`Generated ${result.colors.length} distinct colors`); } catch (error) { toast.error('Failed to generate distinct colors'); } }; return (

Distinct Colors Generator

Generate visually distinct colors using simulated annealing

{/* Controls */}

Settings

setCount(parseInt(e.target.value))} />

Higher counts take longer to generate

{generateMutation.isPending && (
This may take a few moments...
)} {stats && (

Statistics

Min Distance: {stats.min_distance.toFixed(2)}
Avg Distance: {stats.avg_distance.toFixed(2)}
Generation Time: {(stats.generation_time_ms / 1000).toFixed(2)}s
)}
{/* Results */}

Generated Colors {colors.length > 0 && `(${colors.length})`}

); }