| Install | |
|---|---|
composer require twiq/livewire-notify |
|
| Latest Version: | v1.0.3 |
| PHP: | ^8.1 |
Twiq .
composer require twiq/livewire-notify
# Publicar configuração
php artisan vendor:publish --tag=twiq-config
# Publicar views (opcional)
php artisan vendor:publish --tag=twiq-views
# Publicar assets JavaScript
php artisan vendor:publish --tag=twiq-assets
# Publicar traduções (opcional)
php artisan vendor:publish --tag=twiq-translations
Adicione o JavaScript do Twiq ao seu resources/js/app.js:
import './vendor/twiq/twiq.js';
Adicione o componente Twiq ao seu layout principal:
<!DOCTYPE html>
<html>
<head>
<!-- ... -->
@vite(['resources/css/app.css', 'resources/js/app.js'])
</head>
<body>
<!-- Seu conteúdo -->
<!-- Componente Twiq -->
<x-twiq />
<!-- Ou usando Livewire -->
<livewire:twiq-container />
</body>
</html>
<?php
namespace App\Http\Livewire;
use Livewire\Component;
use Twiq\Traits\HasTwiqNotifications;
class UserForm extends Component
{
use HasTwiqNotifications;
public function save()
{
// Lógica de salvamento...
$this->notifySuccess('Usuário salvo com sucesso!');
// Ou usando dispatch direto
$this->dispatch('twiq', [
'type' => 'success',
'message' => 'Usuário salvo com sucesso!'
]);
}
public function delete()
{
// Lógica de exclusão...
$this->notifyError('Erro ao excluir usuário');
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Twiq\Facades\Twiq;
class UserController extends Controller
{
public function store(Request $request)
{
// Lógica de salvamento...
// Usando Facade
Twiq::success('Usuário criado com sucesso!');
return redirect()->back();
}
}
// Usando helper global
twiq.success('Operação realizada!');
twiq.error('Algo deu errado!');
twiq.warning('Atenção!');
twiq.info('Informação importante');
// Ou disparando evento customizado
window.dispatchEvent(new CustomEvent('twiq', {
detail: {
type: 'success',
message: 'Notificação personalizada!'
}
}));
// Sucesso (verde)
$this->notifySuccess('Operação realizada com sucesso!');
// Erro (vermelho)
$this->notifyError('Ocorreu um erro!');
// Aviso (amarelo)
$this->notifyWarning('Atenção necessária!');
// Informação (azul)
$this->notifyInfo('Informação importante!');
$this->dispatch('twiq', [
'type' => 'success',
'message' => 'Mensagem principal',
'title' => 'Título opcional',
'persistent' => true, // Não desaparece automaticamente
'duration' => 8000, // 8 segundos
]);
O arquivo config/twiq.php permite personalizar completamente o comportamento:
return [
// Posição das notificações
'position' => 'top-right', // top-left, bottom-right, etc.
// Duração padrão (ms)
'duration' => 5000,
// Máximo de notificações simultâneas
'max_notifications' => 5,
// Habilitar som
'sound' => false,
// Modo escuro automático
'dark_mode' => 'auto',
// Configuração por tipo
'types' => [
'success' => [
'icon' => 'check-circle',
'color' => 'green',
'duration' => 4000,
],
// ...
],
// Agrupamento de notificações
'grouping' => [
'enabled' => true,
'timeout' => 2000,
],
// Prevenir duplicatas
'prevent_duplicates' => true,
];
// Notificação que só sai manualmente
$this->notifyPersistent('error', 'Erro crítico do sistema');
// Ou usando dispatch
$this->dispatch('twiq', [
'type' => 'error',
'message' => 'Erro crítico',
'persistent' => true
]);
<!-- Notificações no topo à esquerda -->
<x-twiq position="top-left" />
<!-- Notificações na parte inferior central -->
<x-twiq position="bottom-center" />
Quando habilitado, notificações similares são agrupadas automaticamente:
// Estas notificações serão agrupadas se disparadas rapidamente
$this->notifyError('Erro de validação');
$this->notifyError('Erro de validação');
$this->notifyError('Erro de validação');
// Resultado: "Erro de validação (3)"
public function submit()
{
$this->validate([
'name' => 'required',
'email' => 'required|email',
]);
try {
// Lógica de salvamento...
$this->notifySuccess('Dados salvos com sucesso!');
} catch (\Exception $e) {
$this->notifyError('Erro ao salvar: ' . $e->getMessage());
}
}
// resources/lang/pt/twiq.php
return [
'close' => 'Fechar',
'success' => 'Sucesso',
'error' => 'Erro',
'warning' => 'Aviso',
'info' => 'Informação',
'default_messages' => [
'success' => 'Operação realizada com sucesso!',
'error' => 'Ocorreu um erro. Tente novamente.',
// ...
],
];
Para habilitar feedback sonoro:
// config/twiq.php
'sound' => true,
Os sons são gerados automaticamente usando Web Audio API e são diferentes para cada tipo de notificação.
composer test
public function test_can_add_notification()
{
Livewire::test(TwiqContainer::class)
->call('addNotification', [
'type' => 'success',
'message' => 'Test notification'
])
->assertSee('Test notification');
}
O Twiq usa classes TailwindCSS padrão. Para personalizar:
/* resources/css/app.css */
.twiq-notification {
@apply backdrop-blur-sm bg-white/90;
}
.twiq-notification.success {
@apply border-l-4 border-green-500;
}
.dark .twiq-notification {
@apply bg-gray-800/90;
}
O Twiq é totalmente responsivo:
// Converter flash messages para Twiq
if (session()->has('success')) {
$this->notifySuccess(session('success'));
}
// Mostrar erros de validação
if ($this->getErrorBag()->any()) {
foreach ($this->getErrorBag()->all() as $error) {
$this->notifyError($error);
}
}
Contribuições são bem-vindas! Por favor:
Este pacote é open-source licenciado sob MIT license.
Para suporte, abra uma issue ou entre em contato:
Feito com ❤️ pela equipe Twiq