nickperkins/blade-icon-picker
Standalone Blade icon picker component for Livewire forms. Works with any blade-icons pack (Heroicons, Font Awesome, custom). Includes search, lazy-loaded icon grid, keyboard navigation, responsive layout, and Tailwind-free CSS with customizable variables.
composer require nickperkins/blade-icon-picker blade-ui-kit/blade-heroicons
php artisan vendor:publish --tag=icon-picker-assets
<head>
<link rel="stylesheet" href="{{ asset('vendor/icon-picker/icon-picker.css') }}">
</head>
<body>
<!-- ... -->
<script src="{{ asset('vendor/icon-picker/icon-picker.js') }}"></script>
</body>
Add the component to a Livewire form:
<x-icon-picker::icon-picker wire:model="menuIcon" :value="$menuIcon" />
wire:model (Livewire binding) + :value (initial value)Livewire Property Binding
// Livewire component
public string $icon = ''; // Default empty string
<x-icon-picker::icon-picker wire:model="icon" :value="$icon" />
Form Integration
<form wire:submit="save">
<x-icon-picker::icon-picker wire:model="icon" />
@error('icon') <p class="text-red-500">{{ $message }}</p> @enderror
<button type="submit">Save</button>
</form>
Validation
public function rules(): array {
return ['icon' => ['required', 'string']];
}
Conditional Rendering
@if($showIconPicker)
<x-icon-picker::icon-picker wire:model="icon" />
@endif
Dynamic Placeholder
<x-icon-picker::icon-picker
wire:model="icon"
placeholder="{{ __('Select a ' . $context . ' icon') }}"
/>
Disabled State
<x-icon-picker::icon-picker
wire:model="icon"
disabled="{{ $isReadonly }}"
/>
blade-ui-kit/blade-* pack (Heroicons, FontAwesome). Install additional packs as needed.ip-dark class or data-theme="dark" on parent elements..icon-picker-root {
--ip-primary: #3b82f6; /* Tailwind blue-500 */
}
Alpine.data() required.Missing value Prop
:value="$icon" alongside wire:model.No Icon Packs Installed
blade-ui-kit/blade-heroicons or another compatible pack.JS/CSS Not Loaded
Livewire 2 Compatibility
Alpine.data('iconPicker', {}) if using Livewire 2.x-data or x-model).ar le to find heroicon-o-arrow-left.Custom Icon Sets
blade-icons packs via the service provider:
BladeIcons::register();
Override Defaults
.icon-picker-grid {
grid-template-columns: repeat(8, 1fr); /* Custom columns */
}
Inline Mode
Performance
@error directives for Livewire validation messages.@media (prefers-color-scheme: dark) {
.icon-picker-root { --ip-bg: #1f2937; }
}
livewire() with ->call('save') to test form submissions.How can I help you explore Laravel packages today?