- Add Dev Mode toggle to settings that persists in vault metadata - Add test permission prompt button (✨) to all page headers when dev mode enabled - Move devMode and onTestPrompt to NavComponent base class for inheritance - Refactor all home components to extend NavComponent - Simplify permission prompt layout: remove duplicate domain from header - Convert permission descriptions to flowing single paragraphs - Update header-buttons styling for consistent lock/magic button layout Files modified: - projects/common/src/lib/common/nav-component.ts (devMode, onTestPrompt) - projects/common/src/lib/services/storage/types.ts (devMode property) - projects/common/src/lib/services/storage/signer-meta-handler.ts (setDevMode) - projects/common/src/lib/styles/_common.scss (header-buttons styling) - projects/*/src/app/components/home/*/settings.component.* (dev mode UI) - projects/*/src/app/components/home/*/*.component.* (extend NavComponent) - projects/*/public/prompt.html (simplified layout) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
87 lines
2.4 KiB
HTML
87 lines
2.4 KiB
HTML
<div class="sam-text-header">
|
|
<div class="header-buttons">
|
|
<button class="header-btn" title="Lock" (click)="onClickLock()">
|
|
<span class="emoji">🔒</span>
|
|
</button>
|
|
@if (devMode) {
|
|
<button class="header-btn" title="Test Permission Prompt" (click)="onTestPrompt()">
|
|
<span class="emoji">✨</span>
|
|
</button>
|
|
}
|
|
</div>
|
|
<button class="back-btn" title="Go Back" (click)="goBack()">
|
|
<span class="emoji">←</span>
|
|
</button>
|
|
<span>Backups</span>
|
|
</div>
|
|
|
|
<div class="backup-settings">
|
|
<div class="setting-row">
|
|
<label for="maxBackups">Max Auto Backups:</label>
|
|
<input
|
|
id="maxBackups"
|
|
type="number"
|
|
[value]="maxBackups"
|
|
min="1"
|
|
max="20"
|
|
(change)="onMaxBackupsChange($event)"
|
|
/>
|
|
</div>
|
|
<p class="setting-note">
|
|
Automatic backups are created when significant changes are made.
|
|
Manual and pre-restore backups are not counted toward this limit.
|
|
</p>
|
|
</div>
|
|
|
|
<button class="btn btn-primary create-btn" (click)="createManualBackup()">
|
|
Create Backup Now
|
|
</button>
|
|
|
|
<div class="backups-list">
|
|
@if (backups.length === 0) {
|
|
<div class="empty-state">
|
|
<span>No backups yet</span>
|
|
</div>
|
|
}
|
|
@for (backup of backups; track backup.id) {
|
|
<div class="backup-item">
|
|
<div class="backup-info">
|
|
<span class="backup-date">{{ formatDate(backup.createdAt) }}</span>
|
|
<div class="backup-meta">
|
|
<span class="backup-reason" [class]="getReasonClass(backup.reason)">
|
|
{{ getReasonLabel(backup.reason) }}
|
|
</span>
|
|
<span class="backup-identities">{{ backup.identityCount }} identity(ies)</span>
|
|
</div>
|
|
</div>
|
|
<div class="backup-actions">
|
|
<button
|
|
class="btn btn-sm btn-secondary"
|
|
(click)="
|
|
confirm.show(
|
|
'Restore this backup? A backup of your current state will be created first.',
|
|
restoreBackup.bind(this, backup.id)
|
|
)
|
|
"
|
|
[disabled]="restoringBackupId !== null"
|
|
>
|
|
{{ restoringBackupId === backup.id ? 'Restoring...' : 'Restore' }}
|
|
</button>
|
|
<button
|
|
class="btn btn-sm btn-danger"
|
|
(click)="
|
|
confirm.show(
|
|
'Delete this backup? This cannot be undone.',
|
|
deleteBackup.bind(this, backup.id)
|
|
)
|
|
"
|
|
>
|
|
Delete
|
|
</button>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
<lib-confirm #confirm></lib-confirm>
|