Game Icons
Type-safe enum for 4000+ Game Icons from game-icons.net. It offers IDE autocompletion, type safety, searchable categories, and seamless integration with Filament components.
Author:
Ali Harb
Documentation
- ✨ Features
- 🚀 Quick Start
- 📖 Documentation
- 🗂️ Icon Categories
- 💡 Examples
- 🔧 API Reference
- ⚙️ Configuration
- 🛠️ Management Commands
- 🎨 Theming Examples
- 🧪 Testing
- 🚀 Performance
- 🔒 Security
- 🔌 Plugin Integration
- 🚀 Migration Guide
- 🤝 Contributing
- 📋 Requirements
- 🔧 Troubleshooting
- 📊 Statistics
- 🎖️ Showcase
- 📚 Resources
- 📄 License & Attribution
- 🙏 Acknowledgments
- 🆘 Support
- 💡 Pro Tips
- 🔗 Related Packages
- 🌟 Star History
- 💝 Show Your Support
The ultimate Game Icons collection for FilamentPHP
Transform your FilamentPHP applications with 4000+ beautiful game icons
📖 Documentation • 🚀 Quick Start • 💡 Examples • 🤝 Contributing
#✨ Features
#🎯 Core Features
|
#🛠️ Developer Experience
|
#🚀 Quick Start
#Installation
Install the package via Composer:
composer require alizharb/filament-game-icons
#Asset Registration
Register the assets with FilamentPHP:
php artisan filament:assets
#Basic Usage
Start using Game Icons immediately in any FilamentPHP component:
use Alizharb\FilamentGameIcons\Enums\GameIcons;
use Filament\Actions\Action;
Action::make('attack')
->icon(GameIcons::Sword)
->label('Attack with Sword')
->color('danger');
#📖 Documentation
#🏗️ Architecture Overview
graph TD
A[FilamentPHP Application] --> B[Filament Game Icons Package]
B --> C[GameIcons Enum]
B --> D[Blade Game Icons]
D --> E[Game Icons SVG Collection]
C --> F[Type Safety]
C --> G[IDE Autocompletion]
C --> H[Search & Categories]
style A fill:#FF6719
style B fill:#3B82F6
style E fill:#10B981
#🎯 Component Integration
📋 Actions & Buttons
use Alizharb\FilamentGameIcons\Enums\GameIcons;
use Filament\Actions\Action;
// Basic action with icon
Action::make('attack')
->icon(GameIcons::Sword)
->color('danger')
->requiresConfirmation();
// Grouped actions
Action::make('combat_menu')
->icon(GameIcons::CrossedSwords)
->actions([
Action::make('attack')->icon(GameIcons::Sword),
Action::make('defend')->icon(GameIcons::Shield),
Action::make('cast_spell')->icon(GameIcons::MagicSwirl),
]);
📝 Form Components
use Filament\Forms\Components\{Select, Toggle, Radio, Checkbox};
// Enhanced select with searchable icons
Select::make('character_class')
->options(GameIcons::getCharactersArray())
->searchable()
->native(false)
->allowHtml()
->placeholder('Choose your character class...');
// Toggle with custom icons
Toggle::make('is_magical')
->onIcon(GameIcons::MagicSwirl)
->offIcon(GameIcons::Sword)
->onColor('primary')
->offColor('gray');
// Radio with descriptions
Radio::make('weapon_preference')
->options(GameIcons::getWeaponsArray())
->descriptions([
GameIcons::Sword->value => 'Balanced attack and defense',
GameIcons::BowArrow->value => 'Long-range precision strikes',
GameIcons::MagicSwirl->value => 'Powerful elemental damage',
]);
📊 Table Columns
use Filament\Tables\Columns\{IconColumn, TextColumn};
// Dynamic status icons
IconColumn::make('player_status')
->icon(fn ($record): string => match ($record->status) {
'online' => GameIcons::Person->value,
'in_battle' => GameIcons::CrossedSwords->value,
'resting' => GameIcons::Sleep->value,
'offline' => GameIcons::Skull->value,
})
->color(fn ($record): string => match ($record->status) {
'online' => 'success',
'in_battle' => 'warning',
'resting' => 'info',
'offline' => 'gray',
})
->tooltip(fn ($record): string => "Player is {$record->status}");
// Equipment column with multiple icons
TextColumn::make('equipment')
->formatStateUsing(function ($record): string {
$icons = [];
if ($record->weapon) $icons[] = GameIcons::Sword->value;
if ($record->armor) $icons[] = GameIcons::Armor->value;
if ($record->magic_item) $icons[] = GameIcons::MagicSwirl->value;
return view('components.icon-list', compact('icons'))->render();
});
📱 Widgets & Dashboard
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
class GameDashboardWidget extends BaseWidget
{
protected function getStats(): array
{
return [
Stat::make('👥 Active Players', $this->getActivePlayers())
->description('Currently online')
->descriptionIcon(GameIcons::Person->value)
->chart([7, 2, 10, 3, 15, 4, 17])
->color('success'),
Stat::make('⚔️ Battles Today', $this->getBattlesToday())
->description('32% increase from yesterday')
->descriptionIcon(GameIcons::CrossedSwords->value)
->color('warning'),
Stat::make('🏆 Achievements', $this->getAchievements())
->description('Unlocked this week')
->descriptionIcon(GameIcons::Trophy->value)
->color('primary'),
Stat::make('💰 Gold Earned', number_format($this->getGoldEarned()))
->description('Total server economy')
->descriptionIcon(GameIcons::GoldStack->value)
->color('warning'),
];
}
}
#🗂️ Icon Categories
| Category | Count | Examples | Usage |
|---|---|---|---|
| ⚔️ Weapons | 500+ | Sword, BowArrow, Shield, Axe |
Combat systems, inventory |
| 🔮 Magic | 300+ | MagicSwirl, HealingPotion, Rune |
Spell systems, enchantments |
| 👤 Characters | 200+ | Wizard, Warrior, Archer, Rogue |
Character selection, classes |
| 🐉 Creatures | 400+ | Dragon, Wolf, Phoenix, Demon |
Bestiary, enemy systems |
| 💎 Items | 600+ | Armor, Crown, Gem, Treasure |
Inventory, rewards |
| 🎲 Dice & Gaming | 50+ | D4, D6, D20, Cards |
Game mechanics, RNG |
| 🏰 Environment | 300+ | Castle, Forest, Cave, Tower |
World building, locations |
| ⚙️ Interface | 200+ | Settings, Menu, Save, Load |
UI elements, navigation |
#💡 Examples
#🎮 Complete Gaming Resource
Character Management System
<?php
namespace App\Filament\Resources;
use Alizharb\FilamentGameIcons\Enums\GameIcons;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
class CharacterResource extends Resource
{
protected static ?string $model = Character::class;
protected static ?string $navigationIcon = 'gameicon-person';
protected static ?string $navigationGroup = 'Game Management';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Section::make('Character Information')
->icon(GameIcons::Person->value)
->schema([
Forms\Components\TextInput::make('name')
->required()
->maxLength(255)
->live(onBlur: true)
->prefixIcon(GameIcons::Scroll->value),
Forms\Components\Select::make('class')
->options([
'warrior' => 'Warrior',
'wizard' => 'Wizard',
'archer' => 'Archer',
'rogue' => 'Rogue',
'paladin' => 'Paladin',
'druid' => 'Druid',
])
->required()
->searchable()
->native(false)
->prefixIcon(GameIcons::Person->value),
Forms\Components\Select::make('race')
->options(GameIcons::getCreaturesArray())
->searchable()
->native(false)
->prefixIcon(GameIcons::Dragon->value),
]),
Forms\Components\Section::make('Equipment & Stats')
->icon(GameIcons::Sword->value)
->schema([
Forms\Components\Select::make('primary_weapon')
->options(GameIcons::getWeaponsArray())
->searchable()
->native(false)
->prefixIcon(GameIcons::Sword->value),
Forms\Components\Select::make('armor_type')
->options([
'light' => 'Light Armor',
'medium' => 'Medium Armor',
'heavy' => 'Heavy Armor',
])
->prefixIcon(GameIcons::Armor->value),
Forms\Components\Grid::make(3)
->schema([
Forms\Components\TextInput::make('level')
->numeric()
->default(1)
->minValue(1)
->maxValue(100)
->prefixIcon(GameIcons::Trophy->value),
Forms\Components\TextInput::make('health')
->numeric()
->default(100)
->minValue(0)
->prefixIcon(GameIcons::Heart->value),
Forms\Components\TextInput::make('mana')
->numeric()
->default(50)
->minValue(0)
->prefixIcon(GameIcons::MagicSwirl->value),
]),
]),
Forms\Components\Section::make('Status & Abilities')
->icon(GameIcons::Lightning->value)
->schema([
Forms\Components\Toggle::make('is_alive')
->default(true)
->onIcon(GameIcons::Heart->value)
->offIcon(GameIcons::Skull->value)
->onColor('success')
->offColor('danger'),
Forms\Components\CheckboxList::make('abilities')
->options([
'stealth' => 'Stealth',
'magic_resistance' => 'Magic Resistance',
'critical_strike' => 'Critical Strike',
'healing' => 'Healing',
'fire_immunity' => 'Fire Immunity',
])
->columns(2),
Forms\Components\Textarea::make('backstory')
->rows(4)
->placeholder('Tell us about your character\'s history...')
->columnSpanFull(),
]),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\ImageColumn::make('avatar')
->circular()
->defaultImageUrl(fn ($record) => 'https://ui-avatars.com/api/?name=' . urlencode($record->name)),
Tables\Columns\TextColumn::make('name')
->searchable()
->sortable()
->weight('bold'),
Tables\Columns\IconColumn::make('class')
->icon(fn (string $state): string => match ($state) {
'warrior' => GameIcons::Warrior->value,
'wizard' => GameIcons::Wizard->value,
'archer' => GameIcons::Archer->value,
'rogue' => GameIcons::Rogue->value,
'paladin' => GameIcons::Paladin->value,
'druid' => GameIcons::Druid->value,
default => GameIcons::Person->value,
})
->color(fn (string $state): string => match ($state) {
'warrior' => 'danger',
'wizard' => 'info',
'archer' => 'success',
'rogue' => 'warning',
'paladin' => 'primary',
'druid' => 'success',
default => 'gray',
})
->tooltip(fn ($record): string => ucfirst($record->class)),
Tables\Columns\ProgressColumn::make('health')
->getStateUsing(fn ($record): float => $record->health / $record->max_health * 100)
->color('success')
->alignment('center'),
Tables\Columns\TextColumn::make('level')
->badge()
->color('warning')
->sortable(),
Tables\Columns\IconColumn::make('is_alive')
->boolean()
->trueIcon(GameIcons::Heart->value)
->falseIcon(GameIcons::Skull->value)
->trueColor('success')
->falseColor('danger'),
Tables\Columns\TextColumn::make('created_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->defaultSort('level', 'desc')
->filters([
Tables\Filters\SelectFilter::make('class')
->options([
'warrior' => 'Warrior',
'wizard' => 'Wizard',
'archer' => 'Archer',
'rogue' => 'Rogue',
'paladin' => 'Paladin',
'druid' => 'Druid',
])
->indicator('Character Class'),
Tables\Filters\Filter::make('alive_only')
->label('Alive Characters Only')
->query(fn ($query) => $query->where('is_alive', true))
->default(),
])
->actions([
Tables\Actions\ActionGroup::make([
Tables\Actions\ViewAction::make()
->icon(GameIcons::Eye->value),
Tables\Actions\EditAction::make()
->icon(GameIcons::Scroll->value),
Tables\Actions\Action::make('heal')
->icon(GameIcons::HealingPotion->value)
->color('success')
->action(fn ($record) => $record->heal())
->visible(fn ($record) => $record->health < $record->max_health),
Tables\Actions\Action::make('revive')
->icon(GameIcons::Resurrection->value)
->color('warning')
->requiresConfirmation()
->action(fn ($record) => $record->revive())
->visible(fn ($record) => !$record->is_alive),
])
->icon(GameIcons::Menu->value),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\BulkAction::make('mass_heal')
->icon(GameIcons::HealingPotion->value)
->color('success')
->action(fn ($records) => $records->each->heal()),
Tables\Actions\DeleteBulkAction::make()
->icon(GameIcons::Skull->value),
]),
])
->emptyStateIcon(GameIcons::Person->value)
->emptyStateHeading('No characters yet')
->emptyStateDescription('Create your first character to begin your adventure!');
}
}
📊 Advanced Dashboard Widgets
use Filament\Widgets\ChartWidget;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
class GameStatsWidget extends BaseWidget
{
protected function getStats(): array
{
return [
Stat::make('🎮 Active Players', $this->getActivePlayers())
->description('Currently online')
->descriptionIcon(GameIcons::Person->value)
->chart($this->getPlayerChart())
->color('success')
->extraAttributes(['class' => 'game-stat-card']),
Stat::make('⚔️ Battles This Hour', $this->getBattlesThisHour())
->description('Peak combat activity')
->descriptionIcon(GameIcons::CrossedSwords->value)
->chart($this->getBattleChart())
->color('danger'),
Stat::make('🏆 Achievements Unlocked', $this->getAchievementsToday())
->description('New achievements today')
->descriptionIcon(GameIcons::Trophy->value)
->color('warning'),
Stat::make('💰 Server Economy', '$' . number_format($this->getTotalGold()))
->description('Total gold in circulation')
->descriptionIcon(GameIcons::GoldStack->value)
->color('primary'),
];
}
}
class PlayerActivityChart extends ChartWidget
{
protected static ?string $heading = 'Player Activity';
protected static string $color = 'info';
protected static ?string $icon = 'gameicon-person';
protected function getData(): array
{
return [
'datasets' => [
[
'label' => 'Online Players',
'data' => [65, 78, 66, 44, 56, 67, 75],
'backgroundColor' => 'rgba(59, 130, 246, 0.1)',
'borderColor' => 'rgb(59, 130, 246)',
],
],
'labels' => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
];
}
protected function getType(): string
{
return 'line';
}
}
#🔧 API Reference
#🏷️ GameIcons Enum Methods
// Core functionality
GameIcons::Sword->getLabel(); // "Sword"
GameIcons::Sword->value; // "gameicon-sword"
GameIcons::toSelectArray(); // All icons as options
GameIcons::search('magic'); // Search icons
GameIcons::random(); // Get random icon
// Category methods
GameIcons::getWeapons(); // Array of weapon icons
GameIcons::getMagic(); // Array of magic icons
GameIcons::getCharacters(); // Array of character icons
GameIcons::getCreatures(); // Array of creature icons
GameIcons::getDice(); // Array of dice icons
// Category arrays (for selects)
GameIcons::getWeaponsArray(); // ['gameicon-sword' => 'Sword', ...]
GameIcons::getMagicArray(); // ['gameicon-magic-swirl' => 'Magic Swirl', ...]
GameIcons::getCharactersArray(); // ['gameicon-wizard' => 'Wizard', ...]
// Utility methods
GameIcons::make('custom-icon'); // "gameicon-custom-icon"
GameIcons::count(); // Total number of icons
GameIcons::categories(); // Available categories
#🔍 Search & Filtering
// Advanced search
$results = GameIcons::search('sword', [
'category' => 'weapons',
'limit' => 10,
'exact' => false
]);
// Filter by multiple criteria
$filtered = GameIcons::filter([
'categories' => ['weapons', 'magic'],
'exclude' => ['skull', 'death'],
'include_only' => ['fire', 'ice', 'lightning']
]);
// Get icons by pattern
$elementalIcons = GameIcons::pattern('/^(fire|ice|lightning|earth)/i');
#⚙️ Configuration
#🎨 Custom Styling
Publish and customize the CSS:
php artisan vendor:publish --tag=filament-game-icons-styles
/* resources/css/filament-game-icons.css */
.game-icon {
transition: all 0.2s ease-in-out;
}
.game-icon:hover {
transform: scale(1.1);
filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.2));
}
/* Size variants */
.game-icon-xs {
width: 0.75rem;
height: 0.75rem;
}
.game-icon-sm {
width: 1rem;
height: 1rem;
}
.game-icon-md {
width: 1.5rem;
height: 1.5rem;
}
.game-icon-lg {
width: 2rem;
height: 2rem;
}
.game-icon-xl {
width: 3rem;
height: 3rem;
}
/* Color themes */
.game-icon-fire {
color: #ef4444;
}
.game-icon-ice {
color: #3b82f6;
}
.game-icon-nature {
color: #10b981;
}
.game-icon-shadow {
color: #6b7280;
}
#🔧 Icon Replacement
Replace default FilamentPHP icons system-wide:
// In your AppServiceProvider boot() method
use Filament\Support\Facades\FilamentIcon;
use Filament\View\PanelsIconAlias;
use Alizharb\FilamentGameIcons\Enums\GameIcons;
public function boot(): void
{
FilamentIcon::register([
// Navigation
PanelsIconAlias::PANELS_SIDEBAR_COLLAPSE_BUTTON => GameIcons::Menu->value,
PanelsIconAlias::PANELS_SIDEBAR_EXPAND_BUTTON => GameIcons::Menu->value,
// Actions
PanelsIconAlias::ACTIONS_CREATE_ACTION => GameIcons::Plus->value,
PanelsIconAlias::ACTIONS_EDIT_ACTION => GameIcons::Scroll->value,
PanelsIconAlias::ACTIONS_DELETE_ACTION => GameIcons::Skull->value,
PanelsIconAlias::ACTIONS_VIEW_ACTION => GameIcons::Eye->value,
// Tables
PanelsIconAlias::TABLES_SEARCH_FIELD => GameIcons::Search->value,
PanelsIconAlias::TABLES_FILTER => GameIcons::Filter->value,
// Global
PanelsIconAlias::GLOBAL_SEARCH_FIELD => GameIcons::Search->value,
]);
}
#🎮 Gaming-Specific Helpers
// RPG character creation helpers
$characterIcons = GameIcons::forRPGClasses();
$weaponsByType = GameIcons::weaponsByType();
$spellsBySchool = GameIcons::spellsBySchool();
// Board game helpers
$diceSet = GameIcons::getStandardDiceSet(); // D4, D6, D8, D10, D12, D20
$cardSuits = GameIcons::getCardSuits();
$gamepieces = GameIcons::getGamePieces();
#🛠️ Management Commands
#📥 Sync Command
Keep your icons up-to-date with the latest from game-icons.net:
# Sync icons (with backup)
php artisan sync:game-icons-enum
# Dry run (preview changes)
php artisan sync:game-icons-enum --dry-run
#🎨 Theming Examples
#🌙 Dark Mode Support
// Automatic dark mode adaptation
IconColumn::make('status')
->icon(GameIcons::Heart->value)
->color('success')
->extraAttributes([
'class' => 'dark:filter dark:brightness-110'
]);
#🎭 Custom Icon Themes
// Create themed icon sets
class ThemeManager
{
public static function getFireTheme(): array
{
return [
'primary' => GameIcons::Fire->value,
'secondary' => GameIcons::Explosion->value,
'accent' => GameIcons::Lightning->value,
'background' => GameIcons::Flame->value,
];
}
public static function getIceTheme(): array
{
return [
'primary' => GameIcons::Ice->value,
'secondary' => GameIcons::Snowflake->value,
'accent' => GameIcons::Crystal->value,
'background' => GameIcons::Blizzard->value,
];
}
}
#🧪 Testing
#Running Tests
# Run all tests
composer test
# Run with coverage
composer test-coverage
# Run specific test suite
./vendor/bin/pest --group=integration
# Run performance tests
./vendor/bin/pest --group=performance
#🎯 Test Examples
<?php
use Alizharb\FilamentGameIcons\Enums\GameIcons;
use Alizharb\FilamentGameIcons\Tests\TestCase;
class GameIconsTest extends TestCase
{
/** @test */
public function it_can_get_icon_labels(): void
{
expect(GameIcons::Sword->getLabel())->toBe('Sword');
expect(GameIcons::MagicSwirl->getLabel())->toBe('Magic Swirl');
}
/** @test */
public function it_can_search_icons(): void
{
$results = GameIcons::search('sword');
expect($results)->toContain(GameIcons::Sword);
expect($results)->toContain(GameIcons::CrossedSwords);
}
/** @test */
public function it_can_get_category_arrays(): void
{
$weapons = GameIcons::getWeaponsArray();
expect($weapons)->toBeArray();
expect($weapons)->toHaveKey(GameIcons::Sword->value);
expect($weapons[GameIcons::Sword->value])->toBe('Sword');
}
}
#🚀 Performance
#⚡ Optimization Features
- Smart Caching: Icons are cached for maximum performance
- Lazy Loading: Only loads icons when needed
- SVG Optimization: Minified SVG files for faster loading
- Bundle Splitting: Load only the categories you need
#🔒 Security
#🛡️ Security Features
- ✅ XSS Protection: All icon names are sanitized
- ✅ Path Traversal Prevention: Secure file handling
- ✅ Input Validation: Strict type checking
- ✅ No Executable Code: Pure SVG icons only
#🔍 Security Testing
# Run security analysis
composer security-check
# Static analysis
./vendor/bin/phpstan analyse
# Code quality check
./vendor/bin/php-cs-fixer fix --dry-run
#🔌 Plugin Integration
#🎯 Popular FilamentPHP Plugin Compatibility
| Plugin | Status | Integration Example |
|---|---|---|
| Filament Tables | ✅ Full Support | IconColumn::make()->icon(GameIcons::Sword) |
| Filament Forms | ✅ Full Support | Select::make()->options(GameIcons::toSelectArray()) |
| Filament Actions | ✅ Full Support | Action::make()->icon(GameIcons::Attack) |
| Filament Widgets | ✅ Full Support | Stat::make()->descriptionIcon(GameIcons::Trophy) |
| Filament Notifications | ✅ Full Support | Notification::make()->icon(GameIcons::Success) |
#🔗 Third-party Integrations
// Spatie Media Library
use Spatie\MediaLibrary\HasMedia;
class Character extends Model implements HasMedia
{
public function getAvatarIconAttribute(): string
{
return $this->class ? GameIcons::getClassIcon($this->class) : GameIcons::Person->value;
}
}
#🚀 Migration Guide
#⬆️ From Heroicons to Game Icons
// Before (Heroicons)
Action::make('delete')
->icon('heroicon-o-trash')
->color('danger');
// After (Game Icons)
Action::make('delete')
->icon(GameIcons::Skull)
->color('danger');
#🤝 Contributing
We love contributions! Here's how you can help make this package even better:
#🎯 Ways to Contribute
- 🐛 Bug Reports: Found an issue? Report it here
- 💡 Feature Requests: Got an idea? Share it with us
- 📝 Documentation: Help improve our docs
- 🧪 Testing: Add more test cases
- 🎨 Icon Categories: Suggest new categorizations
#🛠️ Development Setup
# Clone the repository
git clone https://github.com/alizharb/filament-game-icons.git
cd filament-game-icons
# Install dependencies
composer install
# Set up testing environment
cp .env.example .env
php artisan key:generate
# Run tests
composer test
# Code quality checks
composer lint
composer analyse
#📋 Contribution Guidelines
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
#📋 Requirements
| Requirement | Version | Status |
|---|---|---|
| PHP | 8.1+ | ✅ |
| Laravel | 10.x / 11.x / 12.x | ✅ |
| FilamentPHP | 4.x | ✅ |
| Blade Game Icons | ^1.0 | ✅ Auto-installed |
#🔧 Troubleshooting
#❓ Common Issues
Icons not displaying
Solution:
# Clear caches
php artisan cache:clear
php artisan view:clear
# Re-register assets
php artisan filament:assets
# Check if blade-game-icons is installed
composer show codeat3/blade-game-icons
IDE autocompletion not working
Solution:
# Generate IDE helper files
composer dump-autoload
# For PhpStorm users
php artisan ide-helper:generate
php artisan ide-helper:models
Performance issues with large icon sets
Solution:
// In your AppServiceProvider
public function boot(): void
{
// Enable icon caching
GameIcons::enableCaching();
// Preload frequently used categories
GameIcons::preload(['weapons', 'magic', 'characters']);
}
#📊 Statistics
#📈 Package Stats
#🎮 Icon Collection
| Total Icons | Categories | Weekly Downloads | GitHub Stars |
|---|---|---|---|
| 4,000+ | 8 Major | 1,000+ | 50+ |
#🎖️ Showcase
#🏆 Projects Using Filament Game Icons
Want your project featured here? Submit it!
#📚 Resources
#📖 Documentation & Guides
#🎯 FilamentPHP Resources
- 🌟 FilamentPHP Official - Main framework
- 💬 FilamentPHP Discord - Community support
- 📚 FilamentPHP Examples - Demo applications
#🎮 Game Development
- 🎨 Game Icons.net - Original icon source
- 🔧 Blade Icons - Icon framework
- 🎲 Game Design Resources - Free game assets
#📄 License & Attribution
#📜 Package License
This package is open-sourced software licensed under the MIT License.
#🎨 Game Icons License
The Game Icons used in this package are licensed under CC BY 3.0.
Required Attribution:
Icons made by various authors from
<a href="https://game-icons.net/">game-icons.net</a>, licensed under
<a href="https://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>
#🙏 Acknowledgments
#💝 Special Thanks
| Contributor | Role | Contribution |
|---|---|---|
| 🎨 Game Icons | Icon Creators | Amazing 4000+ icon collection |
| 🔧 Blade Game Icons | Laravel Integration | Seamless Laravel blade integration |
| 🌟 FilamentPHP Team | Framework | Outstanding admin panel framework |
| 👥 Contributors | Community | Continuous improvements |
#🆘 Support
#💬 Get Help
| Support Channel | Response Time | Best For |
|---|---|---|
| 🐛 GitHub Issues | 24-48 hours | Bug reports, feature requests |
| 💬 GitHub Discussions | 12-24 hours | Questions, ideas, showcase |
| 🌟 FilamentPHP Discord | Real-time | Community support |
| 📧 Email Support | 48-72 hours | Private/commercial inquiries |
#📝 Before Reporting Issues
- ✅ Check existing issues
- ✅ Read the documentation
- ✅ Try the troubleshooting guide
- ✅ Provide clear reproduction steps
#💡 Pro Tips
#🎯 Best Practices
// ✅ DO: Use enum constants for type safety
Action::make('attack')->icon(GameIcons::Sword);
// ❌ DON'T: Use magic strings
Action::make('attack')->icon('gameicon-sword');
// ✅ DO: Group related icons
$combatIcons = [
GameIcons::Sword,
GameIcons::Shield,
GameIcons::Armor,
];
// ✅ DO: Use descriptive variable names
$healingSpellIcon = GameIcons::HealingPotion;
$attackSpellIcon = GameIcons::Lightning;
#⚡ Performance Tips
// Cache frequently used icon arrays
class IconCache
{
private static array $weaponCache = [];
public static function getWeapons(): array
{
return self::$weaponCache ??= GameIcons::getWeaponsArray();
}
}
// Preload icons for better performance
public function boot(): void
{
GameIcons::preload(['weapons', 'magic', 'characters']);
}
#🔗 Related Packages
#🎮 Ecosystem
- 🎨 Filament UI Kit - Admin panel framework
- 🔧 Blade Game Icons - Laravel blade integration
- 🎯 Filament Plugins - Official plugin directory
- 🎮 Game Development Tools - Related packages
#🌟 Star History
#💝 Show Your Support
If this package helped you build something awesome, consider:
⭐ Star this repository
🐦 Share on Twitter
📝 Write a blog post
🗣️ Tell your friends
Made with ❤️ and ☕ for the FilamentPHP community
⭐ Star • 🍴 Fork • 🐛 Issues • 💬 Discussions • 📚 Wiki
Built by Ali Harb • Powered by FilamentPHP • Icons from Game Icons
The author
Type-safe enum for 4000+ Game Icons from game-icons.net. It offers IDE autocompletion, type safety, searchable categories, and seamless integration with Filament components.
From the same author
Activity Log
A powerful, feature-rich activity logging solution for FilamentPHP v4 & v5 with timeline views, dashboard widgets, and revert actions.
Author:
Ali Harb
Modular Luncher
The ultimate module management solution for Filament and Laravel Modular. Install, update, backup, and restore modules directly from your admin panel. Supports ZIP uploads, Git repositories, and Composer packages.
Author:
Ali Harb
Themes Manager
An advanced, feature-rich theme management system for Laravel applications using Filament. Built to work seamlessly with `qirolab/laravel-themer`, this package provides a comprehensive admin interface for managing, installing, previewing, and switching themes with ease.
Author:
Ali Harb
Module Manager
A Laravel package that provides a simple and elegant way to manage modules within Filament admin panel projects. It allows developers to register, enable, disable, and organize modules, making modular app development easier and more structured. Now supports Filament v5.
Author:
Ali Harb
Featured Plugins
A selection of plugins curated by the Filament team
Custom Dashboards
Let your users build and share their own dashboards with a drag-and-drop interface. Define your data sources in PHP and let them do the rest.
Filament
Custom Fields
Eliminate custom field migrations forever. Let your users create and manage form fields directly in Filament admin panels with 20+ built-in field types, validation, and zero database changes.
Relaticle
Data Lens
Advanced Data Visualization for Laravel Filament - a premium reporting solution enabling custom column creation, sophisticated filtering, and enterprise-grade data insights within admin panels.
Padmission