1 | "use strict";
|
2 | 'use client';
|
3 |
|
4 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
5 | var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
6 | Object.defineProperty(exports, "__esModule", {
|
7 | value: true
|
8 | });
|
9 | exports.default = exports.MenuPaper = void 0;
|
10 | var React = _interopRequireWildcard(require("react"));
|
11 | var _reactIs = require("react-is");
|
12 | var _propTypes = _interopRequireDefault(require("prop-types"));
|
13 | var _clsx = _interopRequireDefault(require("clsx"));
|
14 | var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
|
15 | var _HTMLElementType = _interopRequireDefault(require("@mui/utils/HTMLElementType"));
|
16 | var _RtlProvider = require("@mui/system/RtlProvider");
|
17 | var _useSlotProps = _interopRequireDefault(require("@mui/utils/useSlotProps"));
|
18 | var _MenuList = _interopRequireDefault(require("../MenuList"));
|
19 | var _Popover = _interopRequireWildcard(require("../Popover"));
|
20 | var _rootShouldForwardProp = _interopRequireDefault(require("../styles/rootShouldForwardProp"));
|
21 | var _zeroStyled = require("../zero-styled");
|
22 | var _DefaultPropsProvider = require("../DefaultPropsProvider");
|
23 | var _menuClasses = require("./menuClasses");
|
24 | var _jsxRuntime = require("react/jsx-runtime");
|
25 | const RTL_ORIGIN = {
|
26 | vertical: 'top',
|
27 | horizontal: 'right'
|
28 | };
|
29 | const LTR_ORIGIN = {
|
30 | vertical: 'top',
|
31 | horizontal: 'left'
|
32 | };
|
33 | const useUtilityClasses = ownerState => {
|
34 | const {
|
35 | classes
|
36 | } = ownerState;
|
37 | const slots = {
|
38 | root: ['root'],
|
39 | paper: ['paper'],
|
40 | list: ['list']
|
41 | };
|
42 | return (0, _composeClasses.default)(slots, _menuClasses.getMenuUtilityClass, classes);
|
43 | };
|
44 | const MenuRoot = (0, _zeroStyled.styled)(_Popover.default, {
|
45 | shouldForwardProp: prop => (0, _rootShouldForwardProp.default)(prop) || prop === 'classes',
|
46 | name: 'MuiMenu',
|
47 | slot: 'Root',
|
48 | overridesResolver: (props, styles) => styles.root
|
49 | })({});
|
50 | const MenuPaper = exports.MenuPaper = (0, _zeroStyled.styled)(_Popover.PopoverPaper, {
|
51 | name: 'MuiMenu',
|
52 | slot: 'Paper',
|
53 | overridesResolver: (props, styles) => styles.paper
|
54 | })({
|
55 |
|
56 |
|
57 |
|
58 | maxHeight: 'calc(100% - 96px)',
|
59 |
|
60 | WebkitOverflowScrolling: 'touch'
|
61 | });
|
62 | const MenuMenuList = (0, _zeroStyled.styled)(_MenuList.default, {
|
63 | name: 'MuiMenu',
|
64 | slot: 'List',
|
65 | overridesResolver: (props, styles) => styles.list
|
66 | })({
|
67 |
|
68 | outline: 0
|
69 | });
|
70 | const Menu = React.forwardRef(function Menu(inProps, ref) {
|
71 | const props = (0, _DefaultPropsProvider.useDefaultProps)({
|
72 | props: inProps,
|
73 | name: 'MuiMenu'
|
74 | });
|
75 | const {
|
76 | autoFocus = true,
|
77 | children,
|
78 | className,
|
79 | disableAutoFocusItem = false,
|
80 | MenuListProps = {},
|
81 | onClose,
|
82 | open,
|
83 | PaperProps = {},
|
84 | PopoverClasses,
|
85 | transitionDuration = 'auto',
|
86 | TransitionProps: {
|
87 | onEntering,
|
88 | ...TransitionProps
|
89 | } = {},
|
90 | variant = 'selectedMenu',
|
91 | slots = {},
|
92 | slotProps = {},
|
93 | ...other
|
94 | } = props;
|
95 | const isRtl = (0, _RtlProvider.useRtl)();
|
96 | const ownerState = {
|
97 | ...props,
|
98 | autoFocus,
|
99 | disableAutoFocusItem,
|
100 | MenuListProps,
|
101 | onEntering,
|
102 | PaperProps,
|
103 | transitionDuration,
|
104 | TransitionProps,
|
105 | variant
|
106 | };
|
107 | const classes = useUtilityClasses(ownerState);
|
108 | const autoFocusItem = autoFocus && !disableAutoFocusItem && open;
|
109 | const menuListActionsRef = React.useRef(null);
|
110 | const handleEntering = (element, isAppearing) => {
|
111 | if (menuListActionsRef.current) {
|
112 | menuListActionsRef.current.adjustStyleForScrollbar(element, {
|
113 | direction: isRtl ? 'rtl' : 'ltr'
|
114 | });
|
115 | }
|
116 | if (onEntering) {
|
117 | onEntering(element, isAppearing);
|
118 | }
|
119 | };
|
120 | const handleListKeyDown = event => {
|
121 | if (event.key === 'Tab') {
|
122 | event.preventDefault();
|
123 | if (onClose) {
|
124 | onClose(event, 'tabKeyDown');
|
125 | }
|
126 | }
|
127 | };
|
128 |
|
129 | |
130 |
|
131 |
|
132 |
|
133 |
|
134 | let activeItemIndex = -1;
|
135 |
|
136 |
|
137 |
|
138 | React.Children.map(children, (child, index) => {
|
139 | if (! React.isValidElement(child)) {
|
140 | return;
|
141 | }
|
142 | if (process.env.NODE_ENV !== 'production') {
|
143 | if ((0, _reactIs.isFragment)(child)) {
|
144 | console.error(["MUI: The Menu component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
|
145 | }
|
146 | }
|
147 | if (!child.props.disabled) {
|
148 | if (variant === 'selectedMenu' && child.props.selected) {
|
149 | activeItemIndex = index;
|
150 | } else if (activeItemIndex === -1) {
|
151 | activeItemIndex = index;
|
152 | }
|
153 | }
|
154 | });
|
155 | const PaperSlot = slots.paper ?? MenuPaper;
|
156 | const paperExternalSlotProps = slotProps.paper ?? PaperProps;
|
157 | const rootSlotProps = (0, _useSlotProps.default)({
|
158 | elementType: slots.root,
|
159 | externalSlotProps: slotProps.root,
|
160 | ownerState,
|
161 | className: [classes.root, className]
|
162 | });
|
163 | const paperSlotProps = (0, _useSlotProps.default)({
|
164 | elementType: PaperSlot,
|
165 | externalSlotProps: paperExternalSlotProps,
|
166 | ownerState,
|
167 | className: classes.paper
|
168 | });
|
169 | return (0, _jsxRuntime.jsx)(MenuRoot, {
|
170 | onClose: onClose,
|
171 | anchorOrigin: {
|
172 | vertical: 'bottom',
|
173 | horizontal: isRtl ? 'right' : 'left'
|
174 | },
|
175 | transformOrigin: isRtl ? RTL_ORIGIN : LTR_ORIGIN,
|
176 | slots: {
|
177 | paper: PaperSlot,
|
178 | root: slots.root
|
179 | },
|
180 | slotProps: {
|
181 | root: rootSlotProps,
|
182 | paper: paperSlotProps
|
183 | },
|
184 | open: open,
|
185 | ref: ref,
|
186 | transitionDuration: transitionDuration,
|
187 | TransitionProps: {
|
188 | onEntering: handleEntering,
|
189 | ...TransitionProps
|
190 | },
|
191 | ownerState: ownerState,
|
192 | ...other,
|
193 | classes: PopoverClasses,
|
194 | children: (0, _jsxRuntime.jsx)(MenuMenuList, {
|
195 | onKeyDown: handleListKeyDown,
|
196 | actions: menuListActionsRef,
|
197 | autoFocus: autoFocus && (activeItemIndex === -1 || disableAutoFocusItem),
|
198 | autoFocusItem: autoFocusItem,
|
199 | variant: variant,
|
200 | ...MenuListProps,
|
201 | className: (0, _clsx.default)(classes.list, MenuListProps.className),
|
202 | children: children
|
203 | })
|
204 | });
|
205 | });
|
206 | process.env.NODE_ENV !== "production" ? Menu.propTypes = {
|
207 |
|
208 |
|
209 |
|
210 |
|
211 | |
212 |
|
213 |
|
214 |
|
215 | anchorEl: _propTypes.default .oneOfType([_HTMLElementType.default, _propTypes.default.func]),
|
216 | |
217 |
|
218 |
|
219 |
|
220 |
|
221 |
|
222 |
|
223 | autoFocus: _propTypes.default.bool,
|
224 | |
225 |
|
226 |
|
227 | children: _propTypes.default.node,
|
228 | |
229 |
|
230 |
|
231 | classes: _propTypes.default.object,
|
232 | |
233 |
|
234 |
|
235 | className: _propTypes.default.string,
|
236 | |
237 |
|
238 |
|
239 |
|
240 |
|
241 |
|
242 |
|
243 | disableAutoFocusItem: _propTypes.default.bool,
|
244 | |
245 |
|
246 |
|
247 |
|
248 | MenuListProps: _propTypes.default.object,
|
249 | |
250 |
|
251 |
|
252 |
|
253 |
|
254 |
|
255 | onClose: _propTypes.default.func,
|
256 | |
257 |
|
258 |
|
259 | open: _propTypes.default.bool.isRequired,
|
260 | |
261 |
|
262 |
|
263 | PaperProps: _propTypes.default.object,
|
264 | |
265 |
|
266 |
|
267 | PopoverClasses: _propTypes.default.object,
|
268 | |
269 |
|
270 |
|
271 |
|
272 | slotProps: _propTypes.default.shape({
|
273 | paper: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
|
274 | root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
|
275 | }),
|
276 | |
277 |
|
278 |
|
279 |
|
280 | slots: _propTypes.default.shape({
|
281 | paper: _propTypes.default.elementType,
|
282 | root: _propTypes.default.elementType
|
283 | }),
|
284 | |
285 |
|
286 |
|
287 | 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]),
|
288 | |
289 |
|
290 |
|
291 |
|
292 | transitionDuration: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.shape({
|
293 | appear: _propTypes.default.number,
|
294 | enter: _propTypes.default.number,
|
295 | exit: _propTypes.default.number
|
296 | })]),
|
297 | |
298 |
|
299 |
|
300 |
|
301 |
|
302 | TransitionProps: _propTypes.default.object,
|
303 | |
304 |
|
305 |
|
306 |
|
307 | variant: _propTypes.default.oneOf(['menu', 'selectedMenu'])
|
308 | } : void 0;
|
309 | var _default = exports.default = Menu; |
\ | No newline at end of file |