import React, { useState } from 'react'; import { Upload, Download, FileArchive, Image, Trash2, Plus, Package } from 'lucide-react'; export default function IconZipManager() { const [icons, setIcons] = useState([]); const [collections, setCollections] = useState([]); const [currentCollection, setCurrentCollection] = useState(''); const handleFileUpload = (e) => { const files = Array.from(e.target.files); const validFiles = files.filter(f => f.type.startsWith('image/') || f.name.endsWith('.ico') ); validFiles.forEach(file => { const reader = new FileReader(); reader.onload = (event) => { setIcons(prev => [...prev, { id: Date.now() + Math.random(), name: file.name, data: event.target.result, size: file.size, type: file.type }]); }; reader.readAsDataURL(file); }); }; const createCollection = () => { if (!currentCollection.trim()) { alert('Please enter a collection name'); return; } if (icons.length === 0) { alert('Please add some icons first'); return; } setCollections(prev => [...prev, { id: Date.now(), name: currentCollection, icons: [...icons], created: new Date().toLocaleString() }]); setCurrentCollection(''); setIcons([]); alert('Collection created successfully!'); }; const downloadAsZip = async (collectionIcons, collectionName) => { try { const JSZip = (await import('https://cdn.jsdelivr.net/npm/jszip@3.10.1/+esm')).default; const zip = new JSZip(); collectionIcons.forEach(icon => { const base64Data = icon.data.split(',')[1]; zip.file(icon.name, base64Data, { base64: true }); }); const content = await zip.generateAsync({ type: 'blob' }); const url = URL.createObjectURL(content); const a = document.createElement('a'); a.href = url; a.download = `${collectionName || 'icons'}.zip`; a.click(); URL.revokeObjectURL(url); } catch (error) { alert('Error creating zip file: ' + error.message); } }; const removeIcon = (id) => { setIcons(prev => prev.filter(icon => icon.id !== id)); }; const deleteCollection = (id) => { setCollections(prev => prev.filter(col => col.id !== id)); }; const formatSize = (bytes) => { if (bytes < 1024) return bytes + ' B'; if (bytes < 1048576) return (bytes / 1024).toFixed(1) + ' KB'; return (bytes / 1048576).toFixed(1) + ' MB'; }; return (
{icon.name}
{formatSize(icon.size)}
{collection.icons.length} icons • Created {collection.created}
Upload some icons to get started!