From b31b3c6d31440e690e992f9a6255d647b816af29 Mon Sep 17 00:00:00 2001 From: backuppc Date: Wed, 21 Jan 2026 15:11:57 +0900 Subject: [PATCH] Enhance download center with file size preview and dual options --- App.tsx | 19 ++++-- components/DownloadModal.tsx | 119 +++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 6 deletions(-) create mode 100644 components/DownloadModal.tsx diff --git a/App.tsx b/App.tsx index a71ef65..ea74bac 100644 --- a/App.tsx +++ b/App.tsx @@ -9,6 +9,7 @@ import SiteManagerModal from './components/SiteManagerModal'; import HelpModal from './components/HelpModal'; import { CreateFolderModal, RenameModal, DeleteModal } from './components/FileActionModals'; import ConflictModal from './components/ConflictModal'; +import DownloadModal from './components/DownloadModal'; import { formatBytes } from './utils/formatters'; const AdSenseBanner: React.FC = () => { @@ -58,6 +59,7 @@ const App: React.FC = () => { const [showConnectionHelp, setShowConnectionHelp] = useState(false); const [showSiteManager, setShowSiteManager] = useState(false); const [showHelp, setShowHelp] = useState(false); + const [showDownloadModal, setShowDownloadModal] = useState(false); const [helpInitialTab, setHelpInitialTab] = useState<'sites' | 'connection' | 'files' | 'backend'>('sites'); const [savedSites, setSavedSites] = useState([]); @@ -976,14 +978,13 @@ const App: React.FC = () => { {!(window as any).__IS_STANDALONE__ && ( - setShowDownloadModal(true)} className={`h-[30px] flex items-center justify-center px-3 rounded bg-emerald-600 hover:bg-emerald-500 text-white border border-emerald-500 shadow-md shadow-emerald-500/20 transition-all ${!connection.connected ? 'animate-pulse ring-2 ring-emerald-400/50' : ''}`} - title="백엔드 다운로드" + title="다운로드 센터" > - 백엔드 - + 다운로드 + )} + + + {/* Content */} +
+

+ 사용 환경에 맞는 실행 파일을 선택하여 다운로드하세요. +

+ +
+ {/* Option 1: Full Version */} + +
+ +
+
+
+

단일 실행 파일 (All-in-One)

+ + {sizes.full > 0 ? formatBytes(sizes.full) : 'Loading...'} + +
+

+ 설치가 필요 없으며, 프론트엔드와 백엔드가 하나로 통합되어 있습니다. + 가장 추천하는 방식입니다. +

+
+ +
+ + {/* Option 2: Backend Only */} + +
+ +
+
+
+

백엔드 전용 (Backend Only)

+ + {sizes.backend > 0 ? formatBytes(sizes.backend) : 'Loading...'} + +
+

+ 정적 파일 호스팅을 별도로 하거나, 서버 리소스를 최소화해야 할 때 사용하세요. + (프론트엔드 파일 미포함) +

+
+ +
+
+
+ + {/* Footer */} +
+ +
+ + + ); +}; + +export default DownloadModal;