@php $activities = $activities ?? $getState() ?? collect(); // Ensure it's a collection to avoid errors if (!$activities instanceof \Illuminate\Support\Collection) { $activities = collect($activities); } @endphp @php use AlizHarb\ActivityLog\Support\ActivityChanges; @endphp @forelse ($activities as $key => $activity) @php $oldValues = ActivityChanges::getOldValues($activity); $newValues = ActivityChanges::getNewValues($activity); $hasChanges = ActivityChanges::hasChanges($activity); @endphp
{{-- Connecting Line --}} @if (!$loop->last)
@endif {{-- Icon / Avatar --}}
@php $config = config('filament-activity-log.events.' . $activity->event, [ 'icon' => 'heroicon-m-information-circle', 'color' => 'gray', ]); $icon = $config['icon']; // We still use Tailwind text colors for icons as they are dynamic $color = match ($config['color']) { 'success' => 'activity-log-text-success', 'warning' => 'activity-log-text-warning', 'danger' => 'activity-log-text-danger', 'info' => 'activity-log-text-info', default => 'activity-log-text-gray', }; @endphp @if(!($slim ?? false) && $activity->causer && method_exists($activity->causer, 'getFilamentAvatarUrl')) {{ $activity->causer->name }}
@else @endif
{{-- Content Card --}}
{{-- Header --}}
{{ $activity->causer?->name ?? __('filament-activity-log::activity.system') }} {{ ucfirst($activity->event) }} @if(!($slim ?? false)) {{ class_basename($activity->subject_type) }} @if($activity->subject_id) #{{ $activity->subject_id }} @endif @endif
{{-- Body --}}
@if($activity->description && (!($slim ?? false) || $activity->description !== $activity->event))
{{ $activity->description }}
@endif {{-- Metadata (IP, UA) --}} @if(!($slim ?? false) && (isset($activity->properties['ip_address']) || isset($activity->properties['user_agent']))) @endif {{-- Changes Toggle --}} @if($hasChanges)
@endif
@empty

{{ __('filament-activity-log::activity.action.timeline.empty_state_title') }}

{{ __('filament-activity-log::activity.action.timeline.empty_state_description') }}

@endforelse