diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx index 0c16faf..2852092 100644 --- a/src/pages/HomePage.tsx +++ b/src/pages/HomePage.tsx @@ -1,176 +1,30 @@ -import AboutTextSplit from '@/components/sections/about/AboutTextSplit'; -import ContactCta from '@/components/sections/contact/ContactCta'; -import FeaturesArrowCards from '@/components/sections/features/FeaturesArrowCards'; -import HeroBillboard from '@/components/sections/hero/HeroBillboard'; -import PricingCenteredCards from '@/components/sections/pricing/PricingCenteredCards'; -import TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards'; -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 FeaturesSection from './HomePage/sections/Features'; +import PricingSection from './HomePage/sections/Pricing'; +import TestimonialsSection from './HomePage/sections/Testimonials'; +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..6b0cbfa --- /dev/null +++ b/src/pages/HomePage/sections/About.tsx @@ -0,0 +1,23 @@ +// 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 AboutTextSplit from '@/components/sections/about/AboutTextSplit'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function AboutSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Contact.tsx b/src/pages/HomePage/sections/Contact.tsx new file mode 100644 index 0000000..c713dc6 --- /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/Features.tsx b/src/pages/HomePage/sections/Features.tsx new file mode 100644 index 0000000..1ba1583 --- /dev/null +++ b/src/pages/HomePage/sections/Features.tsx @@ -0,0 +1,43 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "features" section. + +import React from 'react'; +import FeaturesArrowCards from '@/components/sections/features/FeaturesArrowCards'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function FeaturesSection(): 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..566b96d --- /dev/null +++ b/src/pages/HomePage/sections/Hero.tsx @@ -0,0 +1,28 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "hero" section. + +import React from 'react'; +import HeroBillboard from '@/components/sections/hero/HeroBillboard'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function HeroSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Pricing.tsx b/src/pages/HomePage/sections/Pricing.tsx new file mode 100644 index 0000000..7d0884b --- /dev/null +++ b/src/pages/HomePage/sections/Pricing.tsx @@ -0,0 +1,50 @@ +// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this +// file as the canonical source for the "pricing" section. + +import React from 'react'; +import PricingCenteredCards from '@/components/sections/pricing/PricingCenteredCards'; +import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary"; + +export default function PricingSection(): React.JSX.Element { + return ( +
+ + + +
+ ); +} diff --git a/src/pages/HomePage/sections/Testimonials.tsx b/src/pages/HomePage/sections/Testimonials.tsx new file mode 100644 index 0000000..6d48467 --- /dev/null +++ b/src/pages/HomePage/sections/Testimonials.tsx @@ -0,0 +1,199 @@ +/* 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 TextAnimation from "@/components/ui/TextAnimation"; +import ImageOrVideo from "@/components/ui/ImageOrVideo"; +import GridOrCarousel from "@/components/ui/GridOrCarousel"; +import ScrollReveal from "@/components/ui/ScrollReveal"; +import Input from "@/components/ui/Input"; +import Textarea from "@/components/ui/Textarea"; +import Label from "@/components/ui/Label"; +import { useState } from "react"; + +const testimonials = [ + { + name: "Marie D.", + role: "Habituée", + quote: "Plats généreux et accueil très souriant. Un vrai plaisir.", + rating: 5 + }, + { + name: "Thomas P.", + role: "Fin Gourmet", + quote: "Cuisine maison délicieuse dans une ambiance chaleureuse.", + rating: 5 + }, + { + name: "Sophie R.", + role: "Touriste", + quote: "Un super rapport qualité-prix à Metz, je recommande.", + rating: 4 + }, + { + name: "Julien M.", + role: "Local", + quote: "L'ambiance brasserie est top, très bonne équipe.", + rating: 5 + }, + { + name: "Claire L.", + role: "Cliente", + quote: "Le parmentier de canard est une merveille, bravo.", + rating: 5 + } +]; + +type Testimonial = { + name: string; + role: string; + quote: string; + rating: number; +}; + +const TestimonialsInline = () => { + const [reviews, setReviews] = useState(testimonials); + const [name, setName] = useState(""); + const [quote, setQuote] = useState(""); + const [rating, setRating] = useState(5); + const [submitted, setSubmitted] = useState(false); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (name && quote) { + setReviews([{ name, role: "Nouveau client", quote, rating }, ...reviews]); + setSubmitted(true); + setName(""); + setQuote(""); + setRating(5); + setTimeout(() => setSubmitted(false), 4000); + } + }; + + return ( +
+
+
+
+
+ +
+
+ +
+
+
+ Votre avis compte +
+ +

+ Nous adorons avoir de vos nouvelles. Laissez-nous un petit mot sur votre repas à La Basse Cour ! +

+
+ +
+ {submitted ? ( +
+
+ ✓ +
+

Merci !

+

Votre avis a bien été publié et ajouté à la liste.

+
+ ) : ( + <> +
+ + setName(e.target.value)} + placeholder="Ex: Jean Dupont" + required={true} + className="bg-card border-none focus:ring-2 focus:ring-primary-cta rounded-xl py-3 px-4" + > +
+ +
+ +
+ {[1, 2, 3, 4, 5].map((star) => ( + + ))} +
+
+ +
+ + +
+ +
+ +
+
+

Derniers avis

+
+ 4.5 + ★★★★½ + ({reviews.length} avis) +
+
+ +
+ {reviews.slice(0, 4).map((testimonial, idx) => ( + +
+
+
+ {Array.from({ length: 5 }).map((_, i) => ( + {i < testimonial.rating ? '★' : '☆'} + ))} +
+

"{testimonial.quote}"

+
+ {testimonial.name} + {testimonial.role} +
+
+
+ ))} +
+
+ +
+
+
+)}; + +export default function TestimonialsSection() { + return ( +
+ +
+ ); +}