import React, { useState } from 'react'; import type { Grid } from '@/types/grid'; import { getSavedArt, deleteSavedArt, type SavedArt } from '@/utils/storage'; import { GridComponent } from './grid/GridComponent'; import { gridFromAscii } from '@/utils/grid'; const demoArt = [ { name: '🎨 Butterfly', art: `| | | ⠀⠀⠀⠀⊹ | | ⢶⢻⣑⣒⢤⡀⠀⢄⠀⠀⡠⠀⢀⡤⣆⣊⡿⡷ | | ⠀⠹⠹⣚⣣⠻⣦⡀⠀⠀⢀⣴⠟⣸⢓⢎⠏⠀ | | ⠀⠀⢡⣱⣖⣢⡾⢿⣾⣷⡿⢷⣖⣒⣎⡎⠀⠀ | | ⠀⠀⠀⣠⠓⢬⠅⡺⢻⡟⢗⠨⡥⠚⣄⠀⠀⠀ | | ⠀⠀⠀⣿⡆⠘⠆⢇⢸⡇⠸⠰⠃⢰⣿⠀⠀⠀ | | ⠀⠀⠀⠐⡻⣮⣬⠞⠈⠁⠳⣤⣴⢿⠂⠀⠀⠀ | | ⠀⠀⠀⡜⠀⠁⠉⠀⠀⠀⠀⠈⠈⠀⢣⠀⠀⠀ | | ⊹ | | |` }, { name: '😊 Smiley', art: ` ████████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████████ ██ ██ ██ ████████ ` }, { name: '🌟 Star', art: ` ★ ███ █████ ███████ █████████ ███████ █████ ███ █ ` }, ]; interface LoadScreenProps { onLoad: (grid: Grid) => void; onNew: () => void; onPaste: (ansiText: string) => void; } export const LoadScreen: React.FC = ({ onLoad, onNew, onPaste }) => { const [saves] = useState(getSavedArt()); const [pasteText, setPasteText] = useState(''); const handleDemoLoad = (art: string) => { const grid = gridFromAscii(art); onLoad(grid); }; const formatDate = (timestamp: number) => { const date = new Date(timestamp); return date.toLocaleString(); }; const handleDelete = (id: string, e: React.MouseEvent) => { e.stopPropagation(); deleteSavedArt(id); window.location.reload(); }; const handlePaste = () => { if (pasteText.trim()) { onPaste(pasteText.trim()); } }; return (

ANSI Color Paint

Demo Templates

{demoArt.map((demo, idx) => ( ))}

Recent Saves

{saves.length > 0 ? (
{saves.map((save) => (
onLoad(save.grid)} style={{ border: '2px solid var(--regular3)', borderRadius: '4px', padding: '1rem', cursor: 'pointer', display: 'flex', justifyContent: 'space-between', alignItems: 'center', transition: 'border-color 0.2s', }} onMouseEnter={(e) => { e.currentTarget.style.borderColor = 'var(--regular6)'; }} onMouseLeave={(e) => { e.currentTarget.style.borderColor = 'var(--regular3)'; }} >
{save.name}
{formatDate(save.timestamp)}
))}
) : (

No saves yet

)}

Import from ANSI Text