'use client'; import React, { useState, useEffect } from 'react'; import ColorSchemeCard from "./components/ColorSchemeCard"; import SettingsIcon from "./components/SettingsIcon"; import Settings from "./components/Settings"; import { ColorScheme, knownSchemes, generateRandomScheme, generateSchemeFromGeneticAlgorithm } from './utils/colorSchemes'; import { AnimatePresence } from 'framer-motion'; export default function Home() { const [schemes, setSchemes] = useState([]); const [isDarkMode, setIsDarkMode] = useState(false); const [isSettingsOpen, setIsSettingsOpen] = useState(false); const [likedSchemes, setLikedSchemes] = useState([]); const [dislikedSchemes, setDislikedSchemes] = useState([]); useEffect(() => { generateNewSchemes(8); setIsDarkMode(window.matchMedia('(prefers-color-scheme: dark)').matches); const storedLikedSchemes = localStorage.getItem('likedSchemes'); const storedDislikedSchemes = localStorage.getItem('dislikedSchemes'); if (storedLikedSchemes) { setLikedSchemes(JSON.parse(storedLikedSchemes)); } if (storedDislikedSchemes) { setDislikedSchemes(JSON.parse(storedDislikedSchemes)); } }, []); useEffect(() => { document.documentElement.classList.toggle('dark', isDarkMode); }, [isDarkMode]); useEffect(() => { localStorage.setItem('likedSchemes', JSON.stringify(likedSchemes)); }, [likedSchemes]); useEffect(() => { localStorage.setItem('dislikedSchemes', JSON.stringify(dislikedSchemes)); }, [dislikedSchemes]); const generateNewSchemes = (count: number) => { const knownCount = Math.floor(count / 2); const generatedCount = count - knownCount; const newSchemes = [ ...knownSchemes.sort(() => 0.5 - Math.random()).slice(0, knownCount), ...Array(generatedCount).fill(null).map(() => likedSchemes.length > 0 ? generateSchemeFromGeneticAlgorithm(likedSchemes, dislikedSchemes) : generateRandomScheme() ) ]; // Shuffle the new schemes const shuffledSchemes = newSchemes.sort(() => 0.5 - Math.random()); setSchemes(prevSchemes => [...prevSchemes, ...shuffledSchemes]); }; const handleLike = (scheme: ColorScheme) => { setLikedSchemes(prev => [...prev, scheme]); removeTopScheme(); }; const handleDislike = (scheme: ColorScheme) => { setDislikedSchemes(prev => [...prev, scheme]); removeTopScheme(); }; const removeTopScheme = () => { setSchemes(prevSchemes => { const newSchemes = prevSchemes.slice(1); if (newSchemes.length < 3) { generateNewSchemes(3); } return newSchemes; }); }; const toggleDarkMode = () => { setIsDarkMode(prev => !prev); }; return (

Terminal Color Scheme Generator

setIsSettingsOpen(true)} />
{schemes.slice(0, 3).map((scheme, index) => ( handleLike(scheme)} onDislike={() => handleDislike(scheme)} index={index} /> ))}
setIsSettingsOpen(false)} />
); }