11import classNames from 'classnames' ;
22import type { CSSMotionProps } from '@rc-component/motion' ;
33import CSSMotion from '@rc-component/motion' ;
4- import ResizeObserver from '@rc-component/resize-observer' ;
4+ import ResizeObserver , {
5+ type ResizeObserverProps ,
6+ } from '@rc-component/resize-observer' ;
57import useLayoutEffect from '@rc-component/util/lib/hooks/useLayoutEffect' ;
68import { composeRef } from '@rc-component/util/lib/ref' ;
79import * as React from 'react' ;
@@ -11,6 +13,7 @@ import Arrow from './Arrow';
1113import Mask from './Mask' ;
1214import PopupContent from './PopupContent' ;
1315import useOffsetStyle from '../hooks/useOffsetStyle' ;
16+ import { useEvent } from '@rc-component/util' ;
1417
1518export interface MobileConfig {
1619 mask ?: boolean ;
@@ -75,6 +78,9 @@ export interface PopupProps {
7578 targetWidth ?: number ;
7679 targetHeight ?: number ;
7780
81+ // Resize
82+ onResize ?: ResizeObserverProps [ 'onResize' ] ;
83+
7884 // Mobile
7985 mobile ?: MobileConfig ;
8086}
@@ -134,6 +140,9 @@ const Popup = React.forwardRef<HTMLDivElement, PopupProps>((props, ref) => {
134140 onAlign,
135141 onPrepare,
136142
143+ // Resize
144+ onResize,
145+
137146 stretch,
138147 targetWidth,
139148 targetHeight,
@@ -176,6 +185,12 @@ const Popup = React.forwardRef<HTMLDivElement, PopupProps>((props, ref) => {
176185 }
177186 } , [ show , getPopupContainerNeedParams , target ] ) ;
178187
188+ // ========================= Resize =========================
189+ const onInternalResize : ResizeObserverProps [ 'onResize' ] = useEvent ( ( size ) => {
190+ onResize ?.( size ) ;
191+ onAlign ( ) ;
192+ } ) ;
193+
179194 // ========================= Styles =========================
180195 const offsetStyle = useOffsetStyle (
181196 isMobile ,
@@ -226,7 +241,7 @@ const Popup = React.forwardRef<HTMLDivElement, PopupProps>((props, ref) => {
226241 motion = { mergedMaskMotion }
227242 mobile = { isMobile }
228243 />
229- < ResizeObserver onResize = { onAlign } disabled = { ! open } >
244+ < ResizeObserver onResize = { onInternalResize } disabled = { ! open } >
230245 { ( resizeObserverRef ) => {
231246 return (
232247 < CSSMotion
0 commit comments