· yebor974 · Getting Started, Tutorials, UI/UX Design

Customize your Filament panel theme

Learn how to create and apply custom themes for Filament panels, including setting sidebar colors, defining primary colors, and customizing integrated elements.

Customize your Filament panel theme - picture

Filament provides a flexible theming system that allows you to modify the look and feel of your admin panel. In this article, we’ll explore how to create and apply custom themes for specific panels.

Setting primary colors for panels

Filament allows you to define primary colors for panels, which affect buttons, links, and other interactive elements. Use the Filament\Support\Colors\Color class for defining colors.

Option 1: Define colors per panel

You can specify primary colors directly in your Panel Provider. Here’s how to set the colors in your AdminPanelProvider:

use Filament\Support\Colors\Color;

public function panel(Panel $panel): Panel
{
    return $panel
        ...
        ->colors([
            'danger' => Color::Rose,
            'gray' => Color::Gray,
            'info' => Color::Blue,
            'primary' => Color::Indigo,
            'success' => Color::Emerald,
            'warning' => Color::Orange,
        ])
        ...
}

This will override the default primary colors for the specified panel.

Option 2: Define colors globally

To apply primary colors globally across all panels, you can define them in the AppServiceProvider:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Filament\Support\Colors\Color;
use Filament\Filament;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        Filament::defaultColors([
            'danger' => Color::Rose,
            'gray' => Color::Gray,
            'info' => Color::Blue,
            'primary' => Color::Indigo,
            'success' => Color::Emerald,
            'warning' => Color::Orange,
        ]);
    }
}

Creating a custom theme

To customize your Filament panel, you can create a new theme and register it to the panel of your choice.

Step 1: Generate theme files and register it

Run the following Composer command to automatically generate the necessary theme files:

composer create filament:theme

You’ll be prompted to enter a panel name (default: admin).

This command creates the required structure for your custom theme in the resources/css/filament/{panel_name} directory: theme.css and tailwind.config.js files.

Next, in your Panel Provider, add your custom generated CSS file using the viteTheme method:

<?php

namespace App\Providers;

use Filament\Panel;
use Filament\PanelProvider;

class AdminPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ...
            ->viteTheme('resources/css/filament/admin/theme.css')
            ...
    }
}

By doing this, your custom theme will only apply to the Admin Panel.

Next, you need to register the theme on the vite.config.js file:

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel({
            input: [
                'resources/css/app.css',
                'resources/js/app.js',
                'resources/css/filament/member/theme.css'
            ],
            refresh: true,
        }),
    ],
});

Step 2: Define your custom theme

Now, in your resources/css/filament/{panel_name} directory, you can customize your theme.

You can find common hook class abbreviations on the Filament Documentation .

For this example, we’ll modify the sidebar color and some integrated element styles:

@import '/vendor/filament/filament/resources/css/theme.css';

@config 'tailwind.config.js';

.fi-sidebar {
    @apply !bg-gray-500;

    .fi-sidebar-header {
        .fi-icon-btn-icon {
            @apply text-primary-500;
        }
    }

    .fi-sidebar-group-label, .fi-icon-btn-icon, .fi-sidebar-group-icon, .fi-sidebar-item-icon, .fi-sidebar-item-button, .fi-sidebar-item-label {
        @apply text-white;
    }

    .fi-sidebar-item-active {
        .fi-sidebar-item-button {
            @apply bg-primary-500;
        }
    }

    .fi-sidebar-item, .fi-sidebar-item-button {
        :hover {
            @apply hover:bg-primary-500;
        }
    }

    .fi-icon-btn {
        :hover {
            @apply hover:text-primary-500;
        }
    }

    .fi-sidebar-nav-groups {
        @apply gap-y-0;
    }
}

Remember to run the npm run build command! 😉

Customizing the theme of your Filament panel is a straightforward process that can greatly enhance the user experience. Whether you’re working on a single panel or applying global styles, Filament’s theming system offers powerful tools to align the design with your brand. Happy theming!

Avatar of yebor974
yebor974
Freelance - French IT Engineer passionate about Laravel and Filament PHP, creating innovative solutions to simplify web development.
React
Share post

Stay ahead in the Filament Mastery adventure

Join our community of Filament PHP enthusiasts! Get exclusive tips, tutorials, and updates delivered straight to your inbox.