{"version":3,"sources":["../src/RadiantProgressBar.tsx"],"names":["useState","useEffect","useMemo","useId","React"],"mappings":"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","file":"index.cjs","sourcesContent":["import React, { useId } from \"react\";\nimport { useEffect, useState, useMemo, type HTMLAttributes, type ReactNode } from \"react\";\nimport type { CSSProperties } from \"react\";\n\nexport interface RadiantProgressBarProps\n  extends Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"style\"> {\n  className?: string;\n  barColor?: string;\n  pathColor?: string;\n  barGradients?: string[];\n  percentage: number;\n  speed?: number;\n  size?: number;\n  showCount?: boolean;\n  direction?: 'clockwise' | 'counterclockwise';\n  children?: ReactNode | ((count: number) => ReactNode);\n  style?: CSSProperties | ((count: number) => CSSProperties);\n}\n\nconst generateConicGradient = (\n  count: number,\n  barColor?: string,\n  barGradients?: string[],\n  pathColor?: string\n): string => {\n  const degrees = count * 3.6;\n\n  if (barColor) {\n    return `conic-gradient(${barColor} ${degrees}deg, ${pathColor} ${degrees}deg)`;\n  }\n\n  const stops: string[] = [];\n\n  if (barGradients?.[0]) {\n    const firstStop = degrees < 90 ? degrees : barGradients.length === 1 ? degrees : 90;\n    stops.push(`${barGradients[0]} ${firstStop}deg`);\n  }\n\n  if (barGradients?.[1]) {\n    const secondStop = degrees > 90 && degrees < 180 ? degrees : degrees <= 90 ? 0 : barGradients.length === 2 ? degrees : 180;\n    stops.push(`${barGradients[1]} ${secondStop}deg`);\n  }\n\n  if (barGradients?.[2]) {\n    stops.push(`${barGradients[2]} ${degrees}deg`);\n  }\n\n  return `conic-gradient(${stops.join(', ')}, ${pathColor} ${degrees}deg)`;\n};\n\nconst RadiantProgressBar: React.FC<RadiantProgressBarProps> = ({\n  className,\n  barColor,\n  pathColor = '#ffffff00',\n  barGradients = ['red', 'green'],\n  percentage,\n  speed = 25,\n  size = 144,\n  showCount = true,\n  direction = 'clockwise',\n  children,\n  style: propStyle, // Extract `style` explicitly\n  ...restProps\n}) => {\n  const [count, setCount] = useState(0);\n\n  useEffect(() => {\n    setCount(0);\n  }, [percentage]);\n\n  useEffect(() => {\n    const target = Math.min(isNaN(percentage) ? 0 : percentage, 100);\n    const targetCeil = Math.ceil(target);\n    const interval = setInterval(() => {\n      setCount((prev) => {\n        if (prev >= targetCeil) {\n          return prev;\n        }\n        return prev + 1;\n      });\n    }, speed);\n    return () => clearInterval(interval);\n  }, [percentage, speed]);\n\n  const conicGradient = useMemo(\n    () => generateConicGradient(count, barColor, barGradients, pathColor),\n    [count, barColor, barGradients, pathColor]\n  );\n\n  const userStyle = useMemo(\n    () => (typeof propStyle === 'function' ? propStyle(count) : propStyle || {}),\n    [propStyle, count]\n  );\n\n  const renderedChildren = typeof children === 'function' ? children(count) : children;\n\n  // Generate unique ID for scoped styles (SSR-safe)\n  const id = useId();\n  const componentId = `radiant-progress-${id}`.replace(/:/g, '-');\n\n  // Determine inner circle size\n  const hasCustomSize = className?.match(/before:(size|w|h)/);\n  const innerCircleSize = hasCustomSize ? undefined : '75%';\n\n  // Check if user provided size/color via className\n  const hasCustomDimensions = className?.match(/(^|\\s)(w-|h-|size-)/);\n  const hasCustomColor = className?.match(/(^|\\s)(text-)/);\n\n  return (\n    <>\n      <style>\n        {`\n          .${componentId} {\n            ${!hasCustomDimensions ? `width: ${size}px; height: ${size}px;` : ''}\n            border-radius: 50%;\n            position: relative;\n            display: grid;\n            place-items: center;\n            ${!hasCustomColor ? 'color: black;' : ''}\n          }\n          .${componentId}::before {\n            content: '';\n            position: absolute;\n            ${innerCircleSize ? `width: ${innerCircleSize}; height: ${innerCircleSize};` : ''}\n            background: white;\n            border-radius: 50%;\n          }\n        `}\n      </style>\n      <div\n        className={[componentId, className].filter(Boolean).join(' ')}\n        style={{\n          background: conicGradient,\n          transform: direction === 'counterclockwise' ? 'scaleX(-1)' : undefined,\n          ...userStyle\n        }}\n        {...restProps}\n      >\n        <div style={{\n          transform: direction === 'counterclockwise' ? 'scaleX(-1)' : undefined,\n          position: 'relative',\n          zIndex: 10,\n        }}>\n          {renderedChildren}\n          {!renderedChildren && showCount && <p style={{ margin: 0 }}>{count}%</p>}\n        </div>\n      </div>\n    </>\n  );\n};\n\nexport default RadiantProgressBar;"]}