Toggle estilo iOS
Un interruptor compacto como los de los ajustes del iPhone, verde al activarse y con un muelle natural.
Ajustes
Código
import { useState } from "react";
import { motion } from "framer-motion";
const spring = { type: "spring" as const, stiffness: 300, damping: 30 };
interface IosToggleProps {
color?: string;
checked?: boolean;
defaultChecked?: boolean;
onCheckedChange?: (checked: boolean) => void;
label?: string;
}
export default function IosToggle({
color = "#34c759",
checked,
defaultChecked = true,
onCheckedChange,
label = "Activar",
}: IosToggleProps) {
const [internal, setInternal] = useState(defaultChecked);
const on = checked ?? internal;
const toggle = () => {
if (checked === undefined) setInternal(!on);
onCheckedChange?.(!on);
};
return (
<button
type="button"
role="switch"
aria-checked={on}
aria-label={label}
onClick={toggle}
className={`flex h-8 w-14 items-center rounded-full p-1 transition-colors ${
on ? "" : "bg-black/5 dark:bg-white/10"
}`}
style={on ? { backgroundColor: color } : undefined}
>
<motion.span
className="h-6 w-6 rounded-full bg-white shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
animate={{ x: on ? 24 : 0 }}
transition={spring}
/>
</button>
);
}
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 Inputs
Dónde usarlo
Casi todo el mundo ha pulsado miles de estos en el móvil y se entiende sin leer. Encaja en pantallas de ajustes y paneles de preferencias: el «Recordarme» de un login, la «Newsletter» en una cuenta de cliente o la «Renovación automática» de una suscripción. Un toggle estilo iOS en React, reconocible como interruptor por los lectores de pantalla.
El verde significa «activado» para quien usa iPhone, pero cámbialo al color de tu marca si en tu web el verde ya indica otra cosa, como stock o éxito. Ponle siempre una etiqueta clara: el interruptor solo no dice qué controla.