|
13 | 13 | import {AriaModalOverlayProps, DismissButton, Overlay, useIsSSR, useModalOverlay} from 'react-aria'; |
14 | 14 | import {ContextValue, Provider, RenderProps, SlotProps, useContextProps, useRenderProps} from './utils'; |
15 | 15 | import {DOMAttributes, forwardRefType, GlobalDOMAttributes, RefObject} from '@react-types/shared'; |
16 | | -import {filterDOMProps, mergeProps, mergeRefs, useEnterAnimation, useExitAnimation, useObjectRef, useViewportSize} from '@react-aria/utils'; |
| 16 | +import {filterDOMProps, isScrollable, mergeProps, mergeRefs, useEnterAnimation, useExitAnimation, useObjectRef, useViewportSize} from '@react-aria/utils'; |
17 | 17 | import {OverlayTriggerProps, OverlayTriggerState, useOverlayTriggerState} from 'react-stately'; |
18 | 18 | import {OverlayTriggerStateContext} from './Dialog'; |
19 | 19 | import React, {createContext, ForwardedRef, forwardRef, useContext, useMemo, useRef} from 'react'; |
@@ -171,10 +171,18 @@ function ModalOverlayInner({UNSTABLE_portalContainer, ...props}: ModalOverlayInn |
171 | 171 | }); |
172 | 172 |
|
173 | 173 | let viewport = useViewportSize(); |
| 174 | + let pageHeight: number | undefined = undefined; |
| 175 | + if (typeof document !== 'undefined') { |
| 176 | + let scrollingElement = isScrollable(document.body) ? document.body : document.scrollingElement || document.documentElement; |
| 177 | + // Prevent Firefox from adding scrollbars when the page has a fractional height. |
| 178 | + let fractionalHeightDifference = scrollingElement.getBoundingClientRect().height % 1; |
| 179 | + pageHeight = scrollingElement.scrollHeight - fractionalHeightDifference; |
| 180 | + } |
| 181 | + |
174 | 182 | let style = { |
175 | 183 | ...renderProps.style, |
176 | 184 | '--visual-viewport-height': viewport.height + 'px', |
177 | | - '--page-height': typeof document !== 'undefined' ? document.body.getBoundingClientRect().height + 'px' : undefined |
| 185 | + '--page-height': pageHeight !== undefined ? pageHeight + 'px' : undefined |
178 | 186 | }; |
179 | 187 |
|
180 | 188 | return ( |
|
0 commit comments