Merge version_2_1782152521807 into main #1
@@ -6,14 +6,14 @@
|
||||
:root {
|
||||
/* @colorThemes/lightTheme/grayNavyBlue */
|
||||
--background: #000000;
|
||||
--card: #1f4035;
|
||||
--card: #111111;
|
||||
--foreground: #ffffff;
|
||||
--primary-cta: #ffffff;
|
||||
--primary-cta-text: #051a12;
|
||||
--secondary-cta: #0d2b1f;
|
||||
--secondary-cta-text: #d4f6e8;
|
||||
--accent: #0d5238;
|
||||
--background-accent: #10b981;
|
||||
--primary-cta-text: #000000;
|
||||
--secondary-cta: #222222;
|
||||
--secondary-cta-text: #ffffff;
|
||||
--accent: #888888;
|
||||
--background-accent: #333333;
|
||||
|
||||
/* @layout/border-radius/rounded */
|
||||
--radius: 0.5rem;
|
||||
|
||||
@@ -1,220 +1,33 @@
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqSimple from '@/components/sections/faq/FaqSimple';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroSplitVerticalMarquee from '@/components/sections/hero/HeroSplitVerticalMarquee';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
// AUTO-GENERATED shell by per-section-migrate.
|
||||
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
|
||||
// files directly. Non-block content (wrappers, non-inlinable sections) is
|
||||
// preserved inline; extracted section blocks become <XSection/> refs.
|
||||
|
||||
export default function HomePage() {
|
||||
import React from 'react';
|
||||
import * as HeroModule from './HomePage/sections/Hero';
|
||||
import MenuSection from './HomePage/sections/Menu';
|
||||
import SpecialsSection from './HomePage/sections/Specials';
|
||||
import FeedbackSection from './HomePage/sections/Feedback';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
const HeroExports = HeroModule as Record<string, unknown>;
|
||||
const HeroSection = (HeroExports.default || HeroExports.HeroSection || HeroExports.Hero || (() => null)) as React.ElementType;
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplitVerticalMarquee
|
||||
tag="Welcome to LUXE"
|
||||
title="Where Taste Meets Artistry"
|
||||
description="Scan, browse, and discover our premium artisanal selection crafted just for you."
|
||||
primaryButton={{
|
||||
text: "Browse Menu",
|
||||
href: "#menu",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Our Story",
|
||||
href: "#about",
|
||||
}}
|
||||
leftItems={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/aerial-view-latte-art_53876-165303.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/iced-matcha-latte_1339-1059.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-pours-tea-into-armudu-glass_140725-8184.jpg",
|
||||
},
|
||||
]}
|
||||
rightItems={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/closeup-shot-croissant-plate-covered-chocolate-cafe_181624-57999.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/elegant-gourmet-dessert-with-flowers-white-plate_23-2151973732.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-hands-cutting-lemon_23-2148545906.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="menu" data-section="menu">
|
||||
<SectionErrorBoundary name="menu">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Our Selections"
|
||||
title="Signature Menu"
|
||||
description="Tap to reveal our artisanal beverages and handcrafted delicacies."
|
||||
items={[
|
||||
{
|
||||
title: "Artisan Coffee",
|
||||
description: "Single-origin beans roasted to perfection.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tool-used-coffee-machine-coffee-making-process_23-2150187556.jpg",
|
||||
},
|
||||
{
|
||||
title: "French Pastries",
|
||||
description: "Buttery, flaky, and made daily.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-cupcake-with-cinnamon_23-2148604567.jpg",
|
||||
},
|
||||
{
|
||||
title: "Matcha Bliss",
|
||||
description: "Premium ceremonial grade matcha.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/iced-matcha-latte-plastic-cup-hands-woman_169016-43898.jpg",
|
||||
},
|
||||
{
|
||||
title: "Dark Delights",
|
||||
description: "Rich artisanal cocoa treats.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/berry-tart-decorated-with-strawberry-grape_140725-5731.jpg",
|
||||
},
|
||||
{
|
||||
title: "Fresh Fruit Tarts",
|
||||
description: "Seasonal fruit on crispy crust.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/open-pie-raspberry-galette-summer-berry-dessert_114579-8500.jpg",
|
||||
},
|
||||
{
|
||||
title: "Citrus Infusions",
|
||||
description: "Artisanal zesty refreshment.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/glass-lemonade-with-lemon-slices-grapefruits-marble-surface_114579-24824.jpg",
|
||||
},
|
||||
{
|
||||
title: "Espresso Bar",
|
||||
description: "Bold notes for connoisseurs.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/barista-pours-freshly-made-turkish-coffee-into-cup-closeup-professional-barista-prepares-coffee-by-hand-traditional-way-sand-selective-focus-space-text_166373-2978.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MenuSection />
|
||||
|
||||
<div id="specials" data-section="specials">
|
||||
<SectionErrorBoundary name="specials">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Seasonal Specials"
|
||||
title="Limited Edition Treats"
|
||||
description="Experience our rotating seasonal lineup of unique flavors."
|
||||
items={[
|
||||
{
|
||||
title: "Spiced Pumpkin Latte",
|
||||
description: "A seasonal fall favorite, handcrafted.",
|
||||
buttonIcon: "Coffee",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-open-coffee-kettle-coffee-beans_23-2148441197.jpg",
|
||||
},
|
||||
{
|
||||
title: "Lavender Honey Chai",
|
||||
description: "Floral notes with spiced comfort.",
|
||||
buttonIcon: "Leaf",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/green-lemon-herbal-tea-cups-wooden-desk_23-2148092038.jpg",
|
||||
},
|
||||
{
|
||||
title: "Salted Caramel Tart",
|
||||
description: "Sweet meets savory decadence.",
|
||||
buttonIcon: "Cake",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/chocolade-volcano-with-ice-cream-tea_140725-9484.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<SpecialsSection />
|
||||
|
||||
<div id="feedback" data-section="feedback">
|
||||
<SectionErrorBoundary name="feedback">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Reviews"
|
||||
title="Guest Experiences"
|
||||
description="What our wonderful patrons say about us."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Elena R.",
|
||||
role: "Foodie",
|
||||
quote: "The most artisanal coffee I've ever had in a café setting.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-asian-barista-girl-giving-takeaway-coffee-cup-prepare-takeout-order-guest-cafe-wearing_1258-199322.jpg",
|
||||
},
|
||||
{
|
||||
name: "Marcus J.",
|
||||
role: "Local",
|
||||
quote: "Effortless ordering experience, perfect for quick morning bites.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beauty-book-tenderness-cute-chair_1150-1189.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah W.",
|
||||
role: "Digital Nomad",
|
||||
quote: "The vibes are incredible, especially the matcha selection.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-man-drinking-coffee-cafe-using-tablet-computer-freelancer-workplace-lunch_639032-2879.jpg",
|
||||
},
|
||||
{
|
||||
name: "David T.",
|
||||
role: "Regular",
|
||||
quote: "Truly a premium experience right from scanning the code.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/humorous-talks-with-close-friends-dinner-hot-spring-day-cafe_8353-10001.jpg",
|
||||
},
|
||||
{
|
||||
name: "Linda P.",
|
||||
role: "Visitor",
|
||||
quote: "Absolutely charming atmosphere and divine pastries.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/collage-customer-experience-concept_23-2149367136.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeedbackSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSimple
|
||||
tag="Assistance"
|
||||
title="Common Questions"
|
||||
description="Find answers to help you order with ease."
|
||||
items={[
|
||||
{
|
||||
question: "Can I order multiple items at once?",
|
||||
answer: "Yes, our menu allows you to add multiple items to your cart before checking out.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer vegan options?",
|
||||
answer: "Absolutely! Look for the leaf icon on our menu items indicating plant-based choices.",
|
||||
},
|
||||
{
|
||||
question: "How do I pay my order?",
|
||||
answer: "We accept all major credit cards and digital wallets right through your phone.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Reach Out"
|
||||
text="Need assistance? Our staff is here to help you enjoy your visit."
|
||||
primaryButton={{
|
||||
text: "Call Staff",
|
||||
href: "tel:+1234567890",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Get Directions",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
}
|
||||
27
src/pages/HomePage/sections/Contact.tsx
Normal file
27
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Reach Out"
|
||||
text="Need assistance? Our staff is here to help you enjoy your visit."
|
||||
primaryButton={{
|
||||
text: "Call Staff",
|
||||
href: "tel:+1234567890",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Get Directions",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
34
src/pages/HomePage/sections/Faq.tsx
Normal file
34
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,34 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "faq" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqSimple from '@/components/sections/faq/FaqSimple';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSimple
|
||||
tag="Assistance"
|
||||
title="Common Questions"
|
||||
description="Find answers to help you order with ease."
|
||||
items={[
|
||||
{
|
||||
question: "Can I order multiple items at once?",
|
||||
answer: "Yes, our menu allows you to add multiple items to your cart before checking out.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer vegan options?",
|
||||
answer: "Absolutely! Look for the leaf icon on our menu items indicating plant-based choices.",
|
||||
},
|
||||
{
|
||||
question: "How do I pay my order?",
|
||||
answer: "We accept all major credit cards and digital wallets right through your phone.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Feedback.tsx
Normal file
52
src/pages/HomePage/sections/Feedback.tsx
Normal file
@@ -0,0 +1,52 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "feedback" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeedbackSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="feedback" data-section="feedback">
|
||||
<SectionErrorBoundary name="feedback">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Reviews"
|
||||
title="Guest Experiences"
|
||||
description="What our wonderful patrons say about us."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Elena R.",
|
||||
role: "Foodie",
|
||||
quote: "The most artisanal coffee I've ever had in a café setting.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-asian-barista-girl-giving-takeaway-coffee-cup-prepare-takeout-order-guest-cafe-wearing_1258-199322.jpg",
|
||||
},
|
||||
{
|
||||
name: "Marcus J.",
|
||||
role: "Local",
|
||||
quote: "Effortless ordering experience, perfect for quick morning bites.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beauty-book-tenderness-cute-chair_1150-1189.jpg",
|
||||
},
|
||||
{
|
||||
name: "Sarah W.",
|
||||
role: "Digital Nomad",
|
||||
quote: "The vibes are incredible, especially the matcha selection.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-man-drinking-coffee-cafe-using-tablet-computer-freelancer-workplace-lunch_639032-2879.jpg",
|
||||
},
|
||||
{
|
||||
name: "David T.",
|
||||
role: "Regular",
|
||||
quote: "Truly a premium experience right from scanning the code.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/humorous-talks-with-close-friends-dinner-hot-spring-day-cafe_8353-10001.jpg",
|
||||
},
|
||||
{
|
||||
name: "Linda P.",
|
||||
role: "Visitor",
|
||||
quote: "Absolutely charming atmosphere and divine pastries.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/collage-customer-experience-concept_23-2149367136.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
76
src/pages/HomePage/sections/Hero.tsx
Normal file
76
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,76 @@
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
|
||||
import Button from "@/components/ui/Button";
|
||||
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import ImageOrVideo from "@/components/ui/ImageOrVideo";
|
||||
|
||||
const primaryButton = {
|
||||
text: "Browse Menu",
|
||||
href: "#menu"
|
||||
};
|
||||
const secondaryButton = {
|
||||
text: "Our Story",
|
||||
href: "#about"
|
||||
};
|
||||
const leftItems = [
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/aerial-view-latte-art_53876-165303.jpg"
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/iced-matcha-latte_1339-1059.jpg"
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-pours-tea-into-armudu-glass_140725-8184.jpg"
|
||||
}
|
||||
];
|
||||
const rightItems = [
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/closeup-shot-croissant-plate-covered-chocolate-cafe_181624-57999.jpg"
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/elegant-gourmet-dessert-with-flowers-white-plate_23-2151973732.jpg"
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-hands-cutting-lemon_23-2148545906.jpg"
|
||||
}
|
||||
];
|
||||
|
||||
type HeroSplitVerticalMarqueeProps = {
|
||||
tag: string;
|
||||
title: string;
|
||||
description: string;
|
||||
primaryButton: { text: string; href: string };
|
||||
secondaryButton: { text: string; href: string };
|
||||
leftItems: ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never })[];
|
||||
rightItems: ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never })[];
|
||||
};
|
||||
|
||||
const HeroInline = () => {
|
||||
const duplicatedLeft = [...leftItems, ...leftItems, ...leftItems, ...leftItems];
|
||||
const duplicatedRight = [...rightItems, ...rightItems, ...rightItems, ...rightItems];
|
||||
|
||||
return (
|
||||
<div className="relative w-full py-24 bg-background">
|
||||
<div className="w-content-width mx-auto text-center">
|
||||
<span className="inline-block px-3 py-1 mb-6 text-sm font-medium border border-foreground/20 rounded-full text-foreground">
|
||||
Welcome to LUXE
|
||||
</span>
|
||||
<h1 className="text-5xl md:text-7xl font-bold text-foreground mb-6">
|
||||
Where Taste Meets Artistry
|
||||
</h1>
|
||||
<p className="text-lg md:text-xl text-accent mb-10 max-w-2xl mx-auto">
|
||||
Scan, browse, and discover our premium artisanal selection crafted just for you.
|
||||
</p>
|
||||
<div className="flex flex-col sm:flex-row items-center justify-center gap-4">
|
||||
<a href="#menu" className="primary-button w-full sm:w-auto text-center">
|
||||
Browse Menu
|
||||
</a>
|
||||
<a href="#about" className="secondary-button w-full sm:w-auto text-center">
|
||||
Our Story
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
64
src/pages/HomePage/sections/Menu.tsx
Normal file
64
src/pages/HomePage/sections/Menu.tsx
Normal file
@@ -0,0 +1,64 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "menu" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MenuSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="menu" data-section="menu">
|
||||
<SectionErrorBoundary name="menu">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Our Selections"
|
||||
title="Signature Menu"
|
||||
description="Tap to reveal our artisanal beverages and handcrafted delicacies."
|
||||
items={[
|
||||
{
|
||||
title: "Artisan Coffee",
|
||||
description: "Single-origin beans roasted to perfection.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tool-used-coffee-machine-coffee-making-process_23-2150187556.jpg",
|
||||
},
|
||||
{
|
||||
title: "French Pastries",
|
||||
description: "Buttery, flaky, and made daily.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-cupcake-with-cinnamon_23-2148604567.jpg",
|
||||
},
|
||||
{
|
||||
title: "Matcha Bliss",
|
||||
description: "Premium ceremonial grade matcha.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/iced-matcha-latte-plastic-cup-hands-woman_169016-43898.jpg",
|
||||
},
|
||||
{
|
||||
title: "Dark Delights",
|
||||
description: "Rich artisanal cocoa treats.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/berry-tart-decorated-with-strawberry-grape_140725-5731.jpg",
|
||||
},
|
||||
{
|
||||
title: "Fresh Fruit Tarts",
|
||||
description: "Seasonal fruit on crispy crust.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/open-pie-raspberry-galette-summer-berry-dessert_114579-8500.jpg",
|
||||
},
|
||||
{
|
||||
title: "Citrus Infusions",
|
||||
description: "Artisanal zesty refreshment.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/glass-lemonade-with-lemon-slices-grapefruits-marble-surface_114579-24824.jpg",
|
||||
},
|
||||
{
|
||||
title: "Espresso Bar",
|
||||
description: "Bold notes for connoisseurs.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/barista-pours-freshly-made-turkish-coffee-into-cup-closeup-professional-barista-prepares-coffee-by-hand-traditional-way-sand-selective-focus-space-text_166373-2978.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
40
src/pages/HomePage/sections/Specials.tsx
Normal file
40
src/pages/HomePage/sections/Specials.tsx
Normal file
@@ -0,0 +1,40 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "specials" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function SpecialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="specials" data-section="specials">
|
||||
<SectionErrorBoundary name="specials">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Seasonal Specials"
|
||||
title="Limited Edition Treats"
|
||||
description="Experience our rotating seasonal lineup of unique flavors."
|
||||
items={[
|
||||
{
|
||||
title: "Spiced Pumpkin Latte",
|
||||
description: "A seasonal fall favorite, handcrafted.",
|
||||
buttonIcon: "Coffee",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/top-view-open-coffee-kettle-coffee-beans_23-2148441197.jpg",
|
||||
},
|
||||
{
|
||||
title: "Lavender Honey Chai",
|
||||
description: "Floral notes with spiced comfort.",
|
||||
buttonIcon: "Leaf",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/green-lemon-herbal-tea-cups-wooden-desk_23-2148092038.jpg",
|
||||
},
|
||||
{
|
||||
title: "Salted Caramel Tart",
|
||||
description: "Sweet meets savory decadence.",
|
||||
buttonIcon: "Cake",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/chocolade-volcano-with-ice-cream-tea_140725-9484.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user