import { useState } from 'react' import { Toaster } from 'sonner' import { Sidebar } from '@/components/layout/Sidebar' import { MainContent } from '@/components/layout/MainContent' import { AuthorFooter } from '@/components/layout/AuthorFooter' import { CrawlerConfigPanel } from '@/components/config/CrawlerConfigPanel' import { EnvironmentCheck, isEnvChecked } from '@/components/env/EnvironmentCheck' import { LicenseDisclaimer, isLicenseAccepted } from '@/components/license/LicenseDisclaimer' function App() { // Initialize by checking localStorage if license has been accepted const [licenseAccepted, setLicenseAccepted] = useState(() => isLicenseAccepted()) // Initialize by checking localStorage if env check has passed const [envChecked, setEnvChecked] = useState(() => isEnvChecked()) // State for showing disclaimer manually const [showDisclaimer, setShowDisclaimer] = useState(false) const handleEnvCheckComplete = () => { setEnvChecked(true) } const handleLicenseAccept = () => { setLicenseAccepted(true) setShowDisclaimer(false) } const handleShowDisclaimer = () => { setShowDisclaimer(true) } return (
{/* License Disclaimer Modal - Shows first or when triggered */} {(!licenseAccepted || showDisclaimer) && ( )} {/* Environment Check Modal - Shows after license accepted */} {licenseAccepted && !showDisclaimer && !envChecked && ( )} {/* Header Bar */} {/* Main Area */}
{/* Config Panel - Primary Action Area (Always Expanded) */}
{/* Console - Collapsible Terminal */}
{/* Author Footer */} {/* Toast notifications - Theme-aware style */}
) } export default App