ivt
Version:
Ivt Components Library
100 lines (95 loc) • 4.15 kB
JavaScript
import * as React from 'react';
import React__default from 'react';
import { c as createContextScope } from './index-DT8WgpCS.mjs';
import { P as Primitive } from './index-DgKlJYZP.mjs';
import { jsx } from 'react/jsx-runtime';
import { c as cn } from './utils-05LlW3Cl.mjs';
var PROGRESS_NAME = "Progress";
var DEFAULT_MAX = 100;
var [createProgressContext] = createContextScope(PROGRESS_NAME);
var [ProgressProvider, useProgressContext] = createProgressContext(PROGRESS_NAME);
var Progress$1 = 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$1.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$1;
var Indicator = ProgressIndicator;
function Progress({ className, value, ...props }) {
return /*#__PURE__*/ React__default.createElement(Root, {
"data-slot": "progress",
className: cn("bg-primary/20 relative h-2 w-full overflow-hidden rounded-full", className),
...props
}, /*#__PURE__*/ React__default.createElement(Indicator, {
"data-slot": "progress-indicator",
className: "bg-primary h-full w-full flex-1 transition-all",
style: {
transform: `translateX(-${100 - (value || 0)}%)`
}
}));
}
export { Progress as P };
//# sourceMappingURL=progress-CwHuXUFj.mjs.map