import { Box, Slider, SvgIcon, useTheme } from '@mui/material';
import React, { useState } from 'react';
export const Spinner = () => {
const theme = useTheme();
const [value, setValue] = useState(50);
const radius = 50 - strokeWidth / 2;
const circumference = 2 * Math.PI * radius;
const lineCap = strokeWidth / 2;
const reversedValue = 100 - value;
const reversedRotation = 360 * (value / 100);
const minSegmentPercentForFullGap = ((gap + lineCap * 2) / circumference) * 100;
const effectiveGap = gap * Math.max(0, Math.min(1, Math.min(value, reversedValue) / minSegmentPercentForFullGap));
const dashLength = Math.max((value / 100) * circumference - effectiveGap - lineCap * 2, 0);
const dashOffset = -(lineCap + effectiveGap);
const reversedDashLength = Math.max((reversedValue / 100) * circumference - effectiveGap - lineCap * 2, 0);
{(reversedDashLength > 0 || value === 0) && (
stroke={theme.palette.onSurface.os100}
strokeWidth={strokeWidth}
strokeDasharray={`${reversedDashLength} ${circumference}`}
strokeDashoffset={dashOffset}
transform={`rotate(${reversedRotation} 50 50)`}
strokeDashoffset: 'none',
{(dashLength > 0 || value === 100) && (
stroke={theme.palette.brand.primary}
strokeWidth={strokeWidth}
strokeDasharray={`${dashLength} ${circumference}`}
strokeDashoffset={dashOffset}
strokeDashoffset: 'none',
<Box sx={{ width: '500px' }}>
<Slider value={value ?? 0} onChange={(_, nw) => setValue(nw as number)} />