Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Blade Icon Picker

Blade Icon Picker Laravel Package

nickperkins/blade-icon-picker

A standalone icon picker Blade component for Livewire forms that works with any blade-icons pack, featuring search, lazy rendering, keyboard navigation, and responsive styling with no Tailwind dependency.

View on GitHub
Deep Wiki
Context7

A standalone Blade icon picker component for Livewire forms that works with any blade-icons pack — Heroicons, Font Awesome, or custom sets. It's a lightweight Blade component rather than a Livewire component, so you pass both wire:model for write-back and :value for initial display, keeping it flexible and easy to drop into existing forms.

  • Search: substring token matching (type ar le to find Arrow Left)
  • Lazy rendering: icons load 30 at a time as you scroll
  • Keyboard navigation: arrow keys, Enter, and Escape
  • Responsive grid: 4 columns on mobile up to 12 on desktop
  • Standalone CSS: no Tailwind dependency; theme via CSS custom properties
Frequently asked questions about Blade Icon Picker
How do I install nickperkins/blade-icon-picker in a Laravel app?
Run composer require nickperkins/blade-icon-picker, and optionally composer require blade-ui-kit/blade-heroicons for a recommended default icon pack. Publish the assets with php artisan vendor:publish --tag=icon-picker-assets. Add the published CSS in your head section and the JavaScript before the closing body tag after Alpine.js. There is no service-provider configuration, migration, or external service to set up.
Which Laravel, PHP, and Livewire versions does it support?
The package requires PHP 8.2+, Laravel 10, 11, or 12, Livewire 3, and blade-icons 1.0+. Livewire 2 is not supported. Non-Livewire forms and Inertia or Vue stacks are a poor fit because the Alpine.js coupling becomes dead weight.
Does the icon picker work with Heroicons, Font Awesome, and custom blade-icons packs?
Yes, it works with any blade-icons pack because the server walks every registered set and serializes the catalog. Heroicons and Font Awesome are both supported, and custom sets are auto-discovered. There is no documented allow-listing, so every registered pack is embedded on pages that host a picker.
Why does my saved icon not show when I reopen a Livewire form?
wire:model only handles write-back; it does not seed the picker's initial value. You must also pass :value="$icon" on the component. This dual binding is required because the picker is a Blade component, not a Livewire component. Without it, a saved icon can silently fail to re-display.
Is this a Livewire component or a Blade component?
It is a Blade component that ships an Alpine.js island. On page load the server renders every registered icon to inline SVG and serializes the catalog as JSON; the browser then owns search, filtering, lazy chunking, and keyboard navigation. The only server round-trip is $wire.set() when an icon is selected.
How do search and keyboard navigation work in the icon picker?
Search uses client-side substring token matching, so typing "ar le" can find "Arrow Left". Arrow keys, Enter, and Escape are supported for navigation and selection. The icon grid renders 30 icons at a time as you scroll. No per-keystroke Livewire request is made.
How much page weight and render time does the icon picker add?
The full icon catalog is serialized as inline SVG JSON into every page that hosts a picker. Heroicons v2 is roughly 1,200 icons across four styles, so expect a few hundred KB up to about 750 KB before compression, plus server-side SVG rendering on each request. IconManager is a per-request singleton, so multiple pickers reuse it, but a cold page still pays. No catalog caching or build-time JSON generation is documented.
Can I limit icon packs, change the chunk size, or customize styling and dark mode?
There is no documented configuration for icon-set allow-listing, so a project with Font Awesome, Heroicons, and custom packs embeds all of them, and chunk size is a hardcoded constant of 30. Styling uses standalone CSS with no Tailwind dependency, and colors can be overridden with CSS custom properties. Dark mode documentation is inconsistent: one section says prefers-color-scheme auto-detection is not supported while another says it is, and theming examples use .icon-picker-root while dark-mode docs use .ip-root, so verify before shipping.
Is the icon picker accessible and screen-reader friendly?
Keyboard arrows, Enter, and Escape are claimed, but ARIA roles, focus trapping, active-descendant announcements, and screen-reader behavior are not documented or evidenced. Treat accessibility as unverified until you test it with your own assistive-technology checks. The package's README does not publish an accessibility conformance statement.
Is nickperkins/blade-icon-picker production-ready and actively maintained?
It currently has zero stars, zero dependents, a single maintainer, and one recent release, with no observable third-party usage to surface bugs before you do. MIT licensing and a small surface area make vendoring or forking a credible fallback. Plan for ownership and dependency review rather than community support.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource