index.js 23 KB

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