{"version":3,"file":"RingProgress.cjs","sources":["../../../src/components/RingProgress/RingProgress.tsx"],"sourcesContent":["import {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  factory,\n  Factory,\n  RaikouColor,\n  rem,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { Curve } from './Curve/Curve';\nimport { getCurves } from './get-curves/get-curves';\nimport {\n  RingProgressCurveStyle,\n  RingProgressLabelStyle,\n  RingProgressRootStyle,\n  RingProgressSvgStyle,\n} from './RingProgress.css';\n\nfunction getClampedThickness(thickness: number, size: number) {\n  return Math.min(thickness || 12, (size || 120) / 4);\n}\n\ninterface RingProgressSection extends React.ComponentPropsWithRef<'circle'> {\n  value: number;\n  color: RaikouColor;\n  tooltip?: React.ReactNode;\n}\n\nexport type RingProgressStylesNames = 'root' | 'svg' | 'label' | 'curve';\nexport type RingProgressCssVariables = {\n  root: '--rp-size' | '--rp-label-offset' | '--rp-transition-duration';\n};\n\nexport interface RingProgressProps\n  extends BoxProps,\n    StylesApiProps<RingProgressFactory>,\n    ElementProps<'div'> {\n  /** Label displayed in the center of the ring */\n  label?: React.ReactNode;\n\n  /** Ring thickness */\n  thickness?: number;\n\n  /** Width and height of the progress ring */\n  size?: number;\n\n  /** Sets whether the edges of the progress circle are rounded */\n  roundCaps?: boolean;\n\n  /** Ring sections */\n  sections: RingProgressSection[];\n\n  /** Color of the root section, key of theme.colors or CSS color value */\n  rootColor?: RaikouColor;\n\n  /** Transition duration of filled section styles changes in ms, `0` by default */\n  transitionDuration?: number;\n}\n\nexport type RingProgressFactory = Factory<{\n  props: RingProgressProps;\n  ref: HTMLDivElement;\n  stylesNames: RingProgressStylesNames;\n  vars: RingProgressCssVariables;\n}>;\n\nconst defaultProps: Partial<RingProgressProps> = {\n  size: 120,\n  thickness: 12,\n};\n\nconst varsResolver = createVarsResolver<RingProgressFactory>(\n  (_, { size, thickness, transitionDuration }) => ({\n    root: {\n      '--rp-size': rem(size),\n      '--rp-label-offset': rem(thickness! * 2),\n      '--rp-transition-duration': transitionDuration ? `${transitionDuration}ms` : undefined,\n    },\n  })\n);\n\nexport const RingProgress = factory<RingProgressFactory>((_props, ref) => {\n  const props = useProps('RingProgress', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    label,\n    sections,\n    size,\n    thickness,\n    roundCaps,\n    rootColor,\n    transitionDuration,\n    ...others\n  } = props;\n\n  const getStyles = useStyles<RingProgressFactory>({\n    name: 'RingProgress',\n    classes: {\n      root: RingProgressRootStyle,\n      svg: RingProgressSvgStyle,\n      curve: RingProgressCurveStyle,\n      label: RingProgressLabelStyle,\n    },\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  const clampedThickness = getClampedThickness(thickness!, size!);\n\n  const curves = getCurves({\n    size: size!,\n    thickness: clampedThickness,\n    sections,\n    renderRoundedLineCaps: roundCaps,\n    rootColor,\n  }).map(({ data, sum, root, lineRoundCaps, offset }, index) => (\n    <Curve\n      {...data}\n      key={index}\n      size={size!}\n      thickness={clampedThickness}\n      sum={sum}\n      offset={offset}\n      color={data?.color}\n      root={root}\n      lineRoundCaps={lineRoundCaps}\n      getStyles={getStyles}\n    />\n  ));\n\n  return (\n    <Box {...getStyles('root')} size={size} ref={ref} {...others}>\n      <svg {...getStyles('svg')}>{curves}</svg>\n      {label && <div {...getStyles('label')}>{label}</div>}\n    </Box>\n  );\n});\n\nRingProgress.displayName = '@raikou/core/RingProgress';\n"],"names":["createVarsResolver","rem","factory","useProps","useStyles","RingProgressRootStyle","RingProgressSvgStyle","RingProgressCurveStyle","RingProgressLabelStyle","getCurves","createElement","Curve","jsxs","Box","jsx"],"mappings":"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"}