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
+26 -1
View File
@@ -760,7 +760,9 @@
"tabFamily": "Family Management",
"tabApiTokens": "API Tokens",
"tabAccount": "Account",
"tabSync": "Synchronization",
"tabsAriaLabel": "Settings sections",
"sectionContactSync": "Contact Synchronization",
"sectionDesign": "Appearance",
"sectionAppName": "Application name",
"sectionModules": "Modules",
@@ -1009,7 +1011,30 @@
"calendarDisabled": "Calendar disabled",
"calendarsRefreshed": "Calendars refreshed",
"deleteAccountConfirm": "Really delete CalDAV account? All synced calendars will be removed.",
"lastSync": "Last synced"
"lastSync": "Last synced",
"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": "Family planning. Secure. Privacy-friendly. Open source.",