| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import { cva, type VariantProps } from 'class-variance-authority';
- import { cn } from '@/lib/utils';
- function Empty({ className, ...props }: React.ComponentProps<'div'>) {
- return (
- <div
- data-slot="empty"
- className={cn(
- 'gap-4 rounded-xl border-dashed p-6 flex w-full min-w-0 flex-1 flex-col items-center justify-center text-center text-balance',
- className,
- )}
- {...props}
- />
- );
- }
- function EmptyHeader({ className, ...props }: React.ComponentProps<'div'>) {
- return (
- <div
- data-slot="empty-header"
- className={cn('gap-2 flex max-w-sm flex-col items-center', className)}
- {...props}
- />
- );
- }
- const emptyMediaVariants = cva(
- 'mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0',
- {
- variants: {
- variant: {
- default: 'bg-transparent',
- icon: "bg-muted text-foreground flex size-8 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-4",
- },
- },
- defaultVariants: {
- variant: 'default',
- },
- },
- );
- function EmptyMedia({
- className,
- variant = 'default',
- ...props
- }: React.ComponentProps<'div'> & VariantProps<typeof emptyMediaVariants>) {
- return (
- <div
- data-slot="empty-icon"
- data-variant={variant}
- className={cn(emptyMediaVariants({ variant, className }))}
- {...props}
- />
- );
- }
- function EmptyTitle({ className, ...props }: React.ComponentProps<'div'>) {
- return (
- <div
- data-slot="empty-title"
- className={cn(
- 'text-sm font-medium tracking-tight cn-font-heading',
- className,
- )}
- {...props}
- />
- );
- }
- function EmptyDescription({ className, ...props }: React.ComponentProps<'p'>) {
- return (
- <div
- data-slot="empty-description"
- className={cn(
- 'text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary',
- className,
- )}
- {...props}
- />
- );
- }
- function EmptyContent({ className, ...props }: React.ComponentProps<'div'>) {
- return (
- <div
- data-slot="empty-content"
- className={cn(
- 'gap-2.5 text-sm flex w-full max-w-sm min-w-0 flex-col items-center text-balance',
- className,
- )}
- {...props}
- />
- );
- }
- export {
- Empty,
- EmptyHeader,
- EmptyTitle,
- EmptyDescription,
- EmptyContent,
- EmptyMedia,
- };
|