Card is a reusable layout primitive from @branditdev/ui.
Preview
Order Summary
Shared Card primitive from @branditdev/ui.
Subtotal: $42.00
Usage
import { Button } from '@branditdev/ui';
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from '../card';
export function CardDemo() {
return (
<div className='max-w-md'>
<Card>
<CardHeader>
<CardTitle>Order Summary</CardTitle>
<CardDescription>
Shared Card primitive from @branditdev/ui.
</CardDescription>
</CardHeader>
<CardContent>
<p className='text-sm text-muted-foreground'>Subtotal: $42.00</p>
</CardContent>
<CardFooter>
<Button size='sm'>Proceed</Button>
</CardFooter>
</Card>
</div>
);
}
API
Card(
props):Element
Defined in: components/card/card.tsx:13
Surface container for grouped content and actions.
Parameters
| Name | Type | Optional | Default | Description |
|---|---|---|---|---|
| props | DetailedHTMLProps | no | - | Card element props. |
Returns
Element
A card container element.
Source
import * as React from 'react';
import { cn } from '@/lib/utils';
export type CardProps = React.ComponentProps<'div'>;
function Card(props: CardProps) {
const { className, ...rest } = props;
return (
<div
data-slot='card'
className={cn(
'bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm',
className
)}
{...rest}
/>
);
}
function CardHeader({ className, ...props }: React.ComponentProps<'div'>) {
return (
<div
data-slot='card-header'
className={cn(
'@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6',
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,
};