import { jsx } from "react/jsx-runtime";
import * as React from "react";
import { c as createContextScope } from "../../index-voAj_M6Q.js";
import { P as Primitive } from "../../index-BEpjRf6p.js";
import { c as cva } from "../../index-BHpUy2Ix.js";
import { c as cn } from "../../cn-FAaWYZ6x.js";
var PROGRESS_NAME = "Progress";
var DEFAULT_MAX = 100;
var [createProgressContext, createProgressScope] = createContextScope(PROGRESS_NAME);
var [ProgressProvider, useProgressContext] = createProgressContext(PROGRESS_NAME);
var Progress = React.forwardRef(
  (props, forwardedRef) => {
    const {
      __scopeProgress,
      value: valueProp = null,
      max: maxProp,
      getValueLabel = defaultGetValueLabel,
      ...progressProps
    } = props;
    if ((maxProp || maxProp === 0) && !isValidMaxNumber(maxProp)) {
      console.error(getInvalidMaxError(`${maxProp}`, "Progress"));
    }
    const max = isValidMaxNumber(maxProp) ? maxProp : DEFAULT_MAX;
    if (valueProp !== null && !isValidValueNumber(valueProp, max)) {
      console.error(getInvalidValueError(`${valueProp}`, "Progress"));
    }
    const value = isValidValueNumber(valueProp, max) ? valueProp : null;
    const valueLabel = isNumber(value) ? getValueLabel(value, max) : void 0;
    return /* @__PURE__ */ jsx(ProgressProvider, { scope: __scopeProgress, value, max, children: /* @__PURE__ */ jsx(
      Primitive.div,
      {
        "aria-valuemax": max,
        "aria-valuemin": 0,
        "aria-valuenow": isNumber(value) ? value : void 0,
        "aria-valuetext": valueLabel,
        role: "progressbar",
        "data-state": getProgressState(value, max),
        "data-value": value ?? void 0,
        "data-max": max,
        ...progressProps,
        ref: forwardedRef
      }
    ) });
  }
);
Progress.displayName = PROGRESS_NAME;
var INDICATOR_NAME = "ProgressIndicator";
var ProgressIndicator = React.forwardRef(
  (props, forwardedRef) => {
    const { __scopeProgress, ...indicatorProps } = props;
    const context = useProgressContext(INDICATOR_NAME, __scopeProgress);
    return /* @__PURE__ */ jsx(
      Primitive.div,
      {
        "data-state": getProgressState(context.value, context.max),
        "data-value": context.value ?? void 0,
        "data-max": context.max,
        ...indicatorProps,
        ref: forwardedRef
      }
    );
  }
);
ProgressIndicator.displayName = INDICATOR_NAME;
function defaultGetValueLabel(value, max) {
  return `${Math.round(value / max * 100)}%`;
}
function getProgressState(value, maxValue) {
  return value == null ? "indeterminate" : value === maxValue ? "complete" : "loading";
}
function isNumber(value) {
  return typeof value === "number";
}
function isValidMaxNumber(max) {
  return isNumber(max) && !isNaN(max) && max > 0;
}
function isValidValueNumber(value, max) {
  return isNumber(value) && !isNaN(value) && value <= max && value >= 0;
}
function getInvalidMaxError(propValue, componentName) {
  return `Invalid prop \`max\` of value \`${propValue}\` supplied to \`${componentName}\`. Only numbers greater than 0 are valid max values. Defaulting to \`${DEFAULT_MAX}\`.`;
}
function getInvalidValueError(propValue, componentName) {
  return `Invalid prop \`value\` of value \`${propValue}\` supplied to \`${componentName}\`. The \`value\` prop must be:
  - a positive number
  - less than the value passed to \`max\` (or ${DEFAULT_MAX} if no \`max\` prop is set)
  - \`null\` or \`undefined\` if the progress is indeterminate.

Defaulting to \`null\`.`;
}
var Root = Progress;
var Indicator = ProgressIndicator;
const progressBarVariants = cva(
  "relative w-full overflow-hidden bg-muted h-2 rounded-full",
  {
    variants: {
      mood: {
        default: "",
        neutral: "",
        success: "",
        warning: "",
        danger: ""
      }
    },
    defaultVariants: {
      mood: "default"
    }
  }
);
const progressBarIndicatorVariants = cva(
  "h-full w-full flex-1 transition-all",
  {
    variants: {
      mood: {
        default: "bg-accent",
        neutral: "bg-gray-600 dark:bg-gray-400",
        success: "bg-emerald-600 dark:bg-emerald-500",
        warning: "bg-amber-600 dark:bg-amber-500",
        danger: "bg-destructive"
      }
    },
    defaultVariants: {
      mood: "default"
    }
  }
);
const getColorForProgress = (progress, colors) => {
  if (colors.length === 0) return "currentColor";
  if (colors.length === 1) return colors[0];
  if (progress <= 0) return colors[0];
  if (progress >= 100) return colors[colors.length - 1];
  const segmentSize = 100 / (colors.length - 1);
  const segmentIndex = Math.floor(progress / segmentSize);
  const segmentProgress = progress % segmentSize / segmentSize;
  const startColorIndex = Math.min(segmentIndex, colors.length - 2);
  const endColorIndex = startColorIndex + 1;
  return segmentProgress < 0.5 ? colors[startColorIndex] : colors[endColorIndex];
};
const ProgressBar = ({
  className,
  value,
  mood = "default",
  colors,
  ...props
}) => {
  const filteredClassName = className?.split(" ").filter(
    (cls) => !cls.startsWith("h-") && !cls.startsWith("min-h-") && !cls.startsWith("max-h-") && !cls.includes("height")
  ).join(" ") || "";
  const progressValue = value || 0;
  const dynamicColor = colors ? getColorForProgress(progressValue, colors) : null;
  return /* @__PURE__ */ jsx(
    Root,
    {
      "data-slot": "progress",
      className: cn(progressBarVariants({ mood }), filteredClassName),
      ...props,
      children: /* @__PURE__ */ jsx(
        Indicator,
        {
          "data-slot": "progress-indicator",
          className: dynamicColor ? "h-full w-full flex-1 transition-all" : progressBarIndicatorVariants({ mood }),
          style: {
            transform: `translateX(-${100 - progressValue}%)`,
            backgroundColor: dynamicColor ?? void 0
          }
        }
      )
    }
  );
};
export {
  ProgressBar
};
