Merge version_1_1778326031383 into main #1
@@ -1,48 +1,111 @@
|
||||
import FooterBasic from '@/components/sections/footer/FooterBasic';
|
||||
import NavbarDropdown from '@/components/ui/NavbarDropdown';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
import SiteBackgroundSlot from "@/components/ui/SiteBackgroundSlot";
|
||||
import { Outlet } from 'react-router-dom';
|
||||
import NavbarCentered from '@/components/ui/NavbarCentered';
|
||||
import FooterSimple from '@/components/sections/footer/FooterSimple';
|
||||
import { StyleProvider } from '@/components/ui/StyleProvider';
|
||||
import SiteBackgroundSlot from '@/components/ui/SiteBackgroundSlot';
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
|
||||
/**
|
||||
* Shared site chrome — navbar + footer rendered ONCE around every page via <Outlet />.
|
||||
* Navbar renders exactly one source of truth; pages render only their own content.
|
||||
*
|
||||
* navItems is an EXPLICIT list — not derived from routes.ts — because it must support
|
||||
* BOTH types of links:
|
||||
* - page links: href: "/products", href: "/about"
|
||||
* - anchor links: href: "#features", href: "#pricing", href: "#contact"
|
||||
* When the initial site has everything on one page, anchors are the right thing.
|
||||
* When pages are split, both coexist.
|
||||
*
|
||||
* Generator & page-create handler edit THIS array when user requests nav changes.
|
||||
*
|
||||
* StyleProvider props (buttonVariant / siteBackground / heroBackground) are the single
|
||||
* source of truth for Button look and decorative backgrounds across the whole site.
|
||||
* Backend writes them at generation time; Bob-AI's style handler edits them on demand.
|
||||
*/
|
||||
export default function Layout() {
|
||||
const navItems = [
|
||||
{ name: 'Home', href: '/' },
|
||||
];
|
||||
{
|
||||
"name": "Home", "href": "#hero"
|
||||
},
|
||||
{
|
||||
"name": "About", "href": "#about"
|
||||
},
|
||||
{
|
||||
"name": "Rooms", "href": "#rooms"
|
||||
},
|
||||
{
|
||||
"name": "Amenities", "href": "#amenities"
|
||||
},
|
||||
{
|
||||
"name": "Testimonials", "href": "#testimonials"
|
||||
},
|
||||
{
|
||||
"name": "FAQ", "href": "#faq"
|
||||
},
|
||||
{
|
||||
"name": "Contact", "href": "#contact"
|
||||
}
|
||||
];
|
||||
|
||||
return (
|
||||
<StyleProvider buttonVariant="default" siteBackground="none" heroBackground="none">
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="text-stagger"
|
||||
defaultTextAnimation="entrance-slide"
|
||||
borderRadius="rounded"
|
||||
contentWidth="medium"
|
||||
sizing="medium"
|
||||
background="circleGradient"
|
||||
cardStyle="glass-elevated"
|
||||
primaryButtonStyle="gradient"
|
||||
secondaryButtonStyle="glass"
|
||||
headingFontWeight="normal"
|
||||
>
|
||||
<SiteBackgroundSlot />
|
||||
<NavbarCentered
|
||||
logo="Brand"
|
||||
navItems={navItems}
|
||||
ctaButton={{ text: 'Get Started', href: '/' }}
|
||||
/>
|
||||
<SectionErrorBoundary name="navbar">
|
||||
<NavbarDropdown
|
||||
ctaButton={{
|
||||
text: "Book Now", href: "#contact"}}
|
||||
logo="Brand"
|
||||
navItems={navItems} />
|
||||
</SectionErrorBoundary>
|
||||
<main className="flex-grow">
|
||||
<Outlet />
|
||||
</main>
|
||||
<FooterSimple
|
||||
brand="Brand"
|
||||
copyright="© 2024 Brand. All rights reserved."
|
||||
columns={[]}
|
||||
links={[]}
|
||||
/>
|
||||
</StyleProvider>
|
||||
<SectionErrorBoundary name="footer">
|
||||
<FooterBasic
|
||||
columns={[
|
||||
{
|
||||
title: "Explore", items: [
|
||||
{
|
||||
label: "Home", href: "#hero"},
|
||||
{
|
||||
label: "Rooms & Suites", href: "#rooms"},
|
||||
{
|
||||
label: "Amenities", href: "#amenities"},
|
||||
{
|
||||
label: "Gallery", href: "#"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Services", items: [
|
||||
{
|
||||
label: "Dining", href: "#"},
|
||||
{
|
||||
label: "Spa & Wellness", href: "#"},
|
||||
{
|
||||
label: "Events", href: "#"},
|
||||
{
|
||||
label: "Concierge", href: "#"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Legal", items: [
|
||||
{
|
||||
label: "Privacy Policy", href: "#"},
|
||||
{
|
||||
label: "Terms of Service", href: "#"},
|
||||
{
|
||||
label: "Accessibility", href: "#"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Contact", items: [
|
||||
{
|
||||
label: "123 Grand Ave, City, State", href: "#"},
|
||||
{
|
||||
label: "+1 (555) 123-4567", href: "tel:+15551234567"},
|
||||
{
|
||||
label: "info@luxuryhotel.com", href: "mailto:info@luxuryhotel.com"},
|
||||
],
|
||||
},
|
||||
]}
|
||||
leftText="© 2024 Luxury Hotel. All rights reserved."
|
||||
rightText="Designed with Distinction."
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user