@rc-component/trigger 3.1.0 → 3.3.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.
package/es/Popup/Arrow.js CHANGED
@@ -15,7 +15,7 @@ export default function Arrow(props) {
15
15
  x = 0,
16
16
  y = 0
17
17
  } = arrowPos;
18
- const arrowRef = React.useRef();
18
+ const arrowRef = React.useRef(null);
19
19
 
20
20
  // Skip if no align
21
21
  if (!align || !align.points) {
package/es/index.d.ts CHANGED
@@ -8,7 +8,7 @@ export interface TriggerRef {
8
8
  forceAlign: VoidFunction;
9
9
  }
10
10
  export interface TriggerProps {
11
- children: React.ReactElement;
11
+ children: React.ReactElement<any>;
12
12
  action?: ActionType | ActionType[];
13
13
  showAction?: ActionType[];
14
14
  hideAction?: ActionType[];
@@ -18,7 +18,11 @@ export interface TriggerProps {
18
18
  stretch?: string;
19
19
  popupVisible?: boolean;
20
20
  defaultPopupVisible?: boolean;
21
+ onOpenChange?: (visible: boolean) => void;
22
+ afterOpenChange?: (visible: boolean) => void;
23
+ /** @deprecated Use `onOpenChange` instead */
21
24
  onPopupVisibleChange?: (visible: boolean) => void;
25
+ /** @deprecated Use `afterOpenChange` instead */
22
26
  afterPopupVisibleChange?: (visible: boolean) => void;
23
27
  getPopupContainer?: (node: HTMLElement) => HTMLElement;
24
28
  forceRender?: boolean;
@@ -49,11 +53,6 @@ export interface TriggerProps {
49
53
  */
50
54
  fresh?: boolean;
51
55
  arrow?: boolean | ArrowTypeOuter;
52
- /**
53
- * @private Get trigger DOM node.
54
- * Used for some component is function component which can not access by `findDOMNode`
55
- */
56
- getTriggerDOMNode?: (node: React.ReactInstance) => HTMLElement;
57
56
  }
58
57
  export declare function generateTrigger(PortalComponent?: React.ComponentType<any>): React.ForwardRefExoticComponent<TriggerProps & React.RefAttributes<TriggerRef>>;
59
58
  declare const _default: React.ForwardRefExoticComponent<TriggerProps & React.RefAttributes<TriggerRef>>;
package/es/index.js CHANGED
@@ -9,7 +9,6 @@ import useLayoutEffect from "@rc-component/util/es/hooks/useLayoutEffect";
9
9
  import isMobile from "@rc-component/util/es/isMobile";
10
10
  import * as React from 'react';
11
11
  import Popup from "./Popup";
12
- import TriggerWrapper from "./TriggerWrapper";
13
12
  import TriggerContext from "./context";
14
13
  import useAction from "./hooks/useAction";
15
14
  import useAlign from "./hooks/useAlign";
@@ -35,6 +34,8 @@ export function generateTrigger(PortalComponent = Portal) {
35
34
  // Open
36
35
  popupVisible,
37
36
  defaultPopupVisible,
37
+ onOpenChange,
38
+ afterOpenChange,
38
39
  onPopupVisibleChange,
39
40
  afterPopupVisibleChange,
40
41
  // Delay
@@ -68,8 +69,6 @@ export function generateTrigger(PortalComponent = Portal) {
68
69
  // Motion
69
70
  popupMotion,
70
71
  maskMotion,
71
- // Private
72
- getTriggerDOMNode,
73
72
  ...restProps
74
73
  } = props;
75
74
  const mergedAutoDestroy = autoDestroy || false;
@@ -155,12 +154,13 @@ export function generateTrigger(PortalComponent = Portal) {
155
154
  // Use `lastTriggerRef` to record last open type
156
155
  if ((lastTriggerRef.current[lastTriggerRef.current.length - 1] ?? mergedOpen) !== nextOpen) {
157
156
  lastTriggerRef.current.push(nextOpen);
157
+ onOpenChange?.(nextOpen);
158
158
  onPopupVisibleChange?.(nextOpen);
159
159
  }
160
160
  });
161
161
 
162
162
  // Trigger for delay
163
- const delayRef = React.useRef();
163
+ const delayRef = React.useRef(null);
164
164
  const clearDelay = () => {
165
165
  clearTimeout(delayRef.current);
166
166
  };
@@ -246,6 +246,7 @@ export function generateTrigger(PortalComponent = Portal) {
246
246
  const onVisibleChanged = visible => {
247
247
  setInMotion(false);
248
248
  onAlign();
249
+ afterOpenChange?.(visible);
249
250
  afterPopupVisibleChange?.(visible);
250
251
  };
251
252
 
@@ -371,12 +372,6 @@ export function generateTrigger(PortalComponent = Portal) {
371
372
  };
372
373
  }
373
374
  });
374
-
375
- // Child Node
376
- const triggerNode = /*#__PURE__*/React.cloneElement(child, {
377
- ...mergedChildrenProps,
378
- ...passedProps
379
- });
380
375
  const arrowPos = {
381
376
  x: arrowX,
382
377
  y: arrowY
@@ -386,14 +381,18 @@ export function generateTrigger(PortalComponent = Portal) {
386
381
  ...(arrow !== true ? arrow : {})
387
382
  } : null;
388
383
 
384
+ // Child Node
385
+ const triggerNode = /*#__PURE__*/React.cloneElement(child, {
386
+ ...mergedChildrenProps,
387
+ ...passedProps
388
+ });
389
+
389
390
  // Render
390
391
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ResizeObserver, {
391
392
  disabled: !mergedOpen,
392
393
  ref: setTargetRef,
393
394
  onResize: onTargetResize
394
- }, /*#__PURE__*/React.createElement(TriggerWrapper, {
395
- getTriggerDOMNode: getTriggerDOMNode
396
- }, triggerNode)), /*#__PURE__*/React.createElement(TriggerContext.Provider, {
395
+ }, triggerNode), /*#__PURE__*/React.createElement(TriggerContext.Provider, {
397
396
  value: context
398
397
  }, /*#__PURE__*/React.createElement(Popup, {
399
398
  portal: PortalComponent,
@@ -24,7 +24,7 @@ function Arrow(props) {
24
24
  x = 0,
25
25
  y = 0
26
26
  } = arrowPos;
27
- const arrowRef = React.useRef();
27
+ const arrowRef = React.useRef(null);
28
28
 
29
29
  // Skip if no align
30
30
  if (!align || !align.points) {
package/lib/index.d.ts CHANGED
@@ -8,7 +8,7 @@ export interface TriggerRef {
8
8
  forceAlign: VoidFunction;
9
9
  }
10
10
  export interface TriggerProps {
11
- children: React.ReactElement;
11
+ children: React.ReactElement<any>;
12
12
  action?: ActionType | ActionType[];
13
13
  showAction?: ActionType[];
14
14
  hideAction?: ActionType[];
@@ -18,7 +18,11 @@ export interface TriggerProps {
18
18
  stretch?: string;
19
19
  popupVisible?: boolean;
20
20
  defaultPopupVisible?: boolean;
21
+ onOpenChange?: (visible: boolean) => void;
22
+ afterOpenChange?: (visible: boolean) => void;
23
+ /** @deprecated Use `onOpenChange` instead */
21
24
  onPopupVisibleChange?: (visible: boolean) => void;
25
+ /** @deprecated Use `afterOpenChange` instead */
22
26
  afterPopupVisibleChange?: (visible: boolean) => void;
23
27
  getPopupContainer?: (node: HTMLElement) => HTMLElement;
24
28
  forceRender?: boolean;
@@ -49,11 +53,6 @@ export interface TriggerProps {
49
53
  */
50
54
  fresh?: boolean;
51
55
  arrow?: boolean | ArrowTypeOuter;
52
- /**
53
- * @private Get trigger DOM node.
54
- * Used for some component is function component which can not access by `findDOMNode`
55
- */
56
- getTriggerDOMNode?: (node: React.ReactInstance) => HTMLElement;
57
56
  }
58
57
  export declare function generateTrigger(PortalComponent?: React.ComponentType<any>): React.ForwardRefExoticComponent<TriggerProps & React.RefAttributes<TriggerRef>>;
59
58
  declare const _default: React.ForwardRefExoticComponent<TriggerProps & React.RefAttributes<TriggerRef>>;
package/lib/index.js CHANGED
@@ -16,7 +16,6 @@ var _useLayoutEffect = _interopRequireDefault(require("@rc-component/util/lib/ho
16
16
  var _isMobile = _interopRequireDefault(require("@rc-component/util/lib/isMobile"));
17
17
  var React = _interopRequireWildcard(require("react"));
18
18
  var _Popup = _interopRequireDefault(require("./Popup"));
19
- var _TriggerWrapper = _interopRequireDefault(require("./TriggerWrapper"));
20
19
  var _context = _interopRequireDefault(require("./context"));
21
20
  var _useAction = _interopRequireDefault(require("./hooks/useAction"));
22
21
  var _useAlign = _interopRequireDefault(require("./hooks/useAlign"));
@@ -44,6 +43,8 @@ function generateTrigger(PortalComponent = _portal.default) {
44
43
  // Open
45
44
  popupVisible,
46
45
  defaultPopupVisible,
46
+ onOpenChange,
47
+ afterOpenChange,
47
48
  onPopupVisibleChange,
48
49
  afterPopupVisibleChange,
49
50
  // Delay
@@ -77,8 +78,6 @@ function generateTrigger(PortalComponent = _portal.default) {
77
78
  // Motion
78
79
  popupMotion,
79
80
  maskMotion,
80
- // Private
81
- getTriggerDOMNode,
82
81
  ...restProps
83
82
  } = props;
84
83
  const mergedAutoDestroy = autoDestroy || false;
@@ -164,12 +163,13 @@ function generateTrigger(PortalComponent = _portal.default) {
164
163
  // Use `lastTriggerRef` to record last open type
165
164
  if ((lastTriggerRef.current[lastTriggerRef.current.length - 1] ?? mergedOpen) !== nextOpen) {
166
165
  lastTriggerRef.current.push(nextOpen);
166
+ onOpenChange?.(nextOpen);
167
167
  onPopupVisibleChange?.(nextOpen);
168
168
  }
169
169
  });
170
170
 
171
171
  // Trigger for delay
172
- const delayRef = React.useRef();
172
+ const delayRef = React.useRef(null);
173
173
  const clearDelay = () => {
174
174
  clearTimeout(delayRef.current);
175
175
  };
@@ -255,6 +255,7 @@ function generateTrigger(PortalComponent = _portal.default) {
255
255
  const onVisibleChanged = visible => {
256
256
  setInMotion(false);
257
257
  onAlign();
258
+ afterOpenChange?.(visible);
258
259
  afterPopupVisibleChange?.(visible);
259
260
  };
260
261
 
@@ -380,12 +381,6 @@ function generateTrigger(PortalComponent = _portal.default) {
380
381
  };
381
382
  }
382
383
  });
383
-
384
- // Child Node
385
- const triggerNode = /*#__PURE__*/React.cloneElement(child, {
386
- ...mergedChildrenProps,
387
- ...passedProps
388
- });
389
384
  const arrowPos = {
390
385
  x: arrowX,
391
386
  y: arrowY
@@ -395,14 +390,18 @@ function generateTrigger(PortalComponent = _portal.default) {
395
390
  ...(arrow !== true ? arrow : {})
396
391
  } : null;
397
392
 
393
+ // Child Node
394
+ const triggerNode = /*#__PURE__*/React.cloneElement(child, {
395
+ ...mergedChildrenProps,
396
+ ...passedProps
397
+ });
398
+
398
399
  // Render
399
400
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_resizeObserver.default, {
400
401
  disabled: !mergedOpen,
401
402
  ref: setTargetRef,
402
403
  onResize: onTargetResize
403
- }, /*#__PURE__*/React.createElement(_TriggerWrapper.default, {
404
- getTriggerDOMNode: getTriggerDOMNode
405
- }, triggerNode)), /*#__PURE__*/React.createElement(_context.default.Provider, {
404
+ }, triggerNode), /*#__PURE__*/React.createElement(_context.default.Provider, {
406
405
  value: context
407
406
  }, /*#__PURE__*/React.createElement(_Popup.default, {
408
407
  portal: PortalComponent,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rc-component/trigger",
3
- "version": "3.1.0",
3
+ "version": "3.3.0",
4
4
  "description": "base abstract trigger component for react",
5
5
  "engines": {
6
6
  "node": ">=8.x"
@@ -40,6 +40,13 @@
40
40
  "coverage": "rc-test --coverage",
41
41
  "now-build": "npm run build"
42
42
  },
43
+ "dependencies": {
44
+ "@rc-component/motion": "^1.1.4",
45
+ "@rc-component/portal": "^2.0.0",
46
+ "@rc-component/resize-observer": "^1.0.0",
47
+ "@rc-component/util": "^1.2.1",
48
+ "classnames": "^2.3.2"
49
+ },
43
50
  "devDependencies": {
44
51
  "@rc-component/father-plugin": "^2.0.0",
45
52
  "@rc-component/np": "^1.0.3",
@@ -48,8 +55,8 @@
48
55
  "@types/classnames": "^2.2.10",
49
56
  "@types/jest": "^29.5.2",
50
57
  "@types/node": "^22.0.2",
51
- "@types/react": "^18.0.0",
52
- "@types/react-dom": "^18.0.0",
58
+ "@types/react": "^19.1.2",
59
+ "@types/react-dom": "^19.1.2",
53
60
  "@umijs/fabric": "^4.0.1",
54
61
  "cross-env": "^7.0.1",
55
62
  "dumi": "^2.1.0",
@@ -58,20 +65,13 @@
58
65
  "less": "^4.2.0",
59
66
  "prettier": "^3.3.3",
60
67
  "rc-test": "^7.0.13",
61
- "react": "^18.0.0",
62
- "react-dom": "^18.0.0",
68
+ "react": "^19.1.0",
69
+ "react-dom": "^19.1.0",
63
70
  "regenerator-runtime": "^0.14.0",
64
71
  "typescript": "^5.1.6"
65
72
  },
66
- "dependencies": {
67
- "@rc-component/motion": "^1.1.4",
68
- "@rc-component/portal": "^2.0.0",
69
- "@rc-component/resize-observer": "^1.0.0",
70
- "@rc-component/util": "^1.2.1",
71
- "classnames": "^2.3.2"
72
- },
73
73
  "peerDependencies": {
74
- "react": ">=16.9.0",
75
- "react-dom": ">=16.9.0"
74
+ "react": ">=18.0.0",
75
+ "react-dom": ">=18.0.0"
76
76
  }
77
- }
77
+ }
@@ -1,8 +0,0 @@
1
- import * as React from 'react';
2
- import type { TriggerProps } from '.';
3
- export interface TriggerWrapperProps {
4
- getTriggerDOMNode?: TriggerProps['getTriggerDOMNode'];
5
- children: React.ReactElement;
6
- }
7
- declare const TriggerWrapper: React.ForwardRefExoticComponent<TriggerWrapperProps & React.RefAttributes<HTMLElement>>;
8
- export default TriggerWrapper;
@@ -1,22 +0,0 @@
1
- import { fillRef, getNodeRef, supportRef, useComposeRef } from "@rc-component/util/es/ref";
2
- import * as React from 'react';
3
- const TriggerWrapper = /*#__PURE__*/React.forwardRef((props, ref) => {
4
- const {
5
- children,
6
- getTriggerDOMNode
7
- } = props;
8
- const canUseRef = supportRef(children);
9
-
10
- // When use `getTriggerDOMNode`, we should do additional work to get the real dom
11
- const setRef = React.useCallback(node => {
12
- fillRef(ref, getTriggerDOMNode ? getTriggerDOMNode(node) : node);
13
- }, [getTriggerDOMNode]);
14
- const mergedRef = useComposeRef(setRef, getNodeRef(children));
15
- return canUseRef ? /*#__PURE__*/React.cloneElement(children, {
16
- ref: mergedRef
17
- }) : children;
18
- });
19
- if (process.env.NODE_ENV !== 'production') {
20
- TriggerWrapper.displayName = 'TriggerWrapper';
21
- }
22
- export default TriggerWrapper;
@@ -1,8 +0,0 @@
1
- import * as React from 'react';
2
- import type { TriggerProps } from '.';
3
- export interface TriggerWrapperProps {
4
- getTriggerDOMNode?: TriggerProps['getTriggerDOMNode'];
5
- children: React.ReactElement;
6
- }
7
- declare const TriggerWrapper: React.ForwardRefExoticComponent<TriggerWrapperProps & React.RefAttributes<HTMLElement>>;
8
- export default TriggerWrapper;
@@ -1,30 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _ref = require("@rc-component/util/lib/ref");
8
- var React = _interopRequireWildcard(require("react"));
9
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
10
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
11
- const TriggerWrapper = /*#__PURE__*/React.forwardRef((props, ref) => {
12
- const {
13
- children,
14
- getTriggerDOMNode
15
- } = props;
16
- const canUseRef = (0, _ref.supportRef)(children);
17
-
18
- // When use `getTriggerDOMNode`, we should do additional work to get the real dom
19
- const setRef = React.useCallback(node => {
20
- (0, _ref.fillRef)(ref, getTriggerDOMNode ? getTriggerDOMNode(node) : node);
21
- }, [getTriggerDOMNode]);
22
- const mergedRef = (0, _ref.useComposeRef)(setRef, (0, _ref.getNodeRef)(children));
23
- return canUseRef ? /*#__PURE__*/React.cloneElement(children, {
24
- ref: mergedRef
25
- }) : children;
26
- });
27
- if (process.env.NODE_ENV !== 'production') {
28
- TriggerWrapper.displayName = 'TriggerWrapper';
29
- }
30
- var _default = exports.default = TriggerWrapper;