Merge version_1_1778326031383 into main #1

Merged
bender merged 1 commits from version_1_1778326031383 into main 2026-05-09 11:30:30 +00:00

View File

@@ -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>
);
}