2025-03-12 11:22:32 +08:00
|
|
|
import { cn } from "@heroui/react"
|
2024-11-11 10:04:00 +08:00
|
|
|
import type { ReactNode } from "react"
|
2024-09-20 23:15:42 +08:00
|
|
|
|
|
|
|
|
interface CardProps {
|
2024-09-27 15:28:32 +08:00
|
|
|
children?: ReactNode
|
|
|
|
|
className?: string
|
2024-10-28 10:42:42 +08:00
|
|
|
type?: string
|
2024-09-27 15:28:32 +08:00
|
|
|
onClick?: () => void
|
2024-09-20 23:15:42 +08:00
|
|
|
}
|
|
|
|
|
|
2025-03-17 01:17:35 +08:00
|
|
|
const Card = ({ children, className, ...props }: CardProps) => {
|
2024-09-20 23:15:42 +08:00
|
|
|
return (
|
2025-03-23 16:59:02 +08:00
|
|
|
<div
|
2025-03-17 01:17:35 +08:00
|
|
|
className={cn(
|
|
|
|
|
"dark:bg-white/[3%] dark:border-white/[6%] px-3 py-3 flex flex-col gap-2.5 border w-full rounded-lg bg-white/40 border-black/[6%]"
|
|
|
|
|
, className)}
|
2024-09-20 23:15:42 +08:00
|
|
|
data-tauri-drag-region
|
2025-03-17 01:17:35 +08:00
|
|
|
{...props}
|
2024-09-20 23:15:42 +08:00
|
|
|
>
|
|
|
|
|
{children}
|
2025-03-23 16:59:02 +08:00
|
|
|
</div>
|
2024-09-27 15:28:32 +08:00
|
|
|
)
|
|
|
|
|
}
|
2024-09-20 23:15:42 +08:00
|
|
|
|
|
|
|
|
const CardHeader = ({ children }: CardProps) => {
|
2024-11-11 10:04:00 +08:00
|
|
|
return (
|
2025-11-05 02:35:35 +08:00
|
|
|
<div className="flex items-center gap-1.5 tracking-wide select-none shrink-0">
|
2025-03-13 03:44:48 +08:00
|
|
|
{children}
|
|
|
|
|
</div>
|
2024-11-11 10:04:00 +08:00
|
|
|
)
|
2024-09-27 15:28:32 +08:00
|
|
|
}
|
2024-09-20 23:15:42 +08:00
|
|
|
|
2024-10-28 10:42:42 +08:00
|
|
|
const CardIcon = ({ children, type, className, ...rest }: CardProps) => {
|
2024-09-20 23:15:42 +08:00
|
|
|
return (
|
2024-11-11 10:04:00 +08:00
|
|
|
<div
|
2025-03-12 11:22:32 +08:00
|
|
|
className={cn(
|
2025-07-08 11:31:43 +08:00
|
|
|
"flex gap-1.5 items-center font-semibold flex-shrink-0",
|
2024-11-11 10:04:00 +08:00
|
|
|
type === "menu" &&
|
2025-03-23 13:53:28 +08:00
|
|
|
"transition cursor-pointer hover:bg-black/5 dark:hover:bg-white/5 px-2 py-1 rounded-md active:scale-95",
|
2024-11-11 10:04:00 +08:00
|
|
|
className,
|
|
|
|
|
)}
|
|
|
|
|
{...rest}
|
|
|
|
|
>
|
2024-09-20 23:15:42 +08:00
|
|
|
{children}
|
|
|
|
|
</div>
|
2024-09-27 15:28:32 +08:00
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-08 11:31:43 +08:00
|
|
|
const CardTool = ({ children, className }: CardProps) => {
|
2024-11-11 10:04:00 +08:00
|
|
|
return (
|
2025-07-08 11:31:43 +08:00
|
|
|
<div className={cn("flex items-center justify-end flex-grow gap-2", className)}>
|
2024-11-11 10:04:00 +08:00
|
|
|
{children}
|
|
|
|
|
</div>
|
|
|
|
|
)
|
2024-09-27 15:28:32 +08:00
|
|
|
}
|
2024-09-20 23:15:42 +08:00
|
|
|
|
|
|
|
|
const CardBody = ({ children }: CardProps) => {
|
2024-11-11 10:04:00 +08:00
|
|
|
return (
|
2025-03-12 13:16:25 +08:00
|
|
|
<div className="w-full h-full text-sm tracking-wide text-zinc-800 dark:text-white">
|
2024-11-11 10:04:00 +08:00
|
|
|
{children}
|
|
|
|
|
</div>
|
|
|
|
|
)
|
2024-09-27 15:28:32 +08:00
|
|
|
}
|
2024-09-20 23:15:42 +08:00
|
|
|
|
2024-09-27 15:28:32 +08:00
|
|
|
export { Card, CardHeader, CardIcon, CardTool, CardBody }
|