React + MotionInputs

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.