@rc-component/trigger 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +321 -0
  3. package/assets/index/Mask.less +63 -0
  4. package/assets/index/Mobile.less +25 -0
  5. package/assets/index.css +133 -0
  6. package/assets/index.less +79 -0
  7. package/es/Popup/Arrow.d.ts +9 -0
  8. package/es/Popup/Arrow.js +47 -0
  9. package/es/Popup/Mask.d.ts +10 -0
  10. package/es/Popup/Mask.js +26 -0
  11. package/es/Popup/index.d.ts +39 -0
  12. package/es/Popup/index.js +149 -0
  13. package/es/TriggerWrapper.d.ts +8 -0
  14. package/es/TriggerWrapper.js +19 -0
  15. package/es/context.d.ts +6 -0
  16. package/es/context.js +3 -0
  17. package/es/hooks/useAction.d.ts +4 -0
  18. package/es/hooks/useAction.js +8 -0
  19. package/es/hooks/useAlign.d.ts +12 -0
  20. package/es/hooks/useAlign.js +275 -0
  21. package/es/hooks/useWatch.d.ts +1 -0
  22. package/es/hooks/useWatch.js +50 -0
  23. package/es/index.d.ts +61 -0
  24. package/es/index.js +448 -0
  25. package/es/interface.d.ts +122 -0
  26. package/es/interface.js +1 -0
  27. package/es/util.d.ts +7 -0
  28. package/es/util.js +47 -0
  29. package/lib/Popup/Arrow.d.ts +9 -0
  30. package/lib/Popup/Arrow.js +54 -0
  31. package/lib/Popup/Mask.d.ts +10 -0
  32. package/lib/Popup/Mask.js +33 -0
  33. package/lib/Popup/index.d.ts +39 -0
  34. package/lib/Popup/index.js +158 -0
  35. package/lib/TriggerWrapper.d.ts +8 -0
  36. package/lib/TriggerWrapper.js +27 -0
  37. package/lib/context.d.ts +6 -0
  38. package/lib/context.js +11 -0
  39. package/lib/hooks/useAction.d.ts +4 -0
  40. package/lib/hooks/useAction.js +14 -0
  41. package/lib/hooks/useAlign.d.ts +12 -0
  42. package/lib/hooks/useAlign.js +283 -0
  43. package/lib/hooks/useWatch.d.ts +1 -0
  44. package/lib/hooks/useWatch.js +57 -0
  45. package/lib/index.d.ts +61 -0
  46. package/lib/index.js +457 -0
  47. package/lib/interface.d.ts +122 -0
  48. package/lib/interface.js +5 -0
  49. package/lib/util.d.ts +7 -0
  50. package/lib/util.js +57 -0
  51. package/package.json +79 -0
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = useWatch;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
10
+ var _util = require("../util");
11
+ function collectScroller(ele) {
12
+ var scrollerList = [];
13
+ var current = ele === null || ele === void 0 ? void 0 : ele.parentElement;
14
+ var scrollStyle = ['hidden', 'scroll', 'auto'];
15
+ while (current) {
16
+ var _getWin$getComputedSt = (0, _util.getWin)(current).getComputedStyle(current),
17
+ overflowX = _getWin$getComputedSt.overflowX,
18
+ overflowY = _getWin$getComputedSt.overflowY;
19
+ if (scrollStyle.includes(overflowX) || scrollStyle.includes(overflowY)) {
20
+ scrollerList.push(current);
21
+ }
22
+ current = current.parentElement;
23
+ }
24
+ return scrollerList;
25
+ }
26
+ function useWatch(open, target, popup, onAlign) {
27
+ (0, _useLayoutEffect.default)(function () {
28
+ if (open && target && popup) {
29
+ var targetElement = target;
30
+ var popupElement = popup;
31
+ var targetScrollList = collectScroller(targetElement);
32
+ var popupScrollList = collectScroller(popupElement);
33
+ var win = (0, _util.getWin)(popupElement);
34
+ var mergedList = new Set([win].concat((0, _toConsumableArray2.default)(targetScrollList), (0, _toConsumableArray2.default)(popupScrollList)));
35
+ function notifyScroll() {
36
+ onAlign();
37
+ }
38
+ mergedList.forEach(function (scroller) {
39
+ scroller.addEventListener('scroll', notifyScroll, {
40
+ passive: true
41
+ });
42
+ });
43
+ win.addEventListener('resize', notifyScroll, {
44
+ passive: true
45
+ });
46
+
47
+ // First time always do align
48
+ onAlign();
49
+ return function () {
50
+ mergedList.forEach(function (scroller) {
51
+ scroller.removeEventListener('scroll', notifyScroll);
52
+ win.removeEventListener('resize', notifyScroll);
53
+ });
54
+ };
55
+ }
56
+ }, [open, target, popup]);
57
+ }
package/lib/index.d.ts ADDED
@@ -0,0 +1,61 @@
1
+ import type { CSSMotionProps } from 'rc-motion';
2
+ import * as React from 'react';
3
+ import type { ActionType, AlignType, AnimationType, BuildInPlacements, TransitionNameType } from './interface';
4
+ export interface TriggerRef {
5
+ forceAlign: VoidFunction;
6
+ }
7
+ export interface TriggerProps {
8
+ children: React.ReactElement;
9
+ action?: ActionType | ActionType[];
10
+ showAction?: ActionType[];
11
+ hideAction?: ActionType[];
12
+ prefixCls?: string;
13
+ zIndex?: number;
14
+ stretch?: string;
15
+ popupVisible?: boolean;
16
+ defaultPopupVisible?: boolean;
17
+ onPopupVisibleChange?: (visible: boolean) => void;
18
+ afterPopupVisibleChange?: (visible: boolean) => void;
19
+ getPopupContainer?: (node: HTMLElement) => HTMLElement;
20
+ forceRender?: boolean;
21
+ autoDestroy?: boolean;
22
+ /** @deprecated Please use `autoDestroy` instead */
23
+ destroyPopupOnHide?: boolean;
24
+ mask?: boolean;
25
+ maskClosable?: boolean;
26
+ /** Set popup motion. You can ref `rc-motion` for more info. */
27
+ popupMotion?: CSSMotionProps;
28
+ /** Set mask motion. You can ref `rc-motion` for more info. */
29
+ maskMotion?: CSSMotionProps;
30
+ /** @deprecated Please us `popupMotion` instead. */
31
+ popupTransitionName?: TransitionNameType;
32
+ /** @deprecated Please us `popupMotion` instead. */
33
+ popupAnimation?: AnimationType;
34
+ /** @deprecated Please us `maskMotion` instead. */
35
+ maskTransitionName?: TransitionNameType;
36
+ /** @deprecated Please us `maskMotion` instead. */
37
+ maskAnimation?: AnimationType;
38
+ mouseEnterDelay?: number;
39
+ mouseLeaveDelay?: number;
40
+ focusDelay?: number;
41
+ blurDelay?: number;
42
+ popup: React.ReactNode | (() => React.ReactNode);
43
+ popupPlacement?: string;
44
+ builtinPlacements?: BuildInPlacements;
45
+ popupAlign?: AlignType;
46
+ popupClassName?: string;
47
+ popupStyle?: React.CSSProperties;
48
+ getPopupClassNameFromAlign?: (align: AlignType) => string;
49
+ onPopupClick?: React.MouseEventHandler<HTMLDivElement>;
50
+ alignPoint?: boolean;
51
+ arrow?: boolean;
52
+ /** @deprecated Add `className` on `children`. Please add `className` directly instead. */
53
+ className?: string;
54
+ /**
55
+ * @private Get trigger DOM node.
56
+ * Used for some component is function component which can not access by `findDOMNode`
57
+ */
58
+ getTriggerDOMNode?: (node: React.ReactInstance) => HTMLElement;
59
+ }
60
+ declare const Trigger: React.ForwardRefExoticComponent<TriggerProps & React.RefAttributes<TriggerRef>>;
61
+ export default Trigger;
package/lib/index.js ADDED
@@ -0,0 +1,457 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
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 _classnames = _interopRequireDefault(require("classnames"));
13
+ var _rcResizeObserver = _interopRequireDefault(require("rc-resize-observer"));
14
+ var _useEvent = _interopRequireDefault(require("rc-util/lib/hooks/useEvent"));
15
+ var _useId = _interopRequireDefault(require("rc-util/lib/hooks/useId"));
16
+ var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
17
+ var _useMergedState3 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
18
+ var React = _interopRequireWildcard(require("react"));
19
+ var _context = _interopRequireDefault(require("./context"));
20
+ var _useAction3 = _interopRequireDefault(require("./hooks/useAction"));
21
+ var _useAlign3 = _interopRequireDefault(require("./hooks/useAlign"));
22
+ var _useWatch = _interopRequireDefault(require("./hooks/useWatch"));
23
+ var _Popup = _interopRequireDefault(require("./Popup"));
24
+ var _TriggerWrapper = _interopRequireDefault(require("./TriggerWrapper"));
25
+ var _util = require("./util");
26
+ 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", "alignPoint", "onPopupClick", "arrow", "popupMotion", "maskMotion", "popupTransitionName", "popupAnimation", "maskTransitionName", "maskAnimation", "className", "getTriggerDOMNode"];
27
+ var Trigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
28
+ var _props$prefixCls = props.prefixCls,
29
+ prefixCls = _props$prefixCls === void 0 ? 'rc-trigger-popup' : _props$prefixCls,
30
+ children = props.children,
31
+ _props$action = props.action,
32
+ action = _props$action === void 0 ? 'hover' : _props$action,
33
+ showAction = props.showAction,
34
+ hideAction = props.hideAction,
35
+ popupVisible = props.popupVisible,
36
+ defaultPopupVisible = props.defaultPopupVisible,
37
+ onPopupVisibleChange = props.onPopupVisibleChange,
38
+ afterPopupVisibleChange = props.afterPopupVisibleChange,
39
+ mouseEnterDelay = props.mouseEnterDelay,
40
+ _props$mouseLeaveDela = props.mouseLeaveDelay,
41
+ mouseLeaveDelay = _props$mouseLeaveDela === void 0 ? 0.1 : _props$mouseLeaveDela,
42
+ focusDelay = props.focusDelay,
43
+ blurDelay = props.blurDelay,
44
+ mask = props.mask,
45
+ _props$maskClosable = props.maskClosable,
46
+ maskClosable = _props$maskClosable === void 0 ? true : _props$maskClosable,
47
+ getPopupContainer = props.getPopupContainer,
48
+ forceRender = props.forceRender,
49
+ autoDestroy = props.autoDestroy,
50
+ destroyPopupOnHide = props.destroyPopupOnHide,
51
+ popup = props.popup,
52
+ popupClassName = props.popupClassName,
53
+ popupStyle = props.popupStyle,
54
+ popupPlacement = props.popupPlacement,
55
+ _props$builtinPlaceme = props.builtinPlacements,
56
+ builtinPlacements = _props$builtinPlaceme === void 0 ? {} : _props$builtinPlaceme,
57
+ popupAlign = props.popupAlign,
58
+ zIndex = props.zIndex,
59
+ stretch = props.stretch,
60
+ getPopupClassNameFromAlign = props.getPopupClassNameFromAlign,
61
+ alignPoint = props.alignPoint,
62
+ onPopupClick = props.onPopupClick,
63
+ arrow = props.arrow,
64
+ popupMotion = props.popupMotion,
65
+ maskMotion = props.maskMotion,
66
+ popupTransitionName = props.popupTransitionName,
67
+ popupAnimation = props.popupAnimation,
68
+ maskTransitionName = props.maskTransitionName,
69
+ maskAnimation = props.maskAnimation,
70
+ className = props.className,
71
+ getTriggerDOMNode = props.getTriggerDOMNode,
72
+ restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
73
+ var mergedAutoDestroy = autoDestroy || destroyPopupOnHide || false;
74
+
75
+ // ========================== Context ===========================
76
+ var subPopupElements = React.useRef({});
77
+ var parentContext = React.useContext(_context.default);
78
+ var context = React.useMemo(function () {
79
+ return {
80
+ registerSubPopup: function registerSubPopup(id, subPopupEle) {
81
+ subPopupElements.current[id] = subPopupEle;
82
+ parentContext === null || parentContext === void 0 ? void 0 : parentContext.registerSubPopup(id, subPopupEle);
83
+ }
84
+ };
85
+ }, [parentContext]);
86
+
87
+ // =========================== Popup ============================
88
+ var id = (0, _useId.default)();
89
+ var _React$useState = React.useState(null),
90
+ _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
91
+ popupEle = _React$useState2[0],
92
+ setPopupEle = _React$useState2[1];
93
+ var setPopupRef = React.useCallback(function (node) {
94
+ if (node instanceof HTMLElement) {
95
+ setPopupEle(node);
96
+ }
97
+ parentContext === null || parentContext === void 0 ? void 0 : parentContext.registerSubPopup(id, node);
98
+ }, []);
99
+
100
+ // =========================== Target ===========================
101
+ // Use state to control here since `useRef` update not trigger render
102
+ var _React$useState3 = React.useState(null),
103
+ _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
104
+ targetEle = _React$useState4[0],
105
+ setTargetEle = _React$useState4[1];
106
+ var setTargetRef = React.useCallback(function (node) {
107
+ if (node instanceof HTMLElement) {
108
+ setTargetEle(node);
109
+ }
110
+ }, []);
111
+
112
+ // ========================== Children ==========================
113
+ var child = React.Children.only(children);
114
+ var originChildProps = (child === null || child === void 0 ? void 0 : child.props) || {};
115
+ var cloneProps = {};
116
+ var inPopupOrChild = (0, _useEvent.default)(function (ele) {
117
+ var childDOM = targetEle;
118
+ return (childDOM === null || childDOM === void 0 ? void 0 : childDOM.contains(ele)) || ele === childDOM || (popupEle === null || popupEle === void 0 ? void 0 : popupEle.contains(ele)) || ele === popupEle || Object.values(subPopupElements.current).some(function (subPopupEle) {
119
+ return subPopupEle.contains(ele) || ele === subPopupEle;
120
+ });
121
+ });
122
+
123
+ // =========================== Motion ===========================
124
+ var mergePopupMotion = (0, _util.getMotion)(prefixCls, popupMotion, popupAnimation, popupTransitionName);
125
+ var mergeMaskMotion = (0, _util.getMotion)(prefixCls, maskMotion, maskAnimation, maskTransitionName);
126
+
127
+ // ============================ Open ============================
128
+ var _useMergedState = (0, _useMergedState3.default)(defaultPopupVisible || false, {
129
+ value: popupVisible
130
+ }),
131
+ _useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
132
+ mergedOpen = _useMergedState2[0],
133
+ setMergedOpen = _useMergedState2[1];
134
+ var openRef = React.useRef(mergedOpen);
135
+ openRef.current = mergedOpen;
136
+ var internalTriggerOpen = (0, _useEvent.default)(function (nextOpen) {
137
+ if (mergedOpen !== nextOpen) {
138
+ setMergedOpen(nextOpen);
139
+ onPopupVisibleChange === null || onPopupVisibleChange === void 0 ? void 0 : onPopupVisibleChange(nextOpen);
140
+ }
141
+ });
142
+
143
+ // Trigger for delay
144
+ var delayRef = React.useRef();
145
+ var clearDelay = function clearDelay() {
146
+ clearTimeout(delayRef.current);
147
+ };
148
+ var triggerOpen = function triggerOpen(nextOpen) {
149
+ var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
150
+ clearDelay();
151
+ if (delay === 0) {
152
+ internalTriggerOpen(nextOpen);
153
+ } else {
154
+ delayRef.current = setTimeout(function () {
155
+ internalTriggerOpen(nextOpen);
156
+ }, delay * 1000);
157
+ }
158
+ };
159
+ React.useEffect(function () {
160
+ return clearDelay;
161
+ }, []);
162
+
163
+ // ========================== Motion ============================
164
+ var _React$useState5 = React.useState(false),
165
+ _React$useState6 = (0, _slicedToArray2.default)(_React$useState5, 2),
166
+ inMotion = _React$useState6[0],
167
+ setInMotion = _React$useState6[1];
168
+ (0, _useLayoutEffect.default)(function () {
169
+ setInMotion(true);
170
+ }, [mergedOpen]);
171
+ var _React$useState7 = React.useState(null),
172
+ _React$useState8 = (0, _slicedToArray2.default)(_React$useState7, 2),
173
+ motionPrepareResolve = _React$useState8[0],
174
+ setMotionPrepareResolve = _React$useState8[1];
175
+
176
+ // =========================== Align ============================
177
+ var _React$useState9 = React.useState([0, 0]),
178
+ _React$useState10 = (0, _slicedToArray2.default)(_React$useState9, 2),
179
+ mousePos = _React$useState10[0],
180
+ setMousePos = _React$useState10[1];
181
+ var setMousePosByEvent = function setMousePosByEvent(event) {
182
+ setMousePos([event.clientX, event.clientY]);
183
+ };
184
+ var _useAlign = (0, _useAlign3.default)(mergedOpen, popupEle, alignPoint ? mousePos : targetEle, popupPlacement, builtinPlacements, popupAlign),
185
+ _useAlign2 = (0, _slicedToArray2.default)(_useAlign, 9),
186
+ ready = _useAlign2[0],
187
+ offsetX = _useAlign2[1],
188
+ offsetY = _useAlign2[2],
189
+ arrowX = _useAlign2[3],
190
+ arrowY = _useAlign2[4],
191
+ scaleX = _useAlign2[5],
192
+ scaleY = _useAlign2[6],
193
+ alignInfo = _useAlign2[7],
194
+ onAlign = _useAlign2[8];
195
+ var triggerAlign = (0, _useEvent.default)(function () {
196
+ if (!inMotion) {
197
+ onAlign();
198
+ }
199
+ });
200
+ (0, _useWatch.default)(mergedOpen, targetEle, popupEle, triggerAlign);
201
+ (0, _useLayoutEffect.default)(function () {
202
+ triggerAlign();
203
+ }, [mousePos]);
204
+ var alignedClassName = React.useMemo(function () {
205
+ var baseClassName = (0, _util.getAlignPopupClassName)(builtinPlacements, prefixCls, alignInfo, alignPoint);
206
+ return (0, _classnames.default)(baseClassName, getPopupClassNameFromAlign === null || getPopupClassNameFromAlign === void 0 ? void 0 : getPopupClassNameFromAlign(alignInfo));
207
+ }, [alignInfo, getPopupClassNameFromAlign, builtinPlacements, prefixCls, alignPoint]);
208
+ React.useImperativeHandle(ref, function () {
209
+ return {
210
+ forceAlign: triggerAlign
211
+ };
212
+ });
213
+
214
+ // ========================== Motion ============================
215
+ var onVisibleChanged = function onVisibleChanged(visible) {
216
+ setInMotion(false);
217
+ onAlign();
218
+ afterPopupVisibleChange === null || afterPopupVisibleChange === void 0 ? void 0 : afterPopupVisibleChange(visible);
219
+ };
220
+
221
+ // We will trigger align when motion is in prepare
222
+ var onPrepare = function onPrepare() {
223
+ return new Promise(function (resolve) {
224
+ setMotionPrepareResolve(function () {
225
+ return resolve;
226
+ });
227
+ });
228
+ };
229
+ (0, _useLayoutEffect.default)(function () {
230
+ if (motionPrepareResolve) {
231
+ onAlign();
232
+ motionPrepareResolve();
233
+ setMotionPrepareResolve(null);
234
+ }
235
+ }, [motionPrepareResolve]);
236
+
237
+ // ========================== Stretch ===========================
238
+ var _React$useState11 = React.useState(0),
239
+ _React$useState12 = (0, _slicedToArray2.default)(_React$useState11, 2),
240
+ targetWidth = _React$useState12[0],
241
+ setTargetWidth = _React$useState12[1];
242
+ var _React$useState13 = React.useState(0),
243
+ _React$useState14 = (0, _slicedToArray2.default)(_React$useState13, 2),
244
+ targetHeight = _React$useState14[0],
245
+ setTargetHeight = _React$useState14[1];
246
+ var onTargetResize = function onTargetResize(_, ele) {
247
+ triggerAlign();
248
+ if (stretch) {
249
+ var rect = ele.getBoundingClientRect();
250
+ setTargetWidth(rect.width);
251
+ setTargetHeight(rect.height);
252
+ }
253
+ };
254
+
255
+ // =========================== Action ===========================
256
+ var _useAction = (0, _useAction3.default)(action, showAction, hideAction),
257
+ _useAction2 = (0, _slicedToArray2.default)(_useAction, 2),
258
+ showActions = _useAction2[0],
259
+ hideActions = _useAction2[1];
260
+
261
+ // Util wrapper for trigger action
262
+ var wrapperAction = function wrapperAction(eventName, nextOpen, delay, preEvent) {
263
+ cloneProps[eventName] = function (event) {
264
+ var _originChildProps$eve;
265
+ preEvent === null || preEvent === void 0 ? void 0 : preEvent(event);
266
+ triggerOpen(nextOpen, delay);
267
+
268
+ // Pass to origin
269
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
270
+ args[_key - 1] = arguments[_key];
271
+ }
272
+ (_originChildProps$eve = originChildProps[eventName]) === null || _originChildProps$eve === void 0 ? void 0 : _originChildProps$eve.call.apply(_originChildProps$eve, [originChildProps, event].concat(args));
273
+ };
274
+ };
275
+
276
+ // ======================= Action: Click ========================
277
+ var clickToShow = showActions.has('click');
278
+ var clickToHide = hideActions.has('click') || hideActions.has('contextMenu');
279
+ if (clickToShow || clickToHide) {
280
+ cloneProps.onClick = function (event) {
281
+ var _originChildProps$onC;
282
+ if (openRef.current && clickToHide) {
283
+ triggerOpen(false);
284
+ } else if (!openRef.current && clickToShow) {
285
+ setMousePosByEvent(event);
286
+ triggerOpen(true);
287
+ }
288
+
289
+ // Pass to origin
290
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
291
+ args[_key2 - 1] = arguments[_key2];
292
+ }
293
+ (_originChildProps$onC = originChildProps.onClick) === null || _originChildProps$onC === void 0 ? void 0 : _originChildProps$onC.call.apply(_originChildProps$onC, [originChildProps, event].concat(args));
294
+ };
295
+ }
296
+
297
+ // Click to hide is special action since click popup element should not hide
298
+ React.useEffect(function () {
299
+ if (clickToHide && popupEle && (!mask || maskClosable)) {
300
+ var onWindowClick = function onWindowClick(_ref) {
301
+ var target = _ref.target;
302
+ if (openRef.current && !inPopupOrChild(target)) {
303
+ triggerOpen(false);
304
+ }
305
+ };
306
+ var win = (0, _util.getWin)(popupEle);
307
+ win.addEventListener('click', onWindowClick);
308
+ return function () {
309
+ win.removeEventListener('click', onWindowClick);
310
+ };
311
+ }
312
+ }, [clickToHide, popupEle, mask, maskClosable]);
313
+
314
+ // ======================= Action: Hover ========================
315
+ var hoverToShow = showActions.has('hover');
316
+ var hoverToHide = hideActions.has('hover');
317
+ var onPopupMouseEnter;
318
+ var onPopupMouseLeave;
319
+ if (hoverToShow) {
320
+ wrapperAction('onMouseEnter', true, mouseEnterDelay, function (event) {
321
+ setMousePosByEvent(event);
322
+ });
323
+ onPopupMouseEnter = function onPopupMouseEnter() {
324
+ triggerOpen(true, mouseEnterDelay);
325
+ };
326
+
327
+ // Align Point
328
+ if (alignPoint) {
329
+ cloneProps.onMouseMove = function (event) {
330
+ var _originChildProps$onM;
331
+ // setMousePosByEvent(event);
332
+ (_originChildProps$onM = originChildProps.onMouseMove) === null || _originChildProps$onM === void 0 ? void 0 : _originChildProps$onM.call(originChildProps, event);
333
+ };
334
+ }
335
+ }
336
+ if (hoverToHide) {
337
+ wrapperAction('onMouseLeave', false, mouseLeaveDelay);
338
+ onPopupMouseLeave = function onPopupMouseLeave() {
339
+ triggerOpen(false, mouseLeaveDelay);
340
+ };
341
+ }
342
+
343
+ // ======================= Action: Focus ========================
344
+ if (showActions.has('focus')) {
345
+ wrapperAction('onFocus', true, focusDelay);
346
+ }
347
+ if (hideActions.has('focus')) {
348
+ wrapperAction('onBlur', false, blurDelay);
349
+ }
350
+
351
+ // ==================== Action: ContextMenu =====================
352
+ if (showActions.has('contextMenu')) {
353
+ cloneProps.onContextMenu = function (event) {
354
+ var _originChildProps$onC2;
355
+ setMousePosByEvent(event);
356
+ triggerOpen(true);
357
+ event.preventDefault();
358
+
359
+ // Pass to origin
360
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
361
+ args[_key3 - 1] = arguments[_key3];
362
+ }
363
+ (_originChildProps$onC2 = originChildProps.onContextMenu) === null || _originChildProps$onC2 === void 0 ? void 0 : _originChildProps$onC2.call.apply(_originChildProps$onC2, [originChildProps, event].concat(args));
364
+ };
365
+ }
366
+
367
+ // ========================= ClassName ==========================
368
+ if (className) {
369
+ cloneProps.className = (0, _classnames.default)(originChildProps.className, className);
370
+ }
371
+
372
+ // =========================== Render ===========================
373
+ var mergedChildrenProps = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originChildProps), cloneProps);
374
+
375
+ // Pass props into cloneProps for nest usage
376
+ var passedProps = {};
377
+ var passedEventList = ['onContextMenu', 'onClick', 'onMouseDown', 'onTouchStart', 'onMouseEnter', 'onMouseLeave', 'onFocus', 'onBlur'];
378
+ passedEventList.forEach(function (eventName) {
379
+ if (restProps[eventName]) {
380
+ passedProps[eventName] = function () {
381
+ var _mergedChildrenProps$;
382
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
383
+ args[_key4] = arguments[_key4];
384
+ }
385
+ (_mergedChildrenProps$ = mergedChildrenProps[eventName]) === null || _mergedChildrenProps$ === void 0 ? void 0 : _mergedChildrenProps$.call.apply(_mergedChildrenProps$, [mergedChildrenProps].concat(args));
386
+ restProps[eventName].apply(restProps, args);
387
+ };
388
+ }
389
+ });
390
+
391
+ // Child Node
392
+ var triggerNode = /*#__PURE__*/React.cloneElement(child, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, mergedChildrenProps), passedProps));
393
+
394
+ // Render
395
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_context.default.Provider, {
396
+ value: context
397
+ }, /*#__PURE__*/React.createElement(_Popup.default, {
398
+ ref: setPopupRef,
399
+ prefixCls: prefixCls,
400
+ popup: popup,
401
+ className: (0, _classnames.default)(popupClassName, alignedClassName),
402
+ style: popupStyle,
403
+ target: targetEle,
404
+ onMouseEnter: onPopupMouseEnter,
405
+ onMouseLeave: onPopupMouseLeave,
406
+ zIndex: zIndex
407
+ // Open
408
+ ,
409
+ open: mergedOpen,
410
+ keepDom: inMotion
411
+ // Click
412
+ ,
413
+ onClick: onPopupClick
414
+ // Mask
415
+ ,
416
+ mask: mask
417
+ // Motion
418
+ ,
419
+ motion: mergePopupMotion,
420
+ maskMotion: mergeMaskMotion,
421
+ onVisibleChanged: onVisibleChanged,
422
+ onPrepare: onPrepare
423
+ // Portal
424
+ ,
425
+ forceRender: forceRender,
426
+ autoDestroy: mergedAutoDestroy,
427
+ getPopupContainer: getPopupContainer
428
+ // Arrow
429
+ ,
430
+ align: alignInfo,
431
+ arrow: arrow
432
+ // Align
433
+ ,
434
+ ready: ready,
435
+ offsetX: offsetX,
436
+ offsetY: offsetY,
437
+ arrowX: arrowX,
438
+ arrowY: arrowY,
439
+ onAlign: triggerAlign
440
+ // Stretch
441
+ ,
442
+ stretch: stretch,
443
+ targetWidth: targetWidth / scaleX,
444
+ targetHeight: targetHeight / scaleY
445
+ })), /*#__PURE__*/React.createElement(_rcResizeObserver.default, {
446
+ disabled: !mergedOpen,
447
+ ref: setTargetRef,
448
+ onResize: onTargetResize
449
+ }, /*#__PURE__*/React.createElement(_TriggerWrapper.default, {
450
+ getTriggerDOMNode: getTriggerDOMNode
451
+ }, triggerNode)));
452
+ });
453
+ if (process.env.NODE_ENV !== 'production') {
454
+ Trigger.displayName = 'Trigger';
455
+ }
456
+ var _default = Trigger;
457
+ exports.default = _default;