composer require andreia/filament-nord-theme:"^3.0"
AdminPanelProvider (or TenancyPanelProvider if using Filament Tenancy):
public function panel(Panel $panel): Panel
{
return $panel
->id('admin')
->path('admin')
->plugin(NordTheme::make())
->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
// ... other panel configurations
->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages');
}
php artisan vendor:publish --tag="filament-nord-theme:assets"
data-theme="dark" to your <html> tag in resources/views/layouts/app.blade.php (if using custom layouts).NordTheme::make()->enableDarkModeToggle().Apply the theme to a new Filament project:
data-theme="dark").Theme Integration
AdminPanelProvider. No additional config is needed for basic functionality.AdminPanel and TenancyPanel):
TenancyPanel::make()->plugin(NordTheme::make()->disableDarkModeToggle());
// resources/scss/filament/nord/custom.scss
@use "filament-nord-theme:variables" as nord;
.filament-resources {
--nord-primary-500: #ff0066; // Override primary color
}
Dark Mode Management
NordTheme::make()->enableDarkModeToggle()->persistUserPreference(); // Saves preference to session
AdminPanelProvider:
->plugin(NordTheme::make()->forceDarkMode())
FilamentNord\Contracts\DarkModeStorage:
$this->app->bind(\FilamentNord\Contracts\DarkModeStorage::class, function () {
return new DatabaseDarkModeStorage();
});
Asset Customization
php artisan vendor:publish --tag="filament-nord-theme:assets"
resources/views/vendor/filament-nord-theme/partials/head.blade.php for meta tags.resources/scss/filament-nord-theme/nord.scss for global styles.use directive in Blade to inject theme-specific classes:
@use('filament-nord-theme::variables')
<div class="bg-{{ variables.$nord-gray-800 }}">...</div>
Localization
config/filament.php:
'nord-theme' => [
'dark_mode_label' => __('filament-nord-theme::toggle-dark-mode'),
],
php artisan vendor:publish --tag="filament-nord-theme:lang"
filament-spatie-laravel-permission or filament-notifications. Some plugins may require manual SCSS adjustments.wire:model="darkMode" to sync preferences across components.tailwind.config.js to include Nord’s palette:
module.exports = {
theme: {
extend: {
colors: {
nord: {
'50': '#2e3440',
'100': '#3b4252',
// ... add other shades
}
}
}
}
};
Version Mismatches
Class 'FilamentNord\NordTheme' not found.^3.0 for Filament 5.x). Check the compatibility table.composer why-not andreia/filament-nord-theme:^3.0 to identify conflicts.Dark Mode Toggle Not Appearing
->plugin(NordTheme::make()->enableDarkModeToggle())
Header component. Override the header in a custom panel provider if needed.CSS Conflicts
background-color: #fff)..my-component {
background-color: var(--nord-gray-50);
}
Session Persistence
persistUserPreference() is called:
NordTheme::make()->enableDarkModeToggle()->persistUserPreference();
FilamentNord\Contracts\DarkModeStorage for database-backed persistence.Asset Loading Order
AdminPanelProvider:
->id('admin')
->path('admin')
->middleware([
'web',
'auth',
])
->plugin(NordTheme::make()) // Must come after middleware/assets
->discoverResources(...);
resources/views/vendor/filament-nord-theme/ and resources/scss/filament-nord-theme/.dark: variants) if using Nord’s native dark mode to avoid duplication.Custom Themes
use FilamentNord\NordTheme;
class CustomNordTheme extends NordTheme {
public function configure(): void {
$this->colors = [
'primary' => '#ff0066',
// ... override other colors
];
}
}
AdminPanelProvider:
->plugin(CustomNordTheme::make())
Dynamic Theme Switching
public function handle(Request $request, Closure $next) {
if (auth()->user()->isAdmin()) {
app(NordTheme::class)->forceDarkMode();
}
return $next($request);
}
Dark Mode API
NordTheme::make()->enableDarkModeToggle()->withJavaScript()
->script('
window.nordTheme = {
darkMode: @entangle('dark-mode'),
};
');
<div x-data="nordTheme" x-text="darkMode ? 'Dark' : 'Light'"></div>
Testing
public function test_dark_mode_toggle() {
$response = $this->actingAs(User::factory()->create())
->get('/admin')
->assertSee('data-theme="dark"');
}
NordTheme::make()->forceDarkMode() in tests to mock dark mode.How can I help you explore Laravel packages today?