index.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  3. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = void 0;
  8. exports.generateTrigger = generateTrigger;
  9. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  10. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  11. var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
  12. var _portal = _interopRequireDefault(require("@rc-component/portal"));
  13. var _classnames = _interopRequireDefault(require("classnames"));
  14. var _rcResizeObserver = _interopRequireDefault(require("rc-resize-observer"));
  15. var _findDOMNode = require("rc-util/lib/Dom/findDOMNode");
  16. var _shadow = require("rc-util/lib/Dom/shadow");
  17. var _useEvent = _interopRequireDefault(require("rc-util/lib/hooks/useEvent"));
  18. var _useId = _interopRequireDefault(require("rc-util/lib/hooks/useId"));
  19. var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
  20. var _isMobile = _interopRequireDefault(require("rc-util/lib/isMobile"));
  21. var React = _interopRequireWildcard(require("react"));
  22. var _Popup = _interopRequireDefault(require("./Popup"));
  23. var _TriggerWrapper = _interopRequireDefault(require("./TriggerWrapper"));
  24. var _context = _interopRequireDefault(require("./context"));
  25. var _useAction3 = _interopRequireDefault(require("./hooks/useAction"));
  26. var _useAlign3 = _interopRequireDefault(require("./hooks/useAlign"));
  27. var _useWatch = _interopRequireDefault(require("./hooks/useWatch"));
  28. var _useWinClick = _interopRequireDefault(require("./hooks/useWinClick"));
  29. var _util = require("./util");
  30. var _excluded = ["prefixCls", "children", "action", "showAction", "hideAction", "popupVisible", "defaultPopupVisible", "onPopupVisibleChange", "afterPopupVisibleChange", "mouseEnterDelay", "mouseLeaveDelay", "focusDelay", "blurDelay", "mask", "maskClosable", "getPopupContainer", "forceRender", "autoDestroy", "destroyPopupOnHide", "popup", "popupClassName", "popupStyle", "popupPlacement", "builtinPlacements", "popupAlign", "zIndex", "stretch", "getPopupClassNameFromAlign", "fresh", "alignPoint", "onPopupClick", "onPopupAlign", "arrow", "popupMotion", "maskMotion", "popupTransitionName", "popupAnimation", "maskTransitionName", "maskAnimation", "className", "getTriggerDOMNode"];
  31. // Removed Props List
  32. // Seems this can be auto
  33. // getDocument?: (element?: HTMLElement) => Document;
  34. // New version will not wrap popup with `rc-trigger-popup-content` when multiple children
  35. function generateTrigger() {
  36. var PortalComponent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _portal.default;
  37. var Trigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
  38. var _props$prefixCls = props.prefixCls,
  39. prefixCls = _props$prefixCls === void 0 ? 'rc-trigger-popup' : _props$prefixCls,
  40. children = props.children,
  41. _props$action = props.action,
  42. action = _props$action === void 0 ? 'hover' : _props$action,
  43. showAction = props.showAction,
  44. hideAction = props.hideAction,
  45. popupVisible = props.popupVisible,
  46. defaultPopupVisible = props.defaultPopupVisible,
  47. onPopupVisibleChange = props.onPopupVisibleChange,
  48. afterPopupVisibleChange = props.afterPopupVisibleChange,
  49. mouseEnterDelay = props.mouseEnterDelay,
  50. _props$mouseLeaveDela = props.mouseLeaveDelay,
  51. mouseLeaveDelay = _props$mouseLeaveDela === void 0 ? 0.1 : _props$mouseLeaveDela,
  52. focusDelay = props.focusDelay,
  53. blurDelay = props.blurDelay,
  54. mask = props.mask,
  55. _props$maskClosable = props.maskClosable,
  56. maskClosable = _props$maskClosable === void 0 ? true : _props$maskClosable,
  57. getPopupContainer = props.getPopupContainer,
  58. forceRender = props.forceRender,
  59. autoDestroy = props.autoDestroy,
  60. destroyPopupOnHide = props.destroyPopupOnHide,
  61. popup = props.popup,
  62. popupClassName = props.popupClassName,
  63. popupStyle = props.popupStyle,
  64. popupPlacement = props.popupPlacement,
  65. _props$builtinPlaceme = props.builtinPlacements,
  66. builtinPlacements = _props$builtinPlaceme === void 0 ? {} : _props$builtinPlaceme,
  67. popupAlign = props.popupAlign,
  68. zIndex = props.zIndex,
  69. stretch = props.stretch,
  70. getPopupClassNameFromAlign = props.getPopupClassNameFromAlign,
  71. fresh = props.fresh,
  72. alignPoint = props.alignPoint,
  73. onPopupClick = props.onPopupClick,
  74. onPopupAlign = props.onPopupAlign,
  75. arrow = props.arrow,
  76. popupMotion = props.popupMotion,
  77. maskMotion = props.maskMotion,
  78. popupTransitionName = props.popupTransitionName,
  79. popupAnimation = props.popupAnimation,
  80. maskTransitionName = props.maskTransitionName,
  81. maskAnimation = props.maskAnimation,
  82. className = props.className,
  83. getTriggerDOMNode = props.getTriggerDOMNode,
  84. restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
  85. var mergedAutoDestroy = autoDestroy || destroyPopupOnHide || false;
  86. // =========================== Mobile ===========================
  87. var _React$useState = React.useState(false),
  88. _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
  89. mobile = _React$useState2[0],
  90. setMobile = _React$useState2[1];
  91. (0, _useLayoutEffect.default)(function () {
  92. setMobile((0, _isMobile.default)());
  93. }, []);
  94. // ========================== Context ===========================
  95. var subPopupElements = React.useRef({});
  96. var parentContext = React.useContext(_context.default);
  97. var context = React.useMemo(function () {
  98. return {
  99. registerSubPopup: function registerSubPopup(id, subPopupEle) {
  100. subPopupElements.current[id] = subPopupEle;
  101. parentContext === null || parentContext === void 0 || parentContext.registerSubPopup(id, subPopupEle);
  102. }
  103. };
  104. }, [parentContext]);
  105. // =========================== Popup ============================
  106. var id = (0, _useId.default)();
  107. var _React$useState3 = React.useState(null),
  108. _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
  109. popupEle = _React$useState4[0],
  110. setPopupEle = _React$useState4[1];
  111. // Used for forwardRef popup. Not use internal
  112. var externalPopupRef = React.useRef(null);
  113. var setPopupRef = (0, _useEvent.default)(function (node) {
  114. externalPopupRef.current = node;
  115. if ((0, _findDOMNode.isDOM)(node) && popupEle !== node) {
  116. setPopupEle(node);
  117. }
  118. parentContext === null || parentContext === void 0 || parentContext.registerSubPopup(id, node);
  119. });
  120. // =========================== Target ===========================
  121. // Use state to control here since `useRef` update not trigger render
  122. var _React$useState5 = React.useState(null),
  123. _React$useState6 = (0, _slicedToArray2.default)(_React$useState5, 2),
  124. targetEle = _React$useState6[0],
  125. setTargetEle = _React$useState6[1];
  126. // Used for forwardRef target. Not use internal
  127. var externalForwardRef = React.useRef(null);
  128. var setTargetRef = (0, _useEvent.default)(function (node) {
  129. if ((0, _findDOMNode.isDOM)(node) && targetEle !== node) {
  130. setTargetEle(node);
  131. externalForwardRef.current = node;
  132. }
  133. });
  134. // ========================== Children ==========================
  135. var child = React.Children.only(children);
  136. var originChildProps = (child === null || child === void 0 ? void 0 : child.props) || {};
  137. var cloneProps = {};
  138. var inPopupOrChild = (0, _useEvent.default)(function (ele) {
  139. var _getShadowRoot, _getShadowRoot2;
  140. var childDOM = targetEle;
  141. return (childDOM === null || childDOM === void 0 ? void 0 : childDOM.contains(ele)) || ((_getShadowRoot = (0, _shadow.getShadowRoot)(childDOM)) === null || _getShadowRoot === void 0 ? void 0 : _getShadowRoot.host) === ele || ele === childDOM || (popupEle === null || popupEle === void 0 ? void 0 : popupEle.contains(ele)) || ((_getShadowRoot2 = (0, _shadow.getShadowRoot)(popupEle)) === null || _getShadowRoot2 === void 0 ? void 0 : _getShadowRoot2.host) === ele || ele === popupEle || Object.values(subPopupElements.current).some(function (subPopupEle) {
  142. return (subPopupEle === null || subPopupEle === void 0 ? void 0 : subPopupEle.contains(ele)) || ele === subPopupEle;
  143. });
  144. });
  145. // =========================== Motion ===========================
  146. var mergePopupMotion = (0, _util.getMotion)(prefixCls, popupMotion, popupAnimation, popupTransitionName);
  147. var mergeMaskMotion = (0, _util.getMotion)(prefixCls, maskMotion, maskAnimation, maskTransitionName);
  148. // ============================ Open ============================
  149. var _React$useState7 = React.useState(defaultPopupVisible || false),
  150. _React$useState8 = (0, _slicedToArray2.default)(_React$useState7, 2),
  151. internalOpen = _React$useState8[0],
  152. setInternalOpen = _React$useState8[1];
  153. // Render still use props as first priority
  154. var mergedOpen = popupVisible !== null && popupVisible !== void 0 ? popupVisible : internalOpen;
  155. // We use effect sync here in case `popupVisible` back to `undefined`
  156. var setMergedOpen = (0, _useEvent.default)(function (nextOpen) {
  157. if (popupVisible === undefined) {
  158. setInternalOpen(nextOpen);
  159. }
  160. });
  161. (0, _useLayoutEffect.default)(function () {
  162. setInternalOpen(popupVisible || false);
  163. }, [popupVisible]);
  164. var openRef = React.useRef(mergedOpen);
  165. openRef.current = mergedOpen;
  166. var lastTriggerRef = React.useRef([]);
  167. lastTriggerRef.current = [];
  168. var internalTriggerOpen = (0, _useEvent.default)(function (nextOpen) {
  169. var _lastTriggerRef$curre;
  170. setMergedOpen(nextOpen);
  171. // Enter or Pointer will both trigger open state change
  172. // We only need take one to avoid duplicated change event trigger
  173. // Use `lastTriggerRef` to record last open type
  174. if (((_lastTriggerRef$curre = lastTriggerRef.current[lastTriggerRef.current.length - 1]) !== null && _lastTriggerRef$curre !== void 0 ? _lastTriggerRef$curre : mergedOpen) !== nextOpen) {
  175. lastTriggerRef.current.push(nextOpen);
  176. onPopupVisibleChange === null || onPopupVisibleChange === void 0 || onPopupVisibleChange(nextOpen);
  177. }
  178. });
  179. // Trigger for delay
  180. var delayRef = React.useRef();
  181. var clearDelay = function clearDelay() {
  182. clearTimeout(delayRef.current);
  183. };
  184. var triggerOpen = function triggerOpen(nextOpen) {
  185. var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  186. clearDelay();
  187. if (delay === 0) {
  188. internalTriggerOpen(nextOpen);
  189. } else {
  190. delayRef.current = setTimeout(function () {
  191. internalTriggerOpen(nextOpen);
  192. }, delay * 1000);
  193. }
  194. };
  195. React.useEffect(function () {
  196. return clearDelay;
  197. }, []);
  198. // ========================== Motion ============================
  199. var _React$useState9 = React.useState(false),
  200. _React$useState10 = (0, _slicedToArray2.default)(_React$useState9, 2),
  201. inMotion = _React$useState10[0],
  202. setInMotion = _React$useState10[1];
  203. (0, _useLayoutEffect.default)(function (firstMount) {
  204. if (!firstMount || mergedOpen) {
  205. setInMotion(true);
  206. }
  207. }, [mergedOpen]);
  208. var _React$useState11 = React.useState(null),
  209. _React$useState12 = (0, _slicedToArray2.default)(_React$useState11, 2),
  210. motionPrepareResolve = _React$useState12[0],
  211. setMotionPrepareResolve = _React$useState12[1];
  212. // =========================== Align ============================
  213. var _React$useState13 = React.useState(null),
  214. _React$useState14 = (0, _slicedToArray2.default)(_React$useState13, 2),
  215. mousePos = _React$useState14[0],
  216. setMousePos = _React$useState14[1];
  217. var setMousePosByEvent = function setMousePosByEvent(event) {
  218. setMousePos([event.clientX, event.clientY]);
  219. };
  220. var _useAlign = (0, _useAlign3.default)(mergedOpen, popupEle, alignPoint && mousePos !== null ? mousePos : targetEle, popupPlacement, builtinPlacements, popupAlign, onPopupAlign),
  221. _useAlign2 = (0, _slicedToArray2.default)(_useAlign, 11),
  222. ready = _useAlign2[0],
  223. offsetX = _useAlign2[1],
  224. offsetY = _useAlign2[2],
  225. offsetR = _useAlign2[3],
  226. offsetB = _useAlign2[4],
  227. arrowX = _useAlign2[5],
  228. arrowY = _useAlign2[6],
  229. scaleX = _useAlign2[7],
  230. scaleY = _useAlign2[8],
  231. alignInfo = _useAlign2[9],
  232. onAlign = _useAlign2[10];
  233. var _useAction = (0, _useAction3.default)(mobile, action, showAction, hideAction),
  234. _useAction2 = (0, _slicedToArray2.default)(_useAction, 2),
  235. showActions = _useAction2[0],
  236. hideActions = _useAction2[1];
  237. var clickToShow = showActions.has('click');
  238. var clickToHide = hideActions.has('click') || hideActions.has('contextMenu');
  239. var triggerAlign = (0, _useEvent.default)(function () {
  240. if (!inMotion) {
  241. onAlign();
  242. }
  243. });
  244. var onScroll = function onScroll() {
  245. if (openRef.current && alignPoint && clickToHide) {
  246. triggerOpen(false);
  247. }
  248. };
  249. (0, _useWatch.default)(mergedOpen, targetEle, popupEle, triggerAlign, onScroll);
  250. (0, _useLayoutEffect.default)(function () {
  251. triggerAlign();
  252. }, [mousePos, popupPlacement]);
  253. // When no builtinPlacements and popupAlign changed
  254. (0, _useLayoutEffect.default)(function () {
  255. if (mergedOpen && !(builtinPlacements !== null && builtinPlacements !== void 0 && builtinPlacements[popupPlacement])) {
  256. triggerAlign();
  257. }
  258. }, [JSON.stringify(popupAlign)]);
  259. var alignedClassName = React.useMemo(function () {
  260. var baseClassName = (0, _util.getAlignPopupClassName)(builtinPlacements, prefixCls, alignInfo, alignPoint);
  261. return (0, _classnames.default)(baseClassName, getPopupClassNameFromAlign === null || getPopupClassNameFromAlign === void 0 ? void 0 : getPopupClassNameFromAlign(alignInfo));
  262. }, [alignInfo, getPopupClassNameFromAlign, builtinPlacements, prefixCls, alignPoint]);
  263. // ============================ Refs ============================
  264. React.useImperativeHandle(ref, function () {
  265. return {
  266. nativeElement: externalForwardRef.current,
  267. popupElement: externalPopupRef.current,
  268. forceAlign: triggerAlign
  269. };
  270. });
  271. // ========================== Stretch ===========================
  272. var _React$useState15 = React.useState(0),
  273. _React$useState16 = (0, _slicedToArray2.default)(_React$useState15, 2),
  274. targetWidth = _React$useState16[0],
  275. setTargetWidth = _React$useState16[1];
  276. var _React$useState17 = React.useState(0),
  277. _React$useState18 = (0, _slicedToArray2.default)(_React$useState17, 2),
  278. targetHeight = _React$useState18[0],
  279. setTargetHeight = _React$useState18[1];
  280. var syncTargetSize = function syncTargetSize() {
  281. if (stretch && targetEle) {
  282. var rect = targetEle.getBoundingClientRect();
  283. setTargetWidth(rect.width);
  284. setTargetHeight(rect.height);
  285. }
  286. };
  287. var onTargetResize = function onTargetResize() {
  288. syncTargetSize();
  289. triggerAlign();
  290. };
  291. // ========================== Motion ============================
  292. var onVisibleChanged = function onVisibleChanged(visible) {
  293. setInMotion(false);
  294. onAlign();
  295. afterPopupVisibleChange === null || afterPopupVisibleChange === void 0 || afterPopupVisibleChange(visible);
  296. };
  297. // We will trigger align when motion is in prepare
  298. var onPrepare = function onPrepare() {
  299. return new Promise(function (resolve) {
  300. syncTargetSize();
  301. setMotionPrepareResolve(function () {
  302. return resolve;
  303. });
  304. });
  305. };
  306. (0, _useLayoutEffect.default)(function () {
  307. if (motionPrepareResolve) {
  308. onAlign();
  309. motionPrepareResolve();
  310. setMotionPrepareResolve(null);
  311. }
  312. }, [motionPrepareResolve]);
  313. // =========================== Action ===========================
  314. /**
  315. * Util wrapper for trigger action
  316. */
  317. function wrapperAction(eventName, nextOpen, delay, preEvent) {
  318. cloneProps[eventName] = function (event) {
  319. var _originChildProps$eve;
  320. preEvent === null || preEvent === void 0 || preEvent(event);
  321. triggerOpen(nextOpen, delay);
  322. // Pass to origin
  323. for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  324. args[_key - 1] = arguments[_key];
  325. }
  326. (_originChildProps$eve = originChildProps[eventName]) === null || _originChildProps$eve === void 0 || _originChildProps$eve.call.apply(_originChildProps$eve, [originChildProps, event].concat(args));
  327. };
  328. }
  329. // ======================= Action: Click ========================
  330. if (clickToShow || clickToHide) {
  331. cloneProps.onClick = function (event) {
  332. var _originChildProps$onC;
  333. if (openRef.current && clickToHide) {
  334. triggerOpen(false);
  335. } else if (!openRef.current && clickToShow) {
  336. setMousePosByEvent(event);
  337. triggerOpen(true);
  338. }
  339. // Pass to origin
  340. for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
  341. args[_key2 - 1] = arguments[_key2];
  342. }
  343. (_originChildProps$onC = originChildProps.onClick) === null || _originChildProps$onC === void 0 || _originChildProps$onC.call.apply(_originChildProps$onC, [originChildProps, event].concat(args));
  344. };
  345. }
  346. // Click to hide is special action since click popup element should not hide
  347. var onPopupPointerDown = (0, _useWinClick.default)(mergedOpen, clickToHide, targetEle, popupEle, mask, maskClosable, inPopupOrChild, triggerOpen);
  348. // ======================= Action: Hover ========================
  349. var hoverToShow = showActions.has('hover');
  350. var hoverToHide = hideActions.has('hover');
  351. var onPopupMouseEnter;
  352. var onPopupMouseLeave;
  353. if (hoverToShow) {
  354. // Compatible with old browser which not support pointer event
  355. wrapperAction('onMouseEnter', true, mouseEnterDelay, function (event) {
  356. setMousePosByEvent(event);
  357. });
  358. wrapperAction('onPointerEnter', true, mouseEnterDelay, function (event) {
  359. setMousePosByEvent(event);
  360. });
  361. onPopupMouseEnter = function onPopupMouseEnter(event) {
  362. // Only trigger re-open when popup is visible
  363. if ((mergedOpen || inMotion) && popupEle !== null && popupEle !== void 0 && popupEle.contains(event.target)) {
  364. triggerOpen(true, mouseEnterDelay);
  365. }
  366. };
  367. // Align Point
  368. if (alignPoint) {
  369. cloneProps.onMouseMove = function (event) {
  370. var _originChildProps$onM;
  371. // setMousePosByEvent(event);
  372. (_originChildProps$onM = originChildProps.onMouseMove) === null || _originChildProps$onM === void 0 || _originChildProps$onM.call(originChildProps, event);
  373. };
  374. }
  375. }
  376. if (hoverToHide) {
  377. wrapperAction('onMouseLeave', false, mouseLeaveDelay);
  378. wrapperAction('onPointerLeave', false, mouseLeaveDelay);
  379. onPopupMouseLeave = function onPopupMouseLeave() {
  380. triggerOpen(false, mouseLeaveDelay);
  381. };
  382. }
  383. // ======================= Action: Focus ========================
  384. if (showActions.has('focus')) {
  385. wrapperAction('onFocus', true, focusDelay);
  386. }
  387. if (hideActions.has('focus')) {
  388. wrapperAction('onBlur', false, blurDelay);
  389. }
  390. // ==================== Action: ContextMenu =====================
  391. if (showActions.has('contextMenu')) {
  392. cloneProps.onContextMenu = function (event) {
  393. var _originChildProps$onC2;
  394. if (openRef.current && hideActions.has('contextMenu')) {
  395. triggerOpen(false);
  396. } else {
  397. setMousePosByEvent(event);
  398. triggerOpen(true);
  399. }
  400. event.preventDefault();
  401. // Pass to origin
  402. for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
  403. args[_key3 - 1] = arguments[_key3];
  404. }
  405. (_originChildProps$onC2 = originChildProps.onContextMenu) === null || _originChildProps$onC2 === void 0 || _originChildProps$onC2.call.apply(_originChildProps$onC2, [originChildProps, event].concat(args));
  406. };
  407. }
  408. // ========================= ClassName ==========================
  409. if (className) {
  410. cloneProps.className = (0, _classnames.default)(originChildProps.className, className);
  411. }
  412. // ============================ Perf ============================
  413. var renderedRef = React.useRef(false);
  414. renderedRef.current || (renderedRef.current = forceRender || mergedOpen || inMotion);
  415. // =========================== Render ===========================
  416. var mergedChildrenProps = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originChildProps), cloneProps);
  417. // Pass props into cloneProps for nest usage
  418. var passedProps = {};
  419. var passedEventList = ['onContextMenu', 'onClick', 'onMouseDown', 'onTouchStart', 'onMouseEnter', 'onMouseLeave', 'onFocus', 'onBlur'];
  420. passedEventList.forEach(function (eventName) {
  421. if (restProps[eventName]) {
  422. passedProps[eventName] = function () {
  423. var _mergedChildrenProps$;
  424. for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
  425. args[_key4] = arguments[_key4];
  426. }
  427. (_mergedChildrenProps$ = mergedChildrenProps[eventName]) === null || _mergedChildrenProps$ === void 0 || _mergedChildrenProps$.call.apply(_mergedChildrenProps$, [mergedChildrenProps].concat(args));
  428. restProps[eventName].apply(restProps, args);
  429. };
  430. }
  431. });
  432. // Child Node
  433. var triggerNode = /*#__PURE__*/React.cloneElement(child, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, mergedChildrenProps), passedProps));
  434. var arrowPos = {
  435. x: arrowX,
  436. y: arrowY
  437. };
  438. var innerArrow = arrow ? (0, _objectSpread2.default)({}, arrow !== true ? arrow : {}) : null;
  439. // Render
  440. return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_rcResizeObserver.default, {
  441. disabled: !mergedOpen,
  442. ref: setTargetRef,
  443. onResize: onTargetResize
  444. }, /*#__PURE__*/React.createElement(_TriggerWrapper.default, {
  445. getTriggerDOMNode: getTriggerDOMNode
  446. }, triggerNode)), renderedRef.current && /*#__PURE__*/React.createElement(_context.default.Provider, {
  447. value: context
  448. }, /*#__PURE__*/React.createElement(_Popup.default, {
  449. portal: PortalComponent,
  450. ref: setPopupRef,
  451. prefixCls: prefixCls,
  452. popup: popup,
  453. className: (0, _classnames.default)(popupClassName, alignedClassName),
  454. style: popupStyle,
  455. target: targetEle,
  456. onMouseEnter: onPopupMouseEnter,
  457. onMouseLeave: onPopupMouseLeave
  458. // https://github.com/ant-design/ant-design/issues/43924
  459. ,
  460. onPointerEnter: onPopupMouseEnter,
  461. zIndex: zIndex
  462. // Open
  463. ,
  464. open: mergedOpen,
  465. keepDom: inMotion,
  466. fresh: fresh
  467. // Click
  468. ,
  469. onClick: onPopupClick,
  470. onPointerDownCapture: onPopupPointerDown
  471. // Mask
  472. ,
  473. mask: mask
  474. // Motion
  475. ,
  476. motion: mergePopupMotion,
  477. maskMotion: mergeMaskMotion,
  478. onVisibleChanged: onVisibleChanged,
  479. onPrepare: onPrepare
  480. // Portal
  481. ,
  482. forceRender: forceRender,
  483. autoDestroy: mergedAutoDestroy,
  484. getPopupContainer: getPopupContainer
  485. // Arrow
  486. ,
  487. align: alignInfo,
  488. arrow: innerArrow,
  489. arrowPos: arrowPos
  490. // Align
  491. ,
  492. ready: ready,
  493. offsetX: offsetX,
  494. offsetY: offsetY,
  495. offsetR: offsetR,
  496. offsetB: offsetB,
  497. onAlign: triggerAlign
  498. // Stretch
  499. ,
  500. stretch: stretch,
  501. targetWidth: targetWidth / scaleX,
  502. targetHeight: targetHeight / scaleY
  503. })));
  504. });
  505. if (process.env.NODE_ENV !== 'production') {
  506. Trigger.displayName = 'Trigger';
  507. }
  508. return Trigger;
  509. }
  510. var _default = exports.default = generateTrigger(_portal.default);