Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 40958aa0e5 | |||
| 140e36ec20 | |||
| 4327d13904 | |||
| 4e9d918588 | |||
| aed8958e46 | |||
| e8689d05e8 | |||
| 73d3007e13 | |||
| faa72fb8fb | |||
| 64c24e4ae9 | |||
| 7323266c35 | |||
| f181d263d4 | |||
| 1fc0f54e6c | |||
| 85ad5085c4 | |||
| fb09b11965 | |||
| b710200545 | |||
| afcdd7b8d7 | |||
| 9be83ee93a | |||
| f595d5bb54 | |||
| 1ecfe6cdb7 | |||
| 824cd1e21e |
@@ -1,50 +1,21 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Ubuntu } from "next/font/google";
|
||||
import { Inter } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import { ServiceWrapper } from "@/components/ServiceWrapper";
|
||||
import Tag from "@/tag/Tag";
|
||||
|
||||
const ubuntu = Ubuntu({
|
||||
variable: "--font-ubuntu", subsets: ["latin"],
|
||||
weight: ["300", "400", "500", "700"],
|
||||
});
|
||||
|
||||
const inter = Inter({
|
||||
variable: "--font-inter", subsets: ["latin"],
|
||||
});
|
||||
import type { Metadata } from 'next';
|
||||
import './globals.css';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Luxury Real Estate Dubai | Premium Properties & Villas", description: "Discover exclusive luxury properties in Dubai. Award-winning boutique real estate agency specializing in premium villas, penthouses, and investment opportunities.", keywords: "luxury real estate Dubai, villas Dubai, penthouses, property investment, exclusive listings, Dubai real estate agent", robots: {
|
||||
index: true,
|
||||
follow: true
|
||||
},
|
||||
openGraph: {
|
||||
title: "Luxury Real Estate Dubai | Premium Properties & Villas", description: "Discover exclusive luxury properties in Dubai. Award-winning boutique real estate agency specializing in premium villas, penthouses, and investment opportunities.", type: "website", siteName: "Luxe Properties", images: [
|
||||
{
|
||||
url: "https://img.b2bpic.net/free-photo/modern-spacious-room-with-large-panoramic-window_7502-7289.jpg", alt: "Luxury penthouse in Dubai Marina"
|
||||
}
|
||||
]
|
||||
},
|
||||
twitter: {
|
||||
card: "summary_large_image", title: "Luxury Real Estate Dubai | Premium Properties", description: "Discover exclusive luxury properties and villas in Dubai's most prestigious locations.", images: ["https://img.b2bpic.net/free-photo/modern-spacious-room-with-large-panoramic-window_7502-7289.jpg"]
|
||||
}
|
||||
title: 'Luxe Properties Dubai | Luxury Real Estate',
|
||||
description: 'Discover exclusive luxury properties in Dubai curated for discerning buyers and investors.',
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
}) {
|
||||
return (
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<ServiceWrapper>
|
||||
<body
|
||||
className={`${ubuntu.variable} ${inter.variable} antialiased`}
|
||||
>
|
||||
<Tag />
|
||||
{children}
|
||||
|
||||
<html lang="en">
|
||||
<body>
|
||||
{children}
|
||||
|
||||
<script
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `
|
||||
@@ -438,6 +409,20 @@ export default function RootLayout({
|
||||
|
||||
originalContent = element.textContent;
|
||||
element.contentEditable = 'true';
|
||||
|
||||
if (!element.dataset.webildOriginalWhiteSpace) {
|
||||
const computedStyle = window.getComputedStyle(element);
|
||||
element.dataset.webildOriginalWhiteSpace = computedStyle.whiteSpace;
|
||||
element.dataset.webildOriginalWordWrap = computedStyle.wordWrap;
|
||||
element.dataset.webildOriginalOverflowWrap = computedStyle.overflowWrap;
|
||||
element.dataset.webildOriginalOverflow = computedStyle.overflow;
|
||||
}
|
||||
|
||||
element.style.whiteSpace = 'pre-wrap';
|
||||
element.style.wordWrap = 'break-word';
|
||||
element.style.overflowWrap = 'break-word';
|
||||
element.style.overflow = 'visible';
|
||||
|
||||
element.focus();
|
||||
isEditing = true;
|
||||
|
||||
@@ -547,6 +532,23 @@ export default function RootLayout({
|
||||
element.contentEditable = 'false';
|
||||
isEditing = false;
|
||||
|
||||
if (element.dataset.webildOriginalWhiteSpace) {
|
||||
element.style.whiteSpace = element.dataset.webildOriginalWhiteSpace === 'normal' ? '' : element.dataset.webildOriginalWhiteSpace;
|
||||
delete element.dataset.webildOriginalWhiteSpace;
|
||||
}
|
||||
if (element.dataset.webildOriginalWordWrap) {
|
||||
element.style.wordWrap = element.dataset.webildOriginalWordWrap === 'normal' ? '' : element.dataset.webildOriginalWordWrap;
|
||||
delete element.dataset.webildOriginalWordWrap;
|
||||
}
|
||||
if (element.dataset.webildOriginalOverflowWrap) {
|
||||
element.style.overflowWrap = element.dataset.webildOriginalOverflowWrap === 'normal' ? '' : element.dataset.webildOriginalOverflowWrap;
|
||||
delete element.dataset.webildOriginalOverflowWrap;
|
||||
}
|
||||
if (element.dataset.webildOriginalOverflow) {
|
||||
element.style.overflow = element.dataset.webildOriginalOverflow === 'visible' ? '' : element.dataset.webildOriginalOverflow;
|
||||
delete element.dataset.webildOriginalOverflow;
|
||||
}
|
||||
|
||||
if (element.dataset.beforeInputHandler === 'true') {
|
||||
element.removeEventListener('beforeinput', () => {});
|
||||
delete element.dataset.beforeInputHandler;
|
||||
@@ -852,6 +854,9 @@ export default function RootLayout({
|
||||
|
||||
const handleScroll = () => {
|
||||
if (!isActive) return;
|
||||
|
||||
if (isEditing) return;
|
||||
|
||||
if (selectedElement) {
|
||||
makeUneditable(selectedElement, false);
|
||||
selectedElement.classList.remove(selectedClass);
|
||||
@@ -1225,6 +1230,31 @@ export default function RootLayout({
|
||||
window.addEventListener('scroll', handleScroll, true);
|
||||
window.addEventListener('message', handleMessage, true);
|
||||
|
||||
let lastPathname = window.location.pathname;
|
||||
|
||||
const notifyPageChange = () => {
|
||||
window.parent.postMessage({
|
||||
type: 'webild-page-changed',
|
||||
data: { pathname: window.location.pathname }
|
||||
}, '*');
|
||||
};
|
||||
|
||||
window.addEventListener('popstate', () => {
|
||||
if (lastPathname !== window.location.pathname) {
|
||||
lastPathname = window.location.pathname;
|
||||
notifyPageChange();
|
||||
}
|
||||
}, true);
|
||||
|
||||
const urlCheckInterval = setInterval(() => {
|
||||
if (lastPathname !== window.location.pathname) {
|
||||
lastPathname = window.location.pathname;
|
||||
notifyPageChange();
|
||||
}
|
||||
}, 500);
|
||||
|
||||
notifyPageChange();
|
||||
|
||||
window.webildCleanup = () => {
|
||||
isActive = false;
|
||||
|
||||
@@ -1235,6 +1265,10 @@ export default function RootLayout({
|
||||
removeHoverOverlay();
|
||||
removeElementTypeLabel();
|
||||
|
||||
if (urlCheckInterval) {
|
||||
clearInterval(urlCheckInterval);
|
||||
}
|
||||
|
||||
document.removeEventListener('mouseover', handleMouseOver, true);
|
||||
document.removeEventListener('mouseout', handleMouseOut, true);
|
||||
document.removeEventListener('click', handleClick, true);
|
||||
@@ -1263,7 +1297,6 @@ export default function RootLayout({
|
||||
}}
|
||||
/>
|
||||
</body>
|
||||
</ServiceWrapper>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
@@ -2,10 +2,10 @@
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered';
|
||||
import HeroBillboard from '@/components/sections/hero/HeroBillboard';
|
||||
import HeroBillboardGallery from '@/components/sections/hero/HeroBillboardGallery';
|
||||
import ProductCardFour from '@/components/sections/product/ProductCardFour';
|
||||
import TextSplitAbout from '@/components/sections/about/TextSplitAbout';
|
||||
import FeatureHoverPattern from '@/components/sections/feature/featureHoverPattern/FeatureHoverPattern';
|
||||
import MediaAbout from '@/components/sections/about/MediaAbout';
|
||||
import FeatureCardTwentyTwo from '@/components/sections/feature/FeatureCardTwentyTwo';
|
||||
import MetricCardThree from '@/components/sections/metrics/MetricCardThree';
|
||||
import TestimonialCardFive from '@/components/sections/testimonial/TestimonialCardFive';
|
||||
import ContactCTA from '@/components/sections/contact/ContactCTA';
|
||||
@@ -21,7 +21,7 @@ export default function LandingPage() {
|
||||
contentWidth="mediumSmall"
|
||||
sizing="mediumLarge"
|
||||
background="none"
|
||||
cardStyle="elevated"
|
||||
cardStyle="glass-elevated"
|
||||
primaryButtonStyle="inset-glow"
|
||||
secondaryButtonStyle="radial-glow"
|
||||
headingFontWeight="medium"
|
||||
@@ -41,7 +41,7 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<div id="hero" data-section="hero">
|
||||
<HeroBillboard
|
||||
<HeroBillboardGallery
|
||||
title="Discover Luxury Living in Dubai"
|
||||
description="Exclusive properties curated for discerning buyers. Experience the pinnacle of sophistication with our award-winning real estate portfolio."
|
||||
background={{ variant: "plain" }}
|
||||
@@ -51,8 +51,24 @@ export default function LandingPage() {
|
||||
{ text: "Explore Properties", href: "properties" },
|
||||
{ text: "Contact Agent", href: "contact" }
|
||||
]}
|
||||
imageSrc="https://img.b2bpic.net/free-photo/modern-spacious-room-with-large-panoramic-window_7502-7289.jpg"
|
||||
imageAlt="Luxury penthouse in Dubai Marina"
|
||||
mediaItems={[
|
||||
{
|
||||
imageSrc: "https://img.b2bpic.net/free-photo/modern-spacious-room-with-large-panoramic-window_7502-7289.jpg", imageAlt: "Luxury penthouse in Dubai Marina"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://img.b2bpic.net/free-photo/shanghai-night-china_1127-3170.jpg", imageAlt: "Dubai skyline at night"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://img.b2bpic.net/free-photo/luxury-architecture-exterior-design_23-2151920926.jpg", imageAlt: "Modern luxury exterior design"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://img.b2bpic.net/free-photo/luxury-architecture-exterior-design_23-2151920931.jpg", imageAlt: "Contemporary luxury architecture"
|
||||
},
|
||||
{
|
||||
imageSrc: "https://img.b2bpic.net/free-photo/modern-spacious-room-with-large-panoramic-window_7502-7289.jpg", imageAlt: "Spacious modern interior with panoramic view"
|
||||
}
|
||||
]}
|
||||
mediaAnimation="slide-up"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -82,12 +98,12 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<TextSplitAbout
|
||||
<MediaAbout
|
||||
title="Your Trusted Dubai Real Estate Partner"
|
||||
description={[
|
||||
"With over 15 years of excellence in Dubai's luxury real estate market, we have established ourselves as the premier boutique agency for discerning international clientele.", "Our expert team specializes in sourcing and curating the finest properties across Dubai's most exclusive communities. We combine market mastery with personalized service, ensuring every transaction is seamless and satisfying.", "Transparency, integrity, and results define our commitment to every client partnership."
|
||||
]}
|
||||
showBorder={true}
|
||||
description="With over 15 years of excellence in Dubai's luxury real estate market, we have established ourselves as the premier boutique agency for discerning international clientele. Our expert team specializes in sourcing and curating the finest properties across Dubai's most exclusive communities. We combine market mastery with personalized service, ensuring every transaction is seamless and satisfying."
|
||||
tag="About Us"
|
||||
imageSrc="https://img.b2bpic.net/free-photo/luxury-architecture-exterior-design_23-2151920926.jpg"
|
||||
imageAlt="Luxe Properties Dubai team"
|
||||
useInvertedBackground={false}
|
||||
buttons={[
|
||||
{ text: "Learn Our Story", href: "#" }
|
||||
@@ -96,7 +112,7 @@ export default function LandingPage() {
|
||||
</div>
|
||||
|
||||
<div id="services" data-section="services">
|
||||
<FeatureHoverPattern
|
||||
<FeatureCardTwentyTwo
|
||||
title="Our Services & Expertise"
|
||||
description="Comprehensive real estate solutions tailored to meet your unique needs and aspirations."
|
||||
tag="Professional Services"
|
||||
@@ -106,28 +122,28 @@ export default function LandingPage() {
|
||||
useInvertedBackground={true}
|
||||
features={[
|
||||
{
|
||||
icon: Home,
|
||||
title: "Property Selection", description: "Exclusive access to off-market and hand-selected luxury properties from our extensive portfolio."
|
||||
id: "1", category: ["Services", "Property"],
|
||||
title: "Property Selection - Exclusive access to off-market and hand-selected luxury properties", imageSrc: "https://img.b2bpic.net/free-photo/modern-spacious-room-with-large-panoramic-window_7502-7289.jpg", imageAlt: "Property selection"
|
||||
},
|
||||
{
|
||||
icon: TrendingUp,
|
||||
title: "Investment Advisory", description: "Expert insights into market trends and investment opportunities to maximize your real estate portfolio."
|
||||
id: "2", category: ["Investment", "Advisory"],
|
||||
title: "Investment Advisory - Expert insights into market trends and investment opportunities", imageSrc: "https://img.b2bpic.net/free-photo/shanghai-night-china_1127-3170.jpg", imageAlt: "Investment advisory"
|
||||
},
|
||||
{
|
||||
icon: DollarSign,
|
||||
title: "Negotiation & Closing", description: "Strategic negotiation and seamless transaction management from offer to key delivery."
|
||||
id: "3", category: ["Negotiation", "Closing"],
|
||||
title: "Negotiation & Closing - Strategic negotiation and seamless transaction management", imageSrc: "https://img.b2bpic.net/free-photo/luxury-architecture-exterior-design_23-2151920926.jpg", imageAlt: "Negotiation and closing"
|
||||
},
|
||||
{
|
||||
icon: FileCheck,
|
||||
title: "Legal Compliance", description: "Full support with documentation, permits, and regulatory compliance throughout your purchase."
|
||||
id: "4", category: ["Legal", "Compliance"],
|
||||
title: "Legal Compliance - Full support with documentation, permits, and regulatory compliance", imageSrc: "https://img.b2bpic.net/free-photo/luxury-architecture-exterior-design_23-2151920931.jpg", imageAlt: "Legal compliance"
|
||||
},
|
||||
{
|
||||
icon: Building2,
|
||||
title: "Property Management", description: "Professional management services for rental income and property maintenance optimization."
|
||||
id: "5", category: ["Property", "Management"],
|
||||
title: "Property Management - Professional management services for rental income optimization", imageSrc: "https://img.b2bpic.net/free-photo/modern-spacious-room-with-large-panoramic-window_7502-7289.jpg", imageAlt: "Property management"
|
||||
},
|
||||
{
|
||||
icon: Users,
|
||||
title: "Concierge Services", description: "White-glove concierge support for renovations, furnishings, and lifestyle services."
|
||||
id: "6", category: ["Concierge", "Services"],
|
||||
title: "Concierge Services - White-glove concierge support for renovations and lifestyle services", imageSrc: "https://img.b2bpic.net/free-photo/shanghai-night-china_1127-3170.jpg", imageAlt: "Concierge services"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
@@ -90,8 +90,7 @@ export default function ProductPage({ params }: ProductPageProps) {
|
||||
{"name":"About","id":"about"},
|
||||
{"name":"Services","id":"services"},
|
||||
{"name":"Testimonials","id":"testimonials"},
|
||||
{"name":"Contact","id":"contact"},
|
||||
{"name":"Shop","id":"/shop"}
|
||||
{"name":"Contact","id":"contact"}
|
||||
]}
|
||||
button={{ text: "Cart", onClick: () => setCartOpen(true) }}
|
||||
/>
|
||||
@@ -140,8 +139,7 @@ export default function ProductPage({ params }: ProductPageProps) {
|
||||
{"name":"About","id":"about"},
|
||||
{"name":"Services","id":"services"},
|
||||
{"name":"Testimonials","id":"testimonials"},
|
||||
{"name":"Contact","id":"contact"},
|
||||
{"name":"Shop","id":"/shop"}
|
||||
{"name":"Contact","id":"contact"}
|
||||
]}
|
||||
button={{ text: "Cart", onClick: () => setCartOpen(true) }}
|
||||
/>
|
||||
@@ -197,8 +195,7 @@ export default function ProductPage({ params }: ProductPageProps) {
|
||||
{"name":"About","id":"about"},
|
||||
{"name":"Services","id":"services"},
|
||||
{"name":"Testimonials","id":"testimonials"},
|
||||
{"name":"Contact","id":"contact"},
|
||||
{"name":"Shop","id":"/shop"}
|
||||
{"name":"Contact","id":"contact"}
|
||||
]}
|
||||
button={{ text: "Cart", onClick: () => setCartOpen(true) }}
|
||||
/>
|
||||
|
||||
@@ -40,8 +40,7 @@ export default function ShopPage() {
|
||||
{"name":"About","id":"about"},
|
||||
{"name":"Services","id":"services"},
|
||||
{"name":"Testimonials","id":"testimonials"},
|
||||
{"name":"Contact","id":"contact"},
|
||||
{"name":"Shop","id":"/shop"}
|
||||
{"name":"Contact","id":"contact"}
|
||||
]}
|
||||
button={{ text: "Cart", onClick: () => console.log("cart") }}
|
||||
/>
|
||||
@@ -89,8 +88,7 @@ export default function ShopPage() {
|
||||
{"name":"About","id":"about"},
|
||||
{"name":"Services","id":"services"},
|
||||
{"name":"Testimonials","id":"testimonials"},
|
||||
{"name":"Contact","id":"contact"},
|
||||
{"name":"Shop","id":"/shop"}
|
||||
{"name":"Contact","id":"contact"}
|
||||
]}
|
||||
button={{ text: "Cart", onClick: () => console.log("cart") }}
|
||||
/>
|
||||
|
||||
@@ -11,7 +11,7 @@ html {
|
||||
body {
|
||||
background-color: var(--background);
|
||||
color: var(--foreground);
|
||||
font-family: var(--font-inter), sans-serif;
|
||||
font-family: var(font-family: --font-cormorant-garamond, serif;), sans-serif;
|
||||
position: relative;
|
||||
min-height: 100vh;
|
||||
overscroll-behavior: none;
|
||||
@@ -24,5 +24,5 @@ h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: var(--font-ubuntu), sans-serif;
|
||||
font-family: var(font-family: --font-cormorant-garamond, serif;), sans-serif;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user