import { forwardRef, type MouseEvent } from 'react' import { LoaderCircle } from 'lucide-react' import Block from '../Primitives/Block/Block' import Text from '../Text/Text' import type { ButtonV2Props } from './buttonV2.types' import { ButtonV2Size, ButtonV2State, ButtonV2SubType, ButtonV2Type, } from './buttonV2.types' import type { ButtonV2TokensType } from './buttonV2.tokens' import { useResponsiveTokens } from '../../hooks/useResponsiveTokens' import Skeleton from '../Skeleton/Skeleton' import PrimitiveButton from '../Primitives/PrimitiveButton/PrimitiveButton' import { VisuallyHidden } from './VisuallyHidden' import { getButtonV2BorderRadius, getButtonHeight, getButtonStatus, getButtonTabIndex, getButtonStyles, getSkeletonBorderRadius, getSkeletonWidth, getIconMaxHeight, getIconColor, getTextColor, getButtonPadding, getButtonLineHeight, } from './utils' import { getButtonAriaAttributes } from '../../utils/accessibility' type RenderButtonContentProps = { isLoading: boolean isSkeleton: boolean disabled?: boolean state: ButtonV2State buttonType: ButtonV2Type subType: ButtonV2SubType size: ButtonV2Size text?: string leftSlot?: { slot: React.ReactNode maxHeight?: string | number } rightSlot?: { slot: React.ReactNode maxHeight?: string | number } tokens: ButtonV2TokensType } export function renderButtonContent({ isLoading, isSkeleton, disabled, state, buttonType, subType, size, text, leftSlot, rightSlot, tokens, }: RenderButtonContentProps) { const iconMaxHeights = getIconMaxHeight( subType, leftSlot?.maxHeight, rightSlot?.maxHeight, tokens.slotMaxHeight[size] ) const iconColor = getIconColor( isSkeleton, disabled, buttonType, subType, tokens ) const textColor = getTextColor( isSkeleton, disabled, state, buttonType, subType, tokens ) if (isLoading) { // Default loader size based on button size const loaderSizeMap: Record = { [ButtonV2Size.SMALL]: 16, [ButtonV2Size.MEDIUM]: 18, [ButtonV2Size.LARGE]: 20, } const loaderSize = loaderSizeMap[size] || 16 return ( <>