Files
Basilosaurusrex f027651f9b main repo
2025-11-24 18:09:40 +01:00

102 lines
3.5 KiB
JavaScript

"use client";
// packages/react/progress/src/Progress.tsx
import * as React from "react";
import { createContextScope } from "@radix-ui/react-context";
import { Primitive } from "@radix-ui/react-primitive";
import { jsx } from "react/jsx-runtime";
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;
export {
Indicator,
Progress,
ProgressIndicator,
Root,
createProgressScope
};
//# sourceMappingURL=index.mjs.map