"use strict"; 'use client'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _clsx = _interopRequireDefault(require("clsx")); var _refType = _interopRequireDefault(require("@mui/utils/refType")); var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses")); var _capitalize = _interopRequireDefault(require("../utils/capitalize")); var _styled = _interopRequireWildcard(require("../styles/styled")); var _useControlled = _interopRequireDefault(require("../utils/useControlled")); var _useFormControl = _interopRequireDefault(require("../FormControl/useFormControl")); var _ButtonBase = _interopRequireDefault(require("../ButtonBase")); var _switchBaseClasses = require("./switchBaseClasses"); var _jsxRuntime = require("react/jsx-runtime"); const _excluded = ["autoFocus", "checked", "checkedIcon", "className", "defaultChecked", "disabled", "disableFocusRipple", "edge", "icon", "id", "inputProps", "inputRef", "name", "onBlur", "onChange", "onFocus", "readOnly", "required", "tabIndex", "type", "value"]; function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const useUtilityClasses = ownerState => { const { classes, checked, disabled, edge } = ownerState; const slots = { root: ['root', checked && 'checked', disabled && 'disabled', edge && `edge${(0, _capitalize.default)(edge)}`], input: ['input'] }; return (0, _composeClasses.default)(slots, _switchBaseClasses.getSwitchBaseUtilityClass, classes); }; const SwitchBaseRoot = (0, _styled.default)(_ButtonBase.default)(({ ownerState }) => (0, _extends2.default)({ padding: 9, borderRadius: '50%' }, ownerState.edge === 'start' && { marginLeft: ownerState.size === 'small' ? -3 : -12 }, ownerState.edge === 'end' && { marginRight: ownerState.size === 'small' ? -3 : -12 })); const SwitchBaseInput = (0, _styled.default)('input', { shouldForwardProp: _styled.rootShouldForwardProp })({ cursor: 'inherit', position: 'absolute', opacity: 0, width: '100%', height: '100%', top: 0, left: 0, margin: 0, padding: 0, zIndex: 1 }); /** * @ignore - internal component. */ const SwitchBase = /*#__PURE__*/React.forwardRef(function SwitchBase(props, ref) { const { autoFocus, checked: checkedProp, checkedIcon, className, defaultChecked, disabled: disabledProp, disableFocusRipple = false, edge = false, icon, id, inputProps, inputRef, name, onBlur, onChange, onFocus, readOnly, required = false, tabIndex, type, value } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); const [checked, setCheckedState] = (0, _useControlled.default)({ controlled: checkedProp, default: Boolean(defaultChecked), name: 'SwitchBase', state: 'checked' }); const muiFormControl = (0, _useFormControl.default)(); const handleFocus = event => { if (onFocus) { onFocus(event); } if (muiFormControl && muiFormControl.onFocus) { muiFormControl.onFocus(event); } }; const handleBlur = event => { if (onBlur) { onBlur(event); } if (muiFormControl && muiFormControl.onBlur) { muiFormControl.onBlur(event); } }; const handleInputChange = event => { // Workaround for https://github.com/facebook/react/issues/9023 if (event.nativeEvent.defaultPrevented) { return; } const newChecked = event.target.checked; setCheckedState(newChecked); if (onChange) { // TODO v6: remove the second argument. onChange(event, newChecked); } }; let disabled = disabledProp; if (muiFormControl) { if (typeof disabled === 'undefined') { disabled = muiFormControl.disabled; } } const hasLabelFor = type === 'checkbox' || type === 'radio'; const ownerState = (0, _extends2.default)({}, props, { checked, disabled, disableFocusRipple, edge }); const classes = useUtilityClasses(ownerState); return /*#__PURE__*/(0, _jsxRuntime.jsxs)(SwitchBaseRoot, (0, _extends2.default)({ component: "span", className: (0, _clsx.default)(classes.root, className), centerRipple: true, focusRipple: !disableFocusRipple, disabled: disabled, tabIndex: null, role: undefined, onFocus: handleFocus, onBlur: handleBlur, ownerState: ownerState, ref: ref }, other, { children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(SwitchBaseInput, (0, _extends2.default)({ autoFocus: autoFocus, checked: checkedProp, defaultChecked: defaultChecked, className: classes.input, disabled: disabled, id: hasLabelFor ? id : undefined, name: name, onChange: handleInputChange, readOnly: readOnly, ref: inputRef, required: required, ownerState: ownerState, tabIndex: tabIndex, type: type }, type === 'checkbox' && value === undefined ? {} : { value }, inputProps)), checked ? checkedIcon : icon] })); }); // NB: If changed, please update Checkbox, Switch and Radio // so that the API documentation is updated. process.env.NODE_ENV !== "production" ? SwitchBase.propTypes = { /** * If `true`, the `input` element is focused during the first mount. */ autoFocus: _propTypes.default.bool, /** * If `true`, the component is checked. */ checked: _propTypes.default.bool, /** * The icon to display when the component is checked. */ checkedIcon: _propTypes.default.node.isRequired, /** * Override or extend the styles applied to the component. */ classes: _propTypes.default.object, /** * @ignore */ className: _propTypes.default.string, /** * @ignore */ defaultChecked: _propTypes.default.bool, /** * If `true`, the component is disabled. */ disabled: _propTypes.default.bool, /** * If `true`, the keyboard focus ripple is disabled. * @default false */ disableFocusRipple: _propTypes.default.bool, /** * If given, uses a negative margin to counteract the padding on one * side (this is often helpful for aligning the left or right * side of the icon with content above or below, without ruining the border * size and shape). * @default false */ edge: _propTypes.default.oneOf(['end', 'start', false]), /** * The icon to display when the component is unchecked. */ icon: _propTypes.default.node.isRequired, /** * The id of the `input` element. */ id: _propTypes.default.string, /** * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element. */ inputProps: _propTypes.default.object, /** * Pass a ref to the `input` element. */ inputRef: _refType.default, /* * @ignore */ name: _propTypes.default.string, /** * @ignore */ onBlur: _propTypes.default.func, /** * Callback fired when the state is changed. * * @param {object} event The event source of the callback. * You can pull out the new checked state by accessing `event.target.checked` (boolean). */ onChange: _propTypes.default.func, /** * @ignore */ onFocus: _propTypes.default.func, /** * It prevents the user from changing the value of the field * (not from interacting with the field). */ readOnly: _propTypes.default.bool, /** * If `true`, the `input` element is required. */ required: _propTypes.default.bool, /** * The system prop that allows defining system overrides as well as additional CSS styles. */ sx: _propTypes.default.object, /** * @ignore */ tabIndex: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), /** * The input component prop `type`. */ type: _propTypes.default.string.isRequired, /** * The value of the component. */ value: _propTypes.default.any } : void 0; var _default = exports.default = SwitchBase;