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 (
)
})
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 }