risetechapps / view-suite
Pacote de views personalizadas da Rise Tech (erros, e-mails e layouts compartilhados).
Requires
- php: ^8.3
- illuminate/support: ^12.0
Requires (Dev)
- larastan/larastan: ^3.0
- orchestra/testbench: ^10.0
- phpunit/phpunit: ^11.0
README
Pacote de views personalizadas da Rise Tech para aplicações Laravel. Inclui páginas de erro, templates de e-mail (HTML + texto), componentes Blade, layout web base e página de manutenção, prontos para uso, traduzidos em 15 idiomas e totalmente personalizáveis.
Compatível com Laravel 12+ e PHP 8.3+
🚀 Instalação
composer require risetechapps/view-suite
O pacote é auto-registrado via Service Provider (RiseTechApps\ViewSuite\ViewSuiteServiceProvider). Sem passos manuais.
⚙️ Publicação (opcional)
| Tag | Comando | Destino |
|---|---|---|
| Config | --tag=config |
config/view-suite.php |
| Views | --tag=views |
resources/views/vendor/view-suite/ |
| Traduções | --tag=lang |
resources/lang/vendor/view-suite/ |
php artisan vendor:publish --provider="RiseTechApps\ViewSuite\ViewSuiteServiceProvider" --tag=views
Views/traduções publicadas têm prioridade sobre as do pacote.
🎨 Marca configurável
Todos os e-mails leem cores/logo/redes de config/view-suite.php → brand. Cada item tem fallback, então funciona out-of-the-box.
| Env | Config | Padrão | Aplica em |
|---|---|---|---|
VIEW_SUITE_LOGO |
brand.logo |
banner RT | banner do topo do e-mail |
VIEW_SUITE_ICON |
brand.icon |
logo RT | logo pequeno do index |
VIEW_SUITE_COLOR |
brand.color |
#fb5f3d |
cor do botão |
VIEW_SUITE_HEADER_COLOR |
brand.header_color |
#003188 |
título / código OTP |
VIEW_SUITE_NAME |
brand.name |
Rise Tech |
layout web / footer |
VIEW_SUITE_URL |
brand.url |
site RT | layout web |
Ícones sociais do rodapé em brand.social.{facebook,x,instagram,pinterest,linkedin,youtube} — sobrescreva publicando o config.
VIEW_SUITE_LOGO=https://cdn.suaempresa.com/logo.png VIEW_SUITE_COLOR=#0066ff VIEW_SUITE_HEADER_COLOR=#111827
🧩 Temas
As views de errors e emails são organizadas por tema (default). Ao referenciar você omite o tema — o pacote resolve view-suite::errors.404 → errors.{tema}.404 com fallback para default.
| Env | Config | Padrão |
|---|---|---|
ERROR_THEME |
theme.errors |
default |
EMAIL_THEME |
theme.emails |
default |
Para um tema custom, crie errors/<tema>/404.blade.php. Se a view não existir nesse tema, cai automaticamente para default.
🚨 Páginas de erro
Um ExceptionHandler intercepta requisições web (não-JSON, não api/*) e renderiza a view do status HTTP. Não precisa de código.
Status cobertos: 400, 401, 402, 403, 404, 405, 408, 410, 413, 418, 419, 422, 423, 429, 500, 502, 503, 504
Em
APP_DEBUG=true, erros 500 caem no handler padrão do Laravel (stack trace).
As views são self-contained (CSS inline, sem CDN externo). Renderização manual:
return response()->view('view-suite::errors.404', [], 404);
📧 Templates de e-mail
Todos estendem emails.layout, reusam os partials e localizam o texto (15 idiomas), com valores dinâmicos via variáveis.
| Template | View | Principais variáveis |
|---|---|---|
| Genérico (data-driven) | emails.index |
subject_message, line, line_header[], tables[], lists[], action, line_footer[], signature[] |
| Boas-vindas | emails.welcome |
name, line/lines[], action{url,text}, subject, signature |
| Verificar e-mail (OTP) | emails.verify_email |
code, expires, action, subject, line |
| Código de login (OTP) | emails.login_otp |
code, expires, action, subject, line |
| Redefinir senha | emails.reset_password |
action{url}, expires, subject, line |
| Fatura / recibo | emails.invoice |
items{headers[],rows[]}, total, action, line |
| Notificação / alerta | emails.notification |
subject, line/lines[], level (info/success/warning/error), action |
| Conta excluída | emails.account_deleted |
name, line, lines[], action, subject |
Exemplo — OTP com versão texto-plano (multipart)
Mail::send( ['view-suite::emails.verify_email', 'view-suite::emails.text.verify_email'], ['code' => '123456', 'expires' => 10], fn ($m) => $m->to($user->email)->subject('Verifique seu e-mail') );
Versões texto-plano disponíveis em emails.text.{welcome,verify_email,reset_password,login_otp,notification}.
Exemplo — Notificação
Mail::send('view-suite::emails.notification', [ 'subject' => 'Falha no pagamento', 'level' => 'error', 'lines' => ['Não conseguimos processar sua cobrança.'], 'action' => ['url' => $url, 'text' => 'Atualizar cartão'], ], fn ($m) => $m->to($user->email)->subject('Alerta'));
🧱 Componentes Blade
<x-view-suite::button url="https://app.test" color="#0066ff">Acessar</x-view-suite::button> <x-view-suite::code code="123456" /> <x-view-suite::alert level="success" title="Tudo certo"> Seu pagamento foi confirmado. </x-view-suite::alert>
level do alert: info, success, warning, error.
🖼️ Layout web base
Para páginas web (não-e-mail), brand-aware e self-contained:
@extends('view-suite::layouts.base') @section('title', 'Minha página') @section('content') <p>Conteúdo da sua página.</p> @endsection
Seções opcionais: head, header, footer.
🔧 Página de manutenção
php artisan down --render="view-suite::maintenance"
🌍 Idiomas
15 idiomas incluídos: da, de, el, en, es_ES, fr, it, ja, pl, pt_BR, pt_PT, ru, sv_SE, tr, zh_TW.
As pastas seguem a convenção do Laravel (underscore, ex.
pt_BR) — o valor deapp.localedeve casar exatamente.
🧪 Testes & Análise estática
composer test # PHPUnit (Orchestra Testbench) composer test-coverage # cobertura HTML composer analyse # PHPStan / Larastan (level 5)
🛠️ Requisitos
| Dependência | Versão |
|---|---|
| PHP | ^8.3 |
| Laravel | ^12.0 |
| Orchestra Testbench | ^10.0 |
| PHPUnit | ^11.0 |
| Larastan | ^3.0 |
🧑💻 Autor
Rise Tech 📧 apps@risetech.com.br 🌐 https://risetech.com.br 💼 https://github.com/risetechapps
🪪 Licença
Licenciado sob a MIT License.