@@ -15,12 +15,13 @@ import type { DrawerClassNames, DrawerStyles } from './inter';
1515export type Placement = 'left' | 'top' | 'right' | 'bottom' ;
1616
1717export interface DrawerProps
18- extends Omit < DrawerPopupProps , 'prefixCls' | 'inline' | 'scrollLocker' > ,
18+ extends
19+ Omit < DrawerPopupProps , 'prefixCls' | 'inline' | 'scrollLocker' > ,
1920 DrawerPanelEvents ,
2021 DrawerPanelAccessibility {
2122 prefixCls ?: string ;
2223 open ?: boolean ;
23- onClose ?: ( e : React . MouseEvent | React . KeyboardEvent ) => void ;
24+ onClose ?: ( e : React . MouseEvent | React . KeyboardEvent | KeyboardEvent ) => void ;
2425 destroyOnHidden ?: boolean ;
2526 getContainer ?: PortalProps [ 'getContainer' ] ;
2627 panelRef ?: React . Ref < HTMLDivElement > ;
@@ -73,6 +74,7 @@ const Drawer: React.FC<DrawerProps> = props => {
7374 onClick,
7475 onKeyDown,
7576 onKeyUp,
77+ onClose,
7678 resizable,
7779 defaultSize,
7880
@@ -159,13 +161,21 @@ const Drawer: React.FC<DrawerProps> = props => {
159161 ...eventHandlers ,
160162 } ;
161163
164+ const onEsc : PortalProps [ 'onEsc' ] = ( { top, event } ) => {
165+ if ( top && keyboard ) {
166+ event . stopPropagation ( ) ;
167+ onClose ?.( event ) ;
168+ }
169+ } ;
170+
162171 return (
163172 < RefContext . Provider value = { refContext } >
164173 < Portal
165174 open = { mergedOpen || forceRender || animatedVisible }
166175 autoDestroy = { false }
167176 getContainer = { getContainer }
168177 autoLock = { mask && ( mergedOpen || animatedVisible ) }
178+ onEsc = { onEsc }
169179 >
170180 < DrawerPopup { ...drawerPopupProps } />
171181 </ Portal >
0 commit comments