Expand recurring meetings into synthetic occurrences within a date range.
Each occurrence gets a composite ID (${originalId}__${isoDate}) and
shifted startTime/endTime. Non-recurring meetings pass through unchanged.
Timezone-aware: occurrences are generated at the correct wall-clock time
in the meeting's timezone, so DST transitions and cross-timezone viewing
are handled correctly.
Expand recurring meetings into synthetic occurrences within a date range. Each occurrence gets a composite ID (
${originalId}__${isoDate}) and shifted startTime/endTime. Non-recurring meetings pass through unchanged.Timezone-aware: occurrences are generated at the correct wall-clock time in the meeting's timezone, so DST transitions and cross-timezone viewing are handled correctly.