// @flow import React from "react"; import styled, { useTheme } from "styled-components"; const cleanPercentage = (percentage) => { const tooLow = !Number.isFinite(+percentage) || percentage < 0; const tooHigh = percentage > 100; return tooLow ? 0 : tooHigh ? 100 : +percentage; }; const Circle = ({ color, percentage, offset, }: { color: string, percentage?: number, offset: number, }) => { const radius = offset * 0.7; const circumference = 2 * Math.PI * radius; let strokePercentage; if (percentage) { // because the circle is so small, anything greater than 85% appears like 100% percentage = percentage > 85 && percentage < 100 ? 85 : percentage; strokePercentage = percentage ? ((100 - percentage) * circumference) / 100 : 0; } return ( ); }; const CircularProgressBar = ({ percentage, size = 16, }: { percentage: number, size?: number, }) => { const theme = useTheme(); percentage = cleanPercentage(percentage); const offset = Math.floor(size / 2); return ( {percentage > 0 && ( )} ); }; const SVG = styled.svg` flex-shrink: 0; `; export default CircularProgressBar;