PHPackages                             leek/filament-right-click - 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. [Admin Panels](/categories/admin)
4. /
5. leek/filament-right-click

ActiveLibrary[Admin Panels](/categories/admin)

leek/filament-right-click
=========================

Right-click table row menus for Filament panels that trigger native Filament actions.

v1.3.3(today)67↑2471.4%MITPHPPHP ^8.2

Since Jul 1Pushed todayCompare

[ Source](https://github.com/leek/filament-right-click)[ Packagist](https://packagist.org/packages/leek/filament-right-click)[ RSS](/packages/leek-filament-right-click/feed)WikiDiscussions main Synced today

READMEChangelog (8)Dependencies (6)Versions (12)Used By (0)

Filament Right Click
====================

[](#filament-right-click)

Right-click table row and Flowforge card menus for Filament panels.

This package adds a static right-click menu to Filament table records and, when Flowforge is installed, Kanban board cards. Menu items trigger native Filament actions, so action modals, confirmation, authorization, validation, notifications, redirects, and server-side disabled/hidden checks remain owned by Filament.

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

[](#installation)

```
composer require leek/filament-right-click
php artisan filament:assets
```

Register the plugin on the panels that should support right-click menus:

```
use Leek\FilamentRightClick\FilamentRightClickPlugin;

$panel
    ->plugin(FilamentRightClickPlugin::make());
```

Usage
-----

[](#usage)

Use `contextMenuActions()` for single-record row menu items and `contextMenuBulkActions()` for selected-record menu items:

```
use Filament\Actions\Action;
use Filament\Actions\BulkAction;
use Filament\Actions\DeleteAction;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
use Leek\FilamentRightClick\Menu\ContextMenuItem;
use Leek\FilamentRightClick\Menu\ContextMenuSection;
use Leek\FilamentRightClick\Menu\ContextMenuSeparator;

public static function table(Table $table): Table
{
    return $table
        ->columns([
            // ...
        ])
        ->contextMenuActions([
            ContextMenuSection::make([
                ContextMenuItem::for(
                    Action::make('archive')
                        ->requiresConfirmation()
                        ->action(fn ($record) => $record->archive()),
                )
                    ->label('Archive')
                    ->icon(Heroicon::ArchiveBox)
                    ->color('warning'),
            ])->label('Manage'),

            ContextMenuSeparator::make(),

            ContextMenuItem::for(DeleteAction::make())
                ->label('Delete')
                ->icon(Heroicon::Trash)
                ->color('danger'),
        ])
        ->contextMenuBulkActions([
            ContextMenuItem::forBulkAction(
                BulkAction::make('archiveSelected')
                    ->label('Archive Selected')
                    ->requiresConfirmation()
                    ->action(fn ($records) => $records->each->archive()),
            )
                ->icon(Heroicon::ArchiveBox)
                ->color('warning'),
        ]);
}
```

The wrapped actions are registered as table actions, but they are not rendered in the normal row action column. On click, the package calls Filament's table action mounting path for the row record key.

Bulk actions are registered as table bulk actions without rendering in the normal bulk action dropdown. When the right-clicked row is already selected, the bulk menu uses the current Filament selection, including select-all-across-pages state. When the right-clicked row is not selected, the single-record menu opens instead.

### Flowforge cards

[](#flowforge-cards)

If `relaticle/flowforge` is installed, the plugin also registers a `contextMenuCardActions()` macro on Flowforge boards:

```
use Filament\Actions\Action;
use Filament\Support\Icons\Heroicon;
use Leek\FilamentRightClick\Menu\ContextMenuItem;
use Relaticle\Flowforge\Board;

public function board(Board $board): Board
{
    return $board
        ->query(Task::query())
        ->columns([
            // ...
        ])
        ->recordActions([
            // Visible card actions...
        ])
        ->contextMenuCardActions([
            ContextMenuItem::for(
                Action::make('viewTask')
                    ->label('View Task')
                    ->action(fn ($record) => $this->viewTask($record)),
            )
                ->icon(Heroicon::Eye),

            ContextMenuItem::for(
                Action::make('archiveTask')
                    ->requiresConfirmation()
                    ->action(fn ($record) => $record->archive()),
            )
                ->label('Archive')
                ->icon(Heroicon::ArchiveBox)
                ->color('warning'),
        ]);
}
```

Flowforge card context actions are registered with Filament's action cache, but they are not added to Flowforge's visible card action group. On click, the package calls Flowforge's native card action mounting path with the card's `recordKey`.

Screenshot
----------

[](#screenshot)

 [![Filament Right Click table row context menu screenshot](art/screenshot.png)](art/screenshot.png)

Behavior
--------

[](#behavior)

- Right-click opens the menu anywhere on a table row except existing interactive controls.
- The browser context menu is only suppressed for rows in tables with configured right-click actions.
- `ContextMenu` keyboard key and `Shift+F10` open the menu for the focused or last-hovered row.
- `Escape` closes the menu, arrow keys move through items, and `Enter` / `Space` trigger the focused item.
- Touch and long-press gestures are intentionally not included in v1.

Static menu, server-enforced actions
------------------------------------

[](#static-menu-server-enforced-actions)

The menu label, icon, and color are static metadata on `ContextMenuItem`. The underlying Filament action still decides whether the operation can run for the specific record.

If a right-click item points to an action that is hidden, disabled, or unauthorized for a row, Filament will refuse to mount it. The menu closes and no client-side policy decision is made.

Asset loading
-------------

[](#asset-loading)

Assets are registered as `loadedOnRequest()` and are requested only by tables that use `contextMenuActions()` or `contextMenuBulkActions()`.

If you publish or bundle assets in your own build pipeline, keep the DOM contract intact:

- table root record menu: `data-filament-right-click-record-config`
- table root bulk menu: `data-filament-right-click-bulk-config`
- legacy table root record menu: `data-filament-right-click-config`
- Flowforge board card menu: `data-filament-right-click-flowforge-card-config`
- row key source: Filament's native row `wire:key`
- Flowforge card key source: `data-card-id`
- record action call: `mountTableAction(actionName, recordKey)`
- Flowforge card action call: `mountAction(actionName, [], { recordKey })`
- bulk action call: synchronize Filament's selected table record properties, then mount the bulk action

Bulk actions
------------

[](#bulk-actions)

Use `contextMenuBulkActions()` with `ContextMenuItem::forBulkAction()` or pass a `BulkAction` directly:

```
use Filament\Actions\BulkAction;
use Leek\FilamentRightClick\Menu\ContextMenuItem;

$table->contextMenuBulkActions([
    ContextMenuItem::forBulkAction(
        BulkAction::make('deleteSelected')
            ->label('Delete Selected')
            ->requiresConfirmation()
            ->action(fn ($records) => $records->each->delete()),
    )
        ->color('danger'),
]);
```

Bulk actions are still server-enforced by Filament. Hidden, disabled, and unauthorized actions will not mount.

Compatibility
-------------

[](#compatibility)

This package targets Filament v4 and v5.

Flowforge support is optional and is registered only when `Relaticle\Flowforge\Board` exists.

Record actions use Filament's table action mounting path. Bulk actions use the newer unified `mountAction()` path when available and fall back to Filament's table bulk action compatibility method.

###  Health Score

45

—

FairBetter than 91% of packages

Maintenance100

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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 ~0 days

Total

11

Last Release

0d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/e11ad2f75cb1d558136f1982458d541d96fb84a217d6a82e8c18df2ff503964b?d=identicon)[leek](/maintainers/leek)

---

Top Contributors

[![leek](https://avatars.githubusercontent.com/u/60204?v=4)](https://github.com/leek "leek (12 commits)")

---

Tags

laravelactionstablesfilamentfilamentphpright-clickcontext menuleek

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/leek-filament-right-click/health.svg)

```
[![Health](https://phpackages.com/badges/leek-filament-right-click/health.svg)](https://phpackages.com/packages/leek-filament-right-click)
```

###  Alternatives

[marcelweidum/filament-passkeys

Use passkeys in your filamentphp app

6649.5k1](/packages/marcelweidum-filament-passkeys)[mradder/filament-logger

Audit logging, activity tracking, exports, alerts, and dashboards for Filament admin panels.

2310.5k](/packages/mradder-filament-logger)[stephenjude/filament-jetstream

A Laravel starter kit built with Filament inspired by Jetstream.

17760.2k2](/packages/stephenjude-filament-jetstream)[awcodes/filament-quick-create

Plugin for Filament Admin that adds a dropdown menu to the header to quickly create new items.

249203.6k11](/packages/awcodes-filament-quick-create)[stephenjude/filament-two-factor-authentication

Filament Two Factor Authentication: Google 2FA + Passkey Authentication

84215.9k9](/packages/stephenjude-filament-two-factor-authentication)[relaticle/custom-fields

User Defined Custom Fields for Laravel Filament

16354.2k](/packages/relaticle-custom-fields)

PHPackages © 2026

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