feat(w5): ship v2.0.0 platform sync, undo persistence, and updates

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-08 18:24:51 +08:00
parent cb6b4c3731
commit fe421ffc55
60 changed files with 2207 additions and 36 deletions
@@ -6,6 +6,8 @@ import { ShortcutEditor } from '@renderer/components/settings/ShortcutEditor'
import { AiSettingsPage } from '@renderer/components/settings/AiSettingsPage'
import { TemplateSettingsTab } from '@renderer/components/settings/TemplateSettingsTab'
import { BackupSettingsTab } from '@renderer/components/settings/BackupSettingsTab'
import { SyncSettingsTab } from '@renderer/components/settings/SyncSettingsTab'
import { ExtensionsSettingsTab } from '@renderer/components/settings/ExtensionsSettingsTab'
import { SubmissionPresetTab } from '@renderer/components/settings/SubmissionPresetTab'
const THEMES: { id: ThemeId; key: string }[] = [
@@ -22,7 +24,7 @@ export function SettingsPage(): React.JSX.Element {
const { t } = useTranslation()
const settings = useSettingsStore()
const [section, setSection] = useState<
'general' | 'ai' | 'templates' | 'submission' | 'backup' | 'shortcuts' | 'about'
'general' | 'ai' | 'templates' | 'submission' | 'backup' | 'extensions' | 'shortcuts' | 'about'
>('general')
return (
@@ -72,6 +74,15 @@ export function SettingsPage(): React.JSX.Element {
>
{t('settings.backup')}
</div>
<div
className={`settings-nav-item ${section === 'extensions' ? 'active' : ''}`}
onClick={() => setSection('extensions')}
role="button"
tabIndex={0}
data-testid="settings-nav-extensions"
>
{t('settings.extensions')}
</div>
<div
className={`settings-nav-item ${section === 'shortcuts' ? 'active' : ''}`}
onClick={() => setSection('shortcuts')}
@@ -305,11 +316,18 @@ export function SettingsPage(): React.JSX.Element {
{section === 'ai' && <AiSettingsPage />}
{section === 'templates' && <TemplateSettingsTab />}
{section === 'submission' && <SubmissionPresetTab />}
{section === 'backup' && <BackupSettingsTab />}
{section === 'backup' && (
<>
<BackupSettingsTab />
<hr style={{ margin: '24px 0', borderColor: 'var(--border-color)' }} />
<SyncSettingsTab />
</>
)}
{section === 'extensions' && <ExtensionsSettingsTab />}
{section === 'shortcuts' && <ShortcutEditor />}
{section === 'about' && (
<p style={{ color: 'var(--text-secondary)', lineHeight: 1.8 }}>
{t('app.name')} v1.5.0
{t('app.name')} v2.0.0
<br />
{t('app.tagline')}
</p>