iOS: left side drawer (calendars + groups + nav) and opt-in top-bar colour

Replace the top-bar menu popup with an off-canvas left drawer, opened by the
hamburger or a narrow left-edge swipe (kept off the content area so month/week
swipe stay free). The drawer hosts the calendar visibility list, a view
switcher, group switching, and quick access to Settings/Accounts/Profile/
Groups/Server plus sync and logout.

- extract the filter list into reusable CalendarFilterContent (shared by the
  drawer and the still-present CalendarFilterSheet); the sheet is now a thin
  wrapper
- new CalendarDrawer view; CalendarHostView hosts it as a ZStack overlay with a
  scrim and edge-swipe gesture, and presents drawer destinations as sheets
- opt-in surface colour: surfaceColor (device-local) tints the flat top bar;
  empty keeps the translucent .bar material. Settings row with an Auto reset.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-14 22:24:24 +02:00
parent 9a50f25f57
commit d90a1a552c
6 changed files with 537 additions and 371 deletions

View File

@@ -86,6 +86,8 @@ private let strings: [String: [String: String]] = [
"settings.sync_this": "Zwischen Geräten synchronisieren",
"settings.reset": "Zurücksetzen",
"settings.appearance": "Ansicht",
"settings.color.surface": "Topbar-/Oberflächenfarbe",
"settings.surface.auto": "Auto (Milchglas)",
"settings.device": "Nur auf diesem Gerät",
"settings.device.footer": "Diese Einstellungen gelten nur auf diesem Gerät und werden nicht synchronisiert.",
@@ -452,6 +454,8 @@ private let strings: [String: [String: String]] = [
"settings.sync_this": "Sync across devices",
"settings.reset": "Reset",
"settings.appearance": "View",
"settings.color.surface": "Top bar / surface color",
"settings.surface.auto": "Auto (translucent)",
"settings.device": "This device only",
"settings.device.footer": "These settings apply to this device only and are not synced.",