Spaces:
Running
Running
| import Image from "next/image"; | |
| import { TiHeartFullOutline } from "react-icons/ti"; | |
| import { SpaceProps } from "@/utils/type"; | |
| import Link from "next/link"; | |
| interface Props { | |
| space: SpaceProps; | |
| } | |
| export const Space: React.FC<Props> = ({ space }) => { | |
| return ( | |
| <Link | |
| href={`https://huggingface.co/spaces/${space.id}`} | |
| target="_blank" | |
| className="bg-gray-50 border border-gray-200 px-6 py-4 rounded-xl transition-all duration-300 hover:ring-[4px] hover:ring-blue-500/10" | |
| > | |
| <header className="flex items-center justify-between gap-5"> | |
| <div> | |
| <h2 className="font-semibold text-black">{space?.title}</h2> | |
| {space.shortDescription && ( | |
| <p className="text-gray-500 text-xs mt-0.5 line-clamp-1"> | |
| {space.shortDescription} | |
| </p> | |
| )} | |
| <div className="flex items-center justify-start gap-2 whitespace-pre-line mt-2"> | |
| <Image | |
| src={ | |
| space.authorData.avatarUrl?.startsWith("/") | |
| ? `https://huggingface.co${space.authorData.avatarUrl}` | |
| : space.authorData.avatarUrl | |
| } | |
| alt={space.authorData.name} | |
| width={24} | |
| height={24} | |
| className="rounded-full w-4 h-4" | |
| /> | |
| <div> | |
| <p className="text-gray-500 text-xs font-regular"> | |
| {space.authorData.name} | |
| </p> | |
| </div> | |
| </div> | |
| </div> | |
| <div className="space-y-3 flex flex-col items-end"> | |
| <div | |
| className="rounded-full truncate min-w-[2.5rem] min-h-[2.5rem] max-w-[2.5rem] max-h-[2.5rem] overflow-hidden flex items-center justify-center bg-gradient-to-br from-blue-500 to-red-500 border-[2px] border-white ring-1 ring-gray-200" | |
| style={{ | |
| // @ts-ignore | |
| "--tw-gradient-from": `${space.colorFrom} var(--tw-gradient-to-position)`, | |
| "--tw-gradient-to": space.colorTo, | |
| }} | |
| > | |
| {space?.emoji && ( | |
| <p className="text-xl"> | |
| {/* keep only 1 char */} | |
| {space.emoji} | |
| </p> | |
| )} | |
| </div> | |
| <div className="flex items-center max-w-max rounded-full px-1.5 py-1 text-sm bg-gray-100/80 border border-gray-200 text-gray-600"> | |
| <TiHeartFullOutline className="w-5" /> | |
| <p className="text-gray-500 text-xs font-regular">{space.likes}</p> | |
| </div> | |
| </div> | |
| </header> | |
| </Link> | |
| ); | |
| }; | |