@@ -26,7 +26,12 @@ export interface ModalOverlayProps extends AriaModalOverlayProps, OverlayTrigger
26
26
/**
27
27
* Whether the modal is currently performing an exit animation.
28
28
*/
29
- isExiting ?: boolean
29
+ isExiting ?: boolean ,
30
+ /**
31
+ * The container element in which the overlay portal will be placed. This may have unknown behavior depending on where it is portalled to.
32
+ * @default document.body
33
+ */
34
+ UNSTABLE_portalContainer ?: Element
30
35
}
31
36
32
37
interface InternalModalContextValue {
@@ -72,6 +77,7 @@ function Modal(props: ModalOverlayProps, ref: ForwardedRef<HTMLDivElement>) {
72
77
children,
73
78
isEntering,
74
79
isExiting,
80
+ UNSTABLE_portalContainer,
75
81
...otherProps
76
82
} = props ;
77
83
@@ -83,7 +89,8 @@ function Modal(props: ModalOverlayProps, ref: ForwardedRef<HTMLDivElement>) {
83
89
defaultOpen = { defaultOpen }
84
90
onOpenChange = { onOpenChange }
85
91
isEntering = { isEntering }
86
- isExiting = { isExiting } >
92
+ isExiting = { isExiting }
93
+ UNSTABLE_portalContainer = { UNSTABLE_portalContainer } >
87
94
< ModalContent { ...otherProps } modalRef = { ref } >
88
95
{ children }
89
96
</ ModalContent >
@@ -136,7 +143,7 @@ function ModalOverlayWithForwardRef(props: ModalOverlayProps, ref: ForwardedRef<
136
143
*/
137
144
export const ModalOverlay = /*#__PURE__*/ ( forwardRef as forwardRefType ) ( ModalOverlayWithForwardRef ) ;
138
145
139
- function ModalOverlayInner ( props : ModalOverlayInnerProps ) {
146
+ function ModalOverlayInner ( { UNSTABLE_portalContainer , ... props } : ModalOverlayInnerProps ) {
140
147
let modalRef = props . modalRef ;
141
148
let { state} = props ;
142
149
let { modalProps, underlayProps} = useModalOverlay ( props , state , modalRef ) ;
@@ -159,7 +166,7 @@ function ModalOverlayInner(props: ModalOverlayInnerProps) {
159
166
} ;
160
167
161
168
return (
162
- < Overlay isExiting = { props . isExiting } >
169
+ < Overlay isExiting = { props . isExiting } portalContainer = { UNSTABLE_portalContainer } >
163
170
< div
164
171
{ ...mergeProps ( filterDOMProps ( props as any ) , underlayProps ) }
165
172
{ ...renderProps }
0 commit comments