Weave Code
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

Filament Icon Picker Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Pros:
    • Filament Integration: Seamlessly integrates with Filament v4/v5, leveraging its form and table components. Aligns with Filament’s modular architecture, reducing boilerplate for icon management.
    • Blade-Icons Compatibility: Works with any blade-icons kit (e.g., Heroicons, Feather, Tabler), enabling consistency with existing UI libraries.
    • Database Agnostic: Stores icon names as strings (e.g., "heroicons-outline-home"), avoiding vendor lock-in or binary storage.
    • Customization Hooks: Supports UI customization (grid/list/icons views, dropdown toggles, set limitations) without forking the package.
  • Cons:
    • Filament Version Dependency: Tight coupling with Filament versions (e.g., v5 requires v4.x of the plugin). Risk: Future Filament breaking changes may require plugin updates.
    • No Built-in Icon Management: Relies on pre-installed blade-icons kits; no native upload/custom icon support (though extensions like upload-icons are hinted in docs).
    • CSS Dependency: Requires manual theme configuration (@source in theme.css), adding friction for non-standard Filament setups.

Integration Feasibility

  • Low Effort for Basic Use:
    • Forms: Replace TextInput with IconPicker in Filament schemas (1 line change).
    • Tables: Replace TextColumn with IconColumn (1 line change).
    • Frontend: Render icons via <x-icon :name="$model->icon" /> in Blade.
  • Moderate Effort for Advanced Use:
    • Custom Icon Sets: Requires installing additional blade-icons packages (e.g., blade-icons/heroicons).
    • Theme Customization: Manual CSS injection for styling (e.g., icon sizes, colors).
    • Livewire Payloads: May need payloads.max_calls tuning for large icon sets.
  • Blockers:
    • Filament Version Mismatch: If using Filament v3 or v6, the plugin would need a fork or downgrade.
    • Icon Set Gaps: Missing a desired icon set (e.g., Material Icons) would require third-party integration.

Technical Risk

Risk Area Severity Mitigation Strategy
Filament Version Drift High Pin plugin version to match Filament (e.g., guava/filament-icon-picker:^4.0). Monitor Filament releases for breaking changes.
Icon Set Availability Medium Audit blade-icons compatibility early; provide fallback UI if icons are missing.
Performance Medium Test with large icon sets (e.g., 1000+ icons); optimize payloads.max_calls if needed.
CSS Conflicts Low Use Filament’s scoped CSS or shadow DOM to isolate styles.
Database Schema Low Icon names are strings; no migration needed unless adding validation.

Key Questions for Stakeholders

  1. Filament Version:
    • Are we locked into Filament v4/v5, or could we migrate to v6 (which might break compatibility)?
  2. Icon Strategy:
    • Do we need custom/uploaded icons, or are pre-installed blade-icons kits sufficient?
  3. UI/UX Priorities:
    • Should the icon picker default to grid/list/icons view or dropdown? Are tooltips/tooltips-off preferred?
  4. Scalability:
    • How many icon sets will be used? Will performance degrade with >500 icons?
  5. Maintenance:
    • Who will handle plugin updates if Filament breaks compatibility?

Integration Approach

Stack Fit

  • Core Stack Compatibility:
    • PHP/Laravel: Works with Laravel 8+ (no direct Laravel dependency post-v2.3.0).
    • Filament: Native support for v4/v5; v3/v6 require version-specific branches.
    • Blade/Icons: Requires blade-icons (e.g., blade-icons/heroicons for defaults).
    • Frontend: Uses Alpine.js/Livewire under the hood; no additional JS dependencies.
  • Non-Filament Use Cases:
    • Livewire Components: Can be used outside Filament if wrapped in a Livewire component.
    • Standalone Blade: Icon rendering works anywhere Blade is used (<x-icon :name="$icon" />).

Migration Path

  1. Prerequisites:
    • Install blade-icons kits (e.g., composer require blade-icons/heroicons).
    • Ensure Filament is on a supported version (v4/v5 for v4.x plugin).
  2. Installation:
    composer require guava/filament-icon-picker
    php artisan filament:assets
    
  3. Theme Setup:
    • Add @source directive to resources/css/filament/theme.css:
      @source '../../../../vendor/guava/filament-icon-picker/resources/**/*';
      
  4. Usage Migration:
    • Forms: Replace TextInput::make('icon') with IconPicker::make('icon').
    • Tables: Replace TextColumn::make('icon') with IconColumn::make('icon').
    • Frontend: Update Blade templates to use <x-icon :name="$model->icon" />.
  5. Optional Customization:
    • Limit icon sets: ->sets(['heroicons', 'tabler']).
    • Toggle dropdown: ->dropdown(false).
    • Adjust search views: ->gridSearchResults() or ->iconsSearchResults().

Compatibility

Component Compatibility Notes
Filament v4/v5 Full support; use ^4.0 for v5.
Filament v3 Use ^3.x branch (deprecated; no active maintenance).
Blade-Icons Works with any kit (e.g., Heroicons, Feather, Tabler). Requires blade-icons packages.
Livewire No conflicts; uses Livewire’s payload system. May need payloads.max_calls tuning.
Tailwind CSS Styles are Tailwind-agnostic but may need adjustments for custom themes.

Sequencing

  1. Phase 1: Core Integration (1–2 days):
    • Install plugin and dependencies.
    • Replace TextInput/TextColumn with IconPicker/IconColumn in critical forms/tables.
    • Test icon rendering in Blade.
  2. Phase 2: Customization (0.5–1 day):
    • Configure icon sets, search views, and dropdown preferences.
    • Adjust CSS if needed (e.g., icon sizes).
  3. Phase 3: Performance Tuning (0.5 day):
    • Monitor Livewire payloads for large icon sets.
    • Optimize payloads.max_calls if lag is detected.
  4. Phase 4: Rollout:
    • Deploy to staging; validate icon consistency across forms/tables/Blade.
    • Train team on <x-icon> usage in templates.

Operational Impact

Maintenance

  • Proactive Tasks:
    • Dependency Updates: Monitor Filament and blade-icons for breaking changes.
    • Plugin Updates: Pin to minor versions (e.g., ^4.0) to avoid major version risks.
    • CSS Maintenance: Rebuild assets (php artisan filament:assets) after theme changes.
  • Reactive Tasks:
    • Icon Set Gaps: If a new icon set is needed, install the blade-icons package and restart the queue worker (if using preloading).
    • Filament Breaking Changes: Fork the plugin if upstream support lags (low risk for MIT-licensed packages).
  • Tooling:
    • CI/CD: Add tests for icon rendering in forms/tables (e.g., Pest tests for IconPicker).
    • Monitoring: Alert on Livewire payload failures (e.g., payloads.max_calls exceeded).

Support

  • Common Issues:
    • Missing Icons: Verify blade-icons kits are installed and registered.
    • CSS Not Loading: Check @source directive in theme.css and rebuild assets.
    • Slow Performance: Increase payloads.max_calls in livewire.php or limit icon sets.
  • Escalation Path:
    • Plugin Bugs: Open issues on GitHub.
    • Filament Incompatibilities: Check Filament’s upgrade guide or community forums.
  • Documentation Gaps:
    • Custom Icon Sets: Docs lack a step-by-step for adding non-Heroicons kits.
    • Advanced Customization: Limited examples for overriding JS/CSS.

Scaling

  • Horizontal Scaling:
    • Icon Sets: No impact;
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.
nasirkhan/laravel-sharekit
directorytree/privacy-filter-classifier
directorytree/privacy-filter
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
agtp/agtp-php
agtp/mod-php
splash/sonata-admin
splash/metadata
splash/openapi
splash/scopes
splash/toolkit
testo/output-teamcity
testo/bridge-symfony