refactor: migrate frontend from shadcn/Tailwind to Mantine v9

Reescribe todos los componentes UI para usar Mantine v9 en lugar de shadcn/Tailwind.
Elimina cn(), CVA, components.json, theme_provider custom y globals.css con Tailwind.
Añade 25+ componentes nuevos (AppShell, AuthForm, DatePickerInput, Dropzone, etc.)
y MantineProvider como wrapper estándar del sistema de temas.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-06 23:46:44 +02:00
parent 4b2bb6998a
commit 97a3c84625
163 changed files with 6008 additions and 6310 deletions
+43 -29
View File
@@ -6,25 +6,53 @@ domain: ui
version: "1.0.0"
purity: impure
signature: "Pagination(props: PaginationProps): JSX.Element"
description: "Controles de navegacion de paginas con Previous/Next, numeros de pagina, elipsis y estado activo."
tags: [pagination, navigation, component, ui]
uses_functions: [cn_ts_core]
description: "Controles de navegacion de paginas autocontenido. Mantine Pagination."
tags: [pagination, navigation, component, ui, mantine]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: ["lucide-react", "./button"]
output: "Componente Pagination que renderiza controles de navegación de páginas con Previous/Next y números"
imports: ["@mantine/core"]
output: "Componente Pagination autocontenido que renderiza controles de navegacion de paginas"
tested: false
tests: []
test_file_path: ""
file_path: "frontend/functions/ui/pagination.tsx"
props:
- name: total
type: "number"
required: true
description: "Numero total de paginas"
- name: value
type: "number"
required: false
description: "Pagina actual (controlado)"
- name: defaultValue
type: "number"
required: false
description: "Pagina inicial (no controlado)"
- name: onChange
type: "(page: number) => void"
required: false
description: "Callback al cambiar de pagina"
- name: siblings
type: "number"
required: false
description: "Paginas visibles a cada lado de la actual"
- name: boundaries
type: "number"
required: false
description: "Paginas visibles al inicio y final"
- name: withEdges
type: "boolean"
required: false
description: "Mostrar botones first/last page"
- name: className
type: "string"
required: false
description: "Clases CSS adicionales"
emits: []
emits: [onChange]
has_state: false
framework: react
variant: []
@@ -33,30 +61,16 @@ variant: []
## Ejemplo
```tsx
<Pagination>
<PaginationContent>
<PaginationItem>
<PaginationPrevious href="/page/1" />
</PaginationItem>
<PaginationItem>
<PaginationLink href="/page/1">1</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationLink href="/page/2" isActive>2</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationLink href="/page/3">3</PaginationLink>
</PaginationItem>
<PaginationItem>
<PaginationEllipsis />
</PaginationItem>
<PaginationItem>
<PaginationNext href="/page/3" />
</PaginationItem>
</PaginationContent>
</Pagination>
// Basico
<Pagination total={10} defaultValue={1} />
// Controlado
<Pagination total={20} value={page} onChange={setPage} />
// Con botones first/last
<Pagination total={50} withEdges siblings={2} />
```
## Notas
Exports: Pagination (nav), PaginationContent (ul), PaginationItem (li), PaginationLink (a con isActive/disabled), PaginationPrevious, PaginationNext, PaginationEllipsis. PaginationLink reutiliza buttonVariants para consistencia visual. Componente presentacional — el manejo del estado de pagina queda en el consumidor.
Usa Mantine Pagination autocontenido. Previous/Next, numeros de pagina y elipsis se generan automaticamente. La API anterior con sub-componentes (PaginationContent, PaginationItem, PaginationLink, etc.) fue reemplazada por un unico componente con props declarativas. Export: Pagination y PaginationProps.