Rocky_Mountain_Vending/components/repairs-image-carousel.tsx
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

67 lines
1.8 KiB
TypeScript

'use client'
import * as React from 'react'
import { Carousel, CarouselContent, CarouselItem, type CarouselApi } from '@/components/ui/carousel'
import Image from 'next/image'
export function RepairsImageCarousel() {
const [api, setApi] = React.useState<CarouselApi>()
const [current, setCurrent] = React.useState(0)
React.useEffect(() => {
if (!api) return
setCurrent(api.selectedScrollSnap())
api.on('select', () => {
setCurrent(api.selectedScrollSnap())
})
}, [api])
React.useEffect(() => {
if (!api) return
const interval = setInterval(() => {
api.scrollNext()
}, 4000)
return () => clearInterval(interval)
}, [api])
return (
<Carousel
setApi={setApi}
className="w-full"
opts={{
align: 'start',
loop: true,
}}
>
<CarouselContent>
<CarouselItem className="md:basis-1/2">
<div className="relative aspect-video rounded-lg overflow-hidden shadow-lg">
<Image
src="https://rockymountainvending.com/wp-content/uploads/2025/09/IMG_4660-scaled.jpeg"
alt="Vending machine repair service"
fill
className="object-cover"
sizes="(max-width: 768px) 100vw, 50vw"
/>
</div>
</CarouselItem>
<CarouselItem className="md:basis-1/2">
<div className="relative aspect-video rounded-lg overflow-hidden shadow-lg">
<Image
src="https://rockymountainvending.com/wp-content/uploads/2025/09/IMG_4676-scaled.jpeg"
alt="Vending machine maintenance"
fill
className="object-cover"
sizes="(max-width: 768px) 100vw, 50vw"
/>
</div>
</CarouselItem>
</CarouselContent>
</Carousel>
)
}