# 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`