{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "circular-progress", "type": "registry:ui", "registryDependencies": [ "https://wigggle-ui.vercel.app/r/utils.json" ], "files": [ { "path": "registry/default/ui/circular-progress.tsx", "content": "\"use client\";\r\n\r\nimport React from \"react\";\r\n\r\ntype Props = {\r\n percentageComplete: number;\r\n taskType: string;\r\n ringColor?: string;\r\n};\r\n\r\nfunction CircularProgress({\r\n percentageComplete,\r\n taskType,\r\n ringColor = \"stroke-blue-600\",\r\n ...props\r\n}: React.ComponentProps<\"div\"> & Props) {\r\n const radius = 16;\r\n const circumference = 2 * Math.PI * radius;\r\n\r\n // Start animation from 0\r\n const [offset, setOffset] = React.useState(circumference);\r\n\r\n React.useEffect(() => {\r\n const finalOffset =\r\n circumference - (percentageComplete / 100) * circumference;\r\n\r\n // small delay so the transition triggers\r\n requestAnimationFrame(() => setOffset(finalOffset));\r\n }, [percentageComplete]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n {/* Background */}\r\n \r\n\r\n {/* Animated Progress */}\r\n \r\n \r\n\r\n {/* Center Text */}\r\n
\r\n

{percentageComplete}%

\r\n
\r\n
\r\n

{taskType}

\r\n
\r\n );\r\n}\r\n\r\nexport { CircularProgress };\r\n", "type": "registry:ui" } ] }