ifnex/04_Laravel/app/Providers/Filament/AdminPanelProvider.php
Kazem Alghasi 810004aab1 feat(admin): configure filament panel with custom branding and notifications
Enhance the Filament admin panel configuration to align with the new design system and enable core features.

- Implement custom color palette including dark navy for sidebar
- Set Vazirmatn as the primary font
- Enable SPA mode and collapsible sidebar for improved UX
- Configure database-driven notifications and global search bindings
- Add necessary web middleware stack for session and cookie management
- Create new migration for the notifications system
- Add directory for custom Filament render hooks
2026-08-09 05:14:36 +03:30

88 lines
3.2 KiB
PHP

<?php
namespace App\Providers\Filament;
use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Pages;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
use Filament\Widgets;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->default()
->id('admin')
->path('admin')
->login()
->brandName('IFNEX Logistics')
// 🎨 رنگ‌بندی سفارشی مطابق طراحی
->colors([
'primary' => Color::Amber,
'gray' => [
50 => '#f8fafc',
100 => '#f1f5f9',
200 => '#e2e8f0',
300 => '#cbd5e1',
400 => '#94a3b8',
500 => '#64748b',
600 => '#475569',
700 => '#334155',
800 => '#1e293b',
900 => '#1a1a2e', // 🎯 Dark Navy برای Sidebar
950 => '#0f172a',
],
'danger' => Color::Red,
'info' => Color::Blue,
'success' => Color::Emerald,
'warning' => Color::Amber,
])
->font('Vazirmatn')
->spa()
->sidebarCollapsibleOnDesktop()
->darkMode(true)
->databaseNotifications()
->globalSearchKeyBindings(['command+k', 'ctrl+k'])
->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
->pages([
Pages\Dashboard::class,
])
->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
->widgets([
Widgets\AccountWidget::class,
Widgets\FilamentInfoWidget::class,
])
->middleware([
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
DisableBladeIconComponents::class,
DispatchServingFilamentEvent::class,
])
->authMiddleware([
Authenticate::class,
])
// 🎯 اضافه کردن CSS/JS سفارشی
->renderHook(
'panels::head.start',
fn () => view('filament.hooks.head')
);
}
}