feat(caldav): add Settings UI and Event Modal CalDAV target selection

- Add CalDAV accounts card to Settings page with:
  * List of configured accounts showing URL and last sync
  * Expandable calendar list with enable/disable checkboxes
  * Sync Now, Refresh Calendars, and Delete actions per account
  * Add Account modal with name, URL, username, password fields
- Add CalDAV target selector to event modal:
  * Dropdown showing local and all enabled CalDAV calendars
  * Grouped by account using optgroups
  * Pre-selects current target when editing events
  * Includes target_caldav_account_id and target_caldav_calendar_url in save
- Add CalDAV component styles to settings.css:
  * Account cards with header, meta, and action sections
  * Expandable calendar details with checkboxes and color dots
  * Empty state for no accounts
- Add missing i18n keys for calendar enable/disable, refresh, delete confirm
- Load CalDAV targets async when modal opens
- Admin-only access to account management

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Ulas Kalayci
2026-05-04 08:41:02 +02:00
parent e149f5c01e
commit 3c9b2840e7
4 changed files with 438 additions and 1 deletions
+6 -1
View File
@@ -1010,7 +1010,12 @@
"caldavRefreshCalendars": "Kalender aktualisieren",
"caldavSyncSuccess": "CalDAV-Synchronisation erfolgreich",
"caldavSyncFailed": "CalDAV-Synchronisation fehlgeschlagen",
"caldavConnectionFailed": "Verbindung zum CalDAV-Server fehlgeschlagen"
"caldavConnectionFailed": "Verbindung zum CalDAV-Server fehlgeschlagen",
"calendarEnabled": "Kalender aktiviert",
"calendarDisabled": "Kalender deaktiviert",
"calendarsRefreshed": "Kalender aktualisiert",
"deleteAccountConfirm": "CalDAV-Konto wirklich löschen? Alle synchronisierten Kalender werden entfernt.",
"lastSync": "Zuletzt synchronisiert"
},
"login": {
"tagline": "Familienplanung. Sicher. Datenschutzfreundlich. Open Source.",