Listing Card

PreviousNext

A listing card with a name, location, rating, and review count.

Docs
alpineblock

Preview

Loading preview…
registry/alpine/listing/listing-card.tsx
import { cn } from "@/lib/utils"
import {
  Card,
  CardContent,
  CardDescription,
  CardHeader,
  CardTitle,
} from "@/registry/alpine/ui/card"
import { StarIcon } from "lucide-react"
import Image from "next/image"

export function ListingCard({
  name,
  location,
  imageUrl,
  rating,
  reviewCount,
  className,
}: {
  name: string
  location: string
  imageUrl: string
  rating: number
  reviewCount: number
} & React.ComponentProps<typeof Card>) {
  return (
    <Card
      className={cn(
        "w-full p-0 bg-transparent aspect-square border-0 gap-4 min-w-0",
        className
      )}
    >
      <CardContent className="p-0">
        <Image
          src={imageUrl}
          alt={name}
          width={600}
          height={600}
          className="aspect-square rounded-lg w-full object-cover"
        />
      </CardContent>
      <CardHeader className="p-0 gap-0">
        <CardTitle className="flex items-center gap-2 text-sm tracking-tight font-medium">
          {name}{" "}
          <div className="flex items-center gap-1 ml-auto">
            <StarIcon className="fill-foreground size-3" /> {rating} (
            {reviewCount})
          </div>
        </CardTitle>
        <CardDescription>{location}</CardDescription>
      </CardHeader>
    </Card>
  )
}

Installation

npx shadcn@latest add @alpine/listing-card

Usage

import { ListingCard } from "@/components/listing-card"
<ListingCard />