import * as React from "react" import { cn } from "@/lib/utils" import { ChevronDown } from "lucide-react" const SelectContext = React.createContext(null) const Select = ({ value, onValueChange, children, ...props }) => { const [isOpen, setIsOpen] = React.useState(false) const [internalValue, setInternalValue] = React.useState("") const currentValue = value !== undefined ? value : internalValue const handleValueChange = (newValue) => { if (onValueChange) { onValueChange(newValue) } else { setInternalValue(newValue) } setIsOpen(false) } return (
{children}
) } const SelectTrigger = React.forwardRef(({ className, children, ...props }, ref) => { const context = React.useContext(SelectContext) return ( ) }) SelectTrigger.displayName = "SelectTrigger" const SelectValue = ({ placeholder, ...props }) => { const context = React.useContext(SelectContext) const displayValue = context?.value || placeholder return {displayValue} } const SelectContent = React.forwardRef(({ className, children, ...props }, ref) => { const context = React.useContext(SelectContext) if (!context?.isOpen) return null return (
{children}
) }) SelectContent.displayName = "SelectContent" const SelectItem = React.forwardRef(({ className, value, children, ...props }, ref) => { const context = React.useContext(SelectContext) const isSelected = context?.value === value return (
context?.onValueChange(value)} className={cn( "relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 px-2 text-sm outline-none hover:bg-slate-100 focus:bg-slate-100", isSelected && "bg-slate-100", className )} {...props} > {children}
) }) SelectItem.displayName = "SelectItem" export { Select, SelectTrigger, SelectValue, SelectContent, SelectItem }