98 lines
2.1 KiB
TypeScript
98 lines
2.1 KiB
TypeScript
|
|
import * as React from "react";
|
||
|
|
import { cn } from "../../lib/utils";
|
||
|
|
|
||
|
|
const Empty = React.forwardRef<
|
||
|
|
HTMLDivElement,
|
||
|
|
React.HTMLAttributes<HTMLDivElement>
|
||
|
|
>(({ className, ...props }, ref) => (
|
||
|
|
<div
|
||
|
|
ref={ref}
|
||
|
|
className={cn(
|
||
|
|
"flex min-h-[400px] min-w-[600px] flex-col items-center justify-center rounded-2xl p-12 text-center w-full",
|
||
|
|
className
|
||
|
|
)}
|
||
|
|
{...props}
|
||
|
|
/>
|
||
|
|
));
|
||
|
|
Empty.displayName = "Empty";
|
||
|
|
|
||
|
|
const EmptyHeader = React.forwardRef<
|
||
|
|
HTMLDivElement,
|
||
|
|
React.HTMLAttributes<HTMLDivElement>
|
||
|
|
>(({ className, ...props }, ref) => (
|
||
|
|
<div
|
||
|
|
ref={ref}
|
||
|
|
className={cn("flex flex-col items-center space-y-4", className)}
|
||
|
|
{...props}
|
||
|
|
/>
|
||
|
|
));
|
||
|
|
EmptyHeader.displayName = "EmptyHeader";
|
||
|
|
|
||
|
|
const EmptyMedia = React.forwardRef<
|
||
|
|
HTMLDivElement,
|
||
|
|
React.HTMLAttributes<HTMLDivElement> & {
|
||
|
|
variant?: "default" | "icon";
|
||
|
|
}
|
||
|
|
>(({ className, variant = "default", ...props }, ref) => (
|
||
|
|
<div
|
||
|
|
ref={ref}
|
||
|
|
className={cn(
|
||
|
|
variant === "icon"
|
||
|
|
? "flex items-center justify-center"
|
||
|
|
: "mb-4",
|
||
|
|
className
|
||
|
|
)}
|
||
|
|
{...props}
|
||
|
|
/>
|
||
|
|
));
|
||
|
|
EmptyMedia.displayName = "EmptyMedia";
|
||
|
|
|
||
|
|
const EmptyTitle = React.forwardRef<
|
||
|
|
HTMLHeadingElement,
|
||
|
|
React.HTMLAttributes<HTMLHeadingElement>
|
||
|
|
>(({ className, ...props }, ref) => (
|
||
|
|
<h3
|
||
|
|
ref={ref}
|
||
|
|
className={cn("text-lg font-semibold text-slate-900", className)}
|
||
|
|
{...props}
|
||
|
|
/>
|
||
|
|
));
|
||
|
|
EmptyTitle.displayName = "EmptyTitle";
|
||
|
|
|
||
|
|
const EmptyDescription = React.forwardRef<
|
||
|
|
HTMLParagraphElement,
|
||
|
|
React.HTMLAttributes<HTMLParagraphElement>
|
||
|
|
>(({ className, ...props }, ref) => (
|
||
|
|
<p
|
||
|
|
ref={ref}
|
||
|
|
className={cn(
|
||
|
|
"max-w-sm text-sm text-slate-500",
|
||
|
|
className
|
||
|
|
)}
|
||
|
|
{...props}
|
||
|
|
/>
|
||
|
|
));
|
||
|
|
EmptyDescription.displayName = "EmptyDescription";
|
||
|
|
|
||
|
|
const EmptyContent = React.forwardRef<
|
||
|
|
HTMLDivElement,
|
||
|
|
React.HTMLAttributes<HTMLDivElement>
|
||
|
|
>(({ className, ...props }, ref) => (
|
||
|
|
<div
|
||
|
|
ref={ref}
|
||
|
|
className={cn("mt-6", className)}
|
||
|
|
{...props}
|
||
|
|
/>
|
||
|
|
));
|
||
|
|
EmptyContent.displayName = "EmptyContent";
|
||
|
|
|
||
|
|
export {
|
||
|
|
Empty,
|
||
|
|
EmptyHeader,
|
||
|
|
EmptyMedia,
|
||
|
|
EmptyTitle,
|
||
|
|
EmptyDescription,
|
||
|
|
EmptyContent,
|
||
|
|
};
|
||
|
|
|