Merge version_1 into main #2

Merged
bender merged 3 commits from version_1 into main 2026-03-12 13:14:21 +00:00
3 changed files with 140 additions and 158 deletions

View File

@@ -15,7 +15,7 @@ export default function GalleryPage() {
borderRadius="rounded"
contentWidth="mediumSmall"
sizing="mediumLargeSizeMediumTitles"
background="floatingGradient"
background="circleGradient"
cardStyle="subtle-shadow"
primaryButtonStyle="double-inset"
secondaryButtonStyle="layered"
@@ -41,42 +41,26 @@ export default function GalleryPage() {
description="Step into BrewHaven and experience our inviting spaces, carefully crafted beverages, and delicious homemade treats. Our gallery showcases the heart and soul of our community café."
tag="Gallery Showcase"
tagIcon={Coffee}
background={{ variant: "floatingGradient" }}
background={{ variant: "plain" }}
leftCarouselItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/still-life-with-cup-tea-teapot-books-candle-candlestick_169016-10127.jpg?_wi=5",
imageAlt: "Specialty coffee preparation",
},
imageSrc: "http://img.b2bpic.net/free-photo/still-life-with-cup-tea-teapot-books-candle-candlestick_169016-10127.jpg", imageAlt: "Specialty coffee preparation"},
{
imageSrc: "http://img.b2bpic.net/free-photo/ice-cream-sundae-edible-waffle-bowl_1339-2876.jpg?_wi=4",
imageAlt: "Delicious desserts",
},
imageSrc: "http://img.b2bpic.net/free-photo/ice-cream-sundae-edible-waffle-bowl_1339-2876.jpg", imageAlt: "Delicious desserts"},
{
imageSrc: "http://img.b2bpic.net/free-photo/best-place-town-meeting-with-friends_329181-2888.jpg?_wi=5",
imageAlt: "People working and studying",
},
imageSrc: "http://img.b2bpic.net/free-photo/best-place-town-meeting-with-friends_329181-2888.jpg", imageAlt: "People working and studying"},
{
imageSrc: "http://img.b2bpic.net/free-photo/woman-sitting-chair-by-christmas-tree_1303-12424.jpg?_wi=3",
imageAlt: "Cozy café seating",
},
imageSrc: "http://img.b2bpic.net/free-photo/woman-sitting-chair-by-christmas-tree_1303-12424.jpg", imageAlt: "Cozy café seating"},
]}
rightCarouselItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-male-worker-coffee-shop_23-2148366546.jpg?_wi=2",
imageAlt: "Fresh coffee drinks",
},
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-male-worker-coffee-shop_23-2148366546.jpg", imageAlt: "Fresh coffee drinks"},
{
imageSrc: "http://img.b2bpic.net/free-photo/macaroons-plastic-box_23-2147787082.jpg?_wi=5",
imageAlt: "Fresh desserts and pastries",
},
imageSrc: "http://img.b2bpic.net/free-photo/macaroons-plastic-box_23-2147787082.jpg", imageAlt: "Fresh desserts and pastries"},
{
imageSrc: "http://img.b2bpic.net/free-photo/non-binary-person-wearing-retro-clothes-enjoying-coffee_23-2148757536.jpg?_wi=2",
imageAlt: "Comfortable seating area",
},
imageSrc: "http://img.b2bpic.net/free-photo/non-binary-person-wearing-retro-clothes-enjoying-coffee_23-2148757536.jpg", imageAlt: "Comfortable seating area"},
{
imageSrc: "http://img.b2bpic.net/free-photo/smiling-girl-barista-cafe-preparing-cappuccino-coffee-machine-steaming-milk-wearing-uniform_1258-199307.jpg?_wi=4",
imageAlt: "Quality café experience",
},
imageSrc: "http://img.b2bpic.net/free-photo/smiling-girl-barista-cafe-preparing-cappuccino-coffee-machine-steaming-milk-wearing-uniform_1258-199307.jpg", imageAlt: "Quality café experience"},
]}
buttons={[
{ text: "Visit Us", href: "/contact" },
@@ -89,24 +73,21 @@ export default function GalleryPage() {
<FooterBaseReveal
columns={[
{
title: "Company",
items: [
title: "Company", items: [
{ label: "About Us", href: "/services" },
{ label: "Our Story", href: "/" },
{ label: "Sustainability", href: "/services" },
],
},
{
title: "Quick Links",
items: [
title: "Quick Links", items: [
{ label: "Menu", href: "/menu" },
{ label: "Gallery", href: "/gallery" },
{ label: "Book a Table", href: "/contact" },
],
},
{
title: "Contact",
items: [
title: "Contact", items: [
{ label: "Sengipatti, Tamil Nadu", href: "#" },
{ label: "Phone: 09677968168", href: "tel:09677968168" },
{ label: "Open 5AM - Midnight", href: "#" },

View File

@@ -8,7 +8,7 @@ import FeatureCardTwentyFour from "@/components/sections/feature/FeatureCardTwen
import SplitAbout from "@/components/sections/about/SplitAbout";
import TestimonialCardFifteen from "@/components/sections/testimonial/TestimonialCardFifteen";
import FooterBaseReveal from "@/components/sections/footer/FooterBaseReveal";
import { Coffee, Leaf, Users } from "lucide-react";
import { Coffee, Leaf, Users, TreePine } from "lucide-react";
export default function HomePage() {
const navItems = [
@@ -21,24 +21,21 @@ export default function HomePage() {
const footerColumns = [
{
title: "Company",
items: [
title: "Company", items: [
{ label: "About Us", href: "/services" },
{ label: "Our Story", href: "/" },
{ label: "Sustainability", href: "/services" },
],
},
{
title: "Quick Links",
items: [
title: "Quick Links", items: [
{ label: "Menu", href: "/menu" },
{ label: "Gallery", href: "/gallery" },
{ label: "Book a Table", href: "/contact" },
],
},
{
title: "Contact",
items: [
title: "Contact", items: [
{ label: "Sengipatti, Tamil Nadu", href: "#" },
{ label: "Phone: 09677968168", href: "tel:09677968168" },
{ label: "Open 5AM - Midnight", href: "#" },
@@ -53,7 +50,7 @@ export default function HomePage() {
borderRadius="rounded"
contentWidth="mediumSmall"
sizing="mediumLargeSizeMediumTitles"
background="floatingGradient"
background="circleGradient"
cardStyle="subtle-shadow"
primaryButtonStyle="double-inset"
secondaryButtonStyle="layered"
@@ -73,42 +70,26 @@ export default function HomePage() {
description="Open from 5AM to Midnight. Experience the perfect blend of great coffee, delicious desserts, and a welcoming atmosphere. Whether you're here to work, study, or just relax BrewHaven is your second home."
tag="Welcome to BrewHaven"
tagIcon={Coffee}
background={{ variant: "floatingGradient" }}
background={{ variant: "plain" }}
leftCarouselItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/still-life-with-cup-tea-teapot-books-candle-candlestick_169016-10127.jpg?_wi=1",
imageAlt: "Specialty coffee preparation",
},
imageSrc: "http://img.b2bpic.net/free-photo/still-life-with-cup-tea-teapot-books-candle-candlestick_169016-10127.jpg", imageAlt: "Specialty coffee preparation"},
{
imageSrc: "http://img.b2bpic.net/free-photo/ice-cream-sundae-edible-waffle-bowl_1339-2876.jpg?_wi=1",
imageAlt: "Delicious desserts",
},
imageSrc: "http://img.b2bpic.net/free-photo/ice-cream-sundae-edible-waffle-bowl_1339-2876.jpg", imageAlt: "Delicious desserts"},
{
imageSrc: "http://img.b2bpic.net/free-photo/best-place-town-meeting-with-friends_329181-2888.jpg?_wi=1",
imageAlt: "People working and studying",
},
imageSrc: "http://img.b2bpic.net/free-photo/best-place-town-meeting-with-friends_329181-2888.jpg", imageAlt: "People working and studying"},
{
imageSrc: "http://img.b2bpic.net/free-photo/woman-sitting-chair-by-christmas-tree_1303-12424.jpg?_wi=1",
imageAlt: "Cozy café seating",
},
imageSrc: "http://img.b2bpic.net/free-photo/woman-sitting-chair-by-christmas-tree_1303-12424.jpg", imageAlt: "Cozy café seating"},
]}
rightCarouselItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-male-worker-coffee-shop_23-2148366546.jpg?_wi=1",
imageAlt: "Fresh coffee drinks",
},
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-male-worker-coffee-shop_23-2148366546.jpg", imageAlt: "Fresh coffee drinks"},
{
imageSrc: "http://img.b2bpic.net/free-photo/macaroons-plastic-box_23-2147787082.jpg?_wi=1",
imageAlt: "Fresh desserts and pastries",
},
imageSrc: "http://img.b2bpic.net/free-photo/macaroons-plastic-box_23-2147787082.jpg", imageAlt: "Fresh desserts and pastries"},
{
imageSrc: "http://img.b2bpic.net/free-photo/non-binary-person-wearing-retro-clothes-enjoying-coffee_23-2148757536.jpg?_wi=1",
imageAlt: "Comfortable seating area",
},
imageSrc: "http://img.b2bpic.net/free-photo/non-binary-person-wearing-retro-clothes-enjoying-coffee_23-2148757536.jpg", imageAlt: "Comfortable seating area"},
{
imageSrc: "http://img.b2bpic.net/free-photo/smiling-girl-barista-cafe-preparing-cappuccino-coffee-machine-steaming-milk-wearing-uniform_1258-199307.jpg?_wi=1",
imageAlt: "Quality café experience",
},
imageSrc: "http://img.b2bpic.net/free-photo/smiling-girl-barista-cafe-preparing-cappuccino-coffee-machine-steaming-milk-wearing-uniform_1258-199307.jpg", imageAlt: "Quality café experience"},
]}
buttons={[
{ text: "Order Online", href: "/menu" },
@@ -124,41 +105,17 @@ export default function HomePage() {
description="Discover what makes our café special and why customers love us"
features={[
{
id: "1",
title: "Great Coffee",
author: "Crafted Daily",
description: "Freshly roasted beans sourced from sustainable farms. Every cup is expertly prepared by our skilled baristas.",
tags: ["Premium", "Fresh", "Quality"],
imageSrc: "http://img.b2bpic.net/free-photo/still-life-with-cup-tea-teapot-books-candle-candlestick_169016-10127.jpg?_wi=2",
imageAlt: "Great Coffee",
},
id: "1", title: "Great Coffee", author: "Crafted Daily", description: "Freshly roasted beans sourced from sustainable farms. Every cup is expertly prepared by our skilled baristas.", tags: ["Premium", "Fresh", "Quality"],
imageSrc: "http://img.b2bpic.net/free-photo/still-life-with-cup-tea-teapot-books-candle-candlestick_169016-10127.jpg", imageAlt: "Great Coffee"},
{
id: "2",
title: "Great Desserts",
author: "Homemade Fresh",
description: "Delicious cakes, brownies, and pastries baked fresh daily in our kitchen. Perfect pairing with your coffee.",
tags: ["Fresh", "Homemade", "Tasty"],
imageSrc: "http://img.b2bpic.net/free-photo/ice-cream-sundae-edible-waffle-bowl_1339-2876.jpg?_wi=2",
imageAlt: "Great Desserts",
},
id: "2", title: "Great Desserts", author: "Homemade Fresh", description: "Delicious cakes, brownies, and pastries baked fresh daily in our kitchen. Perfect pairing with your coffee.", tags: ["Fresh", "Homemade", "Tasty"],
imageSrc: "http://img.b2bpic.net/free-photo/ice-cream-sundae-edible-waffle-bowl_1339-2876.jpg", imageAlt: "Great Desserts"},
{
id: "3",
title: "Vegan & Vegetarian",
author: "Health Conscious",
description: "Plant-based options for our health-conscious guests. All vegan treats made with care and premium ingredients.",
tags: ["Vegan", "Plant-based", "Healthy"],
imageSrc: "http://img.b2bpic.net/free-photo/macaroons-plastic-box_23-2147787082.jpg?_wi=2",
imageAlt: "Vegan & Vegetarian",
},
id: "3", title: "Vegan & Vegetarian", author: "Health Conscious", description: "Plant-based options for our health-conscious guests. All vegan treats made with care and premium ingredients.", tags: ["Vegan", "Plant-based", "Healthy"],
imageSrc: "http://img.b2bpic.net/free-photo/macaroons-plastic-box_23-2147787082.jpg", imageAlt: "Vegan & Vegetarian"},
{
id: "4",
title: "Laptop-Friendly Workspace",
author: "Work & Study",
description: "High-speed WiFi, comfortable seating, and power outlets everywhere. Perfect for students, freelancers, and remote workers.",
tags: ["WiFi", "Workspace", "Productive"],
imageSrc: "http://img.b2bpic.net/free-photo/best-place-town-meeting-with-friends_329181-2888.jpg?_wi=2",
imageAlt: "Laptop-Friendly Workspace",
},
id: "4", title: "Laptop-Friendly Workspace", author: "Work & Study", description: "High-speed WiFi, comfortable seating, and power outlets everywhere. Perfect for students, freelancers, and remote workers.", tags: ["WiFi", "Workspace", "Productive"],
imageSrc: "http://img.b2bpic.net/free-photo/best-place-town-meeting-with-friends_329181-2888.jpg", imageAlt: "Laptop-Friendly Workspace"},
]}
animationType="slide-up"
textboxLayout="default"
@@ -174,22 +131,16 @@ export default function HomePage() {
tagIcon={Leaf}
bulletPoints={[
{
title: "Quality Coffee",
description: "We partner with ethical farmers to source the finest arabica and robusta beans, roasted to perfection.",
icon: Coffee,
title: "Quality Coffee", description: "We partner with ethical farmers to source the finest arabica and robusta beans, roasted to perfection.", icon: Coffee,
},
{
title: "Sustainable Practices",
description: "Eco-friendly packaging, composting program, and support for local suppliers drive our commitment to the environment.",
icon: Leaf,
title: "Sustainable Practices", description: "Eco-friendly packaging, composting program, and support for local suppliers drive our commitment to the environment.", icon: TreePine,
},
{
title: "Welcoming Community",
description: "Whether solo or in groups, everyone finds their place here. We host events, workshops, and community gatherings.",
icon: Users,
title: "Welcoming Community", description: "Whether solo or in groups, everyone finds their place here. We host events, workshops, and community gatherings.", icon: Users,
},
]}
imageSrc="http://img.b2bpic.net/free-photo/smiling-girl-barista-cafe-preparing-cappuccino-coffee-machine-steaming-milk-wearing-uniform_1258-199307.jpg?_wi=2"
imageSrc="http://img.b2bpic.net/free-photo/smiling-girl-barista-cafe-preparing-cappuccino-coffee-machine-steaming-milk-wearing-uniform_1258-199307.jpg"
imageAlt="BrewHaven café team"
mediaAnimation="slide-up"
imagePosition="right"
@@ -205,21 +156,13 @@ export default function HomePage() {
author="Sarah Johnson, Student"
avatars={[
{
src: "http://img.b2bpic.net/free-photo/successful-young-man-stylish-hat-relaxing-alone-cozy-cafeteria-lunch-break-looking-with-happy-expression_273609-1935.jpg",
alt: "Sarah Johnson",
},
src: "http://img.b2bpic.net/free-photo/successful-young-man-stylish-hat-relaxing-alone-cozy-cafeteria-lunch-break-looking-with-happy-expression_273609-1935.jpg", alt: "Sarah Johnson"},
{
src: "http://img.b2bpic.net/free-photo/vertical-shot-well-dressed-male-leaning-against-wall-looking-camera_181624-15421.jpg",
alt: "Michael Chen",
},
src: "http://img.b2bpic.net/free-photo/vertical-shot-well-dressed-male-leaning-against-wall-looking-camera_181624-15421.jpg", alt: "Michael Chen"},
{
src: "http://img.b2bpic.net/free-photo/smiley-woman-posing-while-nature-adventure_23-2148647990.jpg",
alt: "Emily Rodriguez",
},
src: "http://img.b2bpic.net/free-photo/smiley-woman-posing-while-nature-adventure_23-2148647990.jpg", alt: "Emily Rodriguez"},
{
src: "http://img.b2bpic.net/free-photo/latin-man-smiling-cheerful-expression-closeup-portrait_53876-128963.jpg",
alt: "David Kim",
},
src: "http://img.b2bpic.net/free-photo/latin-man-smiling-cheerful-expression-closeup-portrait_53876-128963.jpg", alt: "David Kim"},
]}
ratingAnimation="slide-up"
avatarsAnimation="slide-up"

View File

@@ -1,51 +1,109 @@
"use client";
import { memo } from "react";
import useSvgTextLogo from "./useSvgTextLogo";
import { cls } from "@/lib/utils";
import { useMemo } from "react";
import { motion } from "framer-motion";
interface SvgTextLogoProps {
logoText: string;
adjustHeightFactor?: number;
verticalAlign?: "top" | "center";
text: string;
fontSize?: number;
fontWeight?: string | number;
fontFamily?: string;
fill?: string;
animated?: boolean;
className?: string;
}
const SvgTextLogo = memo<SvgTextLogoProps>(function SvgTextLogo({
logoText,
adjustHeightFactor,
verticalAlign = "top",
className = "",
}) {
const { svgRef, textRef, viewBox, aspectRatio } = useSvgTextLogo(logoText, false, adjustHeightFactor);
export const SvgTextLogo = ({
text,
fontSize = 48,
fontWeight = "bold", fontFamily = "system-ui, -apple-system, sans-serif", fill = "#000000", animated = false,
className = ""}: SvgTextLogoProps) => {
const textLength = useMemo(() => {
const canvas = typeof document !== "undefined" ? document.createElement("canvas") : null;
if (!canvas) return text.length * fontSize * 0.6;
const context = canvas.getContext("2d");
if (!context) return text.length * fontSize * 0.6;
context.font = `${fontWeight} ${fontSize}px ${fontFamily}`;
return context.measureText(text).width;
}, [text, fontSize, fontWeight, fontFamily]);
const padding = 20;
const width = textLength + padding * 2;
const height = fontSize + padding * 2;
const containerVariants = {
hidden: { opacity: 0 },
visible: {
opacity: 1,
transition: {
staggerChildren: 0.02,
},
},
};
const letterVariants = {
hidden: { opacity: 0, y: 20 },
visible: {
opacity: 1,
y: 0,
transition: {
duration: 0.5,
},
},
};
if (!animated) {
return (
<svg
width={width}
height={height}
viewBox={`0 0 ${width} ${height}`}
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<text
x={padding}
y={padding + fontSize * 0.75}
fontSize={fontSize}
fontWeight={fontWeight}
fontFamily={fontFamily}
fill={fill}
dominantBaseline="auto"
>
{text}
</text>
</svg>
);
}
return (
<svg
ref={svgRef}
viewBox={viewBox}
className={cls("w-full", className)}
style={{ aspectRatio: aspectRatio }}
preserveAspectRatio="none"
role="img"
aria-label={`${logoText} logo`}
<motion.svg
width={width}
height={height}
viewBox={`0 0 ${width} ${height}`}
xmlns="http://www.w3.org/2000/svg"
className={className}
variants={containerVariants}
initial="hidden"
animate="visible"
>
<text
ref={textRef}
x="0"
y={verticalAlign === "center" ? "50%" : "0"}
className="font-bold fill-current"
style={{
fontSize: "20px",
letterSpacing: "-0.02em",
dominantBaseline: verticalAlign === "center" ? "middle" : "text-before-edge"
}}
>
{logoText}
</text>
</svg>
{text.split("").map((char, index) => (
<motion.text
key={index}
x={padding + index * (textLength / text.length)}
y={padding + fontSize * 0.75}
fontSize={fontSize}
fontWeight={fontWeight}
fontFamily={fontFamily}
fill={fill}
dominantBaseline="auto"
variants={letterVariants}
>
{char}
</motion.text>
))}
</motion.svg>
);
});
};
SvgTextLogo.displayName = "SvgTextLogo";
export default SvgTextLogo;
export default SvgTextLogo;