import { useMemo } from 'react' import { ProgressBarV2Appearance } from './progressBarV2.types' import { CircularProgressBarV2Props } from './progressBarV2.types' import { getProgressBarValueState, getCircularDimensions, calculateCircularProgressStroke, parseCircularDashToken, } from './utils' import Block from '../Primitives/Block/Block' import Text from '../Text/Text' export const CircularProgressBarV2 = ({ value, size, appearance, tokens, showLabel, ariaLabel, ariaLabelledby, min, max, }: CircularProgressBarV2Props) => { const { rangeMin, rangeMax, clampedValue, percentage } = useMemo( () => getProgressBarValueState(value, min, max), [value, min, max] ) const { circularSize, strokeWidth, radius, center, circumference } = useMemo(() => getCircularDimensions(size, tokens), [size, tokens]) const [segmentLen, gapLen] = useMemo( () => parseCircularDashToken( tokens.circular.dashArray[ProgressBarV2Appearance.SEGMENTED] ), [tokens] ) const trackDashArray = appearance === ProgressBarV2Appearance.SEGMENTED ? `${segmentLen} ${gapLen}` : undefined const { strokeDasharray, strokeDashoffset } = useMemo( () => calculateCircularProgressStroke(circumference, percentage), [circumference, percentage] ) return ( {showLabel && ( )} ) }