ht3aa / only-one-active-toggle
A Filament plugin that provides a toggle field that ensures only one toggle is active at a time within a repeater
Installs: 3
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Language:Blade
Requires
- php: ^8.1
- filament/filament: ^3.0
- spatie/laravel-package-tools: ^1.16
README
A Filament plugin that provides a toggle field that ensures only one toggle is active at a time within a repeater. This is achieved entirely client-side using Alpine.js, without any server-side requests.
Features
- 🔄 Client-Side Only: Uses Alpine.js for all operations, no server requests needed
- 🎯 Repeater Compatible: Works seamlessly within Filament repeaters
- 🎨 Theme Support: Fully supports both light and dark themes
- 🛠️ Customizable: Supports all standard Filament toggle features
- ⚡ Performance: Lightweight and efficient implementation
Installation
You can install the package via composer:
composer require ht3aa/only-one-active-toggle
Usage
This field is designed to be used inside a Filament repeater. When one toggle is activated, all other toggles in the same repeater will be automatically deactivated.
use Ht3aa\OnlyOneActiveToggle\Fields\OnlyOneActiveToggle; Forms\Components\Repeater::make('items') ->schema([ OnlyOneActiveToggle::make('is_active') ->label('Active Item'), // ... other fields ])
Example
Here's a complete example of how to use the field in a form:
use Ht3aa\OnlyOneActiveToggle\Fields\OnlyOneActiveToggle; public static function form(Form $form): Form { return $form ->schema([ Forms\Components\Repeater::make('items') ->schema([ Forms\Components\TextInput::make('name') ->required(), OnlyOneActiveToggle::make('is_active') ->label('Set as Active'), ]) ->columns(2), ]); }
How It Works
The plugin uses Alpine.js to:
- Track the state of all toggles in the repeater
- Automatically deactivate other toggles when one is activated
- Handle all state changes client-side
Requirements
- PHP 8.1+
- Filament 3.x
- Alpine.js (included with Filament)
Support
If you find a bug or have a feature request, please open an issue on GitHub.
License
This package is open-sourced software licensed under the MIT license.