# geradoresfe Frontend React 19 + Vite + Tailwind CSS 4 + TypeScript. A UI não conhece os tipos de gerador: lê `/api/v1/generators` e constrói as páginas e os formulários de opções a partir dos metadados da [API](../GeradoresWS/README.md). ## Desenvolvimento ```bash npm install npm run dev # http://localhost:3000 ``` O Vite faz proxy de `/api`, `/docs` e `/openapi` para `http://localhost:5053` (`dotnet run --project GeradoresWS --launch-profile http`). Para outro backend: `API_PROXY_TARGET=http://host:porta npm run dev`. | Script | Descrição | |---|---| | `npm run dev` | Servidor de desenvolvimento | | `npm run build` | Type-check (`tsc -b`) e build de produção em `dist/` | | `npm run lint` | ESLint | | `npm test` | Vitest | | `npm run preview` | Serve o build localmente | ## Páginas | Rota | Página | |---|---| | `/` | Lista de geradores por categoria | | `/gerador/:id` | Opções, geração em lote (até 1000), cópia e exportação CSV/JSON/TXT | | `/validar` | Validador livre: detecta o tipo e explica porque é (in)válido | | `/NIF`, `/NISS`, `/CC` | Redireccionam para as rotas novas | ## Estrutura | Caminho | Conteúdo | |---|---| | `src/lib/api.ts` | Cliente da API e tipos | | `src/lib/useGenerators.tsx` | Contexto que carrega a lista de geradores uma vez | | `src/lib/export.ts` | Exportação CSV/JSON/TXT (testado em `export.test.ts`) | | `src/pages/` | Páginas das rotas | | `src/components/` | Cartões, formulário de opções, validador, resultados | | `src/components/ui/` | Componentes base (botão, input, select, badge, …) | | `src/layout/` | Cabeçalho, rodapé e layout | | `src/context/ThemeContext.tsx` | Modo claro/escuro | ## API Por omissão o cliente usa caminhos relativos (`/api/v1`). Em dev é o proxy do Vite; em produção é o nginx. `VITE_API_URL` (em build time) permite apontar para outro host. ## Docker ```bash docker build -t geradoresfe . docker run -p 3000:80 -e API_UPSTREAM=http://geradoresws:8080 geradoresfe ``` A imagem serve o build com nginx. O `nginx.conf.template` é processado com `envsubst` no arranque, e `/api`, `/docs` e `/openapi` são encaminhados para `API_UPSTREAM` (por omissão `http://geradoresws:8080`). A mesma imagem serve em qualquer ambiente sem rebuild. Os ficheiros em `/assets/` têm cache longa e o resto cai no `index.html` (SPA).