DocsCloud UI PrimitiveSemicircleprogress

SemiCircleProgress

SemiCircleProgress displays progress with a semi-circular diagram, useful for dashboards and status indicators.

Import

import { SemiCircleProgress } from '@tidbcloud/uikit'

Basic Usage

import { SemiCircleProgress } from '@tidbcloud/uikit'
 
function Demo() {
  return <SemiCircleProgress value={40} label="40%" />
}

Size and Thickness

import { SemiCircleProgress } from '@tidbcloud/uikit'
 
function Demo() {
  return <SemiCircleProgress value={60} size={200} thickness={12} label="60%" />
}

Custom Colors

import { SemiCircleProgress } from '@tidbcloud/uikit'
 
function Demo() {
  return <SemiCircleProgress value={30} filledSegmentColor="blue" emptySegmentColor="var(--mantine-color-dimmed)" />
}

Label Position

By default, label is at the bottom. Use labelPosition="center" to center it:

import { SemiCircleProgress } from '@tidbcloud/uikit'
 
function Demo() {
  return (
    <>
      <SemiCircleProgress value={30} label="Bottom" mb="xl" />
      <SemiCircleProgress value={30} label="Center" labelPosition="center" />
    </>
  )
}

Fill Direction

Control which direction the progress fills from:

import { SemiCircleProgress } from '@tidbcloud/uikit'
 
function Demo() {
  return (
    <>
      <SemiCircleProgress value={50} fillDirection="left-to-right" label="Left to Right" />
      <SemiCircleProgress value={50} fillDirection="right-to-left" label="Right to Left" />
    </>
  )
}

Orientation

import { SemiCircleProgress } from '@tidbcloud/uikit'
 
function Demo() {
  return (
    <>
      <SemiCircleProgress value={50} orientation="up" label="Up" />
      <SemiCircleProgress value={50} orientation="down" label="Down" />
    </>
  )
}

Animated Transitions

import { useState } from 'react'
import { Button, SemiCircleProgress } from '@tidbcloud/uikit'
 
function Demo() {
  const [value, setValue] = useState(30)
 
  return (
    <>
      <SemiCircleProgress value={value} transitionDuration={250} label={`${value}%`} />
      <Button onClick={() => setValue(Math.floor(Math.random() * 100))} mt="xl">
        Set random value
      </Button>
    </>
  )
}

Key Props

PropTypeDefaultDescription
valuenumberrequiredProgress value from 0 to 100
sizenumber200Diameter of the SVG in px
thicknessnumber12Circle thickness in px
labelReactNode-Label rendered inside the circle
labelPosition'center' | 'bottom''bottom'Label position relative to circle center
filledSegmentColorMantineColor-Color of the filled segment
emptySegmentColorMantineColor-Color of the empty segment
fillDirection'left-to-right' | 'right-to-left''left-to-right'Direction the circle fills from
orientation'up' | 'down''up'Orientation of the circle
transitionDurationnumber0Transition duration in ms for animated changes