Menu.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  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.menuProps = exports.default = void 0;
  8. var _vue = require("vue");
  9. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  10. var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  11. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  12. var _shallowequal = _interopRequireDefault(require("../../_util/shallowequal"));
  13. var _useMenuContext = _interopRequireWildcard(require("./hooks/useMenuContext"));
  14. var _useConfigInject2 = _interopRequireDefault(require("../../_util/hooks/useConfigInject"));
  15. var _devWarning = _interopRequireDefault(require("../../vc-util/devWarning"));
  16. var _uniq = _interopRequireDefault(require("lodash/uniq"));
  17. var _injectionKey = require("../../layout/injectionKey");
  18. var _propsUtil = require("../../_util/props-util");
  19. var _vcOverflow = _interopRequireDefault(require("../../vc-overflow"));
  20. var _MenuItem = _interopRequireDefault(require("./MenuItem"));
  21. var _SubMenu = _interopRequireDefault(require("./SubMenu"));
  22. var _EllipsisOutlined = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/EllipsisOutlined"));
  23. var _vnode = require("../../_util/vnode");
  24. var _useKeyPath = require("./hooks/useKeyPath");
  25. var _collapseMotion = _interopRequireDefault(require("../../_util/collapseMotion"));
  26. function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
  27. function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
  28. var menuProps = function menuProps() {
  29. return {
  30. id: String,
  31. prefixCls: String,
  32. disabled: Boolean,
  33. inlineCollapsed: Boolean,
  34. disabledOverflow: Boolean,
  35. forceSubMenuRender: Boolean,
  36. openKeys: Array,
  37. selectedKeys: Array,
  38. activeKey: String,
  39. selectable: {
  40. type: Boolean,
  41. default: true
  42. },
  43. multiple: {
  44. type: Boolean,
  45. default: false
  46. },
  47. motion: Object,
  48. theme: {
  49. type: String,
  50. default: 'light'
  51. },
  52. mode: {
  53. type: String,
  54. default: 'vertical'
  55. },
  56. inlineIndent: {
  57. type: Number,
  58. default: 24
  59. },
  60. subMenuOpenDelay: {
  61. type: Number,
  62. default: 0.1
  63. },
  64. subMenuCloseDelay: {
  65. type: Number,
  66. default: 0.1
  67. },
  68. builtinPlacements: {
  69. type: Object
  70. },
  71. triggerSubMenuAction: {
  72. type: String,
  73. default: 'hover'
  74. },
  75. getPopupContainer: Function,
  76. expandIcon: Function,
  77. onOpenChange: Function,
  78. onSelect: Function,
  79. onDeselect: Function,
  80. onClick: [Function, Array],
  81. onFocus: Function,
  82. onBlur: Function,
  83. onMousedown: Function,
  84. 'onUpdate:openKeys': Function,
  85. 'onUpdate:selectedKeys': Function,
  86. 'onUpdate:activeKey': Function
  87. };
  88. };
  89. exports.menuProps = menuProps;
  90. var EMPTY_LIST = [];
  91. var _default2 = (0, _vue.defineComponent)({
  92. compatConfig: {
  93. MODE: 3
  94. },
  95. name: 'AMenu',
  96. inheritAttrs: false,
  97. props: menuProps(),
  98. slots: ['expandIcon', 'overflowedIndicator'],
  99. setup: function setup(props, _ref) {
  100. var slots = _ref.slots,
  101. emit = _ref.emit,
  102. attrs = _ref.attrs;
  103. var _useConfigInject = (0, _useConfigInject2.default)('menu', props),
  104. prefixCls = _useConfigInject.prefixCls,
  105. direction = _useConfigInject.direction,
  106. getPrefixCls = _useConfigInject.getPrefixCls;
  107. var store = (0, _vue.ref)({});
  108. var siderCollapsed = (0, _vue.inject)(_injectionKey.SiderCollapsedKey, (0, _vue.ref)(undefined));
  109. var inlineCollapsed = (0, _vue.computed)(function () {
  110. if (siderCollapsed.value !== undefined) {
  111. return siderCollapsed.value;
  112. }
  113. return props.inlineCollapsed;
  114. });
  115. var isMounted = (0, _vue.ref)(false);
  116. (0, _vue.onMounted)(function () {
  117. isMounted.value = true;
  118. });
  119. (0, _vue.watchEffect)(function () {
  120. (0, _devWarning.default)(!(props.inlineCollapsed === true && props.mode !== 'inline'), 'Menu', '`inlineCollapsed` should only be used when `mode` is inline.');
  121. (0, _devWarning.default)(!(siderCollapsed.value !== undefined && props.inlineCollapsed === true), 'Menu', '`inlineCollapsed` not control Menu under Sider. Should set `collapsed` on Sider instead.');
  122. });
  123. var activeKeys = (0, _vue.ref)([]);
  124. var mergedSelectedKeys = (0, _vue.ref)([]);
  125. var keyMapStore = (0, _vue.ref)({});
  126. (0, _vue.watch)(store, function () {
  127. var newKeyMapStore = {};
  128. for (var _i = 0, _Object$values = Object.values(store.value); _i < _Object$values.length; _i++) {
  129. var menuInfo = _Object$values[_i];
  130. newKeyMapStore[menuInfo.key] = menuInfo;
  131. }
  132. keyMapStore.value = newKeyMapStore;
  133. }, {
  134. flush: 'post'
  135. });
  136. (0, _vue.watchEffect)(function () {
  137. if (props.activeKey !== undefined) {
  138. var keys = [];
  139. var menuInfo = props.activeKey ? keyMapStore.value[props.activeKey] : undefined;
  140. if (menuInfo && props.activeKey !== undefined) {
  141. keys = (0, _uniq.default)([].concat((0, _vue.unref)(menuInfo.parentKeys), props.activeKey));
  142. } else {
  143. keys = [];
  144. }
  145. if (!(0, _shallowequal.default)(activeKeys.value, keys)) {
  146. activeKeys.value = keys;
  147. }
  148. }
  149. });
  150. (0, _vue.watch)(function () {
  151. return props.selectedKeys;
  152. }, function (selectedKeys) {
  153. if (selectedKeys) {
  154. mergedSelectedKeys.value = selectedKeys.slice();
  155. }
  156. }, {
  157. immediate: true,
  158. deep: true
  159. });
  160. var selectedSubMenuKeys = (0, _vue.ref)([]);
  161. (0, _vue.watch)([keyMapStore, mergedSelectedKeys], function () {
  162. var subMenuParentKeys = [];
  163. mergedSelectedKeys.value.forEach(function (key) {
  164. var menuInfo = keyMapStore.value[key];
  165. if (menuInfo) {
  166. subMenuParentKeys = subMenuParentKeys.concat((0, _vue.unref)(menuInfo.parentKeys));
  167. }
  168. });
  169. subMenuParentKeys = (0, _uniq.default)(subMenuParentKeys);
  170. if (!(0, _shallowequal.default)(selectedSubMenuKeys.value, subMenuParentKeys)) {
  171. selectedSubMenuKeys.value = subMenuParentKeys;
  172. }
  173. }, {
  174. immediate: true
  175. });
  176. // >>>>> Trigger select
  177. var triggerSelection = function triggerSelection(info) {
  178. if (!props.selectable) {
  179. return;
  180. }
  181. // Insert or Remove
  182. var targetKey = info.key;
  183. var exist = mergedSelectedKeys.value.includes(targetKey);
  184. var newSelectedKeys;
  185. if (props.multiple) {
  186. if (exist) {
  187. newSelectedKeys = mergedSelectedKeys.value.filter(function (key) {
  188. return key !== targetKey;
  189. });
  190. } else {
  191. newSelectedKeys = [].concat((0, _toConsumableArray2.default)(mergedSelectedKeys.value), [targetKey]);
  192. }
  193. } else {
  194. newSelectedKeys = [targetKey];
  195. }
  196. // Trigger event
  197. var selectInfo = (0, _objectSpread3.default)((0, _objectSpread3.default)({}, info), {}, {
  198. selectedKeys: newSelectedKeys
  199. });
  200. if (!(0, _shallowequal.default)(newSelectedKeys, mergedSelectedKeys.value)) {
  201. if (props.selectedKeys === undefined) {
  202. mergedSelectedKeys.value = newSelectedKeys;
  203. }
  204. emit('update:selectedKeys', newSelectedKeys);
  205. if (exist && props.multiple) {
  206. emit('deselect', selectInfo);
  207. } else {
  208. emit('select', selectInfo);
  209. }
  210. }
  211. if (mergedMode.value !== 'inline' && !props.multiple && mergedOpenKeys.value.length) {
  212. triggerOpenKeys(EMPTY_LIST);
  213. }
  214. };
  215. var mergedOpenKeys = (0, _vue.ref)([]);
  216. (0, _vue.watch)(function () {
  217. return props.openKeys;
  218. }, function () {
  219. var openKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : mergedOpenKeys.value;
  220. if (!(0, _shallowequal.default)(mergedOpenKeys.value, openKeys)) {
  221. mergedOpenKeys.value = openKeys.slice();
  222. }
  223. }, {
  224. immediate: true,
  225. deep: true
  226. });
  227. var timeout;
  228. var changeActiveKeys = function changeActiveKeys(keys) {
  229. clearTimeout(timeout);
  230. timeout = setTimeout(function () {
  231. if (props.activeKey === undefined) {
  232. activeKeys.value = keys;
  233. }
  234. emit('update:activeKey', keys[keys.length - 1]);
  235. });
  236. };
  237. var disabled = (0, _vue.computed)(function () {
  238. return !!props.disabled;
  239. });
  240. var isRtl = (0, _vue.computed)(function () {
  241. return direction.value === 'rtl';
  242. });
  243. var mergedMode = (0, _vue.ref)('vertical');
  244. var mergedInlineCollapsed = (0, _vue.ref)(false);
  245. (0, _vue.watchEffect)(function () {
  246. if ((props.mode === 'inline' || props.mode === 'vertical') && inlineCollapsed.value) {
  247. mergedMode.value = 'vertical';
  248. mergedInlineCollapsed.value = inlineCollapsed.value;
  249. } else {
  250. mergedMode.value = props.mode;
  251. mergedInlineCollapsed.value = false;
  252. }
  253. });
  254. var isInlineMode = (0, _vue.computed)(function () {
  255. return mergedMode.value === 'inline';
  256. });
  257. var triggerOpenKeys = function triggerOpenKeys(keys) {
  258. mergedOpenKeys.value = keys;
  259. emit('update:openKeys', keys);
  260. emit('openChange', keys);
  261. };
  262. // >>>>> Cache & Reset open keys when inlineCollapsed changed
  263. var inlineCacheOpenKeys = (0, _vue.ref)(mergedOpenKeys.value);
  264. var mountRef = (0, _vue.ref)(false);
  265. // Cache
  266. (0, _vue.watch)(mergedOpenKeys, function () {
  267. if (isInlineMode.value) {
  268. inlineCacheOpenKeys.value = mergedOpenKeys.value;
  269. }
  270. }, {
  271. immediate: true
  272. });
  273. // Restore
  274. (0, _vue.watch)(isInlineMode, function () {
  275. if (!mountRef.value) {
  276. mountRef.value = true;
  277. return;
  278. }
  279. if (isInlineMode.value) {
  280. mergedOpenKeys.value = inlineCacheOpenKeys.value;
  281. } else {
  282. // Trigger open event in case its in control
  283. triggerOpenKeys(EMPTY_LIST);
  284. }
  285. }, {
  286. immediate: true
  287. });
  288. var className = (0, _vue.computed)(function () {
  289. var _ref2;
  290. return _ref2 = {}, (0, _defineProperty2.default)(_ref2, "".concat(prefixCls.value), true), (0, _defineProperty2.default)(_ref2, "".concat(prefixCls.value, "-root"), true), (0, _defineProperty2.default)(_ref2, "".concat(prefixCls.value, "-").concat(mergedMode.value), true), (0, _defineProperty2.default)(_ref2, "".concat(prefixCls.value, "-inline-collapsed"), mergedInlineCollapsed.value), (0, _defineProperty2.default)(_ref2, "".concat(prefixCls.value, "-rtl"), isRtl.value), (0, _defineProperty2.default)(_ref2, "".concat(prefixCls.value, "-").concat(props.theme), true), _ref2;
  291. });
  292. var rootPrefixCls = (0, _vue.computed)(function () {
  293. return getPrefixCls();
  294. });
  295. var defaultMotions = (0, _vue.computed)(function () {
  296. return {
  297. horizontal: {
  298. name: "".concat(rootPrefixCls.value, "-slide-up")
  299. },
  300. inline: _collapseMotion.default,
  301. other: {
  302. name: "".concat(rootPrefixCls.value, "-zoom-big")
  303. }
  304. };
  305. });
  306. (0, _useMenuContext.useProvideFirstLevel)(true);
  307. var getChildrenKeys = function getChildrenKeys() {
  308. var eventKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  309. var keys = [];
  310. var storeValue = store.value;
  311. eventKeys.forEach(function (eventKey) {
  312. var _storeValue$eventKey = storeValue[eventKey],
  313. key = _storeValue$eventKey.key,
  314. childrenEventKeys = _storeValue$eventKey.childrenEventKeys;
  315. keys.push.apply(keys, [key].concat((0, _toConsumableArray2.default)(getChildrenKeys((0, _vue.unref)(childrenEventKeys)))));
  316. });
  317. return keys;
  318. };
  319. // ========================= Open =========================
  320. /**
  321. * Click for item. SubMenu do not have selection status
  322. */
  323. var onInternalClick = function onInternalClick(info) {
  324. emit('click', info);
  325. triggerSelection(info);
  326. };
  327. var onInternalOpenChange = function onInternalOpenChange(key, open) {
  328. var _keyMapStore$value$ke;
  329. var childrenEventKeys = ((_keyMapStore$value$ke = keyMapStore.value[key]) === null || _keyMapStore$value$ke === void 0 ? void 0 : _keyMapStore$value$ke.childrenEventKeys) || [];
  330. var newOpenKeys = mergedOpenKeys.value.filter(function (k) {
  331. return k !== key;
  332. });
  333. if (open) {
  334. newOpenKeys.push(key);
  335. } else if (mergedMode.value !== 'inline') {
  336. // We need find all related popup to close
  337. var subPathKeys = getChildrenKeys((0, _vue.unref)(childrenEventKeys));
  338. newOpenKeys = (0, _uniq.default)(newOpenKeys.filter(function (k) {
  339. return !subPathKeys.includes(k);
  340. }));
  341. }
  342. if (!(0, _shallowequal.default)(mergedOpenKeys, newOpenKeys)) {
  343. triggerOpenKeys(newOpenKeys);
  344. }
  345. };
  346. var registerMenuInfo = function registerMenuInfo(key, info) {
  347. store.value = (0, _objectSpread3.default)((0, _objectSpread3.default)({}, store.value), {}, (0, _defineProperty2.default)({}, key, info));
  348. };
  349. var unRegisterMenuInfo = function unRegisterMenuInfo(key) {
  350. delete store.value[key];
  351. store.value = (0, _objectSpread3.default)({}, store.value);
  352. };
  353. var lastVisibleIndex = (0, _vue.ref)(0);
  354. var expandIcon = (0, _vue.computed)(function () {
  355. return props.expandIcon || slots.expandIcon ? function (opt) {
  356. var icon = props.expandIcon || slots.expandIcon;
  357. icon = typeof icon === 'function' ? icon(opt) : icon;
  358. return (0, _vnode.cloneElement)(icon, {
  359. class: "".concat(prefixCls.value, "-submenu-expand-icon")
  360. }, false);
  361. } : null;
  362. });
  363. (0, _useMenuContext.default)({
  364. store: store,
  365. prefixCls: prefixCls,
  366. activeKeys: activeKeys,
  367. openKeys: mergedOpenKeys,
  368. selectedKeys: mergedSelectedKeys,
  369. changeActiveKeys: changeActiveKeys,
  370. disabled: disabled,
  371. rtl: isRtl,
  372. mode: mergedMode,
  373. inlineIndent: (0, _vue.computed)(function () {
  374. return props.inlineIndent;
  375. }),
  376. subMenuCloseDelay: (0, _vue.computed)(function () {
  377. return props.subMenuCloseDelay;
  378. }),
  379. subMenuOpenDelay: (0, _vue.computed)(function () {
  380. return props.subMenuOpenDelay;
  381. }),
  382. builtinPlacements: (0, _vue.computed)(function () {
  383. return props.builtinPlacements;
  384. }),
  385. triggerSubMenuAction: (0, _vue.computed)(function () {
  386. return props.triggerSubMenuAction;
  387. }),
  388. getPopupContainer: (0, _vue.computed)(function () {
  389. return props.getPopupContainer;
  390. }),
  391. inlineCollapsed: mergedInlineCollapsed,
  392. antdMenuTheme: (0, _vue.computed)(function () {
  393. return props.theme;
  394. }),
  395. siderCollapsed: siderCollapsed,
  396. defaultMotions: (0, _vue.computed)(function () {
  397. return isMounted.value ? defaultMotions.value : null;
  398. }),
  399. motion: (0, _vue.computed)(function () {
  400. return isMounted.value ? props.motion : null;
  401. }),
  402. overflowDisabled: (0, _vue.ref)(undefined),
  403. onOpenChange: onInternalOpenChange,
  404. onItemClick: onInternalClick,
  405. registerMenuInfo: registerMenuInfo,
  406. unRegisterMenuInfo: unRegisterMenuInfo,
  407. selectedSubMenuKeys: selectedSubMenuKeys,
  408. isRootMenu: (0, _vue.ref)(true),
  409. expandIcon: expandIcon,
  410. forceSubMenuRender: (0, _vue.computed)(function () {
  411. return props.forceSubMenuRender;
  412. })
  413. });
  414. return function () {
  415. var _slots$default, _slots$overflowedIndi;
  416. var childList = (0, _propsUtil.flattenChildren)((_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots));
  417. var allVisible = lastVisibleIndex.value >= childList.length - 1 || mergedMode.value !== 'horizontal' || props.disabledOverflow;
  418. // >>>>> Children
  419. var wrappedChildList = mergedMode.value !== 'horizontal' || props.disabledOverflow ? childList :
  420. // Need wrap for overflow dropdown that do not response for open
  421. childList.map(function (child, index) {
  422. return (// Always wrap provider to avoid sub node re-mount
  423. (0, _vue.createVNode)(_useMenuContext.MenuContextProvider, {
  424. "key": child.key,
  425. "overflowDisabled": index > lastVisibleIndex.value
  426. }, {
  427. default: function _default() {
  428. return child;
  429. }
  430. })
  431. );
  432. });
  433. var overflowedIndicator = ((_slots$overflowedIndi = slots.overflowedIndicator) === null || _slots$overflowedIndi === void 0 ? void 0 : _slots$overflowedIndi.call(slots)) || (0, _vue.createVNode)(_EllipsisOutlined.default, null, null);
  434. return (0, _vue.createVNode)(_vcOverflow.default, (0, _objectSpread3.default)((0, _objectSpread3.default)({}, attrs), {}, {
  435. "onMousedown": props.onMousedown,
  436. "prefixCls": "".concat(prefixCls.value, "-overflow"),
  437. "component": "ul",
  438. "itemComponent": _MenuItem.default,
  439. "class": [className.value, attrs.class],
  440. "role": "menu",
  441. "id": props.id,
  442. "data": wrappedChildList,
  443. "renderRawItem": function renderRawItem(node) {
  444. return node;
  445. },
  446. "renderRawRest": function renderRawRest(omitItems) {
  447. // We use origin list since wrapped list use context to prevent open
  448. var len = omitItems.length;
  449. var originOmitItems = len ? childList.slice(-len) : null;
  450. return (0, _vue.createVNode)(_vue.Fragment, null, [(0, _vue.createVNode)(_SubMenu.default, {
  451. "eventKey": _useKeyPath.OVERFLOW_KEY,
  452. "key": _useKeyPath.OVERFLOW_KEY,
  453. "title": overflowedIndicator,
  454. "disabled": allVisible,
  455. "internalPopupClose": len === 0
  456. }, {
  457. default: function _default() {
  458. return originOmitItems;
  459. }
  460. }), (0, _vue.createVNode)(_useKeyPath.PathContext, null, {
  461. default: function _default() {
  462. return [(0, _vue.createVNode)(_SubMenu.default, {
  463. "eventKey": _useKeyPath.OVERFLOW_KEY,
  464. "key": _useKeyPath.OVERFLOW_KEY,
  465. "title": overflowedIndicator,
  466. "disabled": allVisible,
  467. "internalPopupClose": len === 0
  468. }, {
  469. default: function _default() {
  470. return originOmitItems;
  471. }
  472. })];
  473. }
  474. })]);
  475. },
  476. "maxCount": mergedMode.value !== 'horizontal' || props.disabledOverflow ? _vcOverflow.default.INVALIDATE : _vcOverflow.default.RESPONSIVE,
  477. "ssr": "full",
  478. "data-menu-list": true,
  479. "onVisibleChange": function onVisibleChange(newLastIndex) {
  480. lastVisibleIndex.value = newLastIndex;
  481. }
  482. }), {
  483. default: function _default() {
  484. return [(0, _vue.createVNode)(_vue.Teleport, {
  485. "to": "body"
  486. }, {
  487. default: function _default() {
  488. return [(0, _vue.createVNode)("div", {
  489. "style": {
  490. display: 'none'
  491. },
  492. "aria-hidden": true
  493. }, [(0, _vue.createVNode)(_useKeyPath.PathContext, null, {
  494. default: function _default() {
  495. return [wrappedChildList];
  496. }
  497. })])];
  498. }
  499. })];
  500. }
  501. });
  502. };
  503. }
  504. });
  505. exports.default = _default2;