├── .eslintrc.json
├── public
├── favicon.ico
├── images
│ ├── 03.png
│ ├── logo.png
│ ├── Header.png
│ ├── banner.png
│ ├── jour
│ │ ├── 01.png
│ │ ├── Layer1.png
│ │ ├── Layer2.png
│ │ ├── Layer3.png
│ │ ├── Layer4.png
│ │ └── Layer5.png
│ ├── article
│ │ ├── 02.png
│ │ ├── 02.avif
│ │ └── user.svg
│ ├── feature
│ │ └── 03.png
│ ├── popular
│ │ ├── 01.png
│ │ ├── Layer 654.png
│ │ └── Layer 661.png
│ ├── search
│ │ ├── 01.avif
│ │ ├── 02.avif
│ │ ├── 03.avif
│ │ ├── 04.avif
│ │ ├── 05.avif
│ │ ├── 06.avif
│ │ ├── checked.svg
│ │ └── arrow-right.svg
│ ├── villa
│ │ ├── 01.png
│ │ └── 02.png
│ ├── product
│ │ ├── 01.avif
│ │ ├── 02.avif
│ │ ├── user.png
│ │ └── location.png
│ ├── search-img.avif
│ ├── offPlan
│ │ ├── Layer1.png
│ │ ├── Layer2.png
│ │ ├── Layer3.png
│ │ ├── Layer4.png
│ │ └── Layer5.png
│ ├── contact
│ │ ├── facebook.svg
│ │ ├── location-dot-solid.svg
│ │ ├── arrow-right-long-solid.svg
│ │ ├── envelope-solid.svg
│ │ ├── phone-solid.svg
│ │ ├── twitter.svg
│ │ ├── whatsapp.svg
│ │ └── instagram.svg
│ ├── angle-down-solid.svg
│ ├── angle-right.svg
│ ├── arrow-left.svg
│ ├── arrow-right-solid.svg
│ ├── facebook.svg
│ ├── sortby.svg
│ ├── filter.svg
│ ├── linkedin.svg
│ ├── menu.svg
│ └── arrow-right-45.svg
├── fonts
│ └── MYRIADPRO-REGULAR.OTF
├── vercel.svg
├── thirteen.svg
└── next.svg
├── assets
├── images
│ ├── 40.jpg
│ ├── lion.jpg
│ ├── Header.png
│ ├── Layer1.png
│ ├── Layer2.png
│ ├── Layer3.png
│ ├── Layer4.png
│ ├── Layer5.png
│ ├── Layer 41.png
│ ├── Layer 42.png
│ ├── Layer 43.png
│ ├── Layer 57.png
│ ├── Layer 654.png
│ └── Layer 661.png
└── fonts
│ └── Cormorant_Garamond
│ ├── CormorantGaramond-Bold.ttf
│ ├── CormorantGaramond-Italic.ttf
│ ├── CormorantGaramond-Light.ttf
│ ├── CormorantGaramond-Medium.ttf
│ ├── CormorantGaramond-Regular.ttf
│ ├── CormorantGaramond-SemiBold.ttf
│ ├── CormorantGaramond-BoldItalic.ttf
│ ├── CormorantGaramond-LightItalic.ttf
│ ├── CormorantGaramond-MediumItalic.ttf
│ ├── CormorantGaramond-SemiBoldItalic.ttf
│ └── OFL.txt
├── jsconfig.json
├── postcss.config.js
├── pages
├── api
│ └── hello.js
├── _document.js
├── _app.js
├── article
│ └── RelatedPost.js
├── product
│ └── index.js
├── home
│ └── index.js
├── index.js
└── contact
│ └── index.js
├── components
├── border
│ └── BorderBottom.js
├── font
│ └── font.js
├── typegraphy
│ ├── Text16.js
│ ├── Text24.js
│ ├── Text30.js
│ ├── index.js
│ ├── Text36.js
│ ├── BlogDescription.js
│ ├── Text14.js
│ └── Text18.js
├── home
│ ├── index.js
│ ├── OurJournals.js
│ ├── PopularAreas.js
│ ├── Subscribe.js
│ ├── OffPlanProperties.js
│ ├── FeaturedApartments.js
│ ├── FeaturedVillas.js
│ ├── DowntownDubai.js
│ └── Header.js
├── product
│ ├── Title.js
│ ├── SimilarProperty.js
│ ├── Description.js
│ ├── Features.js
│ └── ListingAgent.js
├── card
│ ├── InputBox.js
│ ├── InputFilterBox.js
│ └── ImageCard.js
├── footer
│ ├── footer.item.js
│ └── Footer.js
├── popup
│ ├── OneSelect.js
│ ├── MultipleSelect.js
│ ├── Modal.js
│ ├── PropertyModal.js
│ ├── SortByModal.js
│ ├── MultipleSelectOption.js
│ └── PriceModal.js
├── popular
│ └── PopularArea.js
├── feature
│ ├── FeaturedVilla.js
│ └── FeatureApart.js
├── plan
│ └── Off-plan.js
├── pagination
│ └── index.js
├── header
│ ├── MenuItem.js
│ ├── Header.item.js
│ ├── Header.js
│ ├── MobileHeader.item.js
│ └── Navbar.js
├── staybil
│ └── StaylBiling.js
├── dropdown
│ ├── DropDownBox.js
│ └── Dropdown.js
├── blog
│ └── JournalItem.js
├── carousel
│ ├── BlogCarousel.js
│ ├── CarouselArray.js
│ ├── Carousel.js
│ └── SimilarCarousel.js
├── Journal
│ └── Journal.js
└── search
│ └── SearchBar.js
├── next.config.js
├── .gitignore
├── versel.json
├── package.json
├── README.md
├── tailwind.config.js
├── contexts
└── StateContext.js
├── themes
└── index.js
└── styles
└── globals.css
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/favicon.ico
--------------------------------------------------------------------------------
/assets/images/40.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/40.jpg
--------------------------------------------------------------------------------
/public/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/03.png
--------------------------------------------------------------------------------
/assets/images/lion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/lion.jpg
--------------------------------------------------------------------------------
/public/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/logo.png
--------------------------------------------------------------------------------
/assets/images/Header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Header.png
--------------------------------------------------------------------------------
/assets/images/Layer1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer1.png
--------------------------------------------------------------------------------
/assets/images/Layer2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer2.png
--------------------------------------------------------------------------------
/assets/images/Layer3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer3.png
--------------------------------------------------------------------------------
/assets/images/Layer4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer4.png
--------------------------------------------------------------------------------
/assets/images/Layer5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer5.png
--------------------------------------------------------------------------------
/public/images/Header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/Header.png
--------------------------------------------------------------------------------
/public/images/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/banner.png
--------------------------------------------------------------------------------
/public/images/jour/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/jour/01.png
--------------------------------------------------------------------------------
/assets/images/Layer 41.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer 41.png
--------------------------------------------------------------------------------
/assets/images/Layer 42.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer 42.png
--------------------------------------------------------------------------------
/assets/images/Layer 43.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer 43.png
--------------------------------------------------------------------------------
/assets/images/Layer 57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer 57.png
--------------------------------------------------------------------------------
/assets/images/Layer 654.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer 654.png
--------------------------------------------------------------------------------
/assets/images/Layer 661.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/images/Layer 661.png
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "paths": {
4 | "@/*": ["./*"]
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/public/images/article/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/article/02.png
--------------------------------------------------------------------------------
/public/images/feature/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/feature/03.png
--------------------------------------------------------------------------------
/public/images/popular/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/popular/01.png
--------------------------------------------------------------------------------
/public/images/search/01.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/search/01.avif
--------------------------------------------------------------------------------
/public/images/search/02.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/search/02.avif
--------------------------------------------------------------------------------
/public/images/search/03.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/search/03.avif
--------------------------------------------------------------------------------
/public/images/search/04.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/search/04.avif
--------------------------------------------------------------------------------
/public/images/search/05.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/search/05.avif
--------------------------------------------------------------------------------
/public/images/search/06.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/search/06.avif
--------------------------------------------------------------------------------
/public/images/villa/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/villa/01.png
--------------------------------------------------------------------------------
/public/images/villa/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/villa/02.png
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/images/article/02.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/article/02.avif
--------------------------------------------------------------------------------
/public/images/jour/Layer1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/jour/Layer1.png
--------------------------------------------------------------------------------
/public/images/jour/Layer2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/jour/Layer2.png
--------------------------------------------------------------------------------
/public/images/jour/Layer3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/jour/Layer3.png
--------------------------------------------------------------------------------
/public/images/jour/Layer4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/jour/Layer4.png
--------------------------------------------------------------------------------
/public/images/jour/Layer5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/jour/Layer5.png
--------------------------------------------------------------------------------
/public/images/product/01.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/product/01.avif
--------------------------------------------------------------------------------
/public/images/product/02.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/product/02.avif
--------------------------------------------------------------------------------
/public/images/product/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/product/user.png
--------------------------------------------------------------------------------
/public/images/search-img.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/search-img.avif
--------------------------------------------------------------------------------
/public/images/offPlan/Layer1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/offPlan/Layer1.png
--------------------------------------------------------------------------------
/public/images/offPlan/Layer2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/offPlan/Layer2.png
--------------------------------------------------------------------------------
/public/images/offPlan/Layer3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/offPlan/Layer3.png
--------------------------------------------------------------------------------
/public/images/offPlan/Layer4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/offPlan/Layer4.png
--------------------------------------------------------------------------------
/public/images/offPlan/Layer5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/offPlan/Layer5.png
--------------------------------------------------------------------------------
/public/fonts/MYRIADPRO-REGULAR.OTF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/fonts/MYRIADPRO-REGULAR.OTF
--------------------------------------------------------------------------------
/public/images/popular/Layer 654.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/popular/Layer 654.png
--------------------------------------------------------------------------------
/public/images/popular/Layer 661.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/popular/Layer 661.png
--------------------------------------------------------------------------------
/public/images/product/location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/public/images/product/location.png
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/CormorantGaramond-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/fonts/Cormorant_Garamond/CormorantGaramond-Bold.ttf
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/CormorantGaramond-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/fonts/Cormorant_Garamond/CormorantGaramond-Italic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/CormorantGaramond-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/fonts/Cormorant_Garamond/CormorantGaramond-Light.ttf
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/CormorantGaramond-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/fonts/Cormorant_Garamond/CormorantGaramond-Medium.ttf
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/CormorantGaramond-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/fonts/Cormorant_Garamond/CormorantGaramond-Regular.ttf
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/CormorantGaramond-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/fonts/Cormorant_Garamond/CormorantGaramond-SemiBold.ttf
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/CormorantGaramond-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/fonts/Cormorant_Garamond/CormorantGaramond-BoldItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/CormorantGaramond-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/fonts/Cormorant_Garamond/CormorantGaramond-LightItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/CormorantGaramond-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/fonts/Cormorant_Garamond/CormorantGaramond-MediumItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/CormorantGaramond-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/spider-yamet/next_frontend/main/assets/fonts/Cormorant_Garamond/CormorantGaramond-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/pages/api/hello.js:
--------------------------------------------------------------------------------
1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction
2 |
3 | export default function handler(req, res) {
4 | res.status(200).json({ name: 'John Doe' })
5 | }
6 |
--------------------------------------------------------------------------------
/components/border/BorderBottom.js:
--------------------------------------------------------------------------------
1 | const BorderBottom = ({color}) => {
2 | return (
3 |
4 | );
5 | }
6 |
7 | export default BorderBottom;
--------------------------------------------------------------------------------
/components/font/font.js:
--------------------------------------------------------------------------------
1 | import { Roboto } from "next/font/google";
2 |
3 | export const roboto =Roboto({
4 | subsets: ['latin'],
5 | display: 'swap',
6 | weight:['100', '300', '400', '500', '700', '900']
7 | })
--------------------------------------------------------------------------------
/public/images/article/user.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/components/typegraphy/Text16.js:
--------------------------------------------------------------------------------
1 | const Text16 = ({color, text, weight}) => {
2 | return (
3 |
4 | {text}
5 |
6 | );
7 | }
8 |
9 | export default Text16;
--------------------------------------------------------------------------------
/components/typegraphy/Text24.js:
--------------------------------------------------------------------------------
1 | const Text24 = ({color, text,weight}) => {
2 | return (
3 |
4 | {text}
5 |
6 | );
7 | }
8 |
9 | export default Text24;
--------------------------------------------------------------------------------
/components/typegraphy/Text30.js:
--------------------------------------------------------------------------------
1 | const Text30 = ({text}) => {
2 | return (
3 |
4 | {text}
5 |
6 | );
7 | }
8 |
9 | export default Text30;
--------------------------------------------------------------------------------
/components/typegraphy/index.js:
--------------------------------------------------------------------------------
1 | export {default as Text14} from './Text14';
2 | export {default as Text16} from './Text16';
3 | export {default as Text18} from './Text18';
4 | export {default as Text24} from './Text24';
5 | export {default as Text36} from './Text36';
6 |
--------------------------------------------------------------------------------
/components/typegraphy/Text36.js:
--------------------------------------------------------------------------------
1 | const Text36 = ({color,text,weight}) => {
2 | return (
3 |
4 | {text}
5 |
6 | );
7 | }
8 |
9 | export default Text36;
--------------------------------------------------------------------------------
/components/home/index.js:
--------------------------------------------------------------------------------
1 | export * from './Header'
2 | export * from './FeaturedApartments'
3 | export * from './PopularAreas'
4 | export * from './DowntownDubai'
5 | export * from './FeaturedVillas'
6 | export * from './OffPlanProperties'
7 | export * from './OurJournals'
8 | export * from './Subscribe'
--------------------------------------------------------------------------------
/pages/_document.js:
--------------------------------------------------------------------------------
1 | import { Html, Head, Main, NextScript } from 'next/document'
2 |
3 | export default function Document() {
4 | return (
5 |
6 |
8 |
9 |
10 |
11 |
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/components/product/Title.js:
--------------------------------------------------------------------------------
1 | import { roboto } from "../font/font";
2 | const ProductTitle = ({text}) => {
3 | return (
4 |
5 | {text}
6 |
7 | );
8 | }
9 |
10 | export default ProductTitle;
--------------------------------------------------------------------------------
/components/typegraphy/BlogDescription.js:
--------------------------------------------------------------------------------
1 | const BlogDescription = (
2 | {description}
3 | ) => {
4 | return (
5 |
6 | {description}
7 |
8 | );
9 | }
10 |
11 | export default BlogDescription;
--------------------------------------------------------------------------------
/components/typegraphy/Text14.js:
--------------------------------------------------------------------------------
1 | import { roboto } from "../font/font";
2 |
3 | const Text14 = ({color, text, weight,position}) => {
4 | return (
5 |
6 | {text}
7 |
8 | );
9 | }
10 |
11 | export default Text14;
--------------------------------------------------------------------------------
/public/images/contact/facebook.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/images/contact/location-dot-solid.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/images/contact/arrow-right-long-solid.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/components/typegraphy/Text18.js:
--------------------------------------------------------------------------------
1 | import { roboto } from "../font/font";
2 |
3 | const Text18 = ({color, text, weight,position}) => {
4 | return (
5 |
6 | {text}
7 |
8 | );
9 | }
10 |
11 | export default Text18;
--------------------------------------------------------------------------------
/public/images/angle-down-solid.svg:
--------------------------------------------------------------------------------
1 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | images: {
4 | formats: ['image/avif', 'image/webp'],
5 | },
6 | reactStrictMode: true,
7 | eslint: {
8 | // Warning: This allows production builds to successfully complete even if
9 | // your project has ESLint errors.
10 |
11 | ignoreDuringBuilds: true,
12 | },
13 | distDir: '.next',
14 | }
15 |
16 | module.exports = nextConfig
17 |
--------------------------------------------------------------------------------
/public/images/contact/envelope-solid.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/images/search/checked.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/angle-right.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/arrow-left.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/components/card/InputBox.js:
--------------------------------------------------------------------------------
1 | const InputBox = ({placeholder,value, setValue}) => {
2 | return (
3 | setValue(e.target.value)}
7 | placeholder={placeholder}
8 | className="bg-transparent border-x border-y border-solid border-[#bbbbbb] outline-none py-2 px-5 text-lg text-[#898989] font-sans w-full"
9 | />
10 | );
11 | }
12 |
13 | export default InputBox;
--------------------------------------------------------------------------------
/public/images/arrow-right-solid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/contact/phone-solid.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 | .pnpm-debug.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
--------------------------------------------------------------------------------
/public/images/facebook.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/search/arrow-right.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/components/card/InputFilterBox.js:
--------------------------------------------------------------------------------
1 | const InputFilterBox = ({placeholder,value, setValue, type}) => {
2 | return (
3 | setValue(e.target.value)}
7 | placeholder={placeholder}
8 | className="bg-transparent border-2 border-solid border-customGray-400 outline-none py-2 px-5 text-sm leading-6 text-[#373737] font-normal font-sans rounded-[10px] w-full"
9 | />
10 | );
11 | }
12 |
13 | export default InputFilterBox;
--------------------------------------------------------------------------------
/public/images/sortby.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/filter.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/components/product/SimilarProperty.js:
--------------------------------------------------------------------------------
1 | import SimilarCarousel from "../carousel/SimilarCarousel";
2 | import ProductTitle from "./Title";
3 |
4 | const SimilarProperty = () => {
5 | const data =Array(4).fill("");
6 | return (
7 |
13 | );
14 | }
15 |
16 | export default SimilarProperty;
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/linkedin.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/contact/twitter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/images/menu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/arrow-right-45.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/pages/_app.js:
--------------------------------------------------------------------------------
1 | import Head from "next/head";
2 | import { ThemeProvider } from '@mui/material'
3 | import Header from '@/components/header/Header'
4 | import { StateProvider } from '@/contexts/StateContext';
5 | import theme from '@/themes'
6 |
7 | import '@/styles/globals.css'
8 |
9 | export default function App({ Component, pageProps }) {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 |
17 | Board
18 |
19 |
20 |
21 |
22 | )
23 | }
24 |
--------------------------------------------------------------------------------
/components/footer/footer.item.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | label:"LIFE STYLES",
4 | children:[
5 | {
6 | path:"#",
7 | label:"Beachfront"
8 | },
9 | {
10 | path:"#",
11 | label:"Downtown Living"
12 | },
13 | {
14 | path:"#",
15 | label:"Golf Estates"
16 | },
17 | {
18 | path:"#",
19 | label:"Luxury Penthouses"
20 | },
21 | {
22 | path:"#",
23 | label:"Residential Communities"
24 | },
25 | {
26 | path:"#",
27 | label:"Waterfront Properties"
28 | },
29 | ]
30 | }
31 | ]
--------------------------------------------------------------------------------
/versel.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "board",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@emotion/react": "^11.10.8",
13 | "@emotion/styled": "^11.10.8",
14 | "@headlessui/react": "^1.6.0",
15 | "@mui/icons-material": "^5.11.16",
16 | "@mui/material": "^5.12.2",
17 | "eslint": "8.37.0",
18 | "eslint-config-next": "13.2.4",
19 | "next": "13.2.4",
20 | "react": "18.2.0",
21 | "react-dom": "18.2.0",
22 | "react-slick": "^0.29.0",
23 | "react-slider": "^2.0.4",
24 | "slick-carousel": "^1.8.1"
25 | },
26 | "devDependencies": {
27 | "autoprefixer": "^10.4.14",
28 | "postcss": "^8.4.21",
29 | "tailwindcss": "^3.3.1"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "board",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@emotion/react": "^11.10.8",
13 | "@emotion/styled": "^11.10.8",
14 | "@headlessui/react": "^1.6.0",
15 | "@mui/icons-material": "^5.11.16",
16 | "@mui/material": "^5.12.2",
17 | "eslint": "8.37.0",
18 | "eslint-config-next": "13.2.4",
19 | "next": "13.2.4",
20 | "react": "18.2.0",
21 | "react-dom": "18.2.0",
22 | "react-slick": "^0.29.0",
23 | "react-slider": "^2.0.4",
24 | "slick-carousel": "^1.8.1"
25 | },
26 | "devDependencies": {
27 | "autoprefixer": "^10.4.14",
28 | "postcss": "^8.4.21",
29 | "tailwindcss": "^3.3.1"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/public/images/contact/whatsapp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/components/popup/OneSelect.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { GeneralTitle } from "./FilterModal";
3 |
4 | const OneSelect = ({ data, title, setShow }) => {
5 | const handleFilterProperty = () => {
6 | setShow(true)
7 | };
8 | return (
9 |
10 |
11 |
12 | handleFilterProperty()}
14 | className="flex items-center gap-3.5 text-gray-500 outline-none">
15 |
16 |
17 |
18 |
19 |
20 |
21 | );
22 | }
23 |
24 | export default OneSelect;
--------------------------------------------------------------------------------
/components/popular/PopularArea.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { Text16, Text24, Text36 } from "../typegraphy";
3 | import BorderBottom from "../border/BorderBottom";
4 | import ImageCard from "../card/ImageCard";
5 |
6 | const PopularArea = () => {
7 | const data =[
8 | {
9 | img:"/images/popular/01.png",
10 | title:"Business B",
11 | more:"Learn More"
12 | },
13 | {
14 | img:"/images/popular/01.png",
15 | title:"Seaside Hil",
16 | more:"Learn More"
17 | },
18 | {
19 | img:"/images/popular/01.png",
20 | title:"AVA at Plam Jumeir",
21 | more:"Learn More"
22 | }
23 | ]
24 | return (
25 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 |
33 | export default PopularArea;
--------------------------------------------------------------------------------
/public/images/contact/instagram.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/thirteen.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/components/feature/FeaturedVilla.js:
--------------------------------------------------------------------------------
1 | import BorderBottom from "../border/BorderBottom";
2 | import DCarousel from "../carousel/3dCarousel";
3 | import { Text36 } from "../typegraphy";
4 |
5 | const FeaturedVilla = () => {
6 | const data =[
7 | {
8 | id:1,
9 | img:"/images/villa/01.png"
10 | },
11 | {
12 | id:2,
13 | img:"/images/villa/01.png"
14 | },
15 | {
16 | id:3,
17 | img:"/images/villa/01.png"
18 | },
19 | {
20 | id:4,
21 | img:"/images/villa/01.png"
22 | }
23 | ]
24 | return (
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | );
35 | }
36 |
37 | export default FeaturedVilla;
--------------------------------------------------------------------------------
/components/plan/Off-plan.js:
--------------------------------------------------------------------------------
1 | import BorderBottom from "../border/BorderBottom";
2 | import ImageCard from "../card/ImageCard";
3 | import { Text36 } from "../typegraphy";
4 |
5 | const OffPlan = () => {
6 | const data =[
7 | {
8 | img:"/images/popular/01.png",
9 | title:"Business B",
10 | more:"Learn More"
11 | },
12 | {
13 | img:"/images/popular/01.png",
14 | title:"Seaside Hil",
15 | more:"Learn More"
16 | },
17 | {
18 | img:"/images/popular/01.png",
19 | title:"AVA at Plam Jumeir",
20 | more:"Learn More"
21 | }
22 | ]
23 | return (
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | );
37 | }
38 |
39 | export default OffPlan;
--------------------------------------------------------------------------------
/components/pagination/index.js:
--------------------------------------------------------------------------------
1 | export const paginate = (items, pageNumber, pageSize) => {
2 | const startIndex = (pageNumber - 1) * pageSize;
3 | return items.slice(startIndex, startIndex + pageSize);
4 | };
5 | const Pagination = ({items, pageSize, currentPage, onPageChange,title}) => {
6 | const pagesCount = Math.ceil(items / pageSize);
7 | if (pagesCount === 1) return null;
8 | const pages = Array.from({ length: pagesCount }, (_, i) => i + 1);
9 | return (
10 |
11 | {
12 | pages.map((page)=>(
13 | onPageChange(page)}
16 | className={` cursor-pointer text-base font-normal font-sans ${title==="search"?`text-white ${page===currentPage?'bg-[#0e0f12] border-x border-y border-solid border-white px-3 py-1':''}`:`text-black ${page===currentPage?'bg-[#f8f8f8] border-x border-y border-solid border-black px-3 py-1':''}`}`}>
17 | {page}
18 |
19 | ))
20 | }
21 |
22 | );
23 | }
24 |
25 | export default Pagination;
--------------------------------------------------------------------------------
/components/header/MenuItem.js:
--------------------------------------------------------------------------------
1 | import downSvg from "@/public/images/angle-down-solid.svg"
2 | import Image from 'next/image';
3 | import { useRouter } from "next/router";
4 | const MenuItems = ({ item, close, handleShowChildren
5 | }) => {
6 | const router = useRouter();
7 | const handleRoute = (path) => {
8 | router.push(path);
9 | close()
10 | }
11 | return (
12 |
13 | {
14 | item.map((items, index) => (
15 |
handleShowChildren(items.children) : () => handleRoute(items.path)}
19 | >
20 |
21 |
22 | {items.label}
23 |
24 |
25 |
26 | {items.children &&
27 |
}
33 |
34 | ))
35 | }
36 |
37 |
38 | );
39 | }
40 |
41 | export default MenuItems;
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/components/staybil/StaylBiling.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { Text18,Text36 } from "../typegraphy";
3 | import { roboto } from "../font/font";
4 | import ArrowRight from "@/public/images/angle-right.svg"
5 | const StayBiling = () => {
6 | return (
7 |
8 |
9 |
10 |
11 |
12 |
22 |
23 | );
24 | }
25 |
26 | export default StayBiling;
--------------------------------------------------------------------------------
/components/card/ImageCard.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { Text16, Text24 } from "../typegraphy";
3 |
4 | const ImageCard = ({ data, section }) => {
5 | return (
6 |
7 | {
8 | data.map((item, index) => (
9 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | ))
27 | }
28 |
29 | );
30 | }
31 |
32 | export default ImageCard;
--------------------------------------------------------------------------------
/components/header/Header.item.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | path:'/home',
4 | label:'Home',
5 | children:[
6 |
7 | ]
8 | },
9 | {
10 | path:'/buy',
11 | label:'Buy',
12 | children:[
13 | {
14 | path:"/",
15 | label:"Apartments"
16 | },
17 | ]
18 | },
19 | {
20 | path:'/sell',
21 | label:'Sell',
22 | children:[
23 | {
24 | path:"/",
25 | label:"Apartments"
26 | },
27 | ]
28 | },
29 | {
30 | path:'/product',
31 | label:'Rent',
32 | children:[
33 | {
34 | path:"/",
35 | label:"Apartments"
36 | },
37 | {
38 | path:"/",
39 | label:"Villa"
40 | },
41 | {
42 | path:"/",
43 | label:"Penthouse"
44 | },
45 | {
46 | path:"/",
47 | label:"Town house copy"
48 | },
49 | {
50 | path:"/",
51 | label:"Plot"
52 | },
53 | {
54 | path:"/",
55 | label:"Loft & Duplex"
56 | },
57 | {
58 | path:"/",
59 | label:"Office"
60 | },
61 | ]
62 | },
63 | {
64 | path:'/property',
65 | label:'Properties',
66 | children:[]
67 | }
68 | ]
--------------------------------------------------------------------------------
/components/dropdown/DropDownBox.js:
--------------------------------------------------------------------------------
1 | import { Fragment } from 'react'
2 | import { Listbox, Transition } from '@headlessui/react'
3 | import Image from 'next/image';
4 | import downSvg from "@/public/images/angle-down-solid.svg"
5 |
6 | import { roboto } from '../font/font';
7 | export function MyListbox({data, value,className,setSelected}) {
8 |
9 | return (
10 |
11 |
12 |
13 | {value.title}
14 |
15 |
16 |
17 |
23 |
24 | {data.map((person,index) => (
25 |
31 | {person.title}
32 |
33 | ))}
34 |
35 |
36 |
37 |
38 |
39 |
40 | )
41 | }
--------------------------------------------------------------------------------
/components/popup/MultipleSelect.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { GeneralTitle } from "./FilterModal";
3 | import { useEffect, useState } from "react";
4 |
5 | const MultipleSelect = ({data, title,setShow}) => {
6 | const [option, setOption]= useState(data[0]);
7 | useEffect(()=>{
8 | let temp =[...data];
9 | const filterData = temp.filter((item)=>item.selected===true);
10 | console.log(filterData);
11 | if(filterData.length>1){
12 | setOption({
13 | label:"Custom"
14 | })
15 | }
16 | if(filterData.length===1){
17 | setOption(filterData[0])
18 | }
19 | if(filterData.length===temp.length){
20 | setOption({
21 | label:"All"
22 | })
23 | }
24 | },[data])
25 | const handleFilterProperty = () => {
26 | setShow(true)
27 | };
28 | return (
29 |
30 |
31 | handleFilterProperty()}
33 | className="flex items-center gap-3.5 text-gray-500 outline-none">
34 |
35 |
36 |
37 |
38 | );
39 | }
40 |
41 | export default MultipleSelect;
--------------------------------------------------------------------------------
/components/blog/JournalItem.js:
--------------------------------------------------------------------------------
1 | import Link from "next/link";
2 |
3 | const JournalItem = ({ item }) => {
4 | return (
5 |
6 |
7 |
8 |
9 |
10 | Top 5 apartments in Downtown Dubai
11 |
12 |
13 | Here are the most beautiful apartments & penthouses that are ready to move in
14 |
15 |
16 |
17 |
18 | PORTFOLIO
19 |
20 |
21 |
22 |
23 |
24 | 4 MIN. READ
25 |
26 |
27 |
28 | APR 14TH, 2023
29 |
30 |
31 |
32 |
33 |
34 | );
35 | }
36 |
37 | export default JournalItem;
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2 |
3 | ## Getting Started
4 |
5 | First, run the development server:
6 |
7 | ```bash
8 | npm run dev
9 | # or
10 | yarn dev
11 | # or
12 | pnpm dev
13 | ```
14 |
15 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
16 |
17 | You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
18 |
19 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
20 |
21 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
22 |
23 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
24 |
25 | ## Learn More
26 |
27 | To learn more about Next.js, take a look at the following resources:
28 |
29 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
30 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
31 |
32 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
33 |
34 | ## Deploy on Vercel
35 |
36 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
37 |
38 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
39 |
--------------------------------------------------------------------------------
/components/home/OurJournals.js:
--------------------------------------------------------------------------------
1 | import { Box, Typography } from "@mui/material"
2 |
3 | import image1 from '../../assets/images/Layer1.png'
4 | import image2 from '../../assets/images/Layer2.png'
5 | import image3 from '../../assets/images/Layer3.png'
6 | import image4 from '../../assets/images/Layer4.png'
7 | import image5 from '../../assets/images/Layer5.png'
8 | import SimilarCarousel from "../carousel/SimilarCarousel"
9 |
10 | const propertyItems1= [
11 | { img: '/images/offPlan/Layer1.png',
12 | title: 'The Escape: Cap Karoso',
13 | details: 'We take a look at Cap Karoso in Sumba, Indonesia.',
14 | portfolio: 'PORTFOLIO 4 MIN Read',
15 | date: 'APR 14TH, 2023'
16 | },
17 | { img: '/images/offPlan/Layer2.png',
18 | title: 'The Escape: Cap Karoso',
19 | details: 'We take a look at Cap Karoso in Sumba, Indonesia.',
20 | portfolio: 'PORTFOLIO 4 MIN Read',
21 | date: 'APR 14TH, 2023'
22 | },
23 | { img: '/images/offPlan/Layer3.png',
24 | title: 'The Escape: Cap Karoso',
25 | details: 'We take a look at Cap Karoso in Sumba, Indonesia.',
26 | portfolio: 'PORTFOLIO 4 MIN Read',
27 | date: 'APR 14TH, 2023'
28 | },
29 | { img: '/images/offPlan/Layer4.png',
30 | title: 'The Escape: Cap Karoso',
31 | details: 'We take a look at Cap Karoso in Sumba, Indonesia.',
32 | portfolio: 'PORTFOLIO 4 MIN Read',
33 | date: 'APR 14TH, 2023'
34 | },
35 | { img: '/images/offPlan/Layer5.png',
36 | title: 'The Escape: Cap Karoso',
37 | details: 'We take a look at Cap Karoso in Sumba, Indonesia.',
38 | portfolio: 'PORTFOLIO 4 MIN Read',
39 | date: 'APR 14TH, 2023'
40 | },
41 | ]
42 |
43 | export const OurJournals = () => {
44 | return (
45 |
46 |
47 |
48 |
49 |
50 | )
51 | }
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | const colors = require('tailwindcss/colors');
3 | const defaultTheme = require('tailwindcss/defaultTheme')
4 |
5 | module.exports = {
6 | content: [
7 | "./app/**/*.{js,ts,jsx,tsx}",
8 | "./pages/**/*.{js,ts,jsx,tsx}",
9 | "./components/**/*.{js,ts,jsx,tsx}",
10 |
11 | // Or if using `src` directory:
12 | "./src/**/*.{js,ts,jsx,tsx}",
13 | ],
14 | theme: {
15 | borderRadius: {
16 | 'none': '0',
17 | 'sm': '0.125rem',
18 | DEFAULT: '0.25rem',
19 | DEFAULT: '4px',
20 | 'md': '0.375rem',
21 | 'lg': '0.5rem',
22 | 'xl': '0.75rem',
23 | '2xl': '1rem',
24 | '3xl': '1.5rem',
25 | '4xl': '1.875rem',
26 | '5xl': '2.5rem',
27 | 'full': '9999px',
28 | 'large': '12px',
29 | },
30 | letterSpacing:{
31 | wider:'0.125em',
32 | widest:'0.3125em'
33 | },
34 | colors:{
35 | ...colors,
36 | 'gray':{
37 | 200:'#101010',
38 | 300:'#3e4048',
39 | 500:"#a1a1a1",
40 | 600:"#AFAFAF",
41 | 700:"#757575",
42 | 800:'#7e7e7e',
43 | 900:'#3e3e3e'
44 | },
45 | 'gras':{
46 | 400:'#181718',
47 | 500:'#4d4c4d',
48 | 600:'#212121',
49 | 800:'#171717'
50 | },
51 | 'customGray':{
52 | 200:'#6f6f6f',
53 | 300:'#2f2f32',
54 | 400:'#c4c4c4',
55 | 500:'#696969',
56 | 600:'#454545',
57 | 700:'#61656d',
58 | 800:' #f7f8fa',
59 | 900:'#eaeaec'
60 | },
61 | 'customBlack':{
62 | 400:'#909090',
63 | }
64 | },
65 | extend: {
66 | fontFamily:{
67 | CormorantGaramond:['Cormorant Garamond, serif'],
68 | sans:['Poppins',...defaultTheme.fontFamily.sans],
69 | myraidPro:['MYRIADPRO'],
70 | },
71 | zIndex: {
72 | '100': '100',
73 | }
74 |
75 | },
76 | },
77 | plugins: [],
78 | }
--------------------------------------------------------------------------------
/contexts/StateContext.js:
--------------------------------------------------------------------------------
1 | import { createContext, useReducer } from "react"
2 | const initialState ={
3 | isOpen:false,
4 | isSortOpen:false,
5 | isFilterOpen:false,
6 | isSortPcOpen:false
7 | }
8 | export const StateContext = createContext({})
9 | export const StateProvider =({children})=>{
10 | const reducer =(state, action)=>{
11 | switch(action.type){
12 | case 'ShowAdvancedModal':
13 | return {
14 | ...state,
15 | isOpen:!state.isOpen,
16 | }
17 | case 'HideAdvancedModal':
18 | return {
19 | ...state,
20 | isOpen:false,
21 | }
22 | case 'ShowSortModal':
23 | return {
24 | ...state,
25 | isSortOpen:!state.isSortOpen,
26 | }
27 | case 'HideSortModal':
28 | return {
29 | ...state,
30 | isSortOpen:false,
31 | }
32 | case 'ShowFilterModal':
33 | return {
34 | ...state,
35 | isFilterOpen:!state.isFilterOpen,
36 | }
37 | case 'HideFilterModal':
38 | return {
39 | ...state,
40 | isFilterOpen:false,
41 | }
42 | case 'ShowSortPcModal':
43 | return {
44 | ...state,
45 | isSortPcOpen:true
46 | }
47 | case 'HideSortPcModal':
48 | return {
49 | ...state,
50 | isSortPcOpen:false,
51 | }
52 | }
53 |
54 | }
55 | const [state, dispatch] = useReducer(reducer, initialState);
56 | return (
57 |
58 | {children}
59 |
60 | )
61 | }
--------------------------------------------------------------------------------
/pages/article/RelatedPost.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 |
3 | const RelatedPost = () => {
4 | const post = Array(3).fill("");
5 | return (
6 |
7 |
8 | Related Posts
9 |
10 |
11 | {
12 | post.map((item, i) => (
13 |
14 |
15 |
16 | Design House: A Glamorous Dubai Hills Villa
17 |
18 |
19 |
20 | popular areas
21 |
22 |
23 |
24 | april 19, 2023
25 |
26 |
27 |
28 | ))
29 | }
30 |
31 |
32 | );
33 | }
34 |
35 | export default RelatedPost;
--------------------------------------------------------------------------------
/components/home/PopularAreas.js:
--------------------------------------------------------------------------------
1 | import { Box, Grid, Typography } from "@mui/material"
2 | import DCarousel from '../carousel/3dCarousel'
3 |
4 | const data =[
5 | {
6 | id:1,
7 | img:"/images/popular/Layer 654.png",
8 | text1: 'DOWNTOWN DUBAI',
9 | text2: 'PENTHOUSE'
10 | },
11 | {
12 | id:2,
13 | img:"/images/popular/Layer 661.png",
14 | text1: 'DOWNTOWN DUBAI', text2: 'PENTHOUSE'
15 | },
16 | {
17 | id:3,
18 | img:"/images/popular/Layer 654.png",
19 | text1: 'DOWNTOWN DUBAI', text2: 'PENTHOUSE'
20 | },
21 | {
22 | id:4,
23 | img:"/images/popular/Layer 661.png",
24 | text1: 'DOWNTOWN DUBAI', text2: 'PENTHOUSE'
25 | }
26 | ]
27 |
28 | export const PopularAreas = () => {
29 |
30 | return (
31 |
35 |
36 |
37 |
38 | Popular Areas
41 | As well as being positioned on one of the exclusive Fronds of Palm Jumeirah.
44 | It now features the architectural talents of Chakib Richani, att from the Tabari Gallery and a host of unique touches including Flos lighting and furniture from Minotti, Poltrona Frau, Bocci and Giorgetti.
47 |
48 |
49 |
52 |
53 |
54 |
55 |
56 | )
57 | }
58 |
59 |
--------------------------------------------------------------------------------
/components/popup/Modal.js:
--------------------------------------------------------------------------------
1 | import { Dialog, Transition } from '@headlessui/react'
2 | import { Fragment } from 'react'
3 | const ModalComponent = ({ children, className,wrapperClass, isOpen, closeModal }) => {
4 | return (
5 | <>
6 |
7 |
8 |
17 |
18 |
19 |
20 |
21 |
22 |
30 |
31 | {children}
32 |
33 |
34 | {/* */}
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | >
44 | );
45 | }
46 |
47 | export default ModalComponent;
--------------------------------------------------------------------------------
/components/dropdown/Dropdown.js:
--------------------------------------------------------------------------------
1 | import { Menu, Transition } from '@headlessui/react'
2 | import { Fragment, useEffect, useRef, useState } from 'react';
3 | import downSvg from "@/public/images/angle-down-solid.svg"
4 | import Image from 'next/image';
5 | const CustomDropDown = ({ color,font, title, data }) => {
6 | return (
7 |
8 |
9 |
10 | {title}
11 |
12 |
13 |
14 |
23 |
24 |
25 | {
26 | data.map((item, index) => (
27 |
28 | {({ active }) => (
29 |
33 |
34 | {item.title}
35 |
36 | )}
37 |
38 | ))
39 | }
40 |
41 |
42 |
43 |
44 |
45 |
46 | );
47 | }
48 |
49 | export default CustomDropDown;
--------------------------------------------------------------------------------
/components/home/Subscribe.js:
--------------------------------------------------------------------------------
1 |
2 | import { Box, Button, Typography, OutlinedInput, Grid } from "@mui/material";
3 | import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';
4 |
5 | import { palette } from "@/themes";
6 |
7 | export const Subscribe = () => {
8 | return (
9 |
13 |
14 |
15 |
20 | Stay Blingy!
24 |
30 | Subscribe to our news letter and get latest market prices
31 |
32 |
33 |
34 |
35 |
40 |
49 |
53 |
57 |
58 |
59 |
60 |
61 |
62 | )
63 | }
64 |
--------------------------------------------------------------------------------
/components/carousel/BlogCarousel.js:
--------------------------------------------------------------------------------
1 | import React, { useRef, useState } from "react";
2 | import Slider from "react-slick";
3 | const BlogCarousel = ({data}) => {
4 | const settings = {
5 | dots: true,
6 | infinite: true,
7 | speed: 500,
8 | slidesToShow: 1,
9 | slidesToScroll: 1,
10 | dotsClass: "button__bar slick-dots",
11 | arrows: false,
12 | };
13 | return (
14 |
15 |
16 | {
17 | data.map((item,index)=>(
18 |
22 |
28 |
29 |
30 | About 67% of the approximately 830 UHNWIs identified that are based in the city treat Dubai as their primary residence, while the remaining 33% choose Dubai as a secondary home.
31 |
32 |
33 | Dubai dominates as top choice
34 | for UHNW primary residents
35 |
36 |
37 | Learn More
38 |
39 |
40 |
41 | ))
42 | }
43 |
44 |
45 | );
46 | }
47 |
48 | export default BlogCarousel;
--------------------------------------------------------------------------------
/components/popup/PropertyModal.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 |
3 | const PropertyModal = ({data, sort, setSort}) => {
4 | const sortData = [
5 | {
6 | label: "All",
7 | selected: true
8 | },
9 | {
10 | label: "Villa",
11 | selected: false
12 | },
13 | {
14 | label: "Apartment",
15 | selected: false
16 | },
17 | {
18 | label: "Townhouse",
19 | selected: false
20 | },
21 | {
22 | label: "Penthouse",
23 | selected: false
24 | },
25 | {
26 | label: "Office Spaces",
27 | selected: false
28 | },
29 | {
30 | label: "Loft & Duplex",
31 | selected: false
32 | },
33 | {
34 | label: "Plot",
35 | selected: false
36 | },
37 | ]
38 | const handleChange =(e, item)=>{
39 | const { checked, value } = e.target;
40 | setSort(value);
41 | close()
42 | }
43 | return (
44 |
45 | {
46 | data.map((item, index) => (
47 |
48 |
49 | {item.label}
50 |
51 | handleChange(e,item)}
56 | className="w-4 h-4 bg-black border-x border-y border-solid rounded-full border-gray-300 checked:border-x checked:border-solid checked:border-red checked:rouned-full appearance-none checked:before:w-2.5 checked:before:h-2.5 checked:before:left-1/2 checked:before:-translate-x-1/2 checked:before:top-1/2 checked:before:-translate-y-1/2 checked:border-white checked:before:bg-white relative before:absolute before:rounded-full"
57 | />
58 |
59 |
60 | ))
61 | }
62 |
63 |
64 | );
65 | }
66 |
67 | export default PropertyModal;
--------------------------------------------------------------------------------
/themes/index.js:
--------------------------------------------------------------------------------
1 | import { createTheme } from '@mui/material/styles'
2 |
3 | const createTypographySystem = () => {
4 | return {
5 | body1: {
6 | fontSize: 18,
7 | fontStyle: 'normal',
8 | textTransform: 'initial',
9 | fontWeight: 400,
10 | },
11 | body2: {
12 | fontSize: '16px',
13 | fontWeight: 400,
14 | color: '#c9c9c9 !important',
15 | },
16 | h1: {
17 | fontSize: 62,
18 | fontWeight: 500,
19 | },
20 | h2: {
21 | fontSize: 42,
22 | fontWeight: 600,
23 | },
24 | h3: {
25 | fontSize: 18,
26 | fontWeight: 600,
27 | },
28 | h4: {
29 | fontSize: 16,
30 | fontWeight: 400,
31 | },
32 | h5: {
33 | fontSize: 15,
34 | },
35 | h6: {
36 | fontSize: 14,
37 | }
38 | }
39 | }
40 |
41 | const createPaletteSystem = () => ({
42 | common: {
43 | black: '#000',
44 | white: '#FFFFFF',
45 | },
46 | primary: {
47 | dark: '#513F01 !important',
48 | light: '#CA9F02',
49 | main: '#FFFFFF',
50 | },
51 | secondary: {
52 | main: '#3ffefd',
53 | },
54 | text: {
55 | disabled: '#596673',
56 | primary: '#090A0C',
57 | secondary: '#596673',
58 | },
59 | })
60 | const theme = createTheme({
61 | components: {
62 | MuiButton: {
63 | styleOverrides: {
64 | root: {
65 | '&:hover': {
66 | backgroundColor: 'black',
67 | },
68 | background: 'black !important',
69 | color: 'white',
70 | borderRadius: '0px !important',
71 | textTransform: 'initial',
72 | fontSize: 16,
73 | },
74 | },
75 | variants: [
76 | {
77 | props: { variant: 'contained'},
78 | style: {
79 |
80 | },
81 | },
82 | {
83 | props: { variant: 'outlined'},
84 | style: {
85 | '&:hover': {
86 | color: 'white',
87 | },
88 | },
89 | },
90 | ],
91 | },
92 | MuiTypography: {
93 | styleOverrides: {
94 | root: {
95 | fontFamily: 'Poppins, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"',
96 | color: 'white'
97 | },
98 | },
99 | },
100 | MuiGrid: {
101 | styleOverrides: {
102 | root: {
103 | marginLeft: '0px !important',
104 | },
105 | },
106 | },
107 | },
108 | palette: createPaletteSystem(),
109 | spacing: 4,
110 | typography: createTypographySystem(),
111 | })
112 |
113 | export default theme
114 | export const palette = theme.palette
115 |
--------------------------------------------------------------------------------
/components/popup/SortByModal.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import ModalComponent from "./Modal";
3 |
4 | const SortByModal = ({ isOpen, close }) => {
5 | const sortData = [
6 | {
7 | label: "Recommended",
8 | selected: true
9 | },
10 | {
11 | label: "Latest",
12 | selected: false
13 | },
14 | {
15 | label: "Price (Highest to Lowest)",
16 | selected: false
17 | },
18 | {
19 | label: "Price (Lowest to Highest)",
20 | selected: false
21 | },
22 | {
23 | label: "Most viewed",
24 | selected: false
25 | },
26 | {
27 | label: "Most popular",
28 | selected: false
29 | },
30 | ]
31 | const [sort, setSort] = useState("Recommended");
32 | const handleChange =(e, item)=>{
33 | const { checked, value } = e.target;
34 | setSort(value);
35 | close()
36 | }
37 | return (
38 |
44 |
45 |
46 | Sort by
47 |
48 |
49 | {
50 | sortData.map((item, index) => (
51 |
52 |
53 | {item.label}
54 |
55 | handleChange(e,item)}
60 | className="w-4 h-4 bg-white border-x border-y border-solid rounded-full border-black checked:border-x checked:border-solid checked:border-red checked:rouned-full appearance-none checked:before:w-2.5 checked:before:h-2.5 checked:before:left-1/2 checked:before:-translate-x-1/2 checked:before:top-1/2 checked:before:-translate-y-1/2 checked:before:bg-black relative before:absolute before:rounded-full"
61 | />
62 |
63 |
64 | ))
65 | }
66 |
67 |
68 |
69 |
70 |
71 | );
72 | }
73 |
74 | export default SortByModal;
--------------------------------------------------------------------------------
/components/popup/MultipleSelectOption.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { GeneralTitle } from "./FilterModal";
3 | const MultipleSelectOption = ({ data, setData, setShow, selected, title }) => {
4 | const handleSelect = (item) => {
5 | if (title === "feature") {
6 | const temp = [...data];
7 | setData(
8 | temp.map((items) => items.id === item.id ? { ...items, selected: !items.selected } : items)
9 | )
10 | } else {
11 | setData(item);
12 | setShow(false)
13 | }
14 |
15 | }
16 | const handleSelectAll = () => {
17 | if (title === "feature") {
18 | const temp = [...data];
19 | temp.map((item)=>item.selected=true);
20 | setData([...temp])
21 | } else{
22 | setData({
23 | selected: false,
24 | label: "All"
25 | });
26 | setShow(false)
27 | }
28 |
29 | }
30 | return (
31 |
32 |
setShow(false)}
38 | />
39 |
40 |
41 |
42 |
43 | {data.map((item, index) => (
44 |
handleSelect(item)}
46 | key={index}>
47 |
48 |
49 | {title !== "feature" ?
50 | {selected.label === item.label ? (
51 |
57 | ) : null}
58 | :
59 | {
60 | item.selected &&
66 | } }
67 |
68 |
69 |
70 | ))}
71 |
72 |
73 |
74 |
75 |
78 | Select All
79 |
80 |
);
81 | }
82 |
83 | export default MultipleSelectOption;
--------------------------------------------------------------------------------
/components/home/OffPlanProperties.js:
--------------------------------------------------------------------------------
1 | import { Box, Typography } from "@mui/material"
2 | import SimilarCarousel from "../carousel/SimilarCarousel"
3 |
4 | import image1 from '../../assets/images/Layer1.png'
5 | import image2 from '../../assets/images/Layer2.png'
6 | import image3 from '../../assets/images/Layer3.png'
7 | import image4 from '../../assets/images/Layer4.png'
8 | import image5 from '../../assets/images/Layer5.png'
9 |
10 | const propertyItems = [
11 | { url: image1, text: 'DOWNtown Dubai Penthouse' },
12 | { url: image2, text: 'DOWNtown Dubai Penthouse' },
13 | { url: image3, text: 'DOWNtown Dubai Penthouse' },
14 | { url: image4, text: 'DOWNtown Dubai Penthouse' },
15 | { url: image5, text: 'DOWNtown Dubai Penthouse' },
16 | ]
17 |
18 | const propertyItems1 = [
19 | { img: '/images/offPlan/Layer1.png', text: 'DOWNtown Dubai Penthouse' },
20 | { img: '/images/offPlan/Layer2.png', text: 'DOWNtown Dubai Penthouse' },
21 | { img: '/images/offPlan/Layer3.png', text: 'DOWNtown Dubai Penthouse' },
22 | { img: '/images/offPlan/Layer4.png', text: 'DOWNtown Dubai Penthouse' },
23 | { img: '/images/offPlan/Layer5.png', text: 'DOWNtown Dubai Penthouse' },
24 | ]
25 |
26 | export const OffPlanProperties = () => {
27 | return (
28 |
29 |
34 | Off-Plan Projects
35 |
36 |
41 | {
42 | propertyItems.map((item, i) => (
43 |
55 |
60 |
70 | {item.text}
71 |
72 |
73 | ))
74 | }
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | )
83 | }
--------------------------------------------------------------------------------
/components/home/FeaturedApartments.js:
--------------------------------------------------------------------------------
1 | import { Box, Grid, Typography } from "@mui/material"
2 |
3 | import CarouselArray from '../carousel/CarouselArray'
4 |
5 | const featuredApartments = [
6 | {
7 | items: [
8 | { img: "/images/villa/02.png" },
9 | { img: "/images/villa/02.png" },
10 | { img: "/images/villa/02.png" },
11 | { img: "/images/villa/02.png" },
12 | ],
13 | title: 'DOWNTOWN DUBAI PENTHOUSE',
14 | details: 'PENTHOUSE - 3 BED - 13,00 SQ.FT',
15 | AED: '144,220,00',
16 | },
17 | {
18 | items: [
19 | { img: "/images/villa/02.png" },
20 | { img: "/images/villa/02.png" },
21 | { img: "/images/villa/02.png" },
22 | { img: "/images/villa/02.png" },
23 | ],
24 | title: 'DOWNTOWN DUBAI PENTHOUSE',
25 | details: 'PENTHOUSE - 3 BED - 13,00 SQ.FT',
26 | AED: '144,220,00',
27 | },
28 | {
29 | items: [
30 | { img: "/images/villa/02.png" },
31 | { img: "/images/villa/02.png" },
32 | { img: "/images/villa/02.png" },
33 | { img: "/images/villa/02.png" },
34 | ],
35 | title: 'DOWNTOWN DUBAI PENTHOUSE',
36 | details: 'PENTHOUSE - 3 BED - 13,00 SQ.FT',
37 | AED: '144,220,00',
38 | },
39 | {
40 | items: [
41 | { img: "/images/villa/02.png" },
42 | { img: "/images/villa/02.png" },
43 | { img: "/images/villa/02.png" },
44 | { img: "/images/villa/02.png" },
45 | ],
46 | title: 'DOWNTOWN DUBAI PENTHOUSE',
47 | details: 'PENTHOUSE - 3 BED - 13,00 SQ.FT',
48 | AED: '144,220,00',
49 | },
50 | {
51 | items: [
52 | { img: "/images/villa/02.png" },
53 | { img: "/images/villa/02.png" },
54 | { img: "/images/villa/02.png" },
55 | { img: "/images/villa/02.png" },
56 | ],
57 | title: 'DOWNTOWN DUBAI PENTHOUSE',
58 | details: 'PENTHOUSE - 3 BED - 13,00 SQ.FT',
59 | AED: '144,220,00',
60 | },
61 | ]
62 |
63 | export const FeaturedApartments = () => {
64 | return (
65 |
69 |
70 |
71 | Featured Apartments
76 |
77 |
78 |
79 | Dilatations International realty is excited to present the listing for this bespoke 4-bedroom Garden Homes villa on Frond N, Plam Jumeirah,
82 | As well as being positioned on one of the exclusive Fronds of Plam Jumeirah, this exceptional Garden Homes villa has been expettly designed and fully customised to crete a dram luxury property.
85 |
86 |
87 |
88 |
89 |
90 | )
91 | }
--------------------------------------------------------------------------------
/components/product/Description.js:
--------------------------------------------------------------------------------
1 | import ProductTitle from "./Title";
2 |
3 | const Description = () => {
4 | const data = [
5 | {
6 | id: 1,
7 | title: "Developer",
8 | name: "GAMBRIN PROPERTIES"
9 | },
10 | {
11 | id: 2,
12 | title: "Building",
13 | name: "Rigel"
14 | },
15 | {
16 | id: 3,
17 | title: "RERA",
18 | name: "30495"
19 | },
20 | {
21 | id: 4,
22 | title: "Lifestyle",
23 | name: "Waterfront Properties"
24 | },
25 | {
26 | id: 5,
27 | title: "Reference",
28 | name: "6E203-203D"
29 | }
30 | ]
31 | return (
32 |
33 |
34 |
35 |
36 |
37 | Luxhabitat Sotheby’s International Realty is pleased to present this modern 6-bedroom villa in Emirates Hills. This independently situated villa is a spacious and contemporary luxury property available for rent that will appeal to those with large families or who want plenty of room for guests or entertaining. The villa has a well designed layout with separate formal living area and a combined dining and family room. The gourmet kitchen is also generously proportioned with built-in Siemens appliances. There are six bedrooms in the villa, two of which are on the ground floor so they are perfect for guests or as accessibility rooms.
38 |
39 |
40 | Read more
41 |
42 |
43 |
44 |
45 | {
46 | data.map((item, index) => (
47 |
48 |
49 | {item.title}:
50 |
51 |
52 | {item.name}
53 |
54 |
55 | ))
56 | }
57 |
58 |
59 |
60 |
61 |
62 | );
63 | }
64 |
65 | export default Description;
--------------------------------------------------------------------------------
/components/home/FeaturedVillas.js:
--------------------------------------------------------------------------------
1 | import { Box, Grid, Typography } from "@mui/material"
2 |
3 | import CarouselArray from '../carousel/CarouselArray'
4 |
5 | const featuredApartments = [
6 | {
7 | items: [
8 | { img: "/images/villa/02.png" },
9 | { img: "/images/villa/02.png" },
10 | { img: "/images/villa/02.png" },
11 | { img: "/images/villa/02.png" },
12 | ],
13 | title: 'DOWNTOWN DUBAI PENTHOUSE',
14 | details: 'PENTHOUSE 3 BED 13,00 SQ.FT READY',
15 | AED: '144,220,00',
16 | },
17 | {
18 | items: [
19 | { img: "/images/villa/02.png" },
20 | { img: "/images/villa/02.png" },
21 | { img: "/images/villa/02.png" },
22 | { img: "/images/villa/02.png" },
23 | ],
24 | title: 'DOWNTOWN DUBAI PENTHOUSE',
25 | details: 'PENTHOUSE 3 BED 13,00 SQ.FT READY',
26 | AED: '144,220,00',
27 | },
28 | {
29 | items: [
30 | { img: "/images/villa/02.png" },
31 | { img: "/images/villa/02.png" },
32 | { img: "/images/villa/02.png" },
33 | { img: "/images/villa/02.png" },
34 | ],
35 | title: 'DOWNTOWN DUBAI PENTHOUSE',
36 | details: 'PENTHOUSE 3 BED 13,00 SQ.FT READY',
37 | AED: '144,220,00',
38 | },
39 | {
40 | items: [
41 | { img: "/images/villa/02.png" },
42 | { img: "/images/villa/02.png" },
43 | { img: "/images/villa/02.png" },
44 | { img: "/images/villa/02.png" },
45 | ],
46 | title: 'DOWNTOWN DUBAI PENTHOUSE',
47 | details: 'PENTHOUSE 3 BED 13,00 SQ.FT READY',
48 | AED: '144,220,00',
49 | },
50 | {
51 | items: [
52 | { img: "/images/villa/02.png" },
53 | { img: "/images/villa/02.png" },
54 | { img: "/images/villa/02.png" },
55 | { img: "/images/villa/02.png" },
56 | ],
57 | title: 'DOWNTOWN DUBAI PENTHOUSE',
58 | details: 'PENTHOUSE 3 BED 13,00 SQ.FT READY',
59 | AED: '144,220,00',
60 | },
61 | ]
62 |
63 | export const FeaturedVillas = () => {
64 | return (
65 |
69 |
70 |
71 | Featured Apartments
76 |
77 |
78 |
79 | Dilatations International realty is excited to present the listing for this bespoke 4-bedroom Garden Homes villa on Frond N, Plam Jumeirah,
82 | As well as being positioned on one of the exclusive Fronds of Plam Jumeirah, this exceptional Garden Homes villa has been expettly designed and fully customised to crete a dram luxury property.
85 |
86 |
87 |
88 |
89 |
90 | )
91 | }
--------------------------------------------------------------------------------
/components/product/Features.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import Text30 from "../typegraphy/Text30";
3 | import ProductTitle from "./Title";
4 | import { roboto } from "../font/font";
5 | const FeaturesSection = () => {
6 | return (
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | View all
32 |
33 |
34 |
35 |
36 |
42 |
43 |
44 |
45 |
46 | Atlantis The Royal Residences
47 |
48 |
49 | The Crescent Palm Jumeirah
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | );
58 | }
59 |
60 | export default FeaturesSection;
--------------------------------------------------------------------------------
/pages/product/index.js:
--------------------------------------------------------------------------------
1 | import Description from "@/components/product/Description";
2 | import FeaturesSection from "@/components/product/Features"
3 | import ListingAgent from "@/components/product/ListingAgent"
4 | import StayBiling from "@/components/staybil/StaylBiling";
5 | import SimilarProperty from "@/components/product/SimilarProperty";
6 | import BorderBottom from "@/components/border/BorderBottom";
7 | const ProductPage = () => {
8 | return (
9 |
10 |
11 |
12 |
13 |
14 | Downtown Dubai Penthouse
15 |
16 |
17 | Exclusive . Ready . Emirates Hills
18 |
19 |
20 |
21 | show more
22 |
23 |
24 | Video tour
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | AED 2,600,000
33 |
34 |
35 | 6 beds 6 baths 13,000 sq. ft
36 |
37 |
38 |
39 | Book a viewing
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | );
54 | }
55 |
56 | export default ProductPage;
--------------------------------------------------------------------------------
/components/home/DowntownDubai.js:
--------------------------------------------------------------------------------
1 | import { palette } from "@/themes"
2 | import { Box, Button, Grid, Typography } from "@mui/material"
3 | import DCarousel from "../carousel/3dCarousel"
4 | import { useState } from "react"
5 |
6 | const data = [
7 | { img: '/images/Header.png', concept: 651, number: '01' },
8 | { img: '/images/03.png', concept: 216, number: 'PENTHOUSE' },
9 | { img: '/images/Header.png', concept: 651, number: 'PENTHOUSE' },
10 | { img: '/images/Header.png', concept: 621, number: 'PENTHOUSE' },
11 | { img: '/images/Header.png', concept: 651, number: 'PENTHOUSE' },
12 | ]
13 |
14 | const items = [
15 | { title: 'SQ.FT', text: '13,000 SQ.FT' },
16 | { title: 'PRICE', text: '144,220 AED' },
17 | { title: 'BATHROOMS', text: '4 ROOMS' },
18 | { title: 'BEDROOMS', text: '8 ROOMS' },
19 | ]
20 |
21 | export const DowntownDubai = () => {
22 | const [ selectedBg, setSelectedBg ] = useState(0)
23 |
24 | return (
25 |
39 |
43 |
44 |
45 | Modern Architecture
49 |
55 | DOWNTOWN DUBAI VILLA
56 |
57 |
65 | VIEW DETAILS
66 |
67 |
71 | {
72 | items.map((item, i) => (
73 |
74 | {item.title}
75 | {item.text}
78 |
79 | ))
80 | }
81 |
82 |
83 |
84 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | )
98 | }
--------------------------------------------------------------------------------
/components/feature/FeatureApart.js:
--------------------------------------------------------------------------------
1 | import BorderBottom from "../border/BorderBottom";
2 | import Carousel from "../carousel/Carousel";
3 | import { Text16,Text24,Text36 } from "../typegraphy";
4 |
5 |
6 | const FeatureApart = () => {
7 | const data = [
8 | {
9 | id: 1,
10 | children: [
11 | {
12 | title: "Property",
13 | img: '/images/feature/03.png'
14 | },
15 | {
16 | title: "Property",
17 | img: '/images/feature/03.png'
18 | },
19 | {
20 | title: "Property",
21 | img: '/images/feature/03.png'
22 | }
23 | ],
24 | title: "Palm Jumeirah",
25 | description: 'Garden Homes',
26 | area: "15,500 sq. ft.",
27 | furniture: 'Villa | 5 beds'
28 | },
29 | {
30 | id: 1,
31 | children: [
32 | {
33 | title: "Villa",
34 | img: '/images/feature/03.png'
35 | },
36 | {
37 | title: "Villa",
38 | img: '/images/feature/03.png'
39 | },
40 | {
41 | title: "Villa",
42 | img: '/images/feature/03.png'
43 | }
44 | ],
45 | title: "Jumeirah",
46 | description: 'Umm Suqeim',
47 | area: "15,500 sq. ft.",
48 | furniture: 'Villa | 5 beds'
49 | },
50 | {
51 | id: 1,
52 | children: [
53 | {
54 | title: "Property",
55 | img: '/images/feature/03.png'
56 | },
57 | {
58 | title: "Property",
59 | img: '/images/feature/03.png'
60 | },
61 | {
62 | title: "Property",
63 | img: '/images/feature/03.png'
64 | }
65 | ],
66 | title: "Dubai Hills",
67 | description: 'Fairway Vistas',
68 | area: "13,862 sq. ft.",
69 | furniture: 'Villa | 5 beds'
70 | }
71 | ]
72 | return (
73 |
74 |
75 |
76 | {
77 | data.map((items, index) => (
78 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 | ))
96 | }
97 |
98 |
99 |
100 | );
101 | }
102 |
103 | export default FeatureApart;
--------------------------------------------------------------------------------
/pages/home/index.js:
--------------------------------------------------------------------------------
1 | import { Box, Grid, Typography } from '@mui/material'
2 | import { palette } from '@/themes'
3 | import {
4 | Header,
5 | FeaturedApartments,
6 | PopularAreas,
7 | DowntownDubai,
8 | FeaturedVillas,
9 | OurJournals,
10 | OffPlanProperties,
11 | Subscribe,
12 | } from '../../components/home'
13 | import Footer from '@/components/footer/Footer'
14 | import { useState } from 'react'
15 |
16 | const villas = [
17 | { text: "Editor's picks", value: "picks" },
18 | { text: "New to market", value: "market" },
19 | { text: "Price reductions", value: "price" },
20 | ]
21 |
22 | export default function HomePage () {
23 | const [ properties, setProperties ] = useState('apartments')
24 | const [ villasStatus, setVillasStatus ] = useState(0);
25 |
26 | return (
27 |
30 |
31 |
36 | Featured Properties
40 |
41 | setProperties('apartments')}
50 | >Apartments
51 | setProperties('popular')}
60 | >Popular Areas
61 |
62 | { properties === 'apartments' && }
63 | { properties === 'popular' && }
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
75 | Featured Villas
79 |
80 | {
81 | villas.map((item, i) => (
82 | setVillasStatus(i)}
93 | >{item.text}
94 | ))
95 | }
96 |
97 |
98 |
99 |
100 |
104 | Our Journals
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | )
116 | }
--------------------------------------------------------------------------------
/components/Journal/Journal.js:
--------------------------------------------------------------------------------
1 | import BorderBottom from "../border/BorderBottom";
2 | import DCarousel from "../carousel/3dCarousel";
3 | import { Text14, Text16, Text36 } from "../typegraphy";
4 |
5 | const Journal = () => {
6 | const data =[
7 | {
8 | id:1,
9 | img:"/images/jour/01.png"
10 | },
11 | {
12 | id:2,
13 | img:"/images/jour/01.png"
14 | },
15 | {
16 | id:3,
17 | img:"/images/jour/01.png"
18 | },
19 | {
20 | id:4,
21 | img:"/images/jour/01.png"
22 | }
23 | ]
24 | return (
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
41 |
46 |
47 |
48 |
54 |
60 |
61 |
62 |
67 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | );
85 | }
86 |
87 | export default Journal;
--------------------------------------------------------------------------------
/pages/index.js:
--------------------------------------------------------------------------------
1 | import { Box, Grid, Typography } from '@mui/material'
2 | import { palette } from '@/themes'
3 | import {
4 | Header,
5 | FeaturedApartments,
6 | PopularAreas,
7 | DowntownDubai,
8 | FeaturedVillas,
9 | OurJournals,
10 | OffPlanProperties,
11 | Subscribe,
12 | } from '../components/home'
13 | import Footer from '@/components/footer/Footer'
14 | import { useState } from 'react'
15 |
16 | const villas = [
17 | { text: "Editor's picks", value: "picks" },
18 | { text: "New to market", value: "market" },
19 | { text: "Price reductions", value: "price" },
20 | ]
21 |
22 |
23 | export default function Home() {
24 | const [ properties, setProperties ] = useState('apartments')
25 | const [ villasStatus, setVillasStatus ] = useState(0);
26 |
27 | return (
28 |
31 |
32 |
37 | Featured Properties
42 |
43 | setProperties('apartments')}
52 | >Apartments
53 | setProperties('popular')}
62 | >Popular Areas
63 |
64 | { properties === 'apartments' && }
65 | { properties === 'popular' && }
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
77 | Featured Villas
82 |
83 | {
84 | villas.map((item, i) => (
85 | setVillasStatus(i)}
96 | >{item.text}
97 | ))
98 | }
99 |
100 |
101 |
102 |
103 |
108 | Our Journals
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 | )
121 | }
122 |
--------------------------------------------------------------------------------
/components/header/Header.js:
--------------------------------------------------------------------------------
1 | import data from "@/components/header/Header.item";
2 | import mobileData from "@/components/header/MobileHeader.item"
3 | import Link from "next/link";
4 | import { MyListbox } from "../dropdown/DropDownBox";
5 | import { useRouter } from "next/router";
6 | import Navbar from "./Navbar";
7 | import Image from "next/image";
8 | import { roboto } from "../font/font";
9 | import { useEffect, useState } from "react";
10 | import menuIcon from "@/public/images/menu.svg";
11 | const Header = () => {
12 | const router = useRouter();
13 | const [menuOpen, setMenuOpen] = useState(false)
14 | console.log("menuOpenmenuOpen", menuOpen)
15 | const item = [
16 | {
17 | title: "AED"
18 | },
19 | {
20 | title: "USD"
21 | },
22 | {
23 | title: "EUR"
24 | }
25 | ];
26 | const [selected, setSelected] = useState(item[0]);
27 | const [previousStep, setPreviousStep] = useState(1);
28 | const [bg,setBg] = useState("transparent")
29 | const listenScrollEvent =()=>{
30 | if(window.scrollY >300){
31 | setBg("black")
32 | } else{
33 | setBg("transparent")
34 | }
35 | }
36 | useEffect(()=>{
37 | window.addEventListener('scroll',listenScrollEvent)
38 | },[]);
39 | const handleClose =()=>{
40 | setMenuOpen(false);
41 | setPreviousStep(1)
42 | }
43 | let classname = router.pathname === "/product" ?`bg-${bg}`:'bg-black'
44 | return (
45 |
46 |
47 |
48 | Delattio
49 |
50 |
51 |
52 | {
53 | data.map((item, index) => (
54 |
55 |
60 | {item.label}
61 |
62 | {router.pathname === item.path && }
63 |
64 | ))
65 | }
66 |
67 |
68 |
73 |
75 | Sign In
76 |
77 |
78 | setMenuOpen(!menuOpen)}
80 | className="flex xl:hidden items-center justify-center border-none outline-none">
81 |
82 |
83 | handleClose()}
92 | />
93 |
94 | );
95 | }
96 |
97 | export default Header;
--------------------------------------------------------------------------------
/components/popup/PriceModal.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import ReactSlider from "react-slider";
3 | import { roboto } from "../font/font";
4 | const PriceModal = () => {
5 | const [currentValue, setCurrentValue] = useState(100000);
6 | const [max, setMax] = useState("");
7 | const [min, setMin] = useState("");
8 |
9 | const handleRangeValue =(val)=>{
10 | setCurrentValue(val);
11 | }
12 | return (
13 |
14 |
15 |
16 |
setMin(e.target.value)}
20 | className={`border-x border-y border-solid border-[#2d2d2d] bg-transparent p-1 appearance-none text-[10px] leading-6 text-white font-light ${roboto.className} w-full`}
21 | placeholder="MIN"
22 | />
23 |
24 |
25 | 100,000
26 |
27 |
28 | AED
29 |
30 |
31 |
32 |
33 |
setMax(e.target.value)}
37 | className={`border-x border-y border-solid border-[#2d2d2d] bg-transparent p-1 appearance-none text-[10px] leading-6 text-white font-light ${roboto.className} w-full`}
38 | placeholder="MAX"
39 | />
40 |
41 |
42 | 500,000,000
43 |
44 |
45 | AED
46 |
47 |
48 |
49 |
50 |
51 |
52 |
100000?"bg-white":"bg-black"} bg-black relative`}
54 | trackClassName="customSlider-track h-0.5 bg-gray-200 bg-white w-3.5 h-3.5 -top-1.5 flex rounded-full"
55 | thumbClassName="customSlider-thumb bg-white w-3.5 h-3.5 flex rounded-full -top-1.5"
56 | min={100000}
57 | max={500000000}
58 | value={currentValue}
59 | onChange={(value) => handleRangeValue(value)}
60 | />
61 |
62 |
63 | 100,000 AED
64 |
65 |
66 | 500,000,000 AED
67 |
68 |
69 |
70 |
71 | cancel
72 |
73 |
74 | apply changes
75 |
76 |
77 |
78 | );
79 | }
80 |
81 | export default PriceModal;
--------------------------------------------------------------------------------
/components/header/MobileHeader.item.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | path:'/home',
4 | label:'Home',
5 | },
6 | {
7 | path:'/buy',
8 | label:'Buy',
9 | children:[
10 | {
11 | path:"/search",
12 | label:"Villa"
13 | },
14 | {
15 | path:"/search",
16 | label:"Apartments"
17 | },
18 |
19 | {
20 | path:"/search",
21 | label:"Penthouse"
22 | },
23 | {
24 | path:"/search",
25 | label:"Town house"
26 | },
27 | {
28 | path:"/search",
29 | label:"Plot"
30 | },
31 | {
32 | path:"/search",
33 | label:"Loft & Duplex"
34 | },
35 | {
36 | path:"/search",
37 | label:"Office"
38 | },
39 |
40 | ]
41 | },
42 | {
43 | path:'/sell',
44 | label:'Sell',
45 |
46 | },
47 | {
48 | path:'/product',
49 | label:'Rent',
50 | children:[
51 | {
52 | path:"/search",
53 | label:"Villa"
54 | },
55 | {
56 | path:"/search",
57 | label:"Apartments"
58 | },
59 |
60 | {
61 | path:"/search",
62 | label:"Penthouse"
63 | },
64 | {
65 | path:"/search",
66 | label:"Town house"
67 | },
68 | {
69 | path:"/search",
70 | label:"Plot"
71 | },
72 | {
73 | path:"/search",
74 | label:"Loft & Duplex"
75 | },
76 | {
77 | path:"/search",
78 | label:"Office"
79 | },
80 |
81 | ]
82 | },
83 | {
84 | path:'/property',
85 | label:'Off Plan | Properties',
86 | children:[
87 | {
88 | path:"/search",
89 | label:"Villa"
90 | },
91 | {
92 | path:"/search",
93 | label:"Apartments"
94 | },
95 |
96 | {
97 | path:"/search",
98 | label:"Penthouse"
99 | },
100 | {
101 | path:"/search",
102 | label:"Town house"
103 | },
104 | {
105 | path:"/search",
106 | label:"Plot"
107 | },
108 | {
109 | path:"/search",
110 | label:"Loft & Duplex"
111 | },
112 | {
113 | path:"/search",
114 | label:"Office"
115 | },
116 |
117 | ]
118 | },
119 | {
120 | path:'/location',
121 | label:'Location',
122 | children:[
123 | {
124 | path:"/search",
125 | label:"Palm Jumeirah Apartments"
126 | },
127 | {
128 | path:"/search",
129 | label:"Palm Jumeirah Villas"
130 | },
131 | {
132 | path:"/search",
133 | label:"Dubai Hills Villas"
134 | },
135 | {
136 | path:"/search",
137 | label:"Downtown Dubai Apartments"
138 | },
139 | {
140 | path:"/search",
141 | label:"Emirates Hills Villas "
142 | },
143 | {
144 | path:"/search",
145 | label:"Jumeirah Apartments"
146 | },
147 | {
148 | path:"/search",
149 | label:"Dubai Marina Apartments"
150 | },
151 | {
152 | path:"/search",
153 | label:"JBR Apartments"
154 | },
155 |
156 | ]
157 | },
158 | {
159 | path:'/blog',
160 | label:'Our Journal',
161 | },
162 | {
163 | path:'/contact',
164 | label:'Contact Us',
165 | }
166 | ]
--------------------------------------------------------------------------------
/assets/fonts/Cormorant_Garamond/OFL.txt:
--------------------------------------------------------------------------------
1 | Copyright 2015 the Cormorant Project Authors (github.com/CatharsisFonts/Cormorant)
2 |
3 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 | This license is copied below, and is also available with a FAQ at:
5 | http://scripts.sil.org/OFL
6 |
7 |
8 | -----------------------------------------------------------
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | -----------------------------------------------------------
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide
14 | development of collaborative font projects, to support the font creation
15 | efforts of academic and linguistic communities, and to provide a free and
16 | open framework in which fonts may be shared and improved in partnership
17 | with others.
18 |
19 | The OFL allows the licensed fonts to be used, studied, modified and
20 | redistributed freely as long as they are not sold by themselves. The
21 | fonts, including any derivative works, can be bundled, embedded,
22 | redistributed and/or sold with any software provided that any reserved
23 | names are not used by derivative works. The fonts and derivatives,
24 | however, cannot be released under any other type of license. The
25 | requirement for fonts to remain under this license does not apply
26 | to any document created using the fonts or their derivatives.
27 |
28 | DEFINITIONS
29 | "Font Software" refers to the set of files released by the Copyright
30 | Holder(s) under this license and clearly marked as such. This may
31 | include source files, build scripts and documentation.
32 |
33 | "Reserved Font Name" refers to any names specified as such after the
34 | copyright statement(s).
35 |
36 | "Original Version" refers to the collection of Font Software components as
37 | distributed by the Copyright Holder(s).
38 |
39 | "Modified Version" refers to any derivative made by adding to, deleting,
40 | or substituting -- in part or in whole -- any of the components of the
41 | Original Version, by changing formats or by porting the Font Software to a
42 | new environment.
43 |
44 | "Author" refers to any designer, engineer, programmer, technical
45 | writer or other person who contributed to the Font Software.
46 |
47 | PERMISSION & CONDITIONS
48 | Permission is hereby granted, free of charge, to any person obtaining
49 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 | redistribute, and sell modified and unmodified copies of the Font
51 | Software, subject to the following conditions:
52 |
53 | 1) Neither the Font Software nor any of its individual components,
54 | in Original or Modified Versions, may be sold by itself.
55 |
56 | 2) Original or Modified Versions of the Font Software may be bundled,
57 | redistributed and/or sold with any software, provided that each copy
58 | contains the above copyright notice and this license. These can be
59 | included either as stand-alone text files, human-readable headers or
60 | in the appropriate machine-readable metadata fields within text or
61 | binary files as long as those fields can be easily viewed by the user.
62 |
63 | 3) No Modified Version of the Font Software may use the Reserved Font
64 | Name(s) unless explicit written permission is granted by the corresponding
65 | Copyright Holder. This restriction only applies to the primary font name as
66 | presented to the users.
67 |
68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 | Software shall not be used to promote, endorse or advertise any
70 | Modified Version, except to acknowledge the contribution(s) of the
71 | Copyright Holder(s) and the Author(s) or with their explicit written
72 | permission.
73 |
74 | 5) The Font Software, modified or unmodified, in part or in whole,
75 | must be distributed entirely under this license, and must not be
76 | distributed under any other license. The requirement for fonts to
77 | remain under this license does not apply to any document created
78 | using the Font Software.
79 |
80 | TERMINATION
81 | This license becomes null and void if any of the above conditions are
82 | not met.
83 |
84 | DISCLAIMER
85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 | OTHER DEALINGS IN THE FONT SOFTWARE.
94 |
--------------------------------------------------------------------------------
/components/carousel/CarouselArray.js:
--------------------------------------------------------------------------------
1 | import React ,{useState} from "react";
2 | import Slider from "react-slick";
3 | import { Box, Typography, Button } from "@mui/material";
4 |
5 | import Carousel from "./Carousel";
6 | import { palette } from "@/themes";
7 |
8 | const CarouselArray = ({data, title, status}) => {
9 | const [imgIndex,setImgIndex] = useState(0)
10 |
11 | const feSettings = {
12 | className: 'center',
13 | centerMode: true,
14 | infinite: true,
15 | centerPadding: '485px',
16 | slidesToShow: 1,
17 | speed: 300,
18 | dotsClass: "slick-dots",
19 | beforeChange: (current, next) => setImgIndex(next),
20 | arrows:false,
21 | responsive:[
22 | {
23 | breakpoint: 1920,
24 | settings: {
25 | className: 'center',
26 | centerMode: true,
27 | slidesToShow: 1,
28 | slidesToShow: 1,
29 | centerPadding: '515px',
30 | }
31 | },
32 | {
33 | breakpoint: 1550,
34 | settings: {
35 | className: 'center',
36 | centerMode: true,
37 | slidesToShow: 1,
38 | slidesToShow: 1,
39 | centerPadding: '470px',
40 | }
41 | },
42 | {
43 | breakpoint: 1440,
44 | settings: {
45 | slidesToShow: 1,
46 | centerPadding: '475px',
47 | }
48 | },
49 | {
50 | breakpoint: 1366,
51 | settings: {
52 | slidesToShow: 1,
53 | centerPadding: '335px',
54 | }
55 | },
56 | {
57 | breakpoint: 1280,
58 | settings: {
59 | slidesToShow: 1,
60 | centerPadding: '325px',
61 | }
62 | },
63 | {
64 | breakpoint: 1024,
65 | settings: {
66 | slidesToShow: 1,
67 | centerPadding: '285px',
68 | }
69 | },
70 | {
71 | breakpoint: 768,
72 | settings: {
73 | slidesToShow: 1,
74 | centerPadding: '185px',
75 | }
76 | },
77 | {
78 | breakpoint: 600,
79 | settings: {
80 | slidesToShow: 1,
81 | centerPadding: '20px',
82 | initialSlide: 1,
83 | }
84 | }
85 | ]
86 | };
87 |
88 | const className = "w-full object-cover";
89 | const slideClass = "relative";
90 |
91 | return (
92 |
93 |
94 | {data.map((item, idx) => (
95 |
96 |
97 |
98 |
99 |
104 | Featured
112 |
113 |
114 | {item.title}
118 | {item.details}
121 |
122 | AED
125 | {item.AED}
129 |
130 |
131 |
132 | ))}
133 |
134 |
135 | );
136 | }
137 |
138 | export default CarouselArray;
--------------------------------------------------------------------------------
/components/header/Navbar.js:
--------------------------------------------------------------------------------
1 | import { useState, useRef, useCallback, useEffect } from "react";
2 | import Link from "next/link";
3 | import Image from "next/image";
4 | import { MyListbox } from "../dropdown/DropDownBox";
5 | import MenuItems from "./MenuItem";
6 | import { roboto } from "../font/font";
7 | import { CloseSvg } from "../popup/AdvancedFilter";
8 | import downSvg from "@/public/images/angle-down-solid.svg"
9 | const Navbar = ({
10 | data,
11 | item,
12 | selected,
13 | setSelected,
14 | open,
15 | close,
16 | previousStep,
17 | setPreviousStep
18 | }) => {
19 | let ref = useRef();
20 | const [childrenItem, setChildrenItem] = useState([]);
21 | const [animation, setAnimation] = useState(false)
22 | const handleShowChildren = useCallback((item) => {
23 | setPreviousStep(prev => prev + 1);
24 | setAnimation(true)
25 | setChildrenItem([...item])
26 | }, [childrenItem]);
27 | const handlePrevious = useCallback((item) => {
28 | setAnimation(false)
29 | setPreviousStep(prev => prev - 1)
30 | if (previousStep === 2) {
31 | setChildrenItem(data)
32 | } else if (previousStep === 3) {
33 | let data = data.filter((item) => {
34 | if (item.children?.length > 0) {
35 | return item.children
36 | }
37 | })
38 | setChildrenItem(data[0].children)
39 | }
40 | }, [childrenItem])
41 | useEffect(() => {
42 | if (open) {
43 | document.body.style.overflow = 'hidden';
44 | return () => document.body.style.overflow = 'unset';
45 | }
46 | }, [open])
47 | return (
48 | <>
49 | {open &&
50 |
51 |
52 |
53 | Delattio
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | {previousStep > 1 &&
handlePrevious()}
66 | >
67 |
73 | Back
74 |
}
75 |
76 |
81 |
82 |
83 |
84 |
85 |
86 | 1 ? childrenItem : data}
88 | close={close}
89 | handleShowChildren={handleShowChildren}
90 | />
91 |
92 |
93 |
94 |
95 |
96 |
98 | {previousStep > 1 ? "View All" : "Sign In"}
99 |
100 |
101 |
}
102 | >
103 | );
104 | }
105 |
106 | export default Navbar;
107 |
108 |
--------------------------------------------------------------------------------
/components/product/ListingAgent.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { Text24 } from "../typegraphy";
3 | import ProductTitle from "./Title";
4 | import userPng from "@/public/images/product/user.png";
5 | import phoneSvg from "@/public/images/product/phone.svg";
6 | import whatsappSvg from "@/public/images/product/whatsapp.svg"
7 | const ListingAgent = () => {
8 | return (
9 |
10 |
11 |
12 |
20 |
21 |
22 |
23 |
24 |
25 | Languages: English, Russian - RERA License Number : 93740
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | Mark is a key member of our Private Client Office, specializing in some of the finest homes available on Palm Jumeirah, among other prime areas of Dubai. He is a true superstar in the field of real estate and has developed a high level of expertise when it comes to high-end properties. He understands the market quite well, keeping an eye on the latest trends and happenings so he can deliver the most well-informed and reliable advisory.
39 |
40 |
41 | Contact Agent
42 |
43 |
44 |
45 |
46 |
47 | Mark is a key member of our Private Client Office, specializing in some of the finest homes available on Palm Jumeirah, among other prime areas of Dubai. He is a true superstar in the field of real estate and has developed a high level of expertise when it comes to high-end properties. He understands the market quite well, keeping an eye on the latest trends and happenings so he can deliver the most well-informed and reliable advisory.
48 |
49 |
50 |
51 | Contact Agent
52 |
53 |
54 |
55 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | );
69 | }
70 |
71 | export default ListingAgent;
--------------------------------------------------------------------------------
/components/carousel/Carousel.js:
--------------------------------------------------------------------------------
1 | import React, { useRef, useState, useEffect } from "react";
2 | import Slider from "react-slick";
3 | import { roboto } from "../font/font";
4 |
5 | const Carousel = ({ data, title }) => {
6 | const mainSliderRef = useRef();
7 | const thumbnailSliderRef = useRef();
8 | const [centerIndex, setCenterIndex] = useState(0);
9 | const [nextId, setNextId] = useState(1);
10 |
11 | const settings = {
12 | dots: false,
13 | infinite: true,
14 | speed: 500,
15 | slidesToShow: 1,
16 | slidesToScroll: 1,
17 | dotsClass: "button__bar slick-dots",
18 | arrows: false,
19 | beforeChange: (current, next) => {
20 | setNextId(nextId + 1);
21 | thumbnailSliderRef.current.slickGoTo(nextId);
22 | },
23 | appendDots: (dots) => {
24 | return (
25 |
28 | );
29 | },
30 | };
31 |
32 | const settings1 = {
33 | dots: false,
34 | infinite: true,
35 | speed: 500,
36 | slidesToShow: 1,
37 | slidesToScroll: 1,
38 | draggable: false,
39 | swipe: false,
40 | dotsClass: "button__bar slick-dots",
41 | arrows: true,
42 | beforeChange: (current, next) => {
43 | setNextId(nextId + 1);
44 | thumbnailSliderRef.current.slickGoTo(nextId);
45 | },
46 | appendDots: (dots) => {
47 | return (
48 |
51 | );
52 | },
53 | };
54 |
55 | const feSettings = {
56 | infinite: true,
57 | lazyLoad: true,
58 | speed: 300,
59 | slidesToShow: 5,
60 | centerMode: true,
61 | centerPadding: 0,
62 | className: "center",
63 | arrows: false,
64 | beforeChange: (current, next) => {
65 | setCenterIndex(next);
66 | },
67 | };
68 |
69 | const getScaleFactor = (index, centerIndex, totalItems) => {
70 | const distanceFromCenter = Math.min(
71 | Math.abs(centerIndex - index),
72 | totalItems - Math.abs(centerIndex - index)
73 | );
74 | const scaleFactor = 1 - distanceFromCenter * 0.2;
75 | return Math.max(scaleFactor, 0.5);
76 | };
77 |
78 | const getItemStyle = (index, centerIndex, totalItems) => {
79 | const scaleFactor = getScaleFactor(index, centerIndex, totalItems);
80 | return {
81 | transform: `scale(${scaleFactor})`,
82 | };
83 | };
84 |
85 | return (
86 |
87 |
88 | {data.map((item, index) => (
89 |
90 | {title === "banner" && (
91 |
92 |
95 | New Development
96 |
97 |
100 | Baccarat Residences
101 |
102 |
105 | Downtown Dubai
106 |
107 |
110 | Inquire Now
111 |
112 |
113 | )}
114 | {title === "feature" && (
115 |
116 | {item.title}
117 |
118 | )}
119 |
132 |
133 | ))}
134 |
135 |
136 |
137 | {new Array(100).fill().map((item, idx) => (
138 |
139 |
142 |
143 |
144 | ))}
145 |
146 |
147 |
148 | );
149 | };
150 |
151 | export default Carousel;
152 |
--------------------------------------------------------------------------------
/components/search/SearchBar.js:
--------------------------------------------------------------------------------
1 | import { Menu, Transition } from '@headlessui/react'
2 | import { Fragment, useEffect, useRef, useState } from 'react'
3 | import { Text14, Text16 } from '../typegraphy';
4 | import CustomDropDown from '../dropdown/Dropdown';
5 | import { roboto } from '../font/font';
6 | const SearchBar = () => {
7 | const apartData =[
8 | {
9 | id:1,
10 | title:"something"
11 | },
12 | {
13 | id:2,
14 | title:"something"
15 | }
16 | ]
17 | return (
18 |
19 |
20 |
21 |
27 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
45 |
46 |
47 |
56 |
57 |
58 |
59 | {({ active }) => (
60 |
64 |
65 | Edit
66 |
67 | )}
68 |
69 |
70 | {({ active }) => (
71 |
75 |
76 | Duplicate
77 |
78 | )}
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | );
93 | }
94 |
95 | export default SearchBar;
96 |
97 | export function SearchIcon() {
98 | return (
99 |
105 |
110 |
111 |
112 | )
113 | }
114 |
--------------------------------------------------------------------------------
/components/footer/Footer.js:
--------------------------------------------------------------------------------
1 | import Link from "next/link";
2 | import { Text14, Text18 } from "../typegraphy";
3 | import data from "@/components/footer/footer.item";
4 | import facebookSvg from "@/public/images/facebook.svg";
5 | import linkedinSVg from "@/public/images/linkedin.svg";
6 | import whatsappSvg from "@/public/images/contact/whatsapp.svg";
7 | import phoneSvg from "@/public/images/contact/phone-solid.svg"
8 | import Image from "next/image";
9 | import { roboto } from "../font/font";
10 | const Footer = () => {
11 |
12 | return (
13 |
14 |
15 |
16 |
17 | Delattio
18 |
19 |
24 |
38 |
39 |
40 | {
41 | data.map((item, index) => (
42 |
43 |
44 | {item.label}
45 |
46 |
47 | {
48 | item.children.map((items, index) => (
49 |
50 |
51 |
52 | ))
53 | }
54 |
55 |
56 | ))
57 | }
58 |
59 |
60 |
61 |
62 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | +155 89554 8855
76 |
77 |
78 |
79 |
80 |
81 | +0123 4567 8910
82 |
83 |
84 |
85 |
86 |
87 | Request Call Back
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 | );
99 | }
100 |
101 | export default Footer;
--------------------------------------------------------------------------------
/components/home/Header.js:
--------------------------------------------------------------------------------
1 | import { palette } from "@/themes"
2 | import { Box, Button, Grid, Typography, OutlinedInput } from "@mui/material"
3 | import SearchIcon from '@mui/icons-material/Search';
4 |
5 | import Carousel from "../carousel/Carousel";
6 |
7 | import icon1 from '../../assets/images/Layer 41.png'
8 | import icon2 from '../../assets/images/Layer 42.png'
9 | import icon3 from '../../assets/images/Layer 43.png'
10 |
11 | const contactInfos = [
12 | { name: 'Area', info: 'Seaside Hills', icon: icon1 },
13 | { name: 'Location', info: 'Boulevard, MTC+X0', icon: icon2 },
14 | { name: 'Location', info: 'Boulevard, MTC+X0', icon: icon3 },
15 | ]
16 |
17 | const header_data =[
18 | {
19 | img:'/images/Header.png',
20 | },
21 | {
22 | img:'/images/Header.png',
23 | },
24 | {
25 | img:'/images/Header.png',
26 | }
27 | ]
28 |
29 | export const Header = () => {
30 | return (
31 |
37 |
38 |
42 |
46 |
59 |
68 |
74 |
78 |
79 |
80 |
81 |
82 |
87 | Dubai dominates as top choice for UHNW primary residents
88 |
89 |
97 | Learn More
98 |
99 |
100 |
103 |
108 | {
109 | contactInfos.map((item, i) => (
110 |
113 |
116 |
117 |
120 | {item.name}
121 |
122 |
133 |
134 |
135 | ))
136 | }
137 |
138 | Show More
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 | )
151 | }
--------------------------------------------------------------------------------
/components/carousel/SimilarCarousel.js:
--------------------------------------------------------------------------------
1 | import React,{useRef,useState} from "react";
2 | import Slider from "react-slick";
3 | import { Box, Typography } from "@mui/material";
4 |
5 | const SimilarCarousel = ({data, title}) => {
6 | const [current, setCurrent] = useState(0);
7 | const slider = useRef()
8 | const settings = {
9 | dots: false,
10 | infinite: true,
11 | speed: 500,
12 | slidesToShow: 3,
13 | slidesToScroll: 1,
14 | arrows:false,
15 | autoplay: false,
16 | dotsClass: "similar__bar slick-dots",
17 | responsive:[
18 | {
19 | breakpoint: 1920,
20 | settings: {
21 | slidesToShow: 3,
22 | }
23 | },
24 | {
25 | breakpoint: 1280,
26 | settings: {
27 | slidesToShow: 3,
28 | }
29 | },
30 | {
31 | breakpoint: 1024,
32 | settings: {
33 | slidesToShow: 2,
34 | }
35 | },
36 | {
37 | breakpoint:768,
38 | settings: {
39 | slidesToShow: 1,
40 | }
41 | },
42 | {
43 | breakpoint: 600,
44 | settings: {
45 | slidesToShow: 1,
46 | }
47 | }
48 | ],
49 | beforeChange:(prevIndex, newIndex)=>{
50 | setCurrent(newIndex)
51 | },
52 |
53 | };
54 |
55 | const settings1 = {
56 | dots: false,
57 | infinite: true,
58 | speed: 500,
59 | slidesToShow: 1,
60 | slidesToScroll: 1,
61 | arrows:false,
62 | autoplay: false,
63 | responsive:[
64 | {
65 | breakpoint: 1920,
66 | settings: {
67 | slidesToShow: 3,
68 | }
69 | },
70 | {
71 | breakpoint: 1280,
72 | settings: {
73 | slidesToShow: 3,
74 | }
75 | },
76 | {
77 | breakpoint: 1024,
78 | settings: {
79 | slidesToShow: 2,
80 | }
81 | },
82 | {
83 | breakpoint:768,
84 | settings: {
85 | slidesToShow: 1,
86 | }
87 | },
88 | {
89 | breakpoint: 600,
90 | settings: {
91 | slidesToShow: 1.1,
92 | }
93 | }
94 | ],
95 | beforeChange:(prevIndex, newIndex)=>{
96 | setCurrent(newIndex)
97 | },
98 |
99 | };
100 |
101 | return (
102 |
103 |
104 | {
105 | data.map((item,index)=>(
106 |
109 | {
110 | title === 'similarProperty' &&
111 |
115 | }
116 |
125 | {
126 | title === 'similarProperty' &&
127 |
128 |
129 | Downtown Dubai Penthouse
130 |
131 |
132 | Downtown Dubai Penthouse
133 |
134 |
135 | }
136 | {
137 | title === 'offPlan' &&
138 |
148 | {item.text}
149 |
150 | }
151 | {title === 'ourJournal' &&
152 |
153 | {item.title}
158 | {item.details}
164 | {item.portfolio}
167 | {item.date}
168 |
169 | }
170 |
171 | ))
172 | }
173 |
174 |
175 | );
176 | }
177 |
178 | export default SimilarCarousel;
--------------------------------------------------------------------------------
/styles/globals.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap');
2 | @import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500;600;700&display=swap');
3 |
4 | @tailwind base;
5 | @tailwind components;
6 | @tailwind utilities;
7 |
8 | @import "slick-carousel/slick/slick.css";
9 | @import "slick-carousel/slick/slick-theme.css";
10 | @layer base {
11 | input[type="number"]::-webkit-inner-spin-button,
12 | input[type="number"]::-webkit-outer-spin-button {
13 | -webkit-appearance: none;
14 | margin: 0;
15 | }
16 | }
17 |
18 | @font-face {
19 | font-family: "MYRIADPRO";
20 | font-style: normal;
21 | font-weight: 400;
22 | src: url('/fonts/MYRIADPRO-REGULAR.OTF') format("opentype");
23 | font-display: swap;
24 | }
25 |
26 | @font-face {
27 | font-family: 'Cormorant Garamond';
28 | src: url(../assets/fonts/Cormorant_Garamond/CormorantGaramond-SemiBold.ttf) format('Cormorant Garamond');
29 | /* other formats include: 'woff2', 'truetype, 'opentype',
30 | 'embedded-opentype', and 'svg' */
31 | }
32 |
33 |
34 | .video-tour {
35 | z-index: 1;
36 | }
37 | .video-tour:after {
38 | position: absolute;
39 | content: "";
40 | width: 100%;
41 | height: 0;
42 | bottom: 0;
43 | left: 0;
44 | z-index: -1;
45 | background: #000;
46 | transition: all 0.3s ease;
47 | border-radius: 24px;
48 | border:none;
49 | }
50 | .video-tour:hover {
51 | color: #FFF;
52 | border:none;
53 | }
54 | .video-tour:hover:after {
55 | top: 0;
56 | height: 100%;
57 | }
58 | .button__bar li {
59 | margin: 0 !important;
60 | width: 10px;
61 | height: 10px;
62 | }
63 |
64 | .button__bar {
65 | bottom: 26px !important;
66 | }
67 |
68 | @media screen and (max-width:1024px) {
69 | .button__bar {
70 | bottom: 12px !important;
71 | }
72 | }
73 |
74 | .similar__bar .slick-active button {
75 | width: 6px;
76 | height: 6px;
77 | border-color: #ffffff;
78 | border-width: 1px;
79 | border-style: solid;
80 | background: #ffffff;
81 | border-radius: 100%;
82 | }
83 | .button__bar li button{
84 | width: 6px;
85 | height: 6px;
86 | border-color: #ffffff;
87 | border-width: 1px;
88 | border-style: solid;
89 | background: #ffffff;
90 | border-radius: 100%;
91 | padding:0
92 | }
93 | .button__bar .slick-active{
94 | margin-right:4px!important;
95 | }
96 | .button__bar .slick-active button {
97 | width: 10px;
98 | height: 10px;
99 | border-color: #ffffff;
100 | border-width: 1px;
101 | border-style: solid;
102 | background: #ffffff;
103 | border-radius: 100%;
104 | padding:0
105 | }
106 |
107 | .button__bar li button::before {
108 | display: none;
109 | }
110 |
111 | .similar__bar {
112 | bottom: -75px !important;
113 | }
114 |
115 | .similar__bar li button {
116 | width: 10px !important;
117 | height: 10px !important;
118 | border-radius: 100% !important;
119 | border: 1px solid white !important
120 | }
121 |
122 | .similar__bar li button::before {
123 | display: none;
124 | }
125 |
126 | /*3d slider css*/
127 | .slider {
128 | margin: 0 auto;
129 | }
130 |
131 |
132 |
133 | select option {
134 | background: black;
135 | color: white;
136 | text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4);
137 | border-radius: 5px;
138 | border: none;
139 | padding: 12px 0;
140 | }
141 |
142 | .dslide {
143 | transform: scale(0.7);
144 | transition: transform 300ms;
145 | opacity: 0.5;
146 | }
147 | .dslide img {
148 | margin: 0 auto;
149 | }
150 | .featuredApartments .dslide {
151 | transform: scale(0.93);
152 | transition: transform 300ms;
153 | opacity: 0.5;
154 | }
155 |
156 | .popularAreas .dslide {
157 | transform: scale(0.85);
158 | transition: transform 300ms;
159 | opacity: 0.5;
160 | }
161 |
162 | .downtown .dslide {
163 | transform: scaleY(0.7);
164 | transition: transform 300ms;
165 | opacity: 0.75;
166 | }
167 |
168 | .fslide {
169 | transition: transform 300ms;
170 | opacity: 0.5;
171 | }
172 |
173 | .ActiveSlide {
174 | transform: scale(1.2);
175 | opacity: 1;
176 | }
177 |
178 | .activeSlide {
179 | transform: scale(1.33);
180 | opacity: 1;
181 | }
182 |
183 | .banner {
184 | background-image: url('/images/product/01.avif');
185 | background-size: cover;
186 | background-position: center;
187 |
188 | }
189 |
190 | .banner::before {
191 | background-repeat: no-repeat;
192 | content: "";
193 | position: absolute;
194 | top: 0px;
195 | right: 0px;
196 | bottom: 0px;
197 | left: 0px;
198 | background-color: rgba(0, 0, 0, 0.25);
199 | }
200 |
201 | /* hiding all bullets by default */
202 | .explore {
203 | letter-spacing: 1px;
204 | background: none;
205 | color: white;
206 | position: relative;
207 | outline: none;
208 | border: none;
209 | height: 50px;
210 | width: 190px;
211 | font-size: 14px;
212 | z-index: 2;
213 | transition: .01s .23s ease-out all;
214 | overflow: hidden;
215 | }
216 |
217 | .explore::before {
218 | content: '';
219 | position: absolute;
220 | left: 0;
221 | top: 0;
222 | height: 100%;
223 | width: 55%;
224 | background: #202020;
225 | z-index: -1;
226 | transition: .3s ease-in all;
227 | }
228 |
229 | .explore::after {
230 | content: '';
231 | position: absolute;
232 | left: -5%;
233 | top: 5%;
234 | height: 90%;
235 | width: 5%;
236 | background: white;
237 | z-index: -1;
238 | transition: .4s .02s ease-in all;
239 | }
240 |
241 | .explore:hover {
242 | cursor: pointer;
243 | color: transparent;
244 | }
245 |
246 | .explore:hover::before {
247 | left: 100%;
248 | width: 25%;
249 | }
250 |
251 | .explore:hover::after {
252 | left: 100%;
253 | width: 70%;
254 | }
255 |
256 | .explore:hover .icon-right.after:after {
257 | left: -80px;
258 | color: white;
259 | transition: 0.2s 0.2s ease all;
260 | }
261 |
262 | .explore:hover .icon-right.after:before {
263 | left: -104px;
264 | top: 14px;
265 | opacity: 0.2;
266 | color: white;
267 | }
268 |
269 | .icon-right {
270 | position: absolute;
271 | top: 0;
272 | right: 0;
273 | }
274 |
275 | .icon-right:after {
276 | font-family: "FontAwesome";
277 | content: '\2192';
278 | font-size: 24px;
279 | display: inline-block;
280 | position: relative;
281 | top: 26px;
282 | transform: translate3D(0, -50%, 0);
283 | }
284 |
285 | .icon-right.after:after {
286 | left: -250px;
287 | color: black;
288 | transition: 0.15s 0.25s ease left, 0.5s 0.05s ease color;
289 | }
290 |
291 | .icon-right.after:before {
292 | content: 'Submit';
293 | position: absolute;
294 | left: -230px;
295 | top: 14px;
296 | opacity: 0;
297 | transition: 0.2s ease-in all;
298 | }
299 |
300 | .featuredApartments .slick-prev,
301 | .featuredApartments .slick-next {
302 | visibility: hidden;
303 | }
304 |
305 | .slick-current:hover .slick-prev,
306 | .slick-current:hover .slick-next {
307 | visibility: visible;
308 | }
309 |
310 | .featuredApartments .slick-prev {
311 | left: 15px;
312 | z-index: 100;
313 | }
314 | .featuredApartments .slick-next {
315 | right: 15px;
316 | z-index: 100;
317 | }
318 | .featuredApartments .slick-prev::before,
319 | .featuredApartments .slick-next::before {
320 | font-size: 30px;
321 | }
322 | .offPlan ::-webkit-scrollbar {
323 | display: none;
324 | }
325 |
326 | .popularAreas .slick-prev,
327 | .popularAreas .slick-next {
328 | display: none !important;
329 | }
330 |
331 | .downtown .slick-prev {
332 | left: initial;
333 | right: 130px;
334 | z-index: 100;
335 | top: -3%;
336 | }
337 | .downtown .slick-next {
338 | right: 35px;
339 | z-index: 100;
340 | top: -3%;
341 | }
342 |
343 | @media screen and (max-width: 768px) {
344 | .popularAreas .slick-next {
345 | right: 15px;
346 | z-index: 100;
347 | top: -5%;
348 | }
349 | }
350 |
351 | .ourJournal .slick-track {
352 | padding-left: 28px;
353 | }
--------------------------------------------------------------------------------
/pages/contact/index.js:
--------------------------------------------------------------------------------
1 | import StayBiling from "@/components/staybil/StaylBiling";
2 | import { Text14, Text36 } from "@/components/typegraphy";
3 | import Image from "next/image";
4 | import { useState } from "react";
5 | import facebookSvg from "@/public/images/facebook.svg";
6 | import linkedinSVg from "@/public/images/linkedin.svg";
7 | import { roboto } from "@/components/font/font";
8 | const ContactPage = () => {
9 | const [Name, setName] = useState("");
10 | const [Email, setEmail] = useState("");
11 | const [phoneNumber, setPhoneNumber] = useState("");
12 | const [message, setMessage] = useState("");
13 |
14 | const formData = [
15 | {
16 | id: 1,
17 | name: "What's your name?",
18 | placeholder: "Type your full name",
19 | value: Name,
20 | set: setName
21 | },
22 | {
23 | id: 2,
24 | name: "What's your email address?",
25 | placeholder: "yourname@email.com",
26 | value: Email,
27 | set: setEmail
28 | },
29 | {
30 | id: 3,
31 | name: "What's your phone number?",
32 | placeholder: "+0123 4567 8910",
33 | value: phoneNumber,
34 | set: setPhoneNumber
35 | },
36 | {
37 | id: 4,
38 | name: "Tell us what you think",
39 | placeholder: "Type your message",
40 | value: message,
41 | set: setMessage
42 | }
43 | ]
44 | const social =[
45 | {
46 | icon:"/images/contact/facebook.svg",
47 | link:"/"
48 | },
49 | {
50 | icon:"/images/contact/twitter.svg",
51 | link:"/"
52 | },
53 | {
54 | icon:"/images/contact/instagram.svg",
55 | link:"/"
56 | }
57 | ]
58 | return (
59 |
60 |
61 |
62 |
63 | Lets Collaborate!
64 |
65 |
66 | Let us help you to find you the most luxurious property in town. Fill out the form and we will get back to you in less than an hour on working days.
67 |
68 |
69 | {
70 | formData.map((item, index) => (
71 |
72 |
73 | 0{item.id}
74 |
75 |
76 |
77 | {item.name}
78 |
79 |
item.set(e.target.value)} />
85 |
86 |
87 |
88 | ))
89 | }
90 |
91 |
92 |
93 | Submit
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | call us
104 |
105 |
106 |
107 |
108 | +0123 4567 8910
109 |
110 |
111 |
112 | +0123 4567 8910
113 |
114 |
115 |
116 |
117 |
118 |
119 | SEND US A MESSAGE
120 |
121 |
122 |
123 |
124 |
125 | hello@delattio.com
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 | ADDRESS
134 |
135 |
136 |
137 |
138 |
139 | 102 Street, Dubai
140 |
141 |
142 |
143 |
144 |
145 | {
146 | social.map((item,index)=>(
147 |
148 |
149 |
150 | ))
151 | }
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 | Delattio
162 |
163 |
168 |
182 |
183 |
184 | );
185 | }
186 |
187 | export default ContactPage;
--------------------------------------------------------------------------------