forked from veda/www_veda_2025
187 lines
6.9 KiB
JavaScript
187 lines
6.9 KiB
JavaScript
import { P, H3, H4, PXS, PXXS } from '@/components/text'
|
|
import {
|
|
Tab,
|
|
TabGroup,
|
|
TabList,
|
|
TabPanel,
|
|
TabPanels,
|
|
} from '@headlessui/react'
|
|
import { H2, PS } from '@/components/text'
|
|
|
|
|
|
const product = {
|
|
name: 'Community Buildings',
|
|
images: [
|
|
{
|
|
id: 1,
|
|
name: 'Community Space 1',
|
|
src: '/images/community1.jpg',
|
|
alt: 'Community gathering space with traditional design',
|
|
},
|
|
{
|
|
id: 2,
|
|
name: 'Community Space 2',
|
|
src: '/images/community2.jpg',
|
|
alt: 'Interior view of community building',
|
|
},
|
|
{
|
|
id: 3,
|
|
name: 'Community Space 3',
|
|
src: '/images/community3.jpg',
|
|
alt: 'Community space with seating arrangements',
|
|
},
|
|
{
|
|
id: 4,
|
|
name: 'Community Space 4',
|
|
src: '/images/community4.jpg',
|
|
alt: 'Community building exterior and surroundings',
|
|
},
|
|
],
|
|
colors: [
|
|
{ id: 'washed-black', name: 'Washed Black', classes: 'bg-gray-700 checked:outline-gray-700' },
|
|
{ id: 'white', name: 'White', classes: 'bg-white checked:outline-gray-400' },
|
|
{ id: 'washed-gray', name: 'Washed Gray', classes: 'bg-gray-500 checked:outline-gray-500' },
|
|
],
|
|
description: 'Community building holds significant value by fostering a sense of belonging, providing social and emotional support, and promoting collective action. It enhances social capital, encourages collaboration. Human to human connection become more and more important as new technological times require us to collaborate more on a peer to peer level and connect on different levels with each other.',
|
|
details: [
|
|
{
|
|
name: 'Features',
|
|
items: [
|
|
'Tailored itineraries that not only traverse the Nile but also include excursions to monumental sites like the temples of Luxor and the iconic pyramid to create life lasting bonds and inspire to integrate history while creating the future.',
|
|
'A comprehensive wellness approach integrating yoga, meditation, massage, and nutritious cuisine crafted by our onboard chef, complemented by wellness workshops aimed at holistic health.',
|
|
'Personal growth sessions led by experienced coaches, offering mentoring and guidance to foster self-discovery and personal development.',
|
|
],
|
|
},
|
|
],
|
|
}
|
|
const relatedProducts = [
|
|
{
|
|
id: 1,
|
|
name: 'Zip Tote Basket',
|
|
color: 'White and black',
|
|
href: '#',
|
|
imageSrc: 'https://tailwindcss.com/plus-assets/img/ecommerce-images/product-page-03-related-product-01.jpg',
|
|
imageAlt: 'Front of zip tote bag with white canvas, black canvas straps and handle, and black zipper pulls.',
|
|
price: '$140',
|
|
},
|
|
{
|
|
id: 2,
|
|
name: 'Zip High Wall Tote',
|
|
color: 'White and blue',
|
|
href: '#',
|
|
imageSrc: 'https://tailwindcss.com/plus-assets/img/ecommerce-images/product-page-03-related-product-02.jpg',
|
|
imageAlt: 'Front of zip tote bag with white canvas, blue canvas straps and handle, and front zipper pocket.',
|
|
price: '$150',
|
|
},
|
|
{
|
|
id: 3,
|
|
name: 'Halfsize Tote',
|
|
color: 'Clay',
|
|
href: '#',
|
|
imageSrc: 'https://tailwindcss.com/plus-assets/img/ecommerce-images/product-page-03-related-product-03.jpg',
|
|
imageAlt: 'Front of tote with monochrome natural canvas body, straps, roll top, and handles.',
|
|
price: '$210',
|
|
},
|
|
{
|
|
id: 4,
|
|
name: 'High Wall Tote',
|
|
color: 'Black and orange',
|
|
href: '#',
|
|
imageSrc: 'https://tailwindcss.com/plus-assets/img/ecommerce-images/product-page-03-related-product-04.jpg',
|
|
imageAlt: 'Front of zip tote bag with black canvas, black handles, and orange drawstring top.',
|
|
price: '$210',
|
|
},
|
|
]
|
|
|
|
|
|
function classNames(...classes) {
|
|
return classes.filter(Boolean).join(' ')
|
|
}
|
|
|
|
export function Community() {
|
|
return (
|
|
<div className="pb-24">
|
|
<main className="mx-auto max-w-7xl sm:px-6 sm:pt-12 lg:px-8">
|
|
<div className="mx-auto max-w-2xl lg:max-w-none">
|
|
{/* Product */}
|
|
<div className="lg:grid lg:grid-cols-2 lg:items-start lg:gap-x-8">
|
|
{/* Image gallery */}
|
|
<TabGroup className="flex flex-col-reverse">
|
|
{/* Image selector */}
|
|
<div className="mx-auto mt-6 hidden w-full max-w-2xl sm:block lg:max-w-none">
|
|
<TabList className="grid grid-cols-4 gap-6">
|
|
{product.images.map((image) => (
|
|
<Tab
|
|
key={image.id}
|
|
className="group relative flex h-24 cursor-pointer items-center justify-center rounded-md bg-transparent text-sm font-medium text-gray-900 uppercase hover:bg-gray-50 focus:ring-3 focus:ring-indigo-500/50 focus:ring-offset-4 focus:outline-hidden"
|
|
>
|
|
<span className="sr-only">{image.name}</span>
|
|
<span className="absolute inset-0 overflow-hidden ">
|
|
<img alt="" src={image.src} className="size-full object-cover" />
|
|
</span>
|
|
<span
|
|
aria-hidden="true"
|
|
className="pointer-events-none absolute inset-0 ring-1 ring-transparent ring-offset-2 group-data-selected:ring-indigo-500"
|
|
/>
|
|
</Tab>
|
|
))}
|
|
</TabList>
|
|
</div>
|
|
|
|
<TabPanels>
|
|
{product.images.map((image) => (
|
|
<TabPanel key={image.id}>
|
|
<img alt={image.alt} src={image.src} className="aspect-square w-full object-cover" />
|
|
</TabPanel>
|
|
))}
|
|
</TabPanels>
|
|
</TabGroup>
|
|
|
|
{/* Product info */}
|
|
<div className="mt-6 px-6 sm:mt-16 sm:px-0 lg:mt-0">
|
|
<H2 className="">{product.name}</H2>
|
|
|
|
|
|
|
|
|
|
<div className="mt-4">
|
|
<h3 className="sr-only">Description</h3>
|
|
|
|
<div className="space-y-2 text-base text-gray-700">
|
|
<PS>{product.description}</PS>
|
|
</div>
|
|
</div>
|
|
|
|
<section aria-labelledby="details-heading" className="mt-8">
|
|
|
|
|
|
<div className="space-y-4 border-t border-gray-300 pt-4">
|
|
{product.details.map((detail) => (
|
|
<div key={detail.name}>
|
|
<h3>
|
|
<PS className="font-medium text-gray-900 mb-4">
|
|
{detail.name}
|
|
</PS>
|
|
</h3>
|
|
<ul
|
|
role="list"
|
|
className="list-disc space-y-2 pl-5 text-sm/6 text-gray-700 marker:text-gray-300"
|
|
>
|
|
{detail.items.map((item) => (
|
|
<li key={item} className="pl-2 font-light">
|
|
{item}
|
|
</li>
|
|
))}
|
|
</ul>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
</div>
|
|
)
|
|
}
|