feat(settings): add dedicated Sync tab with CardDAV contacts integration

- Rename Calendar tab to Synchronization with two sections:
  * Calendar Sync (Google, Apple, CalDAV, ICS)
  * Contact Sync (CardDAV) - NEW
- Add visual tab grouping with CSS separators between sections
- Implement CardDAV account management UI:
  * Add/delete accounts
  * Enable/disable addressbooks
  * Manual sync trigger
  * Connection testing
- Add UX improvements:
  * Status badges (success/error/syncing)
  * Empty states with onboarding
  * Inline help tooltips (prepared)
  * Breadcrumb navigation (prepared)
- Update i18n keys in all 14 locales
- All 109 tests passing

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Ulas Kalayci
2026-05-04 21:50:59 +02:00
parent 43225ee20c
commit 6cdef0102c
21 changed files with 4267 additions and 43 deletions
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "Database ripristinato. Ricaricamento...",
"backupCliTitle": "Ripristino CLI / Docker Compose",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "Puoi anche creare un backup direttamente con Docker Compose:"
"backupCliBackupHint": "Puoi anche creare un backup direttamente con Docker Compose:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Pianificazione familiare. Sicura. Rispettosa della privacy. Open source.",
@@ -1191,4 +1216,4 @@
"new": "Crea nuova voce",
"search": "Apri ricerca"
}
}
}