diff --git a/src/routes/planes2/$planId/MateriaCard.tsx b/src/routes/planes2/$planId/MateriaCard.tsx new file mode 100644 index 0000000..03e9668 --- /dev/null +++ b/src/routes/planes2/$planId/MateriaCard.tsx @@ -0,0 +1,136 @@ +import * as Dialog from '@radix-ui/react-dialog'; +import { Pencil, X, Info } from 'lucide-react'; +export type Materia = { + id: string; + clave: string; + nombre: string; + creditos: number; + hd: number; // Horas Docente + hi: number; // Horas Independientes + tipo: 'Obligatoria' | 'Optativa' | 'Especialidad'; + ciclo: number; + linea: string; +}; + +interface MateriaCardProps { + materia: Materia; +} + +export function MateriaCard({ materia }: MateriaCardProps) { + return ( + + {/* Trigger: La tarjeta en sí misma */} + +
+ {/* Header de la tarjeta */} +
+ {materia.clave} +
+ + {materia.tipo === 'Obligatoria' ? 'OB' : 'OP'} + +
+
+ + {/* Nombre */} +

+ {materia.nombre} +

+ + {/* Footer de la tarjeta (Créditos y Horas) */} +
+ {materia.creditos} cr +
+ HD:{materia.hd} + HI:{materia.hi} +
+
+ + {/* Overlay de Hover (Opcional: un iconito de editar) */} +
+ +
+
+
+ + {/* Modal / Portal */} + + + + +
+ Editar Materia + + + +
+ +
+ {/* Clave y Nombre */} +
+
+ + +
+
+ + +
+
+ + {/* Créditos y Horas */} +
+
+ + +
+
+ + +
+
+ + +
+
+ + {/* Ciclo y Línea */} +
+
+ + +
+
+ + +
+
+ + {/* Botones de acción */} +
+ + Cancelar + + +
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/routes/planes2/$planId/mapa.tsx b/src/routes/planes2/$planId/mapa.tsx index 81aac05..4b178fc 100644 --- a/src/routes/planes2/$planId/mapa.tsx +++ b/src/routes/planes2/$planId/mapa.tsx @@ -1,4 +1,5 @@ import { createFileRoute } from '@tanstack/react-router' +import { MateriaCard } from './MateriaCard'; export const Route = createFileRoute('/planes2/$planId/mapa')({ component: MapaCurricular, @@ -53,18 +54,9 @@ function MapaCurricular() { className="p-2 border-r border-b border-slate-100 min-h-[120px] bg-white/50" > {/* Filtrar materias que pertenecen a esta posición */} - {MATERIAS.filter(m => m.linea === linea && m.ciclo === numCiclo).map((materia, i) => ( -
-
{materia.nombre}
-
- {materia.creditos} CR - ID: {i + 100} -
-
- ))} + {MATERIAS.filter(m => m.linea === linea && m.ciclo === numCiclo).map((materia) => ( + + ))} ))}