Mail right panel: Calendar / People / Attachments (shared calendar forms)

New slide-out right panel in Mail (hidden by default, toggle in the reading pane,
resizable, persisted). Three tabs:
- Calendar: mounts the calendar plugin bundle in a new embed:"panel" mode, so the
  agenda, mini-month, event popover, event form and search results are the calendar
  app's OWN code — future changes propagate to both. Events click → real popover;
  New event / Edit / "Invite all" open the shared event form in the panel; search
  shows the calendar's results panel; All-calendars filter + open-in-new-tab.
- People: conversation senders / contact books (All/Recent/VIPs/Autosaved) drilling
  into a contact detail (Call/Message/Compose/Invite, related mail, find-all);
  "Compose to all" / "Invite all to new event".
- Attachments: every attachment in the thread, grouped by sender, with download and
  clickable previews (reuses the mail AttachmentPreview overlay for supported types).

Calendar bundle: mount(el, ctx, props) reads embed/newEventGuests; renderEmbed() +
panelBar/panelFoot; embed-aware agenda (TODAY); form/popover repositioned for the
narrow panel; guest deep-link accepts comma-separated emails.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U72FZiF1W1pb8XxyWBTREA
This commit is contained in:
2026-08-03 08:38:44 +02:00
co-authored by Claude Opus 4.8
parent 421b44a8ab
commit 1d1a621ce2
13 changed files with 622 additions and 4 deletions
+45
View File
@@ -99,6 +99,51 @@ export const en = {
"mail.emptySpam": "Empty spam",
"mail.more": "More",
"mail.markAllRead": "Mark all as read",
"panel.toggle": "Toggle side panel",
"panel.calendar": "Calendar",
"panel.people": "People",
"panel.attachments": "Attachments",
"panel.search": "Search",
"panel.newEvent": "New event",
"panel.miniCalendar": "Mini calendar",
"panel.week": "Week",
"panel.month": "Month",
"panel.view": "View",
"panel.day": "Day",
"panel.3days": "3 days",
"panel.agenda": "Agenda",
"panel.allCalendars": "All calendars",
"panel.searchEvents": "Search events",
"panel.today": "Today",
"panel.noEvents": "No events",
"panel.untitled": "(untitled)",
"panel.allDay": "All day",
"panel.openCalendar": "Open calendar in new tab",
"panel.inConversation": "In conversation",
"panel.allContacts": "All contacts",
"panel.recent": "Recent",
"panel.vips": "VIPs",
"panel.autosaved": "Autosaved",
"panel.senders": "Senders",
"panel.noPeople": "No people",
"panel.composeAll": "Compose to all",
"panel.inviteAll": "Invite all to new event",
"panel.call": "Call",
"panel.message": "Message",
"panel.compose": "Compose",
"panel.invite": "Invite",
"panel.contactDetails": "Contact details",
"panel.showAll": "Show all",
"panel.mailSection": "Mail",
"panel.noSubject": "(no subject)",
"panel.findAll": "Find all conversations with {name}",
"panel.eventsSection": "Events",
"panel.noMatches": "No matches found",
"panel.openContact": "Open contact in new tab",
"panel.openConversation": "Open a conversation to see its attachments.",
"panel.noAttachments": "No attachments",
"panel.download": "Download",
"mail.emptyConfirm": "Permanently delete everything in this folder? This can't be undone.",
"mail.loadFailed": "Couldn't load this message.",
"mail.imagesBlocked": "Images from this sender are blocked.",