React + MotionInputs

Buscador de viajes

Destino, fechas y huéspedes en una barra redondeada; la sección que tocas se levanta como una píldora.

Ajustes

Código

import { useState } from "react";
import { motion } from "framer-motion";
import { CalendarDays, MapPin, Search, Users } from "lucide-react";

const spring = { type: "spring" as const, stiffness: 300, damping: 30 };

const items = [
  { Icon: MapPin, label: "Dónde", hint: "Buscar destinos" },
  { Icon: CalendarDays, label: "Fechas", hint: "Añadir fechas" },
  { Icon: Users, label: "Huéspedes", hint: "Añadir huéspedes" },
] as const;

interface TravelSearchProps {
  color?: string;
  onSearch?: () => void;
}

export default function TravelSearch({ color = "#0071e3", onSearch }: TravelSearchProps) {
  const [active, setActive] = useState(0);

  return (
    <motion.div
      layout
      transition={spring}
      className="flex w-full max-w-[440px] flex-wrap items-center rounded-[28px] bg-white p-1.5 text-[#1d1d1f] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)] dark:bg-[#1c1c1e] dark:text-[#f5f5f7]"
    >
      {items.map(({ Icon, label, hint }, i) => (
        <motion.button
          layout
          key={label}
          type="button"
          aria-pressed={active === i}
          onClick={() => setActive(i)}
          className={`flex min-w-28 flex-1 items-center gap-2 rounded-full px-4 py-3 text-left ${
            active === i
              ? "bg-[#f5f5f7] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)] dark:bg-black"
              : ""
          }`}
        >
          <Icon className="h-4 w-4" />
          <span>
            <b className="block text-xs font-medium">{label}</b>
            <small className="block text-[11px] text-[#86868b]">{hint}</small>
          </span>
        </motion.button>
      ))}
      <button
        type="button"
        aria-label="Buscar"
        onClick={onSearch}
        className="grid h-11 w-11 place-items-center rounded-full text-white"
        style={{ backgroundColor: color }}
      >
        <Search className="h-4 w-4" />
      </button>
    </motion.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 Inputs

Dónde usarlo

Es el buscador que todo el mundo conoce de las webs de reservas: destino, fechas y número de huéspedes en fila, y un botón redondo para buscar. Encaja en una web de apartamentos turísticos, una pequeña cadena hotelera, un camping o una agencia de excursiones. Si montas una web de reservas, este buscador de viajes te ahorra maquetarlo desde cero.

Los campos son de muestra, así que conecta cada uno a tu propio calendario o selector de personas. Pon el botón de buscar en el color de tu marca. En pantallas estrechas las secciones bajan de línea, compruébalo con tus textos reales.