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 { TruncatedTextWithTooltip } from '../common' import { ChevronDown } from 'lucide-react' import { SingleSelectV2Size, SingleSelectV2Variant, type SelectV2TriggerDimensions, } from './singleSelectV2.types' import type { SingleSelectV2TokensType } from './singleSelectV2.tokens' export type SingleSelectV2TriggerProps = { size: SingleSelectV2Size selected: string label: string name: string placeholder: string required: boolean valueLabelMap: Record open: boolean slot?: React.ReactNode variant: SingleSelectV2Variant isSmallScreenWithLargeSize: boolean isItemSelected: boolean singleSelectTokens: SingleSelectV2TokensType inline?: boolean error?: boolean disabled?: boolean triggerDimensions?: SelectV2TriggerDimensions singleSelectGroupPosition?: 'center' | 'left' | 'right' borderRadius?: string borderRight?: string [key: string]: unknown } const DEFAULT_TRIGGER_DIMENSIONS: SelectV2TriggerDimensions = { width: 'auto', minWidth: 'auto', maxWidth: 'auto', } const SingleSelectV2Trigger = ({ triggerDimensions = DEFAULT_TRIGGER_DIMENSIONS, size, selected, label, name, placeholder, required, valueLabelMap, open, slot, variant, isSmallScreenWithLargeSize, isItemSelected, singleSelectTokens, inline = false, error, disabled, singleSelectGroupPosition: _singleSelectGroupPosition, borderRadius, borderRight, ...rest }: SingleSelectV2TriggerProps) => { void _singleSelectGroupPosition const slotRef = useRef(null) const slotWidth = slotRef.current?.offsetWidth const fallbackPadding = { top: '0px', right: '0px', bottom: '0px', left: '0px', } const triggerTokens = singleSelectTokens?.trigger const labelDisabledColor = singleSelectTokens?.label?.color?.disabled const placeholderTokens = triggerTokens?.placeholder ?? { color: 'inherit', fontSize: '14px', fontWeight: 400, } const selectedValueTokens = triggerTokens?.selectedValue ?? { color: 'inherit', fontSize: '14px', fontWeight: 400, } const variantOutlineTokens = triggerTokens?.outline?.[variant] ?? { open: 'none', closed: 'none', hover: 'none', focus: 'none', error: 'none', } const variantBackgroundTokens = triggerTokens?.backgroundColor?.[ variant ] ?? { open: 'transparent', closed: 'transparent', hover: 'transparent', focus: 'transparent', error: 'transparent', } const triggerHeight = triggerTokens?.height?.[size]?.[variant] ?? 'auto' const padding = triggerTokens?.padding?.[size]?.[variant] ?? fallbackPadding const paddingLeft = toPixels(padding.left) const paddingRight = toPixels(padding.right) const paddingTop = toPixels(padding.top) const paddingBottom = toPixels(padding.bottom) const paddingInlineStart = slot && slotWidth ? paddingLeft + slotWidth + 8 : paddingLeft const isContainer = variant === SingleSelectV2Variant.CONTAINER const resolvedBorderRadius = borderRadius ?? triggerTokens?.borderRadius?.[size]?.[variant] ?? '0px' return ( {slot && ( {slot} )} {isSmallScreenWithLargeSize && isContainer ? ( {selected && ( )} ) : ( )} ) } export default SingleSelectV2Trigger