feat: add JMAP Calendar integration with month/week/day/agenda views

Full calendar support via JMAP Calendars (RFC 8984):
- Event create/edit/delete with recurrence rules and reminders
- Multi-day event spanning, column-based overlap layout
- Locale-aware date formatting, first day of week and time format settings
- Real-time updates via push notifications
- ARIA accessibility, input validation, color sanitization
- Keyboard shortcuts, mobile touch targets, focus trap
- ICU pluralization for all 8 supported languages
This commit is contained in:
Matthieu MALVACHE
2026-02-16 20:34:29 +01:00
committed by Matthieu MALVACHE
parent fb414bf2c9
commit e6f67c24cb
28 changed files with 3922 additions and 39 deletions
+11
View File
@@ -5,6 +5,7 @@ import { useEmailStore } from './email-store';
import { useIdentityStore } from './identity-store';
import { useContactStore } from './contact-store';
import { useVacationStore } from './vacation-store';
import { useCalendarStore } from './calendar-store';
import type { Identity } from '@/lib/jmap/types';
interface AuthState {
@@ -72,6 +73,13 @@ export const useAuthStore = create<AuthState>()(
vacationStore.setSupported(false);
}
// Initialize calendar if supported
if (client.supportsCalendars()) {
const calendarStore = useCalendarStore.getState();
calendarStore.setSupported(true);
calendarStore.fetchCalendars(client).catch((err) => console.error('Failed to fetch calendars:', err));
}
// Success - save state (but NOT the password)
set({
isAuthenticated: true,
@@ -152,6 +160,9 @@ export const useAuthStore = create<AuthState>()(
// Clear vacation store state
useVacationStore.getState().clearState();
// Clear calendar store state
useCalendarStore.getState().clearState();
},
checkAuth: async () => {