@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
88 lines (87 loc) • 2.26 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import { forwardRef, useState, useCallback } from "react";
import MuiRadio from "@mui/material/Radio";
import { useDefaultProps } from "@hitachivantara/uikit-react-utils";
import { useClasses } from "./BaseRadio.styles.js";
import { staticClasses } from "./BaseRadio.styles.js";
import { HvRadioIcon } from "./RadioIcon.js";
const HvBaseRadio = forwardRef(
function HvBaseRadio2(props, ref) {
const {
classes: classesProp,
className,
value = "on",
required,
readOnly,
disabled,
checked,
defaultChecked,
onChange,
semantic,
inputProps,
color,
onFocusVisible,
onBlur,
...others
} = useDefaultProps("HvBaseRadio", props);
const { classes, cx } = useClasses(classesProp);
const [focusVisible, setFocusVisible] = useState(false);
const onFocusVisibleCallback = useCallback(
(evt) => {
setFocusVisible(true);
onFocusVisible?.(evt);
},
[onFocusVisible]
);
const onBlurCallback = useCallback(
(evt) => {
setFocusVisible(false);
onBlur?.(evt);
},
[onBlur]
);
const onLocalChange = useCallback(
(evt) => {
if (readOnly) {
return;
}
onChange?.(evt, evt.target.checked, value);
},
[onChange, readOnly, value]
);
return /* @__PURE__ */ jsx(
MuiRadio,
{
ref,
className: cx(
classes.root,
{
[classes.disabled]: disabled,
[classes.focusVisible]: focusVisible,
[classes.checked]: checked,
[classes.semantic]: semantic
},
className
),
icon: /* @__PURE__ */ jsx(HvRadioIcon, { disabled }),
checkedIcon: /* @__PURE__ */ jsx(HvRadioIcon, { checked: true, disabled, color }),
color: "default",
disabled,
required,
readOnly,
onChange: onLocalChange,
value,
checked,
defaultChecked,
inputProps,
onFocusVisible: onFocusVisibleCallback,
onBlur: onBlurCallback,
...others
}
);
}
);
export {
HvBaseRadio,
staticClasses as baseRadioClasses
};