"use client" import * as React from "react" import { tileUrl } from "@/lib/api" import type { Hit } from "@/lib/types" import { cn } from "@/lib/utils" interface TileCardProps { hit: Hit rank: number selected?: boolean onSelect?: (hit: Hit) => void onClick?: (hit: Hit) => void } export function TileCard({ hit, rank, selected, onSelect, onClick }: TileCardProps) { const [imgError, setImgError] = React.useState(false) const [imgLoaded, setImgLoaded] = React.useState(false) return (
onClick?.(hit)} > {/* Rank badge */}
#{rank}
{/* Selection checkbox */}
{ e.stopPropagation() onSelect?.(hit) }} > {selected && ( )}
{/* Image */}
{imgError ? (
Failed to load tile
) : ( <> {!imgLoaded && (
)} {/* eslint-disable-next-line @next/next/no-img-element */} {`Tile setImgLoaded(true)} onError={() => setImgError(true)} /> )}
{/* Metadata footer */}
{hit.score.toFixed(3)} {hit.tile_height}px
) }