Installation
composer require alizharb/flare
npm install @alizharb/flare
Publish assets (if customizing):
npm run dev
Register the Livewire Component Add to your Livewire component:
use AlizHarb\Flare\Facades\Flare;
public function mount() {
Flare::init();
}
First Toast Trigger a notification in a Livewire method:
public function createUser() {
Flare::success('User created successfully!');
// or: Flare::error('Failed to create user.');
}
/resources/views/vendor/flare/ for built-in themes (default, dark, and gradient).@flare for rendering toasts in Blade views.Replace session()->flash() or manual JavaScript alerts with Flare in a Livewire form submission:
public function submitForm() {
if ($this->validate()) {
Flare::success('Form submitted!');
// Proceed with logic...
} else {
Flare::error('Validation failed.');
}
}
Livewire Integration
mount() to ensure toasts persist across component updates.Flare::queue() to defer notifications (e.g., after AJAX calls):
public function asyncAction() {
$this->dispatch('flare:queue', type: 'success', message: 'Async task started');
}
Real-Time Updates
// In a Livewire component
public function broadcastToast() {
broadcast(new ToastBroadcast('New message!'))->toOthers();
}
Theming
php artisan vendor:publish --tag=flare-themes
--flare-primary in /resources/css/flare.css).Conditional Toasts
Flare::when() for dynamic triggers:
Flare::when($user->saved, 'success', 'User saved!')
->when($user->errors, 'error', 'Validation failed');
<button wire:click="$emit('flare:queue', {type: 'info', message: 'Action triggered'})">
Click Me
</button>
addError() with Flare for user-friendly messages:
$this->validate([
'email' => 'required|email',
], [
'email.required' => Flare::error('Email is required!'),
]);
Flare::queue() with a job:
public function process() {
Flare::queue('Processing started...');
// Job logic...
Flare::queue('Processing complete!');
}
Toast Persistence
mount(). Always call Flare::init() early.Flare::persist() for critical notifications:
Flare::success('Critical alert')->persist();
Theme Conflicts
.flare-custom { /* Target only Flare elements */
--flare-bg: #333;
}
Real-Time Lag
ECHO_START events and network tab for WebSocket activity.Duplicate Toasts
Flare::queue() calls may stack notifications. Use Flare::clear() to reset:
Flare::clear()->success('New notification');
app/Providers/AppServiceProvider:
Flare::onQueue(function ($type, $message) {
\Log::debug("Flare queued: [$type] $message");
});
@alizharb/flare is included in resources/js/app.js:
import '@alizharb/flare';
Custom Toast Types
Extend the Toast class to add icons/actions:
Flare::extend('custom', function ($message) {
return Flare::toast($message)
->icon('⚡')
->action('Dismiss', 'flare:dismiss');
});
Database Storage Store toasts in a database for persistence across sessions:
Flare::useStorage(app(\AlizHarb\Flare\Storage\DatabaseStorage::class));
Localization
Override messages in config/flare.php:
'messages' => [
'success' => [
'default' => 'Operation completed!',
'en' => 'Success!',
'es' => '¡Éxito!',
],
],
Accessibility
Ensure ARIA attributes are present. Extend the Toast class:
Flare::extend('a11y', function ($message) {
return Flare::toast($message)
->attr('role', 'alert')
->attr('aria-live', 'polite');
});
How can I help you explore Laravel packages today?