import Skeleton from "react-loading-skeleton"; import AspectRatio from "./AspectRatio"; import classNames from "classnames"; /* -------------------------------------------------------------------------- */ /* Props */ /* -------------------------------------------------------------------------- */ type Props = { /** * Card component accept children */ children?: React.ReactNode; /** * Styling the card component */ className?: string | undefined; }; const SkeletonCard = ({ className, children }: Props) => { return ( <div className={classNames( " justify-between p-4 items-start rounded border border-[#F000F0] overflow-hidden", className )} > {children} </div> ); }; // Media SkeletonCard.Media = function SkeletonCardCardMedia() { return ( <AspectRatio> <AspectRatio.Content> <Skeleton count={1} className="h-full" /> </AspectRatio.Content> </AspectRatio> ); }; // Content SkeletonCard.Content = function SkeletonCardCardContent({ children, className, }: Props) { return ( <div className={classNames([className, "flex flex-col gap-y-4 mb-3"])}> {children} </div> ); }; // Header SkeletonCard.Header = function SkeletonCardCardHeader({ children, className, }: Props) { return ( <div className={classNames([className, "flex items-start gap-4 w-full"])}> {children} </div> ); }; // Avatar SkeletonCard.Avatar = function SkeletonCardCardAvatar() { return <Skeleton circle width={48} height={48} />; }; // Title SkeletonCard.Title = function SkeletonCardCardTitle() { return <Skeleton count={1} width={150} height={28} />; }; // Body SkeletonCard.Body = function SkeletonCardCardBody({ children, className, }: Props) { return <Skeleton count={3} className={classNames("text-sm", className)} />; }; // Action SkeletonCard.Action = function SkeletonCardCardAction({ className }: Props) { return ( <div className={classNames("w-1/2", className)}> <Skeleton count={1} /> </div> ); }; export default SkeletonCard;