mirror of
https://github.com/Ichitux/lambada-fiesta-live.git
synced 2026-09-28 01:42:20 +00:00
65 lines
2.7 KiB
TypeScript
65 lines
2.7 KiB
TypeScript
import { Button } from "@/components/ui/button";
|
|
import { motion, AnimatePresence } from "framer-motion";
|
|
import { useState, useEffect } from "react";
|
|
import { ChevronUp } from "lucide-react";
|
|
import { useTranslation } from "react-i18next";
|
|
import { SECTIONS } from "@/data/event-data";
|
|
|
|
/** Botón flotante de reserva + scroll to top */
|
|
const FloatingButton = () => {
|
|
const [visible, setVisible] = useState(false);
|
|
const { t } = useTranslation();
|
|
|
|
useEffect(() => {
|
|
const onScroll = () => setVisible(window.scrollY > 400);
|
|
window.addEventListener("scroll", onScroll);
|
|
return () => window.removeEventListener("scroll", onScroll);
|
|
}, []);
|
|
|
|
return (
|
|
<AnimatePresence>
|
|
{visible && (
|
|
<motion.div
|
|
initial={{ opacity: 0, y: 20 }}
|
|
animate={{ opacity: 1, y: 0 }}
|
|
exit={{ opacity: 0, y: 20 }}
|
|
className="fixed bottom-6 right-6 z-50 flex flex-col gap-2"
|
|
>
|
|
<Button
|
|
variant="hero"
|
|
size="lg"
|
|
className="animate-pulse-glow rounded-full px-6 shadow-elevated"
|
|
asChild
|
|
>
|
|
<a href={SECTIONS.booking ? "#booking" : "#mixed-booking"} className="inline-flex items-center gap-2">
|
|
{/* Inline SVG: dancing couple icon */}
|
|
<svg
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 24 24"
|
|
fill="currentColor"
|
|
className="w-5 h-5"
|
|
aria-hidden="true"
|
|
focusable="false"
|
|
>
|
|
<path d="M7.5 4.75a2.25 2.25 0 1 1 4.5 0 2.25 2.25 0 0 1-4.5 0Z" />
|
|
<path d="M4.25 20a.75.75 0 0 1-.743-.653l-.23-1.61a3.75 3.75 0 0 1 1.64-3.67l2.41-1.6a1.5 1.5 0 0 0 .67-1.1l.16-1.3a2.25 2.25 0 0 1 2.22-1.97h.2a2.25 2.25 0 0 1 1.98 1.19l.54 1.03 1.66.83a3 3 0 0 1 1.33 1.22l1.76 2.89c.23.38.09.87-.29 1.1a.8.8 0 0 1-1.08-.28l-1.47-2.42a1.5 1.5 0 0 0-.67-.61l-1.63-.81-.25 1.77a2.25 2.25 0 0 1-1.01 1.55l-2.98 2a2.25 2.25 0 0 0-.98 1.64l-.06.92A.75.75 0 0 1 6 20H4.25Z" />
|
|
<path d="M14.75 6.5a1 1 0 0 1 1.5-.86l2 .99a2.5 2.5 0 0 1 1.12 3.26l-.37.78a.75.75 0 1 1-1.36-.64l.37-.78a1 1 0 0 0-.45-1.3l-1.99-.99a1 1 0 0 1-.32-1.46Z" />
|
|
</svg>
|
|
{t("nav.booking")}
|
|
</a>
|
|
</Button>
|
|
<button
|
|
onClick={() => window.scrollTo({ top: 0, behavior: "smooth" })}
|
|
className="self-center bg-gray-500 text-white p-2 rounded-full hover:bg-gray-600 transition-colors shadow"
|
|
aria-label={t("common.toTop")}
|
|
>
|
|
<ChevronUp className="w-5 h-5" />
|
|
</button>
|
|
</motion.div>
|
|
)}
|
|
</AnimatePresence>
|
|
);
|
|
};
|
|
|
|
export default FloatingButton;
|