diff --git a/public/images/about-complex/dubai-marina/amenties.jpg b/public/images/about-complex/dubai-marina/amenties.jpg index 27b6955..068495e 100644 Binary files a/public/images/about-complex/dubai-marina/amenties.jpg and b/public/images/about-complex/dubai-marina/amenties.jpg differ diff --git a/public/images/about-complex/dubai-marina/central_map.png b/public/images/about-complex/dubai-marina/central_map.png new file mode 100644 index 0000000..dd4d438 Binary files /dev/null and b/public/images/about-complex/dubai-marina/central_map.png differ diff --git a/public/images/about-complex/dubai-marina/community.jpg b/public/images/about-complex/dubai-marina/community.jpg index 81c3998..23dffd1 100644 Binary files a/public/images/about-complex/dubai-marina/community.jpg and b/public/images/about-complex/dubai-marina/community.jpg differ diff --git a/public/images/about-complex/dubai-marina/community1.jpg b/public/images/about-complex/dubai-marina/community1.jpg deleted file mode 100644 index dc0fb41..0000000 Binary files a/public/images/about-complex/dubai-marina/community1.jpg and /dev/null differ diff --git a/public/images/about-complex/dubai-marina/community2.jpg b/public/images/about-complex/dubai-marina/community2.jpg index 288e189..632b5e7 100644 Binary files a/public/images/about-complex/dubai-marina/community2.jpg and b/public/images/about-complex/dubai-marina/community2.jpg differ diff --git a/public/images/about-complex/dubai-marina/convenience2.jpg b/public/images/about-complex/dubai-marina/convenience2.jpg deleted file mode 100644 index a07438f..0000000 Binary files a/public/images/about-complex/dubai-marina/convenience2.jpg and /dev/null differ diff --git a/public/images/about-complex/dubai-marina/design.jpg b/public/images/about-complex/dubai-marina/design.jpg index c929971..47d0ab4 100644 Binary files a/public/images/about-complex/dubai-marina/design.jpg and b/public/images/about-complex/dubai-marina/design.jpg differ diff --git a/public/images/about-complex/dubai-marina/fitness1.jpg b/public/images/about-complex/dubai-marina/fitness1.jpg index 9063ce6..638d5ea 100644 Binary files a/public/images/about-complex/dubai-marina/fitness1.jpg and b/public/images/about-complex/dubai-marina/fitness1.jpg differ diff --git a/public/images/about-complex/dubai-marina/fitness2.jpg b/public/images/about-complex/dubai-marina/fitness2.jpg index 000b422..8b80a88 100644 Binary files a/public/images/about-complex/dubai-marina/fitness2.jpg and b/public/images/about-complex/dubai-marina/fitness2.jpg differ diff --git a/public/images/about-complex/dubai-marina/wellness.jpg b/public/images/about-complex/dubai-marina/wellness.jpg index c3d2130..8d4dfbe 100644 Binary files a/public/images/about-complex/dubai-marina/wellness.jpg and b/public/images/about-complex/dubai-marina/wellness.jpg differ diff --git a/src/components/FullScreenButton.tsx b/src/components/FullScreenButton.tsx index 69f6ef1..1a02ce3 100644 --- a/src/components/FullScreenButton.tsx +++ b/src/components/FullScreenButton.tsx @@ -1,8 +1,8 @@ -import { Dispatch, SetStateAction, useEffect } from "react"; -import FullScreenIcon from "./icons/FullScreenIcon"; -import Button from "./ui/Button"; -import CloseFullscreenIcon from "./icons/CloseFullscreenIcon"; -import { isMobileSafari } from "react-device-detect"; +import { Dispatch, SetStateAction, useEffect } from 'react'; +import FullScreenIcon from './icons/FullScreenIcon'; +import Button from './ui/Button'; +import CloseFullscreenIcon from './icons/CloseFullscreenIcon'; +import { isMobileSafari } from 'react-device-detect'; interface IFullScreenProps { onFullScreenChange: Dispatch>; @@ -17,12 +17,12 @@ function FullScreenButton({ }: IFullScreenProps) { useEffect(() => { onFullScreenChange(!!document.fullscreenElement); - document.addEventListener("fullscreenchange", () => + document.addEventListener('fullscreenchange', () => onFullScreenChange(!!document.fullscreenElement) ); return () => - document.removeEventListener("fullscreenchange", () => + document.removeEventListener('fullscreenchange', () => onFullScreenChange(!!document.fullscreenElement) ); }, [onFullScreenChange]); @@ -30,8 +30,8 @@ function FullScreenButton({ if (isMobileSafari) return null; return ( - diff --git a/src/components/Slider.tsx b/src/components/Slider.tsx index 9f02708..02963c9 100644 --- a/src/components/Slider.tsx +++ b/src/components/Slider.tsx @@ -1,13 +1,13 @@ -import { useEffect, useState } from "react"; -import ArrowLeftIcon from "./icons/ArrowLeftIcon"; -import ArrowRightIcon from "./icons/ArrowRightIcon"; -import { dubaiMarinaSlider } from "../data/aboutDubaiMarina"; -import { AnimatePresence, motion } from "motion/react"; +import { useEffect, useState } from 'react'; +import ArrowLeftIcon from './icons/ArrowLeftIcon'; +import ArrowRightIcon from './icons/ArrowRightIcon'; +import { dubaiMarinaSlider } from '../data/aboutDubaiMarina'; +import { AnimatePresence, motion } from 'motion/react'; function Slider({ categoryName, }: { - categoryName: "Wellness" | "Fitness" | "Community" | "Convenience"; + categoryName: 'Wellness' | 'Fitness' | 'Community' | 'Convenience'; }) { const [currentSlide, setCurrentSlide] = useState(0); const [direction, setDirection] = useState(-1); @@ -31,29 +31,29 @@ function Slider({ }, [categoryName]); return ( -
+
0 ? "100%" : "-100%" }} - animate={{ x: 0, transition: { duration: 0.5, ease: "easeInOut" } }} + initial={{ x: direction > 0 ? '100%' : '-100%' }} + animate={{ x: 0, transition: { duration: 0.5, ease: 'easeInOut' } }} exit={{ - x: direction > 0 ? "100%" : "-100%", - transition: { duration: 0.8, ease: "easeInOut" }, + x: direction > 0 ? '100%' : '-100%', + transition: { duration: 0.8, ease: 'easeInOut' }, }} /> -
-
- +
+
+ - +
- -
+
- +
-
+
{currentSlide + 1}/{dubaiMarinaSlider[categoryName].length}
- +
diff --git a/src/components/SliderMobile.tsx b/src/components/SliderMobile.tsx new file mode 100644 index 0000000..264e177 --- /dev/null +++ b/src/components/SliderMobile.tsx @@ -0,0 +1,106 @@ +import { motion, useScroll, useTransform } from 'framer-motion'; +import Slider from './Slider'; +import { useRef } from 'react'; +function SliderMobile() { + const sliderMobileRef = useRef(null); + const { scrollYProgress } = useScroll({ + target: sliderMobileRef, + offset: ['start start', 'end end'], + }); + + const opacityFirstSlide = useTransform( + scrollYProgress, + [0, 1 / 4, 1 / 2], + [1, 0, 0] + ); + const opacitySecondSlide = useTransform( + scrollYProgress, + [1 / 4, 1 / 2, 3 / 4], + [1, 1, 0] + ); + const opacityThirdSlide = useTransform( + scrollYProgress, + [1 / 2, 3 / 4, 1], + [1, 1, 0] + ); + const opacityFourthSlide = useTransform(scrollYProgress, [3 / 4, 1], [1, 1]); + + return ( +
+ +
+
+ Wellness +
+

+ Unlock your inner zen in our wellness playground +

+ +
+ +
+
+ Fitness +
+

+ Cancel all your membership. Your new home has it all +

+ +
+ +
+
+ Community +
+

+ Connect. Engage. Thrive. +

+ +
+ +
+
+ Convenience +
+

+ Your smart living hub +

+ +
+
+
+ ); +} + +export default SliderMobile; diff --git a/src/data/aboutDubaiMarina.ts b/src/data/aboutDubaiMarina.ts index 48add73..fdff6a1 100644 --- a/src/data/aboutDubaiMarina.ts +++ b/src/data/aboutDubaiMarina.ts @@ -80,7 +80,7 @@ export const dubaiMarinaSlider = { title: 'Multi-Purpose Hall', description: 'Designed for gatherings, gamings, and entertainment, step into a vibrant multi-functional indoor and outdoor space that can be rented for special events.', - image: '/images/about-complex/dubai-marina/community1.jpg', + image: '/images/about-complex/dubai-marina/community.jpg', }, { title: 'Lobby Lounge', @@ -99,7 +99,7 @@ export const dubaiMarinaSlider = { { title: 'Entrance & Concierge', description: 'An unforgettable welcome, every time you come home.', - image: '/images/about-complex/dubai-marina/convenience2.jpg', + image: '/images/about-complex/dubai-marina/design.jpg', }, ], } as const; diff --git a/src/pages/AboutComplexPage.tsx b/src/pages/AboutComplexPage.tsx index 1f8bcf8..57b613a 100644 --- a/src/pages/AboutComplexPage.tsx +++ b/src/pages/AboutComplexPage.tsx @@ -4,22 +4,23 @@ import { motion, useInView, AnimatePresence, -} from "motion/react"; -import { useRef, useState } from "react"; +} from 'motion/react'; +import { useRef, useState } from 'react'; import { dubaiMarinaFeatures, dubaiMarinaDescription, roveHomeDescription, dubaiMarinaSlider, sliderBadgesCategory, -} from "../data/aboutDubaiMarina"; - -import EqualIcon from "../components/icons/EqualIcon"; -import TextBox from "../components/ui/TextBox"; -import clsx from "clsx"; -import Slider from "../components/Slider"; -import PlusIcon from "../components/icons/map/PlusIcon"; -import useWindowSize from "../hooks/useWindowSize"; +} from '../data/aboutDubaiMarina'; +import EqualIcon from '../components/icons/EqualIcon'; +import TextBox from '../components/ui/TextBox'; +import clsx from 'clsx'; +import Slider from '../components/Slider'; +import PlusIcon from '../components/icons/map/PlusIcon'; +import useWindowSize from '../hooks/useWindowSize'; +import FullScreenButton from '../components/FullScreenButton'; +import SliderMobile from '../components/SliderMobile'; function AboutComplexPage() { const containerRef = useRef(null); @@ -28,11 +29,11 @@ function AboutComplexPage() { const { width } = useWindowSize(); const [selectedCategorySlider, setSelectedCategorySlider] = - useState("Wellness"); + useState('Wellness'); const { scrollYProgress } = useScroll({ target: containerRef, - offset: ["start start", "end start"], + offset: ['start start', 'end start'], }); const firstSectionOpacity = useTransform(scrollYProgress, [0, 0.2], [1, 0]); @@ -40,7 +41,7 @@ function AboutComplexPage() { const secondSectionY = useTransform( scrollYProgress, [0, 0.4], - ["100dvh", "0dvh"] + ['100dvh', '0dvh'] ); const isSliderInView = useInView(sliderRef, { @@ -53,44 +54,44 @@ function AboutComplexPage() { }); return ( -
+
768 ? firstSectionOpacity : 1, }} > -
+
dubai marina about dubai marina about
-
-
-

+
+
+

{`Rove Home Dubai Marina`}

-
+
{roveHomeDescription.map((description) => ( ))}
-
-

+
+

{`Own the last slice of Dubai Marina, ROVE Style`}

-

+

{`With an extended playlist of life-enhancing amenities, Rove Home is a complete ecosystem that has everything you'll ever need.`} @@ -99,79 +100,80 @@ function AboutComplexPage() {

768 ? secondSectionY : 0, zIndex: 1, }} > -
-
-
-

+
+
+
+

{`Own the last slice of Dubai Marina, ROVE Style`}

-

+

{`With an extended playlist of life-enhancing amenities, Rove Home is a complete ecosystem that has everything you'll ever need.`}

-
-

+
+

Rove Home has it all

-

+

{`Rove Home Dubai Marina features modern-day conveniences, carefully curated for an active and social lifestyle.`}

- -
+
{dubaiMarinaFeatures.map((feature) => (
-
+
{feature.name}
))}
-
-

- Dubai, within reach +
+

+ Dubai, within reach

-
+ +
{dubaiMarinaDescription.map((descriptionItem) => (
setSelectedCategorySlider(descriptionItem.title) } > -
+
{descriptionItem.title}

{descriptionItem.description} @@ -179,8 +181,11 @@ function AboutComplexPage() {

))}
- -
+ +
{sliderBadgesCategory[selectedCategorySlider].map( (badgeItem, index) => ( @@ -207,7 +212,7 @@ function AboutComplexPage() { transition={{ duration: 0.3, delay: index * 0.1, - ease: "easeOut", + ease: 'easeOut', }} > @@ -218,90 +223,138 @@ function AboutComplexPage() {
-
-

+
+

Dubai's first-ever combinable Apartments

- -

+ +

{`Enjoy the option to combine 2 apartments and create a larger space and configuration.`}

-
-
-

+
+
+

Studio²

-
- +
+
-
-

+
+

Studio²

-
- +
+
-
-

+
+

1 Bedroom²

-
-
-

+

or
+
+
+

Studio²

-
- +
+
-
-

+
+

1 Bedroom²

-
- +
+
-
-

+
+

2 Bedroom²

-
-

+
+

Live central. Live centred

-

+

{`Located in the heart of Dubai Marina, Rove Home Dubai Marina is where active living meets modern convenience. Enjoy an energetic lifestyle surrounded by trendy cafés, shops, and entertainment options – all within reach.`}

+
+ central map +
+ {}} + onFullScreenChange={() => {}} + /> +
+