UNPKG

11.3 kBJavaScriptView Raw
1"use strict";
2'use client';
3
4// @inheritedComponent ButtonBase
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.default = void 0;
11var React = _interopRequireWildcard(require("react"));
12var _propTypes = _interopRequireDefault(require("prop-types"));
13var _clsx = _interopRequireDefault(require("clsx"));
14var _resolveProps = _interopRequireDefault(require("@mui/utils/resolveProps"));
15var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
16var _colorManipulator = require("@mui/system/colorManipulator");
17var _ButtonBase = _interopRequireDefault(require("../ButtonBase"));
18var _capitalize = _interopRequireDefault(require("../utils/capitalize"));
19var _zeroStyled = require("../zero-styled");
20var _memoTheme = _interopRequireDefault(require("../utils/memoTheme"));
21var _createSimplePaletteValueFilter = _interopRequireDefault(require("../utils/createSimplePaletteValueFilter"));
22var _DefaultPropsProvider = require("../DefaultPropsProvider");
23var _toggleButtonClasses = _interopRequireWildcard(require("./toggleButtonClasses"));
24var _ToggleButtonGroupContext = _interopRequireDefault(require("../ToggleButtonGroup/ToggleButtonGroupContext"));
25var _ToggleButtonGroupButtonContext = _interopRequireDefault(require("../ToggleButtonGroup/ToggleButtonGroupButtonContext"));
26var _isValueSelected = _interopRequireDefault(require("../ToggleButtonGroup/isValueSelected"));
27var _jsxRuntime = require("react/jsx-runtime");
28const useUtilityClasses = ownerState => {
29 const {
30 classes,
31 fullWidth,
32 selected,
33 disabled,
34 size,
35 color
36 } = ownerState;
37 const slots = {
38 root: ['root', selected && 'selected', disabled && 'disabled', fullWidth && 'fullWidth', `size${(0, _capitalize.default)(size)}`, color]
39 };
40 return (0, _composeClasses.default)(slots, _toggleButtonClasses.getToggleButtonUtilityClass, classes);
41};
42const ToggleButtonRoot = (0, _zeroStyled.styled)(_ButtonBase.default, {
43 name: 'MuiToggleButton',
44 slot: 'Root',
45 overridesResolver: (props, styles) => {
46 const {
47 ownerState
48 } = props;
49 return [styles.root, styles[`size${(0, _capitalize.default)(ownerState.size)}`]];
50 }
51})((0, _memoTheme.default)(({
52 theme
53}) => ({
54 ...theme.typography.button,
55 borderRadius: (theme.vars || theme).shape.borderRadius,
56 padding: 11,
57 border: `1px solid ${(theme.vars || theme).palette.divider}`,
58 color: (theme.vars || theme).palette.action.active,
59 [`&.${_toggleButtonClasses.default.disabled}`]: {
60 color: (theme.vars || theme).palette.action.disabled,
61 border: `1px solid ${(theme.vars || theme).palette.action.disabledBackground}`
62 },
63 '&:hover': {
64 textDecoration: 'none',
65 // Reset on mouse devices
66 backgroundColor: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / ${theme.vars.palette.action.hoverOpacity})` : (0, _colorManipulator.alpha)(theme.palette.text.primary, theme.palette.action.hoverOpacity),
67 '@media (hover: none)': {
68 backgroundColor: 'transparent'
69 }
70 },
71 variants: [{
72 props: {
73 color: 'standard'
74 },
75 style: {
76 [`&.${_toggleButtonClasses.default.selected}`]: {
77 color: (theme.vars || theme).palette.text.primary,
78 backgroundColor: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / ${theme.vars.palette.action.selectedOpacity})` : (0, _colorManipulator.alpha)(theme.palette.text.primary, theme.palette.action.selectedOpacity),
79 '&:hover': {
80 backgroundColor: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : (0, _colorManipulator.alpha)(theme.palette.text.primary, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
81 // Reset on touch devices, it doesn't add specificity
82 '@media (hover: none)': {
83 backgroundColor: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / ${theme.vars.palette.action.selectedOpacity})` : (0, _colorManipulator.alpha)(theme.palette.text.primary, theme.palette.action.selectedOpacity)
84 }
85 }
86 }
87 }
88 }, ...Object.entries(theme.palette).filter((0, _createSimplePaletteValueFilter.default)()).map(([color]) => ({
89 props: {
90 color
91 },
92 style: {
93 [`&.${_toggleButtonClasses.default.selected}`]: {
94 color: (theme.vars || theme).palette[color].main,
95 backgroundColor: theme.vars ? `rgba(${theme.vars.palette[color].mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : (0, _colorManipulator.alpha)(theme.palette[color].main, theme.palette.action.selectedOpacity),
96 '&:hover': {
97 backgroundColor: theme.vars ? `rgba(${theme.vars.palette[color].mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : (0, _colorManipulator.alpha)(theme.palette[color].main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
98 // Reset on touch devices, it doesn't add specificity
99 '@media (hover: none)': {
100 backgroundColor: theme.vars ? `rgba(${theme.vars.palette[color].mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : (0, _colorManipulator.alpha)(theme.palette[color].main, theme.palette.action.selectedOpacity)
101 }
102 }
103 }
104 }
105 })), {
106 props: {
107 fullWidth: true
108 },
109 style: {
110 width: '100%'
111 }
112 }, {
113 props: {
114 size: 'small'
115 },
116 style: {
117 padding: 7,
118 fontSize: theme.typography.pxToRem(13)
119 }
120 }, {
121 props: {
122 size: 'large'
123 },
124 style: {
125 padding: 15,
126 fontSize: theme.typography.pxToRem(15)
127 }
128 }]
129})));
130const ToggleButton = /*#__PURE__*/React.forwardRef(function ToggleButton(inProps, ref) {
131 // props priority: `inProps` > `contextProps` > `themeDefaultProps`
132 const {
133 value: contextValue,
134 ...contextProps
135 } = React.useContext(_ToggleButtonGroupContext.default);
136 const toggleButtonGroupButtonContextPositionClassName = React.useContext(_ToggleButtonGroupButtonContext.default);
137 const resolvedProps = (0, _resolveProps.default)({
138 ...contextProps,
139 selected: (0, _isValueSelected.default)(inProps.value, contextValue)
140 }, inProps);
141 const props = (0, _DefaultPropsProvider.useDefaultProps)({
142 props: resolvedProps,
143 name: 'MuiToggleButton'
144 });
145 const {
146 children,
147 className,
148 color = 'standard',
149 disabled = false,
150 disableFocusRipple = false,
151 fullWidth = false,
152 onChange,
153 onClick,
154 selected,
155 size = 'medium',
156 value,
157 ...other
158 } = props;
159 const ownerState = {
160 ...props,
161 color,
162 disabled,
163 disableFocusRipple,
164 fullWidth,
165 size
166 };
167 const classes = useUtilityClasses(ownerState);
168 const handleChange = event => {
169 if (onClick) {
170 onClick(event, value);
171 if (event.defaultPrevented) {
172 return;
173 }
174 }
175 if (onChange) {
176 onChange(event, value);
177 }
178 };
179 const positionClassName = toggleButtonGroupButtonContextPositionClassName || '';
180 return /*#__PURE__*/(0, _jsxRuntime.jsx)(ToggleButtonRoot, {
181 className: (0, _clsx.default)(contextProps.className, classes.root, className, positionClassName),
182 disabled: disabled,
183 focusRipple: !disableFocusRipple,
184 ref: ref,
185 onClick: handleChange,
186 onChange: onChange,
187 value: value,
188 ownerState: ownerState,
189 "aria-pressed": selected,
190 ...other,
191 children: children
192 });
193});
194process.env.NODE_ENV !== "production" ? ToggleButton.propTypes /* remove-proptypes */ = {
195 // ┌────────────────────────────── Warning ──────────────────────────────┐
196 // │ These PropTypes are generated from the TypeScript type definitions. │
197 // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
198 // └─────────────────────────────────────────────────────────────────────┘
199 /**
200 * The content of the component.
201 */
202 children: _propTypes.default.node,
203 /**
204 * Override or extend the styles applied to the component.
205 */
206 classes: _propTypes.default.object,
207 /**
208 * @ignore
209 */
210 className: _propTypes.default.string,
211 /**
212 * The color of the button when it is in an active state.
213 * It supports both default and custom theme colors, which can be added as shown in the
214 * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
215 * @default 'standard'
216 */
217 color: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['standard', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), _propTypes.default.string]),
218 /**
219 * If `true`, the component is disabled.
220 * @default false
221 */
222 disabled: _propTypes.default.bool,
223 /**
224 * If `true`, the keyboard focus ripple is disabled.
225 * @default false
226 */
227 disableFocusRipple: _propTypes.default.bool,
228 /**
229 * If `true`, the ripple effect is disabled.
230 *
231 * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure
232 * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.
233 * @default false
234 */
235 disableRipple: _propTypes.default.bool,
236 /**
237 * If `true`, the button will take up the full width of its container.
238 * @default false
239 */
240 fullWidth: _propTypes.default.bool,
241 /**
242 * Callback fired when the state changes.
243 *
244 * @param {React.MouseEvent<HTMLElement>} event The event source of the callback.
245 * @param {any} value of the selected button.
246 */
247 onChange: _propTypes.default.func,
248 /**
249 * Callback fired when the button is clicked.
250 *
251 * @param {React.MouseEvent<HTMLElement>} event The event source of the callback.
252 * @param {any} value of the selected button.
253 */
254 onClick: _propTypes.default.func,
255 /**
256 * If `true`, the button is rendered in an active state.
257 */
258 selected: _propTypes.default.bool,
259 /**
260 * The size of the component.
261 * The prop defaults to the value inherited from the parent ToggleButtonGroup component.
262 * @default 'medium'
263 */
264 size: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['small', 'medium', 'large']), _propTypes.default.string]),
265 /**
266 * The system prop that allows defining system overrides as well as additional CSS styles.
267 */
268 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]),
269 /**
270 * The value to associate with the button when selected in a
271 * ToggleButtonGroup.
272 */
273 value: _propTypes.default /* @typescript-to-proptypes-ignore */.any.isRequired
274} : void 0;
275var _default = exports.default = ToggleButton;
\No newline at end of file