Merge branch 'main' of http://192.168.1.163:3000/inmake/irth-new-client
This commit is contained in:
@@ -3,13 +3,14 @@ import {
|
|||||||
marasiDriveDescriptionBadges,
|
marasiDriveDescriptionBadges,
|
||||||
marasiDriveMapCards,
|
marasiDriveMapCards,
|
||||||
} from "../data/aboutMarasiDrive";
|
} from "../data/aboutMarasiDrive";
|
||||||
import MarariDriveNeighboursSlider from "./MarasiDriveNeighboursSlider";
|
import MarariDriveNeighboursSliderDesktop from "./MarasiDriveNeighboursSliderDesktop";
|
||||||
import MarasiDriveInteriorsSlider from "./MarasiDriveInteriorsSlider";
|
import MarasiDriveInteriorsSlider from "./MarasiDriveInteriorsSlider";
|
||||||
import TextBox from "./ui/TextBox";
|
import TextBox from "./ui/TextBox";
|
||||||
import { useRef } from "react";
|
import { useRef } from "react";
|
||||||
import { useScroll } from "motion/react";
|
import { useScroll } from "motion/react";
|
||||||
import MarasiDriveMapCard from "./MarasiDriveMapCard";
|
import MarasiDriveMapCard from "./MarasiDriveMapCard";
|
||||||
import BrochureButton from "./ui/BrochureButton";
|
import BrochureButton from "./ui/BrochureButton";
|
||||||
|
import MarasiDriveNeighboursSliderTablet from "./MarasiDriveNeighboursSliderTablet";
|
||||||
|
|
||||||
function AboutMarasiDrive() {
|
function AboutMarasiDrive() {
|
||||||
const target = useRef<HTMLDivElement>(null);
|
const target = useRef<HTMLDivElement>(null);
|
||||||
@@ -178,11 +179,16 @@ function AboutMarasiDrive() {
|
|||||||
/>
|
/>
|
||||||
</section>
|
</section>
|
||||||
<section
|
<section
|
||||||
className="bg-white w-full overflow-clip h-[calc(27.639vw*5)] 2xl:pt-[9.444vw] 2xl:px-[2.222vw] 2xl:pb-[2.222vw] md:max-2xl:pt-[104px] md:max-2xl:px-6 md:max-2xl:pb-8 pt-16 px-4 pb-8"
|
className="bg-white w-full overflow-clip 2xl:h-[calc(27.639vw*5)] 2xl:pt-[9.444vw] 2xl:px-[2.222vw] 2xl:pb-[2.222vw] md:max-2xl:pt-[104px] md:max-2xl:px-6 md:max-2xl:pb-8 pt-16 px-4 pb-8"
|
||||||
ref={target}
|
ref={target}
|
||||||
>
|
>
|
||||||
|
<<<<<<< HEAD
|
||||||
<div className="flex flex-col 2xl:gap-[4.444vw] md:max-2xl:gap-16 gap-12 2xl:sticky top-[5vw]">
|
<div className="flex flex-col 2xl:gap-[4.444vw] md:max-2xl:gap-16 gap-12 2xl:sticky top-[5vw]">
|
||||||
<div className="flex flex-col items-center 2xl:gap-[2.222vw] md:max-2xl:gap-8 gap-6">
|
<div className="flex flex-col items-center 2xl:gap-[2.222vw] md:max-2xl:gap-8 gap-6">
|
||||||
|
=======
|
||||||
|
<div className="flex flex-col 2xl:gap-[4.444vw] 2xl:sticky top-[5vw]">
|
||||||
|
<div className="flex flex-col items-center 2xl:gap-[2.222vw]">
|
||||||
|
>>>>>>> a525a4a9481a4a4b333e73abb9a0e85f94286184
|
||||||
<h2 className="font-mixcase-unmixed text-h1 text-center whitespace-pre-line">
|
<h2 className="font-mixcase-unmixed text-h1 text-center whitespace-pre-line">
|
||||||
{`Explore the neighbourhood`}
|
{`Explore the neighbourhood`}
|
||||||
</h2>
|
</h2>
|
||||||
@@ -192,7 +198,10 @@ function AboutMarasiDrive() {
|
|||||||
at Rove Home Marasi Drive!`}
|
at Rove Home Marasi Drive!`}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<MarariDriveNeighboursSlider scrollYProgress={scrollYProgress} />
|
<MarariDriveNeighboursSliderDesktop
|
||||||
|
scrollYProgress={scrollYProgress}
|
||||||
|
/>
|
||||||
|
<MarasiDriveNeighboursSliderTablet />
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<section className="bg-white w-full overflow-clip flex flex-col gap-[3.333vw] 2xl:pt-[9.444vw] 2xl:px-[2.222vw] 2xl:pb-[2.222vw] md:max-2xl:pt-[104px] md:max-2xl:px-6 md:max-2xl:pb-8 pt-16 px-4 pb-8">
|
<section className="bg-white w-full overflow-clip flex flex-col gap-[3.333vw] 2xl:pt-[9.444vw] 2xl:px-[2.222vw] 2xl:pb-[2.222vw] md:max-2xl:pt-[104px] md:max-2xl:px-6 md:max-2xl:pb-8 pt-16 px-4 pb-8">
|
||||||
|
|||||||
@@ -24,21 +24,40 @@ function MarasiDriveInteriorsSlider() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="relative 2xl:mb-[15vw]" {...handlers}>
|
<div className="relative max-md:hidden 2xl:mb-[15vw]" {...handlers}>
|
||||||
<motion.div
|
<motion.div
|
||||||
className="flex items-center gap-[6.667vw] min-h-[38.333vw]"
|
className="flex items-center 2xl:gap-[6.667vw] gap-[12.5vw] 2xl:min-h-[38.333vw] min-h-[calc(58.333vw*9/10)]"
|
||||||
animate={{
|
animate={{
|
||||||
transform: `translateX(calc(5vw - ${currentIndex - 1} * 27.222vw))`,
|
transform:
|
||||||
|
innerWidth >= 1440
|
||||||
|
? `translateX(calc(5vw - ${currentIndex - 1} * 27.222vw))`
|
||||||
|
: `translateX(calc(-33.333vw + 12px - ${
|
||||||
|
currentIndex - 1
|
||||||
|
} * 51.042vw))`,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<AnimatePresence>
|
<AnimatePresence>
|
||||||
{marasiDriveInspiredInteriors.map(({ image, name }, index) => (
|
{marasiDriveInspiredInteriors.map(({ image, name }, index) => (
|
||||||
<motion.div
|
<motion.div
|
||||||
animate={{
|
animate={{
|
||||||
width: index === currentIndex ? "31.111vw" : "20.556vw",
|
width:
|
||||||
|
innerWidth >= 1440
|
||||||
|
? index === currentIndex
|
||||||
|
? "31.111vw"
|
||||||
|
: "20.556vw"
|
||||||
|
: index === currentIndex
|
||||||
|
? "58.333vw"
|
||||||
|
: "38.542vw",
|
||||||
}}
|
}}
|
||||||
exit={{
|
exit={{
|
||||||
width: index !== currentIndex ? "31.111vw" : "20.556vw",
|
width:
|
||||||
|
innerWidth >= 1440
|
||||||
|
? index !== currentIndex
|
||||||
|
? "31.111vw"
|
||||||
|
: "20.556vw"
|
||||||
|
: index !== currentIndex
|
||||||
|
? "58.333vw"
|
||||||
|
: "38.542vw",
|
||||||
}}
|
}}
|
||||||
key={name}
|
key={name}
|
||||||
className="shrink-0"
|
className="shrink-0"
|
||||||
@@ -46,9 +65,16 @@ function MarasiDriveInteriorsSlider() {
|
|||||||
<motion.img
|
<motion.img
|
||||||
src={image}
|
src={image}
|
||||||
alt={name}
|
alt={name}
|
||||||
className="object-cover rounded-[1.667vw] pointer-events-none"
|
className="object-cover 2xl:rounded-[1.667vw] rounded-[3.125vw] pointer-events-none max-2xl:aspect-[12/9]"
|
||||||
animate={{
|
animate={{
|
||||||
marginBottom: index !== currentIndex ? "1.667vw" : "2.222vw",
|
marginBottom:
|
||||||
|
innerWidth >= 1440
|
||||||
|
? index !== currentIndex
|
||||||
|
? "1.667vw"
|
||||||
|
: "2.222vw"
|
||||||
|
: index !== currentIndex
|
||||||
|
? "32px"
|
||||||
|
: "24px",
|
||||||
}}
|
}}
|
||||||
onClick={() => setCurrentIndex(index)}
|
onClick={() => setCurrentIndex(index)}
|
||||||
/>
|
/>
|
||||||
@@ -68,25 +94,25 @@ function MarasiDriveInteriorsSlider() {
|
|||||||
onlyIcon
|
onlyIcon
|
||||||
disabled={currentIndex === 0}
|
disabled={currentIndex === 0}
|
||||||
onClick={() => setCurrentIndex(Math.max(currentIndex - 1, 0))}
|
onClick={() => setCurrentIndex(Math.max(currentIndex - 1, 0))}
|
||||||
className="!bg-[#F3F3F2] absolute 2xl:left-[27.778vw] top-[15.833vw]"
|
className="absolute 2xl:left-[27.778vw] left-[12.5vw] 2xl:top-[15.833vw] max-2xl:bottom-1/2"
|
||||||
>
|
>
|
||||||
<span className="2xl:size-[1.389vw] size-5 text-[#0D1922] in-disabled:text-[#0D1922]/40">
|
<div className="2xl:size-[1.389vw] size-5">
|
||||||
<ChevronLeftIcon />
|
<ChevronLeftIcon />
|
||||||
</span>
|
</div>
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
onlyIcon
|
onlyIcon
|
||||||
disabled={currentIndex === marasiDriveInspiredInteriors.length - 1}
|
disabled={currentIndex === marasiDriveInspiredInteriors.length - 1}
|
||||||
className="absolute 2xl:right-[27.778vw] top-[15.833vw]"
|
className="absolute 2xl:left-[65vw] left-[79.167vw] 2xl:top-[15.833vw] max-2xl:bottom-1/2"
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
setCurrentIndex(
|
setCurrentIndex(
|
||||||
Math.min(currentIndex + 1, marasiDriveInspiredInteriors.length - 1)
|
Math.min(currentIndex + 1, marasiDriveInspiredInteriors.length - 1)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<span className="2xl:size-[1.389vw] size-5">
|
<div className="2xl:size-[1.389vw] size-5">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</span>
|
</div>
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
+5
-5
@@ -6,7 +6,7 @@ import {
|
|||||||
} from "motion/react";
|
} from "motion/react";
|
||||||
import { marasiDriveNeighbours } from "../data/aboutMarasiDrive";
|
import { marasiDriveNeighbours } from "../data/aboutMarasiDrive";
|
||||||
|
|
||||||
function MarariDriveNeighboursSlider({
|
function MarariDriveNeighboursSliderDesktop({
|
||||||
scrollYProgress,
|
scrollYProgress,
|
||||||
}: {
|
}: {
|
||||||
scrollYProgress: MotionValue<number>;
|
scrollYProgress: MotionValue<number>;
|
||||||
@@ -39,20 +39,20 @@ function MarariDriveNeighboursSlider({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<motion.div
|
<motion.div
|
||||||
className="flex items-center 2xl:gap-[4.965vw] min-h-[27.639vw]"
|
className="flex items-center 2xl:gap-[4.965vw] gap-[9.375vw] 2xl:min-h-[27.639vw] max-2xl:hidden"
|
||||||
style={{ x }}
|
style={{ x }}
|
||||||
>
|
>
|
||||||
<AnimatePresence>
|
<AnimatePresence>
|
||||||
{marasiDriveNeighbours.map(({ name, image }, index) => (
|
{marasiDriveNeighbours.map(({ name, image }, index) => (
|
||||||
<motion.div
|
<motion.div
|
||||||
key={name}
|
key={name}
|
||||||
className="flex flex-col shrink-0 items-center gap-[1.667vw]"
|
className="flex flex-col shrink-0 items-center 2xl:gap-[1.667vw] gap-6"
|
||||||
style={{ width: [width1, width2, width3, width4][index] }}
|
style={{ width: [width1, width2, width3, width4][index] }}
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
src={image}
|
src={image}
|
||||||
alt={name}
|
alt={name}
|
||||||
className="2xl:rounded-[1.667vw] aspect-[290/205] object-cover w-full pointer-events-none"
|
className="2xl:rounded-[1.667vw] rounded-[3.125vw] aspect-[290/205] object-cover w-full pointer-events-none"
|
||||||
/>
|
/>
|
||||||
<p className={"text-h4 text-center font-medium"}>{name}</p>
|
<p className={"text-h4 text-center font-medium"}>{name}</p>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
@@ -62,4 +62,4 @@ function MarariDriveNeighboursSlider({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default MarariDriveNeighboursSlider;
|
export default MarariDriveNeighboursSliderDesktop;
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
import { AnimatePresence, motion } from "motion/react";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { useSwipeable } from "react-swipeable";
|
||||||
|
import { marasiDriveNeighbours } from "../data/aboutMarasiDrive";
|
||||||
|
import Button from "./ui/Button";
|
||||||
|
import ChevronLeftIcon from "./icons/ChevronLeftIcon";
|
||||||
|
import clsx from "clsx";
|
||||||
|
import ChevronRightIcon from "./icons/ChevronRightIcon";
|
||||||
|
|
||||||
|
function MarasiDriveNeighboursSliderTablet() {
|
||||||
|
const [currentIndex, setCurrentIndex] = useState(1);
|
||||||
|
|
||||||
|
const handlers = useSwipeable({
|
||||||
|
onSwipedLeft: () =>
|
||||||
|
setCurrentIndex(
|
||||||
|
Math.min(currentIndex + 1, marasiDriveNeighbours.length - 1)
|
||||||
|
),
|
||||||
|
onSwipedRight: () => setCurrentIndex(Math.max(currentIndex - 1, 0)),
|
||||||
|
preventScrollOnSwipe: true,
|
||||||
|
touchEventOptions: {
|
||||||
|
passive: false,
|
||||||
|
},
|
||||||
|
trackMouse: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="relative hidden md:max-2xl:block min-h-[calc(47.135vw*11/9)]"
|
||||||
|
{...handlers}
|
||||||
|
>
|
||||||
|
<motion.div
|
||||||
|
className="flex items-center gap-[9.375vw]"
|
||||||
|
animate={{
|
||||||
|
transform: `translateX(calc(-31.641vw - 24px - ${
|
||||||
|
currentIndex - 1
|
||||||
|
} * 47.135vw))`,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<AnimatePresence>
|
||||||
|
{marasiDriveNeighbours.map(({ image, name }, index) => (
|
||||||
|
<motion.div
|
||||||
|
animate={{
|
||||||
|
width: index === currentIndex ? "69.141vw" : "37.76vw",
|
||||||
|
}}
|
||||||
|
exit={{
|
||||||
|
width: index !== currentIndex ? "69.141vw" : "37.76vw",
|
||||||
|
}}
|
||||||
|
key={name}
|
||||||
|
className="shrink-0 flex flex-col"
|
||||||
|
>
|
||||||
|
<motion.img
|
||||||
|
src={image}
|
||||||
|
alt={name}
|
||||||
|
className="object-cover rounded-[3.125vw] pointer-events-none aspect-[12/9] object-center"
|
||||||
|
animate={{
|
||||||
|
marginBottom: index !== currentIndex ? "32px" : "24px",
|
||||||
|
}}
|
||||||
|
onClick={() => setCurrentIndex(index)}
|
||||||
|
/>
|
||||||
|
<p
|
||||||
|
className={clsx(
|
||||||
|
"text-h4 text-center font-medium",
|
||||||
|
index !== currentIndex && "opacity-40"
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{name}
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</AnimatePresence>
|
||||||
|
</motion.div>
|
||||||
|
<Button
|
||||||
|
onlyIcon
|
||||||
|
disabled={currentIndex === 0}
|
||||||
|
onClick={() => setCurrentIndex(Math.max(currentIndex - 1, 0))}
|
||||||
|
className="absolute left-[8.203vw] bottom-1/2"
|
||||||
|
>
|
||||||
|
<span className="size-5">
|
||||||
|
<ChevronLeftIcon />
|
||||||
|
</span>
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
onlyIcon
|
||||||
|
disabled={currentIndex === marasiDriveNeighbours.length - 1}
|
||||||
|
className="absolute left-[83.594vw] bottom-1/2"
|
||||||
|
onClick={() =>
|
||||||
|
setCurrentIndex(
|
||||||
|
Math.min(currentIndex + 1, marasiDriveNeighbours.length - 1)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<span className="size-5">
|
||||||
|
<ChevronRightIcon />
|
||||||
|
</span>
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default MarasiDriveNeighboursSliderTablet;
|
||||||
Reference in New Issue
Block a user