@props(['size' => 'full']) @php use Carbon\Carbon; $today = Carbon::today(config('app.timezone')); $events = collect($data['ical'] ?? []) ->map(function (array $event): array { try { $start = isset($event['DTSTART']) ? Carbon::parse($event['DTSTART'])->setTimezone(config('app.timezone')) : null; } catch (Exception $e) { $start = null; } try { $end = isset($event['DTEND']) ? Carbon::parse($event['DTEND'])->setTimezone(config('app.timezone')) : null; } catch (Exception $e) { $end = null; } return [ 'summary' => $event['SUMMARY'] ?? 'Untitled event', 'location' => $event['LOCATION'] ?? '—', 'start' => $start, 'end' => $end, ]; }) ->filter(fn ($event) => $event['start'] && ( $event['start']->greaterThanOrEqualTo($today) || ($event['end'] && $event['end']->greaterThanOrEqualTo($today)) ) ) ->sortBy('start') ->take($size === 'quadrant' ? 5 : 8) ->values(); @endphp Date Time Event Location @forelse($events as $event) {{ $event['start']?->format('D, M j') }} {{ $event['start']?->format('H:i') }} @if($event['end']) – {{ $event['end']->format('H:i') }} @endif {{ $event['summary'] }} {{ $event['location'] ?? '—' }} @empty No events available @endforelse