{"version":3,"file":"CircularProgress.cjs","sources":["../../../../src/components/feedback/progress/CircularProgress.tsx"],"sourcesContent":["import {\r\n    PROGRESS_SIZE_TO_CIRCULAR_SIZE,\r\n    PROGRESS_SIZE_TO_STROKE_WIDTH,\r\n} from '@components/feedback/progress/constants'\r\nimport { PROGRESS_STYLES } from '@components/feedback/progress/styles/Progress.css.ts'\r\nimport type { ProgressBaseProps, ProgressRenderProps } from '@components/feedback/progress/types/Progress.props.ts'\r\nimport { Box } from '@components/layout/box'\r\nimport { Typography } from '@components/foundation/typography'\r\nimport { cn } from '@utils/cn.ts'\r\nimport { memo, type FC } from 'react'\r\nimport { clamp } from '@components/feedback/progress/utils/clamp.utils.ts'\r\n\r\n/**\r\n * Circular SVG `role=\"progressbar\"` with an optional center quantity label\r\n * and an outer text label. Shares `size` (xs|sm|md|lg|xl) and `color` tokens\r\n * with `Progress`. Requires an accessible name via `label`, `aria-label`, or\r\n * `aria-labelledby`.\r\n */\r\nconst CircularProgress: FC<ProgressBaseProps> = memo<ProgressRenderProps>(({\r\n    value,\r\n    color,\r\n    size = 'sm',\r\n    label,\r\n    'aria-label': ariaLabel,\r\n    'aria-labelledby': ariaLabelledBy,\r\n    quantityLabel,\r\n    className,\r\n    ref,\r\n    ...props\r\n}) => {\r\n    const clampedValue = clamp(value)\r\n    const resolvedQuantityLabel =\r\n    quantityLabel === true ? `${Math.round(clampedValue)}%` : quantityLabel\r\n    const valueText = resolvedQuantityLabel ?? `${clampedValue}%`\r\n\r\n    const svgSize = PROGRESS_SIZE_TO_CIRCULAR_SIZE[size]\r\n    const strokeWidth = PROGRESS_SIZE_TO_STROKE_WIDTH[size]\r\n    const radius = (svgSize - strokeWidth) / 2\r\n    const circumference = 2 * Math.PI * radius\r\n    const dashOffset = circumference * (1 - clampedValue / 100)\r\n\r\n    return (\r\n        <Box\r\n            ref={ref}\r\n            display={'inline-flex'}\r\n            flexDirection={'column'}\r\n            alignItems={'center'}\r\n            justifyContent={'center'}\r\n            gap={'xs'}\r\n            className={className}\r\n            {...props}\r\n        >\r\n            <Box\r\n                as={'div'}\r\n                position={'relative'}\r\n                display={'inline-flex'}\r\n                alignItems={'center'}\r\n                justifyContent={'center'}\r\n            >\r\n                <svg\r\n                    role={'progressbar'}\r\n                    aria-valuenow={clampedValue}\r\n                    aria-valuemin={0}\r\n                    aria-valuemax={100}\r\n                    aria-valuetext={valueText}\r\n                    aria-label={label ?? ariaLabel}\r\n                    aria-labelledby={ariaLabelledBy}\r\n                    viewBox={`0 0 ${svgSize} ${svgSize}`}\r\n                    className={cn(PROGRESS_STYLES.circular({ size }))}\r\n                >\r\n                    <circle\r\n                        data-progress-track\r\n                        cx={svgSize / 2}\r\n                        cy={svgSize / 2}\r\n                        r={radius}\r\n                        className={cn(PROGRESS_STYLES.circularTrack({ size, color }))}\r\n                    />\r\n                    <circle\r\n                        data-progress-indicator\r\n                        cx={svgSize / 2}\r\n                        cy={svgSize / 2}\r\n                        r={radius}\r\n                        className={cn(PROGRESS_STYLES.circularIndicator({ size, color }))}\r\n                        style={{\r\n                            strokeDasharray: circumference,\r\n                            strokeDashoffset: dashOffset,\r\n                        }}\r\n                    />\r\n                </svg>\r\n                {resolvedQuantityLabel && (\r\n                    <Box\r\n                        as={'div'}\r\n                        position={'absolute'}\r\n                        display={'flex'}\r\n                        alignItems={'center'}\r\n                        justifyContent={'center'}\r\n                        style={{ inset: 0 }}\r\n                    >\r\n                        <Typography\r\n                            as={'span'}\r\n                            variant={'span'}\r\n                            fontSize={size === 'sm' ? 'xs' : size === 'lg' ? 'lg' : 'sm'}\r\n                            fontWeight={'semibold'}\r\n                            color={'text'}\r\n                        >\r\n                            {resolvedQuantityLabel}\r\n                        </Typography>\r\n                    </Box>\r\n                )}\r\n            </Box>\r\n            {label && (\r\n                <Typography\r\n                    as={'span'}\r\n                    variant={'span'}\r\n                    fontSize={'sm'}\r\n                    color={'textSecondary'}\r\n                >\r\n                    {label}\r\n                </Typography>\r\n            )}\r\n        </Box>\r\n    )\r\n})\r\n\r\nCircularProgress.displayName = 'CircularProgress'\r\n\r\nexport default CircularProgress\r\n"],"names":["CircularProgress","memo","value","color","size","label","ariaLabel","ariaLabelledBy","quantityLabel","className","ref","props","clampedValue","clamp","resolvedQuantityLabel","valueText","svgSize","PROGRESS_SIZE_TO_CIRCULAR_SIZE","strokeWidth","PROGRESS_SIZE_TO_STROKE_WIDTH","radius","circumference","dashOffset","jsxs","Box","cn","PROGRESS_STYLES","jsx","Typography"],"mappings":"qfAkBMA,EAA0CC,EAAAA,KAA0B,CAAC,CACvE,MAAAC,EACA,MAAAC,EACA,KAAAC,EAAO,KACP,MAAAC,EACA,aAAcC,EACd,kBAAmBC,EACnB,cAAAC,EACA,UAAAC,EACA,IAAAC,EACA,GAAGC,CACP,IAAM,CACF,MAAMC,EAAeC,EAAAA,MAAMX,CAAK,EAC1BY,EACNN,IAAkB,GAAO,GAAG,KAAK,MAAMI,CAAY,CAAC,IAAMJ,EACpDO,EAAYD,GAAyB,GAAGF,CAAY,IAEpDI,EAAUC,EAAAA,+BAA+Bb,CAAI,EAC7Cc,EAAcC,EAAAA,8BAA8Bf,CAAI,EAChDgB,GAAUJ,EAAUE,GAAe,EACnCG,EAAgB,EAAI,KAAK,GAAKD,EAC9BE,EAAaD,GAAiB,EAAIT,EAAe,KAEvD,OACIW,EAAAA,KAACC,EAAA,CACG,IAAAd,EACA,QAAS,cACT,cAAe,SACf,WAAY,SACZ,eAAgB,SAChB,IAAK,KACL,UAAAD,EACC,GAAGE,EAEJ,SAAA,CAAAY,EAAAA,KAACC,EAAA,CACG,GAAI,MACJ,SAAU,WACV,QAAS,cACT,WAAY,SACZ,eAAgB,SAEhB,SAAA,CAAAD,EAAAA,KAAC,MAAA,CACG,KAAM,cACN,gBAAeX,EACf,gBAAe,EACf,gBAAe,IACf,iBAAgBG,EAChB,aAAYV,GAASC,EACrB,kBAAiBC,EACjB,QAAS,OAAOS,CAAO,IAAIA,CAAO,GAClC,UAAWS,EAAAA,GAAGC,EAAAA,gBAAgB,SAAS,CAAE,KAAAtB,CAAA,CAAM,CAAC,EAEhD,SAAA,CAAAuB,EAAAA,IAAC,SAAA,CACG,sBAAmB,GACnB,GAAIX,EAAU,EACd,GAAIA,EAAU,EACd,EAAGI,EACH,UAAWK,EAAAA,GAAGC,EAAAA,gBAAgB,cAAc,CAAE,KAAAtB,EAAM,MAAAD,EAAO,CAAC,CAAA,CAAA,EAEhEwB,EAAAA,IAAC,SAAA,CACG,0BAAuB,GACvB,GAAIX,EAAU,EACd,GAAIA,EAAU,EACd,EAAGI,EACH,UAAWK,EAAAA,GAAGC,kBAAgB,kBAAkB,CAAE,KAAAtB,EAAM,MAAAD,CAAA,CAAO,CAAC,EAChE,MAAO,CACH,gBAAiBkB,EACjB,iBAAkBC,CAAA,CACtB,CAAA,CACJ,CAAA,CAAA,EAEHR,GACGa,EAAAA,IAACH,EAAA,CACG,GAAI,MACJ,SAAU,WACV,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,MAAO,CAAE,MAAO,CAAA,EAEhB,SAAAG,EAAAA,IAACC,EAAA,CACG,GAAI,OACJ,QAAS,OACT,SAAUxB,IAAS,KAAO,KAAOA,IAAS,KAAO,KAAO,KACxD,WAAY,WACZ,MAAO,OAEN,SAAAU,CAAA,CAAA,CACL,CAAA,CACJ,CAAA,CAAA,EAGPT,GACGsB,EAAAA,IAACC,EAAA,CACG,GAAI,OACJ,QAAS,OACT,SAAU,KACV,MAAO,gBAEN,SAAAvB,CAAA,CAAA,CACL,CAAA,CAAA,CAIhB,CAAC,EAEDL,EAAiB,YAAc"}