PHPackages                             cooper/filament-dcat-filters - 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. cooper/filament-dcat-filters

ActiveLibrary[Admin Panels](/categories/admin)

cooper/filament-dcat-filters
============================

Bring Dcat Admin's powerful filter features to Filament - including Scope filters, Range filters, SelectTable, and more quick filters

v1.3.0(1mo ago)023↓50%1[1 PRs](https://github.com/myxiaoao/filament-dcat-filters/pulls)MITPHPPHP ^8.3CI passing

Since Jan 10Pushed 1mo agoCompare

[ Source](https://github.com/myxiaoao/filament-dcat-filters)[ Packagist](https://packagist.org/packages/cooper/filament-dcat-filters)[ Docs](https://github.com/myxiaoao/filament-dcat-filters)[ GitHub Sponsors](https://github.com/myxiaoao)[ RSS](/packages/cooper-filament-dcat-filters/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (19)Versions (17)Used By (0)

Filament Dcat Filters
=====================

[](#filament-dcat-filters)

**Bring Dcat Admin's powerful filter features to Filament**

Built with PHP 8.3+ for Laravel 12 and Filament v4/v5

[![Latest Version on Packagist](https://camo.githubusercontent.com/36fa8f1fa6197676fc004de36909cb3b06624cb06ef958fb3ba6fee4aef17a46/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f636f6f7065722f66696c616d656e742d646361742d66696c746572732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/cooper/filament-dcat-filters)[![Total Downloads](https://camo.githubusercontent.com/6550ec8b72a95873c94b232c2d0b46c3a102774d589f4b2d4ca224976037ae39/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f636f6f7065722f66696c616d656e742d646361742d66696c746572732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/cooper/filament-dcat-filters)[![run-tests](https://github.com/myxiaoao/filament-dcat-filters/actions/workflows/run-tests.yml/badge.svg)](https://github.com/myxiaoao/filament-dcat-filters/actions/workflows/run-tests.yml)[![License](https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667)](LICENSE)[![PHP](https://camo.githubusercontent.com/aa2a8ea32b8f0e9efd5be764cac6c75f680d08361c6865ce1d6a4c5fed720c5a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d382e332b2d707572706c652e737667)](https://www.php.net)[![Laravel](https://camo.githubusercontent.com/345c267d4886d1fc482cf93fe78528d8c43967446838fb9fa7bc77a09821b3b3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d31322e782d7265642e737667)](https://laravel.com)[![Filament](https://camo.githubusercontent.com/a07ebe62101aff9026f231b8b87b6a896a40a424d9e1b30d3d0b6eddda6a4952/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f66696c616d656e742d342e78253230253743253230352e782d6f72616e67652e737667)](https://filamentphp.com)

[![Filament Dcat Filters Screenshot](./art/filters.png)](./art/filters.png)---

A modern collection of enhanced filters inspired by [Dcat Admin](https://github.com/jqhph/dcat-admin), combining intuitive UI components with powerful filtering capabilities for [Filament](https://filamentphp.com) admin panels.

[English Documentation](#features) | [中文文档](README_CN.md)

Features
--------

[](#features)

### Core Filters

[](#core-filters)

- 🎯 **Scope Filter** - Tab-style quick filters for common queries
- 📊 **Range Filter** - Simplified date/number range filtering (3 lines of code!)
- 📅 **Date Component Filter** - Filter by year, month, or day separately
- 🔍 **SelectTable Filter** - Modal table selector with search and pagination
- 🎭 **Modal Select Filter** - Dcat Admin style modal with full table display
- 🔢 **Between Filter** - Numeric range filtering shortcut
- 🙈 **Hidden Filter** - URL parameter-based filtering without UI

### Quick Filters

[](#quick-filters)

- ⚡ **LIKE Filter** - Text search with wildcard control (supports NOT LIKE)
- 📋 **IN Filter** - Multiple value selection (supports NOT IN)
- 🔢 **Comparison Filter** - Comparison operators (&gt;, &lt;, &gt;=, &lt;=, =, !=)
- ✅ **Boolean Filter** - True/false/all toggle for boolean fields
- 🔘 **Null Filter** - NULL/NOT NULL value filtering
- 📝 **Enum Filter** - Auto-generate options from PHP 8.1+ Enum classes
- 🔍 **FullText Filter** - Search across multiple fields simultaneously
- 📆 **Relative Date Filter** - Pre-defined date range shortcuts

### Specialized Filters

[](#specialized-filters)

- 🗄️ **JSON Filter** - Query JSON/JSONB columns with path access
- 🏷️ **FindInSet Filter** - Query comma-separated values using FIND\_IN\_SET
- 🔤 **Regex Filter** - Pattern matching with regular expressions
- 📱 **InputMask Filter** - Formatted input with masks (phone, credit card, etc.)
- 📍 **GeoLocation Filter** - Geographic proximity filtering with Haversine formula
- 🔗 **Filter Group** - Combine filters with AND/OR logic

### Advanced Features

[](#advanced-features)

- 🔄 **Reset All Filters** - One-click reset button for all active filters
- 💾 **Filter State Persistence** - Remember filter states across sessions
- 🔗 **URL Query Parameter Sync** - Shareable filter URLs without page reload
- 🔗 **Cascading Select Filter** - Dynamic dependent dropdowns
- ♿ **Accessibility Support** - ARIA labels and keyboard navigation
- 📋 **Filter Presets** - Save and load filter combinations
- 🔢 **Scope Badge Counts** - Display record counts on scope tabs
- 📤 **Filter Export/Import** - Share filter configurations via URL or JSON

### Additional Features

[](#additional-features)

- 🎨 **Highly Customizable** - Extensive customization options for each filter
- 📱 **Mobile Friendly** - Responsive design for all screen sizes
- 🌐 **Bilingual Docs** - Complete English and Chinese documentation
- ✅ **Fully Tested** - Comprehensive test coverage with 786 tests

Version Compatibility
---------------------

[](#version-compatibility)

FilamentFilament Dcat FiltersPHPLaravel5.x1.x^8.3^12.04.x1.x^8.3^12.0Installation
------------

[](#installation)

You can install the package via composer:

```
composer require cooper/filament-dcat-filters
```

Optionally, you can publish the config file:

```
php artisan vendor:publish --tag="filament-dcat-filters-config"
```

Optionally, you can publish the views:

```
php artisan vendor:publish --tag="filament-dcat-filters-views"
```

Quick Start
-----------

[](#quick-start)

### Scope Filter

[](#scope-filter)

Perfect for quick filtering with tab-style buttons:

```
use Cooper\FilamentDcatFilters\Filters\ScopeFilter;

ScopeFilter::make('status')
    ->scopes([
        'all' => 'All',
        'active' => 'Active',
        'inactive' => 'Inactive',
    ])
```

**[View detailed documentation →](docs/en/scope-filter.md)**

### Range Filter

[](#range-filter)

Simplified date/number range filtering:

```
use Cooper\FilamentDcatFilters\Filters\RangeFilter;

RangeFilter::make('created_at')->datetime()
```

**[View detailed documentation →](docs/en/range-filter.md)**

### SelectTable Filter

[](#selecttable-filter)

Modal table selector with search and pagination:

```
use Cooper\FilamentDcatFilters\Filters\SelectTableFilter;

SelectTableFilter::make('user_id')
    ->relationship('user', 'name')
    ->multiple()
```

**[View detailed documentation →](docs/en/select-table-filter.md)**

### Date Component Filter

[](#date-component-filter)

Filter by year, month, or day components:

```
use Cooper\FilamentDcatFilters\Filters\DateComponentFilter;

DateComponentFilter::make('created_at')->year()
DateComponentFilter::make('birth_date')->month()
DateComponentFilter::make('published_at')->day()
```

**[View detailed documentation →](docs/en/date-component-filter.md)**

### Modal Select Filter

[](#modal-select-filter)

Dcat Admin style modal with full table display:

```
use Cooper\FilamentDcatFilters\Filters\ModalSelectFilter;

ModalSelectFilter::make('user_id')
    ->model(User::class, 'name', 'id')
    ->dialogTitle('Select User')
    ->displayColumns(['id' => 'ID', 'name' => 'Name', 'email' => 'Email'])
    ->searchable(['name', 'email'])
    ->multiple()
```

**[View detailed documentation →](docs/en/modal-select-filter.md)**

### Quick Filters

[](#quick-filters-1)

Built-in filters for common operations:

```
use Cooper\FilamentDcatFilters\Filters\{LikeFilter, InFilter, ComparisonFilter, BetweenFilter};

// LIKE search (with NOT LIKE support)
LikeFilter::make('title'),
LikeFilter::make('spam_keywords')->notLike(), // Exclude matches

// IN array (with NOT IN support)
InFilter::make('category_id')
    ->options(Category::pluck('name', 'id')->toArray()),
InFilter::make('blocked_users')->notIn(), // Exclude selected

// Comparison (>, =, gte()->label('Minimum Views'),

// Between (numeric range)
BetweenFilter::make('price')->label('Price Range'),
```

**[View detailed documentation →](docs/en/quick-filters.md)**

### Boolean Filter

[](#boolean-filter)

Dedicated true/false/all toggle for boolean fields:

```
use Cooper\FilamentDcatFilters\Filters\BooleanFilter;

BooleanFilter::make('is_active')
    ->label('Status')
    ->trueLabel('Active')
    ->falseLabel('Inactive')

// Quick presets
BooleanFilter::active()      // is_active field
BooleanFilter::published()   // is_published field
BooleanFilter::enabled()     // is_enabled field
```

### Null Filter

[](#null-filter)

Filter for NULL or NOT NULL values:

```
use Cooper\FilamentDcatFilters\Filters\NullFilter;

NullFilter::make('deleted_at')
    ->nullLabel('Not Deleted')
    ->notNullLabel('Deleted')

// Quick presets
NullFilter::deleted()    // deleted_at field
NullFilter::assigned()   // Check if field is assigned
NullFilter::empty()      // Check if field is empty/filled
```

### Enum Filter

[](#enum-filter)

Auto-generate options from PHP 8.1+ Enum classes:

```
use Cooper\FilamentDcatFilters\Filters\EnumFilter;

EnumFilter::make('status')
    ->enum(OrderStatus::class)
    ->multiple()
    ->exclude([OrderStatus::Cancelled])
```

### FullText Filter

[](#fulltext-filter)

Search across multiple fields simultaneously:

```
use Cooper\FilamentDcatFilters\Filters\FullTextFilter;

FullTextFilter::make('search')
    ->searchIn(['name', 'email', 'phone'])
    ->placeholder('Search users...')
    ->minLength(2)
    ->debounce(300)
```

### Relative Date Filter

[](#relative-date-filter)

Pre-defined date range shortcuts:

```
use Cooper\FilamentDcatFilters\Filters\RelativeDateFilter;

RelativeDateFilter::make('created_at')
    ->only(['today', 'yesterday', 'last_7_days', 'last_30_days', 'this_month'])

// Quick presets
RelativeDateFilter::common()     // Common date ranges
RelativeDateFilter::weekly()     // Week/month focused
RelativeDateFilter::reporting()  // Quarter/year focused
```

### Hidden Filter

[](#hidden-filter)

URL parameter-based filtering (no UI):

```
use Cooper\FilamentDcatFilters\Filters\HiddenFilter;

// Pre-filter by tenant
HiddenFilter::make('tenant_id')
    ->default(auth()->user()->tenant_id)
    ->eq()
```

**[View detailed documentation →](docs/en/advanced-features.md#hiddenfilter-usage-guide)**

### Reset All Filters

[](#reset-all-filters)

Add a one-click reset button:

```
use Cooper\FilamentDcatFilters\Concerns\HasResetFilters;

class ListUsers extends ListRecords
{
    use HasResetFilters;

    protected function getHeaderActions(): array
    {
        return [
            $this->getResetFiltersAction(),
        ];
    }
}
```

**[View detailed documentation →](docs/en/reset-filters.md)**

### Filter State Persistence

[](#filter-state-persistence)

Remember filter states across sessions:

```
use Cooper\FilamentDcatFilters\Concerns\HasFilterPersistence;

class ListUsers extends ListRecords
{
    use HasFilterPersistence;

    protected string $filterPersistenceKey = 'users-list-filters';
}
```

**[View detailed documentation →](docs/en/filter-persistence.md)**

### URL Query Parameter Sync

[](#url-query-parameter-sync)

Shareable filter URLs:

```
use Cooper\FilamentDcatFilters\Concerns\SyncsFiltersToUrlWithoutHistory;

class ListUsers extends ListRecords
{
    use SyncsFiltersToUrlWithoutHistory;
}
```

**[View detailed documentation →](docs/en/url-sync.md)**

### Cascading Select Filter

[](#cascading-select-filter)

Dynamic dependent dropdowns:

```
use Cooper\FilamentDcatFilters\Filters\CascadingSelectFilter;

CascadingSelectFilter::make('location')
    ->levels([
        'country' => [
            'label' => 'Country',
            'options' => fn () => Country::pluck('name', 'id'),
        ],
        'state' => [
            'label' => 'State',
            'options' => fn ($country) => State::where('country_id', $country)->pluck('name', 'id'),
            'dependsOn' => 'country',
        ],
        'city' => [
            'label' => 'City',
            'options' => fn ($state) => City::where('state_id', $state)->pluck('name', 'id'),
            'dependsOn' => 'state',
        ],
    ])
```

**[View detailed documentation →](docs/en/cascading-filters.md)**

Documentation
-------------

[](#documentation)

### Core Filters

[](#core-filters-1)

- 📖 [Scope Filter](docs/en/scope-filter.md) - Tab-style quick filters
- 📖 [Range Filter](docs/en/range-filter.md) - Date/number range filtering
- 📖 [Date Component Filter](docs/en/date-component-filter.md) - Year/Month/Day filtering
- 📖 [SelectTable Filter](docs/en/select-table-filter.md) - Modal table selector
- 📖 [Modal Select Filter](docs/en/modal-select-filter.md) - Dcat Admin style modal table selector
- 📖 [Quick Filters](docs/en/quick-filters.md) - LIKE, IN, GT, LT, BETWEEN filters

### Specialized Filters

[](#specialized-filters-1)

- 📖 [JSON Filter](docs/en/json-filter.md) - Query JSON/JSONB columns with path access
- 📖 [FindInSet Filter](docs/en/find-in-set-filter.md) - Query comma-separated values
- 📖 [Regex Filter](docs/en/regex-filter.md) - Pattern matching with regular expressions
- 📖 [InputMask Filter](docs/en/input-mask-filter.md) - Formatted input with masks
- 📖 [GeoLocation Filter](docs/en/geo-location-filter.md) - Geographic proximity filtering
- 📖 [Filter Group](docs/en/filter-group.md) - Combine filters with AND/OR logic

### Advanced Features

[](#advanced-features-1)

- 📖 [Reset All Filters](docs/en/reset-filters.md) - One-click reset functionality
- 📖 [Filter State Persistence](docs/en/filter-persistence.md) - Session-based filter memory
- 📖 [URL Query Parameter Sync](docs/en/url-sync.md) - Shareable filter URLs
- 📖 [Cascading Select Filter](docs/en/cascading-filters.md) - Dynamic dependent dropdowns
- 📖 [Accessibility](docs/en/accessibility.md) - ARIA labels and keyboard support
- 📖 [Advanced Features](docs/en/advanced-features.md) - API support, Hidden filters
- 📖 [Concerns (Traits)](docs/en/concerns-traits.md) - Filter presets, badge counts, export/import

### Guides &amp; References

[](#guides--references)

- 📖 [Usage Examples](docs/en/usage-example.md) - Complete working examples
- 📖 [Demo Guide](docs/en/demo-guide.md) - Interactive demonstrations
- 📖 [Comparison with Dcat Admin](docs/en/comparison.md) - Feature comparison
- 📖 [Package Structure](docs/en/package-structure.md) - Package architecture
- 📖 [Documentation Structure](docs/en/documentation-structure.md) - Documentation organization
- 📖 [Future Improvements](docs/en/future-improvements.md) - Roadmap and planned features

Facade Usage
------------

[](#facade-usage)

You can also use the Facade for quick access:

```
use Cooper\FilamentDcatFilters\Facades\FilamentDcatFilters;

FilamentDcatFilters::scopeFilter('status')->scopes([...]);
FilamentDcatFilters::rangeFilter('created_at')->datetime();

// All available filter shortcuts
FilamentDcatFilters::booleanFilter('is_active');
FilamentDcatFilters::nullFilter('deleted_at');
FilamentDcatFilters::enumFilter('status');
FilamentDcatFilters::fullTextFilter('search');
FilamentDcatFilters::hiddenFilter('tenant_id');
FilamentDcatFilters::filterGroup('combined');
```

Artisan Command
---------------

[](#artisan-command)

Generate a custom filter class using the Artisan command:

```
php artisan make:dcat-filter MyCustom
```

This creates `app/Filament/Filters/MyCustomFilter.php`.

### Options

[](#options)

OptionDescriptionDefault`--type`Filter type to extend`basic``--force`Overwrite existing file`false`### Available Types

[](#available-types)

TypeBase Class`basic``Filament\Tables\Filters\Filter``like``LikeFilter``in``InFilter``comparison``ComparisonFilter``boolean``BooleanFilter``null``NullFilter``enum``EnumFilter``range``RangeFilter``between``BetweenFilter``scope``ScopeFilter``regex``RegexFilter``fulltext``FullTextFilter``json``JsonFilter``date-component``DateComponentFilter``select-table``SelectTableFilter``modal-select``ModalSelectFilter``hidden``HiddenFilter``relative-date``RelativeDateFilter``cascading-select``CascadingSelectFilter``find-in-set``FindInSetFilter``input-mask``InputMaskFilter``geo-location``GeoLocationFilter``filter-group``FilterGroup`### Examples

[](#examples)

```
# Create a basic filter
php artisan make:dcat-filter ProductStatus

# Create a filter extending LikeFilter
php artisan make:dcat-filter ProductSearch --type=like

# Create a filter extending ComparisonFilter
php artisan make:dcat-filter MinPrice --type=comparison

# Overwrite existing
php artisan make:dcat-filter ProductStatus --force
```

Testing
-------

[](#testing)

```
composer test
```

Code Quality
------------

[](#code-quality)

```
# Format code
composer format

# Static analysis
composer analyse
```

Changelog
---------

[](#changelog)

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

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

[](#contributing)

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

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

[](#security-vulnerabilities)

If you discover any security-related issues, please email `myxiaoao@gmail.com`.

Credits
-------

[](#credits)

- [Cooper](https://github.com/myxiaoao)
- Inspired by [Dcat Admin](https://github.com/jqhph/dcat-admin)
- [All Contributors](../../contributors)

License
-------

[](#license)

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

###  Health Score

44

—

FairBetter than 92% of packages

Maintenance89

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 93.7% 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 ~5 days

Total

15

Last Release

56d ago

### Community

Maintainers

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

---

Top Contributors

[![myxiaoao](https://avatars.githubusercontent.com/u/1223134?v=4)](https://github.com/myxiaoao "myxiaoao (104 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (5 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (2 commits)")

---

Tags

dcat-adminfilament-pluginlaravel-packagelaravelfiltersfilamentfilament-pluginadmin-paneldcat adminfilament-filterscope-filterrange-filter

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/cooper-filament-dcat-filters/health.svg)

```
[![Health](https://phpackages.com/badges/cooper-filament-dcat-filters/health.svg)](https://phpackages.com/packages/cooper-filament-dcat-filters)
```

###  Alternatives

[a909m/filament-statefusion

Filament StateFusion is a powerful FilamentPHP plugin that seamlessly integrates Spatie Laravel Model States into the Filament admin panel. This package provides an intuitive way to manage model states, transitions, and filtering within Filament, enhancing the user experience and developer productivity.

3010.8k1](/packages/a909m-filament-statefusion)[inerba/filament-db-config

A Filament plugin for database-backed application settings and editable content, with caching and easy page generation.

329.1k](/packages/inerba-filament-db-config)[caresome/filament-neobrutalism-theme

A neobrutalism theme for FilamentPHP admin panels

303.2k](/packages/caresome-filament-neobrutalism-theme)[watheqalshowaiter/filament-sticky-table-header

A Filament plugin that makes table headers stick when scrolling down for better UX.

3020.4k](/packages/watheqalshowaiter-filament-sticky-table-header)[mradder/filament-logger

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

141.1k](/packages/mradder-filament-logger)[openplain/filament-tree-view

Tree view for Filament resources - drop-in replacement for Table with drag-and-drop hierarchical data management

318.5k](/packages/openplain-filament-tree-view)

PHPackages © 2026

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