@stratakit/bricks
Version:
Small, modular components for StrataKit
50 lines (49 loc) • 1.48 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import * as React from "react";
import { Role } from "@ariakit/react/role";
import { forwardRef } from "@stratakit/foundations/secret-internals";
import cx from "classnames";
import { useInit } from "./~utils.useInit.js";
const ProgressBar = forwardRef(
(props, forwardedRef) => {
useInit();
const {
size = "medium",
tone = "neutral",
style: styleProp,
value: valueProp,
...rest
} = props;
const value = React.useMemo(() => {
if (valueProp == null) return void 0;
const clampedValue = Math.min(Math.max(valueProp, 0), 100);
return Number(clampedValue.toFixed(3));
}, [valueProp]);
const style = React.useMemo(() => {
return value != null ? {
...styleProp,
"--\u{1F95D}ProgressBar-fill-portion-shown": `${value}%`
} : styleProp;
}, [styleProp, value]);
return /* @__PURE__ */ jsx(
Role,
{
role: "progressbar",
"aria-valuenow": value,
"aria-valuemin": value != null ? 0 : void 0,
"aria-valuemax": value != null ? 100 : void 0,
...rest,
"data-_sk-size": size,
"data-_sk-tone": tone,
"data-_sk-variant": value != null ? "determinate" : "indeterminate",
className: cx("\u{1F95D}ProgressBar", props.className),
style,
ref: forwardedRef
}
);
}
);
DEV: ProgressBar.displayName = "ProgressBar";
export {
ProgressBar
};