diff --git a/src/pages/Gallery.tsx b/src/pages/Gallery.tsx new file mode 100644 index 0000000..7d11e27 --- /dev/null +++ b/src/pages/Gallery.tsx @@ -0,0 +1,77 @@ +import { useState } from "react"; +import { Button } from "@/components/ui/button"; +import { Dialog, DialogContent } from "@/components/ui/dialog"; +import { Camera, X } from "lucide-react"; +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; + +const categories = ["All", "Engagement", "Pre-Wedding", "Venue"]; + +const photos = [ + { id: 1, cat: "Engagement", h: "h-64", gradient: "from-rose-300 to-pink-200" }, + { id: 2, cat: "Engagement", h: "h-80", gradient: "from-pink-200 to-rose-300" }, + { id: 3, cat: "Pre-Wedding", h: "h-72", gradient: "from-amber-200 to-rose-200" }, + { id: 4, cat: "Venue", h: "h-64", gradient: "from-rose-200 to-pink-300" }, + { id: 5, cat: "Engagement", h: "h-80", gradient: "from-pink-300 to-amber-200" }, + { id: 6, cat: "Pre-Wedding", h: "h-64", gradient: "from-rose-300 to-amber-100" }, + { id: 7, cat: "Venue", h: "h-72", gradient: "from-amber-100 to-rose-300" }, + { id: 8, cat: "Pre-Wedding", h: "h-80", gradient: "from-rose-400 to-pink-200" }, + { id: 9, cat: "Engagement", h: "h-64", gradient: "from-pink-200 to-amber-200" }, + { id: 10, cat: "Venue", h: "h-80", gradient: "from-rose-200 to-rose-400" }, + { id: 11, cat: "Pre-Wedding", h: "h-72", gradient: "from-amber-200 to-pink-300" }, + { id: 12, cat: "Venue", h: "h-64", gradient: "from-pink-300 to-rose-200" }, +]; + +export default function GalleryPage() { + const [active, setActive] = useState("All"); + const [lightbox, setLightbox] = useState(null); + + const filtered = active === "All" ? photos : photos.filter((p) => p.cat === active); + const selected = photos.find((p) => p.id === lightbox); + + return ( +
+
+ +
+
+

Our Moments

+

Photo Gallery

+ + {/* Category Filter */} +
+ {categories.map((cat) => ( + + ))} +
+ + {/* Photo Grid */} +
+ {filtered.map((photo) => ( +
setLightbox(photo.id)} className={`\${photo.h} rounded-xl bg-gradient-to-br \${photo.gradient} overflow-hidden group cursor-pointer relative break-inside-avoid hover:-translate-y-1 hover:shadow-lg transition-all duration-300`}> +
+ +
+
+ ))} +
+
+
+ + {/* Lightbox Dialog */} + setLightbox(null)}> + + {selected && ( +
+ +
+ )} +
+
+ +
+ ); +} \ No newline at end of file