wallacemartinss/filament-icon-picker
Modern icon picker for Filament v5 powered by blade-icons. Provides a sleek modal with search, provider filtering, infinite scroll, and live preview. Includes a form field, table column, and infolist entry, with configurable modal layout and icon sets.
composer require wallacemartinss/filament-icon-picker
php artisan filament-icon-picker:install-icons
/* resources/css/filament/admin/theme.css */
@source '../../../../vendor/wallacemartinss/filament-icon-picker/resources/views/**/*';
npm run build
Add an icon picker to a Form Field in a Filament resource:
use Wallacemartinss\FilamentIconPicker\Forms\Components\IconPickerField;
public static function form(Form $form): Form
{
return $form->schema([
IconPickerField::make('icon')
->label('Select an Icon')
->searchable(),
]);
}
IconPickerField::make('icon')
->required()
->searchable()
->allowedSets(['heroicons', 'phosphor-icons']);
IconPickerField::make('icon')
->rules(fn (Form $form) => [
'required' => $form->getState()->is_active,
]);
IconPickerColumn::make('status_icon')
->color(fn ($record) => $record->is_active ? 'success' : 'danger')
->size(fn ($record) => $record->is_premium ? 'xl' : 'md')
->animation(fn ($record) => $record->is_loading ? 'spin' : null);
IconPickerColumn::make('type_indicator')
->icon('heroicon-o-star')
->warning()
->extraSmall();
IconPickerEntry::make('avatar_icon')
->icon(fn ($record) => "heroicon-o-$record->role")
->color('primary')
->showIconName(false);
use Wallacemartinss\FilamentIconPicker\Enums\Heroicons;
// Navigation icon
protected static string|BackedEnum|null $navigationIcon = Heroicons::OutlinedStar;
// Action icon
Action::make('export')
->icon(Heroicons::OutlinedArrowDownTray);
use Wallacemartinss\FilamentIconPicker\Enums\Icon;
public static function getNavigationIcon(): ?string
{
return Icon::phosphor('gear', 'duotone');
}
php artisan icons:cache
use Wallacemartinss\FilamentIconPicker\Enums\PhosphorIcons;
Action::make('approve')
->icon(PhosphorIcons::CheckCircle)
->color('success')
->requiresConfirmation();
use Wallacemartinss\FilamentIconPicker\Enums\MaterialIcons;
Widget::make('status_widget')
->icon(fn () => MaterialIcons::Error->value)
->color(fn () => $this->getStatusColor())
->spin(fn () => $this->isLoading());
IconPickerField::make('icon')
->modalSize('4xl') // Default: '3xl'
->columns(6); // Override grid columns (default: 6)
composer require afatmustafa/blade-hugeicons
php artisan filament-icon-picker:generate-enums --all
config/filament-icon-picker.php):
'allowed_sets' => ['heroicons', 'hugeicons', 'phosphor-icons'],
Missing Icon Sets
php artisan filament-icon-picker:install-icons or manually via Composer.php artisan filament-icon-picker:install-icons --list to check installed sets.Tailwind Scanning Errors
@source directive is added to resources/css/filament/admin/theme.css and run npm run build.Enum Generation Conflicts
php artisan filament-icon-picker:generate-enums fails.app/Enums (if auto-generated) or manually resolve naming conflicts.--force flag: php artisan filament-icon-picker:generate-enums --force.Caching Issues
php artisan optimize:clear
php artisan view:clear
Infinite Scroll Not Working
Log Available Icons
// Dump all registered icons
dd(\Wallacemartinss\FilamentIconPicker\Facades\Icon::all());
Check Installed Sets
php artisan filament-icon-picker:install-icons --list
Inspect Modal Rendering
F12) and check the Network tab for failed requests to /filament-icon-picker/icons.Validate Icon Names
Icon helper to test icon rendering:
echo \Wallacemartinss\FilamentIconPicker\Enums\Icon::heroicon('star', 'outlined');
allowed_sets in Config
['heroicons', 'phosphor-icons']).[] (allows all installed sets).heroicons), not package names (e.g., blade-heroicons).Modal Size Limits
sm, md, lg, xl, 2xl, 3xl, 4xl, 5xl, 6xl, 7xl.3xl.4xl for large icon libraries (e.g., Material Design).Dynamic Methods
fn ($record) => ... for dynamic sizing/coloring.IconPickerColumn::make('icon')
->size(fn ($record) => $record->priority === 'high' ? 'xl' : 'md')
->color(fn ($record) => $record->is_urgent ? 'danger' : 'gray');
Icon Preview in Forms
resources/views/vendor/filament-icon-picker/preview.blade.php.Custom Icon Sets
IconSet class to support non-blade-icons packages.// app/Providers/FilamentIconPickerServiceProvider.php
public function boot(): void
{
$this->app->make(\Wallacemartinss\FilamentIconPicker\Contracts\IconRegistry::class)
->registerSet(new CustomIconSet());
}
Override Blade Views
resources/views/vendor/filament-icon-picker/:
cp -r vendor/wallacemartinss/filament-icon-picker/resources/views/* resources/views/vendor/filament-icon-picker/
modal.blade.php or preview.blade.php for custom UI.Add Custom Animations
IconPickerColumn/IconPickerEntry classes.How can I help you explore Laravel packages today?