# 🎨 SISTEMA GLOBAL DE STATUS - PraFrota
Sistema unificado de estilos para status em toda aplicação Angular, baseado no padrão encontrado em `account-payable-items.component.scss`.
## 📋 Índice
- [Visão Geral](#visão-geral)
- [Instalação e Configuração](#instalação-e-configuração)
- [Status Disponíveis](#status-disponíveis)
- [Exemplos de Uso](#exemplos-de-uso)
- [Customizações](#customizações)
- [Migração](#migração)
- [Melhores Práticas](#melhores-práticas)
## 🎯 Visão Geral
O Sistema Global de Status padroniza a exibição de status em toda aplicação PraFrota, garantindo:
- ✅ **Consistência Visual**: Mesma aparência em todos os componentes
- ✅ **Manutenibilidade**: Centralização dos estilos
- ✅ **Escalabilidade**: Fácil adição de novos status
- ✅ **Responsividade**: Adaptação automática para mobile
- ✅ **Dark Mode**: Suporte completo a temas escuros
- ✅ **Acessibilidade**: Cores e contrastes adequados
## 🚀 Instalação e Configuração
### 1. Arquivo Principal
O sistema está localizado em:
```
projects/idt_app/src/assets/styles/_status.scss
```
### 2. Importação Global
Já está importado automaticamente no `app.scss`:
```scss
@import "_status";
```
### 3. Uso Imediato
Não requer configuração adicional. Funciona globalmente em toda aplicação.
## 📊 Status Disponíveis
### 💰 Status Financeiros
| Classe | Label | Cor | Uso |
|--------|-------|-----|-----|
| `status-pending` | Pendente | Amarelo | Pagamentos pendentes |
| `status-paid` | Pago | Azul | Pagamentos realizados |
| `status-approved` | Aprovado | Azul | Itens aprovados |
| `status-approved-customer` | Aprovado Cliente | Azul | Aprovação do cliente |
| `status-cancelled` | Cancelado | Vermelho | Itens cancelados |
| `status-refused` | Recusado | Vermelho | Itens recusados |
### 🔄 Status Gerais
| Classe | Label | Cor | Uso |
|--------|-------|-----|-----|
| `status-active` | Ativo | Azul | Registros ativos |
| `status-inactive` | Inativo | Cinza | Registros inativos |
| `status-suspended` | Suspenso | Amarelo | Temporariamente suspenso |
| `status-archived` | Arquivado | Cinza | Registros arquivados |
### ⚙️ Status de Processamento
| Classe | Label | Cor | Uso |
|--------|-------|-----|-----|
| `status-processing` | Processando | Azul claro | Em processamento (com animação) |
| `status-completed` | Concluído | Azul | Processamento concluído |
| `status-failed` | Falhou | Vermelho | Processamento falhou |
| `status-unknown` | Desconhecido | Cinza | Status não identificado |
## 🎨 Exemplos de Uso
### Uso Básico
```html
PendentePagoCancelado
```
### Com Ícones
```html
Processando
Concluído
```
### Variações de Tamanho
```html
PequenoNormalGrande
```
### Em Tabelas (Data Table)
```typescript
// No componente TypeScript
{
field: "status",
header: "Status",
allowHtml: true,
label: (status: string) => {
const statusConfig: { [key: string]: { label: string, class: string } } = {
'Pending': { label: 'Pendente', class: 'status-pending' },
'Paid': { label: 'Pago', class: 'status-paid' },
'Approved': { label: 'Aprovado', class: 'status-approved' },
'Cancelled': { label: 'Cancelado', class: 'status-cancelled' }
};
const config = statusConfig[status] || { label: status, class: 'status-unknown' };
return `${config.label}`;
}
}
```
### Lista de Status
```html
AtivoAprovadoPago
```
### Com Agrupamento
```html
Financeiro:Pendente
Operacional:Ativo
```
## 🎨 Badges Informativos
### Badges de Resumo
```html
Total: 150
Pagos: 120
Pendentes: 30
```
### Variações de Badge
```html
PrimárioSucessoAtençãoPerigoInformação
```
## 🎭 Estados Visuais Globais
### Estado Vazio
```html
Nenhum item encontrado
Não há registros para exibir no momento.
```
### Estado de Erro
```html
Erro ao carregar dados
Ocorreu um problema ao buscar as informações.
```
### Estado de Carregamento
```html
Carregando...
Aguarde enquanto buscamos os dados.
```
## 🌙 Dark Mode
O sistema possui suporte automático ao Dark Mode através de:
### 1. Media Query (Automático)
```scss
@media (prefers-color-scheme: dark) {
// Estilos automáticos
}
```
### 2. Classe Manual
```scss
:host-context([data-theme="dark"]) {
// Estilos manuais
}
```
### 3. Classe Global
```scss
.dark-theme {
// Estilos para tema escuro
}
```
## 📱 Responsividade
### Mobile First
```scss
@media (max-width: 768px) {
.status-badge {
font-size: 0.6875rem;
padding: 0.1875rem 0.375rem;
}
}
```
### Adaptações Automáticas
- Tamanhos de fonte reduzidos
- Padding ajustado
- Espaçamentos otimizados
## 🔧 Customizações
### Adicionando Novos Status
```scss
// Em _status.scss
.status-badge {
&.status-meu-novo-status {
background-color: #e3f2fd;
color: #1976d2;
border-color: #90caf9;
&:hover {
background-color: #90caf9;
transform: translateY(-1px);
}
}
}
```
### Variações Personalizadas
```scss
// Status com animação personalizada
.status-badge {
&.status-pulsing {
animation: pulse 2s infinite;
}
}
@keyframes pulse {
0% { opacity: 1; }
50% { opacity: 0.5; }
100% { opacity: 1; }
}
```
## 🔄 Migração
### De Estilos Locais para Global
#### Antes (Local)
```scss
// component.scss
.status-badge {
&.status-pending {
background-color: #fff3cd;
color: #856404;
}
}
```
#### Depois (Global)
```scss
// Remover estilos locais
// Usar classes globais diretamente
```
```html
Pendente
```
### Checklist de Migração
- [ ] Identificar estilos de status locais
- [ ] Verificar se status existe no sistema global
- [ ] Remover estilos locais duplicados
- [ ] Testar funcionamento
- [ ] Adicionar comentário sobre uso global
## ✅ Melhores Práticas
### 1. Nomenclatura Consistente
```typescript
// ✅ Correto
const statusConfig = {
'Pending': { label: 'Pendente', class: 'status-pending' },
'Paid': { label: 'Pago', class: 'status-paid' }
};
// ❌ Evitar
const statusConfig = {
'pending': { label: 'Pendente', class: 'custom-pending' }
};
```
### 2. Fallback para Status Desconhecidos
```typescript
// ✅ Sempre incluir fallback
const config = statusConfig[status] || {
label: status,
class: 'status-unknown'
};
```
### 3. Uso de allowHtml em Tabelas
```typescript
// ✅ Necessário para HTML em tabelas
{
field: "status",
allowHtml: true, // Obrigatório para badges
label: (status) => `${status}`
}
```
### 4. Acessibilidade
```html
Pendente
Ativo
```
### 5. Performance
```html
{{item.status}}
```
## 🧪 Testes
### Teste Visual
```typescript
// Verificar se todos os status são exibidos corretamente
const allStatus = [
'status-pending', 'status-paid', 'status-cancelled',
'status-active', 'status-inactive', 'status-processing'
];
allStatus.forEach(status => {
// Verificar se classe existe e tem estilos corretos
});
```
### Teste de Responsividade
```typescript
// Verificar adaptação mobile
@media (max-width: 768px) {
// Testar tamanhos e espaçamentos
}
```
## 📚 Referências
- **Arquivo Principal**: `projects/idt_app/src/assets/styles/_status.scss`
- **Importação**: `projects/idt_app/src/assets/styles/app.scss`
- **Exemplo de Uso**: `projects/idt_app/src/app/domain/fines/fines.component.ts`
- **Migração**: `projects/idt_app/src/app/domain/finances/account-payable/components/account-payable-items/`
## 🔄 Changelog
### v1.0.0 - Sistema Inicial
- ✅ Criação do arquivo `_status.scss`
- ✅ Importação no `app.scss`
- ✅ Status financeiros básicos
- ✅ Status gerais
- ✅ Estados visuais (empty, error, loading)
- ✅ Suporte a Dark Mode
- ✅ Responsividade mobile
- ✅ Migração de `account-payable-items`
- ✅ Documentação completa
### Próximas Versões
- 🔄 Animações avançadas
- 🔄 Mais variações de status
- 🔄 Integração com Angular Material
- 🔄 Testes automatizados
---
**Desenvolvido para PraFrota** | **Sistema de Gestão de Frota** | **Angular 19.2.x**