Panel Switch plugin screenshot
Dark mode ready
Multilingual support
Supports v5.x

Panel Switch

Community

Switch between Filament panels with ease.

Tags: Panels
Supported versions:
5.x 4.x 3.x
Bezhan Salleh avatar Author: Bezhan Salleh

Package health

Beta

Automated checks of this plugin's Composer package

82 / 100
Security 68
Maintenance 100
Ecosystem 100
15 checks
  • Failed: GitHub Actions pinned to SHA View details on Plumb
  • Skipped: GitLab CI includes pinned to SHA
  • Passed: Open security advisories
  • Passed: Dependabot PR responsiveness — No open Dependabot PRs.
  • Skipped: Renovate MR responsiveness
  • Passed: Dependabot or Renovate configured
  • Failed: Dependency update cooldown configured No cooldown configured in .github/dependabot.yml. View details on Plumb
  • Passed: Provides a security policy
  • Passed: Abandoned or archived — No consulted source marks the package abandoned (packagist, github).
  • Passed: Commit and release recency — Active: last commit 29 days ago; last release 119 days ago.
  • Passed: composer.lock not committed by library composer.lock is absent from the released dist archive.
  • Passed: Dist archive is lean
  • Passed: Current Laravel version supported — Package dependencies resolve together with current Laravel 13.0.
  • Passed: Current PHP version supported — Constraint ^8.2|^8.3 supports current PHP 8.5.
  • Skipped: Current Symfony version supported
Third-party plugin. This is built by the community, not the Filament team. Filament does not review, endorse, or vet the security of plugins outside the filament/ namespace. Review the source and install at your own risk. Found malware or an unresolved security issue the author won't address? Report it .
Powered by Plumb Last scanned 2 weeks ago

Documentation

Version:

Panel Switch

FILAMENT 4.x FILAMENT 5.x Packagist Code Style Passing Downloads

The Panel Switch Plugin for Filament offers a robust and customizable component for switching between panels in applications built with FilamentPHP.

Demo Demo Demo

Table Of Contents

#Compatibility

Package Version Filament Version
1.x 3.x
2.x 4.x & 5.x
3.x - current 4.x & 5.x

#Installation

You can install the package via composer:

composer require bezhansalleh/filament-panel-switch

[!IMPORTANT] The plugin follows Filament's theming rules. So, to use the plugin create a custom theme if you haven't already, and add the following line to your theme.css file:

@source '../../../../vendor/bezhansalleh/filament-panel-switch/resources/views/**/*.blade.php';

Now build your theme using:

npm run build

Upon installation, the Plugin seamlessly integrates with Filament without any further setup. Though the plugin works out-of-the-box, it's designed for customization. Delve into the Configuration section below for detailed customization options.

#Configuration

Start your custom configuration using the configureUsing method in your service provider's boot method:

use BezhanSalleh\PanelSwitch\PanelSwitch;

PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {
    // Custom configurations go here
});

#Panel Access & Navigation

The panel switch is automatically visible when the authenticated user has access to two or more panels. Panel access is determined via the canAccessPanel method on your User model — no additional configuration needed. Panels the user cannot access are automatically hidden from the switch.

To further limit which panels appear in the switch, use the panels() method:

PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {
    $panelSwitch->panels([
        'admin',
        'dev',
        'app'
    ]);
});

The panels() method also accepts a closure that returns an array of panel ids. This is useful when you want to dynamically determine the panels that will be listed. The plugin will also validate the panels to ensure that they are valid filament panels. If any of the panels provided are invalid, the plugin will throw an InvalidArgumentException.

#Design or Style

The plugin supports two design styles:

  • Modern (default) — Uses Filament's Modal Blade component. You can customize the modal heading, width, or use a slide-over:

    PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {
        $panelSwitch
            ->modalHeading('Available Panels')
            ->modalWidth('sm')
            ->slideOver();
    });
    
  • Simple — A dropdown list for switching panels directly:

    PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {
        $panelSwitch->simple();
    });
    

For full control over the look and feel, you can publish the views and make your own adjustments:

php artisan vendor:publish --tag="filament-panel-switch-views"

#Labels

Provide custom labels for each panel. The keys should be valid panel IDs, and values can be strings or translatable strings:

PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {
    $panelSwitch
        ->labels([
            'admin' => 'Custom Admin Label',
            'general_manager' => __('General Manager')
        ]);
});

#Icons

Define icons for each panel using the icons() method. The keys should be valid panel IDs:

PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {    
    $panelSwitch->icons([
        'admin' => 'heroicon-o-square-2-stack',
        'app' => 'heroicon-o-star',
    ]);
});

For images instead of icons, set the asImage parameter to true:

PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {    
    $panelSwitch->icons([
        'admin' => 'https://example.com/admin.jpg',
        'app' => 'https://example.com/app.jpg',
    ], asImage: true);
});

Use iconSize() to customize the size (default 128px). The value is multiplied by 4:

PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {
    $panelSwitch->iconSize(32); // 128px
});

#Sort Order

By default panels are listed in registration order, or in the order provided via panels(). Use sort() to sort alphabetically:

PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {
    $panelSwitch
        ->panels(['admin', 'dev', 'app'])
        ->sort();         // ascending: ['admin', 'app', 'dev']
        // ->sort('desc') // descending: ['dev', 'app', 'admin']
});

#Placement

By default the panel switch is rendered via the panels::global-search.before render hook. You can change this to any available Filament Render Hook:

PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {
    $panelSwitch->renderHook('panels::global-search.after');
});

#Full Example

use BezhanSalleh\PanelSwitch\PanelSwitch;

PanelSwitch::configureUsing(function (PanelSwitch $panelSwitch) {
    $panelSwitch
        ->panels(['admin', 'app', 'dev'])
        ->heading('Available Panels')
        ->modalWidth('sm')
        ->slideOver()
        ->icons([
            'admin' => 'heroicon-o-square-2-stack',
            'app' => 'heroicon-o-star',
        ])
        ->iconSize(16)
        ->labels([
            'admin' => 'Admin Panel',
            'app' => 'SaaS Application'
        ]);
        
});

#Testing

composer test

#Changelog

Please see CHANGELOG for more information on what has changed recently.

#Contributing

If you want to contribute to this packages, you may want to test it in a real Filament project:

  • Fork this repository to your GitHub account.
  • Create a Filament app locally.
  • Clone your fork in your Filament app's root directory.
  • In the /filament-panel-switch directory, create a branch for your fix, e.g. fix/error-message.

Install the packages in your app's composer.json:

"require": {
    "bezhansalleh/filament-panel-switch": "dev-fix/error-message as main-dev",
},
"repositories": [
    {
        "type": "path",
        "url": "filament-panel-switch"
    }
]

Now, run composer update.

#Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

#Credits

#License

The MIT License (MIT). Please see License File for more information.

The author

Bezhan Salleh avatar Author: Bezhan Salleh

Bezhan Salleh is a full-stack developer with a strong focus on backend development and a passion for open-source. He’s the creator of Shield, Filament’s most starred plugin, and the author of other popular plugins, including Plugin Essentials and Google Analytics. His work focuses on delivering practical, powerful solutions with an emphasis on performance and developer experience.

Plugins
6
Stars
2.5K

From the same author