UNPKG

4.5 kBJavaScriptView Raw
1"use strict";
2'use client';
3
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6Object.defineProperty(exports, "__esModule", {
7 value: true
8});
9exports.default = void 0;
10var React = _interopRequireWildcard(require("react"));
11var _propTypes = _interopRequireDefault(require("prop-types"));
12var _clsx = _interopRequireDefault(require("clsx"));
13var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
14var _FormGroup = _interopRequireDefault(require("../FormGroup"));
15var _radioGroupClasses = require("./radioGroupClasses");
16var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
17var _useControlled = _interopRequireDefault(require("../utils/useControlled"));
18var _RadioGroupContext = _interopRequireDefault(require("./RadioGroupContext"));
19var _useId = _interopRequireDefault(require("../utils/useId"));
20var _jsxRuntime = require("react/jsx-runtime");
21const useUtilityClasses = props => {
22 const {
23 classes,
24 row,
25 error
26 } = props;
27 const slots = {
28 root: ['root', row && 'row', error && 'error']
29 };
30 return (0, _composeClasses.default)(slots, _radioGroupClasses.getRadioGroupUtilityClass, classes);
31};
32const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(props, ref) {
33 const {
34 // private
35 // eslint-disable-next-line react/prop-types
36 actions,
37 children,
38 className,
39 defaultValue,
40 name: nameProp,
41 onChange,
42 value: valueProp,
43 ...other
44 } = props;
45 const rootRef = React.useRef(null);
46 const classes = useUtilityClasses(props);
47 const [value, setValueState] = (0, _useControlled.default)({
48 controlled: valueProp,
49 default: defaultValue,
50 name: 'RadioGroup'
51 });
52 React.useImperativeHandle(actions, () => ({
53 focus: () => {
54 let input = rootRef.current.querySelector('input:not(:disabled):checked');
55 if (!input) {
56 input = rootRef.current.querySelector('input:not(:disabled)');
57 }
58 if (input) {
59 input.focus();
60 }
61 }
62 }), []);
63 const handleRef = (0, _useForkRef.default)(ref, rootRef);
64 const name = (0, _useId.default)(nameProp);
65 const contextValue = React.useMemo(() => ({
66 name,
67 onChange(event) {
68 setValueState(event.target.value);
69 if (onChange) {
70 onChange(event, event.target.value);
71 }
72 },
73 value
74 }), [name, onChange, setValueState, value]);
75 return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RadioGroupContext.default.Provider, {
76 value: contextValue,
77 children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormGroup.default, {
78 role: "radiogroup",
79 ref: handleRef,
80 className: (0, _clsx.default)(classes.root, className),
81 ...other,
82 children: children
83 })
84 });
85});
86process.env.NODE_ENV !== "production" ? RadioGroup.propTypes /* remove-proptypes */ = {
87 // ┌────────────────────────────── Warning ──────────────────────────────┐
88 // │ These PropTypes are generated from the TypeScript type definitions. │
89 // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
90 // └─────────────────────────────────────────────────────────────────────┘
91 /**
92 * The content of the component.
93 */
94 children: _propTypes.default.node,
95 /**
96 * @ignore
97 */
98 className: _propTypes.default.string,
99 /**
100 * The default value. Use when the component is not controlled.
101 */
102 defaultValue: _propTypes.default.any,
103 /**
104 * The name used to reference the value of the control.
105 * If you don't provide this prop, it falls back to a randomly generated name.
106 */
107 name: _propTypes.default.string,
108 /**
109 * Callback fired when a radio button is selected.
110 *
111 * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.
112 * @param {string} value The value of the selected radio button.
113 * You can pull out the new value by accessing `event.target.value` (string).
114 */
115 onChange: _propTypes.default.func,
116 /**
117 * Value of the selected radio button. The DOM API casts this to a string.
118 */
119 value: _propTypes.default.any
120} : void 0;
121var _default = exports.default = RadioGroup;
\No newline at end of file