import React, { forwardRef, useCallback, useRef, useState, useEffect, useId, } from 'react' import Block from '../Primitives/Block/Block' import Text from '../Text/Text' import StepperLine from './StepperLine' import { Check, InfoIcon, Lock } from 'lucide-react' import { StepperProps, StepProps, StepState } from './types' import { StepperTokensType } from './stepper.tokens' import { useResponsiveTokens } from '../../hooks/useResponsiveTokens' import { Tooltip } from '../Tooltip' const StepComponent = forwardRef< HTMLDivElement, StepProps & { onKeyDown?: (event: React.KeyboardEvent, stepIndex: number) => void stepperInstanceId: string } >( ( { step, stepIndex, isCompleted, isCurrent, isFirst, isLast, onClick, clickable, onKeyDown, stepperInstanceId, }, ref ) => { const stepperTokens = useResponsiveTokens('STEPPER') const getStepState = (): StepState => { if (step.disabled) return StepState.DISABLED if (step.status) return step.status if (isCompleted) return StepState.COMPLETED if (isCurrent) return StepState.CURRENT return StepState.PENDING } const stepState = getStepState() const isClickable = clickable && !step.disabled && onClick const handleClick = useCallback(() => { if (isClickable) { onClick!(stepIndex) } }, [isClickable, onClick, stepIndex]) const handleKeyDown = useCallback( (event: React.KeyboardEvent) => { if (!isClickable) return switch (event.key) { case 'Enter': case ' ': event.preventDefault() onClick!(stepIndex) break case 'ArrowRight': case 'ArrowLeft': case 'Home': case 'End': // Navigation handled by parent component if (onKeyDown) { onKeyDown(event, stepIndex) } break } }, [isClickable, onClick, stepIndex, onKeyDown] ) const renderStepIcon = () => { if (step.icon) return step.icon switch (stepState) { case StepState.COMPLETED: return (