UNPKG

9.74 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 = exports.FormControlLabelRoot = void 0;
10var React = _interopRequireWildcard(require("react"));
11var _propTypes = _interopRequireDefault(require("prop-types"));
12var _clsx = _interopRequireDefault(require("clsx"));
13var _refType = _interopRequireDefault(require("@mui/utils/refType"));
14var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
15var _FormControl = require("../FormControl");
16var _zeroStyled = require("../zero-styled");
17var _memoTheme = _interopRequireDefault(require("../utils/memoTheme"));
18var _DefaultPropsProvider = require("../DefaultPropsProvider");
19var _Typography = _interopRequireDefault(require("../Typography"));
20var _capitalize = _interopRequireDefault(require("../utils/capitalize"));
21var _formControlLabelClasses = _interopRequireWildcard(require("./formControlLabelClasses"));
22var _formControlState = _interopRequireDefault(require("../FormControl/formControlState"));
23var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
24var _jsxRuntime = require("react/jsx-runtime");
25const useUtilityClasses = ownerState => {
26 const {
27 classes,
28 disabled,
29 labelPlacement,
30 error,
31 required
32 } = ownerState;
33 const slots = {
34 root: ['root', disabled && 'disabled', `labelPlacement${(0, _capitalize.default)(labelPlacement)}`, error && 'error', required && 'required'],
35 label: ['label', disabled && 'disabled'],
36 asterisk: ['asterisk', error && 'error']
37 };
38 return (0, _composeClasses.default)(slots, _formControlLabelClasses.getFormControlLabelUtilityClasses, classes);
39};
40const FormControlLabelRoot = exports.FormControlLabelRoot = (0, _zeroStyled.styled)('label', {
41 name: 'MuiFormControlLabel',
42 slot: 'Root',
43 overridesResolver: (props, styles) => {
44 const {
45 ownerState
46 } = props;
47 return [{
48 [`& .${_formControlLabelClasses.default.label}`]: styles.label
49 }, styles.root, styles[`labelPlacement${(0, _capitalize.default)(ownerState.labelPlacement)}`]];
50 }
51})((0, _memoTheme.default)(({
52 theme
53}) => ({
54 display: 'inline-flex',
55 alignItems: 'center',
56 cursor: 'pointer',
57 // For correct alignment with the text.
58 verticalAlign: 'middle',
59 WebkitTapHighlightColor: 'transparent',
60 marginLeft: -11,
61 marginRight: 16,
62 // used for row presentation of radio/checkbox
63 [`&.${_formControlLabelClasses.default.disabled}`]: {
64 cursor: 'default'
65 },
66 [`& .${_formControlLabelClasses.default.label}`]: {
67 [`&.${_formControlLabelClasses.default.disabled}`]: {
68 color: (theme.vars || theme).palette.text.disabled
69 }
70 },
71 variants: [{
72 props: {
73 labelPlacement: 'start'
74 },
75 style: {
76 flexDirection: 'row-reverse',
77 marginRight: -11
78 }
79 }, {
80 props: {
81 labelPlacement: 'top'
82 },
83 style: {
84 flexDirection: 'column-reverse'
85 }
86 }, {
87 props: {
88 labelPlacement: 'bottom'
89 },
90 style: {
91 flexDirection: 'column'
92 }
93 }, {
94 props: ({
95 labelPlacement
96 }) => labelPlacement === 'start' || labelPlacement === 'top' || labelPlacement === 'bottom',
97 style: {
98 marginLeft: 16 // used for row presentation of radio/checkbox
99 }
100 }]
101})));
102const AsteriskComponent = (0, _zeroStyled.styled)('span', {
103 name: 'MuiFormControlLabel',
104 slot: 'Asterisk',
105 overridesResolver: (props, styles) => styles.asterisk
106})((0, _memoTheme.default)(({
107 theme
108}) => ({
109 [`&.${_formControlLabelClasses.default.error}`]: {
110 color: (theme.vars || theme).palette.error.main
111 }
112})));
113
114/**
115 * Drop-in replacement of the `Radio`, `Switch` and `Checkbox` component.
116 * Use this component if you want to display an extra label.
117 */
118const FormControlLabel = /*#__PURE__*/React.forwardRef(function FormControlLabel(inProps, ref) {
119 const props = (0, _DefaultPropsProvider.useDefaultProps)({
120 props: inProps,
121 name: 'MuiFormControlLabel'
122 });
123 const {
124 checked,
125 className,
126 componentsProps = {},
127 control,
128 disabled: disabledProp,
129 disableTypography,
130 inputRef,
131 label: labelProp,
132 labelPlacement = 'end',
133 name,
134 onChange,
135 required: requiredProp,
136 slots = {},
137 slotProps = {},
138 value,
139 ...other
140 } = props;
141 const muiFormControl = (0, _FormControl.useFormControl)();
142 const disabled = disabledProp ?? control.props.disabled ?? muiFormControl?.disabled;
143 const required = requiredProp ?? control.props.required;
144 const controlProps = {
145 disabled,
146 required
147 };
148 ['checked', 'name', 'onChange', 'value', 'inputRef'].forEach(key => {
149 if (typeof control.props[key] === 'undefined' && typeof props[key] !== 'undefined') {
150 controlProps[key] = props[key];
151 }
152 });
153 const fcs = (0, _formControlState.default)({
154 props,
155 muiFormControl,
156 states: ['error']
157 });
158 const ownerState = {
159 ...props,
160 disabled,
161 labelPlacement,
162 required,
163 error: fcs.error
164 };
165 const classes = useUtilityClasses(ownerState);
166 const externalForwardedProps = {
167 slots,
168 slotProps: {
169 ...componentsProps,
170 ...slotProps
171 }
172 };
173 const [TypographySlot, typographySlotProps] = (0, _useSlot.default)('typography', {
174 elementType: _Typography.default,
175 externalForwardedProps,
176 ownerState
177 });
178 let label = labelProp;
179 if (label != null && label.type !== _Typography.default && !disableTypography) {
180 label = /*#__PURE__*/(0, _jsxRuntime.jsx)(TypographySlot, {
181 component: "span",
182 ...typographySlotProps,
183 className: (0, _clsx.default)(classes.label, typographySlotProps?.className),
184 children: label
185 });
186 }
187 return /*#__PURE__*/(0, _jsxRuntime.jsxs)(FormControlLabelRoot, {
188 className: (0, _clsx.default)(classes.root, className),
189 ownerState: ownerState,
190 ref: ref,
191 ...other,
192 children: [/*#__PURE__*/React.cloneElement(control, controlProps), required ? /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
193 children: [label, /*#__PURE__*/(0, _jsxRuntime.jsxs)(AsteriskComponent, {
194 ownerState: ownerState,
195 "aria-hidden": true,
196 className: classes.asterisk,
197 children: ["\u2009", '*']
198 })]
199 }) : label]
200 });
201});
202process.env.NODE_ENV !== "production" ? FormControlLabel.propTypes /* remove-proptypes */ = {
203 // ┌────────────────────────────── Warning ──────────────────────────────┐
204 // │ These PropTypes are generated from the TypeScript type definitions. │
205 // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
206 // └─────────────────────────────────────────────────────────────────────┘
207 /**
208 * If `true`, the component appears selected.
209 */
210 checked: _propTypes.default.bool,
211 /**
212 * Override or extend the styles applied to the component.
213 */
214 classes: _propTypes.default.object,
215 /**
216 * @ignore
217 */
218 className: _propTypes.default.string,
219 /**
220 * The props used for each slot inside.
221 * @default {}
222 * @deprecated use the `slotProps` prop instead. This prop will be removed in v7. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
223 */
224 componentsProps: _propTypes.default.shape({
225 typography: _propTypes.default.object
226 }),
227 /**
228 * A control element. For instance, it can be a `Radio`, a `Switch` or a `Checkbox`.
229 */
230 control: _propTypes.default.element.isRequired,
231 /**
232 * If `true`, the control is disabled.
233 */
234 disabled: _propTypes.default.bool,
235 /**
236 * If `true`, the label is rendered as it is passed without an additional typography node.
237 */
238 disableTypography: _propTypes.default.bool,
239 /**
240 * Pass a ref to the `input` element.
241 */
242 inputRef: _refType.default,
243 /**
244 * A text or an element to be used in an enclosing label element.
245 */
246 label: _propTypes.default.node,
247 /**
248 * The position of the label.
249 * @default 'end'
250 */
251 labelPlacement: _propTypes.default.oneOf(['bottom', 'end', 'start', 'top']),
252 /**
253 * @ignore
254 */
255 name: _propTypes.default.string,
256 /**
257 * Callback fired when the state is changed.
258 *
259 * @param {React.SyntheticEvent} event The event source of the callback.
260 * You can pull out the new checked state by accessing `event.target.checked` (boolean).
261 */
262 onChange: _propTypes.default.func,
263 /**
264 * If `true`, the label will indicate that the `input` is required.
265 */
266 required: _propTypes.default.bool,
267 /**
268 * The props used for each slot inside.
269 * @default {}
270 */
271 slotProps: _propTypes.default.shape({
272 typography: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
273 }),
274 /**
275 * The components used for each slot inside.
276 * @default {}
277 */
278 slots: _propTypes.default.shape({
279 typography: _propTypes.default.elementType
280 }),
281 /**
282 * The system prop that allows defining system overrides as well as additional CSS styles.
283 */
284 sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
285 /**
286 * The value of the component.
287 */
288 value: _propTypes.default.any
289} : void 0;
290var _default = exports.default = FormControlLabel;
\No newline at end of file