Menu.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. var _typeof = require("@babel/runtime/helpers/typeof");
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = void 0;
  8. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  9. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  10. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  11. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  12. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  13. var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
  14. var _classnames = _interopRequireDefault(require("classnames"));
  15. var _rcOverflow = _interopRequireDefault(require("rc-overflow"));
  16. var _useMergedState7 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
  17. var _isEqual = _interopRequireDefault(require("rc-util/lib/isEqual"));
  18. var _warning = _interopRequireDefault(require("rc-util/lib/warning"));
  19. var _react = _interopRequireWildcard(require("react"));
  20. var React = _react;
  21. var _reactDom = require("react-dom");
  22. var _IdContext = require("./context/IdContext");
  23. var _MenuContext = _interopRequireDefault(require("./context/MenuContext"));
  24. var _PathContext = require("./context/PathContext");
  25. var _PrivateContext = _interopRequireDefault(require("./context/PrivateContext"));
  26. var _useAccessibility = require("./hooks/useAccessibility");
  27. var _useKeyRecords2 = _interopRequireWildcard(require("./hooks/useKeyRecords"));
  28. var _useMemoCallback = _interopRequireDefault(require("./hooks/useMemoCallback"));
  29. var _useUUID = _interopRequireDefault(require("./hooks/useUUID"));
  30. var _MenuItem = _interopRequireDefault(require("./MenuItem"));
  31. var _SubMenu = _interopRequireDefault(require("./SubMenu"));
  32. var _nodeUtil = require("./utils/nodeUtil");
  33. var _warnUtil = require("./utils/warnUtil");
  34. var _excluded = ["prefixCls", "rootClassName", "style", "className", "tabIndex", "items", "children", "direction", "id", "mode", "inlineCollapsed", "disabled", "disabledOverflow", "subMenuOpenDelay", "subMenuCloseDelay", "forceSubMenuRender", "defaultOpenKeys", "openKeys", "activeKey", "defaultActiveFirst", "selectable", "multiple", "defaultSelectedKeys", "selectedKeys", "onSelect", "onDeselect", "inlineIndent", "motion", "defaultMotions", "triggerSubMenuAction", "builtinPlacements", "itemIcon", "expandIcon", "overflowedIndicator", "overflowedIndicatorPopupClassName", "getPopupContainer", "onClick", "onOpenChange", "onKeyDown", "openAnimation", "openTransitionName", "_internalRenderMenuItem", "_internalRenderSubMenuItem", "_internalComponents"];
  35. function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
  36. 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; }
  37. /**
  38. * Menu modify after refactor:
  39. * ## Add
  40. * - disabled
  41. *
  42. * ## Remove
  43. * - openTransitionName
  44. * - openAnimation
  45. * - onDestroy
  46. * - siderCollapsed: Seems antd do not use this prop (Need test in antd)
  47. * - collapsedWidth: Seems this logic should be handle by antd Layout.Sider
  48. */
  49. // optimize for render
  50. var EMPTY_LIST = [];
  51. var Menu = /*#__PURE__*/React.forwardRef(function (props, ref) {
  52. var _childList$;
  53. var _ref = props,
  54. _ref$prefixCls = _ref.prefixCls,
  55. prefixCls = _ref$prefixCls === void 0 ? 'rc-menu' : _ref$prefixCls,
  56. rootClassName = _ref.rootClassName,
  57. style = _ref.style,
  58. className = _ref.className,
  59. _ref$tabIndex = _ref.tabIndex,
  60. tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex,
  61. items = _ref.items,
  62. children = _ref.children,
  63. direction = _ref.direction,
  64. id = _ref.id,
  65. _ref$mode = _ref.mode,
  66. mode = _ref$mode === void 0 ? 'vertical' : _ref$mode,
  67. inlineCollapsed = _ref.inlineCollapsed,
  68. disabled = _ref.disabled,
  69. disabledOverflow = _ref.disabledOverflow,
  70. _ref$subMenuOpenDelay = _ref.subMenuOpenDelay,
  71. subMenuOpenDelay = _ref$subMenuOpenDelay === void 0 ? 0.1 : _ref$subMenuOpenDelay,
  72. _ref$subMenuCloseDela = _ref.subMenuCloseDelay,
  73. subMenuCloseDelay = _ref$subMenuCloseDela === void 0 ? 0.1 : _ref$subMenuCloseDela,
  74. forceSubMenuRender = _ref.forceSubMenuRender,
  75. defaultOpenKeys = _ref.defaultOpenKeys,
  76. openKeys = _ref.openKeys,
  77. activeKey = _ref.activeKey,
  78. defaultActiveFirst = _ref.defaultActiveFirst,
  79. _ref$selectable = _ref.selectable,
  80. selectable = _ref$selectable === void 0 ? true : _ref$selectable,
  81. _ref$multiple = _ref.multiple,
  82. multiple = _ref$multiple === void 0 ? false : _ref$multiple,
  83. defaultSelectedKeys = _ref.defaultSelectedKeys,
  84. selectedKeys = _ref.selectedKeys,
  85. onSelect = _ref.onSelect,
  86. onDeselect = _ref.onDeselect,
  87. _ref$inlineIndent = _ref.inlineIndent,
  88. inlineIndent = _ref$inlineIndent === void 0 ? 24 : _ref$inlineIndent,
  89. motion = _ref.motion,
  90. defaultMotions = _ref.defaultMotions,
  91. _ref$triggerSubMenuAc = _ref.triggerSubMenuAction,
  92. triggerSubMenuAction = _ref$triggerSubMenuAc === void 0 ? 'hover' : _ref$triggerSubMenuAc,
  93. builtinPlacements = _ref.builtinPlacements,
  94. itemIcon = _ref.itemIcon,
  95. expandIcon = _ref.expandIcon,
  96. _ref$overflowedIndica = _ref.overflowedIndicator,
  97. overflowedIndicator = _ref$overflowedIndica === void 0 ? '...' : _ref$overflowedIndica,
  98. overflowedIndicatorPopupClassName = _ref.overflowedIndicatorPopupClassName,
  99. getPopupContainer = _ref.getPopupContainer,
  100. onClick = _ref.onClick,
  101. onOpenChange = _ref.onOpenChange,
  102. onKeyDown = _ref.onKeyDown,
  103. openAnimation = _ref.openAnimation,
  104. openTransitionName = _ref.openTransitionName,
  105. _internalRenderMenuItem = _ref._internalRenderMenuItem,
  106. _internalRenderSubMenuItem = _ref._internalRenderSubMenuItem,
  107. _internalComponents = _ref._internalComponents,
  108. restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
  109. var _React$useMemo = React.useMemo(function () {
  110. return [(0, _nodeUtil.parseItems)(children, items, EMPTY_LIST, _internalComponents, prefixCls), (0, _nodeUtil.parseItems)(children, items, EMPTY_LIST, {}, prefixCls)];
  111. }, [children, items, _internalComponents]),
  112. _React$useMemo2 = (0, _slicedToArray2.default)(_React$useMemo, 2),
  113. childList = _React$useMemo2[0],
  114. measureChildList = _React$useMemo2[1];
  115. var _React$useState = React.useState(false),
  116. _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
  117. mounted = _React$useState2[0],
  118. setMounted = _React$useState2[1];
  119. var containerRef = React.useRef();
  120. var uuid = (0, _useUUID.default)(id);
  121. var isRtl = direction === 'rtl';
  122. // ========================= Warn =========================
  123. if (process.env.NODE_ENV !== 'production') {
  124. (0, _warning.default)(!openAnimation && !openTransitionName, '`openAnimation` and `openTransitionName` is removed. Please use `motion` or `defaultMotion` instead.');
  125. }
  126. // ========================= Open =========================
  127. var _useMergedState = (0, _useMergedState7.default)(defaultOpenKeys, {
  128. value: openKeys,
  129. postState: function postState(keys) {
  130. return keys || EMPTY_LIST;
  131. }
  132. }),
  133. _useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
  134. mergedOpenKeys = _useMergedState2[0],
  135. setMergedOpenKeys = _useMergedState2[1];
  136. // React 18 will merge mouse event which means we open key will not sync
  137. // ref: https://github.com/ant-design/ant-design/issues/38818
  138. var triggerOpenKeys = function triggerOpenKeys(keys) {
  139. var forceFlush = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  140. function doUpdate() {
  141. setMergedOpenKeys(keys);
  142. onOpenChange === null || onOpenChange === void 0 || onOpenChange(keys);
  143. }
  144. if (forceFlush) {
  145. (0, _reactDom.flushSync)(doUpdate);
  146. } else {
  147. doUpdate();
  148. }
  149. };
  150. // >>>>> Cache & Reset open keys when inlineCollapsed changed
  151. var _React$useState3 = React.useState(mergedOpenKeys),
  152. _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
  153. inlineCacheOpenKeys = _React$useState4[0],
  154. setInlineCacheOpenKeys = _React$useState4[1];
  155. var mountRef = React.useRef(false);
  156. // ========================= Mode =========================
  157. var _React$useMemo3 = React.useMemo(function () {
  158. if ((mode === 'inline' || mode === 'vertical') && inlineCollapsed) {
  159. return ['vertical', inlineCollapsed];
  160. }
  161. return [mode, false];
  162. }, [mode, inlineCollapsed]),
  163. _React$useMemo4 = (0, _slicedToArray2.default)(_React$useMemo3, 2),
  164. mergedMode = _React$useMemo4[0],
  165. mergedInlineCollapsed = _React$useMemo4[1];
  166. var isInlineMode = mergedMode === 'inline';
  167. var _React$useState5 = React.useState(mergedMode),
  168. _React$useState6 = (0, _slicedToArray2.default)(_React$useState5, 2),
  169. internalMode = _React$useState6[0],
  170. setInternalMode = _React$useState6[1];
  171. var _React$useState7 = React.useState(mergedInlineCollapsed),
  172. _React$useState8 = (0, _slicedToArray2.default)(_React$useState7, 2),
  173. internalInlineCollapsed = _React$useState8[0],
  174. setInternalInlineCollapsed = _React$useState8[1];
  175. React.useEffect(function () {
  176. setInternalMode(mergedMode);
  177. setInternalInlineCollapsed(mergedInlineCollapsed);
  178. if (!mountRef.current) {
  179. return;
  180. }
  181. // Synchronously update MergedOpenKeys
  182. if (isInlineMode) {
  183. setMergedOpenKeys(inlineCacheOpenKeys);
  184. } else {
  185. // Trigger open event in case its in control
  186. triggerOpenKeys(EMPTY_LIST);
  187. }
  188. }, [mergedMode, mergedInlineCollapsed]);
  189. // ====================== Responsive ======================
  190. var _React$useState9 = React.useState(0),
  191. _React$useState10 = (0, _slicedToArray2.default)(_React$useState9, 2),
  192. lastVisibleIndex = _React$useState10[0],
  193. setLastVisibleIndex = _React$useState10[1];
  194. var allVisible = lastVisibleIndex >= childList.length - 1 || internalMode !== 'horizontal' || disabledOverflow;
  195. // Cache
  196. React.useEffect(function () {
  197. if (isInlineMode) {
  198. setInlineCacheOpenKeys(mergedOpenKeys);
  199. }
  200. }, [mergedOpenKeys]);
  201. React.useEffect(function () {
  202. mountRef.current = true;
  203. return function () {
  204. mountRef.current = false;
  205. };
  206. }, []);
  207. // ========================= Path =========================
  208. var _useKeyRecords = (0, _useKeyRecords2.default)(),
  209. registerPath = _useKeyRecords.registerPath,
  210. unregisterPath = _useKeyRecords.unregisterPath,
  211. refreshOverflowKeys = _useKeyRecords.refreshOverflowKeys,
  212. isSubPathKey = _useKeyRecords.isSubPathKey,
  213. getKeyPath = _useKeyRecords.getKeyPath,
  214. getKeys = _useKeyRecords.getKeys,
  215. getSubPathKeys = _useKeyRecords.getSubPathKeys;
  216. var registerPathContext = React.useMemo(function () {
  217. return {
  218. registerPath: registerPath,
  219. unregisterPath: unregisterPath
  220. };
  221. }, [registerPath, unregisterPath]);
  222. var pathUserContext = React.useMemo(function () {
  223. return {
  224. isSubPathKey: isSubPathKey
  225. };
  226. }, [isSubPathKey]);
  227. React.useEffect(function () {
  228. refreshOverflowKeys(allVisible ? EMPTY_LIST : childList.slice(lastVisibleIndex + 1).map(function (child) {
  229. return child.key;
  230. }));
  231. }, [lastVisibleIndex, allVisible]);
  232. // ======================== Active ========================
  233. var _useMergedState3 = (0, _useMergedState7.default)(activeKey || defaultActiveFirst && ((_childList$ = childList[0]) === null || _childList$ === void 0 ? void 0 : _childList$.key), {
  234. value: activeKey
  235. }),
  236. _useMergedState4 = (0, _slicedToArray2.default)(_useMergedState3, 2),
  237. mergedActiveKey = _useMergedState4[0],
  238. setMergedActiveKey = _useMergedState4[1];
  239. var onActive = (0, _useMemoCallback.default)(function (key) {
  240. setMergedActiveKey(key);
  241. });
  242. var onInactive = (0, _useMemoCallback.default)(function () {
  243. setMergedActiveKey(undefined);
  244. });
  245. (0, _react.useImperativeHandle)(ref, function () {
  246. return {
  247. list: containerRef.current,
  248. focus: function focus(options) {
  249. var _childList$find;
  250. var keys = getKeys();
  251. var _refreshElements = (0, _useAccessibility.refreshElements)(keys, uuid),
  252. elements = _refreshElements.elements,
  253. key2element = _refreshElements.key2element,
  254. element2key = _refreshElements.element2key;
  255. var focusableElements = (0, _useAccessibility.getFocusableElements)(containerRef.current, elements);
  256. var shouldFocusKey = mergedActiveKey !== null && mergedActiveKey !== void 0 ? mergedActiveKey : focusableElements[0] ? element2key.get(focusableElements[0]) : (_childList$find = childList.find(function (node) {
  257. return !node.props.disabled;
  258. })) === null || _childList$find === void 0 ? void 0 : _childList$find.key;
  259. var elementToFocus = key2element.get(shouldFocusKey);
  260. if (shouldFocusKey && elementToFocus) {
  261. var _elementToFocus$focus;
  262. elementToFocus === null || elementToFocus === void 0 || (_elementToFocus$focus = elementToFocus.focus) === null || _elementToFocus$focus === void 0 || _elementToFocus$focus.call(elementToFocus, options);
  263. }
  264. }
  265. };
  266. });
  267. // ======================== Select ========================
  268. // >>>>> Select keys
  269. var _useMergedState5 = (0, _useMergedState7.default)(defaultSelectedKeys || [], {
  270. value: selectedKeys,
  271. // Legacy convert key to array
  272. postState: function postState(keys) {
  273. if (Array.isArray(keys)) {
  274. return keys;
  275. }
  276. if (keys === null || keys === undefined) {
  277. return EMPTY_LIST;
  278. }
  279. return [keys];
  280. }
  281. }),
  282. _useMergedState6 = (0, _slicedToArray2.default)(_useMergedState5, 2),
  283. mergedSelectKeys = _useMergedState6[0],
  284. setMergedSelectKeys = _useMergedState6[1];
  285. // >>>>> Trigger select
  286. var triggerSelection = function triggerSelection(info) {
  287. if (selectable) {
  288. // Insert or Remove
  289. var targetKey = info.key;
  290. var exist = mergedSelectKeys.includes(targetKey);
  291. var newSelectKeys;
  292. if (multiple) {
  293. if (exist) {
  294. newSelectKeys = mergedSelectKeys.filter(function (key) {
  295. return key !== targetKey;
  296. });
  297. } else {
  298. newSelectKeys = [].concat((0, _toConsumableArray2.default)(mergedSelectKeys), [targetKey]);
  299. }
  300. } else {
  301. newSelectKeys = [targetKey];
  302. }
  303. setMergedSelectKeys(newSelectKeys);
  304. // Trigger event
  305. var selectInfo = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, info), {}, {
  306. selectedKeys: newSelectKeys
  307. });
  308. if (exist) {
  309. onDeselect === null || onDeselect === void 0 || onDeselect(selectInfo);
  310. } else {
  311. onSelect === null || onSelect === void 0 || onSelect(selectInfo);
  312. }
  313. }
  314. // Whatever selectable, always close it
  315. if (!multiple && mergedOpenKeys.length && internalMode !== 'inline') {
  316. triggerOpenKeys(EMPTY_LIST);
  317. }
  318. };
  319. // ========================= Open =========================
  320. /**
  321. * Click for item. SubMenu do not have selection status
  322. */
  323. var onInternalClick = (0, _useMemoCallback.default)(function (info) {
  324. onClick === null || onClick === void 0 || onClick((0, _warnUtil.warnItemProp)(info));
  325. triggerSelection(info);
  326. });
  327. var onInternalOpenChange = (0, _useMemoCallback.default)(function (key, open) {
  328. var newOpenKeys = mergedOpenKeys.filter(function (k) {
  329. return k !== key;
  330. });
  331. if (open) {
  332. newOpenKeys.push(key);
  333. } else if (internalMode !== 'inline') {
  334. // We need find all related popup to close
  335. var subPathKeys = getSubPathKeys(key);
  336. newOpenKeys = newOpenKeys.filter(function (k) {
  337. return !subPathKeys.has(k);
  338. });
  339. }
  340. if (!(0, _isEqual.default)(mergedOpenKeys, newOpenKeys, true)) {
  341. triggerOpenKeys(newOpenKeys, true);
  342. }
  343. });
  344. // ==================== Accessibility =====================
  345. var triggerAccessibilityOpen = function triggerAccessibilityOpen(key, open) {
  346. var nextOpen = open !== null && open !== void 0 ? open : !mergedOpenKeys.includes(key);
  347. onInternalOpenChange(key, nextOpen);
  348. };
  349. var onInternalKeyDown = (0, _useAccessibility.useAccessibility)(internalMode, mergedActiveKey, isRtl, uuid, containerRef, getKeys, getKeyPath, setMergedActiveKey, triggerAccessibilityOpen, onKeyDown);
  350. // ======================== Effect ========================
  351. React.useEffect(function () {
  352. setMounted(true);
  353. }, []);
  354. // ======================= Context ========================
  355. var privateContext = React.useMemo(function () {
  356. return {
  357. _internalRenderMenuItem: _internalRenderMenuItem,
  358. _internalRenderSubMenuItem: _internalRenderSubMenuItem
  359. };
  360. }, [_internalRenderMenuItem, _internalRenderSubMenuItem]);
  361. // ======================== Render ========================
  362. // >>>>> Children
  363. var wrappedChildList = internalMode !== 'horizontal' || disabledOverflow ? childList :
  364. // Need wrap for overflow dropdown that do not response for open
  365. childList.map(function (child, index) {
  366. return (
  367. /*#__PURE__*/
  368. // Always wrap provider to avoid sub node re-mount
  369. React.createElement(_MenuContext.default, {
  370. key: child.key,
  371. overflowDisabled: index > lastVisibleIndex
  372. }, child)
  373. );
  374. });
  375. // >>>>> Container
  376. var container = /*#__PURE__*/React.createElement(_rcOverflow.default, (0, _extends2.default)({
  377. id: id,
  378. ref: containerRef,
  379. prefixCls: "".concat(prefixCls, "-overflow"),
  380. component: "ul",
  381. itemComponent: _MenuItem.default,
  382. className: (0, _classnames.default)(prefixCls, "".concat(prefixCls, "-root"), "".concat(prefixCls, "-").concat(internalMode), className, (0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(prefixCls, "-inline-collapsed"), internalInlineCollapsed), "".concat(prefixCls, "-rtl"), isRtl), rootClassName),
  383. dir: direction,
  384. style: style,
  385. role: "menu",
  386. tabIndex: tabIndex,
  387. data: wrappedChildList,
  388. renderRawItem: function renderRawItem(node) {
  389. return node;
  390. },
  391. renderRawRest: function renderRawRest(omitItems) {
  392. // We use origin list since wrapped list use context to prevent open
  393. var len = omitItems.length;
  394. var originOmitItems = len ? childList.slice(-len) : null;
  395. return /*#__PURE__*/React.createElement(_SubMenu.default, {
  396. eventKey: _useKeyRecords2.OVERFLOW_KEY,
  397. title: overflowedIndicator,
  398. disabled: allVisible,
  399. internalPopupClose: len === 0,
  400. popupClassName: overflowedIndicatorPopupClassName
  401. }, originOmitItems);
  402. },
  403. maxCount: internalMode !== 'horizontal' || disabledOverflow ? _rcOverflow.default.INVALIDATE : _rcOverflow.default.RESPONSIVE,
  404. ssr: "full",
  405. "data-menu-list": true,
  406. onVisibleChange: function onVisibleChange(newLastIndex) {
  407. setLastVisibleIndex(newLastIndex);
  408. },
  409. onKeyDown: onInternalKeyDown
  410. }, restProps));
  411. // >>>>> Render
  412. return /*#__PURE__*/React.createElement(_PrivateContext.default.Provider, {
  413. value: privateContext
  414. }, /*#__PURE__*/React.createElement(_IdContext.IdContext.Provider, {
  415. value: uuid
  416. }, /*#__PURE__*/React.createElement(_MenuContext.default, {
  417. prefixCls: prefixCls,
  418. rootClassName: rootClassName,
  419. mode: internalMode,
  420. openKeys: mergedOpenKeys,
  421. rtl: isRtl
  422. // Disabled
  423. ,
  424. disabled: disabled
  425. // Motion
  426. ,
  427. motion: mounted ? motion : null,
  428. defaultMotions: mounted ? defaultMotions : null
  429. // Active
  430. ,
  431. activeKey: mergedActiveKey,
  432. onActive: onActive,
  433. onInactive: onInactive
  434. // Selection
  435. ,
  436. selectedKeys: mergedSelectKeys
  437. // Level
  438. ,
  439. inlineIndent: inlineIndent
  440. // Popup
  441. ,
  442. subMenuOpenDelay: subMenuOpenDelay,
  443. subMenuCloseDelay: subMenuCloseDelay,
  444. forceSubMenuRender: forceSubMenuRender,
  445. builtinPlacements: builtinPlacements,
  446. triggerSubMenuAction: triggerSubMenuAction,
  447. getPopupContainer: getPopupContainer
  448. // Icon
  449. ,
  450. itemIcon: itemIcon,
  451. expandIcon: expandIcon
  452. // Events
  453. ,
  454. onItemClick: onInternalClick,
  455. onOpenChange: onInternalOpenChange
  456. }, /*#__PURE__*/React.createElement(_PathContext.PathUserContext.Provider, {
  457. value: pathUserContext
  458. }, container), /*#__PURE__*/React.createElement("div", {
  459. style: {
  460. display: 'none'
  461. },
  462. "aria-hidden": true
  463. }, /*#__PURE__*/React.createElement(_PathContext.PathRegisterContext.Provider, {
  464. value: registerPathContext
  465. }, measureChildList)))));
  466. });
  467. var _default = exports.default = Menu;