/* eslint-disable max-lines-per-function */ import { forwardRef, memo } from "react"; import { pxToRem } from "../../utils"; import { StyledStepsList, StyledRoot, StyledStepIndicator, StyledStep, StyledStepLabel, } from "./progress-bar.styled"; import { useProgressBar } from "./use-progress-bar"; type Step = { label: string; value: string | number; }; interface Props { /** * The Steps of the ProgressBar */ steps: Array; /** * Sets the currently selected step */ value: string | number; /** * Aria label applied to the steps list */ ariaLabel?: string; } /** * Use this component to give the user an overview of steps in a flow. */ const ProgressBarComponent = forwardRef( ({ steps, value, ariaLabel }, ref) => { const { currentStep, dotXpositions, shouldOverrideScrollbars, firstStepRef, isResizing } = useProgressBar({ steps, value, }); return ( 0 ? pxToRem(dotXpositions[currentStep]! - dotXpositions[0]!) : 0, }, }} data-show-scrollbars={String(shouldOverrideScrollbars)} > 1 ? "visible" : "hidden", }} animate={!isResizing} /> {steps.map((step, i) => { const props = i ? {} : { ref: firstStepRef }; return ( {step.label} ); })} ); } ); ProgressBarComponent.displayName = "ProgressBar"; export const ProgressBar = memo(ProgressBarComponent);