@@ -10,6 +10,8 @@ import useLayoutEffect from 'rc-util/lib/hooks/useLayoutEffect';
1010import isMobile from 'rc-util/lib/isMobile' ;
1111import * as React from 'react' ;
1212import { flushSync } from 'react-dom' ;
13+ import Popup from './Popup' ;
14+ import TriggerWrapper from './TriggerWrapper' ;
1315import type { TriggerContextProps } from './context' ;
1416import TriggerContext from './context' ;
1517import useAction from './hooks/useAction' ;
@@ -25,18 +27,17 @@ import type {
2527 BuildInPlacements ,
2628 TransitionNameType ,
2729} from './interface' ;
28- import Popup from './Popup' ;
29- import TriggerWrapper from './TriggerWrapper' ;
3030import { getAlignPopupClassName , getMotion } from './util' ;
3131
3232export type {
33- BuildInPlacements ,
34- AlignType ,
3533 ActionType ,
34+ AlignType ,
3635 ArrowTypeOuter as ArrowType ,
36+ BuildInPlacements ,
3737} ;
3838
3939export interface TriggerRef {
40+ nativeElement : HTMLElement ;
4041 forceAlign : VoidFunction ;
4142}
4243
@@ -251,9 +252,13 @@ export function generateTrigger(
251252 // Use state to control here since `useRef` update not trigger render
252253 const [ targetEle , setTargetEle ] = React . useState < HTMLElement > ( null ) ;
253254
255+ // Used for forwardRef target. Not use internal
256+ const externalForwardRef = React . useRef < HTMLElement > ( null ) ;
257+
254258 const setTargetRef = useEvent ( ( node : HTMLElement ) => {
255259 if ( isDOM ( node ) && targetEle !== node ) {
256260 setTargetEle ( node ) ;
261+ externalForwardRef . current = node ;
257262 }
258263 } ) ;
259264
@@ -448,7 +453,9 @@ export function generateTrigger(
448453 alignPoint ,
449454 ] ) ;
450455
456+ // ============================ Refs ============================
451457 React . useImperativeHandle ( ref , ( ) => ( {
458+ nativeElement : externalForwardRef . current ,
452459 forceAlign : triggerAlign ,
453460 } ) ) ;
454461
0 commit comments