Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/rules/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
`vars()`, que devuelve la variable CSS de Chakra (`vars('colors-main-deepSkyBlue')` →
`var(--chakra-colors-main-deepSkyBlue)`). Los colores siguen el sistema de diseño.
- `src/services/`: utilidades sin UI (`uniqueId`).
- `src/test/jest-setup.ts`: configuración global de Jest (ver `.claude/rules/testing/testing.md`).
- `src/test/vitest-setup.ts`: configuración global de Vitest (ver `.claude/rules/testing/testing.md`).
- `src/documentation/`: sitio de documentación (ver `.claude/rules/documentation/documentation.md`).
- `src/Playground.tsx`: página vacía para probar componentes en local; no se publica.
- `src/main.tsx`: entrada de Vite. Con `VITE_REACT_DEPLOY_DOCUMENTATION=DOCUMENTATION` (en `.env`)
Expand Down
4 changes: 2 additions & 2 deletions .claude/rules/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ npm run build # build de la librería en dist/ (lo corre CI al publicar)
## Tests

```bash
npx jest <rutas de .test.tsx>
npx vitest run <rutas de .test.tsx>
```

- `npm run test` corre la suite completa con coverage: en local no usarlo, ni
`--findRelatedTests`, porque es muy pesado para el equipo de desarrollo. La suite completa corre
`vitest related`, porque es muy pesado para el equipo de desarrollo. La suite completa corre
en CI (GitHub Actions).
- En local, correr solo los `.test.ts(x)` de los archivos tocados, pasando sus rutas, y solo
cuando la tarea lo requiera.
Expand Down
2 changes: 1 addition & 1 deletion .claude/rules/conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
- Muchos cambios: agruparlos en `sx` con `'@media screen and (max-width: 640px)': { ... }`.
- En código nuevo, `useMediaQuery` solo cuando cambia la lógica o qué se renderiza, no para
estilos. El código existente que lo usa para estilos no se migra salvo que se pida. En las
pruebas `useMediaQuery` siempre devuelve `false` (`jest-setup.ts`).
pruebas `useMediaQuery` siempre devuelve `false` (`vitest-setup.ts`).
- El punto de quiebre depende del componente; en el repo se usan 900px, 768px, 640px, 577px,
480px y 425px, entre otros.
- No usar styled-components, `@emotion/styled`, scss ni css nuevos.
Expand Down
7 changes: 5 additions & 2 deletions .claude/rules/project-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@
código debe funcionar desde React 16.8 (solo hooks y APIs disponibles en esa versión; nada de
`useId`, `useTransition`, `useSyncExternalStore`, etc.).
- TypeScript 4.9 con `strict: true`. Target ES2019 (sin polyfills: nada de `toSorted`, `at`, etc.).
No subir a TS ≥ 5: los tipos de Chakra 1.8 hacen fallar `tsc` con TS2590 ("union type too
complex") en archivos que cambian según el orden de chequeo. Por TS 4.9, `vite.config.ts` queda
fuera de `tsconfig.json` (no resuelve los tipos de Vite 8).
- UI: Chakra UI 1.8 + Emotion 11 + framer-motion 6 (los cuatro son `peerDependencies` y quedan
fuera del bundle).
- Otras dependencias: `date-fns` 4 (fechas), `html-react-parser` + `dompurify` (HTML recibido por
props), `react-hot-toast` (notificaciones), `react-ripples`.
- `@eclass/api` y `@eclass/sequelize-models` son solo tipos (`@types/eclass__*` por git+ssh).
- Build con Vite 2.9 (modo librería) + `tsc` para los tipos.
- Tests: Jest 27 + ts-jest + Testing Library.
- Build con Vite 8 (modo librería, `build.target: 'es2019'`) + `tsc` para los tipos.
- Tests: Vitest 5 (jsdom 29) + Testing Library.

## Glosario de dominio

Expand Down
13 changes: 8 additions & 5 deletions .claude/rules/testing/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,20 @@ paths:
existentes en inglés no se cambian salvo que se pida.
- Probar lo que el componente promete al consumidor: lo que renderiza según sus props, sus
callbacks (`onClick`, `onClose`...) y su accesibilidad (rol, foco, `aria-*`).
- Correr solo las pruebas tocadas con `npx jest <rutas>` (ver `.claude/rules/commands.md`).
- Correr solo las pruebas tocadas con `npx vitest run <rutas>` (ver `.claude/rules/commands.md`).

## Configuración global (`src/test/jest-setup.ts`)
## Configuración global (`src/test/vitest-setup.ts`)

Afecta a todas las pruebas; no agregar ahí lógica de una prueba puntual.

- Extiende `expect` con `@testing-library/jest-dom`.
- Extiende `expect` con `@testing-library/jest-dom/vitest`. `describe`, `test`, `expect` y `vi`
son globales (`globals: true`); no hace falta importarlos.
- Mockea `react-ripples` y `dompurify` (no se valida la sanitización).
- `useMediaQuery` de Chakra siempre devuelve `[false]` (vista mobile). Para probar escritorio,
re-mockearlo en el archivo de prueba (ver `ModalAlert.test.tsx`).
- `css` y `keyframes` de Emotion devuelven `''`: no se pueden validar estilos.
- `vite.config.ts` usa `pool: 'vmThreads'` y `maxWorkers: '50%'`. No usar `isolate: false`: los
`vi.mock` de un archivo se filtran a otros y fallan pruebas.

## Según qué se prueba

Expand All @@ -33,7 +36,7 @@ Afecta a todas las pruebas; no agregar ahí lógica de una prueba puntual.
| Componente React | `@testing-library/react` (v12) | `render`, `screen`, `waitFor`, `within` |
| Interacción | `@testing-library/user-event` (v14) | `const user = userEvent.setup()`; `await user.click(...)`, `await user.type(...)` |
| Hook | no hay `renderHook` (RTL 12 sin `@testing-library/react-hooks`) | probarlo a través de un componente de prueba que lo use |
| Función / util `.ts` | solo Jest | `describe`, `test`, `expect`, `jest.fn` |
| Función / util `.ts` | solo Vitest | `describe`, `test`, `expect`, `vi.fn` |

- Preferir consultas accesibles: `getByRole`, `getByLabelText`, `getByText`; `getByTestId` solo
si no hay otra opción.
Expand All @@ -52,7 +55,7 @@ describe('BtnTertiary', () => {
const user = userEvent.setup()

test('llama a onClick al hacer clic', async () => {
const onClick = jest.fn()
const onClick = vi.fn()
render(<BtnTertiary onClick={onClick}>Texto</BtnTertiary>)

await user.click(screen.getByRole('button'))
Expand Down
8 changes: 7 additions & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,14 @@
"extends": "plugin:mdx/recommended"
}
],
"globals": {
// Globals de Vitest (globals: true); describe, test y expect vienen del env jest
"vi": "readonly"
},
"rules": {
"@typescript-eslint/strict-boolean-expressions": "off"
"@typescript-eslint/strict-boolean-expressions": "off",
// Solo revisa APIs obsoletas de Jest; las pruebas corren con Vitest
"jest/no-deprecated-functions": "off"
},
"settings": {
"mdx/code-blocks": true,
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/nodejs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
- name: Linter code check
run: npm run lint:check

- name: Testing JEST
- name: Testing Vitest
run: npm run test

release:
Expand Down
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,4 @@ docs
.eslintcache
tsconfig.tsbuildinfo
*.env*
.jest-cache
odd/
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ Unifica los estilos y el comportamiento de los fronts de eClass (por ejemplo v8)
| UI | React (desarrollo en 17.0.2, compatible desde 16.8 hasta 19) |
| Lenguaje | TypeScript 4.9 (`strict`), target ES2019 |
| Estilos | Chakra UI 1.8 + Emotion 11 + framer-motion 6 |
| Build | Vite 2.9 en modo librería (formatos ES y UMD) + `tsc` para los tipos `.d.ts` |
| Pruebas | Jest 27 + ts-jest + Testing Library |
| Build | Vite 8 en modo librería (formatos ES y UMD) + `tsc` para los tipos `.d.ts` |
| Pruebas | Vitest 5 + Testing Library |
| Calidad | ESLint (standard + TypeScript) + Prettier + husky + lint-staged + commitlint |
| Publicación | GitHub Actions + semantic-release + npm Trusted Publishing |
| Otras deps. | `date-fns`, `html-react-parser` + `dompurify`, `react-hot-toast`, `react-ripples` |
Expand Down Expand Up @@ -197,32 +197,32 @@ se actualiza `@eclass/ui-kit` en cada proyecto que la utiliza.
| `npm run build` | Build de la librería en `dist/`: `tsc` + `vite build` (ES y UMD) + tipos + copia de los `.d.ts` de `src`. |
| `npm run deploy` | Build del sitio de documentación en `dist/` (lo usa CI para GitHub Pages). |
| `npm run serve` | Sirve el último build con `vite preview`. |
| `npm run test` | Suite completa de Jest con coverage (la corre CI). |
| `npm run test-local` | Jest en modo `--watch`. |
| `npm run test` | Suite completa de Vitest con coverage (la corre CI). |
| `npm run test-local` | Vitest en modo watch. |
| `npm run lint` | Formatea `src` con Prettier y corrige con `eslint --fix`. |
| `npm run lint:check` | Revisa `src` con ESLint sin corregir (la corre CI). |
| `npm run format` | Solo Prettier sobre `src`. |
| `npm run eslint` | Solo `eslint --fix` sobre `src`. |
| `npm run ts-compile-check` | Revisión de tipos de todo el proyecto con `tsc` (la corre el pre-commit). |

> La suite completa es pesada. En local, corre solo las pruebas de los archivos que tocaste:
> `npx jest src/molecules/Buttons/BtnPrimary.test.tsx`.
> `npx vitest run src/molecules/Buttons/BtnPrimary.test.tsx`.

## Estructura del proyecto

```text
ui-kit/
├── .github/workflows/nodejs.yml # CI: lint, pruebas, release y deploy de la documentación
├── .husky/ # Hooks de git (pre-commit y commit-msg)
├── __mocks__/ # Mocks de Jest (dompurify, react-ripples)
├── __mocks__/ # Mocks de Vitest (dompurify, react-ripples)
├── src/
│ ├── atoms/ # Componentes básicos (Label, Progress, Icons, ...)
│ ├── molecules/ # Combinaciones de átomos (botones, tooltip, ...)
│ ├── organisms/ # Componentes complejos (modales, calendario, cursos, ...)
│ ├── theme/ # Tema de Chakra (colores, tipografía, estilos) y vars()
│ ├── services/ # Utilidades sin UI
│ ├── documentation/ # Sitio de documentación (páginas, rutas y componentes)
│ ├── test/jest-setup.ts # Configuración global de Jest
│ ├── test/vitest-setup.ts # Configuración global de Vitest
│ ├── Playground.tsx # Página para probar componentes en local
│ ├── main.tsx # Entrada de Vite (documentación o Playground)
│ └── index.ts # API pública de la librería
Expand Down
29 changes: 0 additions & 29 deletions jest.config.js

This file was deleted.

Loading
Loading