| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import * as React from 'react';
- import { cn } from '@/lib/utils';
- function Card({
- className,
- size = 'default',
- ...props
- }: React.ComponentProps<'div'> & { size?: 'default' | 'sm' }) {
- return (
- <div
- data-slot="card"
- data-size={size}
- className={cn(
- 'ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-xl py-6 text-sm shadow-xs ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col',
- className,
- )}
- {...props}
- />
- );
- }
- function CardHeader({ className, ...props }: React.ComponentProps<'div'>) {
- return (
- <div
- data-slot="card-header"
- className={cn(
- 'gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]',
- className,
- )}
- {...props}
- />
- );
- }
- function CardTitle({ className, ...props }: React.ComponentProps<'div'>) {
- return (
- <div
- data-slot="card-title"
- className={cn(
- 'text-base leading-normal font-medium group-data-[size=sm]/card:text-sm',
- 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 group-data-[size=sm]/card:px-4', className)}
- {...props}
- />
- );
- }
- function CardFooter({ className, ...props }: React.ComponentProps<'div'>) {
- return (
- <div
- data-slot="card-footer"
- className={cn(
- 'rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4 flex items-center',
- className,
- )}
- {...props}
- />
- );
- }
- export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent };
|