feat: add participant scheduling with iTIP invitations and inline calendar invitation banner

Add organizer/attendee UI with RSVP, contact autocomplete for participants,
scheduling messages, and inline calendar invitation banner in email viewer
with auto-detect .ics attachments, RSVP/import to calendar, and cancellation display.
This commit is contained in:
Matthieu MALVACHE
2026-02-17 01:09:57 +01:00
committed by Matthieu MALVACHE
parent 74763b384d
commit b65b2f26df
30 changed files with 2352 additions and 137 deletions
+31 -2
View File
@@ -225,6 +225,23 @@
"success_mailto": "Demande de désabonnement envoyée à votre client mail",
"error": "Impossible de se désabonner",
"dismiss": "Ignorer"
},
"calendar_invitation": {
"loading": "Chargement des détails…",
"title": "Invitation calendrier",
"cancelled_title": "Événement annulé",
"organizer": "Organisé par {name}",
"attendees": "{count, plural, one {# participant} other {# participants}}",
"accept": "Accepter",
"maybe": "Peut-être",
"decline": "Refuser",
"add_to_calendar": "Ajouter au calendrier",
"added": "Ajouté au calendrier",
"rsvp_sent": "Réponse envoyée",
"parse_error": "Impossible de lire l'invitation",
"no_calendar": "Calendrier non disponible",
"select_calendar": "Choisir un calendrier",
"already_in_calendar": "Déjà dans votre calendrier"
}
},
"email_composer": {
@@ -1066,7 +1083,16 @@
"accepted": "Accepté",
"declined": "Refusé",
"tentative": "Provisoire",
"needs_action": "En attente de réponse"
"needs_action": "En attente de réponse",
"remove": "Retirer",
"email_placeholder": "Ajouter une adresse e-mail ou chercher des contacts",
"send_invitations": "Envoyer les invitations aux participants",
"status_summary": "{accepted} accepté(s), {pending} en attente",
"cancel_notification": "Les participants seront informés de l'annulation",
"you_organizer": "Vous êtes l'organisateur",
"you_attendee": "Vous êtes un participant",
"no_participants": "Aucun participant",
"count": "{count, plural, one {# participant} other {# participants}}"
},
"recurrence": {
"title": "Récurrence",
@@ -1128,7 +1154,10 @@
"event_move_error": "Échec du déplacement de l'événement",
"alert_title": "Événement à venir",
"alert_now": "Commence maintenant",
"alert_in_minutes": "Dans {count} min"
"alert_in_minutes": "Dans {count} min",
"invitation_sent": "Invitations envoyées",
"rsvp_updated": "Réponse mise à jour",
"rsvp_error": "Échec de la mise à jour de la réponse"
},
"status": {
"loading_calendars": "Chargement des calendriers...",