Merge version_2_1780917537212 into main #2
@@ -1,259 +1,30 @@
|
||||
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import FeaturesAttributeCards from '@/components/sections/features/FeaturesAttributeCards';
|
||||
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
|
||||
import HeroBrand from '@/components/sections/hero/HeroBrand';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import TestimonialAvatarCard from '@/components/sections/testimonial/TestimonialAvatarCard';
|
||||
import { Accessibility, Bed, Bell, Castle, Coffee, DoorOpen, Heart, ShowerHead, Sofa, SquareStack, Star, Tv, Users, Waves, Wifi, Wind, Wine } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
// AUTO-GENERATED shell by per-section-migrate.
|
||||
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
|
||||
// files directly; this shell only fixes render order.
|
||||
|
||||
export default function HomePage() {
|
||||
import React from 'react';
|
||||
import HomeSection from './HomePage/sections/Home';
|
||||
import AboutSection from './HomePage/sections/About';
|
||||
import RoomsSection from './HomePage/sections/Rooms';
|
||||
import AmenitiesSection from './HomePage/sections/Amenities';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import SocialProofSection from './HomePage/sections/SocialProof';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="home" data-section="home">
|
||||
<SectionErrorBoundary name="home">
|
||||
<HeroBrand
|
||||
brand="The Grand Oasis Hotel"
|
||||
description="Experience unparalleled luxury and serenity in the heart of the city. Your ultimate escape awaits."
|
||||
primaryButton={{
|
||||
text: "Book Your Stay", href: "#contact"}}
|
||||
secondaryButton={{
|
||||
text: "Explore Rooms", href: "#rooms"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/abstract-science-fiction-futuristic-background-with-golden-neon-lights_181624-15608.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutMediaOverlay
|
||||
tag="About Us"
|
||||
title="A Legacy of Hospitality and Elegance"
|
||||
description="Nestled in a vibrant locale, The Grand Oasis Hotel has been a beacon of luxury and comfort for decades. Our commitment to impeccable service, exquisite design, and personalized experiences ensures every guest's stay is memorable and enchanting. Discover a haven where every detail is crafted for your utmost pleasure."
|
||||
primaryButton={{
|
||||
text: "Our Story", href: "#"}}
|
||||
secondaryButton={{
|
||||
text: "Virtual Tour", href: "#"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/couple-passing-time-lounge-area_482257-81665.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="rooms" data-section="rooms">
|
||||
<SectionErrorBoundary name="rooms">
|
||||
<FeaturesAttributeCards
|
||||
tag="Our Accommodations"
|
||||
title="Luxurious Rooms & Suites"
|
||||
description="Indulge in our exquisitely designed rooms and suites, offering a perfect blend of comfort and sophistication. Each space is meticulously crafted to provide a tranquil retreat."
|
||||
items={[
|
||||
{
|
||||
title: "Deluxe King Room", tags: "City View, King Bed", badge: "Popular", details: [
|
||||
{
|
||||
icon: Bed,
|
||||
label: "Bed", value: "King"},
|
||||
{
|
||||
icon: Wifi,
|
||||
label: "Connectivity", value: "Free Wi-Fi"},
|
||||
{
|
||||
icon: Users,
|
||||
label: "Capacity", value: "2 Adults"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-romantic-breakfast-bed-arrangement_23-2150956527.jpg"},
|
||||
{
|
||||
title: "Executive Suite", tags: "Spacious, Lounge Access", badge: "Premium", details: [
|
||||
{
|
||||
icon: Sofa,
|
||||
label: "Living", value: "Separate Lounge"},
|
||||
{
|
||||
icon: Coffee,
|
||||
label: "Coffee", value: "Espresso Machine"},
|
||||
{
|
||||
icon: Users,
|
||||
label: "Capacity", value: "3 Adults"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/pillow-bed_1203-9643.jpg"},
|
||||
{
|
||||
title: "Family Connecting Room", tags: "Connecting, Two Queens", details: [
|
||||
{
|
||||
icon: Bed,
|
||||
label: "Beds", value: "2 Queen"},
|
||||
{
|
||||
icon: Users,
|
||||
label: "Capacity", value: "4 Adults, 2 Kids"},
|
||||
{
|
||||
icon: SquareStack,
|
||||
label: "Space", value: "75 sqm"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cheerful-women-jumping-bed-before-wedding_1153-2805.jpg"},
|
||||
{
|
||||
title: "Ocean View Balcony", tags: "Sea Breeze, Private Balcony", badge: "Featured", details: [
|
||||
{
|
||||
icon: Waves,
|
||||
label: "View", value: "Oceanfront"},
|
||||
{
|
||||
icon: Wind,
|
||||
label: "Feature", value: "Private Balcony"},
|
||||
{
|
||||
icon: ShowerHead,
|
||||
label: "Bathroom", value: "Rain Shower"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/indoor-design-luxury-resort_23-2150497255.jpg"},
|
||||
{
|
||||
title: "Penthouse Suite", tags: "Panoramic Views, Luxury Amenities", badge: "Exclusive", details: [
|
||||
{
|
||||
icon: Castle,
|
||||
label: "Level", value: "Top Floor"},
|
||||
{
|
||||
icon: Tv,
|
||||
label: "Entertainment", value: "Home Cinema"},
|
||||
{
|
||||
icon: Wine,
|
||||
label: "Perks", value: "Private Bar"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cozy-lively-home-interior-design_23-2151119019.jpg"},
|
||||
{
|
||||
title: "Accessible Guest Room", tags: "Spacious, Wheelchair Friendly", details: [
|
||||
{
|
||||
icon: Accessibility,
|
||||
label: "Access", value: "ADA Compliant"},
|
||||
{
|
||||
icon: ShowerHead,
|
||||
label: "Bathroom", value: "Roll-in Shower"},
|
||||
{
|
||||
icon: DoorOpen,
|
||||
label: "Space", value: "Wide Doors"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/bangkok-thailand-august-12-2016-beautiful-luxury-bathroom_1203-2725.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="amenities" data-section="amenities">
|
||||
<SectionErrorBoundary name="amenities">
|
||||
<FeaturesDetailedSteps
|
||||
tag="Hotel Facilities"
|
||||
title="World-Class Amenities"
|
||||
description="Enhance your stay with our diverse range of amenities, designed for relaxation, rejuvenation, and exquisite dining experiences."
|
||||
steps={[
|
||||
{
|
||||
tag: "Rejuvenate", title: "Serene Spa & Wellness", subtitle: "Indulge in ultimate relaxation", description: "Our luxurious spa offers a sanctuary of calm, with a range of treatments from therapeutic massages to invigorating facials, designed to restore your balance and well-being.时不我待.", imageSrc: "http://img.b2bpic.net/free-photo/girl-white-robe-spa-stairs-cozy-light-calm-mood-kid-wellness_169016-69180.jpg"},
|
||||
{
|
||||
tag: "Dine", title: "Gourmet Dining Experiences", subtitle: "Savor exquisite culinary delights", description: "Embark on a culinary journey at our award-winning restaurants. From sophisticated fine dining to casual al fresco options, our chefs craft unforgettable meals using the freshest local ingredients.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-friends-having-lunch-luxury-restaurant_23-2151081450.jpg"},
|
||||
{
|
||||
tag: "Unwind", title: "Infinity Pool with City Views", subtitle: "Relax above the city skyline", description: "Take a refreshing dip in our breathtaking infinity pool, offering panoramic city views. The perfect spot to unwind, soak up the sun, or enjoy a sunset cocktail.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-asian-woman-relax-happy-smile-leisure-around-outdoor-swimming-pool_74190-11170.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="Our Impact"
|
||||
title="Trusted by Travelers Worldwide"
|
||||
description="Our commitment to excellence shines through in every guest experience. We're proud of the moments we create."
|
||||
metrics={[
|
||||
{
|
||||
icon: Star,
|
||||
title: "Guest Rating", value: "4.9/5"},
|
||||
{
|
||||
icon: Heart,
|
||||
title: "Repeat Guests", value: "85%"},
|
||||
{
|
||||
icon: Bell,
|
||||
title: "Years of Service", value: "30+"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="social-proof" data-section="social-proof">
|
||||
<SectionErrorBoundary name="social-proof">
|
||||
<SocialProofMarquee
|
||||
tag="Our Partners"
|
||||
title="Proudly Affiliated & Recommended"
|
||||
description="We collaborate with leading travel and hospitality brands to bring you an unparalleled experience."
|
||||
names={[
|
||||
"Luxury Travel Magazine", "Global Hotel Awards", "Elite Destinations", "Voyage & Leisure", "Gourmet Escapes", "Wellness Retreats", "City Explorer Guide"]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialAvatarCard
|
||||
tag="Guest Experiences"
|
||||
title="What Our Guests Say"
|
||||
primaryButton={{
|
||||
text: "Read All Reviews", href: "#"}}
|
||||
avatars={[
|
||||
{
|
||||
name: "John Doe", imageSrc: "http://img.b2bpic.net/free-photo/blond-businessman-surprised-expression_1194-3809.jpg"},
|
||||
{
|
||||
name: "Jane Smith", imageSrc: "http://img.b2bpic.net/free-photo/smiley-woman-with-hat-traveling_23-2148518196.jpg"},
|
||||
{
|
||||
name: "Robert Johnson", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-family-celebrating-birthday-together_23-2150572127.jpg"},
|
||||
{
|
||||
name: "Emily Chen", imageSrc: "http://img.b2bpic.net/free-photo/young-caucasian-man-smiling-happy-standing-city_839833-10609.jpg"},
|
||||
{
|
||||
name: "Michael Chang", imageSrc: "http://img.b2bpic.net/free-photo/smiling-senior-businessman-pointing-with-finger_1262-3108.jpg"},
|
||||
{
|
||||
name: "Sarah Jenkins", imageSrc: "http://img.b2bpic.net/free-photo/woman-with-hat-traveling_23-2148518197.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Need Assistance?"
|
||||
title="Frequently Asked Questions"
|
||||
description="Find quick answers to common questions about your stay, bookings, and hotel services."
|
||||
categories={[
|
||||
{
|
||||
name: "Bookings & Check-in", items: [
|
||||
{
|
||||
question: "What are your check-in and check-out times?", answer: "Check-in is at 3:00 PM and check-out is at 11:00 AM. Early check-in and late check-out may be available upon request and subject to availability."},
|
||||
{
|
||||
question: "Do you offer airport transportation?", answer: "Yes, we offer airport shuttle services. Please contact our concierge desk at least 24 hours in advance to arrange your pick-up or drop-off."},
|
||||
{
|
||||
question: "What is your cancellation policy?", answer: "Our standard cancellation policy allows free cancellation up to 48 hours prior to your arrival date. Policies may vary for special packages or promotions."},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Hotel Services", items: [
|
||||
{
|
||||
question: "Is breakfast included in the room rate?", answer: "Breakfast inclusion depends on your room package. Please refer to your booking confirmation or inquire at the front desk for details."},
|
||||
{
|
||||
question: "Do you have a fitness center or spa?", answer: "Yes, we have a fully equipped fitness center and a luxurious spa offering a variety of treatments. Both are accessible to guests during operational hours."},
|
||||
{
|
||||
question: "Is Wi-Fi available throughout the hotel?", answer: "Complimentary high-speed Wi-Fi is available in all guest rooms and public areas of the hotel for your convenience."},
|
||||
],
|
||||
},
|
||||
]}
|
||||
cta={{
|
||||
name: "Alice Wonderland", role: "Concierge Manager", buttonText: "Chat with Support", buttonHref: "#contact", imageSrc: "http://img.b2bpic.net/free-photo/receptionists-elegant-suits-work-hours_23-2149714404.jpg"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Your Perfect Stay Awaits"
|
||||
text="Ready to experience unparalleled luxury and hospitality? Book your dream getaway today."
|
||||
primaryButton={{
|
||||
text: "Make a Reservation", href: "#"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Our Team", href: "#"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<HomeSection />
|
||||
<AboutSection />
|
||||
<RoomsSection />
|
||||
<AmenitiesSection />
|
||||
<MetricsSection />
|
||||
<SocialProofSection />
|
||||
<TestimonialsSection />
|
||||
<FaqSection />
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
25
src/pages/HomePage/sections/About.tsx
Normal file
25
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,25 @@
|
||||
// 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 AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutMediaOverlay
|
||||
tag="About Us"
|
||||
title="A Legacy of Hospitality and Elegance"
|
||||
description="Nestled in a vibrant locale, The Grand Oasis Hotel has been a beacon of luxury and comfort for decades. Our commitment to impeccable service, exquisite design, and personalized experiences ensures every guest's stay is memorable and enchanting. Discover a haven where every detail is crafted for your utmost pleasure."
|
||||
primaryButton={{
|
||||
text: "Our Story", href: "#"}}
|
||||
secondaryButton={{
|
||||
text: "Virtual Tour", href: "#"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/couple-passing-time-lounge-area_482257-81665.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
src/pages/HomePage/sections/Amenities.tsx
Normal file
28
src/pages/HomePage/sections/Amenities.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "amenities" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AmenitiesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="amenities" data-section="amenities">
|
||||
<SectionErrorBoundary name="amenities">
|
||||
<FeaturesDetailedSteps
|
||||
tag="Hotel Facilities"
|
||||
title="World-Class Amenities"
|
||||
description="Enhance your stay with our diverse range of amenities, designed for relaxation, rejuvenation, and exquisite dining experiences."
|
||||
steps={[
|
||||
{
|
||||
tag: "Rejuvenate", title: "Serene Spa & Wellness", subtitle: "Indulge in ultimate relaxation", description: "Our luxurious spa offers a sanctuary of calm, with a range of treatments from therapeutic massages to invigorating facials, designed to restore your balance and well-being.时不我待.", imageSrc: "http://img.b2bpic.net/free-photo/girl-white-robe-spa-stairs-cozy-light-calm-mood-kid-wellness_169016-69180.jpg"},
|
||||
{
|
||||
tag: "Dine", title: "Gourmet Dining Experiences", subtitle: "Savor exquisite culinary delights", description: "Embark on a culinary journey at our award-winning restaurants. From sophisticated fine dining to casual al fresco options, our chefs craft unforgettable meals using the freshest local ingredients.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-friends-having-lunch-luxury-restaurant_23-2151081450.jpg"},
|
||||
{
|
||||
tag: "Unwind", title: "Infinity Pool with City Views", subtitle: "Relax above the city skyline", description: "Take a refreshing dip in our breathtaking infinity pool, offering panoramic city views. The perfect spot to unwind, soak up the sun, or enjoy a sunset cocktail.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-asian-woman-relax-happy-smile-leisure-around-outdoor-swimming-pool_74190-11170.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
23
src/pages/HomePage/sections/Contact.tsx
Normal file
23
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,23 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Your Perfect Stay Awaits"
|
||||
text="Ready to experience unparalleled luxury and hospitality? Book your dream getaway today."
|
||||
primaryButton={{
|
||||
text: "Make a Reservation", href: "#"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Our Team", href: "#"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
44
src/pages/HomePage/sections/Faq.tsx
Normal file
44
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,44 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "faq" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Need Assistance?"
|
||||
title="Frequently Asked Questions"
|
||||
description="Find quick answers to common questions about your stay, bookings, and hotel services."
|
||||
categories={[
|
||||
{
|
||||
name: "Bookings & Check-in", items: [
|
||||
{
|
||||
question: "What are your check-in and check-out times?", answer: "Check-in is at 3:00 PM and check-out is at 11:00 AM. Early check-in and late check-out may be available upon request and subject to availability."},
|
||||
{
|
||||
question: "Do you offer airport transportation?", answer: "Yes, we offer airport shuttle services. Please contact our concierge desk at least 24 hours in advance to arrange your pick-up or drop-off."},
|
||||
{
|
||||
question: "What is your cancellation policy?", answer: "Our standard cancellation policy allows free cancellation up to 48 hours prior to your arrival date. Policies may vary for special packages or promotions."},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Hotel Services", items: [
|
||||
{
|
||||
question: "Is breakfast included in the room rate?", answer: "Breakfast inclusion depends on your room package. Please refer to your booking confirmation or inquire at the front desk for details."},
|
||||
{
|
||||
question: "Do you have a fitness center or spa?", answer: "Yes, we have a fully equipped fitness center and a luxurious spa offering a variety of treatments. Both are accessible to guests during operational hours."},
|
||||
{
|
||||
question: "Is Wi-Fi available throughout the hotel?", answer: "Complimentary high-speed Wi-Fi is available in all guest rooms and public areas of the hotel for your convenience."},
|
||||
],
|
||||
},
|
||||
]}
|
||||
cta={{
|
||||
name: "Alice Wonderland", role: "Concierge Manager", buttonText: "Chat with Support", buttonHref: "#contact", imageSrc: "http://img.b2bpic.net/free-photo/receptionists-elegant-suits-work-hours_23-2149714404.jpg"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
85
src/pages/HomePage/sections/Home.tsx
Normal file
85
src/pages/HomePage/sections/Home.tsx
Normal file
@@ -0,0 +1,85 @@
|
||||
/* 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 AutoFillText from "@/components/ui/AutoFillText";
|
||||
import Input from "@/components/ui/Input";
|
||||
|
||||
const primaryButton = {
|
||||
text: "Book Your Stay",
|
||||
href: "#contact"
|
||||
};
|
||||
const secondaryButton = {
|
||||
text: "Explore Rooms",
|
||||
href: "#rooms"
|
||||
};
|
||||
|
||||
type HeroBrandProps = {
|
||||
brand: string;
|
||||
description: string;
|
||||
primaryButton: { text: string; href: string };
|
||||
secondaryButton: { text: string; href: string };
|
||||
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
|
||||
|
||||
const HomeInline = () => {
|
||||
return (
|
||||
<section
|
||||
aria-label="Hero section"
|
||||
className="relative w-full h-svh overflow-hidden flex flex-col justify-end mb-20"
|
||||
>
|
||||
<HeroBackgroundSlot />
|
||||
<ImageOrVideo
|
||||
imageSrc={"http://img.b2bpic.net/free-photo/abstract-science-fiction-futuristic-background-with-golden-neon-lights_181624-15608.jpg"}
|
||||
className="absolute inset-0 w-full h-full object-cover rounded-none"
|
||||
/>
|
||||
|
||||
<div
|
||||
className="absolute z-10 w-full h-[50svh] md:h-[75svh] left-0 bottom-0 backdrop-blur-xl mask-[linear-gradient(to_bottom,transparent,black_60%)]"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
|
||||
<div className="relative z-10 w-content-width mx-auto pb-5">
|
||||
<div className="flex flex-col">
|
||||
<div className="w-full mb-8 pt-32">
|
||||
<Input placeholder="Enter your email for exclusive offers..." className="max-w-md bg-background/80 backdrop-blur-sm text-foreground border-border" />
|
||||
</div>
|
||||
<div className="w-full flex flex-col md:flex-row md:justify-between items-start md:items-end gap-3 md:gap-5">
|
||||
<TextAnimation
|
||||
text={"Experience unparalleled luxury and serenity in the heart of the city. Your ultimate escape awaits."}
|
||||
variant="fade"
|
||||
gradientText={false}
|
||||
tag="p"
|
||||
className="w-full md:w-1/2 text-lg md:text-2xl text-balance font-normal text-primary-cta-text leading-snug"
|
||||
/>
|
||||
|
||||
<div className="w-full md:w-1/2 flex justify-start md:justify-end">
|
||||
<div className="flex flex-wrap gap-3">
|
||||
<Button text={primaryButton.text} href={primaryButton.href} variant="primary"/>
|
||||
<Button text={secondaryButton.text} href={secondaryButton.href} variant="secondary"animationDelay={0.1} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<AutoFillText className="font-semibold text-primary-cta-text">{"The Grand Oasis Hotel"}</AutoFillText>
|
||||
|
||||
<div className="w-full mt-8">
|
||||
<ImageOrVideo
|
||||
imageSrc="https://images.unsplash.com/photo-1566073771259-6a8506099945?auto=format&fit=crop&q=80"
|
||||
className="w-full h-64 md:h-96 object-cover rounded-2xl shadow-xl"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default function HomeSection() {
|
||||
return (
|
||||
<div data-webild-section="home" id="home">
|
||||
<HomeInline />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
32
src/pages/HomePage/sections/Metrics.tsx
Normal file
32
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,32 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "metrics" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import { Accessibility, Bed, Bell, Castle, Coffee, DoorOpen, Heart, ShowerHead, Sofa, SquareStack, Star, Tv, Users, Waves, Wifi, Wind, Wine } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="Our Impact"
|
||||
title="Trusted by Travelers Worldwide"
|
||||
description="Our commitment to excellence shines through in every guest experience. We're proud of the moments we create."
|
||||
metrics={[
|
||||
{
|
||||
icon: Star,
|
||||
title: "Guest Rating", value: "4.9/5"},
|
||||
{
|
||||
icon: Heart,
|
||||
title: "Repeat Guests", value: "85%"},
|
||||
{
|
||||
icon: Bell,
|
||||
title: "Years of Service", value: "30+"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
101
src/pages/HomePage/sections/Rooms.tsx
Normal file
101
src/pages/HomePage/sections/Rooms.tsx
Normal file
@@ -0,0 +1,101 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "rooms" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesAttributeCards from '@/components/sections/features/FeaturesAttributeCards';
|
||||
import { Accessibility, Bed, Bell, Castle, Coffee, DoorOpen, Heart, ShowerHead, Sofa, SquareStack, Star, Tv, Users, Waves, Wifi, Wind, Wine } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function RoomsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="rooms" data-section="rooms">
|
||||
<SectionErrorBoundary name="rooms">
|
||||
<FeaturesAttributeCards
|
||||
tag="Our Accommodations"
|
||||
title="Luxurious Rooms & Suites"
|
||||
description="Indulge in our exquisitely designed rooms and suites, offering a perfect blend of comfort and sophistication. Each space is meticulously crafted to provide a tranquil retreat."
|
||||
items={[
|
||||
{
|
||||
title: "Deluxe King Room", tags: "City View, King Bed", badge: "Popular", details: [
|
||||
{
|
||||
icon: Bed,
|
||||
label: "Bed", value: "King"},
|
||||
{
|
||||
icon: Wifi,
|
||||
label: "Connectivity", value: "Free Wi-Fi"},
|
||||
{
|
||||
icon: Users,
|
||||
label: "Capacity", value: "2 Adults"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-romantic-breakfast-bed-arrangement_23-2150956527.jpg"},
|
||||
{
|
||||
title: "Executive Suite", tags: "Spacious, Lounge Access", badge: "Premium", details: [
|
||||
{
|
||||
icon: Sofa,
|
||||
label: "Living", value: "Separate Lounge"},
|
||||
{
|
||||
icon: Coffee,
|
||||
label: "Coffee", value: "Espresso Machine"},
|
||||
{
|
||||
icon: Users,
|
||||
label: "Capacity", value: "3 Adults"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/pillow-bed_1203-9643.jpg"},
|
||||
{
|
||||
title: "Family Connecting Room", tags: "Connecting, Two Queens", details: [
|
||||
{
|
||||
icon: Bed,
|
||||
label: "Beds", value: "2 Queen"},
|
||||
{
|
||||
icon: Users,
|
||||
label: "Capacity", value: "4 Adults, 2 Kids"},
|
||||
{
|
||||
icon: SquareStack,
|
||||
label: "Space", value: "75 sqm"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cheerful-women-jumping-bed-before-wedding_1153-2805.jpg"},
|
||||
{
|
||||
title: "Ocean View Balcony", tags: "Sea Breeze, Private Balcony", badge: "Featured", details: [
|
||||
{
|
||||
icon: Waves,
|
||||
label: "View", value: "Oceanfront"},
|
||||
{
|
||||
icon: Wind,
|
||||
label: "Feature", value: "Private Balcony"},
|
||||
{
|
||||
icon: ShowerHead,
|
||||
label: "Bathroom", value: "Rain Shower"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/indoor-design-luxury-resort_23-2150497255.jpg"},
|
||||
{
|
||||
title: "Penthouse Suite", tags: "Panoramic Views, Luxury Amenities", badge: "Exclusive", details: [
|
||||
{
|
||||
icon: Castle,
|
||||
label: "Level", value: "Top Floor"},
|
||||
{
|
||||
icon: Tv,
|
||||
label: "Entertainment", value: "Home Cinema"},
|
||||
{
|
||||
icon: Wine,
|
||||
label: "Perks", value: "Private Bar"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/cozy-lively-home-interior-design_23-2151119019.jpg"},
|
||||
{
|
||||
title: "Accessible Guest Room", tags: "Spacious, Wheelchair Friendly", details: [
|
||||
{
|
||||
icon: Accessibility,
|
||||
label: "Access", value: "ADA Compliant"},
|
||||
{
|
||||
icon: ShowerHead,
|
||||
label: "Bathroom", value: "Roll-in Shower"},
|
||||
{
|
||||
icon: DoorOpen,
|
||||
label: "Space", value: "Wide Doors"},
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/bangkok-thailand-august-12-2016-beautiful-luxury-bathroom_1203-2725.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
22
src/pages/HomePage/sections/SocialProof.tsx
Normal file
22
src/pages/HomePage/sections/SocialProof.tsx
Normal file
@@ -0,0 +1,22 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "social-proof" section.
|
||||
|
||||
import React from 'react';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function SocialProofSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="social-proof" data-section="social-proof">
|
||||
<SectionErrorBoundary name="social-proof">
|
||||
<SocialProofMarquee
|
||||
tag="Our Partners"
|
||||
title="Proudly Affiliated & Recommended"
|
||||
description="We collaborate with leading travel and hospitality brands to bring you an unparalleled experience."
|
||||
names={[
|
||||
"Luxury Travel Magazine", "Global Hotel Awards", "Elite Destinations", "Voyage & Leisure", "Gourmet Escapes", "Wellness Retreats", "City Explorer Guide"]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
35
src/pages/HomePage/sections/Testimonials.tsx
Normal file
35
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,35 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "testimonials" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialAvatarCard from '@/components/sections/testimonial/TestimonialAvatarCard';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialAvatarCard
|
||||
tag="Guest Experiences"
|
||||
title="What Our Guests Say"
|
||||
primaryButton={{
|
||||
text: "Read All Reviews", href: "#"}}
|
||||
avatars={[
|
||||
{
|
||||
name: "John Doe", imageSrc: "http://img.b2bpic.net/free-photo/blond-businessman-surprised-expression_1194-3809.jpg"},
|
||||
{
|
||||
name: "Jane Smith", imageSrc: "http://img.b2bpic.net/free-photo/smiley-woman-with-hat-traveling_23-2148518196.jpg"},
|
||||
{
|
||||
name: "Robert Johnson", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-family-celebrating-birthday-together_23-2150572127.jpg"},
|
||||
{
|
||||
name: "Emily Chen", imageSrc: "http://img.b2bpic.net/free-photo/young-caucasian-man-smiling-happy-standing-city_839833-10609.jpg"},
|
||||
{
|
||||
name: "Michael Chang", imageSrc: "http://img.b2bpic.net/free-photo/smiling-senior-businessman-pointing-with-finger_1262-3108.jpg"},
|
||||
{
|
||||
name: "Sarah Jenkins", imageSrc: "http://img.b2bpic.net/free-photo/woman-with-hat-traveling_23-2148518197.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user