'use client' import type { VariantProps } from 'class-variance-authority' import type { ReactNode } from 'react' import type { Placement } from '@/app/components/base/ui/placement' import { Select as BaseSelect } from '@base-ui/react/select' import { cn } from '@langgenius/dify-ui/cn' import { cva } from 'class-variance-authority' import { overlayLabelClassName, overlaySeparatorClassName, } from '@/app/components/base/ui/overlay-shared' import { parsePlacement } from '@/app/components/base/ui/placement' export const Select = BaseSelect.Root export const SelectValue = BaseSelect.Value /** @public */ export const SelectGroup = BaseSelect.Group const selectTriggerVariants = cva( [ 'group flex w-full items-center border-0 bg-components-input-bg-normal text-left text-components-input-text-filled outline-hidden', 'hover:bg-state-base-hover-alt focus-visible:bg-state-base-hover-alt', 'data-placeholder:text-components-input-text-placeholder', 'data-readonly:cursor-default data-readonly:bg-transparent data-readonly:hover:bg-transparent', 'data-disabled:cursor-not-allowed data-disabled:bg-components-input-bg-disabled data-disabled:text-components-input-text-filled-disabled data-disabled:hover:bg-components-input-bg-disabled', 'data-disabled:data-placeholder:text-components-input-text-disabled', ], { variants: { size: { small: 'h-6 gap-px rounded-md px-2 py-1 system-xs-regular', medium: 'h-8 gap-0.5 rounded-lg px-3 py-2 system-sm-regular', large: 'h-9 gap-0.5 rounded-[10px] px-4 py-2 system-md-regular', }, }, defaultVariants: { size: 'medium', }, }, ) type SelectTriggerProps = Omit & VariantProps & { className?: string } export function SelectTrigger({ className, children, size, ...props }: SelectTriggerProps) { return ( {children} ) } export function SelectLabel({ className, ...props }: BaseSelect.GroupLabel.Props) { return ( ) } /** @public */ export function SelectSeparator({ className, ...props }: BaseSelect.Separator.Props) { return ( ) } type SelectContentProps = { children: ReactNode placement?: Placement sideOffset?: number alignOffset?: number className?: string popupClassName?: string listClassName?: string positionerProps?: Omit< BaseSelect.Positioner.Props, 'children' | 'className' | 'side' | 'align' | 'sideOffset' | 'alignOffset' > popupProps?: Omit< BaseSelect.Popup.Props, 'children' | 'className' > listProps?: Omit< BaseSelect.List.Props, '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, ...props }: BaseSelect.Item.Props) { return ( ) } export function SelectItemText({ className, ...props }: BaseSelect.ItemText.Props) { return ( ) } export function SelectItemIndicator({ className, ...props }: Omit) { return ( ) }