| import React, { useState } from 'react'; |
| import DropZone from './components/DropZone'; |
| import ResultList from './components/ResultList'; |
|
|
| function App() { |
| const [refreshKey, setRefreshKey] = useState(0); |
|
|
| const handleUploadSuccess = () => { |
| |
| |
| setTimeout(() => { |
| setRefreshKey(old => old + 1); |
| }, 1000); |
| }; |
|
|
| return ( |
| <div className="min-h-screen bg-gray-900 text-gray-100 font-sans selection:bg-blue-500/30"> |
| <div className="absolute inset-0 bg-[url('https://grainy-gradients.vercel.app/noise.svg')] opacity-20 pointer-events-none"></div> |
| |
| <main className="relative container mx-auto px-4 py-12 flex flex-col items-center min-h-screen"> |
| <header className="mb-12 text-center space-y-2"> |
| <h1 className="text-4xl md:text-5xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-purple-500"> |
| QuasarVaultage |
| </h1> |
| <p className="text-gray-400 text-lg"> |
| Advanced Excel Processing Pipeline |
| </p> |
| </header> |
| |
| <DropZone onUploadSuccess={handleUploadSuccess} /> |
| |
| <div className="w-full h-px bg-gradient-to-r from-transparent via-gray-700 to-transparent my-10 max-w-2xl"></div> |
| |
| <ResultList refreshTrigger={refreshKey} /> |
| |
| <footer className="mt-auto pt-10 text-gray-600 text-sm"> |
| © {new Date().getFullYear()} MTParsee System |
| </footer> |
| </main> |
| </div> |
| ); |
| } |
|
|
| export default App; |
|
|