# Componentes frontend
```mermaid
flowchart TD
main["main.ts"] --> appConfig["appConfig"]
appConfig --> router["Router
app.routes.ts"]
appConfig --> httpClient["HttpClient
withInterceptors"]
appConfig --> authInterceptor["authInterceptor"]
router --> loginRoute["/login"]
loginRoute --> login["LoginPageComponent"]
router --> protectedRoute["/"]
protectedRoute --> authGuard["authGuard"]
authGuard --> authService["AuthService"]
authGuard -- "si no hay sesion" --> loginRoute
authGuard -- "si hay sesion" --> layout["MainLayoutComponent"]
layout --> outlet["router-outlet"]
outlet --> dashboard["/dashboard
DashboardPageComponent"]
outlet --> catalogo["/catalogo
CatalogPageComponent"]
outlet --> sincronizacion["/sincronizacion
SyncPageComponent"]
login --> authService
dashboard --> authService
layout --> authService
catalogo --> invimaService["InvimaService"]
sincronizacion --> invimaService
authService -- "POST /api/auth/login
GET /api/auth/me
POST /api/auth/logout" --> httpClient
invimaService -- "GET /api/invima/datasets
GET /api/invima/categorias
GET /api/invima/filtros
GET /api/invima/catalogo
POST /api/invima/sync
GET /api/invima/sync/stats
GET /api/invima/sync/job
GET /api/invima/catalogo/export" --> httpClient
authInterceptor --> authService
authInterceptor -- "Authorization: Bearer token" --> httpClient
httpClient --> proxy["Angular proxy
/api -> http://localhost:3000"]
proxy --> backend["Express API"]
```
## Archivos analizados
- `diagramas/frontend-clases.mmd`
- `diagramas/frontend-clases.svg`
- `semillero/src/app/app.config.ts`
- `semillero/src/app/app.routes.ts`
- `semillero/src/app/core/guards/auth.guard.ts`
- `semillero/src/app/core/interceptors/auth.interceptor.ts`
- `semillero/src/app/core/services/auth.service.ts`
- `semillero/src/app/core/services/invima.service.ts`
- `semillero/src/app/core/models.ts`
- `semillero/src/app/features/auth/login-page.component.ts`
- `semillero/src/app/features/dashboard/dashboard-page.component.ts`
- `semillero/src/app/features/layout/main-layout.component.ts`
- `semillero/src/app/features/invima/catalog-page.component.ts`
- `semillero/src/app/features/invima/sync-page.component.ts`
- `semillero/proxy.conf.json`