Add a unified event editor that works in two modes:
- Calendar mode: Create/edit events directly via EventService API
- Chat mode: Edit AI-proposed events before confirming them
The chat mode allows users to modify proposed events (title, time,
recurrence) and persists changes both locally and to the server.
New components: DateTimePicker, ScrollableDropdown, useDropdownPosition
New API: PUT /api/chat/messages/:messageId/proposal
- Restructure ModalBase to use absolute-positioned backdrop behind card
content, fixing modal stacking issues on web (React Native Web portals)
- Hide EventOverlay when DeleteEventModal is open to prevent z-index
conflicts on web
- Add nestedScrollEnabled to CardBase ScrollView for Android
- Use TouchableOpacity with delayPressIn in EventCard for scroll-friendly
touch handling
- Keep eventToDelete state stable during modal fade-out to prevent
content flash between recurring/single variants
- Fix German umlauts in DeleteEventModal
- Add CardBase: reusable card with header, content, footer
- Configurable via props: padding, border, text size, background
- Add ModalBase: modal wrapper using CardBase internally
- Provides backdrop, click-outside-to-close, Android back button
- Refactor EventCardBase to use CardBase
- Refactor DeleteEventModal to use ModalBase
- Refactor EventOverlay (calendar.tsx) to use ModalBase
- Update CLAUDE.md with component documentation