@aws505/sheetsite 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +185 -40
- package/dist/components/index.js +804 -57
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +789 -57
- package/dist/components/index.mjs.map +1 -1
- package/dist/index.js +175 -59
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +165 -59
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/index.ts +12 -0
- package/src/components/sections/BeforeAfter.tsx +345 -0
- package/src/components/sections/FAQ.tsx +3 -3
- package/src/components/sections/Gallery.tsx +104 -4
- package/src/components/sections/Menu.tsx +312 -0
- package/src/components/sections/Services.tsx +3 -3
- package/src/components/sections/Testimonials.tsx +1 -1
- package/src/components/sections/TrustBadges.tsx +283 -0
- package/src/components/ui/AnimatedSection.tsx +136 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/index.ts","../../src/components/layout/Header.tsx","../../src/components/ui/Icons.tsx","../../src/components/layout/Footer.tsx","../../src/components/sections/Hero.tsx","../../src/components/sections/Services.tsx","../../src/components/sections/Testimonials.tsx","../../src/components/sections/FAQ.tsx","../../src/components/sections/Hours.tsx","../../src/components/sections/Gallery.tsx","../../src/components/ui/Button.tsx","../../src/components/ui/Card.tsx"],"sourcesContent":["/**\n * SheetSite Component Library\n *\n * Pre-built React components for building small business websites.\n * All components are designed to work with SheetSite data types.\n */\n\n// Layout Components\nexport { Header } from './layout/Header';\nexport type { HeaderProps, NavItem } from './layout/Header';\n\nexport { Footer } from './layout/Footer';\nexport type { FooterProps, FooterLink } from './layout/Footer';\n\n// Section Components\nexport { Hero } from './sections/Hero';\nexport type { HeroProps } from './sections/Hero';\n\nexport { Services } from './sections/Services';\nexport type { ServicesProps } from './sections/Services';\n\nexport { Testimonials } from './sections/Testimonials';\nexport type { TestimonialsProps } from './sections/Testimonials';\n\nexport { FAQ } from './sections/FAQ';\nexport type { FAQProps } from './sections/FAQ';\n\nexport { Hours, getTodayHours, isCurrentlyOpen } from './sections/Hours';\nexport type { HoursProps } from './sections/Hours';\n\nexport { Gallery } from './sections/Gallery';\nexport type { GalleryProps } from './sections/Gallery';\n\n// UI Components\nexport { Button, ButtonLink } from './ui/Button';\nexport type { ButtonProps, ButtonLinkProps } from './ui/Button';\n\nexport { Card, CardHeader, CardBody, CardFooter, CardImage } from './ui/Card';\nexport type { CardProps, CardHeaderProps, CardImageProps } from './ui/Card';\n\nexport * from './ui/Icons';\n","/**\n * Header Component\n *\n * A responsive header with navigation and mobile menu.\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport type { BusinessInfo } from '../../data/types';\nimport { MenuIcon, XIcon, PhoneIcon } from '../ui/Icons';\n\nexport interface NavItem {\n label: string;\n href: string;\n}\n\nexport interface HeaderProps {\n business: BusinessInfo;\n navigation?: NavItem[];\n sticky?: boolean;\n transparent?: boolean;\n showPhone?: boolean;\n className?: string;\n}\n\nconst defaultNavigation: NavItem[] = [\n { label: 'Home', href: '/' },\n { label: 'Services', href: '/#services' },\n { label: 'Hours', href: '/#hours' },\n { label: 'Reviews', href: '/#reviews' },\n { label: 'FAQ', href: '/#faq' },\n];\n\n/**\n * Header component.\n */\nexport function Header({\n business,\n navigation = defaultNavigation,\n sticky = true,\n transparent = false,\n showPhone = true,\n className = '',\n}: HeaderProps) {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n\n return (\n <header\n className={`\n ${sticky ? 'sticky top-0 z-50' : ''}\n ${transparent ? 'bg-transparent' : 'bg-white shadow-sm'}\n ${className}\n `}\n >\n <nav className=\"container mx-auto px-4\">\n <div className=\"flex items-center justify-between h-16\">\n {/* Logo / Business Name */}\n <a href=\"/\" className=\"flex items-center\">\n {business.logoUrl ? (\n <img\n src={business.logoUrl}\n alt={business.name}\n className=\"h-10 w-auto\"\n />\n ) : (\n <span className=\"text-xl font-bold text-gray-900\">{business.name}</span>\n )}\n </a>\n\n {/* Desktop Navigation */}\n <div className=\"hidden md:flex items-center space-x-8\">\n {navigation.map((item) => (\n <a\n key={item.href}\n href={item.href}\n className=\"text-gray-600 hover:text-primary-600 font-medium transition-colors\"\n >\n {item.label}\n </a>\n ))}\n\n {/* Phone Button */}\n {showPhone && business.phone && (\n <a\n href={`tel:${business.phone.replace(/\\D/g, '')}`}\n className=\"inline-flex items-center px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors\"\n >\n <PhoneIcon size={18} className=\"mr-2\" />\n {business.phone}\n </a>\n )}\n </div>\n\n {/* Mobile Menu Button */}\n <button\n className=\"md:hidden p-2 rounded-lg hover:bg-gray-100\"\n onClick={() => setMobileMenuOpen(!mobileMenuOpen)}\n aria-label={mobileMenuOpen ? 'Close menu' : 'Open menu'}\n >\n {mobileMenuOpen ? <XIcon size={24} /> : <MenuIcon size={24} />}\n </button>\n </div>\n\n {/* Mobile Navigation */}\n {mobileMenuOpen && (\n <div className=\"md:hidden py-4 border-t\">\n {navigation.map((item) => (\n <a\n key={item.href}\n href={item.href}\n className=\"block py-2 text-gray-600 hover:text-primary-600 font-medium\"\n onClick={() => setMobileMenuOpen(false)}\n >\n {item.label}\n </a>\n ))}\n {showPhone && business.phone && (\n <a\n href={`tel:${business.phone.replace(/\\D/g, '')}`}\n className=\"flex items-center py-2 text-primary-600 font-medium\"\n >\n <PhoneIcon size={18} className=\"mr-2\" />\n {business.phone}\n </a>\n )}\n </div>\n )}\n </nav>\n </header>\n );\n}\n\nexport default Header;\n","/**\n * Icon Library\n *\n * SVG icons for common use cases across business websites.\n * All icons use currentColor for easy theming.\n */\n\nimport React from 'react';\n\nexport interface IconProps {\n className?: string;\n size?: number;\n 'aria-hidden'?: boolean;\n}\n\nconst defaultProps: IconProps = {\n className: '',\n size: 24,\n 'aria-hidden': true,\n};\n\n// =============================================================================\n// GENERAL ICONS\n// =============================================================================\n\nexport function PhoneIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\" />\n </svg>\n );\n}\n\nexport function MailIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n );\n}\n\nexport function MapPinIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z\" />\n <circle cx=\"12\" cy=\"10\" r=\"3\" />\n </svg>\n );\n}\n\nexport function ClockIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n );\n}\n\nexport function StarIcon({ className = '', size = 24, filled = false, ...props }: IconProps & { filled?: boolean }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill={filled ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport function ChevronRightIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nexport function MenuIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\" />\n <line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\" />\n <line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\nexport function XIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function CheckIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\n// =============================================================================\n// SERVICE ICONS\n// =============================================================================\n\nexport function ScissorsIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <circle cx=\"6\" cy=\"6\" r=\"3\" />\n <path d=\"M8.12 8.12 12 12\" />\n <path d=\"M20 4 8.12 15.88\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M14.8 14.8 20 20\" />\n </svg>\n );\n}\n\nexport function WrenchIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n );\n}\n\nexport function SparklesIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z\" />\n <path d=\"M5 3v4\" />\n <path d=\"M19 17v4\" />\n <path d=\"M3 5h4\" />\n <path d=\"M17 19h4\" />\n </svg>\n );\n}\n\nexport function HeartIcon({ className = '', size = 24, filled = false, ...props }: IconProps & { filled?: boolean }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill={filled ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z\" />\n </svg>\n );\n}\n\nexport function UtensilsIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2\" />\n <path d=\"M7 2v20\" />\n <path d=\"M21 15V2v0a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7\" />\n </svg>\n );\n}\n\nexport function CakeIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8\" />\n <path d=\"M4 16s.5-1 2-1 2.5 2 4 2 2.5-2 4-2 2.5 2 4 2 2-1 2-1\" />\n <path d=\"M2 21h20\" />\n <path d=\"M7 8v3\" />\n <path d=\"M12 8v3\" />\n <path d=\"M17 8v3\" />\n <path d=\"M7 4h.01\" />\n <path d=\"M12 4h.01\" />\n <path d=\"M17 4h.01\" />\n </svg>\n );\n}\n\nexport function BriefcaseIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"7\" rx=\"2\" ry=\"2\" />\n <path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\" />\n </svg>\n );\n}\n\n// =============================================================================\n// SOCIAL ICONS\n// =============================================================================\n\nexport function YelpIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n {...props}\n >\n <path d=\"M20.16 12.73l-3.29 1.47c-.64.28-1.31-.26-1.2-.97l.52-3.4c.08-.56.49-.98 1.03-1.04l3.39-.38c.7-.08 1.22.58 1 1.23l-1.07 2.62c-.14.35-.36.41-.38.47zM14.13 15.58l-.52 3.4c-.11.7.55 1.25 1.2.97l3.29-1.47c.02-.06.24-.12.38-.47l1.07-2.62c.22-.65-.3-1.31-1-1.23l-3.39.38c-.54.06-.95.48-1.03 1.04zM10.98 3.05c-.47-.6-1.37-.5-1.7.2l-3.6 7.51c-.24.5-.01 1.1.51 1.33l2.63 1.21c.62.28 1.3-.2 1.27-.89l-.33-7.97c-.02-.56-.3-1.01-.78-1.39zM8.37 14.35l-2.63-1.21c-.52-.23-.75-.83-.51-1.33l3.6-7.51c.33-.7 1.23-.8 1.7-.2.48.38.76.83.78 1.39l.33 7.97c.03.69-.65 1.17-1.27.89zM10.04 16.42l-3.22 1.8c-.62.35-1.36-.14-1.28-.86l.44-3.52c.06-.53.42-.95.92-1.08l3.02-.78c.69-.18 1.32.43 1.09 1.1l-1.24 3.06c-.14.33-.38.34-.42.34-.04 0-.18-.01-.31.04v-.1z\" />\n </svg>\n );\n}\n\nexport function InstagramIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <rect width=\"20\" height=\"20\" x=\"2\" y=\"2\" rx=\"5\" ry=\"5\" />\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\" />\n <line x1=\"17.5\" x2=\"17.51\" y1=\"6.5\" y2=\"6.5\" />\n </svg>\n );\n}\n\nexport function FacebookIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\" />\n </svg>\n );\n}\n\n// =============================================================================\n// ICON MAP\n// =============================================================================\n\n/**\n * Map of icon names to components.\n * Use this to render icons dynamically based on string names.\n */\nexport const iconMap: Record<string, React.FC<IconProps>> = {\n phone: PhoneIcon,\n mail: MailIcon,\n email: MailIcon,\n 'map-pin': MapPinIcon,\n location: MapPinIcon,\n clock: ClockIcon,\n time: ClockIcon,\n star: StarIcon,\n 'chevron-down': ChevronDownIcon,\n 'chevron-right': ChevronRightIcon,\n menu: MenuIcon,\n x: XIcon,\n close: XIcon,\n check: CheckIcon,\n scissors: ScissorsIcon,\n wrench: WrenchIcon,\n tool: WrenchIcon,\n sparkles: SparklesIcon,\n heart: HeartIcon,\n utensils: UtensilsIcon,\n food: UtensilsIcon,\n cake: CakeIcon,\n briefcase: BriefcaseIcon,\n yelp: YelpIcon,\n instagram: InstagramIcon,\n facebook: FacebookIcon,\n};\n\n/**\n * Get an icon component by name.\n */\nexport function getIcon(name: string): React.FC<IconProps> | null {\n return iconMap[name.toLowerCase()] || null;\n}\n\n/**\n * Render an icon by name.\n */\nexport function Icon({ name, ...props }: IconProps & { name: string }) {\n const IconComponent = getIcon(name);\n if (!IconComponent) return null;\n return <IconComponent {...props} />;\n}\n","/**\n * Footer Component\n *\n * A comprehensive footer with business info, links, and social icons.\n */\n\nimport React from 'react';\nimport type { BusinessInfo, HoursEntry } from '../../data/types';\nimport {\n PhoneIcon,\n MailIcon,\n MapPinIcon,\n ClockIcon,\n FacebookIcon,\n InstagramIcon,\n YelpIcon,\n} from '../ui/Icons';\n\nexport interface FooterLink {\n label: string;\n href: string;\n}\n\nexport interface FooterProps {\n business: BusinessInfo;\n hours?: HoursEntry[];\n quickLinks?: FooterLink[];\n showHours?: boolean;\n showSocial?: boolean;\n variant?: 'simple' | 'columns' | 'centered';\n className?: string;\n}\n\nconst defaultQuickLinks: FooterLink[] = [\n { label: 'Home', href: '/' },\n { label: 'Services', href: '/#services' },\n { label: 'Hours', href: '/#hours' },\n { label: 'Reviews', href: '/#reviews' },\n { label: 'FAQ', href: '/#faq' },\n];\n\nconst dayNames: Record<string, string> = {\n monday: 'Mon',\n tuesday: 'Tue',\n wednesday: 'Wed',\n thursday: 'Thu',\n friday: 'Fri',\n saturday: 'Sat',\n sunday: 'Sun',\n};\n\n/**\n * Footer component.\n */\nexport function Footer({\n business,\n hours = [],\n quickLinks = defaultQuickLinks,\n showHours = true,\n showSocial = true,\n variant = 'columns',\n className = '',\n}: FooterProps) {\n const currentYear = new Date().getFullYear();\n\n const socialLinks = [\n { url: business.socialYelp, icon: YelpIcon, label: 'Yelp' },\n { url: business.socialInstagram, icon: InstagramIcon, label: 'Instagram' },\n { url: business.socialFacebook, icon: FacebookIcon, label: 'Facebook' },\n ].filter((link) => link.url);\n\n if (variant === 'simple') {\n return (\n <footer className={`bg-gray-900 text-white py-8 ${className}`}>\n <div className=\"container mx-auto px-4 text-center\">\n <p className=\"text-lg font-semibold mb-2\">{business.name}</p>\n {business.phone && <p className=\"text-gray-400\">{business.phone}</p>}\n <p className=\"text-gray-500 text-sm mt-4\">\n © {currentYear} {business.name}. All rights reserved.\n </p>\n </div>\n </footer>\n );\n }\n\n if (variant === 'centered') {\n return (\n <footer className={`bg-gray-900 text-white py-12 ${className}`}>\n <div className=\"container mx-auto px-4 text-center\">\n <p className=\"text-2xl font-bold mb-4\">{business.name}</p>\n {business.tagline && <p className=\"text-gray-400 mb-6\">{business.tagline}</p>}\n\n <div className=\"flex flex-wrap justify-center gap-6 mb-8\">\n {quickLinks.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"text-gray-400 hover:text-white transition-colors\"\n >\n {link.label}\n </a>\n ))}\n </div>\n\n {showSocial && socialLinks.length > 0 && (\n <div className=\"flex justify-center gap-4 mb-8\">\n {socialLinks.map((link) => (\n <a\n key={link.label}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-2 bg-gray-800 rounded-full hover:bg-gray-700 transition-colors\"\n aria-label={link.label}\n >\n <link.icon size={20} />\n </a>\n ))}\n </div>\n )}\n\n <p className=\"text-gray-500 text-sm\">\n © {currentYear} {business.name}. All rights reserved.\n </p>\n </div>\n </footer>\n );\n }\n\n // Default: columns variant\n return (\n <footer className={`bg-gray-900 text-white py-12 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <div className=\"grid md:grid-cols-3 gap-8\">\n {/* Business Info */}\n <div>\n <h3 className=\"text-xl font-bold mb-4\">{business.name}</h3>\n {business.addressLine1 && (\n <div className=\"flex items-start text-gray-400 mb-3\">\n <MapPinIcon size={18} className=\"mr-2 mt-1 flex-shrink-0\" />\n <div>\n <p>{business.addressLine1}</p>\n {business.addressLine2 && <p>{business.addressLine2}</p>}\n <p>\n {business.city}, {business.state} {business.zip}\n </p>\n </div>\n </div>\n )}\n {business.phone && (\n <a\n href={`tel:${business.phone.replace(/\\D/g, '')}`}\n className=\"flex items-center text-gray-400 hover:text-white mb-3\"\n >\n <PhoneIcon size={18} className=\"mr-2\" />\n {business.phone}\n </a>\n )}\n {business.email && (\n <a\n href={`mailto:${business.email}`}\n className=\"flex items-center text-gray-400 hover:text-white\"\n >\n <MailIcon size={18} className=\"mr-2\" />\n {business.email}\n </a>\n )}\n </div>\n\n {/* Quick Links */}\n <div>\n <h3 className=\"text-lg font-semibold mb-4\">Quick Links</h3>\n <ul className=\"space-y-2\">\n {quickLinks.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className=\"text-gray-400 hover:text-white transition-colors\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n\n {showSocial && socialLinks.length > 0 && (\n <div className=\"flex gap-3 mt-6\">\n {socialLinks.map((link) => (\n <a\n key={link.label}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-2 bg-gray-800 rounded-full hover:bg-gray-700 transition-colors\"\n aria-label={link.label}\n >\n <link.icon size={20} />\n </a>\n ))}\n </div>\n )}\n </div>\n\n {/* Hours */}\n {showHours && hours.length > 0 && (\n <div>\n <h3 className=\"text-lg font-semibold mb-4 flex items-center\">\n <ClockIcon size={18} className=\"mr-2\" />\n Hours\n </h3>\n <ul className=\"space-y-1 text-gray-400\">\n {hours.map((entry) => (\n <li key={entry.day} className=\"flex justify-between\">\n <span>{dayNames[entry.day]}</span>\n <span>\n {entry.closed ? 'Closed' : `${entry.open} - ${entry.close}`}\n </span>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n\n {/* Bottom Bar */}\n <div className=\"mt-12 pt-8 border-t border-gray-800 text-center text-gray-500 text-sm\">\n <p>© {currentYear} {business.name}. All rights reserved.</p>\n </div>\n </div>\n </footer>\n );\n}\n\nexport default Footer;\n","/**\n * Hero Section Component\n *\n * A prominent hero section for the top of pages.\n * Supports various layouts and customization options.\n */\n\n'use client';\n\nimport React from 'react';\nimport type { BusinessInfo } from '../../data/types';\nimport { PhoneIcon, MapPinIcon, ClockIcon } from '../ui/Icons';\n\nexport interface HeroProps {\n business: BusinessInfo;\n variant?: 'centered' | 'left' | 'split';\n showOpenStatus?: boolean;\n isOpen?: boolean;\n todayHours?: string;\n backgroundImage?: string;\n overlay?: boolean;\n className?: string;\n}\n\n/**\n * Hero section component.\n */\nexport function Hero({\n business,\n variant = 'centered',\n showOpenStatus = true,\n isOpen,\n todayHours,\n backgroundImage,\n overlay = true,\n className = '',\n}: HeroProps) {\n const bgStyle = backgroundImage\n ? { backgroundImage: `url(${backgroundImage})` }\n : undefined;\n\n const handleCallClick = () => {\n if (business.phone) {\n window.location.href = `tel:${business.phone.replace(/\\D/g, '')}`;\n }\n };\n\n const handleDirectionsClick = () => {\n if (business.googleMapsUrl) {\n window.open(business.googleMapsUrl, '_blank');\n } else {\n const address = [\n business.addressLine1,\n business.city,\n business.state,\n business.zip,\n ]\n .filter(Boolean)\n .join(', ');\n window.open(`https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}`, '_blank');\n }\n };\n\n const handlePrimaryClick = () => {\n if (business.primaryCtaUrl) {\n if (business.primaryCtaUrl.startsWith('http')) {\n window.open(business.primaryCtaUrl, '_blank');\n } else if (business.primaryCtaUrl.startsWith('mailto:')) {\n window.location.href = business.primaryCtaUrl;\n } else {\n window.location.href = business.primaryCtaUrl;\n }\n } else if (business.bookingUrl) {\n window.open(business.bookingUrl, '_blank');\n } else if (business.email) {\n window.location.href = `mailto:${business.email}`;\n }\n };\n\n return (\n <section\n className={`\n relative min-h-[500px] flex items-center\n ${backgroundImage ? 'bg-cover bg-center' : 'bg-gradient-to-br from-primary-600 to-primary-800'}\n ${className}\n `}\n style={bgStyle}\n >\n {/* Overlay */}\n {overlay && backgroundImage && (\n <div className=\"absolute inset-0 bg-black/50\" />\n )}\n\n {/* Content */}\n <div className=\"relative z-10 container mx-auto px-4 py-16\">\n <div\n className={`\n ${variant === 'centered' ? 'text-center max-w-3xl mx-auto' : ''}\n ${variant === 'left' ? 'max-w-2xl' : ''}\n ${variant === 'split' ? 'grid md:grid-cols-2 gap-8 items-center' : ''}\n `}\n >\n <div>\n {/* Open Status */}\n {showOpenStatus && isOpen !== undefined && (\n <div className=\"mb-4\">\n <span\n className={`\n inline-flex items-center px-3 py-1 rounded-full text-sm font-medium\n ${isOpen ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'}\n `}\n >\n <span\n className={`w-2 h-2 rounded-full mr-2 ${isOpen ? 'bg-green-500' : 'bg-red-500'}`}\n />\n {isOpen ? 'Open Now' : 'Closed'}\n {todayHours && <span className=\"ml-2 opacity-75\">· {todayHours}</span>}\n </span>\n </div>\n )}\n\n {/* Business Name */}\n <h1 className=\"text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-4\">\n {business.name}\n </h1>\n\n {/* Tagline */}\n {business.tagline && (\n <p className=\"text-xl md:text-2xl text-white/90 mb-6\">\n {business.tagline}\n </p>\n )}\n\n {/* Description */}\n {business.aboutShort && (\n <p className=\"text-lg text-white/80 mb-8 max-w-xl\">\n {business.aboutShort}\n </p>\n )}\n\n {/* Trust Signals */}\n <div className=\"flex flex-wrap justify-center gap-4 mb-8\">\n {['Quality Work', 'Fair Prices', 'Fast Service'].map((signal) => (\n <div key={signal} className=\"flex items-center text-white/90\">\n <svg className=\"w-5 h-5 text-accent-400 mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"text-sm font-medium\">{signal}</span>\n </div>\n ))}\n </div>\n\n {/* CTA Buttons */}\n <div className=\"flex flex-col sm:flex-row gap-4 justify-center\">\n {business.phone && (\n <button\n onClick={handleCallClick}\n className=\"inline-flex items-center justify-center px-6 py-3 bg-white text-primary-700 font-semibold rounded-lg hover:bg-gray-100 transition-colors\"\n >\n <PhoneIcon size={20} className=\"mr-2\" />\n Call Now\n </button>\n )}\n\n {(business.addressLine1 || business.googleMapsUrl) && (\n <button\n onClick={handleDirectionsClick}\n className=\"inline-flex items-center justify-center px-6 py-3 border-2 border-white text-white font-semibold rounded-lg hover:bg-white/10 transition-colors\"\n >\n <MapPinIcon size={20} className=\"mr-2\" />\n Get Directions\n </button>\n )}\n\n {(business.primaryCtaUrl || business.bookingUrl || business.email) && (\n <button\n onClick={handlePrimaryClick}\n className=\"inline-flex items-center justify-center px-6 py-3 bg-accent-500 text-white font-semibold rounded-lg hover:bg-accent-600 transition-colors\"\n >\n {business.primaryCtaText || 'Contact Us'}\n </button>\n )}\n </div>\n </div>\n\n {/* Split layout - right side could show an image or additional content */}\n {variant === 'split' && (\n <div className=\"hidden md:block\">\n {/* Placeholder for hero image or additional content */}\n </div>\n )}\n </div>\n </div>\n </section>\n );\n}\n\nexport default Hero;\n","/**\n * Services Section Component\n *\n * Displays a grid of services offered by the business.\n */\n\nimport React from 'react';\nimport type { Service } from '../../data/types';\nimport { Icon } from '../ui/Icons';\n\nexport interface ServicesProps {\n services: Service[];\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n showPrices?: boolean;\n showIcons?: boolean;\n variant?: 'cards' | 'list' | 'minimal';\n limit?: number;\n className?: string;\n id?: string;\n}\n\n/**\n * Services section component.\n */\nexport function Services({\n services,\n title = 'Our Services',\n subtitle,\n columns = 3,\n showPrices = true,\n showIcons = true,\n variant = 'cards',\n limit,\n className = '',\n id = 'services',\n}: ServicesProps) {\n const displayedServices = limit ? services.slice(0, limit) : services;\n\n const gridCols = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-2 lg:grid-cols-3',\n 4: 'md:grid-cols-2 lg:grid-cols-4',\n };\n\n if (variant === 'list') {\n return (\n <section id={id} className={`py-16 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className=\"max-w-3xl mx-auto divide-y divide-gray-200\">\n {displayedServices.map((service) => (\n <ServiceListItem\n key={service.id || service.title}\n service={service}\n showPrice={showPrices}\n showIcon={showIcons}\n />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n if (variant === 'minimal') {\n return (\n <section id={id} className={`py-16 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className={`grid gap-6 ${gridCols[columns]}`}>\n {displayedServices.map((service) => (\n <ServiceMinimalCard\n key={service.id || service.title}\n service={service}\n showPrice={showPrices}\n />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n // Default: cards variant\n return (\n <section id={id} className={`py-16 bg-gray-50 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className={`grid gap-6 ${gridCols[columns]}`}>\n {displayedServices.map((service) => (\n <ServiceCard\n key={service.id || service.title}\n service={service}\n showPrice={showPrices}\n showIcon={showIcons}\n />\n ))}\n </div>\n </div>\n </section>\n );\n}\n\n/**\n * Section header.\n */\nfunction SectionHeader({ title, subtitle }: { title: string; subtitle?: string }) {\n return (\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n );\n}\n\n/**\n * Service card component.\n */\nfunction ServiceCard({\n service,\n showPrice,\n showIcon,\n}: {\n service: Service;\n showPrice: boolean;\n showIcon: boolean;\n}) {\n return (\n <div className=\"bg-white rounded-lg shadow-md p-6 hover:shadow-lg transition-shadow\">\n {showIcon && service.icon && (\n <div className=\"w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mb-4\">\n <Icon name={service.icon} size={24} className=\"text-primary-600\" />\n </div>\n )}\n <h3 className=\"text-xl font-semibold text-gray-900 mb-2\">{service.title}</h3>\n {service.description && (\n <p className=\"text-gray-600 mb-4\">{service.description}</p>\n )}\n {showPrice && service.priceNote && (\n <p className=\"text-primary-600 font-medium\">{service.priceNote}</p>\n )}\n {showPrice && service.price && !service.priceNote && (\n <p className=\"text-primary-600 font-medium\">${service.price.toFixed(2)}</p>\n )}\n </div>\n );\n}\n\n/**\n * Service list item component.\n */\nfunction ServiceListItem({\n service,\n showPrice,\n showIcon,\n}: {\n service: Service;\n showPrice: boolean;\n showIcon: boolean;\n}) {\n return (\n <div className=\"py-4 flex items-start justify-between\">\n <div className=\"flex items-start\">\n {showIcon && service.icon && (\n <div className=\"w-10 h-10 bg-primary-100 rounded-lg flex items-center justify-center mr-4 flex-shrink-0\">\n <Icon name={service.icon} size={20} className=\"text-primary-600\" />\n </div>\n )}\n <div>\n <h3 className=\"text-lg font-semibold text-gray-900\">{service.title}</h3>\n {service.description && (\n <p className=\"text-gray-600 text-sm mt-1\">{service.description}</p>\n )}\n </div>\n </div>\n {showPrice && (service.priceNote || service.price) && (\n <div className=\"text-right ml-4 flex-shrink-0\">\n <p className=\"text-primary-600 font-medium\">\n {service.priceNote || `$${service.price?.toFixed(2)}`}\n </p>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Minimal service card component.\n */\nfunction ServiceMinimalCard({\n service,\n showPrice,\n}: {\n service: Service;\n showPrice: boolean;\n}) {\n return (\n <div className=\"p-4 border border-gray-200 rounded-lg hover:border-primary-300 transition-colors\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold text-gray-900\">{service.title}</h3>\n {showPrice && (service.priceNote || service.price) && (\n <span className=\"text-primary-600 text-sm font-medium\">\n {service.priceNote || `$${service.price?.toFixed(2)}`}\n </span>\n )}\n </div>\n {service.description && (\n <p className=\"text-gray-600 text-sm mt-2\">{service.description}</p>\n )}\n </div>\n );\n}\n\nexport default Services;\n","/**\n * Testimonials Section Component\n *\n * Displays customer reviews and testimonials.\n */\n\nimport React from 'react';\nimport type { Testimonial } from '../../data/types';\nimport { StarIcon } from '../ui/Icons';\n\nexport interface TestimonialsProps {\n testimonials: Testimonial[];\n title?: string;\n subtitle?: string;\n columns?: 1 | 2 | 3;\n showRatings?: boolean;\n variant?: 'cards' | 'quotes' | 'minimal';\n limit?: number;\n className?: string;\n id?: string;\n}\n\n/**\n * Testimonials section component.\n */\nexport function Testimonials({\n testimonials,\n title = 'What Our Customers Say',\n subtitle,\n columns = 3,\n showRatings = true,\n variant = 'cards',\n limit,\n className = '',\n id = 'reviews',\n}: TestimonialsProps) {\n const displayedTestimonials = limit ? testimonials.slice(0, limit) : testimonials;\n\n const gridCols = {\n 1: 'max-w-2xl mx-auto',\n 2: 'md:grid-cols-2 max-w-4xl mx-auto',\n 3: 'md:grid-cols-2 lg:grid-cols-3',\n };\n\n return (\n <section id={id} className={`py-16 ${className}`}>\n <div className=\"container mx-auto px-4\">\n {/* Header */}\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n\n {/* Testimonials Grid */}\n <div className={`grid gap-6 ${gridCols[columns]}`}>\n {displayedTestimonials.map((testimonial) => (\n <TestimonialCard\n key={testimonial.id || testimonial.name}\n testimonial={testimonial}\n showRating={showRatings}\n variant={variant}\n />\n ))}\n </div>\n </div>\n </section>\n );\n}\n\n/**\n * Individual testimonial card.\n */\nfunction TestimonialCard({\n testimonial,\n showRating,\n variant,\n}: {\n testimonial: Testimonial;\n showRating: boolean;\n variant: TestimonialsProps['variant'];\n}) {\n if (variant === 'quotes') {\n return (\n <div className=\"text-center\">\n <QuoteIcon className=\"w-10 h-10 text-primary-200 mx-auto mb-4\" />\n <blockquote className=\"text-lg text-gray-700 italic mb-4\">\n \"{testimonial.quote}\"\n </blockquote>\n {showRating && testimonial.rating && (\n <StarRating rating={testimonial.rating} className=\"justify-center mb-2\" />\n )}\n <div className=\"font-semibold text-gray-900\">{testimonial.name}</div>\n {testimonial.context && (\n <div className=\"text-sm text-gray-500\">{testimonial.context}</div>\n )}\n </div>\n );\n }\n\n if (variant === 'minimal') {\n return (\n <div className=\"border-l-4 border-primary-500 pl-4\">\n <blockquote className=\"text-gray-700 mb-2\">\n \"{testimonial.quote}\"\n </blockquote>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-semibold text-gray-900\">{testimonial.name}</span>\n {showRating && testimonial.rating && (\n <StarRating rating={testimonial.rating} size={14} />\n )}\n </div>\n </div>\n );\n }\n\n // Default: cards variant\n return (\n <div className=\"bg-white rounded-lg shadow p-6\">\n {showRating && testimonial.rating && (\n <StarRating rating={testimonial.rating} className=\"mb-3\" />\n )}\n <blockquote className=\"text-gray-700 mb-4\">\n \"{testimonial.quote}\"\n </blockquote>\n <div className=\"flex items-center\">\n {testimonial.imageUrl && (\n <img\n src={testimonial.imageUrl}\n alt={testimonial.name}\n className=\"w-10 h-10 rounded-full mr-3 object-cover\"\n />\n )}\n <div>\n <div className=\"font-semibold text-gray-900\">{testimonial.name}</div>\n {testimonial.context && (\n <div className=\"text-sm text-gray-500\">{testimonial.context}</div>\n )}\n {testimonial.source && (\n <div className=\"text-xs text-gray-400\">via {testimonial.source}</div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Star rating component.\n */\nfunction StarRating({\n rating,\n size = 18,\n className = '',\n}: {\n rating: number;\n size?: number;\n className?: string;\n}) {\n return (\n <div className={`flex ${className}`} aria-label={`${rating} out of 5 stars`}>\n {[1, 2, 3, 4, 5].map((star) => (\n <StarIcon\n key={star}\n size={size}\n filled={star <= rating}\n className={star <= rating ? 'text-yellow-400' : 'text-gray-300'}\n />\n ))}\n </div>\n );\n}\n\n/**\n * Quote icon.\n */\nfunction QuoteIcon({ className }: { className?: string }) {\n return (\n <svg className={className} fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z\" />\n </svg>\n );\n}\n\nexport default Testimonials;\n","/**\n * FAQ Section Component\n *\n * Displays frequently asked questions in an accordion format.\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport type { FAQItem } from '../../data/types';\nimport { ChevronDownIcon } from '../ui/Icons';\n\nexport interface FAQProps {\n items: FAQItem[];\n title?: string;\n subtitle?: string;\n variant?: 'accordion' | 'cards' | 'simple';\n defaultOpen?: number | number[];\n allowMultiple?: boolean;\n className?: string;\n id?: string;\n}\n\n/**\n * FAQ section component.\n */\nexport function FAQ({\n items,\n title = 'Frequently Asked Questions',\n subtitle,\n variant = 'accordion',\n defaultOpen = 0,\n allowMultiple = false,\n className = '',\n id = 'faq',\n}: FAQProps) {\n const initialOpen = Array.isArray(defaultOpen) ? defaultOpen : [defaultOpen];\n const [openItems, setOpenItems] = useState<number[]>(initialOpen);\n\n const toggleItem = (index: number) => {\n if (allowMultiple) {\n setOpenItems((prev) =>\n prev.includes(index)\n ? prev.filter((i) => i !== index)\n : [...prev, index]\n );\n } else {\n setOpenItems((prev) =>\n prev.includes(index) ? [] : [index]\n );\n }\n };\n\n if (variant === 'cards') {\n return (\n <section id={id} className={`py-16 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className=\"grid md:grid-cols-2 gap-6 max-w-4xl mx-auto\">\n {items.map((item) => (\n <FAQCard key={item.id || item.question} item={item} />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n if (variant === 'simple') {\n return (\n <section id={id} className={`py-16 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className=\"max-w-3xl mx-auto space-y-8\">\n {items.map((item) => (\n <FAQSimple key={item.id || item.question} item={item} />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n // Default: accordion variant\n return (\n <section id={id} className={`py-16 bg-gray-50 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className=\"max-w-3xl mx-auto\">\n {items.map((item, index) => (\n <FAQAccordionItem\n key={item.id || item.question}\n item={item}\n isOpen={openItems.includes(index)}\n onToggle={() => toggleItem(index)}\n />\n ))}\n </div>\n </div>\n </section>\n );\n}\n\n/**\n * Section header.\n */\nfunction SectionHeader({ title, subtitle }: { title: string; subtitle?: string }) {\n return (\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n );\n}\n\n/**\n * Accordion FAQ item.\n */\nfunction FAQAccordionItem({\n item,\n isOpen,\n onToggle,\n}: {\n item: FAQItem;\n isOpen: boolean;\n onToggle: () => void;\n}) {\n return (\n <div className=\"border-b border-gray-200 last:border-b-0\">\n <button\n className=\"w-full py-4 flex items-center justify-between text-left focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 rounded\"\n onClick={onToggle}\n aria-expanded={isOpen}\n >\n <span className=\"text-lg font-medium text-gray-900 pr-4\">{item.question}</span>\n <ChevronDownIcon\n size={20}\n className={`flex-shrink-0 text-gray-500 transition-transform duration-200 ${\n isOpen ? 'rotate-180' : ''\n }`}\n />\n </button>\n <div\n className={`overflow-hidden transition-all duration-200 ${\n isOpen ? 'max-h-96 pb-4' : 'max-h-0'\n }`}\n >\n <p className=\"text-gray-600\">{item.answer}</p>\n </div>\n </div>\n );\n}\n\n/**\n * Card FAQ item.\n */\nfunction FAQCard({ item }: { item: FAQItem }) {\n return (\n <div className=\"bg-white rounded-lg shadow p-6\">\n <h3 className=\"text-lg font-semibold text-gray-900 mb-2\">{item.question}</h3>\n <p className=\"text-gray-600\">{item.answer}</p>\n </div>\n );\n}\n\n/**\n * Simple FAQ item.\n */\nfunction FAQSimple({ item }: { item: FAQItem }) {\n return (\n <div>\n <h3 className=\"text-lg font-semibold text-gray-900 mb-2\">{item.question}</h3>\n <p className=\"text-gray-600\">{item.answer}</p>\n </div>\n );\n}\n\nexport default FAQ;\n","/**\n * Hours Section Component\n *\n * Displays business hours with today highlighted.\n */\n\nimport React from 'react';\nimport type { HoursEntry, DayOfWeek } from '../../data/types';\nimport { ClockIcon } from '../ui/Icons';\n\nexport interface HoursProps {\n hours: HoursEntry[];\n title?: string;\n highlightToday?: boolean;\n variant?: 'card' | 'inline' | 'minimal';\n timezone?: string;\n className?: string;\n id?: string;\n}\n\nconst dayOrder: DayOfWeek[] = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];\n\nconst dayNames: Record<DayOfWeek, string> = {\n monday: 'Monday',\n tuesday: 'Tuesday',\n wednesday: 'Wednesday',\n thursday: 'Thursday',\n friday: 'Friday',\n saturday: 'Saturday',\n sunday: 'Sunday',\n};\n\nconst dayAbbrev: Record<DayOfWeek, string> = {\n monday: 'Mon',\n tuesday: 'Tue',\n wednesday: 'Wed',\n thursday: 'Thu',\n friday: 'Fri',\n saturday: 'Sat',\n sunday: 'Sun',\n};\n\n/**\n * Get today's day of week.\n */\nfunction getTodayDay(timezone?: string): DayOfWeek {\n const now = timezone\n ? new Date(new Date().toLocaleString('en-US', { timeZone: timezone }))\n : new Date();\n const jsDay = now.getDay();\n // JavaScript: 0 = Sunday, 1 = Monday, etc.\n return dayOrder[(jsDay + 6) % 7];\n}\n\n/**\n * Hours section component.\n */\nexport function Hours({\n hours,\n title = 'Hours',\n highlightToday = true,\n variant = 'card',\n timezone,\n className = '',\n id = 'hours',\n}: HoursProps) {\n const todayDay = getTodayDay(timezone);\n\n // Sort hours by day order\n const sortedHours = [...hours].sort(\n (a, b) => dayOrder.indexOf(a.day) - dayOrder.indexOf(b.day)\n );\n\n if (variant === 'inline') {\n return (\n <div id={id} className={`flex flex-wrap gap-4 ${className}`}>\n {sortedHours.map((entry) => (\n <HoursInlineItem\n key={entry.day}\n entry={entry}\n isToday={highlightToday && entry.day === todayDay}\n />\n ))}\n </div>\n );\n }\n\n if (variant === 'minimal') {\n return (\n <div id={id} className={`space-y-1 ${className}`}>\n {sortedHours.map((entry) => (\n <HoursMinimalItem\n key={entry.day}\n entry={entry}\n isToday={highlightToday && entry.day === todayDay}\n />\n ))}\n </div>\n );\n }\n\n // Default: card variant\n return (\n <div id={id} className={`bg-white rounded-lg shadow p-6 ${className}`}>\n <div className=\"flex items-center mb-4\">\n <ClockIcon size={24} className=\"text-primary-600 mr-2\" />\n <h3 className=\"text-xl font-semibold text-gray-900\">{title}</h3>\n </div>\n <div className=\"space-y-2\">\n {sortedHours.map((entry) => (\n <HoursCardItem\n key={entry.day}\n entry={entry}\n isToday={highlightToday && entry.day === todayDay}\n />\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * Card variant item.\n */\nfunction HoursCardItem({ entry, isToday }: { entry: HoursEntry; isToday: boolean }) {\n return (\n <div\n className={`flex justify-between py-1 ${\n isToday ? 'bg-primary-50 -mx-2 px-2 rounded font-medium' : ''\n }`}\n >\n <span className={isToday ? 'text-primary-700' : 'text-gray-600'}>\n {dayNames[entry.day]}\n {isToday && <span className=\"ml-2 text-xs\">(Today)</span>}\n </span>\n <span className={isToday ? 'text-primary-700' : 'text-gray-900'}>\n {entry.closed ? 'Closed' : `${entry.open} - ${entry.close}`}\n </span>\n </div>\n );\n}\n\n/**\n * Inline variant item.\n */\nfunction HoursInlineItem({ entry, isToday }: { entry: HoursEntry; isToday: boolean }) {\n return (\n <div\n className={`text-center px-3 py-2 rounded ${\n isToday ? 'bg-primary-100 ring-2 ring-primary-500' : 'bg-gray-100'\n }`}\n >\n <div className={`text-sm font-medium ${isToday ? 'text-primary-700' : 'text-gray-500'}`}>\n {dayAbbrev[entry.day]}\n </div>\n <div className={`text-sm ${isToday ? 'text-primary-900' : 'text-gray-900'}`}>\n {entry.closed ? 'Closed' : `${entry.open?.split(' ')[0]}-${entry.close?.split(' ')[0]}`}\n </div>\n </div>\n );\n}\n\n/**\n * Minimal variant item.\n */\nfunction HoursMinimalItem({ entry, isToday }: { entry: HoursEntry; isToday: boolean }) {\n return (\n <div className={`text-sm ${isToday ? 'font-semibold text-primary-600' : 'text-gray-600'}`}>\n <span className=\"inline-block w-20\">{dayAbbrev[entry.day]}</span>\n <span>{entry.closed ? 'Closed' : `${entry.open} - ${entry.close}`}</span>\n </div>\n );\n}\n\n/**\n * Get today's hours text.\n */\nexport function getTodayHours(hours: HoursEntry[], timezone?: string): string | null {\n const todayDay = getTodayDay(timezone);\n const todayHours = hours.find((h) => h.day === todayDay);\n\n if (!todayHours) return null;\n if (todayHours.closed) return 'Closed today';\n return `${todayHours.open} - ${todayHours.close}`;\n}\n\n/**\n * Check if currently open.\n */\nexport function isCurrentlyOpen(hours: HoursEntry[], timezone?: string): boolean {\n const todayDay = getTodayDay(timezone);\n const todayHours = hours.find((h) => h.day === todayDay);\n\n if (!todayHours || todayHours.closed) return false;\n if (!todayHours.open || !todayHours.close) return false;\n\n const now = timezone\n ? new Date(new Date().toLocaleString('en-US', { timeZone: timezone }))\n : new Date();\n\n const currentMinutes = now.getHours() * 60 + now.getMinutes();\n const openMinutes = parseTimeToMinutes(todayHours.open);\n const closeMinutes = parseTimeToMinutes(todayHours.close);\n\n if (openMinutes === null || closeMinutes === null) return false;\n\n return currentMinutes >= openMinutes && currentMinutes < closeMinutes;\n}\n\n/**\n * Parse time string to minutes since midnight.\n */\nfunction parseTimeToMinutes(time: string): number | null {\n const match = time.match(/(\\d{1,2}):?(\\d{2})?\\s*(AM|PM)?/i);\n if (!match) return null;\n\n let hours = parseInt(match[1], 10);\n const minutes = parseInt(match[2] || '0', 10);\n const period = match[3]?.toUpperCase();\n\n if (period === 'PM' && hours !== 12) hours += 12;\n if (period === 'AM' && hours === 12) hours = 0;\n\n return hours * 60 + minutes;\n}\n\nexport default Hours;\n","/**\n * Gallery Section Component\n *\n * Displays a grid of images.\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport type { GalleryItem } from '../../data/types';\n\nexport interface GalleryProps {\n items: GalleryItem[];\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n variant?: 'grid' | 'masonry' | 'carousel';\n showCaptions?: boolean;\n limit?: number;\n className?: string;\n}\n\n/**\n * Gallery section component.\n */\nexport function Gallery({\n items,\n title = 'Gallery',\n subtitle,\n columns = 3,\n variant = 'grid',\n showCaptions = true,\n limit,\n className = '',\n}: GalleryProps) {\n const displayedItems = limit ? items.slice(0, limit) : items;\n const [failedImages, setFailedImages] = useState<Set<string>>(new Set());\n\n const handleImageError = (id: string) => {\n setFailedImages((prev) => new Set(prev).add(id));\n };\n\n const gridCols = {\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n };\n\n return (\n <section className={`py-16 ${className}`}>\n <div className=\"container mx-auto px-4\">\n {/* Header */}\n {(title || subtitle) && (\n <div className=\"text-center mb-12\">\n {title && (\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n )}\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n )}\n\n {/* Gallery Grid */}\n <div className={`grid gap-4 ${gridCols[columns]}`}>\n {displayedItems.map((item) => {\n const itemId = item.id || item.imageUrl;\n const hasFailed = failedImages.has(itemId);\n\n return (\n <div\n key={itemId}\n className=\"group relative aspect-square overflow-hidden rounded-lg bg-gray-100\"\n >\n {hasFailed ? (\n <div className=\"absolute inset-0 flex items-center justify-center text-gray-400\">\n <span>Image unavailable</span>\n </div>\n ) : (\n <>\n <img\n src={item.imageUrl}\n alt={item.alt || ''}\n loading=\"lazy\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onError={() => handleImageError(itemId)}\n />\n {/* Caption overlay */}\n {showCaptions && item.caption && (\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/60 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300\">\n <div className=\"absolute bottom-0 left-0 right-0 p-4\">\n <p className=\"text-white text-sm\">{item.caption}</p>\n </div>\n </div>\n )}\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </section>\n );\n}\n\nexport default Gallery;\n","/**\n * Button Component\n *\n * A versatile button component with multiple variants and sizes.\n */\n\nimport React from 'react';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'link';\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n loading?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\n/**\n * Get CSS classes for button variants and sizes.\n */\nfunction getButtonClasses(props: Pick<ButtonProps, 'variant' | 'size' | 'fullWidth' | 'disabled'>): string {\n const { variant = 'primary', size = 'md', fullWidth, disabled } = props;\n\n const baseClasses = [\n 'inline-flex items-center justify-center',\n 'font-medium',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2',\n disabled ? 'opacity-50 cursor-not-allowed' : '',\n fullWidth ? 'w-full' : '',\n ];\n\n // Variant classes\n const variantClasses: Record<NonNullable<ButtonProps['variant']>, string> = {\n primary: 'bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500',\n secondary: 'bg-primary-100 text-primary-700 hover:bg-primary-200 focus:ring-primary-500',\n outline: 'border-2 border-primary-600 text-primary-600 hover:bg-primary-50 focus:ring-primary-500',\n ghost: 'text-primary-600 hover:bg-primary-100 focus:ring-primary-500',\n link: 'text-primary-600 hover:underline focus:ring-primary-500 p-0',\n };\n\n // Size classes\n const sizeClasses: Record<NonNullable<ButtonProps['size']>, string> = {\n sm: 'text-sm px-3 py-1.5 rounded',\n md: 'text-base px-4 py-2 rounded-md',\n lg: 'text-lg px-6 py-3 rounded-lg',\n };\n\n return [\n ...baseClasses,\n variantClasses[variant],\n variant !== 'link' ? sizeClasses[size] : '',\n ]\n .filter(Boolean)\n .join(' ');\n}\n\n/**\n * Button component with multiple variants and sizes.\n */\nexport function Button({\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n loading = false,\n leftIcon,\n rightIcon,\n children,\n disabled,\n className = '',\n ...props\n}: ButtonProps) {\n const classes = getButtonClasses({ variant, size, fullWidth, disabled: disabled || loading });\n\n return (\n <button\n className={`${classes} ${className}`}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? (\n <LoadingSpinner size={size} />\n ) : (\n <>\n {leftIcon && <span className=\"mr-2\">{leftIcon}</span>}\n {children}\n {rightIcon && <span className=\"ml-2\">{rightIcon}</span>}\n </>\n )}\n </button>\n );\n}\n\n/**\n * Loading spinner for button loading state.\n */\nfunction LoadingSpinner({ size }: { size: ButtonProps['size'] }) {\n const sizeClasses = {\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n };\n\n return (\n <svg\n className={`animate-spin ${sizeClasses[size || 'md']}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n );\n}\n\n/**\n * Link styled as a button.\n */\nexport interface ButtonLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n variant?: ButtonProps['variant'];\n size?: ButtonProps['size'];\n fullWidth?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\nexport function ButtonLink({\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n leftIcon,\n rightIcon,\n children,\n className = '',\n ...props\n}: ButtonLinkProps) {\n const classes = getButtonClasses({ variant, size, fullWidth, disabled: false });\n\n return (\n <a className={`${classes} ${className}`} {...props}>\n {leftIcon && <span className=\"mr-2\">{leftIcon}</span>}\n {children}\n {rightIcon && <span className=\"ml-2\">{rightIcon}</span>}\n </a>\n );\n}\n","/**\n * Card Component\n *\n * A flexible card component for displaying content in a contained box.\n */\n\nimport React from 'react';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'elevated' | 'outlined' | 'filled';\n padding?: 'none' | 'sm' | 'md' | 'lg';\n hover?: boolean;\n}\n\n/**\n * Get CSS classes for card variants.\n */\nfunction getCardClasses(props: Pick<CardProps, 'variant' | 'padding' | 'hover'>): string {\n const { variant = 'default', padding = 'md', hover = false } = props;\n\n const baseClasses = ['rounded-lg', 'overflow-hidden'];\n\n // Variant classes\n const variantClasses: Record<NonNullable<CardProps['variant']>, string> = {\n default: 'bg-white shadow',\n elevated: 'bg-white shadow-lg',\n outlined: 'bg-white border border-gray-200',\n filled: 'bg-gray-50',\n };\n\n // Padding classes\n const paddingClasses: Record<NonNullable<CardProps['padding']>, string> = {\n none: '',\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-8',\n };\n\n // Hover effect\n const hoverClasses = hover\n ? 'transition-all duration-200 hover:shadow-lg hover:-translate-y-1'\n : '';\n\n return [\n ...baseClasses,\n variantClasses[variant],\n paddingClasses[padding],\n hoverClasses,\n ]\n .filter(Boolean)\n .join(' ');\n}\n\n/**\n * Card component for containing content.\n */\nexport function Card({\n variant = 'default',\n padding = 'md',\n hover = false,\n children,\n className = '',\n ...props\n}: CardProps) {\n const classes = getCardClasses({ variant, padding, hover });\n\n return (\n <div className={`${classes} ${className}`} {...props}>\n {children}\n </div>\n );\n}\n\n/**\n * Card header section.\n */\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n subtitle?: string;\n action?: React.ReactNode;\n}\n\nexport function CardHeader({\n title,\n subtitle,\n action,\n children,\n className = '',\n ...props\n}: CardHeaderProps) {\n return (\n <div className={`flex items-start justify-between ${className}`} {...props}>\n <div>\n {title && <h3 className=\"text-lg font-semibold text-gray-900\">{title}</h3>}\n {subtitle && <p className=\"mt-1 text-sm text-gray-500\">{subtitle}</p>}\n {children}\n </div>\n {action && <div className=\"flex-shrink-0 ml-4\">{action}</div>}\n </div>\n );\n}\n\n/**\n * Card body section.\n */\nexport function CardBody({\n children,\n className = '',\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={`mt-4 ${className}`} {...props}>\n {children}\n </div>\n );\n}\n\n/**\n * Card footer section.\n */\nexport function CardFooter({\n children,\n className = '',\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={`mt-4 pt-4 border-t border-gray-100 ${className}`} {...props}>\n {children}\n </div>\n );\n}\n\n/**\n * Card image section.\n */\nexport interface CardImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n aspectRatio?: 'square' | 'video' | 'wide' | 'auto';\n}\n\nexport function CardImage({\n aspectRatio = 'video',\n className = '',\n alt = '',\n ...props\n}: CardImageProps) {\n const aspectClasses: Record<NonNullable<CardImageProps['aspectRatio']>, string> = {\n square: 'aspect-square',\n video: 'aspect-video',\n wide: 'aspect-[2/1]',\n auto: '',\n };\n\n return (\n <div className={`-m-5 mb-4 ${aspectClasses[aspectRatio]} overflow-hidden`}>\n <img\n className={`w-full h-full object-cover ${className}`}\n alt={alt}\n {...props}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","SectionHeader","import_jsx_runtime","dayNames","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/index.ts","../../src/components/layout/Header.tsx","../../src/components/ui/Icons.tsx","../../src/components/layout/Footer.tsx","../../src/components/sections/Hero.tsx","../../src/components/sections/Services.tsx","../../src/components/sections/Testimonials.tsx","../../src/components/sections/FAQ.tsx","../../src/components/sections/Hours.tsx","../../src/components/sections/Gallery.tsx","../../src/components/sections/Menu.tsx","../../src/components/sections/TrustBadges.tsx","../../src/components/sections/BeforeAfter.tsx","../../src/components/ui/Button.tsx","../../src/components/ui/Card.tsx","../../src/components/ui/AnimatedSection.tsx"],"sourcesContent":["/**\n * SheetSite Component Library\n *\n * Pre-built React components for building small business websites.\n * All components are designed to work with SheetSite data types.\n */\n\n// Layout Components\nexport { Header } from './layout/Header';\nexport type { HeaderProps, NavItem } from './layout/Header';\n\nexport { Footer } from './layout/Footer';\nexport type { FooterProps, FooterLink } from './layout/Footer';\n\n// Section Components\nexport { Hero } from './sections/Hero';\nexport type { HeroProps } from './sections/Hero';\n\nexport { Services } from './sections/Services';\nexport type { ServicesProps } from './sections/Services';\n\nexport { Testimonials } from './sections/Testimonials';\nexport type { TestimonialsProps } from './sections/Testimonials';\n\nexport { FAQ } from './sections/FAQ';\nexport type { FAQProps } from './sections/FAQ';\n\nexport { Hours, getTodayHours, isCurrentlyOpen } from './sections/Hours';\nexport type { HoursProps } from './sections/Hours';\n\nexport { Gallery } from './sections/Gallery';\nexport type { GalleryProps } from './sections/Gallery';\n\nexport { Menu } from './sections/Menu';\nexport type { MenuProps } from './sections/Menu';\n\nexport { TrustBadges } from './sections/TrustBadges';\nexport type { TrustBadgesProps, TrustBadge } from './sections/TrustBadges';\n\nexport { BeforeAfter } from './sections/BeforeAfter';\nexport type { BeforeAfterProps, BeforeAfterItem } from './sections/BeforeAfter';\n\n// UI Components\nexport { Button, ButtonLink } from './ui/Button';\nexport type { ButtonProps, ButtonLinkProps } from './ui/Button';\n\nexport { Card, CardHeader, CardBody, CardFooter, CardImage } from './ui/Card';\nexport type { CardProps, CardHeaderProps, CardImageProps } from './ui/Card';\n\nexport * from './ui/Icons';\n\nexport { AnimatedSection, StaggerContainer } from './ui/AnimatedSection';\nexport type { AnimatedSectionProps, StaggerContainerProps } from './ui/AnimatedSection';\n","/**\n * Header Component\n *\n * A responsive header with navigation and mobile menu.\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport type { BusinessInfo } from '../../data/types';\nimport { MenuIcon, XIcon, PhoneIcon } from '../ui/Icons';\n\nexport interface NavItem {\n label: string;\n href: string;\n}\n\nexport interface HeaderProps {\n business: BusinessInfo;\n navigation?: NavItem[];\n sticky?: boolean;\n transparent?: boolean;\n showPhone?: boolean;\n className?: string;\n}\n\nconst defaultNavigation: NavItem[] = [\n { label: 'Home', href: '/' },\n { label: 'Services', href: '/#services' },\n { label: 'Hours', href: '/#hours' },\n { label: 'Reviews', href: '/#reviews' },\n { label: 'FAQ', href: '/#faq' },\n];\n\n/**\n * Header component.\n */\nexport function Header({\n business,\n navigation = defaultNavigation,\n sticky = true,\n transparent = false,\n showPhone = true,\n className = '',\n}: HeaderProps) {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n\n return (\n <header\n className={`\n ${sticky ? 'sticky top-0 z-50' : ''}\n ${transparent ? 'bg-transparent' : 'bg-white shadow-sm'}\n ${className}\n `}\n >\n <nav className=\"container mx-auto px-4\">\n <div className=\"flex items-center justify-between h-16\">\n {/* Logo / Business Name */}\n <a href=\"/\" className=\"flex items-center\">\n {business.logoUrl ? (\n <img\n src={business.logoUrl}\n alt={business.name}\n className=\"h-10 w-auto\"\n />\n ) : (\n <span className=\"text-xl font-bold text-gray-900\">{business.name}</span>\n )}\n </a>\n\n {/* Desktop Navigation */}\n <div className=\"hidden md:flex items-center space-x-8\">\n {navigation.map((item) => (\n <a\n key={item.href}\n href={item.href}\n className=\"text-gray-600 hover:text-primary-600 font-medium transition-colors\"\n >\n {item.label}\n </a>\n ))}\n\n {/* Phone Button */}\n {showPhone && business.phone && (\n <a\n href={`tel:${business.phone.replace(/\\D/g, '')}`}\n className=\"inline-flex items-center px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors\"\n >\n <PhoneIcon size={18} className=\"mr-2\" />\n {business.phone}\n </a>\n )}\n </div>\n\n {/* Mobile Menu Button */}\n <button\n className=\"md:hidden p-2 rounded-lg hover:bg-gray-100\"\n onClick={() => setMobileMenuOpen(!mobileMenuOpen)}\n aria-label={mobileMenuOpen ? 'Close menu' : 'Open menu'}\n >\n {mobileMenuOpen ? <XIcon size={24} /> : <MenuIcon size={24} />}\n </button>\n </div>\n\n {/* Mobile Navigation */}\n {mobileMenuOpen && (\n <div className=\"md:hidden py-4 border-t\">\n {navigation.map((item) => (\n <a\n key={item.href}\n href={item.href}\n className=\"block py-2 text-gray-600 hover:text-primary-600 font-medium\"\n onClick={() => setMobileMenuOpen(false)}\n >\n {item.label}\n </a>\n ))}\n {showPhone && business.phone && (\n <a\n href={`tel:${business.phone.replace(/\\D/g, '')}`}\n className=\"flex items-center py-2 text-primary-600 font-medium\"\n >\n <PhoneIcon size={18} className=\"mr-2\" />\n {business.phone}\n </a>\n )}\n </div>\n )}\n </nav>\n </header>\n );\n}\n\nexport default Header;\n","/**\n * Icon Library\n *\n * SVG icons for common use cases across business websites.\n * All icons use currentColor for easy theming.\n */\n\nimport React from 'react';\n\nexport interface IconProps {\n className?: string;\n size?: number;\n 'aria-hidden'?: boolean;\n}\n\nconst defaultProps: IconProps = {\n className: '',\n size: 24,\n 'aria-hidden': true,\n};\n\n// =============================================================================\n// GENERAL ICONS\n// =============================================================================\n\nexport function PhoneIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\" />\n </svg>\n );\n}\n\nexport function MailIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n );\n}\n\nexport function MapPinIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z\" />\n <circle cx=\"12\" cy=\"10\" r=\"3\" />\n </svg>\n );\n}\n\nexport function ClockIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n );\n}\n\nexport function StarIcon({ className = '', size = 24, filled = false, ...props }: IconProps & { filled?: boolean }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill={filled ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport function ChevronRightIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nexport function MenuIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\" />\n <line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\" />\n <line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\nexport function XIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function CheckIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\n// =============================================================================\n// SERVICE ICONS\n// =============================================================================\n\nexport function ScissorsIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <circle cx=\"6\" cy=\"6\" r=\"3\" />\n <path d=\"M8.12 8.12 12 12\" />\n <path d=\"M20 4 8.12 15.88\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M14.8 14.8 20 20\" />\n </svg>\n );\n}\n\nexport function WrenchIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n );\n}\n\nexport function SparklesIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z\" />\n <path d=\"M5 3v4\" />\n <path d=\"M19 17v4\" />\n <path d=\"M3 5h4\" />\n <path d=\"M17 19h4\" />\n </svg>\n );\n}\n\nexport function HeartIcon({ className = '', size = 24, filled = false, ...props }: IconProps & { filled?: boolean }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill={filled ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z\" />\n </svg>\n );\n}\n\nexport function UtensilsIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2\" />\n <path d=\"M7 2v20\" />\n <path d=\"M21 15V2v0a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7\" />\n </svg>\n );\n}\n\nexport function CakeIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8\" />\n <path d=\"M4 16s.5-1 2-1 2.5 2 4 2 2.5-2 4-2 2.5 2 4 2 2-1 2-1\" />\n <path d=\"M2 21h20\" />\n <path d=\"M7 8v3\" />\n <path d=\"M12 8v3\" />\n <path d=\"M17 8v3\" />\n <path d=\"M7 4h.01\" />\n <path d=\"M12 4h.01\" />\n <path d=\"M17 4h.01\" />\n </svg>\n );\n}\n\nexport function BriefcaseIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"7\" rx=\"2\" ry=\"2\" />\n <path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\" />\n </svg>\n );\n}\n\n// =============================================================================\n// SOCIAL ICONS\n// =============================================================================\n\nexport function YelpIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n {...props}\n >\n <path d=\"M20.16 12.73l-3.29 1.47c-.64.28-1.31-.26-1.2-.97l.52-3.4c.08-.56.49-.98 1.03-1.04l3.39-.38c.7-.08 1.22.58 1 1.23l-1.07 2.62c-.14.35-.36.41-.38.47zM14.13 15.58l-.52 3.4c-.11.7.55 1.25 1.2.97l3.29-1.47c.02-.06.24-.12.38-.47l1.07-2.62c.22-.65-.3-1.31-1-1.23l-3.39.38c-.54.06-.95.48-1.03 1.04zM10.98 3.05c-.47-.6-1.37-.5-1.7.2l-3.6 7.51c-.24.5-.01 1.1.51 1.33l2.63 1.21c.62.28 1.3-.2 1.27-.89l-.33-7.97c-.02-.56-.3-1.01-.78-1.39zM8.37 14.35l-2.63-1.21c-.52-.23-.75-.83-.51-1.33l3.6-7.51c.33-.7 1.23-.8 1.7-.2.48.38.76.83.78 1.39l.33 7.97c.03.69-.65 1.17-1.27.89zM10.04 16.42l-3.22 1.8c-.62.35-1.36-.14-1.28-.86l.44-3.52c.06-.53.42-.95.92-1.08l3.02-.78c.69-.18 1.32.43 1.09 1.1l-1.24 3.06c-.14.33-.38.34-.42.34-.04 0-.18-.01-.31.04v-.1z\" />\n </svg>\n );\n}\n\nexport function InstagramIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <rect width=\"20\" height=\"20\" x=\"2\" y=\"2\" rx=\"5\" ry=\"5\" />\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\" />\n <line x1=\"17.5\" x2=\"17.51\" y1=\"6.5\" y2=\"6.5\" />\n </svg>\n );\n}\n\nexport function FacebookIcon({ className = '', size = 24, ...props }: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n {...props}\n >\n <path d=\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\" />\n </svg>\n );\n}\n\n// =============================================================================\n// ICON MAP\n// =============================================================================\n\n/**\n * Map of icon names to components.\n * Use this to render icons dynamically based on string names.\n */\nexport const iconMap: Record<string, React.FC<IconProps>> = {\n phone: PhoneIcon,\n mail: MailIcon,\n email: MailIcon,\n 'map-pin': MapPinIcon,\n location: MapPinIcon,\n clock: ClockIcon,\n time: ClockIcon,\n star: StarIcon,\n 'chevron-down': ChevronDownIcon,\n 'chevron-right': ChevronRightIcon,\n menu: MenuIcon,\n x: XIcon,\n close: XIcon,\n check: CheckIcon,\n scissors: ScissorsIcon,\n wrench: WrenchIcon,\n tool: WrenchIcon,\n sparkles: SparklesIcon,\n heart: HeartIcon,\n utensils: UtensilsIcon,\n food: UtensilsIcon,\n cake: CakeIcon,\n briefcase: BriefcaseIcon,\n yelp: YelpIcon,\n instagram: InstagramIcon,\n facebook: FacebookIcon,\n};\n\n/**\n * Get an icon component by name.\n */\nexport function getIcon(name: string): React.FC<IconProps> | null {\n return iconMap[name.toLowerCase()] || null;\n}\n\n/**\n * Render an icon by name.\n */\nexport function Icon({ name, ...props }: IconProps & { name: string }) {\n const IconComponent = getIcon(name);\n if (!IconComponent) return null;\n return <IconComponent {...props} />;\n}\n","/**\n * Footer Component\n *\n * A comprehensive footer with business info, links, and social icons.\n */\n\nimport React from 'react';\nimport type { BusinessInfo, HoursEntry } from '../../data/types';\nimport {\n PhoneIcon,\n MailIcon,\n MapPinIcon,\n ClockIcon,\n FacebookIcon,\n InstagramIcon,\n YelpIcon,\n} from '../ui/Icons';\n\nexport interface FooterLink {\n label: string;\n href: string;\n}\n\nexport interface FooterProps {\n business: BusinessInfo;\n hours?: HoursEntry[];\n quickLinks?: FooterLink[];\n showHours?: boolean;\n showSocial?: boolean;\n variant?: 'simple' | 'columns' | 'centered';\n className?: string;\n}\n\nconst defaultQuickLinks: FooterLink[] = [\n { label: 'Home', href: '/' },\n { label: 'Services', href: '/#services' },\n { label: 'Hours', href: '/#hours' },\n { label: 'Reviews', href: '/#reviews' },\n { label: 'FAQ', href: '/#faq' },\n];\n\nconst dayNames: Record<string, string> = {\n monday: 'Mon',\n tuesday: 'Tue',\n wednesday: 'Wed',\n thursday: 'Thu',\n friday: 'Fri',\n saturday: 'Sat',\n sunday: 'Sun',\n};\n\n/**\n * Footer component.\n */\nexport function Footer({\n business,\n hours = [],\n quickLinks = defaultQuickLinks,\n showHours = true,\n showSocial = true,\n variant = 'columns',\n className = '',\n}: FooterProps) {\n const currentYear = new Date().getFullYear();\n\n const socialLinks = [\n { url: business.socialYelp, icon: YelpIcon, label: 'Yelp' },\n { url: business.socialInstagram, icon: InstagramIcon, label: 'Instagram' },\n { url: business.socialFacebook, icon: FacebookIcon, label: 'Facebook' },\n ].filter((link) => link.url);\n\n if (variant === 'simple') {\n return (\n <footer className={`bg-gray-900 text-white py-8 ${className}`}>\n <div className=\"container mx-auto px-4 text-center\">\n <p className=\"text-lg font-semibold mb-2\">{business.name}</p>\n {business.phone && <p className=\"text-gray-400\">{business.phone}</p>}\n <p className=\"text-gray-500 text-sm mt-4\">\n © {currentYear} {business.name}. All rights reserved.\n </p>\n </div>\n </footer>\n );\n }\n\n if (variant === 'centered') {\n return (\n <footer className={`bg-gray-900 text-white py-12 ${className}`}>\n <div className=\"container mx-auto px-4 text-center\">\n <p className=\"text-2xl font-bold mb-4\">{business.name}</p>\n {business.tagline && <p className=\"text-gray-400 mb-6\">{business.tagline}</p>}\n\n <div className=\"flex flex-wrap justify-center gap-6 mb-8\">\n {quickLinks.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className=\"text-gray-400 hover:text-white transition-colors\"\n >\n {link.label}\n </a>\n ))}\n </div>\n\n {showSocial && socialLinks.length > 0 && (\n <div className=\"flex justify-center gap-4 mb-8\">\n {socialLinks.map((link) => (\n <a\n key={link.label}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-2 bg-gray-800 rounded-full hover:bg-gray-700 transition-colors\"\n aria-label={link.label}\n >\n <link.icon size={20} />\n </a>\n ))}\n </div>\n )}\n\n <p className=\"text-gray-500 text-sm\">\n © {currentYear} {business.name}. All rights reserved.\n </p>\n </div>\n </footer>\n );\n }\n\n // Default: columns variant\n return (\n <footer className={`bg-gray-900 text-white py-12 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <div className=\"grid md:grid-cols-3 gap-8\">\n {/* Business Info */}\n <div>\n <h3 className=\"text-xl font-bold mb-4\">{business.name}</h3>\n {business.addressLine1 && (\n <div className=\"flex items-start text-gray-400 mb-3\">\n <MapPinIcon size={18} className=\"mr-2 mt-1 flex-shrink-0\" />\n <div>\n <p>{business.addressLine1}</p>\n {business.addressLine2 && <p>{business.addressLine2}</p>}\n <p>\n {business.city}, {business.state} {business.zip}\n </p>\n </div>\n </div>\n )}\n {business.phone && (\n <a\n href={`tel:${business.phone.replace(/\\D/g, '')}`}\n className=\"flex items-center text-gray-400 hover:text-white mb-3\"\n >\n <PhoneIcon size={18} className=\"mr-2\" />\n {business.phone}\n </a>\n )}\n {business.email && (\n <a\n href={`mailto:${business.email}`}\n className=\"flex items-center text-gray-400 hover:text-white\"\n >\n <MailIcon size={18} className=\"mr-2\" />\n {business.email}\n </a>\n )}\n </div>\n\n {/* Quick Links */}\n <div>\n <h3 className=\"text-lg font-semibold mb-4\">Quick Links</h3>\n <ul className=\"space-y-2\">\n {quickLinks.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className=\"text-gray-400 hover:text-white transition-colors\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n\n {showSocial && socialLinks.length > 0 && (\n <div className=\"flex gap-3 mt-6\">\n {socialLinks.map((link) => (\n <a\n key={link.label}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-2 bg-gray-800 rounded-full hover:bg-gray-700 transition-colors\"\n aria-label={link.label}\n >\n <link.icon size={20} />\n </a>\n ))}\n </div>\n )}\n </div>\n\n {/* Hours */}\n {showHours && hours.length > 0 && (\n <div>\n <h3 className=\"text-lg font-semibold mb-4 flex items-center\">\n <ClockIcon size={18} className=\"mr-2\" />\n Hours\n </h3>\n <ul className=\"space-y-1 text-gray-400\">\n {hours.map((entry) => (\n <li key={entry.day} className=\"flex justify-between\">\n <span>{dayNames[entry.day]}</span>\n <span>\n {entry.closed ? 'Closed' : `${entry.open} - ${entry.close}`}\n </span>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n\n {/* Bottom Bar */}\n <div className=\"mt-12 pt-8 border-t border-gray-800 text-center text-gray-500 text-sm\">\n <p>© {currentYear} {business.name}. All rights reserved.</p>\n </div>\n </div>\n </footer>\n );\n}\n\nexport default Footer;\n","/**\n * Hero Section Component\n *\n * A prominent hero section for the top of pages.\n * Supports various layouts and customization options.\n */\n\n'use client';\n\nimport React from 'react';\nimport type { BusinessInfo } from '../../data/types';\nimport { PhoneIcon, MapPinIcon, ClockIcon } from '../ui/Icons';\n\nexport interface HeroProps {\n business: BusinessInfo;\n variant?: 'centered' | 'left' | 'split';\n showOpenStatus?: boolean;\n isOpen?: boolean;\n todayHours?: string;\n backgroundImage?: string;\n overlay?: boolean;\n className?: string;\n}\n\n/**\n * Hero section component.\n */\nexport function Hero({\n business,\n variant = 'centered',\n showOpenStatus = true,\n isOpen,\n todayHours,\n backgroundImage,\n overlay = true,\n className = '',\n}: HeroProps) {\n const bgStyle = backgroundImage\n ? { backgroundImage: `url(${backgroundImage})` }\n : undefined;\n\n const handleCallClick = () => {\n if (business.phone) {\n window.location.href = `tel:${business.phone.replace(/\\D/g, '')}`;\n }\n };\n\n const handleDirectionsClick = () => {\n if (business.googleMapsUrl) {\n window.open(business.googleMapsUrl, '_blank');\n } else {\n const address = [\n business.addressLine1,\n business.city,\n business.state,\n business.zip,\n ]\n .filter(Boolean)\n .join(', ');\n window.open(`https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}`, '_blank');\n }\n };\n\n const handlePrimaryClick = () => {\n if (business.primaryCtaUrl) {\n if (business.primaryCtaUrl.startsWith('http')) {\n window.open(business.primaryCtaUrl, '_blank');\n } else if (business.primaryCtaUrl.startsWith('mailto:')) {\n window.location.href = business.primaryCtaUrl;\n } else {\n window.location.href = business.primaryCtaUrl;\n }\n } else if (business.bookingUrl) {\n window.open(business.bookingUrl, '_blank');\n } else if (business.email) {\n window.location.href = `mailto:${business.email}`;\n }\n };\n\n return (\n <section\n className={`\n relative min-h-[500px] flex items-center\n ${backgroundImage ? 'bg-cover bg-center' : 'bg-gradient-to-br from-primary-600 to-primary-800'}\n ${className}\n `}\n style={bgStyle}\n >\n {/* Overlay */}\n {overlay && backgroundImage && (\n <div className=\"absolute inset-0 bg-black/50\" />\n )}\n\n {/* Content */}\n <div className=\"relative z-10 container mx-auto px-4 py-16\">\n <div\n className={`\n ${variant === 'centered' ? 'text-center max-w-3xl mx-auto' : ''}\n ${variant === 'left' ? 'max-w-2xl' : ''}\n ${variant === 'split' ? 'grid md:grid-cols-2 gap-8 items-center' : ''}\n `}\n >\n <div>\n {/* Open Status */}\n {showOpenStatus && isOpen !== undefined && (\n <div className=\"mb-4\">\n <span\n className={`\n inline-flex items-center px-3 py-1 rounded-full text-sm font-medium\n ${isOpen ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'}\n `}\n >\n <span\n className={`w-2 h-2 rounded-full mr-2 ${isOpen ? 'bg-green-500' : 'bg-red-500'}`}\n />\n {isOpen ? 'Open Now' : 'Closed'}\n {todayHours && <span className=\"ml-2 opacity-75\">· {todayHours}</span>}\n </span>\n </div>\n )}\n\n {/* Business Name */}\n <h1 className=\"text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-4\">\n {business.name}\n </h1>\n\n {/* Tagline */}\n {business.tagline && (\n <p className=\"text-xl md:text-2xl text-white/90 mb-6\">\n {business.tagline}\n </p>\n )}\n\n {/* Description */}\n {business.aboutShort && (\n <p className=\"text-lg text-white/80 mb-8 max-w-xl\">\n {business.aboutShort}\n </p>\n )}\n\n {/* Trust Signals */}\n <div className=\"flex flex-wrap justify-center gap-4 mb-8\">\n {['Quality Work', 'Fair Prices', 'Fast Service'].map((signal) => (\n <div key={signal} className=\"flex items-center text-white/90\">\n <svg className=\"w-5 h-5 text-accent-400 mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"text-sm font-medium\">{signal}</span>\n </div>\n ))}\n </div>\n\n {/* CTA Buttons */}\n <div className=\"flex flex-col sm:flex-row gap-4 justify-center\">\n {business.phone && (\n <button\n onClick={handleCallClick}\n className=\"inline-flex items-center justify-center px-6 py-3 bg-white text-primary-700 font-semibold rounded-lg hover:bg-gray-100 transition-colors\"\n >\n <PhoneIcon size={20} className=\"mr-2\" />\n Call Now\n </button>\n )}\n\n {(business.addressLine1 || business.googleMapsUrl) && (\n <button\n onClick={handleDirectionsClick}\n className=\"inline-flex items-center justify-center px-6 py-3 border-2 border-white text-white font-semibold rounded-lg hover:bg-white/10 transition-colors\"\n >\n <MapPinIcon size={20} className=\"mr-2\" />\n Get Directions\n </button>\n )}\n\n {(business.primaryCtaUrl || business.bookingUrl || business.email) && (\n <button\n onClick={handlePrimaryClick}\n className=\"inline-flex items-center justify-center px-6 py-3 bg-accent-500 text-white font-semibold rounded-lg hover:bg-accent-600 transition-colors\"\n >\n {business.primaryCtaText || 'Contact Us'}\n </button>\n )}\n </div>\n </div>\n\n {/* Split layout - right side could show an image or additional content */}\n {variant === 'split' && (\n <div className=\"hidden md:block\">\n {/* Placeholder for hero image or additional content */}\n </div>\n )}\n </div>\n </div>\n </section>\n );\n}\n\nexport default Hero;\n","/**\n * Services Section Component\n *\n * Displays a grid of services offered by the business.\n */\n\nimport React from 'react';\nimport type { Service } from '../../data/types';\nimport { Icon } from '../ui/Icons';\n\nexport interface ServicesProps {\n services: Service[];\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n showPrices?: boolean;\n showIcons?: boolean;\n variant?: 'cards' | 'list' | 'minimal';\n limit?: number;\n className?: string;\n id?: string;\n}\n\n/**\n * Services section component.\n */\nexport function Services({\n services,\n title = 'Our Services',\n subtitle,\n columns = 3,\n showPrices = true,\n showIcons = true,\n variant = 'cards',\n limit,\n className = '',\n id = 'services',\n}: ServicesProps) {\n const displayedServices = limit ? services.slice(0, limit) : services;\n\n const gridCols = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-2 lg:grid-cols-3',\n 4: 'md:grid-cols-2 lg:grid-cols-4',\n };\n\n if (variant === 'list') {\n return (\n <section id={id} className={`py-16 scroll-mt-20 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className=\"max-w-3xl mx-auto divide-y divide-gray-200\">\n {displayedServices.map((service) => (\n <ServiceListItem\n key={service.id || service.title}\n service={service}\n showPrice={showPrices}\n showIcon={showIcons}\n />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n if (variant === 'minimal') {\n return (\n <section id={id} className={`py-16 scroll-mt-20 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className={`grid gap-6 ${gridCols[columns]}`}>\n {displayedServices.map((service) => (\n <ServiceMinimalCard\n key={service.id || service.title}\n service={service}\n showPrice={showPrices}\n />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n // Default: cards variant\n return (\n <section id={id} className={`py-16 scroll-mt-20 bg-gray-50 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className={`grid gap-6 ${gridCols[columns]}`}>\n {displayedServices.map((service) => (\n <ServiceCard\n key={service.id || service.title}\n service={service}\n showPrice={showPrices}\n showIcon={showIcons}\n />\n ))}\n </div>\n </div>\n </section>\n );\n}\n\n/**\n * Section header.\n */\nfunction SectionHeader({ title, subtitle }: { title: string; subtitle?: string }) {\n return (\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n );\n}\n\n/**\n * Service card component.\n */\nfunction ServiceCard({\n service,\n showPrice,\n showIcon,\n}: {\n service: Service;\n showPrice: boolean;\n showIcon: boolean;\n}) {\n return (\n <div className=\"bg-white rounded-lg shadow-md p-6 hover:shadow-lg transition-shadow\">\n {showIcon && service.icon && (\n <div className=\"w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mb-4\">\n <Icon name={service.icon} size={24} className=\"text-primary-600\" />\n </div>\n )}\n <h3 className=\"text-xl font-semibold text-gray-900 mb-2\">{service.title}</h3>\n {service.description && (\n <p className=\"text-gray-600 mb-4\">{service.description}</p>\n )}\n {showPrice && service.priceNote && (\n <p className=\"text-primary-600 font-medium\">{service.priceNote}</p>\n )}\n {showPrice && service.price && !service.priceNote && (\n <p className=\"text-primary-600 font-medium\">${service.price.toFixed(2)}</p>\n )}\n </div>\n );\n}\n\n/**\n * Service list item component.\n */\nfunction ServiceListItem({\n service,\n showPrice,\n showIcon,\n}: {\n service: Service;\n showPrice: boolean;\n showIcon: boolean;\n}) {\n return (\n <div className=\"py-4 flex items-start justify-between\">\n <div className=\"flex items-start\">\n {showIcon && service.icon && (\n <div className=\"w-10 h-10 bg-primary-100 rounded-lg flex items-center justify-center mr-4 flex-shrink-0\">\n <Icon name={service.icon} size={20} className=\"text-primary-600\" />\n </div>\n )}\n <div>\n <h3 className=\"text-lg font-semibold text-gray-900\">{service.title}</h3>\n {service.description && (\n <p className=\"text-gray-600 text-sm mt-1\">{service.description}</p>\n )}\n </div>\n </div>\n {showPrice && (service.priceNote || service.price) && (\n <div className=\"text-right ml-4 flex-shrink-0\">\n <p className=\"text-primary-600 font-medium\">\n {service.priceNote || `$${service.price?.toFixed(2)}`}\n </p>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Minimal service card component.\n */\nfunction ServiceMinimalCard({\n service,\n showPrice,\n}: {\n service: Service;\n showPrice: boolean;\n}) {\n return (\n <div className=\"p-4 border border-gray-200 rounded-lg hover:border-primary-300 transition-colors\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold text-gray-900\">{service.title}</h3>\n {showPrice && (service.priceNote || service.price) && (\n <span className=\"text-primary-600 text-sm font-medium\">\n {service.priceNote || `$${service.price?.toFixed(2)}`}\n </span>\n )}\n </div>\n {service.description && (\n <p className=\"text-gray-600 text-sm mt-2\">{service.description}</p>\n )}\n </div>\n );\n}\n\nexport default Services;\n","/**\n * Testimonials Section Component\n *\n * Displays customer reviews and testimonials.\n */\n\nimport React from 'react';\nimport type { Testimonial } from '../../data/types';\nimport { StarIcon } from '../ui/Icons';\n\nexport interface TestimonialsProps {\n testimonials: Testimonial[];\n title?: string;\n subtitle?: string;\n columns?: 1 | 2 | 3;\n showRatings?: boolean;\n variant?: 'cards' | 'quotes' | 'minimal';\n limit?: number;\n className?: string;\n id?: string;\n}\n\n/**\n * Testimonials section component.\n */\nexport function Testimonials({\n testimonials,\n title = 'What Our Customers Say',\n subtitle,\n columns = 3,\n showRatings = true,\n variant = 'cards',\n limit,\n className = '',\n id = 'reviews',\n}: TestimonialsProps) {\n const displayedTestimonials = limit ? testimonials.slice(0, limit) : testimonials;\n\n const gridCols = {\n 1: 'max-w-2xl mx-auto',\n 2: 'md:grid-cols-2 max-w-4xl mx-auto',\n 3: 'md:grid-cols-2 lg:grid-cols-3',\n };\n\n return (\n <section id={id} className={`py-16 scroll-mt-20 ${className}`}>\n <div className=\"container mx-auto px-4\">\n {/* Header */}\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n\n {/* Testimonials Grid */}\n <div className={`grid gap-6 ${gridCols[columns]}`}>\n {displayedTestimonials.map((testimonial) => (\n <TestimonialCard\n key={testimonial.id || testimonial.name}\n testimonial={testimonial}\n showRating={showRatings}\n variant={variant}\n />\n ))}\n </div>\n </div>\n </section>\n );\n}\n\n/**\n * Individual testimonial card.\n */\nfunction TestimonialCard({\n testimonial,\n showRating,\n variant,\n}: {\n testimonial: Testimonial;\n showRating: boolean;\n variant: TestimonialsProps['variant'];\n}) {\n if (variant === 'quotes') {\n return (\n <div className=\"text-center\">\n <QuoteIcon className=\"w-10 h-10 text-primary-200 mx-auto mb-4\" />\n <blockquote className=\"text-lg text-gray-700 italic mb-4\">\n \"{testimonial.quote}\"\n </blockquote>\n {showRating && testimonial.rating && (\n <StarRating rating={testimonial.rating} className=\"justify-center mb-2\" />\n )}\n <div className=\"font-semibold text-gray-900\">{testimonial.name}</div>\n {testimonial.context && (\n <div className=\"text-sm text-gray-500\">{testimonial.context}</div>\n )}\n </div>\n );\n }\n\n if (variant === 'minimal') {\n return (\n <div className=\"border-l-4 border-primary-500 pl-4\">\n <blockquote className=\"text-gray-700 mb-2\">\n \"{testimonial.quote}\"\n </blockquote>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-semibold text-gray-900\">{testimonial.name}</span>\n {showRating && testimonial.rating && (\n <StarRating rating={testimonial.rating} size={14} />\n )}\n </div>\n </div>\n );\n }\n\n // Default: cards variant\n return (\n <div className=\"bg-white rounded-lg shadow p-6\">\n {showRating && testimonial.rating && (\n <StarRating rating={testimonial.rating} className=\"mb-3\" />\n )}\n <blockquote className=\"text-gray-700 mb-4\">\n \"{testimonial.quote}\"\n </blockquote>\n <div className=\"flex items-center\">\n {testimonial.imageUrl && (\n <img\n src={testimonial.imageUrl}\n alt={testimonial.name}\n className=\"w-10 h-10 rounded-full mr-3 object-cover\"\n />\n )}\n <div>\n <div className=\"font-semibold text-gray-900\">{testimonial.name}</div>\n {testimonial.context && (\n <div className=\"text-sm text-gray-500\">{testimonial.context}</div>\n )}\n {testimonial.source && (\n <div className=\"text-xs text-gray-400\">via {testimonial.source}</div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Star rating component.\n */\nfunction StarRating({\n rating,\n size = 18,\n className = '',\n}: {\n rating: number;\n size?: number;\n className?: string;\n}) {\n return (\n <div className={`flex ${className}`} aria-label={`${rating} out of 5 stars`}>\n {[1, 2, 3, 4, 5].map((star) => (\n <StarIcon\n key={star}\n size={size}\n filled={star <= rating}\n className={star <= rating ? 'text-yellow-400' : 'text-gray-300'}\n />\n ))}\n </div>\n );\n}\n\n/**\n * Quote icon.\n */\nfunction QuoteIcon({ className }: { className?: string }) {\n return (\n <svg className={className} fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z\" />\n </svg>\n );\n}\n\nexport default Testimonials;\n","/**\n * FAQ Section Component\n *\n * Displays frequently asked questions in an accordion format.\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport type { FAQItem } from '../../data/types';\nimport { ChevronDownIcon } from '../ui/Icons';\n\nexport interface FAQProps {\n items: FAQItem[];\n title?: string;\n subtitle?: string;\n variant?: 'accordion' | 'cards' | 'simple';\n defaultOpen?: number | number[];\n allowMultiple?: boolean;\n className?: string;\n id?: string;\n}\n\n/**\n * FAQ section component.\n */\nexport function FAQ({\n items,\n title = 'Frequently Asked Questions',\n subtitle,\n variant = 'accordion',\n defaultOpen = 0,\n allowMultiple = false,\n className = '',\n id = 'faq',\n}: FAQProps) {\n const initialOpen = Array.isArray(defaultOpen) ? defaultOpen : [defaultOpen];\n const [openItems, setOpenItems] = useState<number[]>(initialOpen);\n\n const toggleItem = (index: number) => {\n if (allowMultiple) {\n setOpenItems((prev) =>\n prev.includes(index)\n ? prev.filter((i) => i !== index)\n : [...prev, index]\n );\n } else {\n setOpenItems((prev) =>\n prev.includes(index) ? [] : [index]\n );\n }\n };\n\n if (variant === 'cards') {\n return (\n <section id={id} className={`py-16 scroll-mt-20 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className=\"grid md:grid-cols-2 gap-6 max-w-4xl mx-auto\">\n {items.map((item) => (\n <FAQCard key={item.id || item.question} item={item} />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n if (variant === 'simple') {\n return (\n <section id={id} className={`py-16 scroll-mt-20 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className=\"max-w-3xl mx-auto space-y-8\">\n {items.map((item) => (\n <FAQSimple key={item.id || item.question} item={item} />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n // Default: accordion variant\n return (\n <section id={id} className={`py-16 scroll-mt-20 bg-gray-50 ${className}`}>\n <div className=\"container mx-auto px-4\">\n <SectionHeader title={title} subtitle={subtitle} />\n <div className=\"max-w-3xl mx-auto\">\n {items.map((item, index) => (\n <FAQAccordionItem\n key={item.id || item.question}\n item={item}\n isOpen={openItems.includes(index)}\n onToggle={() => toggleItem(index)}\n />\n ))}\n </div>\n </div>\n </section>\n );\n}\n\n/**\n * Section header.\n */\nfunction SectionHeader({ title, subtitle }: { title: string; subtitle?: string }) {\n return (\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n );\n}\n\n/**\n * Accordion FAQ item.\n */\nfunction FAQAccordionItem({\n item,\n isOpen,\n onToggle,\n}: {\n item: FAQItem;\n isOpen: boolean;\n onToggle: () => void;\n}) {\n return (\n <div className=\"border-b border-gray-200 last:border-b-0\">\n <button\n className=\"w-full py-4 flex items-center justify-between text-left focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 rounded\"\n onClick={onToggle}\n aria-expanded={isOpen}\n >\n <span className=\"text-lg font-medium text-gray-900 pr-4\">{item.question}</span>\n <ChevronDownIcon\n size={20}\n className={`flex-shrink-0 text-gray-500 transition-transform duration-200 ${\n isOpen ? 'rotate-180' : ''\n }`}\n />\n </button>\n <div\n className={`overflow-hidden transition-all duration-200 ${\n isOpen ? 'max-h-96 pb-4' : 'max-h-0'\n }`}\n >\n <p className=\"text-gray-600\">{item.answer}</p>\n </div>\n </div>\n );\n}\n\n/**\n * Card FAQ item.\n */\nfunction FAQCard({ item }: { item: FAQItem }) {\n return (\n <div className=\"bg-white rounded-lg shadow p-6\">\n <h3 className=\"text-lg font-semibold text-gray-900 mb-2\">{item.question}</h3>\n <p className=\"text-gray-600\">{item.answer}</p>\n </div>\n );\n}\n\n/**\n * Simple FAQ item.\n */\nfunction FAQSimple({ item }: { item: FAQItem }) {\n return (\n <div>\n <h3 className=\"text-lg font-semibold text-gray-900 mb-2\">{item.question}</h3>\n <p className=\"text-gray-600\">{item.answer}</p>\n </div>\n );\n}\n\nexport default FAQ;\n","/**\n * Hours Section Component\n *\n * Displays business hours with today highlighted.\n */\n\nimport React from 'react';\nimport type { HoursEntry, DayOfWeek } from '../../data/types';\nimport { ClockIcon } from '../ui/Icons';\n\nexport interface HoursProps {\n hours: HoursEntry[];\n title?: string;\n highlightToday?: boolean;\n variant?: 'card' | 'inline' | 'minimal';\n timezone?: string;\n className?: string;\n id?: string;\n}\n\nconst dayOrder: DayOfWeek[] = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];\n\nconst dayNames: Record<DayOfWeek, string> = {\n monday: 'Monday',\n tuesday: 'Tuesday',\n wednesday: 'Wednesday',\n thursday: 'Thursday',\n friday: 'Friday',\n saturday: 'Saturday',\n sunday: 'Sunday',\n};\n\nconst dayAbbrev: Record<DayOfWeek, string> = {\n monday: 'Mon',\n tuesday: 'Tue',\n wednesday: 'Wed',\n thursday: 'Thu',\n friday: 'Fri',\n saturday: 'Sat',\n sunday: 'Sun',\n};\n\n/**\n * Get today's day of week.\n */\nfunction getTodayDay(timezone?: string): DayOfWeek {\n const now = timezone\n ? new Date(new Date().toLocaleString('en-US', { timeZone: timezone }))\n : new Date();\n const jsDay = now.getDay();\n // JavaScript: 0 = Sunday, 1 = Monday, etc.\n return dayOrder[(jsDay + 6) % 7];\n}\n\n/**\n * Hours section component.\n */\nexport function Hours({\n hours,\n title = 'Hours',\n highlightToday = true,\n variant = 'card',\n timezone,\n className = '',\n id = 'hours',\n}: HoursProps) {\n const todayDay = getTodayDay(timezone);\n\n // Sort hours by day order\n const sortedHours = [...hours].sort(\n (a, b) => dayOrder.indexOf(a.day) - dayOrder.indexOf(b.day)\n );\n\n if (variant === 'inline') {\n return (\n <div id={id} className={`flex flex-wrap gap-4 ${className}`}>\n {sortedHours.map((entry) => (\n <HoursInlineItem\n key={entry.day}\n entry={entry}\n isToday={highlightToday && entry.day === todayDay}\n />\n ))}\n </div>\n );\n }\n\n if (variant === 'minimal') {\n return (\n <div id={id} className={`space-y-1 ${className}`}>\n {sortedHours.map((entry) => (\n <HoursMinimalItem\n key={entry.day}\n entry={entry}\n isToday={highlightToday && entry.day === todayDay}\n />\n ))}\n </div>\n );\n }\n\n // Default: card variant\n return (\n <div id={id} className={`bg-white rounded-lg shadow p-6 ${className}`}>\n <div className=\"flex items-center mb-4\">\n <ClockIcon size={24} className=\"text-primary-600 mr-2\" />\n <h3 className=\"text-xl font-semibold text-gray-900\">{title}</h3>\n </div>\n <div className=\"space-y-2\">\n {sortedHours.map((entry) => (\n <HoursCardItem\n key={entry.day}\n entry={entry}\n isToday={highlightToday && entry.day === todayDay}\n />\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * Card variant item.\n */\nfunction HoursCardItem({ entry, isToday }: { entry: HoursEntry; isToday: boolean }) {\n return (\n <div\n className={`flex justify-between py-1 ${\n isToday ? 'bg-primary-50 -mx-2 px-2 rounded font-medium' : ''\n }`}\n >\n <span className={isToday ? 'text-primary-700' : 'text-gray-600'}>\n {dayNames[entry.day]}\n {isToday && <span className=\"ml-2 text-xs\">(Today)</span>}\n </span>\n <span className={isToday ? 'text-primary-700' : 'text-gray-900'}>\n {entry.closed ? 'Closed' : `${entry.open} - ${entry.close}`}\n </span>\n </div>\n );\n}\n\n/**\n * Inline variant item.\n */\nfunction HoursInlineItem({ entry, isToday }: { entry: HoursEntry; isToday: boolean }) {\n return (\n <div\n className={`text-center px-3 py-2 rounded ${\n isToday ? 'bg-primary-100 ring-2 ring-primary-500' : 'bg-gray-100'\n }`}\n >\n <div className={`text-sm font-medium ${isToday ? 'text-primary-700' : 'text-gray-500'}`}>\n {dayAbbrev[entry.day]}\n </div>\n <div className={`text-sm ${isToday ? 'text-primary-900' : 'text-gray-900'}`}>\n {entry.closed ? 'Closed' : `${entry.open?.split(' ')[0]}-${entry.close?.split(' ')[0]}`}\n </div>\n </div>\n );\n}\n\n/**\n * Minimal variant item.\n */\nfunction HoursMinimalItem({ entry, isToday }: { entry: HoursEntry; isToday: boolean }) {\n return (\n <div className={`text-sm ${isToday ? 'font-semibold text-primary-600' : 'text-gray-600'}`}>\n <span className=\"inline-block w-20\">{dayAbbrev[entry.day]}</span>\n <span>{entry.closed ? 'Closed' : `${entry.open} - ${entry.close}`}</span>\n </div>\n );\n}\n\n/**\n * Get today's hours text.\n */\nexport function getTodayHours(hours: HoursEntry[], timezone?: string): string | null {\n const todayDay = getTodayDay(timezone);\n const todayHours = hours.find((h) => h.day === todayDay);\n\n if (!todayHours) return null;\n if (todayHours.closed) return 'Closed today';\n return `${todayHours.open} - ${todayHours.close}`;\n}\n\n/**\n * Check if currently open.\n */\nexport function isCurrentlyOpen(hours: HoursEntry[], timezone?: string): boolean {\n const todayDay = getTodayDay(timezone);\n const todayHours = hours.find((h) => h.day === todayDay);\n\n if (!todayHours || todayHours.closed) return false;\n if (!todayHours.open || !todayHours.close) return false;\n\n const now = timezone\n ? new Date(new Date().toLocaleString('en-US', { timeZone: timezone }))\n : new Date();\n\n const currentMinutes = now.getHours() * 60 + now.getMinutes();\n const openMinutes = parseTimeToMinutes(todayHours.open);\n const closeMinutes = parseTimeToMinutes(todayHours.close);\n\n if (openMinutes === null || closeMinutes === null) return false;\n\n return currentMinutes >= openMinutes && currentMinutes < closeMinutes;\n}\n\n/**\n * Parse time string to minutes since midnight.\n */\nfunction parseTimeToMinutes(time: string): number | null {\n const match = time.match(/(\\d{1,2}):?(\\d{2})?\\s*(AM|PM)?/i);\n if (!match) return null;\n\n let hours = parseInt(match[1], 10);\n const minutes = parseInt(match[2] || '0', 10);\n const period = match[3]?.toUpperCase();\n\n if (period === 'PM' && hours !== 12) hours += 12;\n if (period === 'AM' && hours === 12) hours = 0;\n\n return hours * 60 + minutes;\n}\n\nexport default Hours;\n","/**\n * Gallery Section Component\n *\n * Displays a grid of images.\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport type { GalleryItem } from '../../data/types';\n\nexport interface GalleryProps {\n items: GalleryItem[];\n title?: string;\n subtitle?: string;\n columns?: 2 | 3 | 4;\n variant?: 'grid' | 'masonry' | 'carousel';\n showCaptions?: boolean;\n enableLightbox?: boolean;\n limit?: number;\n className?: string;\n id?: string;\n}\n\n/**\n * Gallery section component.\n */\nexport function Gallery({\n items,\n title = 'Gallery',\n subtitle,\n columns = 3,\n variant = 'grid',\n showCaptions = true,\n enableLightbox = true,\n limit,\n className = '',\n id = 'gallery',\n}: GalleryProps) {\n const displayedItems = limit ? items.slice(0, limit) : items;\n const [failedImages, setFailedImages] = useState<Set<string>>(new Set());\n const [lightboxIndex, setLightboxIndex] = useState<number | null>(null);\n\n const handleImageError = (id: string) => {\n setFailedImages((prev) => new Set(prev).add(id));\n };\n\n const gridCols = {\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n };\n\n const openLightbox = (index: number) => {\n if (enableLightbox) {\n setLightboxIndex(index);\n }\n };\n\n const closeLightbox = () => setLightboxIndex(null);\n\n const goToPrevious = () => {\n if (lightboxIndex !== null) {\n setLightboxIndex(lightboxIndex === 0 ? displayedItems.length - 1 : lightboxIndex - 1);\n }\n };\n\n const goToNext = () => {\n if (lightboxIndex !== null) {\n setLightboxIndex(lightboxIndex === displayedItems.length - 1 ? 0 : lightboxIndex + 1);\n }\n };\n\n return (\n <section id={id} className={`py-16 scroll-mt-20 ${className}`}>\n <div className=\"container mx-auto px-4\">\n {/* Header */}\n {(title || subtitle) && (\n <div className=\"text-center mb-12\">\n {title && (\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n )}\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n )}\n\n {/* Gallery Grid */}\n <div className={`grid gap-4 ${gridCols[columns]}`}>\n {displayedItems.map((item, index) => {\n const itemId = item.id || item.imageUrl;\n const hasFailed = failedImages.has(itemId);\n\n return (\n <div\n key={itemId}\n className={`group relative aspect-square overflow-hidden rounded-lg bg-gray-100 ${enableLightbox ? 'cursor-pointer' : ''}`}\n onClick={() => openLightbox(index)}\n role={enableLightbox ? 'button' : undefined}\n tabIndex={enableLightbox ? 0 : undefined}\n onKeyDown={enableLightbox ? (e) => e.key === 'Enter' && openLightbox(index) : undefined}\n >\n {hasFailed ? (\n <div className=\"absolute inset-0 flex items-center justify-center text-gray-400\">\n <span>Image unavailable</span>\n </div>\n ) : (\n <>\n <img\n src={item.imageUrl}\n alt={item.alt || ''}\n loading=\"lazy\"\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n onError={() => handleImageError(itemId)}\n />\n {/* Hover overlay with zoom icon */}\n {enableLightbox && (\n <div className=\"absolute inset-0 bg-black/30 opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-center justify-center\">\n <svg className=\"w-10 h-10 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7\" />\n </svg>\n </div>\n )}\n {/* Caption overlay */}\n {showCaptions && item.caption && !enableLightbox && (\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/60 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300\">\n <div className=\"absolute bottom-0 left-0 right-0 p-4\">\n <p className=\"text-white text-sm\">{item.caption}</p>\n </div>\n </div>\n )}\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Lightbox Modal */}\n {enableLightbox && lightboxIndex !== null && (\n <div\n className=\"fixed inset-0 z-50 bg-black/90 flex items-center justify-center\"\n onClick={closeLightbox}\n >\n {/* Close button */}\n <button\n onClick={closeLightbox}\n className=\"absolute top-4 right-4 text-white hover:text-gray-300 transition-colors z-10\"\n aria-label=\"Close lightbox\"\n >\n <svg className=\"w-8 h-8\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n\n {/* Previous button */}\n <button\n onClick={(e) => { e.stopPropagation(); goToPrevious(); }}\n className=\"absolute left-4 top-1/2 -translate-y-1/2 text-white hover:text-gray-300 transition-colors z-10\"\n aria-label=\"Previous image\"\n >\n <svg className=\"w-10 h-10\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n {/* Next button */}\n <button\n onClick={(e) => { e.stopPropagation(); goToNext(); }}\n className=\"absolute right-4 top-1/2 -translate-y-1/2 text-white hover:text-gray-300 transition-colors z-10\"\n aria-label=\"Next image\"\n >\n <svg className=\"w-10 h-10\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n\n {/* Image container */}\n <div\n className=\"max-w-5xl max-h-[85vh] mx-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={displayedItems[lightboxIndex].imageUrl}\n alt={displayedItems[lightboxIndex].alt || ''}\n className=\"max-w-full max-h-[85vh] object-contain\"\n />\n {showCaptions && displayedItems[lightboxIndex].caption && (\n <p className=\"text-white text-center mt-4 text-lg\">\n {displayedItems[lightboxIndex].caption}\n </p>\n )}\n </div>\n\n {/* Image counter */}\n <div className=\"absolute bottom-4 left-1/2 -translate-x-1/2 text-white text-sm\">\n {lightboxIndex + 1} / {displayedItems.length}\n </div>\n </div>\n )}\n </section>\n );\n}\n\nexport default Gallery;\n","/**\n * Menu Section Component\n *\n * Displays a restaurant or food service menu with categories.\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport type { MenuItem } from '../../data/types';\n\nexport interface MenuProps {\n items: MenuItem[];\n title?: string;\n subtitle?: string;\n showCategories?: boolean;\n showImages?: boolean;\n showDietary?: boolean;\n variant?: 'cards' | 'list' | 'compact';\n columns?: 1 | 2 | 3;\n className?: string;\n id?: string;\n}\n\n/**\n * Menu section component.\n */\nexport function Menu({\n items,\n title = 'Our Menu',\n subtitle,\n showCategories = true,\n showImages = true,\n showDietary = true,\n variant = 'cards',\n columns = 2,\n className = '',\n id = 'menu',\n}: MenuProps) {\n // Get unique categories\n const categories = showCategories\n ? [...new Set(items.filter(item => item.category).map(item => item.category!))]\n : [];\n\n const [activeCategory, setActiveCategory] = useState<string | null>(\n categories.length > 0 ? categories[0] : null\n );\n\n // Filter items by category\n const displayedItems = activeCategory\n ? items.filter(item => item.category === activeCategory)\n : items;\n\n // Sort by sortOrder\n const sortedItems = [...displayedItems].sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0));\n\n const gridCols = {\n 1: 'max-w-2xl mx-auto',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-2 lg:grid-cols-3',\n };\n\n return (\n <section id={id} className={`py-16 scroll-mt-20 ${className}`}>\n <div className=\"container mx-auto px-4\">\n {/* Header */}\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n\n {/* Category Tabs */}\n {showCategories && categories.length > 1 && (\n <div className=\"flex flex-wrap justify-center gap-2 mb-8\">\n {categories.map((category) => (\n <button\n key={category}\n onClick={() => setActiveCategory(category)}\n className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${\n activeCategory === category\n ? 'bg-primary-600 text-white'\n : 'bg-gray-100 text-gray-700 hover:bg-gray-200'\n }`}\n >\n {category}\n </button>\n ))}\n </div>\n )}\n\n {/* Menu Items */}\n {variant === 'list' ? (\n <div className=\"max-w-3xl mx-auto divide-y divide-gray-200\">\n {sortedItems.map((item) => (\n <MenuListItem\n key={item.id || item.name}\n item={item}\n showImage={showImages}\n showDietary={showDietary}\n />\n ))}\n </div>\n ) : variant === 'compact' ? (\n <div className={`grid gap-4 ${gridCols[columns]}`}>\n {sortedItems.map((item) => (\n <MenuCompactItem\n key={item.id || item.name}\n item={item}\n showDietary={showDietary}\n />\n ))}\n </div>\n ) : (\n <div className={`grid gap-6 ${gridCols[columns]}`}>\n {sortedItems.map((item) => (\n <MenuCard\n key={item.id || item.name}\n item={item}\n showImage={showImages}\n showDietary={showDietary}\n />\n ))}\n </div>\n )}\n </div>\n </section>\n );\n}\n\n/**\n * Menu card component.\n */\nfunction MenuCard({\n item,\n showImage,\n showDietary,\n}: {\n item: MenuItem;\n showImage: boolean;\n showDietary: boolean;\n}) {\n return (\n <div className=\"bg-white rounded-lg shadow-md overflow-hidden hover:shadow-lg transition-shadow\">\n {showImage && item.imageUrl && (\n <div className=\"aspect-video relative overflow-hidden\">\n <img\n src={item.imageUrl}\n alt={item.name}\n className=\"w-full h-full object-cover\"\n />\n {item.featured && (\n <span className=\"absolute top-2 left-2 px-2 py-1 bg-primary-600 text-white text-xs font-medium rounded\">\n Featured\n </span>\n )}\n </div>\n )}\n <div className=\"p-4\">\n <div className=\"flex justify-between items-start mb-2\">\n <h3 className=\"text-lg font-semibold text-gray-900\">{item.name}</h3>\n <PriceDisplay item={item} />\n </div>\n {item.description && (\n <p className=\"text-gray-600 text-sm mb-3\">{item.description}</p>\n )}\n {showDietary && item.dietary && item.dietary.length > 0 && (\n <DietaryBadges dietary={item.dietary} />\n )}\n {!item.available && (\n <span className=\"inline-block mt-2 px-2 py-1 bg-gray-100 text-gray-500 text-xs rounded\">\n Currently unavailable\n </span>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * Menu list item component.\n */\nfunction MenuListItem({\n item,\n showImage,\n showDietary,\n}: {\n item: MenuItem;\n showImage: boolean;\n showDietary: boolean;\n}) {\n return (\n <div className=\"py-4 flex gap-4\">\n {showImage && item.imageUrl && (\n <div className=\"w-20 h-20 flex-shrink-0 rounded-lg overflow-hidden\">\n <img\n src={item.imageUrl}\n alt={item.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex justify-between items-start\">\n <div>\n <h3 className=\"text-lg font-semibold text-gray-900\">\n {item.name}\n {item.featured && (\n <span className=\"ml-2 px-2 py-0.5 bg-primary-100 text-primary-700 text-xs font-medium rounded\">\n Popular\n </span>\n )}\n </h3>\n {item.description && (\n <p className=\"text-gray-600 text-sm mt-1\">{item.description}</p>\n )}\n {showDietary && item.dietary && item.dietary.length > 0 && (\n <div className=\"mt-2\">\n <DietaryBadges dietary={item.dietary} />\n </div>\n )}\n </div>\n <PriceDisplay item={item} />\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Compact menu item component.\n */\nfunction MenuCompactItem({\n item,\n showDietary,\n}: {\n item: MenuItem;\n showDietary: boolean;\n}) {\n return (\n <div className=\"flex justify-between items-center py-2 border-b border-gray-100 last:border-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-gray-900\">{item.name}</span>\n {item.featured && (\n <span className=\"w-2 h-2 bg-primary-500 rounded-full\" title=\"Popular\" />\n )}\n {showDietary && item.dietary && item.dietary.length > 0 && (\n <span className=\"text-xs text-gray-500\">\n ({item.dietary.join(', ')})\n </span>\n )}\n </div>\n <PriceDisplay item={item} compact />\n </div>\n );\n}\n\n/**\n * Price display component.\n */\nfunction PriceDisplay({ item, compact = false }: { item: MenuItem; compact?: boolean }) {\n if (item.priceNote) {\n return (\n <span className={`text-primary-600 font-medium ${compact ? 'text-sm' : ''}`}>\n {item.priceNote}\n </span>\n );\n }\n\n if (item.price) {\n return (\n <span className={`text-primary-600 font-medium ${compact ? 'text-sm' : ''}`}>\n ${item.price.toFixed(2)}\n </span>\n );\n }\n\n return null;\n}\n\n/**\n * Dietary badges component.\n */\nfunction DietaryBadges({ dietary }: { dietary: string[] }) {\n const dietaryIcons: Record<string, string> = {\n vegetarian: 'V',\n vegan: 'VG',\n 'gluten-free': 'GF',\n 'dairy-free': 'DF',\n 'nut-free': 'NF',\n spicy: '🌶',\n halal: 'H',\n kosher: 'K',\n };\n\n return (\n <div className=\"flex flex-wrap gap-1\">\n {dietary.map((diet) => (\n <span\n key={diet}\n className=\"px-1.5 py-0.5 bg-green-100 text-green-700 text-xs font-medium rounded\"\n title={diet}\n >\n {dietaryIcons[diet.toLowerCase()] || diet}\n </span>\n ))}\n </div>\n );\n}\n\nexport default Menu;\n","/**\n * Trust Badges Section Component\n *\n * Displays certifications, awards, affiliations, and trust indicators.\n */\n\nimport React from 'react';\n\nexport interface TrustBadge {\n id?: string;\n name: string;\n description?: string;\n imageUrl?: string;\n icon?: string;\n year?: string;\n link?: string;\n featured?: boolean;\n sortOrder?: number;\n}\n\nexport interface TrustBadgesProps {\n badges: TrustBadge[];\n title?: string;\n subtitle?: string;\n variant?: 'grid' | 'inline' | 'cards';\n columns?: 3 | 4 | 5 | 6;\n showDescriptions?: boolean;\n className?: string;\n id?: string;\n}\n\n/**\n * Trust badges section component.\n */\nexport function TrustBadges({\n badges,\n title = 'Certifications & Affiliations',\n subtitle,\n variant = 'grid',\n columns = 4,\n showDescriptions = false,\n className = '',\n id = 'certifications',\n}: TrustBadgesProps) {\n const sortedBadges = [...badges].sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0));\n\n const gridCols = {\n 3: 'grid-cols-2 sm:grid-cols-3',\n 4: 'grid-cols-2 sm:grid-cols-4',\n 5: 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-5',\n 6: 'grid-cols-3 sm:grid-cols-6',\n };\n\n if (variant === 'inline') {\n return (\n <section id={id} className={`py-12 scroll-mt-20 bg-gray-50 ${className}`}>\n <div className=\"container mx-auto px-4\">\n {title && (\n <p className=\"text-center text-sm text-gray-500 mb-6\">{title}</p>\n )}\n <div className=\"flex flex-wrap justify-center items-center gap-8 md:gap-12\">\n {sortedBadges.map((badge) => (\n <InlineBadge key={badge.id || badge.name} badge={badge} />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n if (variant === 'cards') {\n return (\n <section id={id} className={`py-16 scroll-mt-20 ${className}`}>\n <div className=\"container mx-auto px-4\">\n {/* Header */}\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n\n {/* Cards Grid */}\n <div className={`grid gap-6 ${gridCols[columns]}`}>\n {sortedBadges.map((badge) => (\n <CardBadge\n key={badge.id || badge.name}\n badge={badge}\n showDescription={showDescriptions}\n />\n ))}\n </div>\n </div>\n </section>\n );\n }\n\n // Default: grid variant\n return (\n <section id={id} className={`py-16 scroll-mt-20 bg-gray-50 ${className}`}>\n <div className=\"container mx-auto px-4\">\n {/* Header */}\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n\n {/* Grid */}\n <div className={`grid gap-8 ${gridCols[columns]}`}>\n {sortedBadges.map((badge) => (\n <GridBadge\n key={badge.id || badge.name}\n badge={badge}\n showDescription={showDescriptions}\n />\n ))}\n </div>\n </div>\n </section>\n );\n}\n\n/**\n * Inline badge component.\n */\nfunction InlineBadge({ badge }: { badge: TrustBadge }) {\n const Wrapper = badge.link ? 'a' : 'div';\n const wrapperProps = badge.link\n ? { href: badge.link, target: '_blank', rel: 'noopener noreferrer' }\n : {};\n\n return (\n <Wrapper\n {...wrapperProps}\n className=\"flex items-center opacity-70 hover:opacity-100 transition-opacity\"\n title={badge.name}\n >\n {badge.imageUrl ? (\n <img\n src={badge.imageUrl}\n alt={badge.name}\n className=\"h-10 md:h-12 w-auto object-contain grayscale hover:grayscale-0 transition-all\"\n />\n ) : (\n <div className=\"flex items-center gap-2 text-gray-600\">\n {badge.icon && <BadgeIcon icon={badge.icon} className=\"w-8 h-8\" />}\n <span className=\"text-sm font-medium\">{badge.name}</span>\n </div>\n )}\n </Wrapper>\n );\n}\n\n/**\n * Grid badge component.\n */\nfunction GridBadge({\n badge,\n showDescription,\n}: {\n badge: TrustBadge;\n showDescription: boolean;\n}) {\n const Wrapper = badge.link ? 'a' : 'div';\n const wrapperProps = badge.link\n ? { href: badge.link, target: '_blank', rel: 'noopener noreferrer' }\n : {};\n\n return (\n <Wrapper\n {...wrapperProps}\n className=\"flex flex-col items-center text-center group\"\n >\n <div className=\"w-20 h-20 mb-3 flex items-center justify-center\">\n {badge.imageUrl ? (\n <img\n src={badge.imageUrl}\n alt={badge.name}\n className=\"max-w-full max-h-full object-contain group-hover:scale-110 transition-transform\"\n />\n ) : (\n <BadgeIcon\n icon={badge.icon || 'certificate'}\n className=\"w-16 h-16 text-primary-600 group-hover:scale-110 transition-transform\"\n />\n )}\n </div>\n <h3 className=\"font-semibold text-gray-900 text-sm\">{badge.name}</h3>\n {badge.year && (\n <span className=\"text-xs text-gray-500\">Since {badge.year}</span>\n )}\n {showDescription && badge.description && (\n <p className=\"text-sm text-gray-600 mt-2\">{badge.description}</p>\n )}\n </Wrapper>\n );\n}\n\n/**\n * Card badge component.\n */\nfunction CardBadge({\n badge,\n showDescription,\n}: {\n badge: TrustBadge;\n showDescription: boolean;\n}) {\n const Wrapper = badge.link ? 'a' : 'div';\n const wrapperProps = badge.link\n ? { href: badge.link, target: '_blank', rel: 'noopener noreferrer' }\n : {};\n\n return (\n <Wrapper\n {...wrapperProps}\n className=\"bg-white rounded-lg shadow p-6 flex flex-col items-center text-center hover:shadow-md transition-shadow\"\n >\n <div className=\"w-16 h-16 mb-4 flex items-center justify-center\">\n {badge.imageUrl ? (\n <img\n src={badge.imageUrl}\n alt={badge.name}\n className=\"max-w-full max-h-full object-contain\"\n />\n ) : (\n <BadgeIcon icon={badge.icon || 'certificate'} className=\"w-12 h-12 text-primary-600\" />\n )}\n </div>\n <h3 className=\"font-semibold text-gray-900\">{badge.name}</h3>\n {badge.year && (\n <span className=\"text-xs text-gray-500 mt-1\">Since {badge.year}</span>\n )}\n {showDescription && badge.description && (\n <p className=\"text-sm text-gray-600 mt-2\">{badge.description}</p>\n )}\n </Wrapper>\n );\n}\n\n/**\n * Badge icon component with common certification icons.\n */\nfunction BadgeIcon({ icon, className = '' }: { icon: string; className?: string }) {\n const icons: Record<string, JSX.Element> = {\n certificate: (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z\" />\n </svg>\n ),\n shield: (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" />\n </svg>\n ),\n star: (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n </svg>\n ),\n award: (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z\" />\n </svg>\n ),\n check: (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n ),\n verified: (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z\" />\n </svg>\n ),\n };\n\n return icons[icon] || icons.certificate;\n}\n\nexport default TrustBadges;\n","/**\n * Before/After Gallery Section Component\n *\n * Displays before and after images with an interactive slider.\n * Perfect for tailors, home services, beauty services, etc.\n */\n\n'use client';\n\nimport React, { useState, useRef, useCallback } from 'react';\n\nexport interface BeforeAfterItem {\n id?: string;\n beforeImageUrl: string;\n afterImageUrl: string;\n beforeAlt?: string;\n afterAlt?: string;\n title?: string;\n description?: string;\n category?: string;\n featured?: boolean;\n sortOrder?: number;\n}\n\nexport interface BeforeAfterProps {\n items: BeforeAfterItem[];\n title?: string;\n subtitle?: string;\n columns?: 1 | 2 | 3;\n variant?: 'slider' | 'side-by-side' | 'stacked';\n showCategories?: boolean;\n className?: string;\n id?: string;\n}\n\n/**\n * Before/After gallery section component.\n */\nexport function BeforeAfter({\n items,\n title = 'Our Work',\n subtitle = 'See the transformation',\n columns = 2,\n variant = 'slider',\n showCategories = true,\n className = '',\n id = 'portfolio',\n}: BeforeAfterProps) {\n // Get unique categories\n const categories = showCategories\n ? [...new Set(items.filter(item => item.category).map(item => item.category!))]\n : [];\n\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n\n // Filter items by category\n const displayedItems = activeCategory\n ? items.filter(item => item.category === activeCategory)\n : items;\n\n // Sort by sortOrder\n const sortedItems = [...displayedItems].sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0));\n\n const gridCols = {\n 1: 'max-w-2xl mx-auto',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-2 lg:grid-cols-3',\n };\n\n return (\n <section id={id} className={`py-16 scroll-mt-20 ${className}`}>\n <div className=\"container mx-auto px-4\">\n {/* Header */}\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl md:text-4xl font-bold text-gray-900 mb-4\">{title}</h2>\n {subtitle && (\n <p className=\"text-lg text-gray-600 max-w-2xl mx-auto\">{subtitle}</p>\n )}\n </div>\n\n {/* Category Tabs */}\n {showCategories && categories.length > 1 && (\n <div className=\"flex flex-wrap justify-center gap-2 mb-8\">\n <button\n onClick={() => setActiveCategory(null)}\n className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${\n activeCategory === null\n ? 'bg-primary-600 text-white'\n : 'bg-gray-100 text-gray-700 hover:bg-gray-200'\n }`}\n >\n All\n </button>\n {categories.map((category) => (\n <button\n key={category}\n onClick={() => setActiveCategory(category)}\n className={`px-4 py-2 rounded-full text-sm font-medium transition-colors ${\n activeCategory === category\n ? 'bg-primary-600 text-white'\n : 'bg-gray-100 text-gray-700 hover:bg-gray-200'\n }`}\n >\n {category}\n </button>\n ))}\n </div>\n )}\n\n {/* Items Grid */}\n <div className={`grid gap-8 ${gridCols[columns]}`}>\n {sortedItems.map((item) => (\n <BeforeAfterCard\n key={item.id || `${item.beforeImageUrl}-${item.afterImageUrl}`}\n item={item}\n variant={variant}\n />\n ))}\n </div>\n </div>\n </section>\n );\n}\n\n/**\n * Before/After card component.\n */\nfunction BeforeAfterCard({\n item,\n variant,\n}: {\n item: BeforeAfterItem;\n variant: BeforeAfterProps['variant'];\n}) {\n if (variant === 'side-by-side') {\n return <SideBySideCard item={item} />;\n }\n\n if (variant === 'stacked') {\n return <StackedCard item={item} />;\n }\n\n // Default: slider variant\n return <SliderCard item={item} />;\n}\n\n/**\n * Slider card with draggable comparison.\n */\nfunction SliderCard({ item }: { item: BeforeAfterItem }) {\n const [sliderPosition, setSliderPosition] = useState(50);\n const containerRef = useRef<HTMLDivElement>(null);\n const isDragging = useRef(false);\n\n const handleMove = useCallback((clientX: number) => {\n if (!containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n const x = clientX - rect.left;\n const percentage = Math.max(0, Math.min(100, (x / rect.width) * 100));\n setSliderPosition(percentage);\n }, []);\n\n const handleMouseDown = () => {\n isDragging.current = true;\n };\n\n const handleMouseUp = () => {\n isDragging.current = false;\n };\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (isDragging.current) {\n handleMove(e.clientX);\n }\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n handleMove(e.touches[0].clientX);\n };\n\n return (\n <div className=\"bg-white rounded-lg shadow-md overflow-hidden\">\n <div\n ref={containerRef}\n className=\"relative aspect-[4/3] cursor-ew-resize select-none overflow-hidden\"\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n onMouseMove={handleMouseMove}\n onTouchMove={handleTouchMove}\n >\n {/* After image (full) */}\n <img\n src={item.afterImageUrl}\n alt={item.afterAlt || 'After'}\n className=\"absolute inset-0 w-full h-full object-cover\"\n />\n\n {/* Before image (clipped) */}\n <div\n className=\"absolute inset-0 overflow-hidden\"\n style={{ width: `${sliderPosition}%` }}\n >\n <img\n src={item.beforeImageUrl}\n alt={item.beforeAlt || 'Before'}\n className=\"absolute inset-0 w-full h-full object-cover\"\n style={{ width: containerRef.current?.offsetWidth || '100%' }}\n />\n </div>\n\n {/* Slider handle */}\n <div\n className=\"absolute top-0 bottom-0 w-1 bg-white shadow-lg cursor-ew-resize\"\n style={{ left: `${sliderPosition}%`, transform: 'translateX(-50%)' }}\n >\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-10 h-10 bg-white rounded-full shadow-lg flex items-center justify-center\">\n <svg className=\"w-6 h-6 text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 9l4-4 4 4m0 6l-4 4-4-4\" />\n </svg>\n </div>\n </div>\n\n {/* Labels */}\n <div className=\"absolute bottom-4 left-4 px-2 py-1 bg-black/60 text-white text-xs rounded\">\n Before\n </div>\n <div className=\"absolute bottom-4 right-4 px-2 py-1 bg-black/60 text-white text-xs rounded\">\n After\n </div>\n </div>\n\n {/* Content */}\n {(item.title || item.description) && (\n <div className=\"p-4\">\n {item.title && (\n <h3 className=\"text-lg font-semibold text-gray-900 mb-1\">{item.title}</h3>\n )}\n {item.description && (\n <p className=\"text-gray-600 text-sm\">{item.description}</p>\n )}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Side by side card.\n */\nfunction SideBySideCard({ item }: { item: BeforeAfterItem }) {\n return (\n <div className=\"bg-white rounded-lg shadow-md overflow-hidden\">\n <div className=\"grid grid-cols-2\">\n <div className=\"relative aspect-square\">\n <img\n src={item.beforeImageUrl}\n alt={item.beforeAlt || 'Before'}\n className=\"w-full h-full object-cover\"\n />\n <span className=\"absolute bottom-2 left-2 px-2 py-1 bg-black/60 text-white text-xs rounded\">\n Before\n </span>\n </div>\n <div className=\"relative aspect-square\">\n <img\n src={item.afterImageUrl}\n alt={item.afterAlt || 'After'}\n className=\"w-full h-full object-cover\"\n />\n <span className=\"absolute bottom-2 right-2 px-2 py-1 bg-black/60 text-white text-xs rounded\">\n After\n </span>\n </div>\n </div>\n\n {/* Content */}\n {(item.title || item.description) && (\n <div className=\"p-4\">\n {item.title && (\n <h3 className=\"text-lg font-semibold text-gray-900 mb-1\">{item.title}</h3>\n )}\n {item.description && (\n <p className=\"text-gray-600 text-sm\">{item.description}</p>\n )}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Stacked card with hover reveal.\n */\nfunction StackedCard({ item }: { item: BeforeAfterItem }) {\n const [showAfter, setShowAfter] = useState(false);\n\n return (\n <div className=\"bg-white rounded-lg shadow-md overflow-hidden\">\n <div\n className=\"relative aspect-[4/3] cursor-pointer\"\n onMouseEnter={() => setShowAfter(true)}\n onMouseLeave={() => setShowAfter(false)}\n onClick={() => setShowAfter(!showAfter)}\n >\n {/* Before image */}\n <img\n src={item.beforeImageUrl}\n alt={item.beforeAlt || 'Before'}\n className={`absolute inset-0 w-full h-full object-cover transition-opacity duration-300 ${\n showAfter ? 'opacity-0' : 'opacity-100'\n }`}\n />\n\n {/* After image */}\n <img\n src={item.afterImageUrl}\n alt={item.afterAlt || 'After'}\n className={`absolute inset-0 w-full h-full object-cover transition-opacity duration-300 ${\n showAfter ? 'opacity-100' : 'opacity-0'\n }`}\n />\n\n {/* Label */}\n <div className=\"absolute bottom-4 left-1/2 -translate-x-1/2 px-3 py-1 bg-black/60 text-white text-sm rounded\">\n {showAfter ? 'After' : 'Before'} (hover to toggle)\n </div>\n </div>\n\n {/* Content */}\n {(item.title || item.description) && (\n <div className=\"p-4\">\n {item.title && (\n <h3 className=\"text-lg font-semibold text-gray-900 mb-1\">{item.title}</h3>\n )}\n {item.description && (\n <p className=\"text-gray-600 text-sm\">{item.description}</p>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default BeforeAfter;\n","/**\n * Button Component\n *\n * A versatile button component with multiple variants and sizes.\n */\n\nimport React from 'react';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'link';\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n loading?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\n/**\n * Get CSS classes for button variants and sizes.\n */\nfunction getButtonClasses(props: Pick<ButtonProps, 'variant' | 'size' | 'fullWidth' | 'disabled'>): string {\n const { variant = 'primary', size = 'md', fullWidth, disabled } = props;\n\n const baseClasses = [\n 'inline-flex items-center justify-center',\n 'font-medium',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2',\n disabled ? 'opacity-50 cursor-not-allowed' : '',\n fullWidth ? 'w-full' : '',\n ];\n\n // Variant classes\n const variantClasses: Record<NonNullable<ButtonProps['variant']>, string> = {\n primary: 'bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500',\n secondary: 'bg-primary-100 text-primary-700 hover:bg-primary-200 focus:ring-primary-500',\n outline: 'border-2 border-primary-600 text-primary-600 hover:bg-primary-50 focus:ring-primary-500',\n ghost: 'text-primary-600 hover:bg-primary-100 focus:ring-primary-500',\n link: 'text-primary-600 hover:underline focus:ring-primary-500 p-0',\n };\n\n // Size classes\n const sizeClasses: Record<NonNullable<ButtonProps['size']>, string> = {\n sm: 'text-sm px-3 py-1.5 rounded',\n md: 'text-base px-4 py-2 rounded-md',\n lg: 'text-lg px-6 py-3 rounded-lg',\n };\n\n return [\n ...baseClasses,\n variantClasses[variant],\n variant !== 'link' ? sizeClasses[size] : '',\n ]\n .filter(Boolean)\n .join(' ');\n}\n\n/**\n * Button component with multiple variants and sizes.\n */\nexport function Button({\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n loading = false,\n leftIcon,\n rightIcon,\n children,\n disabled,\n className = '',\n ...props\n}: ButtonProps) {\n const classes = getButtonClasses({ variant, size, fullWidth, disabled: disabled || loading });\n\n return (\n <button\n className={`${classes} ${className}`}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? (\n <LoadingSpinner size={size} />\n ) : (\n <>\n {leftIcon && <span className=\"mr-2\">{leftIcon}</span>}\n {children}\n {rightIcon && <span className=\"ml-2\">{rightIcon}</span>}\n </>\n )}\n </button>\n );\n}\n\n/**\n * Loading spinner for button loading state.\n */\nfunction LoadingSpinner({ size }: { size: ButtonProps['size'] }) {\n const sizeClasses = {\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n };\n\n return (\n <svg\n className={`animate-spin ${sizeClasses[size || 'md']}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n );\n}\n\n/**\n * Link styled as a button.\n */\nexport interface ButtonLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n variant?: ButtonProps['variant'];\n size?: ButtonProps['size'];\n fullWidth?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\nexport function ButtonLink({\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n leftIcon,\n rightIcon,\n children,\n className = '',\n ...props\n}: ButtonLinkProps) {\n const classes = getButtonClasses({ variant, size, fullWidth, disabled: false });\n\n return (\n <a className={`${classes} ${className}`} {...props}>\n {leftIcon && <span className=\"mr-2\">{leftIcon}</span>}\n {children}\n {rightIcon && <span className=\"ml-2\">{rightIcon}</span>}\n </a>\n );\n}\n","/**\n * Card Component\n *\n * A flexible card component for displaying content in a contained box.\n */\n\nimport React from 'react';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'elevated' | 'outlined' | 'filled';\n padding?: 'none' | 'sm' | 'md' | 'lg';\n hover?: boolean;\n}\n\n/**\n * Get CSS classes for card variants.\n */\nfunction getCardClasses(props: Pick<CardProps, 'variant' | 'padding' | 'hover'>): string {\n const { variant = 'default', padding = 'md', hover = false } = props;\n\n const baseClasses = ['rounded-lg', 'overflow-hidden'];\n\n // Variant classes\n const variantClasses: Record<NonNullable<CardProps['variant']>, string> = {\n default: 'bg-white shadow',\n elevated: 'bg-white shadow-lg',\n outlined: 'bg-white border border-gray-200',\n filled: 'bg-gray-50',\n };\n\n // Padding classes\n const paddingClasses: Record<NonNullable<CardProps['padding']>, string> = {\n none: '',\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-8',\n };\n\n // Hover effect\n const hoverClasses = hover\n ? 'transition-all duration-200 hover:shadow-lg hover:-translate-y-1'\n : '';\n\n return [\n ...baseClasses,\n variantClasses[variant],\n paddingClasses[padding],\n hoverClasses,\n ]\n .filter(Boolean)\n .join(' ');\n}\n\n/**\n * Card component for containing content.\n */\nexport function Card({\n variant = 'default',\n padding = 'md',\n hover = false,\n children,\n className = '',\n ...props\n}: CardProps) {\n const classes = getCardClasses({ variant, padding, hover });\n\n return (\n <div className={`${classes} ${className}`} {...props}>\n {children}\n </div>\n );\n}\n\n/**\n * Card header section.\n */\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n subtitle?: string;\n action?: React.ReactNode;\n}\n\nexport function CardHeader({\n title,\n subtitle,\n action,\n children,\n className = '',\n ...props\n}: CardHeaderProps) {\n return (\n <div className={`flex items-start justify-between ${className}`} {...props}>\n <div>\n {title && <h3 className=\"text-lg font-semibold text-gray-900\">{title}</h3>}\n {subtitle && <p className=\"mt-1 text-sm text-gray-500\">{subtitle}</p>}\n {children}\n </div>\n {action && <div className=\"flex-shrink-0 ml-4\">{action}</div>}\n </div>\n );\n}\n\n/**\n * Card body section.\n */\nexport function CardBody({\n children,\n className = '',\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={`mt-4 ${className}`} {...props}>\n {children}\n </div>\n );\n}\n\n/**\n * Card footer section.\n */\nexport function CardFooter({\n children,\n className = '',\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={`mt-4 pt-4 border-t border-gray-100 ${className}`} {...props}>\n {children}\n </div>\n );\n}\n\n/**\n * Card image section.\n */\nexport interface CardImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n aspectRatio?: 'square' | 'video' | 'wide' | 'auto';\n}\n\nexport function CardImage({\n aspectRatio = 'video',\n className = '',\n alt = '',\n ...props\n}: CardImageProps) {\n const aspectClasses: Record<NonNullable<CardImageProps['aspectRatio']>, string> = {\n square: 'aspect-square',\n video: 'aspect-video',\n wide: 'aspect-[2/1]',\n auto: '',\n };\n\n return (\n <div className={`-m-5 mb-4 ${aspectClasses[aspectRatio]} overflow-hidden`}>\n <img\n className={`w-full h-full object-cover ${className}`}\n alt={alt}\n {...props}\n />\n </div>\n );\n}\n","/**\n * Animated Section Component\n *\n * A wrapper component that adds scroll-triggered animations to its children.\n */\n\n'use client';\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nexport interface AnimatedSectionProps {\n children: React.ReactNode;\n animation?: 'fade-up' | 'fade-down' | 'fade-left' | 'fade-right' | 'zoom' | 'none';\n delay?: number;\n duration?: number;\n threshold?: number;\n once?: boolean;\n className?: string;\n as?: React.ElementType;\n}\n\n/**\n * Animated section wrapper with scroll-triggered animations.\n */\nexport function AnimatedSection({\n children,\n animation = 'fade-up',\n delay = 0,\n duration = 600,\n threshold = 0.1,\n once = true,\n className = '',\n as: Component = 'div',\n}: AnimatedSectionProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [isVisible, setIsVisible] = useState(false);\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setIsVisible(true);\n if (once && ref.current) {\n observer.unobserve(ref.current);\n }\n } else if (!once) {\n setIsVisible(false);\n }\n },\n { threshold }\n );\n\n if (ref.current) {\n observer.observe(ref.current);\n }\n\n return () => {\n if (ref.current) {\n observer.unobserve(ref.current);\n }\n };\n }, [threshold, once]);\n\n const getAnimationStyles = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n transition: `opacity ${duration}ms ease-out, transform ${duration}ms ease-out`,\n transitionDelay: `${delay}ms`,\n };\n\n if (!isVisible) {\n switch (animation) {\n case 'fade-up':\n return { ...baseStyles, opacity: 0, transform: 'translateY(30px)' };\n case 'fade-down':\n return { ...baseStyles, opacity: 0, transform: 'translateY(-30px)' };\n case 'fade-left':\n return { ...baseStyles, opacity: 0, transform: 'translateX(30px)' };\n case 'fade-right':\n return { ...baseStyles, opacity: 0, transform: 'translateX(-30px)' };\n case 'zoom':\n return { ...baseStyles, opacity: 0, transform: 'scale(0.95)' };\n case 'none':\n return {};\n default:\n return { ...baseStyles, opacity: 0, transform: 'translateY(30px)' };\n }\n }\n\n return { ...baseStyles, opacity: 1, transform: 'translateY(0) translateX(0) scale(1)' };\n };\n\n if (animation === 'none') {\n return <Component className={className}>{children}</Component>;\n }\n\n return (\n <Component ref={ref} style={getAnimationStyles()} className={className}>\n {children}\n </Component>\n );\n}\n\n/**\n * Stagger animation container - animates children with increasing delays.\n */\nexport interface StaggerContainerProps {\n children: React.ReactNode;\n staggerDelay?: number;\n animation?: AnimatedSectionProps['animation'];\n duration?: number;\n className?: string;\n}\n\nexport function StaggerContainer({\n children,\n staggerDelay = 100,\n animation = 'fade-up',\n duration = 600,\n className = '',\n}: StaggerContainerProps) {\n return (\n <div className={className}>\n {React.Children.map(children, (child, index) => (\n <AnimatedSection\n animation={animation}\n delay={index * staggerDelay}\n duration={duration}\n >\n {child}\n </AnimatedSection>\n ))}\n </div>\n );\n}\n\nexport default AnimatedSection;\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","SectionHeader","import_jsx_runtime","dayNames","import_react","import_jsx_runtime","id","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","React"]}
|