PHPackages                             harvirsidhu/filament-action-overflow - 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. harvirsidhu/filament-action-overflow

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

harvirsidhu/filament-action-overflow
====================================

Compose any Filament action list into primary actions plus an overflow dropdown, with divider support.

v1.1.0(1mo ago)5385↑78.6%1MITPHPPHP ^8.2

Since Apr 12Pushed 1mo agoCompare

[ Source](https://github.com/harvirsidhu/filament-action-overflow)[ Packagist](https://packagist.org/packages/harvirsidhu/filament-action-overflow)[ Docs](https://github.com/harvirsidhu/filament-action-overflow)[ RSS](/packages/harvirsidhu-filament-action-overflow/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (12)Versions (4)Used By (0)

Filament Action Overflow
========================

[](#filament-action-overflow)

[![Latest Version on Packagist](https://camo.githubusercontent.com/597f179933f006585fefaea682667a3d4d82f5a139d9d05e621f4eff514e64a8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f68617276697273696468752f66696c616d656e742d616374696f6e2d6f766572666c6f772e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/harvirsidhu/filament-action-overflow)[![Total Downloads](https://camo.githubusercontent.com/94a8ee7d92be0b51b7d2bea855393b32569e199600527cbac1d4634f73a0d072/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f68617276697273696468752f66696c616d656e742d616374696f6e2d6f766572666c6f772e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/harvirsidhu/filament-action-overflow)

Turn any Filament action list into **a few primary buttons + a "More" dropdown**, automatically.

```
[ Edit ] [ Archive ] [ ⋮ More ▾ ]
                       ├─ Publish
                       ├─ Delete
                       └─ Download

```

You write a flat list of actions; the package decides which sit out front and which get tucked under **More**. Works anywhere Filament accepts an action array — page headers, table actions, record actions, bulk actions, widgets.

Why use it
----------

[](#why-use-it)

- **One line.** Append `->withOverflow()` to an `ActionGroup` and you're done.
- **Smart defaults.** No overflow → no `More`. One overflow action → flattened. Two or more → grouped.
- **Divider aware.** Filament 5's `->dropdown(false)` divider sections pass through into the **More** menu cleanly.
- **Hidden-action aware.** `->hidden()` / `->visible(false)` / (optionally) `->authorize(...)` are honored before composing.

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

[](#compatibility)

PackageVersionsFilament`^4.0` ‖ `^5.0`PHP`^8.2`Installation
------------

[](#installation)

```
composer require harvirsidhu/filament-action-overflow
```

The package works without any config. Publish only if you want to change defaults:

```
php artisan vendor:publish --tag="filament-action-overflow-config"
```

Quick start
-----------

[](#quick-start)

The macro is the simplest path. Build an `ActionGroup` like normal, append `->withOverflow($primary)`, and return the result.

```
use Filament\Actions\Action;
use Filament\Actions\ActionGroup;

public function getHeaderActions(): array
{
    return ActionGroup::make([
        Action::make('edit'),
        Action::make('archive'),
        Action::make('delete'),
    ])->withOverflow(1);
    // → [ Edit ] [ ⋮ More ▾ (Archive, Delete) ]
}
```

`->withOverflow()` is terminal — it returns the composed `array` ready for `getHeaderActions()`, `getTableActions()`, `getRecordActions()`, etc.

By default both the primary actions and the **More** trigger are promoted to button view, so you get a row of matching buttons without sprinkling `->button()` on each action.

Customizing the More button
---------------------------

[](#customizing-the-more-button)

For control over the dropdown's label, icon, color, etc., use the `ActionOverflow` facade:

```
use Filament\Actions\Action;
use Harvirsidhu\FilamentActionOverflow\Facades\ActionOverflow;

return ActionOverflow::make([
    Action::make('edit'),
    Action::make('archive'),
    Action::make('delete'),
])
    ->primaryCount(2)
    ->label('Options')
    ->icon('heroicon-m-bars-3')
    ->color('gray')
    ->toActions();
```

Dividers (sections inside the More menu)
----------------------------------------

[](#dividers-sections-inside-the-more-menu)

A `dropdown(false)` group nested inside another `ActionGroup` is Filament's way of saying *"render these as a separated section."* This package treats them as first-class:

```
use Filament\Actions\Action;
use Filament\Actions\ActionGroup;

return ActionGroup::make([
    Action::make('submit'),

    ActionGroup::make([
        Action::make('discount'),
        Action::make('tax'),
        Action::make('rounding'),
    ])->dropdown(false),

    ActionGroup::make([
        Action::make('change-billing'),
        Action::make('refresh'),
    ])->dropdown(false),
])->withOverflow(1);
```

Renders as:

```
[ Submit ] [ ⋮ More ▾ ]
              ├─ ──────────
              ├─ Discount
              ├─ Tax
              ├─ Rounding
              ├─ ──────────
              ├─ Change billing
              └─ Refresh

```

How dividers behave in the composer:

- A divider doesn't take up a primary slot — its **children** do. With `primaryCount: 2` and a divider whose first child is `submit`, `submit` is promoted to primary.
- Dividers never appear among side-by-side primary buttons (they only make sense inside a dropdown).
- A divider at the very top of the **More** menu is unwrapped (no orphan line above the first item).
- Trailing and adjacent dividers stay as distinct sections — exactly how Filament renders them natively.
- Hidden / invisible children are dropped from dividers; if every child is dropped, the divider disappears.

Hidden, invisible, unauthorized
-------------------------------

[](#hidden-invisible-unauthorized)

Hidden and invisible actions are filtered automatically:

```
return ActionOverflow::make([
    Action::make('edit')->hidden(),         // dropped
    Action::make('archive'),                // kept
    Action::make('delete')->visible(false), // dropped
    Action::make('publish'),                // kept
])->toActions();
```

Authorization filtering is **opt-in** because Filament's renderer already disables unauthorized actions visually:

```
return ActionOverflow::make($actions)
    ->filterUnauthorized()
    ->toActions();
```

Reference
---------

[](#reference)

### Config keys (`config/action-overflow.php`)

[](#config-keys-configaction-overflowphp)

KeyTypeDefaultWhat it does`primary_count``int``1`How many primary actions to surface`label``string``'More'`The dropdown trigger's label`icon``string|enum``'heroicon-m-ellipsis-vertical'`Trigger icon`color``string``'gray'`Filament color name for the trigger`hidden_label``bool``false`Hide the trigger label, show icon only`button``bool``true`Promote primary + trigger to button view`icon_position``string|enum``'after'``'before'` or `'after'` (or `IconPosition`)`filter_unauthorized``bool``false`Drop unauthorized actions before composing`icon` accepts a string, a `BackedEnum` (e.g. `Filament\Support\Icons\Heroicon::EllipsisVertical` on Filament 5), or `null` for the default. `icon_position` accepts the string forms or a `Filament\Support\Enums\IconPosition` enum. Strings are the published defaults so the file loads cleanly on both Filament 4 and 5.

### Fluent API

[](#fluent-api)

```
ActionOverflow::make($actions)
    ->primaryCount(int $count = 1)
    ->label(string $label = 'More')
    ->icon(string|\BackedEnum|null $icon = null)
    ->color(string $color = 'gray')
    ->hiddenLabel(bool $state = true)
    ->button(bool $state = true)
    ->iconPosition(\Filament\Support\Enums\IconPosition|string|\BackedEnum|null $position = \Filament\Support\Enums\IconPosition::After)
    ->filterUnauthorized(bool $state = true)
    ->toActions();
```

`->button(false)` is opt-out only — it stops the composer from calling `->button()`. If a caller already passed a pre-buttoned action, it keeps its button view.

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

See [CHANGELOG](CHANGELOG.md).

Credits
-------

[](#credits)

- [harvirsidhu](https://github.com/harvirsidhu)

License
-------

[](#license)

MIT — see [LICENSE](LICENSE.md).

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance93

Actively maintained with recent releases

Popularity23

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity48

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 ~12 days

Total

3

Last Release

35d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/7453102?v=4)[harvirsidhu](/maintainers/harvirsidhu)[@harvirsidhu](https://github.com/harvirsidhu)

---

Top Contributors

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

---

Tags

laravelfilamentfilament-pluginfilamentphpharvirsidhufilament-action-overflowaction-overflow

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/harvirsidhu-filament-action-overflow/health.svg)

```
[![Health](https://phpackages.com/badges/harvirsidhu-filament-action-overflow/health.svg)](https://phpackages.com/packages/harvirsidhu-filament-action-overflow)
```

###  Alternatives

[dotswan/filament-map-picker

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

127173.7k3](/packages/dotswan-filament-map-picker)[jibaymcs/filament-tour

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

12351.0k](/packages/jibaymcs-filament-tour)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3913.7k](/packages/rawilk-profile-filament-plugin)[wsmallnews/filament-nestedset

Filament nestedset tree builder powered by kalnoy/nestedset with Filament v4 and v5 support

196.5k14](/packages/wsmallnews-filament-nestedset)[marcelweidum/filament-passkeys

Use passkeys in your filamentphp app

6643.3k](/packages/marcelweidum-filament-passkeys)[guava/filament-modal-relation-managers

Allows you to embed relation managers inside filament modals.

7976.7k4](/packages/guava-filament-modal-relation-managers)

PHPackages © 2026

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