import React, { useRef } from 'react' import PrimitiveButton from '../Primitives/PrimitiveButton/PrimitiveButton' import Block from '../Primitives/Block/Block' import { toPixels } from '../../global-utils/GlobalUtils' import FloatingLabels from '../Inputs/utils/FloatingLabels/FloatingLabels' import Text from '../Text/Text' import { ChevronDown } from 'lucide-react' import { SelectMenuSize, SelectMenuVariant } from './types' import { SingleSelectTokensType } from './singleSelect.tokens' import { FOUNDATION_THEME } from '../../tokens' export type SingleSelectTriggerProps = { size: SelectMenuSize selected: string label: string name: string placeholder: string required: boolean valueLabelMap: Record open: boolean onClick?: React.MouseEventHandler slot: React.ReactNode variant: SelectMenuVariant isSmallScreenWithLargeSize: boolean isItemSelected: boolean singleSelectTokens: SingleSelectTokensType inline?: boolean error?: boolean errorMessage?: string disabled?: boolean maxTriggerWidth?: number minTriggerWidth?: number } const SingleSelectTrigger = ({ maxTriggerWidth, minTriggerWidth, size, selected, label, name, placeholder, required, valueLabelMap, open, onClick, slot, variant, isSmallScreenWithLargeSize, isItemSelected, singleSelectTokens, inline = false, error, ...rest }: SingleSelectTriggerProps) => { const slotRef = useRef(null) const slotWidth = slotRef.current?.offsetWidth const borderRadius = singleSelectTokens.trigger.borderRadius[size][variant] const paddingX = toPixels( singleSelectTokens.trigger.padding[size][variant].x ) const paddingY = toPixels( singleSelectTokens.trigger.padding[size][variant].y ) const paddingInlineStart = slot && slotWidth ? paddingX + slotWidth + 8 : paddingX return ( <> {slot && ( {slot} )} {isSmallScreenWithLargeSize && variant === SelectMenuVariant.CONTAINER ? ( {selected && ( {valueLabelMap[selected] || selected} )} ) : ( {selected ? valueLabelMap[selected] || selected : placeholder} )} ) } export default SingleSelectTrigger