import { CircularProgress, Box, Typography, useTheme, styled } from "@mui/material"; // Типизация для пропсов таймера export interface CircularTimerProps { duration: number; // Общая длительность в секундах remaining: number; // Оставшееся время в секундах showTime?: boolean; // Показывать ли время в формате mm:ss size?: number; // Размер таймера thickness?: number; // Толщина линии прогресса color?: string; // Цвет прогресса } const StyledCircularProgress = styled(CircularProgress)(({ theme }) => ({ "& .MuiCircularProgress-circle": { strokeLinecap: "round", transition: "stroke-dashoffset 0.3s ease", }, })); // Функция для форматирования времени в mm:ss const formatTime = (seconds: number): string => { const minutes = Math.floor(seconds / 60); const remainingSeconds = Math.floor(seconds % 60); return `${minutes.toString().padStart(2, "0")}:${remainingSeconds.toString().padStart(2, "0")}`; }; export const CustomCircularTimer: React.FC = ({ duration, remaining, showTime = true, size = 76, thickness = 4, color, }) => { const theme = useTheme(); const progress = (remaining / duration) * 100; return ( {/* Серый фон */} {/* Основной прогресс */} {/* Центральный контент */} 60 ? "16px" : "12px", fontWeight: 600, color: theme.palette.text.primary, textAlign: "center", lineHeight: 1, }} > {showTime ? formatTime(remaining) : remaining} ); };