({UNSTABLE_portalContainer, ...props}: ModalOverlayInnerProps)
| 225 | ); |
| 226 | |
| 227 | function ModalOverlayInner({UNSTABLE_portalContainer, ...props}: ModalOverlayInnerProps) { |
| 228 | let modalRef = props.modalRef; |
| 229 | let {state} = props; |
| 230 | let {modalProps, underlayProps} = useModalOverlay(props, state, modalRef); |
| 231 | |
| 232 | let entering = useEnterAnimation(props.overlayRef) || props.isEntering || false; |
| 233 | let renderProps = useRenderProps({ |
| 234 | ...props, |
| 235 | defaultClassName: 'react-aria-ModalOverlay', |
| 236 | values: { |
| 237 | isEntering: entering, |
| 238 | isExiting: props.isExiting, |
| 239 | state |
| 240 | } |
| 241 | }); |
| 242 | |
| 243 | let viewport = useViewportSize(); |
| 244 | let pageWidth: number | undefined = undefined; |
| 245 | let pageHeight: number | undefined = undefined; |
| 246 | if (typeof document !== 'undefined') { |
| 247 | let scrollingElement = isScrollable(document.body) |
| 248 | ? document.body |
| 249 | : document.scrollingElement || document.documentElement; |
| 250 | // Prevent Firefox from adding scrollbars when the page has a fractional width/height. |
| 251 | let fractionalWidthDifference = scrollingElement.getBoundingClientRect().width % 1; |
| 252 | let fractionalHeightDifference = scrollingElement.getBoundingClientRect().height % 1; |
| 253 | pageWidth = scrollingElement.scrollWidth - fractionalWidthDifference; |
| 254 | pageHeight = scrollingElement.scrollHeight - fractionalHeightDifference; |
| 255 | } |
| 256 | |
| 257 | let style = { |
| 258 | ...renderProps.style, |
| 259 | '--visual-viewport-width': viewport.width + 'px', |
| 260 | '--visual-viewport-height': viewport.height + 'px', |
| 261 | '--page-width': pageWidth !== undefined ? pageWidth + 'px' : undefined, |
| 262 | '--page-height': pageHeight !== undefined ? pageHeight + 'px' : undefined |
| 263 | }; |
| 264 | |
| 265 | return ( |
| 266 | <Overlay isExiting={props.isExiting} portalContainer={UNSTABLE_portalContainer}> |
| 267 | <dom.div |
| 268 | {...mergeProps(filterDOMProps(props, {global: true}), underlayProps)} |
| 269 | {...renderProps} |
| 270 | style={style} |
| 271 | ref={props.overlayRef} |
| 272 | data-entering={entering || undefined} |
| 273 | data-exiting={props.isExiting || undefined}> |
| 274 | <Provider |
| 275 | values={[ |
| 276 | [ |
| 277 | InternalModalContext, |
| 278 | {modalProps, modalRef, isExiting: props.isExiting, isDismissable: props.isDismissable} |
| 279 | ], |
| 280 | [OverlayTriggerStateContext, state] |
| 281 | ]}> |
| 282 | {renderProps.children} |
| 283 | </Provider> |
| 284 | </dom.div> |
nothing calls this directly
no test coverage detected