import clsx from 'clsx'; import React, { useState, isValidElement, ReactElement } from 'react'; interface DropdownProps { className?: string; menuClassName?: string; buttonClassName?: string; toggleButton: React.ReactNode; children: ReactElement<{ setIsDropdownOpen: (isOpen: boolean) => void; menuClassName?: string }>; onToggle?: (isOpen: boolean) => void; } const Dropdown: React.FC = ({ className, menuClassName, buttonClassName, toggleButton, children, onToggle, }) => { const [isOpen, setIsOpen] = useState(false); const toggleDropdown = () => { const newIsOpen = !isOpen; setIsOpen(newIsOpen); onToggle?.(newIsOpen); }; const setIsDropdownOpen = (isOpen: boolean) => { setIsOpen(isOpen); onToggle?.(isOpen); }; const childrenWithToggle = isValidElement(children) ? React.cloneElement(children, { setIsDropdownOpen, menuClassName }) : children; return (
{isOpen && (
setIsDropdownOpen(false)} /> )}
{toggleButton}
{isOpen && childrenWithToggle}
); }; export default Dropdown;