{{-- Styles --}}

Modules

{{-- Header --}}

Modules

Manage your application modules

@can('modules.modules.upload') @endcan
{{-- Upload Panel (Hidden by default) --}} @can('modules.modules.upload') @endcan {{-- Stats Cards --}} @php $total = count($modules); $installed = collect($modules)->where('is_installed', true)->count(); $active = collect($modules)->where('is_active', true)->count(); $installedModules = collect($modules)->where('is_active', true)->pluck('alias')->map(fn($a) => strtolower($a))->toArray(); @endphp

Total Modules

{{ $total }}

Active

{{ $active }}

Installed

{{ $installed }}

{{-- Search & Filter Bar --}} @if($total > 0)
@endif {{-- Modules Grid --}} @if($total > 0)
@foreach($modules as $module) @php if (!$module['is_installed']) { $statusKey = 'not_installed'; } elseif ($module['is_core']) { $statusKey = 'core'; } elseif ($module['is_active']) { $statusKey = 'active'; } else { $statusKey = 'inactive'; } @endphp
{{-- Card Header --}}
{{ strtoupper(substr($module['name'], 0, 1)) }}

{{ $module['name'] }}

{{ $module['alias'] }}

{{ $module['version'] }} @if($module['git_last_pulled_at']) ↓ {{ $module['git_last_pulled_at'] }} @endif @if(!empty($module['git_url'])) @endif
{{-- Card Body --}}

{{ Str::limit($module['description'] ?? 'No description available', 80) }}

{{-- Show Dependencies with Checkmarks --}} @if(!empty($module['requires']))

Depends on: @foreach($module['requires'] as $req) @php $isInstalled = in_array(strtolower($req), $installedModules); @endphp @if($isInstalled) @else @endif {{ $req }}{{ !$loop->last ? ', ' : '' }} @endforeach

@endif
{{-- Status Badge --}} @if(!$module['is_installed']) Not Installed @elseif($module['is_core']) Core @elseif($module['is_active']) Active @else Inactive @endif {{-- Action Buttons --}}
{{-- Git Pull Button (super-admin only, ALL modules) --}} @if($isSuperAdmin ?? false) @endif {{-- ═══════════════════════════════════════════ NOT INSTALLED: Show Install + Delete ═══════════════════════════════════════════ --}} @if(!$module['is_installed']) @can('modules.modules.install')
@csrf
@endcan @can('modules.modules.delete')
@csrf @method('DELETE')
@endcan {{-- ═══════════════════════════════════════════ INSTALLED & ACTIVE ═══════════════════════════════════════════ --}} @elseif($module['is_active']) {{-- Migrate Button --}}
@csrf
@if($module['is_core']) @can('modules.modules.deactivate')
@csrf
@endcan @can('modules.modules.uninstall')
@csrf @method('DELETE')
@endcan @else @can('modules.modules.deactivate')
@csrf
@endcan @can('modules.modules.uninstall')
@csrf @method('DELETE')
@endcan @endif {{-- ═══════════════════════════════════════════ INSTALLED & INACTIVE ═══════════════════════════════════════════ --}} @else {{-- Migrate Button --}}
@csrf
{{-- Activate Button --}} @can('modules.modules.activate')
@csrf
@endcan @if($module['is_core']) @can('modules.modules.uninstall')
@csrf @method('DELETE')
@endcan @can('modules.modules.delete')
@csrf @method('DELETE')
@endcan @else @can('modules.modules.uninstall')
@csrf @method('DELETE')
@endcan @endif @endif
@endforeach
{{-- No Search Results --}} @else {{-- Empty State --}}

No modules found

Create your first module using the command below

php artisan module:make ModuleName
@endif
{{-- ═══════════════════════════════════════════════════════════════════════════ GIT PULL MODAL (Improved UI) ═══════════════════════════════════════════════════════════════════════════ --}} {{-- ═══════════════════════════════════════════════════════════════════════════ UNINSTALL CONFIRMATION MODAL ═══════════════════════════════════════════════════════════════════════════ --}} {{-- ═══════════════════════════════════════════════════════════════════════════ DELETE CONFIRMATION MODAL ═══════════════════════════════════════════════════════════════════════════ --}} {{-- ═══════════════════════════════════════════════════════════════════════════ CORE MODULE ACTION MODAL ═══════════════════════════════════════════════════════════════════════════ --}}