Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5324217092 | |||
| 27a39cf14f | |||
| 40958aa0e5 | |||
| 140e36ec20 | |||
| 4327d13904 | |||
| e8689d05e8 |
@@ -1,5 +1,4 @@
|
|||||||
import type { Metadata } from 'next';
|
import type { Metadata } from 'next';
|
||||||
import { Cormorant_Garamond } from "next/font/google";
|
|
||||||
import './globals.css';
|
import './globals.css';
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
@@ -7,12 +6,6 @@ export const metadata: Metadata = {
|
|||||||
description: 'Discover exclusive luxury properties in Dubai curated for discerning buyers and investors.',
|
description: 'Discover exclusive luxury properties in Dubai curated for discerning buyers and investors.',
|
||||||
};
|
};
|
||||||
|
|
||||||
const cormorantGaramond = Cormorant_Garamond({
|
|
||||||
variable: "--font-cormorant-garamond",
|
|
||||||
subsets: ["latin"],
|
|
||||||
weight: ["300", "400", "500", "600", "700"],
|
|
||||||
});
|
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
children,
|
children,
|
||||||
}: {
|
}: {
|
||||||
@@ -20,7 +13,7 @@ export default function RootLayout({
|
|||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<body className={`${cormorantGaramond.variable} antialiased`}>
|
<body>
|
||||||
{children}
|
{children}
|
||||||
|
|
||||||
<script
|
<script
|
||||||
@@ -416,6 +409,20 @@ export default function RootLayout({
|
|||||||
|
|
||||||
originalContent = element.textContent;
|
originalContent = element.textContent;
|
||||||
element.contentEditable = 'true';
|
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();
|
element.focus();
|
||||||
isEditing = true;
|
isEditing = true;
|
||||||
|
|
||||||
@@ -525,6 +532,23 @@ export default function RootLayout({
|
|||||||
element.contentEditable = 'false';
|
element.contentEditable = 'false';
|
||||||
isEditing = 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') {
|
if (element.dataset.beforeInputHandler === 'true') {
|
||||||
element.removeEventListener('beforeinput', () => {});
|
element.removeEventListener('beforeinput', () => {});
|
||||||
delete element.dataset.beforeInputHandler;
|
delete element.dataset.beforeInputHandler;
|
||||||
@@ -830,6 +854,9 @@ export default function RootLayout({
|
|||||||
|
|
||||||
const handleScroll = () => {
|
const handleScroll = () => {
|
||||||
if (!isActive) return;
|
if (!isActive) return;
|
||||||
|
|
||||||
|
if (isEditing) return;
|
||||||
|
|
||||||
if (selectedElement) {
|
if (selectedElement) {
|
||||||
makeUneditable(selectedElement, false);
|
makeUneditable(selectedElement, false);
|
||||||
selectedElement.classList.remove(selectedClass);
|
selectedElement.classList.remove(selectedClass);
|
||||||
@@ -1203,6 +1230,31 @@ export default function RootLayout({
|
|||||||
window.addEventListener('scroll', handleScroll, true);
|
window.addEventListener('scroll', handleScroll, true);
|
||||||
window.addEventListener('message', handleMessage, 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 = () => {
|
window.webildCleanup = () => {
|
||||||
isActive = false;
|
isActive = false;
|
||||||
|
|
||||||
@@ -1213,6 +1265,10 @@ export default function RootLayout({
|
|||||||
removeHoverOverlay();
|
removeHoverOverlay();
|
||||||
removeElementTypeLabel();
|
removeElementTypeLabel();
|
||||||
|
|
||||||
|
if (urlCheckInterval) {
|
||||||
|
clearInterval(urlCheckInterval);
|
||||||
|
}
|
||||||
|
|
||||||
document.removeEventListener('mouseover', handleMouseOver, true);
|
document.removeEventListener('mouseover', handleMouseOver, true);
|
||||||
document.removeEventListener('mouseout', handleMouseOut, true);
|
document.removeEventListener('mouseout', handleMouseOut, true);
|
||||||
document.removeEventListener('click', handleClick, true);
|
document.removeEventListener('click', handleClick, true);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import MetricCardThree from '@/components/sections/metrics/MetricCardThree';
|
|||||||
import TestimonialCardFive from '@/components/sections/testimonial/TestimonialCardFive';
|
import TestimonialCardFive from '@/components/sections/testimonial/TestimonialCardFive';
|
||||||
import ContactCTA from '@/components/sections/contact/ContactCTA';
|
import ContactCTA from '@/components/sections/contact/ContactCTA';
|
||||||
import FooterSimple from '@/components/sections/footer/FooterSimple';
|
import FooterSimple from '@/components/sections/footer/FooterSimple';
|
||||||
|
import TeamCardEleven from '@/components/sections/team/TeamCardEleven';
|
||||||
import { Sparkles, Home, Shield, Award, Star, Mail, TrendingUp, DollarSign, FileCheck, Building2, Users } from "lucide-react";
|
import { Sparkles, Home, Shield, Award, Star, Mail, TrendingUp, DollarSign, FileCheck, Building2, Users } from "lucide-react";
|
||||||
|
|
||||||
export default function LandingPage() {
|
export default function LandingPage() {
|
||||||
@@ -21,7 +22,7 @@ export default function LandingPage() {
|
|||||||
contentWidth="mediumSmall"
|
contentWidth="mediumSmall"
|
||||||
sizing="mediumLarge"
|
sizing="mediumLarge"
|
||||||
background="none"
|
background="none"
|
||||||
cardStyle="elevated"
|
cardStyle="glass-elevated"
|
||||||
primaryButtonStyle="inset-glow"
|
primaryButtonStyle="inset-glow"
|
||||||
secondaryButtonStyle="radial-glow"
|
secondaryButtonStyle="radial-glow"
|
||||||
headingFontWeight="medium"
|
headingFontWeight="medium"
|
||||||
@@ -33,6 +34,7 @@ export default function LandingPage() {
|
|||||||
{ name: "Properties", id: "properties" },
|
{ name: "Properties", id: "properties" },
|
||||||
{ name: "About", id: "about" },
|
{ name: "About", id: "about" },
|
||||||
{ name: "Services", id: "services" },
|
{ name: "Services", id: "services" },
|
||||||
|
{ name: "Team", id: "team" },
|
||||||
{ name: "Testimonials", id: "testimonials" },
|
{ name: "Testimonials", id: "testimonials" },
|
||||||
{ name: "Contact", id: "contact" }
|
{ name: "Contact", id: "contact" }
|
||||||
]}
|
]}
|
||||||
@@ -149,6 +151,32 @@ export default function LandingPage() {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="team" data-section="team">
|
||||||
|
<TeamCardEleven
|
||||||
|
title="Executive Team"
|
||||||
|
description="Meet the visionary leaders guiding Luxe Properties with expertise and dedication."
|
||||||
|
tag="Our Leadership"
|
||||||
|
textboxLayout="default"
|
||||||
|
animationType="slide-up"
|
||||||
|
useInvertedBackground={false}
|
||||||
|
groups={[
|
||||||
|
{
|
||||||
|
id: "executives", groupTitle: "Executive Leadership", members: [
|
||||||
|
{
|
||||||
|
id: "1", title: "Hassan Al-Maktoum", subtitle: "Chief Executive Officer", detail: "hassan@luxeproperties.ae", imageSrc: "https://img.b2bpic.net/free-photo/business-people-using-digital-tablet-airport_107420-95868.jpg", imageAlt: "Hassan Al-Maktoum"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "2", title: "Layla Al-Mansoori", subtitle: "Chief Operating Officer", detail: "layla@luxeproperties.ae", imageSrc: "https://img.b2bpic.net/free-photo/businessman-discussing-document-with-colleague_107420-84875.jpg", imageAlt: "Layla Al-Mansoori"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "3", title: "Marcus Wellington", subtitle: "Chief Investment Officer", detail: "marcus@luxeproperties.ae", imageSrc: "https://img.b2bpic.net/free-photo/young-businessman-with-clipboard_1098-602.jpg", imageAlt: "Marcus Wellington"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="metrics" data-section="metrics">
|
<div id="metrics" data-section="metrics">
|
||||||
<MetricCardThree
|
<MetricCardThree
|
||||||
title="By The Numbers"
|
title="By The Numbers"
|
||||||
@@ -232,6 +260,7 @@ export default function LandingPage() {
|
|||||||
title: "Company", items: [
|
title: "Company", items: [
|
||||||
{ label: "About Us", href: "#about" },
|
{ label: "About Us", href: "#about" },
|
||||||
{ label: "Our Services", href: "#services" },
|
{ label: "Our Services", href: "#services" },
|
||||||
|
{ label: "Executive Team", href: "#team" },
|
||||||
{ label: "Properties", href: "#properties" },
|
{ label: "Properties", href: "#properties" },
|
||||||
{ label: "Contact", href: "#contact" }
|
{ label: "Contact", href: "#contact" }
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user