'use client'; import { memo } from 'react'; import { Handle, Position, type Node, type NodeProps } from '@xyflow/react'; import { Lock } from 'lucide-react'; import type { SkillNode, NodeStatus } from '@/types/skill-tree'; type SkillNodeData = SkillNode & { status: NodeStatus } & Record; type SkillNodeType = Node; const statusStyles: Record = { locked: 'bg-muted/50 border-muted-foreground/20 opacity-50 cursor-not-allowed', available: 'bg-card border-primary/50 hover:border-primary hover:shadow-lg hover:shadow-primary/10 cursor-pointer', 'in-progress': 'bg-card border-amber-500/50 shadow-md shadow-amber-500/10 cursor-pointer', completed: 'bg-card border-green-500/50 shadow-md shadow-green-500/10 cursor-pointer', mastered: 'bg-card border-purple-500/50 shadow-md shadow-purple-500/10 cursor-pointer', }; const statusBadge: Record = { locked: null, available: { label: 'Disponible', className: 'bg-primary/20 text-primary' }, 'in-progress': { label: 'En progreso', className: 'bg-amber-500/20 text-amber-500' }, completed: { label: 'Completado', className: 'bg-green-500/20 text-green-500' }, mastered: { label: 'Dominado', className: 'bg-purple-500/20 text-purple-500' }, }; export const SkillNodeComponent = memo(function SkillNodeComponent({ data, }: NodeProps) { const status = data.status; const badge = statusBadge[status]; return (
{status === 'locked' ? '' : data.icon} {status === 'locked' && } {data.title}
{badge && (
{badge.label}
)}
); });