Merge version_1 into main

Merge version_1 into main
This commit was merged in pull request #2.
This commit is contained in:
2026-02-22 13:47:41 +00:00
5 changed files with 220 additions and 315 deletions

View File

@@ -1,11 +1,11 @@
use client"; "use client";
import ReactLenis from "lenis/react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay'; import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import BlogCardTwo from '@/components/sections/blog/BlogCardTwo'; import BlogCardTwo from '@/components/sections/blog/BlogCardTwo';
import FooterMedia from '@/components/sections/footer/FooterMedia'; import FooterMedia from '@/components/sections/footer/FooterMedia';
import { useBlogPosts } from "@/hooks/useBlogPosts"; import { useBlogPosts } from "@/hooks/useBlogPosts";
import Link from 'next/link';
export default function BlogPage() { export default function BlogPage() {
const { posts, isLoading } = useBlogPosts(); const { posts, isLoading } = useBlogPosts();
@@ -23,19 +23,18 @@ export default function BlogPage() {
secondaryButtonStyle="glass" secondaryButtonStyle="glass"
headingFontWeight="normal" headingFontWeight="normal"
> >
<ReactLenis root>
<div id="nav" data-section="nav"> <div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay <NavbarLayoutFloatingOverlay
brandName="Dobry Khlib" brandName="Dobry Khlib"
navItems={[ navItems={[
{ name: "Home", id: "/" }, { name: "Home", id: "/" },
{ name: "About", id: "about" }, { name: "About", id: "/#about" },
{ name: "Products", id: "products" }, { name: "Products", id: "/#products" },
{ name: "Testimonials", id: "testimonials" }, { name: "Testimonials", id: "/#testimonials" },
{ name: "FAQ", id: "faq" }, { name: "FAQ", id: "/#faq" },
{ name: "Contact", id: "contact" }, { name: "Contact", id: "/#contact" },
]} ]}
button={{ text: "Order Now", href: "#products" }} button={{ text: "Order Now", href: "/#products" }}
/> />
</div> </div>
@@ -59,20 +58,20 @@ export default function BlogPage() {
<div id="footer" data-section="footer"> <div id="footer" data-section="footer">
<FooterMedia <FooterMedia
imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg?_wi=3" imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg"
imageAlt="Assortment of freshly baked Ukrainian goods" imageAlt="Assortment of freshly baked Ukrainian goods"
columns={[ columns={[
{ {
title: "Bakery", items: [ title: "Bakery", items: [
{ label: "Our Story", href: "#about" }, { label: "Our Story", href: "/#about" },
{ label: "Products", href: "#products" }, { label: "Products", href: "/#products" },
{ label: "Order Online", href: "#products" }, { label: "Order Online", href: "/#products" },
], ],
}, },
{ {
title: "Support", items: [ title: "Support", items: [
{ label: "FAQ", href: "#faq" }, { label: "FAQ", href: "/#faq" },
{ label: "Contact Us", href: "#contact" }, { label: "Contact Us", href: "/#contact" },
], ],
}, },
{ {
@@ -87,7 +86,6 @@ export default function BlogPage() {
onPrivacyClick={() => console.log('Privacy Policy clicked')} onPrivacyClick={() => console.log('Privacy Policy clicked')}
/> />
</div> </div>
</ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -1,8 +1,6 @@
import type { Metadata } from "next"; import type { Metadata } from "next";
import { Inter } from "next/font/google"; import { Inter } from "next/font/google";
import "./globals.css"; import "./globals.css";
import { ServiceWrapper } from "@/components/ServiceWrapper";
import Tag from "@/tag/Tag";
const inter = Inter({ const inter = Inter({
variable: "--font-inter", subsets: ["latin"], variable: "--font-inter", subsets: ["latin"],
@@ -31,11 +29,9 @@ export default function RootLayout({
}>) { }>) {
return ( return (
<html lang="en" suppressHydrationWarning> <html lang="en" suppressHydrationWarning>
<ServiceWrapper>
<body <body
className={`${inter.variable} antialiased`} className={`${inter.variable} antialiased`}
> >
<Tag />
{children} {children}
<script <script
@@ -1405,7 +1401,6 @@ export default function RootLayout({
}} }}
/> />
</body> </body>
</ServiceWrapper>
</html> </html>
); );
} }

View File

@@ -9,6 +9,7 @@ import TestimonialCardOne from '@/components/sections/testimonial/TestimonialCar
import FaqBase from '@/components/sections/faq/FaqBase'; import FaqBase from '@/components/sections/faq/FaqBase';
import ContactSplitForm from '@/components/sections/contact/ContactSplitForm'; import ContactSplitForm from '@/components/sections/contact/ContactSplitForm';
import FooterMedia from '@/components/sections/footer/FooterMedia'; import FooterMedia from '@/components/sections/footer/FooterMedia';
import Link from 'next/link';
export default function LandingPage() { export default function LandingPage() {
return ( return (
@@ -28,11 +29,11 @@ export default function LandingPage() {
<NavbarLayoutFloatingOverlay <NavbarLayoutFloatingOverlay
brandName="Dobry Khlib" brandName="Dobry Khlib"
navItems={[ navItems={[
{ name: "About", id: "about" }, { name: "About", id: "#about" },
{ name: "Products", id: "products" }, { name: "Products", id: "#products" },
{ name: "Testimonials", id: "testimonials" }, { name: "Testimonials", id: "#testimonials" },
{ name: "FAQ", id: "faq" }, { name: "FAQ", id: "#faq" },
{ name: "Contact", id: "contact" }, { name: "Contact", id: "#contact" },
]} ]}
button={{ text: "Order Now", href: "#products" }} button={{ text: "Order Now", href: "#products" }}
/> />
@@ -44,7 +45,7 @@ export default function LandingPage() {
description="Experience the warmth of homemade traditions with our freshly baked breads, pastries, and savory delights, crafted with love and authentic recipes." description="Experience the warmth of homemade traditions with our freshly baked breads, pastries, and savory delights, crafted with love and authentic recipes."
background={{ variant: "plain" }} background={{ variant: "plain" }}
imagePosition="right" imagePosition="right"
imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg?_wi=1" imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg"
imageAlt="Freshly baked Ukrainian bread on a rustic table" imageAlt="Freshly baked Ukrainian bread on a rustic table"
mediaAnimation="slide-up" mediaAnimation="slide-up"
buttons={[ buttons={[
@@ -58,7 +59,7 @@ export default function LandingPage() {
<div id="about" data-section="about"> <div id="about" data-section="about">
<MediaAbout <MediaAbout
title="Our Story: From Kyiv to Your Table" title="Our Story: From Kyiv to Your Table"
description='"Dobry Khlib" (Good Bread) brings the heart of Ukrainian baking to your community. We use time-honored recipes, premium local ingredients, and traditional techniques to create the flavors you remember. Every item is a piece of our heritage, baked with passion.' description={`"Dobry Khlib" (Good Bread) brings the heart of Ukrainian baking to your community. We use time-honored recipes, premium local ingredients, and traditional techniques to create the flavors you remember. Every item is a piece of our heritage, baked with passion.`}
tag="About Us" tag="About Us"
imageSrc="https://img.b2bpic.net/free-photo/chef-holds-fresh-bread-hand-man-preparing-dough-table-kitchen-black-background-healthy-cooking-concept_639032-471.jpg" imageSrc="https://img.b2bpic.net/free-photo/chef-holds-fresh-bread-hand-man-preparing-dough-table-kitchen-black-background-healthy-cooking-concept_639032-471.jpg"
imageAlt="Ukrainian baker smiling in a traditional bakery" imageAlt="Ukrainian baker smiling in a traditional bakery"
@@ -92,16 +93,20 @@ export default function LandingPage() {
testimonials={[ testimonials={[
{ {
id: "1", name: "Olena K.", role: "Regular Customer", company: "Local Resident", rating: 5, id: "1", name: "Olena K.", role: "Regular Customer", company: "Local Resident", rating: 5,
imageSrc: "https://img.b2bpic.net/free-photo/female-bakery-owner-counter-with-croissant-talking-mobile-phone_23-2148189128.jpg", imageAlt: "Olena K."}, imageSrc: "https://img.b2bpic.net/free-photo/female-bakery-owner-counter-with-croissant-talking-mobile-phone_23-2148189128.jpg", imageAlt: "Olena K."
},
{ {
id: "2", name: "Mark S.", role: "Food Enthusiast", company: "Food Blogger", rating: 5, id: "2", name: "Mark S.", role: "Food Enthusiast", company: "Food Blogger", rating: 5,
imageSrc: "https://img.b2bpic.net/free-photo/person-paying-using-nfc-technology_23-2149893776.jpg", imageAlt: "Mark S."}, imageSrc: "https://img.b2bpic.net/free-photo/person-paying-using-nfc-technology_23-2149893776.jpg", imageAlt: "Mark S."
},
{ {
id: "3", name: "Irina P.", role: "Community Organizer", company: "Ukrainian Cultural Center", rating: 5, id: "3", name: "Irina P.", role: "Community Organizer", company: "Ukrainian Cultural Center", rating: 5,
imageSrc: "https://img.b2bpic.net/free-photo/portrait-family-having-fun-kitchen_329181-5378.jpg", imageAlt: "Irina P."}, imageSrc: "https://img.b2bpic.net/free-photo/portrait-family-having-fun-kitchen_329181-5378.jpg", imageAlt: "Irina P."
},
{ {
id: "4", name: "Dmytro H.", role: "Owner", company: "The Golden Wheat Cafe", rating: 5, id: "4", name: "Dmytro H.", role: "Owner", company: "The Golden Wheat Cafe", rating: 5,
imageSrc: "https://img.b2bpic.net/free-photo/portrait-smiling-baker-standing-with-arms-crossed_1170-2018.jpg", imageAlt: "Dmytro H."}, imageSrc: "https://img.b2bpic.net/free-photo/portrait-smiling-baker-standing-with-arms-crossed_1170-2018.jpg", imageAlt: "Dmytro H."
},
]} ]}
gridVariant="four-items-2x2-equal-grid" gridVariant="four-items-2x2-equal-grid"
animationType="slide-up" animationType="slide-up"
@@ -116,13 +121,17 @@ export default function LandingPage() {
description="Got questions about our bakery or products? We've got answers." description="Got questions about our bakery or products? We've got answers."
faqs={[ faqs={[
{ {
id: "1", title: "Do you offer gluten-free options?", content: "Currently, we do not offer certified gluten-free products, but we are exploring options to do so in the future."}, id: "1", title: "Do you offer gluten-free options?", content: "Currently, we do not offer certified gluten-free products, but we are exploring options to do so in the future."
},
{ {
id: "2", title: "Can I place a custom order for an event?", content: "Yes, we love custom orders! Please contact us directly with your request, and we'll be happy to discuss options and availability."}, id: "2", title: "Can I place a custom order for an event?", content: "Yes, we love custom orders! Please contact us directly with your request, and we'll be happy to discuss options and availability."
},
{ {
id: "3", title: "What are your baking hours?", content: "Our baking typically starts very early in the morning to ensure fresh products for opening. You can find our store hours on the contact page."}, id: "3", title: "What are your baking hours?", content: "Our baking typically starts very early in the morning to ensure fresh products for opening. You can find our store hours on the contact page."
},
{ {
id: "4", title: "Do you deliver?", content: "We offer local delivery within a 5-mile radius. Please check our delivery section for more details and to see if your address is covered."}, id: "4", title: "Do you deliver?", content: "We offer local delivery within a 5-mile radius. Please check our delivery section for more details and to see if your address is covered."
},
]} ]}
faqsAnimation="slide-up" faqsAnimation="slide-up"
textboxLayout="default" textboxLayout="default"
@@ -154,7 +163,7 @@ export default function LandingPage() {
<div id="footer" data-section="footer"> <div id="footer" data-section="footer">
<FooterMedia <FooterMedia
imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg?_wi=2" imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg"
imageAlt="Assortment of freshly baked Ukrainian goods" imageAlt="Assortment of freshly baked Ukrainian goods"
columns={[ columns={[
{ {

View File

@@ -2,7 +2,6 @@
import { Suspense, use, useCallback } from "react"; import { Suspense, use, useCallback } from "react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import ReactLenis from "lenis/react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import ProductDetailCard from "@/components/ecommerce/productDetail/ProductDetailCard"; import ProductDetailCard from "@/components/ecommerce/productDetail/ProductDetailCard";
import ProductCart from "@/components/ecommerce/cart/ProductCart"; import ProductCart from "@/components/ecommerce/cart/ProductCart";
@@ -11,6 +10,7 @@ import { useCart } from "@/hooks/useCart";
import { useCheckout } from "@/hooks/useCheckout"; import { useCheckout } from "@/hooks/useCheckout";
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay'; import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import FooterMedia from '@/components/sections/footer/FooterMedia'; import FooterMedia from '@/components/sections/footer/FooterMedia';
import Link from 'next/link';
interface ProductPageProps { interface ProductPageProps {
params: Promise<{ id: string }>; params: Promise<{ id: string }>;
@@ -19,12 +19,12 @@ interface ProductPageProps {
export default function ProductPage({ params }: ProductPageProps) { export default function ProductPage({ params }: ProductPageProps) {
return ( return (
<Suspense fallback={null}> <Suspense fallback={null}>
<ProductPageContent params={params} /> <ProductPageContentWrapper params={params} />
</Suspense> </Suspense>
); );
} }
function ProductPageContent({ params }: ProductPageProps) { function ProductPageContentWrapper({ params }: ProductPageProps) {
const { id } = use(params); const { id } = use(params);
const router = useRouter(); const router = useRouter();
@@ -74,72 +74,16 @@ function ProductPageContent({ params }: ProductPageProps) {
await checkout(getCheckoutItems(), { successUrl: currentUrl.toString() }); await checkout(getCheckoutItems(), { successUrl: currentUrl.toString() });
}, [cartItems, checkout, getCheckoutItems]); }, [cartItems, checkout, getCheckoutItems]);
const content = () => {
if (isLoading) { if (isLoading) {
return ( return (
<ThemeProvider
defaultButtonVariant="text-stagger"
defaultTextAnimation="entrance-slide"
borderRadius="soft"
contentWidth="mediumSmall"
sizing="largeSmall"
background="noise"
cardStyle="solid"
primaryButtonStyle="double-inset"
secondaryButtonStyle="glass"
headingFontWeight="normal"
>
<ReactLenis root>
<div id="navbar" data-section="navbar">
<NavbarLayoutFloatingOverlay
navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }]}
brandName="Dobry Khlib"
button={{ text: "Cart", onClick: () => setCartOpen(true) }}
/>
</div>
<main className="min-h-screen flex items-center justify-center pt-20"> <main className="min-h-screen flex items-center justify-center pt-20">
<p className="text-foreground">Loading product...</p> <p className="text-foreground">Loading product...</p>
</main> </main>
<div id="footer" data-section="footer"> )
<FooterMedia
imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg?_wi=6"
imageAlt="Assortment of freshly baked Ukrainian goods"
columns={[
{title: "Bakery", items: [{label: "Our Story", href: "#about"}, {label: "Products", href: "#products"}, {label: "Order Online", href: "#products"}]},
{title: "Support", items: [{label: "FAQ", href: "#faq"}, {label: "Contact Us", href: "#contact"}]},
{title: "Legal", items: [{label: "Privacy Policy", href: "/privacy"}, {label: "Terms of Service", href: "/terms"}]}
]}
logoText="Dobry Khlib"
copyrightText="© 2024 Dobry Khlib. All rights reserved."
onPrivacyClick={() => console.log('Privacy Policy clicked')}
/>
</div>
</ReactLenis>
</ThemeProvider>
);
} }
if (!product) { if (!product) {
return ( return (
<ThemeProvider
defaultButtonVariant="text-stagger"
defaultTextAnimation="entrance-slide"
borderRadius="soft"
contentWidth="mediumSmall"
sizing="largeSmall"
background="noise"
cardStyle="solid"
primaryButtonStyle="double-inset"
secondaryButtonStyle="glass"
headingFontWeight="normal"
>
<ReactLenis root>
<div id="navbar" data-section="navbar">
<NavbarLayoutFloatingOverlay
navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }]}
brandName="Dobry Khlib"
button={{ text: "Cart", onClick: () => setCartOpen(true) }}
/>
</div>
<main className="min-h-screen flex items-center justify-center pt-20"> <main className="min-h-screen flex items-center justify-center pt-20">
<div className="text-center"> <div className="text-center">
<p className="text-foreground mb-4">Product not found</p> <p className="text-foreground mb-4">Product not found</p>
@@ -151,46 +95,9 @@ function ProductPageContent({ params }: ProductPageProps) {
</button> </button>
</div> </div>
</main> </main>
<div id="footer" data-section="footer"> )
<FooterMedia
imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg?_wi=7"
imageAlt="Assortment of freshly baked Ukrainian goods"
columns={[
{title: "Bakery", items: [{label: "Our Story", href: "#about"}, {label: "Products", href: "#products"}, {label: "Order Online", href: "#products"}]},
{title: "Support", items: [{label: "FAQ", href: "#faq"}, {label: "Contact Us", href: "#contact"}]},
{title: "Legal", items: [{label: "Privacy Policy", href: "/privacy"}, {label: "Terms of Service", href: "/terms"}]}
]}
logoText="Dobry Khlib"
copyrightText="© 2024 Dobry Khlib. All rights reserved."
onPrivacyClick={() => console.log('Privacy Policy clicked')}
/>
</div>
</ReactLenis>
</ThemeProvider>
);
} }
return ( return (
<ThemeProvider
defaultButtonVariant="text-stagger"
defaultTextAnimation="entrance-slide"
borderRadius="soft"
contentWidth="mediumSmall"
sizing="largeSmall"
background="noise"
cardStyle="solid"
primaryButtonStyle="double-inset"
secondaryButtonStyle="glass"
headingFontWeight="normal"
>
<ReactLenis root>
<div id="navbar" data-section="navbar">
<NavbarLayoutFloatingOverlay
navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }]}
brandName="Dobry Khlib"
button={{ text: "Cart", onClick: () => setCartOpen(true) }}
/>
</div>
<div id="product-detail-card" data-section="product-detail-card"> <div id="product-detail-card" data-section="product-detail-card">
<ProductDetailCard <ProductDetailCard
layout="page" layout="page"
@@ -212,6 +119,30 @@ function ProductPageContent({ params }: ProductPageProps) {
]} ]}
/> />
</div> </div>
)
}
return (
<ThemeProvider
defaultButtonVariant="text-stagger"
defaultTextAnimation="entrance-slide"
borderRadius="soft"
contentWidth="mediumSmall"
sizing="largeSmall"
background="noise"
cardStyle="solid"
primaryButtonStyle="double-inset"
secondaryButtonStyle="glass"
headingFontWeight="normal"
>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay
navItems={[{ name: "Home", id: "/" }]}
brandName="Dobry Khlib"
button={{ text: `Cart (${cartItems.length})`, onClick: () => setCartOpen(true) }}
/>
</div>
{content()}
<div id="product-cart" data-section="product-cart"> <div id="product-cart" data-section="product-cart">
<ProductCart <ProductCart
isOpen={cartOpen} isOpen={cartOpen}
@@ -229,11 +160,11 @@ function ProductPageContent({ params }: ProductPageProps) {
</div> </div>
<div id="footer" data-section="footer"> <div id="footer" data-section="footer">
<FooterMedia <FooterMedia
imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg?_wi=8" imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg"
imageAlt="Assortment of freshly baked Ukrainian goods" imageAlt="Assortment of freshly baked Ukrainian goods"
columns={[ columns={[
{title: "Bakery", items: [{label: "Our Story", href: "#about"}, {label: "Products", href: "#products"}, {label: "Order Online", href: "#products"}]}, {title: "Bakery", items: [{label: "Our Story", href: "/#about"}, {label: "Products", href: "/#products"}, {label: "Order Online", href: "/#products"}]},
{title: "Support", items: [{label: "FAQ", href: "#faq"}, {label: "Contact Us", href: "#contact"}]}, {title: "Support", items: [{label: "FAQ", href: "/#faq"}, {label: "Contact Us", href: "/#contact"}]},
{title: "Legal", items: [{label: "Privacy Policy", href: "/privacy"}, {label: "Terms of Service", href: "/terms"}]} {title: "Legal", items: [{label: "Privacy Policy", href: "/privacy"}, {label: "Terms of Service", href: "/terms"}]}
]} ]}
logoText="Dobry Khlib" logoText="Dobry Khlib"
@@ -241,7 +172,6 @@ function ProductPageContent({ params }: ProductPageProps) {
onPrivacyClick={() => console.log('Privacy Policy clicked')} onPrivacyClick={() => console.log('Privacy Policy clicked')}
/> />
</div> </div>
</ReactLenis>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -1,12 +1,12 @@
"use client"; "use client";
import { Suspense } from "react"; import { Suspense } from "react";
import ReactLenis from "lenis/react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import ProductCatalog from "@/components/ecommerce/productCatalog/ProductCatalog"; import ProductCatalog from "@/components/ecommerce/productCatalog/ProductCatalog";
import { useProductCatalog } from "@/hooks/useProductCatalog"; import { useProductCatalog } from "@/hooks/useProductCatalog";
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay'; import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import FooterMedia from '@/components/sections/footer/FooterMedia'; import FooterMedia from '@/components/sections/footer/FooterMedia';
import Link from 'next/link';
function ShopPageContent() { function ShopPageContent() {
const { const {
@@ -19,22 +19,10 @@ function ShopPageContent() {
if (isLoading) { if (isLoading) {
return ( return (
<ThemeProvider <>
defaultButtonVariant="text-stagger" <div id="nav" data-section="nav">
defaultTextAnimation="entrance-slide"
borderRadius="soft"
contentWidth="mediumSmall"
sizing="largeSmall"
background="noise"
cardStyle="solid"
primaryButtonStyle="double-inset"
secondaryButtonStyle="glass"
headingFontWeight="normal"
>
<ReactLenis root>
<div id="navbar" data-section="navbar">
<NavbarLayoutFloatingOverlay <NavbarLayoutFloatingOverlay
navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }]} navItems={[{ name: "Home", id: "/" }]}
brandName="Dobry Khlib" brandName="Dobry Khlib"
button={{ text: "Cart", onClick: () => console.log("cart") }} button={{ text: "Cart", onClick: () => console.log("cart") }}
/> />
@@ -42,42 +30,15 @@ function ShopPageContent() {
<main className="min-h-screen flex items-center justify-center pt-20"> <main className="min-h-screen flex items-center justify-center pt-20">
<p className="text-foreground">Loading products...</p> <p className="text-foreground">Loading products...</p>
</main> </main>
<div id="footer" data-section="footer"> </>
<FooterMedia
imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg?_wi=4"
imageAlt="Assortment of freshly baked Ukrainian goods"
columns={[
{title: "Bakery", items: [{label: "Our Story", href: "#about"}, {label: "Products", href: "#products"}, {label: "Order Online", href: "#products"}]},
{title: "Support", items: [{label: "FAQ", href: "#faq"}, {label: "Contact Us", href: "#contact"}]},
{title: "Legal", items: [{label: "Privacy Policy", href: "/privacy"}, {label: "Terms of Service", href: "/terms"}]}
]}
logoText="Dobry Khlib"
copyrightText="© 2024 Dobry Khlib. All rights reserved."
onPrivacyClick={() => console.log('Privacy Policy clicked')}
/>
</div>
</ReactLenis>
</ThemeProvider>
); );
} }
return ( return (
<ThemeProvider <>
defaultButtonVariant="text-stagger" <div id="nav" data-section="nav">
defaultTextAnimation="entrance-slide"
borderRadius="soft"
contentWidth="mediumSmall"
sizing="largeSmall"
background="noise"
cardStyle="solid"
primaryButtonStyle="double-inset"
secondaryButtonStyle="glass"
headingFontWeight="normal"
>
<ReactLenis root>
<div id="navbar" data-section="navbar">
<NavbarLayoutFloatingOverlay <NavbarLayoutFloatingOverlay
navItems={[{ name: "Home", id: "/" }, { name: "Shop", id: "/shop" }]} navItems={[{ name: "Home", id: "/" }]}
brandName="Dobry Khlib" brandName="Dobry Khlib"
button={{ text: "Cart", onClick: () => console.log("cart") }} button={{ text: "Cart", onClick: () => console.log("cart") }}
/> />
@@ -93,13 +54,33 @@ function ShopPageContent() {
emptyMessage="No products found" emptyMessage="No products found"
/> />
</div> </div>
</>
);
}
export default function ShopPage() {
return (
<Suspense>
<ThemeProvider
defaultButtonVariant="text-stagger"
defaultTextAnimation="entrance-slide"
borderRadius="soft"
contentWidth="mediumSmall"
sizing="largeSmall"
background="noise"
cardStyle="solid"
primaryButtonStyle="double-inset"
secondaryButtonStyle="glass"
headingFontWeight="normal"
>
<ShopPageContent />
<div id="footer" data-section="footer"> <div id="footer" data-section="footer">
<FooterMedia <FooterMedia
imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg?_wi=5" imageSrc="https://img.b2bpic.net/free-photo/white-cheese-bread-with-eggs_140725-3991.jpg"
imageAlt="Assortment of freshly baked Ukrainian goods" imageAlt="Assortment of freshly baked Ukrainian goods"
columns={[ columns={[
{title: "Bakery", items: [{label: "Our Story", href: "#about"}, {label: "Products", href: "#products"}, {label: "Order Online", href: "#products"}]}, {title: "Bakery", items: [{label: "Our Story", href: "/#about"}, {label: "Products", href: "/#products"}, {label: "Order Online", href: "/#products"}]},
{title: "Support", items: [{label: "FAQ", href: "#faq"}, {label: "Contact Us", href: "#contact"}]}, {title: "Support", items: [{label: "FAQ", href: "/#faq"}, {label: "Contact Us", href: "/#contact"}]},
{title: "Legal", items: [{label: "Privacy Policy", href: "/privacy"}, {label: "Terms of Service", href: "/terms"}]} {title: "Legal", items: [{label: "Privacy Policy", href: "/privacy"}, {label: "Terms of Service", href: "/terms"}]}
]} ]}
logoText="Dobry Khlib" logoText="Dobry Khlib"
@@ -107,15 +88,7 @@ function ShopPageContent() {
onPrivacyClick={() => console.log('Privacy Policy clicked')} onPrivacyClick={() => console.log('Privacy Policy clicked')}
/> />
</div> </div>
</ReactLenis>
</ThemeProvider> </ThemeProvider>
);
}
export default function ShopPage() {
return (
<Suspense>
<ShopPageContent />
</Suspense> </Suspense>
); );
} }