feat(ext): vault-tab Backup & Restore panel

Two cards — Export (passphrase + include-image checkbox → download)
and Restore (file picker + passphrase + new-remote form). Deep-linked
from settings-vault > 'Backup & restore →'.
This commit is contained in:
adlee-was-taken
2026-04-28 22:11:51 -04:00
parent 06913a0aed
commit 419408bbad
3 changed files with 168 additions and 2 deletions

View File

@@ -16,6 +16,7 @@ import { renderDevices, teardown as teardownDevices } from '../popup/components/
import { renderSettings } from '../popup/components/settings';
import { renderVaultSettings as renderVaultSettingsView } from '../popup/components/settings-vault';
import { renderFieldHistory, teardown as teardownFieldHistory } from '../popup/components/field-history';
import { renderBackupPanel, teardown as teardownBackup } from './components/backup-panel';
// ---------------------------------------------------------------------------
// Helpers
@@ -66,7 +67,7 @@ function typeLabel(t: ItemType): string {
// Hash routing
// ---------------------------------------------------------------------------
type VaultView = 'list' | 'detail' | 'add' | 'edit' | 'trash' | 'devices' | 'settings' | 'settings-vault' | 'field-history';
type VaultView = 'list' | 'detail' | 'add' | 'edit' | 'trash' | 'devices' | 'settings' | 'settings-vault' | 'field-history' | 'backup';
interface HashRoute {
view: VaultView;
@@ -92,6 +93,7 @@ function parseHash(): HashRoute {
case 'settings':
case 'settings-vault':
case 'field-history':
case 'backup':
return { view };
default:
return { view: 'list' };
@@ -418,6 +420,7 @@ function teardownPaneComponents(): void {
teardownTrash();
teardownDevices();
teardownFieldHistory();
teardownBackup();
}
function renderPane(): void {
@@ -464,6 +467,9 @@ function renderPane(): void {
case 'field-history':
renderFieldHistory(pane);
break;
case 'backup':
renderBackupPanel(pane);
break;
default:
pane.className = 'vault-pane vault-pane--empty';
pane.innerHTML = 'select an item';