'use client' import type { Placement } from '@/app/components/base/ui/placement' import { Select as BaseSelect } from '@base-ui/react/select' import * as React from 'react' import { parsePlacement } from '@/app/components/base/ui/placement' import { cn } from '@/utils/classnames' export const Select = BaseSelect.Root export const SelectValue = BaseSelect.Value export const SelectGroup = BaseSelect.Group export const SelectGroupLabel = BaseSelect.GroupLabel export const SelectSeparator = BaseSelect.Separator type SelectTriggerProps = React.ComponentPropsWithoutRef & { clearable?: boolean onClear?: () => void loading?: boolean } export function SelectTrigger({ className, children, clearable = false, onClear, loading = false, ...props }: SelectTriggerProps) { const showClear = clearable && !loading return ( {children} {loading ? ( ) : showClear ? ( { e.stopPropagation() onClear?.() }} onMouseDown={(e) => { e.stopPropagation() }} > ) : ( )} ) } type SelectContentProps = { children: React.ReactNode placement?: Placement sideOffset?: number alignOffset?: number className?: string popupClassName?: string listClassName?: string positionerProps?: Omit< React.ComponentPropsWithoutRef, 'children' | 'className' | 'side' | 'align' | 'sideOffset' | 'alignOffset' > popupProps?: Omit< React.ComponentPropsWithoutRef, 'children' | 'className' > listProps?: Omit< React.ComponentPropsWithoutRef, 'children' | 'className' > } export function SelectContent({ children, placement = 'bottom-start', sideOffset = 4, alignOffset = 0, className, popupClassName, listClassName, positionerProps, popupProps, listProps, }: SelectContentProps) { const { side, align } = parsePlacement(placement) return ( {children} ) } export function SelectItem({ className, children, ...props }: React.ComponentPropsWithoutRef) { return ( {children} ) }