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:
@@ -1,5 +1,5 @@
|
||||
import * as React from 'react'
|
||||
import { cn } from '../core/cn'
|
||||
import { SimpleGrid, Paper, Text } from '@mantine/core'
|
||||
|
||||
interface DashboardWidget {
|
||||
id: string
|
||||
@@ -16,51 +16,37 @@ interface DashboardLayoutProps {
|
||||
className?: string
|
||||
}
|
||||
|
||||
const gapClasses = { sm: 'gap-2', md: 'gap-4', lg: 'gap-6' }
|
||||
|
||||
const spanClasses: Record<number, string> = {
|
||||
1: 'col-span-1',
|
||||
2: 'col-span-1 md:col-span-2',
|
||||
3: 'col-span-1 md:col-span-2 lg:col-span-3',
|
||||
4: 'col-span-1 md:col-span-2 lg:col-span-4',
|
||||
}
|
||||
|
||||
const rowSpanClasses: Record<number, string> = {
|
||||
1: 'row-span-1',
|
||||
2: 'row-span-2',
|
||||
}
|
||||
const gapMap = { sm: 'xs', md: 'md', lg: 'lg' } as const
|
||||
|
||||
export function dashboardLayout({
|
||||
widgets,
|
||||
columns = 4,
|
||||
gap = 'md',
|
||||
className,
|
||||
}: DashboardLayoutProps): React.ReactElement {
|
||||
const gridCols: Record<number, string> = {
|
||||
1: 'grid-cols-1',
|
||||
2: 'grid-cols-1 md:grid-cols-2',
|
||||
3: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
|
||||
4: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-4',
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={cn('grid', gridCols[columns], gapClasses[gap], className)}>
|
||||
<SimpleGrid
|
||||
cols={{ base: 1, md: Math.min(columns, 2), lg: columns }}
|
||||
spacing={gapMap[gap]}
|
||||
>
|
||||
{widgets.map((widget) => (
|
||||
<div
|
||||
<Paper
|
||||
key={widget.id}
|
||||
className={cn(
|
||||
'rounded-xl border bg-card p-4 text-card-foreground shadow-sm',
|
||||
spanClasses[widget.span || 1],
|
||||
rowSpanClasses[widget.rowSpan || 1]
|
||||
)}
|
||||
p="md"
|
||||
withBorder
|
||||
shadow="xs"
|
||||
radius="md"
|
||||
style={{
|
||||
gridColumn: widget.span && widget.span > 1 ? `span ${widget.span}` : undefined,
|
||||
gridRow: widget.rowSpan === 2 ? 'span 2' : undefined,
|
||||
}}
|
||||
>
|
||||
{widget.title && (
|
||||
<h3 className="mb-3 text-sm font-medium text-muted-foreground">{widget.title}</h3>
|
||||
<Text size="sm" fw={500} c="dimmed" mb="sm">{widget.title}</Text>
|
||||
)}
|
||||
{widget.content}
|
||||
</div>
|
||||
</Paper>
|
||||
))}
|
||||
</div>
|
||||
</SimpleGrid>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user