diff --git a/BitFun-Installer/src-tauri/tauri.conf.json b/BitFun-Installer/src-tauri/tauri.conf.json index 5a25428a..f57357c9 100644 --- a/BitFun-Installer/src-tauri/tauri.conf.json +++ b/BitFun-Installer/src-tauri/tauri.conf.json @@ -32,9 +32,11 @@ { "label": "installer", "title": "Install BitFun", - "width": 700, - "height": 480, - "resizable": false, + "width": 760, + "height": 560, + "minWidth": 700, + "minHeight": 480, + "resizable": true, "maximizable": false, "decorations": false, "center": true diff --git a/BitFun-Installer/src/pages/LanguageSelect.tsx b/BitFun-Installer/src/pages/LanguageSelect.tsx index 491e4a74..6a863676 100644 --- a/BitFun-Installer/src/pages/LanguageSelect.tsx +++ b/BitFun-Installer/src/pages/LanguageSelect.tsx @@ -8,7 +8,7 @@ interface LanguageSelectProps { const LANGUAGES = [ { code: 'en', label: 'English', native: 'English' }, - { code: 'zh', label: 'Chinese', native: '简体中文' }, + { code: 'zh', label: 'Chinese', native: '\u7b80\u4f53\u4e2d\u6587' }, ]; export function LanguageSelect({ onSelect }: LanguageSelectProps) { @@ -26,7 +26,7 @@ export function LanguageSelect({ onSelect }: LanguageSelectProps) { return (
-
-
- - - - - - Select Language / 选择语言 -
+
+
+
+
+ + + + + + Select Language / {'\u9009\u62e9\u8bed\u8a00'} +
-
- {LANGUAGES.map((lang) => { - const isSelected = selected === lang.code; - return ( - - ); - })} +
+ {LANGUAGES.map((lang) => { + const isSelected = selected === lang.code; + return ( + + ); + })} +
+
+
+
-
- {diskSpace && ( -
- {t('options.required')}: {formatBytes(diskSpace.required)} - - {t('options.available')}:{' '} - {diskSpace.available < Number.MAX_SAFE_INTEGER ? formatBytes(diskSpace.available) : '-'} - - {!diskSpace.sufficient && ( - {t('options.insufficientSpace')} - )} +
+
+
+
+ {t('options.subtitle')}
- )} - {error && ( -
- {error} +
+
+ + + + {t('options.pathLabel')} +
+
+ setOptions((prev) => ({ ...prev, installPath: e.target.value }))} + placeholder={t('options.pathPlaceholder')} + /> + +
+ {diskSpace && ( +
+ {t('options.required')}: {formatBytes(diskSpace.required)} + + {t('options.available')}:{' '} + {diskSpace.available < Number.MAX_SAFE_INTEGER ? formatBytes(diskSpace.available) : '-'} + + {!diskSpace.sufficient && ( + {t('options.insufficientSpace')} + )} +
+ )} + {error && ( +
+ {error} +
+ )}
- )} -
-
-
{t('options.optionsLabel')}
-
- update('desktopShortcut', value)} - label={t('options.desktopShortcut')} - /> - update('startMenu', value)} - label={t('options.startMenu')} - /> - update('contextMenu', value)} - label={t('options.contextMenu')} - /> - update('addToPath', value)} - label={t('options.addToPath')} - /> +
+
{t('options.optionsLabel')}
+
+ update('desktopShortcut', value)} + label={t('options.desktopShortcut')} + /> + update('startMenu', value)} + label={t('options.startMenu')} + /> + update('contextMenu', value)} + label={t('options.contextMenu')} + /> + update('addToPath', value)} + label={t('options.addToPath')} + /> +
+
-
+
-
-
- - ) : ( - <> - + +

{t('progress.failed')}

+

{error}

+ + )} +
+
+ + {!error ? ( +
+ - -
- + {t('progress.confirmContinue')} + +
+ ) : ( +
+ + +
)}
); diff --git a/BitFun-Installer/src/pages/ThemeSetup.tsx b/BitFun-Installer/src/pages/ThemeSetup.tsx index 19e56cb2..200ffc25 100644 --- a/BitFun-Installer/src/pages/ThemeSetup.tsx +++ b/BitFun-Installer/src/pages/ThemeSetup.tsx @@ -67,78 +67,81 @@ export function ThemeSetup({ options, setOptions, onLaunch, onClose }: ThemeSetu }; return ( -
-

- {t('themeSetup.subtitle')} -

+
+
+
+

+ {t('themeSetup.subtitle')} +

-
- +
+ - {orderedThemes.map((theme) => ( - - ))} -
+
+ {t(`themeSetup.themeNames.${theme.id}`, { defaultValue: theme.name })} +
+ + ))} +
-
- setOptions((prev) => ({ ...prev, launchAfterInstall: checked }))} - label={t('options.launchAfterInstall')} - /> -
+
+ setOptions((prev) => ({ ...prev, launchAfterInstall: checked }))} + label={t('options.launchAfterInstall')} + /> +
- {finishError && ( -
- {finishError} + {finishError && ( +
+ {finishError} +
+ )}
- )} +
-
+
diff --git a/BitFun-Installer/src/styles/global.css b/BitFun-Installer/src/styles/global.css index 9f12c32d..86ba0d02 100644 --- a/BitFun-Installer/src/styles/global.css +++ b/BitFun-Installer/src/styles/global.css @@ -76,9 +76,58 @@ html, body, #root { .installer-content { flex: 1; display: flex; flex-direction: column; + min-height: 0; overflow: hidden; position: relative; } +.page-shell { + flex: 1; + min-height: 0; + display: flex; + flex-direction: column; +} + +.page-scroll { + flex: 1; + min-height: 0; + overflow-y: auto; + padding: 24px 32px 18px; +} + +.page-container { + width: 100%; + max-width: 620px; + margin: 0 auto; + animation: fadeIn 0.4s ease-out; +} + +.page-container--center { + min-height: 100%; + display: flex; + flex-direction: column; + justify-content: center; +} + +.page-footer { + display: flex; + justify-content: flex-end; + align-items: center; + gap: 10px; + flex-wrap: wrap; + padding: 10px 22px 12px; + border-top: 1px solid rgba(148, 163, 184, 0.12); + background: var(--color-bg-primary); + flex-shrink: 0; +} + +.page-footer--split { + justify-content: space-between; +} + +.page-footer--center { + justify-content: center; +} + .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; @@ -487,6 +536,7 @@ html, body, #root { justify-content: flex-end; align-items: center; gap: 10px; + flex-wrap: wrap; padding: 10px 22px 12px; border-top: 1px solid rgba(148, 163, 184, 0.12); background: var(--color-bg-primary); @@ -584,11 +634,8 @@ html, body, #root { .uninstall-page { flex: 1; display: flex; - align-items: center; - justify-content: center; - padding: 28px 42px 92px; - animation: fadeIn 0.4s ease-out; - position: relative; + min-height: 0; + flex-direction: column; } .uninstall-card { @@ -602,8 +649,7 @@ html, body, #root { } .uninstall-title { - margin-top: -34px; - margin-bottom: 30px; + margin-bottom: 22px; font-size: 24px; font-weight: 600; color: var(--color-text-primary); @@ -684,7 +730,27 @@ html, body, #root { .uninstall-actions { display: flex; gap: 10px; - position: absolute; - right: 24px; - bottom: 18px; + justify-content: flex-end; + flex-wrap: wrap; +} + +@media (max-width: 760px) { + .page-scroll { + padding: 18px 18px 12px; + } + + .page-footer { + padding: 8px 14px 10px; + } +} + +@media (max-width: 520px) { + .page-container--center { + justify-content: flex-start; + } + + .page-footer, + .page-footer--split { + justify-content: center; + } }