"use client"; import { memo, useEffect } from "react"; import { X } from "lucide-react"; import Button from "@/components/button/Button"; import { useTheme } from "@/providers/themeProvider/ThemeProvider"; import { getButtonProps } from "@/lib/buttonUtils"; import { cls } from "@/lib/utils"; import type { ButtonConfig } from "@/types/button"; import AnimationContainer from "@/components/sections/AnimationContainer"; import ProductCartItem from "./ProductCartItem"; import type { CartItem } from "./ProductCartItem"; interface ProductCartProps { isOpen: boolean; onClose: () => void; items: CartItem[]; onQuantityChange?: (id: string, quantity: number) => void; onRemove?: (id: string) => void; total: string; buttons: ButtonConfig[]; title?: string; totalLabel?: string; emptyMessage?: string; className?: string; panelClassName?: string; itemClassName?: string; buttonClassName?: string; } const ProductCart = ({ isOpen, onClose, items, onQuantityChange, onRemove, total, buttons, title = "Cart", totalLabel = "Total", emptyMessage = "Your cart is empty", className = "", panelClassName = "", itemClassName = "", buttonClassName = "", }: ProductCartProps) => { const theme = useTheme(); const getButtonConfigProps = () => { if (theme.defaultButtonVariant === "hover-bubble") { return { bgClassName: "w-full" }; } if (theme.defaultButtonVariant === "icon-arrow") { return { className: "justify-between" }; } return {}; }; useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.key === "Escape" && isOpen) { onClose(); } }; document.addEventListener("keydown", handleKeyDown); return () => document.removeEventListener("keydown", handleKeyDown); }, [isOpen, onClose]); useEffect(() => { if (isOpen) { document.body.style.overflow = "hidden"; } else { document.body.style.overflow = ""; } return () => { document.body.style.overflow = ""; }; }, [isOpen]); return (