# 📱 Mobile Footer Menu - Documentação
## Visão Geral
O **Mobile Footer Menu** é um componente de navegação flutuante desenvolvido especificamente para dispositivos móveis, proporcionando acesso rápido às principais funcionalidades da aplicação IDT App.

## 🎯 Funcionalidades
### ✅ Navegação Principal
- **Menu Sidebar**: Controla abertura/fechamento do menu lateral
- **Dashboard**: Navegação rápida para o painel principal
- **Rotas Meli**: Acesso direto às rotas do Mercado Livre
- **Veículos**: Navegação para gestão de frota
### ✅ Sistema de Notificações
- **Badges dinâmicos**: Contadores visuais de notificações
- **Auto-clear**: Notificações são automaticamente limpas ao navegar
- **Tempo real**: Atualizações em tempo real via Observable
### ✅ Design Responsivo
- **Mobile-only**: Visível apenas em dispositivos ≤768px
- **Auto-hide**: Oculto automaticamente em desktop
- **Animações**: Transições suaves e efeitos visuais
## 🏗️ Arquitetura
### Componentes
```
📁 mobile-footer-menu/
├── mobile-footer-menu.component.ts // Componente principal
├── mobile-footer-menu.component.scss // Estilos responsivos
📁 services/
└── mobile-menu.service.ts // Gerenciamento de estado
```
### Dependências
```typescript
// Imports necessários
import { MobileFooterMenuComponent } from './mobile-footer-menu.component';
import { MobileMenuService } from '../services/mobile-menu.service';
```
## 🚀 Implementação
### 1. Integração no Layout
O componente já está integrado no `MainLayoutComponent`:
```typescript
@Component({
template: `
`
})
export class MainLayoutComponent {
toggleSidebar() {
if (this.sidebar) {
this.sidebar.toggleSidebar();
}
}
}
```
### 2. Uso Automático
O menu funciona automaticamente:
```typescript
// ✅ Detecção automática de dispositivo móvel
// ✅ Visibilidade controlada por media queries
// ✅ Navegação configurada para rotas padrão
```
## 🔧 Configuração
### Service de Gerenciamento
```typescript
import { MobileMenuService } from './services/mobile-menu.service';
constructor(private mobileMenuService: MobileMenuService) {}
// Atualizar notificações
this.mobileMenuService.setMeliNotifications(5, 'Novas rotas');
this.mobileMenuService.setVehicleNotifications(2, 'Manutenção pendente');
this.mobileMenuService.setDashboardNotifications(1, 'Relatório pronto');
// Limpar notificações
this.mobileMenuService.clearNotification('meli');
// Incrementar contador
this.mobileMenuService.incrementNotification('vehicles');
```
### Forçar Visibilidade (para testes)
```typescript
// Mostrar menu mesmo em desktop (desenvolvimento)
this.mobileMenuService.setVisibility(true);
// Voltar ao comportamento normal
this.mobileMenuService.setVisibility(false);
```
## 🎨 Personalização
### Cores e Temas
```scss
// Tema claro (padrão)
.mobile-footer-menu {
background: linear-gradient(135deg, #FFC82E 0%, #FFD700 100%);
}
// Tema escuro (automático)
@media (prefers-color-scheme: dark) {
.mobile-footer-menu {
background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);
}
}
```
### Responsividade
```scss
// Dispositivos muito pequenos
@media (max-width: 360px) {
.menu-item { min-width: 50px; }
.menu-icon { font-size: 20px; }
}
// Dispositivos médios
@media (min-width: 361px) and (max-width: 480px) {
.menu-item { min-width: 65px; }
}
// Desktop (oculto)
@media (min-width: 769px) {
.mobile-footer-menu { display: none; }
}
```
## 📋 API Reference
### MobileMenuService
#### Métodos Principais
```typescript
// Atualizar notificação
updateNotification(type: 'meli' | 'dashboard' | 'vehicles' | 'sidebar', count: number, message?: string): void
// Limpar notificação
clearNotification(type: string): void
// Incrementar notificação
incrementNotification(type: string, message?: string): void
// Controlar visibilidade
setVisibility(visible: boolean): void
```
#### Métodos de Conveniência
```typescript
// Notificações específicas
setMeliNotifications(count: number, message?: string): void
setVehicleNotifications(count: number, message?: string): void
setDashboardNotifications(count: number, message?: string): void
```
#### Observables
```typescript
// Observar notificações
notifications$: Observable
// Observar visibilidade
visibility$: Observable
// Obter notificação específica
getNotification(type: string): Observable
```
### MobileFooterMenuComponent
#### Eventos
```typescript
@Output() sidebarToggle = new EventEmitter();
```
#### Propriedades
```typescript
isVisible: boolean // Controla visibilidade
notifications: Array // Lista de notificações
```
## 🛣️ Rotas Configuradas
```typescript
// Rotas padrão do menu
const routes = {
dashboard: '/app/dashboard',
meli: '/app/routes/mercado-live',
vehicles: '/app/vehicles',
sidebar: 'toggle()' // Ação especial
};
```
## 📊 Exemplos de Uso
### Exemplo 1: Atualizar Notificações
```typescript
export class SomeComponent {
constructor(private mobileMenuService: MobileMenuService) {}
onNewMeliRoute() {
// Nova rota disponível
this.mobileMenuService.incrementNotification('meli', 'Nova rota de entrega');
}
onVehicleMaintenance() {
// Manutenção programada
this.mobileMenuService.setVehicleNotifications(3, 'Revisões pendentes');
}
onTaskCompleted() {
// Tarefa concluída, limpar notificação
this.mobileMenuService.clearNotification('dashboard');
}
}
```
### Exemplo 2: Observar Mudanças
```typescript
export class DashboardComponent implements OnInit {
constructor(private mobileMenuService: MobileMenuService) {}
ngOnInit() {
// Observar notificações do dashboard
this.mobileMenuService.getNotification('dashboard').subscribe(notification => {
if (notification && notification.count > 0) {
console.log(`Dashboard tem ${notification.count} notificações`);
}
});
}
}
```
### Exemplo 3: Demo de Notificações
```typescript
// Iniciar demo automático (já configurado)
this.mobileMenuService.startDemoNotifications();
// Sequência de demo:
// 1. +3 segundos: Nova rota Meli
// 2. +6 segundos: Alerta de veículo
// 3. +10 segundos: Limpar notificações Meli
```
## 🎭 Estados Visuais
### Botões
- **Normal**: Transparente com ícone preto
- **Hover**: Background semi-transparente + elevação
- **Active**: Efeito ripple + compressão
- **Focus**: Outline acessível
### Notificações
- **Badge**: Vermelho (#FF4444) com animação pulse
- **Contador**: Números brancos centralizados
- **Auto-hide**: Oculta quando count = 0
### Animações
- **Entrada**: Slide-up suave (0.3s cubic-bezier)
- **Hover**: Scale dos ícones (1.1x)
- **Ripple**: Expansão circular no touch
## 🔍 Debugging
### Logs de Console
```javascript
// Logs automáticos disponíveis:
"🔧 Abrindo sidebar..."
"📊 Navegando para Dashboard..."
"🛣️ Navegando para Rotas Meli..."
"🚗 Navegando para Veículos..."
"📱 Notificação atualizada para meli: 5"
"🧪 Iniciando demo de notificações..."
```
### Testes Manuais
```typescript
// No console do navegador:
const service = window.ng.getComponent(document.querySelector('app-mobile-footer-menu')).mobileMenuService;
// Testar notificações
service.setMeliNotifications(10);
service.setVehicleNotifications(5);
// Forçar visibilidade
service.setVisibility(true);
```
## 🚨 Limitações Conhecidas
### Mobile Only
- Componente **não é visível** em desktop (>768px)
- Design otimizado apenas para touch interfaces
### Navegação
- Rotas hard-coded no componente
- Requer roteamento Angular configurado
### Performance
- Service sempre ativo (singleton)
- Demo de notificações consome recursos
## 🔄 Atualizações Futuras
### Planejadas
- [ ] Suporte a gestos (swipe)
- [ ] Haptic feedback
- [ ] Customização de posição
- [ ] Configuração dinâmica de botões
- [ ] Integração com PWA
### Possíveis Melhorias
- [ ] Lazy loading do componente
- [ ] Cache de notificações
- [ ] Analytics de uso
- [ ] Temas personalizáveis
- [ ] Acessibilidade aprimorada
## 🤝 Contribuição
### Como Contribuir
1. **Reportar Bugs**: Usar issues do projeto
2. **Sugerir Features**: Documentar casos de uso
3. **Código**: Seguir padrões estabelecidos
4. **Testes**: Incluir em dispositivos reais
### Padrões de Código
```typescript
// Convenções seguidas:
// - Prefixo 'mobile' para classes
// - Observables com sufixo '$'
// - Logs com emojis para debugging
// - Comentários em português
// - TypeScript strict mode
```
## 📞 Suporte
### Troubleshooting
| Problema | Solução |
|----------|---------|
| Menu não aparece | Verificar se está em dispositivo móvel (≤768px) |
| Notificações não atualizam | Verificar subscription ao service |
| Sidebar não abre | Verificar referência no MainLayoutComponent |
| Rotas não funcionam | Verificar configuração do Angular Router |
### Contato
- **Desenvolvedor**: Equipe IDT App
- **Última Atualização**: Janeiro 2025
- **Versão**: 1.0.0
---
## 📄 Resumo
O **Mobile Footer Menu** oferece uma experiência de navegação moderna e intuitiva para dispositivos móveis, com:
- ✅ **4 botões principais** de navegação
- ✅ **Sistema de notificações** em tempo real
- ✅ **Design responsivo** e acessível
- ✅ **Integração completa** com o layout
- ✅ **Customização** via service
- ✅ **Performance otimizada** para mobile
**Resultado**: Interface mobile profissional que melhora significativamente a experiência do usuário em dispositivos móveis.