guava/filament-icon-picker
Filament plugin that adds an Icon Picker form field and matching table column. Pick icons from any installed blade-icons kit (Heroicons included). Store full icon names and render them in tables or on the frontend for customizable UI/icons.
Installation:
composer require guava/filament-icon-picker
php artisan filament:assets
Configure Theme:
Add to your resources/css/theme.css:
@source '../../../../vendor/guava/filament-icon-picker/resources/**/*';
First Use Case: Add to a Filament form schema:
use Guava\IconPicker\Forms\Components\IconPicker;
IconPicker::make('icon')
->label('Select an icon')
->required();
src/Forms/Components/IconPicker.php for field customization options.src/Tables/Columns/IconColumn.php for display logic.Form Integration:
// Basic usage
IconPicker::make('icon')
->sets(['heroicons', 'tabler'])
->gridSearchResults();
// With validation
IconPicker::make('icon')
->required()
->rule('required|string')
->maxLength(50);
Table Display:
use Guava\IconPicker\Tables\Columns\IconColumn;
$table->columns([
IconColumn::make('icon')
->label('Icon')
->placeholder('No icon selected'),
]);
Frontend Rendering:
<x-icon :name="$model->icon" />
blade-icons sets are installed (e.g., blade-icons/heroicons).public static function form(Form $form): Form {
return $form->schema([
IconPicker::make('icon')
->sets(['custom-set'])
->listSearchResults(),
]);
}
->sets() to restrict available icons per context.IconPicker::make('icon')
->visible(fn ($record) => $record->is_customizable),
Missing Assets:
php artisan filament:assets after installation causes broken UI.php artisan optimize).Icon Set Mismatch:
blade-icons (e.g., heroicons without blade-icons/heroicons).composer require blade-icons/heroicons
Theme CSS Not Loaded:
@source directive is missing in theme.css.resources/css/theme.css.Null Icons in Tables:
IconColumn may show null.->placeholder() or handle nulls in Blade:
<x-icon :name="$model->icon ?? 'heroicons-outline-x-circle'" />
// Log available icon sets
\Log::info(\Guava\IconPicker\IconManager::getAvailableSets());
heroicons-outline-shopping-cart). Verify these match your blade-icons set.Custom Search Views:
Override the search result views in resources/views/vendor/guava/icon-picker/.
Example: Copy resources/views/vendor/guava/icon-picker/search-results-grid.blade.php to your project.
Icon Manager:
Extend \Guava\IconPicker\IconManager to add custom icon sets or logic:
// app/Providers/AppServiceProvider.php
public function boot() {
\Guava\IconPicker\IconManager::extend('custom-set', function () {
return collect([/* custom icons */]);
});
}
Livewire Config:
For large icon sets, adjust payloads.max_calls in config/livewire.php:
'payloads' => [
'max_calls' => 100, // Increase if icons lag
],
->preload() (if supported in future versions) to cache icons on first load.->sets(['heroicons']) to reduce payload size.Filament Version Compatibility:
guava/filament-icon-picker:^4.0 for Filament 5.x).CSS Conflicts:
If icons appear misaligned, inspect the generated CSS in node_modules or override via theme.css.
How can I help you explore Laravel packages today?