diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx index a7a54dd..4f08b47 100644 --- a/src/pages/HomePage.tsx +++ b/src/pages/HomePage.tsx @@ -1,202 +1,33 @@ -import AboutText from '@/components/sections/about/AboutText'; -import ContactCta from '@/components/sections/contact/ContactCta'; -import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento'; -import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel'; -import HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid'; -import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards'; -import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard'; -import { Clock, MapPin, Star } from "lucide-react"; -import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; +// AUTO-GENERATED shell by per-section-migrate. +// Section bodies live in .//sections/.tsx. Edit the section +// files directly. Non-block content (wrappers, non-inlinable sections) is +// preserved inline; extracted section blocks become refs. -export default function HomePage() { +import React from 'react'; +import HeroSection from './HomePage/sections/Hero'; +import AboutSection from './HomePage/sections/About'; +import ExperienceSection from './HomePage/sections/Experience'; +import TestimonialsSection from './HomePage/sections/Testimonials'; +import MenuSection from './HomePage/sections/Menu'; +import AtmosphereSection from './HomePage/sections/Atmosphere'; +import ContactSection from './HomePage/sections/Contact'; + +export default function HomePage(): React.JSX.Element { return ( - <> -
- - - -
+<> + -
- - - -
+ -
- - - -
+ -
- - - -
+ - + -
- - - -
+ -
- - - -
+ ); } diff --git a/src/pages/HomePage/sections/About.tsx b/src/pages/HomePage/sections/About.tsx new file mode 100644 index 0000000..2ded712 --- /dev/null +++ b/src/pages/HomePage/sections/About.tsx @@ -0,0 +1,18 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "about" section. + +import React from 'react'; +import AboutText from '@/components/sections/about/AboutText'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function AboutSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Atmosphere.tsx b/src/pages/HomePage/sections/Atmosphere.tsx new file mode 100644 index 0000000..835773e --- /dev/null +++ b/src/pages/HomePage/sections/Atmosphere.tsx @@ -0,0 +1,95 @@ +/* eslint-disable */ +// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body +import { MapPin, Clock, Star } from 'lucide-react'; +import type { LucideIcon } from "lucide-react"; +import Button from "@/components/ui/Button"; +import TextAnimation from "@/components/ui/TextAnimation"; +import GridOrCarousel from "@/components/ui/GridOrCarousel"; +import ScrollReveal from "@/components/ui/ScrollReveal"; +import { resolveIcon } from "@/utils/resolve-icon"; + +const metrics = [ + { + icon: MapPin, + title: "Lokasyon", + value: "Bakırköy" + }, + { + icon: Clock, + title: "Hizmet", + value: "12:15 - 23:00" + }, + { + icon: Star, + title: "Puan", + value: "4.3 / 5" + } +]; + +type Metric = { + icon: string | LucideIcon; + title: string; + value: string; +}; + +const AtmosphereInline = () => ( +
+
+
+
+

{"Atmosfer"}

+
+ + + + + + {(undefined || undefined) && ( +
+ {undefined &&
+ )} +
+ + + + {metrics.map((metric) => { + const IconComponent = resolveIcon(metric.icon); + return ( +
+
+
+ +
+ {metric.title} +
+ {metric.value} +
+ ); + })} +
+
+
+
+); + +export default function AtmosphereSection() { + return ( +
+ +
+ ); +} diff --git a/src/pages/HomePage/sections/Contact.tsx b/src/pages/HomePage/sections/Contact.tsx new file mode 100644 index 0000000..d94db70 --- /dev/null +++ b/src/pages/HomePage/sections/Contact.tsx @@ -0,0 +1,27 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "contact" section. + +import React from 'react'; +import ContactCta from '@/components/sections/contact/ContactCta'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function ContactSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Experience.tsx b/src/pages/HomePage/sections/Experience.tsx new file mode 100644 index 0000000..be7dacb --- /dev/null +++ b/src/pages/HomePage/sections/Experience.tsx @@ -0,0 +1,57 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "experience" section. + +import React from 'react'; +import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function ExperienceSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Hero.tsx b/src/pages/HomePage/sections/Hero.tsx new file mode 100644 index 0000000..b5f21ba --- /dev/null +++ b/src/pages/HomePage/sections/Hero.tsx @@ -0,0 +1,90 @@ +/* eslint-disable */ +// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body +import Button from "@/components/ui/Button"; +import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot"; +import TextAnimation from "@/components/ui/TextAnimation"; +import ImageOrVideo from "@/components/ui/ImageOrVideo"; +import ScrollReveal from "@/components/ui/ScrollReveal"; + +const primaryButton = { + text: "Menüyü Keşfet", + href: "#menu" +}; +const secondaryButton = { + text: "Rezervasyon", + href: "#contact" +}; +const items = [ + { + imageSrc: "https://storage.googleapis.com/webild/users/user_3DzLJM9oAKQRjgJNceDCWiKwcdg/uploaded-1781476789123-z3qgihsa.png" + }, + { + imageSrc: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?auto=format&fit=crop&w=800&q=80" + } +]; + +type HeroSplitMediaGridProps = { + tag: string; + title: string; + description: string; + primaryButton: { text: string; href: string }; + secondaryButton: { text: string; href: string }; + items: [ + { imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never }, + { imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never } + ]; +}; + +const HeroInline = () => { + return ( +
+ +
+
+
+
+

{"Ödüllü Kremalı Pizza"}

+
+ + + + + +
+
+
+
+ + + {items.map((item, index) => ( +
+ +
+ ))} +
+
+
+ ); +}; + +export default function HeroSection() { + return ( +
+ +
+ ); +} diff --git a/src/pages/HomePage/sections/Menu.tsx b/src/pages/HomePage/sections/Menu.tsx new file mode 100644 index 0000000..491b8a1 --- /dev/null +++ b/src/pages/HomePage/sections/Menu.tsx @@ -0,0 +1,123 @@ +/* eslint-disable */ +// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body +import type { LucideIcon } from "lucide-react"; +import TextAnimation from "@/components/ui/TextAnimation"; +import ImageOrVideo from "@/components/ui/ImageOrVideo"; +import LoopCarousel from "@/components/ui/LoopCarousel"; +import Button from "@/components/ui/Button"; +import { useButtonClick } from "@/hooks/useButtonClick"; +import { resolveIcon } from "@/utils/resolve-icon"; + +const items = [ + { + title: "Pizza Krema Etli", + description: "Özel krema sos, dana eti, mozzarella", + buttonIcon: "ArrowRight", + imageSrc: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?auto=format&fit=crop&w=800&q=80" + }, + { + title: "Kremalı Pizza", + description: "İmza krema sos, taze fesleğen, parmesan", + buttonIcon: "ArrowRight", + imageSrc: "https://images.unsplash.com/photo-1574071318508-1cdbab80d002?auto=format&fit=crop&w=800&q=80" + }, + { + title: "Truffle Krema", + description: "Trüf mantarı, krema, mozzarella", + buttonIcon: "ArrowRight", + imageSrc: "https://images.unsplash.com/photo-1513104890138-7c749659a591?auto=format&fit=crop&w=800&q=80" + } +]; + +type FeatureItem = { + title: string; + description: string; + buttonIcon: string | LucideIcon; + buttonHref?: string; + buttonOnClick?: () => void; +} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never }); + +interface FeaturesMediaCarouselProps { + tag: string; + title: string; + description: string; + primaryButton?: { text: string; href: string }; + secondaryButton?: { text: string; href: string }; + items: FeatureItem[]; +} + +const FeatureMediaCarouselCard = ({ item }: { item: FeatureItem }) => { + const handleClick = useButtonClick(item.buttonHref, item.buttonOnClick); + const Icon = resolveIcon(item.buttonIcon); + + return ( +
+ +
+
+

{item.title}

+

{item.description}

+
+ + + +
+
+ ); +}; + +const MenuInline = () => { + return ( +
+
+
+
+

{"Menü"}

+
+ + + + + + {(undefined || undefined) && ( +
+ {undefined &&
+ )} +
+ + + {items.map((item) => ( + + ))} + +
+
+ ); +}; + +export default function MenuSection() { + return ( + + ); +} diff --git a/src/pages/HomePage/sections/Testimonials.tsx b/src/pages/HomePage/sections/Testimonials.tsx new file mode 100644 index 0000000..f497e8f --- /dev/null +++ b/src/pages/HomePage/sections/Testimonials.tsx @@ -0,0 +1,87 @@ +/* eslint-disable */ +// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body +import { Star } from "lucide-react"; +import TextAnimation from "@/components/ui/TextAnimation"; +import ImageOrVideo from "@/components/ui/ImageOrVideo"; +import ScrollReveal from "@/components/ui/ScrollReveal"; +import { cls } from "@/lib/utils"; + +const avatars = [ + { + name: "Yağmur Alara Aydın", + imageSrc: "https://images.unsplash.com/photo-1534528741775-53994a69daeb?auto=format&fit=crop&w=800&q=80" + }, + { + name: "Gülsüm Yurtsever", + imageSrc: "https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?auto=format&fit=crop&w=800&q=80" + }, + { + name: "Barış Ünal", + imageSrc: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=800&q=80" + } +]; + +type Avatar = { + name: string; +} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never }); + +const TestimonialsInline = () => { + const visibleAvatars = avatars.slice(0, 6); + const remainingCount = avatars.length - visibleAvatars.length; + + return ( +
+
+ + {Array.from({ length: 5 }).map((_, index) => ( + + ))} + + + + + +

{"Yağmur Alara Aydın"}

+
+ + + {visibleAvatars.map((avatar, index) => ( +
0 && "-ml-5")} + style={{ zIndex: visibleAvatars.length - index }} + > + +
+ ))} + {remainingCount > 0 && ( +
+ +{remainingCount} +
+ )} +
+
+
+ ); +}; + +export default function TestimonialsSection() { + return ( +
+ +
+ ); +}