React + MotionOverlays
Popover con flecha
Una pequeña burbuja que nace del botón que la abre, con una flecha que apunta a su origen.
Ajustes
Código
import { useState } from "react";
import { AnimatePresence, motion } from "framer-motion";
import { Info } from "lucide-react";
const spring = { type: "spring" as const, stiffness: 300, damping: 30 };
interface PopoverProps {
title?: string;
}
export default function Popover({ title = "Antes de continuar" }: PopoverProps) {
const [open, setOpen] = useState(false);
return (
<div className="relative text-[#1d1d1f] dark:text-[#f5f5f7]">
<button
type="button"
aria-label="Información"
aria-expanded={open}
onClick={() => setOpen((o) => !o)}
className="grid h-11 w-11 place-items-center rounded-full bg-white dark:bg-[#1c1c1e] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
>
<Info className="h-5 w-5" />
</button>
<AnimatePresence>
{open && (
<motion.div
initial={{ opacity: 0, scale: 0.85, y: -8 }}
animate={{ opacity: 1, scale: 1, y: 0 }}
exit={{ opacity: 0, scale: 0.9 }}
style={{ transformOrigin: "top center" }}
transition={spring}
className="absolute left-1/2 top-14 z-10 w-56 -translate-x-1/2 rounded-2xl bg-white p-4 text-sm shadow-[0_4px_12px_rgba(0,0,0,0.04),0_24px_60px_rgba(0,0,0,0.1)] dark:bg-[#1d1d1f]"
>
<i className="absolute -top-1.5 left-1/2 h-3 w-3 -translate-x-1/2 rotate-45 bg-white dark:bg-[#1d1d1f]" />
<b>{title}</b>
<p className="mt-1 text-[#86868b]">Información breve y contextual.</p>
</motion.div>
)}
</AnimatePresence>
</div>
);
}
Prompt para IA
Pégalo en ChatGPT, Claude o Cursor y adaptará el bloque a tu proyecto con estos ajustes, aunque no uses React.
Más en Overlays
Dónde usarlo
Los popovers son para los momentos de «¿esto qué es?»: una comisión junto al precio, una pista al lado de un campo o una función en una tabla de precios. Como crece desde el botón con una flechita, queda claro de dónde sale la información. Pocos componentes aclaran tanto un formulario confuso como un popover bien colocado.
Deja el texto en unas dos líneas; lo que sea más largo va en la página o en un modal. Cambia el título por la pregunta real que se hace la gente, como «¿Para qué queréis mi teléfono?», en vez de un encabezado genérico.