moox/flag-icons-circle
Circular flag icon set for Laravel apps. moox/flag-icons-circle provides ready-to-use country flag icons in a consistent round style for menus, profiles, locale pickers, and dashboards. Easy asset publishing and integration with your UI and Blade views.
## Getting Started
### Minimal Steps
1. **Install the Package**:
```bash
composer require moox/flag-icons-circle
This automatically pulls in the required blade-ui-kit/blade-icons dependency.
Publish Assets (Optional): If you need to customize the SVG flags or paths:
php artisan vendor:publish --provider="Moox\FlagIconsCircle\FlagIconsCircleServiceProvider" --tag="public"
This copies the SVG assets to public/vendor/moox/flag-icons-circle.
First Usage: Use the Blade directive in your views:
@flagIconsCircle('us') <!-- Renders the US flag in a circle -->
Or use the component syntax:
<x-flag-icon country="gb" />
Verify Installation:
Check if the flag renders correctly in your Blade template. Test with a few country codes (e.g., us, gb, jp).
Static Flags: Use for fixed country representations (e.g., footer, about page):
@flagIconsCircle('ca') <!-- Canada -->
Dynamic Flags from Database: Fetch country codes from a model and render dynamically:
@foreach($users as $user)
@flagIconsCircle($user->country_code, ['alt' => $user->country_name])
@endforeach
Integration with Forms: Use flags in dropdowns or selectors:
<select>
<option value="us">@flagIconsCircle('us') United States</option>
<option value="de">@flagIconsCircle('de') Germany</option>
</select>
Custom Attributes: Pass additional HTML attributes for styling or accessibility:
@flagIconsCircle('fr', [
'class' => 'w-10 h-10 border rounded-full',
'aria-label' => 'France'
])
Livewire/Alpine Integration: Combine with Livewire for reactive country selection:
<div x-data="{ country: 'us' }">
@flagIconsCircle($country)
<select x-model="country">
<option value="us">United States</option>
<option value="gb">United Kingdom</option>
</select>
</div>
User Profiles: Display a user's country flag next to their name:
<div class="flex items-center">
@flagIconsCircle($user->country_code)
<span>{{ $user->name }}</span>
</div>
Country Selector Dropdown: Create a visually rich dropdown for multi-country support:
<div class="relative">
<button class="px-4 py-2">Select Country</button>
<div class="absolute mt-2 w-48 bg-white rounded shadow">
@foreach($countries as $country)
<div class="px-4 py-2 hover:bg-gray-100 flex items-center">
@flagIconsCircle($country->code)
<span class="ml-2">{{ $country->name }}</span>
</div>
@endforeach
</div>
</div>
Geolocation Features: Use flags to represent regional data in dashboards:
@foreach($regionalStats as $stat)
<div class="flex items-center">
@flagIconsCircle($stat->country_code)
<div class="ml-2">
<p>{{ $stat->country_name }}</p>
<p>{{ $stat->value }}</p>
</div>
</div>
@endforeach
Tailwind CSS: Use utility classes to control size and spacing:
@flagIconsCircle('au', ['class' => 'w-6 h-6 mr-2'])
Dark Mode: Add dark mode support via CSS:
@flagIconsCircle('jp', ['class' => 'dark:invert'])
Lazy Loading: For performance, lazy-load flags in long lists:
@foreach($countries as $country)
<div class="lazy-load">
@flagIconsCircle($country->code)
</div>
@endforeach
Use JavaScript to load flags only when they enter the viewport.
Accessibility:
Always include alt text for screen readers:
@flagIconsCircle('br', ['alt' => 'Brazil'])
Unsupported Country Codes:
us, gb). Using unsupported codes (e.g., zz) will render nothing.use Moox\FlagIconsCircle\FlagIconsCircle;
$supportedCodes = FlagIconsCircle::supportedCodes();
if (in_array($countryCode, $supportedCodes)) {
@flagIconsCircle($countryCode);
} else {
<!-- Fallback UI -->
}
Missing SVG Assets:
public/vendor/moox/flag-icons-circle.php artisan vendor:publish --provider="Moox\FlagIconsCircle\FlagIconsCircleServiceProvider" --tag="public"
Blade Component Not Found:
Class 'FlagIcon' not found, ensure the service provider is registered in config/app.php.config/app.php:
'providers' => [
// ...
Moox\FlagIconsCircle\FlagIconsCircleServiceProvider::class,
],
Caching Issues:
php artisan config:clear
php artisan view:clear
CSS Conflicts:
.flag-icon {
width: 24px;
height: 24px;
}
Check SVG Paths:
/vendor/moox/flag-icons-circle/us.svg).Validate Country Codes:
@dump($user->country_code)
@flagIconsCircle($user->country_code)
Test in Isolation:
@flagIconsCircle('us')
Customizing Flags:
php artisan vendor:publish --tag="flag-icons-circle-svg"
resources/svg/custom/ to add or override flags.Dynamic Sizing:
size attribute for predefined sizes (sm, md, lg, xl):
@flagIconsCircle('in', ['size' => 'lg'])
@flagIconsCircle('mx', ['class' => 'w-8 h-8'])
Dark Mode Support:
@flagIconsCircle('kr', ['class' => 'dark:filter dark:invert'])
Performance Optimization:
Extending the Package:
FlagIcon for additional functionality:
namespace App\View\Components;
use Moox\FlagIconsCircle\FlagIconsCircle;
class CustomFlagIcon extends FlagIconsCircle
{
public function withTooltip($tooltip)
{
$this->withAttributes(['title' => $tooltip]);
return $this;
}
}
Fallback for Missing Flags:
@if(in_array($countryCode, FlagIconsCircle::supportedCodes()))
@flagIconsCircle($countryCode)
@else
<div class="w-6 h-6 bg-gray-200 rounded-full flex items-center justify-center">
?
</div>
How can I help you explore Laravel packages today?