diff --git a/artifacts/ehsan-poc/src/lib/i18n/translations.ts b/artifacts/ehsan-poc/src/lib/i18n/translations.ts index 6411713..1a11d33 100644 --- a/artifacts/ehsan-poc/src/lib/i18n/translations.ts +++ b/artifacts/ehsan-poc/src/lib/i18n/translations.ts @@ -28,6 +28,8 @@ export const en = { login: "Login", logout: "Logout", cart: "Cart", + pause: "Pause slideshow", + play: "Play slideshow", }, nav: { home: "Home", @@ -238,6 +240,8 @@ export const ar = { login: "تسجيل الدخول", logout: "تسجيل الخروج", cart: "السلة", + pause: "إيقاف العرض", + play: "تشغيل العرض", }, nav: { home: "الرئيسية", diff --git a/artifacts/ehsan-poc/src/pages/home.tsx b/artifacts/ehsan-poc/src/pages/home.tsx index 284d4fc..9ddef42 100644 --- a/artifacts/ehsan-poc/src/pages/home.tsx +++ b/artifacts/ehsan-poc/src/pages/home.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { useLanguage } from "../contexts/LanguageContext"; import { useGetStats, useListPublishedRequests } from "@workspace/api-client-react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; @@ -8,13 +8,30 @@ import { Skeleton } from "@/components/ui/skeleton"; import { OpportunityCard } from "../components/OpportunityCard"; import { Riyal } from "@/components/Riyal"; import { Link } from "wouter"; -import { Search } from "lucide-react"; +import { Search, Pause, Play } from "lucide-react"; +import zakatBanner from "@assets/zakatbanarWEB_1780682994527.png"; +import dawriBanner from "@assets/dawribanarWEB_1780682998494.png"; +import waqfBanner from "@assets/waqfbanerWEB_1780683002610.png"; +import giftBanner from "@assets/giftbanarWEB_1780683006569.png"; + +const HERO_BANNERS = [zakatBanner, dawriBanner, waqfBanner, giftBanner]; export default function Home() { const { t } = useLanguage(); const { data: stats, isLoading: statsLoading } = useGetStats(); const { data: published, isLoading: pubLoading } = useListPublishedRequests(); const [query, setQuery] = useState(""); + const [slide, setSlide] = useState(0); + const [paused, setPaused] = useState(false); + + useEffect(() => { + const reduce = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches; + if (reduce || paused) return; + const id = setInterval(() => { + setSlide((s) => (s + 1) % HERO_BANNERS.length); + }, 5000); + return () => clearInterval(id); + }, [paused]); const filtered = (published || []).filter((r) => { if (!query.trim()) return true; @@ -28,64 +45,66 @@ export default function Home() { return ( <> - {/* Hero — official EHSAN green banner */} -
-
- {/* decorative leaves (visual only) */} - - + {/* Hero — auto-rotating banner carousel */} +
+
+ {HERO_BANNERS.map((src, i) => ( + + ))} -
-
- - {t.home.heroBadge} - -

- {t.home.heroTitle} -

-

- {t.home.heroSubtitle} -

-
- - - - - - + {/* bottom scrim keeps the CTA + dots readable over any banner */} +
+ +
+ + + + +
+ +
+ {HERO_BANNERS.map((_, i) => ( +