import type { ReactNode } from 'react' import { cn } from '@langgenius/dify-ui/cn' import { Select, SelectItem, SelectItemIndicator, SelectItemText, SelectList, SelectPopup, SelectPortal, SelectPositioner, SelectTrigger, } from '@langgenius/dify-ui/select' import { useTranslation } from 'react-i18next' type ItemValue = number | string export type Item = { value: T name: string triggerName?: string } & Record type Props = { className?: string panelClassName?: string showLeftIcon?: boolean leftIcon?: ReactNode showItemIndicator?: boolean value: T items: Item[] onSelect: (item: Item) => void onClear: () => void } function Chip({ className, panelClassName, showLeftIcon = true, leftIcon, showItemIndicator = true, value, items, onSelect, onClear, }: Props) { const { t } = useTranslation() const selectedItem = items.find((item) => Object.is(item.value, value)) const triggerContent = selectedItem?.triggerName || selectedItem?.name || '' const hasValue = selectedItem !== undefined && value !== '' const clearLabel = triggerContent ? `${t(($) => $['operation.clear'], { ns: 'common' })} ${triggerContent}` : t(($) => $['operation.clear'], { ns: 'common' }) return ( value={selectedItem?.value ?? null} itemToStringLabel={(itemValue: T) => items.find((item) => Object.is(item.value, itemValue))?.name ?? '' } itemToStringValue={(itemValue) => String(itemValue)} onValueChange={(nextValue) => { if (nextValue === null) return const selected = items.find((item) => Object.is(item.value, nextValue)) if (selected) onSelect(selected) }} >
$['placeholder.select'], { ns: 'common' })} className={cn( 'h-auto min-h-8 w-fit max-w-full cursor-pointer items-center rounded-lg border-[0.5px] border-transparent bg-components-input-bg-normal px-2 py-1 hover:bg-state-base-hover-alt data-popup-open:bg-state-base-hover-alt! data-popup-open:hover:bg-state-base-hover-alt [&>*:last-child]:hidden', hasValue && 'border-components-button-secondary-border! bg-components-button-secondary-bg! pr-6 shadow-xs hover:border-components-button-secondary-border-hover hover:bg-components-button-secondary-bg-hover! data-popup-open:border-components-button-secondary-border-hover! data-popup-open:bg-components-button-secondary-bg-hover! data-popup-open:hover:border-components-button-secondary-border-hover data-popup-open:hover:bg-components-button-secondary-bg-hover!', className, )} > {showLeftIcon && ( {hasValue && ( )} {items.map((item) => ( key={item.value} value={item.value}> {item.name} {showItemIndicator && } ))}
) } export default Chip