From 4ab73ade408847837e1006e6a6c59ed45674da77 Mon Sep 17 00:00:00 2001 From: luriasb Date: Tue, 20 Oct 2026 08:39:46 -0600 Subject: [PATCH] paso 02 --- app/components/KidCard.tsx | 69 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 app/components/KidCard.tsx diff --git a/app/components/KidCard.tsx b/app/components/KidCard.tsx new file mode 100644 index 0000000..f3b0071 --- /dev/null +++ b/app/components/KidCard.tsx @@ -0,0 +1,69 @@ +import Link from "next/link"; +import type { Kid } from "@/app/data/kids"; + +/** + * Colores dinámicos → utilities Tailwind con valores exactos. + * El set de pares del mock es cerrado; nunca se usan atributos style. + */ +const AVATAR_COLORS: Record = { + "A9D9E8-1F7A93": "bg-[#A9D9E8] text-[#1F7A93]", + "F4B8CC-C44A7A": "bg-[#F4B8CC] text-[#C44A7A]", + "B9DEC4-3E8B62": "bg-[#B9DEC4] text-[#3E8B62]", + "F4DC8E-9A7B1E": "bg-[#F4DC8E] text-[#9A7B1E]", + "C9B6E8-7B5FC0": "bg-[#C9B6E8] text-[#7B5FC0]", +}; + +function avatarClasses(kid: Kid): string { + const key = `${kid.avatar.bg.replace("#", "")}-${kid.avatar.text.replace("#", "")}`; + return AVATAR_COLORS[key] ?? ""; +} + +/** "2 padres vinculados" | "1 padre vinculado" | "sin padres vinculados". */ +function parentsLabel(kid: Kid): string { + if (kid.parents.length === 0) return "sin padres vinculados"; + return `${kid.parents.length} ${kid.parents.length === 1 ? "padre" : "padres"} vinculados`; +} + +export default function KidCard({ kid }: { kid: Kid }) { + return ( + +
+ {kid.initial} +
+
+
{kid.name}
+
+ {kid.age} años · {parentsLabel(kid)} +
+
+ {kid.parents.length === 0 ? ( + + VINCULAR + + ) : kid.allergies.length > 0 ? ( + + {kid.allergies[0]} + + ) : ( + + + + )} + + ); +}