react ~6 KB 0 deps v0.4.0 ↗ GitHub ↗

@mshafiqyajid/react-progress

Headless progress hook, styled progress bar and circular ring. Indeterminate state, 5 tones, sizes, animated stripe, value display.

Playground #

Progress
Props
TSX
import { ProgressBar } from "@mshafiqyajid/react-progress/styled";
import "@mshafiqyajid/react-progress/styles.css";

<ProgressBar
  tone="primary"
/>
sections — proportional coloured segments
bufferValue — ghost buffered track
Upload
Props
TSX
import { ProgressCircle } from "@mshafiqyajid/react-progress/styled";
import "@mshafiqyajid/react-progress/styles.css";

<ProgressCircle
  label="Upload"
  tone="primary"
/>
ProgressCircleStack — concentric activity rings
  • Move82%
  • Exercise64%
  • Stand47%

Install #

npm install @mshafiqyajid/react-progress

Quick start #

import { ProgressBar, ProgressCircle } from "@mshafiqyajid/react-progress/styled";
import "@mshafiqyajid/react-progress/styles.css";

<ProgressBar value={75} tone="primary" showValue />
<ProgressBar tone="success" animated /> {/* indeterminate */}
<ProgressCircle value={60} tone="primary" showValue />

Headless #

import { useProgress } from "@mshafiqyajid/react-progress";

const { progressProps, percent, isComplete, isIndeterminate } = useProgress({
  value: 65,
});

return (
  <div {...progressProps} className="my-bar">
    <div className="my-bar__fill" style={{ width: `${percent}%` }} />
  </div>
);

ProgressBar API #

PropTypeDefaultDescription
valuenumberProgress value 0–100. Omit for indeterminate
size"sm" | "md" | "lg""md"Height
tone"neutral" | "primary" | "success" | "warning" | "danger""neutral"Color
labelstringAccessible label
showValuebooleanfalseShow percentage text
animatedbooleanfalseAnimated stripe (indeterminate)
roundedbooleantrueRounded ends
segmentsnumberWhen set, renders the bar as N discrete segments (data-filled lands on filled cells).
formatValue(percent, value) => ReactNodeCustom value renderer used when showValue is true.

ProgressCircle API #

PropTypeDefaultDescription
valuenumberProgress value 0–100. Omit for indeterminate spin
size"sm" | "md" | "lg" | number"md"Size (or custom px)
tone"neutral" | "primary" | "success" | "warning" | "danger""neutral"Color
showValuebooleanfalseShow percentage inside ring
strokeWidthnumber4Ring stroke thickness
Edit this page on GitHub