MeetUp/src/components/ui/card.tsx

143 lines
2.8 KiB
TypeScript

import * as React from 'react';
import { cn } from '@/lib/utils';
function Card({ className, ...props }: React.ComponentProps<'div'>) {
return (
<div
data-slot='card'
className={cn(
/* Text */
'text-card-foreground',
/* Background */
'bg-card',
/* Border */
'border rounded-xl',
/* Font */
'',
/* Cursor */
'',
/* Ring */
'',
/* Outline */
'',
/* Shadow */
'shadow-[4px_4px_9px_9px_rgba(0,0,0,0.25)]',
/* Opacity */
'',
/* Scaling */
'',
/* Spacing */
'py-6 gap-6',
/* Alignment */
'flex flex-col',
/* ////////// */
className,
)}
{...props}
/>
);
}
function CardHeader({ className, ...props }: React.ComponentProps<'div'>) {
return (
<div
data-slot='card-header'
className={cn(
/* Text */
'',
/* Background */
'',
/* Border */
'',
/* Font */
'',
/* Cursor */
'',
/* Ring */
'',
/* Outline */
'',
/* Shadow */
'',
/* Opacity */
'',
/* Scaling */
'',
/* Spacing */
'gap-1.5 px-6 [.border-b]:pb-6',
/* Alignment */
'grid auto-rows-min grid-rows-[auto_auto]',
'items-start has-data-[slot=card-action]:grid-cols-[1fr_auto]',
/* Miscellanneous */
'@container/card-header',
/* ////////// */
className,
)}
{...props}
/>
);
}
function CardTitle({ className, ...props }: React.ComponentProps<'div'>) {
return (
<div
data-slot='card-title'
className={cn('leading-none font-semibold', className)}
{...props}
/>
);
}
function CardDescription({ className, ...props }: React.ComponentProps<'div'>) {
return (
<div
data-slot='card-description'
className={cn('text-muted-foreground text-sm', className)}
{...props}
/>
);
}
function CardAction({ className, ...props }: React.ComponentProps<'div'>) {
return (
<div
data-slot='card-action'
className={cn(
'col-start-2 row-span-2 row-start-1 self-start justify-self-end',
className,
)}
{...props}
/>
);
}
function CardContent({ className, ...props }: React.ComponentProps<'div'>) {
return (
<div
data-slot='card-content'
className={cn('px-6', className)}
{...props}
/>
);
}
function CardFooter({ className, ...props }: React.ComponentProps<'div'>) {
return (
<div
data-slot='card-footer'
className={cn('flex items-center px-6 [.border-t]:pt-6', className)}
{...props}
/>
);
}
export {
Card,
CardHeader,
CardFooter,
CardTitle,
CardAction,
CardDescription,
CardContent,
};