PHPackages                             aymanalhattami/filament-context-menu - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. aymanalhattami/filament-context-menu

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

aymanalhattami/filament-context-menu
====================================

context menu (right click menu) for filament

3.0.0(1mo ago)9838.0k↓13.3%16[1 issues](https://github.com/aymanalhattami/filament-context-menu/issues)MITPHPPHP ^8.2CI passing

Since Apr 17Pushed 3mo ago2 watchersCompare

[ Source](https://github.com/aymanalhattami/filament-context-menu)[ Packagist](https://packagist.org/packages/aymanalhattami/filament-context-menu)[ Docs](https://github.com/aymanalhattami/filament-context-menu)[ RSS](/packages/aymanalhattami-filament-context-menu/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (5)Dependencies (26)Versions (11)Used By (0)

Context Menu for Filament
=========================

[](#context-menu-for-filament)

[![Latest Version on Packagist](https://camo.githubusercontent.com/4cafb8850f68117f053b2e7e028111c562fd0b213318f833c729264c8b8556f8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f61796d616e616c68617474616d692f66696c616d656e742d636f6e746578742d6d656e752e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/aymanalhattami/filament-context-menu)[![GitHub Tests Action Status](https://camo.githubusercontent.com/2e6665ee9e0f21561a8fa2e4af117b0a16a6b8506be753110843651ae80e10fd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f61796d616e616c68617474616d692f66696c616d656e742d636f6e746578742d6d656e752f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/aymanalhattami/filament-context-menu/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/cd81fdbfbbf3c061794ba1a1ecf3c278fbf443304ec1088a0aee394ff2d482e6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f61796d616e616c68617474616d692f66696c616d656e742d636f6e746578742d6d656e752f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/aymanalhattami/filament-context-menu/actions?query=workflow%3A%22Fix+PHP+code+styling%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/2d7e21ea20fc3d5b955a2cd6d63d0bb53f81f1bb6c7eb06b0c787d35db586113/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f61796d616e616c68617474616d692f66696c616d656e742d636f6e746578742d6d656e752e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/aymanalhattami/filament-context-menu)

---

Add a context menu (right click menu) for resource pages, custom pages and table cells of [Filament Admin Panel](https://filamentphp.com/).

- It uses [Filament Actions](https://filamentphp.com/docs/3.x/actions/overview) to set menu actions.
- It supports dark and light modes.
- It supports left-to-right and right-to-left direction.
- You can set a divider between menu actions.
- It supports resource pages and custom pages.
- You can set a context menu for table cells.
- Three actions are available for usage in the page context menu:
    - `AymanAlhattami\FilamentContextMenu\Actions\RefreshAction` to refresh the page.
    - `AymanAlhattami\FilamentContextMenu\Actions\GoBackAction` to go back to the previous page.
    - `AymanAlhattami\FilamentContextMenu\Actions\GoForward` to go back to the forward page.

[Demo project](https://github.com/aymanalhattami/filament-context-menu-project) | [Youtube video](https://www.youtube.com/watch?v=ciTH-u5sluw) | [Laravel Daily (Povilas Korop) Video](https://www.youtube.com/watch?v=ZqJ96GCtfBQ)

Installation
------------

[](#installation)

You can install the package via Composer:

```
composer require aymanalhattami/filament-context-menu
```

Usage 1: resource pages and custom pages
----------------------------------------

[](#usage-1-resource-pages-and-custom-pages)

1. Add the trait `AymanAlhattami\FilamentContextMenu\PageHasContextMenu` to the page you want to add the context menu.
2. Then, define a `getContextMenuActions` method inside the page, the method should return an array of [Filament Actions](https://filamentphp.com/docs/3.x/actions/installation)

```
use App\Filament\Resources\UserResource\Pages\CreateUser;
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Actions\Action;
use Filament\Resources\Pages\ListRecords;

class ListUsers extends ListRecords
{
    use PageHasContextMenu;

    public function getContextMenuActions(): array
    {
        return [
            Action::make('Create user')
                ->url(CreateUser::getUrl())
        ];
    }

    //
}
```

### Divider

[](#divider)

You can use `AymanAlhattami\FilamentContextMenu\ContextMenuDivider` to set divider between menu actions

```
use App\Filament\Resources\UserResource\Pages\CreateUser;
use App\Filament\Resources\UserResource\Pages\TrashedUsers;
use AymanAlhattami\FilamentContextMenu\ContextMenuDivider;
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Actions\Action;
use Filament\Resources\Pages\ListRecords;

class ListUsers extends ListRecords
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            Action::make('Create user')
                ->url(CreateUser::getUrl()),
            ContextMenuDivider::make(),
            Action::make('Trashed user')
                ->url(TrashedUsers::getUrl()),
        ];
    }

    //
}
```

### Create Action

[](#create-action)

You can use `Filament\Actions\CreateAction`, visit [filament create action](https://filamentphp.com/docs/3.x/actions/prebuilt-actions/create) for more information.

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ListRecords;
use Filament\Actions\CreateAction;

class ListUsers extends ListRecords
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            CreateAction::make()
                ->model(App\Models\User::class)
                 ->form([
                    TextInput::make('name')
                        ->required(),
                    // ...
                ])
        ];
    }

    //
}
```

### Edit Action

[](#edit-action)

You can use `Filament\Actions\EditAction`, visit [filament edit action](https://filamentphp.com/docs/3.x/actions/prebuilt-actions/edit) for more information.

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ViewRecord;
use Filament\Actions\EditAction;

class ViewUser extends ViewRecord
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            EditAction::make()
                ->record($this->user)
                ->form([
                    TextInput::make('name')
                        ->required(),
                    // ...
                ])
        ];
    }

    //
}
```

### View Action

[](#view-action)

You can use `Filament\Actions\ViewAction`, visit [filament view action](https://filamentphp.com/docs/3.x/actions/prebuilt-actions/view) for more information.

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\EditRecord;
use Filament\Actions\ViewAction;

class EditUser extends EditRecord
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            ViewAction::make()
                ->record($this->user)
                 ->form([
                    TextInput::make('name')
                        ->required(),
                    // ...
                ])

        ];
    }

    //
}
```

### Delete Action

[](#delete-action)

You can use `Filament\Actions\DeleteAction`, visit [filament delete action](https://filamentphp.com/docs/3.x/actions/prebuilt-actions/delete) for more information.

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ViewRecord;
use Filament\Actions\DeleteAction;

class ViewUser extends ViewRecord
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            DeleteAction::make()
                ->record($this->user)
        ];
    }

    //
}
```

### Replicate Action

[](#replicate-action)

You can use `Filament\Actions\ReplicateAction`, visit [filament replicate action](https://filamentphp.com/docs/3.x/actions/prebuilt-actions/replicate) for more information.

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ViewRecord;
use Filament\Actions\ReplicateAction;

class ViewUser extends ViewRecord
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            ReplicateAction::make()
                ->record($this->user)
        ];
    }

    //
}
```

### Force Delete Action

[](#force-delete-action)

You can use `Filament\Actions\ForceDeleteAction`, visit [filament force delete action](https://filamentphp.com/docs/3.x/actions/prebuilt-actions/force-delete) for more information.

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ViewRecord;
use Filament\Actions\ForceDeleteAction;

class ViewUser extends ViewRecord
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            ForceDeleteAction::make()
                ->record($this->user)
        ];
    }

    //
}
```

### Restore Action

[](#restore-action)

You can use `Filament\Actions\RestoreAction`, visit [filament restore action](https://filamentphp.com/docs/3.x/actions/prebuilt-actions/restore) for more information.

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ListRecords;
use Filament\Actions\RestoreAction;

class ListUsers extends ListRecords
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            RestoreAction::make()
                ->record($this->user)
        ];
    }

    //
}
```

### Import Action

[](#import-action)

You can use `Filament\Actions\ImportAction`, visit [filament import action](https://filamentphp.com/docs/3.x/actions/prebuilt-actions/import) for more information.

```
use App\Filament\Imports\UserImporter;
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ListRecords;
use Filament\Actions\ImportAction;

class ListUsers extends ListRecords
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            ImportAction::make()
                ->importer(UserImporter::class)
        ];
    }

    //
}
```

### Export Action

[](#export-action)

You can use `Filament\Actions\ExportAction`, visit [filament export action](https://filamentphp.com/docs/3.x/actions/prebuilt-actions/export) for more information.

```
use App\Filament\Exports\UserExporter;
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ListRecords;
use Filament\Actions\ExportAction;

class ListUsers extends ListRecords
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            ExportAction::make()
                ->exporter(UserExporter::class)
        ];
    }

    //
}
```

### Example: action with modal

[](#example-action-with-modal)

You can use filament action with modal

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ViewRecord;
use Filament\Actions\Action;

class ViewUser extends ViewRecord
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            Action::make('Quick edit user')
                ->form([
                    \Filament\Forms\Components\Grid::make(2)
                        ->schema([
                            TextInput::make('name'),
                            TextInput::make('email'),
                        ])
                ])
                ->action(function($data){
                    $this->getRecord()->update([
                        'name' => $data['name'],
                        'email' => $data['email'],
                    ]);
                })
        ];
    }

    //
}
```

### Example: refresh, go back and go forward actions

[](#example-refresh-go-back-and-go-forward-actions)

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ViewRecord;
use AymanAlhattami\FilamentContextMenu\Actions\{ RefreshAction, GoBackAction, GoForwardAction};

class ViewUser extends ViewRecord
{
    use PageHasContextMenu;

    //

    public static function getContextMenuActions(): array
    {
        return [
            RefreshAction::make(),
            GoBackAction::make(),
            GoForwardAction::make()
        ];
    }

    //
}
```

### Enable / Disable context menu in resource pages and custom pages

[](#enable--disable-context-menu-in-resource-pages-and-custom-pages)

Method 1: To globally enable or disable the context menu, you need to define an env variable called `CONTEXT_MENU_ENABLED` and to set the value to `true` or `false`.

Method 2: You can also define a static variable called `public static bool $contextMenuEnabled` in the page and set the value to `true` or `false`;

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ViewRecord;

class ViewUser extends ViewRecord
{
    use PageHasContextMenu;

    # enable / disable context menu
    public static bool $contextMenuEnabled = true;

    //

    public static function getContextMenuActions(): array
    {
        return [];
    }

    //
}
```

Method 3: define a static method called `isContextMenuEnabled` in the page

```
use AymanAlhattami\FilamentContextMenu\Traits\PageHasContextMenu;
use Filament\Resources\Pages\ViewRecord;

class ViewUser extends ViewRecord
{
    use PageHasContextMenu;

    public static function isContextMenuEnabled(): bool
    {
        return true;
    }

    //

    public static function getContextMenuActions(): array
    {
        return [];
    }

    //
}
```

Usage 2: table cells
--------------------

[](#usage-2-table-cells)

To add a context menu to the table cell, you can use the following columns:

```
 AymanAlhattami\FilamentContextMenu\Columns\ContextMenuTextColumn;
 AymanAlhattami\FilamentContextMenu\Columns\ContextMenuCheckboxColumn;
 AymanAlhattami\FilamentContextMenu\Columns\ContextMenuSelectColumn;
 AymanAlhattami\FilamentContextMenu\Columns\ContextMenuColorColumn;
 AymanAlhattami\FilamentContextMenu\Columns\ContextMenuIconColumn;
 AymanAlhattami\FilamentContextMenu\Columns\ContextMenuImageColumn;
 AymanAlhattami\FilamentContextMenu\Columns\ContextMenuTextInputColumn;
 AymanAlhattami\FilamentContextMenu\Columns\ContextMenuToggleColumn;
```

```
use Filament\Tables\Table;
use Filament\Actions\Action;
use AymanAlhattami\FilamentContextMenu\Columns\ContextMenuTextColumn;
use App\Filament\Resources\UserResource\Pages\{ ViewUser, EditUser };

//
public static function table(Table $table): Table
    {
        return $table
            ->columns([
                ContextMenuTextColumn::make('id')
                    ->searchable()
                    ->contextMenuActions(fn (Model $record) => [
                        Action::make('View user')
                            ->url(ViewUser::getUrl(['record' => $record]))
                            ->link()
                            ->icon('heroicon-o-user'),
                    ]),
                ContextMenuTextColumn::make('name')
                    ->searchable()
                    ->contextMenuActions(fn (Model $record) => [
                        Action::make('View user')
                            ->url(Pages\ViewUser::getUrl(['record' => $record]))
                            ->link()
                            ->icon('heroicon-o-user'),
                        Action::make('Edit user')
                            ->url(Pages\EditUser::getUrl(['record' => $record]))
                            ->link()
                            ->icon('heroicon-o-pencil'),
                    ])
                    ,
                ,
            ])
}
```

Use `AymanAlhattami\FilamentContextMenu\ContextMenuDivider` to set a divider between menu actions.

### enable / disable table cell context menu

[](#enable--disable-table-cell-context-menu)

Use `->contextMenuEnabled()` method to enable/disable the context menu for the table cell.

```
//
public static function table(Table $table): Table
    {
        return $table
            ->columns([
                ContextMenuTextColumn::make('id')
                    ->contextMenuEnabled(false)
                    ->contextMenuActions(fn (Model $record) => [
                        Action::make('View user')
                            ->url(ViewUser::getUrl(['record' => $record]))
                            ->link()
                            ->icon('heroicon-o-user'),
                    ]),
//
```

Note
----

[](#note)

For action to have a nice style, use `->link()` method of the action, [more information](https://filamentphp.com/docs/3.x/actions/trigger-button#choosing-a-trigger-style)

```
public static function getContextMenuActions(): array
{
    return [
        Action::make('Create user')
            ->url(CreateUser::getUrl())
            ->link()
        ];
}
```

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [aymanalhattami](https://github.com/aymanalhattami)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

55

—

FairBetter than 98% of packages

Maintenance83

Actively maintained with recent releases

Popularity44

Moderate usage in the ecosystem

Community19

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 82.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~117 days

Recently: every ~173 days

Total

7

Last Release

54d ago

Major Versions

0.0.1 → 1.0.02024-04-27

1.0.3 → 2.0.02026-01-23

2.0.0 → 3.0.02026-03-25

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/34315778?v=4)[Ayman Alhattami](/maintainers/aymanalhattami)[@aymanalhattami](https://github.com/aymanalhattami)

---

Top Contributors

[![aymanalhattami](https://avatars.githubusercontent.com/u/34315778?v=4)](https://github.com/aymanalhattami "aymanalhattami (173 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (13 commits)")[![ihsan-ullah-khan](https://avatars.githubusercontent.com/u/101094396?v=4)](https://github.com/ihsan-ullah-khan "ihsan-ullah-khan (10 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (8 commits)")[![eugenefvdm](https://avatars.githubusercontent.com/u/1836436?v=4)](https://github.com/eugenefvdm "eugenefvdm (3 commits)")[![fsamapoor](https://avatars.githubusercontent.com/u/4992968?v=4)](https://github.com/fsamapoor "fsamapoor (1 commits)")[![JoshuaSigaban](https://avatars.githubusercontent.com/u/45688948?v=4)](https://github.com/JoshuaSigaban "JoshuaSigaban (1 commits)")

---

Tags

filamentjavascriptlaravellaravelfilamentcontext menuayman alhattamifilament\_context\_menufilament admin panel

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/aymanalhattami-filament-context-menu/health.svg)

```
[![Health](https://phpackages.com/badges/aymanalhattami-filament-context-menu/health.svg)](https://phpackages.com/packages/aymanalhattami-filament-context-menu)
```

###  Alternatives

[pboivin/filament-peek

Full-screen page preview modal for Filament

253319.6k12](/packages/pboivin-filament-peek)[dotswan/filament-map-picker

Easily pick and retrieve geo-coordinates using a map-based interface in your Filament applications.

124139.3k2](/packages/dotswan-filament-map-picker)[creagia/filament-code-field

A Filamentphp input field to edit or view code data.

58289.3k3](/packages/creagia-filament-code-field)[jibaymcs/filament-tour

Bring the power of DriverJs to your Filament panels and start a tour !

12247.8k](/packages/jibaymcs-filament-tour)[schmeits/filament-character-counter

This is a Filament character counter TextField and Textarea form field for Filament v4 and v5

33184.7k6](/packages/schmeits-filament-character-counter)[tapp/filament-google-autocomplete-field

Filament plugin that provides a Google Autocomplete field

3098.1k](/packages/tapp-filament-google-autocomplete-field)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
